generate versioned typeinfo & remove modules path
This commit is contained in:
parent
a9e2298cf7
commit
db63f5639f
2 changed files with 48 additions and 24 deletions
|
@ -3,20 +3,8 @@ import path from "node:path";
|
||||||
|
|
||||||
import type { RouteData, dirData } from "./types";
|
import type { RouteData, dirData } from "./types";
|
||||||
|
|
||||||
function modulesPath() {
|
async function readSubdir(basePath: string, subdir: string): Promise<dirData[]> {
|
||||||
const modulesPath = import.meta.env.SECRET_MODULES_PATH;
|
const fullpath = path.join(basePath, subdir);
|
||||||
|
|
||||||
if (!modulesPath || modulesPath === "") {
|
|
||||||
throw new Error(
|
|
||||||
"Cannot generate types, missing SECRET_MODULES_PATH"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return modulesPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function readSubdir(subdir: string): Promise<dirData[]> {
|
|
||||||
const fullpath = path.join(modulesPath(), subdir);
|
|
||||||
const filenames = await fs.readdir(fullpath);
|
const filenames = await fs.readdir(fullpath);
|
||||||
|
|
||||||
const data = await Promise.all(
|
const data = await Promise.all(
|
||||||
|
@ -42,16 +30,14 @@ async function readSubdir(subdir: string): Promise<dirData[]> {
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function generateTypeData(): Promise<RouteData[]> {
|
async function generateTypeData(basePath: string): Promise<RouteData[]> {
|
||||||
const mainDir = modulesPath();
|
const subdirs = await fs.readdir(basePath, {
|
||||||
|
|
||||||
const subdirs = await fs.readdir(mainDir, {
|
|
||||||
withFileTypes: true,
|
withFileTypes: true,
|
||||||
});
|
});
|
||||||
const routes: RouteData[] = [];
|
const routes: RouteData[] = [];
|
||||||
|
|
||||||
for (const subdir of subdirs) {
|
for (const subdir of subdirs) {
|
||||||
const data = await readSubdir(subdir.name);
|
const data = await readSubdir(basePath, subdir.name);
|
||||||
const returnValue = data.map(entry => {
|
const returnValue = data.map(entry => {
|
||||||
return {
|
return {
|
||||||
type: entry.category,
|
type: entry.category,
|
||||||
|
@ -65,12 +51,40 @@ async function generateTypeData(): Promise<RouteData[]> {
|
||||||
return routes;
|
return routes;
|
||||||
}
|
}
|
||||||
|
|
||||||
let globalTypeData: Promise<RouteData[]>;
|
async function generateVersionsData(): Promise<VersionsData> {
|
||||||
|
const versionsPath = import.meta.env.VERSION_FILE_PATH;
|
||||||
|
|
||||||
export function getTypeData(): Promise<RouteData[]> {
|
if (!versionsPath || versionsPath === "") {
|
||||||
if (!globalTypeData) {
|
throw new Error(
|
||||||
globalTypeData = generateTypeData();
|
"Cannot generate types, missing VERSION_FILE_PATH"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return globalTypeData;
|
const content = await fs.readFile(versionsPath, "utf8");
|
||||||
|
const data = JSON.parse(content);
|
||||||
|
|
||||||
|
const versions = await Promise.all(data.versions.map(async d => ({
|
||||||
|
name: d.name,
|
||||||
|
modules: await generateTypeData(d.types),
|
||||||
|
})))
|
||||||
|
|
||||||
|
return {
|
||||||
|
versions,
|
||||||
|
default: data.default,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let globalVersionsData: Promise<VersionsData>;
|
||||||
|
|
||||||
|
export function getVersionsData(): Promise<VersionsData> {
|
||||||
|
if (!globalVersionsData) {
|
||||||
|
globalVersionsData = generateVersionsData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return globalVersionsData;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getTypeData(): RouteData[] {
|
||||||
|
const versions = await getVersionsData();
|
||||||
|
return versions.versions.find(v => v.name == versions.default).modules;
|
||||||
}
|
}
|
||||||
|
|
10
src/config/io/types.d.ts
vendored
10
src/config/io/types.d.ts
vendored
|
@ -88,6 +88,16 @@ export interface RouteData {
|
||||||
data: QuickshellData;
|
data: QuickshellData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface VersionData {
|
||||||
|
name: string;
|
||||||
|
modules: RouteData[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface VersionsData {
|
||||||
|
default: string;
|
||||||
|
versions: VersionData[];
|
||||||
|
}
|
||||||
|
|
||||||
export interface dirData {
|
export interface dirData {
|
||||||
fullpath: string;
|
fullpath: string;
|
||||||
filename: string;
|
filename: string;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue