stackpress
Version:
Incept is a content management framework.
68 lines (67 loc) • 2.69 kB
JavaScript
import { VariableDeclarationKind } from 'ts-morph';
import Registry from '../../schema/Registry.js';
import generateConfig from './config.js';
import generatePackage from './package.js';
export default function generate(props) {
const { cli, schema, project } = props;
const registry = new Registry(schema);
generateConfig(project, schema, registry, cli.server);
generatePackage(project, schema, cli.server);
for (const model of registry.model.values()) {
const filepath = `${model.name}/index.ts`;
const source = project.getSourceFile(filepath)
|| project.createSourceFile(filepath, '', { overwrite: true });
source.addImportDeclaration({
moduleSpecifier: './config.js',
defaultImport: 'config'
});
source.addExportDeclaration({ namedExports: ['config'] });
}
for (const fieldset of registry.fieldset.values()) {
const filepath = `${fieldset.name}/index.ts`;
const source = project.getSourceFile(filepath)
|| project.createSourceFile(filepath, '', { overwrite: true });
source.addImportDeclaration({
moduleSpecifier: './config.js',
defaultImport: 'config'
});
source.addExportDeclaration({ namedExports: ['config'] });
}
const source = project.getSourceFile('index.ts')
|| project.createSourceFile('index.ts', '', { overwrite: true });
source.addImportDeclaration({
moduleSpecifier: './config.js',
defaultImport: 'registry',
namedImports: ['config']
});
for (const model of registry.model.values()) {
source.addImportDeclaration({
moduleSpecifier: `./${model.name}/index.js`,
defaultImport: `* as model${model.title}`
});
}
for (const fieldset of registry.fieldset.values()) {
source.addImportDeclaration({
moduleSpecifier: `./${fieldset.name}/index.js`,
defaultImport: `* as fieldset${fieldset.title}`
});
}
source.addExportDeclaration({
namedExports: ['config', 'registry']
});
source.addVariableStatement({
isExported: true,
declarationKind: VariableDeclarationKind.Const,
declarations: [{
name: 'model',
initializer: `{
${Array.from(registry.model.values()).map(model => `${model.camel}: model${model.title}`).join(',\n')}
}`
}, {
name: 'fieldset',
initializer: `{
${Array.from(registry.fieldset.values()).map(fieldset => `${fieldset.camel}: fieldset${fieldset.title}`).join(',\n')}
}`
}]
});
}