@@ -20,7 +20,8 @@ function parse (args, opts) {
2020 'duplicate-arguments-array' : true ,
2121 'flatten-duplicate-arrays' : true ,
2222 'populate--' : false ,
23- 'combine-arrays' : false
23+ 'combine-arrays' : false ,
24+ 'set-placeholder-key' : false
2425 } , opts . configuration )
2526 var defaults = opts . default || { }
2627 var configObjects = opts . configObjects || [ ]
@@ -44,41 +45,50 @@ function parse (args, opts) {
4445 configs : { } ,
4546 defaulted : { } ,
4647 nargs : { } ,
47- coercions : { }
48+ coercions : { } ,
49+ keys : [ ]
4850 }
4951 var negative = / ^ - [ 0 - 9 ] + ( \. [ 0 - 9 ] + ) ? /
5052 var negatedBoolean = new RegExp ( '^--' + configuration [ 'negation-prefix' ] + '(.+)' )
5153
5254 ; [ ] . concat ( opts . array ) . filter ( Boolean ) . forEach ( function ( key ) {
5355 flags . arrays [ key ] = true
56+ flags . keys . push ( key )
5457 } )
5558
5659 ; [ ] . concat ( opts . boolean ) . filter ( Boolean ) . forEach ( function ( key ) {
5760 flags . bools [ key ] = true
61+ flags . keys . push ( key )
5862 } )
5963
6064 ; [ ] . concat ( opts . string ) . filter ( Boolean ) . forEach ( function ( key ) {
6165 flags . strings [ key ] = true
66+ flags . keys . push ( key )
6267 } )
6368
6469 ; [ ] . concat ( opts . number ) . filter ( Boolean ) . forEach ( function ( key ) {
6570 flags . numbers [ key ] = true
71+ flags . keys . push ( key )
6672 } )
6773
6874 ; [ ] . concat ( opts . count ) . filter ( Boolean ) . forEach ( function ( key ) {
6975 flags . counts [ key ] = true
76+ flags . keys . push ( key )
7077 } )
7178
7279 ; [ ] . concat ( opts . normalize ) . filter ( Boolean ) . forEach ( function ( key ) {
7380 flags . normalize [ key ] = true
81+ flags . keys . push ( key )
7482 } )
7583
7684 Object . keys ( opts . narg || { } ) . forEach ( function ( k ) {
7785 flags . nargs [ k ] = opts . narg [ k ]
86+ flags . keys . push ( k )
7887 } )
7988
8089 Object . keys ( opts . coerce || { } ) . forEach ( function ( k ) {
8190 flags . coercions [ k ] = opts . coerce [ k ]
91+ flags . keys . push ( k )
8292 } )
8393
8494 if ( Array . isArray ( opts . config ) || typeof opts . config === 'string' ) {
@@ -289,6 +299,7 @@ function parse (args, opts) {
289299 setConfigObjects ( )
290300 applyDefaultsAndAliases ( argv , flags . aliases , defaults )
291301 applyCoercions ( argv )
302+ if ( configuration [ 'set-placeholder-key' ] ) setPlaceholderKeys ( argv )
292303
293304 // for any counts either not in args or without an explicit default, set to 0
294305 Object . keys ( flags . counts ) . forEach ( function ( key ) {
@@ -556,6 +567,15 @@ function parse (args, opts) {
556567 } )
557568 }
558569
570+ function setPlaceholderKeys ( argv ) {
571+ flags . keys . forEach ( ( key ) => {
572+ // don't set placeholder keys for dot notation options 'foo.bar'.
573+ if ( ~ key . indexOf ( '.' ) ) return
574+ if ( typeof argv [ key ] === 'undefined' ) argv [ key ] = undefined
575+ } )
576+ return argv
577+ }
578+
559579 function applyDefaultsAndAliases ( obj , aliases , defaults ) {
560580 Object . keys ( defaults ) . forEach ( function ( key ) {
561581 if ( ! hasKey ( obj , key . split ( '.' ) ) ) {
0 commit comments