UNPKG

@grafana/faro-web-sdk

Version:

Faro instrumentations, metas, transports for web.

50 lines 2.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.monitorConsole = monitorConsole; exports.__resetConsoleMonitorForTests = __resetConsoleMonitorForTests; const faro_core_1 = require("@grafana/faro-core"); const const_1 = require("./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. */ function monitorConsole(unpatchedConsole) { if (!consoleObservable) { consoleObservable = new faro_core_1.Observable(); } if (!isInstrumented) { const originalConsole = unpatchedConsole !== null && unpatchedConsole !== void 0 ? unpatchedConsole : faro_core_1.defaultUnpatchedConsole; // Patch ALL console methods - subscribers decide which levels to process faro_core_1.allLogLevels.forEach((level) => { console[level] = (...args) => { var _a; // Notify all subscribers consoleObservable.notify({ type: const_1.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 function __resetConsoleMonitorForTests() { // Restore original console methods from defaultUnpatchedConsole for (const level of faro_core_1.allLogLevels) { if (faro_core_1.defaultUnpatchedConsole[level]) { console[level] = faro_core_1.defaultUnpatchedConsole[level]; } } consoleObservable = undefined; isInstrumented = false; } //# sourceMappingURL=consoleMonitor.js.map