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