@grafana/faro-web-sdk
Version:
Faro instrumentations, metas, transports for web.
44 lines • 1.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.registerOnunhandledrejection = registerOnunhandledrejection;
exports.__resetOnunhandledrejectionForTests = __resetOnunhandledrejectionForTests;
const faro_core_1 = require("@grafana/faro-core");
const const_1 = require("./const");
const getErrorDetails_1 = require("./getErrorDetails");
// Store handlers for cleanup in tests
const registeredHandlers = [];
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 ((0, faro_core_1.isPrimitive)(error)) {
value = `${const_1.primitiveUnhandledValue} ${String(error)}`;
type = const_1.primitiveUnhandledType;
}
else {
[value, type, stackFrames] = (0, getErrorDetails_1.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
function __resetOnunhandledrejectionForTests() {
registeredHandlers.forEach((handler) => {
window.removeEventListener('unhandledrejection', handler);
});
registeredHandlers.length = 0;
}
//# sourceMappingURL=registerOnunhandledrejection.js.map