diff --git a/index.js b/index.js index 692a5985..ca4cb37c 100644 --- a/index.js +++ b/index.js @@ -27,7 +27,7 @@ function parse (args, opts) { 'halt-at-non-option': false, 'strip-aliased': false, 'strip-dashed': false, - 'ignore-unknown-options': false + 'parse-unknown-options': true }, opts.configuration) var defaults = opts.default || {} var configObjects = opts.configObjects || [] @@ -160,17 +160,17 @@ function parse (args, opts) { } else if (checkAllAliases(m[1], flags.arrays) && args.length > i + 1) { args.splice(i + 1, 0, m[2]) i = eatArray(i, m[1], args) - } else if (!configuration['ignore-unknown-options'] || hasAnyFlag(m[1])) { + } else if (configuration['parse-unknown-options'] || hasAnyFlag(m[1])) { setArg(m[1], m[2]) } else { - argv._.push(maybeCoerceNumber('_', arg)) + argv._.push(arg) } } else if (arg.match(negatedBoolean) && configuration['boolean-negation']) { key = arg.match(negatedBoolean)[1] - if (!configuration['ignore-unknown-options'] || hasAnyFlag(key)) { + if (configuration['parse-unknown-options'] || hasAnyFlag(key)) { setArg(key, false) } else { - argv._.push(maybeCoerceNumber('_', arg)) + argv._.push(arg) } // -- seperated by space. @@ -185,7 +185,7 @@ function parse (args, opts) { // array format = '--foo a b c' } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { i = eatArray(i, key, args) - } else if (!configuration['ignore-unknown-options'] || hasAnyFlag(key)) { + } else if (configuration['parse-unknown-options'] || hasAnyFlag(key)) { next = flags.nargs[key] === 0 ? undefined : args[i + 1] if (next !== undefined && (!next.match(/^-/) || @@ -201,16 +201,16 @@ function parse (args, opts) { setArg(key, defaultValue(key)) } } else { - argv._.push(maybeCoerceNumber('_', arg)) + argv._.push(arg) } // dot-notation flag seperated by '='. } else if (arg.match(/^-.\..+=/)) { m = arg.match(/^-([^=]+)=([\s\S]*)$/) - if (!configuration['ignore-unknown-options'] || hasAnyFlag(m[1])) { + if (configuration['parse-unknown-options'] || hasAnyFlag(m[1])) { setArg(m[1], m[2]) } else { - argv._.push(maybeCoerceNumber('_', arg)) + argv._.push(arg) } // dot-notation flag seperated by space. @@ -218,7 +218,7 @@ function parse (args, opts) { next = args[i + 1] key = arg.match(/^-(.\..+)/)[1] - if (!configuration['ignore-unknown-options'] || hasAnyFlag(key)) { + if (configuration['parse-unknown-options'] || hasAnyFlag(key)) { if (next !== undefined && !next.match(/^-/) && !checkAllAliases(key, flags.bools) && !checkAllAliases(key, flags.counts)) { @@ -228,7 +228,7 @@ function parse (args, opts) { setArg(key, defaultValue(key)) } } else { - argv._.push(maybeCoerceNumber('_', arg)) + argv._.push(arg) } } else if (arg.match(/^-[^-]+/) && !arg.match(negative)) { letters = arg.slice(1, -1).split('') @@ -250,7 +250,7 @@ function parse (args, opts) { } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { args.splice(i + 1, 0, value) i = eatArray(i, key, args) - } else if (!configuration['ignore-unknown-options'] || hasAnyFlag(key)) { + } else if (configuration['parse-unknown-options'] || hasAnyFlag(key)) { setArg(key, value) } else { unmatched.push(key) @@ -263,7 +263,7 @@ function parse (args, opts) { } if (next === '-') { - if (!configuration['ignore-unknown-options'] || hasAnyFlag(letters[j])) { + if (configuration['parse-unknown-options'] || hasAnyFlag(letters[j])) { setArg(letters[j], next) } else { unmatched.push(letters[j]) @@ -275,7 +275,7 @@ function parse (args, opts) { // current letter is an alphabetic character and next value is a number if (/[A-Za-z]/.test(letters[j]) && /^-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { - if (!configuration['ignore-unknown-options'] || hasAnyFlag(letters[j])) { + if (configuration['parse-unknown-options'] || hasAnyFlag(letters[j])) { setArg(letters[j], next) } else { unmatched.push(letters[j]) @@ -286,7 +286,7 @@ function parse (args, opts) { } if (letters[j + 1] && letters[j + 1].match(/\W/)) { - if (!configuration['ignore-unknown-options'] || hasAnyFlag(letters[j])) { + if (configuration['parse-unknown-options'] || hasAnyFlag(letters[j])) { setArg(letters[j], next) } else { unmatched.push(letters[j]) @@ -294,7 +294,7 @@ function parse (args, opts) { } broken = true break - } else if (!configuration['ignore-unknown-options'] || hasAnyFlag(letters[j])) { + } else if (configuration['parse-unknown-options'] || hasAnyFlag(letters[j])) { setArg(letters[j], defaultValue(letters[j])) } else { unmatched.push(letters[j]) @@ -310,7 +310,7 @@ function parse (args, opts) { // array format = '-f a b c' } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { i = eatArray(i, key, args) - } else if (!configuration['ignore-unknown-options'] || hasAnyFlag(key)) { + } else if (configuration['parse-unknown-options'] || hasAnyFlag(key)) { next = args[i + 1] if (next !== undefined && (!/^(-|--)[^-]/.test(next) || @@ -330,7 +330,7 @@ function parse (args, opts) { } } if (unmatched.length > 0) { - argv._.push(maybeCoerceNumber('_', ['-', ...unmatched].join(''))) + argv._.push(['-', ...unmatched].join('')) } } else if (arg === '--') { notFlags = args.slice(i + 1) @@ -797,7 +797,8 @@ function parse (args, opts) { function hasAnyFlag (key) { var isSet = false - var toCheck = [].concat(Object.values(flags)) + // XXX Switch to [].concat(...Object.values(flags)) once node.js 6 is dropped + var toCheck = [].concat(...Object.keys(flags).map(k => flags[k])) toCheck.forEach(function (flag) { if (flag[key]) isSet = flag[key] diff --git a/test/yargs-parser.js b/test/yargs-parser.js index 5b8b6569..9b1f8653 100644 --- a/test/yargs-parser.js +++ b/test/yargs-parser.js @@ -3015,12 +3015,12 @@ describe('yargs-parser', function () { }) }) }) - describe('ignore-unknown-options', function () { + describe('parse-unknown-options = false', function () { it('should ignore unknown options in long format separated by =', function () { const argv = parser('--known-arg=1 --unknown-arg=2', { number: ['known-arg'], configuration: { - 'ignore-unknown-options': true + 'parse-unknown-options': false } }) argv.should.deep.equal({ @@ -3033,7 +3033,7 @@ describe('yargs-parser', function () { const argv = parser('--no-known-arg --no-unknown-arg', { boolean: ['known-arg'], configuration: { - 'ignore-unknown-options': true + 'parse-unknown-options': false } }) argv.should.deep.equal({ @@ -3046,7 +3046,7 @@ describe('yargs-parser', function () { const argv = parser('--known-arg 1 --unknown-arg 2', { number: ['known-arg'], configuration: { - 'ignore-unknown-options': true + 'parse-unknown-options': false } }) argv.should.deep.equal({ @@ -3059,7 +3059,7 @@ describe('yargs-parser', function () { const argv = parser('-k.arg=1 -u.arg=2', { number: ['k.arg'], configuration: { - 'ignore-unknown-options': true + 'parse-unknown-options': false } }) argv.should.deep.equal({ @@ -3073,7 +3073,7 @@ describe('yargs-parser', function () { const argv = parser('-k.arg 1 -u.arg 2', { number: ['k.arg'], configuration: { - 'ignore-unknown-options': true + 'parse-unknown-options': false } }) argv.should.deep.equal({ @@ -3087,7 +3087,7 @@ describe('yargs-parser', function () { const argv = parser('-k=1 -u=2', { number: ['k'], configuration: { - 'ignore-unknown-options': true + 'parse-unknown-options': false } }) argv.should.deep.equal({ @@ -3099,7 +3099,7 @@ describe('yargs-parser', function () { const argv = parser('-k- -u-', { string: ['k'], configuration: { - 'ignore-unknown-options': true + 'parse-unknown-options': false } }) argv.should.deep.equal({ @@ -3111,7 +3111,7 @@ describe('yargs-parser', function () { const argv = parser('-k 1 -u 2', { number: ['k'], configuration: { - 'ignore-unknown-options': true + 'parse-unknown-options': false } }) argv.should.deep.equal({ @@ -3123,7 +3123,7 @@ describe('yargs-parser', function () { const argv = parser('-k1 -u2', { number: ['k'], configuration: { - 'ignore-unknown-options': true + 'parse-unknown-options': false } }) argv.should.deep.equal({ @@ -3135,7 +3135,7 @@ describe('yargs-parser', function () { const argv = parser('-k/1/ -u/2/', { string: ['k'], configuration: { - 'ignore-unknown-options': true + 'parse-unknown-options': false } }) argv.should.deep.equal({ @@ -3148,7 +3148,7 @@ describe('yargs-parser', function () { const argv = parser('-kuv', { boolean: ['k', 'v'], configuration: { - 'ignore-unknown-options': true + 'parse-unknown-options': false } }) argv.should.deep.equal({ @@ -3160,7 +3160,7 @@ describe('yargs-parser', function () { const argv = parser('-kvu', { boolean: ['k', 'v'], configuration: { - 'ignore-unknown-options': true + 'parse-unknown-options': false } }) argv.should.deep.equal({