@@ -15,7 +15,9 @@ function parse (args, opts) {
15
15
'camel-case-expansion' : true ,
16
16
'dot-notation' : true ,
17
17
'parse-numbers' : true ,
18
- 'boolean-negation' : true
18
+ 'boolean-negation' : true ,
19
+ 'duplicate-arguments-array' : true ,
20
+ 'flatten-duplicate-arrays' : true
19
21
} , opts . configuration )
20
22
var defaults = opts . default || { }
21
23
var configObjects = opts . configObjects || [ ]
@@ -310,15 +312,25 @@ function parse (args, opts) {
310
312
// e.g., --foo apple banana cat becomes ["apple", "banana", "cat"]
311
313
function eatArray ( i , key , args ) {
312
314
var start = i + 1
315
+ var argsToSet = [ ]
316
+ var multipleArrayFlag = i > 0
313
317
for ( var ii = i + 1 ; ii < args . length ; ii ++ ) {
314
318
if ( / ^ - / . test ( args [ ii ] ) && ! negative . test ( args [ ii ] ) ) {
315
319
if ( ii === start ) {
316
320
setArg ( key , defaultForType ( 'array' ) )
317
321
}
322
+ multipleArrayFlag = true
318
323
break
319
324
}
320
325
i = 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
+ } )
322
334
}
323
335
324
336
return i
@@ -539,13 +551,15 @@ function parse (args, opts) {
539
551
if ( value === increment ) {
540
552
o [ key ] = increment ( o [ key ] )
541
553
} 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 ]
543
555
} else if ( o [ key ] === undefined || checkAllAliases ( key , flags . bools ) || checkAllAliases ( keys . join ( '.' ) , flags . bools ) || checkAllAliases ( key , flags . counts ) ) {
544
556
o [ key ] = value
545
557
} else if ( Array . isArray ( o [ key ] ) ) {
546
558
o [ key ] . push ( value )
547
- } else {
559
+ } else if ( configuration [ 'duplicate-arguments-array' ] ) {
548
560
o [ key ] = [ o [ key ] , value ]
561
+ } else {
562
+ o [ key ] = value
549
563
}
550
564
}
551
565
0 commit comments