@sinclair/hammer
Version:
Build Tool for Browser and Node Applications
35 lines (34 loc) • 1.14 kB
TypeScript
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 {};