@sentry/core
Version:
Base implementation for all Sentry JavaScript SDKs
57 lines (54 loc) • 1.42 kB
JavaScript
import { DEBUG_BUILD } from '../debug-build.js';
import { debug } from '../utils/debug-logger.js';
import { getFunctionName } from '../utils/stacktrace.js';
const handlers = {};
const instrumented = {};
function addHandler(type, handler) {
handlers[type] = handlers[type] || [];
handlers[type].push(handler);
return () => {
const typeHandlers = handlers[type];
if (typeHandlers) {
const index = typeHandlers.indexOf(handler);
if (index !== -1) {
typeHandlers.splice(index, 1);
}
}
};
}
function resetInstrumentationHandlers() {
Object.keys(handlers).forEach((key) => {
handlers[key] = void 0;
});
}
function maybeInstrument(type, instrumentFn) {
if (!instrumented[type]) {
instrumented[type] = true;
try {
instrumentFn();
} catch (e) {
DEBUG_BUILD && debug.error(`Error while instrumenting ${type}`, e);
}
}
}
function triggerHandlers(type, data) {
const typeHandlers = type && handlers[type];
if (!typeHandlers) {
return;
}
for (const handler of typeHandlers) {
try {
handler(data);
} catch (e) {
DEBUG_BUILD && debug.error(
`Error while triggering instrumentation handler.
Type: ${type}
Name: ${getFunctionName(handler)}
Error:`,
e
);
}
}
}
export { addHandler, maybeInstrument, resetInstrumentationHandlers, triggerHandlers };
//# sourceMappingURL=handlers.js.map