text: "use strict";
  // 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;
      }
  }
  //# sourceMappingURL=wrappy.js.map