UNPKG

tamda

Version:

Practical functional programming library for TypeScript

56 lines (53 loc) 2.42 kB
// prettier-ignore import { Binary, Denary, Novenary, Nullary, Octonary, Quaternary, Quinary, Senary, Septenary, Ternary, Unary } from '../operators'; /** * Creates a function that evaluates whether values returned by all `functions` are truthy. * * i.e. `fn1() && fn2()` * * @note Ramda's `both`. * @example * const larger = curry((limit, num) => num > limit); * const smaller = curry((limit, num) => num < limit); * const between = (min, max) => and(larger(min), smaller(max)); * const between0and10 = between(0, 10); * between0and10(5); * // true * between0and10(15); * // false */ export function and(...functions: Nullary<unknown>[]): Nullary<boolean>; export function and<A>(...functions: Unary<A, unknown>[]): Unary<A, boolean>; // prettier-ignore export function and<A, B>(...functions: Binary<A, B, unknown>[]): Binary<A, B, boolean>; // prettier-ignore export function and<A, B, C>(...functions: Ternary<A, B, C, unknown>[]): Ternary<A, B, C, boolean>; // prettier-ignore export function and<A, B, C, D>(...functions: Quaternary<A, B, C, D, unknown>[]): Quaternary<A, B, C, D, boolean>; // prettier-ignore export function and<A, B, C, D, E>(...functions: Quinary<A, B, C, D, E, unknown>[]): Quinary<A, B, C, D, E, boolean>; // prettier-ignore export function and<A, B, C, D, E, F>(...functions: Senary<A, B, C, D, E, F, unknown>[]) : Senary<A, B, C, D, E, F, boolean>; // prettier-ignore export function and<A, B, C, D, E, F, G>(...functions: Septenary<A, B, C, D, E, F, G, unknown>[]) : Septenary<A, B, C, D, E, F, G, boolean>; // prettier-ignore export function and<A, B, C, D, E, F, G, H>(...functions: Octonary<A, B, C, D, E, F, G, H, unknown>[]) : Octonary<A, B, C, D, E, F, G, H, boolean>; // prettier-ignore export function and<A, B, C, D, E, F, G, H, I>(...functions: Novenary<A, B, C, D, E, F, G, H, I, unknown>[]) : Novenary<A, B, C, D, E, F, G, H, I, boolean>; // prettier-ignore export function and<A, B, C, D, E, F, G, H, I, J>(...functions: Denary<A, B, C, D, E, F, G, H, I, J, unknown>[]) : Denary<A, B, C, D, E, F, G, H, I, J, boolean>; // tslint:disable-next-line: ban-types export function and(...functions: Function[]): (...args: unknown[]) => boolean { // tslint:disable-next-line: only-arrow-functions return function() { return functions.every(fn => Boolean(fn.apply(undefined, arguments))); }; }