| 123456789101112131415161718192021222324252627282930313233 | 
							- // Returns a wrapper function that returns a wrapped callback
 
- // The wrapper function should do some stuff, and return a
 
- // presumably different callback function.
 
- // This makes sure that own properties are retained, so that
 
- // decorations and such are not lost along the way.
 
- module.exports = wrappy
 
- function wrappy (fn, cb) {
 
-   if (fn && cb) return wrappy(fn)(cb)
 
-   if (typeof fn !== 'function')
 
-     throw new TypeError('need wrapper function')
 
-   Object.keys(fn).forEach(function (k) {
 
-     wrapper[k] = fn[k]
 
-   })
 
-   return wrapper
 
-   function wrapper() {
 
-     var args = new Array(arguments.length)
 
-     for (var i = 0; i < args.length; i++) {
 
-       args[i] = arguments[i]
 
-     }
 
-     var ret = fn.apply(this, args)
 
-     var cb = args[args.length-1]
 
-     if (typeof ret === 'function' && ret !== cb) {
 
-       Object.keys(cb).forEach(function (k) {
 
-         ret[k] = cb[k]
 
-       })
 
-     }
 
-     return ret
 
-   }
 
- }
 
 
  |