feat(compose): supports attaching extra params

This commit is contained in:
Julien Fontanet 2021-12-02 21:36:38 +01:00
parent ed252276cb
commit ace31dc566
4 changed files with 53 additions and 0 deletions

View File

@ -65,6 +65,23 @@ const f = compose(
) )
``` ```
Functions can receive extra parameters:
```js
const isIn = (value, min, max) => min <= value && value <= max
// Only compatible when `fns` is passed as an array!
const f = compose([
[add, 2],
[isIn, 3, 10],
])
console.log(f(1))
// → true
```
> Note: if the first function is defined with extra parameters, it will only receive the first value passed to the composed function, instead of all the parameters.
## Contributions ## Contributions
Contributions are _very_ welcomed, either on the documentation or on Contributions are _very_ welcomed, either on the documentation or on

View File

@ -46,3 +46,20 @@ const f = compose(
[add2, mul3] [add2, mul3]
) )
``` ```
Functions can receive extra parameters:
```js
const isIn = (value, min, max) => min <= value && value <= max
// Only compatible when `fns` is passed as an array!
const f = compose([
[add, 2],
[isIn, 3, 10],
])
console.log(f(1))
// → true
```
> Note: if the first function is defined with extra parameters, it will only receive the first value passed to the composed function, instead of all the parameters.

View File

@ -22,6 +22,24 @@ exports.compose = function compose(opts, fns) {
if (n === 0) { if (n === 0) {
throw new TypeError('at least one function must be passed') throw new TypeError('at least one function must be passed')
} }
for (let i = 0; i < n; ++i) {
const entry = fns[i]
if (Array.isArray(entry)) {
const fn = entry[0]
const args = entry.slice()
args[0] = undefined
fns[i] = function composeWithArgs(value) {
args[0] = value
try {
return fn.apply(this, args)
} finally {
args[0] = undefined
}
}
}
}
if (n === 1) { if (n === 1) {
return fns[0] return fns[0]
} }

View File

@ -34,6 +34,7 @@
> >
> In case of conflict, the highest (lowest in previous list) `$version` wins. > In case of conflict, the highest (lowest in previous list) `$version` wins.
- @vates/compose minor
- xo-vmdk-to-vhd patch - xo-vmdk-to-vhd patch
- vhd-lib patch - vhd-lib patch
- @xen-orchestra/backups patch - @xen-orchestra/backups patch