@grafana/faro-web-sdk
Version:
Faro instrumentations, metas, transports for web.
50 lines • 2.09 kB
JavaScript
;
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