fix(docs-infra): correctly handle multiple occurrences of an option in `NgPackagesInstaller` (#31985)

PR Close #31985
This commit is contained in:
George Kalpakas 2019-08-03 18:14:27 +03:00 committed by Alex Rickabaugh
parent 18aa173d39
commit 65cafa0eec
1 changed files with 18 additions and 3 deletions

View File

@ -38,9 +38,9 @@ class NgPackagesInstaller {
* * `ignorePackages` (`string[]`) - a collection of names of packages that should not be copied over. * * `ignorePackages` (`string[]`) - a collection of names of packages that should not be copied over.
*/ */
constructor(projectDir, options = {}) { constructor(projectDir, options = {}) {
this.debug = options.debug; this.debug = this._parseBooleanArg(options.debug);
this.force = options.force; this.force = this._parseBooleanArg(options.force);
this.buildPackages = options.buildPackages; this.buildPackages = this._parseBooleanArg(options.buildPackages);
this.ignorePackages = options.ignorePackages || []; this.ignorePackages = options.ignorePackages || [];
this.projectDir = path.resolve(projectDir); this.projectDir = path.resolve(projectDir);
this.localMarkerPath = path.resolve(this.projectDir, LOCAL_MARKER_PATH); this.localMarkerPath = path.resolve(this.projectDir, LOCAL_MARKER_PATH);
@ -264,6 +264,21 @@ class NgPackagesInstaller {
} }
} }
/**
* Extract the value for a boolean cli argument/option. When passing an option multiple times, `yargs` parses it as an
* array of boolean values. In that case, we only care about the last occurrence.
*
* This can be useful, for example, when one has a base command with the option turned on and another command
* (building on top of the first one) turning the option off:
* ```
* "base-command": "my-script --foo --bar",
* "no-bar-command": "yarn base-command --no-bar",
* ```
*/
_parseBooleanArg(value) {
return Array.isArray(value) ? value.pop() : value;
}
/** /**
* Parse and return a `yarn.lock` file. * Parse and return a `yarn.lock` file.
*/ */