UNPKG

@boostercloud/cli

Version:

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

84 lines (83 loc) 3.04 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 Entity extends base_command_1.default { async run() { const { args, flags } = await this.parse(Entity); try { const fields = flags.fields || []; const events = flags.reduces || []; if (!args.entityName) throw "You haven't provided an entity name, but it is required, run with --help for usage"; return run(args.entityName, fields, events); } catch (error) { console.error(error); } } } Entity.description = 'create a new entity'; Entity.flags = { help: core_1.Flags.help({ char: 'h' }), fields: core_1.Flags.string({ char: 'f', description: 'fields that this entity will contain', multiple: true, }), reduces: core_1.Flags.string({ char: 'r', description: 'events that this entity will reduce to build its state', multiple: true, }), }; Entity.args = { entityName: core_1.Args.string(), }; exports.default = Entity; const run = async (name, rawFields, rawEvents) => script_1.Script.init(`boost ${brand_1.default.energize('new:entity')} 🚧`, (0, target_1.joinParsers)((0, target_1.parseName)(name), (0, target_1.parseFields)(rawFields), (0, target_1.parseReaction)(rawEvents))) .step('Verifying project', project_checker_1.checkCurrentDirIsABoosterProject) .step('Creating new entity', generateEntity) .info('Entity generated!') .done(); function generateImports(info) { const eventsImports = info.events.map((eventData) => { const fileName = (0, filenames_1.classNameToFileName)(eventData.eventName); return { packagePath: `../events/${fileName}`, commaSeparatedComponents: eventData.eventName, }; }); const coreComponents = ['Entity']; if (info.events.length > 0) { coreComponents.push('Reduces'); } return [ { packagePath: '@boostercloud/framework-core', commaSeparatedComponents: coreComponents.join(', '), }, { packagePath: '@boostercloud/framework-types', commaSeparatedComponents: 'UUID', }, ...eventsImports, ]; } const generateEntity = (info) => (0, generator_1.generate)({ name: info.name, extension: '.ts', placementDir: path.join('src', 'entities'), template: (0, generator_1.template)('entity'), info: { imports: generateImports(info), ...info, }, });