A tiny middleware combiner has back, next, abort and resume actions
A action could split into minor action, and every minor action has a connection. such as trigger next one if success, retry from last step, or restart from beginning..
For this purpose, every minor task should comply with a semantically pattern. In sabar, the last two params will be ctx and actions
npm i sabarimport Sabar from 'sabar'
const payment = new Sabar()
const validateIdentity = (user, ctx, actions) => {
const falsy = validate(use.identity)
if (falsy) actions.next()
else actions.resume()
}
const validateAccount = (user, ctx, actions) => {
const falsy = isAfford(use.account)
if (falsy) actions.next()
else action.resume()
}
payment.use(validateIdentity)
payment.use(validateAccount)
const user = {
identify: { name: 'charlie' },
account: 100,
}
payment.start(user)| Property | Description | Type | Required |
|---|---|---|---|
| ctx | Initial value of ctx and default as {}. It will be shared between middleware |
object | no |
| onError | Triggered when abort function is invoked |
Function | no |
| onSuccess | Triggered when there is no nextSibling of current running middleware |
Function | no |
| onFinish | Trigger when onError or onSuccess is invoked |
Function | no |
const payment = new Sabar({ ctx: { paymentMethod: 'visa' }})use is to register fn to sabar instance. fn is an variadic function with ctx and actions tailing params.
const payment = new Sabar({ ctx: { paymentMethod: 'visa' }})
const validateAddress = (args, ctx, actions) => {
const { location, name } = args
if (!isValidAddress({ location, name })) {
return actions.abort()
}
actions.next()
}
const validateCard = (args, ctx, actions) => {
const { cardNumber } = args
if (!isValidCard({ cardNumber })) {
return actions.abort()
}
actions.next()
}
const applyPayment = payment.use(
validateAddress,
validateCard,
)arg could be a Sabar object. In this condition, Sabar will copy middleware from arg object.
const job = new Sabar()
job.use(fn)
const nextJob = new Sabar()
nextJob.use(job)
job.start()
nextJob.start()start will make actions begin running. It args will be passing between middleware as heading params.
const job = new Sabar()
job.use(fn)
job.start()| Property | Description |
|---|---|
| next | Trigger next middleware |
| back | Rerun from last middleware |
| abort | Stop middleware running |
| resume | Rerun from beginning |