.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / trough / index.js
1 'use strict'
2
3 var wrap = require('./wrap.js')
4
5 module.exports = trough
6
7 trough.wrap = wrap
8
9 var slice = [].slice
10
11 // Create new middleware.
12 function trough() {
13   var fns = []
14   var middleware = {}
15
16   middleware.run = run
17   middleware.use = use
18
19   return middleware
20
21   // Run `fns`.  Last argument must be a completion handler.
22   function run() {
23     var index = -1
24     var input = slice.call(arguments, 0, -1)
25     var done = arguments[arguments.length - 1]
26
27     if (typeof done !== 'function') {
28       throw new Error('Expected function as last argument, not ' + done)
29     }
30
31     next.apply(null, [null].concat(input))
32
33     // Run the next `fn`, if any.
34     function next(err) {
35       var fn = fns[++index]
36       var params = slice.call(arguments, 0)
37       var values = params.slice(1)
38       var length = input.length
39       var pos = -1
40
41       if (err) {
42         done(err)
43         return
44       }
45
46       // Copy non-nully input into values.
47       while (++pos < length) {
48         if (values[pos] === null || values[pos] === undefined) {
49           values[pos] = input[pos]
50         }
51       }
52
53       input = values
54
55       // Next or done.
56       if (fn) {
57         wrap(fn, next).apply(null, input)
58       } else {
59         done.apply(null, [null].concat(input))
60       }
61     }
62   }
63
64   // Add `fn` to the list.
65   function use(fn) {
66     if (typeof fn !== 'function') {
67       throw new Error('Expected `fn` to be a function, not ' + fn)
68     }
69
70     fns.push(fn)
71
72     return middleware
73   }
74 }