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
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								}
							 |