UNPKG

ts-prime

Version:

A utility library for JavaScript and Typescript.

54 lines (53 loc) 1.69 kB
var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; /** * Creates a function with `data-first` and `data-last` signatures. * * `purry` is a dynamic function and it's not type safe. It should be wrapped by a function that have proper typings. * Refer to the example below for correct usage. * * @param fn the function to purry. * @param args the arguments * @signature P.purry(fn, arguments); * @example * function _findIndex(array, fn) { * for (let i = 0; i < array.length; i++) { * if (fn(array[i])) { * return i; * } * } * return -1; * } * * // data-first * function findIndex<T>(array: T[], fn: (item: T) => boolean): number; * * // data-last * function findIndex<T>(fn: (item: T) => boolean): (array: T[]) => number; * * function findIndex() { * return P.purry(_findIndex, arguments); * } * @category Function */ export function purry(fn, args, lazy) { var diff = fn.length - args.length; var arrayArgs = Array.from(args); if (diff === 0) { return fn.apply(void 0, arrayArgs); } if (diff === 1) { var ret = function (data) { return fn.apply(void 0, __spreadArrays([data], arrayArgs)); }; if (lazy || fn.lazy) { ret.lazy = lazy || fn.lazy; ret.lazyArgs = args; } return ret; } throw new Error('Wrong number of arguments'); }