Files: d2f2697f296dd39aed6a8b63c6d04a736a7db5b3 / node_modules / wrappy / wrappy.js
905 bytesRaw
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 | } |
34 |
Built with git-ssb-web