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
			| 
								 
											4 years ago
										 
									 | 
							
								// 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
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |