Skip to content

Commit 2f2ff5a

Browse files
committed
eatArray() with boolean's and user default
1 parent d27b9ce commit 2f2ff5a

File tree

1 file changed

+23
-25
lines changed

1 file changed

+23
-25
lines changed

index.js

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -167,15 +167,15 @@ function parse (args, opts) {
167167
args.splice(i + 1, 0, m[2])
168168
i = eatNargs(i, m[1], args)
169169
// arrays format = '--f=a b c'
170-
} else if (checkAllAliases(m[1], flags.arrays) && args.length > i + 1) {
170+
} else if (checkAllAliases(m[1], flags.arrays)) {
171171
args.splice(i + 1, 0, m[2])
172172
i = eatArray(i, m[1], args)
173173
} else {
174174
setArg(m[1], m[2])
175175
}
176176
} else if (arg.match(negatedBoolean) && configuration['boolean-negation']) {
177177
key = arg.match(negatedBoolean)[1]
178-
setArg(key, false)
178+
setArg(key, checkAllAliases(key, flags.arrays) ? [false] : false)
179179

180180
// -- seperated by space.
181181
} else if (arg.match(/^--.+/) || (
@@ -188,7 +188,7 @@ function parse (args, opts) {
188188
if (checkAllAliases(key, flags.nargs) !== false) {
189189
i = eatNargs(i, key, args)
190190
// array format = '--foo a b c'
191-
} else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) {
191+
} else if (checkAllAliases(key, flags.arrays)) {
192192
i = eatArray(i, key, args)
193193
} else {
194194
next = args[i + 1]
@@ -241,7 +241,7 @@ function parse (args, opts) {
241241
args.splice(i + 1, 0, value)
242242
i = eatNargs(i, key, args)
243243
// array format = '-f=a b c'
244-
} else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) {
244+
} else if (checkAllAliases(key, flags.arrays)) {
245245
args.splice(i + 1, 0, value)
246246
i = eatArray(i, key, args)
247247
} else {
@@ -282,7 +282,7 @@ function parse (args, opts) {
282282
if (checkAllAliases(key, flags.nargs) !== false) {
283283
i = eatNargs(i, key, args)
284284
// array format = '-f a b c'
285-
} else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) {
285+
} else if (checkAllAliases(key, flags.arrays)) {
286286
i = eatArray(i, key, args)
287287
} else {
288288
next = args[i + 1]
@@ -387,30 +387,27 @@ function parse (args, opts) {
387387
// following it... YUM!
388388
// e.g., --foo apple banana cat becomes ["apple", "banana", "cat"]
389389
function eatArray (i, key, args) {
390-
var start = i + 1
391-
var argsToSet = []
392-
var multipleArrayFlag = i > 0
393-
for (var ii = i + 1; ii < args.length; ii++) {
394-
if (/^-/.test(args[ii]) && !negative.test(args[ii])) {
395-
if (ii === start) {
396-
setArg(key, defaultForType('array'))
397-
}
398-
multipleArrayFlag = true
399-
break
390+
let argsToSet = []
391+
let next = args[i + 1]
392+
393+
if (checkAllAliases(key, flags.bools) && !(/^(true|false)$/.test(next))) {
394+
argsToSet.push(true)
395+
} else if (isUndefined(next) || (/^-/.test(next) && !negative.test(next))) {
396+
// for keys without value ==> argsToSet remains an empty []
397+
// set user default value, if available
398+
if (defaults.hasOwnProperty(key)) {
399+
argsToSet.push(defaults[key])
400400
}
401-
i = ii
402-
argsToSet.push(args[ii])
403-
}
404-
if (multipleArrayFlag) {
405-
setArg(key, argsToSet.map(function (arg) {
406-
return processValue(key, arg)
407-
}))
408401
} else {
409-
argsToSet.forEach(function (arg) {
410-
setArg(key, arg)
411-
})
402+
for (var ii = i + 1; ii < args.length; ii++) {
403+
next = args[ii]
404+
if (/^-/.test(next) && !negative.test(next)) break
405+
i = ii
406+
argsToSet.push(processValue(key, next))
407+
}
412408
}
413409

410+
setArg(key, argsToSet)
414411
return i
415412
}
416413

@@ -802,6 +799,7 @@ function parse (args, opts) {
802799

803800
if (checkAllAliases(key, flags.strings)) type = 'string'
804801
else if (checkAllAliases(key, flags.numbers)) type = 'number'
802+
else if (checkAllAliases(key, flags.bools)) type = 'boolean'
805803
else if (checkAllAliases(key, flags.arrays)) type = 'array'
806804

807805
return type

0 commit comments

Comments
 (0)