-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathforked.js
More file actions
41 lines (37 loc) · 1.14 KB
/
forked.js
File metadata and controls
41 lines (37 loc) · 1.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
let file = process.argv[2];
process.title = process.argv[3];
process.argv.splice(1, 1);
process.argv.splice(2, 1);
function send(message, retries = 0) {
try {
process.send(message)
} catch (err) {
if (retries < 3) {
return setImmediate(() => send(message, ++retries));
}
throw err;
}
}
try {
let forkedModule = require(file);
process.on('message', async message => {
try {
if (message.prop) {
if (!forkedModule[message.prop]) {
return send({error: 'TypeError: ' + message.prop + ' is not a function', stack: ''})
}
let response = await forkedModule[message.prop](...message.args);
send({response});
} else {
let response = await forkedModule(...message.args);
send({response});
}
} catch(err) {
send({error: err.message, stack: err.stack});
}
});
} catch (err) {
send({error: err.message, stack: err.stack, failed: true});
}
// Watch parent exit when it dies
process.on('disconnect', () => process.exit());