# octo-composer

> octo-composer is a minimalistic yet powerfull middleware composing library for node.js.

Latest version **1.1.5** (published 2016-11-23) · MIT license · 0 weekly downloads

## Install

```sh
npm install octo-composer
pnpm add octo-composer
yarn add octo-composer
bun add octo-composer
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.5 |
| Published | 2016-11-23 |
| First published | 2016-11-23 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 4 |
| Author | Dawid Kraczkowski |
| Maintainers | crac |
| Keywords | middleware, composer, compose, function |

## Links

- npm: https://www.npmjs.com/package/octo-composer
- Repository: https://github.com/dkraczkowski/octo-composer
- Issues: https://github.com/dkraczkowski/octo-composer/issues
- npm.io page: https://npm.io/package/octo-composer

## Alternatives

- [@sindresorhus/slugify](https://npm.io/package/@sindresorhus/slugify.md) — 3.7M weekly downloads
- [solid-js](https://npm.io/package/solid-js.md) — 2.7M weekly downloads
- [expo-glass-effect](https://npm.io/package/expo-glass-effect.md) — 2.5M weekly downloads
- [nanoassert](https://npm.io/package/nanoassert.md) — 780.8K weekly downloads
- [@ffmpeg/ffmpeg](https://npm.io/package/@ffmpeg/ffmpeg.md) — 529.5K weekly downloads

## Recent versions

- 1.1.5 (latest) — 2016-11-23
- 1.1.3 — 2016-11-23
- 1.1.2 — 2016-11-23
- 1.1.1 — 2016-11-23
- 1.1.0 — 2016-11-23
- 1.0.2 — 2016-11-23
- 1.0.1 — 2016-11-23
- 1.0.0 — 2016-11-23

## README

# Octo-composer [![Build Status](https://travis-ci.org/dkraczkowski/octo-composer.svg?branch=master)](https://travis-ci.org/dkraczkowski/octo-composer)
octo-composer is a minimalistic stand-alone middleware composing library for node.js.

# Installation
npm install octo-composer

# Usage

###Simple example

```js
var compose = require('octo-composer').compose;

var middleware = compose([
  function (next) { console.log('Hello'); next(); },
  function (next) { console.log('World'); next(); }
]);

middleware();// Will print: HelloWorld
```

###Handling errors
```js
var MiddlewareComposer = require('octo-composer').MiddlewareComposer;

var middleware = new MiddlewareComposer();
middleware.then(function(next) {console.log('Hello'); next()})
    .then(function(next) {throw new Error('Error!'); next();})
    .catch(function (err) {console.log(err.message);});

middleware.execute();// Will print: HelloError!
```

###Handling completion
```js
var MiddlewareComposer = require('octo-composer').MiddlewareComposer;

var middleware = new MiddlewareComposer();
middleware.then(function(next) {console.log('Hello'); next();})
    .then(function(next) {console.log('World'); next();})
    .end(function () {console.log('!');});

middleware.execute();// Will print: HelloWorld!
```

###Passing parameters to middlewares
```js
var MiddlewareComposer = require('octo-composer').MiddlewareComposer;

var middleware = new MiddlewareComposer();
middleware.then(function(a, b, next) {console.log(a + b); next();})
    .then(function(a, b, next) {console.log(a * b); next();});

middleware.execute(1, 2);// Will print: 32
```

# API

## `new MiddlewareComposer()`
Creates new middleware composer instance

## `MiddlewareComposer.then(middleware)`
Adds middleware function to the composer.

## `MiddlewareComposer.end`
Sets completion handler. The handler will be executed only if all middlewares were successfully run.

## `MiddlewareComposer.catch(handler)`
Sets error handler. If any of middlewares throw an error MiddlewareComposer will stop executing the rest of middlewares 
and will call error handler instead.

## `MiddlewareComposer.execute(..args)`
Executes all middlewares in the order they were added to the composer. All middlewares will receive `next` function
as an additional parameter to the one that are passed to this method. 

`next` function must be called in each of middlewares in order this to work.

## `compose(middlewares, onEnd, onError)`
Returns function which can be used to execute composed middleware handler.

---
_Source: https://npm.io/package/octo-composer · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
