UNPKG

@boostercloud/cli

Version:

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

85 lines (84 loc) 3.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@oclif/core"); const base_command_1 = require("../../common/base-command"); const script_1 = require("../../common/script"); const brand_1 = require("../../common/brand"); const target_1 = require("../../services/generator/target"); const path = require("path"); const generator_1 = require("../../services/generator"); const project_checker_1 = require("../../services/project-checker"); const filenames_1 = require("../../common/filenames"); class ReadModel extends base_command_1.default { async run() { var _a, _b; const { args, flags } = await this.parse(ReadModel); try { const fields = (_a = flags.fields) !== null && _a !== void 0 ? _a : []; const projections = (_b = flags.projects) !== null && _b !== void 0 ? _b : []; if (!args.readModelName) throw "You haven't provided a read model name, but it is required, run with --help for usage"; return run(args.readModelName, fields, projections); } catch (error) { console.error(error); } } } ReadModel.description = 'create a new read model'; ReadModel.flags = { help: core_1.Flags.help({ char: 'h' }), fields: core_1.Flags.string({ char: 'f', description: 'fields that this read model will contain', multiple: true, }), projects: core_1.Flags.string({ char: 'p', description: 'entities that this read model will project to build its state', multiple: true, }), }; ReadModel.args = { readModelName: core_1.Args.string(), }; exports.default = ReadModel; const run = async (name, rawFields, rawProjections) => script_1.Script.init(`boost ${brand_1.default.energize('new:read-model')} 🚧`, (0, target_1.joinParsers)((0, target_1.parseName)(name), (0, target_1.parseFields)(rawFields), (0, target_1.parseProjections)(rawProjections))) .step('Verifying project', project_checker_1.checkCurrentDirIsABoosterProject) .step('Creating new read model', generateReadModel) .info('Read model generated!') .done(); function generateImports(info) { const eventsImports = info.projections.map((projection) => { const fileName = (0, filenames_1.classNameToFileName)(projection.entityName); return { packagePath: `../entities/${fileName}`, commaSeparatedComponents: projection.entityName, }; }); const coreComponents = ['ReadModel']; if (info.projections.length > 0) { coreComponents.push('Projects'); } return [ { packagePath: '@boostercloud/framework-core', commaSeparatedComponents: coreComponents.join(', '), }, { packagePath: '@boostercloud/framework-types', commaSeparatedComponents: info.projections.length > 0 ? 'UUID, ProjectionResult' : 'UUID', }, ...eventsImports, ]; } const generateReadModel = (info) => (0, generator_1.generate)({ name: info.name, extension: '.ts', placementDir: path.join('src', 'read-models'), template: (0, generator_1.template)('read-model'), info: { imports: generateImports(info), ...info, }, });