feat: allow multiple arrays to be provided, rather than always combin… · yargs/yargs-parser@0f0fb2d
@@ -15,7 +15,9 @@ function parse (args, opts) {
1515'camel-case-expansion': true,
1616'dot-notation': true,
1717'parse-numbers': true,
18-'boolean-negation': true
18+'boolean-negation': true,
19+'duplicate-arguments-array': true,
20+'flatten-duplicate-arrays': true
1921}, opts.configuration)
2022var defaults = opts.default || {}
2123var configObjects = opts.configObjects || []
@@ -310,15 +312,25 @@ function parse (args, opts) {
310312// e.g., --foo apple banana cat becomes ["apple", "banana", "cat"]
311313function eatArray (i, key, args) {
312314var start = i + 1
315+var argsToSet = []
316+var multipleArrayFlag = i > 0
313317for (var ii = i + 1; ii < args.length; ii++) {
314318if (/^-/.test(args[ii]) && !negative.test(args[ii])) {
315319if (ii === start) {
316320setArg(key, defaultForType('array'))
317321}
322+multipleArrayFlag = true
318323break
319324}
320325i = ii
321-setArg(key, args[ii])
326+argsToSet.push(args[ii])
327+}
328+if (multipleArrayFlag && !configuration['flatten-duplicate-arrays']) {
329+setArg(key, argsToSet)
330+} else {
331+argsToSet.forEach(function (arg) {
332+setArg(key, arg)
333+})
322334}
323335324336return i
@@ -539,13 +551,15 @@ function parse (args, opts) {
539551if (value === increment) {
540552o[key] = increment(o[key])
541553} else if (o[key] === undefined && checkAllAliases(key, flags.arrays)) {
542-o[key] = Array.isArray(value) ? value : [value]
554+o[key] = Array.isArray(value) && configuration['flatten-duplicate-arrays'] ? value : [value]
543555} else if (o[key] === undefined || checkAllAliases(key, flags.bools) || checkAllAliases(keys.join('.'), flags.bools) || checkAllAliases(key, flags.counts)) {
544556o[key] = value
545557} else if (Array.isArray(o[key])) {
546558o[key].push(value)
547-} else {
559+} else if (configuration['duplicate-arguments-array']) {
548560o[key] = [ o[key], value ]
561+} else {
562+o[key] = value
549563}
550564}
551565