58 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			58 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | var register = require('./lib/register') | ||
|  | var addHook = require('./lib/add') | ||
|  | var removeHook = require('./lib/remove') | ||
|  | 
 | ||
|  | // bind with array of arguments: https://stackoverflow.com/a/21792913
 | ||
|  | var bind = Function.bind | ||
|  | var bindable = bind.bind(bind) | ||
|  | 
 | ||
|  | function bindApi (hook, state, name) { | ||
|  |   var removeHookRef = bindable(removeHook, null).apply(null, name ? [state, name] : [state]) | ||
|  |   hook.api = { remove: removeHookRef } | ||
|  |   hook.remove = removeHookRef | ||
|  | 
 | ||
|  |   ;['before', 'error', 'after', 'wrap'].forEach(function (kind) { | ||
|  |     var args = name ? [state, kind, name] : [state, kind] | ||
|  |     hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args) | ||
|  |   }) | ||
|  | } | ||
|  | 
 | ||
|  | function HookSingular () { | ||
|  |   var singularHookName = 'h' | ||
|  |   var singularHookState = { | ||
|  |     registry: {} | ||
|  |   } | ||
|  |   var singularHook = register.bind(null, singularHookState, singularHookName) | ||
|  |   bindApi(singularHook, singularHookState, singularHookName) | ||
|  |   return singularHook | ||
|  | } | ||
|  | 
 | ||
|  | function HookCollection () { | ||
|  |   var state = { | ||
|  |     registry: {} | ||
|  |   } | ||
|  | 
 | ||
|  |   var hook = register.bind(null, state) | ||
|  |   bindApi(hook, state) | ||
|  | 
 | ||
|  |   return hook | ||
|  | } | ||
|  | 
 | ||
|  | var collectionHookDeprecationMessageDisplayed = false | ||
|  | function Hook () { | ||
|  |   if (!collectionHookDeprecationMessageDisplayed) { | ||
|  |     console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4') | ||
|  |     collectionHookDeprecationMessageDisplayed = true | ||
|  |   } | ||
|  |   return HookCollection() | ||
|  | } | ||
|  | 
 | ||
|  | Hook.Singular = HookSingular.bind() | ||
|  | Hook.Collection = HookCollection.bind() | ||
|  | 
 | ||
|  | module.exports = Hook | ||
|  | // expose constructors as a named property for TypeScript
 | ||
|  | module.exports.Hook = Hook | ||
|  | module.exports.Singular = Hook.Singular | ||
|  | module.exports.Collection = Hook.Collection |