UNPKG

moltres-utils

Version:
64 lines (50 loc) 1.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _flatten = _interopRequireDefault(require("./flatten")); var _head = _interopRequireDefault(require("./head")); var _identity = _interopRequireDefault(require("./identity")); var _init = _interopRequireDefault(require("./init")); var _last = _interopRequireDefault(require("./last")); var _length = _interopRequireDefault(require("./length")); var _reduceRight = _interopRequireDefault(require("./reduceRight")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Performs right-to-left function composition. The rightmost function may have * any arity; the remaining functions must be unary. * * **Note:** The result of compose is not automatically curried. * * @func * @category Function * @sig ((y -> z), (x -> y), ..., (o -> p), ((a, b, ..., n) -> o)) -> ((a, b, ..., n) -> z) * @param {...Function} ...functions The functions to compose * @return {Function} * @example * * const classyGreeting = (firstName, lastName) => "The name's " + lastName + ", " + firstName + " " + lastName * const yellGreeting = compose(R.toUpper, classyGreeting); * yellGreeting('James', 'Bond'); //=> "THE NAME'S BOND, JAMES BOND" * * compose(Math.abs, add(1), multiply(2))(-4) //=> 7 * * @symb R.compose(f, g, h)(a, b) = f(g(h(a, b))) */ const compose = (...funcs) => { funcs = (0, _flatten.default)(funcs); const size = (0, _length.default)(funcs); if (size === 0) { return _identity.default; } if (size === 1) { return (0, _head.default)(funcs); } const lastFunc = (0, _last.default)(funcs); const rest = (0, _init.default)(funcs); return (...args) => (0, _reduceRight.default)((composed, func) => func(composed), lastFunc(...args), rest); }; var _default = compose; exports.default = _default; //# sourceMappingURL=compose.js.map