feat(compose): supports attaching extra params
This commit is contained in:
parent
ed252276cb
commit
ace31dc566
@ -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
|
||||||
|
@ -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.
|
||||||
|
@ -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]
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user