| module.exports = register; | |
| function register(state, name, method, options) { | |
| if (typeof method !== "function") { | |
| throw new Error("method for before hook must be a function"); | |
| } | |
| if (!options) { | |
| options = {}; | |
| } | |
| if (Array.isArray(name)) { | |
| return name.reverse().reduce(function (callback, name) { | |
| return register.bind(null, state, name, callback, options); | |
| }, method)(); | |
| } | |
| return Promise.resolve().then(function () { | |
| if (!state.registry[name]) { | |
| return method(options); | |
| } | |
| return state.registry[name].reduce(function (method, registered) { | |
| return registered.hook.bind(null, method, options); | |
| }, method)(); | |
| }); | |
| } | |