UNPKG

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
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>;