hades-cli
Version:
Hades CLI developer tool
70 lines (69 loc) • 3.5 kB
JavaScript
;
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']
}
];