|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 'use strict'
-
- var wrap = require('./wrap.js')
-
- module.exports = trough
-
- trough.wrap = wrap
-
- var slice = [].slice
-
- // Create new middleware.
- function trough() {
- var fns = []
- var middleware = {}
-
- middleware.run = run
- middleware.use = use
-
- return middleware
-
- // Run `fns`. Last argument must be a completion handler.
- function run() {
- var index = -1
- var input = slice.call(arguments, 0, -1)
- var done = arguments[arguments.length - 1]
-
- if (typeof done !== 'function') {
- throw new Error('Expected function as last argument, not ' + done)
- }
-
- next.apply(null, [null].concat(input))
-
- // Run the next `fn`, if any.
- function next(err) {
- var fn = fns[++index]
- var params = slice.call(arguments, 0)
- var values = params.slice(1)
- var length = input.length
- var pos = -1
-
- if (err) {
- done(err)
- return
- }
-
- // Copy non-nully input into values.
- while (++pos < length) {
- if (values[pos] === null || values[pos] === undefined) {
- values[pos] = input[pos]
- }
- }
-
- input = values
-
- // Next or done.
- if (fn) {
- wrap(fn, next).apply(null, input)
- } else {
- done.apply(null, [null].concat(input))
- }
- }
- }
-
- // Add `fn` to the list.
- function use(fn) {
- if (typeof fn !== 'function') {
- throw new Error('Expected `fn` to be a function, not ' + fn)
- }
-
- fns.push(fn)
-
- return middleware
- }
- }
|