UNPKG

stackpress

Version:

Incept is a content management framework.

113 lines (111 loc) 3.73 kB
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() }); } ;