UNPKG

stackpress

Version:

Incept is a content management framework.

415 lines (414 loc) 14.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = generate; exports.batch = batch; exports.create = create; exports.detail = detail; exports.get = get; exports.remove = remove; exports.restore = restore; exports.search = search; exports.update = update; exports.upsert = upsert; 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.js', namedImports: [ `${model.title}Extended` ] }); source.addImportDeclaration({ moduleSpecifier: '@stackpress/inquire/Engine', defaultImport: 'Engine' }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions', namedImports: ['Actions'] }); source.addImportDeclaration({ moduleSpecifier: '../config.js', 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.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: './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.addExportDeclaration({ namedExports: [ 'batch', 'create', 'detail', 'get', 'remove', 'restore', 'search', 'update', 'upsert' ] }); } } ; 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.js', namedImports: [model.title] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/batch', defaultImport: 'batch' }); source.addImportDeclaration({ moduleSpecifier: '../config.js', 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);`) }); } ; 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.js', namedImports: [model.title] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/create', defaultImport: 'create' }); source.addImportDeclaration({ moduleSpecifier: '../config.js', 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);`) }); } ; 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.js', namedImports: [`${model.title}Extended`] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/detail', defaultImport: 'detail' }); source.addImportDeclaration({ moduleSpecifier: '../config.js', 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);`) }); } ; 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.js', namedImports: [`${model.title}Extended`] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/get', defaultImport: 'get' }); source.addImportDeclaration({ moduleSpecifier: '../config.js', 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);`) }); } ; 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.js', namedImports: [`${model.title}Extended`] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/remove', defaultImport: 'remove' }); source.addImportDeclaration({ moduleSpecifier: '../config.js', 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);`) }); } ; 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.js', namedImports: [`${model.title}Extended`] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/restore', defaultImport: 'restore' }); source.addImportDeclaration({ moduleSpecifier: '../config.js', 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);`) }); } ; 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.js', namedImports: [`${model.title}Extended`] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/search', defaultImport: 'search' }); source.addImportDeclaration({ moduleSpecifier: '../config.js', 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);`) }); } ; 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.js', namedImports: [`${model.title}Extended`] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/update', defaultImport: 'update' }); source.addImportDeclaration({ moduleSpecifier: '../config.js', 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);`) }); } ; 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.js', namedImports: [`${model.title}Extended`] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/sql/actions/upsert', defaultImport: 'upsert' }); source.addImportDeclaration({ moduleSpecifier: '../config.js', 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);`) }); } ;