squad
Version:
right-to-left function composition
54 lines (48 loc) • 1.43 kB
JavaScript
;
var compose = [function () {
return function () {};
}, function (f) {
return function () {
return f.apply(undefined, arguments);
};
}, function (f1, f2) {
return function () {
return f1(f2.apply(undefined, arguments));
};
}, function (f1, f2, f3) {
return function () {
return f1(f2(f3.apply(undefined, arguments)));
};
}, function (f1, f2, f3, f4) {
return function () {
return f1(f2(f3(f4.apply(undefined, arguments))));
};
}, function (f1, f2, f3, f4, f5) {
return function () {
return f1(f2(f3(f4(f5.apply(undefined, arguments)))));
};
}, function (f1, f2, f3, f4, f5, f6) {
return function () {
return f1(f2(f3(f4(f5(f6.apply(undefined, arguments))))));
};
}, function (f1, f2, f3, f4, f5, f6, f7) {
return function () {
return f1(f2(f3(f4(f5(f6(f7.apply(undefined, arguments)))))));
};
}];
module.exports = function () {
for (var _len = arguments.length, fns = Array(_len), _key = 0; _key < _len; _key++) {
fns[_key] = arguments[_key];
}
if (fns.length < compose.length) return compose[fns.length].apply(compose, fns);
return bigCompose(fns);
};
function bigCompose(fns) {
return function () {
var i = fns.length - 1;
var value = fns[i].apply(fns, arguments);
while (--i) {
value = fns[i](value);
}return value;
};
}