| module.exports = addHook; |
| |
| function addHook(state, kind, name, hook) { |
| var orig = hook; |
| if (!state.registry[name]) { |
| state.registry[name] = []; |
| } |
| |
| if (kind === "before") { |
| hook = function (method, options) { |
| return Promise.resolve() |
| .then(orig.bind(null, options)) |
| .then(method.bind(null, options)); |
| }; |
| } |
| |
| if (kind === "after") { |
| hook = function (method, options) { |
| var result; |
| return Promise.resolve() |
| .then(method.bind(null, options)) |
| .then(function (result_) { |
| result = result_; |
| return orig(result, options); |
| }) |
| .then(function () { |
| return result; |
| }); |
| }; |
| } |
| |
| if (kind === "error") { |
| hook = function (method, options) { |
| return Promise.resolve() |
| .then(method.bind(null, options)) |
| .catch(function (error) { |
| return orig(error, options); |
| }); |
| }; |
| } |
| |
| state.registry[name].push({ |
| hook: hook, |
| orig: orig, |
| }); |
| } |