@boostercloud/cli
Version:
CLI of the Booster Framework, the next level of abstraction for cloud-native applications
53 lines (52 loc) • 2.35 kB
JavaScript
;
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();
}