Socket
Socket
Sign inDemoInstall

workerpool

Package Overview
Dependencies
0
Maintainers
2
Versions
61
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 6.3.1 to 6.4.0

src/transfer.js

138

dist/worker.js

@@ -7,4 +7,4 @@ /**

*
* @version 6.3.1
* @date 2022-11-07
* @version 6.4.0
* @date 2023-02-24
*

@@ -28,4 +28,50 @@ * @license

/******/ (function() { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ 577:
/***/ (function(module) {
/**
* The helper class for transferring data from the worker to the main thread.
*
* @param {Object} message The object to deliver to the main thread.
* @param {Object[]} transfer An array of transferable Objects to transfer ownership of.
*/
function Transfer(message, transfer) {
this.message = message;
this.transfer = transfer;
}
module.exports = Transfer;
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it uses a non-standard name for the exports (exports).
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
!function() {

@@ -39,2 +85,3 @@ var exports = __webpack_exports__;

*/
var Transfer = __webpack_require__(577);

@@ -85,5 +132,9 @@ // source of inspiration: https://github.com/sindresorhus/require-fool-webpack

worker.on = parentPort.on.bind(parentPort);
worker.exit = process.exit.bind(process);
} else {
worker.on = process.on.bind(process);
worker.send = process.send.bind(process);
// ignore transfer argument since it is not supported by process
worker.send = function (message) {
process.send(message);
};
// register disconnect handler only for subprocess worker to exit when parent is killed unexpectedly

@@ -138,6 +189,31 @@ worker.on('disconnect', function () {

};
/**
* Custom handler for when the worker is terminated.
*/
worker.terminationHandler = undefined;
/**
* Cleanup and exit the worker.
* @param {Number} code
* @returns
*/
worker.cleanupAndExit = function (code) {
var _exit = function _exit() {
worker.exit(code);
};
if (!worker.terminationHandler) {
return _exit();
}
var result = worker.terminationHandler(code);
if (isPromise(result)) {
result.then(_exit, _exit);
} else {
_exit();
}
};
var currentRequestId = null;
worker.on('message', function (request) {
if (request === TERMINATE_METHOD_ID) {
return worker.exit(0);
return worker.cleanupAndExit(0);
}

@@ -154,7 +230,15 @@ try {

result.then(function (result) {
worker.send({
id: request.id,
result: result,
error: null
});
if (result instanceof Transfer) {
worker.send({
id: request.id,
result: result.message,
error: null
}, result.transfer);
} else {
worker.send({
id: request.id,
result: result,
error: null
});
}
currentRequestId = null;

@@ -171,7 +255,15 @@ })["catch"](function (err) {

// immediate result
worker.send({
id: request.id,
result: result,
error: null
});
if (result instanceof Transfer) {
worker.send({
id: request.id,
result: result.message,
error: null
}, result.transfer);
} else {
worker.send({
id: request.id,
result: result,
error: null
});
}
currentRequestId = null;

@@ -193,5 +285,6 @@ }

* Register methods to the worker
* @param {Object} methods
* @param {Object} [methods]
* @param {WorkerRegisterOptions} [options]
*/
worker.register = function (methods) {
worker.register = function (methods, options) {
if (methods) {

@@ -204,2 +297,5 @@ for (var name in methods) {

}
if (options) {
worker.terminationHandler = options.onTerminate;
}
worker.send('ready');

@@ -209,2 +305,10 @@ };

if (currentRequestId) {
if (payload instanceof Transfer) {
worker.send({
id: currentRequestId,
isEvent: true,
payload: payload.message
}, payload.transfer);
return;
}
worker.send({

@@ -211,0 +315,0 @@ id: currentRequestId,

214

dist/workerpool.js

@@ -7,4 +7,4 @@ /**

*
* @version 6.3.1
* @date 2022-11-07
* @version 6.4.0
* @date 2023-02-24
*

@@ -72,2 +72,3 @@ * @license

this.maxQueueSize = options.maxQueueSize || Infinity;
this.workerTerminateTimeout = options.workerTerminateTimeout || 1000;
this.onCreateWorker = options.onCreateWorker || function () {

@@ -308,2 +309,3 @@ return null;

forkOpts: worker.forkOpts,
workerThreadOpts: worker.workerThreadOpts,
script: worker.script

@@ -363,2 +365,3 @@ });

forkOpts: worker.forkOpts,
workerThreadOpts: worker.workerThreadOpts,
script: worker.script

@@ -419,3 +422,4 @@ });

debugPort: DEBUG_PORT_ALLOCATOR.nextAvailableStartingAt(this.debugPortStart),
workerType: this.workerType
workerType: this.workerType,
workerTerminateTimeout: this.workerTerminateTimeout
});

@@ -734,3 +738,5 @@ };

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }

@@ -746,8 +752,2 @@ var Promise = __webpack_require__(219);

var TERMINATE_METHOD_ID = '__workerpool-terminate__';
/**
* If sending `TERMINATE_METHOD_ID` does not cause the child process to exit in this many milliseconds,
* force-kill the child process.
*/
var CHILD_PROCESS_EXIT_TIMEOUT = 1000;
function ensureWorkerThreads() {

@@ -840,4 +840,4 @@ var WorkerThreads = tryRequireWorkerThreads();

};
worker.send = function (message) {
this.postMessage(message);
worker.send = function (message, transfer) {
this.postMessage(message, transfer);
};

@@ -853,5 +853,4 @@ return worker;

worker.isWorkerThread = true;
// make the worker mimic a child_process
worker.send = function (message) {
this.postMessage(message);
worker.send = function (message, transfer) {
this.postMessage(message, transfer);
};

@@ -870,2 +869,8 @@ worker.kill = function () {

var worker = child_process.fork(script, options.forkArgs, options.forkOpts);
// ignore transfer argument since it is not supported by process
var send = worker.send;
worker.send = function (message) {
return send.call(worker, message);
};
worker.isChildProcess = true;

@@ -932,2 +937,3 @@ return worker;

this.workerThreadOpts = options.workerThreadOpts;
this.workerTerminateTimeout = options.workerTerminateTimeout;

@@ -996,3 +1002,3 @@ // The ready message is only sent if the worker.add method is called (And the default script is not used)

var request = _step.value;
me.worker.send(request);
me.worker.send(request.message, request.transfer);
}

@@ -1023,2 +1029,3 @@ } catch (err) {

this.terminated = false;
this.cleaning = false;
this.terminationHandler = null;

@@ -1061,5 +1068,8 @@ this.lastId = 0;

var request = {
id: id,
method: method,
params: params
message: {
id: id,
method: method,
params: params
},
transfer: options && options.transfer
};

@@ -1070,3 +1080,3 @@ if (this.terminated) {

// send the request to the worker
this.worker.send(request);
this.worker.send(request.message, request.transfer);
} else {

@@ -1097,7 +1107,7 @@ this.requestQueue.push(request);

/**
* Test whether the worker is working or not
* Test whether the worker is processing any tasks or cleaning up before termination.
* @return {boolean} Returns true if the worker is busy
*/
WorkerHandler.prototype.busy = function () {
return Object.keys(this.processing).length > 0;
return this.cleaning || Object.keys(this.processing).length > 0;
};

@@ -1131,2 +1141,3 @@

me.terminated = true;
me.cleaning = false;
if (me.worker != null && me.worker.removeAllListeners) {

@@ -1150,26 +1161,25 @@ // removeAllListeners is only available for child_process

}
if (this.worker.isChildProcess) {
var cleanExitTimeout = setTimeout(function () {
if (me.worker) {
me.worker.kill();
}
}, CHILD_PROCESS_EXIT_TIMEOUT);
this.worker.once('exit', function () {
clearTimeout(cleanExitTimeout);
if (me.worker) {
me.worker.killed = true;
}
cleanup();
});
if (this.worker.ready) {
this.worker.send(TERMINATE_METHOD_ID);
} else {
this.requestQueue.push(TERMINATE_METHOD_ID);
// child process and worker threads
var cleanExitTimeout = setTimeout(function () {
if (me.worker) {
me.worker.kill();
}
}, this.workerTerminateTimeout);
this.worker.once('exit', function () {
clearTimeout(cleanExitTimeout);
if (me.worker) {
me.worker.killed = true;
}
cleanup();
});
if (this.worker.ready) {
this.worker.send(TERMINATE_METHOD_ID);
} else {
// worker_thread
this.worker.kill();
this.worker.killed = true;
cleanup();
this.requestQueue.push(TERMINATE_METHOD_ID);
}
// mark that the worker is cleaning up resources
// to prevent new tasks from being executed
this.cleaning = true;
return;

@@ -1292,3 +1302,3 @@ } else if (typeof this.worker.terminate === 'function') {

*/
module.exports = "!function(){var __webpack_exports__={};!function(){var exports=__webpack_exports__,__webpack_unused_export__;function _typeof(r){return(_typeof=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&\"function\"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?\"symbol\":typeof r})(r)}var requireFoolWebpack=eval(\"typeof require !== 'undefined' ? require : function (module) { throw new Error('Module \\\" + module + \\\" not found.') }\"),TERMINATE_METHOD_ID=\"__workerpool-terminate__\",worker={exit:function(){}},WorkerThreads,parentPort;if(\"undefined\"!=typeof self&&\"function\"==typeof postMessage&&\"function\"==typeof addEventListener)worker.on=function(r,e){addEventListener(r,function(r){e(r.data)})},worker.send=function(r){postMessage(r)};else{if(\"undefined\"==typeof process)throw new Error(\"Script must be executed as a worker\");try{WorkerThreads=requireFoolWebpack(\"worker_threads\")}catch(error){if(\"object\"!==_typeof(error)||null===error||\"MODULE_NOT_FOUND\"!==error.code)throw error}WorkerThreads&&null!==WorkerThreads.parentPort?(parentPort=WorkerThreads.parentPort,worker.send=parentPort.postMessage.bind(parentPort),worker.on=parentPort.on.bind(parentPort)):(worker.on=process.on.bind(process),worker.send=process.send.bind(process),worker.on(\"disconnect\",function(){process.exit(1)}),worker.exit=process.exit.bind(process))}function convertError(o){return Object.getOwnPropertyNames(o).reduce(function(r,e){return Object.defineProperty(r,e,{value:o[e],enumerable:!0})},{})}function isPromise(r){return r&&\"function\"==typeof r.then&&\"function\"==typeof r.catch}worker.methods={},worker.methods.run=function(r,e){r=new Function(\"return (\"+r+\").apply(null, arguments);\");return r.apply(r,e)},worker.methods.methods=function(){return Object.keys(worker.methods)};var currentRequestId=null;worker.on(\"message\",function(e){if(e===TERMINATE_METHOD_ID)return worker.exit(0);try{var r=worker.methods[e.method];if(!r)throw new Error('Unknown method \"'+e.method+'\"');currentRequestId=e.id;var o=r.apply(r,e.params);isPromise(o)?o.then(function(r){worker.send({id:e.id,result:r,error:null}),currentRequestId=null}).catch(function(r){worker.send({id:e.id,result:null,error:convertError(r)}),currentRequestId=null}):(worker.send({id:e.id,result:o,error:null}),currentRequestId=null)}catch(r){worker.send({id:e.id,result:null,error:convertError(r)})}}),worker.register=function(r){if(r)for(var e in r)r.hasOwnProperty(e)&&(worker.methods[e]=r[e]);worker.send(\"ready\")},worker.emit=function(r){currentRequestId&&worker.send({id:currentRequestId,isEvent:!0,payload:r})},__webpack_unused_export__=worker.register,worker.emit}()}();";
module.exports = "!function(){var __webpack_modules__={577:function(e){e.exports=function(e,r){this.message=e,this.transfer=r}}},__webpack_module_cache__={};function __webpack_require__(e){var r=__webpack_module_cache__[e];return void 0!==r||(r=__webpack_module_cache__[e]={exports:{}},__webpack_modules__[e](r,r.exports,__webpack_require__)),r.exports}var __webpack_exports__={};!function(){var exports=__webpack_exports__,__webpack_unused_export__;function _typeof(e){return(_typeof=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}var Transfer=__webpack_require__(577),requireFoolWebpack=eval(\"typeof require !== 'undefined' ? require : function (module) { throw new Error('Module \\\" + module + \\\" not found.') }\"),TERMINATE_METHOD_ID=\"__workerpool-terminate__\",worker={exit:function(){}},WorkerThreads,parentPort;if(\"undefined\"!=typeof self&&\"function\"==typeof postMessage&&\"function\"==typeof addEventListener)worker.on=function(e,r){addEventListener(e,function(e){r(e.data)})},worker.send=function(e){postMessage(e)};else{if(\"undefined\"==typeof process)throw new Error(\"Script must be executed as a worker\");try{WorkerThreads=requireFoolWebpack(\"worker_threads\")}catch(error){if(\"object\"!==_typeof(error)||null===error||\"MODULE_NOT_FOUND\"!==error.code)throw error}WorkerThreads&&null!==WorkerThreads.parentPort?(parentPort=WorkerThreads.parentPort,worker.send=parentPort.postMessage.bind(parentPort),worker.on=parentPort.on.bind(parentPort)):(worker.on=process.on.bind(process),worker.send=function(e){process.send(e)},worker.on(\"disconnect\",function(){process.exit(1)})),worker.exit=process.exit.bind(process)}function convertError(o){return Object.getOwnPropertyNames(o).reduce(function(e,r){return Object.defineProperty(e,r,{value:o[r],enumerable:!0})},{})}function isPromise(e){return e&&\"function\"==typeof e.then&&\"function\"==typeof e.catch}worker.methods={},worker.methods.run=function(e,r){e=new Function(\"return (\"+e+\").apply(null, arguments);\");return e.apply(e,r)},worker.methods.methods=function(){return Object.keys(worker.methods)},worker.terminationHandler=void 0,worker.cleanupAndExit=function(e){function r(){worker.exit(e)}if(!worker.terminationHandler)return r();var o=worker.terminationHandler(e);isPromise(o)?o.then(r,r):r()};var currentRequestId=null;worker.on(\"message\",function(r){if(r===TERMINATE_METHOD_ID)return worker.cleanupAndExit(0);try{var e=worker.methods[r.method];if(!e)throw new Error('Unknown method \"'+r.method+'\"');currentRequestId=r.id;var o=e.apply(e,r.params);isPromise(o)?o.then(function(e){e instanceof Transfer?worker.send({id:r.id,result:e.message,error:null},e.transfer):worker.send({id:r.id,result:e,error:null}),currentRequestId=null}).catch(function(e){worker.send({id:r.id,result:null,error:convertError(e)}),currentRequestId=null}):(o instanceof Transfer?worker.send({id:r.id,result:o.message,error:null},o.transfer):worker.send({id:r.id,result:o,error:null}),currentRequestId=null)}catch(e){worker.send({id:r.id,result:null,error:convertError(e)})}}),worker.register=function(e,r){if(e)for(var o in e)e.hasOwnProperty(o)&&(worker.methods[o]=e[o]);r&&(worker.terminationHandler=r.onTerminate),worker.send(\"ready\")},worker.emit=function(e){currentRequestId&&(e instanceof Transfer?worker.send({id:currentRequestId,isEvent:!0,payload:e.message},e.transfer):worker.send({id:currentRequestId,isEvent:!0,payload:e}))},__webpack_unused_export__=worker.register,worker.emit}()}();";

@@ -1306,4 +1316,21 @@ /***/ }),

/***/ 577:
/***/ (function(module) {
/**
* The helper class for transferring data from the worker to the main thread.
*
* @param {Object} message The object to deliver to the main thread.
* @param {Object[]} transfer An array of transferable Objects to transfer ownership of.
*/
function Transfer(message, transfer) {
this.message = message;
this.transfer = transfer;
}
module.exports = Transfer;
/***/ }),
/***/ 744:
/***/ (function(__unused_webpack_module, exports) {
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

@@ -1315,2 +1342,3 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }

*/
var Transfer = __webpack_require__(577);

@@ -1361,5 +1389,9 @@ // source of inspiration: https://github.com/sindresorhus/require-fool-webpack

worker.on = parentPort.on.bind(parentPort);
worker.exit = process.exit.bind(process);
} else {
worker.on = process.on.bind(process);
worker.send = process.send.bind(process);
// ignore transfer argument since it is not supported by process
worker.send = function (message) {
process.send(message);
};
// register disconnect handler only for subprocess worker to exit when parent is killed unexpectedly

@@ -1414,6 +1446,31 @@ worker.on('disconnect', function () {

};
/**
* Custom handler for when the worker is terminated.
*/
worker.terminationHandler = undefined;
/**
* Cleanup and exit the worker.
* @param {Number} code
* @returns
*/
worker.cleanupAndExit = function (code) {
var _exit = function _exit() {
worker.exit(code);
};
if (!worker.terminationHandler) {
return _exit();
}
var result = worker.terminationHandler(code);
if (isPromise(result)) {
result.then(_exit, _exit);
} else {
_exit();
}
};
var currentRequestId = null;
worker.on('message', function (request) {
if (request === TERMINATE_METHOD_ID) {
return worker.exit(0);
return worker.cleanupAndExit(0);
}

@@ -1430,7 +1487,15 @@ try {

result.then(function (result) {
worker.send({
id: request.id,
result: result,
error: null
});
if (result instanceof Transfer) {
worker.send({
id: request.id,
result: result.message,
error: null
}, result.transfer);
} else {
worker.send({
id: request.id,
result: result,
error: null
});
}
currentRequestId = null;

@@ -1447,7 +1512,15 @@ })["catch"](function (err) {

// immediate result
worker.send({
id: request.id,
result: result,
error: null
});
if (result instanceof Transfer) {
worker.send({
id: request.id,
result: result.message,
error: null
}, result.transfer);
} else {
worker.send({
id: request.id,
result: result,
error: null
});
}
currentRequestId = null;

@@ -1469,5 +1542,6 @@ }

* Register methods to the worker
* @param {Object} methods
* @param {Object} [methods]
* @param {WorkerRegisterOptions} [options]
*/
worker.register = function (methods) {
worker.register = function (methods, options) {
if (methods) {

@@ -1480,2 +1554,5 @@ for (var name in methods) {

}
if (options) {
worker.terminationHandler = options.onTerminate;
}
worker.send('ready');

@@ -1485,2 +1562,10 @@ };

if (currentRequestId) {
if (payload instanceof Transfer) {
worker.send({
id: currentRequestId,
isEvent: true,
payload: payload.message
}, payload.transfer);
return;
}
worker.send({

@@ -1547,6 +1632,7 @@ id: currentRequestId,

* @param {Object} [methods]
* @param {WorkerRegisterOptions} [options]
*/
exports.worker = function worker(methods) {
exports.worker = function worker(methods, options) {
var worker = __webpack_require__(744);
worker.add(methods);
worker.add(methods, options);
};

@@ -1568,2 +1654,8 @@

exports.Promise = __webpack_require__(219);
/**
* Create a transfer object.
* @type {Transfer} transfer
*/
exports.Transfer = __webpack_require__(577);
exports.platform = environment.platform;

@@ -1570,0 +1662,0 @@ exports.isMainThread = environment.isMainThread;

/*! For license information please see workerpool.min.js.LICENSE.txt */
!function(r,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("workerpool",[],e):"object"==typeof exports?exports.workerpool=e():r.workerpool=e()}("undefined"!=typeof self?self:this,(function(){return function(){var __webpack_modules__={345:function(r,e,t){var o=t(219),n=t(751),i=t(828),s=new(t(833));function u(r,e){"string"==typeof r?this.script=r||null:(this.script=null,e=r),this.workers=[],this.tasks=[],e=e||{},this.forkArgs=Object.freeze(e.forkArgs||[]),this.forkOpts=Object.freeze(e.forkOpts||{}),this.workerThreadOpts=Object.freeze(e.workerThreadOpts||{}),this.debugPortStart=e.debugPortStart||43210,this.nodeWorker=e.nodeWorker,this.workerType=e.workerType||e.nodeWorker||"auto",this.maxQueueSize=e.maxQueueSize||1/0,this.onCreateWorker=e.onCreateWorker||function(){return null},this.onTerminateWorker=e.onTerminateWorker||function(){return null},e&&"maxWorkers"in e?(function(r){if(!c(r)||!a(r)||r<1)throw new TypeError("Option maxWorkers must be an integer number >= 1")}(e.maxWorkers),this.maxWorkers=e.maxWorkers):this.maxWorkers=Math.max((i.cpus||4)-1,1),e&&"minWorkers"in e&&("max"===e.minWorkers?this.minWorkers=this.maxWorkers:(function(r){if(!c(r)||!a(r)||r<0)throw new TypeError("Option minWorkers must be an integer number >= 0")}(e.minWorkers),this.minWorkers=e.minWorkers,this.maxWorkers=Math.max(this.minWorkers,this.maxWorkers)),this._ensureMinWorkers()),this._boundNext=this._next.bind(this),"thread"===this.workerType&&n.ensureWorkerThreads()}function c(r){return"number"==typeof r}function a(r){return Math.round(r)==r}u.prototype.exec=function(r,e,t){if(e&&!Array.isArray(e))throw new TypeError('Array expected as argument "params"');if("string"==typeof r){var n=o.defer();if(this.tasks.length>=this.maxQueueSize)throw new Error("Max queue size of "+this.maxQueueSize+" reached");var i=this.tasks,s={method:r,params:e,resolver:n,timeout:null,options:t};i.push(s);var u=n.promise.timeout;return n.promise.timeout=function(r){return-1!==i.indexOf(s)?(s.timeout=r,n.promise):u.call(n.promise,r)},this._next(),n.promise}if("function"==typeof r)return this.exec("run",[String(r),e]);throw new TypeError('Function or string expected as argument "method"')},u.prototype.proxy=function(){if(arguments.length>0)throw new Error("No arguments expected");var r=this;return this.exec("methods").then((function(e){var t={};return e.forEach((function(e){t[e]=function(){return r.exec(e,Array.prototype.slice.call(arguments))}})),t}))},u.prototype._next=function(){if(this.tasks.length>0){var r=this._getWorker();if(r){var e=this,t=this.tasks.shift();if(t.resolver.promise.pending){var o=r.exec(t.method,t.params,t.resolver,t.options).then(e._boundNext).catch((function(){if(r.terminated)return e._removeWorker(r)})).then((function(){e._next()}));"number"==typeof t.timeout&&o.timeout(t.timeout)}else e._next()}}},u.prototype._getWorker=function(){for(var r=this.workers,e=0;e<r.length;e++){var t=r[e];if(!1===t.busy())return t}return r.length<this.maxWorkers?(t=this._createWorkerHandler(),r.push(t),t):null},u.prototype._removeWorker=function(r){var e=this;return s.releasePort(r.debugPort),this._removeWorkerFromList(r),this._ensureMinWorkers(),new o((function(t,o){r.terminate(!1,(function(n){e.onTerminateWorker({forkArgs:r.forkArgs,forkOpts:r.forkOpts,script:r.script}),n?o(n):t(r)}))}))},u.prototype._removeWorkerFromList=function(r){var e=this.workers.indexOf(r);-1!==e&&this.workers.splice(e,1)},u.prototype.terminate=function(r,e){var t=this;this.tasks.forEach((function(r){r.resolver.reject(new Error("Pool terminated"))})),this.tasks.length=0;var n=function(r){s.releasePort(r.debugPort),this._removeWorkerFromList(r)}.bind(this),i=[];return this.workers.slice().forEach((function(o){var s=o.terminateAndNotify(r,e).then(n).always((function(){t.onTerminateWorker({forkArgs:o.forkArgs,forkOpts:o.forkOpts,script:o.script})}));i.push(s)})),o.all(i)},u.prototype.stats=function(){var r=this.workers.length,e=this.workers.filter((function(r){return r.busy()})).length;return{totalWorkers:r,busyWorkers:e,idleWorkers:r-e,pendingTasks:this.tasks.length,activeTasks:e}},u.prototype._ensureMinWorkers=function(){if(this.minWorkers)for(var r=this.workers.length;r<this.minWorkers;r++)this.workers.push(this._createWorkerHandler())},u.prototype._createWorkerHandler=function(){var r=this.onCreateWorker({forkArgs:this.forkArgs,forkOpts:this.forkOpts,workerThreadOpts:this.workerThreadOpts,script:this.script})||{};return new n(r.script||this.script,{forkArgs:r.forkArgs||this.forkArgs,forkOpts:r.forkOpts||this.forkOpts,workerThreadOpts:r.workerThreadOpts||this.workerThreadOpts,debugPort:s.nextAvailableStartingAt(this.debugPortStart),workerType:this.workerType})},r.exports=u},219:function(r){"use strict";function e(r,i){var s=this;if(!(this instanceof e))throw new SyntaxError("Constructor must be called with the new operator");if("function"!=typeof r)throw new SyntaxError("Function parameter handler(resolve, reject) missing");var u=[],c=[];this.resolved=!1,this.rejected=!1,this.pending=!0;var a=function(r,e){u.push(r),c.push(e)};this.then=function(r,o){return new e((function(e,n){var i=r?t(r,e,n):e,s=o?t(o,e,n):n;a(i,s)}),s)};var f=function(r){return s.resolved=!0,s.rejected=!1,s.pending=!1,u.forEach((function(e){e(r)})),a=function(e,t){e(r)},f=p=function(){},s},p=function(r){return s.resolved=!1,s.rejected=!0,s.pending=!1,c.forEach((function(e){e(r)})),a=function(e,t){t(r)},f=p=function(){},s};this.cancel=function(){return i?i.cancel():p(new o),s},this.timeout=function(r){if(i)i.timeout(r);else{var e=setTimeout((function(){p(new n("Promise timed out after "+r+" ms"))}),r);s.always((function(){clearTimeout(e)}))}return s},r((function(r){f(r)}),(function(r){p(r)}))}function t(r,e,t){return function(o){try{var n=r(o);n&&"function"==typeof n.then&&"function"==typeof n.catch?n.then(e,t):e(n)}catch(r){t(r)}}}function o(r){this.message=r||"promise cancelled",this.stack=(new Error).stack}function n(r){this.message=r||"timeout exceeded",this.stack=(new Error).stack}e.prototype.catch=function(r){return this.then(null,r)},e.prototype.always=function(r){return this.then(r,r)},e.all=function(r){return new e((function(e,t){var o=r.length,n=[];o?r.forEach((function(r,i){r.then((function(r){n[i]=r,0==--o&&e(n)}),(function(r){o=0,t(r)}))})):e(n)}))},e.defer=function(){var r={};return r.promise=new e((function(e,t){r.resolve=e,r.reject=t})),r},o.prototype=new Error,o.prototype.constructor=Error,o.prototype.name="CancellationError",e.CancellationError=o,n.prototype=new Error,n.prototype.constructor=Error,n.prototype.name="TimeoutError",e.TimeoutError=n,r.exports=e},751:function(r,e,t){"use strict";function o(r,e){(null==e||e>r.length)&&(e=r.length);for(var t=0,o=new Array(e);t<e;t++)o[t]=r[t];return o}function n(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(r);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),t.push.apply(t,o)}return t}function i(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}function s(r){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&"function"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},s(r)}var u=t(219),c=t(828),a=t(397),f="__workerpool-terminate__";function p(){var r=l();if(!r)throw new Error("WorkerPool: workerType = 'thread' is not supported, Node >= 11.7.0 required");return r}function d(){if("function"!=typeof Worker&&("object"!==("undefined"==typeof Worker?"undefined":s(Worker))||"function"!=typeof Worker.prototype.constructor))throw new Error("WorkerPool: Web Workers not supported")}function l(){try{return a("worker_threads")}catch(r){if("object"===s(r)&&null!==r&&"MODULE_NOT_FOUND"===r.code)return null;throw r}}function h(r,e){var t=new e(r);return t.isBrowserWorker=!0,t.on=function(r,e){this.addEventListener(r,(function(r){e(r.data)}))},t.send=function(r){this.postMessage(r)},t}function k(r,e,t){var o=new e.Worker(r,function(r){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?n(Object(t),!0).forEach((function(e){i(r,e,t[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):n(Object(t)).forEach((function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(t,e))}))}return r}({stdout:!1,stderr:!1},t));return o.isWorkerThread=!0,o.send=function(r){this.postMessage(r)},o.kill=function(){return this.terminate(),!0},o.disconnect=function(){this.terminate()},o}function w(r,e,t){var o=t.fork(r,e.forkArgs,e.forkOpts);return o.isChildProcess=!0,o}function m(r){r=r||{};var e=process.execArgv.join(" "),t=-1!==e.indexOf("--inspect"),o=-1!==e.indexOf("--debug-brk"),n=[];return t&&(n.push("--inspect="+r.debugPort),o&&n.push("--debug-brk")),process.execArgv.forEach((function(r){r.indexOf("--max-old-space-size")>-1&&n.push(r)})),Object.assign({},r,{forkArgs:r.forkArgs,forkOpts:Object.assign({},r.forkOpts,{execArgv:(r.forkOpts&&r.forkOpts.execArgv||[]).concat(n)})})}function y(r,e){var n=this,i=e||{};function s(r){for(var e in n.terminated=!0,n.processing)void 0!==n.processing[e]&&n.processing[e].resolver.reject(r);n.processing=Object.create(null)}this.script=r||function(){if("browser"===c.platform){if("undefined"==typeof Blob)throw new Error("Blob not supported by the browser");if(!window.URL||"function"!=typeof window.URL.createObjectURL)throw new Error("URL.createObjectURL not supported by the browser");var r=new Blob([t(670)],{type:"text/javascript"});return window.URL.createObjectURL(r)}return __dirname+"/worker.js"}(),this.worker=function(r,e){if("web"===e.workerType)return d(),h(r,Worker);if("thread"===e.workerType)return k(r,t=p(),e.workerThreadOpts);if("process"!==e.workerType&&e.workerType){if("browser"===c.platform)return d(),h(r,Worker);var t=l();return t?k(r,t):w(r,m(e),a("child_process"))}return w(r,m(e),a("child_process"))}(this.script,i),this.debugPort=i.debugPort,this.forkOpts=i.forkOpts,this.forkArgs=i.forkArgs,this.workerThreadOpts=i.workerThreadOpts,r||(this.worker.ready=!0),this.requestQueue=[],this.worker.on("message",(function(r){if(!n.terminated)if("string"==typeof r&&"ready"===r)n.worker.ready=!0,function(){var r,e=function(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=function(r,e){if(r){if("string"==typeof r)return o(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?o(r,e):void 0}}(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var n=0,i=function(){};return{s:i,n:function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]}},e:function(r){throw r},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,u=!0,c=!1;return{s:function(){t=t.call(r)},n:function(){var r=t.next();return u=r.done,r},e:function(r){c=!0,s=r},f:function(){try{u||null==t.return||t.return()}finally{if(c)throw s}}}}(n.requestQueue.splice(0));try{for(e.s();!(r=e.n()).done;){var t=r.value;n.worker.send(t)}}catch(r){e.e(r)}finally{e.f()}}();else{var e=r.id,t=n.processing[e];void 0!==t&&(r.isEvent?t.options&&"function"==typeof t.options.on&&t.options.on(r.payload):(delete n.processing[e],!0===n.terminating&&n.terminate(),r.error?t.resolver.reject(function(r){for(var e=new Error(""),t=Object.keys(r),o=0;o<t.length;o++)e[t[o]]=r[t[o]];return e}(r.error)):t.resolver.resolve(r.result)))}}));var u=this.worker;this.worker.on("error",s),this.worker.on("exit",(function(r,e){var t="Workerpool Worker terminated Unexpectedly\n";t+=" exitCode: `"+r+"`\n",t+=" signalCode: `"+e+"`\n",t+=" workerpool.script: `"+n.script+"`\n",t+=" spawnArgs: `"+u.spawnargs+"`\n",t+=" spawnfile: `"+u.spawnfile+"`\n",t+=" stdout: `"+u.stdout+"`\n",t+=" stderr: `"+u.stderr+"`\n",s(new Error(t))})),this.processing=Object.create(null),this.terminating=!1,this.terminated=!1,this.terminationHandler=null,this.lastId=0}y.prototype.methods=function(){return this.exec("methods")},y.prototype.exec=function(r,e,t,o){t||(t=u.defer());var n=++this.lastId;this.processing[n]={id:n,resolver:t,options:o};var i={id:n,method:r,params:e};this.terminated?t.reject(new Error("Worker is terminated")):this.worker.ready?this.worker.send(i):this.requestQueue.push(i);var s=this;return t.promise.catch((function(r){if(r instanceof u.CancellationError||r instanceof u.TimeoutError)return delete s.processing[n],s.terminateAndNotify(!0).then((function(){throw r}),(function(r){throw r}));throw r}))},y.prototype.busy=function(){return Object.keys(this.processing).length>0},y.prototype.terminate=function(r,e){var t=this;if(r){for(var o in this.processing)void 0!==this.processing[o]&&this.processing[o].resolver.reject(new Error("Worker terminated"));this.processing=Object.create(null)}if("function"==typeof e&&(this.terminationHandler=e),this.busy())this.terminating=!0;else{var n=function(r){if(t.terminated=!0,null!=t.worker&&t.worker.removeAllListeners&&t.worker.removeAllListeners("message"),t.worker=null,t.terminating=!1,t.terminationHandler)t.terminationHandler(r,t);else if(r)throw r};if(this.worker){if("function"==typeof this.worker.kill){if(this.worker.killed)return void n(new Error("worker already killed!"));if(this.worker.isChildProcess){var i=setTimeout((function(){t.worker&&t.worker.kill()}),1e3);this.worker.once("exit",(function(){clearTimeout(i),t.worker&&(t.worker.killed=!0),n()})),this.worker.ready?this.worker.send(f):this.requestQueue.push(f)}else this.worker.kill(),this.worker.killed=!0,n();return}if("function"!=typeof this.worker.terminate)throw new Error("Failed to terminate worker");this.worker.terminate(),this.worker.killed=!0}n()}},y.prototype.terminateAndNotify=function(r,e){var t=u.defer();return e&&(t.promise.timeout=e),this.terminate(r,(function(r,e){r?t.reject(r):t.resolve(e)})),t.promise},r.exports=y,r.exports._tryRequireWorkerThreads=l,r.exports._setupProcessWorker=w,r.exports._setupBrowserWorker=h,r.exports._setupWorkerThreadWorker=k,r.exports.ensureWorkerThreads=p},833:function(r){"use strict";function e(){this.ports=Object.create(null),this.length=0}r.exports=e,e.prototype.nextAvailableStartingAt=function(r){for(;!0===this.ports[r];)r++;if(r>=65535)throw new Error("WorkerPool debug port limit reached: "+r+">= 65535");return this.ports[r]=!0,this.length++,r},e.prototype.releasePort=function(r){delete this.ports[r],this.length--}},828:function(r,e,t){var o=t(397),n=function(r){return void 0!==r&&null!=r.versions&&null!=r.versions.node};r.exports.isNode=n,r.exports.platform="undefined"!=typeof process&&n(process)?"node":"browser";var i=function(r){try{return o("worker_threads")}catch(r){return null}}();r.exports.isMainThread="node"===r.exports.platform?(!i||i.isMainThread)&&!process.connected:"undefined"!=typeof Window,r.exports.cpus="browser"===r.exports.platform?self.navigator.hardwareConcurrency:o("os").cpus().length},670:function(r){r.exports='!function(){var __webpack_exports__={};!function(){var exports=__webpack_exports__,__webpack_unused_export__;function _typeof(r){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&"function"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r})(r)}var requireFoolWebpack=eval("typeof require !== \'undefined\' ? require : function (module) { throw new Error(\'Module \\" + module + \\" not found.\') }"),TERMINATE_METHOD_ID="__workerpool-terminate__",worker={exit:function(){}},WorkerThreads,parentPort;if("undefined"!=typeof self&&"function"==typeof postMessage&&"function"==typeof addEventListener)worker.on=function(r,e){addEventListener(r,function(r){e(r.data)})},worker.send=function(r){postMessage(r)};else{if("undefined"==typeof process)throw new Error("Script must be executed as a worker");try{WorkerThreads=requireFoolWebpack("worker_threads")}catch(error){if("object"!==_typeof(error)||null===error||"MODULE_NOT_FOUND"!==error.code)throw error}WorkerThreads&&null!==WorkerThreads.parentPort?(parentPort=WorkerThreads.parentPort,worker.send=parentPort.postMessage.bind(parentPort),worker.on=parentPort.on.bind(parentPort)):(worker.on=process.on.bind(process),worker.send=process.send.bind(process),worker.on("disconnect",function(){process.exit(1)}),worker.exit=process.exit.bind(process))}function convertError(o){return Object.getOwnPropertyNames(o).reduce(function(r,e){return Object.defineProperty(r,e,{value:o[e],enumerable:!0})},{})}function isPromise(r){return r&&"function"==typeof r.then&&"function"==typeof r.catch}worker.methods={},worker.methods.run=function(r,e){r=new Function("return ("+r+").apply(null, arguments);");return r.apply(r,e)},worker.methods.methods=function(){return Object.keys(worker.methods)};var currentRequestId=null;worker.on("message",function(e){if(e===TERMINATE_METHOD_ID)return worker.exit(0);try{var r=worker.methods[e.method];if(!r)throw new Error(\'Unknown method "\'+e.method+\'"\');currentRequestId=e.id;var o=r.apply(r,e.params);isPromise(o)?o.then(function(r){worker.send({id:e.id,result:r,error:null}),currentRequestId=null}).catch(function(r){worker.send({id:e.id,result:null,error:convertError(r)}),currentRequestId=null}):(worker.send({id:e.id,result:o,error:null}),currentRequestId=null)}catch(r){worker.send({id:e.id,result:null,error:convertError(r)})}}),worker.register=function(r){if(r)for(var e in r)r.hasOwnProperty(e)&&(worker.methods[e]=r[e]);worker.send("ready")},worker.emit=function(r){currentRequestId&&worker.send({id:currentRequestId,isEvent:!0,payload:r})},__webpack_unused_export__=worker.register,worker.emit}()}();'},397:function(module){var requireFoolWebpack=eval("typeof require !== 'undefined' ? require : function (module) { throw new Error('Module \" + module + \" not found.') }");module.exports=requireFoolWebpack},744:function(__unused_webpack_module,exports){function _typeof(r){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&"function"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},_typeof(r)}var requireFoolWebpack=eval("typeof require !== 'undefined' ? require : function (module) { throw new Error('Module \" + module + \" not found.') }"),TERMINATE_METHOD_ID="__workerpool-terminate__",worker={exit:function(){}};if("undefined"!=typeof self&&"function"==typeof postMessage&&"function"==typeof addEventListener)worker.on=function(r,e){addEventListener(r,(function(r){e(r.data)}))},worker.send=function(r){postMessage(r)};else{if("undefined"==typeof process)throw new Error("Script must be executed as a worker");var WorkerThreads;try{WorkerThreads=requireFoolWebpack("worker_threads")}catch(r){if("object"!==_typeof(r)||null===r||"MODULE_NOT_FOUND"!==r.code)throw r}if(WorkerThreads&&null!==WorkerThreads.parentPort){var parentPort=WorkerThreads.parentPort;worker.send=parentPort.postMessage.bind(parentPort),worker.on=parentPort.on.bind(parentPort)}else worker.on=process.on.bind(process),worker.send=process.send.bind(process),worker.on("disconnect",(function(){process.exit(1)})),worker.exit=process.exit.bind(process)}function convertError(r){return Object.getOwnPropertyNames(r).reduce((function(e,t){return Object.defineProperty(e,t,{value:r[t],enumerable:!0})}),{})}function isPromise(r){return r&&"function"==typeof r.then&&"function"==typeof r.catch}worker.methods={},worker.methods.run=function(r,e){var t=new Function("return ("+r+").apply(null, arguments);");return t.apply(t,e)},worker.methods.methods=function(){return Object.keys(worker.methods)};var currentRequestId=null;worker.on("message",(function(r){if(r===TERMINATE_METHOD_ID)return worker.exit(0);try{var e=worker.methods[r.method];if(!e)throw new Error('Unknown method "'+r.method+'"');currentRequestId=r.id;var t=e.apply(e,r.params);isPromise(t)?t.then((function(e){worker.send({id:r.id,result:e,error:null}),currentRequestId=null})).catch((function(e){worker.send({id:r.id,result:null,error:convertError(e)}),currentRequestId=null})):(worker.send({id:r.id,result:t,error:null}),currentRequestId=null)}catch(e){worker.send({id:r.id,result:null,error:convertError(e)})}})),worker.register=function(r){if(r)for(var e in r)r.hasOwnProperty(e)&&(worker.methods[e]=r[e]);worker.send("ready")},worker.emit=function(r){currentRequestId&&worker.send({id:currentRequestId,isEvent:!0,payload:r})},exports.add=worker.register,exports.emit=worker.emit}},__webpack_module_cache__={};function __webpack_require__(r){var e=__webpack_module_cache__[r];if(void 0!==e)return e.exports;var t=__webpack_module_cache__[r]={exports:{}};return __webpack_modules__[r](t,t.exports,__webpack_require__),t.exports}var __webpack_exports__={};return function(){var r=__webpack_exports__,e=__webpack_require__(828);r.pool=function(r,e){return new(__webpack_require__(345))(r,e)},r.worker=function(r){__webpack_require__(744).add(r)},r.workerEmit=function(r){__webpack_require__(744).emit(r)},r.Promise=__webpack_require__(219),r.platform=e.platform,r.isMainThread=e.isMainThread,r.cpus=e.cpus}(),__webpack_exports__}()}));
!function(r,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("workerpool",[],e):"object"==typeof exports?exports.workerpool=e():r.workerpool=e()}("undefined"!=typeof self?self:this,(function(){return function(){var __webpack_modules__={345:function(r,e,t){var o=t(219),n=t(751),i=t(828),s=new(t(833));function u(r,e){"string"==typeof r?this.script=r||null:(this.script=null,e=r),this.workers=[],this.tasks=[],e=e||{},this.forkArgs=Object.freeze(e.forkArgs||[]),this.forkOpts=Object.freeze(e.forkOpts||{}),this.workerThreadOpts=Object.freeze(e.workerThreadOpts||{}),this.debugPortStart=e.debugPortStart||43210,this.nodeWorker=e.nodeWorker,this.workerType=e.workerType||e.nodeWorker||"auto",this.maxQueueSize=e.maxQueueSize||1/0,this.workerTerminateTimeout=e.workerTerminateTimeout||1e3,this.onCreateWorker=e.onCreateWorker||function(){return null},this.onTerminateWorker=e.onTerminateWorker||function(){return null},e&&"maxWorkers"in e?(function(r){if(!a(r)||!c(r)||r<1)throw new TypeError("Option maxWorkers must be an integer number >= 1")}(e.maxWorkers),this.maxWorkers=e.maxWorkers):this.maxWorkers=Math.max((i.cpus||4)-1,1),e&&"minWorkers"in e&&("max"===e.minWorkers?this.minWorkers=this.maxWorkers:(function(r){if(!a(r)||!c(r)||r<0)throw new TypeError("Option minWorkers must be an integer number >= 0")}(e.minWorkers),this.minWorkers=e.minWorkers,this.maxWorkers=Math.max(this.minWorkers,this.maxWorkers)),this._ensureMinWorkers()),this._boundNext=this._next.bind(this),"thread"===this.workerType&&n.ensureWorkerThreads()}function a(r){return"number"==typeof r}function c(r){return Math.round(r)==r}u.prototype.exec=function(r,e,t){if(e&&!Array.isArray(e))throw new TypeError('Array expected as argument "params"');if("string"==typeof r){var n=o.defer();if(this.tasks.length>=this.maxQueueSize)throw new Error("Max queue size of "+this.maxQueueSize+" reached");var i=this.tasks,s={method:r,params:e,resolver:n,timeout:null,options:t};i.push(s);var u=n.promise.timeout;return n.promise.timeout=function(r){return-1!==i.indexOf(s)?(s.timeout=r,n.promise):u.call(n.promise,r)},this._next(),n.promise}if("function"==typeof r)return this.exec("run",[String(r),e]);throw new TypeError('Function or string expected as argument "method"')},u.prototype.proxy=function(){if(arguments.length>0)throw new Error("No arguments expected");var r=this;return this.exec("methods").then((function(e){var t={};return e.forEach((function(e){t[e]=function(){return r.exec(e,Array.prototype.slice.call(arguments))}})),t}))},u.prototype._next=function(){if(this.tasks.length>0){var r=this._getWorker();if(r){var e=this,t=this.tasks.shift();if(t.resolver.promise.pending){var o=r.exec(t.method,t.params,t.resolver,t.options).then(e._boundNext).catch((function(){if(r.terminated)return e._removeWorker(r)})).then((function(){e._next()}));"number"==typeof t.timeout&&o.timeout(t.timeout)}else e._next()}}},u.prototype._getWorker=function(){for(var r=this.workers,e=0;e<r.length;e++){var t=r[e];if(!1===t.busy())return t}return r.length<this.maxWorkers?(t=this._createWorkerHandler(),r.push(t),t):null},u.prototype._removeWorker=function(r){var e=this;return s.releasePort(r.debugPort),this._removeWorkerFromList(r),this._ensureMinWorkers(),new o((function(t,o){r.terminate(!1,(function(n){e.onTerminateWorker({forkArgs:r.forkArgs,forkOpts:r.forkOpts,workerThreadOpts:r.workerThreadOpts,script:r.script}),n?o(n):t(r)}))}))},u.prototype._removeWorkerFromList=function(r){var e=this.workers.indexOf(r);-1!==e&&this.workers.splice(e,1)},u.prototype.terminate=function(r,e){var t=this;this.tasks.forEach((function(r){r.resolver.reject(new Error("Pool terminated"))})),this.tasks.length=0;var n=function(r){s.releasePort(r.debugPort),this._removeWorkerFromList(r)}.bind(this),i=[];return this.workers.slice().forEach((function(o){var s=o.terminateAndNotify(r,e).then(n).always((function(){t.onTerminateWorker({forkArgs:o.forkArgs,forkOpts:o.forkOpts,workerThreadOpts:o.workerThreadOpts,script:o.script})}));i.push(s)})),o.all(i)},u.prototype.stats=function(){var r=this.workers.length,e=this.workers.filter((function(r){return r.busy()})).length;return{totalWorkers:r,busyWorkers:e,idleWorkers:r-e,pendingTasks:this.tasks.length,activeTasks:e}},u.prototype._ensureMinWorkers=function(){if(this.minWorkers)for(var r=this.workers.length;r<this.minWorkers;r++)this.workers.push(this._createWorkerHandler())},u.prototype._createWorkerHandler=function(){var r=this.onCreateWorker({forkArgs:this.forkArgs,forkOpts:this.forkOpts,workerThreadOpts:this.workerThreadOpts,script:this.script})||{};return new n(r.script||this.script,{forkArgs:r.forkArgs||this.forkArgs,forkOpts:r.forkOpts||this.forkOpts,workerThreadOpts:r.workerThreadOpts||this.workerThreadOpts,debugPort:s.nextAvailableStartingAt(this.debugPortStart),workerType:this.workerType,workerTerminateTimeout:this.workerTerminateTimeout})},r.exports=u},219:function(r){"use strict";function e(r,i){var s=this;if(!(this instanceof e))throw new SyntaxError("Constructor must be called with the new operator");if("function"!=typeof r)throw new SyntaxError("Function parameter handler(resolve, reject) missing");var u=[],a=[];this.resolved=!1,this.rejected=!1,this.pending=!0;var c=function(r,e){u.push(r),a.push(e)};this.then=function(r,o){return new e((function(e,n){var i=r?t(r,e,n):e,s=o?t(o,e,n):n;c(i,s)}),s)};var f=function(r){return s.resolved=!0,s.rejected=!1,s.pending=!1,u.forEach((function(e){e(r)})),c=function(e,t){e(r)},f=p=function(){},s},p=function(r){return s.resolved=!1,s.rejected=!0,s.pending=!1,a.forEach((function(e){e(r)})),c=function(e,t){t(r)},f=p=function(){},s};this.cancel=function(){return i?i.cancel():p(new o),s},this.timeout=function(r){if(i)i.timeout(r);else{var e=setTimeout((function(){p(new n("Promise timed out after "+r+" ms"))}),r);s.always((function(){clearTimeout(e)}))}return s},r((function(r){f(r)}),(function(r){p(r)}))}function t(r,e,t){return function(o){try{var n=r(o);n&&"function"==typeof n.then&&"function"==typeof n.catch?n.then(e,t):e(n)}catch(r){t(r)}}}function o(r){this.message=r||"promise cancelled",this.stack=(new Error).stack}function n(r){this.message=r||"timeout exceeded",this.stack=(new Error).stack}e.prototype.catch=function(r){return this.then(null,r)},e.prototype.always=function(r){return this.then(r,r)},e.all=function(r){return new e((function(e,t){var o=r.length,n=[];o?r.forEach((function(r,i){r.then((function(r){n[i]=r,0==--o&&e(n)}),(function(r){o=0,t(r)}))})):e(n)}))},e.defer=function(){var r={};return r.promise=new e((function(e,t){r.resolve=e,r.reject=t})),r},o.prototype=new Error,o.prototype.constructor=Error,o.prototype.name="CancellationError",e.CancellationError=o,n.prototype=new Error,n.prototype.constructor=Error,n.prototype.name="TimeoutError",e.TimeoutError=n,r.exports=e},751:function(r,e,t){"use strict";function o(r,e){(null==e||e>r.length)&&(e=r.length);for(var t=0,o=new Array(e);t<e;t++)o[t]=r[t];return o}function n(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(r);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),t.push.apply(t,o)}return t}function i(r,e,t){return(e=function(r){var e=function(r,e){if("object"!==s(r)||null===r)return r;var t=r[Symbol.toPrimitive];if(void 0!==t){var o=t.call(r,e);if("object"!==s(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(r)}(r,"string");return"symbol"===s(e)?e:String(e)}(e))in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}function s(r){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&"function"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},s(r)}var u=t(219),a=t(828),c=t(397),f="__workerpool-terminate__";function p(){var r=l();if(!r)throw new Error("WorkerPool: workerType = 'thread' is not supported, Node >= 11.7.0 required");return r}function d(){if("function"!=typeof Worker&&("object"!==("undefined"==typeof Worker?"undefined":s(Worker))||"function"!=typeof Worker.prototype.constructor))throw new Error("WorkerPool: Web Workers not supported")}function l(){try{return c("worker_threads")}catch(r){if("object"===s(r)&&null!==r&&"MODULE_NOT_FOUND"===r.code)return null;throw r}}function h(r,e){var t=new e(r);return t.isBrowserWorker=!0,t.on=function(r,e){this.addEventListener(r,(function(r){e(r.data)}))},t.send=function(r,e){this.postMessage(r,e)},t}function k(r,e,t){var o=new e.Worker(r,function(r){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?n(Object(t),!0).forEach((function(e){i(r,e,t[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):n(Object(t)).forEach((function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(t,e))}))}return r}({stdout:!1,stderr:!1},t));return o.isWorkerThread=!0,o.send=function(r,e){this.postMessage(r,e)},o.kill=function(){return this.terminate(),!0},o.disconnect=function(){this.terminate()},o}function w(r,e,t){var o=t.fork(r,e.forkArgs,e.forkOpts),n=o.send;return o.send=function(r){return n.call(o,r)},o.isChildProcess=!0,o}function m(r){r=r||{};var e=process.execArgv.join(" "),t=-1!==e.indexOf("--inspect"),o=-1!==e.indexOf("--debug-brk"),n=[];return t&&(n.push("--inspect="+r.debugPort),o&&n.push("--debug-brk")),process.execArgv.forEach((function(r){r.indexOf("--max-old-space-size")>-1&&n.push(r)})),Object.assign({},r,{forkArgs:r.forkArgs,forkOpts:Object.assign({},r.forkOpts,{execArgv:(r.forkOpts&&r.forkOpts.execArgv||[]).concat(n)})})}function _(r,e){var n=this,i=e||{};function s(r){for(var e in n.terminated=!0,n.processing)void 0!==n.processing[e]&&n.processing[e].resolver.reject(r);n.processing=Object.create(null)}this.script=r||function(){if("browser"===a.platform){if("undefined"==typeof Blob)throw new Error("Blob not supported by the browser");if(!window.URL||"function"!=typeof window.URL.createObjectURL)throw new Error("URL.createObjectURL not supported by the browser");var r=new Blob([t(670)],{type:"text/javascript"});return window.URL.createObjectURL(r)}return __dirname+"/worker.js"}(),this.worker=function(r,e){if("web"===e.workerType)return d(),h(r,Worker);if("thread"===e.workerType)return k(r,t=p(),e.workerThreadOpts);if("process"!==e.workerType&&e.workerType){if("browser"===a.platform)return d(),h(r,Worker);var t=l();return t?k(r,t):w(r,m(e),c("child_process"))}return w(r,m(e),c("child_process"))}(this.script,i),this.debugPort=i.debugPort,this.forkOpts=i.forkOpts,this.forkArgs=i.forkArgs,this.workerThreadOpts=i.workerThreadOpts,this.workerTerminateTimeout=i.workerTerminateTimeout,r||(this.worker.ready=!0),this.requestQueue=[],this.worker.on("message",(function(r){if(!n.terminated)if("string"==typeof r&&"ready"===r)n.worker.ready=!0,function(){var r,e=function(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=function(r,e){if(r){if("string"==typeof r)return o(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?o(r,e):void 0}}(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var n=0,i=function(){};return{s:i,n:function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]}},e:function(r){throw r},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,u=!0,a=!1;return{s:function(){t=t.call(r)},n:function(){var r=t.next();return u=r.done,r},e:function(r){a=!0,s=r},f:function(){try{u||null==t.return||t.return()}finally{if(a)throw s}}}}(n.requestQueue.splice(0));try{for(e.s();!(r=e.n()).done;){var t=r.value;n.worker.send(t.message,t.transfer)}}catch(r){e.e(r)}finally{e.f()}}();else{var e=r.id,t=n.processing[e];void 0!==t&&(r.isEvent?t.options&&"function"==typeof t.options.on&&t.options.on(r.payload):(delete n.processing[e],!0===n.terminating&&n.terminate(),r.error?t.resolver.reject(function(r){for(var e=new Error(""),t=Object.keys(r),o=0;o<t.length;o++)e[t[o]]=r[t[o]];return e}(r.error)):t.resolver.resolve(r.result)))}}));var u=this.worker;this.worker.on("error",s),this.worker.on("exit",(function(r,e){var t="Workerpool Worker terminated Unexpectedly\n";t+=" exitCode: `"+r+"`\n",t+=" signalCode: `"+e+"`\n",t+=" workerpool.script: `"+n.script+"`\n",t+=" spawnArgs: `"+u.spawnargs+"`\n",t+=" spawnfile: `"+u.spawnfile+"`\n",t+=" stdout: `"+u.stdout+"`\n",t+=" stderr: `"+u.stderr+"`\n",s(new Error(t))})),this.processing=Object.create(null),this.terminating=!1,this.terminated=!1,this.cleaning=!1,this.terminationHandler=null,this.lastId=0}_.prototype.methods=function(){return this.exec("methods")},_.prototype.exec=function(r,e,t,o){t||(t=u.defer());var n=++this.lastId;this.processing[n]={id:n,resolver:t,options:o};var i={message:{id:n,method:r,params:e},transfer:o&&o.transfer};this.terminated?t.reject(new Error("Worker is terminated")):this.worker.ready?this.worker.send(i.message,i.transfer):this.requestQueue.push(i);var s=this;return t.promise.catch((function(r){if(r instanceof u.CancellationError||r instanceof u.TimeoutError)return delete s.processing[n],s.terminateAndNotify(!0).then((function(){throw r}),(function(r){throw r}));throw r}))},_.prototype.busy=function(){return this.cleaning||Object.keys(this.processing).length>0},_.prototype.terminate=function(r,e){var t=this;if(r){for(var o in this.processing)void 0!==this.processing[o]&&this.processing[o].resolver.reject(new Error("Worker terminated"));this.processing=Object.create(null)}if("function"==typeof e&&(this.terminationHandler=e),this.busy())this.terminating=!0;else{var n=function(r){if(t.terminated=!0,t.cleaning=!1,null!=t.worker&&t.worker.removeAllListeners&&t.worker.removeAllListeners("message"),t.worker=null,t.terminating=!1,t.terminationHandler)t.terminationHandler(r,t);else if(r)throw r};if(this.worker){if("function"==typeof this.worker.kill){if(this.worker.killed)return void n(new Error("worker already killed!"));var i=setTimeout((function(){t.worker&&t.worker.kill()}),this.workerTerminateTimeout);return this.worker.once("exit",(function(){clearTimeout(i),t.worker&&(t.worker.killed=!0),n()})),this.worker.ready?this.worker.send(f):this.requestQueue.push(f),void(this.cleaning=!0)}if("function"!=typeof this.worker.terminate)throw new Error("Failed to terminate worker");this.worker.terminate(),this.worker.killed=!0}n()}},_.prototype.terminateAndNotify=function(r,e){var t=u.defer();return e&&(t.promise.timeout=e),this.terminate(r,(function(r,e){r?t.reject(r):t.resolve(e)})),t.promise},r.exports=_,r.exports._tryRequireWorkerThreads=l,r.exports._setupProcessWorker=w,r.exports._setupBrowserWorker=h,r.exports._setupWorkerThreadWorker=k,r.exports.ensureWorkerThreads=p},833:function(r){"use strict";function e(){this.ports=Object.create(null),this.length=0}r.exports=e,e.prototype.nextAvailableStartingAt=function(r){for(;!0===this.ports[r];)r++;if(r>=65535)throw new Error("WorkerPool debug port limit reached: "+r+">= 65535");return this.ports[r]=!0,this.length++,r},e.prototype.releasePort=function(r){delete this.ports[r],this.length--}},828:function(r,e,t){var o=t(397),n=function(r){return void 0!==r&&null!=r.versions&&null!=r.versions.node};r.exports.isNode=n,r.exports.platform="undefined"!=typeof process&&n(process)?"node":"browser";var i=function(r){try{return o("worker_threads")}catch(r){return null}}();r.exports.isMainThread="node"===r.exports.platform?(!i||i.isMainThread)&&!process.connected:"undefined"!=typeof Window,r.exports.cpus="browser"===r.exports.platform?self.navigator.hardwareConcurrency:o("os").cpus().length},670:function(r){r.exports='!function(){var __webpack_modules__={577:function(e){e.exports=function(e,r){this.message=e,this.transfer=r}}},__webpack_module_cache__={};function __webpack_require__(e){var r=__webpack_module_cache__[e];return void 0!==r||(r=__webpack_module_cache__[e]={exports:{}},__webpack_modules__[e](r,r.exports,__webpack_require__)),r.exports}var __webpack_exports__={};!function(){var exports=__webpack_exports__,__webpack_unused_export__;function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var Transfer=__webpack_require__(577),requireFoolWebpack=eval("typeof require !== \'undefined\' ? require : function (module) { throw new Error(\'Module \\" + module + \\" not found.\') }"),TERMINATE_METHOD_ID="__workerpool-terminate__",worker={exit:function(){}},WorkerThreads,parentPort;if("undefined"!=typeof self&&"function"==typeof postMessage&&"function"==typeof addEventListener)worker.on=function(e,r){addEventListener(e,function(e){r(e.data)})},worker.send=function(e){postMessage(e)};else{if("undefined"==typeof process)throw new Error("Script must be executed as a worker");try{WorkerThreads=requireFoolWebpack("worker_threads")}catch(error){if("object"!==_typeof(error)||null===error||"MODULE_NOT_FOUND"!==error.code)throw error}WorkerThreads&&null!==WorkerThreads.parentPort?(parentPort=WorkerThreads.parentPort,worker.send=parentPort.postMessage.bind(parentPort),worker.on=parentPort.on.bind(parentPort)):(worker.on=process.on.bind(process),worker.send=function(e){process.send(e)},worker.on("disconnect",function(){process.exit(1)})),worker.exit=process.exit.bind(process)}function convertError(o){return Object.getOwnPropertyNames(o).reduce(function(e,r){return Object.defineProperty(e,r,{value:o[r],enumerable:!0})},{})}function isPromise(e){return e&&"function"==typeof e.then&&"function"==typeof e.catch}worker.methods={},worker.methods.run=function(e,r){e=new Function("return ("+e+").apply(null, arguments);");return e.apply(e,r)},worker.methods.methods=function(){return Object.keys(worker.methods)},worker.terminationHandler=void 0,worker.cleanupAndExit=function(e){function r(){worker.exit(e)}if(!worker.terminationHandler)return r();var o=worker.terminationHandler(e);isPromise(o)?o.then(r,r):r()};var currentRequestId=null;worker.on("message",function(r){if(r===TERMINATE_METHOD_ID)return worker.cleanupAndExit(0);try{var e=worker.methods[r.method];if(!e)throw new Error(\'Unknown method "\'+r.method+\'"\');currentRequestId=r.id;var o=e.apply(e,r.params);isPromise(o)?o.then(function(e){e instanceof Transfer?worker.send({id:r.id,result:e.message,error:null},e.transfer):worker.send({id:r.id,result:e,error:null}),currentRequestId=null}).catch(function(e){worker.send({id:r.id,result:null,error:convertError(e)}),currentRequestId=null}):(o instanceof Transfer?worker.send({id:r.id,result:o.message,error:null},o.transfer):worker.send({id:r.id,result:o,error:null}),currentRequestId=null)}catch(e){worker.send({id:r.id,result:null,error:convertError(e)})}}),worker.register=function(e,r){if(e)for(var o in e)e.hasOwnProperty(o)&&(worker.methods[o]=e[o]);r&&(worker.terminationHandler=r.onTerminate),worker.send("ready")},worker.emit=function(e){currentRequestId&&(e instanceof Transfer?worker.send({id:currentRequestId,isEvent:!0,payload:e.message},e.transfer):worker.send({id:currentRequestId,isEvent:!0,payload:e}))},__webpack_unused_export__=worker.register,worker.emit}()}();'},397:function(module){var requireFoolWebpack=eval("typeof require !== 'undefined' ? require : function (module) { throw new Error('Module \" + module + \" not found.') }");module.exports=requireFoolWebpack},577:function(r){r.exports=function(r,e){this.message=r,this.transfer=e}},744:function(__unused_webpack_module,exports,__webpack_require__){function _typeof(r){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&"function"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},_typeof(r)}var Transfer=__webpack_require__(577),requireFoolWebpack=eval("typeof require !== 'undefined' ? require : function (module) { throw new Error('Module \" + module + \" not found.') }"),TERMINATE_METHOD_ID="__workerpool-terminate__",worker={exit:function(){}};if("undefined"!=typeof self&&"function"==typeof postMessage&&"function"==typeof addEventListener)worker.on=function(r,e){addEventListener(r,(function(r){e(r.data)}))},worker.send=function(r){postMessage(r)};else{if("undefined"==typeof process)throw new Error("Script must be executed as a worker");var WorkerThreads;try{WorkerThreads=requireFoolWebpack("worker_threads")}catch(r){if("object"!==_typeof(r)||null===r||"MODULE_NOT_FOUND"!==r.code)throw r}if(WorkerThreads&&null!==WorkerThreads.parentPort){var parentPort=WorkerThreads.parentPort;worker.send=parentPort.postMessage.bind(parentPort),worker.on=parentPort.on.bind(parentPort),worker.exit=process.exit.bind(process)}else worker.on=process.on.bind(process),worker.send=function(r){process.send(r)},worker.on("disconnect",(function(){process.exit(1)})),worker.exit=process.exit.bind(process)}function convertError(r){return Object.getOwnPropertyNames(r).reduce((function(e,t){return Object.defineProperty(e,t,{value:r[t],enumerable:!0})}),{})}function isPromise(r){return r&&"function"==typeof r.then&&"function"==typeof r.catch}worker.methods={},worker.methods.run=function(r,e){var t=new Function("return ("+r+").apply(null, arguments);");return t.apply(t,e)},worker.methods.methods=function(){return Object.keys(worker.methods)},worker.terminationHandler=void 0,worker.cleanupAndExit=function(r){var e=function(){worker.exit(r)};if(!worker.terminationHandler)return e();var t=worker.terminationHandler(r);isPromise(t)?t.then(e,e):e()};var currentRequestId=null;worker.on("message",(function(r){if(r===TERMINATE_METHOD_ID)return worker.cleanupAndExit(0);try{var e=worker.methods[r.method];if(!e)throw new Error('Unknown method "'+r.method+'"');currentRequestId=r.id;var t=e.apply(e,r.params);isPromise(t)?t.then((function(e){e instanceof Transfer?worker.send({id:r.id,result:e.message,error:null},e.transfer):worker.send({id:r.id,result:e,error:null}),currentRequestId=null})).catch((function(e){worker.send({id:r.id,result:null,error:convertError(e)}),currentRequestId=null})):(t instanceof Transfer?worker.send({id:r.id,result:t.message,error:null},t.transfer):worker.send({id:r.id,result:t,error:null}),currentRequestId=null)}catch(e){worker.send({id:r.id,result:null,error:convertError(e)})}})),worker.register=function(r,e){if(r)for(var t in r)r.hasOwnProperty(t)&&(worker.methods[t]=r[t]);e&&(worker.terminationHandler=e.onTerminate),worker.send("ready")},worker.emit=function(r){if(currentRequestId){if(r instanceof Transfer)return void worker.send({id:currentRequestId,isEvent:!0,payload:r.message},r.transfer);worker.send({id:currentRequestId,isEvent:!0,payload:r})}},exports.add=worker.register,exports.emit=worker.emit}},__webpack_module_cache__={};function __webpack_require__(r){var e=__webpack_module_cache__[r];if(void 0!==e)return e.exports;var t=__webpack_module_cache__[r]={exports:{}};return __webpack_modules__[r](t,t.exports,__webpack_require__),t.exports}var __webpack_exports__={};return function(){var r=__webpack_exports__,e=__webpack_require__(828);r.pool=function(r,e){return new(__webpack_require__(345))(r,e)},r.worker=function(r,e){__webpack_require__(744).add(r,e)},r.workerEmit=function(r){__webpack_require__(744).emit(r)},r.Promise=__webpack_require__(219),r.Transfer=__webpack_require__(577),r.platform=e.platform,r.isMainThread=e.isMainThread,r.cpus=e.cpus}(),__webpack_exports__}()}));
//# sourceMappingURL=workerpool.min.js.map

@@ -7,4 +7,4 @@ /**

*
* @version 6.3.1
* @date 2022-11-07
* @version 6.4.0
* @date 2023-02-24
*

@@ -11,0 +11,0 @@ * @license

@@ -5,2 +5,13 @@ # workerpool history

## 2023-02-24, version 6.4.0
- Support transferable objects (#3, #374). Thanks @Michsior14.
- Implement a new callback `onTerminate` at the worker side, which can be used
to clean up resources, and an option `workerTerminateTimeout` which forcefully
terminates a worker if it doesn't finish in time (#353, #377).
Thanks @Michsior14.
- Pass `workerThreadOpts` to the `onTerminateWorker` callback (#376).
Thanks @Michsior14.
## 2022-11-07, version 6.3.1

@@ -7,0 +18,0 @@

{
"name": "workerpool",
"license": "Apache-2.0",
"version": "6.3.1",
"version": "6.4.0",
"description": "Offload tasks to a pool of workers on node.js and in the browser",

@@ -31,4 +31,4 @@ "homepage": "https://github.com/josdejong/workerpool",

"watch": "gulp watch",
"test": "npm run build && mocha test --timeout 2000",
"test:debug": "npm run build && mocha debug test --timeout 10000",
"test": "npm run build && mocha test",
"test:debug": "npm run build && mocha debug test",
"coverage": "npm run build && istanbul cover _mocha -- test; echo \"\nCoverage report is available at ./coverage/lcov-report/index.html\"",

@@ -38,5 +38,5 @@ "prepublishOnly": "npm run test"

"devDependencies": {
"@babel/core": "7.20.2",
"@babel/core": "7.21.0",
"@babel/preset-env": "7.20.2",
"babel-loader": "9.1.0",
"babel-loader": "9.1.2",
"date-format": "4.0.14",

@@ -49,7 +49,7 @@ "del": "6.1.1",

"istanbul": "0.4.5",
"mocha": "10.1.0",
"mocha": "10.2.0",
"uglify-js": "3.17.4",
"webpack": "5.74.0"
"webpack": "5.75.0"
},
"dependencies": {}
}

@@ -16,3 +16,4 @@ # workerpool

- Handles crashed workers
- Small: 5 kB minified and gzipped
- Small: 7 kB minified and gzipped
- Supports transferable objects (only for web workers and worker_threads)

@@ -197,2 +198,3 @@ ## Why

- In case of `'thread'`, `worker_threads` will be used. If `worker_threads` are not available, an error is thrown. Only available in a node.js environment.
- `workerTerminateTimeout: number`. The timeout in milliseconds to wait for a worker to cleanup it's resources on termination before stopping it forcefully. Default value is `1000`.
- `forkArgs: String[]`. For `process` worker type. An array passed as `args` to [child_process.fork](https://nodejs.org/api/child_process.html#child_processforkmodulepath-args-options)

@@ -219,2 +221,3 @@ - `forkOpts: Object`. For `process` worker type. An object passed as `options` to [child_process.fork](https://nodejs.org/api/child_process.html#child_processforkmodulepath-args-options). See nodejs documentation for available options.

- `on: (payload: any) => void`. An event listener, to handle events sent by the worker for this execution. See [Events](#events) for more details.
- `transfer: Object[]`. A list of transferable objects to send to the worker. Not supported by `process` worker type. See [example](./examples/transferableObjects.js) for usage.

@@ -291,2 +294,14 @@ - `Pool.proxy() : Promise.<Object, Error>`<br>

// send a transferable object to the worker
// supposed myWorker.js contains a function 'sum'
const toTransfer = new Uint8Array(2).map((_v, i) => i)
pool2
.exec('sum', [toTransfer], { transfer: [toTransfer.buffer] })
.then(function (result) {
console.log(result); // will output 3
})
.catch(function (err) {
console.error(err);
});
// create a proxy to myWorker.js

@@ -313,6 +328,11 @@ pool2

`workerpool.worker([methods: Object.<String, Function>])`
`workerpool.worker([methods: Object.<String, Function>] [, options: Object])`
Argument `methods` is optional can can be an object with functions available in the worker. Registered functions will be available via the worker pool.
The following options are available:
- `onTerminate: ([code: number]) => Promise.<void> | void`. A callback that is called whenever a worker is being terminated. It can be used to release resources that might have been allocated for this specific worker. The difference with pool's `onTerminateWorker` is that this callback runs in the worker context, while `onTerminateWorker` is executed on the main thread.
Example usage:

@@ -357,2 +377,19 @@

Transferable objects can be sent back to the pool using `Transfer` helper class:
```js
// file myWorker.js
const workerpool = require('workerpool');
function array(size) {
var array = new Uint8Array(size).map((_v, i) => i);
return new workerpool.Transfer(array, [array.buffer]);
}
// create a worker and register functions
workerpool.worker({
array: array,
});
```
### Events

@@ -484,3 +521,3 @@

Copyright (C) 2014-2022 Jos de Jong <wjosdejong@gmail.com>
Copyright (C) 2014-2023 Jos de Jong <wjosdejong@gmail.com>

@@ -487,0 +524,0 @@ Licensed under the Apache License, Version 2.0 (the "License");

@@ -6,2 +6,2 @@ /**

*/
module.exports = "!function(){var __webpack_exports__={};!function(){var exports=__webpack_exports__,__webpack_unused_export__;function _typeof(r){return(_typeof=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&\"function\"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?\"symbol\":typeof r})(r)}var requireFoolWebpack=eval(\"typeof require !== 'undefined' ? require : function (module) { throw new Error('Module \\\" + module + \\\" not found.') }\"),TERMINATE_METHOD_ID=\"__workerpool-terminate__\",worker={exit:function(){}},WorkerThreads,parentPort;if(\"undefined\"!=typeof self&&\"function\"==typeof postMessage&&\"function\"==typeof addEventListener)worker.on=function(r,e){addEventListener(r,function(r){e(r.data)})},worker.send=function(r){postMessage(r)};else{if(\"undefined\"==typeof process)throw new Error(\"Script must be executed as a worker\");try{WorkerThreads=requireFoolWebpack(\"worker_threads\")}catch(error){if(\"object\"!==_typeof(error)||null===error||\"MODULE_NOT_FOUND\"!==error.code)throw error}WorkerThreads&&null!==WorkerThreads.parentPort?(parentPort=WorkerThreads.parentPort,worker.send=parentPort.postMessage.bind(parentPort),worker.on=parentPort.on.bind(parentPort)):(worker.on=process.on.bind(process),worker.send=process.send.bind(process),worker.on(\"disconnect\",function(){process.exit(1)}),worker.exit=process.exit.bind(process))}function convertError(o){return Object.getOwnPropertyNames(o).reduce(function(r,e){return Object.defineProperty(r,e,{value:o[e],enumerable:!0})},{})}function isPromise(r){return r&&\"function\"==typeof r.then&&\"function\"==typeof r.catch}worker.methods={},worker.methods.run=function(r,e){r=new Function(\"return (\"+r+\").apply(null, arguments);\");return r.apply(r,e)},worker.methods.methods=function(){return Object.keys(worker.methods)};var currentRequestId=null;worker.on(\"message\",function(e){if(e===TERMINATE_METHOD_ID)return worker.exit(0);try{var r=worker.methods[e.method];if(!r)throw new Error('Unknown method \"'+e.method+'\"');currentRequestId=e.id;var o=r.apply(r,e.params);isPromise(o)?o.then(function(r){worker.send({id:e.id,result:r,error:null}),currentRequestId=null}).catch(function(r){worker.send({id:e.id,result:null,error:convertError(r)}),currentRequestId=null}):(worker.send({id:e.id,result:o,error:null}),currentRequestId=null)}catch(r){worker.send({id:e.id,result:null,error:convertError(r)})}}),worker.register=function(r){if(r)for(var e in r)r.hasOwnProperty(e)&&(worker.methods[e]=r[e]);worker.send(\"ready\")},worker.emit=function(r){currentRequestId&&worker.send({id:currentRequestId,isEvent:!0,payload:r})},__webpack_unused_export__=worker.register,worker.emit}()}();";
module.exports = "!function(){var __webpack_modules__={577:function(e){e.exports=function(e,r){this.message=e,this.transfer=r}}},__webpack_module_cache__={};function __webpack_require__(e){var r=__webpack_module_cache__[e];return void 0!==r||(r=__webpack_module_cache__[e]={exports:{}},__webpack_modules__[e](r,r.exports,__webpack_require__)),r.exports}var __webpack_exports__={};!function(){var exports=__webpack_exports__,__webpack_unused_export__;function _typeof(e){return(_typeof=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}var Transfer=__webpack_require__(577),requireFoolWebpack=eval(\"typeof require !== 'undefined' ? require : function (module) { throw new Error('Module \\\" + module + \\\" not found.') }\"),TERMINATE_METHOD_ID=\"__workerpool-terminate__\",worker={exit:function(){}},WorkerThreads,parentPort;if(\"undefined\"!=typeof self&&\"function\"==typeof postMessage&&\"function\"==typeof addEventListener)worker.on=function(e,r){addEventListener(e,function(e){r(e.data)})},worker.send=function(e){postMessage(e)};else{if(\"undefined\"==typeof process)throw new Error(\"Script must be executed as a worker\");try{WorkerThreads=requireFoolWebpack(\"worker_threads\")}catch(error){if(\"object\"!==_typeof(error)||null===error||\"MODULE_NOT_FOUND\"!==error.code)throw error}WorkerThreads&&null!==WorkerThreads.parentPort?(parentPort=WorkerThreads.parentPort,worker.send=parentPort.postMessage.bind(parentPort),worker.on=parentPort.on.bind(parentPort)):(worker.on=process.on.bind(process),worker.send=function(e){process.send(e)},worker.on(\"disconnect\",function(){process.exit(1)})),worker.exit=process.exit.bind(process)}function convertError(o){return Object.getOwnPropertyNames(o).reduce(function(e,r){return Object.defineProperty(e,r,{value:o[r],enumerable:!0})},{})}function isPromise(e){return e&&\"function\"==typeof e.then&&\"function\"==typeof e.catch}worker.methods={},worker.methods.run=function(e,r){e=new Function(\"return (\"+e+\").apply(null, arguments);\");return e.apply(e,r)},worker.methods.methods=function(){return Object.keys(worker.methods)},worker.terminationHandler=void 0,worker.cleanupAndExit=function(e){function r(){worker.exit(e)}if(!worker.terminationHandler)return r();var o=worker.terminationHandler(e);isPromise(o)?o.then(r,r):r()};var currentRequestId=null;worker.on(\"message\",function(r){if(r===TERMINATE_METHOD_ID)return worker.cleanupAndExit(0);try{var e=worker.methods[r.method];if(!e)throw new Error('Unknown method \"'+r.method+'\"');currentRequestId=r.id;var o=e.apply(e,r.params);isPromise(o)?o.then(function(e){e instanceof Transfer?worker.send({id:r.id,result:e.message,error:null},e.transfer):worker.send({id:r.id,result:e,error:null}),currentRequestId=null}).catch(function(e){worker.send({id:r.id,result:null,error:convertError(e)}),currentRequestId=null}):(o instanceof Transfer?worker.send({id:r.id,result:o.message,error:null},o.transfer):worker.send({id:r.id,result:o,error:null}),currentRequestId=null)}catch(e){worker.send({id:r.id,result:null,error:convertError(e)})}}),worker.register=function(e,r){if(e)for(var o in e)e.hasOwnProperty(o)&&(worker.methods[o]=e[o]);r&&(worker.terminationHandler=r.onTerminate),worker.send(\"ready\")},worker.emit=function(e){currentRequestId&&(e instanceof Transfer?worker.send({id:currentRequestId,isEvent:!0,payload:e.message},e.transfer):worker.send({id:currentRequestId,isEvent:!0,payload:e}))},__webpack_unused_export__=worker.register,worker.emit}()}();";

@@ -18,6 +18,7 @@ var environment = require('./environment');

* @param {Object} [methods]
* @param {WorkerRegisterOptions} [options]
*/
exports.worker = function worker(methods) {
exports.worker = function worker(methods, options) {
var worker = require('./worker');
worker.add(methods);
worker.add(methods, options);
};

@@ -40,4 +41,10 @@

/**
* Create a transfer object.
* @type {Transfer} transfer
*/
exports.Transfer = require('./transfer');
exports.platform = environment.platform;
exports.isMainThread = environment.isMainThread;
exports.cpus = environment.cpus;

@@ -33,2 +33,3 @@ var Promise = require('./Promise');

this.maxQueueSize = options.maxQueueSize || Infinity;
this.workerTerminateTimeout = options.workerTerminateTimeout || 1000;

@@ -286,2 +287,3 @@ this.onCreateWorker = options.onCreateWorker || (() => null);

forkOpts: worker.forkOpts,
workerThreadOpts: worker.workerThreadOpts,
script: worker.script

@@ -345,2 +347,3 @@ });

forkOpts: worker.forkOpts,
workerThreadOpts: worker.workerThreadOpts,
script: worker.script

@@ -404,3 +407,4 @@ });

debugPort: DEBUG_PORT_ALLOCATOR.nextAvailableStartingAt(this.debugPortStart),
workerType: this.workerType
workerType: this.workerType,
workerTerminateTimeout: this.workerTerminateTimeout,
});

@@ -407,0 +411,0 @@ }

@@ -7,2 +7,3 @@ /**

* @property {'auto' | 'web' | 'process' | 'thread'} [workerType]
* @property {number} [workerTerminateTimeout]
* @property {*} [forkArgs]

@@ -17,2 +18,8 @@ * @property {*} [forkOpts]

* @property {(payload: any) => unknown} [on]
* @property {Object[]} [transfer]
*/
/**
* @typedef {Object} WorkerRegisterOptions
* @property {(code: number | undefined) => Promise | void} [onTerminate]
*/

@@ -5,2 +5,3 @@ /**

*/
var Transfer = require('./transfer');

@@ -58,5 +59,9 @@ // source of inspiration: https://github.com/sindresorhus/require-fool-webpack

worker.on = parentPort.on.bind(parentPort);
worker.exit = process.exit.bind(process);
} else {
worker.on = process.on.bind(process);
worker.send = process.send.bind(process);
// ignore transfer argument since it is not supported by process
worker.send = function (message) {
process.send(message);
};
// register disconnect handler only for subprocess worker to exit when parent is killed unexpectedly

@@ -114,2 +119,29 @@ worker.on('disconnect', function () {

/**
* Custom handler for when the worker is terminated.
*/
worker.terminationHandler = undefined;
/**
* Cleanup and exit the worker.
* @param {Number} code
* @returns
*/
worker.cleanupAndExit = function(code) {
var _exit = function() {
worker.exit(code);
}
if(!worker.terminationHandler) {
return _exit();
}
var result = worker.terminationHandler(code);
if (isPromise(result)) {
result.then(_exit, _exit);
} else {
_exit();
}
}
var currentRequestId = null;

@@ -119,3 +151,3 @@

if (request === TERMINATE_METHOD_ID) {
return worker.exit(0);
return worker.cleanupAndExit(0);
}

@@ -135,7 +167,15 @@ try {

.then(function (result) {
worker.send({
id: request.id,
result: result,
error: null
});
if (result instanceof Transfer) {
worker.send({
id: request.id,
result: result.message,
error: null
}, result.transfer);
} else {
worker.send({
id: request.id,
result: result,
error: null
});
}
currentRequestId = null;

@@ -154,7 +194,15 @@ })

// immediate result
worker.send({
id: request.id,
result: result,
error: null
});
if (result instanceof Transfer) {
worker.send({
id: request.id,
result: result.message,
error: null
}, result.transfer);
} else {
worker.send({
id: request.id,
result: result,
error: null
});
}

@@ -179,5 +227,6 @@ currentRequestId = null;

* Register methods to the worker
* @param {Object} methods
* @param {Object} [methods]
* @param {WorkerRegisterOptions} [options]
*/
worker.register = function (methods) {
worker.register = function (methods, options) {

@@ -192,4 +241,7 @@ if (methods) {

if (options) {
worker.terminationHandler = options.onTerminate;
}
worker.send('ready');
};

@@ -199,2 +251,11 @@

if (currentRequestId) {
if (payload instanceof Transfer) {
worker.send({
id: currentRequestId,
isEvent: true,
payload: payload.message
}, payload.transfer);
return;
}
worker.send({

@@ -201,0 +262,0 @@ id: currentRequestId,

@@ -13,8 +13,2 @@ 'use strict';

/**
* If sending `TERMINATE_METHOD_ID` does not cause the child process to exit in this many milliseconds,
* force-kill the child process.
*/
var CHILD_PROCESS_EXIT_TIMEOUT = 1000;
function ensureWorkerThreads() {

@@ -107,4 +101,4 @@ var WorkerThreads = tryRequireWorkerThreads()

};
worker.send = function (message) {
this.postMessage(message);
worker.send = function (message, transfer) {
this.postMessage(message, transfer);
};

@@ -121,5 +115,4 @@ return worker;

worker.isWorkerThread = true;
// make the worker mimic a child_process
worker.send = function(message) {
this.postMessage(message);
worker.send = function(message, transfer) {
this.postMessage(message, transfer);
};

@@ -147,2 +140,8 @@

// ignore transfer argument since it is not supported by process
var send = worker.send;
worker.send = function (message) {
return send.call(worker, message);
};
worker.isChildProcess = true;

@@ -218,2 +217,3 @@ return worker;

this.workerThreadOpts = options.workerThreadOpts
this.workerTerminateTimeout = options.workerTerminateTimeout;

@@ -281,3 +281,3 @@ // The ready message is only sent if the worker.add method is called (And the default script is not used)

for(const request of me.requestQueue.splice(0)) {
me.worker.send(request);
me.worker.send(request.message, request.transfer);
}

@@ -309,2 +309,3 @@ }

this.terminated = false;
this.cleaning = false;
this.terminationHandler = null;

@@ -347,5 +348,8 @@ this.lastId = 0;

var request = {
id: id,
method: method,
params: params
message: {
id: id,
method: method,
params: params
},
transfer: options && options.transfer
};

@@ -357,3 +361,3 @@

// send the request to the worker
this.worker.send(request);
this.worker.send(request.message, request.transfer);
} else {

@@ -385,7 +389,7 @@ this.requestQueue.push(request);

/**
* Test whether the worker is working or not
* Test whether the worker is processing any tasks or cleaning up before termination.
* @return {boolean} Returns true if the worker is busy
*/
WorkerHandler.prototype.busy = function () {
return Object.keys(this.processing).length > 0;
return this.cleaning || Object.keys(this.processing).length > 0;
};

@@ -420,2 +424,3 @@

me.terminated = true;
me.cleaning = false;
if (me.worker != null && me.worker.removeAllListeners) {

@@ -441,28 +446,26 @@ // removeAllListeners is only available for child_process

if (this.worker.isChildProcess) {
var cleanExitTimeout = setTimeout(function() {
if (me.worker) {
me.worker.kill();
}
}, CHILD_PROCESS_EXIT_TIMEOUT);
// child process and worker threads
var cleanExitTimeout = setTimeout(function() {
if (me.worker) {
me.worker.kill();
}
}, this.workerTerminateTimeout);
this.worker.once('exit', function() {
clearTimeout(cleanExitTimeout);
if (me.worker) {
me.worker.killed = true;
}
cleanup();
});
this.worker.once('exit', function() {
clearTimeout(cleanExitTimeout);
if (me.worker) {
me.worker.killed = true;
}
cleanup();
});
if (this.worker.ready) {
this.worker.send(TERMINATE_METHOD_ID);
} else {
this.requestQueue.push(TERMINATE_METHOD_ID)
}
if (this.worker.ready) {
this.worker.send(TERMINATE_METHOD_ID);
} else {
// worker_thread
this.worker.kill();
this.worker.killed = true;
cleanup();
this.requestQueue.push(TERMINATE_METHOD_ID);
}
// mark that the worker is cleaning up resources
// to prevent new tasks from being executed
this.cleaning = true;
return;

@@ -469,0 +472,0 @@ }

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc