@newdash/newdash
Version:
javascript/typescript utility library
45 lines (44 loc) • 1.96 kB
JavaScript
;
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;