import { InvokeHandlers } from './command';

interface WorkerrControllerConstructorBase<IContext extends object> {
    concurrency?: number;
    context: IContext;
}
interface WorkerrControllerConstructorWithFactory {
    workerType: 'instance';
    worker: (() => Worker);
}
export type WorkerControllerConstructor<IContext extends object> = WorkerrControllerConstructorBase<IContext> & (WorkerrControllerConstructorWithFactory);
interface WorkerrControllerEventMap {
    "ready": [];
    "error": [Error];
}
export declare class WorkerrController<IRequests extends InvokeHandlers<IContext>, IContext extends object> {
    private worker;
    private taskQueue;
    private concurrency;
    private context;
    private eventEmitter;
    private readyPromise;
    ready: boolean;
    private terminated;
    private constructor();
    static create<IRequests extends InvokeHandlers<IContext>, IContext extends object = IRequests extends InvokeHandlers<infer _IContext> ? _IContext : never>(options: WorkerControllerConstructor<IContext>): WorkerrController<IRequests, IContext>;
    private postMessage;
    awaitReady(): Promise<void>;
    updateContext(updater: (context: IContext) => IContext): Promise<void>;
    private _invoke;
    invoke<IRequestName extends keyof IRequests>(cmd: IRequestName, params: Parameters<IRequests[IRequestName]>[0], options?: {
        abortSignal?: AbortSignal;
        transfer?: Transferable[];
    }): Promise<ReturnType<IRequests[IRequestName]>>;
    addListener<K extends keyof WorkerrControllerEventMap>(eventName: K, listener: (...aras: WorkerrControllerEventMap[K]) => void): void;
    removeListener<K extends keyof WorkerrControllerEventMap>(eventName: K, listener: (...aras: WorkerrControllerEventMap[K]) => void): void;
    removeAllListeners(eventName?: keyof WorkerrControllerEventMap): void;
    terminate(): void;
}
export {};
