28 lines
678 B
JavaScript
28 lines
678 B
JavaScript
|
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)();
|
||
|
});
|
||
|
}
|