package.src.commands.run.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 path_1 = require("path");
const architect_base_command_module_1 = require("../../command-builder/architect-base-command-module");
const command_module_1 = require("../../command-builder/command-module");
class RunCommandModule extends architect_base_command_module_1.ArchitectBaseCommandModule {
scope = command_module_1.CommandScope.In;
command = 'run ';
describe = 'Runs an Architect target with an optional custom builder configuration defined in your project.';
longDescriptionPath = (0, path_1.join)(__dirname, 'long-description.md');
async builder(argv) {
const { jsonHelp, getYargsCompletions, help } = this.context.args.options;
const localYargs = argv
.positional('target', {
describe: 'The Architect target to run provided in the following format `project:target[:configuration]`.',
type: 'string',
demandOption: true,
// Show only in when using --help and auto completion because otherwise comma seperated configuration values will be invalid.
// Also, hide choices from JSON help so that we don't display them in AIO.
choices: (getYargsCompletions || help) && !jsonHelp ? this.getTargetChoices() : undefined,
})
.middleware((args) => {
// TODO: remove in version 15.
const { configuration, target } = args;
if (typeof configuration === 'string' && target) {
const targetWithConfig = target.split(':', 2);
targetWithConfig.push(configuration);
throw new command_module_1.CommandModuleError('Unknown argument: configuration.\n' +
`Provide the configuration as part of the target 'ng run ${targetWithConfig.join(':')}'.`);
}
}, true)
.strict();
const target = this.makeTargetSpecifier();
if (!target) {
return localYargs;
}
const schemaOptions = await this.getArchitectTargetOptions(target);
return this.addSchemaOptionsToCommand(localYargs, schemaOptions);
}
async run(options) {
const target = this.makeTargetSpecifier(options);
const { target: _target, ...extraOptions } = options;
if (!target) {
throw new command_module_1.CommandModuleError('Cannot determine project or target.');
}
return this.runSingleTarget(target, extraOptions);
}
makeTargetSpecifier(options) {
const architectTarget = options?.target ?? this.context.args.positional[1];
if (!architectTarget) {
return undefined;
}
const [project = '', target = '', configuration] = architectTarget.split(':');
return {
project,
target,
configuration,
};
}
/** @returns a sorted list of target specifiers to be used for auto completion. */
getTargetChoices() {
if (!this.context.workspace) {
return;
}
const targets = [];
for (const [projectName, project] of this.context.workspace.projects) {
for (const [targetName, target] of project.targets) {
const currentTarget = `${projectName}:${targetName}`;
targets.push(currentTarget);
if (!target.configurations) {
continue;
}
for (const configName of Object.keys(target.configurations)) {
targets.push(`${currentTarget}:${configName}`);
}
}
}
return targets.sort();
}
}
exports.default = RunCommandModule;