UNPKG

@grafana/faro-web-sdk

Version:

Faro instrumentations, metas, transports for web.

46 lines 1.88 kB
import { allLogLevels, defaultUnpatchedConsole, Observable } from '@grafana/faro-core'; import { MESSAGE_TYPE_CONSOLE } from './const'; let consoleObservable; let isInstrumented = false; /** * Monitors console methods and emits events to subscribers. * @param unpatchedConsole - Optional console to call after notifying subscribers. * Only the first caller's value is used (since we patch once). * Defaults to defaultUnpatchedConsole. */ export function monitorConsole(unpatchedConsole) { if (!consoleObservable) { consoleObservable = new Observable(); } if (!isInstrumented) { const originalConsole = unpatchedConsole !== null && unpatchedConsole !== void 0 ? unpatchedConsole : defaultUnpatchedConsole; // Patch ALL console methods - subscribers decide which levels to process allLogLevels.forEach((level) => { console[level] = (...args) => { var _a; // Notify all subscribers consoleObservable.notify({ type: MESSAGE_TYPE_CONSOLE, level, args, }); // Call the unpatchedConsole method (_a = originalConsole[level]) === null || _a === void 0 ? void 0 : _a.apply(console, args); }; }); isInstrumented = true; } return consoleObservable; } // Test-only utility to reset state between tests export function __resetConsoleMonitorForTests() { // Restore original console methods from defaultUnpatchedConsole for (const level of allLogLevels) { if (defaultUnpatchedConsole[level]) { console[level] = defaultUnpatchedConsole[level]; } } consoleObservable = undefined; isInstrumented = false; } //# sourceMappingURL=consoleMonitor.js.map