fix: a
This commit is contained in:
84
node_modules/commander/lib/option.js
generated
vendored
84
node_modules/commander/lib/option.js
generated
vendored
@@ -18,7 +18,7 @@ class Option {
|
||||
this.variadic = /\w\.\.\.[>\]]$/.test(flags); // The option can take multiple values.
|
||||
this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.
|
||||
const optionFlags = splitOptionFlags(flags);
|
||||
this.short = optionFlags.shortFlag;
|
||||
this.short = optionFlags.shortFlag; // May be a short flag, undefined, or even a long flag (if option has two long flags).
|
||||
this.long = optionFlags.longFlag;
|
||||
this.negate = false;
|
||||
if (this.long) {
|
||||
@@ -74,7 +74,7 @@ class Option {
|
||||
* new Option('--rgb').conflicts('cmyk');
|
||||
* new Option('--js').conflicts(['ts', 'jsx']);
|
||||
*
|
||||
* @param {string | string[]} names
|
||||
* @param {(string | string[])} names
|
||||
* @return {Option}
|
||||
*/
|
||||
|
||||
@@ -93,7 +93,7 @@ class Option {
|
||||
* .addOption(new Option('--log', 'write logging information to file'))
|
||||
* .addOption(new Option('--trace', 'log extra details').implies({ log: 'trace.txt' }));
|
||||
*
|
||||
* @param {Object} impliedOptionValues
|
||||
* @param {object} impliedOptionValues
|
||||
* @return {Option}
|
||||
*/
|
||||
implies(impliedOptionValues) {
|
||||
@@ -158,7 +158,7 @@ class Option {
|
||||
}
|
||||
|
||||
/**
|
||||
* @api private
|
||||
* @package
|
||||
*/
|
||||
|
||||
_concatValue(value, previous) {
|
||||
@@ -180,7 +180,9 @@ class Option {
|
||||
this.argChoices = values.slice();
|
||||
this.parseArg = (arg, previous) => {
|
||||
if (!this.argChoices.includes(arg)) {
|
||||
throw new InvalidArgumentError(`Allowed choices are ${this.argChoices.join(', ')}.`);
|
||||
throw new InvalidArgumentError(
|
||||
`Allowed choices are ${this.argChoices.join(', ')}.`,
|
||||
);
|
||||
}
|
||||
if (this.variadic) {
|
||||
return this._concatValue(arg, previous);
|
||||
@@ -205,14 +207,16 @@ class Option {
|
||||
|
||||
/**
|
||||
* Return option name, in a camelcase format that can be used
|
||||
* as a object attribute key.
|
||||
* as an object attribute key.
|
||||
*
|
||||
* @return {string}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
attributeName() {
|
||||
return camelcase(this.name().replace(/^no-/, ''));
|
||||
if (this.negate) {
|
||||
return camelcase(this.name().replace(/^no-/, ''));
|
||||
}
|
||||
return camelcase(this.name());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -220,7 +224,7 @@ class Option {
|
||||
*
|
||||
* @param {string} arg
|
||||
* @return {boolean}
|
||||
* @api private
|
||||
* @package
|
||||
*/
|
||||
|
||||
is(arg) {
|
||||
@@ -233,7 +237,7 @@ class Option {
|
||||
* Options are one of boolean, negated, required argument, or optional argument.
|
||||
*
|
||||
* @return {boolean}
|
||||
* @api private
|
||||
* @package
|
||||
*/
|
||||
|
||||
isBoolean() {
|
||||
@@ -256,7 +260,7 @@ class DualOptions {
|
||||
this.positiveOptions = new Map();
|
||||
this.negativeOptions = new Map();
|
||||
this.dualOptions = new Set();
|
||||
options.forEach(option => {
|
||||
options.forEach((option) => {
|
||||
if (option.negate) {
|
||||
this.negativeOptions.set(option.attributeName(), option);
|
||||
} else {
|
||||
@@ -283,7 +287,7 @@ class DualOptions {
|
||||
|
||||
// Use the value to deduce if (probably) came from the option.
|
||||
const preset = this.negativeOptions.get(optionKey).presetArg;
|
||||
const negativeValue = (preset !== undefined) ? preset : false;
|
||||
const negativeValue = preset !== undefined ? preset : false;
|
||||
return option.negate === (negativeValue === value);
|
||||
}
|
||||
}
|
||||
@@ -293,7 +297,7 @@ class DualOptions {
|
||||
*
|
||||
* @param {string} str
|
||||
* @return {string}
|
||||
* @api private
|
||||
* @private
|
||||
*/
|
||||
|
||||
function camelcase(str) {
|
||||
@@ -305,25 +309,59 @@ function camelcase(str) {
|
||||
/**
|
||||
* Split the short and long flag out of something like '-m,--mixed <value>'
|
||||
*
|
||||
* @api private
|
||||
* @private
|
||||
*/
|
||||
|
||||
function splitOptionFlags(flags) {
|
||||
let shortFlag;
|
||||
let longFlag;
|
||||
// Use original very loose parsing to maintain backwards compatibility for now,
|
||||
// which allowed for example unintended `-sw, --short-word` [sic].
|
||||
const flagParts = flags.split(/[ |,]+/);
|
||||
if (flagParts.length > 1 && !/^[[<]/.test(flagParts[1])) shortFlag = flagParts.shift();
|
||||
longFlag = flagParts.shift();
|
||||
// Add support for lone short flag without significantly changing parsing!
|
||||
if (!shortFlag && /^-[^-]$/.test(longFlag)) {
|
||||
// short flag, single dash and single character
|
||||
const shortFlagExp = /^-[^-]$/;
|
||||
// long flag, double dash and at least one character
|
||||
const longFlagExp = /^--[^-]/;
|
||||
|
||||
const flagParts = flags.split(/[ |,]+/).concat('guard');
|
||||
// Normal is short and/or long.
|
||||
if (shortFlagExp.test(flagParts[0])) shortFlag = flagParts.shift();
|
||||
if (longFlagExp.test(flagParts[0])) longFlag = flagParts.shift();
|
||||
// Long then short. Rarely used but fine.
|
||||
if (!shortFlag && shortFlagExp.test(flagParts[0]))
|
||||
shortFlag = flagParts.shift();
|
||||
// Allow two long flags, like '--ws, --workspace'
|
||||
// This is the supported way to have a shortish option flag.
|
||||
if (!shortFlag && longFlagExp.test(flagParts[0])) {
|
||||
shortFlag = longFlag;
|
||||
longFlag = undefined;
|
||||
longFlag = flagParts.shift();
|
||||
}
|
||||
|
||||
// Check for unprocessed flag. Fail noisily rather than silently ignore.
|
||||
if (flagParts[0].startsWith('-')) {
|
||||
const unsupportedFlag = flagParts[0];
|
||||
const baseError = `option creation failed due to '${unsupportedFlag}' in option flags '${flags}'`;
|
||||
if (/^-[^-][^-]/.test(unsupportedFlag))
|
||||
throw new Error(
|
||||
`${baseError}
|
||||
- a short flag is a single dash and a single character
|
||||
- either use a single dash and a single character (for a short flag)
|
||||
- or use a double dash for a long option (and can have two, like '--ws, --workspace')`,
|
||||
);
|
||||
if (shortFlagExp.test(unsupportedFlag))
|
||||
throw new Error(`${baseError}
|
||||
- too many short flags`);
|
||||
if (longFlagExp.test(unsupportedFlag))
|
||||
throw new Error(`${baseError}
|
||||
- too many long flags`);
|
||||
|
||||
throw new Error(`${baseError}
|
||||
- unrecognised flag format`);
|
||||
}
|
||||
if (shortFlag === undefined && longFlag === undefined)
|
||||
throw new Error(
|
||||
`option creation failed due to no flags found in '${flags}'.`,
|
||||
);
|
||||
|
||||
return { shortFlag, longFlag };
|
||||
}
|
||||
|
||||
exports.Option = Option;
|
||||
exports.splitOptionFlags = splitOptionFlags;
|
||||
exports.DualOptions = DualOptions;
|
||||
|
||||
Reference in New Issue
Block a user