Projekt

Obecné

Profil

Stáhnout (905 Bajtů) Statistiky
| Větev: | Revize:
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
}
(4-4/4)