stackpress
Version:
Incept is a content management framework.
74 lines (73 loc) • 3.01 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = generate;
const ts_morph_1 = require("ts-morph");
const Registry_js_1 = __importDefault(require("../../schema/Registry.js"));
const config_js_1 = __importDefault(require("./config.js"));
const package_js_1 = __importDefault(require("./package.js"));
function generate(props) {
const { cli, schema, project } = props;
const registry = new Registry_js_1.default(schema);
(0, config_js_1.default)(project, schema, registry, cli.server);
(0, package_js_1.default)(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: ts_morph_1.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')}
}`
}]
});
}