Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/yargs/lib/validation.js')
-rw-r--r--node_modules/yargs/lib/validation.js79
1 files changed, 44 insertions, 35 deletions
diff --git a/node_modules/yargs/lib/validation.js b/node_modules/yargs/lib/validation.js
index f4655b4fd..35659a356 100644
--- a/node_modules/yargs/lib/validation.js
+++ b/node_modules/yargs/lib/validation.js
@@ -37,7 +37,7 @@ module.exports = function validation (yargs, usage, y18n) {
)
} else {
usage.fail(
- __('Too many non-option arguments: got %s, maximum of %s', _s, demandedCommands._.max)
+ __('Too many non-option arguments: got %s, maximum of %s', _s, demandedCommands._.max)
)
}
}
@@ -96,13 +96,13 @@ module.exports = function validation (yargs, usage, y18n) {
if (specialKeys.indexOf(key) === -1 &&
!positionalMap.hasOwnProperty(key) &&
!yargs._getParseContext().hasOwnProperty(key) &&
- !aliases.hasOwnProperty(key)
+ !self.isValidAndSomeAliasIsNotNew(key, aliases)
) {
unknown.push(key)
}
})
- if (commandKeys.length > 0) {
+ if ((currentContext.commands.length > 0) || (commandKeys.length > 0)) {
argv._.slice(currentContext.commands.length).forEach((key) => {
if (commandKeys.indexOf(key) === -1) {
unknown.push(key)
@@ -120,6 +120,21 @@ module.exports = function validation (yargs, usage, y18n) {
}
}
+ // check for a key that is not an alias, or for which every alias is new,
+ // implying that it was invented by the parser, e.g., during camelization
+ self.isValidAndSomeAliasIsNotNew = function isValidAndSomeAliasIsNotNew (key, aliases) {
+ if (!aliases.hasOwnProperty(key)) {
+ return false
+ }
+ const newAliases = yargs.parsed.newAliases
+ for (let a of [key, ...aliases[key]]) {
+ if (!newAliases.hasOwnProperty(a) || !newAliases[key]) {
+ return true
+ }
+ }
+ return false
+ }
+
// validate arguments limited to enumerated choices
self.limitedChoices = function limitedChoices (argv) {
const options = yargs.getOptions()
@@ -209,43 +224,36 @@ module.exports = function validation (yargs, usage, y18n) {
return implied
}
+ function keyExists (argv, val) {
+ // convert string '1' to number 1
+ let num = Number(val)
+ val = isNaN(num) ? val : num
+
+ if (typeof val === 'number') {
+ // check length of argv._
+ val = argv._.length >= val
+ } else if (val.match(/^--no-.+/)) {
+ // check if key/value doesn't exist
+ val = val.match(/^--no-(.+)/)[1]
+ val = !argv[val]
+ } else {
+ // check if key/value exists
+ val = argv[val]
+ }
+ return val
+ }
+
self.implications = function implications (argv) {
const implyFail = []
Object.keys(implied).forEach((key) => {
const origKey = key
;(implied[key] || []).forEach((value) => {
- let num
let key = origKey
const origValue = value
+ key = keyExists(argv, key)
+ value = keyExists(argv, value)
- // convert string '1' to number 1
- num = Number(key)
- key = isNaN(num) ? key : num
-
- if (typeof key === 'number') {
- // check length of argv._
- key = argv._.length >= key
- } else if (key.match(/^--no-.+/)) {
- // check if key doesn't exist
- key = key.match(/^--no-(.+)/)[1]
- key = !argv[key]
- } else {
- // check if key exists
- key = argv[key]
- }
-
- num = Number(value)
- value = isNaN(num) ? value : num
-
- if (typeof value === 'number') {
- value = argv._.length >= value
- } else if (value.match(/^--no-.+/)) {
- value = value.match(/^--no-(.+)/)[1]
- value = !argv[value]
- } else {
- value = argv[value]
- }
if (key && !value) {
implyFail.push(` ${origKey} -> ${origValue}`)
}
@@ -292,7 +300,7 @@ module.exports = function validation (yargs, usage, y18n) {
// we default keys to 'undefined' that have been configured, we should not
// apply conflicting check unless they are a value other than 'undefined'.
if (value && argv[key] !== undefined && argv[value] !== undefined) {
- usage.fail(__(`Arguments ${key} and ${value} are mutually exclusive`))
+ usage.fail(__('Arguments %s and %s are mutually exclusive', key, value))
}
})
}
@@ -323,18 +331,19 @@ module.exports = function validation (yargs, usage, y18n) {
return self
}
- let frozen
+ let frozens = []
self.freeze = function freeze () {
- frozen = {}
+ let frozen = {}
+ frozens.push(frozen)
frozen.implied = implied
frozen.checks = checks
frozen.conflicting = conflicting
}
self.unfreeze = function unfreeze () {
+ let frozen = frozens.pop()
implied = frozen.implied
checks = frozen.checks
conflicting = frozen.conflicting
- frozen = undefined
}
return self