declare class Placeholder {
__PLACEHOLDER__: string;
constructor();
}
/**
* A special placeholder value used to specify "gaps" within curried functions,
* allowing partial application of any combination of arguments, regardless of their positions.
*
* @group FP
*/
export declare const __: Placeholder;
type T__ = typeof __;
/**
* Perform left-to-right function composition.
*
* @example
* ```
* pipe(
* [1, 2, 3, 4],
* arr => arr.map(v => v * 2),
* arr => arr.map(v => v + 2)
* )
* // [4, 6, 8, 10]
*```
* @group FP
*/
export declare function pipe(value: A, op1: (input: A) => B): B;
export declare function pipe(value: A, op1: (input: A) => B, op2: (input: B) => C): C;
export declare function pipe(value: A, op1: (input: A) => B, op2: (input: B) => C, op3: (input: C) => D): D;
export declare function pipe(value: A, op1: (input: A) => B, op2: (input: B) => C, op3: (input: C) => D, op4: (input: D) => E): E;
export declare function pipe(value: A, op1: (input: A) => B, op2: (input: B) => C, op3: (input: C) => D, op4: (input: D) => E, op5: (input: E) => F): F;
export declare function pipe(value: A, op1: (input: A) => B, op2: (input: B) => C, op3: (input: C) => D, op4: (input: D) => E, op5: (input: E) => F, op6: (input: F) => G): G;
export declare function pipe(value: A, op1: (input: A) => B, op2: (input: B) => C, op3: (input: C) => D, op4: (input: D) => E, op5: (input: E) => F, op6: (input: F) => G, op7: (input: G) => H): H;
export declare function pipe(value: unknown, ...operations: Array<(value: unknown) => unknown>): unknown;
/**
* Perform right-to-left function composition.
*
* @example
* ```
* const func = compose(
* arr => arr.map(v => v + 2)
* (arr: number[]) => arr.map(v => v * 2),
* )
* // [4, 6, 8, 10]
* //
* ```
* @group FP
*/
export declare function compose(op1: (input: T1) => T2): (input: T1) => T2;
export declare function compose(op2: (input: T2) => T3, op1: (input: T1) => T2): (input: T1) => T3;
export declare function compose(op3: (input: T3) => T4, op2: (input: T2) => T3, op1: (input: T1) => T2): (input: T1) => T4;
export declare function compose(op4: (input: T4) => T5, op3: (input: T3) => T4, op2: (input: T2) => T3, op1: (input: T1) => T2): (input: T1) => T5;
export declare function compose(op5: (input: T5) => T6, op4: (input: T4) => T5, op3: (input: T3) => T4, op2: (input: T2) => T3, op1: (input: T1) => T2): (input: T1) => T6;
export declare function compose(op6: (input: T6) => T7, op5: (input: T5) => T6, op4: (input: T4) => T5, op3: (input: T3) => T4, op2: (input: T2) => T3, op1: (input: T1) => T2): (input: T1) => T7;
export declare function compose(op7: (input: T7) => T8, op6: (input: T6) => T7, op5: (input: T5) => T6, op4: (input: T4) => T5, op3: (input: T3) => T4, op2: (input: T2) => T3, op1: (input: T1) => T2): (input: T1) => T8;
export declare function compose(...operations: Array<(value: unknown) => unknown>): (value: unknown) => unknown;
type Curry1 = {
(): Curry1;
(t1: T1): R;
};
type Curry2 = {
(): Curry2;
(t1: T1): Curry1;
(t1: T1, t2: T2): R;
(t1: T__, t2: T2): Curry1;
(t1: T1, t2: T__): Curry1;
};
type Curry3 = {
(): Curry3;
(t1: T1): Curry2;
(t1: T1, t2: T2): Curry1;
(t1: T__, t2: T2): Curry2;
(t1: T1, t2: T__): Curry2;
(t1: T1, t2: T2, t3: T3): R;
(t1: T__, t2: T2, t3: T3): Curry1;
(t1: T1, t2: T__, t3: T3): Curry1;
(t1: T1, t2: T2, t3: T__): Curry1;
(t1: T__, t2: T__, t3: T3): Curry2;
(t1: T__, t2: T2, t3: T__): Curry2;
(t1: T1, t2: T__, t3: T__): Curry2;
};
type Curry4 = {
(): Curry4;
(t1: T1): Curry3;
(t1: T1, t2: T2): Curry2;
(t1: T__, t2: T2): Curry3;
(t1: T1, t2: T__): Curry3;
(t1: T1, t2: T2, t3: T3): Curry1;
(t1: T__, t2: T2, t3: T3): Curry2;
(t1: T1, t2: T__, t3: T3): Curry2;
(t1: T1, t2: T2, t3: T__): Curry2;
(t1: T__, t2: T__, t3: T3): Curry3;
(t1: T__, t2: T2, t3: T__): Curry3;
(t1: T1, t2: T__, t3: T__): Curry3;
(t1: T1, t2: T2, t3: T3, t4: T4): R;
(t1: T__, t2: T2, t3: T3, t4: T4): Curry1;
(t1: T1, t2: T__, t3: T3, t4: T4): Curry1;
(t1: T1, t2: T2, t3: T__, t4: T4): Curry1;
(t1: T1, t2: T2, t3: T3, t4: T__): Curry1;
(t1: T__, t2: T__, t3: T3, t4: T4): Curry2;
(t1: T__, t2: T2, t3: T__, t4: T4): Curry2;
(t1: T__, t2: T2, t3: T3, t4: T__): Curry2;
(t1: T1, t2: T__, t3: T__, t4: T4): Curry2;
(t1: T1, t2: T__, t3: T3, t4: T__): Curry2;
(t1: T1, t2: T2, t3: T__, t4: T__): Curry2;
(t1: T__, t2: T__, t3: T__, t4: T4): Curry3;
(t1: T__, t2: T__, t3: T3, t4: T__): Curry3;
(t1: T__, t2: T2, t3: T__, t4: T__): Curry3;
(t1: T1, t2: T__, t3: T__, t4: T__): Curry3;
};
type Curry5 = {
(): Curry5;
(t1: T1): Curry4;
(t1: T1, t2: T2): Curry3;
(t1: T__, t2: T2): Curry4;
(t1: T1, t2: T__): Curry4;
(t1: T1, t2: T2, t3: T3): Curry2;
(t1: T__, t2: T2, t3: T3): Curry3;
(t1: T1, t2: T__, t3: T3): Curry3;
(t1: T1, t2: T2, t3: T__): Curry3;
(t1: T__, t2: T__, t3: T3): Curry4;
(t1: T__, t2: T2, t3: T__): Curry4;
(t1: T1, t2: T__, t3: T__): Curry4;
(t1: T1, t2: T2, t3: T3, t4: T4): Curry1;
(t1: T__, t2: T2, t3: T3, t4: T4): Curry2;
(t1: T1, t2: T__, t3: T3, t4: T4): Curry2;
(t1: T1, t2: T2, t3: T__, t4: T4): Curry2;
(t1: T1, t2: T2, t3: T3, t4: T__): Curry2;
(t1: T__, t2: T__, t3: T3, t4: T4): Curry3;
(t1: T__, t2: T2, t3: T__, t4: T4): Curry3;
(t1: T__, t2: T2, t3: T3, t4: T__): Curry3;
(t1: T1, t2: T__, t3: T__, t4: T4): Curry3;
(t1: T1, t2: T__, t3: T3, t4: T__): Curry3;
(t1: T1, t2: T2, t3: T__, t4: T__): Curry3;
(t1: T__, t2: T__, t3: T__, t4: T4): Curry4;
(t1: T__, t2: T__, t3: T3, t4: T__): Curry4;
(t1: T__, t2: T2, t3: T__, t4: T__): Curry4;
(t1: T1, t2: T__, t3: T__, t4: T__): Curry4;
(t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): R;
(t1: T__, t2: T2, t3: T3, t4: T4, t5: T5): Curry1;
(t1: T1, t2: T__, t3: T3, t4: T4, t5: T5): Curry1;
(t1: T1, t2: T2, t3: T__, t4: T4, t5: T5): Curry1;
(t1: T1, t2: T2, t3: T3, t4: T__, t5: T5): Curry1;
(t1: T1, t2: T2, t3: T3, t4: T4, t5: T__): Curry1;
(t1: T__, t2: T__, t3: T3, t4: T4, t5: T5): Curry2;
(t1: T__, t2: T2, t3: T__, t4: T4, t5: T5): Curry2;
(t1: T__, t2: T2, t3: T3, t4: T__, t5: T5): Curry2;
(t1: T__, t2: T2, t3: T3, t4: T4, t5: T__): Curry2;
(t1: T1, t2: T__, t3: T__, t4: T4, t5: T5): Curry2;
(t1: T1, t2: T__, t3: T3, t4: T__, t5: T5): Curry2;
(t1: T1, t2: T__, t3: T3, t4: T4, t5: T__): Curry2;
(t1: T1, t2: T2, t3: T__, t4: T__, t5: T5): Curry2;
(t1: T1, t2: T2, t3: T__, t4: T4, t5: T__): Curry2;
(t1: T1, t2: T2, t3: T3, t4: T__, t5: T__): Curry2;
(t1: T__, t2: T__, t3: T__, t4: T4, t5: T5): Curry3;
(t1: T__, t2: T__, t3: T3, t4: T__, t5: T5): Curry3;
(t1: T__, t2: T__, t3: T3, t4: T4, t5: T__): Curry3;
(t1: T__, t2: T2, t3: T__, t4: T__, t5: T5): Curry3;
(t1: T__, t2: T2, t3: T__, t4: T4, t5: T__): Curry3;
(t1: T__, t2: T2, t3: T3, t4: T__, t5: T__): Curry3;
(t1: T1, t2: T__, t3: T__, t4: T__, t5: T5): Curry3;
(t1: T1, t2: T__, t3: T__, t4: T4, t5: T__): Curry3;
(t1: T1, t2: T__, t3: T3, t4: T__, t5: T__): Curry3;
(t1: T1, t2: T2, t3: T__, t4: T__, t5: T__): Curry3;
(t1: T__, t2: T__, t3: T__, t4: T__, t5: T5): Curry4;
(t1: T__, t2: T__, t3: T__, t4: T4, t5: T__): Curry4;
(t1: T__, t2: T__, t3: T3, t4: T__, t5: T__): Curry4;
(t1: T__, t2: T2, t3: T__, t4: T__, t5: T__): Curry4;
(t1: T1, t2: T__, t3: T__, t4: T__, t5: T__): Curry4;
};
type Curry6 = {
(): Curry6;
(t1: T1): Curry5;
(t1: T1, t2: T2): Curry4;
(t1: T__, t2: T2): Curry5;
(t1: T1, t2: T__): Curry5;
(t1: T1, t2: T2, t3: T3): Curry3;
(t1: T__, t2: T2, t3: T3): Curry4;
(t1: T1, t2: T__, t3: T3): Curry4;
(t1: T1, t2: T2, t3: T__): Curry4;
(t1: T__, t2: T__, t3: T3): Curry5;
(t1: T__, t2: T2, t3: T__): Curry5;
(t1: T1, t2: T__, t3: T__): Curry5;
(t1: T1, t2: T2, t3: T3, t4: T4): Curry2;
(t1: T__, t2: T2, t3: T3, t4: T4): Curry3;
(t1: T1, t2: T__, t3: T3, t4: T4): Curry3;
(t1: T1, t2: T2, t3: T__, t4: T4): Curry3;
(t1: T1, t2: T2, t3: T3, t4: T__): Curry3;
(t1: T__, t2: T__, t3: T3, t4: T4): Curry4;
(t1: T__, t2: T2, t3: T__, t4: T4): Curry4;
(t1: T__, t2: T2, t3: T3, t4: T__): Curry4;
(t1: T1, t2: T__, t3: T__, t4: T4): Curry4;
(t1: T1, t2: T__, t3: T3, t4: T__): Curry4;
(t1: T1, t2: T2, t3: T__, t4: T__): Curry4;
(t1: T__, t2: T__, t3: T__, t4: T4): Curry5;
(t1: T__, t2: T__, t3: T3, t4: T__): Curry5;
(t1: T__, t2: T2, t3: T__, t4: T__): Curry5;
(t1: T1, t2: T__, t3: T__, t4: T__): Curry5;
(t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): Curry1;
(t1: T__, t2: T2, t3: T3, t4: T4, t5: T5): Curry2;
(t1: T1, t2: T__, t3: T3, t4: T4, t5: T5): Curry2;
(t1: T1, t2: T2, t3: T__, t4: T4, t5: T5): Curry2;
(t1: T1, t2: T2, t3: T3, t4: T__, t5: T5): Curry2;
(t1: T1, t2: T2, t3: T3, t4: T4, t5: T__): Curry2;
(t1: T__, t2: T__, t3: T3, t4: T4, t5: T5): Curry3;
(t1: T__, t2: T2, t3: T__, t4: T4, t5: T5): Curry3;
(t1: T__, t2: T2, t3: T3, t4: T__, t5: T5): Curry3;
(t1: T__, t2: T2, t3: T3, t4: T4, t5: T__): Curry3;
(t1: T1, t2: T__, t3: T__, t4: T4, t5: T5): Curry3;
(t1: T1, t2: T__, t3: T3, t4: T__, t5: T5): Curry3;
(t1: T1, t2: T__, t3: T3, t4: T4, t5: T__): Curry3;
(t1: T1, t2: T2, t3: T__, t4: T__, t5: T5): Curry3;
(t1: T1, t2: T2, t3: T__, t4: T4, t5: T__): Curry3;
(t1: T1, t2: T2, t3: T3, t4: T__, t5: T__): Curry3;
(t1: T__, t2: T__, t3: T__, t4: T4, t5: T5): Curry4;
(t1: T__, t2: T__, t3: T3, t4: T__, t5: T5): Curry4;
(t1: T__, t2: T__, t3: T3, t4: T4, t5: T__): Curry4;
(t1: T__, t2: T2, t3: T__, t4: T__, t5: T5): Curry4;
(t1: T__, t2: T2, t3: T__, t4: T4, t5: T__): Curry4;
(t1: T__, t2: T2, t3: T3, t4: T__, t5: T__): Curry4;
(t1: T1, t2: T__, t3: T__, t4: T__, t5: T5): Curry4;
(t1: T1, t2: T__, t3: T__, t4: T4, t5: T__): Curry4;
(t1: T1, t2: T__, t3: T3, t4: T__, t5: T__): Curry4;
(t1: T1, t2: T2, t3: T__, t4: T__, t5: T__): Curry4;
(t1: T__, t2: T__, t3: T__, t4: T__, t5: T5): Curry5;
(t1: T__, t2: T__, t3: T__, t4: T4, t5: T__): Curry5;
(t1: T__, t2: T__, t3: T3, t4: T__, t5: T__): Curry5;
(t1: T__, t2: T2, t3: T__, t4: T__, t5: T__): Curry5;
(t1: T1, t2: T__, t3: T__, t4: T__, t5: T__): Curry5;
(t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6): R;
(t1: T__, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6): Curry1;
(t1: T1, t2: T__, t3: T3, t4: T4, t5: T5, t6: T6): Curry1;
(t1: T1, t2: T2, t3: T__, t4: T4, t5: T5, t6: T6): Curry1;
(t1: T1, t2: T2, t3: T3, t4: T__, t5: T5, t6: T6): Curry1;
(t1: T1, t2: T2, t3: T3, t4: T4, t5: T__, t6: T6): Curry1;
(t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T__): Curry1;
(t1: T__, t2: T__, t3: T3, t4: T4, t5: T5, t6: T6): Curry2;
(t1: T__, t2: T2, t3: T__, t4: T4, t5: T5, t6: T6): Curry2;
(t1: T__, t2: T2, t3: T3, t4: T__, t5: T5, t6: T6): Curry2;
(t1: T__, t2: T2, t3: T3, t4: T4, t5: T__, t6: T6): Curry2;
(t1: T__, t2: T2, t3: T3, t4: T4, t5: T5, t6: T__): Curry2;
(t1: T1, t2: T__, t3: T__, t4: T4, t5: T5, t6: T6): Curry2;
(t1: T1, t2: T__, t3: T3, t4: T__, t5: T5, t6: T6): Curry2;
(t1: T1, t2: T__, t3: T3, t4: T4, t5: T__, t6: T6): Curry2;
(t1: T1, t2: T__, t3: T3, t4: T4, t5: T5, t6: T__): Curry2;
(t1: T1, t2: T2, t3: T__, t4: T__, t5: T5, t6: T6): Curry2;
(t1: T1, t2: T2, t3: T__, t4: T4, t5: T__, t6: T6): Curry2;
(t1: T1, t2: T2, t3: T__, t4: T4, t5: T5, t6: T__): Curry2;
(t1: T1, t2: T2, t3: T3, t4: T__, t5: T__, t6: T6): Curry2;
(t1: T1, t2: T2, t3: T3, t4: T__, t5: T5, t6: T__): Curry2;
(t1: T1, t2: T2, t3: T3, t4: T4, t5: T__, t6: T__): Curry2;
(t1: T__, t2: T__, t3: T__, t4: T4, t5: T5, t6: T6): Curry3;
(t1: T__, t2: T__, t3: T3, t4: T__, t5: T5, t6: T6): Curry3;
(t1: T__, t2: T__, t3: T3, t4: T4, t5: T__, t6: T6): Curry3;
(t1: T__, t2: T__, t3: T3, t4: T4, t5: T5, t6: T__): Curry3;
(t1: T__, t2: T2, t3: T__, t4: T__, t5: T5, t6: T6): Curry3;
(t1: T__, t2: T2, t3: T__, t4: T4, t5: T__, t6: T6): Curry3;
(t1: T__, t2: T2, t3: T__, t4: T4, t5: T5, t6: T__): Curry3;
(t1: T__, t2: T2, t3: T3, t4: T__, t5: T__, t6: T6): Curry3;
(t1: T__, t2: T2, t3: T3, t4: T__, t5: T5, t6: T__): Curry3;
(t1: T__, t2: T2, t3: T3, t4: T4, t5: T__, t6: T__): Curry3;
(t1: T1, t2: T__, t3: T__, t4: T__, t5: T5, t6: T6): Curry3;
(t1: T1, t2: T__, t3: T__, t4: T4, t5: T__, t6: T6): Curry3;
(t1: T1, t2: T__, t3: T__, t4: T4, t5: T5, t6: T__): Curry3;
(t1: T1, t2: T__, t3: T3, t4: T__, t5: T__, t6: T6): Curry3;
(t1: T1, t2: T__, t3: T3, t4: T__, t5: T5, t6: T__): Curry3;
(t1: T1, t2: T__, t3: T3, t4: T4, t5: T__, t6: T__): Curry3;
(t1: T1, t2: T2, t3: T__, t4: T__, t5: T__, t6: T6): Curry3;
(t1: T1, t2: T2, t3: T__, t4: T__, t5: T5, t6: T__): Curry3;
(t1: T1, t2: T2, t3: T__, t4: T4, t5: T__, t6: T__): Curry3;
(t1: T1, t2: T2, t3: T3, t4: T__, t5: T__, t6: T__): Curry3;
(t1: T__, t2: T__, t3: T__, t4: T__, t5: T5, t6: T6): Curry4;
(t1: T__, t2: T__, t3: T__, t4: T4, t5: T__, t6: T6): Curry4;
(t1: T__, t2: T__, t3: T__, t4: T4, t5: T5, t6: T__): Curry4;
(t1: T__, t2: T__, t3: T3, t4: T__, t5: T__, t6: T6): Curry4;
(t1: T__, t2: T__, t3: T3, t4: T__, t5: T5, t6: T__): Curry4;
(t1: T__, t2: T__, t3: T3, t4: T4, t5: T__, t6: T__): Curry4;
(t1: T__, t2: T2, t3: T__, t4: T__, t5: T__, t6: T6): Curry4;
(t1: T__, t2: T2, t3: T__, t4: T__, t5: T5, t6: T__): Curry4;
(t1: T__, t2: T2, t3: T__, t4: T4, t5: T__, t6: T__): Curry4;
(t1: T__, t2: T2, t3: T3, t4: T__, t5: T__, t6: T__): Curry4;
(t1: T1, t2: T__, t3: T__, t4: T__, t5: T__, t6: T6): Curry4;
(t1: T1, t2: T__, t3: T__, t4: T__, t5: T5, t6: T__): Curry4;
(t1: T1, t2: T__, t3: T__, t4: T4, t5: T__, t6: T__): Curry4;
(t1: T1, t2: T__, t3: T3, t4: T__, t5: T__, t6: T__): Curry4;
(t1: T1, t2: T2, t3: T__, t4: T__, t5: T__, t6: T__): Curry4;
(t1: T__, t2: T__, t3: T__, t4: T__, t5: T__, t6: T6): Curry5;
(t1: T__, t2: T__, t3: T__, t4: T__, t5: T5, t6: T__): Curry5;
(t1: T__, t2: T__, t3: T__, t4: T4, t5: T__, t6: T__): Curry5;
(t1: T__, t2: T__, t3: T3, t4: T__, t5: T__, t6: T__): Curry5;
(t1: T__, t2: T2, t3: T__, t4: T__, t5: T__, t6: T__): Curry5;
(t1: T1, t2: T__, t3: T__, t4: T__, t5: T__, t6: T__): Curry5;
};
/**
* Returns a curried equivalent of the provided function.
*
* Curried function can accept one or multiple parameter at the time:
*
* * `g(1)(2)(3)`
* * `g(1)(2, 3)`
* * `g(1, 2)(3)`
* * `g(1, 2, 3)`
*
* The special placeholder value `__` may be used to specify "gaps", allowing partial application of any combination of arguments, regardless of their positions:
*
* * `g(1, 2, 3)`
* * `g(_, 2, 3)(1)`
* * `g(_, _, 3)(1)(2)`
* * `g(_, _, 3)(1, 2)`
* * `g(_, 2)(1)(3)`
* * `g(_, 2)(1, 3)`
* * `g(_, 2)(_, 3)(1)`
* @example
* ```
* const addNumbers = (a, b, c, d) => a + b + c + d
*
* const addLastNumber = curry(addNumbers)(5, 5, 5)
*
* addLastNumber(5)
*
* const addFirst = curry(addNumbers)(__, 5, 5, 5)
* addFirst(5)
* ```
* @group FP
*/
export declare function curry(fn: (t1: T1, t2: T2) => R): Curry2;
export declare function curry(fn: (t1: T1, t2: T2, t3: T3) => R): Curry3;
export declare function curry(fn: (t1: T1, t2: T2, t3: T3, t4: T4) => R): Curry4;
export declare function curry(fn: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R): Curry5;
export declare function curry(fn: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6) => R): Curry6;
export declare function curry(fn: (t1: T1) => R): Curry1;
/**
* Wraps callback to try/catch block
*
* @param callback
* @returns
* @example
* ```
* const result = tryCatch(() => fetch('http://example.com'))
* if (value instanceof Error) {
* console.log(value.message)
* }
*
* const parsedOrUndefined = tryCatch(() => JSON.parse(jsonString), undefined)
* ```
*/
export declare function tryCatch(callback: () => Promise): Promise;
export declare function tryCatch(callback: () => T): T | Error;
export declare function tryCatch(callback: () => Promise, defaultValue: T2): Promise;
export declare function tryCatch(callback: () => T, defaultValue: T2): T | T2;
export {};