@grafana/faro-web-sdk
Version:
Faro instrumentations, metas, transports for web.
40 lines • 1.46 kB
JavaScript
import { isPrimitive } from '@grafana/faro-core';
import { primitiveUnhandledType, primitiveUnhandledValue } from './const';
import { getErrorDetails } from './getErrorDetails';
// Store handlers for cleanup in tests
const registeredHandlers = [];
export function registerOnunhandledrejection(api) {
const handler = (evt) => {
var _a, _b;
let error = evt;
if (error.reason) {
error = evt.reason;
}
else if ((_a = evt.detail) === null || _a === void 0 ? void 0 : _a.reason) {
error = (_b = evt.detail) === null || _b === void 0 ? void 0 : _b.reason;
}
let value;
let type;
let stackFrames = [];
if (isPrimitive(error)) {
value = `${primitiveUnhandledValue} ${String(error)}`;
type = primitiveUnhandledType;
}
else {
[value, type, stackFrames] = getErrorDetails(error);
}
if (value) {
api.pushError(new Error(value), { type, stackFrames });
}
};
window.addEventListener('unhandledrejection', handler);
registeredHandlers.push(handler);
}
// Test-only utility to reset state between tests
export function __resetOnunhandledrejectionForTests() {
registeredHandlers.forEach((handler) => {
window.removeEventListener('unhandledrejection', handler);
});
registeredHandlers.length = 0;
}
//# sourceMappingURL=registerOnunhandledrejection.js.map