l0bsterssg

node.js static responsive blog post generator
Log | Files | Refs | README

wrappy.js (905B)


      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 }