UNPKG

stackpress

Version:

Incept is a content management framework.

68 lines (67 loc) 2.69 kB
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')} }` }] }); }