///
///
import { EventEmitter } from 'events';
import createDebug from 'debug';
export { withTransfer } from './Transferable';
import { WorkerOptions } from 'worker_threads';
import { ThreadId } from './types/general';
import { WorkerThread } from './WorkerThread';
export declare const threadId: any;
export declare let debug: createDebug.Debugger;
export interface ThreadRequest {
resolve(thread: WorkerThread): void;
reject(error: Error): void;
}
export declare type ThreadPoolOptions = {
size?: number;
typecheck?: boolean;
workerOptions?: WorkerOptions;
startupTimeout?: number;
maxQueueSize?: number;
autoRefill?: boolean;
};
export interface BaseWorker {
pool: PoolInterface;
}
export interface PoolInterface extends EventEmitter {
terminate(): void;
refill(): void;
drain(shouldTerminate?: boolean): Promise;
size: number;
isTerminated: boolean;
threads: ReadonlyMap;
}
declare type FilterType = Pick;
declare type TypeWithMethods = Record any | Promise>;
export declare type AsyncMethod = (...param: any) => Promise;
declare type WrapReturnType = {
[Key in keyof Base]: Base[Key] extends AsyncMethod ? Base[Key] : (...a: Parameters) => Promise>;
};
declare type FilterAndWrap = WrapReturnType, Function>>;
export declare type WrapWorkerType = FilterAndWrap & BaseWorker & {
all: FilterAndWrap;
};
export declare function createThreadPool(workerPath: string, { size, workerOptions, startupTimeout, typecheck, maxQueueSize, autoRefill }?: ThreadPoolOptions): Promise, Function>>;
} & WrapReturnType, Function>>>;