UNPKG

stackpress

Version:

Incept is a content management framework.

119 lines (117 loc) 4.04 kB
export default function generate(directory, registry) { for (const model of registry.model.values()) { event('batch', model, directory); event('create', model, directory); event('detail', model, directory); event('get', model, directory); event('purge', model, directory); event('remove', model, directory); event('restore', model, directory); event('search', model, directory); event('update', model, directory); event('upsert', model, directory); const source = directory.createSourceFile(`${model.name}/events/index.ts`, '', { overwrite: true }); source.addImportDeclaration({ moduleSpecifier: '@stackpress/ingest/Server', namedImports: ['server'] }); source.addImportDeclaration({ moduleSpecifier: './batch.js', defaultImport: 'batch' }); source.addImportDeclaration({ moduleSpecifier: './create.js', defaultImport: 'create' }); source.addImportDeclaration({ moduleSpecifier: './detail.js', defaultImport: 'detail' }); source.addImportDeclaration({ moduleSpecifier: './get.js', defaultImport: 'get' }); source.addImportDeclaration({ moduleSpecifier: './purge.js', defaultImport: 'purge' }); source.addImportDeclaration({ moduleSpecifier: './remove.js', defaultImport: 'remove' }); source.addImportDeclaration({ moduleSpecifier: './restore.js', defaultImport: 'restore' }); source.addImportDeclaration({ moduleSpecifier: './search.js', defaultImport: 'search' }); source.addImportDeclaration({ moduleSpecifier: './update.js', defaultImport: 'update' }); source.addImportDeclaration({ moduleSpecifier: './upsert.js', defaultImport: 'upsert' }); source.addStatements(` const router = server(); router.on('${model.dash}-batch', batch); router.on('${model.dash}-create', create); router.on('${model.dash}-detail', detail); router.on('${model.dash}-get', get); router.on('${model.dash}-purge', purge); router.on('${model.dash}-remove', remove); router.on('${model.dash}-restore', restore); router.on('${model.dash}-search', search); router.on('${model.dash}-update', update); router.on('${model.dash}-upsert', upsert); export default router; `); source.addExportDeclaration({ namedExports: [ 'batch', 'create', 'detail', 'get', 'purge', 'remove', 'restore', 'search', 'update', 'upsert' ] }); } } ; export function event(action, model, directory) { const lower = action.toLowerCase(); const title = action.charAt(0).toUpperCase() + action.slice(1); const source = directory.createSourceFile(`${model.name}/events/${lower}.ts`, '', { overwrite: true }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/server', namedImports: ['Request', 'Response', 'Server'] }); source.addImportDeclaration({ moduleSpecifier: `stackpress/sql/events/${lower}`, defaultImport: lower }); source.addImportDeclaration({ moduleSpecifier: '../config.js', defaultImport: 'config' }); source.addFunction({ name: `${model.title}${title}Event`, isAsync: true, isDefaultExport: true, parameters: [ { name: 'req', type: 'Request' }, { name: 'res', type: 'Response' }, { name: 'ctx', type: 'Server' } ], statements: (`return ${lower}(config)(req, res, ctx);`) }); } ;