You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
22 lines
654 B
22 lines
654 B
/** |
|
* Composes single-argument functions from right to left. The rightmost |
|
* function can take multiple arguments as it provides the signature for |
|
* the resulting composite function. |
|
* |
|
* @param {...Function} funcs The functions to compose. |
|
* @returns {Function} A function obtained by composing the argument functions |
|
* from right to left. For example, compose(f, g, h) is identical to doing |
|
* (...args) => f(g(h(...args))). |
|
*/ |
|
|
|
export default function compose(...funcs) { |
|
if (funcs.length === 0) { |
|
return (arg) => arg |
|
} |
|
|
|
if (funcs.length === 1) { |
|
return funcs[0] |
|
} |
|
|
|
return funcs.reduce((a, b) => (...args) => a(b(...args))) |
|
}
|
|
|