/ node_modules / wrappy / wrappy.js
wrappy.js
 1  // Returns a wrapper function that returns a wrapped callback
 2  // The wrapper function should do some stuff, and return a
 3  // presumably different callback function.
 4  // This makes sure that own properties are retained, so that
 5  // decorations and such are not lost along the way.
 6  module.exports = wrappy
 7  function wrappy (fn, cb) {
 8    if (fn && cb) return wrappy(fn)(cb)
 9  
10    if (typeof fn !== 'function')
11      throw new TypeError('need wrapper function')
12  
13    Object.keys(fn).forEach(function (k) {
14      wrapper[k] = fn[k]
15    })
16  
17    return wrapper
18  
19    function wrapper() {
20      var args = new Array(arguments.length)
21      for (var i = 0; i < args.length; i++) {
22        args[i] = arguments[i]
23      }
24      var ret = fn.apply(this, args)
25      var cb = args[args.length-1]
26      if (typeof ret === 'function' && ret !== cb) {
27        Object.keys(cb).forEach(function (k) {
28          ret[k] = cb[k]
29        })
30      }
31      return ret
32    }
33  }