import { T as ThreadWorkerType } from './worker-type-comvmkQN.cjs';

type WorkerUid = string;
type WorkerMessageUid = string;
interface WorkerInstanceResponse<TResponseData> {
    data: TResponseData;
    transfer?: ArrayBuffer[];
}
interface WorkerInstance<TRequestData, TResponseData> {
    handle(message: TRequestData): WorkerInstanceResponse<TResponseData>;
}

declare enum WorkerMessageType {
    health = "health",
    data = "data"
}
interface WorkerRequestMessage<TRequestData> {
    workerType: ThreadWorkerType;
    messageType: WorkerMessageType;
    messageUid: WorkerMessageUid;
    request: TRequestData;
}
interface WorkerResponseMessage<TResponseData> {
    workerType: ThreadWorkerType;
    workerUid?: WorkerUid;
    messageType: WorkerMessageType;
    messageUid: WorkerMessageUid;
    data: TResponseData;
    transfer?: ArrayBuffer[];
}

interface IWorkerMessageQueue {
    readonly size: number;
    enqueue(change: WorkerRequestMessage<any>): void;
    dequeue(): WorkerRequestMessage<any>;
    peek(): WorkerRequestMessage<any>;
    clear(): void;
}

export { type IWorkerMessageQueue as I, type WorkerRequestMessage as W, type WorkerResponseMessage as a, type WorkerUid as b, type WorkerMessageUid as c, type WorkerInstanceResponse as d, type WorkerInstance as e, WorkerMessageType as f };
