UNPKG

stackpress

Version:

Incept is a content management framework.

403 lines (402 loc) 13.7 kB
export default function generate(directory, registry) { for (const model of registry.model.values()) { batch(model, directory); create(model, directory); detail(model, directory); get(model, directory); remove(model, directory); restore(model, directory); search(model, directory); update(model, directory); upsert(model, directory); const source = directory.createSourceFile(`${model.name}/actions/index.ts`, '', { overwrite: true }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '../types', namedImports: [ `${model.title}Extended` ] }); source.addImportDeclaration({ moduleSpecifier: '@stackpress/inquire/Engine', defaultImport: 'Engine' }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions', namedImports: ['Actions'] }); source.addImportDeclaration({ moduleSpecifier: `../config`, defaultImport: 'config' }); source.addFunction({ isDefaultExport: true, name: 'actions', parameters: [ { name: 'engine', type: 'Engine' }, { name: 'seed', type: 'string', hasQuestionToken: true } ], statements: `return new Actions<${model.title}Extended>(config, engine, seed);` }); source.addImportDeclaration({ moduleSpecifier: './batch', defaultImport: 'batch' }); source.addImportDeclaration({ moduleSpecifier: './create', defaultImport: 'create' }); source.addImportDeclaration({ moduleSpecifier: './detail', defaultImport: 'detail' }); source.addImportDeclaration({ moduleSpecifier: './get', defaultImport: 'get' }); source.addImportDeclaration({ moduleSpecifier: './remove', defaultImport: 'remove' }); source.addImportDeclaration({ moduleSpecifier: './restore', defaultImport: 'restore' }); source.addImportDeclaration({ moduleSpecifier: './search', defaultImport: 'search' }); source.addImportDeclaration({ moduleSpecifier: './update', defaultImport: 'update' }); source.addImportDeclaration({ moduleSpecifier: './upsert', defaultImport: 'upsert' }); source.addExportDeclaration({ namedExports: [ 'batch', 'create', 'detail', 'get', 'remove', 'restore', 'search', 'update', 'upsert' ] }); } } ; export function batch(model, directory) { const source = directory.createSourceFile(`${model.name}/actions/batch.ts`, '', { overwrite: true }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '@stackpress/inquire/Engine', defaultImport: 'Engine' }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '../types', namedImports: [model.title] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/batch', defaultImport: 'batch' }); source.addImportDeclaration({ moduleSpecifier: `../config`, defaultImport: 'config' }); source.addFunction({ name: `${model.title}BatchAction`, isDefaultExport: true, parameters: [ { name: 'engine', type: 'Engine' }, { name: 'rows', type: `${model.title}[]` }, { name: 'seed', type: 'string', hasQuestionToken: true } ], statements: (`return batch<${model.title}>(config, engine, rows, seed);`) }); } ; export function create(model, directory) { const source = directory.createSourceFile(`${model.name}/actions/create.ts`, '', { overwrite: true }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '@stackpress/lib/types', namedImports: ['NestedObject'] }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '@stackpress/inquire/Engine', defaultImport: 'Engine' }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '../types', namedImports: [model.title] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/create', defaultImport: 'create' }); source.addImportDeclaration({ moduleSpecifier: `../config`, defaultImport: 'config' }); source.addFunction({ name: `${model.title}CreateAction`, isDefaultExport: true, parameters: [ { name: 'engine', type: 'Engine' }, { name: 'input', type: 'NestedObject' }, { name: 'seed', type: 'string', hasQuestionToken: true } ], statements: (`return create<${model.title}>(config, engine, input, seed);`) }); } ; export function detail(model, directory) { const source = directory.createSourceFile(`${model.name}/actions/detail.ts`, '', { overwrite: true }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '@stackpress/inquire/Engine', defaultImport: 'Engine' }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '../types', namedImports: [`${model.title}Extended`] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/detail', defaultImport: 'detail' }); source.addImportDeclaration({ moduleSpecifier: `../config`, defaultImport: 'config' }); source.addFunction({ name: `${model.title}DetailAction`, isDefaultExport: true, parameters: [ { name: 'engine', type: 'Engine' }, { name: 'ids', type: 'Record<string, string|number>' }, { name: 'columns', type: 'string[]', hasQuestionToken: true }, { name: 'seed', type: 'string', hasQuestionToken: true } ], statements: (`return detail<${model.title}Extended>(config, engine, ids, columns);`) }); } ; export function get(model, directory) { const source = directory.createSourceFile(`${model.name}/actions/get.ts`, '', { overwrite: true }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '@stackpress/inquire/Engine', defaultImport: 'Engine' }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '../types', namedImports: [`${model.title}Extended`] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/get', defaultImport: 'get' }); source.addImportDeclaration({ moduleSpecifier: `../config`, defaultImport: 'config' }); source.addFunction({ name: `${model.title}GetAction`, isDefaultExport: true, parameters: [ { name: 'engine', type: 'Engine' }, { name: 'key', type: 'string' }, { name: 'value', type: 'string|number' }, { name: 'columns', type: 'string[]', hasQuestionToken: true }, { name: 'seed', type: 'string', hasQuestionToken: true } ], statements: (`return get<${model.title}Extended>(config, engine, key, value, columns, seed);`) }); } ; export function remove(model, directory) { const source = directory.createSourceFile(`${model.name}/actions/remove.ts`, '', { overwrite: true }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '@stackpress/inquire/Engine', defaultImport: 'Engine' }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '../types', namedImports: [`${model.title}Extended`] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/remove', defaultImport: 'remove' }); source.addImportDeclaration({ moduleSpecifier: `../config`, defaultImport: 'config' }); source.addFunction({ name: `${model.title}RemoveAction`, isDefaultExport: true, parameters: [ { name: 'engine', type: 'Engine' }, { name: 'ids', type: 'Record<string, string|number>' } ], statements: (`return remove<${model.title}Extended>(config, engine, ids);`) }); } ; export function restore(model, directory) { const source = directory.createSourceFile(`${model.name}/actions/restore.ts`, '', { overwrite: true }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '@stackpress/inquire/Engine', defaultImport: 'Engine' }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '../types', namedImports: [`${model.title}Extended`] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/restore', defaultImport: 'restore' }); source.addImportDeclaration({ moduleSpecifier: `../config`, defaultImport: 'config' }); source.addFunction({ name: `${model.title}RestoreAction`, isDefaultExport: true, parameters: [ { name: 'engine', type: 'Engine' }, { name: 'ids', type: 'Record<string, string|number>' } ], statements: (`return restore<${model.title}Extended>(config, engine, ids);`) }); } ; export function search(model, directory) { const source = directory.createSourceFile(`${model.name}/actions/search.ts`, '', { overwrite: true }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: 'stackpress/types', namedImports: ['SearchParams'] }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '@stackpress/inquire/Engine', defaultImport: 'Engine' }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '../types', namedImports: [`${model.title}Extended`] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/search', defaultImport: 'search' }); source.addImportDeclaration({ moduleSpecifier: `../config`, defaultImport: 'config' }); source.addFunction({ name: `${model.title}SearchAction`, isDefaultExport: true, parameters: [ { name: 'engine', type: 'Engine' }, { name: 'params', type: 'SearchParams', initializer: '{}' }, { name: 'seed', type: 'string', hasQuestionToken: true } ], statements: (`return search<${model.title}Extended>(config, engine, params, seed);`) }); } ; export function update(model, directory) { const source = directory.createSourceFile(`${model.name}/actions/update.ts`, '', { overwrite: true }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '@stackpress/lib/types', namedImports: ['NestedObject'] }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '@stackpress/inquire/Engine', defaultImport: 'Engine' }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '../types', namedImports: [`${model.title}Extended`] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/update', defaultImport: 'update' }); source.addImportDeclaration({ moduleSpecifier: `../config`, defaultImport: 'config' }); source.addFunction({ name: `${model.title}UpdateAction`, isDefaultExport: true, parameters: [ { name: 'engine', type: 'Engine' }, { name: 'ids', type: 'Record<string, string|number>' }, { name: 'input', type: 'NestedObject' }, { name: 'seed', type: 'string', hasQuestionToken: true } ], statements: (`return update<${model.title}Extended>(config, engine, ids, input, seed);`) }); } ; export function upsert(model, directory) { const source = directory.createSourceFile(`${model.name}/actions/upsert.ts`, '', { overwrite: true }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '@stackpress/lib/types', namedImports: ['NestedObject'] }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '@stackpress/inquire/Engine', defaultImport: 'Engine' }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '../types', namedImports: [`${model.title}Extended`] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/upsert', defaultImport: 'upsert' }); source.addImportDeclaration({ moduleSpecifier: `../config`, defaultImport: 'config' }); source.addFunction({ name: `${model.title}CreateAction`, isDefaultExport: true, parameters: [ { name: 'engine', type: 'Engine' }, { name: 'input', type: 'NestedObject' }, { name: 'seed', type: 'string', hasQuestionToken: true } ], statements: (`return upsert<${model.title}Extended>(config, engine, input, seed);`) }); } ;