@@ -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 )
2022 var defaults = opts . default || { }
2123 var configObjects = opts . configObjects || [ ]
@@ -310,15 +312,25 @@ function parse (args, opts) {
310312 // e.g., --foo apple banana cat becomes ["apple", "banana", "cat"]
311313 function eatArray ( i , key , args ) {
312314 var start = i + 1
315+ var argsToSet = [ ]
316+ var multipleArrayFlag = i > 0
313317 for ( var ii = i + 1 ; ii < args . length ; ii ++ ) {
314318 if ( / ^ - / . test ( args [ ii ] ) && ! negative . test ( args [ ii ] ) ) {
315319 if ( ii === start ) {
316320 setArg ( key , defaultForType ( 'array' ) )
317321 }
322+ multipleArrayFlag = true
318323 break
319324 }
320325 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+ } )
322334 }
323335
324336 return i
@@ -539,13 +551,15 @@ function parse (args, opts) {
539551 if ( value === increment ) {
540552 o [ 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 ) ) {
544556 o [ key ] = value
545557 } else if ( Array . isArray ( o [ key ] ) ) {
546558 o [ key ] . push ( value )
547- } else {
559+ } else if ( configuration [ 'duplicate-arguments-array' ] ) {
548560 o [ key ] = [ o [ key ] , value ]
561+ } else {
562+ o [ key ] = value
549563 }
550564 }
551565
0 commit comments