Skip to main content
Module

x/rambda/source/curryN.js

Faster and smaller alternative to Ramda
Go to Latest
File
function _curryN(n, cache, fn) { return function () { let ci = 0 let ai = 0 const cl = cache.length const al = arguments.length const args = new Array(cl + al) while (ci < cl) { args[ci] = cache[ci] ci++ } while (ai < al) { args[cl + ai] = arguments[ai] ai++ } const remaining = n - args.length
return args.length >= n ? fn.apply(this, args) : _arity(remaining, _curryN(n, args, fn)) }}
function _arity(n, fn) { switch (n) { case 0: return function () { return fn.apply(this, arguments) } case 1: return function (_1) { return fn.apply(this, arguments) } case 2: return function (_1, _2) { return fn.apply(this, arguments) } case 3: return function (_1, _2, _3) { return fn.apply(this, arguments) } case 4: return function (_1, _2, _3, _4) { return fn.apply(this, arguments) } case 5: return function (_1, _2, _3, _4, _5) { return fn.apply(this, arguments) } case 6: return function (_1, _2, _3, _4, _5, _6) { return fn.apply(this, arguments) } case 7: return function (_1, _2, _3, _4, _5, _6, _7) { return fn.apply(this, arguments) } case 8: return function (_1, _2, _3, _4, _5, _6, _7, _8) { return fn.apply(this, arguments) } case 9: return function (_1, _2, _3, _4, _5, _6, _7, _8, _9) { return fn.apply(this, arguments) } default: return function (_1, _2, _3, _4, _5, _6, _7, _8, _9, _10) { return fn.apply(this, arguments) } }}
export function curryN(n, fn) { if (arguments.length === 1) return _fn => curryN(n, _fn)
if (n > 10) { throw new Error( 'First argument to _arity must be a non-negative integer no greater than ten' ) }
return _arity(n, _curryN(n, [], fn))}