mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-01-29 06:27:49 +00:00
* Enable flow and flowRight tests * Remove flow and flowRight tests for default value and shortcut fusion * Use native rest parameters / spread operator in flow and flowRight * Fix syntax of flow and flowRight examples
42 lines
1017 B
JavaScript
42 lines
1017 B
JavaScript
/**
|
|
* 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 ? funcs.length : 0
|
|
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
|