Files
AnimeTV-Backend/scripts/sync-routes.ts
2025-05-23 20:46:47 +07:00

52 lines
1.4 KiB
TypeScript

/**
* Dynamically aggregates Elysia sub-routes from modular directories into a central registry.
*
* @behavior
* 1. Scans `./src/modules` for valid Elysia modules
* 2. Generates imports and `.use()` calls for each module
* 3. Writes composed routes to `./src/routes.ts`
*
* @requirements
* - Module directories must contain an export named `[folderName]Module`
* (e.g., `userModule` for `/user` folder)
* - Modules must export an Elysia instance
*
* @outputfile ./src/routes.ts
* @examplegenerated
* ```ts
* import Elysia from "elysia";
* import { userModule } from './modules/user';
* import { authModule } from './modules/auth';
*
* const routes = new Elysia()
* .use(userModule)
* .use(authModule);
*
* export { routes };
* ```
*/
import { writeFileSync, readdirSync } from "fs";
import { join } from "path";
const modulesPath = "./src/modules";
const importLines: string[] = [];
const useLines: string[] = [];
for (const folder of readdirSync(modulesPath, { withFileTypes: true })) {
if (folder.isDirectory()) {
const varName = `${folder.name}Module`;
importLines.push(`import {${varName}} from './modules/${folder.name}';`);
useLines.push(`.use(${varName})`);
}
}
const content = `
import Elysia from "elysia";
${importLines.join("\n")}
const routes = new Elysia()
${useLines.join("\n")};
export { routes };
`;
writeFileSync(join(modulesPath, "../routes.ts"), content);