Initial commit
[yaffs-website] / node_modules / wrappy / 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 }