{"version":3,"file":"workerpool.js","sources":["../src/environment.js","../src/Promise.js","../src/validateOptions.js","../src/generated/embeddedWorker.js","../src/WorkerHandler.js","../src/debug-port-allocator.js","../src/Pool.js","../src/transfer.js","../src/worker.js","../src/index.js"],"sourcesContent":["\n// source: https://github.com/flexdinesh/browser-or-node\n// source: https://github.com/mozilla/pdf.js/blob/7ea0e40e588864cd938d1836ec61f1928d3877d3/src/shared/util.js#L24\nvar isNode = function (nodeProcess) {\n return (\n typeof nodeProcess !== 'undefined' &&\n nodeProcess.versions != null &&\n nodeProcess.versions.node != null &&\n nodeProcess + '' === '[object process]'\n );\n}\nmodule.exports.isNode = isNode\n\n// determines the JavaScript platform: browser or node\nmodule.exports.platform = typeof process !== 'undefined' && isNode(process)\n ? 'node'\n : 'browser';\n\n// determines whether the code is running in main thread or not\n// note that in node.js we have to check both worker_thread and child_process\nvar worker_threads = module.exports.platform === 'node' && require('worker_threads');\nmodule.exports.isMainThread = module.exports.platform === 'node'\n ? ((!worker_threads || worker_threads.isMainThread) && !process.connected)\n : typeof Window !== 'undefined';\n\n// determines the number of cpus available\nmodule.exports.cpus = module.exports.platform === 'browser'\n ? self.navigator.hardwareConcurrency\n : require('os').cpus().length;\n\n","'use strict';\n\n/**\n * Promise\n *\n * Inspired by https://gist.github.com/RubaXa/8501359 from RubaXa \n * @template T\n * @template [E=Error]\n * @param {Function} handler Called as handler(resolve: Function, reject: Function)\n * @param {Promise} [parent] Parent promise for propagation of cancel and timeout\n */\nfunction Promise(handler, parent) {\n var me = this;\n\n if (!(this instanceof Promise)) {\n throw new SyntaxError('Constructor must be called with the new operator');\n }\n\n if (typeof handler !== 'function') {\n throw new SyntaxError('Function parameter handler(resolve, reject) missing');\n }\n\n var _onSuccess = [];\n var _onFail = [];\n\n // status\n /**\n * @readonly\n */\n this.resolved = false;\n /**\n * @readonly\n */\n this.rejected = false;\n /**\n * @readonly\n */\n this.pending = true;\n\n /**\n * Process onSuccess and onFail callbacks: add them to the queue.\n * Once the promise is resolved, the function _promise is replace.\n * @param {Function} onSuccess\n * @param {Function} onFail\n * @private\n */\n var _process = function (onSuccess, onFail) {\n _onSuccess.push(onSuccess);\n _onFail.push(onFail);\n };\n\n /**\n * Add an onSuccess callback and optionally an onFail callback to the Promise\n * @template TT\n * @template [TE=never]\n * @param {(r: T) => TT | PromiseLike} onSuccess\n * @param {(r: E) => TE | PromiseLike} [onFail]\n * @returns {Promise} promise\n */\n this.then = function (onSuccess, onFail) {\n return new Promise(function (resolve, reject) {\n var s = onSuccess ? _then(onSuccess, resolve, reject) : resolve;\n var f = onFail ? _then(onFail, resolve, reject) : reject;\n\n _process(s, f);\n }, me);\n };\n\n /**\n * Resolve the promise\n * @param {*} result\n * @type {Function}\n */\n var _resolve = function (result) {\n // update status\n me.resolved = true;\n me.rejected = false;\n me.pending = false;\n\n _onSuccess.forEach(function (fn) {\n fn(result);\n });\n\n _process = function (onSuccess, onFail) {\n onSuccess(result);\n };\n\n _resolve = _reject = function () { };\n\n return me;\n };\n\n /**\n * Reject the promise\n * @param {Error} error\n * @type {Function}\n */\n var _reject = function (error) {\n // update status\n me.resolved = false;\n me.rejected = true;\n me.pending = false;\n\n _onFail.forEach(function (fn) {\n fn(error);\n });\n\n _process = function (onSuccess, onFail) {\n onFail(error);\n };\n\n _resolve = _reject = function () { }\n\n return me;\n };\n\n /**\n * Cancel the promise. This will reject the promise with a CancellationError\n * @returns {this} self\n */\n this.cancel = function () {\n if (parent) {\n parent.cancel();\n }\n else {\n _reject(new CancellationError());\n }\n\n return me;\n };\n\n /**\n * Set a timeout for the promise. If the promise is not resolved within\n * the time, the promise will be cancelled and a TimeoutError is thrown.\n * If the promise is resolved in time, the timeout is removed.\n * @param {number} delay Delay in milliseconds\n * @returns {this} self\n */\n this.timeout = function (delay) {\n if (parent) {\n parent.timeout(delay);\n }\n else {\n var timer = setTimeout(function () {\n _reject(new TimeoutError('Promise timed out after ' + delay + ' ms'));\n }, delay);\n\n me.always(function () {\n clearTimeout(timer);\n });\n }\n\n return me;\n };\n\n // attach handler passing the resolve and reject functions\n handler(function (result) {\n _resolve(result);\n }, function (error) {\n _reject(error);\n });\n}\n\n/**\n * Execute given callback, then call resolve/reject based on the returned result\n * @param {Function} callback\n * @param {Function} resolve\n * @param {Function} reject\n * @returns {Function}\n * @private\n */\nfunction _then(callback, resolve, reject) {\n return function (result) {\n try {\n var res = callback(result);\n if (res && typeof res.then === 'function' && typeof res['catch'] === 'function') {\n // method returned a promise\n res.then(resolve, reject);\n }\n else {\n resolve(res);\n }\n }\n catch (error) {\n reject(error);\n }\n }\n}\n\n/**\n * Add an onFail callback to the Promise\n * @template TT\n * @param {(error: E) => TT | PromiseLike} onFail\n * @returns {Promise} promise\n */\nPromise.prototype['catch'] = function (onFail) {\n return this.then(null, onFail);\n};\n\n// TODO: add support for Promise.catch(Error, callback)\n// TODO: add support for Promise.catch(Error, Error, callback)\n\n/**\n * Execute given callback when the promise either resolves or rejects.\n * @template TT\n * @param {() => Promise} fn\n * @returns {Promise} promise\n */\nPromise.prototype.always = function (fn) {\n return this.then(fn, fn);\n};\n\n/**\n * Create a promise which resolves when all provided promises are resolved,\n * and fails when any of the promises resolves.\n * @param {Promise[]} promises\n * @returns {Promise} promise\n */\nPromise.all = function (promises){\n return new Promise(function (resolve, reject) {\n var remaining = promises.length,\n results = [];\n\n if (remaining) {\n promises.forEach(function (p, i) {\n p.then(function (result) {\n results[i] = result;\n remaining--;\n if (remaining == 0) {\n resolve(results);\n }\n }, function (error) {\n remaining = 0;\n reject(error);\n });\n });\n }\n else {\n resolve(results);\n }\n });\n};\n\n/**\n * Create a promise resolver\n * @returns {{promise: Promise, resolve: Function, reject: Function}} resolver\n */\nPromise.defer = function () {\n var resolver = {};\n\n resolver.promise = new Promise(function (resolve, reject) {\n resolver.resolve = resolve;\n resolver.reject = reject;\n });\n\n return resolver;\n};\n\n/**\n * Create a cancellation error\n * @param {String} [message]\n * @extends Error\n */\nfunction CancellationError(message) {\n this.message = message || 'promise cancelled';\n this.stack = (new Error()).stack;\n}\n\nCancellationError.prototype = new Error();\nCancellationError.prototype.constructor = Error;\nCancellationError.prototype.name = 'CancellationError';\n\nPromise.CancellationError = CancellationError;\n\n\n/**\n * Create a timeout error\n * @param {String} [message]\n * @extends Error\n */\nfunction TimeoutError(message) {\n this.message = message || 'timeout exceeded';\n this.stack = (new Error()).stack;\n}\n\nTimeoutError.prototype = new Error();\nTimeoutError.prototype.constructor = Error;\nTimeoutError.prototype.name = 'TimeoutError';\n\nPromise.TimeoutError = TimeoutError;\n\n\nexports.Promise = Promise;\n","/**\n * Validate that the object only contains known option names\n * - Throws an error when unknown options are detected\n * - Throws an error when some of the allowed options are attached\n * @param {Object | undefined} options\n * @param {string[]} allowedOptionNames\n * @param {string} objectName\n * @retrun {Object} Returns the original options\n */\nexports.validateOptions = function validateOptions(options, allowedOptionNames, objectName) {\n if (!options) {\n return\n }\n\n var optionNames = options ? Object.keys(options) : []\n\n // check for unknown properties\n var unknownOptionName = optionNames.find(optionName => !allowedOptionNames.includes(optionName))\n if (unknownOptionName) {\n throw new Error('Object \"' + objectName + '\" contains an unknown option \"' + unknownOptionName + '\"')\n }\n\n // check for inherited properties which are not present on the object itself\n var illegalOptionName = allowedOptionNames.find(allowedOptionName => {\n return Object.prototype[allowedOptionName] && !optionNames.includes(allowedOptionName)\n })\n if (illegalOptionName) {\n throw new Error('Object \"' + objectName + '\" contains an inherited option \"' + illegalOptionName + '\" which is ' +\n 'not defined in the object itself but in its prototype. Only plain objects are allowed. ' +\n 'Please remove the option from the prototype or override it with a value \"undefined\".')\n }\n\n return options\n}\n\n// source: https://developer.mozilla.org/en-US/docs/Web/API/Worker/Worker\nexports.workerOptsNames = [\n 'credentials', 'name', 'type' ]\n\n// source: https://nodejs.org/api/child_process.html#child_processforkmodulepath-args-options\nexports.forkOptsNames = [\n 'cwd', 'detached', 'env', 'execPath', 'execArgv', 'gid', 'serialization',\n 'signal', 'killSignal', 'silent', 'stdio', 'uid', 'windowsVerbatimArguments',\n 'timeout'\n]\n\n// source: https://nodejs.org/api/worker_threads.html#new-workerfilename-options\nexports.workerThreadOptsNames = [\n 'argv', 'env', 'eval', 'execArgv', 'stdin', 'stdout', 'stderr', 'workerData',\n 'trackUnmanagedFds', 'transferList', 'resourceLimits', 'name'\n]\n","/**\n * embeddedWorker.js contains an embedded version of worker.js.\n * This file is automatically generated,\n * changes made in this file will be overwritten.\n */\nmodule.exports = \"!function(e,n){\\\"object\\\"==typeof exports&&\\\"undefined\\\"!=typeof module?module.exports=n():\\\"function\\\"==typeof define&&define.amd?define(n):(e=\\\"undefined\\\"!=typeof globalThis?globalThis:e||self).worker=n()}(this,(function(){\\\"use strict\\\";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,\\\"default\\\")?e.default:e}var n={};var t=function(e,n){this.message=e,this.transfer=n};return function(e){var n=t,r={exit:function(){}};if(\\\"undefined\\\"!=typeof self&&\\\"function\\\"==typeof postMessage&&\\\"function\\\"==typeof addEventListener)r.on=function(e,n){addEventListener(e,(function(e){n(e.data)}))},r.send=function(e){postMessage(e)};else{if(\\\"undefined\\\"==typeof process)throw new Error(\\\"Script must be executed as a worker\\\");var o;try{o=require(\\\"worker_threads\\\")}catch(e){if(\\\"object\\\"!=typeof e||null===e||\\\"MODULE_NOT_FOUND\\\"!==e.code)throw e}if(o&&null!==o.parentPort){var i=o.parentPort;r.send=i.postMessage.bind(i),r.on=i.on.bind(i),r.exit=process.exit.bind(process)}else r.on=process.on.bind(process),r.send=function(e){process.send(e)},r.on(\\\"disconnect\\\",(function(){process.exit(1)})),r.exit=process.exit.bind(process)}function s(e){return Object.getOwnPropertyNames(e).reduce((function(n,t){return Object.defineProperty(n,t,{value:e[t],enumerable:!0})}),{})}function d(e){return e&&\\\"function\\\"==typeof e.then&&\\\"function\\\"==typeof e.catch}r.methods={},r.methods.run=function(e,n){var t=new Function(\\\"return (\\\"+e+\\\").apply(null, arguments);\\\");return t.apply(t,n)},r.methods.methods=function(){return Object.keys(r.methods)},r.terminationHandler=void 0,r.cleanupAndExit=function(e){var n=function(){r.exit(e)};if(!r.terminationHandler)return n();var t=r.terminationHandler(e);d(t)?t.then(n,n):n()};var u=null;r.on(\\\"message\\\",(function(e){if(\\\"__workerpool-terminate__\\\"===e)return r.cleanupAndExit(0);try{var t=r.methods[e.method];if(!t)throw new Error('Unknown method \\\"'+e.method+'\\\"');u=e.id;var o=t.apply(t,e.params);d(o)?o.then((function(t){t instanceof n?r.send({id:e.id,result:t.message,error:null},t.transfer):r.send({id:e.id,result:t,error:null}),u=null})).catch((function(n){r.send({id:e.id,result:null,error:s(n)}),u=null})):(o instanceof n?r.send({id:e.id,result:o.message,error:null},o.transfer):r.send({id:e.id,result:o,error:null}),u=null)}catch(n){r.send({id:e.id,result:null,error:s(n)})}})),r.register=function(e,n){if(e)for(var t in e)e.hasOwnProperty(t)&&(r.methods[t]=e[t]);n&&(r.terminationHandler=n.onTerminate),r.send(\\\"ready\\\")},r.emit=function(e){if(u){if(e instanceof n)return void r.send({id:u,isEvent:!0,payload:e.message},e.transfer);r.send({id:u,isEvent:!0,payload:e})}},e.add=r.register,e.emit=r.emit}(n),e(n)}));\\n//# sourceMappingURL=worker.min.js.map\\n\";\n","'use strict';\n\nvar {Promise} = require('./Promise');\nvar environment = require('./environment');\nconst {validateOptions, forkOptsNames, workerThreadOptsNames, workerOptsNames} = require(\"./validateOptions\");\n\n/**\n * Special message sent by parent which causes a child process worker to terminate itself.\n * Not a \"message object\"; this string is the entire message.\n */\nvar TERMINATE_METHOD_ID = '__workerpool-terminate__';\n\nfunction ensureWorkerThreads() {\n var WorkerThreads = tryRequireWorkerThreads()\n if (!WorkerThreads) {\n throw new Error('WorkerPool: workerType = \\'thread\\' is not supported, Node >= 11.7.0 required')\n }\n\n return WorkerThreads;\n}\n\n// check whether Worker is supported by the browser\nfunction ensureWebWorker() {\n // Workaround for a bug in PhantomJS (Or QtWebkit): https://github.com/ariya/phantomjs/issues/14534\n if (typeof Worker !== 'function' && (typeof Worker !== 'object' || typeof Worker.prototype.constructor !== 'function')) {\n throw new Error('WorkerPool: Web Workers not supported');\n }\n}\n\nfunction tryRequireWorkerThreads() {\n try {\n return require('worker_threads');\n } catch(error) {\n if (typeof error === 'object' && error !== null && error.code === 'MODULE_NOT_FOUND') {\n // no worker_threads available (old version of node.js)\n return null;\n } else {\n throw error;\n }\n }\n}\n\n// get the default worker script\nfunction getDefaultWorker() {\n if (environment.platform === 'browser') {\n // test whether the browser supports all features that we need\n if (typeof Blob === 'undefined') {\n throw new Error('Blob not supported by the browser');\n }\n if (!window.URL || typeof window.URL.createObjectURL !== 'function') {\n throw new Error('URL.createObjectURL not supported by the browser');\n }\n\n // use embedded worker.js\n var blob = new Blob([require('./generated/embeddedWorker')], {type: 'text/javascript'});\n return window.URL.createObjectURL(blob);\n }\n else {\n // use external worker.js in current directory\n return __dirname + '/worker.js';\n }\n}\n\nfunction setupWorker(script, options) {\n if (options.workerType === 'web') { // browser only\n ensureWebWorker();\n return setupBrowserWorker(script, options.workerOpts, Worker);\n } else if (options.workerType === 'thread') { // node.js only\n WorkerThreads = ensureWorkerThreads();\n return setupWorkerThreadWorker(script, WorkerThreads, options);\n } else if (options.workerType === 'process' || !options.workerType) { // node.js only\n return setupProcessWorker(script, resolveForkOptions(options), require('child_process'));\n } else { // options.workerType === 'auto' or undefined\n if (environment.platform === 'browser') {\n ensureWebWorker();\n return setupBrowserWorker(script, options.workerOpts, Worker);\n }\n else { // environment.platform === 'node'\n var WorkerThreads = tryRequireWorkerThreads();\n if (WorkerThreads) {\n return setupWorkerThreadWorker(script, WorkerThreads, options);\n } else {\n return setupProcessWorker(script, resolveForkOptions(options), require('child_process'));\n }\n }\n }\n}\n\nfunction setupBrowserWorker(script, workerOpts, Worker) {\n // validate the options right before creating the worker (not when creating the pool)\n validateOptions(workerOpts, workerOptsNames, 'workerOpts')\n\n // create the web worker\n var worker = new Worker(script, workerOpts);\n\n worker.isBrowserWorker = true;\n // add node.js API to the web worker\n worker.on = function (event, callback) {\n this.addEventListener(event, function (message) {\n callback(message.data);\n });\n };\n worker.send = function (message, transfer) {\n this.postMessage(message, transfer);\n };\n return worker;\n}\n\nfunction setupWorkerThreadWorker(script, WorkerThreads, options) {\n // validate the options right before creating the worker thread (not when creating the pool)\n validateOptions(options?.workerThreadOpts, workerThreadOptsNames, 'workerThreadOpts')\n\n var worker = new WorkerThreads.Worker(script, {\n stdout: options?.emitStdStreams ?? false, // pipe worker.STDOUT to process.STDOUT if not requested\n stderr: options?.emitStdStreams ?? false, // pipe worker.STDERR to process.STDERR if not requested\n ...options?.workerThreadOpts\n });\n worker.isWorkerThread = true;\n worker.send = function(message, transfer) {\n this.postMessage(message, transfer);\n };\n\n worker.kill = function() {\n this.terminate();\n return true;\n };\n\n worker.disconnect = function() {\n this.terminate();\n };\n\n if (options?.emitStdStreams) {\n worker.stdout.on('data', (data) => worker.emit(\"stdout\", data))\n worker.stderr.on('data', (data) => worker.emit(\"stderr\", data))\n }\n\n return worker;\n}\n\nfunction setupProcessWorker(script, options, child_process) {\n // validate the options right before creating the child process (not when creating the pool)\n validateOptions(options.forkOpts, forkOptsNames, 'forkOpts')\n\n // no WorkerThreads, fallback to sub-process based workers\n var worker = child_process.fork(\n script,\n options.forkArgs,\n options.forkOpts\n );\n\n // ignore transfer argument since it is not supported by process\n var send = worker.send;\n worker.send = function (message) {\n return send.call(worker, message);\n };\n\n if (options.emitStdStreams) {\n worker.stdout.on('data', (data) => worker.emit(\"stdout\", data))\n worker.stderr.on('data', (data) => worker.emit(\"stderr\", data))\n }\n\n worker.isChildProcess = true;\n return worker;\n}\n\n// add debug flags to child processes if the node inspector is active\nfunction resolveForkOptions(opts) {\n opts = opts || {};\n\n var processExecArgv = process.execArgv.join(' ');\n var inspectorActive = processExecArgv.indexOf('--inspect') !== -1;\n var debugBrk = processExecArgv.indexOf('--debug-brk') !== -1;\n\n var execArgv = [];\n if (inspectorActive) {\n execArgv.push('--inspect=' + opts.debugPort);\n\n if (debugBrk) {\n execArgv.push('--debug-brk');\n }\n }\n\n process.execArgv.forEach(function(arg) {\n if (arg.indexOf('--max-old-space-size') > -1) {\n execArgv.push(arg)\n }\n })\n\n return Object.assign({}, opts, {\n forkArgs: opts.forkArgs,\n forkOpts: Object.assign({}, opts.forkOpts, {\n execArgv: (opts.forkOpts && opts.forkOpts.execArgv || [])\n .concat(execArgv),\n stdio: opts.emitStdStreams ? \"pipe\": undefined\n })\n });\n}\n\n/**\n * Converts a serialized error to Error\n * @param {Object} obj Error that has been serialized and parsed to object\n * @return {Error} The equivalent Error.\n */\nfunction objectToError (obj) {\n var temp = new Error('')\n var props = Object.keys(obj)\n\n for (var i = 0; i < props.length; i++) {\n temp[props[i]] = obj[props[i]]\n }\n\n return temp\n}\n\nfunction handleEmittedStdPayload(handler, payload) {\n // TODO: refactor if parallel task execution gets added\n if (Object.keys(handler.processing).length !== 1) {\n return;\n }\n var task = Object.values(handler.processing)[0]\n if (task.options && typeof task.options.on === 'function') {\n task.options.on(payload);\n }\n}\n\n/**\n * A WorkerHandler controls a single worker. This worker can be a child process\n * on node.js or a WebWorker in a browser environment.\n * @param {String} [script] If no script is provided, a default worker with a\n * function run will be created.\n * @param {import('./types.js').WorkerPoolOptions} [_options] See docs\n * @constructor\n */\nfunction WorkerHandler(script, _options) {\n var me = this;\n var options = _options || {};\n\n this.script = script || getDefaultWorker();\n this.worker = setupWorker(this.script, options);\n this.debugPort = options.debugPort;\n this.forkOpts = options.forkOpts;\n this.forkArgs = options.forkArgs;\n this.workerOpts = options.workerOpts;\n this.workerThreadOpts = options.workerThreadOpts\n this.workerTerminateTimeout = options.workerTerminateTimeout;\n\n // The ready message is only sent if the worker.add method is called (And the default script is not used)\n if (!script) {\n this.worker.ready = true;\n }\n\n // queue for requests that are received before the worker is ready\n this.requestQueue = [];\n\n this.worker.on(\"stdout\", function (data) {\n handleEmittedStdPayload(me, {\"stdout\": data.toString()})\n })\n this.worker.on(\"stderr\", function (data) {\n handleEmittedStdPayload(me, {\"stderr\": data.toString()})\n })\n\n this.worker.on('message', function (response) {\n if (me.terminated) {\n return;\n }\n if (typeof response === 'string' && response === 'ready') {\n me.worker.ready = true;\n dispatchQueuedRequests();\n } else {\n // find the task from the processing queue, and run the tasks callback\n var id = response.id;\n var task = me.processing[id];\n if (task !== undefined) {\n if (response.isEvent) {\n if (task.options && typeof task.options.on === 'function') {\n task.options.on(response.payload);\n }\n } else {\n // remove the task from the queue\n delete me.processing[id];\n\n // test if we need to terminate\n if (me.terminating === true) {\n // complete worker termination if all tasks are finished\n me.terminate();\n }\n\n // resolve the task's promise\n if (response.error) {\n task.resolver.reject(objectToError(response.error));\n }\n else {\n task.resolver.resolve(response.result);\n }\n }\n }\n }\n });\n\n // reject all running tasks on worker error\n function onError(error) {\n me.terminated = true;\n\n for (var id in me.processing) {\n if (me.processing[id] !== undefined) {\n me.processing[id].resolver.reject(error);\n }\n }\n me.processing = Object.create(null);\n }\n\n // send all queued requests to worker\n function dispatchQueuedRequests()\n {\n for(const request of me.requestQueue.splice(0)) {\n me.worker.send(request.message, request.transfer);\n }\n }\n\n var worker = this.worker;\n // listen for worker messages error and exit\n this.worker.on('error', onError);\n this.worker.on('exit', function (exitCode, signalCode) {\n var message = 'Workerpool Worker terminated Unexpectedly\\n';\n\n message += ' exitCode: `' + exitCode + '`\\n';\n message += ' signalCode: `' + signalCode + '`\\n';\n\n message += ' workerpool.script: `' + me.script + '`\\n';\n message += ' spawnArgs: `' + worker.spawnargs + '`\\n';\n message += ' spawnfile: `' + worker.spawnfile + '`\\n'\n\n message += ' stdout: `' + worker.stdout + '`\\n'\n message += ' stderr: `' + worker.stderr + '`\\n'\n\n onError(new Error(message));\n });\n\n this.processing = Object.create(null); // queue with tasks currently in progress\n\n this.terminating = false;\n this.terminated = false;\n this.cleaning = false;\n this.terminationHandler = null;\n this.lastId = 0;\n}\n\n/**\n * Get a list with methods available on the worker.\n * @return {Promise.} methods\n */\nWorkerHandler.prototype.methods = function () {\n return this.exec('methods');\n};\n\n/**\n * Execute a method with given parameters on the worker\n * @param {String} method\n * @param {Array} [params]\n * @param {{resolve: Function, reject: Function}} [resolver]\n * @param {import('./types.js').ExecOptions} [options]\n * @return {Promise.<*, Error>} result\n */\nWorkerHandler.prototype.exec = function(method, params, resolver, options) {\n if (!resolver) {\n resolver = Promise.defer();\n }\n\n // generate a unique id for the task\n var id = ++this.lastId;\n\n // register a new task as being in progress\n this.processing[id] = {\n id: id,\n resolver: resolver,\n options: options\n };\n\n // build a JSON-RPC request\n var request = {\n message: {\n id: id,\n method: method,\n params: params\n },\n transfer: options && options.transfer\n };\n\n if (this.terminated) {\n resolver.reject(new Error('Worker is terminated'));\n } else if (this.worker.ready) {\n // send the request to the worker\n this.worker.send(request.message, request.transfer);\n } else {\n this.requestQueue.push(request);\n }\n\n // on cancellation, force the worker to terminate\n var me = this;\n return resolver.promise.catch(function (error) {\n if (error instanceof Promise.CancellationError || error instanceof Promise.TimeoutError) {\n // remove this task from the queue. It is already rejected (hence this\n // catch event), and else it will be rejected again when terminating\n delete me.processing[id];\n\n // terminate worker\n return me.terminateAndNotify(true)\n .then(function() {\n throw error;\n }, function(err) {\n throw err;\n });\n } else {\n throw error;\n }\n })\n};\n\n/**\n * Test whether the worker is processing any tasks or cleaning up before termination.\n * @return {boolean} Returns true if the worker is busy\n */\nWorkerHandler.prototype.busy = function () {\n return this.cleaning || Object.keys(this.processing).length > 0;\n};\n\n/**\n * Terminate the worker.\n * @param {boolean} [force=false] If false (default), the worker is terminated\n * after finishing all tasks currently in\n * progress. If true, the worker will be\n * terminated immediately.\n * @param {function} [callback=null] If provided, will be called when process terminates.\n */\nWorkerHandler.prototype.terminate = function (force, callback) {\n var me = this;\n if (force) {\n // cancel all tasks in progress\n for (var id in this.processing) {\n if (this.processing[id] !== undefined) {\n this.processing[id].resolver.reject(new Error('Worker terminated'));\n }\n }\n this.processing = Object.create(null);\n }\n\n if (typeof callback === 'function') {\n this.terminationHandler = callback;\n }\n if (!this.busy()) {\n // all tasks are finished. kill the worker\n var cleanup = function(err) {\n me.terminated = true;\n me.cleaning = false;\n if (me.worker != null && me.worker.removeAllListeners) {\n // removeAllListeners is only available for child_process\n me.worker.removeAllListeners('message');\n }\n me.worker = null;\n me.terminating = false;\n if (me.terminationHandler) {\n me.terminationHandler(err, me);\n } else if (err) {\n throw err;\n }\n }\n\n if (this.worker) {\n if (typeof this.worker.kill === 'function') {\n if (this.worker.killed) {\n cleanup(new Error('worker already killed!'));\n return;\n }\n\n // child process and worker threads\n var cleanExitTimeout = setTimeout(function() {\n if (me.worker) {\n me.worker.kill();\n }\n }, this.workerTerminateTimeout);\n\n this.worker.once('exit', function() {\n clearTimeout(cleanExitTimeout);\n if (me.worker) {\n me.worker.killed = true;\n }\n cleanup();\n });\n\n if (this.worker.ready) {\n this.worker.send(TERMINATE_METHOD_ID);\n } else {\n this.requestQueue.push({ message: TERMINATE_METHOD_ID });\n }\n\n // mark that the worker is cleaning up resources\n // to prevent new tasks from being executed\n this.cleaning = true;\n return;\n }\n else if (typeof this.worker.terminate === 'function') {\n this.worker.terminate(); // web worker\n this.worker.killed = true;\n }\n else {\n throw new Error('Failed to terminate worker');\n }\n }\n cleanup();\n }\n else {\n // we can't terminate immediately, there are still tasks being executed\n this.terminating = true;\n }\n};\n\n/**\n * Terminate the worker, returning a Promise that resolves when the termination has been done.\n * @param {boolean} [force=false] If false (default), the worker is terminated\n * after finishing all tasks currently in\n * progress. If true, the worker will be\n * terminated immediately.\n * @param {number} [timeout] If provided and non-zero, worker termination promise will be rejected\n * after timeout if worker process has not been terminated.\n * @return {Promise.}\n */\nWorkerHandler.prototype.terminateAndNotify = function (force, timeout) {\n var resolver = Promise.defer();\n if (timeout) {\n resolver.promise.timeout(timeout);\n }\n this.terminate(force, function(err, worker) {\n if (err) {\n resolver.reject(err);\n } else {\n resolver.resolve(worker);\n }\n });\n return resolver.promise;\n};\n\nmodule.exports = WorkerHandler;\nmodule.exports._tryRequireWorkerThreads = tryRequireWorkerThreads;\nmodule.exports._setupProcessWorker = setupProcessWorker;\nmodule.exports._setupBrowserWorker = setupBrowserWorker;\nmodule.exports._setupWorkerThreadWorker = setupWorkerThreadWorker;\nmodule.exports.ensureWorkerThreads = ensureWorkerThreads;\n","'use strict';\n\nvar MAX_PORTS = 65535;\nmodule.exports = DebugPortAllocator;\nfunction DebugPortAllocator() {\n this.ports = Object.create(null);\n this.length = 0;\n}\n\nDebugPortAllocator.prototype.nextAvailableStartingAt = function(starting) {\n while (this.ports[starting] === true) {\n starting++;\n }\n\n if (starting >= MAX_PORTS) {\n throw new Error('WorkerPool debug port limit reached: ' + starting + '>= ' + MAX_PORTS );\n }\n\n this.ports[starting] = true;\n this.length++;\n return starting;\n};\n\nDebugPortAllocator.prototype.releasePort = function(port) {\n delete this.ports[port];\n this.length--;\n};\n\n","var {Promise} = require('./Promise');\nvar WorkerHandler = require('./WorkerHandler');\nvar environment = require('./environment');\nvar DebugPortAllocator = require('./debug-port-allocator');\nvar DEBUG_PORT_ALLOCATOR = new DebugPortAllocator();\n/**\n * A pool to manage workers, which can be created using the function workerpool.pool.\n *\n * @param {String} [script] Optional worker script\n * @param {import('./types.js').WorkerPoolOptions} [options] See docs\n * @constructor\n */\nfunction Pool(script, options) {\n if (typeof script === 'string') {\n /** @readonly */\n this.script = script || null;\n }\n else {\n this.script = null;\n options = script;\n }\n\n /** @private */\n this.workers = []; // queue with all workers\n /** @private */\n this.tasks = []; // queue with tasks awaiting execution\n\n options = options || {};\n\n /** @readonly */\n this.forkArgs = Object.freeze(options.forkArgs || []);\n /** @readonly */\n this.forkOpts = Object.freeze(options.forkOpts || {});\n /** @readonly */\n this.workerOpts = Object.freeze(options.workerOpts || {});\n /** @readonly */\n this.workerThreadOpts = Object.freeze(options.workerThreadOpts || {})\n /** @private */\n this.debugPortStart = (options.debugPortStart || 43210);\n /** @readonly @deprecated */\n this.nodeWorker = options.nodeWorker;\n /** @readonly\n * @type {'auto' | 'web' | 'process' | 'thread'}\n */\n this.workerType = options.workerType || options.nodeWorker || 'auto'\n /** @readonly */\n this.maxQueueSize = options.maxQueueSize || Infinity;\n /** @readonly */\n this.workerTerminateTimeout = options.workerTerminateTimeout || 1000;\n\n /** @readonly */\n this.onCreateWorker = options.onCreateWorker || (() => null);\n /** @readonly */\n this.onTerminateWorker = options.onTerminateWorker || (() => null);\n\n /** @readonly */\n this.emitStdStreams = options.emitStdStreams || false\n\n // configuration\n if (options && 'maxWorkers' in options) {\n validateMaxWorkers(options.maxWorkers);\n /** @readonly */\n this.maxWorkers = options.maxWorkers;\n }\n else {\n this.maxWorkers = Math.max((environment.cpus || 4) - 1, 1);\n }\n\n if (options && 'minWorkers' in options) {\n if(options.minWorkers === 'max') {\n /** @readonly */\n this.minWorkers = this.maxWorkers;\n } else {\n validateMinWorkers(options.minWorkers);\n this.minWorkers = options.minWorkers;\n this.maxWorkers = Math.max(this.minWorkers, this.maxWorkers); // in case minWorkers is higher than maxWorkers\n }\n this._ensureMinWorkers();\n }\n\n /** @private */\n this._boundNext = this._next.bind(this);\n\n\n if (this.workerType === 'thread') {\n WorkerHandler.ensureWorkerThreads();\n }\n}\n\n\n/**\n * Execute a function on a worker.\n *\n * Example usage:\n *\n * var pool = new Pool()\n *\n * // call a function available on the worker\n * pool.exec('fibonacci', [6])\n *\n * // offload a function\n * function add(a, b) {\n * return a + b\n * };\n * pool.exec(add, [2, 4])\n * .then(function (result) {\n * console.log(result); // outputs 6\n * })\n * .catch(function(error) {\n * console.log(error);\n * });\n * @template { (...args: any[]) => any } T\n * @param {String | T} method Function name or function.\n * If `method` is a string, the corresponding\n * method on the worker will be executed\n * If `method` is a Function, the function\n * will be stringified and executed via the\n * workers built-in function `run(fn, args)`.\n * @param {Parameters | null} [params] Function arguments applied when calling the function\n * @param {import('./types.js').ExecOptions} [options] Options\n * @return {Promise>}\n */\nPool.prototype.exec = function (method, params, options) {\n // validate type of arguments\n if (params && !Array.isArray(params)) {\n throw new TypeError('Array expected as argument \"params\"');\n }\n\n if (typeof method === 'string') {\n var resolver = Promise.defer();\n\n if (this.tasks.length >= this.maxQueueSize) {\n throw new Error('Max queue size of ' + this.maxQueueSize + ' reached');\n }\n\n // add a new task to the queue\n var tasks = this.tasks;\n var task = {\n method: method,\n params: params,\n resolver: resolver,\n timeout: null,\n options: options\n };\n tasks.push(task);\n\n // replace the timeout method of the Promise with our own,\n // which starts the timer as soon as the task is actually started\n var originalTimeout = resolver.promise.timeout;\n resolver.promise.timeout = function timeout (delay) {\n if (tasks.indexOf(task) !== -1) {\n // task is still queued -> start the timer later on\n task.timeout = delay;\n return resolver.promise;\n }\n else {\n // task is already being executed -> start timer immediately\n return originalTimeout.call(resolver.promise, delay);\n }\n };\n\n // trigger task execution\n this._next();\n\n return resolver.promise;\n }\n else if (typeof method === 'function') {\n // send stringified function and function arguments to worker\n return this.exec('run', [String(method), params], options);\n }\n else {\n throw new TypeError('Function or string expected as argument \"method\"');\n }\n};\n\n/**\n * Create a proxy for current worker. Returns an object containing all\n * methods available on the worker. All methods return promises resolving the methods result.\n * @template { { [k: string]: (...args: any[]) => any } } T\n * @return {Promise, Error>} Returns a promise which resolves with a proxy object\n */\nPool.prototype.proxy = function () {\n if (arguments.length > 0) {\n throw new Error('No arguments expected');\n }\n\n var pool = this;\n return this.exec('methods')\n .then(function (methods) {\n var proxy = {};\n\n methods.forEach(function (method) {\n proxy[method] = function () {\n return pool.exec(method, Array.prototype.slice.call(arguments));\n }\n });\n\n return proxy;\n });\n};\n\n/**\n * Creates new array with the results of calling a provided callback function\n * on every element in this array.\n * @param {Array} array\n * @param {function} callback Function taking two arguments:\n * `callback(currentValue, index)`\n * @return {Promise.} Returns a promise which resolves with an Array\n * containing the results of the callback function\n * executed for each of the array elements.\n */\n/* TODO: implement map\nPool.prototype.map = function (array, callback) {\n};\n*/\n\n/**\n * Grab the first task from the queue, find a free worker, and assign the\n * worker to the task.\n * @private\n */\nPool.prototype._next = function () {\n if (this.tasks.length > 0) {\n // there are tasks in the queue\n\n // find an available worker\n var worker = this._getWorker();\n if (worker) {\n // get the first task from the queue\n var me = this;\n var task = this.tasks.shift();\n\n // check if the task is still pending (and not cancelled -> promise rejected)\n if (task.resolver.promise.pending) {\n // send the request to the worker\n var promise = worker.exec(task.method, task.params, task.resolver, task.options)\n .then(me._boundNext)\n .catch(function () {\n // if the worker crashed and terminated, remove it from the pool\n if (worker.terminated) {\n return me._removeWorker(worker);\n }\n }).then(function() {\n me._next(); // trigger next task in the queue\n });\n\n // start queued timer now\n if (typeof task.timeout === 'number') {\n promise.timeout(task.timeout);\n }\n } else {\n // The task taken was already complete (either rejected or resolved), so just trigger next task in the queue\n me._next();\n }\n }\n }\n};\n\n/**\n * Get an available worker. If no worker is available and the maximum number\n * of workers isn't yet reached, a new worker will be created and returned.\n * If no worker is available and the maximum number of workers is reached,\n * null will be returned.\n *\n * @return {WorkerHandler | null} worker\n * @private\n */\nPool.prototype._getWorker = function() {\n // find a non-busy worker\n var workers = this.workers;\n for (var i = 0; i < workers.length; i++) {\n var worker = workers[i];\n if (worker.busy() === false) {\n return worker;\n }\n }\n\n if (workers.length < this.maxWorkers) {\n // create a new worker\n worker = this._createWorkerHandler();\n workers.push(worker);\n return worker;\n }\n\n return null;\n};\n\n/**\n * Remove a worker from the pool.\n * Attempts to terminate worker if not already terminated, and ensures the minimum\n * pool size is met.\n * @param {WorkerHandler} worker\n * @return {Promise}\n * @private\n */\nPool.prototype._removeWorker = function(worker) {\n var me = this;\n\n DEBUG_PORT_ALLOCATOR.releasePort(worker.debugPort);\n // _removeWorker will call this, but we need it to be removed synchronously\n this._removeWorkerFromList(worker);\n // If minWorkers set, spin up new workers to replace the crashed ones\n this._ensureMinWorkers();\n // terminate the worker (if not already terminated)\n return new Promise(function(resolve, reject) {\n worker.terminate(false, function(err) {\n me.onTerminateWorker({\n forkArgs: worker.forkArgs,\n forkOpts: worker.forkOpts,\n workerThreadOpts: worker.workerThreadOpts,\n script: worker.script\n });\n if (err) {\n reject(err);\n } else {\n resolve(worker);\n }\n });\n });\n};\n\n/**\n * Remove a worker from the pool list.\n * @param {WorkerHandler} worker\n * @private\n */\nPool.prototype._removeWorkerFromList = function(worker) {\n // remove from the list with workers\n var index = this.workers.indexOf(worker);\n if (index !== -1) {\n this.workers.splice(index, 1);\n }\n};\n\n/**\n * Close all active workers. Tasks currently being executed will be finished first.\n * @param {boolean} [force=false] If false (default), the workers are terminated\n * after finishing all tasks currently in\n * progress. If true, the workers will be\n * terminated immediately.\n * @param {number} [timeout] If provided and non-zero, worker termination promise will be rejected\n * after timeout if worker process has not been terminated.\n * @return {Promise.}\n */\nPool.prototype.terminate = function (force, timeout) {\n var me = this;\n\n // cancel any pending tasks\n this.tasks.forEach(function (task) {\n task.resolver.reject(new Error('Pool terminated'));\n });\n this.tasks.length = 0;\n\n var f = function (worker) {\n DEBUG_PORT_ALLOCATOR.releasePort(worker.debugPort);\n this._removeWorkerFromList(worker);\n };\n var removeWorker = f.bind(this);\n\n var promises = [];\n var workers = this.workers.slice();\n workers.forEach(function (worker) {\n var termPromise = worker.terminateAndNotify(force, timeout)\n .then(removeWorker)\n .always(function() {\n me.onTerminateWorker({\n forkArgs: worker.forkArgs,\n forkOpts: worker.forkOpts,\n workerThreadOpts: worker.workerThreadOpts,\n script: worker.script\n });\n });\n promises.push(termPromise);\n });\n return Promise.all(promises);\n};\n\n/**\n * Retrieve statistics on tasks and workers.\n * @return {{totalWorkers: number, busyWorkers: number, idleWorkers: number, pendingTasks: number, activeTasks: number}} Returns an object with statistics\n */\nPool.prototype.stats = function () {\n var totalWorkers = this.workers.length;\n var busyWorkers = this.workers.filter(function (worker) {\n return worker.busy();\n }).length;\n\n return {\n totalWorkers: totalWorkers,\n busyWorkers: busyWorkers,\n idleWorkers: totalWorkers - busyWorkers,\n\n pendingTasks: this.tasks.length,\n activeTasks: busyWorkers\n };\n};\n\n/**\n * Ensures that a minimum of minWorkers is up and running\n * @private\n */\nPool.prototype._ensureMinWorkers = function() {\n if (this.minWorkers) {\n for(var i = this.workers.length; i < this.minWorkers; i++) {\n this.workers.push(this._createWorkerHandler());\n }\n }\n};\n\n/**\n * Helper function to create a new WorkerHandler and pass all options.\n * @return {WorkerHandler}\n * @private\n */\nPool.prototype._createWorkerHandler = function () {\n const overriddenParams = this.onCreateWorker({\n forkArgs: this.forkArgs,\n forkOpts: this.forkOpts,\n workerOpts: this.workerOpts,\n workerThreadOpts: this.workerThreadOpts,\n script: this.script\n }) || {};\n\n return new WorkerHandler(overriddenParams.script || this.script, {\n forkArgs: overriddenParams.forkArgs || this.forkArgs,\n forkOpts: overriddenParams.forkOpts || this.forkOpts,\n workerOpts: overriddenParams.workerOpts || this.workerOpts,\n workerThreadOpts: overriddenParams.workerThreadOpts || this.workerThreadOpts,\n debugPort: DEBUG_PORT_ALLOCATOR.nextAvailableStartingAt(this.debugPortStart),\n workerType: this.workerType,\n workerTerminateTimeout: this.workerTerminateTimeout,\n emitStdStreams: this.emitStdStreams,\n });\n}\n\n/**\n * Ensure that the maxWorkers option is an integer >= 1\n * @param {*} maxWorkers\n * @returns {boolean} returns true maxWorkers has a valid value\n */\nfunction validateMaxWorkers(maxWorkers) {\n if (!isNumber(maxWorkers) || !isInteger(maxWorkers) || maxWorkers < 1) {\n throw new TypeError('Option maxWorkers must be an integer number >= 1');\n }\n}\n\n/**\n * Ensure that the minWorkers option is an integer >= 0\n * @param {*} minWorkers\n * @returns {boolean} returns true when minWorkers has a valid value\n */\nfunction validateMinWorkers(minWorkers) {\n if (!isNumber(minWorkers) || !isInteger(minWorkers) || minWorkers < 0) {\n throw new TypeError('Option minWorkers must be an integer number >= 0');\n }\n}\n\n/**\n * Test whether a variable is a number\n * @param {*} value\n * @returns {boolean} returns true when value is a number\n */\nfunction isNumber(value) {\n return typeof value === 'number';\n}\n\n/**\n * Test whether a number is an integer\n * @param {number} value\n * @returns {boolean} Returns true if value is an integer\n */\nfunction isInteger(value) {\n return Math.round(value) == value;\n}\n\nmodule.exports = Pool;\n","/**\n * The helper class for transferring data from the worker to the main thread.\n *\n * @param {Object} message The object to deliver to the main thread.\n * @param {Object[]} transfer An array of transferable Objects to transfer ownership of.\n */\nfunction Transfer(message, transfer) {\n this.message = message;\n this.transfer = transfer;\n}\n\nmodule.exports = Transfer;\n","/**\n * worker must be started as a child process or a web worker.\n * It listens for RPC messages from the parent process.\n */\nvar Transfer = require('./transfer');\n\n/**\n * Special message sent by parent which causes the worker to terminate itself.\n * Not a \"message object\"; this string is the entire message.\n */\nvar TERMINATE_METHOD_ID = '__workerpool-terminate__';\n\n// var nodeOSPlatform = require('./environment').nodeOSPlatform;\n\n// create a worker API for sending and receiving messages which works both on\n// node.js and in the browser\nvar worker = {\n exit: function() {}\n};\nif (typeof self !== 'undefined' && typeof postMessage === 'function' && typeof addEventListener === 'function') {\n // worker in the browser\n worker.on = function (event, callback) {\n addEventListener(event, function (message) {\n callback(message.data);\n })\n };\n worker.send = function (message) {\n postMessage(message);\n };\n}\nelse if (typeof process !== 'undefined') {\n // node.js\n\n var WorkerThreads;\n try {\n WorkerThreads = require('worker_threads');\n } catch(error) {\n if (typeof error === 'object' && error !== null && error.code === 'MODULE_NOT_FOUND') {\n // no worker_threads, fallback to sub-process based workers\n } else {\n throw error;\n }\n }\n\n if (WorkerThreads &&\n /* if there is a parentPort, we are in a WorkerThread */\n WorkerThreads.parentPort !== null) {\n var parentPort = WorkerThreads.parentPort;\n worker.send = parentPort.postMessage.bind(parentPort);\n worker.on = parentPort.on.bind(parentPort);\n worker.exit = process.exit.bind(process);\n } else {\n worker.on = process.on.bind(process);\n // ignore transfer argument since it is not supported by process\n worker.send = function (message) {\n process.send(message);\n };\n // register disconnect handler only for subprocess worker to exit when parent is killed unexpectedly\n worker.on('disconnect', function () {\n process.exit(1);\n });\n worker.exit = process.exit.bind(process);\n }\n}\nelse {\n throw new Error('Script must be executed as a worker');\n}\n\nfunction convertError(error) {\n return Object.getOwnPropertyNames(error).reduce(function(product, name) {\n return Object.defineProperty(product, name, {\n\tvalue: error[name],\n\tenumerable: true\n });\n }, {});\n}\n\n/**\n * Test whether a value is a Promise via duck typing.\n * @param {*} value\n * @returns {boolean} Returns true when given value is an object\n * having functions `then` and `catch`.\n */\nfunction isPromise(value) {\n return value && (typeof value.then === 'function') && (typeof value.catch === 'function');\n}\n\n// functions available externally\nworker.methods = {};\n\n/**\n * Execute a function with provided arguments\n * @param {String} fn Stringified function\n * @param {Array} [args] Function arguments\n * @returns {*}\n */\nworker.methods.run = function run(fn, args) {\n var f = new Function('return (' + fn + ').apply(null, arguments);');\n return f.apply(f, args);\n};\n\n/**\n * Get a list with methods available on this worker\n * @return {String[]} methods\n */\nworker.methods.methods = function methods() {\n return Object.keys(worker.methods);\n};\n\n/**\n * Custom handler for when the worker is terminated.\n */\nworker.terminationHandler = undefined;\n\n/**\n * Cleanup and exit the worker.\n * @param {Number} code \n * @returns \n */\nworker.cleanupAndExit = function(code) {\n var _exit = function() {\n worker.exit(code);\n }\n\n if(!worker.terminationHandler) {\n return _exit();\n }\n\n var result = worker.terminationHandler(code);\n if (isPromise(result)) {\n result.then(_exit, _exit);\n } else {\n _exit();\n }\n}\n\nvar currentRequestId = null;\n\nworker.on('message', function (request) {\n if (request === TERMINATE_METHOD_ID) {\n return worker.cleanupAndExit(0);\n }\n try {\n var method = worker.methods[request.method];\n\n if (method) {\n currentRequestId = request.id;\n \n // execute the function\n var result = method.apply(method, request.params);\n\n if (isPromise(result)) {\n // promise returned, resolve this and then return\n result\n .then(function (result) {\n if (result instanceof Transfer) {\n worker.send({\n id: request.id,\n result: result.message,\n error: null\n }, result.transfer);\n } else {\n worker.send({\n id: request.id,\n result: result,\n error: null\n });\n }\n currentRequestId = null;\n })\n .catch(function (err) {\n worker.send({\n id: request.id,\n result: null,\n error: convertError(err)\n });\n currentRequestId = null;\n });\n }\n else {\n // immediate result\n if (result instanceof Transfer) {\n worker.send({\n id: request.id,\n result: result.message,\n error: null\n }, result.transfer);\n } else {\n worker.send({\n id: request.id,\n result: result,\n error: null\n });\n }\n\n currentRequestId = null;\n }\n }\n else {\n throw new Error('Unknown method \"' + request.method + '\"');\n }\n }\n catch (err) {\n worker.send({\n id: request.id,\n result: null,\n error: convertError(err)\n });\n }\n});\n\n/**\n * Register methods to the worker\n * @param {Object} [methods]\n * @param {import('./types.js').WorkerRegisterOptions} [options]\n */\nworker.register = function (methods, options) {\n\n if (methods) {\n for (var name in methods) {\n if (methods.hasOwnProperty(name)) {\n worker.methods[name] = methods[name];\n }\n }\n }\n\n if (options) {\n worker.terminationHandler = options.onTerminate;\n }\n\n worker.send('ready');\n};\n\nworker.emit = function (payload) {\n if (currentRequestId) {\n if (payload instanceof Transfer) {\n worker.send({\n id: currentRequestId,\n isEvent: true,\n payload: payload.message\n }, payload.transfer);\n return;\n }\n\n worker.send({\n id: currentRequestId,\n isEvent: true,\n payload\n });\n }\n};\n\nif (typeof exports !== 'undefined') {\n exports.add = worker.register;\n exports.emit = worker.emit;\n}\n","const {platform, isMainThread, cpus} = require('./environment');\n\n/** @typedef {import(\"./Pool\")} Pool */\n/** @typedef {import(\"./types.js\").WorkerPoolOptions} WorkerPoolOptions */\n/** @typedef {import(\"./types.js\").WorkerRegisterOptions} WorkerRegisterOptions */\n\n/**\n * @template { { [k: string]: (...args: any[]) => any } } T\n * @typedef {import('./types.js').Proxy} Proxy\n */\n\n/**\n * @overload\n * Create a new worker pool\n * @param {WorkerPoolOptions} [script]\n * @returns {Pool} pool\n */\n/**\n * @overload\n * Create a new worker pool\n * @param {string} [script]\n * @param {WorkerPoolOptions} [options]\n * @returns {Pool} pool\n */\nfunction pool(script, options) {\n var Pool = require('./Pool');\n\n return new Pool(script, options);\n};\nexports.pool = pool;\n\n/**\n * Create a worker and optionally register a set of methods to the worker.\n * @param {{ [k: string]: (...args: any[]) => any }} [methods]\n * @param {WorkerRegisterOptions} [options]\n */\nfunction worker(methods, options) {\n var worker = require('./worker');\n worker.add(methods, options);\n};\nexports.worker = worker;\n\n/**\n * Sends an event to the parent worker pool.\n * @param {any} payload \n */\nfunction workerEmit(payload) {\n var worker = require('./worker');\n worker.emit(payload);\n};\nexports.workerEmit = workerEmit;\n\nconst {Promise} = require('./Promise');\nexports.Promise = Promise;\n\nexports.Transfer = require('./transfer');\n\nexports.platform = platform;\nexports.isMainThread = isMainThread;\nexports.cpus = cpus;\n"],"names":["isNode","nodeProcess","versions","node","module","exports","platform","process","worker_threads","require","isMainThread","connected","Window","cpus","self","navigator","hardwareConcurrency","length","Promise","handler","parent","me","SyntaxError","_onSuccess","_onFail","resolved","rejected","pending","_process","onSuccess","onFail","push","then","resolve","reject","s","_then","f","_resolve","result","forEach","fn","_reject","error","cancel","CancellationError","timeout","delay","timer","setTimeout","TimeoutError","always","clearTimeout","callback","res","prototype","all","promises","remaining","results","p","i","defer","resolver","promise","message","stack","Error","constructor","name","_Promise","validateOptions","options","allowedOptionNames","objectName","optionNames","Object","keys","unknownOptionName","find","optionName","includes","illegalOptionName","allowedOptionName","workerOptsNames","forkOptsNames","workerThreadOptsNames","embeddedWorker","require$$0","environment","require$$1","require$$2","TERMINATE_METHOD_ID","ensureWorkerThreads","WorkerThreads","tryRequireWorkerThreads","ensureWebWorker","Worker","code","getDefaultWorker","Blob","window","URL","createObjectURL","blob","require$$3","type","__dirname","setupWorker","script","workerType","setupBrowserWorker","workerOpts","setupWorkerThreadWorker","setupProcessWorker","resolveForkOptions","worker","isBrowserWorker","on","event","addEventListener","data","send","transfer","postMessage","workerThreadOpts","stdout","emitStdStreams","stderr","isWorkerThread","kill","terminate","disconnect","emit","child_process","forkOpts","fork","forkArgs","call","isChildProcess","opts","processExecArgv","execArgv","join","inspectorActive","indexOf","debugBrk","debugPort","arg","assign","concat","stdio","undefined","objectToError","obj","temp","props","handleEmittedStdPayload","payload","processing","task","values","WorkerHandler","_options","workerTerminateTimeout","ready","requestQueue","toString","response","terminated","dispatchQueuedRequests","id","isEvent","terminating","onError","create","request","splice","exitCode","signalCode","spawnargs","spawnfile","cleaning","terminationHandler","lastId","methods","exec","method","params","catch","terminateAndNotify","err","busy","force","cleanup","removeAllListeners","killed","cleanExitTimeout","once","WorkerHandlerModule","_tryRequireWorkerThreads","_setupProcessWorker","_setupBrowserWorker","_setupWorkerThreadWorker","MAX_PORTS","debugPortAllocator","DebugPortAllocator","ports","nextAvailableStartingAt","starting","releasePort","port","DEBUG_PORT_ALLOCATOR","Pool","workers","tasks","freeze","debugPortStart","nodeWorker","maxQueueSize","Infinity","onCreateWorker","onTerminateWorker","validateMaxWorkers","maxWorkers","Math","max","minWorkers","validateMinWorkers","_ensureMinWorkers","_boundNext","_next","bind","Array","isArray","TypeError","originalTimeout","String","proxy","arguments","pool","slice","_getWorker","shift","_removeWorker","_createWorkerHandler","_removeWorkerFromList","index","removeWorker","termPromise","stats","totalWorkers","busyWorkers","filter","idleWorkers","pendingTasks","activeTasks","overriddenParams","isNumber","isInteger","value","round","Pool_1","Transfer","exit","parentPort","convertError","getOwnPropertyNames","reduce","product","defineProperty","enumerable","isPromise","run","args","Function","apply","cleanupAndExit","_exit","currentRequestId","register","hasOwnProperty","onTerminate","add","pool_1","src","worker_1","workerEmit","workerEmit_1","require$$4","platform_1","isMainThread_1","cpus_1"],"mappings":"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"}