Mirror: 🎩 A tiny but capable push & pull stream library for TypeScript and Flow

Revert "Simplify pipe overload typings" (#65)

This reverts commit 071101e34c790a3ef9589eb78b814f151ee5ebbb.

Changed files
+85 -81
src
helpers
+85 -81
src/helpers/pipe.ts
···
import { sourceT as Source } from '../wonka_types.gen';
+
interface UnaryFn<T, R> {
+
(source: T): R;
+
}
+
/* pipe definitions for source + operators composition */
-
function pipe<T, A>(source: Source<T>, op1: (source: Source<T>) => Source<A>): Source<A>;
+
function pipe<T, A>(source: Source<T>, op1: UnaryFn<Source<T>, Source<A>>): Source<A>;
function pipe<T, A, B>(
source: Source<T>,
-
op1: (source: Source<T>) => Source<A>,
-
op2: (source: Source<A>) => Source<B>
+
op1: UnaryFn<Source<T>, Source<A>>,
+
op2: UnaryFn<Source<A>, Source<B>>
): Source<B>;
function pipe<T, A, B, C>(
source: Source<T>,
-
op1: (source: Source<T>) => Source<A>,
-
op2: (source: Source<A>) => Source<B>,
-
op3: (source: Source<B>) => Source<C>
+
op1: UnaryFn<Source<T>, Source<A>>,
+
op2: UnaryFn<Source<A>, Source<B>>,
+
op3: UnaryFn<Source<B>, Source<C>>
): Source<C>;
function pipe<T, A, B, C, D>(
source: Source<T>,
-
op1: (source: Source<T>) => Source<A>,
-
op2: (source: Source<A>) => Source<B>,
-
op3: (source: Source<B>) => Source<C>,
-
op4: (source: Source<C>) => Source<D>
+
op1: UnaryFn<Source<T>, Source<A>>,
+
op2: UnaryFn<Source<A>, Source<B>>,
+
op3: UnaryFn<Source<B>, Source<C>>,
+
op4: UnaryFn<Source<C>, Source<D>>
): Source<D>;
function pipe<T, A, B, C, D, E>(
source: Source<T>,
-
op1: (source: Source<T>) => Source<A>,
-
op2: (source: Source<A>) => Source<B>,
-
op3: (source: Source<B>) => Source<C>,
-
op4: (source: Source<C>) => Source<D>,
-
op5: (source: Source<D>) => Source<E>
+
op1: UnaryFn<Source<T>, Source<A>>,
+
op2: UnaryFn<Source<A>, Source<B>>,
+
op3: UnaryFn<Source<B>, Source<C>>,
+
op4: UnaryFn<Source<C>, Source<D>>,
+
op5: UnaryFn<Source<D>, Source<E>>
): Source<E>;
function pipe<T, A, B, C, D, E, F>(
source: Source<T>,
-
op1: (source: Source<T>) => Source<A>,
-
op2: (source: Source<A>) => Source<B>,
-
op3: (source: Source<B>) => Source<C>,
-
op4: (source: Source<C>) => Source<D>,
-
op5: (source: Source<D>) => Source<E>,
-
op6: (source: Source<E>) => Source<F>
+
op1: UnaryFn<Source<T>, Source<A>>,
+
op2: UnaryFn<Source<A>, Source<B>>,
+
op3: UnaryFn<Source<B>, Source<C>>,
+
op4: UnaryFn<Source<C>, Source<D>>,
+
op5: UnaryFn<Source<D>, Source<E>>,
+
op6: UnaryFn<Source<E>, Source<F>>
): Source<F>;
function pipe<T, A, B, C, D, E, F, G>(
source: Source<T>,
-
op1: (source: Source<T>) => Source<A>,
-
op2: (source: Source<A>) => Source<B>,
-
op3: (source: Source<B>) => Source<C>,
-
op4: (source: Source<C>) => Source<D>,
-
op5: (source: Source<D>) => Source<E>,
-
op6: (source: Source<E>) => Source<F>,
-
op7: (source: Source<F>) => Source<G>
+
op1: UnaryFn<Source<T>, Source<A>>,
+
op2: UnaryFn<Source<A>, Source<B>>,
+
op3: UnaryFn<Source<B>, Source<C>>,
+
op4: UnaryFn<Source<C>, Source<D>>,
+
op5: UnaryFn<Source<D>, Source<E>>,
+
op6: UnaryFn<Source<E>, Source<F>>,
+
op7: UnaryFn<Source<F>, Source<G>>
): Source<G>;
function pipe<T, A, B, C, D, E, F, G, H>(
source: Source<T>,
-
op1: (source: Source<T>) => Source<A>,
-
op2: (source: Source<A>) => Source<B>,
-
op3: (source: Source<B>) => Source<C>,
-
op4: (source: Source<C>) => Source<D>,
-
op5: (source: Source<D>) => Source<E>,
-
op6: (source: Source<E>) => Source<F>,
-
op7: (source: Source<F>) => Source<G>,
-
op8: (source: Source<G>) => Source<H>
+
op1: UnaryFn<Source<T>, Source<A>>,
+
op2: UnaryFn<Source<A>, Source<B>>,
+
op3: UnaryFn<Source<B>, Source<C>>,
+
op4: UnaryFn<Source<C>, Source<D>>,
+
op5: UnaryFn<Source<D>, Source<E>>,
+
op6: UnaryFn<Source<E>, Source<F>>,
+
op7: UnaryFn<Source<F>, Source<G>>,
+
op8: UnaryFn<Source<G>, Source<H>>
): Source<H>;
/* pipe definitions for source + operators + consumer composition */
-
function pipe<T, R>(source: Source<T>, consumer: (source: Source<T>) => R): R;
+
function pipe<T, R>(source: Source<T>, consumer: UnaryFn<Source<T>, R>): R;
function pipe<T, A, R>(
source: Source<T>,
-
op1: (source: Source<T>) => Source<A>,
-
consumer: (source: Source<A>) => R
+
op1: UnaryFn<Source<T>, Source<A>>,
+
consumer: UnaryFn<Source<A>, R>
): R;
function pipe<T, A, B, R>(
source: Source<T>,
-
op1: (source: Source<T>) => Source<A>,
-
op2: (source: Source<A>) => Source<B>,
-
consumer: (source: Source<B>) => R
+
op1: UnaryFn<Source<T>, Source<A>>,
+
op2: UnaryFn<Source<A>, Source<B>>,
+
consumer: UnaryFn<Source<B>, R>
): R;
function pipe<T, A, B, C, R>(
source: Source<T>,
-
op1: (source: Source<T>) => Source<A>,
-
op2: (source: Source<A>) => Source<B>,
-
op3: (source: Source<B>) => Source<C>,
-
consumer: (source: Source<C>) => R
+
op1: UnaryFn<Source<T>, Source<A>>,
+
op2: UnaryFn<Source<A>, Source<B>>,
+
op3: UnaryFn<Source<B>, Source<C>>,
+
consumer: UnaryFn<Source<C>, R>
): R;
function pipe<T, A, B, C, D, R>(
source: Source<T>,
-
op1: (source: Source<T>) => Source<A>,
-
op2: (source: Source<A>) => Source<B>,
-
op3: (source: Source<B>) => Source<C>,
-
op4: (source: Source<C>) => Source<D>,
-
consumer: (source: Source<D>) => R
+
op1: UnaryFn<Source<T>, Source<A>>,
+
op2: UnaryFn<Source<A>, Source<B>>,
+
op3: UnaryFn<Source<B>, Source<C>>,
+
op4: UnaryFn<Source<C>, Source<D>>,
+
consumer: UnaryFn<Source<D>, R>
): R;
function pipe<T, A, B, C, D, E, R>(
source: Source<T>,
-
op1: (source: Source<T>) => Source<A>,
-
op2: (source: Source<A>) => Source<B>,
-
op3: (source: Source<B>) => Source<C>,
-
op4: (source: Source<C>) => Source<D>,
-
op5: (source: Source<D>) => Source<E>,
-
consumer: (source: Source<E>) => R
+
op1: UnaryFn<Source<T>, Source<A>>,
+
op2: UnaryFn<Source<A>, Source<B>>,
+
op3: UnaryFn<Source<B>, Source<C>>,
+
op4: UnaryFn<Source<C>, Source<D>>,
+
op5: UnaryFn<Source<D>, Source<E>>,
+
consumer: UnaryFn<Source<E>, R>
): R;
function pipe<T, A, B, C, D, E, F, R>(
source: Source<T>,
-
op1: (source: Source<T>) => Source<A>,
-
op2: (source: Source<A>) => Source<B>,
-
op3: (source: Source<B>) => Source<C>,
-
op4: (source: Source<C>) => Source<D>,
-
op5: (source: Source<D>) => Source<E>,
-
op6: (source: Source<E>) => Source<F>,
-
consumer: (source: Source<F>) => R
+
op1: UnaryFn<Source<T>, Source<A>>,
+
op2: UnaryFn<Source<A>, Source<B>>,
+
op3: UnaryFn<Source<B>, Source<C>>,
+
op4: UnaryFn<Source<C>, Source<D>>,
+
op5: UnaryFn<Source<D>, Source<E>>,
+
op6: UnaryFn<Source<E>, Source<F>>,
+
consumer: UnaryFn<Source<F>, R>
): R;
function pipe<T, A, B, C, D, E, F, G, R>(
source: Source<T>,
-
op1: (source: Source<T>) => Source<A>,
-
op2: (source: Source<A>) => Source<B>,
-
op3: (source: Source<B>) => Source<C>,
-
op4: (source: Source<C>) => Source<D>,
-
op5: (source: Source<D>) => Source<E>,
-
op6: (source: Source<E>) => Source<F>,
-
op7: (source: Source<F>) => Source<G>,
-
consumer: (source: Source<G>) => R
+
op1: UnaryFn<Source<T>, Source<A>>,
+
op2: UnaryFn<Source<A>, Source<B>>,
+
op3: UnaryFn<Source<B>, Source<C>>,
+
op4: UnaryFn<Source<C>, Source<D>>,
+
op5: UnaryFn<Source<D>, Source<E>>,
+
op6: UnaryFn<Source<E>, Source<F>>,
+
op7: UnaryFn<Source<F>, Source<G>>,
+
consumer: UnaryFn<Source<G>, R>
): R;
function pipe<T, A, B, C, D, E, F, G, H, R>(
source: Source<T>,
-
op1: (source: Source<T>) => Source<A>,
-
op2: (source: Source<A>) => Source<B>,
-
op3: (source: Source<B>) => Source<C>,
-
op4: (source: Source<C>) => Source<D>,
-
op5: (source: Source<D>) => Source<E>,
-
op6: (source: Source<E>) => Source<F>,
-
op7: (source: Source<F>) => Source<G>,
-
op8: (source: Source<G>) => Source<H>,
-
consumer: (source: Source<H>) => R
+
op1: UnaryFn<Source<T>, Source<A>>,
+
op2: UnaryFn<Source<A>, Source<B>>,
+
op3: UnaryFn<Source<B>, Source<C>>,
+
op4: UnaryFn<Source<C>, Source<D>>,
+
op5: UnaryFn<Source<D>, Source<E>>,
+
op6: UnaryFn<Source<E>, Source<F>>,
+
op7: UnaryFn<Source<F>, Source<G>>,
+
op8: UnaryFn<Source<G>, Source<H>>,
+
consumer: UnaryFn<Source<H>, R>
): R;
function pipe() {