/**
 * Provides abstractions for host features that require different implementations depending
 * on whether DevTools runs in the browser or Node.js
 */
export interface HostRuntime {
    createWorker(url: string): Worker;
    workerScope: WorkerScope;
    getOnLine(): boolean;
    getUserAgent(): string;
    getLocalStorage(): Storage | undefined;
}
/**
 * Abstracts away the differences between browser web workers and Node.js worker threads.
 */
export interface Worker {
    postMessage(message: unknown, transfer?: WorkerTransferable[]): void;
    dispose(): void;
    terminate(immediately?: boolean): void;
    set onmessage(listener: (event: WorkerMessageEvent) => void);
    set onerror(listener: (event: any) => void);
}
export type WorkerMessagePort = typeof MessagePort.prototype;
/**
 * Currently we only transfer MessagePorts to workers, but it's possible to add
 * more things (like ReadableStream) as long as it's present in all runtimes.
 */
export type WorkerTransferable = WorkerMessagePort;
/**
 * Used by workers to communicate with their parent.
 */
export interface WorkerScope {
    postMessage(message: unknown, transfer?: WorkerTransferable[]): void;
    set onmessage(listener: (event: WorkerMessageEvent) => Promise<void> | void);
}
export interface WorkerMessageEvent<T = any> {
    readonly data: T;
    ports: readonly WorkerMessagePort[];
}
