1
- const path = require ( 'path' ) ;
2
1
const cp = require ( 'child_process' ) ;
2
+ const path = require ( 'path' ) ;
3
3
const util = require ( 'util' ) ;
4
4
5
5
function getProcessArgs ( ) {
@@ -26,6 +26,12 @@ function handleResponse(process, resolve, reject, source) {
26
26
}
27
27
28
28
function fixStack ( stack , source ) {
29
+ if ( ! stack ) {
30
+ return ;
31
+ }
32
+ if ( ! source ) {
33
+ return stack ;
34
+ }
29
35
let myStack = source . stack ;
30
36
let tail = myStack . substr ( myStack . indexOf ( '\n' , myStack . indexOf ( '\n' ) + 1 ) ) ;
31
37
let head = stack . substr ( 0 , stack . substr ( 0 , stack . indexOf ( 'forked.js' ) ) . lastIndexOf ( '\n' ) ) ;
@@ -48,7 +54,7 @@ module.exports = (file, options = {
48
54
let filePath = path . isAbsolute ( file ) ? file : path . join ( calleePath , file ) ;
49
55
options . args . unshift ( filePath , options . title || 'fork-require.js file ' + filePath ) ;
50
56
51
- let child = cp . fork ( './ forked.js', options . args , {
57
+ let child = cp . fork ( path . join ( __dirname , ' forked.js') , options . args , {
52
58
env : options . env ,
53
59
cwd : options . cwd ,
54
60
execArgv : options . execArgv ,
@@ -63,15 +69,18 @@ module.exports = (file, options = {
63
69
}
64
70
} ) ;
65
71
66
- return new Proxy ( ( ) => { } , {
72
+ let proxy = new Proxy ( ( ) => { this . process = process } , {
67
73
apply : ( _ , __ , args ) => {
68
74
let source = new Error ( ) ;
69
75
return new Promise ( ( resolve , reject ) => {
70
76
handleResponse ( child , resolve , reject , options . fixStack && source ) ;
71
77
child . send ( { args} ) ;
72
78
} ) ;
73
79
} ,
74
- get : ( _ , prop ) => {
80
+ get : ( obj , prop ) => {
81
+ if ( obj [ prop ] ) {
82
+ return obj [ prop ] ;
83
+ }
75
84
let source = new Error ( ) ;
76
85
return function ( ...args ) {
77
86
return new Promise ( ( resolve , reject ) => {
@@ -81,4 +90,6 @@ module.exports = (file, options = {
81
90
}
82
91
}
83
92
} ) ;
84
- } ;
93
+ proxy . _childProcess = child ;
94
+ return proxy ;
95
+ } ;
0 commit comments