UNPKG

@boostercloud/cli

Version:

CLI of the Booster Framework, the next level of abstraction for cloud-native applications

73 lines (72 loc) 2.31 kB
"use strict"; 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 */`], }; }