{"version":3,"file":"diag.mjs","names":[],"sources":["../../src/api/diag.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DiagComponentLogger } from '../diag/ComponentLogger';\nimport { createLogLevelDiagLogger } from '../diag/internal/logLevelLogger';\nimport type {\n  ComponentLoggerOptions,\n  DiagLogFunction,\n  DiagLogger,\n  DiagLoggerApi,\n} from '../diag/types';\nimport { DiagLogLevel } from '../diag/types';\nimport {\n  getGlobal,\n  registerGlobal,\n  unregisterGlobal,\n} from '../internal/global-utils';\n\nconst API_NAME = 'diag';\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry internal\n * diagnostic API\n *\n * @since 1.0.0\n */\nexport class DiagAPI implements DiagLogger, DiagLoggerApi {\n  private static _instance?: DiagAPI;\n\n  /** Get the singleton instance of the DiagAPI API */\n  public static instance(): DiagAPI {\n    if (!this._instance) {\n      this._instance = new DiagAPI();\n    }\n\n    return this._instance;\n  }\n\n  /**\n   * Private internal constructor\n   * @private\n   */\n  private constructor() {\n    function _logProxy(funcName: keyof DiagLogger): DiagLogFunction {\n      return function (...args) {\n        const logger = getGlobal('diag');\n        // shortcut if logger not set\n        if (!logger) return;\n        return logger[funcName](...args);\n      };\n    }\n\n    // Using self local variable for minification purposes as 'this' cannot be minified\n    const self = this;\n\n    // DiagAPI specific functions\n\n    const setLogger: DiagLoggerApi['setLogger'] = (\n      logger,\n      optionsOrLogLevel = { logLevel: DiagLogLevel.INFO }\n    ) => {\n      if (logger === self) {\n        // There isn't much we can do here.\n        // Logging to the console might break the user application.\n        // Try to log to self. If a logger was previously registered it will receive the log.\n        const err = new Error(\n          'Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation'\n        );\n        self.error(err.stack ?? err.message);\n        return false;\n      }\n\n      if (typeof optionsOrLogLevel === 'number') {\n        optionsOrLogLevel = {\n          logLevel: optionsOrLogLevel,\n        };\n      }\n\n      const oldLogger = getGlobal('diag');\n      const newLogger = createLogLevelDiagLogger(\n        optionsOrLogLevel.logLevel ?? DiagLogLevel.INFO,\n        logger\n      );\n      // There already is an logger registered. We'll let it know before overwriting it.\n      if (oldLogger && !optionsOrLogLevel.suppressOverrideMessage) {\n        const stack = new Error().stack ?? '<failed to generate stacktrace>';\n        oldLogger.warn(`Current logger will be overwritten from ${stack}`);\n        newLogger.warn(\n          `Current logger will overwrite one already registered from ${stack}`\n        );\n      }\n\n      return registerGlobal('diag', newLogger, self, true);\n    };\n\n    self.setLogger = setLogger;\n\n    self.disable = () => {\n      unregisterGlobal(API_NAME, self);\n    };\n\n    self.createComponentLogger = (options: ComponentLoggerOptions) => {\n      return new DiagComponentLogger(options);\n    };\n\n    self.verbose = _logProxy('verbose');\n    self.debug = _logProxy('debug');\n    self.info = _logProxy('info');\n    self.warn = _logProxy('warn');\n    self.error = _logProxy('error');\n  }\n\n  public setLogger!: DiagLoggerApi['setLogger'];\n  /**\n   *\n   */\n  public createComponentLogger!: (\n    options: ComponentLoggerOptions\n  ) => DiagLogger;\n\n  // DiagLogger implementation\n  public verbose!: DiagLogFunction;\n  public debug!: DiagLogFunction;\n  public info!: DiagLogFunction;\n  public warn!: DiagLogFunction;\n  public error!: DiagLogFunction;\n\n  /**\n   * Unregister the global logger and return to Noop\n   */\n  public disable!: () => void;\n}\n"],"mappings":";;;;;AAoBA,MAAM,WAAW;;;;;;;AAQjB,IAAa,UAAb,MAAa,QAA6C;;CAIxD,OAAc,WAAoB;EAChC,IAAI,CAAC,KAAK,WACR,KAAK,YAAY,IAAI,QAAQ;EAG/B,OAAO,KAAK;CACd;;;;;CAMA,cAAsB;EACpB,SAAS,UAAU,UAA6C;GAC9D,OAAO,SAAU,GAAG,MAAM;IACxB,MAAM,SAAS,UAAU,MAAM;IAE/B,IAAI,CAAC,QAAQ;IACb,OAAO,OAAO,SAAS,CAAC,GAAG,IAAI;GACjC;EACF;EAGA,MAAM,OAAO;EAIb,MAAM,aACJ,QACA,oBAAoB,EAAE,UAAA,GAA4B,MAC/C;;GACH,IAAI,WAAW,MAAM;;IAInB,MAAM,sBAAM,IAAI,MACd,oIACF;IACA,KAAK,OAAA,aAAM,IAAI,WAAA,QAAA,eAAA,KAAA,IAAA,aAAS,IAAI,OAAO;IACnC,OAAO;GACT;GAEA,IAAI,OAAO,sBAAsB,UAC/B,oBAAoB,EAClB,UAAU,kBACZ;GAGF,MAAM,YAAY,UAAU,MAAM;GAClC,MAAM,YAAY,0BAAA,wBAChB,kBAAkB,cAAA,QAAA,0BAAA,KAAA,IAAA,wBAAA,IAClB,MACF;GAEA,IAAI,aAAa,CAAC,kBAAkB,yBAAyB;;IAC3D,MAAM,SAAA,gCAAQ,IAAI,MAAM,EAAA,CAAE,WAAA,QAAA,iBAAA,KAAA,IAAA,eAAS;IACnC,UAAU,KAAK,2CAA2C,OAAO;IACjE,UAAU,KACR,6DAA6D,OAC/D;GACF;GAEA,OAAO,eAAe,QAAQ,WAAW,MAAM,IAAI;EACrD;EAEA,KAAK,YAAY;EAEjB,KAAK,gBAAgB;GACnB,iBAAiB,UAAU,IAAI;EACjC;EAEA,KAAK,yBAAyB,YAAoC;GAChE,OAAO,IAAI,oBAAoB,OAAO;EACxC;EAEA,KAAK,UAAU,UAAU,SAAS;EAClC,KAAK,QAAQ,UAAU,OAAO;EAC9B,KAAK,OAAO,UAAU,MAAM;EAC5B,KAAK,OAAO,UAAU,MAAM;EAC5B,KAAK,QAAQ,UAAU,OAAO;CAChC;AAqBF"}