{"version":3,"file":"ProxyTracer.cjs","names":["NoopTracer"],"sources":["../../src/trace/ProxyTracer.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Context } from '../context/types';\nimport { NoopTracer } from './NoopTracer';\nimport type { Span } from './span';\nimport type { SpanOptions } from './SpanOptions';\nimport type { Tracer } from './tracer';\nimport type { TracerOptions } from './tracer_options';\n\nconst NOOP_TRACER = new NoopTracer();\n\n/**\n * Proxy tracer provided by the proxy tracer provider\n *\n * @since 1.0.0\n */\nexport class ProxyTracer implements Tracer {\n  // When a real implementation is provided, this will be it\n  private _delegate?: Tracer;\n  private _provider: TracerDelegator;\n  public readonly name: string;\n  public readonly version?: string;\n  /** @since 1.1.0 */\n  public readonly options?: TracerOptions;\n\n  constructor(\n    provider: TracerDelegator,\n    name: string,\n    version?: string,\n    options?: TracerOptions\n  ) {\n    this._provider = provider;\n    this.name = name;\n    this.version = version;\n    this.options = options;\n  }\n\n  startSpan(name: string, options?: SpanOptions, context?: Context): Span {\n    return this._getTracer().startSpan(name, options, context);\n  }\n\n  startActiveSpan<F extends (span: Span) => unknown>(\n    _name: string,\n    _options: F | SpanOptions,\n    _context?: F | Context,\n    _fn?: F\n  ): ReturnType<F> {\n    const tracer = this._getTracer();\n    return Reflect.apply(tracer.startActiveSpan, tracer, arguments);\n  }\n\n  /**\n   * Try to get a tracer from the proxy tracer provider.\n   * If the proxy tracer provider has no delegate, return a noop tracer.\n   */\n  private _getTracer() {\n    if (this._delegate) {\n      return this._delegate;\n    }\n\n    const tracer = this._provider.getDelegateTracer(\n      this.name,\n      this.version,\n      this.options\n    );\n\n    if (!tracer) {\n      return NOOP_TRACER;\n    }\n\n    this._delegate = tracer;\n    return this._delegate;\n  }\n}\n\n/**\n * @since 1.0.3\n */\nexport interface TracerDelegator {\n  getDelegateTracer(\n    name: string,\n    version?: string,\n    options?: TracerOptions\n  ): Tracer | undefined;\n}\n"],"mappings":";AAYA,MAAM,cAAc,+BAAIA,EAAAA,CAAAA,WAAW;;;;;;AAOnC,IAAa,cAAb,MAA2C;CASzC,YACE,UACA,MACA,SACA,SACA;EACA,KAAK,YAAY;EACjB,KAAK,OAAO;EACZ,KAAK,UAAU;EACf,KAAK,UAAU;CACjB;CAEA,UAAU,MAAc,SAAuB,SAAyB;EACtE,OAAO,KAAK,WAAW,CAAC,CAAC,UAAU,MAAM,SAAS,OAAO;CAC3D;CAEA,gBACE,OACA,UACA,UACA,KACe;EACf,MAAM,SAAS,KAAK,WAAW;EAC/B,OAAO,QAAQ,MAAM,OAAO,iBAAiB,QAAQ,SAAS;CAChE;;;;;CAMA,aAAqB;EACnB,IAAI,KAAK,WACP,OAAO,KAAK;EAGd,MAAM,SAAS,KAAK,UAAU,kBAC5B,KAAK,MACL,KAAK,SACL,KAAK,OACP;EAEA,IAAI,CAAC,QACH,OAAO;EAGT,KAAK,YAAY;EACjB,OAAO,KAAK;CACd;AACF"}