1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- 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);
- };
- }
|