stackpress
Version:
Incept is a content management framework.
113 lines (111 loc) • 3.73 kB
JavaScript
export default function generate(directory, registry) {
for (const model of registry.model.values()) {
const ids = model.ids.map(column => `:${column.name}`).join('/');
const file = `${model.name}/admin/routes.ts`;
const source = directory.createSourceFile(file, '', { overwrite: true });
source.addImportDeclaration({
isTypeOnly: true,
moduleSpecifier: '@stackpress/ingest/Server',
defaultImport: 'Server'
});
source.addFunction({
isDefaultExport: true,
name: 'routes',
parameters: [
{ name: 'server', type: 'Server' }
],
statements: `
const root = server.config.path('admin.root', '/admin');
server.import.all(
\`\${root}/${model.dash}/create\`,
() => import('./pages/create.js')
);
server.import.all(
\`\${root}/${model.dash}/detail/${ids}\`,
() => import('./pages/detail.js')
);
server.import.all(
\`\${root}/${model.dash}/export\`,
() => import('./pages/export.js')
);
server.import.all(
\`\${root}/${model.dash}/import\`,
() => import('./pages/import.js')
);
server.import.all(
\`\${root}/${model.dash}/remove/${ids}\`,
() => import('./pages/remove.js')
);
server.import.all(
\`\${root}/${model.dash}/restore/${ids}\`,
() => import('./pages/restore.js')
);
server.import.all(
\`\${root}/${model.dash}/search\`,
() => import('./pages/search.js')
);
server.import.all(
\`\${root}/${model.dash}/update/${ids}\`,
() => import('./pages/update.js')
);
const module = server.config.path<string>('client.module');
if (module) {
server.view.all(
\`\${root}/${model.dash}/create\`,
\`\${module}/${model.name}/admin/views/create\`,
-100
);
server.view.all(
\`\${root}/${model.dash}/detail/${ids}\`,
\`\${module}/${model.name}/admin/views/detail\`,
-100
);
server.view.all(
\`\${root}/${model.dash}/remove/${ids}\`,
\`\${module}/${model.name}/admin/views/remove\`,
-100
);
server.view.all(
\`\${root}/${model.dash}/restore/${ids}\`,
\`\${module}/${model.name}/admin/views/restore\`,
-100
);
server.view.all(
\`\${root}/${model.dash}/search\`,
\`\${module}/${model.name}/admin/views/search\`,
-100
);
server.view.all(
\`\${root}/${model.dash}/update/${ids}\`,
\`\${module}/${model.name}/admin/views/update\`,
-100
);
}
`.trim()
});
}
const source = directory.createSourceFile('admin.ts', '', {
overwrite: true
});
source.addImportDeclaration({
moduleSpecifier: '@stackpress/ingest/Server',
defaultImport: 'Server'
});
for (const model of registry.model.values()) {
source.addImportDeclaration({
moduleSpecifier: `./${model.name}/admin/routes.js`,
defaultImport: `${model.camel}Routes`
});
}
source.addFunction({
isDefaultExport: true,
name: 'admin',
parameters: [
{ name: 'server', type: 'Server' }
],
statements: `
${Array.from(registry.model.values()).map(model => `${model.camel}Routes(server);`).join('\n')}
`.trim()
});
}
;