| 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)(); |
| }); |
| } |