node/tools/eslint/node_modules/es5-ext/function/#/curry.js
Michaël Zasso 2d441493a4 tools: update eslint to v1.10.3
PR-URL: https://github.com/nodejs/io.js/pull/2286
Reviewed-By: Roman Reiss <me@silverwind.io>
2016-01-13 23:15:39 +01:00

25 lines
784 B
JavaScript

'use strict';
var toPosInt = require('../../number/to-pos-integer')
, callable = require('../../object/valid-callable')
, defineLength = require('../_define-length')
, slice = Array.prototype.slice, apply = Function.prototype.apply
, curry;
curry = function self(fn, length, preArgs) {
return defineLength(function () {
var args = preArgs ?
preArgs.concat(slice.call(arguments, 0, length - preArgs.length)) :
slice.call(arguments, 0, length);
return (args.length === length) ? apply.call(fn, this, args) :
self(fn, length, args);
}, preArgs ? (length - preArgs.length) : length);
};
module.exports = function (/*length*/) {
var length = arguments[0];
return curry(callable(this),
isNaN(length) ? toPosInt(this.length) : toPosInt(length));
};