UNPKG

curry-this

Version:
70 lines (53 loc) 2.04 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); // istanbul ignore next function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } } var arity = require('util-arity'); exports['default'] = function (_ref) { var placeholder = _ref.placeholder; var merge = function merge(dest, origin) { var newArgs = dest.map(function (i) { var elem = i; if (i === placeholder && origin[0]) { elem = origin.shift(); } return elem; }); return newArgs.concat(origin); }; var actualLength = function actualLength(arr) { return arr.reduce(function (len, curr) { return curr === placeholder ? len : len + 1; }, 0); }; var containsPlaceholder = function containsPlaceholder(args) { return args.some(function (arg) { return arg === placeholder; }); }; function curry() { var fn = this; for (var _len = arguments.length, initialArgs = Array(_len), _key = 0; _key < _len; _key++) { initialArgs[_key] = arguments[_key]; } var len = containsPlaceholder(initialArgs) ? initialArgs.length : fn.length; var _curry = function _curry() { for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } var f = function f() { for (var _len3 = arguments.length, newArgs = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { newArgs[_key3] = arguments[_key3]; } var concatedArgs = merge(args, newArgs); return actualLength(concatedArgs) >= len ? fn.apply(undefined, _toConsumableArray(concatedArgs.slice(0, len))) : _curry.apply(undefined, _toConsumableArray(concatedArgs)); }; return arity(len - actualLength(args), f); }; return _curry.apply(undefined, initialArgs)(); } return curry; }; module.exports = exports['default'];