55 lines
1.4 KiB
JavaScript
55 lines
1.4 KiB
JavaScript
import { DEBUG_BUILD } from '../debug-build.js';
|
|
import { logger } from '../logger.js';
|
|
import { getFunctionName } from '../stacktrace.js';
|
|
|
|
// We keep the handlers globally
|
|
const handlers = {};
|
|
const instrumented = {};
|
|
|
|
/** Add a handler function. */
|
|
function addHandler(type, handler) {
|
|
handlers[type] = handlers[type] || [];
|
|
(handlers[type] ).push(handler);
|
|
}
|
|
|
|
/**
|
|
* Reset all instrumentation handlers.
|
|
* This can be used by tests to ensure we have a clean slate of instrumentation handlers.
|
|
*/
|
|
function resetInstrumentationHandlers() {
|
|
Object.keys(handlers).forEach(key => {
|
|
handlers[key ] = undefined;
|
|
});
|
|
}
|
|
|
|
/** Maybe run an instrumentation function, unless it was already called. */
|
|
function maybeInstrument(type, instrumentFn) {
|
|
if (!instrumented[type]) {
|
|
instrumentFn();
|
|
instrumented[type] = true;
|
|
}
|
|
}
|
|
|
|
/** Trigger handlers for a given instrumentation type. */
|
|
function triggerHandlers(type, data) {
|
|
const typeHandlers = type && handlers[type];
|
|
if (!typeHandlers) {
|
|
return;
|
|
}
|
|
|
|
for (const handler of typeHandlers) {
|
|
try {
|
|
handler(data);
|
|
} catch (e) {
|
|
DEBUG_BUILD &&
|
|
logger.error(
|
|
`Error while triggering instrumentation handler.\nType: ${type}\nName: ${getFunctionName(handler)}\nError:`,
|
|
e,
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
export { addHandler, maybeInstrument, resetInstrumentationHandlers, triggerHandlers };
|
|
//# sourceMappingURL=_handlers.js.map
|