Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
41 lines (40 sloc)
1005 Bytes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Composes a function that returns the result of invoking the given functions | |
* with the `this` binding of the created function, where each successive | |
* invocation is supplied the return value of the previous. | |
* | |
* @since 3.0.0 | |
* @category Util | |
* @param {Function[]} [funcs] The functions to invoke. | |
* @returns {Function} Returns the new composite function. | |
* @see flowRight | |
* @example | |
* | |
* import add from 'lodash/add' | |
* | |
* function square(n) { | |
* return n * n | |
* } | |
* | |
* const addSquare = flow(add, square) | |
* addSquare(1, 2) | |
* // => 9 | |
*/ | |
function flow(...funcs) { | |
const length = funcs.length | |
let index = length | |
while (index--) { | |
if (typeof funcs[index] !== 'function') { | |
throw new TypeError('Expected a function') | |
} | |
} | |
return function(...args) { | |
let index = 0 | |
let result = length ? funcs[index].apply(this, args) : args[0] | |
while (++index < length) { | |
result = funcs[index].call(this, result) | |
} | |
return result | |
} | |
} | |
export default flow |