You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							34 lines
						
					
					
						
							905 B
						
					
					
				
			
		
		
	
	
							34 lines
						
					
					
						
							905 B
						
					
					
				| // 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
 | |
|   }
 | |
| }
 |