@boostercloud/cli
Version:
CLI of the Booster Framework, the next level of abstraction for cloud-native applications
73 lines (72 loc) • 2.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getResourceSourceFile = getResourceSourceFile;
exports.generateReducers = generateReducers;
exports.generateProjection = generateProjection;
const ts_morph_1 = require("ts-morph");
const filenames_1 = require("../common/filenames");
function getResourceSourceFile(name) {
const project = new ts_morph_1.Project({
tsConfigFilePath: './tsconfig.json',
manipulationSettings: {
quoteKind: ts_morph_1.QuoteKind.Single,
indentationText: ts_morph_1.IndentationText.TwoSpaces,
},
});
const sourceFileName = (0, filenames_1.fileNameWithExtension)(name);
return project.getSourceFileOrThrow(sourceFileName);
}
function generateReducers(entity, events) {
return events.map(({ eventName }) => {
return {
decorators: [
{
name: 'Reduces',
arguments: [eventName],
},
],
scope: ts_morph_1.Scope.Public,
isStatic: true,
name: `reduce${eventName}`,
returnType: entity,
parameters: [
{
name: 'event',
type: eventName,
},
{
name: `current${entity}`,
type: entity,
hasQuestionToken: true,
},
],
statements: [`return /* NEW ${entity} HERE */`],
};
});
}
function generateProjection(readModel, projection) {
return {
decorators: [
{
name: 'Projects',
arguments: [projection.entityName, `'${projection.entityId}'`],
},
],
scope: ts_morph_1.Scope.Public,
isStatic: true,
name: `project${projection.entityName}`,
parameters: [
{
name: 'entity',
type: projection.entityName,
},
{
name: `current${readModel}`,
type: readModel,
hasQuestionToken: true,
},
],
returnType: `ProjectionResult<${readModel}>`,
statements: [`return /* NEW ${readModel} HERE */`],
};
}