@@ -16,7 +16,8 @@ function parse (args, opts) {
1616 'dot-notation' : true ,
1717 'parse-numbers' : true ,
1818 'boolean-negation' : true ,
19- 'duplicate-arguments-array' : true
19+ 'duplicate-arguments-array' : true ,
20+ 'flatten-duplicate-arrays' : true
2021 } , opts . configuration )
2122 var defaults = opts . default || { }
2223 var configObjects = opts . configObjects || [ ]
@@ -311,15 +312,24 @@ function parse (args, opts) {
311312 // e.g., --foo apple banana cat becomes ["apple", "banana", "cat"]
312313 function eatArray ( i , key , args ) {
313314 var start = i + 1
315+ var argsToSet = [ ] , multipleArrayFlag = i > 0
314316 for ( var ii = i + 1 ; ii < args . length ; ii ++ ) {
315317 if ( / ^ - / . test ( args [ ii ] ) && ! negative . test ( args [ ii ] ) ) {
316318 if ( ii === start ) {
317319 setArg ( key , defaultForType ( 'array' ) )
318320 }
321+ multipleArrayFlag = true
319322 break
320323 }
321324 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+ } )
323333 }
324334
325335 return i
@@ -540,7 +550,7 @@ function parse (args, opts) {
540550 if ( value === increment ) {
541551 o [ key ] = increment ( o [ key ] )
542552 } 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 ]
544554 } else if ( o [ key ] === undefined || checkAllAliases ( key , flags . bools ) || checkAllAliases ( keys . join ( '.' ) , flags . bools ) || checkAllAliases ( key , flags . counts ) ) {
545555 o [ key ] = value
546556 } else if ( Array . isArray ( o [ key ] ) ) {
0 commit comments