import { AsyncQueue } from './queue';
import { Message, Response } from './message';
import { ChannelMain, ChannelWorker } from './channel';
import { WebROptions } from '../webr-main';
export declare class ServiceWorkerChannelMain implements ChannelMain {
    #private;
    inputQueue: AsyncQueue<Message>;
    outputQueue: AsyncQueue<Message>;
    initialised: Promise<unknown>;
    resolve: (_?: unknown) => void;
    close: () => void;
    constructor(config: Required<WebROptions>);
    activeRegistration(): ServiceWorker;
    read(): Promise<Message>;
    flush(): Promise<Message[]>;
    interrupt(): void;
    write(msg: Message): void;
    request(msg: Message, transferables?: [Transferable]): Promise<any>;
}
export declare class ServiceWorkerChannelWorker implements ChannelWorker {
    #private;
    onMessageFromMainThread: (msg: Message) => void;
    constructor(data: {
        clientId?: string;
        location?: string;
    });
    resolve(): void;
    write(msg: Message, transfer?: [Transferable]): void;
    syncRequest(message: Message): Response;
    read(): Message;
    inputOrDispatch(): number;
    run(args: string[]): void;
    setInterrupt(interrupt: () => void): void;
    handleInterrupt(): void;
    setDispatchHandler(dispatch: (msg: Message) => void): void;
}
