@@ -9,18 +9,22 @@ function resolvePath(unresolvedPath) {
9
9
return path . resolve ( process . cwd ( ) , unresolvedPath ) ;
10
10
}
11
11
12
+ const doubleDash = s => / ^ - - / . test ( s ) ;
13
+ const dash = s => / ^ - [ ^ - ] * $ / . test ( s ) ;
14
+
12
15
function getFirstNonOptionArgIndex ( args ) {
13
16
for ( let i = 2 ; i < args . length ; i += 1 ) {
14
- if ( args [ i ] [ 0 ] != '-' ) return i ;
17
+ if ( ! doubleDash ( args [ i ] ) && ! dash ( args [ i ] ) && ! dash ( args [ i - 1 ] || '' ) ) return i ;
15
18
}
16
19
17
- return args . length ;
20
+ return args . length - 1 ;
18
21
}
19
22
20
23
module . exports = argv => {
21
- const nodeArgs = [ ] ;
24
+ const unknownArgs = [ ] ;
22
25
23
26
const scriptIndex = getFirstNonOptionArgIndex ( argv ) ;
27
+
24
28
const script = argv [ scriptIndex ] ;
25
29
const scriptArgs = argv . slice ( scriptIndex + 1 ) ;
26
30
const devArgs = argv . slice ( 2 , scriptIndex ) ;
@@ -29,15 +33,25 @@ module.exports = argv => {
29
33
boolean : [ 'clear' , 'dedupe' , 'fork' , 'notify' , 'poll' , 'respawn' , 'vm' ] ,
30
34
string : [ 'graceful_ipc' , 'ignore' , 'timestamp' ] ,
31
35
default : getConfig ( script ) ,
32
- unknown : function ( arg ) {
33
- const argKeys = Object . keys ( minimist ( [ arg ] ) ) ;
36
+ unknown : arg => {
37
+ const key = Object . keys ( minimist ( [ arg ] ) ) [ 1 ] ;
34
38
35
- if ( configKeys . some ( k => argKeys . includes ( k ) ) ) {
36
- return true ;
39
+ if ( ! configKeys . includes ( key ) ) {
40
+ unknownArgs . push ( { arg , key } ) ;
37
41
}
42
+ }
43
+ } ) ;
38
44
39
- nodeArgs . push ( arg ) ;
45
+ const nodeArgs = unknownArgs . reduce ( ( out , { arg, key } ) => {
46
+ out . push ( arg ) ;
47
+ if ( typeof opts [ key ] !== 'boolean' && ! arg . includes ( '=' ) ) {
48
+ out . push ( opts [ key ] ) ;
40
49
}
50
+ return out ;
51
+ } , [ ] ) ;
52
+
53
+ unknownArgs . forEach ( ( { key } ) => {
54
+ delete opts [ key ] ;
41
55
} ) ;
42
56
43
57
opts . ignore = [ ...Array . isArray ( opts . ignore ) ? opts . ignore : [ opts . ignore ] ] . map ( resolvePath ) ;
0 commit comments