Skip to content

Commit c7556b6

Browse files
alan-agius4dgp1130
authored andcommitted
refactor(@angular-devkit/architect-cli): replace parser with yargs-parser
BREAKING CHANGE: camel case arguments are no longer allowed.
1 parent b6de2d2 commit c7556b6

File tree

5 files changed

+40
-20
lines changed

5 files changed

+40
-20
lines changed

package.json

-2
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@
104104
"@types/karma": "^6.3.0",
105105
"@types/loader-utils": "^2.0.0",
106106
"@types/minimatch": "3.0.5",
107-
"@types/minimist": "^1.2.0",
108107
"@types/node": "~12.12.6",
109108
"@types/node-fetch": "^2.1.6",
110109
"@types/npm-package-arg": "^6.1.0",
@@ -168,7 +167,6 @@
168167
"magic-string": "0.25.7",
169168
"mini-css-extract-plugin": "2.5.3",
170169
"minimatch": "5.0.1",
171-
"minimist": "^1.2.0",
172170
"ng-packagr": "14.0.0-next.1",
173171
"node-fetch": "^2.2.0",
174172
"npm-package-arg": "9.0.0",

packages/angular_devkit/architect_cli/BUILD.bazel

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ ts_library(
2020
"//packages/angular_devkit/architect/node",
2121
"//packages/angular_devkit/core",
2222
"//packages/angular_devkit/core/node",
23-
"@npm//@types/minimist",
2423
"@npm//@types/node",
2524
"@npm//@types/progress",
25+
"@npm//@types/yargs-parser",
2626
"@npm//ansi-colors",
2727
"@npm//rxjs",
2828
],

packages/angular_devkit/architect_cli/bin/architect.ts

+36-9
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99

1010
import { Architect, BuilderInfo, BuilderProgressState, Target } from '@angular-devkit/architect';
1111
import { WorkspaceNodeModulesArchitectHost } from '@angular-devkit/architect/node';
12-
import { logging, schema, tags, workspaces } from '@angular-devkit/core';
12+
import { json, logging, schema, tags, workspaces } from '@angular-devkit/core';
1313
import { NodeJsSyncHost, createConsoleLogger } from '@angular-devkit/core/node';
1414
import * as ansiColors from 'ansi-colors';
1515
import { existsSync } from 'fs';
16-
import minimist from 'minimist';
1716
import * as path from 'path';
1817
import { tap } from 'rxjs/operators';
18+
import yargsParser from 'yargs-parser';
1919
import { MultiProgressBar } from '../src/progress';
2020

2121
function findUp(names: string | string[], from: string) {
@@ -78,24 +78,43 @@ async function _executeTarget(
7878
parentLogger: logging.Logger,
7979
workspace: workspaces.WorkspaceDefinition,
8080
root: string,
81-
argv: minimist.ParsedArgs,
81+
argv: yargsParser.Arguments,
8282
registry: schema.SchemaRegistry,
8383
) {
8484
const architectHost = new WorkspaceNodeModulesArchitectHost(workspace, root);
8585
const architect = new Architect(architectHost, registry);
8686
8787
// Split a target into its parts.
88-
const targetStr = argv._.shift() || '';
88+
const {
89+
_: [targetStr = ''],
90+
help,
91+
...options
92+
} = argv;
8993
const [project, target, configuration] = targetStr.split(':');
9094
const targetSpec = { project, target, configuration };
9195
92-
delete argv['help'];
9396
const logger = new logging.Logger('jobs');
9497
const logs: logging.LogEntry[] = [];
9598
logger.subscribe((entry) => logs.push({ ...entry, message: `${entry.name}: ` + entry.message }));
9699
97-
const { _, ...options } = argv;
98-
const run = await architect.scheduleTarget(targetSpec, options, { logger });
100+
// Camelize options as yargs will return the object in kebab-case when camel casing is disabled.
101+
102+
// Casting temporary until https://github.com/DefinitelyTyped/DefinitelyTyped/pull/59065 is merged and released.
103+
const { camelCase, decamelize } = yargsParser as yargsParser.Parser & {
104+
camelCase(str: string): string;
105+
decamelize(str: string, joinString?: string): string;
106+
};
107+
108+
const camelCasedOptions: json.JsonObject = {};
109+
for (const [key, value] of Object.entries(options)) {
110+
if (/[A-Z]/.test(key)) {
111+
throw new Error(`Unknown argument ${key}. Did you mean ${decamelize(key)}?`);
112+
}
113+
114+
camelCasedOptions[camelCase(key)] = value;
115+
}
116+
117+
const run = await architect.scheduleTarget(targetSpec, camelCasedOptions, { logger });
99118
const bars = new MultiProgressBar<number, BarInfo>(':name :bar (:current/:total) :status');
100119
101120
run.progress.subscribe((update) => {
@@ -107,7 +126,7 @@ async function _executeTarget(
107126
name: (
108127
(update.target ? _targetStringFromTarget(update.target) : update.builder.name) +
109128
' '.repeat(80)
110-
).substr(0, 40),
129+
).substring(0, 40),
111130
};
112131
113132
if (update.status !== undefined) {
@@ -175,7 +194,15 @@ async function _executeTarget(
175194
176195
async function main(args: string[]): Promise<number> {
177196
/** Parse the command line. */
178-
const argv = minimist(args, { boolean: ['help'] });
197+
const argv = yargsParser(args, {
198+
boolean: ['help'],
199+
configuration: {
200+
'dot-notation': false,
201+
'boolean-negation': true,
202+
'strip-aliased': true,
203+
'camel-case-expansion': false,
204+
},
205+
});
179206
180207
/** Create the DevKit Logger used through the CLI. */
181208
const logger = createConsoleLogger(argv['verbose'], process.stdout, process.stderr, {

packages/angular_devkit/architect_cli/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
"@angular-devkit/architect": "0.0.0-EXPERIMENTAL-PLACEHOLDER",
1818
"@angular-devkit/core": "0.0.0-PLACEHOLDER",
1919
"ansi-colors": "4.1.1",
20-
"minimist": "1.2.5",
2120
"progress": "2.0.3",
2221
"rxjs": "6.6.7",
23-
"symbol-observable": "4.0.0"
22+
"symbol-observable": "4.0.0",
23+
"yargs-parser": "21.0.1"
2424
},
2525
"devDependencies": {
2626
"@types/progress": "2.0.5"

yarn.lock

+1-6
Original file line numberDiff line numberDiff line change
@@ -1980,11 +1980,6 @@
19801980
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40"
19811981
integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==
19821982

1983-
"@types/minimist@^1.2.0":
1984-
version "1.2.2"
1985-
resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c"
1986-
integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==
1987-
19881983
"@types/ms@*":
19891984
version "0.7.31"
19901985
resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
@@ -7125,7 +7120,7 @@ minimatch@~3.0.4:
71257120
dependencies:
71267121
brace-expansion "^1.1.7"
71277122

7128-
minimist@1.2.5, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
7123+
minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
71297124
version "1.2.5"
71307125
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
71317126
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==

0 commit comments

Comments
 (0)