fix: boolean arrays with default values (#185) · yargs/yargs-parser@7d42572
@@ -156,15 +156,15 @@ function parse (args, opts) {
156156args.splice(i + 1, 0, m[2])
157157i = eatNargs(i, m[1], args)
158158// arrays format = '--f=a b c'
159-} else if (checkAllAliases(m[1], flags.arrays) && args.length > i + 1) {
159+} else if (checkAllAliases(m[1], flags.arrays)) {
160160args.splice(i + 1, 0, m[2])
161161i = eatArray(i, m[1], args)
162162} else {
163163setArg(m[1], m[2])
164164}
165165} else if (arg.match(negatedBoolean) && configuration['boolean-negation']) {
166166key = arg.match(negatedBoolean)[1]
167-setArg(key, false)
167+setArg(key, checkAllAliases(key, flags.arrays) ? [false] : false)
168168169169// -- seperated by space.
170170} else if (arg.match(/^--.+/) || (
@@ -177,7 +177,7 @@ function parse (args, opts) {
177177if (checkAllAliases(key, flags.nargs) !== false) {
178178i = eatNargs(i, key, args)
179179// array format = '--foo a b c'
180-} else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) {
180+} else if (checkAllAliases(key, flags.arrays)) {
181181i = eatArray(i, key, args)
182182} else {
183183next = args[i + 1]
@@ -230,7 +230,7 @@ function parse (args, opts) {
230230args.splice(i + 1, 0, value)
231231i = eatNargs(i, key, args)
232232// array format = '-f=a b c'
233-} else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) {
233+} else if (checkAllAliases(key, flags.arrays)) {
234234args.splice(i + 1, 0, value)
235235i = eatArray(i, key, args)
236236} else {
@@ -271,7 +271,7 @@ function parse (args, opts) {
271271if (checkAllAliases(key, flags.nargs) !== false) {
272272i = eatNargs(i, key, args)
273273// array format = '-f a b c'
274-} else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) {
274+} else if (checkAllAliases(key, flags.arrays)) {
275275i = eatArray(i, key, args)
276276} else {
277277next = args[i + 1]
@@ -376,30 +376,27 @@ function parse (args, opts) {
376376// following it... YUM!
377377// e.g., --foo apple banana cat becomes ["apple", "banana", "cat"]
378378function eatArray (i, key, args) {
379-var start = i + 1
380-var argsToSet = []
381- var multipleArrayFlag = i > 0
382-for (var ii = i + 1; ii < args.length; ii++) {
383-if (/^-/.test(args[ii]) && !negative.test(args[ii])) {
384- if (ii === start) {
385- setArg(key, defaultForType('array'))
386- }
387- multipleArrayFlag = true
388-break
379+let argsToSet = []
380+let next = args[i + 1]
381+382+if (checkAllAliases(key, flags.bools) && !(/^(true|false)$/.test(next))) {
383+argsToSet.push(true)
384+} else if (isUndefined(next) || (/^-/.test(next) && !negative.test(next))) {
385+// for keys without value ==> argsToSet remains an empty []
386+// set user default value, if available
387+if (defaults.hasOwnProperty(key)) {
388+argsToSet.push(defaults[key])
389389}
390-i = ii
391-argsToSet.push(args[ii])
392-}
393-if (multipleArrayFlag) {
394-setArg(key, argsToSet.map(function (arg) {
395-return processValue(key, arg)
396-}))
397390} else {
398-argsToSet.forEach(function (arg) {
399-setArg(key, arg)
400-})
391+for (var ii = i + 1; ii < args.length; ii++) {
392+next = args[ii]
393+if (/^-/.test(next) && !negative.test(next)) break
394+i = ii
395+argsToSet.push(processValue(key, next))
396+}
401397}
402398399+setArg(key, argsToSet)
403400return i
404401}
405402@@ -791,6 +788,7 @@ function parse (args, opts) {
791788792789if (checkAllAliases(key, flags.strings)) type = 'string'
793790else if (checkAllAliases(key, flags.numbers)) type = 'number'
791+else if (checkAllAliases(key, flags.bools)) type = 'boolean'
794792else if (checkAllAliases(key, flags.arrays)) type = 'array'
795793796794return type