|
var register = require("./lib/register"); |
|
var addHook = require("./lib/add"); |
|
var removeHook = require("./lib/remove"); |
|
|
|
|
|
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; |
|
|
|
module.exports.Hook = Hook; |
|
module.exports.Singular = Hook.Singular; |
|
module.exports.Collection = Hook.Collection; |
|
|