Outlook_Addin_LLM/node_modules/async-hook-jl/patches/next-tick.js

58 lines
1.5 KiB
JavaScript
Raw Normal View History

'use strict';
function NextTickWrap() {}
module.exports = function patch() {
const hooks = this._hooks;
const state = this._state;
const oldNextTick = process.nextTick;
process.nextTick = function () {
if (!state.enabled) return oldNextTick.apply(process, arguments);
const args = new Array(arguments.length);
for (let i = 0; i < arguments.length; i++) {
args[i] = arguments[i];
}
const callback = args[0];
if (typeof callback !== 'function') {
throw new TypeError('callback is not a function');
}
const handle = new NextTickWrap();
const uid = --state.counter;
// call the init hook
hooks.init.call(handle, uid, 0, null, null);
// overwrite callback
args[0] = function () {
// call the pre hook
hooks.pre.call(handle, uid);
let didThrow = true;
try {
callback.apply(this, arguments);
didThrow = false;
} finally {
// If `callback` threw and there is an uncaughtException handler
// then call the `post` and `destroy` hook after the uncaughtException
// user handlers have been invoked.
if(didThrow && process.listenerCount('uncaughtException') > 0) {
process.once('uncaughtException', function () {
hooks.post.call(handle, uid, true);
hooks.destroy.call(null, uid);
});
}
}
// callback done successfully
hooks.post.call(handle, uid, false);
hooks.destroy.call(null, uid);
};
return oldNextTick.apply(process, args);
};
}