47 lines
1,004 B
JavaScript
47 lines
1,004 B
JavaScript
|
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,
|
||
|
});
|
||
|
}
|