prepost
v1.1.0
Published
Alter arguments and return values before and after a function is called
Maintainers
Readme
prepost
Alter arguments and return values before and after a function is called
Install
npm install prepostUsage
Alter arguments to a function:
import { pre } from 'prepost'
const add = (a, b) => a + b
const doubleAdd = pre((a, b) => [a * 2, b * 2], add)
add(1, 2) // -> 3
doubleAdd(1, 2) // -> 6Alter return value from a function:
import { post } from 'prepost'
const add = (a, b) => a + b
const doubleAdd = post(add, res => res * 2)
add(1, 2) // -> 3
doubleAdd(1, 2) // -> 6Async alter arguments:
import { pre } from 'prepost'
const add = (a, b) => a + b
const doubleAdd = pre(
(a, b) => new Promise(resolve => setTimeout(resolve([a * 2, b * 2]), 1000)),
add
)
add(1, 2) // -> 3
await doubleAdd(1, 2) // -> 6Async alter return value:
import { post } from 'prepost'
const add = (a, b) => a + b
const doubleAdd = post(
add,
res => new Promise(resolve => setTimeout(resolve(res * 2), 1000))
)
add(1, 2) // -> 3
await doubleAdd(1, 2) // -> 6API
pre(preFunc, [preFunc1, preFunc2, ...,] func)
preFunc- function (or array of functions) to call beforefunc. It is passed arguments as they would be if callingfuncnormally.preFuncmust return an array of arguments or a promise that resolves to an array.preFunc1, preFunc2, ...- other functions to call in series beforefunc. The altered arguments frompreFuncare passed topreFunc1and so on.func- function to call after all the pre-functions have run and altered arguments
Returns a function that when called will call all the pre-functions in order before finally calling func.
NOTE: If any one of your pre functions returns a promise then the function returned by pre becomes async (returns a promise), regardless of whether func was already async or not.
post(func, postFunc [, postFunc1, postFunc2, ...])
func- function to call and pass return value topostFuncpostFunc- function (or array of functions) to call afterfunc. It is passed the return value as it's first argument. Iffuncreturns a promise, this is first resolved beforepostFuncis called.preFuncshould return the altered return value fromfuncor a promise that resolves to the return value.postFunc1, postFunc2, ...- other functions to call in series afterfunc. The altered return value frompostFuncis passed topostFunc1and so on.
Returns a function that when called will call all the post-functions in order after calling func.
NOTE: If any one of your post functions returns a promise then the function returned by post becomes async (returns a promise), regardless of whether func was already async or not.
Contribute
Feel free to dive in! Open an issue or submit PRs.
License
MIT © Alan Shaw
