asyncerator
Version:
Provide supporting types for AsyncIterable/AsyncIterableIterators, promisified stream.pipeline implementation, and Array-like utility operators, sources and sinks.
48 lines (47 loc) • 13.8 kB
TypeScript
import { Duplex, Readable, Writable } from 'node:stream';
import type { Asyncerator } from '../asyncerator';
export type PipelineSource<Source> = string | Readable | Iterable<Source> | AsyncIterable<Source> | Asyncerator<Source>;
export type PipelineTransformer<Input, Output> = Duplex | ((input: Asyncerator<Input>) => Asyncerator<Output>);
export interface PipelineOptions {
signal: AbortSignal;
}
/**
* Unfortunately, the only known way to accurately type the pipeline function is a series of overloads. The return value
* is defined by the type of the last parameter, and there are zero or more transform parameters in between the
* source and the destination. Also, the output of each parameter in the pipeline must match the input type of the
* later parameter. TBD if this can be typed using some cool variadic thing in the current latest (5.x) version
* of Typescript.
*/
export default function <Source, Sink>(source: PipelineSource<Source>, sink: (input: Asyncerator<Source>) => Promise<Sink>, options?: PipelineOptions): Promise<Sink>;
export default function <Source, Sink>(source: PipelineSource<Source>, sink: Duplex | ((input: Asyncerator<Source>) => AsyncIterable<Sink>)): Readable;
export default function <Source>(source: PipelineSource<Source>, sink: Writable): Promise<void>;
export default function <Source, Sink, TransformSink>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, TransformSink>, sink: (input: Asyncerator<TransformSink>) => Promise<Sink>, options?: PipelineOptions): Promise<Sink>;
export default function <Source, Sink, TransformSink>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, TransformSink>, sink: Duplex | ((input: Asyncerator<TransformSink>) => AsyncIterable<Sink>)): Readable;
export default function <Source, TransformSink>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, TransformSink>, sink: Writable): Promise<void>;
export default function <Source, Sink, TransformSink, T1>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, TransformSink>, sink: (input: Asyncerator<TransformSink>) => Promise<Sink>, options?: PipelineOptions): Promise<Sink>;
export default function <Source, Sink, TransformSink, T1>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, TransformSink>, sink: Duplex | ((input: Asyncerator<TransformSink>) => AsyncIterable<Sink>)): Readable;
export default function <Source, TransformSink, T1>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, TransformSink>, sink: Writable): Promise<void>;
export default function <Source, Sink, TransformSink, T1, T2>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, TransformSink>, sink: (input: Asyncerator<TransformSink>) => Promise<Sink>, options?: PipelineOptions): Promise<Sink>;
export default function <Source, Sink, TransformSink, T1, T2>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, TransformSink>, sink: Duplex | ((input: Asyncerator<TransformSink>) => AsyncIterable<Sink>)): Readable;
export default function <Source, TransformSink, T1, T2>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, TransformSink>, sink: Writable): Promise<void>;
export default function <Source, Sink, TransformSink, T1, T2, T3>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, TransformSink>, sink: (input: Asyncerator<TransformSink>) => Promise<Sink>, options?: PipelineOptions): Promise<Sink>;
export default function <Source, Sink, TransformSink, T1, T2, T3>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, TransformSink>, sink: Duplex | ((input: Asyncerator<TransformSink>) => AsyncIterable<Sink>)): Readable;
export default function <Source, TransformSink, T1, T2, T3>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, TransformSink>, sink: Writable): Promise<void>;
export default function <Source, Sink, TransformSink, T1, T2, T3, T4>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, TransformSink>, sink: (input: Asyncerator<TransformSink>) => Promise<Sink>, options?: PipelineOptions): Promise<Sink>;
export default function <Source, Sink, TransformSink, T1, T2, T3, T4>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, TransformSink>, sink: Duplex | ((input: Asyncerator<TransformSink>) => AsyncIterable<Sink>)): Readable;
export default function <Source, TransformSink, T1, T2, T3, T4>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, TransformSink>, sink: Writable): Promise<void>;
export default function <Source, Sink, TransformSink, T1, T2, T3, T4, T5>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, T5>, transform6: PipelineTransformer<T5, TransformSink>, sink: (input: Asyncerator<TransformSink>) => Promise<Sink>, options?: PipelineOptions): Promise<Sink>;
export default function <Source, Sink, TransformSink, T1, T2, T3, T4, T5>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, T5>, transform6: PipelineTransformer<T5, TransformSink>, sink: Duplex | ((input: Asyncerator<TransformSink>) => AsyncIterable<Sink>)): Readable;
export default function <Source, TransformSink, T1, T2, T3, T4, T5>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, T5>, transform6: PipelineTransformer<T5, TransformSink>, sink: Writable): Promise<void>;
export default function <Source, Sink, TransformSink, T1, T2, T3, T4, T5, T6>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, T5>, transform6: PipelineTransformer<T5, T6>, transform7: PipelineTransformer<T6, TransformSink>, sink: (input: Asyncerator<TransformSink>) => Promise<Sink>, options?: PipelineOptions): Promise<Sink>;
export default function <Source, Sink, TransformSink, T1, T2, T3, T4, T5, T6>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, T5>, transform6: PipelineTransformer<T5, T6>, transform7: PipelineTransformer<T6, TransformSink>, sink: Duplex | ((input: Asyncerator<TransformSink>) => AsyncIterable<Sink>)): Readable;
export default function <Source, TransformSink, T1, T2, T3, T4, T5, T6>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, T5>, transform6: PipelineTransformer<T5, T6>, transform7: PipelineTransformer<T6, TransformSink>, sink: Writable): Promise<void>;
export default function <Source, Sink, TransformSink, T1, T2, T3, T4, T5, T6, T7>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, T5>, transform6: PipelineTransformer<T5, T6>, transform7: PipelineTransformer<T6, T7>, transform8: PipelineTransformer<T7, TransformSink>, sink: (input: Asyncerator<TransformSink>) => Promise<Sink>, options?: PipelineOptions): Promise<Sink>;
export default function <Source, Sink, TransformSink, T1, T2, T3, T4, T5, T6, T7>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, T5>, transform6: PipelineTransformer<T5, T6>, transform7: PipelineTransformer<T6, T7>, transform8: PipelineTransformer<T7, TransformSink>, sink: Duplex | ((input: Asyncerator<TransformSink>) => AsyncIterable<Sink>)): Readable;
export default function <Source, TransformSink, T1, T2, T3, T4, T5, T6, T7>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, T5>, transform6: PipelineTransformer<T5, T6>, transform7: PipelineTransformer<T6, T7>, transform8: PipelineTransformer<T7, TransformSink>, sink: Writable): Promise<void>;
export default function <Source, Sink, TransformSink, T1, T2, T3, T4, T5, T6, T7, T8>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, T5>, transform6: PipelineTransformer<T5, T6>, transform7: PipelineTransformer<T6, T7>, transform8: PipelineTransformer<T7, T8>, transform9: PipelineTransformer<T8, TransformSink>, sink: (input: Asyncerator<TransformSink>) => Promise<Sink>, options?: PipelineOptions): Promise<Sink>;
export default function <Source, Sink, TransformSink, T1, T2, T3, T4, T5, T6, T7, T8>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, T5>, transform6: PipelineTransformer<T5, T6>, transform7: PipelineTransformer<T6, T7>, transform8: PipelineTransformer<T7, T8>, transform9: PipelineTransformer<T8, TransformSink>, sink: Duplex | ((input: Asyncerator<TransformSink>) => AsyncIterable<Sink>)): Readable;
export default function <Source, TransformSink, T1, T2, T3, T4, T5, T6, T7, T8>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, T5>, transform6: PipelineTransformer<T5, T6>, transform7: PipelineTransformer<T6, T7>, transform8: PipelineTransformer<T7, T8>, transform9: PipelineTransformer<T8, TransformSink>, sink: Writable): Promise<void>;
export default function <Source, Sink, TransformSink, T1, T2, T3, T4, T5, T6, T7, T8, T9>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, T5>, transform6: PipelineTransformer<T5, T6>, transform7: PipelineTransformer<T6, T7>, transform8: PipelineTransformer<T7, T8>, transform9: PipelineTransformer<T8, T9>, transform10: PipelineTransformer<T9, TransformSink>, sink: (input: Asyncerator<TransformSink>) => Promise<Sink>, options?: PipelineOptions): Promise<Sink>;
export default function <Source, Sink, TransformSink, T1, T2, T3, T4, T5, T6, T7, T8, T9>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, T5>, transform6: PipelineTransformer<T5, T6>, transform7: PipelineTransformer<T6, T7>, transform8: PipelineTransformer<T7, T8>, transform9: PipelineTransformer<T8, T9>, transform10: PipelineTransformer<T9, TransformSink>, sink: Duplex | ((input: Asyncerator<TransformSink>) => AsyncIterable<Sink>)): Readable;
export default function <Source, TransformSink, T1, T2, T3, T4, T5, T6, T7, T8, T9>(source: PipelineSource<Source>, transform1: PipelineTransformer<Source, T1>, transform2: PipelineTransformer<T1, T2>, transform3: PipelineTransformer<T2, T3>, transform4: PipelineTransformer<T3, T4>, transform5: PipelineTransformer<T4, T5>, transform6: PipelineTransformer<T5, T6>, transform7: PipelineTransformer<T6, T7>, transform8: PipelineTransformer<T7, T8>, transform9: PipelineTransformer<T8, T9>, transform10: PipelineTransformer<T9, TransformSink>, sink: Writable): Promise<void>;