UNPKG

@newdash/newdash

Version:

javascript/typescript utility library

45 lines (44 loc) 1.96 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createCurry = void 0; const apply_1 = __importDefault(require("./apply")); const createCtor_1 = __importDefault(require("./createCtor")); const createHybrid_1 = __importDefault(require("./createHybrid")); const createRecurry_1 = __importDefault(require("./createRecurry")); const getHolder_1 = __importDefault(require("./getHolder")); const replaceHolders_1 = __importDefault(require("./replaceHolders")); const root_1 = __importDefault(require("./root")); /** * Creates a function that wraps `func` to enable currying. * * @internal * @private * @param func The function to wrap. * @param bitmask The bitmask flags. See `createWrap` for more details. * @param arity The arity of `func`. * @returns Returns the new wrapped function. */ function createCurry(func, bitmask, arity) { var Ctor = (0, createCtor_1.default)(func); function wrapper() { var length = arguments.length, args = Array(length), index = length, placeholder = (0, getHolder_1.default)(wrapper); while (index--) { args[index] = arguments[index]; } var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) ? [] : (0, replaceHolders_1.default)(args, placeholder); length -= holders.length; if (length < arity) { return (0, createRecurry_1.default)(func, bitmask, createHybrid_1.default, wrapper.placeholder, undefined, args, holders, undefined, undefined, arity - length); } var fn = (this && this !== root_1.default && this instanceof wrapper) ? Ctor : func; return (0, apply_1.default)(fn, this, args); } return wrapper; } exports.createCurry = createCurry; exports.default = createCurry;