UNPKG

midware

Version:

Module for creating connect-style middlewares. Dependency-free. Runs in the browser and node.js

90 lines (75 loc) 1.86 kB
(function (root, factory) { if (typeof define === 'function' && define.amd) { define(['exports'], factory) } else if (typeof exports === 'object') { factory(exports) if (typeof module === 'object' && module !== null) { module.exports = exports = exports.midware } } else { factory(root) } }(this, function (exports) { 'use strict' function midware(ctx) { var calls = use.stack = [] ctx = ctx || null function use() { toArray(arguments) .filter(function (fn) { return typeof fn === 'function' }) .forEach(function (fn) { calls.push(fn) }) return ctx } use.run = function run() { var done, args = toArray(arguments) if (typeof args[args.length - 1] === 'function') { done = args.pop() } if (!calls.length) { if (done) done.call(ctx) return } var stack = calls.slice() args.push(next) function runNext() { var fn = stack.shift() fn.apply(ctx, args) } function next(err, end) { if (err || end || !stack.length) { stack = null if (done) done.call(ctx, err, end) } else { runNext() } } runNext() } use.remove = function (name) { for (var i = 0, l = calls.length; i < l; i += 1) { var fn = calls[i] if (fn === name || fn.name === name) { calls.splice(i, 1) break } } } use.flush = function () { calls.splice(0) } return use } function toArray(nargs) { var args = new Array(nargs.length) for (var i = 0, l = args.length; i < l; i += 1) { args[i] = nargs[i] } return args } midware.VERSION = '0.1.7' exports.midware = midware }))