Spaces:
Running
Running
| import { identity } from './identity'; | |
| import { UnaryFunction } from '../types'; | |
| export function pipe(): typeof identity; | |
| export function pipe<T, A>(fn1: UnaryFunction<T, A>): UnaryFunction<T, A>; | |
| export function pipe<T, A, B>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>): UnaryFunction<T, B>; | |
| export function pipe<T, A, B, C>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>): UnaryFunction<T, C>; | |
| export function pipe<T, A, B, C, D>( | |
| fn1: UnaryFunction<T, A>, | |
| fn2: UnaryFunction<A, B>, | |
| fn3: UnaryFunction<B, C>, | |
| fn4: UnaryFunction<C, D> | |
| ): UnaryFunction<T, D>; | |
| export function pipe<T, A, B, C, D, E>( | |
| fn1: UnaryFunction<T, A>, | |
| fn2: UnaryFunction<A, B>, | |
| fn3: UnaryFunction<B, C>, | |
| fn4: UnaryFunction<C, D>, | |
| fn5: UnaryFunction<D, E> | |
| ): UnaryFunction<T, E>; | |
| export function pipe<T, A, B, C, D, E, F>( | |
| fn1: UnaryFunction<T, A>, | |
| fn2: UnaryFunction<A, B>, | |
| fn3: UnaryFunction<B, C>, | |
| fn4: UnaryFunction<C, D>, | |
| fn5: UnaryFunction<D, E>, | |
| fn6: UnaryFunction<E, F> | |
| ): UnaryFunction<T, F>; | |
| export function pipe<T, A, B, C, D, E, F, G>( | |
| fn1: UnaryFunction<T, A>, | |
| fn2: UnaryFunction<A, B>, | |
| fn3: UnaryFunction<B, C>, | |
| fn4: UnaryFunction<C, D>, | |
| fn5: UnaryFunction<D, E>, | |
| fn6: UnaryFunction<E, F>, | |
| fn7: UnaryFunction<F, G> | |
| ): UnaryFunction<T, G>; | |
| export function pipe<T, A, B, C, D, E, F, G, H>( | |
| fn1: UnaryFunction<T, A>, | |
| fn2: UnaryFunction<A, B>, | |
| fn3: UnaryFunction<B, C>, | |
| fn4: UnaryFunction<C, D>, | |
| fn5: UnaryFunction<D, E>, | |
| fn6: UnaryFunction<E, F>, | |
| fn7: UnaryFunction<F, G>, | |
| fn8: UnaryFunction<G, H> | |
| ): UnaryFunction<T, H>; | |
| export function pipe<T, A, B, C, D, E, F, G, H, I>( | |
| fn1: UnaryFunction<T, A>, | |
| fn2: UnaryFunction<A, B>, | |
| fn3: UnaryFunction<B, C>, | |
| fn4: UnaryFunction<C, D>, | |
| fn5: UnaryFunction<D, E>, | |
| fn6: UnaryFunction<E, F>, | |
| fn7: UnaryFunction<F, G>, | |
| fn8: UnaryFunction<G, H>, | |
| fn9: UnaryFunction<H, I> | |
| ): UnaryFunction<T, I>; | |
| export function pipe<T, A, B, C, D, E, F, G, H, I>( | |
| fn1: UnaryFunction<T, A>, | |
| fn2: UnaryFunction<A, B>, | |
| fn3: UnaryFunction<B, C>, | |
| fn4: UnaryFunction<C, D>, | |
| fn5: UnaryFunction<D, E>, | |
| fn6: UnaryFunction<E, F>, | |
| fn7: UnaryFunction<F, G>, | |
| fn8: UnaryFunction<G, H>, | |
| fn9: UnaryFunction<H, I>, | |
| ...fns: UnaryFunction<any, any>[] | |
| ): UnaryFunction<T, unknown>; | |
| /** | |
| * pipe() can be called on one or more functions, each of which can take one argument ("UnaryFunction") | |
| * and uses it to return a value. | |
| * It returns a function that takes one argument, passes it to the first UnaryFunction, and then | |
| * passes the result to the next one, passes that result to the next one, and so on. | |
| */ | |
| export function pipe(...fns: Array<UnaryFunction<any, any>>): UnaryFunction<any, any> { | |
| return pipeFromArray(fns); | |
| } | |
| /** @internal */ | |
| export function pipeFromArray<T, R>(fns: Array<UnaryFunction<T, R>>): UnaryFunction<T, R> { | |
| if (fns.length === 0) { | |
| return identity as UnaryFunction<any, any>; | |
| } | |
| if (fns.length === 1) { | |
| return fns[0]; | |
| } | |
| return function piped(input: T): R { | |
| return fns.reduce((prev: any, fn: UnaryFunction<T, R>) => fn(prev), input as any); | |
| }; | |
| } | |