ts-prime
Version:
A utility library for JavaScript and Typescript.
54 lines (53 loc) • 1.69 kB
JavaScript
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');
}