@@ -16,7 +16,8 @@ function parse (args, opts) {
16
16
'dot-notation' : true ,
17
17
'parse-numbers' : true ,
18
18
'boolean-negation' : true ,
19
- 'duplicate-arguments-array' : true
19
+ 'duplicate-arguments-array' : true ,
20
+ 'flatten-duplicate-arrays' : true
20
21
} , opts . configuration )
21
22
var defaults = opts . default || { }
22
23
var configObjects = opts . configObjects || [ ]
@@ -311,15 +312,24 @@ function parse (args, opts) {
311
312
// e.g., --foo apple banana cat becomes ["apple", "banana", "cat"]
312
313
function eatArray ( i , key , args ) {
313
314
var start = i + 1
315
+ var argsToSet = [ ] , multipleArrayFlag = i > 0
314
316
for ( var ii = i + 1 ; ii < args . length ; ii ++ ) {
315
317
if ( / ^ - / . test ( args [ ii ] ) && ! negative . test ( args [ ii ] ) ) {
316
318
if ( ii === start ) {
317
319
setArg ( key , defaultForType ( 'array' ) )
318
320
}
321
+ multipleArrayFlag = true
319
322
break
320
323
}
321
324
i = ii
322
- setArg ( key , args [ ii ] )
325
+ argsToSet . push ( args [ ii ] )
326
+ }
327
+ if ( multipleArrayFlag && ! configuration [ 'flatten-duplicate-arrays' ] ) {
328
+ setArg ( key , argsToSet )
329
+ } else {
330
+ argsToSet . forEach ( function ( arg ) {
331
+ setArg ( key , arg )
332
+ } )
323
333
}
324
334
325
335
return i
@@ -540,7 +550,7 @@ function parse (args, opts) {
540
550
if ( value === increment ) {
541
551
o [ key ] = increment ( o [ key ] )
542
552
} else if ( o [ key ] === undefined && checkAllAliases ( key , flags . arrays ) ) {
543
- o [ key ] = Array . isArray ( value ) ? value : [ value ]
553
+ o [ key ] = Array . isArray ( value ) && configuration [ 'flatten-duplicate-arrays' ] ? value : [ value ]
544
554
} else if ( o [ key ] === undefined || checkAllAliases ( key , flags . bools ) || checkAllAliases ( keys . join ( '.' ) , flags . bools ) || checkAllAliases ( key , flags . counts ) ) {
545
555
o [ key ] = value
546
556
} else if ( Array . isArray ( o [ key ] ) ) {
0 commit comments