You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
3.7 KiB
89 lines
3.7 KiB
"use strict";
|
|
/**
|
|
* @license
|
|
* Copyright Google LLC All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.GenerateCommand = void 0;
|
|
const schematic_command_1 = require("../models/schematic-command");
|
|
const color_1 = require("../utilities/color");
|
|
const json_schema_1 = require("../utilities/json-schema");
|
|
class GenerateCommand extends schematic_command_1.SchematicCommand {
|
|
async initialize(options) {
|
|
// Fill up the schematics property of the command description.
|
|
const [collectionName, schematicName] = await this.parseSchematicInfo(options);
|
|
this.collectionName = collectionName;
|
|
this.schematicName = schematicName;
|
|
await super.initialize(options);
|
|
const collection = this.getCollection(collectionName);
|
|
const subcommands = {};
|
|
const schematicNames = schematicName ? [schematicName] : collection.listSchematicNames();
|
|
// Sort as a courtesy for the user.
|
|
schematicNames.sort();
|
|
for (const name of schematicNames) {
|
|
const schematic = this.getSchematic(collection, name, true);
|
|
this.longSchematicName = schematic.description.name;
|
|
let subcommand;
|
|
if (schematic.description.schemaJson) {
|
|
subcommand = await json_schema_1.parseJsonSchemaToSubCommandDescription(name, schematic.description.path, this._workflow.registry, schematic.description.schemaJson);
|
|
}
|
|
else {
|
|
continue;
|
|
}
|
|
if ((await this.getDefaultSchematicCollection()) == collectionName) {
|
|
subcommands[name] = subcommand;
|
|
}
|
|
else {
|
|
subcommands[`${collectionName}:${name}`] = subcommand;
|
|
}
|
|
}
|
|
this.description.options.forEach((option) => {
|
|
if (option.name == 'schematic') {
|
|
option.subcommands = subcommands;
|
|
}
|
|
});
|
|
}
|
|
async run(options) {
|
|
if (!this.schematicName || !this.collectionName) {
|
|
return this.printHelp();
|
|
}
|
|
return this.runSchematic({
|
|
collectionName: this.collectionName,
|
|
schematicName: this.schematicName,
|
|
schematicOptions: options['--'] || [],
|
|
debug: !!options.debug || false,
|
|
dryRun: !!options.dryRun || false,
|
|
force: !!options.force || false,
|
|
});
|
|
}
|
|
async reportAnalytics(paths, options) {
|
|
if (!this.collectionName || !this.schematicName) {
|
|
return;
|
|
}
|
|
const escapedSchematicName = (this.longSchematicName || this.schematicName).replace(/\//g, '_');
|
|
return super.reportAnalytics(['generate', this.collectionName.replace(/\//g, '_'), escapedSchematicName], options);
|
|
}
|
|
async parseSchematicInfo(options) {
|
|
let collectionName = await this.getDefaultSchematicCollection();
|
|
let schematicName = options.schematic;
|
|
if (schematicName && schematicName.includes(':')) {
|
|
[collectionName, schematicName] = schematicName.split(':', 2);
|
|
}
|
|
return [collectionName, schematicName];
|
|
}
|
|
async printHelp() {
|
|
await super.printHelp();
|
|
this.logger.info('');
|
|
// Find the generate subcommand.
|
|
const subcommand = this.description.options.filter((x) => x.subcommands)[0];
|
|
if (Object.keys((subcommand && subcommand.subcommands) || {}).length == 1) {
|
|
this.logger.info(`\nTo see help for a schematic run:`);
|
|
this.logger.info(color_1.colors.cyan(` ng generate <schematic> --help`));
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
exports.GenerateCommand = GenerateCommand;
|