"use strict";
/*
 * Copyright The OpenTelemetry Authors
 * SPDX-License-Identifier: Apache-2.0
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.DiagConsoleLogger = exports._originalConsoleMethods = void 0;
const consoleMap = [
    { n: 'error', c: 'error' },
    { n: 'warn', c: 'warn' },
    { n: 'info', c: 'info' },
    { n: 'debug', c: 'debug' },
    { n: 'verbose', c: 'trace' },
];
// Save original console methods at module load time, before any instrumentation
// can wrap them. This ensures DiagConsoleLogger calls the unwrapped originals.
// Exported for testing only — not part of the public API.
exports._originalConsoleMethods = {};
if (typeof console !== 'undefined') {
    const keys = [
        'error',
        'warn',
        'info',
        'debug',
        'trace',
        'log',
    ];
    for (const key of keys) {
        // eslint-disable-next-line no-console
        if (typeof console[key] === 'function') {
            // eslint-disable-next-line no-console
            exports._originalConsoleMethods[key] = console[key];
        }
    }
}
/**
 * A simple Immutable Console based diagnostic logger which will output any messages to the Console.
 * If you want to limit the amount of logging to a specific level or lower use the
 * {@link createLogLevelDiagLogger}
 *
 * @since 1.0.0
 */
class DiagConsoleLogger {
    constructor() {
        function _consoleFunc(funcName) {
            return function (...args) {
                // Prefer original (pre-instrumentation) methods saved at module load time.
                let theFunc = exports._originalConsoleMethods[funcName];
                // Some environments only expose the console when the F12 developer console is open
                if (typeof theFunc !== 'function') {
                    theFunc = exports._originalConsoleMethods['log'];
                }
                // Fall back in case console was not available at module load time but became available later.
                if (typeof theFunc !== 'function' && console) {
                    // eslint-disable-next-line no-console
                    theFunc = console[funcName];
                    if (typeof theFunc !== 'function') {
                        // eslint-disable-next-line no-console
                        theFunc = console.log;
                    }
                }
                if (typeof theFunc === 'function') {
                    return theFunc.apply(console, args);
                }
            };
        }
        for (let i = 0; i < consoleMap.length; i++) {
            this[consoleMap[i].n] = _consoleFunc(consoleMap[i].c);
        }
    }
}
exports.DiagConsoleLogger = DiagConsoleLogger;
//# sourceMappingURL=consoleLogger.js.map