Skip to content

supercharge/pipeline

Repository files navigation



Pipeline

Run a pipeline of async tasks


Installation · Docs · Usage



Latest Version Monthly downloads

Follow @marcuspoehls and @superchargejs for updates!


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 😊

  1. Create a fork
  2. Create your feature branch: git checkout -b my-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request 🚀

License

MIT © Supercharge


superchargejs.com  ·  GitHub @supercharge  ·  Twitter @superchargejs