/// <reference types="node" />
import { WorkerOptions } from "node:worker_threads";
type PoolOp = {
    external: (...args: any) => any;
    internal: (...args: any) => any;
};
type PoolOperationConfig = PoolOp | ((...args: any) => any);
type InternalOperation<T extends PoolOperationConfig> = T extends PoolOp ? T["internal"] : T;
type ExternalOperation<T extends PoolOperationConfig> = T extends PoolOp ? T["external"] : T;
export declare const withWorkerThreads: <PoolOperations extends {
    [operation: string]: PoolOperationConfig;
}>(taskCaller: { [Property in keyof PoolOperations]: (task: (args: Parameters<InternalOperation<PoolOperations[Property]>>, transferList?: Transferable[]) => ReturnType<InternalOperation<PoolOperations[Property]>>) => (...args: Parameters<ExternalOperation<PoolOperations[Property]>>) => ReturnType<ExternalOperation<PoolOperations[Property]>>; }) => (path: string, options?: {
    concurrency?: number;
    maxUtilization?: number;
    workerOptions?: WorkerOptions;
} | undefined) => <T>(fn: (pool?: { [Property_1 in keyof PoolOperations]: ExternalOperation<PoolOperations[Property_1]>; } | undefined) => T) => Promise<Awaited<T>>;
export declare const implementWorker: <PoolOperations extends {
    [operation: string]: PoolOperationConfig;
}>(operations: { [Property in keyof PoolOperations]: (...args: Parameters<InternalOperation<PoolOperations[Property]>>) => ReturnType<InternalOperation<PoolOperations[Property]>> | Promise<{
    result: Awaited<ReturnType<InternalOperation<PoolOperations[Property]>>>;
    transfer?: Transferable[];
}>; }) => void;
export {};
