bullmq 3.12.1 → 3.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/cjs/classes/child-pool.js +14 -92
  2. package/dist/cjs/classes/child-pool.js.map +1 -1
  3. package/dist/cjs/classes/child-processor.js +14 -11
  4. package/dist/cjs/classes/child-processor.js.map +1 -1
  5. package/dist/cjs/classes/child.js +216 -0
  6. package/dist/cjs/classes/child.js.map +1 -0
  7. package/dist/cjs/classes/index.js +2 -2
  8. package/dist/cjs/classes/index.js.map +1 -1
  9. package/dist/cjs/classes/main-base.js +45 -0
  10. package/dist/cjs/classes/main-base.js.map +1 -0
  11. package/dist/cjs/classes/main-worker.js +10 -0
  12. package/dist/cjs/classes/main-worker.js.map +1 -0
  13. package/dist/cjs/classes/main.js +10 -0
  14. package/dist/cjs/classes/main.js.map +1 -0
  15. package/dist/cjs/classes/sandbox.js +3 -4
  16. package/dist/cjs/classes/sandbox.js.map +1 -1
  17. package/dist/cjs/classes/worker.js +11 -5
  18. package/dist/cjs/classes/worker.js.map +1 -1
  19. package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
  20. package/dist/cjs/utils.js +4 -3
  21. package/dist/cjs/utils.js.map +1 -1
  22. package/dist/esm/classes/child-pool.d.ts +15 -14
  23. package/dist/esm/classes/child-pool.js +14 -92
  24. package/dist/esm/classes/child-pool.js.map +1 -1
  25. package/dist/esm/classes/child-processor.d.ts +3 -1
  26. package/dist/esm/classes/child-processor.js +15 -12
  27. package/dist/esm/classes/child-processor.js.map +1 -1
  28. package/dist/esm/classes/child.d.ts +36 -0
  29. package/dist/esm/classes/child.js +212 -0
  30. package/dist/esm/classes/child.js.map +1 -0
  31. package/dist/esm/classes/index.d.ts +0 -1
  32. package/dist/esm/classes/index.js +2 -2
  33. package/dist/esm/classes/index.js.map +1 -1
  34. package/dist/esm/classes/main-base.d.ts +4 -0
  35. package/dist/esm/classes/main-base.js +43 -0
  36. package/dist/esm/classes/main-base.js.map +1 -0
  37. package/dist/esm/classes/main-worker.d.ts +1 -0
  38. package/dist/esm/classes/main-worker.js +8 -0
  39. package/dist/esm/classes/main-worker.js.map +1 -0
  40. package/dist/esm/classes/main.d.ts +1 -0
  41. package/dist/esm/classes/main.js +8 -0
  42. package/dist/esm/classes/main.js.map +1 -0
  43. package/dist/esm/classes/sandbox.js +3 -4
  44. package/dist/esm/classes/sandbox.js.map +1 -1
  45. package/dist/esm/classes/worker.js +11 -5
  46. package/dist/esm/classes/worker.js.map +1 -1
  47. package/dist/esm/interfaces/worker-options.d.ts +8 -0
  48. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  49. package/dist/esm/utils.d.ts +2 -3
  50. package/dist/esm/utils.js +3 -1
  51. package/dist/esm/utils.js.map +1 -1
  52. package/package.json +3 -3
  53. package/dist/cjs/classes/master.js +0 -39
  54. package/dist/cjs/classes/master.js.map +0 -1
  55. package/dist/cjs/classes/process-utils.js +0 -34
  56. package/dist/cjs/classes/process-utils.js.map +0 -1
  57. package/dist/esm/classes/master.js +0 -37
  58. package/dist/esm/classes/master.js.map +0 -1
  59. package/dist/esm/classes/process-utils.d.ts +0 -7
  60. package/dist/esm/classes/process-utils.js +0 -31
  61. package/dist/esm/classes/process-utils.js.map +0 -1
  62. /package/dist/cjs/classes/{master.d.ts → main-worker.d.ts} +0 -0
  63. /package/dist/{esm/classes/master.d.ts → cjs/classes/main.d.ts} +0 -0
@@ -1,111 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ChildPool = void 0;
4
- const child_process_1 = require("child_process");
5
4
  const path = require("path");
6
- const net_1 = require("net");
7
- const process_utils_1 = require("./process-utils");
8
- const interfaces_1 = require("../interfaces");
9
- const utils_1 = require("../utils");
5
+ const child_1 = require("./child");
10
6
  const CHILD_KILL_TIMEOUT = 30000;
11
- const getFreePort = async () => {
12
- return new Promise(resolve => {
13
- const server = (0, net_1.createServer)();
14
- server.listen(0, () => {
15
- const { port } = server.address();
16
- server.close(() => resolve(port));
17
- });
18
- });
19
- };
20
- const convertExecArgv = async (execArgv) => {
21
- const standard = [];
22
- const convertedArgs = [];
23
- for (let i = 0; i < execArgv.length; i++) {
24
- const arg = execArgv[i];
25
- if (arg.indexOf('--inspect') === -1) {
26
- standard.push(arg);
27
- }
28
- else {
29
- const argName = arg.split('=')[0];
30
- const port = await getFreePort();
31
- convertedArgs.push(`${argName}=${port}`);
32
- }
33
- }
34
- return standard.concat(convertedArgs);
35
- };
36
- /**
37
- * @see https://nodejs.org/api/process.html#process_exit_codes
38
- */
39
- const exitCodesErrors = {
40
- 1: 'Uncaught Fatal Exception',
41
- 2: 'Unused',
42
- 3: 'Internal JavaScript Parse Error',
43
- 4: 'Internal JavaScript Evaluation Failure',
44
- 5: 'Fatal Error',
45
- 6: 'Non-function Internal Exception Handler',
46
- 7: 'Internal Exception Handler Run-Time Failure',
47
- 8: 'Unused',
48
- 9: 'Invalid Argument',
49
- 10: 'Internal JavaScript Run-Time Failure',
50
- 12: 'Invalid Debug Argument',
51
- 13: 'Unfinished Top-Level Await',
52
- };
53
- async function initChild(child, processFile) {
54
- const onComplete = new Promise((resolve, reject) => {
55
- const onMessageHandler = (msg) => {
56
- if (msg.cmd === interfaces_1.ParentCommand.InitCompleted) {
57
- resolve();
58
- }
59
- else if (msg.cmd === interfaces_1.ParentCommand.InitFailed) {
60
- const err = new Error();
61
- err.stack = msg.err.stack;
62
- err.message = msg.err.message;
63
- reject(err);
64
- }
65
- child.off('message', onMessageHandler);
66
- child.off('close', onCloseHandler);
67
- };
68
- const onCloseHandler = (code, signal) => {
69
- if (code > 128) {
70
- code -= 128;
71
- }
72
- const msg = exitCodesErrors[code] || `Unknown exit code ${code}`;
73
- reject(new Error(`Error initializing child: ${msg} and signal ${signal}`));
74
- child.off('message', onMessageHandler);
75
- child.off('close', onCloseHandler);
76
- };
77
- child.on('message', onMessageHandler);
78
- child.on('close', onCloseHandler);
79
- });
80
- await (0, utils_1.parentSend)(child, { cmd: interfaces_1.ChildCommand.Init, value: processFile });
81
- await onComplete;
82
- }
83
7
  class ChildPool {
84
- constructor(masterFile = path.join(process.cwd(), 'dist/cjs/classes/master.js')) {
85
- this.masterFile = masterFile;
8
+ constructor({ mainFile = path.join(process.cwd(), 'dist/cjs/classes/main.js'), useWorkerThreads, }) {
86
9
  this.retained = {};
87
10
  this.free = {};
11
+ this.opts = { mainFile, useWorkerThreads };
88
12
  }
89
13
  async retain(processFile) {
90
- const _this = this;
91
- let child = _this.getFree(processFile).pop();
14
+ let child = this.getFree(processFile).pop();
92
15
  if (child) {
93
- _this.retained[child.pid] = child;
16
+ this.retained[child.pid] = child;
94
17
  return child;
95
18
  }
96
- const execArgv = await convertExecArgv(process.execArgv);
97
- child = (0, child_process_1.fork)(this.masterFile, [], { execArgv, stdio: 'pipe' });
98
- child.processFile = processFile;
99
- _this.retained[child.pid] = child;
100
- child.on('exit', _this.remove.bind(_this, child));
101
- child.stdout.pipe(process.stdout);
102
- child.stderr.pipe(process.stderr);
19
+ child = new child_1.Child(this.opts.mainFile, processFile, {
20
+ useWorkerThreads: this.opts.useWorkerThreads,
21
+ });
22
+ child.on('exit', this.remove.bind(this, child));
103
23
  try {
104
- await initChild(child, child.processFile);
24
+ await child.init();
25
+ this.retained[child.pid] = child;
105
26
  return child;
106
27
  }
107
28
  catch (err) {
108
- _this.release(child);
29
+ console.error(err);
30
+ this.release(child);
109
31
  throw err;
110
32
  }
111
33
  }
@@ -123,7 +45,7 @@ class ChildPool {
123
45
  }
124
46
  async kill(child, signal = 'SIGKILL') {
125
47
  this.remove(child);
126
- await (0, process_utils_1.killAsync)(child, signal, CHILD_KILL_TIMEOUT);
48
+ return child.kill(signal, CHILD_KILL_TIMEOUT);
127
49
  }
128
50
  async clean() {
129
51
  const children = Object.values(this.retained).concat(this.getAllFree());
@@ -1 +1 @@
1
- {"version":3,"file":"child-pool.js","sourceRoot":"","sources":["../../../src/classes/child-pool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"child-pool.js","sourceRoot":"","sources":["../../../src/classes/child-pool.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAC7B,mCAAgC;AAEhC,MAAM,kBAAkB,GAAG,KAAM,CAAC;AAOlC,MAAa,SAAS;IAKpB,YAAY,EACV,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,0BAA0B,CAAC,EAC/D,gBAAgB,GACF;QAPhB,aAAQ,GAA6B,EAAE,CAAC;QACxC,SAAI,GAA+B,EAAE,CAAC;QAOpC,IAAI,CAAC,IAAI,GAAG,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,WAAmB;QAC9B,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC;QAE5C,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACjC,OAAO,KAAK,CAAC;SACd;QAED,KAAK,GAAG,IAAI,aAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE;YACjD,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB;SAC7C,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QAEhD,IAAI;YACF,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAEjC,OAAO,KAAK,CAAC;SACd;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,GAAG,CAAC;SACX;IACH,CAAC;IAED,OAAO,CAAC,KAAY;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,KAAY;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAE7C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,UAAU,GAAG,CAAC,CAAC,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;SAC5B;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CACR,KAAY,EACZ,SAAgC,SAAS;QAEzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QAEf,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,UAAU;QACR,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CACpC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EACvC,EAAE,CACH,CAAC;IACJ,CAAC;CACF;AA/ED,8BA+EC"}
@@ -15,10 +15,13 @@ var ChildStatus;
15
15
  * ChildProcessor
16
16
  *
17
17
  * This class acts as the interface between a child process and it parent process
18
- * so that jobs can be processed in different processes than the parent.
18
+ * so that jobs can be processed in different processes.
19
19
  *
20
20
  */
21
21
  class ChildProcessor {
22
+ constructor(send) {
23
+ this.send = send;
24
+ }
22
25
  async init(processorFile) {
23
26
  let processor;
24
27
  try {
@@ -33,7 +36,7 @@ class ChildProcessor {
33
36
  }
34
37
  catch (err) {
35
38
  this.status = ChildStatus.Errored;
36
- return (0, utils_1.childSend)(process, {
39
+ return this.send({
37
40
  cmd: interfaces_1.ParentCommand.InitFailed,
38
41
  err: (0, utils_1.errorToJSON)(err),
39
42
  });
@@ -54,13 +57,13 @@ class ChildProcessor {
54
57
  }
55
58
  this.processor = processor;
56
59
  this.status = ChildStatus.Idle;
57
- await (0, utils_1.childSend)(process, {
60
+ await this.send({
58
61
  cmd: interfaces_1.ParentCommand.InitCompleted,
59
62
  });
60
63
  }
61
64
  async start(jobJson) {
62
65
  if (this.status !== ChildStatus.Idle) {
63
- return (0, utils_1.childSend)(process, {
66
+ return this.send({
64
67
  cmd: interfaces_1.ParentCommand.Error,
65
68
  err: (0, utils_1.errorToJSON)(new Error('cannot start a not idling child process')),
66
69
  });
@@ -68,15 +71,15 @@ class ChildProcessor {
68
71
  this.status = ChildStatus.Started;
69
72
  this.currentJobPromise = (async () => {
70
73
  try {
71
- const job = wrapJob(jobJson);
74
+ const job = wrapJob(jobJson, this.send);
72
75
  const result = (await this.processor(job)) || {};
73
- await (0, utils_1.childSend)(process, {
76
+ await this.send({
74
77
  cmd: interfaces_1.ParentCommand.Completed,
75
78
  value: result,
76
79
  });
77
80
  }
78
81
  catch (err) {
79
- await (0, utils_1.childSend)(process, {
82
+ await this.send({
80
83
  cmd: interfaces_1.ParentCommand.Failed,
81
84
  value: (0, utils_1.errorToJSON)(!err.message ? new Error(err) : err),
82
85
  });
@@ -108,14 +111,14 @@ exports.ChildProcessor = ChildProcessor;
108
111
  * the functions on the original job object are not in tact.
109
112
  * The wrapped job adds back some of those original functions.
110
113
  */
111
- function wrapJob(job) {
114
+ function wrapJob(job, send) {
112
115
  let progressValue = job.progress;
113
116
  const updateProgress = async (progress) => {
114
117
  // Locally store reference to new progress value
115
118
  // so that we can return it from this process synchronously.
116
119
  progressValue = progress;
117
120
  // Send message to update job progress.
118
- await (0, utils_1.childSend)(process, {
121
+ await send({
119
122
  cmd: interfaces_1.ParentCommand.Progress,
120
123
  value: progress,
121
124
  });
@@ -129,7 +132,7 @@ function wrapJob(job) {
129
132
  * Emulate the real job `log` function.
130
133
  */
131
134
  log: async (row) => {
132
- (0, utils_1.childSend)(process, {
135
+ send({
133
136
  cmd: interfaces_1.ParentCommand.Log,
134
137
  value: row,
135
138
  });
@@ -138,7 +141,7 @@ function wrapJob(job) {
138
141
  * Emulate the real job `update` function.
139
142
  */
140
143
  update: async (data) => {
141
- (0, utils_1.childSend)(process, {
144
+ send({
142
145
  cmd: interfaces_1.ParentCommand.Update,
143
146
  value: data,
144
147
  });
@@ -1 +1 @@
1
- {"version":3,"file":"child-processor.js","sourceRoot":"","sources":["../../../src/classes/child-processor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"child-processor.js","sourceRoot":"","sources":["../../../src/classes/child-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,216 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Child = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const worker_threads_1 = require("worker_threads");
6
+ const net_1 = require("net");
7
+ const __1 = require("../");
8
+ const EventEmitter = require("events");
9
+ /**
10
+ * @see https://nodejs.org/api/process.html#process_exit_codes
11
+ */
12
+ const exitCodesErrors = {
13
+ 1: 'Uncaught Fatal Exception',
14
+ 2: 'Unused',
15
+ 3: 'Internal JavaScript Parse Error',
16
+ 4: 'Internal JavaScript Evaluation Failure',
17
+ 5: 'Fatal Error',
18
+ 6: 'Non-function Internal Exception Handler',
19
+ 7: 'Internal Exception Handler Run-Time Failure',
20
+ 8: 'Unused',
21
+ 9: 'Invalid Argument',
22
+ 10: 'Internal JavaScript Run-Time Failure',
23
+ 12: 'Invalid Debug Argument',
24
+ 13: 'Unfinished Top-Level Await',
25
+ };
26
+ /**
27
+ * Child class
28
+ *
29
+ * This class is used to create a child process or worker thread, and allows using
30
+ * isolated processes or threads for processing jobs.
31
+ *
32
+ */
33
+ class Child extends EventEmitter {
34
+ constructor(mainFile, processFile, opts = {
35
+ useWorkerThreads: false,
36
+ }) {
37
+ super();
38
+ this.mainFile = mainFile;
39
+ this.processFile = processFile;
40
+ this.opts = opts;
41
+ this._exitCode = null;
42
+ this._signalCode = null;
43
+ this._killed = false;
44
+ }
45
+ get pid() {
46
+ if (this.childProcess) {
47
+ return this.childProcess.pid;
48
+ }
49
+ else if (this.worker) {
50
+ return this.worker.threadId;
51
+ }
52
+ else {
53
+ throw new Error('No child process or worker thread');
54
+ }
55
+ }
56
+ get exitCode() {
57
+ return this._exitCode;
58
+ }
59
+ get signalCode() {
60
+ return this._signalCode;
61
+ }
62
+ get killed() {
63
+ if (this.childProcess) {
64
+ return this.childProcess.killed;
65
+ }
66
+ return this._killed;
67
+ }
68
+ async init() {
69
+ const execArgv = await convertExecArgv(process.execArgv);
70
+ let parent;
71
+ if (this.opts.useWorkerThreads) {
72
+ this.worker = parent = new worker_threads_1.Worker(this.mainFile, {
73
+ execArgv,
74
+ stdin: true,
75
+ stdout: true,
76
+ stderr: true,
77
+ });
78
+ }
79
+ else {
80
+ this.childProcess = parent = (0, child_process_1.fork)(this.mainFile, [], {
81
+ execArgv,
82
+ stdio: 'pipe',
83
+ });
84
+ }
85
+ parent.on('exit', (exitCode, signalCode) => {
86
+ this._exitCode = exitCode;
87
+ // Coerce to null if undefined for backwards compatibility
88
+ signalCode = typeof signalCode === 'undefined' ? null : signalCode;
89
+ this._signalCode = signalCode;
90
+ this._killed = true;
91
+ this.emit('exit', exitCode, signalCode);
92
+ // Clean all listeners, we do not expect any more events after "exit"
93
+ parent.removeAllListeners();
94
+ this.removeAllListeners();
95
+ });
96
+ parent.on('error', (...args) => this.emit('error', ...args));
97
+ parent.on('message', (...args) => this.emit('message', ...args));
98
+ parent.on('close', (...args) => this.emit('close', ...args));
99
+ parent.stdout.pipe(process.stdout);
100
+ parent.stderr.pipe(process.stderr);
101
+ await this.initChild();
102
+ }
103
+ async send(msg) {
104
+ return new Promise((resolve, reject) => {
105
+ if (this.childProcess) {
106
+ this.childProcess.send(msg, (err) => {
107
+ if (err) {
108
+ reject(err);
109
+ }
110
+ else {
111
+ resolve();
112
+ }
113
+ });
114
+ }
115
+ else if (this.worker) {
116
+ resolve(this.worker.postMessage(msg));
117
+ }
118
+ else {
119
+ resolve();
120
+ }
121
+ });
122
+ }
123
+ killProcess(signal = 'SIGKILL') {
124
+ if (this.childProcess) {
125
+ this.childProcess.kill(signal);
126
+ }
127
+ else if (this.worker) {
128
+ this.worker.terminate();
129
+ }
130
+ }
131
+ async kill(signal = 'SIGKILL', timeoutMs) {
132
+ if (this.hasProcessExited()) {
133
+ return;
134
+ }
135
+ const onExit = onExitOnce(this.childProcess || this.worker);
136
+ this.killProcess(signal);
137
+ if (timeoutMs !== undefined && (timeoutMs === 0 || isFinite(timeoutMs))) {
138
+ const timeoutHandle = setTimeout(() => {
139
+ if (!this.hasProcessExited()) {
140
+ this.killProcess('SIGKILL');
141
+ }
142
+ }, timeoutMs);
143
+ await onExit;
144
+ clearTimeout(timeoutHandle);
145
+ }
146
+ await onExit;
147
+ }
148
+ async initChild() {
149
+ const onComplete = new Promise((resolve, reject) => {
150
+ const onMessageHandler = (msg) => {
151
+ if (msg.cmd === __1.ParentCommand.InitCompleted) {
152
+ resolve();
153
+ }
154
+ else if (msg.cmd === __1.ParentCommand.InitFailed) {
155
+ const err = new Error();
156
+ err.stack = msg.err.stack;
157
+ err.message = msg.err.message;
158
+ reject(err);
159
+ }
160
+ this.off('message', onMessageHandler);
161
+ this.off('close', onCloseHandler);
162
+ };
163
+ const onCloseHandler = (code, signal) => {
164
+ if (code > 128) {
165
+ code -= 128;
166
+ }
167
+ const msg = exitCodesErrors[code] || `Unknown exit code ${code}`;
168
+ reject(new Error(`Error initializing child: ${msg} and signal ${signal}`));
169
+ this.off('message', onMessageHandler);
170
+ this.off('close', onCloseHandler);
171
+ };
172
+ this.on('message', onMessageHandler);
173
+ this.on('close', onCloseHandler);
174
+ });
175
+ await this.send({
176
+ cmd: __1.ChildCommand.Init,
177
+ value: this.processFile,
178
+ });
179
+ await onComplete;
180
+ }
181
+ hasProcessExited() {
182
+ return !!(this.exitCode !== null || this.signalCode);
183
+ }
184
+ }
185
+ exports.Child = Child;
186
+ function onExitOnce(child) {
187
+ return new Promise(resolve => {
188
+ child.once('exit', () => resolve());
189
+ });
190
+ }
191
+ const getFreePort = async () => {
192
+ return new Promise(resolve => {
193
+ const server = (0, net_1.createServer)();
194
+ server.listen(0, () => {
195
+ const { port } = server.address();
196
+ server.close(() => resolve(port));
197
+ });
198
+ });
199
+ };
200
+ const convertExecArgv = async (execArgv) => {
201
+ const standard = [];
202
+ const convertedArgs = [];
203
+ for (let i = 0; i < execArgv.length; i++) {
204
+ const arg = execArgv[i];
205
+ if (arg.indexOf('--inspect') === -1) {
206
+ standard.push(arg);
207
+ }
208
+ else {
209
+ const argName = arg.split('=')[0];
210
+ const port = await getFreePort();
211
+ convertedArgs.push(`${argName}=${port}`);
212
+ }
213
+ }
214
+ return standard.concat(convertedArgs);
215
+ };
216
+ //# sourceMappingURL=child.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child.js","sourceRoot":"","sources":["../../../src/classes/child.ts"],"names":[],"mappings":"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"}
@@ -8,8 +8,8 @@ tslib_1.__exportStar(require("./child-processor"), exports);
8
8
  tslib_1.__exportStar(require("./delayed-error"), exports);
9
9
  tslib_1.__exportStar(require("./flow-producer"), exports);
10
10
  tslib_1.__exportStar(require("./job"), exports);
11
- // export * from './master'; this file must not be exported
12
- tslib_1.__exportStar(require("./process-utils"), exports);
11
+ // export * from './main'; this file must not be exported
12
+ // export * from './main-worker'; this file must not be exported
13
13
  tslib_1.__exportStar(require("./queue-base"), exports);
14
14
  tslib_1.__exportStar(require("./queue-events"), exports);
15
15
  tslib_1.__exportStar(require("./queue-getters"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/classes/index.ts"],"names":[],"mappings":";;;AAAA,6DAAmC;AACnC,qDAA2B;AAC3B,uDAA6B;AAC7B,4DAAkC;AAClC,0DAAgC;AAChC,0DAAgC;AAChC,gDAAsB;AACtB,2DAA2D;AAC3D,0DAAgC;AAChC,uDAA6B;AAC7B,yDAA+B;AAC/B,0DAAgC;AAChC,uDAA6B;AAC7B,kDAAwB;AACxB,6DAAmC;AACnC,mDAAyB;AACzB,oDAA0B;AAC1B,oDAA0B;AAC1B,gEAAsC;AACtC,mEAAyC;AACzC,mDAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/classes/index.ts"],"names":[],"mappings":";;;AAAA,6DAAmC;AACnC,qDAA2B;AAC3B,uDAA6B;AAC7B,4DAAkC;AAClC,0DAAgC;AAChC,0DAAgC;AAChC,gDAAsB;AACtB,yDAAyD;AACzD,gEAAgE;AAChE,uDAA6B;AAC7B,yDAA+B;AAC/B,0DAAgC;AAChC,uDAA6B;AAC7B,kDAAwB;AACxB,6DAAmC;AACnC,mDAAyB;AACzB,oDAA0B;AAC1B,oDAA0B;AAC1B,gEAAsC;AACtC,mEAAyC;AACzC,mDAAyB"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Wrapper for sandboxing.
5
+ *
6
+ */
7
+ const lodash_1 = require("lodash");
8
+ const child_processor_1 = require("./child-processor");
9
+ const interfaces_1 = require("../interfaces");
10
+ const utils_1 = require("../utils");
11
+ exports.default = (send, receiver) => {
12
+ const childProcessor = new child_processor_1.ChildProcessor(send);
13
+ receiver === null || receiver === void 0 ? void 0 : receiver.on('message', async (msg) => {
14
+ try {
15
+ switch (msg.cmd) {
16
+ case interfaces_1.ChildCommand.Init:
17
+ await childProcessor.init(msg.value);
18
+ break;
19
+ case interfaces_1.ChildCommand.Start:
20
+ await childProcessor.start(msg.job);
21
+ break;
22
+ case interfaces_1.ChildCommand.Stop:
23
+ break;
24
+ }
25
+ }
26
+ catch (err) {
27
+ console.error('Error handling child message');
28
+ }
29
+ });
30
+ process.on('SIGTERM', () => childProcessor.waitForCurrentJobAndExit());
31
+ process.on('SIGINT', () => childProcessor.waitForCurrentJobAndExit());
32
+ process.on('uncaughtException', async (err) => {
33
+ if (!err.message) {
34
+ err = new Error((0, lodash_1.toString)(err));
35
+ }
36
+ await send({
37
+ cmd: interfaces_1.ParentCommand.Failed,
38
+ value: (0, utils_1.errorToJSON)(err),
39
+ });
40
+ // An uncaughException leaves this process in a potentially undetermined state so
41
+ // we must exit
42
+ process.exit(-1);
43
+ });
44
+ };
45
+ //# sourceMappingURL=main-base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-base.js","sourceRoot":"","sources":["../../../src/classes/main-base.ts"],"names":[],"mappings":";;AAAA;;;GAGG;AACH,mCAAkC;AAClC,uDAAmD;AACnD,8CAA4D;AAC5D,oCAAuC;AAEvC,kBAAe,CACb,IAAiC,EACjC,QAAkE,EAClE,EAAE;IACF,MAAM,cAAc,GAAG,IAAI,gCAAc,CAAC,IAAI,CAAC,CAAC;IAEhD,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,EAAE,CAAC,SAAS,EAAE,KAAK,EAAC,GAAG,EAAC,EAAE;QAClC,IAAI;YACF,QAAQ,GAAG,CAAC,GAAmB,EAAE;gBAC/B,KAAK,yBAAY,CAAC,IAAI;oBACpB,MAAM,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACrC,MAAM;gBACR,KAAK,yBAAY,CAAC,KAAK;oBACrB,MAAM,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACpC,MAAM;gBACR,KAAK,yBAAY,CAAC,IAAI;oBACpB,MAAM;aACT;SACF;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;SAC/C;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACvE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAEtE,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,EAAE,GAAU,EAAE,EAAE;QACnD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;YAChB,GAAG,GAAG,IAAI,KAAK,CAAC,IAAA,iBAAQ,EAAC,GAAG,CAAC,CAAC,CAAC;SAChC;QACD,MAAM,IAAI,CAAC;YACT,GAAG,EAAE,0BAAa,CAAC,MAAM;YACzB,KAAK,EAAE,IAAA,mBAAW,EAAC,GAAG,CAAC;SACxB,CAAC,CAAC;QAEH,iFAAiF;QACjF,eAAe;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Worker Thread wrapper for sandboxing
5
+ *
6
+ */
7
+ const worker_threads_1 = require("worker_threads");
8
+ const main_base_1 = require("./main-base");
9
+ (0, main_base_1.default)(async (msg) => worker_threads_1.parentPort.postMessage(msg), worker_threads_1.parentPort);
10
+ //# sourceMappingURL=main-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-worker.js","sourceRoot":"","sources":["../../../src/classes/main-worker.ts"],"names":[],"mappings":";;AAAA;;;GAGG;AACH,mDAA4C;AAC5C,2CAAmC;AAEnC,IAAA,mBAAQ,EAAC,KAAK,EAAE,GAAQ,EAAE,EAAE,CAAC,2BAAU,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,2BAAU,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Child process wrapper for sandboxing.
5
+ *
6
+ */
7
+ const utils_1 = require("../utils");
8
+ const main_base_1 = require("./main-base");
9
+ (0, main_base_1.default)((msg) => (0, utils_1.childSend)(process, msg), process);
10
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/classes/main.ts"],"names":[],"mappings":";;AAAA;;;GAGG;AACH,oCAAqC;AACrC,2CAAmC;AAEnC,IAAA,mBAAQ,EAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAA,iBAAS,EAAC,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC"}
@@ -1,13 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const interfaces_1 = require("../interfaces");
4
- const utils_1 = require("../utils");
5
4
  const sandbox = (processFile, childPool) => {
6
5
  return async function process(job) {
7
6
  const child = await childPool.retain(processFile);
8
7
  let msgHandler;
9
8
  let exitHandler;
10
- await (0, utils_1.parentSend)(child, {
9
+ await child.send({
11
10
  cmd: interfaces_1.ChildCommand.Start,
12
11
  job: job.asJSONSandbox(),
13
12
  });
@@ -46,8 +45,8 @@ const sandbox = (processFile, childPool) => {
46
45
  return done;
47
46
  }
48
47
  finally {
49
- child.removeListener('message', msgHandler);
50
- child.removeListener('exit', exitHandler);
48
+ child.off('message', msgHandler);
49
+ child.off('exit', exitHandler);
51
50
  if (child.exitCode !== null || /SIG.*/.test(`${child.signalCode}`)) {
52
51
  childPool.remove(child);
53
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../../src/classes/sandbox.ts"],"names":[],"mappings":";;AAAA,8CAA0E;AAC1E,oCAAsC;AAItC,MAAM,OAAO,GAAG,CACd,WAAgB,EAChB,SAAoB,EACpB,EAAE;IACF,OAAO,KAAK,UAAU,OAAO,CAAC,GAAiB;QAC7C,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,UAAe,CAAC;QACpB,IAAI,WAAgB,CAAC;QAErB,MAAM,IAAA,kBAAU,EAAC,KAAK,EAAE;YACtB,GAAG,EAAE,yBAAY,CAAC,KAAK;YACvB,GAAG,EAAE,GAAG,CAAC,aAAa,EAAE;SACzB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAe,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvD,UAAU,GAAG,KAAK,EAAE,GAAiB,EAAE,EAAE;gBACvC,QAAQ,GAAG,CAAC,GAAG,EAAE;oBACf,KAAK,0BAAa,CAAC,SAAS;wBAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACnB,MAAM;oBACR,KAAK,0BAAa,CAAC,MAAM,CAAC;oBAC1B,KAAK,0BAAa,CAAC,KAAK,CAAC,CAAC;wBACxB,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;wBACxB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC9B,MAAM,CAAC,GAAG,CAAC,CAAC;wBACZ,MAAM;qBACP;oBACD,KAAK,0BAAa,CAAC,QAAQ;wBACzB,MAAM,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACpC,MAAM;oBACR,KAAK,0BAAa,CAAC,GAAG;wBACpB,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACzB,MAAM;oBACR,KAAK,0BAAa,CAAC,MAAM;wBACvB,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC5B,MAAM;iBACT;YACH,CAAC,CAAC;YAEF,WAAW,GAAG,CAAC,QAAa,EAAE,MAAW,EAAE,EAAE;gBAC3C,MAAM,CACJ,IAAI,KAAK,CAAC,wBAAwB,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC,CACtE,CAAC;YACJ,CAAC,CAAC;YAEF,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAChC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,IAAI;YACF,MAAM,IAAI,CAAC;YACX,OAAO,IAAI,CAAC;SACb;gBAAS;YACR,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAC5C,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAE1C,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE;gBAClE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACzB;iBAAM;gBACL,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aAC1B;SACF;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../../src/classes/sandbox.ts"],"names":[],"mappings":";;AAAA,8CAA0E;AAI1E,MAAM,OAAO,GAAG,CACd,WAAgB,EAChB,SAAoB,EACpB,EAAE;IACF,OAAO,KAAK,UAAU,OAAO,CAAC,GAAiB;QAC7C,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,UAAe,CAAC;QACpB,IAAI,WAAgB,CAAC;QAErB,MAAM,KAAK,CAAC,IAAI,CAAC;YACf,GAAG,EAAE,yBAAY,CAAC,KAAK;YACvB,GAAG,EAAE,GAAG,CAAC,aAAa,EAAE;SACzB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAe,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvD,UAAU,GAAG,KAAK,EAAE,GAAiB,EAAE,EAAE;gBACvC,QAAQ,GAAG,CAAC,GAAG,EAAE;oBACf,KAAK,0BAAa,CAAC,SAAS;wBAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACnB,MAAM;oBACR,KAAK,0BAAa,CAAC,MAAM,CAAC;oBAC1B,KAAK,0BAAa,CAAC,KAAK,CAAC,CAAC;wBACxB,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;wBACxB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC9B,MAAM,CAAC,GAAG,CAAC,CAAC;wBACZ,MAAM;qBACP;oBACD,KAAK,0BAAa,CAAC,QAAQ;wBACzB,MAAM,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACpC,MAAM;oBACR,KAAK,0BAAa,CAAC,GAAG;wBACpB,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACzB,MAAM;oBACR,KAAK,0BAAa,CAAC,MAAM;wBACvB,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC5B,MAAM;iBACT;YACH,CAAC,CAAC;YAEF,WAAW,GAAG,CAAC,QAAa,EAAE,MAAW,EAAE,EAAE;gBAC3C,MAAM,CACJ,IAAI,KAAK,CAAC,wBAAwB,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC,CACtE,CAAC;YACJ,CAAC,CAAC;YAEF,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAChC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,IAAI;YACF,MAAM,IAAI,CAAC;YACX,OAAO,IAAI,CAAC;SACb;gBAAS;YACR,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACjC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAE/B,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE;gBAClE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACzB;iBAAM;gBACL,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aAC1B;SACF;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,OAAO,CAAC"}