poolifier 3.0.5 → 3.0.7

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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/thread/fixed.ts","../src/worker/utils.ts","../src/worker/abstract-worker.ts","../src/worker/cluster-worker.ts","../src/pools/cluster/dynamic.ts","../src/pools/thread/dynamic.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","getWorkerType","worker","ThreadWorker","ClusterWorker","getWorkerId","threadId","id","dataSet","Array","isArray","length","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","cpus","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","EventTarget","messageChannel","tasksQueueBackPressureSize","tasksQueue","onBackPressureStarted","onEmptyQueueCount","taskFunctionsUsage","checkWorkerNodeArguments","initWorkerInfo","initWorkerUsage","type","MessageChannel","tasksQueueSize","enqueueTask","task","hasBackPressure","dispatchEvent","CustomEvent","detail","workerId","unshiftTask","dequeueTask","startOnEmptyQueue","catch","popTask","clearTasksQueue","resetUsage","closeChannel","port1","unref","port2","close","getTaskFunctionWorkerUsage","taskFunctionNames","has","set","initTaskFunctionWorkerUsage","deleteTaskFunctionWorkerUsage","delete","async","ms","Promise","resolve","setTimeout","sleep","retryNumber","delayFactor","delay","exponentialDelay","getTasksQueueSize","getTasksQueueMaxSize","maxQueued","stolen","failed","idle","getTaskFunctionQueueSize","taskFunctionQueueSize","AbstractPool","numberOfWorkers","filePath","emitter","promiseResponseMap","workerChoiceStrategyContext","taskFunctions","started","starting","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","addEventListener","handleEmptyQueueEvent","removeEventListener","handleBackPressureEvent","internalBusy","sendTaskFunctionOperationToWorker","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","_","destroyWorkerNode","emit","emitDestroy","sendKillMessageToWorker","kill","beforeTaskExecutionHook","workerUsage","updateWaitTimeWorkerUsage","shallUpdateTaskFunctionWorkerUsage","taskFunctionWorkerUsage","afterTaskExecutionHook","updateTaskStatisticsWorkerUsage","updateRunTimeWorkerUsage","updateEluWorkerUsage","taskPerformance","workerInfo","workerTaskStatistics","taskWaitTime","eluTaskStatisticsRequirements","shallCreateDynamicWorker","createAndSetupDynamicWorkerNode","createWorker","on","onlineHandler","messageHandler","errorHandler","flagWorkerNodeAsNotReady","redistributeQueuedTasks","exitHandler","once","removeWorkerNode","addWorkerNode","afterWorkerNodeSetup","localWorkerNodeKey","checkActive","checkAndEmitDynamicWorkerCreationEvents","workerMessageListener","sendStartupMessageToWorker","statistics","destinationWorkerNodeKey","updateTaskStolenStatisticsWorkerUsage","taskName","event","sourceWorkerNode","workerNodeA","workerNodeB","handleWorkerReadyResponse","handleTaskExecutionResponse","context","result","apply","emitPoolReadyEventOnce","promiseResponse","checkAndEmitTaskExecutionEvents","checkAndEmitTaskQueuingEvents","hasWorkerNodeBackPressure","flushTasksQueue","FixedClusterPool","setupPrimary","settings","exec","isPrimary","waitWorkerExit","disconnect","send","listener","registerOnceWorkerMessageListener","off","fork","env","FixedThreadPool","numberOfThreads","isMainThread","terminate","postMessage","port","Worker","SHARE_ENV","workerOptions","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","then","finally","setInterval","clearInterval","runInAsyncScope","runAsync","runSync","beginTaskPerformance","res","endTaskPerformance","updateLastTaskTimestamp","checkStatistics","eventLoopUtilization","parentPort","availableParallelism","os"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","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/thread/fixed.ts","../src/worker/utils.ts","../src/worker/abstract-worker.ts","../src/worker/cluster-worker.ts","../src/pools/cluster/dynamic.ts","../src/pools/thread/dynamic.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","getWorkerType","worker","ThreadWorker","ClusterWorker","getWorkerId","threadId","id","dataSet","Array","isArray","length","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","cpus","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","EventTarget","messageChannel","tasksQueueBackPressureSize","tasksQueue","onBackPressureStarted","onIdleWorkerNodeCount","taskFunctionsUsage","checkWorkerNodeArguments","initWorkerInfo","initWorkerUsage","type","MessageChannel","tasksQueueSize","enqueueTask","task","hasBackPressure","dispatchEvent","CustomEvent","detail","workerId","unshiftTask","dequeueTask","isIdle","startOnIdleWorkerNode","catch","popTask","clearTasksQueue","resetUsage","closeChannel","port1","unref","port2","close","getTaskFunctionWorkerUsage","taskFunctionNames","has","set","initTaskFunctionWorkerUsage","deleteTaskFunctionWorkerUsage","delete","async","ms","Promise","resolve","setTimeout","sleep","retryNumber","delayFactor","delay","exponentialDelay","getTasksQueueSize","getTasksQueueMaxSize","maxQueued","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","addEventListener","handleIdleWorkerNodeEvent","removeEventListener","handleBackPressureEvent","internalBusy","sendTaskFunctionOperationToWorker","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","_","destroyWorkerNode","emit","emitDestroy","sendKillMessageToWorker","kill","beforeTaskExecutionHook","workerUsage","updateWaitTimeWorkerUsage","shallUpdateTaskFunctionWorkerUsage","taskFunctionWorkerUsage","afterTaskExecutionHook","updateTaskStatisticsWorkerUsage","updateRunTimeWorkerUsage","updateEluWorkerUsage","taskPerformance","workerInfo","workerTaskStatistics","taskWaitTime","eluTaskStatisticsRequirements","shallCreateDynamicWorker","createAndSetupDynamicWorkerNode","createWorker","on","onlineHandler","messageHandler","errorHandler","flagWorkerNodeAsNotReady","redistributeQueuedTasks","exitHandler","once","removeWorkerNode","addWorkerNode","afterWorkerNodeSetup","localWorkerNodeKey","checkActive","checkAndEmitDynamicWorkerCreationEvents","workerMessageListener","sendStartupMessageToWorker","statistics","destinationWorkerNodeKey","updateTaskStolenStatisticsWorkerUsage","taskName","event","sourceWorkerNode","workerNodeA","workerNodeB","handleWorkerReadyResponse","handleTaskExecutionResponse","promiseResponse","checkAndEmitTaskExecutionEvents","checkAndEmitTaskQueuingEvents","hasWorkerNodeBackPressure","flushTasksQueue","FixedClusterPool","setupPrimary","settings","exec","isPrimary","waitWorkerExit","disconnect","send","listener","registerOnceWorkerMessageListener","off","fork","env","FixedThreadPool","numberOfThreads","isMainThread","terminate","postMessage","port","Worker","SHARE_ENV","workerOptions","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","then","finally","setInterval","clearInterval","runInAsyncScope","runAsync","runSync","beginTaskPerformance","res","endTaskPerformance","updateLastTaskTimestamp","checkStatistics","eventLoopUtilization","parentPort","availableParallelism","os"],"mappings":"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"}
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{EventEmitterAsyncResource as g}from"node:events";import{AsyncResource as m}from"node:async_hooks";const p=Object.freeze({fixed:"fixed",dynamic:"dynamic"}),w=Object.freeze({ready:"ready",busy:"busy",full:"full",destroy:"destroy",error:"error",taskError:"taskError",backPressure:"backPressure"}),y=Object.freeze({thread:"thread",cluster:"cluster"}),T="default",f=Object.freeze((()=>{})),N={retries:6,runTime:{median:!1},waitTime:{median:!1},elu:{median:!1}},W={aggregate:!1,average:!1,median:!1},S=()=>{let e=1;try{e=t.availableParallelism()}catch{const s=t.cpus();Array.isArray(s)&&s.length>0&&(e=s.length)}return e},x=e=>e instanceof a?y.thread:e instanceof n?y.cluster:void 0,E=e=>e instanceof a?e.threadId:e instanceof n?e.id:void 0,v=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,I=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},C=e=>"object"==typeof e&&null!==e&&e?.constructor===Object&&"[object Object]"===Object.prototype.toString.call(e),F=(e,t)=>t===e,R=e=>"function"==typeof e&&"AsyncFunction"===e.constructor.name,O=()=>r.getRandomValues(new Uint32Array(1))[0]/4294967296,z=(...e)=>e.reduce(((e,t)=>e<t?e:t),1/0),M=(...e)=>e.reduce(((e,t)=>e>t?e:t),-1/0),K=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"}),Q=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(K).includes(e))throw new Error(`Invalid worker choice strategy '${e}'`)},A=e=>{if(null!=e&&!C(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`)},U=(e,t,s)=>{t.aggregate&&(e.aggregate=(e.aggregate??0)+s,e.minimum=z(s,e.minimum??1/0),e.maximum=M(s,e.maximum??-1/0),(t.average||t.median)&&null!=s&&(e.history.push(s),t.average?e.average=v(e.history):null!=e.average&&delete e.average,t.median?e.median=I(e.history):null!=e.median&&delete e.median))},B=Object.freeze({SOFT:"SOFT",HARD:"HARD"});class D{pool;opts;nextWorkerNodeKey=0;previousWorkerNodeKey=0;strategyPolicy={dynamicWorkerUsage:!1,dynamicWorkerReady:!0};taskStatisticsRequirements={runTime:W,waitTime:W,elu:W};constructor(e,t=N){this.pool=e,this.opts=t,this.opts={...N,...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={...N,...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 L extends D{taskStatisticsRequirements={runTime:{aggregate:!0,average:!0,median:!1},waitTime:W,elu:{aggregate:!0,average:!0,median:!1}};constructor(e,t=N){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===Q.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 _ extends D{taskStatisticsRequirements={runTime:{aggregate:!0,average:!0,median:!1},waitTime:W,elu:W};roundId=0;defaultWorkerWeight;roundWeights;workerNodeId=0;workerNodeVirtualTaskRunTime=0;constructor(e,t=N){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 H extends D{taskStatisticsRequirements={runTime:{aggregate:!0,average:!1,median:!1},waitTime:{aggregate:!0,average:!1,median:!1},elu:W};constructor(e,t=N){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 j extends D{constructor(e,t=N){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 V extends D{taskStatisticsRequirements={runTime:W,waitTime:W,elu:{aggregate:!0,average:!1,median:!1}};constructor(e,t=N){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 $ extends D{constructor(e,t=N){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 G extends D{taskStatisticsRequirements={runTime:{aggregate:!0,average:!0,median:!1},waitTime:W,elu:W};defaultWorkerWeight;workerNodeVirtualTaskRunTime=0;constructor(e,t=N){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 Y{workerChoiceStrategy;opts;workerChoiceStrategies;retriesCount=0;constructor(e,t=K.ROUND_ROBIN,s=N){this.workerChoiceStrategy=t,this.opts=s,this.opts={...N,...s},this.execute=this.execute.bind(this),this.workerChoiceStrategies=new Map([[K.ROUND_ROBIN,new($.bind(this))(e,s)],[K.LEAST_USED,new(j.bind(this))(e,s)],[K.LEAST_BUSY,new(H.bind(this))(e,s)],[K.LEAST_ELU,new(V.bind(this))(e,s)],[K.FAIR_SHARE,new(L.bind(this))(e,s)],[K.WEIGHTED_ROUND_ROBIN,new(G.bind(this))(e,s)],[K.INTERLEAVED_WEIGHTED_ROUND_ROBIN,new(_.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={...N,...e};for(const t of this.workerChoiceStrategies.values())t.setOptions(e)}}class J 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 J(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 X{data;next;prev;constructor(e){this.data=e}}class Z{head;tail;size;maxSize;constructor(){this.clear()}push(e){const t=new X(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 X(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 ee extends EventTarget{worker;info;usage;strategyData;messageChannel;tasksQueueBackPressureSize;tasksQueue;onBackPressureStarted;onEmptyQueueCount;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===y.thread&&(this.messageChannel=new u),this.tasksQueueBackPressureSize=t,this.tasksQueue=new Z,this.onBackPressureStarted=!1,this.onEmptyQueueCount=0,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.dispatchEvent(new CustomEvent("backpressure",{detail:{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.dispatchEvent(new CustomEvent("backpressure",{detail:{workerId:this.info.id}})),this.onBackPressureStarted=!1),t}dequeueTask(){const e=this.tasksQueue.shift();return 0===this.tasksQueue.size&&0===this.onEmptyQueueCount&&this.startOnEmptyQueue().catch(f),e}popTask(){const e=this.tasksQueue.pop();return 0===this.tasksQueue.size&&0===this.onEmptyQueueCount&&this.startOnEmptyQueue().catch(f),e}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===T&&(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)}async startOnEmptyQueue(){this.onEmptyQueueCount>0&&(this.usage.tasks.executing>0||this.tasksQueue.size>0)?this.onEmptyQueueCount=0:(++this.onEmptyQueueCount,this.dispatchEvent(new CustomEvent("emptyqueue",{detail:{workerId:this.info.id}})),await(async e=>{await new Promise((t=>{setTimeout(t,e)}))})(((e=0,t=100)=>{const s=Math.pow(2,e)*t;return s+.2*s*O()})(this.onEmptyQueueCount)),await this.startOnEmptyQueue())}initWorkerInfo(e){return{id:E(e),type:x(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()},stolen:0,failed:0},runTime:{history:new J},waitTime:{history:new J},elu:{idle:{history:new J},active:{history:new J}}}}initTaskFunctionWorkerUsage(e){const t=()=>{let t=0;for(const s of this.tasksQueue)(s.name===T&&e===this.info.taskFunctionNames[1]||s.name!==T&&e===s.name)&&++t;return t};return{tasks:{executed:0,executing:0,get queued(){return t()},stolen:0,failed:0},runTime:{history:new J},waitTime:{history:new J},elu:{idle:{history:new J},active:{history:new J}}}}}class te{numberOfWorkers;filePath;opts;workerNodes=[];emitter;max;promiseResponseMap=new Map;workerChoiceStrategyContext;taskFunctions;started;starting;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 Y(this,this.opts.workerChoiceStrategy,this.opts.workerChoiceStrategyOptions),this.setupHook(),this.taskFunctions=new Map,this.started=!1,this.starting=!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(!C(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??K.ROUND_ROBIN,this.checkValidWorkerChoiceStrategyOptions(e.workerChoiceStrategyOptions),this.opts.workerChoiceStrategyOptions={...N,...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&&!C(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(Q).includes(e.measurement))throw new Error(`Invalid worker choice strategy options: invalid measurement '${e.measurement}'`)}initializeEventEmitter(){this.emitter=new g({name:`poolifier:${this.type}-${this.worker}-pool`})}get info(){return{version:"3.0.5",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(z(...this.workerNodes.map((e=>e.usage.runTime?.minimum??1/0)))),maximum:b(M(...this.workerNodes.map((e=>e.usage.runTime?.maximum??-1/0)))),...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.average&&{average:b(v(this.workerNodes.reduce(((e,t)=>e.concat(t.usage.runTime.history)),[])))},...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.median&&{median:b(I(this.workerNodes.reduce(((e,t)=>e.concat(t.usage.runTime.history)),[])))}}},...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime.aggregate&&{waitTime:{minimum:b(z(...this.workerNodes.map((e=>e.usage.waitTime?.minimum??1/0)))),maximum:b(M(...this.workerNodes.map((e=>e.usage.waitTime?.maximum??-1/0)))),...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime.average&&{average:b(v(this.workerNodes.reduce(((e,t)=>e.concat(t.usage.waitTime.history)),[])))},...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime.median&&{median:b(I(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={...N,...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].addEventListener("emptyqueue",this.handleEmptyQueueEvent)}unsetTaskStealing(){for(const[e]of this.workerNodes.entries())this.workerNodes[e].removeEventListener("emptyqueue",this.handleEmptyQueueEvent)}setTasksStealingOnBackPressure(){for(const[e]of this.workerNodes.entries())this.workerNodes[e].addEventListener("backpressure",this.handleBackPressureEvent)}unsetTasksStealingOnBackPressure(){for(const[e]of this.workerNodes.entries())this.workerNodes[e].removeEventListener("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(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??T,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(){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(){await Promise.all(this.workerNodes.map((async(e,t)=>{await this.destroyWorkerNode(t)}))),this.emitter?.emit(w.destroy,this.info),this.emitter?.emitDestroy(),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&&U(e.runTime,this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime,t.taskPerformance?.runTime??0)}updateWaitTimeWorkerUsage(e,t){const s=l.now(),r=s-(t.timestamp??s);U(e.waitTime,this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime,r)}updateEluWorkerUsage(e,t){if(null!=t.workerError)return;const s=this.workerChoiceStrategyContext.getTaskStatisticsRequirements().elu;U(e.elu.active,s,t.taskPerformance?.elu?.active??0),U(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??f),e.on("message",this.opts.messageHandler??f),e.on("error",this.opts.errorHandler??f),e.on("error",(t=>{const s=this.getWorkerNodeKeyByWorker(e);this.flagWorkerNodeAsNotReady(s);const r=this.getWorkerInfo(s);this.emitter?.emit(w.error,t),this.workerNodes[s].closeChannel(),this.started&&!this.starting&&!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??f),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;(F(B.HARD,e.kill)||F(B.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(w.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(w.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].addEventListener("emptyqueue",this.handleEmptyQueueEvent),!0===this.opts.tasksQueueOptions?.tasksStealingOnBackPressure&&this.workerNodes[e].addEventListener("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}}handleEmptyQueueEvent=e=>{const t=this.getWorkerNodeKeyByWorkerId(e.detail.workerId),s=this.workerNodes.slice().sort(((e,t)=>t.usage.tasks.queued-e.usage.tasks.queued)).find((t=>t.info.ready&&t.info.id!==e.detail.workerId&&t.usage.tasks.queued>0));if(null!=s){const e=s.popTask();this.shallExecuteTask(t)?this.executeTask(t,e):this.enqueueTask(t,e),this.updateTaskStolenStatisticsWorkerUsage(t,e.name)}};handleBackPressureEvent=e=>{if(this.opts.tasksQueueOptions?.size<=1)return;const t=this.workerNodes[this.getWorkerNodeKeyByWorkerId(e.detail.workerId)],s=this.workerNodes.slice().sort(((e,t)=>e.usage.tasks.queued-t.usage.tasks.queued));for(const[r,i]of s.entries())if(t.usage.tasks.queued>0&&i.info.ready&&i.info.id!==e.detail.workerId&&i.usage.tasks.queued<this.opts.tasksQueueOptions?.size-1){const e=t.popTask();this.shallExecuteTask(r)?this.executeTask(r,e):this.enqueueTask(r,e),this.updateTaskStolenStatisticsWorkerUsage(r,e.name)}};workerMessageListener(e){this.checkMessageWorkerId(e),null!=e.ready&&null!=e.taskFunctionNames?this.handleWorkerReadyResponse(e):null!=e.taskId?this.handleTaskExecutionResponse(e):null!=e.taskFunctionNames&&(this.getWorkerInfo(this.getWorkerNodeKeyByWorkerId(e.workerId)).taskFunctionNames=e.taskFunctionNames)}handleWorkerReadyResponse(e){if(!1===e.ready)throw new Error(`Worker ${e.workerId} failed to initialize`);const t=this.getWorkerInfo(this.getWorkerNodeKeyByWorkerId(e.workerId));if(t.ready=e.ready,t.taskFunctionNames=e.taskFunctionNames,this.ready){((e,t)=>{let s;return(...r)=>(null!=e&&(s=e.apply(t,r),e=t=void 0),s)})((()=>this.emitter?.emit(w.ready,this.info)),this)()}}handleTaskExecutionResponse(e){const{taskId:t,workerError:s,data:r}=e,i=this.promiseResponseMap.get(t);if(null!=i){null!=s?(this.emitter?.emit(w.taskError,s),i.reject(s.message)):i.resolve(r);const o=i.workerNodeKey;this.afterTaskExecutionHook(o,e),this.workerChoiceStrategyContext.update(o),this.promiseResponseMap.delete(t),!0===this.opts.enableTasksQueue&&this.tasksQueueSize(o)>0&&this.workerNodes[o].usage.tasks.executing<this.opts.tasksQueueOptions?.concurrency&&this.executeTask(o,this.dequeueTask(o))}}checkAndEmitTaskExecutionEvents(){this.busy&&this.emitter?.emit(w.busy,this.info)}checkAndEmitTaskQueuingEvents(){this.hasBackPressure()&&this.emitter?.emit(w.backPressure,this.info)}checkAndEmitDynamicWorkerCreationEvents(){this.type===p.dynamic&&this.full&&this.emitter?.emit(w.full,this.info)}getWorkerInfo(e){return this.workerNodes[e]?.info}addWorkerNode(e){const t=new ee(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 se extends te{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 y.cluster}get busy(){return this.internalBusy()}}class re extends se{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 ie extends te{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 y.thread}get busy(){return this.internalBusy()}}class oe extends ie{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 ne=(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")},ae=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")},ue=6e4,he={killBehavior:B.SOFT,maxInactiveTime:ue,killHandler:f};class ke extends m{isMain;mainWorker;opts;taskFunctions;lastTaskTimestamp;statistics;activeInterval;constructor(e,t,s,r,i=he){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&&!C(e))throw new TypeError("opts worker options parameter is not a plain object");if(null!=e?.killBehavior&&!Object.values(B).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={...he,...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(T,t),this.taskFunctions.set("string"==typeof e.name&&e.name.trim().length>0?e.name:"fn1",t)}else{if(!C(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)){ne(s,r);const e=r.bind(this);t&&(this.taskFunctions.set(T,e),t=!1),this.taskFunctions.set(s,e)}if(t)throw new Error("taskFunctions parameter object is empty")}}}hasTaskFunction(e){try{ae(e)}catch(e){return{status:!1,error:e}}return{status:this.taskFunctions.has(e)}}addTaskFunction(e,t){try{if(ae(e),e===T)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(T)&&this.taskFunctions.set(T,s),this.taskFunctions.set(e,s),this.sendTaskFunctionNamesToMainWorker(),{status:!0}}catch(e){return{status:!1,error:e}}}removeTaskFunction(e){try{if(ae(e),e===T)throw new Error("Cannot remove the task function with the default reserved name");if(this.taskFunctions.get(e)===this.taskFunctions.get(T))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=T;for(const[e,s]of this.taskFunctions)if(e!==T&&s===this.taskFunctions.get(T)){t=e;break}return[e[e.indexOf(T)],t,...e.filter((e=>e!==T&&e!==t))]}setDefaultTaskFunction(e){try{if(ae(e),e===T)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(T,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(),R(this.opts.killHandler))(this.opts.killHandler?.()).then((()=>{this.sendToMainWorker({kill:"success"})})).catch((()=>{this.sendToMainWorker({kill:"failure"})})).finally((()=>{this.emitDestroy()})).catch(f);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??ue)/2)}stopCheckActive(){null!=this.activeInterval&&(clearInterval(this.activeInterval),delete this.activeInterval)}checkActive(){l.now()-this.lastTaskTimestamp>(this.opts.maxInactiveTime??ue)&&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=this.taskFunctions.get(t??T);null!=i?R(i)?this.runInAsyncScope(this.runAsync.bind(this),this,i,e):this.runInAsyncScope(this.runSync.bind(this),this,i,e):this.sendToMainWorker({workerError:{name:t,message:`Task function '${t}' not found`,data:r},taskId:s})}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(f)}beginTaskPerformance(e){return this.checkStatistics(),{name:e??T,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 de extends ke{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 ce extends ke{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{de as ClusterWorker,re as DynamicClusterPool,oe as DynamicThreadPool,se as FixedClusterPool,ie as FixedThreadPool,B as KillBehaviors,Q as Measurements,w as PoolEvents,p as PoolTypes,ce as ThreadWorker,K as WorkerChoiceStrategies,y as WorkerTypes,S 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 h,isMainThread as u,SHARE_ENV as k,parentPort as d,threadId as c}from"node:worker_threads";import{performance as l}from"node:perf_hooks";import{EventEmitterAsyncResource as g}from"node:events";import{AsyncResource as m}from"node:async_hooks";const p=Object.freeze({fixed:"fixed",dynamic:"dynamic"}),w=Object.freeze({ready:"ready",busy:"busy",full:"full",destroy:"destroy",error:"error",taskError:"taskError",backPressure:"backPressure"}),y=Object.freeze({thread:"thread",cluster:"cluster"}),T="default",f=Object.freeze((()=>{})),N={retries:6,runTime:{median:!1},waitTime:{median:!1},elu:{median:!1}},W={aggregate:!1,average:!1,median:!1},S=()=>{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?y.thread:e instanceof n?y.cluster:void 0,x=e=>e instanceof a?e.threadId:e instanceof n?e.id:void 0,E=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,I=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},C=(e,t=2)=>{const s=Math.pow(10,t);return Math.round(e*s*(1+Number.EPSILON))/s},b=e=>"object"==typeof e&&null!==e&&e?.constructor===Object&&"[object Object]"===Object.prototype.toString.call(e),F=(e,t)=>t===e,R=e=>"function"==typeof e&&"AsyncFunction"===e.constructor.name,O=()=>r.getRandomValues(new Uint32Array(1))[0]/4294967296,z=(...e)=>e.reduce(((e,t)=>e<t?e:t),1/0),M=(...e)=>e.reduce(((e,t)=>e>t?e:t),-1/0),K=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"}),Q=(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")},A=e=>{if(null!=e&&!Object.values(K).includes(e))throw new Error(`Invalid worker choice strategy '${e}'`)},q=e=>{if(null!=e&&!b(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`)},U=(e,t,s)=>{t.aggregate&&(e.aggregate=(e.aggregate??0)+s,e.minimum=z(s,e.minimum??1/0),e.maximum=M(s,e.maximum??-1/0),(t.average||t.median)&&null!=s&&(e.history.push(s),t.average?e.average=E(e.history):null!=e.average&&delete e.average,t.median?e.median=I(e.history):null!=e.median&&delete e.median))},B=Object.freeze({SOFT:"SOFT",HARD:"HARD"});class D{pool;opts;nextWorkerNodeKey=0;previousWorkerNodeKey=0;strategyPolicy={dynamicWorkerUsage:!1,dynamicWorkerReady:!0};taskStatisticsRequirements={runTime:W,waitTime:W,elu:W};constructor(e,t=N){this.pool=e,this.opts=t,this.opts={...N,...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={...N,...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 L extends D{taskStatisticsRequirements={runTime:{aggregate:!0,average:!0,median:!1},waitTime:W,elu:{aggregate:!0,average:!0,median:!1}};constructor(e,t=N){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 _ extends D{taskStatisticsRequirements={runTime:{aggregate:!0,average:!0,median:!1},waitTime:W,elu:W};roundId=0;defaultWorkerWeight;roundWeights;workerNodeId=0;workerNodeVirtualTaskRunTime=0;constructor(e,t=N){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 H extends D{taskStatisticsRequirements={runTime:{aggregate:!0,average:!1,median:!1},waitTime:{aggregate:!0,average:!1,median:!1},elu:W};constructor(e,t=N){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 j extends D{constructor(e,t=N){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 V extends D{taskStatisticsRequirements={runTime:W,waitTime:W,elu:{aggregate:!0,average:!1,median:!1}};constructor(e,t=N){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 $ extends D{constructor(e,t=N){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 G extends D{taskStatisticsRequirements={runTime:{aggregate:!0,average:!0,median:!1},waitTime:W,elu:W};defaultWorkerWeight;workerNodeVirtualTaskRunTime=0;constructor(e,t=N){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 Y{workerChoiceStrategy;opts;workerChoiceStrategies;retriesCount=0;constructor(e,t=K.ROUND_ROBIN,s=N){this.workerChoiceStrategy=t,this.opts=s,this.opts={...N,...s},this.execute=this.execute.bind(this),this.workerChoiceStrategies=new Map([[K.ROUND_ROBIN,new($.bind(this))(e,s)],[K.LEAST_USED,new(j.bind(this))(e,s)],[K.LEAST_BUSY,new(H.bind(this))(e,s)],[K.LEAST_ELU,new(V.bind(this))(e,s)],[K.FAIR_SHARE,new(L.bind(this))(e,s)],[K.WEIGHTED_ROUND_ROBIN,new(G.bind(this))(e,s)],[K.INTERLEAVED_WEIGHTED_ROUND_ROBIN,new(_.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={...N,...e};for(const t of this.workerChoiceStrategies.values())t.setOptions(e)}}class J 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 J(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 X{data;next;prev;constructor(e){this.data=e}}class Z{head;tail;size;maxSize;constructor(){this.clear()}push(e){const t=new X(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 X(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 ee extends EventTarget{worker;info;usage;strategyData;messageChannel;tasksQueueBackPressureSize;tasksQueue;onBackPressureStarted;onIdleWorkerNodeCount;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===y.thread&&(this.messageChannel=new h),this.tasksQueueBackPressureSize=t,this.tasksQueue=new Z,this.onBackPressureStarted=!1,this.onIdleWorkerNodeCount=0,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.dispatchEvent(new CustomEvent("backPressure",{detail:{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.dispatchEvent(new CustomEvent("backPressure",{detail:{workerId:this.info.id}})),this.onBackPressureStarted=!1),t}dequeueTask(){const e=this.tasksQueue.shift();return this.isIdle()&&0===this.onIdleWorkerNodeCount&&this.startOnIdleWorkerNode().catch(f),e}popTask(){const e=this.tasksQueue.pop();return this.isIdle()&&0===this.onIdleWorkerNodeCount&&this.startOnIdleWorkerNode().catch(f),e}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===T&&(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)}async startOnIdleWorkerNode(){this.onIdleWorkerNodeCount>0&&(this.usage.tasks.executing>0||this.tasksQueue.size>0)?this.onIdleWorkerNodeCount=0:(++this.onIdleWorkerNodeCount,this.dispatchEvent(new CustomEvent("idleWorkerNode",{detail:{workerId:this.info.id}})),await(async e=>{await new Promise((t=>{setTimeout(t,e)}))})(((e=0,t=100)=>{const s=Math.pow(2,e)*t;return s+.2*s*O()})(this.onIdleWorkerNodeCount)),await this.startOnIdleWorkerNode())}isIdle(){return 0===this.usage.tasks.executing&&0===this.tasksQueue.size}initWorkerInfo(e){return{id:x(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()},stolen:0,failed:0},runTime:{history:new J},waitTime:{history:new J},elu:{idle:{history:new J},active:{history:new J}}}}initTaskFunctionWorkerUsage(e){const t=()=>{let t=0;for(const s of this.tasksQueue)(s.name===T&&e===this.info.taskFunctionNames[1]||s.name!==T&&e===s.name)&&++t;return t};return{tasks:{executed:0,executing:0,get queued(){return t()},stolen:0,failed:0},runTime:{history:new J},waitTime:{history:new J},elu:{idle:{history:new J},active:{history:new J}}}}}class te{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 Y(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(!b(e))throw new TypeError("Invalid pool options: must be a plain object");this.opts.startWorkers=e.startWorkers??!0,A(e.workerChoiceStrategy),this.opts.workerChoiceStrategy=e.workerChoiceStrategy??K.ROUND_ROBIN,this.checkValidWorkerChoiceStrategyOptions(e.workerChoiceStrategyOptions),this.opts.workerChoiceStrategyOptions={...N,...e.workerChoiceStrategyOptions},this.opts.restartWorkerOnError=e.restartWorkerOnError??!0,this.opts.enableEvents=e.enableEvents??!0,this.opts.enableTasksQueue=e.enableTasksQueue??!1,this.opts.enableTasksQueue&&(q(e.tasksQueueOptions),this.opts.tasksQueueOptions=this.buildTasksQueueOptions(e.tasksQueueOptions))}checkValidWorkerChoiceStrategyOptions(e){if(null!=e&&!b(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 g({name:`poolifier:${this.type}-${this.worker}-pool`})}get info(){return{version:"3.0.7",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:C(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:C(z(...this.workerNodes.map((e=>e.usage.runTime?.minimum??1/0)))),maximum:C(M(...this.workerNodes.map((e=>e.usage.runTime?.maximum??-1/0)))),...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.average&&{average:C(E(this.workerNodes.reduce(((e,t)=>e.concat(t.usage.runTime.history)),[])))},...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime.median&&{median:C(I(this.workerNodes.reduce(((e,t)=>e.concat(t.usage.runTime.history)),[])))}}},...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime.aggregate&&{waitTime:{minimum:C(z(...this.workerNodes.map((e=>e.usage.waitTime?.minimum??1/0)))),maximum:C(M(...this.workerNodes.map((e=>e.usage.waitTime?.maximum??-1/0)))),...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime.average&&{average:C(E(this.workerNodes.reduce(((e,t)=>e.concat(t.usage.waitTime.history)),[])))},...this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime.median&&{median:C(I(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){A(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={...N,...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?(q(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].addEventListener("idleWorkerNode",this.handleIdleWorkerNodeEvent)}unsetTaskStealing(){for(const[e]of this.workerNodes.entries())this.workerNodes[e].removeEventListener("idleWorkerNode",this.handleIdleWorkerNodeEvent)}setTasksStealingOnBackPressure(){for(const[e]of this.workerNodes.entries())this.workerNodes[e].addEventListener("backPressure",this.handleBackPressureEvent)}unsetTasksStealingOnBackPressure(){for(const[e]of this.workerNodes.entries())this.workerNodes[e].removeEventListener("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(),h={name:t??T,data:e??{},transferList:s,timestamp:n,taskId:i()};this.promiseResponseMap.set(h.taskId,{resolve:r,reject:o,workerNodeKey:a}),!1===this.opts.enableTasksQueue||!0===this.opts.enableTasksQueue&&this.shallExecuteTask(a)?this.executeTask(a,h):this.enqueueTask(a,h)}))}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(w.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&&U(e.runTime,this.workerChoiceStrategyContext.getTaskStatisticsRequirements().runTime,t.taskPerformance?.runTime??0)}updateWaitTimeWorkerUsage(e,t){const s=l.now(),r=s-(t.timestamp??s);U(e.waitTime,this.workerChoiceStrategyContext.getTaskStatisticsRequirements().waitTime,r)}updateEluWorkerUsage(e,t){if(null!=t.workerError)return;const s=this.workerChoiceStrategyContext.getTaskStatisticsRequirements().elu;U(e.elu.active,s,t.taskPerformance?.elu?.active??0),U(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??f),e.on("message",this.opts.messageHandler??f),e.on("error",this.opts.errorHandler??f),e.on("error",(t=>{const s=this.getWorkerNodeKeyByWorker(e);this.flagWorkerNodeAsNotReady(s);const r=this.getWorkerInfo(s);this.emitter?.emit(w.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??f),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;(F(B.HARD,e.kill)||F(B.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(w.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(w.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].addEventListener("idleWorkerNode",this.handleIdleWorkerNodeEvent),!0===this.opts.tasksQueueOptions?.tasksStealingOnBackPressure&&this.workerNodes[e].addEventListener("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}}handleIdleWorkerNodeEvent=e=>{const{workerId:t}=e.detail,s=this.getWorkerNodeKeyByWorkerId(t),r=this.workerNodes.slice().sort(((e,t)=>t.usage.tasks.queued-e.usage.tasks.queued)).find((e=>e.info.ready&&e.info.id!==t&&e.usage.tasks.queued>0));if(null!=r){const e=r.popTask();this.shallExecuteTask(s)?this.executeTask(s,e):this.enqueueTask(s,e),this.updateTaskStolenStatisticsWorkerUsage(s,e.name)}};handleBackPressureEvent=e=>{const{workerId:t}=e.detail;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),null!=e.ready&&null!=e.taskFunctionNames?this.handleWorkerReadyResponse(e):null!=e.taskId?this.handleTaskExecutionResponse(e):null!=e.taskFunctionNames&&(this.getWorkerInfo(this.getWorkerNodeKeyByWorkerId(e.workerId)).taskFunctionNames=e.taskFunctionNames)}handleWorkerReadyResponse(e){if(!1===e.ready)throw new Error(`Worker ${e.workerId} failed to initialize`);const t=this.getWorkerInfo(this.getWorkerNodeKeyByWorkerId(e.workerId));t.ready=e.ready,t.taskFunctionNames=e.taskFunctionNames,!this.readyEventEmitted&&this.ready&&(this.readyEventEmitted=!0,this.emitter?.emit(w.ready,this.info))}handleTaskExecutionResponse(e){const{taskId:t,workerError:s,data:r}=e,i=this.promiseResponseMap.get(t);if(null!=i){const{resolve:o,reject:n,workerNodeKey:a}=i;null!=s?(this.emitter?.emit(w.taskError,s),n(s.message)):o(r),this.afterTaskExecutionHook(a,e),this.workerChoiceStrategyContext.update(a),this.promiseResponseMap.delete(t),!0===this.opts.enableTasksQueue&&this.tasksQueueSize(a)>0&&this.workerNodes[a].usage.tasks.executing<this.opts.tasksQueueOptions?.concurrency&&this.executeTask(a,this.dequeueTask(a))}}checkAndEmitTaskExecutionEvents(){this.busy&&this.emitter?.emit(w.busy,this.info)}checkAndEmitTaskQueuingEvents(){this.hasBackPressure()&&this.emitter?.emit(w.backPressure,this.info)}checkAndEmitDynamicWorkerCreationEvents(){this.type===p.dynamic&&this.full&&this.emitter?.emit(w.full,this.info)}getWorkerInfo(e){return this.workerNodes[e]?.info}addWorkerNode(e){const t=new ee(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 se extends te{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 y.cluster}get busy(){return this.internalBusy()}}class re extends se{max;constructor(e,t,s,r={}){super(e,s,r),this.max=t,Q(this.numberOfWorkers,this.max)}get type(){return p.dynamic}get busy(){return this.full&&this.internalBusy()}}class ie extends te{opts;constructor(e,t,s={}){super(e,t,s),this.opts=s}isMain(){return u}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 y.thread}get busy(){return this.internalBusy()}}class oe extends ie{max;constructor(e,t,s,r={}){super(e,s,r),this.max=t,Q(this.numberOfWorkers,this.max)}get type(){return p.dynamic}get busy(){return this.full&&this.internalBusy()}}const ne=(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")},ae=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,ue={killBehavior:B.SOFT,maxInactiveTime:he,killHandler:f};class ke extends m{isMain;mainWorker;opts;taskFunctions;lastTaskTimestamp;statistics;activeInterval;constructor(e,t,s,r,i=ue){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&&!b(e))throw new TypeError("opts worker options parameter is not a plain object");if(null!=e?.killBehavior&&!Object.values(B).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={...ue,...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(T,t),this.taskFunctions.set("string"==typeof e.name&&e.name.trim().length>0?e.name:"fn1",t)}else{if(!b(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)){ne(s,r);const e=r.bind(this);t&&(this.taskFunctions.set(T,e),t=!1),this.taskFunctions.set(s,e)}if(t)throw new Error("taskFunctions parameter object is empty")}}}hasTaskFunction(e){try{ae(e)}catch(e){return{status:!1,error:e}}return{status:this.taskFunctions.has(e)}}addTaskFunction(e,t){try{if(ae(e),e===T)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(T)&&this.taskFunctions.set(T,s),this.taskFunctions.set(e,s),this.sendTaskFunctionNamesToMainWorker(),{status:!0}}catch(e){return{status:!1,error:e}}}removeTaskFunction(e){try{if(ae(e),e===T)throw new Error("Cannot remove the task function with the default reserved name");if(this.taskFunctions.get(e)===this.taskFunctions.get(T))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=T;for(const[e,s]of this.taskFunctions)if(e!==T&&s===this.taskFunctions.get(T)){t=e;break}return[e[e.indexOf(T)],t,...e.filter((e=>e!==T&&e!==t))]}setDefaultTaskFunction(e){try{if(ae(e),e===T)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(T,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(),R(this.opts.killHandler))(this.opts.killHandler?.()).then((()=>{this.sendToMainWorker({kill:"success"})})).catch((()=>{this.sendToMainWorker({kill:"failure"})})).finally((()=>{this.emitDestroy()})).catch(f);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??T;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);R(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(f)}beginTaskPerformance(e){return this.checkStatistics(),{name:e??T,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 de extends ke{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 ce extends ke{port;constructor(e,t={}){super("poolifier:thread-worker",u,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{de as ClusterWorker,re as DynamicClusterPool,oe as DynamicThreadPool,se as FixedClusterPool,ie as FixedThreadPool,B as KillBehaviors,P as Measurements,w as PoolEvents,p as PoolTypes,ce as ThreadWorker,K as WorkerChoiceStrategies,y as WorkerTypes,S as availableParallelism};
2
2
  //# sourceMappingURL=index.mjs.map