123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- 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
|