47 lines
		
	
	
		
			989 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			989 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | module.exports = addHook | ||
|  | 
 | ||
|  | function addHook (state, kind, name, hook) { | ||
|  |   var orig = hook | ||
|  |   if (!state.registry[name]) { | ||
|  |     state.registry[name] = [] | ||
|  |   } | ||
|  | 
 | ||
|  |   if (kind === 'before') { | ||
|  |     hook = function (method, options) { | ||
|  |       return Promise.resolve() | ||
|  |         .then(orig.bind(null, options)) | ||
|  |         .then(method.bind(null, options)) | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   if (kind === 'after') { | ||
|  |     hook = function (method, options) { | ||
|  |       var result | ||
|  |       return Promise.resolve() | ||
|  |         .then(method.bind(null, options)) | ||
|  |         .then(function (result_) { | ||
|  |           result = result_ | ||
|  |           return orig(result, options) | ||
|  |         }) | ||
|  |         .then(function () { | ||
|  |           return result | ||
|  |         }) | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   if (kind === 'error') { | ||
|  |     hook = function (method, options) { | ||
|  |       return Promise.resolve() | ||
|  |         .then(method.bind(null, options)) | ||
|  |         .catch(function (error) { | ||
|  |           return orig(error, options) | ||
|  |         }) | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   state.registry[name].push({ | ||
|  |     hook: hook, | ||
|  |     orig: orig | ||
|  |   }) | ||
|  | } |