import type { MessagePort, WorkerOptions } from 'node:worker_threads';
import { Worker } from 'node:worker_threads';
import type { URL } from 'node:url';
import type { LogWorkerMessage } from './worker-type.js';
import type { PendingPromise, PendingPromiseWithBody, WorkerMessage } from './types.js';
export interface WorkerInfo {
    readonly id: number;
    load: number;
    worker: Worker;
}
export declare class WorkerInfoImpl implements WorkerInfo {
    worker: Worker;
    readonly id: number;
    load: number;
    constructor(worker: Worker);
}
export interface WorkerFactory {
    (filename: string | URL, options?: WorkerOptions): Worker;
}
export declare class WorkerPool<T = unknown, R extends WorkerMessage = WorkerMessage> {
    coreSize: number;
    workerScript: string;
    workerData: Record<string, unknown>;
    maxLoad: number;
    factory: WorkerFactory;
    readonly workers: WorkerInfo[];
    readonly pendingTasks: PendingPromiseWithBody<R>[];
    readonly workingTasks: Record<number, PendingPromise>;
    readonly ready: Promise<void>;
    taskIdCounter: number;
    constructor(coreSize: number, workerScript: string, workerData: Record<string, unknown>, maxLoad?: number, factory?: WorkerFactory);
    workerOnError(info: WorkerInfo, err: Error): void;
    onMessage(info: WorkerInfo, message: WorkerMessage): void;
    takeLog(info: WorkerInfo, message: LogWorkerMessage): void;
    complete(info: WorkerInfo, message: WorkerMessage): void;
    submitTask(taskBody: T, transferList?: Array<ArrayBuffer | MessagePort>): Promise<R>;
    nextTask(): void;
    dispose(): Promise<number[]>;
}
//# sourceMappingURL=worker-pool.d.ts.map