moltres-utils
Version:
Utils for Moltres apps
61 lines (48 loc) • 1.66 kB
JavaScript
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 _length = _interopRequireDefault(require("./length"));
var _reduce = _interopRequireDefault(require("./reduce"));
var _tail = _interopRequireDefault(require("./tail"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Performs left-to-right function composition. The leftmost function may have
* any arity; the remaining functions must be unary.
*
* In some libraries this function is named `sequence`.
*
* **Note:** The result of pipe is not automatically curried.
*
* @func
* @category Function
* @sig (((a, b, ..., n) -> o), (o -> p), ..., (x -> y), (y -> z)) -> ((a, b, ..., n) -> z)
* @param {...Function} functions
* @return {Function}
* @example
*
* const f = pipe(Math.pow, negate, inc);
*
* f(3, 4); // -(3^4) + 1
* @symb pipe(f, g, h)(a, b) = h(g(f(a, b)))
*/
const pipe = (...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 firstFunc = (0, _head.default)(funcs);
const rest = (0, _tail.default)(funcs);
return (...args) => (0, _reduce.default)((piped, func) => func(piped), firstFunc(...args), rest);
};
var _default = pipe;
exports.default = _default;
//# sourceMappingURL=pipe.js.map
;