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