foop
Version:
interfaces that describe their intentions.
60 lines (57 loc) • 4.56 kB
JavaScript
var isArray = require('../is/array')
var argumentor = require('../cast/argumentor')
var pipeTwo = require('./pipeTwo')
/**
* 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`.
*
* @icon |
* @func
* @memberOf fp
* @since v5.0.0
* @category Function
* @sig (((a, b, ..., n) -> o), (o -> p), ..., (x -> y), (y -> z)) -> ((a, b, ..., n) -> z)
* @symb pipe(f, g, h)(a, b) = h(g(f(a, b)))
* @extends fp/pipeTwo
*
* @param {Function} first function first
* @param {...Function} rest function next
* @return {Function}
*
* @see https://github.com/ramda/ramda/blob/master/src/compose.js
* @see https://github.com/ramda/ramda/blob/master/src/pipe.js
* @see https://github.com/ramda/ramda/blob/master/test/pipe.js
*
* @types fp
* @tests fp/pipe
*
* @example
*
* var f = R.pipe(Math.pow, R.negate, R.inc);
* f(3, 4); // -(3^4) + 1
*
* @example
*
* var x = v => v + 'x'
* var y = v => v + 'y'
* var z = v => v + 'z'
*
* const xyz = pipe(x, y, z)
* /// starts with w, adds x, then y, then z
* const wxyz = xyz('w')
* //=> 'wxyz'
*
*/
module.exports = function pipe(first) {
// @TODO: could move into pipeArray
// could start from first, second? etc?
// (isArray(first) ? first : argumentor.apply(null, arguments))
var args = argumentor
.apply(null, arguments)
.slice(1)
.reduce(pipeTwo)
// .reduce((previous, next) => pipeTwo(previous, next))
return pipeTwo(first, args)
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZS5qcyIsInNvdXJjZXMiOlsicGlwZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaXMvYXJyYXknKVxuY29uc3QgYXJndW1lbnRvciA9IHJlcXVpcmUoJy4uL2Nhc3QvYXJndW1lbnRvcicpXG5jb25zdCBwaXBlVHdvID0gcmVxdWlyZSgnLi9waXBlVHdvJylcblxuLyoqXG4gKiBQZXJmb3JtcyBsZWZ0LXRvLXJpZ2h0IGZ1bmN0aW9uIGNvbXBvc2l0aW9uLiBUaGUgbGVmdG1vc3QgZnVuY3Rpb24gbWF5IGhhdmVcbiAqIGFueSBhcml0eTsgdGhlIHJlbWFpbmluZyBmdW5jdGlvbnMgbXVzdCBiZSB1bmFyeS5cbiAqIEluIHNvbWUgbGlicmFyaWVzIHRoaXMgZnVuY3Rpb24gaXMgbmFtZWQgYHNlcXVlbmNlYC5cbiAqXG4gKiBAaWNvbiB8XG4gKiBAZnVuY1xuICogQG1lbWJlck9mIGZwXG4gKiBAc2luY2UgdjUuMC4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBzaWcgKCgoYSwgYiwgLi4uLCBuKSAtPiBvKSwgKG8gLT4gcCksIC4uLiwgKHggLT4geSksICh5IC0+IHopKSAtPiAoKGEsIGIsIC4uLiwgbikgLT4geilcbiAqIEBzeW1iIHBpcGUoZiwgZywgaCkoYSwgYikgPSBoKGcoZihhLCBiKSkpXG4gKiBAZXh0ZW5kcyBmcC9waXBlVHdvXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZmlyc3QgZnVuY3Rpb24gZmlyc3RcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IHJlc3QgZnVuY3Rpb24gbmV4dFxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vcmFtZGEvcmFtZGEvYmxvYi9tYXN0ZXIvc3JjL2NvbXBvc2UuanNcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3JhbWRhL3JhbWRhL2Jsb2IvbWFzdGVyL3NyYy9waXBlLmpzXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yYW1kYS9yYW1kYS9ibG9iL21hc3Rlci90ZXN0L3BpcGUuanNcbiAqXG4gKiBAdHlwZXMgZnBcbiAqIEB0ZXN0cyBmcC9waXBlXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBmID0gUi5waXBlKE1hdGgucG93LCBSLm5lZ2F0ZSwgUi5pbmMpO1xuICogICAgICBmKDMsIDQpOyAvLyAtKDNeNCkgKyAxXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICB2YXIgeCA9IHYgPT4gdiArICd4J1xuICogICAgdmFyIHkgPSB2ID0+IHYgKyAneSdcbiAqICAgIHZhciB6ID0gdiA9PiB2ICsgJ3onXG4gKlxuICogICAgY29uc3QgeHl6ID0gcGlwZSh4LCB5LCB6KVxuICogICAgLy8vIHN0YXJ0cyB3aXRoIHcsIGFkZHMgeCwgdGhlbiB5LCB0aGVuIHpcbiAqICAgIGNvbnN0IHd4eXogPSB4eXooJ3cnKVxuICogICAgLy89PiAnd3h5eidcbiAqXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGlwZShmaXJzdCkge1xuICAvLyBAVE9ETzogY291bGQgbW92ZSBpbnRvIHBpcGVBcnJheVxuICAvLyBjb3VsZCBzdGFydCBmcm9tIGZpcnN0LCBzZWNvbmQ/IGV0Yz9cbiAgLy8gKGlzQXJyYXkoZmlyc3QpID8gZmlyc3QgOiBhcmd1bWVudG9yLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpXG4gIGxldCBhcmdzID0gYXJndW1lbnRvclxuICAgIC5hcHBseShudWxsLCBhcmd1bWVudHMpXG4gICAgLnNsaWNlKDEpXG4gICAgLnJlZHVjZShwaXBlVHdvKVxuICAgIC8vIC5yZWR1Y2UoKHByZXZpb3VzLCBuZXh0KSA9PiBwaXBlVHdvKHByZXZpb3VzLCBuZXh0KSlcblxuICByZXR1cm4gcGlwZVR3byhmaXJzdCwgYXJncylcbn1cbiJdLCJuYW1lcyI6WyJjb25zdCIsImxldCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUN0Q0EsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUM7QUFDaERBLEdBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0Q3BDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxJQUFJLENBQUMsS0FBSyxFQUFFOzs7O0VBSXBDQyxHQUFHLENBQUMsSUFBSSxHQUFHLFVBQVU7S0FDbEIsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7S0FDdEIsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUNSLE1BQU0sQ0FBQyxPQUFPLENBQUM7OztFQUdsQixPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO0NBQzVCOyJ9