import { Worker } from "node:worker_threads"; interface TaskQueueItem { callbackId: number; data: TData; resolve: (value: TResult | PromiseLike) => void; reject: (reason?: any) => void; } interface PoolWorker extends Worker { currentCallback?: number; currentResolve?: (value: any) => void; currentReject?: (reason?: any) => void; } export class WorkerPool { private workerNumber: number; private workerPath: string; private workerPool: Set; private callbackIdCounter: number; private pendingTasks: number; private callbackQueue: TaskQueueItem[]; private stopped: boolean; private workerData: TWorkerData; constructor( workerNumber: number | undefined, workerPath: string, workerData?: TWorkerData, ); private initializeWorkers(): void; private createWorker(): void; private dispatchNextTask(): void; submit( data: TSubmitData, ): Promise; stop(): void; resume(): void; wait(): Promise; terminate(): Promise; } export interface WorkerPoolTaskMessage { id: number; data: TData; } export interface WorkerPoolResultMessage { callbackId: number; result?: TResult; error?: any; }