import { Worker } from 'worker_threads';
interface Endpoint {
    readonly inboundBuffer: SharedArrayBuffer;
}
interface Producer<T> extends Endpoint {
    readonly outboundBuffer: SharedArrayBuffer;
    send(msg: T): void;
    close(): void;
}
interface Consumer<T> extends Endpoint {
    receive(): AsyncGenerator<T, void, unknown>;
}
interface ProducerConsumer<T, R> extends Producer<T>, Consumer<R> {
}
interface UnidirectionalChannel<T> {
    producer: Producer<T>;
    consumer: Consumer<T>;
}
interface BidirectionalChannel<T, R> {
    producer: ProducerConsumer<T, R>;
    consumer: ProducerConsumer<R, T>;
}
export declare class Channel {
    static createUnidirectional<T>(bufferSize?: number): UnidirectionalChannel<T>;
    static createBidirectional<T, R = T>(bufferSize?: number): BidirectionalChannel<T, R>;
    static adoptConsumer<T>(inbound: SharedArrayBuffer): Consumer<T>;
    static adoptProducerConsumer<T, R>(inbound: SharedArrayBuffer, outbound: SharedArrayBuffer): ProducerConsumer<T, R>;
}
export declare function handshake<T>(type: 'unidirectional', worker: Worker, consumer: Consumer<T>): Promise<void>;
export declare function handshake<T, R>(type: 'bidirectional', worker: Worker, producerConsumer: ProducerConsumer<T, R>): Promise<void>;
export {};
//# sourceMappingURL=port.d.ts.map