{"version":3,"file":"consoleLogger.mjs","names":[],"sources":["../../src/diag/consoleLogger.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DiagLogger, DiagLogFunction } from './types';\n\ntype ConsoleMapKeys = 'error' | 'warn' | 'info' | 'debug' | 'trace';\nconst consoleMap: { n: keyof DiagLogger; c: ConsoleMapKeys }[] = [\n  { n: 'error', c: 'error' },\n  { n: 'warn', c: 'warn' },\n  { n: 'info', c: 'info' },\n  { n: 'debug', c: 'debug' },\n  { n: 'verbose', c: 'trace' },\n];\n\n// Save original console methods at module load time, before any instrumentation\n// can wrap them. This ensures DiagConsoleLogger calls the unwrapped originals.\n// Exported for testing only — not part of the public API.\nexport const _originalConsoleMethods: Partial<\n  Record<ConsoleMapKeys | 'log', typeof console.log>\n> = {};\nif (typeof console !== 'undefined') {\n  const keys: (ConsoleMapKeys | 'log')[] = [\n    'error',\n    'warn',\n    'info',\n    'debug',\n    'trace',\n    'log',\n  ];\n  for (const key of keys) {\n    // eslint-disable-next-line no-console\n    if (typeof console[key] === 'function') {\n      // eslint-disable-next-line no-console\n      _originalConsoleMethods[key] = console[key];\n    }\n  }\n}\n\n/**\n * A simple Immutable Console based diagnostic logger which will output any messages to the Console.\n * If you want to limit the amount of logging to a specific level or lower use the\n * {@link createLogLevelDiagLogger}\n *\n * @since 1.0.0\n */\nexport class DiagConsoleLogger implements DiagLogger {\n  constructor() {\n    function _consoleFunc(funcName: ConsoleMapKeys): DiagLogFunction {\n      return function (...args) {\n        // Prefer original (pre-instrumentation) methods saved at module load time.\n        let theFunc = _originalConsoleMethods[funcName];\n        // Some environments only expose the console when the F12 developer console is open\n        if (typeof theFunc !== 'function') {\n          theFunc = _originalConsoleMethods['log'];\n        }\n        // Fall back in case console was not available at module load time but became available later.\n        if (typeof theFunc !== 'function' && console) {\n          // eslint-disable-next-line no-console\n          theFunc = console[funcName];\n          if (typeof theFunc !== 'function') {\n            // eslint-disable-next-line no-console\n            theFunc = console.log;\n          }\n        }\n        if (typeof theFunc === 'function') {\n          return theFunc.apply(console, args);\n        }\n      };\n    }\n\n    for (let i = 0; i < consoleMap.length; i++) {\n      this[consoleMap[i].n] = _consoleFunc(consoleMap[i].c);\n    }\n  }\n\n  /** Log an error scenario that was not expected and caused the requested operation to fail. */\n  public error!: DiagLogFunction;\n\n  /**\n   * Log a warning scenario to inform the developer of an issues that should be investigated.\n   * The requested operation may or may not have succeeded or completed.\n   */\n  public warn!: DiagLogFunction;\n\n  /**\n   * Log a general informational message, this should not affect functionality.\n   * This is also the default logging level so this should NOT be used for logging\n   * debugging level information.\n   */\n  public info!: DiagLogFunction;\n\n  /**\n   * Log a general debug message that can be useful for identifying a failure.\n   * Information logged at this level may include diagnostic details that would\n   * help identify a failure scenario. Useful scenarios would be to log the execution\n   * order of async operations\n   */\n  public debug!: DiagLogFunction;\n\n  /**\n   * Log a detailed (verbose) trace level logging that can be used to identify failures\n   * where debug level logging would be insufficient, this level of tracing can include\n   * input and output parameters and as such may include PII information passing through\n   * the API. As such it is recommended that this level of tracing should not be enabled\n   * in a production environment.\n   */\n  public verbose!: DiagLogFunction;\n}\n"],"mappings":";AAQA,MAAM,aAA2D;CAC/D;EAAE,GAAG;EAAS,GAAG;CAAQ;CACzB;EAAE,GAAG;EAAQ,GAAG;CAAO;CACvB;EAAE,GAAG;EAAQ,GAAG;CAAO;CACvB;EAAE,GAAG;EAAS,GAAG;CAAQ;CACzB;EAAE,GAAG;EAAW,GAAG;CAAQ;AAC7B;AAKA,MAAa,0BAET,CAAC;AACL,IAAI,OAAO,YAAY,aAShB;MAAA,MAAM,OAAO;EAPhB;EACA;EACA;EACA;EACA;EACA;CAEmB,GAEnB,IAAI,OAAO,QAAQ,SAAS,YAE1B,wBAAwB,OAAO,QAAQ;AAAA;;;;;;;;AAY7C,IAAa,oBAAb,MAAqD;CACnD,cAAc;EACZ,SAAS,aAAa,UAA2C;GAC/D,OAAO,SAAU,GAAG,MAAM;IAExB,IAAI,UAAU,wBAAwB;IAEtC,IAAI,OAAO,YAAY,YACrB,UAAU,wBAAwB;IAGpC,IAAI,OAAO,YAAY,cAAc,SAAS;KAE5C,UAAU,QAAQ;KAClB,IAAI,OAAO,YAAY,YAErB,UAAU,QAAQ;IAEtB;IACA,IAAI,OAAO,YAAY,YACrB,OAAO,QAAQ,MAAM,SAAS,IAAI;GAEtC;EACF;EAEA,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KACrC,KAAK,WAAW,EAAE,CAAC,KAAK,aAAa,WAAW,EAAE,CAAC,CAAC;CAExD;AAkCF"}