Spaces:
Paused
Paused
| 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; | |