UNPKG

@angular/cli

Version:
89 lines (88 loc) 3.96 kB
"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 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 <target>'; describe = 'Runs an Architect target with an optional custom builder configuration defined in your project.'; longDescriptionPath = (0, node_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;