You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
995 B
44 lines
995 B
'use strict'; |
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports['default'] = compose; |
|
// istanbul ignore next |
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } |
|
|
|
var _arityN = require('arity-n'); |
|
|
|
var _arityN2 = _interopRequireDefault(_arityN); |
|
|
|
var compose2 = function compose2(f, g) { |
|
return function () { |
|
return f(g.apply(undefined, arguments)); |
|
}; |
|
}; |
|
|
|
function compose() { |
|
for (var _len = arguments.length, functions = Array(_len), _key = 0; _key < _len; _key++) { |
|
functions[_key] = arguments[_key]; |
|
} |
|
|
|
var funcs = functions.filter(function (fn) { |
|
return typeof fn === 'function'; |
|
}); |
|
|
|
var lastIdx = funcs.length - 1; |
|
var arity = 0; |
|
|
|
if (funcs.length <= 0) { |
|
throw new Error('No funcs passed'); |
|
} |
|
|
|
if (lastIdx >= 0 && funcs[lastIdx]) { |
|
arity = funcs[lastIdx].length; |
|
} |
|
|
|
return (0, _arityN2['default'])(funcs.reduce(compose2), arity); |
|
} |
|
|
|
module.exports = exports['default']; |