UNPKG

multitude

Version:

Comprehensive streams for push and pull

44 lines (43 loc) 1.6 kB
import { MaybePromise } from 'type-core'; export declare namespace Pull { interface LikeConstructor { new <O, I = void>(provider: Provider<O, I>): Like<O, I>; prototype: Like<any, any>; } interface PullableConstructor { new <O, I = void>(provider: Provider<O, I>): Pullable<O, I>; from<O, I = void>(item: Convertible<O, I>): Pullable<O, I>; prototype: Pullable<any, any>; } type Convertible<O, I = void> = Like<O, I> | Compatible<O, I> | Iterable<O>; interface Like<O, I = void> { source: Source<O, I>; } interface Compatible<O, I = void> { [Symbol.asyncIterator](): AsyncIterator<O, void, I>; } interface Pullable<O, I = void> extends Compatible<O, I>, Like<O, I> { consume(consumer: Consumer<O, I>): void; } type Provider<O, I> = () => Iterator<O, I | void>; type Consumer<O, I> = () => Iterator<I, O>; type Source<O, I> = () => PullableIterator<O, I | void>; type Sink<O, I> = () => PullableIterator<I, O>; interface Iterator<O, I> { next?: (value: I) => MaybePromise<Response<O>>; error?: (reason: Error) => MaybePromise<Response<O>>; complete?: () => MaybePromise<void>; } interface PullableIterator<O, I> extends Iterator<O, I> { next: (value: I) => MaybePromise<Response<O>>; error: (reason: Error) => MaybePromise<Response<O>>; complete: () => MaybePromise<void>; } type Response<T> = { complete?: false; value: T; } | { complete: true; value?: void; }; }