{"ast":null,"code":"import apply from './_apply.js';\nimport createCtor from './_createCtor.js';\nimport createHybrid from './_createHybrid.js';\nimport createRecurry from './_createRecurry.js';\nimport getHolder from './_getHolder.js';\nimport replaceHolders from './_replaceHolders.js';\nimport root from './_root.js';\n\n/**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createCurry(func, bitmask, arity) {\n  var Ctor = createCtor(func);\n  function wrapper() {\n    var length = arguments.length,\n      args = Array(length),\n      index = length,\n      placeholder = getHolder(wrapper);\n    while (index--) {\n      args[index] = arguments[index];\n    }\n    var holders = length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder ? [] : replaceHolders(args, placeholder);\n    length -= holders.length;\n    if (length < arity) {\n      return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, undefined, args, holders, undefined, undefined, arity - length);\n    }\n    var fn = this && this !== root && this instanceof wrapper ? Ctor : func;\n    return apply(fn, this, args);\n  }\n  return wrapper;\n}\nexport default createCurry;","map":null,"metadata":{},"sourceType":"module","externalDependencies":[]}