type ErrorCallback = (a: Error) => void;
type QueryCallback = (a: any[], b: number | undefined) => any;
declare abstract class PWBBase {
    _callbacks: Map<number, (a: Error | null, b: any) => void>;
    _queryCallback: QueryCallback;
    _workerType: "SharedWorker" | "Worker" | undefined;
    constructor();
    register(cb: QueryCallback): void;
    abstract _postMessage(obj: any[], hostID?: number | undefined, transfer?: Transferable[] | undefined): void;
    _postResponse(messageID: number, error: Error | null, result?: any, hostID?: number | undefined): void;
    _handleQuery(messageID: number, query: any, hostID: number | undefined): void;
    _onMessageCommon(e: MessageEvent): {
        message: any;
        type: number;
    } | void;
}
declare class PWBHost extends PWBBase {
    _errorCallback: ErrorCallback | undefined;
    _hostID: number | undefined;
    _hostIDQueue: (() => void)[] | undefined;
    _worker: SharedWorker | Worker;
    constructor(worker: SharedWorker | Worker);
    registerError(cb: ErrorCallback): void;
    _postMessage(obj: any[], _hostID?: unknown, transfer?: Transferable[] | undefined): void;
    postMessage(userMessage: any, _hostID?: undefined, transfer?: Transferable[] | undefined): Promise<any>;
    _onMessage(e: MessageEvent): void;
}
declare class PWBWorker extends PWBBase {
    _hosts: Map<number, {
        port: MessagePort;
    }>;
    _maxHostID: number;
    constructor();
    _postMessage(obj: any[], targetHostID?: number | undefined, transfer?: Transferable[] | undefined): void;
    postMessage(userMessage: any, targetHostID?: number | undefined, transfer?: Transferable[] | undefined): Promise<any>;
    _onMessage(e: MessageEvent): void;
}
export { PWBHost, PWBWorker };
