export declare type Resolve = (value: T) => void; export declare type Reject = (error: Error) => void; export declare function defer(): [Promise, Resolve, Reject]; export declare class Queue { private readonly promises; private readonly resolvers; dequeue(): Promise; enqueue(value: T): void; } export declare type Protocol = Data | End; export declare type Data = { type: 'data'; value: T; }; export declare type End = { type: 'end'; }; export declare class Sender { private readonly queue; constructor(queue: Queue>); send(value: T): void; end(): void; } export declare class Receiver { private readonly queue; constructor(queue: Queue>); [Symbol.asyncIterator](): AsyncGenerator, void, unknown>; } export declare function channel(): [Sender, Receiver]; declare type SelectInner[]> = { [K in keyof T]: T[K] extends Receiver ? U : never; }[number]; export declare function select[]>(receivers: [...R]): Receiver>; export {};