slack-q-1770281368/packages/logger/src/handlers.ts
jordan d1194fd192
All checks were successful
ci/woodpecker/manual/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
Initialize project from skeleton template
2026-02-05 08:49:28 +00:00

36 lines
1.0 KiB
TypeScript

import type { Logger } from './logger';
/**
* Install global error handlers that route uncaught errors to the logger.
*
* Captures:
* - window.onerror (uncaught exceptions)
* - window.onunhandledrejection (unhandled promise rejections)
*
* Call once at app init. Returns a cleanup function.
*/
export function installGlobalHandlers(logger: Logger): () => void {
const onError = (event: ErrorEvent) => {
logger.error('Uncaught exception', event.error ?? new Error(event.message), {
source: event.filename,
line: event.lineno,
col: event.colno,
});
};
const onRejection = (event: PromiseRejectionEvent) => {
const err = event.reason instanceof Error
? event.reason
: new Error(String(event.reason));
logger.error('Unhandled promise rejection', err);
};
window.addEventListener('error', onError);
window.addEventListener('unhandledrejection', onRejection);
return () => {
window.removeEventListener('error', onError);
window.removeEventListener('unhandledrejection', onRejection);
};
}