30 lines
656 B
JavaScript

var FUNCTIONS = {};
/**
* Create a function wrapper that specifies the argument length.
*
* @param {number} arity
* @param {Function} fn
* @return {Function}
*/
module.exports = function (arity, fn) {
if (!FUNCTIONS[arity]) {
var params = [];
if (typeof arity !== 'number') {
throw new TypeError('Expected arity to be a number, got ' + arity);
}
for (var i = 0; i < arity; i++) {
params.push('_' + i);
}
FUNCTIONS[arity] = new Function(
'fn',
'return function arity' + arity + ' (' + params.join(', ') + ') { return fn.apply(this, arguments); }'
);
}
return FUNCTIONS[arity](fn);
};