package.src.commands.new.cli.js Maven / Gradle / Ivy
"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.dev/license
*/
Object.defineProperty(exports, "__esModule", { value: true });
const node_path_1 = require("node:path");
const command_module_1 = require("../../command-builder/command-module");
const schematics_command_module_1 = require("../../command-builder/schematics-command-module");
const version_1 = require("../../utilities/version");
const command_config_1 = require("../command-config");
class NewCommandModule extends schematics_command_module_1.SchematicsCommandModule {
schematicName = 'ng-new';
scope = command_module_1.CommandScope.Out;
allowPrivateSchematics = true;
command = 'new [name]';
aliases = command_config_1.RootCommands['new'].aliases;
describe = 'Creates a new Angular workspace.';
longDescriptionPath = (0, node_path_1.join)(__dirname, 'long-description.md');
async builder(argv) {
const localYargs = (await super.builder(argv)).option('collection', {
alias: 'c',
describe: 'A collection of schematics to use in generating the initial application.',
type: 'string',
});
const { options: { collection: collectionNameFromArgs }, } = this.context.args;
const collectionName = typeof collectionNameFromArgs === 'string'
? collectionNameFromArgs
: await this.getCollectionFromConfig();
const workflow = this.getOrCreateWorkflowForBuilder(collectionName);
const collection = workflow.engine.createCollection(collectionName);
const options = await this.getSchematicOptions(collection, this.schematicName, workflow);
return this.addSchemaOptionsToCommand(localYargs, options);
}
async run(options) {
// Register the version of the CLI in the registry.
const collectionName = options.collection ?? (await this.getCollectionFromConfig());
const { dryRun, force, interactive, defaults, collection, ...schematicOptions } = options;
const workflow = await this.getOrCreateWorkflowForExecution(collectionName, {
dryRun,
force,
interactive,
defaults,
});
workflow.registry.addSmartDefaultProvider('ng-cli-version', () => version_1.VERSION.full);
return this.runSchematic({
collectionName,
schematicName: this.schematicName,
schematicOptions,
executionOptions: {
dryRun,
force,
interactive,
defaults,
},
});
}
/** Find a collection from config that has an `ng-new` schematic. */
async getCollectionFromConfig() {
for (const collectionName of await this.getSchematicCollections()) {
const workflow = this.getOrCreateWorkflowForBuilder(collectionName);
const collection = workflow.engine.createCollection(collectionName);
const schematicsInCollection = collection.description.schematics;
if (Object.keys(schematicsInCollection).includes(this.schematicName)) {
return collectionName;
}
}
return schematics_command_module_1.DEFAULT_SCHEMATICS_COLLECTION;
}
}
exports.default = NewCommandModule;