stackpress
Version:
Incept is a content management framework.
66 lines (65 loc) • 2.55 kB
JavaScript
import { VariableDeclarationKind } from 'ts-morph';
import Revisions from '../Revisions.js';
export default async function generate(directory, schema, registry, server) {
for (const model of registry.model.values()) {
const filepath = `${model.name}/config.ts`;
const source = directory.createSourceFile(filepath, '', { overwrite: true });
source.addImportDeclaration({
isTypeOnly: true,
moduleSpecifier: 'stackpress/Model',
defaultImport: 'Model'
});
source.addImportDeclaration({
moduleSpecifier: '../config.js',
defaultImport: 'registry'
});
source.addStatements(`const config = registry.model.get('${model.name}') as Model;`);
source.addStatements(`export default config;`);
}
for (const fieldset of registry.fieldset.values()) {
const filepath = `${fieldset.name}/config.ts`;
const source = directory.createSourceFile(filepath, '', { overwrite: true });
source.addImportDeclaration({
isTypeOnly: true,
moduleSpecifier: 'stackpress/Fieldset',
defaultImport: 'Fieldset'
});
source.addImportDeclaration({
moduleSpecifier: '../config.js',
defaultImport: 'registry'
});
source.addStatements(`const config = registry.fieldset.get('${fieldset.name}') as Fieldset;`);
source.addStatements(`export default config;`);
}
const revisions = server.config.path('client.revisions');
if (revisions) {
Revisions.insert(revisions, server.loader, schema);
}
const source = directory.createSourceFile('config.ts', '', { overwrite: true });
source.addImportDeclaration({
moduleSpecifier: '@stackpress/idea-parser',
namedImports: ['SchemaConfig']
});
source.addImportDeclaration({
moduleSpecifier: 'stackpress/Registry',
defaultImport: 'Registry'
});
source.addVariableStatement({
isExported: true,
declarationKind: VariableDeclarationKind.Const,
declarations: [{
name: 'config',
type: 'SchemaConfig',
initializer: JSON.stringify(schema, null, 2)
}]
});
source.addVariableStatement({
declarationKind: VariableDeclarationKind.Const,
declarations: [{
name: 'registry',
initializer: 'new Registry(config)'
}]
});
source.addStatements(`export default registry;`);
}
;