leds-spark-lib
Version:
Biblioteca de geração de código
83 lines (80 loc) • 3.13 kB
JavaScript
import { createPath } from "../../../../util/generator-utils.js";
import { generate as generateAPI } from "./api/generate.js";
import { generate as generateControllers } from "./controllers/generate.js";
import { generate as generateRoutes } from "./routes/generate.js";
import { generate as generateTypes } from "./types/generate.js";
import { generate as generateViews } from "./views/generate.js";
import fs from "fs";
import { expandToString } from "../../../../util/template-string.js";
import path from "path";
export function generate(project_abstraction, target_folder) {
const classList = [];
for (const pkg of project_abstraction.getCoresPackages()) {
for (const clazz of pkg.getPackageLevelClasses()) {
classList.push(clazz);
}
}
fs.writeFileSync(path.join(target_folder, 'index.ts'), generateModulesIndex(classList));
for (const cls of classList) {
const folder = createPath(target_folder, `${cls.getName()}`);
fs.mkdirSync(folder, { recursive: true });
generateModule(project_abstraction, cls, folder);
}
}
function generateModulesIndex(clsList) {
return expandToString `
import { type RouteRecordRaw } from 'vue-router'
${generateImportClass(clsList)}
export const routes: RouteRecordRaw[] = [
${generateExportClass(clsList)}
]
`;
}
function generateImportClass(clsList) {
let str = "";
for (const cls of clsList) {
str = str.concat(`import { routes as ${cls.getName().toLowerCase()}Route } from './${cls.getName()}'\n`);
}
return str;
}
function generateExportClass(clsList) {
let str = "";
for (const cls of clsList) {
str = str.concat(` ...${cls.getName().toLowerCase()}Route,\n`);
}
return str;
}
function generateModule(project_abstraction, cls, target_folder) {
fs.writeFileSync(path.join(target_folder, 'index.ts'), generateModIndex(cls));
const api_folder = createPath(target_folder, "api");
const controllers_folder = createPath(target_folder, "controllers");
const routes_folder = createPath(target_folder, "routes");
const types_folder = createPath(target_folder, "types");
const views_folder = createPath(target_folder, "views");
fs.mkdirSync(api_folder, { recursive: true });
fs.mkdirSync(controllers_folder, { recursive: true });
fs.mkdirSync(routes_folder, { recursive: true });
fs.mkdirSync(types_folder, { recursive: true });
fs.mkdirSync(views_folder, { recursive: true });
generateAPI(project_abstraction, cls, api_folder);
generateControllers(project_abstraction, cls, controllers_folder);
generateRoutes(project_abstraction, cls, routes_folder);
generateTypes(project_abstraction, cls, types_folder);
generateViews(project_abstraction, cls, views_folder);
}
function generateModIndex(cls) {
return expandToString `
import { type RouteRecordRaw } from 'vue-router'
import { routes as _routes } from './routes'
export const routes: RouteRecordRaw[] = [
{
path: '/${cls.getName()}',
children: _routes,
meta: {
requiresAuth: true
}
}
]
`;
}
//# sourceMappingURL=generate.js.map