UNPKG

hades-cli

Version:
70 lines (69 loc) 3.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); require("reflect-metadata"); const tsyringe_1 = require("tsyringe"); const command_1 = require("@oclif/command"); const types_1 = require("./../@cliter/types"); const state_service_1 = require("./../@cliter/services/state.service"); const utils_1 = require("./../@cliter/utils"); class Generate extends command_1.Command { async run() { const { args, flags } = this.parse(Generate); if (args.elementType === 'b') args.elementType = 'bounded-context'; if (args.elementType === 'm') args.elementType = 'module'; if (args.elementType === types_1.TemplateElement.MODULE) { let moduleFlag = {}; if (flags.module) moduleFlag = utils_1.Operations.parseFlagOfBoundedContextAndModule(this, flags.module); const { boundedContextName, moduleName, moduleNames, hasOAuth, hasTenant } = await utils_1.Prompter.promptForGenerateModule(moduleFlag === null || moduleFlag === void 0 ? void 0 : moduleFlag.boundedContextName, moduleFlag === null || moduleFlag === void 0 ? void 0 : moduleFlag.moduleName); // add id property const properties = new utils_1.Properties([new utils_1.Property({ name: 'id', type: types_1.SqlType.ID, primaryKey: true, length: 36, nullable: false })]); // add properties defined by user while ((await utils_1.Prompter.promptForGenerateAggregate()).hasValueObject) { properties.add(await utils_1.Prompter.promptDefineAggregateProperty(this, boundedContextName, moduleName, moduleNames)); utils_1.Prompter.printValueObjectsTable(this, properties); } // add time stamp properties properties.add(new utils_1.Property({ name: 'created_at', type: types_1.SqlType.TIMESTAMP, nullable: true })); properties.add(new utils_1.Property({ name: 'updated_at', type: types_1.SqlType.TIMESTAMP, nullable: true })); properties.add(new utils_1.Property({ name: 'deleted_at', type: types_1.SqlType.TIMESTAMP, nullable: true })); const schema = { boundedContextName, moduleName, moduleNames, aggregateName: boundedContextName.toPascalCase() + moduleName.toPascalCase(), hasOAuth, hasTenant, properties }; // set stateService const stateService = tsyringe_1.container.resolve(state_service_1.StateService); stateService.command = this; stateService.schema = schema; stateService.flags = flags; stateService.flags.tests = true; // enable by default create test e2e files const operations = new utils_1.Operations(); // generate module files operations.generateModule(); // generate graphql files operations.generateGraphqlTypes(); } } } exports.default = Generate; Generate.description = 'Generate hades elements [boundedContext, module]'; Generate.flags = { help: command_1.flags.help({ char: 'h' }), module: command_1.flags.string({ char: 'm' }), force: command_1.flags.boolean({ char: 'f' }), }; Generate.args = [ { name: 'elementType', required: true, description: 'Type element to create', options: ['bounded-context', 'b', 'module', 'm'] } ];