posthog-node
Version:
PostHog Node.js integration
32 lines (31 loc) • 1.24 kB
JavaScript
function makeUncaughtExceptionHandler(captureFn, onFatalFn) {
let calledFatalError = false;
return Object.assign((error)=>{
const userProvidedListenersCount = global.process.listeners('uncaughtException').filter((listener)=>'domainUncaughtExceptionClear' !== listener.name && true !== listener._posthogErrorHandler).length;
const processWouldExit = 0 === userProvidedListenersCount;
captureFn(error, {
mechanism: {
type: 'onuncaughtexception',
handled: false
}
});
if (!calledFatalError && processWouldExit) {
calledFatalError = true;
onFatalFn(error);
}
}, {
_posthogErrorHandler: true
});
}
function addUncaughtExceptionListener(captureFn, onFatalFn) {
globalThis.process?.on('uncaughtException', makeUncaughtExceptionHandler(captureFn, onFatalFn));
}
function addUnhandledRejectionListener(captureFn) {
globalThis.process?.on('unhandledRejection', (reason)=>captureFn(reason, {
mechanism: {
type: 'onunhandledrejection',
handled: false
}
}));
}
export { addUncaughtExceptionListener, addUnhandledRejectionListener };