stackpress
Version:
Incept is a content management framework.
119 lines (117 loc) • 4.04 kB
JavaScript
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);`)
});
}
;