poolifier 3.0.8 → 3.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{existsSync as e}from"node:fs";import*as t from"node:os";import{cpus as s}from"node:os";import{webcrypto as r,randomUUID as i}from"node:crypto";import o,{Worker as n}from"node:cluster";import{Worker as a,MessageChannel as u,isMainThread as h,SHARE_ENV as k,parentPort as d,threadId as c}from"node:worker_threads";import{performance as l}from"node:perf_hooks";import{EventEmitter as g,EventEmitterAsyncResource as m}from"node:events";import{AsyncResource as w}from"node:async_hooks";const p=Object.freeze({fixed:"fixed",dynamic:"dynamic"}),y=Object.freeze({ready:"ready",busy:"busy",full:"full",destroy:"destroy",error:"error",taskError:"taskError",backPressure:"backPressure"}),T=Object.freeze({thread:"thread",cluster:"cluster"}),f="default",N=Object.freeze((()=>{})),W={retries:6,runTime:{median:!1},waitTime:{median:!1},elu:{median:!1}},S={aggregate:!1,average:!1,median:!1},x=()=>{let e=1;try{e=t.availableParallelism()}catch{const s=t.cpus();Array.isArray(s)&&s.length>0&&(e=s.length)}return e},v=e=>e instanceof a?T.thread:e instanceof n?T.cluster:void 0,E=e=>e instanceof a?e.threadId:e instanceof n?e.id:void 0,I=e=>Array.isArray(e)&&0===e.length?0:Array.isArray(e)&&1===e.length?e[0]:e.reduce(((e,t)=>e+t),0)/e.length,F=e=>{if(Array.isArray(e)&&0===e.length)return 0;if(Array.isArray(e)&&1===e.length)return e[0];const t=e.slice().sort(((e,t)=>e-t));return(t[t.length-1>>1]+t[t.length>>1])/2},b=(e,t=2)=>{const s=Math.pow(10,t);return Math.round(e*s*(1+Number.EPSILON))/s},R=e=>"object"==typeof e&&null!==e&&e?.constructor===Object&&"[object Object]"===Object.prototype.toString.call(e),C=(e,t)=>t===e,O=e=>"function"==typeof e&&"AsyncFunction"===e.constructor.name,z=()=>r.getRandomValues(new Uint32Array(1))[0]/4294967296,M=(...e)=>e.reduce(((e,t)=>e<t?e:t),1/0),K=(...e)=>e.reduce(((e,t)=>e>t?e:t),-1/0),q=Object.freeze({ROUND_ROBIN:"ROUND_ROBIN",LEAST_USED:"LEAST_USED",LEAST_BUSY:"LEAST_BUSY",LEAST_ELU:"LEAST_ELU",FAIR_SHARE:"FAIR_SHARE",WEIGHTED_ROUND_ROBIN:"WEIGHTED_ROUND_ROBIN",INTERLEAVED_WEIGHTED_ROUND_ROBIN:"INTERLEAVED_WEIGHTED_ROUND_ROBIN"}),U=Object.freeze({runTime:"runTime",waitTime:"waitTime",elu:"elu"}),P=(e,t)=>{if(null==t)throw new TypeError("Cannot instantiate a dynamic pool without specifying the maximum pool size");if(!Number.isSafeInteger(t))throw new TypeError("Cannot instantiate a dynamic pool with a non safe integer maximum pool size");if(e>t)throw new RangeError("Cannot instantiate a dynamic pool with a maximum pool size inferior to the minimum pool size");if(0===t)throw new RangeError("Cannot instantiate a dynamic pool with a maximum pool size equal to zero");if(e===t)throw new RangeError("Cannot instantiate a dynamic pool with a minimum pool size equal to the maximum pool size. Use a fixed pool instead")},Q=e=>{if(null!=e&&!Object.values(q).includes(e))throw new Error(`Invalid worker choice strategy '${e}'`)},A=e=>{if(null!=e&&!R(e))throw new TypeError("Invalid tasks queue options: must be a plain object");if(null!=e?.concurrency&&!Number.isSafeInteger(e.concurrency))throw new TypeError("Invalid worker node tasks concurrency: must be an integer");if(null!=e?.concurrency&&e.concurrency<=0)throw new RangeError(`Invalid worker node tasks concurrency: ${e.concurrency} is a negative integer or zero`);if(null!=e?.size&&!Number.isSafeInteger(e.size))throw new TypeError("Invalid worker node tasks queue size: must be an integer");if(null!=e?.size&&e.size<=0)throw new RangeError(`Invalid worker node tasks queue size: ${e.size} is a negative integer or zero`)},B=(e,t,s)=>{t.aggregate&&(e.aggregate=(e.aggregate??0)+s,e.minimum=M(s,e.minimum??1/0),e.maximum=K(s,e.maximum??-1/0),(t.average||t.median)&&null!=s&&(e.history.push(s),t.average?e.average=I(e.history):null!=e.average&&delete e.average,t.median?e.median=F(e.history):null!=e.median&&delete e.median))},D=Object.freeze({SOFT:"SOFT",HARD:"HARD"});class L{pool;opts;nextWorkerNodeKey=0;previousWorkerNodeKey=0;strategyPolicy={dynamicWorkerUsage:!1,dynamicWorkerReady:!0};taskStatisticsRequirements={runTime:S,waitTime:S,elu:S};constructor(e,t=W){this.pool=e,this.opts=t,this.opts={...W,...t},this.choose=this.choose.bind(this)}setTaskStatisticsRequirements(e){this.toggleMedianMeasurementStatisticsRequirements(this.taskStatisticsRequirements.runTime,e.runTime?.median),this.toggleMedianMeasurementStatisticsRequirements(this.taskStatisticsRequirements.waitTime,e.waitTime?.median),this.toggleMedianMeasurementStatisticsRequirements(this.taskStatisticsRequirements.elu,e.elu?.median)}toggleMedianMeasurementStatisticsRequirements(e,t){e.average&&t&&(e.average=!1,e.median=t),e.median&&!t&&(e.average=!0,e.median=t)}resetWorkerNodeKeyProperties(){this.nextWorkerNodeKey=0,this.previousWorkerNodeKey=0}setOptions(e){this.opts={...W,...e},this.setTaskStatisticsRequirements(this.opts)}isWorkerNodeReady(e){return this.pool.workerNodes[e]?.info?.ready??!1}checkNextWorkerNodeReadiness(){this.isWorkerNodeReady(this.nextWorkerNodeKey)||delete this.nextWorkerNodeKey}getWorkerNodeTaskRunTime(e){return this.taskStatisticsRequirements.runTime.median?this.pool.workerNodes[e].usage.runTime.median??0:this.pool.workerNodes[e].usage.runTime.average??0}getWorkerNodeTaskWaitTime(e){return this.taskStatisticsRequirements.waitTime.median?this.pool.workerNodes[e].usage.waitTime.median??0:this.pool.workerNodes[e].usage.waitTime.average??0}getWorkerNodeTaskElu(e){return this.taskStatisticsRequirements.elu.median?this.pool.workerNodes[e].usage.elu.active.median??0:this.pool.workerNodes[e].usage.elu.active.average??0}setPreviousWorkerNodeKey(e){this.previousWorkerNodeKey=e??this.previousWorkerNodeKey}computeDefaultWorkerWeight(){let e=0;for(const t of s()){const s=t.speed.toString().length-1;e+=1/(t.speed/Math.pow(10,s))*Math.pow(10,s)}return Math.round(e/s().length)}}class _ extends L{taskStatisticsRequirements={runTime:{aggregate:!0,average:!0,median:!1},waitTime:S,elu:{aggregate:!0,average:!0,median:!1}};constructor(e,t=W){super(e,t),this.setTaskStatisticsRequirements(this.opts)}reset(){for(const e of this.pool.workerNodes)delete e.strategyData?.virtualTaskEndTimestamp;return!0}update(e){return this.pool.workerNodes[e].strategyData={virtualTaskEndTimestamp:this.computeWorkerNodeVirtualTaskEndTimestamp(e)},!0}choose(){return this.setPreviousWorkerNodeKey(this.nextWorkerNodeKey),this.nextWorkerNodeKey=this.fairShareNextWorkerNodeKey(),this.nextWorkerNodeKey}remove(){return!0}fairShareNextWorkerNodeKey(){return this.pool.workerNodes.reduce(((e,t,s,r)=>(null==t.strategyData?.virtualTaskEndTimestamp&&(t.strategyData={virtualTaskEndTimestamp:this.computeWorkerNodeVirtualTaskEndTimestamp(s)}),this.isWorkerNodeReady(s)&&t.strategyData.virtualTaskEndTimestamp<r[e].strategyData.virtualTaskEndTimestamp?s:e)),0)}computeWorkerNodeVirtualTaskEndTimestamp(e){return this.getWorkerNodeVirtualTaskEndTimestamp(e,this.getWorkerNodeVirtualTaskStartTimestamp(e))}getWorkerNodeVirtualTaskEndTimestamp(e,t){return t+(this.opts.measurement===U.elu?this.getWorkerNodeTaskElu(e):this.getWorkerNodeTaskRunTime(e))}getWorkerNodeVirtualTaskStartTimestamp(e){const t=this.pool.workerNodes[e]?.strategyData?.virtualTaskEndTimestamp,s=performance.now();return s<(t??-1/0)?t:s}}class H extends L{taskStatisticsRequirements={runTime:{aggregate:!0,average:!0,median:!1},waitTime:S,elu:S};roundId=0;defaultWorkerWeight;roundWeights;workerNodeId=0;workerNodeVirtualTaskRunTime=0;constructor(e,t=W){super(e,t),this.setTaskStatisticsRequirements(this.opts),this.defaultWorkerWeight=this.computeDefaultWorkerWeight(),this.roundWeights=this.getRoundWeights()}reset(){return this.resetWorkerNodeKeyProperties(),this.roundId=0,this.workerNodeId=0,this.workerNodeVirtualTaskRunTime=0,!0}update(){return!0}choose(){for(let e=this.roundId;e<this.roundWeights.length;e++){this.roundId=e;for(let t=this.workerNodeId;t<this.pool.workerNodes.length;t++){this.workerNodeId=t,this.workerNodeId!==this.nextWorkerNodeKey&&0!==this.workerNodeVirtualTaskRunTime&&(this.workerNodeVirtualTaskRunTime=0);const s=this.opts.weights?.[t]??this.defaultWorkerWeight;if(this.isWorkerNodeReady(t)&&s>=this.roundWeights[e]&&this.workerNodeVirtualTaskRunTime<s)return this.workerNodeVirtualTaskRunTime=this.workerNodeVirtualTaskRunTime+this.getWorkerNodeTaskRunTime(t),this.setPreviousWorkerNodeKey(this.nextWorkerNodeKey),this.nextWorkerNodeKey=t,this.nextWorkerNodeKey}}this.interleavedWeightedRoundRobinNextWorkerNodeId()}interleavedWeightedRoundRobinNextWorkerNodeId(){this.roundId===this.roundWeights.length-1&&this.workerNodeId===this.pool.workerNodes.length-1?(this.roundId=0,this.workerNodeId=0):this.workerNodeId===this.pool.workerNodes.length-1?(this.roundId=this.roundId+1,this.workerNodeId=0):this.workerNodeId=this.workerNodeId+1}remove(e){return 0===this.pool.workerNodes.length&&this.reset(),this.workerNodeId===e&&this.workerNodeId>this.pool.workerNodes.length-1&&(this.workerNodeId=this.pool.workerNodes.length-1),this.previousWorkerNodeKey===e&&this.previousWorkerNodeKey>this.pool.workerNodes.length-1&&(this.previousWorkerNodeKey=this.pool.workerNodes.length-1),!0}setOptions(e){super.setOptions(e),this.roundWeights=this.getRoundWeights()}getRoundWeights(){return null==this.opts.weights?[this.defaultWorkerWeight]:[...new Set(Object.values(this.opts.weights).slice().sort(((e,t)=>e-t)))]}}class j extends L{taskStatisticsRequirements={runTime:{aggregate:!0,average:!1,median:!1},waitTime:{aggregate:!0,average:!1,median:!1},elu:S};constructor(e,t=W){super(e,t),this.setTaskStatisticsRequirements(this.opts)}reset(){return!0}update(){return!0}choose(){return this.setPreviousWorkerNodeKey(this.nextWorkerNodeKey),this.nextWorkerNodeKey=this.leastBusyNextWorkerNodeKey(),this.nextWorkerNodeKey}remove(){return!0}leastBusyNextWorkerNodeKey(){return this.pool.workerNodes.reduce(((e,t,s,r)=>this.isWorkerNodeReady(s)&&(t.usage.runTime.aggregate??0)+(t.usage.waitTime.aggregate??0)<(r[e].usage.runTime.aggregate??0)+(r[e].usage.waitTime.aggregate??0)?s:e),0)}}class V extends L{constructor(e,t=W){super(e,t),this.setTaskStatisticsRequirements(this.opts)}reset(){return!0}update(){return!0}choose(){return this.setPreviousWorkerNodeKey(this.nextWorkerNodeKey),this.nextWorkerNodeKey=this.leastUsedNextWorkerNodeKey(),this.nextWorkerNodeKey}remove(){return!0}leastUsedNextWorkerNodeKey(){return this.pool.workerNodes.reduce(((e,t,s,r)=>this.isWorkerNodeReady(s)&&t.usage.tasks.executed+t.usage.tasks.executing+t.usage.tasks.queued<r[e].usage.tasks.executed+r[e].usage.tasks.executing+r[e].usage.tasks.queued?s:e),0)}}class $ extends L{taskStatisticsRequirements={runTime:S,waitTime:S,elu:{aggregate:!0,average:!1,median:!1}};constructor(e,t=W){super(e,t),this.setTaskStatisticsRequirements(this.opts)}reset(){return!0}update(){return!0}choose(){return this.setPreviousWorkerNodeKey(this.nextWorkerNodeKey),this.nextWorkerNodeKey=this.leastEluNextWorkerNodeKey(),this.nextWorkerNodeKey}remove(){return!0}leastEluNextWorkerNodeKey(){return this.pool.workerNodes.reduce(((e,t,s,r)=>this.isWorkerNodeReady(s)&&(t.usage.elu.active.aggregate??0)<(r[e].usage.elu.active.aggregate??0)?s:e),0)}}class G extends L{constructor(e,t=W){super(e,t),this.setTaskStatisticsRequirements(this.opts)}reset(){return this.resetWorkerNodeKeyProperties(),!0}update(){return!0}choose(){const e=this.nextWorkerNodeKey;return this.setPreviousWorkerNodeKey(e),this.roundRobinNextWorkerNodeKey(),this.checkNextWorkerNodeReadiness(),e}remove(e){return 0===this.pool.workerNodes.length&&this.reset(),this.nextWorkerNodeKey===e&&this.nextWorkerNodeKey>this.pool.workerNodes.length-1&&(this.nextWorkerNodeKey=this.pool.workerNodes.length-1),this.previousWorkerNodeKey===e&&this.previousWorkerNodeKey>this.pool.workerNodes.length-1&&(this.previousWorkerNodeKey=this.pool.workerNodes.length-1),!0}roundRobinNextWorkerNodeKey(){return this.nextWorkerNodeKey=this.nextWorkerNodeKey===this.pool.workerNodes.length-1?0:(this.nextWorkerNodeKey??this.previousWorkerNodeKey)+1,this.nextWorkerNodeKey}}class Y extends L{taskStatisticsRequirements={runTime:{aggregate:!0,average:!0,median:!1},waitTime:S,elu:S};defaultWorkerWeight;workerNodeVirtualTaskRunTime=0;constructor(e,t=W){super(e,t),this.setTaskStatisticsRequirements(this.opts),this.defaultWorkerWeight=this.computeDefaultWorkerWeight()}reset(){return this.resetWorkerNodeKeyProperties(),this.workerNodeVirtualTaskRunTime=0,!0}update(){return!0}choose(){return this.setPreviousWorkerNodeKey(this.nextWorkerNodeKey),this.weightedRoundRobinNextWorkerNodeKey(),this.checkNextWorkerNodeReadiness(),this.nextWorkerNodeKey}remove(e){return 0===this.pool.workerNodes.length&&this.reset(),this.nextWorkerNodeKey===e&&(this.workerNodeVirtualTaskRunTime=0,this.nextWorkerNodeKey>this.pool.workerNodes.length-1&&(this.nextWorkerNodeKey=this.pool.workerNodes.length-1)),this.previousWorkerNodeKey===e&&this.previousWorkerNodeKey>this.pool.workerNodes.length-1&&(this.previousWorkerNodeKey=this.pool.workerNodes.length-1),!0}weightedRoundRobinNextWorkerNodeKey(){const e=this.opts.weights?.[this.nextWorkerNodeKey??this.previousWorkerNodeKey]??this.defaultWorkerWeight;return this.workerNodeVirtualTaskRunTime<e?this.workerNodeVirtualTaskRunTime=this.workerNodeVirtualTaskRunTime+this.getWorkerNodeTaskRunTime(this.nextWorkerNodeKey??this.previousWorkerNodeKey):(this.nextWorkerNodeKey=this.nextWorkerNodeKey===this.pool.workerNodes.length-1?0:(this.nextWorkerNodeKey??this.previousWorkerNodeKey)+1,this.workerNodeVirtualTaskRunTime=0),this.nextWorkerNodeKey}}class J{workerChoiceStrategy;opts;workerChoiceStrategies;retriesCount=0;constructor(e,t=q.ROUND_ROBIN,s=W){this.workerChoiceStrategy=t,this.opts=s,this.opts={...W,...s},this.execute=this.execute.bind(this),this.workerChoiceStrategies=new Map([[q.ROUND_ROBIN,new(G.bind(this))(e,s)],[q.LEAST_USED,new(V.bind(this))(e,s)],[q.LEAST_BUSY,new(j.bind(this))(e,s)],[q.LEAST_ELU,new($.bind(this))(e,s)],[q.FAIR_SHARE,new(_.bind(this))(e,s)],[q.WEIGHTED_ROUND_ROBIN,new(Y.bind(this))(e,s)],[q.INTERLEAVED_WEIGHTED_ROUND_ROBIN,new(H.bind(this))(e,s)]])}getStrategyPolicy(){return this.workerChoiceStrategies.get(this.workerChoiceStrategy).strategyPolicy}getTaskStatisticsRequirements(){return this.workerChoiceStrategies.get(this.workerChoiceStrategy).taskStatisticsRequirements}setWorkerChoiceStrategy(e){this.workerChoiceStrategy!==e&&(this.workerChoiceStrategy=e),this.workerChoiceStrategies.get(this.workerChoiceStrategy)?.reset()}update(e){return this.workerChoiceStrategies.get(this.workerChoiceStrategy).update(e)}execute(){const e=this.workerChoiceStrategies.get(this.workerChoiceStrategy).choose();if(null==e&&this.retriesCount<this.opts.retries)return this.retriesCount++,this.execute();if(null==e)throw new Error(`Worker node key chosen is null or undefined after ${this.retriesCount} retries`);return this.retriesCount=0,e}remove(e){return this.workerChoiceStrategies.get(this.workerChoiceStrategy).remove(e)}setOptions(e){this.opts={...W,...e};for(const t of this.workerChoiceStrategies.values())t.setOptions(e)}}class X extends Array{size;constructor(e=1024,...t){super(),this.checkSize(e),this.size=e,arguments.length>1&&this.push(...t)}push(...e){const t=super.push(...e);return t>this.size&&super.splice(0,t-this.size),this.length}unshift(...e){return super.unshift(...e)>this.size&&super.splice(this.size,e.length),this.length}concat(...e){const t=super.concat(e);return t.size=this.size,t.length>t.size&&t.splice(0,t.length-t.size),t}splice(e,t,...s){let r=[];if(arguments.length>=3&&null!=t){if(r=super.splice(e,t,...s),this.length>this.size){const e=super.splice(0,this.length-this.size);r=new X(r.length+e.length,...r,...e)}}else r=2===arguments.length?super.splice(e,t):super.splice(e);return r}resize(e){if(this.checkSize(e),0===e)this.length=0;else if(e<this.size)for(let t=e;t<this.size;t++)super.pop();this.size=e}empty(){return 0===this.length}full(){return this.length===this.size}checkSize(e){if(!Number.isSafeInteger(e))throw new TypeError(`Invalid circular array size: ${e} is not a safe integer`);if(e<0)throw new RangeError(`Invalid circular array size: ${e} < 0`)}}class Z{data;next;prev;constructor(e){this.data=e}}class ee{head;tail;size;maxSize;constructor(){this.clear()}push(e){const t=new Z(e);return null==this.tail?this.head=this.tail=t:(t.prev=this.tail,this.tail=this.tail.next=t),this.incrementSize()}unshift(e){const t=new Z(e);return null==this.head?this.head=this.tail=t:(t.next=this.head,this.head=this.head.prev=t),this.incrementSize()}pop(){if(null==this.head)return;const e=this.tail;return this.tail=this.tail.prev,null==this.tail?delete this.head:delete this.tail.next,--this.size,e?.data}shift(){if(null==this.head)return;const e=this.head;return this.head=this.head.next,null==this.head?delete this.tail:delete this.head.prev,--this.size,e?.data}peekFirst(){return this.head?.data}peekLast(){return this.tail?.data}clear(){delete this.head,delete this.tail,this.size=0,this.maxSize=0}[Symbol.iterator](){let e=this.head;return{next:()=>{if(null==e)return{value:void 0,done:!0};const t={value:e.data,done:!1};return e=e.next,t}}}backward(){return{[Symbol.iterator]:()=>{let e=this.tail;return{next:()=>{if(null==e)return{value:void 0,done:!0};const t={value:e.data,done:!1};return e=e.prev,t}}}}}incrementSize(){return++this.size,this.size>this.maxSize&&(this.maxSize=this.size),this.size}}class te extends g{worker;info;usage;strategyData;messageChannel;tasksQueueBackPressureSize;tasksQueue;onBackPressureStarted;taskFunctionsUsage;constructor(e,t){super(),((e,t)=>{if(null==e)throw new TypeError("Cannot construct a worker node without a worker");if(null==t)throw new TypeError("Cannot construct a worker node without a tasks queue back pressure size");if(!Number.isSafeInteger(t))throw new TypeError("Cannot construct a worker node with a tasks queue back pressure size that is not an integer");if(t<=0)throw new RangeError("Cannot construct a worker node with a tasks queue back pressure size that is not a positive integer")})(e,t),this.worker=e,this.info=this.initWorkerInfo(e),this.usage=this.initWorkerUsage(),this.info.type===T.thread&&(this.messageChannel=new u),this.tasksQueueBackPressureSize=t,this.tasksQueue=new ee,this.onBackPressureStarted=!1,this.taskFunctionsUsage=new Map}tasksQueueSize(){return this.tasksQueue.size}enqueueTask(e){const t=this.tasksQueue.push(e);return this.hasBackPressure()&&!this.onBackPressureStarted&&(this.onBackPressureStarted=!0,this.emit("backPressure",{workerId:this.info.id}),this.onBackPressureStarted=!1),t}unshiftTask(e){const t=this.tasksQueue.unshift(e);return this.hasBackPressure()&&!this.onBackPressureStarted&&(this.onBackPressureStarted=!0,this.emit("backPressure",{workerId:this.info.id}),this.onBackPressureStarted=!1),t}dequeueTask(){return this.tasksQueue.shift()}popTask(){return this.tasksQueue.pop()}clearTasksQueue(){this.tasksQueue.clear()}hasBackPressure(){return this.tasksQueue.size>=this.tasksQueueBackPressureSize}resetUsage(){this.usage=this.initWorkerUsage(),this.taskFunctionsUsage.clear()}closeChannel(){null!=this.messageChannel&&(this.messageChannel.port1.unref(),this.messageChannel.port2.unref(),this.messageChannel.port1.close(),this.messageChannel.port2.close(),delete this.messageChannel)}getTaskFunctionWorkerUsage(e){if(!Array.isArray(this.info.taskFunctionNames))throw new Error(`Cannot get task function worker usage for task function name '${e}' when task function names list is not yet defined`);if(Array.isArray(this.info.taskFunctionNames)&&this.info.taskFunctionNames.length<3)throw new Error(`Cannot get task function worker usage for task function name '${e}' when task function names list has less than 3 elements`);return e===f&&(e=this.info.taskFunctionNames[1]),this.taskFunctionsUsage.has(e)||this.taskFunctionsUsage.set(e,this.initTaskFunctionWorkerUsage(e)),this.taskFunctionsUsage.get(e)}deleteTaskFunctionWorkerUsage(e){return this.taskFunctionsUsage.delete(e)}initWorkerInfo(e){return{id:E(e),type:v(e),dynamic:!1,ready:!1}}initWorkerUsage(){const e=()=>this.tasksQueue.size,t=()=>this.tasksQueue.maxSize;return{tasks:{executed:0,executing:0,get queued(){return e()},get maxQueued(){return t()},sequentiallyStolen:0,stolen:0,failed:0},runTime:{history:new X},waitTime:{history:new X},elu:{idle:{history:new X},active:{history:new X}}}}initTaskFunctionWorkerUsage(e){const t=()=>{let t=0;for(const s of this.tasksQueue)(s.name===f&&e===this.info.taskFunctionNames[1]||s.name!==f&&e===s.name)&&++t;return t};return{tasks:{executed:0,executing:0,get queued(){return t()},sequentiallyStolen:0,stolen:0,failed:0},runTime:{history:new X},waitTime:{history:new X},elu:{idle:{history:new X},active:{history:new X}}}}}class se{numberOfWorkers;filePath;opts;workerNodes=[];emitter;max;promiseResponseMap=new Map;workerChoiceStrategyContext;taskFunctions;started;starting;destroying;readyEventEmitted;startTimestamp;constructor(t,s,r){if(this.numberOfWorkers=t,this.filePath=s,this.opts=r,!this.isMain())throw new Error("Cannot start a pool from a worker with the same type as the pool");(t=>{if(!e(t))throw new Error(`Cannot find the worker file '${t}'`)})(this.filePath),this.checkNumberOfWorkers(this.numberOfWorkers),this.checkPoolOptions(this.opts),this.chooseWorkerNode=this.chooseWorkerNode.bind(this),this.executeTask=this.executeTask.bind(this),this.enqueueTask=this.enqueueTask.bind(this),!0===this.opts.enableEvents&&this.initializeEventEmitter(),this.workerChoiceStrategyContext=new J(this,this.opts.workerChoiceStrategy,this.opts.workerChoiceStrategyOptions),this.setupHook(),this.taskFunctions=new Map,this.started=!1,this.starting=!1,this.destroying=!1,this.readyEventEmitted=!1,!0===this.opts.startWorkers&&this.start(),this.startTimestamp=l.now()}checkNumberOfWorkers(e){if(null==e)throw new Error("Cannot instantiate a pool without specifying the number of workers");if(!Number.isSafeInteger(e))throw new TypeError("Cannot instantiate a pool with a non safe integer number of workers");if(e<0)throw new RangeError("Cannot instantiate a pool with a negative number of workers");if(this.type===p.fixed&&0===e)throw new RangeError("Cannot instantiate a fixed pool with zero worker")}checkPoolOptions(e){if(!R(e))throw new TypeError("Invalid pool options: must be a plain object");this.opts.startWorkers=e.startWorkers??!0,Q(e.workerChoiceStrategy),this.opts.workerChoiceStrategy=e.workerChoiceStrategy??q.ROUND_ROBIN,this.checkValidWorkerChoiceStrategyOptions(e.workerChoiceStrategyOptions),this.opts.workerChoiceStrategyOptions={...W,...e.workerChoiceStrategyOptions},this.opts.restartWorkerOnError=e.restartWorkerOnError??!0,this.opts.enableEvents=e.enableEvents??!0,this.opts.enableTasksQueue=e.enableTasksQueue??!1,this.opts.enableTasksQueue&&(A(e.tasksQueueOptions),this.opts.tasksQueueOptions=this.buildTasksQueueOptions(e.tasksQueueOptions))}checkValidWorkerChoiceStrategyOptions(e){if(null!=e&&!R(e))throw new TypeError("Invalid worker choice strategy options: must be a plain object");if(null!=e?.retries&&!Number.isSafeInteger(e.retries))throw new TypeError("Invalid worker choice strategy options: retries must be an integer");if(null!=e?.retries&&e.retries<0)throw new RangeError(`Invalid worker choice strategy options: retries '${e.retries}' must be greater or equal than zero`);if(null!=e?.weights&&Object.keys(e.weights).length!==this.maxSize)throw new Error("Invalid worker choice strategy options: must have a weight for each worker node");if(null!=e?.measurement&&!Object.values(U).includes(e.measurement))throw new Error(`Invalid worker choice strategy options: invalid measurement '${e.measurement}'`)}initializeEventEmitter(){this.emitter=new m({name:`poolifier:${this.type}-${this.worker}-pool`})}get info(){return{version:"3.0.8",type:this.type,worker:this.worker,started:this.started,ready:this.ready,strategy:this.opts.workerChoiceStrategy,minSize:this.minSize,maxSize:this.maxSize,...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.aggregate&&this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime.aggregate&&{utilization:b(this.utilization)},workerNodes:this.workerNodes.length,idleWorkerNodes:this.workerNodes.reduce(((e,t)=>0===t.usage.tasks.executing?e+1:e),0),busyWorkerNodes:this.workerNodes.reduce(((e,t)=>t.usage.tasks.executing>0?e+1:e),0),executedTasks:this.workerNodes.reduce(((e,t)=>e+t.usage.tasks.executed),0),executingTasks:this.workerNodes.reduce(((e,t)=>e+t.usage.tasks.executing),0),...!0===this.opts.enableTasksQueue&&{queuedTasks:this.workerNodes.reduce(((e,t)=>e+t.usage.tasks.queued),0)},...!0===this.opts.enableTasksQueue&&{maxQueuedTasks:this.workerNodes.reduce(((e,t)=>e+(t.usage.tasks?.maxQueued??0)),0)},...!0===this.opts.enableTasksQueue&&{backPressure:this.hasBackPressure()},...!0===this.opts.enableTasksQueue&&{stolenTasks:this.workerNodes.reduce(((e,t)=>e+t.usage.tasks.stolen),0)},failedTasks:this.workerNodes.reduce(((e,t)=>e+t.usage.tasks.failed),0),...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.aggregate&&{runTime:{minimum:b(M(...this.workerNodes.map((e=>e.usage.runTime?.minimum??1/0)))),maximum:b(K(...this.workerNodes.map((e=>e.usage.runTime?.maximum??-1/0)))),...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.average&&{average:b(I(this.workerNodes.reduce(((e,t)=>e.concat(t.usage.runTime.history)),[])))},...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.median&&{median:b(F(this.workerNodes.reduce(((e,t)=>e.concat(t.usage.runTime.history)),[])))}}},...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime.aggregate&&{waitTime:{minimum:b(M(...this.workerNodes.map((e=>e.usage.waitTime?.minimum??1/0)))),maximum:b(K(...this.workerNodes.map((e=>e.usage.waitTime?.maximum??-1/0)))),...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime.average&&{average:b(I(this.workerNodes.reduce(((e,t)=>e.concat(t.usage.waitTime.history)),[])))},...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime.median&&{median:b(F(this.workerNodes.reduce(((e,t)=>e.concat(t.usage.waitTime.history)),[])))}}}}}get ready(){return this.workerNodes.reduce(((e,t)=>!t.info.dynamic&&t.info.ready?e+1:e),0)>=this.minSize}get utilization(){const e=(l.now()-this.startTimestamp)*this.maxSize;return(this.workerNodes.reduce(((e,t)=>e+(t.usage.runTime?.aggregate??0)),0)+this.workerNodes.reduce(((e,t)=>e+(t.usage.waitTime?.aggregate??0)),0))/e}get minSize(){return this.numberOfWorkers}get maxSize(){return this.max??this.numberOfWorkers}checkMessageWorkerId(e){if(null==e.workerId)throw new Error("Worker message received without worker id");if(-1===this.getWorkerNodeKeyByWorkerId(e.workerId))throw new Error(`Worker message received from unknown worker '${e.workerId}'`)}getWorkerNodeKeyByWorker(e){return this.workerNodes.findIndex((t=>t.worker===e))}getWorkerNodeKeyByWorkerId(e){return this.workerNodes.findIndex((t=>t.info.id===e))}setWorkerChoiceStrategy(e,t){Q(e),this.opts.workerChoiceStrategy=e,this.workerChoiceStrategyContext.setWorkerChoiceStrategy(this.opts.workerChoiceStrategy),null!=t&&this.setWorkerChoiceStrategyOptions(t);for(const[e,t]of this.workerNodes.entries())t.resetUsage(),this.sendStatisticsMessageToWorker(e)}setWorkerChoiceStrategyOptions(e){this.checkValidWorkerChoiceStrategyOptions(e),this.opts.workerChoiceStrategyOptions={...W,...e},this.workerChoiceStrategyContext.setOptions(this.opts.workerChoiceStrategyOptions)}enableTasksQueue(e,t){!0!==this.opts.enableTasksQueue||e||(this.unsetTaskStealing(),this.unsetTasksStealingOnBackPressure(),this.flushTasksQueues()),this.opts.enableTasksQueue=e,this.setTasksQueueOptions(t)}setTasksQueueOptions(e){!0===this.opts.enableTasksQueue?(A(e),this.opts.tasksQueueOptions=this.buildTasksQueueOptions(e),this.setTasksQueueSize(this.opts.tasksQueueOptions.size),!0===this.opts.tasksQueueOptions.taskStealing?this.setTaskStealing():this.unsetTaskStealing(),!0===this.opts.tasksQueueOptions.tasksStealingOnBackPressure?this.setTasksStealingOnBackPressure():this.unsetTasksStealingOnBackPressure()):null!=this.opts.tasksQueueOptions&&delete this.opts.tasksQueueOptions}buildTasksQueueOptions(e){return{size:Math.pow(this.maxSize,2),concurrency:1,taskStealing:!0,tasksStealingOnBackPressure:!0,...e}}setTasksQueueSize(e){for(const t of this.workerNodes)t.tasksQueueBackPressureSize=e}setTaskStealing(){for(const[e]of this.workerNodes.entries())this.workerNodes[e].on("idleWorkerNode",this.handleIdleWorkerNodeEvent)}unsetTaskStealing(){for(const[e]of this.workerNodes.entries())this.workerNodes[e].off("idleWorkerNode",this.handleIdleWorkerNodeEvent)}setTasksStealingOnBackPressure(){for(const[e]of this.workerNodes.entries())this.workerNodes[e].on("backPressure",this.handleBackPressureEvent)}unsetTasksStealingOnBackPressure(){for(const[e]of this.workerNodes.entries())this.workerNodes[e].off("backPressure",this.handleBackPressureEvent)}get full(){return this.workerNodes.length>=this.maxSize}internalBusy(){return!0===this.opts.enableTasksQueue?-1===this.workerNodes.findIndex((e=>e.info.ready&&e.usage.tasks.executing<this.opts.tasksQueueOptions?.concurrency)):-1===this.workerNodes.findIndex((e=>e.info.ready&&0===e.usage.tasks.executing))}async sendTaskFunctionOperationToWorker(e,t){return await new Promise(((s,r)=>{const i=t=>{this.checkMessageWorkerId(t);const o=this.getWorkerInfo(e).id;null!=t.taskFunctionOperationStatus&&t.workerId===o&&(t.taskFunctionOperationStatus?s(!0):t.taskFunctionOperationStatus||r(new Error(`Task function operation '${t.taskFunctionOperation}' failed on worker ${t.workerId} with error: '${t.workerError?.message}'`)),this.deregisterWorkerMessageListener(this.getWorkerNodeKeyByWorkerId(t.workerId),i))};this.registerWorkerMessageListener(e,i),this.sendToWorker(e,t)}))}async sendTaskFunctionOperationToWorkers(e){return await new Promise(((t,s)=>{const r=new Array,i=e=>{if(this.checkMessageWorkerId(e),null!=e.taskFunctionOperationStatus&&(r.push(e),r.length===this.workerNodes.length)){if(r.every((e=>!0===e.taskFunctionOperationStatus)))t(!0);else if(r.some((e=>!1===e.taskFunctionOperationStatus))){const t=r.find((e=>!1===e.taskFunctionOperationStatus));s(new Error(`Task function operation '${e.taskFunctionOperation}' failed on worker ${t?.workerId} with error: '${t?.workerError?.message}'`))}this.deregisterWorkerMessageListener(this.getWorkerNodeKeyByWorkerId(e.workerId),i)}};for(const[t]of this.workerNodes.entries())this.registerWorkerMessageListener(t,i),this.sendToWorker(t,e)}))}hasTaskFunction(e){for(const t of this.workerNodes)if(Array.isArray(t.info.taskFunctionNames)&&t.info.taskFunctionNames.includes(e))return!0;return!1}async addTaskFunction(e,t){if("string"!=typeof e)throw new TypeError("name argument must be a string");if("string"==typeof e&&0===e.trim().length)throw new TypeError("name argument must not be an empty string");if("function"!=typeof t)throw new TypeError("fn argument must be a function");const s=await this.sendTaskFunctionOperationToWorkers({taskFunctionOperation:"add",taskFunctionName:e,taskFunction:t.toString()});return this.taskFunctions.set(e,t),s}async removeTaskFunction(e){if(!this.taskFunctions.has(e))throw new Error("Cannot remove a task function not handled on the pool side");const t=await this.sendTaskFunctionOperationToWorkers({taskFunctionOperation:"remove",taskFunctionName:e});return this.deleteTaskFunctionWorkerUsages(e),this.taskFunctions.delete(e),t}listTaskFunctionNames(){for(const e of this.workerNodes)if(Array.isArray(e.info.taskFunctionNames)&&e.info.taskFunctionNames.length>0)return e.info.taskFunctionNames;return[]}async setDefaultTaskFunction(e){return await this.sendTaskFunctionOperationToWorkers({taskFunctionOperation:"default",taskFunctionName:e})}deleteTaskFunctionWorkerUsages(e){for(const t of this.workerNodes)t.deleteTaskFunctionWorkerUsage(e)}shallExecuteTask(e){return 0===this.tasksQueueSize(e)&&this.workerNodes[e].usage.tasks.executing<this.opts.tasksQueueOptions?.concurrency}async execute(e,t,s){return await new Promise(((r,o)=>{if(!this.started)return void o(new Error("Cannot execute a task on not started pool"));if(this.destroying)return void o(new Error("Cannot execute a task on destroying pool"));if(null!=t&&"string"!=typeof t)return void o(new TypeError("name argument must be a string"));if(null!=t&&"string"==typeof t&&0===t.trim().length)return void o(new TypeError("name argument must not be an empty string"));if(null!=s&&!Array.isArray(s))return void o(new TypeError("transferList argument must be an array"));const n=l.now(),a=this.chooseWorkerNode(),u={name:t??f,data:e??{},transferList:s,timestamp:n,taskId:i()};this.promiseResponseMap.set(u.taskId,{resolve:r,reject:o,workerNodeKey:a}),!1===this.opts.enableTasksQueue||!0===this.opts.enableTasksQueue&&this.shallExecuteTask(a)?this.executeTask(a,u):this.enqueueTask(a,u)}))}start(){if(this.started)throw new Error("Cannot start an already started pool");if(this.starting)throw new Error("Cannot start an already starting pool");if(this.destroying)throw new Error("Cannot start a destroying pool");for(this.starting=!0;this.workerNodes.reduce(((e,t)=>t.info.dynamic?e:e+1),0)<this.numberOfWorkers;)this.createAndSetupWorkerNode();this.starting=!1,this.started=!0}async destroy(){if(!this.started)throw new Error("Cannot destroy an already destroyed pool");if(this.starting)throw new Error("Cannot destroy an starting pool");if(this.destroying)throw new Error("Cannot destroy an already destroying pool");this.destroying=!0,await Promise.all(this.workerNodes.map((async(e,t)=>{await this.destroyWorkerNode(t)}))),this.emitter?.emit(y.destroy,this.info),this.emitter?.emitDestroy(),this.readyEventEmitted=!1,this.destroying=!1,this.started=!1}async sendKillMessageToWorker(e){await new Promise(((t,s)=>{this.registerWorkerMessageListener(e,(e=>{this.checkMessageWorkerId(e),"success"===e.kill?t():"failure"===e.kill&&s(new Error(`Kill message handling failed on worker ${e.workerId}`))})),this.sendToWorker(e,{kill:!0})}))}setupHook(){}beforeTaskExecutionHook(e,t){if(null!=this.workerNodes[e]?.usage){const s=this.workerNodes[e].usage;++s.tasks.executing,this.updateWaitTimeWorkerUsage(s,t)}if(this.shallUpdateTaskFunctionWorkerUsage(e)&&null!=this.workerNodes[e].getTaskFunctionWorkerUsage(t.name)){const s=this.workerNodes[e].getTaskFunctionWorkerUsage(t.name);++s.tasks.executing,this.updateWaitTimeWorkerUsage(s,t)}}afterTaskExecutionHook(e,t){if(null!=this.workerNodes[e]?.usage){const s=this.workerNodes[e].usage;this.updateTaskStatisticsWorkerUsage(s,t),this.updateRunTimeWorkerUsage(s,t),this.updateEluWorkerUsage(s,t)}if(this.shallUpdateTaskFunctionWorkerUsage(e)&&null!=this.workerNodes[e].getTaskFunctionWorkerUsage(t.taskPerformance?.name)){const s=this.workerNodes[e].getTaskFunctionWorkerUsage(t.taskPerformance?.name);this.updateTaskStatisticsWorkerUsage(s,t),this.updateRunTimeWorkerUsage(s,t),this.updateEluWorkerUsage(s,t)}}shallUpdateTaskFunctionWorkerUsage(e){const t=this.getWorkerInfo(e);return null!=t&&Array.isArray(t.taskFunctionNames)&&t.taskFunctionNames.length>2}updateTaskStatisticsWorkerUsage(e,t){const s=e.tasks;null!=s.executing&&s.executing>0&&--s.executing,null==t.workerError?++s.executed:++s.failed}updateRunTimeWorkerUsage(e,t){null==t.workerError&&B(e.runTime,this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime,t.taskPerformance?.runTime??0)}updateWaitTimeWorkerUsage(e,t){const s=l.now(),r=s-(t.timestamp??s);B(e.waitTime,this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime,r)}updateEluWorkerUsage(e,t){if(null!=t.workerError)return;const s=this.workerChoiceStrategyContext.getTaskStatisticsRequirements().elu;B(e.elu.active,s,t.taskPerformance?.elu?.active??0),B(e.elu.idle,s,t.taskPerformance?.elu?.idle??0),s.aggregate&&null!=t.taskPerformance?.elu&&(null!=e.elu.utilization?e.elu.utilization=(e.elu.utilization+t.taskPerformance.elu.utilization)/2:e.elu.utilization=t.taskPerformance.elu.utilization)}chooseWorkerNode(){if(this.shallCreateDynamicWorker()){const e=this.createAndSetupDynamicWorkerNode();if(this.workerChoiceStrategyContext.getStrategyPolicy().dynamicWorkerUsage)return e}return this.workerChoiceStrategyContext.execute()}shallCreateDynamicWorker(){return this.type===p.dynamic&&!this.full&&this.internalBusy()}createAndSetupWorkerNode(){const e=this.createWorker();e.on("online",this.opts.onlineHandler??N),e.on("message",this.opts.messageHandler??N),e.on("error",this.opts.errorHandler??N),e.on("error",(t=>{const s=this.getWorkerNodeKeyByWorker(e);this.flagWorkerNodeAsNotReady(s);const r=this.getWorkerInfo(s);this.emitter?.emit(y.error,t),this.workerNodes[s].closeChannel(),!this.started||this.starting||this.destroying||!0!==this.opts.restartWorkerOnError||(r.dynamic?this.createAndSetupDynamicWorkerNode():this.createAndSetupWorkerNode()),this.started&&!0===this.opts.enableTasksQueue&&this.redistributeQueuedTasks(s)})),e.on("exit",this.opts.exitHandler??N),e.once("exit",(()=>{this.removeWorkerNode(e)}));const t=this.addWorkerNode(e);return this.afterWorkerNodeSetup(t),t}createAndSetupDynamicWorkerNode(){const e=this.createAndSetupWorkerNode();this.registerWorkerMessageListener(e,(e=>{this.checkMessageWorkerId(e);const t=this.getWorkerNodeKeyByWorkerId(e.workerId),s=this.workerNodes[t].usage;(C(D.HARD,e.kill)||C(D.SOFT,e.kill)&&(!1===this.opts.enableTasksQueue&&0===s.tasks.executing||!0===this.opts.enableTasksQueue&&0===s.tasks.executing&&0===this.tasksQueueSize(t)))&&(this.flagWorkerNodeAsNotReady(t),this.destroyWorkerNode(t).catch((e=>{this.emitter?.emit(y.error,e)})))}));const t=this.getWorkerInfo(e);if(this.sendToWorker(e,{checkActive:!0}),this.taskFunctions.size>0)for(const[t,s]of this.taskFunctions)this.sendTaskFunctionOperationToWorker(e,{taskFunctionOperation:"add",taskFunctionName:t,taskFunction:s.toString()}).catch((e=>{this.emitter?.emit(y.error,e)}));return t.dynamic=!0,(this.workerChoiceStrategyContext.getStrategyPolicy().dynamicWorkerReady||this.workerChoiceStrategyContext.getStrategyPolicy().dynamicWorkerUsage)&&(t.ready=!0),this.checkAndEmitDynamicWorkerCreationEvents(),e}afterWorkerNodeSetup(e){this.registerWorkerMessageListener(e,this.workerMessageListener.bind(this)),this.sendStartupMessageToWorker(e),this.sendStatisticsMessageToWorker(e),!0===this.opts.enableTasksQueue&&(!0===this.opts.tasksQueueOptions?.taskStealing&&this.workerNodes[e].on("idleWorkerNode",this.handleIdleWorkerNodeEvent),!0===this.opts.tasksQueueOptions?.tasksStealingOnBackPressure&&this.workerNodes[e].on("backPressure",this.handleBackPressureEvent))}sendStatisticsMessageToWorker(e){this.sendToWorker(e,{statistics:{runTime:this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.aggregate,elu:this.workerChoiceStrategyContext.getTaskStatisticsRequirements().elu.aggregate}})}redistributeQueuedTasks(e){for(;this.tasksQueueSize(e)>0;){const t=this.workerNodes.reduce(((e,t,s,r)=>t.info.ready&&t.usage.tasks.queued<r[e].usage.tasks.queued?s:e),0),s=this.dequeueTask(e);this.shallExecuteTask(t)?this.executeTask(t,s):this.enqueueTask(t,s)}}updateTaskStolenStatisticsWorkerUsage(e,t){const s=this.workerNodes[e];if(null!=s?.usage&&++s.usage.tasks.stolen,this.shallUpdateTaskFunctionWorkerUsage(e)&&null!=s.getTaskFunctionWorkerUsage(t)){++s.getTaskFunctionWorkerUsage(t).tasks.stolen}}updateTaskSequentiallyStolenStatisticsWorkerUsage(e){const t=this.workerNodes[e];null!=t?.usage&&++t.usage.tasks.sequentiallyStolen}updateTaskSequentiallyStolenStatisticsTaskFunctionWorkerUsage(e,t){const s=this.workerNodes[e];if(this.shallUpdateTaskFunctionWorkerUsage(e)&&null!=s.getTaskFunctionWorkerUsage(t)){++s.getTaskFunctionWorkerUsage(t).tasks.sequentiallyStolen}}resetTaskSequentiallyStolenStatisticsWorkerUsage(e){const t=this.workerNodes[e];null!=t?.usage&&(t.usage.tasks.sequentiallyStolen=0)}resetTaskSequentiallyStolenStatisticsTaskFunctionWorkerUsage(e,t){const s=this.workerNodes[e];if(this.shallUpdateTaskFunctionWorkerUsage(e)&&null!=s.getTaskFunctionWorkerUsage(t)){s.getTaskFunctionWorkerUsage(t).tasks.sequentiallyStolen=0}}handleIdleWorkerNodeEvent=(e,t)=>{const{workerNodeKey:s}=e;if(null==s)throw new Error("WorkerNode event detail workerNodeKey attribute must be defined");const r=this.workerNodes[s].usage.tasks;if(null!=t&&r.sequentiallyStolen>0&&(r.executing>0||this.tasksQueueSize(s)>0)){for(const e of this.workerNodes[s].info.taskFunctionNames)this.resetTaskSequentiallyStolenStatisticsTaskFunctionWorkerUsage(s,e);return void this.resetTaskSequentiallyStolenStatisticsWorkerUsage(s)}const i=this.workerNodeStealTask(s);if(this.shallUpdateTaskFunctionWorkerUsage(s)&&null!=i){const e=this.workerNodes[s].getTaskFunctionWorkerUsage(i.name)?.tasks;0===e.sequentiallyStolen||null!=t&&t.name===i.name&&e.sequentiallyStolen>0?this.updateTaskSequentiallyStolenStatisticsTaskFunctionWorkerUsage(s,i.name):this.resetTaskSequentiallyStolenStatisticsTaskFunctionWorkerUsage(s,i.name)}(async e=>{await new Promise((t=>{setTimeout(t,e)}))})(((e=0,t=100)=>{const s=Math.pow(2,e)*t;return s+.2*s*z()})(r.sequentiallyStolen)).then((()=>{this.handleIdleWorkerNodeEvent(e,i)})).catch(N)};workerNodeStealTask=e=>{const t=this.workerNodes.slice().sort(((e,t)=>t.usage.tasks.queued-e.usage.tasks.queued)).find(((t,s)=>t.info.ready&&s!==e&&t.usage.tasks.queued>0));if(null!=t){const s=t.popTask();return this.shallExecuteTask(e)?this.executeTask(e,s):this.enqueueTask(e,s),this.updateTaskSequentiallyStolenStatisticsWorkerUsage(e),this.updateTaskStolenStatisticsWorkerUsage(e,s.name),s}};handleBackPressureEvent=e=>{const{workerId:t}=e;if(this.opts.tasksQueueOptions?.size<=1)return;const s=this.workerNodes[this.getWorkerNodeKeyByWorkerId(t)],r=this.workerNodes.slice().sort(((e,t)=>e.usage.tasks.queued-t.usage.tasks.queued));for(const[e,i]of r.entries())if(s.usage.tasks.queued>0&&i.info.ready&&i.info.id!==t&&i.usage.tasks.queued<this.opts.tasksQueueOptions?.size-1){const t=s.popTask();this.shallExecuteTask(e)?this.executeTask(e,t):this.enqueueTask(e,t),this.updateTaskStolenStatisticsWorkerUsage(e,t.name)}};workerMessageListener(e){this.checkMessageWorkerId(e);const{workerId:t,ready:s,taskId:r,taskFunctionNames:i}=e;null!=s&&null!=i?this.handleWorkerReadyResponse(e):null!=r?this.handleTaskExecutionResponse(e):null!=i&&(this.getWorkerInfo(this.getWorkerNodeKeyByWorkerId(t)).taskFunctionNames=i)}handleWorkerReadyResponse(e){const{workerId:t,ready:s,taskFunctionNames:r}=e;if(!1===s)throw new Error(`Worker ${t} failed to initialize`);const i=this.getWorkerInfo(this.getWorkerNodeKeyByWorkerId(t));i.ready=s,i.taskFunctionNames=r,!this.readyEventEmitted&&this.ready&&(this.readyEventEmitted=!0,this.emitter?.emit(y.ready,this.info))}handleTaskExecutionResponse(e){const{workerId:t,taskId:s,workerError:r,data:i}=e,o=this.promiseResponseMap.get(s);if(null!=o){const{resolve:n,reject:a,workerNodeKey:u}=o;if(null!=r?(this.emitter?.emit(y.taskError,r),a(r.message)):n(i),this.afterTaskExecutionHook(u,e),this.workerChoiceStrategyContext.update(u),this.promiseResponseMap.delete(s),!0===this.opts.enableTasksQueue){const e=this.workerNodes[u].usage.tasks;this.tasksQueueSize(u)>0&&e.executing<this.opts.tasksQueueOptions?.concurrency&&this.executeTask(u,this.dequeueTask(u)),0===e.executing&&0===this.tasksQueueSize(u)&&0===e.sequentiallyStolen&&this.workerNodes[u].emit("idleWorkerNode",{workerId:t,workerNodeKey:u})}}}checkAndEmitTaskExecutionEvents(){this.busy&&this.emitter?.emit(y.busy,this.info)}checkAndEmitTaskQueuingEvents(){this.hasBackPressure()&&this.emitter?.emit(y.backPressure,this.info)}checkAndEmitDynamicWorkerCreationEvents(){this.type===p.dynamic&&this.full&&this.emitter?.emit(y.full,this.info)}getWorkerInfo(e){return this.workerNodes[e]?.info}addWorkerNode(e){const t=new te(e,this.opts.tasksQueueOptions?.size??Math.pow(this.maxSize,2));this.starting&&(t.info.ready=!0),this.workerNodes.push(t);const s=this.getWorkerNodeKeyByWorker(e);if(-1===s)throw new Error("Worker added not found in worker nodes");return s}removeWorkerNode(e){const t=this.getWorkerNodeKeyByWorker(e);-1!==t&&(this.workerNodes.splice(t,1),this.workerChoiceStrategyContext.remove(t))}flagWorkerNodeAsNotReady(e){this.getWorkerInfo(e).ready=!1}hasWorkerNodeBackPressure(e){return!0===this.opts.enableTasksQueue&&this.workerNodes[e].hasBackPressure()}hasBackPressure(){return!0===this.opts.enableTasksQueue&&-1===this.workerNodes.findIndex((e=>!e.hasBackPressure()))}executeTask(e,t){this.beforeTaskExecutionHook(e,t),this.sendToWorker(e,t,t.transferList),this.checkAndEmitTaskExecutionEvents()}enqueueTask(e,t){const s=this.workerNodes[e].enqueueTask(t);return this.checkAndEmitTaskQueuingEvents(),s}dequeueTask(e){return this.workerNodes[e].dequeueTask()}tasksQueueSize(e){return this.workerNodes[e].tasksQueueSize()}flushTasksQueue(e){for(;this.tasksQueueSize(e)>0;)this.executeTask(e,this.dequeueTask(e));this.workerNodes[e].clearTasksQueue()}flushTasksQueues(){for(const[e]of this.workerNodes.entries())this.flushTasksQueue(e)}}class re extends se{opts;constructor(e,t,s={}){super(e,t,s),this.opts=s}setupHook(){o.setupPrimary({...this.opts.settings,exec:this.filePath})}isMain(){return o.isPrimary}async destroyWorkerNode(e){this.flagWorkerNodeAsNotReady(e),this.flushTasksQueue(e);const t=this.workerNodes[e].worker,s=new Promise((e=>{t.once("exit",(()=>{e()}))}));t.once("disconnect",(()=>{t.kill()})),await this.sendKillMessageToWorker(e),t.disconnect(),await s}sendToWorker(e,t){this.workerNodes[e].worker.send({...t,workerId:this.getWorkerInfo(e).id})}sendStartupMessageToWorker(e){this.sendToWorker(e,{ready:!1})}registerWorkerMessageListener(e,t){this.workerNodes[e].worker.on("message",t)}registerOnceWorkerMessageListener(e,t){this.workerNodes[e].worker.once("message",t)}deregisterWorkerMessageListener(e,t){this.workerNodes[e].worker.off("message",t)}createWorker(){return o.fork(this.opts.env)}get type(){return p.fixed}get worker(){return T.cluster}get busy(){return this.internalBusy()}}class ie extends re{max;constructor(e,t,s,r={}){super(e,s,r),this.max=t,P(this.numberOfWorkers,this.max)}get type(){return p.dynamic}get busy(){return this.full&&this.internalBusy()}}class oe extends se{opts;constructor(e,t,s={}){super(e,t,s),this.opts=s}isMain(){return h}async destroyWorkerNode(e){this.flagWorkerNodeAsNotReady(e),this.flushTasksQueue(e);const t=this.workerNodes[e],s=t.worker,r=new Promise((e=>{s.once("exit",(()=>{e()}))}));await this.sendKillMessageToWorker(e),t.closeChannel(),await s.terminate(),await r}sendToWorker(e,t,s){this.workerNodes[e]?.messageChannel?.port1?.postMessage({...t,workerId:this.getWorkerInfo(e).id},s)}sendStartupMessageToWorker(e){const t=this.workerNodes[e],s=t.messageChannel.port2;t.worker.postMessage({ready:!1,workerId:this.getWorkerInfo(e).id,port:s},[s])}registerWorkerMessageListener(e,t){(this.workerNodes[e]?.messageChannel).port1.on("message",t)}registerOnceWorkerMessageListener(e,t){(this.workerNodes[e]?.messageChannel).port1.once("message",t)}deregisterWorkerMessageListener(e,t){(this.workerNodes[e]?.messageChannel).port1.off("message",t)}createWorker(){return new a(this.filePath,{env:k,...this.opts.workerOptions})}get type(){return p.fixed}get worker(){return T.thread}get busy(){return this.internalBusy()}}class ne extends oe{max;constructor(e,t,s,r={}){super(e,s,r),this.max=t,P(this.numberOfWorkers,this.max)}get type(){return p.dynamic}get busy(){return this.full&&this.internalBusy()}}const ae=(e,t)=>{if("string"!=typeof e)throw new TypeError("A taskFunctions parameter object key is not a string");if("string"==typeof e&&0===e.trim().length)throw new TypeError("A taskFunctions parameter object key is an empty string");if("function"!=typeof t)throw new TypeError("A taskFunctions parameter object value is not a function")},ue=e=>{if("string"!=typeof e)throw new TypeError("name parameter is not a string");if("string"==typeof e&&0===e.trim().length)throw new TypeError("name parameter is an empty string")},he=6e4,ke={killBehavior:D.SOFT,maxInactiveTime:he,killHandler:N};class de extends w{isMain;mainWorker;opts;taskFunctions;lastTaskTimestamp;statistics;activeInterval;constructor(e,t,s,r,i=ke){if(super(e),this.isMain=t,this.mainWorker=s,this.opts=i,null==this.isMain)throw new Error("isMain parameter is mandatory");this.checkTaskFunctions(r),this.checkWorkerOptions(this.opts),this.isMain||this.getMainWorker().on("message",this.handleReadyMessage.bind(this))}checkWorkerOptions(e){(e=>{if(null!=e&&!R(e))throw new TypeError("opts worker options parameter is not a plain object");if(null!=e?.killBehavior&&!Object.values(D).includes(e.killBehavior))throw new TypeError(`killBehavior option '${e.killBehavior}' is not valid`);if(null!=e?.maxInactiveTime&&!Number.isSafeInteger(e.maxInactiveTime))throw new TypeError("maxInactiveTime option is not an integer");if(null!=e?.maxInactiveTime&&e.maxInactiveTime<5)throw new TypeError("maxInactiveTime option is not a positive integer greater or equal than 5");if(null!=e?.killHandler&&"function"!=typeof e.killHandler)throw new TypeError("killHandler option is not a function")})(e),this.opts={...ke,...e}}checkTaskFunctions(e){if(null==e)throw new Error("taskFunctions parameter is mandatory");if(this.taskFunctions=new Map,"function"==typeof e){const t=e.bind(this);this.taskFunctions.set(f,t),this.taskFunctions.set("string"==typeof e.name&&e.name.trim().length>0?e.name:"fn1",t)}else{if(!R(e))throw new TypeError("taskFunctions parameter is not a function or a plain object");{let t=!0;for(const[s,r]of Object.entries(e)){ae(s,r);const e=r.bind(this);t&&(this.taskFunctions.set(f,e),t=!1),this.taskFunctions.set(s,e)}if(t)throw new Error("taskFunctions parameter object is empty")}}}hasTaskFunction(e){try{ue(e)}catch(e){return{status:!1,error:e}}return{status:this.taskFunctions.has(e)}}addTaskFunction(e,t){try{if(ue(e),e===f)throw new Error("Cannot add a task function with the default reserved name");if("function"!=typeof t)throw new TypeError("fn parameter is not a function");const s=t.bind(this);return this.taskFunctions.get(e)===this.taskFunctions.get(f)&&this.taskFunctions.set(f,s),this.taskFunctions.set(e,s),this.sendTaskFunctionNamesToMainWorker(),{status:!0}}catch(e){return{status:!1,error:e}}}removeTaskFunction(e){try{if(ue(e),e===f)throw new Error("Cannot remove the task function with the default reserved name");if(this.taskFunctions.get(e)===this.taskFunctions.get(f))throw new Error("Cannot remove the task function used as the default task function");const t=this.taskFunctions.delete(e);return this.sendTaskFunctionNamesToMainWorker(),{status:t}}catch(e){return{status:!1,error:e}}}listTaskFunctionNames(){const e=[...this.taskFunctions.keys()];let t=f;for(const[e,s]of this.taskFunctions)if(e!==f&&s===this.taskFunctions.get(f)){t=e;break}return[e[e.indexOf(f)],t,...e.filter((e=>e!==f&&e!==t))]}setDefaultTaskFunction(e){try{if(ue(e),e===f)throw new Error("Cannot set the default task function reserved name as the default task function");if(!this.taskFunctions.has(e))throw new Error("Cannot set the default task function to a non-existing task function");return this.taskFunctions.set(f,this.taskFunctions.get(e)),this.sendTaskFunctionNamesToMainWorker(),{status:!0}}catch(e){return{status:!1,error:e}}}messageListener(e){this.checkMessageWorkerId(e),null!=e.statistics?this.statistics=e.statistics:null!=e.checkActive?e.checkActive?this.startCheckActive():this.stopCheckActive():null!=e.taskFunctionOperation?this.handleTaskFunctionOperationMessage(e):null!=e.taskId&&null!=e.data?this.run(e):!0===e.kill&&this.handleKillMessage(e)}handleTaskFunctionOperationMessage(e){const{taskFunctionOperation:t,taskFunctionName:s,taskFunction:r}=e;let i;switch(t){case"add":i=this.addTaskFunction(s,new Function(`return ${r}`)());break;case"remove":i=this.removeTaskFunction(s);break;case"default":i=this.setDefaultTaskFunction(s);break;default:i={status:!1,error:new Error("Unknown task operation")}}this.sendToMainWorker({taskFunctionOperation:t,taskFunctionOperationStatus:i.status,taskFunctionName:s,...!i.status&&null!=i?.error&&{workerError:{name:s,message:this.handleError(i.error)}}})}handleKillMessage(e){if(this.stopCheckActive(),O(this.opts.killHandler))(this.opts.killHandler?.()).then((()=>{this.sendToMainWorker({kill:"success"})})).catch((()=>{this.sendToMainWorker({kill:"failure"})})).finally((()=>{this.emitDestroy()})).catch(N);else try{this.opts.killHandler?.(),this.sendToMainWorker({kill:"success"})}catch{this.sendToMainWorker({kill:"failure"})}finally{this.emitDestroy()}}checkMessageWorkerId(e){if(null==e.workerId)throw new Error("Message worker id is not set");if(e.workerId!==this.id)throw new Error(`Message worker id ${e.workerId} does not match the worker id ${this.id}`)}startCheckActive(){this.lastTaskTimestamp=l.now(),this.activeInterval=setInterval(this.checkActive.bind(this),(this.opts.maxInactiveTime??he)/2)}stopCheckActive(){null!=this.activeInterval&&(clearInterval(this.activeInterval),delete this.activeInterval)}checkActive(){l.now()-this.lastTaskTimestamp>(this.opts.maxInactiveTime??he)&&this.sendToMainWorker({kill:this.opts.killBehavior})}getMainWorker(){if(null==this.mainWorker)throw new Error("Main worker not set");return this.mainWorker}sendTaskFunctionNamesToMainWorker(){this.sendToMainWorker({taskFunctionNames:this.listTaskFunctionNames()})}handleError(e){return e instanceof Error?e.message:e}run(e){const{name:t,taskId:s,data:r}=e,i=t??f;if(!this.taskFunctions.has(i))return void this.sendToMainWorker({workerError:{name:t,message:`Task function '${t}' not found`,data:r},taskId:s});const o=this.taskFunctions.get(i);O(o)?this.runInAsyncScope(this.runAsync.bind(this),this,o,e):this.runInAsyncScope(this.runSync.bind(this),this,o,e)}runSync(e,t){const{name:s,taskId:r,data:i}=t;try{let t=this.beginTaskPerformance(s);const o=e(i);t=this.endTaskPerformance(t),this.sendToMainWorker({data:o,taskPerformance:t,taskId:r})}catch(e){this.sendToMainWorker({workerError:{name:s,message:this.handleError(e),data:i},taskId:r})}finally{this.updateLastTaskTimestamp()}}runAsync(e,t){const{name:s,taskId:r,data:i}=t;let o=this.beginTaskPerformance(s);e(i).then((e=>{o=this.endTaskPerformance(o),this.sendToMainWorker({data:e,taskPerformance:o,taskId:r})})).catch((e=>{this.sendToMainWorker({workerError:{name:s,message:this.handleError(e),data:i},taskId:r})})).finally((()=>{this.updateLastTaskTimestamp()})).catch(N)}beginTaskPerformance(e){return this.checkStatistics(),{name:e??f,timestamp:l.now(),...this.statistics.elu&&{elu:l.eventLoopUtilization()}}}endTaskPerformance(e){return this.checkStatistics(),{...e,...this.statistics.runTime&&{runTime:l.now()-e.timestamp},...this.statistics.elu&&{elu:l.eventLoopUtilization(e.elu)}}}checkStatistics(){if(null==this.statistics)throw new Error("Performance statistics computation requirements not set")}updateLastTaskTimestamp(){null!=this.activeInterval&&(this.lastTaskTimestamp=l.now())}}class ce extends de{constructor(e,t={}){super("poolifier:cluster-worker",o.isPrimary,o.worker,e,t)}handleReadyMessage(e){if(e.workerId===this.id&&!1===e.ready)try{this.getMainWorker().on("message",this.messageListener.bind(this)),this.sendToMainWorker({ready:!0,taskFunctionNames:this.listTaskFunctionNames()})}catch{this.sendToMainWorker({ready:!1,taskFunctionNames:this.listTaskFunctionNames()})}}get id(){return this.getMainWorker().id}sendToMainWorker(e){this.getMainWorker().send({...e,workerId:this.id})}}class le extends de{port;constructor(e,t={}){super("poolifier:thread-worker",h,d,e,t)}handleReadyMessage(e){if(e.workerId===this.id&&!1===e.ready&&null!=e.port)try{this.port=e.port,this.port.on("message",this.messageListener.bind(this)),this.sendToMainWorker({ready:!0,taskFunctionNames:this.listTaskFunctionNames()})}catch{this.sendToMainWorker({ready:!1,taskFunctionNames:this.listTaskFunctionNames()})}}handleKillMessage(e){super.handleKillMessage(e),this.port?.unref(),this.port?.close()}get id(){return c}sendToMainWorker(e){this.port.postMessage({...e,workerId:this.id})}handleError(e){return e}}export{ce as ClusterWorker,ie as DynamicClusterPool,ne as DynamicThreadPool,re as FixedClusterPool,oe as FixedThreadPool,D as KillBehaviors,U as Measurements,y as PoolEvents,p as PoolTypes,le as ThreadWorker,q as WorkerChoiceStrategies,T as WorkerTypes,x as availableParallelism};
1
+ import{existsSync as e}from"node:fs";import*as t from"node:os";import{cpus as s}from"node:os";import{webcrypto as r,randomUUID as i}from"node:crypto";import o,{Worker as n}from"node:cluster";import{Worker as a,MessageChannel as u,isMainThread as h,SHARE_ENV as k,parentPort as d,threadId as c}from"node:worker_threads";import{performance as l}from"node:perf_hooks";import{EventEmitter as g,EventEmitterAsyncResource as m}from"node:events";import{AsyncResource as w}from"node:async_hooks";const p=Object.freeze({fixed:"fixed",dynamic:"dynamic"}),y=Object.freeze({ready:"ready",busy:"busy",full:"full",destroy:"destroy",error:"error",taskError:"taskError",backPressure:"backPressure"}),T=Object.freeze({thread:"thread",cluster:"cluster"}),f="default",N=Object.freeze((()=>{})),W={retries:6,runTime:{median:!1},waitTime:{median:!1},elu:{median:!1}},S={aggregate:!1,average:!1,median:!1},x=()=>{let e=1;try{e=t.availableParallelism()}catch{const s=t.cpus();Array.isArray(s)&&s.length>0&&(e=s.length)}return e},v=e=>e instanceof a?T.thread:e instanceof n?T.cluster:void 0,E=e=>e instanceof a?e.threadId:e instanceof n?e.id:void 0,I=e=>Array.isArray(e)&&0===e.length?0:Array.isArray(e)&&1===e.length?e[0]:e.reduce(((e,t)=>e+t),0)/e.length,F=e=>{if(Array.isArray(e)&&0===e.length)return 0;if(Array.isArray(e)&&1===e.length)return e[0];const t=e.slice().sort(((e,t)=>e-t));return(t[t.length-1>>1]+t[t.length>>1])/2},b=(e,t=2)=>{const s=Math.pow(10,t);return Math.round(e*s*(1+Number.EPSILON))/s},R=e=>"object"==typeof e&&null!==e&&e?.constructor===Object&&"[object Object]"===Object.prototype.toString.call(e),C=(e,t)=>t===e,O=e=>"function"==typeof e&&"AsyncFunction"===e.constructor.name,z=()=>r.getRandomValues(new Uint32Array(1))[0]/4294967296,M=(...e)=>e.reduce(((e,t)=>e<t?e:t),1/0),K=(...e)=>e.reduce(((e,t)=>e>t?e:t),-1/0),q=Object.freeze({ROUND_ROBIN:"ROUND_ROBIN",LEAST_USED:"LEAST_USED",LEAST_BUSY:"LEAST_BUSY",LEAST_ELU:"LEAST_ELU",FAIR_SHARE:"FAIR_SHARE",WEIGHTED_ROUND_ROBIN:"WEIGHTED_ROUND_ROBIN",INTERLEAVED_WEIGHTED_ROUND_ROBIN:"INTERLEAVED_WEIGHTED_ROUND_ROBIN"}),P=Object.freeze({runTime:"runTime",waitTime:"waitTime",elu:"elu"}),U=(e,t)=>{if(null==t)throw new TypeError("Cannot instantiate a dynamic pool without specifying the maximum pool size");if(!Number.isSafeInteger(t))throw new TypeError("Cannot instantiate a dynamic pool with a non safe integer maximum pool size");if(e>t)throw new RangeError("Cannot instantiate a dynamic pool with a maximum pool size inferior to the minimum pool size");if(0===t)throw new RangeError("Cannot instantiate a dynamic pool with a maximum pool size equal to zero");if(e===t)throw new RangeError("Cannot instantiate a dynamic pool with a minimum pool size equal to the maximum pool size. Use a fixed pool instead")},Q=e=>{if(null!=e&&!Object.values(q).includes(e))throw new Error(`Invalid worker choice strategy '${e}'`)},A=e=>{if(null!=e&&!R(e))throw new TypeError("Invalid tasks queue options: must be a plain object");if(null!=e?.concurrency&&!Number.isSafeInteger(e.concurrency))throw new TypeError("Invalid worker node tasks concurrency: must be an integer");if(null!=e?.concurrency&&e.concurrency<=0)throw new RangeError(`Invalid worker node tasks concurrency: ${e.concurrency} is a negative integer or zero`);if(null!=e?.size&&!Number.isSafeInteger(e.size))throw new TypeError("Invalid worker node tasks queue size: must be an integer");if(null!=e?.size&&e.size<=0)throw new RangeError(`Invalid worker node tasks queue size: ${e.size} is a negative integer or zero`)},B=(e,t,s)=>{t.aggregate&&(e.aggregate=(e.aggregate??0)+s,e.minimum=M(s,e.minimum??1/0),e.maximum=K(s,e.maximum??-1/0),(t.average||t.median)&&null!=s&&(e.history.push(s),t.average?e.average=I(e.history):null!=e.average&&delete e.average,t.median?e.median=F(e.history):null!=e.median&&delete e.median))},D=Object.freeze({SOFT:"SOFT",HARD:"HARD"});class L{pool;opts;nextWorkerNodeKey=0;previousWorkerNodeKey=0;strategyPolicy={dynamicWorkerUsage:!1,dynamicWorkerReady:!0};taskStatisticsRequirements={runTime:S,waitTime:S,elu:S};constructor(e,t=W){this.pool=e,this.opts=t,this.opts={...W,...t},this.choose=this.choose.bind(this)}setTaskStatisticsRequirements(e){this.toggleMedianMeasurementStatisticsRequirements(this.taskStatisticsRequirements.runTime,e.runTime?.median),this.toggleMedianMeasurementStatisticsRequirements(this.taskStatisticsRequirements.waitTime,e.waitTime?.median),this.toggleMedianMeasurementStatisticsRequirements(this.taskStatisticsRequirements.elu,e.elu?.median)}toggleMedianMeasurementStatisticsRequirements(e,t){e.average&&t&&(e.average=!1,e.median=t),e.median&&!t&&(e.average=!0,e.median=t)}resetWorkerNodeKeyProperties(){this.nextWorkerNodeKey=0,this.previousWorkerNodeKey=0}setOptions(e){this.opts={...W,...e},this.setTaskStatisticsRequirements(this.opts)}isWorkerNodeReady(e){return this.pool.workerNodes[e]?.info?.ready??!1}checkNextWorkerNodeReadiness(){this.isWorkerNodeReady(this.nextWorkerNodeKey)||delete this.nextWorkerNodeKey}getWorkerNodeTaskRunTime(e){return this.taskStatisticsRequirements.runTime.median?this.pool.workerNodes[e].usage.runTime.median??0:this.pool.workerNodes[e].usage.runTime.average??0}getWorkerNodeTaskWaitTime(e){return this.taskStatisticsRequirements.waitTime.median?this.pool.workerNodes[e].usage.waitTime.median??0:this.pool.workerNodes[e].usage.waitTime.average??0}getWorkerNodeTaskElu(e){return this.taskStatisticsRequirements.elu.median?this.pool.workerNodes[e].usage.elu.active.median??0:this.pool.workerNodes[e].usage.elu.active.average??0}setPreviousWorkerNodeKey(e){this.previousWorkerNodeKey=e??this.previousWorkerNodeKey}computeDefaultWorkerWeight(){let e=0;for(const t of s()){const s=t.speed.toString().length-1;e+=1/(t.speed/Math.pow(10,s))*Math.pow(10,s)}return Math.round(e/s().length)}}class _ extends L{taskStatisticsRequirements={runTime:{aggregate:!0,average:!0,median:!1},waitTime:S,elu:{aggregate:!0,average:!0,median:!1}};constructor(e,t=W){super(e,t),this.setTaskStatisticsRequirements(this.opts)}reset(){for(const e of this.pool.workerNodes)delete e.strategyData?.virtualTaskEndTimestamp;return!0}update(e){return this.pool.workerNodes[e].strategyData={virtualTaskEndTimestamp:this.computeWorkerNodeVirtualTaskEndTimestamp(e)},!0}choose(){return this.setPreviousWorkerNodeKey(this.nextWorkerNodeKey),this.nextWorkerNodeKey=this.fairShareNextWorkerNodeKey(),this.nextWorkerNodeKey}remove(){return!0}fairShareNextWorkerNodeKey(){return this.pool.workerNodes.reduce(((e,t,s,r)=>(null==t.strategyData?.virtualTaskEndTimestamp&&(t.strategyData={virtualTaskEndTimestamp:this.computeWorkerNodeVirtualTaskEndTimestamp(s)}),this.isWorkerNodeReady(s)&&t.strategyData.virtualTaskEndTimestamp<r[e].strategyData.virtualTaskEndTimestamp?s:e)),0)}computeWorkerNodeVirtualTaskEndTimestamp(e){return this.getWorkerNodeVirtualTaskEndTimestamp(e,this.getWorkerNodeVirtualTaskStartTimestamp(e))}getWorkerNodeVirtualTaskEndTimestamp(e,t){return t+(this.opts.measurement===P.elu?this.getWorkerNodeTaskElu(e):this.getWorkerNodeTaskRunTime(e))}getWorkerNodeVirtualTaskStartTimestamp(e){const t=this.pool.workerNodes[e]?.strategyData?.virtualTaskEndTimestamp,s=performance.now();return s<(t??-1/0)?t:s}}class H extends L{taskStatisticsRequirements={runTime:{aggregate:!0,average:!0,median:!1},waitTime:S,elu:S};roundId=0;defaultWorkerWeight;roundWeights;workerNodeId=0;workerNodeVirtualTaskRunTime=0;constructor(e,t=W){super(e,t),this.setTaskStatisticsRequirements(this.opts),this.defaultWorkerWeight=this.computeDefaultWorkerWeight(),this.roundWeights=this.getRoundWeights()}reset(){return this.resetWorkerNodeKeyProperties(),this.roundId=0,this.workerNodeId=0,this.workerNodeVirtualTaskRunTime=0,!0}update(){return!0}choose(){for(let e=this.roundId;e<this.roundWeights.length;e++){this.roundId=e;for(let t=this.workerNodeId;t<this.pool.workerNodes.length;t++){this.workerNodeId=t,this.workerNodeId!==this.nextWorkerNodeKey&&0!==this.workerNodeVirtualTaskRunTime&&(this.workerNodeVirtualTaskRunTime=0);const s=this.opts.weights?.[t]??this.defaultWorkerWeight;if(this.isWorkerNodeReady(t)&&s>=this.roundWeights[e]&&this.workerNodeVirtualTaskRunTime<s)return this.workerNodeVirtualTaskRunTime=this.workerNodeVirtualTaskRunTime+this.getWorkerNodeTaskRunTime(t),this.setPreviousWorkerNodeKey(this.nextWorkerNodeKey),this.nextWorkerNodeKey=t,this.nextWorkerNodeKey}}this.interleavedWeightedRoundRobinNextWorkerNodeId()}interleavedWeightedRoundRobinNextWorkerNodeId(){this.roundId===this.roundWeights.length-1&&this.workerNodeId===this.pool.workerNodes.length-1?(this.roundId=0,this.workerNodeId=0):this.workerNodeId===this.pool.workerNodes.length-1?(this.roundId=this.roundId+1,this.workerNodeId=0):this.workerNodeId=this.workerNodeId+1}remove(e){return 0===this.pool.workerNodes.length&&this.reset(),this.workerNodeId===e&&this.workerNodeId>this.pool.workerNodes.length-1&&(this.workerNodeId=this.pool.workerNodes.length-1),this.previousWorkerNodeKey===e&&this.previousWorkerNodeKey>this.pool.workerNodes.length-1&&(this.previousWorkerNodeKey=this.pool.workerNodes.length-1),!0}setOptions(e){super.setOptions(e),this.roundWeights=this.getRoundWeights()}getRoundWeights(){return null==this.opts.weights?[this.defaultWorkerWeight]:[...new Set(Object.values(this.opts.weights).slice().sort(((e,t)=>e-t)))]}}class j extends L{taskStatisticsRequirements={runTime:{aggregate:!0,average:!1,median:!1},waitTime:{aggregate:!0,average:!1,median:!1},elu:S};constructor(e,t=W){super(e,t),this.setTaskStatisticsRequirements(this.opts)}reset(){return!0}update(){return!0}choose(){return this.setPreviousWorkerNodeKey(this.nextWorkerNodeKey),this.nextWorkerNodeKey=this.leastBusyNextWorkerNodeKey(),this.nextWorkerNodeKey}remove(){return!0}leastBusyNextWorkerNodeKey(){return this.pool.workerNodes.reduce(((e,t,s,r)=>this.isWorkerNodeReady(s)&&(t.usage.runTime.aggregate??0)+(t.usage.waitTime.aggregate??0)<(r[e].usage.runTime.aggregate??0)+(r[e].usage.waitTime.aggregate??0)?s:e),0)}}class V extends L{constructor(e,t=W){super(e,t),this.setTaskStatisticsRequirements(this.opts)}reset(){return!0}update(){return!0}choose(){return this.setPreviousWorkerNodeKey(this.nextWorkerNodeKey),this.nextWorkerNodeKey=this.leastUsedNextWorkerNodeKey(),this.nextWorkerNodeKey}remove(){return!0}leastUsedNextWorkerNodeKey(){return this.pool.workerNodes.reduce(((e,t,s,r)=>this.isWorkerNodeReady(s)&&t.usage.tasks.executed+t.usage.tasks.executing+t.usage.tasks.queued<r[e].usage.tasks.executed+r[e].usage.tasks.executing+r[e].usage.tasks.queued?s:e),0)}}class $ extends L{taskStatisticsRequirements={runTime:S,waitTime:S,elu:{aggregate:!0,average:!1,median:!1}};constructor(e,t=W){super(e,t),this.setTaskStatisticsRequirements(this.opts)}reset(){return!0}update(){return!0}choose(){return this.setPreviousWorkerNodeKey(this.nextWorkerNodeKey),this.nextWorkerNodeKey=this.leastEluNextWorkerNodeKey(),this.nextWorkerNodeKey}remove(){return!0}leastEluNextWorkerNodeKey(){return this.pool.workerNodes.reduce(((e,t,s,r)=>this.isWorkerNodeReady(s)&&(t.usage.elu.active.aggregate??0)<(r[e].usage.elu.active.aggregate??0)?s:e),0)}}class G extends L{constructor(e,t=W){super(e,t),this.setTaskStatisticsRequirements(this.opts)}reset(){return this.resetWorkerNodeKeyProperties(),!0}update(){return!0}choose(){const e=this.nextWorkerNodeKey;return this.setPreviousWorkerNodeKey(e),this.roundRobinNextWorkerNodeKey(),this.checkNextWorkerNodeReadiness(),e}remove(e){return 0===this.pool.workerNodes.length&&this.reset(),this.nextWorkerNodeKey===e&&this.nextWorkerNodeKey>this.pool.workerNodes.length-1&&(this.nextWorkerNodeKey=this.pool.workerNodes.length-1),this.previousWorkerNodeKey===e&&this.previousWorkerNodeKey>this.pool.workerNodes.length-1&&(this.previousWorkerNodeKey=this.pool.workerNodes.length-1),!0}roundRobinNextWorkerNodeKey(){return this.nextWorkerNodeKey=this.nextWorkerNodeKey===this.pool.workerNodes.length-1?0:(this.nextWorkerNodeKey??this.previousWorkerNodeKey)+1,this.nextWorkerNodeKey}}class Y extends L{taskStatisticsRequirements={runTime:{aggregate:!0,average:!0,median:!1},waitTime:S,elu:S};defaultWorkerWeight;workerNodeVirtualTaskRunTime=0;constructor(e,t=W){super(e,t),this.setTaskStatisticsRequirements(this.opts),this.defaultWorkerWeight=this.computeDefaultWorkerWeight()}reset(){return this.resetWorkerNodeKeyProperties(),this.workerNodeVirtualTaskRunTime=0,!0}update(){return!0}choose(){return this.setPreviousWorkerNodeKey(this.nextWorkerNodeKey),this.weightedRoundRobinNextWorkerNodeKey(),this.checkNextWorkerNodeReadiness(),this.nextWorkerNodeKey}remove(e){return 0===this.pool.workerNodes.length&&this.reset(),this.nextWorkerNodeKey===e&&(this.workerNodeVirtualTaskRunTime=0,this.nextWorkerNodeKey>this.pool.workerNodes.length-1&&(this.nextWorkerNodeKey=this.pool.workerNodes.length-1)),this.previousWorkerNodeKey===e&&this.previousWorkerNodeKey>this.pool.workerNodes.length-1&&(this.previousWorkerNodeKey=this.pool.workerNodes.length-1),!0}weightedRoundRobinNextWorkerNodeKey(){const e=this.opts.weights?.[this.nextWorkerNodeKey??this.previousWorkerNodeKey]??this.defaultWorkerWeight;return this.workerNodeVirtualTaskRunTime<e?this.workerNodeVirtualTaskRunTime=this.workerNodeVirtualTaskRunTime+this.getWorkerNodeTaskRunTime(this.nextWorkerNodeKey??this.previousWorkerNodeKey):(this.nextWorkerNodeKey=this.nextWorkerNodeKey===this.pool.workerNodes.length-1?0:(this.nextWorkerNodeKey??this.previousWorkerNodeKey)+1,this.workerNodeVirtualTaskRunTime=0),this.nextWorkerNodeKey}}class J{workerChoiceStrategy;opts;workerChoiceStrategies;retriesCount=0;constructor(e,t=q.ROUND_ROBIN,s=W){this.workerChoiceStrategy=t,this.opts=s,this.opts={...W,...s},this.execute=this.execute.bind(this),this.workerChoiceStrategies=new Map([[q.ROUND_ROBIN,new(G.bind(this))(e,s)],[q.LEAST_USED,new(V.bind(this))(e,s)],[q.LEAST_BUSY,new(j.bind(this))(e,s)],[q.LEAST_ELU,new($.bind(this))(e,s)],[q.FAIR_SHARE,new(_.bind(this))(e,s)],[q.WEIGHTED_ROUND_ROBIN,new(Y.bind(this))(e,s)],[q.INTERLEAVED_WEIGHTED_ROUND_ROBIN,new(H.bind(this))(e,s)]])}getStrategyPolicy(){return this.workerChoiceStrategies.get(this.workerChoiceStrategy).strategyPolicy}getTaskStatisticsRequirements(){return this.workerChoiceStrategies.get(this.workerChoiceStrategy).taskStatisticsRequirements}setWorkerChoiceStrategy(e){this.workerChoiceStrategy!==e&&(this.workerChoiceStrategy=e),this.workerChoiceStrategies.get(this.workerChoiceStrategy)?.reset()}update(e){return this.workerChoiceStrategies.get(this.workerChoiceStrategy).update(e)}execute(){const e=this.workerChoiceStrategies.get(this.workerChoiceStrategy).choose();if(null==e&&this.retriesCount<this.opts.retries)return this.retriesCount++,this.execute();if(null==e)throw new Error(`Worker node key chosen is null or undefined after ${this.retriesCount} retries`);return this.retriesCount=0,e}remove(e){return this.workerChoiceStrategies.get(this.workerChoiceStrategy).remove(e)}setOptions(e){this.opts={...W,...e};for(const t of this.workerChoiceStrategies.values())t.setOptions(e)}}class X extends Array{size;constructor(e=1024,...t){super(),this.checkSize(e),this.size=e,arguments.length>1&&this.push(...t)}push(...e){const t=super.push(...e);return t>this.size&&super.splice(0,t-this.size),this.length}unshift(...e){return super.unshift(...e)>this.size&&super.splice(this.size,e.length),this.length}concat(...e){const t=super.concat(e);return t.size=this.size,t.length>t.size&&t.splice(0,t.length-t.size),t}splice(e,t,...s){let r=[];if(arguments.length>=3&&null!=t){if(r=super.splice(e,t,...s),this.length>this.size){const e=super.splice(0,this.length-this.size);r=new X(r.length+e.length,...r,...e)}}else r=2===arguments.length?super.splice(e,t):super.splice(e);return r}resize(e){if(this.checkSize(e),0===e)this.length=0;else if(e<this.size)for(let t=e;t<this.size;t++)super.pop();this.size=e}empty(){return 0===this.length}full(){return this.length===this.size}checkSize(e){if(!Number.isSafeInteger(e))throw new TypeError(`Invalid circular array size: ${e} is not a safe integer`);if(e<0)throw new RangeError(`Invalid circular array size: ${e} < 0`)}}class Z{data;next;prev;constructor(e){this.data=e}}class ee{head;tail;size;maxSize;constructor(){this.clear()}push(e){const t=new Z(e);return null==this.tail?this.head=this.tail=t:(t.prev=this.tail,this.tail=this.tail.next=t),this.incrementSize()}unshift(e){const t=new Z(e);return null==this.head?this.head=this.tail=t:(t.next=this.head,this.head=this.head.prev=t),this.incrementSize()}pop(){if(null==this.head)return;const e=this.tail;return this.tail=this.tail.prev,null==this.tail?delete this.head:delete this.tail.next,--this.size,e?.data}shift(){if(null==this.head)return;const e=this.head;return this.head=this.head.next,null==this.head?delete this.tail:delete this.head.prev,--this.size,e?.data}peekFirst(){return this.head?.data}peekLast(){return this.tail?.data}clear(){delete this.head,delete this.tail,this.size=0,this.maxSize=0}[Symbol.iterator](){let e=this.head;return{next:()=>{if(null==e)return{value:void 0,done:!0};const t={value:e.data,done:!1};return e=e.next,t}}}backward(){return{[Symbol.iterator]:()=>{let e=this.tail;return{next:()=>{if(null==e)return{value:void 0,done:!0};const t={value:e.data,done:!1};return e=e.prev,t}}}}}incrementSize(){return++this.size,this.size>this.maxSize&&(this.maxSize=this.size),this.size}}class te extends g{worker;info;usage;strategyData;messageChannel;tasksQueueBackPressureSize;tasksQueue;onBackPressureStarted;taskFunctionsUsage;constructor(e,t){super(),((e,t)=>{if(null==e)throw new TypeError("Cannot construct a worker node without a worker");if(null==t)throw new TypeError("Cannot construct a worker node without a tasks queue back pressure size");if(!Number.isSafeInteger(t))throw new TypeError("Cannot construct a worker node with a tasks queue back pressure size that is not an integer");if(t<=0)throw new RangeError("Cannot construct a worker node with a tasks queue back pressure size that is not a positive integer")})(e,t),this.worker=e,this.info=this.initWorkerInfo(e),this.usage=this.initWorkerUsage(),this.info.type===T.thread&&(this.messageChannel=new u),this.tasksQueueBackPressureSize=t,this.tasksQueue=new ee,this.onBackPressureStarted=!1,this.taskFunctionsUsage=new Map}tasksQueueSize(){return this.tasksQueue.size}enqueueTask(e){const t=this.tasksQueue.push(e);return this.hasBackPressure()&&!this.onBackPressureStarted&&(this.onBackPressureStarted=!0,this.emit("backPressure",{workerId:this.info.id}),this.onBackPressureStarted=!1),t}unshiftTask(e){const t=this.tasksQueue.unshift(e);return this.hasBackPressure()&&!this.onBackPressureStarted&&(this.onBackPressureStarted=!0,this.emit("backPressure",{workerId:this.info.id}),this.onBackPressureStarted=!1),t}dequeueTask(){return this.tasksQueue.shift()}popTask(){return this.tasksQueue.pop()}clearTasksQueue(){this.tasksQueue.clear()}hasBackPressure(){return this.tasksQueue.size>=this.tasksQueueBackPressureSize}resetUsage(){this.usage=this.initWorkerUsage(),this.taskFunctionsUsage.clear()}closeChannel(){null!=this.messageChannel&&(this.messageChannel.port1.unref(),this.messageChannel.port2.unref(),this.messageChannel.port1.close(),this.messageChannel.port2.close(),delete this.messageChannel)}getTaskFunctionWorkerUsage(e){if(!Array.isArray(this.info.taskFunctionNames))throw new Error(`Cannot get task function worker usage for task function name '${e}' when task function names list is not yet defined`);if(Array.isArray(this.info.taskFunctionNames)&&this.info.taskFunctionNames.length<3)throw new Error(`Cannot get task function worker usage for task function name '${e}' when task function names list has less than 3 elements`);return e===f&&(e=this.info.taskFunctionNames[1]),this.taskFunctionsUsage.has(e)||this.taskFunctionsUsage.set(e,this.initTaskFunctionWorkerUsage(e)),this.taskFunctionsUsage.get(e)}deleteTaskFunctionWorkerUsage(e){return this.taskFunctionsUsage.delete(e)}initWorkerInfo(e){return{id:E(e),type:v(e),dynamic:!1,ready:!1}}initWorkerUsage(){const e=()=>this.tasksQueue.size,t=()=>this.tasksQueue.maxSize;return{tasks:{executed:0,executing:0,get queued(){return e()},get maxQueued(){return t()},sequentiallyStolen:0,stolen:0,failed:0},runTime:{history:new X},waitTime:{history:new X},elu:{idle:{history:new X},active:{history:new X}}}}initTaskFunctionWorkerUsage(e){const t=()=>{let t=0;for(const s of this.tasksQueue)(s.name===f&&e===this.info.taskFunctionNames[1]||s.name!==f&&e===s.name)&&++t;return t};return{tasks:{executed:0,executing:0,get queued(){return t()},sequentiallyStolen:0,stolen:0,failed:0},runTime:{history:new X},waitTime:{history:new X},elu:{idle:{history:new X},active:{history:new X}}}}}class se{numberOfWorkers;filePath;opts;workerNodes=[];emitter;max;promiseResponseMap=new Map;workerChoiceStrategyContext;taskFunctions;started;starting;destroying;readyEventEmitted;startTimestamp;constructor(t,s,r){if(this.numberOfWorkers=t,this.filePath=s,this.opts=r,!this.isMain())throw new Error("Cannot start a pool from a worker with the same type as the pool");(t=>{if(!e(t))throw new Error(`Cannot find the worker file '${t}'`)})(this.filePath),this.checkNumberOfWorkers(this.numberOfWorkers),this.checkPoolOptions(this.opts),this.chooseWorkerNode=this.chooseWorkerNode.bind(this),this.executeTask=this.executeTask.bind(this),this.enqueueTask=this.enqueueTask.bind(this),!0===this.opts.enableEvents&&this.initializeEventEmitter(),this.workerChoiceStrategyContext=new J(this,this.opts.workerChoiceStrategy,this.opts.workerChoiceStrategyOptions),this.setupHook(),this.taskFunctions=new Map,this.started=!1,this.starting=!1,this.destroying=!1,this.readyEventEmitted=!1,!0===this.opts.startWorkers&&this.start(),this.startTimestamp=l.now()}checkNumberOfWorkers(e){if(null==e)throw new Error("Cannot instantiate a pool without specifying the number of workers");if(!Number.isSafeInteger(e))throw new TypeError("Cannot instantiate a pool with a non safe integer number of workers");if(e<0)throw new RangeError("Cannot instantiate a pool with a negative number of workers");if(this.type===p.fixed&&0===e)throw new RangeError("Cannot instantiate a fixed pool with zero worker")}checkPoolOptions(e){if(!R(e))throw new TypeError("Invalid pool options: must be a plain object");this.opts.startWorkers=e.startWorkers??!0,Q(e.workerChoiceStrategy),this.opts.workerChoiceStrategy=e.workerChoiceStrategy??q.ROUND_ROBIN,this.checkValidWorkerChoiceStrategyOptions(e.workerChoiceStrategyOptions),this.opts.workerChoiceStrategyOptions={...W,...e.workerChoiceStrategyOptions},this.opts.restartWorkerOnError=e.restartWorkerOnError??!0,this.opts.enableEvents=e.enableEvents??!0,this.opts.enableTasksQueue=e.enableTasksQueue??!1,this.opts.enableTasksQueue&&(A(e.tasksQueueOptions),this.opts.tasksQueueOptions=this.buildTasksQueueOptions(e.tasksQueueOptions))}checkValidWorkerChoiceStrategyOptions(e){if(null!=e&&!R(e))throw new TypeError("Invalid worker choice strategy options: must be a plain object");if(null!=e?.retries&&!Number.isSafeInteger(e.retries))throw new TypeError("Invalid worker choice strategy options: retries must be an integer");if(null!=e?.retries&&e.retries<0)throw new RangeError(`Invalid worker choice strategy options: retries '${e.retries}' must be greater or equal than zero`);if(null!=e?.weights&&Object.keys(e.weights).length!==this.maxSize)throw new Error("Invalid worker choice strategy options: must have a weight for each worker node");if(null!=e?.measurement&&!Object.values(P).includes(e.measurement))throw new Error(`Invalid worker choice strategy options: invalid measurement '${e.measurement}'`)}initializeEventEmitter(){this.emitter=new m({name:`poolifier:${this.type}-${this.worker}-pool`})}get info(){return{version:"3.0.9",type:this.type,worker:this.worker,started:this.started,ready:this.ready,strategy:this.opts.workerChoiceStrategy,minSize:this.minSize,maxSize:this.maxSize,...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.aggregate&&this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime.aggregate&&{utilization:b(this.utilization)},workerNodes:this.workerNodes.length,idleWorkerNodes:this.workerNodes.reduce(((e,t)=>0===t.usage.tasks.executing?e+1:e),0),busyWorkerNodes:this.workerNodes.reduce(((e,t)=>t.usage.tasks.executing>0?e+1:e),0),executedTasks:this.workerNodes.reduce(((e,t)=>e+t.usage.tasks.executed),0),executingTasks:this.workerNodes.reduce(((e,t)=>e+t.usage.tasks.executing),0),...!0===this.opts.enableTasksQueue&&{queuedTasks:this.workerNodes.reduce(((e,t)=>e+t.usage.tasks.queued),0)},...!0===this.opts.enableTasksQueue&&{maxQueuedTasks:this.workerNodes.reduce(((e,t)=>e+(t.usage.tasks?.maxQueued??0)),0)},...!0===this.opts.enableTasksQueue&&{backPressure:this.hasBackPressure()},...!0===this.opts.enableTasksQueue&&{stolenTasks:this.workerNodes.reduce(((e,t)=>e+t.usage.tasks.stolen),0)},failedTasks:this.workerNodes.reduce(((e,t)=>e+t.usage.tasks.failed),0),...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.aggregate&&{runTime:{minimum:b(M(...this.workerNodes.map((e=>e.usage.runTime?.minimum??1/0)))),maximum:b(K(...this.workerNodes.map((e=>e.usage.runTime?.maximum??-1/0)))),...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.average&&{average:b(I(this.workerNodes.reduce(((e,t)=>e.concat(t.usage.runTime.history)),[])))},...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.median&&{median:b(F(this.workerNodes.reduce(((e,t)=>e.concat(t.usage.runTime.history)),[])))}}},...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime.aggregate&&{waitTime:{minimum:b(M(...this.workerNodes.map((e=>e.usage.waitTime?.minimum??1/0)))),maximum:b(K(...this.workerNodes.map((e=>e.usage.waitTime?.maximum??-1/0)))),...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime.average&&{average:b(I(this.workerNodes.reduce(((e,t)=>e.concat(t.usage.waitTime.history)),[])))},...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime.median&&{median:b(F(this.workerNodes.reduce(((e,t)=>e.concat(t.usage.waitTime.history)),[])))}}}}}get ready(){return this.workerNodes.reduce(((e,t)=>!t.info.dynamic&&t.info.ready?e+1:e),0)>=this.minSize}get utilization(){const e=(l.now()-this.startTimestamp)*this.maxSize;return(this.workerNodes.reduce(((e,t)=>e+(t.usage.runTime?.aggregate??0)),0)+this.workerNodes.reduce(((e,t)=>e+(t.usage.waitTime?.aggregate??0)),0))/e}get minSize(){return this.numberOfWorkers}get maxSize(){return this.max??this.numberOfWorkers}checkMessageWorkerId(e){if(null==e.workerId)throw new Error("Worker message received without worker id");if(-1===this.getWorkerNodeKeyByWorkerId(e.workerId))throw new Error(`Worker message received from unknown worker '${e.workerId}'`)}getWorkerNodeKeyByWorker(e){return this.workerNodes.findIndex((t=>t.worker===e))}getWorkerNodeKeyByWorkerId(e){return this.workerNodes.findIndex((t=>t.info.id===e))}setWorkerChoiceStrategy(e,t){Q(e),this.opts.workerChoiceStrategy=e,this.workerChoiceStrategyContext.setWorkerChoiceStrategy(this.opts.workerChoiceStrategy),null!=t&&this.setWorkerChoiceStrategyOptions(t);for(const[e,t]of this.workerNodes.entries())t.resetUsage(),this.sendStatisticsMessageToWorker(e)}setWorkerChoiceStrategyOptions(e){this.checkValidWorkerChoiceStrategyOptions(e),this.opts.workerChoiceStrategyOptions={...W,...e},this.workerChoiceStrategyContext.setOptions(this.opts.workerChoiceStrategyOptions)}enableTasksQueue(e,t){!0!==this.opts.enableTasksQueue||e||(this.unsetTaskStealing(),this.unsetTasksStealingOnBackPressure(),this.flushTasksQueues()),this.opts.enableTasksQueue=e,this.setTasksQueueOptions(t)}setTasksQueueOptions(e){!0===this.opts.enableTasksQueue?(A(e),this.opts.tasksQueueOptions=this.buildTasksQueueOptions(e),this.setTasksQueueSize(this.opts.tasksQueueOptions.size),!0===this.opts.tasksQueueOptions.taskStealing?(this.unsetTaskStealing(),this.setTaskStealing()):this.unsetTaskStealing(),!0===this.opts.tasksQueueOptions.tasksStealingOnBackPressure?(this.unsetTasksStealingOnBackPressure(),this.setTasksStealingOnBackPressure()):this.unsetTasksStealingOnBackPressure()):null!=this.opts.tasksQueueOptions&&delete this.opts.tasksQueueOptions}buildTasksQueueOptions(e){return{size:Math.pow(this.maxSize,2),concurrency:1,taskStealing:!0,tasksStealingOnBackPressure:!0,...e}}setTasksQueueSize(e){for(const t of this.workerNodes)t.tasksQueueBackPressureSize=e}setTaskStealing(){for(const[e]of this.workerNodes.entries())this.workerNodes[e].on("idleWorkerNode",this.handleIdleWorkerNodeEvent)}unsetTaskStealing(){for(const[e]of this.workerNodes.entries())this.workerNodes[e].off("idleWorkerNode",this.handleIdleWorkerNodeEvent)}setTasksStealingOnBackPressure(){for(const[e]of this.workerNodes.entries())this.workerNodes[e].on("backPressure",this.handleBackPressureEvent)}unsetTasksStealingOnBackPressure(){for(const[e]of this.workerNodes.entries())this.workerNodes[e].off("backPressure",this.handleBackPressureEvent)}get full(){return this.workerNodes.length>=this.maxSize}internalBusy(){return!0===this.opts.enableTasksQueue?-1===this.workerNodes.findIndex((e=>e.info.ready&&e.usage.tasks.executing<this.opts.tasksQueueOptions?.concurrency)):-1===this.workerNodes.findIndex((e=>e.info.ready&&0===e.usage.tasks.executing))}async sendTaskFunctionOperationToWorker(e,t){return await new Promise(((s,r)=>{const i=t=>{this.checkMessageWorkerId(t);const o=this.getWorkerInfo(e).id;null!=t.taskFunctionOperationStatus&&t.workerId===o&&(t.taskFunctionOperationStatus?s(!0):t.taskFunctionOperationStatus||r(new Error(`Task function operation '${t.taskFunctionOperation}' failed on worker ${t.workerId} with error: '${t.workerError?.message}'`)),this.deregisterWorkerMessageListener(this.getWorkerNodeKeyByWorkerId(t.workerId),i))};this.registerWorkerMessageListener(e,i),this.sendToWorker(e,t)}))}async sendTaskFunctionOperationToWorkers(e){return await new Promise(((t,s)=>{const r=new Array,i=e=>{if(this.checkMessageWorkerId(e),null!=e.taskFunctionOperationStatus&&(r.push(e),r.length===this.workerNodes.length)){if(r.every((e=>!0===e.taskFunctionOperationStatus)))t(!0);else if(r.some((e=>!1===e.taskFunctionOperationStatus))){const t=r.find((e=>!1===e.taskFunctionOperationStatus));s(new Error(`Task function operation '${e.taskFunctionOperation}' failed on worker ${t?.workerId} with error: '${t?.workerError?.message}'`))}this.deregisterWorkerMessageListener(this.getWorkerNodeKeyByWorkerId(e.workerId),i)}};for(const[t]of this.workerNodes.entries())this.registerWorkerMessageListener(t,i),this.sendToWorker(t,e)}))}hasTaskFunction(e){for(const t of this.workerNodes)if(Array.isArray(t.info.taskFunctionNames)&&t.info.taskFunctionNames.includes(e))return!0;return!1}async addTaskFunction(e,t){if("string"!=typeof e)throw new TypeError("name argument must be a string");if("string"==typeof e&&0===e.trim().length)throw new TypeError("name argument must not be an empty string");if("function"!=typeof t)throw new TypeError("fn argument must be a function");const s=await this.sendTaskFunctionOperationToWorkers({taskFunctionOperation:"add",taskFunctionName:e,taskFunction:t.toString()});return this.taskFunctions.set(e,t),s}async removeTaskFunction(e){if(!this.taskFunctions.has(e))throw new Error("Cannot remove a task function not handled on the pool side");const t=await this.sendTaskFunctionOperationToWorkers({taskFunctionOperation:"remove",taskFunctionName:e});return this.deleteTaskFunctionWorkerUsages(e),this.taskFunctions.delete(e),t}listTaskFunctionNames(){for(const e of this.workerNodes)if(Array.isArray(e.info.taskFunctionNames)&&e.info.taskFunctionNames.length>0)return e.info.taskFunctionNames;return[]}async setDefaultTaskFunction(e){return await this.sendTaskFunctionOperationToWorkers({taskFunctionOperation:"default",taskFunctionName:e})}deleteTaskFunctionWorkerUsages(e){for(const t of this.workerNodes)t.deleteTaskFunctionWorkerUsage(e)}shallExecuteTask(e){return 0===this.tasksQueueSize(e)&&this.workerNodes[e].usage.tasks.executing<this.opts.tasksQueueOptions?.concurrency}async execute(e,t,s){return await new Promise(((r,o)=>{if(!this.started)return void o(new Error("Cannot execute a task on not started pool"));if(this.destroying)return void o(new Error("Cannot execute a task on destroying pool"));if(null!=t&&"string"!=typeof t)return void o(new TypeError("name argument must be a string"));if(null!=t&&"string"==typeof t&&0===t.trim().length)return void o(new TypeError("name argument must not be an empty string"));if(null!=s&&!Array.isArray(s))return void o(new TypeError("transferList argument must be an array"));const n=l.now(),a=this.chooseWorkerNode(),u={name:t??f,data:e??{},transferList:s,timestamp:n,taskId:i()};this.promiseResponseMap.set(u.taskId,{resolve:r,reject:o,workerNodeKey:a}),!1===this.opts.enableTasksQueue||!0===this.opts.enableTasksQueue&&this.shallExecuteTask(a)?this.executeTask(a,u):this.enqueueTask(a,u)}))}start(){if(this.started)throw new Error("Cannot start an already started pool");if(this.starting)throw new Error("Cannot start an already starting pool");if(this.destroying)throw new Error("Cannot start a destroying pool");for(this.starting=!0;this.workerNodes.reduce(((e,t)=>t.info.dynamic?e:e+1),0)<this.numberOfWorkers;)this.createAndSetupWorkerNode();this.starting=!1,this.started=!0}async destroy(){if(!this.started)throw new Error("Cannot destroy an already destroyed pool");if(this.starting)throw new Error("Cannot destroy an starting pool");if(this.destroying)throw new Error("Cannot destroy an already destroying pool");this.destroying=!0,await Promise.all(this.workerNodes.map((async(e,t)=>{await this.destroyWorkerNode(t)}))),this.emitter?.emit(y.destroy,this.info),this.emitter?.emitDestroy(),this.emitter?.removeAllListeners(),this.readyEventEmitted=!1,this.destroying=!1,this.started=!1}async sendKillMessageToWorker(e){await new Promise(((t,s)=>{this.registerWorkerMessageListener(e,(e=>{this.checkMessageWorkerId(e),"success"===e.kill?t():"failure"===e.kill&&s(new Error(`Kill message handling failed on worker ${e.workerId}`))})),this.sendToWorker(e,{kill:!0})}))}setupHook(){}beforeTaskExecutionHook(e,t){if(null!=this.workerNodes[e]?.usage){const s=this.workerNodes[e].usage;++s.tasks.executing,this.updateWaitTimeWorkerUsage(s,t)}if(this.shallUpdateTaskFunctionWorkerUsage(e)&&null!=this.workerNodes[e].getTaskFunctionWorkerUsage(t.name)){const s=this.workerNodes[e].getTaskFunctionWorkerUsage(t.name);++s.tasks.executing,this.updateWaitTimeWorkerUsage(s,t)}}afterTaskExecutionHook(e,t){if(null!=this.workerNodes[e]?.usage){const s=this.workerNodes[e].usage;this.updateTaskStatisticsWorkerUsage(s,t),this.updateRunTimeWorkerUsage(s,t),this.updateEluWorkerUsage(s,t)}if(this.shallUpdateTaskFunctionWorkerUsage(e)&&null!=this.workerNodes[e].getTaskFunctionWorkerUsage(t.taskPerformance?.name)){const s=this.workerNodes[e].getTaskFunctionWorkerUsage(t.taskPerformance?.name);this.updateTaskStatisticsWorkerUsage(s,t),this.updateRunTimeWorkerUsage(s,t),this.updateEluWorkerUsage(s,t)}}shallUpdateTaskFunctionWorkerUsage(e){const t=this.getWorkerInfo(e);return null!=t&&Array.isArray(t.taskFunctionNames)&&t.taskFunctionNames.length>2}updateTaskStatisticsWorkerUsage(e,t){const s=e.tasks;null!=s.executing&&s.executing>0&&--s.executing,null==t.workerError?++s.executed:++s.failed}updateRunTimeWorkerUsage(e,t){null==t.workerError&&B(e.runTime,this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime,t.taskPerformance?.runTime??0)}updateWaitTimeWorkerUsage(e,t){const s=l.now(),r=s-(t.timestamp??s);B(e.waitTime,this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime,r)}updateEluWorkerUsage(e,t){if(null!=t.workerError)return;const s=this.workerChoiceStrategyContext.getTaskStatisticsRequirements().elu;B(e.elu.active,s,t.taskPerformance?.elu?.active??0),B(e.elu.idle,s,t.taskPerformance?.elu?.idle??0),s.aggregate&&null!=t.taskPerformance?.elu&&(null!=e.elu.utilization?e.elu.utilization=(e.elu.utilization+t.taskPerformance.elu.utilization)/2:e.elu.utilization=t.taskPerformance.elu.utilization)}chooseWorkerNode(){if(this.shallCreateDynamicWorker()){const e=this.createAndSetupDynamicWorkerNode();if(this.workerChoiceStrategyContext.getStrategyPolicy().dynamicWorkerUsage)return e}return this.workerChoiceStrategyContext.execute()}shallCreateDynamicWorker(){return this.type===p.dynamic&&!this.full&&this.internalBusy()}createAndSetupWorkerNode(){const e=this.createWorker();e.on("online",this.opts.onlineHandler??N),e.on("message",this.opts.messageHandler??N),e.on("error",this.opts.errorHandler??N),e.on("error",(t=>{const s=this.getWorkerNodeKeyByWorker(e);this.flagWorkerNodeAsNotReady(s);const r=this.getWorkerInfo(s);this.emitter?.emit(y.error,t),this.workerNodes[s].closeChannel(),!this.started||this.starting||this.destroying||!0!==this.opts.restartWorkerOnError||(r.dynamic?this.createAndSetupDynamicWorkerNode():this.createAndSetupWorkerNode()),this.started&&!0===this.opts.enableTasksQueue&&this.redistributeQueuedTasks(s)})),e.on("exit",this.opts.exitHandler??N),e.once("exit",(()=>{this.removeWorkerNode(e)}));const t=this.addWorkerNode(e);return this.afterWorkerNodeSetup(t),t}createAndSetupDynamicWorkerNode(){const e=this.createAndSetupWorkerNode();this.registerWorkerMessageListener(e,(e=>{this.checkMessageWorkerId(e);const t=this.getWorkerNodeKeyByWorkerId(e.workerId),s=this.workerNodes[t].usage;(C(D.HARD,e.kill)||C(D.SOFT,e.kill)&&(!1===this.opts.enableTasksQueue&&0===s.tasks.executing||!0===this.opts.enableTasksQueue&&0===s.tasks.executing&&0===this.tasksQueueSize(t)))&&(this.flagWorkerNodeAsNotReady(t),this.destroyWorkerNode(t).catch((e=>{this.emitter?.emit(y.error,e)})))}));const t=this.getWorkerInfo(e);if(this.sendToWorker(e,{checkActive:!0}),this.taskFunctions.size>0)for(const[t,s]of this.taskFunctions)this.sendTaskFunctionOperationToWorker(e,{taskFunctionOperation:"add",taskFunctionName:t,taskFunction:s.toString()}).catch((e=>{this.emitter?.emit(y.error,e)}));return t.dynamic=!0,(this.workerChoiceStrategyContext.getStrategyPolicy().dynamicWorkerReady||this.workerChoiceStrategyContext.getStrategyPolicy().dynamicWorkerUsage)&&(t.ready=!0),this.checkAndEmitDynamicWorkerCreationEvents(),e}afterWorkerNodeSetup(e){this.registerWorkerMessageListener(e,this.workerMessageListener.bind(this)),this.sendStartupMessageToWorker(e),this.sendStatisticsMessageToWorker(e),!0===this.opts.enableTasksQueue&&(!0===this.opts.tasksQueueOptions?.taskStealing&&this.workerNodes[e].on("idleWorkerNode",this.handleIdleWorkerNodeEvent),!0===this.opts.tasksQueueOptions?.tasksStealingOnBackPressure&&this.workerNodes[e].on("backPressure",this.handleBackPressureEvent))}sendStatisticsMessageToWorker(e){this.sendToWorker(e,{statistics:{runTime:this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.aggregate,elu:this.workerChoiceStrategyContext.getTaskStatisticsRequirements().elu.aggregate}})}redistributeQueuedTasks(e){for(;this.tasksQueueSize(e)>0;){const t=this.workerNodes.reduce(((e,t,s,r)=>t.info.ready&&t.usage.tasks.queued<r[e].usage.tasks.queued?s:e),0),s=this.dequeueTask(e);this.shallExecuteTask(t)?this.executeTask(t,s):this.enqueueTask(t,s)}}updateTaskStolenStatisticsWorkerUsage(e,t){const s=this.workerNodes[e];if(null!=s?.usage&&++s.usage.tasks.stolen,this.shallUpdateTaskFunctionWorkerUsage(e)&&null!=s.getTaskFunctionWorkerUsage(t)){++s.getTaskFunctionWorkerUsage(t).tasks.stolen}}updateTaskSequentiallyStolenStatisticsWorkerUsage(e){const t=this.workerNodes[e];null!=t?.usage&&++t.usage.tasks.sequentiallyStolen}updateTaskSequentiallyStolenStatisticsTaskFunctionWorkerUsage(e,t){const s=this.workerNodes[e];if(this.shallUpdateTaskFunctionWorkerUsage(e)&&null!=s.getTaskFunctionWorkerUsage(t)){++s.getTaskFunctionWorkerUsage(t).tasks.sequentiallyStolen}}resetTaskSequentiallyStolenStatisticsWorkerUsage(e){const t=this.workerNodes[e];null!=t?.usage&&(t.usage.tasks.sequentiallyStolen=0)}resetTaskSequentiallyStolenStatisticsTaskFunctionWorkerUsage(e,t){const s=this.workerNodes[e];if(this.shallUpdateTaskFunctionWorkerUsage(e)&&null!=s.getTaskFunctionWorkerUsage(t)){s.getTaskFunctionWorkerUsage(t).tasks.sequentiallyStolen=0}}handleIdleWorkerNodeEvent=(e,t)=>{const{workerNodeKey:s}=e;if(null==s)throw new Error("WorkerNode event detail workerNodeKey attribute must be defined");const r=this.workerNodes[s].usage.tasks;if(null!=t&&r.sequentiallyStolen>0&&(r.executing>0||this.tasksQueueSize(s)>0)){for(const e of this.workerNodes[s].info.taskFunctionNames)this.resetTaskSequentiallyStolenStatisticsTaskFunctionWorkerUsage(s,e);return void this.resetTaskSequentiallyStolenStatisticsWorkerUsage(s)}const i=this.workerNodeStealTask(s);if(this.shallUpdateTaskFunctionWorkerUsage(s)&&null!=i){const e=this.workerNodes[s].getTaskFunctionWorkerUsage(i.name)?.tasks;0===e.sequentiallyStolen||null!=t&&t.name===i.name&&e.sequentiallyStolen>0?this.updateTaskSequentiallyStolenStatisticsTaskFunctionWorkerUsage(s,i.name):this.resetTaskSequentiallyStolenStatisticsTaskFunctionWorkerUsage(s,i.name)}(async e=>{await new Promise((t=>{setTimeout(t,e)}))})(((e=0,t=100)=>{const s=Math.pow(2,e)*t;return s+.2*s*z()})(r.sequentiallyStolen)).then((()=>{this.handleIdleWorkerNodeEvent(e,i)})).catch(N)};workerNodeStealTask=e=>{const t=this.workerNodes.slice().sort(((e,t)=>t.usage.tasks.queued-e.usage.tasks.queued)).find(((t,s)=>t.info.ready&&s!==e&&t.usage.tasks.queued>0));if(null!=t){const s=t.popTask();return this.shallExecuteTask(e)?this.executeTask(e,s):this.enqueueTask(e,s),this.updateTaskSequentiallyStolenStatisticsWorkerUsage(e),this.updateTaskStolenStatisticsWorkerUsage(e,s.name),s}};handleBackPressureEvent=e=>{const{workerId:t}=e;if(this.opts.tasksQueueOptions?.size<=1)return;const s=this.workerNodes[this.getWorkerNodeKeyByWorkerId(t)],r=this.workerNodes.slice().sort(((e,t)=>e.usage.tasks.queued-t.usage.tasks.queued));for(const[e,i]of r.entries())if(s.usage.tasks.queued>0&&i.info.ready&&i.info.id!==t&&i.usage.tasks.queued<this.opts.tasksQueueOptions?.size-1){const t=s.popTask();this.shallExecuteTask(e)?this.executeTask(e,t):this.enqueueTask(e,t),this.updateTaskStolenStatisticsWorkerUsage(e,t.name)}};workerMessageListener(e){this.checkMessageWorkerId(e);const{workerId:t,ready:s,taskId:r,taskFunctionNames:i}=e;null!=s&&null!=i?this.handleWorkerReadyResponse(e):null!=r?this.handleTaskExecutionResponse(e):null!=i&&(this.getWorkerInfo(this.getWorkerNodeKeyByWorkerId(t)).taskFunctionNames=i)}handleWorkerReadyResponse(e){const{workerId:t,ready:s,taskFunctionNames:r}=e;if(!1===s)throw new Error(`Worker ${t} failed to initialize`);const i=this.getWorkerInfo(this.getWorkerNodeKeyByWorkerId(t));i.ready=s,i.taskFunctionNames=r,!this.readyEventEmitted&&this.ready&&(this.readyEventEmitted=!0,this.emitter?.emit(y.ready,this.info))}handleTaskExecutionResponse(e){const{workerId:t,taskId:s,workerError:r,data:i}=e,o=this.promiseResponseMap.get(s);if(null!=o){const{resolve:n,reject:a,workerNodeKey:u}=o;if(null!=r?(this.emitter?.emit(y.taskError,r),a(r.message)):n(i),this.afterTaskExecutionHook(u,e),this.workerChoiceStrategyContext.update(u),this.promiseResponseMap.delete(s),!0===this.opts.enableTasksQueue){const e=this.workerNodes[u].usage.tasks;this.tasksQueueSize(u)>0&&e.executing<this.opts.tasksQueueOptions?.concurrency&&this.executeTask(u,this.dequeueTask(u)),0===e.executing&&0===this.tasksQueueSize(u)&&0===e.sequentiallyStolen&&this.workerNodes[u].emit("idleWorkerNode",{workerId:t,workerNodeKey:u})}}}checkAndEmitTaskExecutionEvents(){this.busy&&this.emitter?.emit(y.busy,this.info)}checkAndEmitTaskQueuingEvents(){this.hasBackPressure()&&this.emitter?.emit(y.backPressure,this.info)}checkAndEmitDynamicWorkerCreationEvents(){this.type===p.dynamic&&this.full&&this.emitter?.emit(y.full,this.info)}getWorkerInfo(e){return this.workerNodes[e]?.info}addWorkerNode(e){const t=new te(e,this.opts.tasksQueueOptions?.size??Math.pow(this.maxSize,2));this.starting&&(t.info.ready=!0),this.workerNodes.push(t);const s=this.getWorkerNodeKeyByWorker(e);if(-1===s)throw new Error("Worker added not found in worker nodes");return s}removeWorkerNode(e){const t=this.getWorkerNodeKeyByWorker(e);-1!==t&&(this.workerNodes.splice(t,1),this.workerChoiceStrategyContext.remove(t))}flagWorkerNodeAsNotReady(e){this.getWorkerInfo(e).ready=!1}hasWorkerNodeBackPressure(e){return!0===this.opts.enableTasksQueue&&this.workerNodes[e].hasBackPressure()}hasBackPressure(){return!0===this.opts.enableTasksQueue&&-1===this.workerNodes.findIndex((e=>!e.hasBackPressure()))}executeTask(e,t){this.beforeTaskExecutionHook(e,t),this.sendToWorker(e,t,t.transferList),this.checkAndEmitTaskExecutionEvents()}enqueueTask(e,t){const s=this.workerNodes[e].enqueueTask(t);return this.checkAndEmitTaskQueuingEvents(),s}dequeueTask(e){return this.workerNodes[e].dequeueTask()}tasksQueueSize(e){return this.workerNodes[e].tasksQueueSize()}flushTasksQueue(e){for(;this.tasksQueueSize(e)>0;)this.executeTask(e,this.dequeueTask(e));this.workerNodes[e].clearTasksQueue()}flushTasksQueues(){for(const[e]of this.workerNodes.entries())this.flushTasksQueue(e)}}class re extends se{opts;constructor(e,t,s={}){super(e,t,s),this.opts=s}setupHook(){o.setupPrimary({...this.opts.settings,exec:this.filePath})}isMain(){return o.isPrimary}async destroyWorkerNode(e){this.flagWorkerNodeAsNotReady(e),this.flushTasksQueue(e);const t=this.workerNodes[e],s=t.worker,r=new Promise((e=>{s.once("exit",(()=>{e()}))}));s.once("disconnect",(()=>{s.kill()})),await this.sendKillMessageToWorker(e),t.removeAllListeners(),s.disconnect(),await r}sendToWorker(e,t){this.workerNodes[e].worker.send({...t,workerId:this.getWorkerInfo(e).id})}sendStartupMessageToWorker(e){this.sendToWorker(e,{ready:!1})}registerWorkerMessageListener(e,t){this.workerNodes[e].worker.on("message",t)}registerOnceWorkerMessageListener(e,t){this.workerNodes[e].worker.once("message",t)}deregisterWorkerMessageListener(e,t){this.workerNodes[e].worker.off("message",t)}createWorker(){return o.fork(this.opts.env)}get type(){return p.fixed}get worker(){return T.cluster}get busy(){return this.internalBusy()}}class ie extends re{max;constructor(e,t,s,r={}){super(e,s,r),this.max=t,U(this.numberOfWorkers,this.max)}get type(){return p.dynamic}get busy(){return this.full&&this.internalBusy()}}class oe extends se{opts;constructor(e,t,s={}){super(e,t,s),this.opts=s}isMain(){return h}async destroyWorkerNode(e){this.flagWorkerNodeAsNotReady(e),this.flushTasksQueue(e);const t=this.workerNodes[e],s=t.worker,r=new Promise((e=>{s.once("exit",(()=>{e()}))}));await this.sendKillMessageToWorker(e),t.closeChannel(),t.removeAllListeners(),await s.terminate(),await r}sendToWorker(e,t,s){this.workerNodes[e]?.messageChannel?.port1?.postMessage({...t,workerId:this.getWorkerInfo(e).id},s)}sendStartupMessageToWorker(e){const t=this.workerNodes[e],s=t.messageChannel.port2;t.worker.postMessage({ready:!1,workerId:this.getWorkerInfo(e).id,port:s},[s])}registerWorkerMessageListener(e,t){(this.workerNodes[e]?.messageChannel).port1.on("message",t)}registerOnceWorkerMessageListener(e,t){(this.workerNodes[e]?.messageChannel).port1.once("message",t)}deregisterWorkerMessageListener(e,t){(this.workerNodes[e]?.messageChannel).port1.off("message",t)}createWorker(){return new a(this.filePath,{env:k,...this.opts.workerOptions})}get type(){return p.fixed}get worker(){return T.thread}get busy(){return this.internalBusy()}}class ne extends oe{max;constructor(e,t,s,r={}){super(e,s,r),this.max=t,U(this.numberOfWorkers,this.max)}get type(){return p.dynamic}get busy(){return this.full&&this.internalBusy()}}const ae=(e,t)=>{if("string"!=typeof e)throw new TypeError("A taskFunctions parameter object key is not a string");if("string"==typeof e&&0===e.trim().length)throw new TypeError("A taskFunctions parameter object key is an empty string");if("function"!=typeof t)throw new TypeError("A taskFunctions parameter object value is not a function")},ue=e=>{if("string"!=typeof e)throw new TypeError("name parameter is not a string");if("string"==typeof e&&0===e.trim().length)throw new TypeError("name parameter is an empty string")},he=6e4,ke={killBehavior:D.SOFT,maxInactiveTime:he,killHandler:N};class de extends w{isMain;mainWorker;opts;taskFunctions;lastTaskTimestamp;statistics;activeInterval;constructor(e,t,s,r,i=ke){if(super(e),this.isMain=t,this.mainWorker=s,this.opts=i,null==this.isMain)throw new Error("isMain parameter is mandatory");this.checkTaskFunctions(r),this.checkWorkerOptions(this.opts),this.isMain||this.getMainWorker().on("message",this.handleReadyMessage.bind(this))}checkWorkerOptions(e){(e=>{if(null!=e&&!R(e))throw new TypeError("opts worker options parameter is not a plain object");if(null!=e?.killBehavior&&!Object.values(D).includes(e.killBehavior))throw new TypeError(`killBehavior option '${e.killBehavior}' is not valid`);if(null!=e?.maxInactiveTime&&!Number.isSafeInteger(e.maxInactiveTime))throw new TypeError("maxInactiveTime option is not an integer");if(null!=e?.maxInactiveTime&&e.maxInactiveTime<5)throw new TypeError("maxInactiveTime option is not a positive integer greater or equal than 5");if(null!=e?.killHandler&&"function"!=typeof e.killHandler)throw new TypeError("killHandler option is not a function")})(e),this.opts={...ke,...e}}checkTaskFunctions(e){if(null==e)throw new Error("taskFunctions parameter is mandatory");if(this.taskFunctions=new Map,"function"==typeof e){const t=e.bind(this);this.taskFunctions.set(f,t),this.taskFunctions.set("string"==typeof e.name&&e.name.trim().length>0?e.name:"fn1",t)}else{if(!R(e))throw new TypeError("taskFunctions parameter is not a function or a plain object");{let t=!0;for(const[s,r]of Object.entries(e)){ae(s,r);const e=r.bind(this);t&&(this.taskFunctions.set(f,e),t=!1),this.taskFunctions.set(s,e)}if(t)throw new Error("taskFunctions parameter object is empty")}}}hasTaskFunction(e){try{ue(e)}catch(e){return{status:!1,error:e}}return{status:this.taskFunctions.has(e)}}addTaskFunction(e,t){try{if(ue(e),e===f)throw new Error("Cannot add a task function with the default reserved name");if("function"!=typeof t)throw new TypeError("fn parameter is not a function");const s=t.bind(this);return this.taskFunctions.get(e)===this.taskFunctions.get(f)&&this.taskFunctions.set(f,s),this.taskFunctions.set(e,s),this.sendTaskFunctionNamesToMainWorker(),{status:!0}}catch(e){return{status:!1,error:e}}}removeTaskFunction(e){try{if(ue(e),e===f)throw new Error("Cannot remove the task function with the default reserved name");if(this.taskFunctions.get(e)===this.taskFunctions.get(f))throw new Error("Cannot remove the task function used as the default task function");const t=this.taskFunctions.delete(e);return this.sendTaskFunctionNamesToMainWorker(),{status:t}}catch(e){return{status:!1,error:e}}}listTaskFunctionNames(){const e=[...this.taskFunctions.keys()];let t=f;for(const[e,s]of this.taskFunctions)if(e!==f&&s===this.taskFunctions.get(f)){t=e;break}return[e[e.indexOf(f)],t,...e.filter((e=>e!==f&&e!==t))]}setDefaultTaskFunction(e){try{if(ue(e),e===f)throw new Error("Cannot set the default task function reserved name as the default task function");if(!this.taskFunctions.has(e))throw new Error("Cannot set the default task function to a non-existing task function");return this.taskFunctions.set(f,this.taskFunctions.get(e)),this.sendTaskFunctionNamesToMainWorker(),{status:!0}}catch(e){return{status:!1,error:e}}}messageListener(e){this.checkMessageWorkerId(e),null!=e.statistics?this.statistics=e.statistics:null!=e.checkActive?e.checkActive?this.startCheckActive():this.stopCheckActive():null!=e.taskFunctionOperation?this.handleTaskFunctionOperationMessage(e):null!=e.taskId&&null!=e.data?this.run(e):!0===e.kill&&this.handleKillMessage(e)}handleTaskFunctionOperationMessage(e){const{taskFunctionOperation:t,taskFunctionName:s,taskFunction:r}=e;let i;switch(t){case"add":i=this.addTaskFunction(s,new Function(`return ${r}`)());break;case"remove":i=this.removeTaskFunction(s);break;case"default":i=this.setDefaultTaskFunction(s);break;default:i={status:!1,error:new Error("Unknown task operation")}}this.sendToMainWorker({taskFunctionOperation:t,taskFunctionOperationStatus:i.status,taskFunctionName:s,...!i.status&&null!=i?.error&&{workerError:{name:s,message:this.handleError(i.error)}}})}handleKillMessage(e){if(this.stopCheckActive(),O(this.opts.killHandler))(this.opts.killHandler?.()).then((()=>{this.sendToMainWorker({kill:"success"})})).catch((()=>{this.sendToMainWorker({kill:"failure"})})).finally((()=>{this.emitDestroy()})).catch(N);else try{this.opts.killHandler?.(),this.sendToMainWorker({kill:"success"})}catch{this.sendToMainWorker({kill:"failure"})}finally{this.emitDestroy()}}checkMessageWorkerId(e){if(null==e.workerId)throw new Error("Message worker id is not set");if(e.workerId!==this.id)throw new Error(`Message worker id ${e.workerId} does not match the worker id ${this.id}`)}startCheckActive(){this.lastTaskTimestamp=l.now(),this.activeInterval=setInterval(this.checkActive.bind(this),(this.opts.maxInactiveTime??he)/2)}stopCheckActive(){null!=this.activeInterval&&(clearInterval(this.activeInterval),delete this.activeInterval)}checkActive(){l.now()-this.lastTaskTimestamp>(this.opts.maxInactiveTime??he)&&this.sendToMainWorker({kill:this.opts.killBehavior})}getMainWorker(){if(null==this.mainWorker)throw new Error("Main worker not set");return this.mainWorker}sendTaskFunctionNamesToMainWorker(){this.sendToMainWorker({taskFunctionNames:this.listTaskFunctionNames()})}handleError(e){return e instanceof Error?e.message:e}run(e){const{name:t,taskId:s,data:r}=e,i=t??f;if(!this.taskFunctions.has(i))return void this.sendToMainWorker({workerError:{name:t,message:`Task function '${t}' not found`,data:r},taskId:s});const o=this.taskFunctions.get(i);O(o)?this.runInAsyncScope(this.runAsync.bind(this),this,o,e):this.runInAsyncScope(this.runSync.bind(this),this,o,e)}runSync(e,t){const{name:s,taskId:r,data:i}=t;try{let t=this.beginTaskPerformance(s);const o=e(i);t=this.endTaskPerformance(t),this.sendToMainWorker({data:o,taskPerformance:t,taskId:r})}catch(e){this.sendToMainWorker({workerError:{name:s,message:this.handleError(e),data:i},taskId:r})}finally{this.updateLastTaskTimestamp()}}runAsync(e,t){const{name:s,taskId:r,data:i}=t;let o=this.beginTaskPerformance(s);e(i).then((e=>{o=this.endTaskPerformance(o),this.sendToMainWorker({data:e,taskPerformance:o,taskId:r})})).catch((e=>{this.sendToMainWorker({workerError:{name:s,message:this.handleError(e),data:i},taskId:r})})).finally((()=>{this.updateLastTaskTimestamp()})).catch(N)}beginTaskPerformance(e){return this.checkStatistics(),{name:e??f,timestamp:l.now(),...this.statistics.elu&&{elu:l.eventLoopUtilization()}}}endTaskPerformance(e){return this.checkStatistics(),{...e,...this.statistics.runTime&&{runTime:l.now()-e.timestamp},...this.statistics.elu&&{elu:l.eventLoopUtilization(e.elu)}}}checkStatistics(){if(null==this.statistics)throw new Error("Performance statistics computation requirements not set")}updateLastTaskTimestamp(){null!=this.activeInterval&&(this.lastTaskTimestamp=l.now())}}class ce extends de{constructor(e,t={}){super("poolifier:cluster-worker",o.isPrimary,o.worker,e,t)}handleReadyMessage(e){if(e.workerId===this.id&&!1===e.ready)try{this.getMainWorker().on("message",this.messageListener.bind(this)),this.sendToMainWorker({ready:!0,taskFunctionNames:this.listTaskFunctionNames()})}catch{this.sendToMainWorker({ready:!1,taskFunctionNames:this.listTaskFunctionNames()})}}get id(){return this.getMainWorker().id}sendToMainWorker(e){this.getMainWorker().send({...e,workerId:this.id})}}class le extends de{port;constructor(e,t={}){super("poolifier:thread-worker",h,d,e,t)}handleReadyMessage(e){if(e.workerId===this.id&&!1===e.ready&&null!=e.port)try{this.port=e.port,this.port.on("message",this.messageListener.bind(this)),this.sendToMainWorker({ready:!0,taskFunctionNames:this.listTaskFunctionNames()})}catch{this.sendToMainWorker({ready:!1,taskFunctionNames:this.listTaskFunctionNames()})}}handleKillMessage(e){super.handleKillMessage(e),this.port?.unref(),this.port?.close()}get id(){return c}sendToMainWorker(e){this.port.postMessage({...e,workerId:this.id})}handleError(e){return e}}export{ce as ClusterWorker,ie as DynamicClusterPool,ne as DynamicThreadPool,re as FixedClusterPool,oe as FixedThreadPool,D as KillBehaviors,P as Measurements,y as PoolEvents,p as PoolTypes,le as ThreadWorker,q as WorkerChoiceStrategies,T as WorkerTypes,x as availableParallelism};
2
2
  //# sourceMappingURL=index.mjs.map
package/lib/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/pools/pool.ts","../src/pools/worker.ts","../src/utils.ts","../src/pools/selection-strategies/selection-strategies-types.ts","../src/pools/utils.ts","../src/worker/worker-options.ts","../src/pools/selection-strategies/abstract-worker-choice-strategy.ts","../src/pools/selection-strategies/fair-share-worker-choice-strategy.ts","../src/pools/selection-strategies/interleaved-weighted-round-robin-worker-choice-strategy.ts","../src/pools/selection-strategies/least-busy-worker-choice-strategy.ts","../src/pools/selection-strategies/least-used-worker-choice-strategy.ts","../src/pools/selection-strategies/least-elu-worker-choice-strategy.ts","../src/pools/selection-strategies/round-robin-worker-choice-strategy.ts","../src/pools/selection-strategies/weighted-round-robin-worker-choice-strategy.ts","../src/pools/selection-strategies/worker-choice-strategy-context.ts","../src/circular-array.ts","../src/deque.ts","../src/pools/worker-node.ts","../src/pools/abstract-pool.ts","../src/pools/version.ts","../src/pools/cluster/fixed.ts","../src/pools/cluster/dynamic.ts","../src/pools/thread/fixed.ts","../src/pools/thread/dynamic.ts","../src/worker/utils.ts","../src/worker/abstract-worker.ts","../src/worker/cluster-worker.ts","../src/worker/thread-worker.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["PoolTypes","Object","freeze","fixed","dynamic","PoolEvents","ready","busy","full","destroy","error","taskError","backPressure","WorkerTypes","thread","cluster","DEFAULT_TASK_NAME","EMPTY_FUNCTION","DEFAULT_WORKER_CHOICE_STRATEGY_OPTIONS","retries","runTime","median","waitTime","elu","DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS","aggregate","average","availableParallelism","os","cpus","Array","isArray","length","getWorkerType","worker","ThreadWorker","ClusterWorker","getWorkerId","threadId","id","dataSet","reduce","accumulator","number","sortedDataSet","slice","sort","a","b","round","num","scale","rounder","Math","pow","Number","EPSILON","isPlainObject","obj","constructor","prototype","toString","call","isKillBehavior","killBehavior","value","isAsyncFunction","fn","name","secureRandom","webcrypto","getRandomValues","Uint32Array","min","args","minimum","Infinity","max","maximum","WorkerChoiceStrategies","ROUND_ROBIN","LEAST_USED","LEAST_BUSY","LEAST_ELU","FAIR_SHARE","WEIGHTED_ROUND_ROBIN","INTERLEAVED_WEIGHTED_ROUND_ROBIN","Measurements","checkDynamicPoolSize","TypeError","isSafeInteger","RangeError","checkValidWorkerChoiceStrategy","workerChoiceStrategy","values","includes","Error","checkValidTasksQueueOptions","tasksQueueOptions","concurrency","size","updateMeasurementStatistics","measurementStatistics","measurementRequirements","measurementValue","history","push","KillBehaviors","SOFT","HARD","AbstractWorkerChoiceStrategy","pool","opts","nextWorkerNodeKey","previousWorkerNodeKey","strategyPolicy","dynamicWorkerUsage","dynamicWorkerReady","taskStatisticsRequirements","this","choose","bind","setTaskStatisticsRequirements","toggleMedianMeasurementStatisticsRequirements","measurementStatisticsRequirements","toggleMedian","resetWorkerNodeKeyProperties","setOptions","isWorkerNodeReady","workerNodeKey","workerNodes","info","checkNextWorkerNodeReadiness","getWorkerNodeTaskRunTime","usage","getWorkerNodeTaskWaitTime","getWorkerNodeTaskElu","active","setPreviousWorkerNodeKey","computeDefaultWorkerWeight","cpusCycleTimeWeight","cpu","numberOfDigits","speed","FairShareWorkerChoiceStrategy","super","reset","workerNode","strategyData","virtualTaskEndTimestamp","update","computeWorkerNodeVirtualTaskEndTimestamp","fairShareNextWorkerNodeKey","remove","minWorkerNodeKey","getWorkerNodeVirtualTaskEndTimestamp","getWorkerNodeVirtualTaskStartTimestamp","workerNodeVirtualTaskStartTimestamp","measurement","now","performance","InterleavedWeightedRoundRobinWorkerChoiceStrategy","roundId","defaultWorkerWeight","roundWeights","workerNodeId","workerNodeVirtualTaskRunTime","getRoundWeights","roundIndex","workerWeight","weights","interleavedWeightedRoundRobinNextWorkerNodeId","Set","LeastBusyWorkerChoiceStrategy","leastBusyNextWorkerNodeKey","LeastUsedWorkerChoiceStrategy","leastUsedNextWorkerNodeKey","tasks","executed","executing","queued","LeastEluWorkerChoiceStrategy","leastEluNextWorkerNodeKey","RoundRobinWorkerChoiceStrategy","chosenWorkerNodeKey","roundRobinNextWorkerNodeKey","WeightedRoundRobinWorkerChoiceStrategy","weightedRoundRobinNextWorkerNodeKey","WorkerChoiceStrategyContext","workerChoiceStrategies","retriesCount","execute","Map","getStrategyPolicy","get","getTaskStatisticsRequirements","setWorkerChoiceStrategy","CircularArray","items","checkSize","arguments","splice","unshift","concat","concatenatedCircularArray","start","deleteCount","itemsRemoved","itemsOverflowing","resize","i","pop","empty","Node","data","next","prev","Deque","head","tail","maxSize","clear","node","incrementSize","shift","peekFirst","peekLast","Symbol","iterator","undefined","done","ret","backward","WorkerNode","EventEmitter","messageChannel","tasksQueueBackPressureSize","tasksQueue","onBackPressureStarted","taskFunctionsUsage","checkWorkerNodeArguments","initWorkerInfo","initWorkerUsage","type","MessageChannel","tasksQueueSize","enqueueTask","task","hasBackPressure","emit","workerId","unshiftTask","dequeueTask","popTask","clearTasksQueue","resetUsage","closeChannel","port1","unref","port2","close","getTaskFunctionWorkerUsage","taskFunctionNames","has","set","initTaskFunctionWorkerUsage","deleteTaskFunctionWorkerUsage","delete","getTasksQueueSize","getTasksQueueMaxSize","maxQueued","sequentiallyStolen","stolen","failed","idle","getTaskFunctionQueueSize","taskFunctionQueueSize","AbstractPool","numberOfWorkers","filePath","emitter","promiseResponseMap","workerChoiceStrategyContext","taskFunctions","started","starting","destroying","readyEventEmitted","startTimestamp","isMain","existsSync","checkFilePath","checkNumberOfWorkers","checkPoolOptions","chooseWorkerNode","executeTask","enableEvents","initializeEventEmitter","workerChoiceStrategyOptions","setupHook","startWorkers","checkValidWorkerChoiceStrategyOptions","restartWorkerOnError","enableTasksQueue","buildTasksQueueOptions","keys","EventEmitterAsyncResource","version","strategy","minSize","utilization","idleWorkerNodes","busyWorkerNodes","executedTasks","executingTasks","queuedTasks","maxQueuedTasks","stolenTasks","failedTasks","map","poolTimeCapacity","checkMessageWorkerId","message","getWorkerNodeKeyByWorkerId","getWorkerNodeKeyByWorker","findIndex","setWorkerChoiceStrategyOptions","entries","sendStatisticsMessageToWorker","enable","unsetTaskStealing","unsetTasksStealingOnBackPressure","flushTasksQueues","setTasksQueueOptions","setTasksQueueSize","taskStealing","setTaskStealing","tasksStealingOnBackPressure","setTasksStealingOnBackPressure","on","handleIdleWorkerNodeEvent","off","handleBackPressureEvent","internalBusy","sendTaskFunctionOperationToWorker","Promise","resolve","reject","taskFunctionOperationListener","getWorkerInfo","taskFunctionOperationStatus","taskFunctionOperation","workerError","deregisterWorkerMessageListener","registerWorkerMessageListener","sendToWorker","sendTaskFunctionOperationToWorkers","responsesReceived","taskFunctionOperationsListener","every","some","errorResponse","find","response","hasTaskFunction","addTaskFunction","trim","opResult","taskFunctionName","taskFunction","removeTaskFunction","deleteTaskFunctionWorkerUsages","listTaskFunctionNames","setDefaultTaskFunction","shallExecuteTask","transferList","timestamp","taskId","randomUUID","createAndSetupWorkerNode","all","async","_","destroyWorkerNode","emitDestroy","sendKillMessageToWorker","kill","beforeTaskExecutionHook","workerUsage","updateWaitTimeWorkerUsage","shallUpdateTaskFunctionWorkerUsage","taskFunctionWorkerUsage","afterTaskExecutionHook","updateTaskStatisticsWorkerUsage","updateRunTimeWorkerUsage","updateEluWorkerUsage","taskPerformance","workerInfo","workerTaskStatistics","taskWaitTime","eluTaskStatisticsRequirements","shallCreateDynamicWorker","createAndSetupDynamicWorkerNode","createWorker","onlineHandler","messageHandler","errorHandler","flagWorkerNodeAsNotReady","redistributeQueuedTasks","exitHandler","once","removeWorkerNode","addWorkerNode","afterWorkerNodeSetup","localWorkerNodeKey","catch","checkActive","checkAndEmitDynamicWorkerCreationEvents","workerMessageListener","sendStartupMessageToWorker","statistics","destinationWorkerNodeKey","updateTaskStolenStatisticsWorkerUsage","taskName","updateTaskSequentiallyStolenStatisticsWorkerUsage","updateTaskSequentiallyStolenStatisticsTaskFunctionWorkerUsage","resetTaskSequentiallyStolenStatisticsWorkerUsage","resetTaskSequentiallyStolenStatisticsTaskFunctionWorkerUsage","eventDetail","previousStolenTask","workerNodeTasksUsage","stolenTask","workerNodeStealTask","taskFunctionTasksWorkerUsage","ms","setTimeout","sleep","retryNumber","delayFactor","delay","exponentialDelay","then","sourceWorkerNode","workerNodeA","workerNodeB","sourceWorkerNodeKey","handleWorkerReadyResponse","handleTaskExecutionResponse","promiseResponse","checkAndEmitTaskExecutionEvents","checkAndEmitTaskQueuingEvents","hasWorkerNodeBackPressure","flushTasksQueue","FixedClusterPool","setupPrimary","settings","exec","isPrimary","waitWorkerExit","disconnect","send","listener","registerOnceWorkerMessageListener","fork","env","DynamicClusterPool","FixedThreadPool","numberOfThreads","isMainThread","terminate","postMessage","port","Worker","SHARE_ENV","workerOptions","DynamicThreadPool","checkValidTaskFunctionEntry","checkTaskFunctionName","DEFAULT_MAX_INACTIVE_TIME","DEFAULT_WORKER_OPTIONS","maxInactiveTime","killHandler","AbstractWorker","AsyncResource","mainWorker","lastTaskTimestamp","activeInterval","checkTaskFunctions","checkWorkerOptions","getMainWorker","handleReadyMessage","checkValidWorkerOptions","boundFn","firstEntry","status","sendTaskFunctionNamesToMainWorker","deleteStatus","names","defaultTaskFunctionName","indexOf","filter","messageListener","startCheckActive","stopCheckActive","handleTaskFunctionOperationMessage","run","handleKillMessage","Function","sendToMainWorker","handleError","_message","finally","setInterval","clearInterval","runInAsyncScope","runAsync","runSync","beginTaskPerformance","res","endTaskPerformance","updateLastTaskTimestamp","checkStatistics","eventLoopUtilization","parentPort"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/pools/pool.ts","../src/pools/worker.ts","../src/utils.ts","../src/pools/selection-strategies/selection-strategies-types.ts","../src/pools/utils.ts","../src/worker/worker-options.ts","../src/pools/selection-strategies/abstract-worker-choice-strategy.ts","../src/pools/selection-strategies/fair-share-worker-choice-strategy.ts","../src/pools/selection-strategies/interleaved-weighted-round-robin-worker-choice-strategy.ts","../src/pools/selection-strategies/least-busy-worker-choice-strategy.ts","../src/pools/selection-strategies/least-used-worker-choice-strategy.ts","../src/pools/selection-strategies/least-elu-worker-choice-strategy.ts","../src/pools/selection-strategies/round-robin-worker-choice-strategy.ts","../src/pools/selection-strategies/weighted-round-robin-worker-choice-strategy.ts","../src/pools/selection-strategies/worker-choice-strategy-context.ts","../src/circular-array.ts","../src/deque.ts","../src/pools/worker-node.ts","../src/pools/abstract-pool.ts","../src/pools/version.ts","../src/pools/cluster/fixed.ts","../src/pools/cluster/dynamic.ts","../src/pools/thread/fixed.ts","../src/pools/thread/dynamic.ts","../src/worker/utils.ts","../src/worker/abstract-worker.ts","../src/worker/cluster-worker.ts","../src/worker/thread-worker.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["PoolTypes","Object","freeze","fixed","dynamic","PoolEvents","ready","busy","full","destroy","error","taskError","backPressure","WorkerTypes","thread","cluster","DEFAULT_TASK_NAME","EMPTY_FUNCTION","DEFAULT_WORKER_CHOICE_STRATEGY_OPTIONS","retries","runTime","median","waitTime","elu","DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS","aggregate","average","availableParallelism","os","cpus","Array","isArray","length","getWorkerType","worker","ThreadWorker","ClusterWorker","getWorkerId","threadId","id","dataSet","reduce","accumulator","number","sortedDataSet","slice","sort","a","b","round","num","scale","rounder","Math","pow","Number","EPSILON","isPlainObject","obj","constructor","prototype","toString","call","isKillBehavior","killBehavior","value","isAsyncFunction","fn","name","secureRandom","webcrypto","getRandomValues","Uint32Array","min","args","minimum","Infinity","max","maximum","WorkerChoiceStrategies","ROUND_ROBIN","LEAST_USED","LEAST_BUSY","LEAST_ELU","FAIR_SHARE","WEIGHTED_ROUND_ROBIN","INTERLEAVED_WEIGHTED_ROUND_ROBIN","Measurements","checkDynamicPoolSize","TypeError","isSafeInteger","RangeError","checkValidWorkerChoiceStrategy","workerChoiceStrategy","values","includes","Error","checkValidTasksQueueOptions","tasksQueueOptions","concurrency","size","updateMeasurementStatistics","measurementStatistics","measurementRequirements","measurementValue","history","push","KillBehaviors","SOFT","HARD","AbstractWorkerChoiceStrategy","pool","opts","nextWorkerNodeKey","previousWorkerNodeKey","strategyPolicy","dynamicWorkerUsage","dynamicWorkerReady","taskStatisticsRequirements","this","choose","bind","setTaskStatisticsRequirements","toggleMedianMeasurementStatisticsRequirements","measurementStatisticsRequirements","toggleMedian","resetWorkerNodeKeyProperties","setOptions","isWorkerNodeReady","workerNodeKey","workerNodes","info","checkNextWorkerNodeReadiness","getWorkerNodeTaskRunTime","usage","getWorkerNodeTaskWaitTime","getWorkerNodeTaskElu","active","setPreviousWorkerNodeKey","computeDefaultWorkerWeight","cpusCycleTimeWeight","cpu","numberOfDigits","speed","FairShareWorkerChoiceStrategy","super","reset","workerNode","strategyData","virtualTaskEndTimestamp","update","computeWorkerNodeVirtualTaskEndTimestamp","fairShareNextWorkerNodeKey","remove","minWorkerNodeKey","getWorkerNodeVirtualTaskEndTimestamp","getWorkerNodeVirtualTaskStartTimestamp","workerNodeVirtualTaskStartTimestamp","measurement","now","performance","InterleavedWeightedRoundRobinWorkerChoiceStrategy","roundId","defaultWorkerWeight","roundWeights","workerNodeId","workerNodeVirtualTaskRunTime","getRoundWeights","roundIndex","workerWeight","weights","interleavedWeightedRoundRobinNextWorkerNodeId","Set","LeastBusyWorkerChoiceStrategy","leastBusyNextWorkerNodeKey","LeastUsedWorkerChoiceStrategy","leastUsedNextWorkerNodeKey","tasks","executed","executing","queued","LeastEluWorkerChoiceStrategy","leastEluNextWorkerNodeKey","RoundRobinWorkerChoiceStrategy","chosenWorkerNodeKey","roundRobinNextWorkerNodeKey","WeightedRoundRobinWorkerChoiceStrategy","weightedRoundRobinNextWorkerNodeKey","WorkerChoiceStrategyContext","workerChoiceStrategies","retriesCount","execute","Map","getStrategyPolicy","get","getTaskStatisticsRequirements","setWorkerChoiceStrategy","CircularArray","items","checkSize","arguments","splice","unshift","concat","concatenatedCircularArray","start","deleteCount","itemsRemoved","itemsOverflowing","resize","i","pop","empty","Node","data","next","prev","Deque","head","tail","maxSize","clear","node","incrementSize","shift","peekFirst","peekLast","Symbol","iterator","undefined","done","ret","backward","WorkerNode","EventEmitter","messageChannel","tasksQueueBackPressureSize","tasksQueue","onBackPressureStarted","taskFunctionsUsage","checkWorkerNodeArguments","initWorkerInfo","initWorkerUsage","type","MessageChannel","tasksQueueSize","enqueueTask","task","hasBackPressure","emit","workerId","unshiftTask","dequeueTask","popTask","clearTasksQueue","resetUsage","closeChannel","port1","unref","port2","close","getTaskFunctionWorkerUsage","taskFunctionNames","has","set","initTaskFunctionWorkerUsage","deleteTaskFunctionWorkerUsage","delete","getTasksQueueSize","getTasksQueueMaxSize","maxQueued","sequentiallyStolen","stolen","failed","idle","getTaskFunctionQueueSize","taskFunctionQueueSize","AbstractPool","numberOfWorkers","filePath","emitter","promiseResponseMap","workerChoiceStrategyContext","taskFunctions","started","starting","destroying","readyEventEmitted","startTimestamp","isMain","existsSync","checkFilePath","checkNumberOfWorkers","checkPoolOptions","chooseWorkerNode","executeTask","enableEvents","initializeEventEmitter","workerChoiceStrategyOptions","setupHook","startWorkers","checkValidWorkerChoiceStrategyOptions","restartWorkerOnError","enableTasksQueue","buildTasksQueueOptions","keys","EventEmitterAsyncResource","version","strategy","minSize","utilization","idleWorkerNodes","busyWorkerNodes","executedTasks","executingTasks","queuedTasks","maxQueuedTasks","stolenTasks","failedTasks","map","poolTimeCapacity","checkMessageWorkerId","message","getWorkerNodeKeyByWorkerId","getWorkerNodeKeyByWorker","findIndex","setWorkerChoiceStrategyOptions","entries","sendStatisticsMessageToWorker","enable","unsetTaskStealing","unsetTasksStealingOnBackPressure","flushTasksQueues","setTasksQueueOptions","setTasksQueueSize","taskStealing","setTaskStealing","tasksStealingOnBackPressure","setTasksStealingOnBackPressure","on","handleIdleWorkerNodeEvent","off","handleBackPressureEvent","internalBusy","sendTaskFunctionOperationToWorker","Promise","resolve","reject","taskFunctionOperationListener","getWorkerInfo","taskFunctionOperationStatus","taskFunctionOperation","workerError","deregisterWorkerMessageListener","registerWorkerMessageListener","sendToWorker","sendTaskFunctionOperationToWorkers","responsesReceived","taskFunctionOperationsListener","every","some","errorResponse","find","response","hasTaskFunction","addTaskFunction","trim","opResult","taskFunctionName","taskFunction","removeTaskFunction","deleteTaskFunctionWorkerUsages","listTaskFunctionNames","setDefaultTaskFunction","shallExecuteTask","transferList","timestamp","taskId","randomUUID","createAndSetupWorkerNode","all","async","_workerNode","destroyWorkerNode","emitDestroy","removeAllListeners","sendKillMessageToWorker","kill","beforeTaskExecutionHook","workerUsage","updateWaitTimeWorkerUsage","shallUpdateTaskFunctionWorkerUsage","taskFunctionWorkerUsage","afterTaskExecutionHook","updateTaskStatisticsWorkerUsage","updateRunTimeWorkerUsage","updateEluWorkerUsage","taskPerformance","workerInfo","workerTaskStatistics","taskWaitTime","eluTaskStatisticsRequirements","shallCreateDynamicWorker","createAndSetupDynamicWorkerNode","createWorker","onlineHandler","messageHandler","errorHandler","flagWorkerNodeAsNotReady","redistributeQueuedTasks","exitHandler","once","removeWorkerNode","addWorkerNode","afterWorkerNodeSetup","localWorkerNodeKey","catch","checkActive","checkAndEmitDynamicWorkerCreationEvents","workerMessageListener","sendStartupMessageToWorker","statistics","destinationWorkerNodeKey","updateTaskStolenStatisticsWorkerUsage","taskName","updateTaskSequentiallyStolenStatisticsWorkerUsage","updateTaskSequentiallyStolenStatisticsTaskFunctionWorkerUsage","resetTaskSequentiallyStolenStatisticsWorkerUsage","resetTaskSequentiallyStolenStatisticsTaskFunctionWorkerUsage","eventDetail","previousStolenTask","workerNodeTasksUsage","stolenTask","workerNodeStealTask","taskFunctionTasksWorkerUsage","ms","setTimeout","sleep","retryNumber","delayFactor","delay","exponentialDelay","then","sourceWorkerNode","workerNodeA","workerNodeB","sourceWorkerNodeKey","handleWorkerReadyResponse","handleTaskExecutionResponse","promiseResponse","checkAndEmitTaskExecutionEvents","checkAndEmitTaskQueuingEvents","hasWorkerNodeBackPressure","flushTasksQueue","FixedClusterPool","setupPrimary","settings","exec","isPrimary","waitWorkerExit","disconnect","send","listener","registerOnceWorkerMessageListener","fork","env","DynamicClusterPool","FixedThreadPool","numberOfThreads","isMainThread","terminate","postMessage","port","Worker","SHARE_ENV","workerOptions","DynamicThreadPool","checkValidTaskFunctionEntry","checkTaskFunctionName","DEFAULT_MAX_INACTIVE_TIME","DEFAULT_WORKER_OPTIONS","maxInactiveTime","killHandler","AbstractWorker","AsyncResource","mainWorker","lastTaskTimestamp","activeInterval","checkTaskFunctions","checkWorkerOptions","getMainWorker","handleReadyMessage","checkValidWorkerOptions","boundFn","firstEntry","status","sendTaskFunctionNamesToMainWorker","deleteStatus","names","defaultTaskFunctionName","indexOf","filter","messageListener","startCheckActive","stopCheckActive","handleTaskFunctionOperationMessage","run","handleKillMessage","Function","sendToMainWorker","handleError","_message","finally","setInterval","clearInterval","runInAsyncScope","runAsync","runSync","beginTaskPerformance","res","endTaskPerformance","updateLastTaskTimestamp","checkStatistics","eventLoopUtilization","parentPort"],"mappings":"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"}