UNPKG

@boostercloud/cli

Version:

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

51 lines (50 loc) 2.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@oclif/core"); const base_command_1 = require("../../common/base-command"); const target_1 = require("../../services/generator/target"); const script_1 = require("../../common/script"); const brand_1 = require("../../common/brand"); const project_checker_1 = require("../../services/project-checker"); const method_generator_1 = require("../../services/method-generator"); class Projection extends base_command_1.default { async run() { const { flags } = await this.parse(Projection); const readModel = flags['read-model']; const entity = flags.entity; return run(readModel, entity); } } Projection.description = 'add new projection to read model'; Projection.usage = 'projection --read-model ReadModel --entity Entity:id'; Projection.examples = [ '$ boost add:projection --read-model PostReadModel --entity Post:id', '$ boost add:projection --read-model CommentReadModel --entity Comment:id', ]; Projection.flags = { help: core_1.Flags.help({ char: 'h' }), 'read-model': core_1.Flags.string({ description: 'read-model name', required: true, multiple: false, dependsOn: ['entity'], }), entity: core_1.Flags.string({ description: 'an entity name', required: true, multiple: false, dependsOn: ['read-model'], }), }; exports.default = Projection; const run = async (rawReadModel, rawProjection) => script_1.Script.init(`boost ${brand_1.default.energize('add:projection')} 🚧`, (0, target_1.joinParsers)((0, target_1.parseName)(rawReadModel), (0, target_1.parseProjectionField)(rawProjection))) .step('Verifying project', project_checker_1.checkCurrentDirIsABoosterProject) .step('Generating projection', generateProjectionMethod) .info('Projection generated!') .done(); async function generateProjectionMethod(info) { const readModelSourceFile = (0, method_generator_1.getResourceSourceFile)(info.name); const readModelClass = readModelSourceFile.getClassOrThrow(info.name); readModelClass.addMethod((0, method_generator_1.generateProjection)(info.name, info.projection)); return await readModelSourceFile.fixMissingImports().save(); }