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