@nestjs/cli
Version:
Nest - modern, fast, powerful node.js web framework (@cli)
108 lines (107 loc) • 4.52 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.GenerateCommand = void 0;
const ansis_1 = require("ansis");
const Table = require("cli-table3");
const schematics_1 = require("../lib/schematics");
const load_configuration_1 = require("../lib/utils/load-configuration");
const abstract_command_1 = require("./abstract.command");
class GenerateCommand extends abstract_command_1.AbstractCommand {
async load(program) {
program
.command('generate <schematic> [name] [path]')
.alias('g')
.description(await this.buildDescription())
.option('-d, --dry-run', 'Report actions that would be taken without writing out results.')
.option('-p, --project [project]', 'Project in which to generate files.')
.option('--flat', 'Enforce flat structure of generated element.', () => true)
.option('--no-flat', 'Enforce that directories are generated.', () => false)
.option('--spec', 'Enforce spec files generation.', () => {
return { value: true, passedAsInput: true };
}, true)
.option('--spec-file-suffix [suffix]', 'Use a custom suffix for spec files.')
.option('--skip-import', 'Skip importing', () => true, false)
.option('--no-spec', 'Disable spec files generation.', () => {
return { value: false, passedAsInput: true };
})
.option('-c, --collection [collectionName]', 'Schematics collection to use.')
.action(async (schematic, name, path, command) => {
const options = [];
options.push({ name: 'dry-run', value: !!command.dryRun });
if (command.flat !== undefined) {
options.push({ name: 'flat', value: command.flat });
}
options.push({
name: 'spec',
value: typeof command.spec === 'boolean'
? command.spec
: command.spec.value,
options: {
passedAsInput: typeof command.spec === 'boolean'
? false
: command.spec.passedAsInput,
},
});
options.push({
name: 'specFileSuffix',
value: command.specFileSuffix,
});
options.push({
name: 'collection',
value: command.collection,
});
options.push({
name: 'project',
value: command.project,
});
options.push({
name: 'skipImport',
value: command.skipImport,
});
const inputs = [];
inputs.push({ name: 'schematic', value: schematic });
inputs.push({ name: 'name', value: name });
inputs.push({ name: 'path', value: path });
await this.action.handle(inputs, options);
});
}
async buildDescription() {
const collection = await this.getCollection();
return ('Generate a Nest element.\n' +
` Schematics available on ${(0, ansis_1.bold)(collection)} collection:\n` +
this.buildSchematicsListAsTable(await this.getSchematics(collection)));
}
buildSchematicsListAsTable(schematics) {
const leftMargin = ' ';
const tableConfig = {
head: ['name', 'alias', 'description'],
chars: {
'left': leftMargin.concat('│'),
'top-left': leftMargin.concat('┌'),
'bottom-left': leftMargin.concat('└'),
'mid': '',
'left-mid': '',
'mid-mid': '',
'right-mid': '',
},
};
const table = new Table(tableConfig);
for (const schematic of schematics) {
table.push([
(0, ansis_1.green)(schematic.name),
(0, ansis_1.cyan)(schematic.alias),
schematic.description,
]);
}
return table.toString();
}
async getCollection() {
const configuration = await (0, load_configuration_1.loadConfiguration)();
return configuration.collection;
}
async getSchematics(collection) {
const abstractCollection = schematics_1.CollectionFactory.create(collection);
return abstractCollection.getSchematics();
}
}
exports.GenerateCommand = GenerateCommand;
;