diff --git a/src/Pool.js b/src/Pool.js index 001310b9..b182861b 100644 --- a/src/Pool.js +++ b/src/Pool.js @@ -27,7 +27,11 @@ function Pool(script, options) { this.forkOpts = options.forkOpts || {}; this.debugPortStart = (options.debugPortStart || 43210); this.nodeWorker = options.nodeWorker; - this.workerType = options.workerType || options.nodeWorker || 'auto' + this.workerOpts = { + stdout: options.stdout, + stderr: options.stderr, + }; + this.workerType = options.workerType || options.nodeWorker || 'auto'; this.maxQueueSize = options.maxQueueSize || Infinity; // configuration @@ -355,6 +359,7 @@ Pool.prototype._createWorkerHandler = function () { forkArgs: this.forkArgs, forkOpts: this.forkOpts, debugPort: DEBUG_PORT_ALLOCATOR.nextAvailableStartingAt(this.debugPortStart), + workerOpts: this.workerOpts, workerType: this.workerType }); } diff --git a/src/WorkerHandler.js b/src/WorkerHandler.js index a7e8f61b..b7c384ba 100644 --- a/src/WorkerHandler.js +++ b/src/WorkerHandler.js @@ -61,7 +61,7 @@ function setupWorker(script, options) { return setupBrowserWorker(script, Worker); } else if (options.workerType === 'thread') { // node.js only WorkerThreads = ensureWorkerThreads(); - return setupWorkerThreadWorker(script, WorkerThreads); + return setupWorkerThreadWorker(script, options, WorkerThreads); } else if (options.workerType === 'process' || !options.workerType) { // node.js only return setupProcessWorker(script, resolveForkOptions(options), requireFoolWebpack('child_process')); } else { // options.workerType === 'auto' or undefined @@ -72,7 +72,7 @@ function setupWorker(script, options) { else { // environment.platform === 'node' var WorkerThreads = tryRequireWorkerThreads(); if (WorkerThreads) { - return setupWorkerThreadWorker(script, WorkerThreads); + return setupWorkerThreadWorker(script, options, WorkerThreads); } else { return setupProcessWorker(script, resolveForkOptions(options), requireFoolWebpack('child_process')); } @@ -97,10 +97,11 @@ function setupBrowserWorker(script, Worker) { return worker; } -function setupWorkerThreadWorker(script, WorkerThreads) { +function setupWorkerThreadWorker(script, options, WorkerThreads) { var worker = new WorkerThreads.Worker(script, { stdout: false, // automatically pipe worker.STDOUT to process.STDOUT - stderr: false // automatically pipe worker.STDERR to process.STDERR + stderr: false, // automatically pipe worker.STDERR to process.STDERR + ...options.workerOpts, }); worker.isWorkerThread = true; // make the worker mimic a child_process diff --git a/src/types.js b/src/types.js index 82c14735..ff1607de 100644 --- a/src/types.js +++ b/src/types.js @@ -4,6 +4,8 @@ * @property {number} [maxWorkers] * @property {number} [maxQueueSize] * @property {'auto' | 'web' | 'process' | 'thread'} [workerType] + * @property {boolean} [stdout] + * @property {boolean} [stderr] * @property {*} [forkArgs] * @property {*} [forkOpts] * @property {number} [debugPortStart] diff --git a/test/WorkerHandler.test.js b/test/WorkerHandler.test.js index 11df3d4a..45775c9c 100644 --- a/test/WorkerHandler.test.js +++ b/test/WorkerHandler.test.js @@ -395,6 +395,7 @@ describe('WorkerHandler', function () { describe('setupWorkerThreadWorker', function() { it('works', function() { var SCRIPT = 'the script'; + const OPTIONS = {}; var postMessage; var addEventListener; var terminate = 0; @@ -417,7 +418,7 @@ describe('WorkerHandler', function () { terminate++; } - var worker = WorkerHandler._setupWorkerThreadWorker(SCRIPT, { Worker: Worker }); + var worker = WorkerHandler._setupWorkerThreadWorker(SCRIPT, OPTIONS, { Worker: Worker }); assert.ok(worker instanceof Worker);