@supercharge/pipeline
v1.4.0
Published
Run a pipeline of async tasks
Downloads
30
Readme
Introduction
The @supercharge/pipeline
package allows you to run a pipeline of async tasks. You’ll pipe an input serially through a list of (async) functions or classes. When using classes, you may define the called method on each class instance.
Installation
npm i @supercharge/pipeline
Docs
Find all the details for @supercharge/pipeline
in the extensive Supercharge docs.
Usage
Using @supercharge/pipeline
is pretty straightforward. Pass an array of classes or functions to a list and the pipeline sends the input through each stop.
For example, you may bootstrap an application by running a series of tasks:
const App = require('./your-application')
const Pipeline = require('@supercharge/pipeline')
const app = await Pipeline
.send(new App())
.through([
LoadEnvironment,
InitializeAppConfig,
RegisterRoutes,
RegisterMiddleware,
function logAppVersion (app) {
console.log(app.version())
return app
}
])
.then(async app => {
await app.startServer()
return app
})
When using classes in a pipeline, the constructor receives the item you’re sending through the pipeline. In the example above, each class (e.g., LoadEnvironment
) receives the app
instance in the constructor.
A class instance for the pipeline may look like this:
class LoadEnvironment {
constructor (app) {
this.app = app
}
async handle () {
// do the heavy lifting
}
}
Using custom class methods
By default, the pipeline calls the .handle()
method on class instances. You may change the method using the Pipeline.via
method:
const App = require('./your-application')
const Pipeline = require('@supercharge/pipeline')
const app = await Pipeline
.send(new App())
.through([
…
])
.via('methodName')
.then(…)
And then return…
A pipeline starts when calling the .then
method. The then
method requires a callback as a parameter. You can skip the last stop (the callback of then
) by directly returning the result of the pipeline using the .thenReturn
method:
const app = await Pipeline
.send(new App())
.through([ … ])
.via('methodName')
.thenReturn()
Credits and Love to Laravel
The idea for this package comes from the Laravel PHP framework. Laravel contains a pipeline package providing the idea for this package. This package provides the same API as the Laravel pipeline package. A huge thank you goes to Laravel, being a great inspiration ❤️
Contributing
Do you miss a function? We very much appreciate your contribution! Please send in a pull request 😊
- Create a fork
- Create your feature branch:
git checkout -b my-feature
- Commit your changes:
git commit -am 'Add some feature'
- Push to the branch:
git push origin my-new-feature
- Submit a pull request 🚀
License
MIT © Supercharge
superchargejs.com · GitHub @superchargejs · Twitter @superchargejs