UNPKG

@boostercloud/cli

Version:

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

53 lines (52 loc) 2.35 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 Reducer extends base_command_1.default { async run() { const { flags } = await this.parse(Reducer); const entity = flags.entity; const events = flags.event; return run(entity, events); } } Reducer.description = 'add new reducer to entity'; Reducer.usage = 'reducer --entity Entity --event Event'; Reducer.examples = [ '$ boost add:reducer --entity Post --event PostCreated', '$ boost add:reducer --entity Comment --event CommentUpdated CommentVoted', ]; Reducer.flags = { help: core_1.Flags.help({ char: 'h' }), entity: core_1.Flags.string({ description: 'an entity name', required: true, multiple: false, dependsOn: ['event'], }), event: core_1.Flags.string({ description: 'an event name', required: true, multiple: true, dependsOn: ['entity'], }), }; exports.default = Reducer; /* eslint-disable @typescript-eslint/no-extra-parens */ const pluralize = (word, count) => (count === 1 ? word : `${word}s`); const run = async (rawEntity, rawEvents) => script_1.Script.init(`boost ${brand_1.default.energize('add:reducer')} 🚧`, (0, target_1.joinParsers)((0, target_1.parseName)(rawEntity), (0, target_1.parseReaction)(rawEvents))) .step('Verifying project', project_checker_1.checkCurrentDirIsABoosterProject) .step(`Generating ${pluralize('reducer', rawEvents.length)}`, generateReducerMethods) .info(`${pluralize('Reducer', rawEvents.length)} generated!`) .done(); async function generateReducerMethods(info) { const entitySourceFile = (0, method_generator_1.getResourceSourceFile)(info.name); const entityClass = entitySourceFile.getClassOrThrow(info.name); entityClass.addMethods((0, method_generator_1.generateReducers)(info.name, info.events)); return await entitySourceFile.fixMissingImports().save(); }