66 lines
1.9 KiB
TypeScript
66 lines
1.9 KiB
TypeScript
/**
|
|
* Arcádia Suite - Schema Module Loader
|
|
*
|
|
* Utilitário para registro dinâmico de schemas modulares.
|
|
* Quando o pipeline cria um novo schema em shared/schemas/,
|
|
* ele também adiciona a linha de export no index.ts.
|
|
*/
|
|
|
|
import * as fs from "fs";
|
|
import * as path from "path";
|
|
import { fileURLToPath } from "url";
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = path.dirname(__filename);
|
|
|
|
export function getRegisteredModules(): string[] {
|
|
const schemasDir = path.resolve(__dirname);
|
|
const files = fs.readdirSync(schemasDir);
|
|
return files
|
|
.filter(f => f.endsWith(".ts") && !f.startsWith("_") && f !== "index.ts" && f !== "loader.ts")
|
|
.map(f => f.replace(".ts", ""));
|
|
}
|
|
|
|
export function generateSchemaExports(): string {
|
|
const modules = getRegisteredModules();
|
|
if (modules.length === 0) return "// Nenhum módulo registrado ainda\n";
|
|
|
|
return modules
|
|
.map(mod => `export * from "./${mod}";`)
|
|
.join("\n") + "\n";
|
|
}
|
|
|
|
export async function registerModuleSchema(moduleName: string): Promise<boolean> {
|
|
const indexPath = path.resolve(__dirname, "index.ts");
|
|
let content = fs.readFileSync(indexPath, "utf-8");
|
|
|
|
const exportLine = `export * from "./${moduleName}";`;
|
|
if (content.includes(exportLine)) {
|
|
return true;
|
|
}
|
|
|
|
const marker = "// === MÓDULOS REGISTRADOS ===";
|
|
if (content.includes(marker)) {
|
|
content = content.replace(
|
|
marker + "\n",
|
|
marker + "\n" + exportLine + "\n"
|
|
);
|
|
} else {
|
|
content += "\n" + exportLine + "\n";
|
|
}
|
|
|
|
fs.writeFileSync(indexPath, content, "utf-8");
|
|
return true;
|
|
}
|
|
|
|
export async function unregisterModuleSchema(moduleName: string): Promise<boolean> {
|
|
const indexPath = path.resolve(__dirname, "index.ts");
|
|
let content = fs.readFileSync(indexPath, "utf-8");
|
|
|
|
const exportLine = `export * from "./${moduleName}";\n`;
|
|
content = content.replace(exportLine, "");
|
|
|
|
fs.writeFileSync(indexPath, content, "utf-8");
|
|
return true;
|
|
}
|