UNPKG

@sinclair/hammer

Version:

Build Tool for Browser and Node Applications

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