{"version":3,"file":"NoopTracer.cjs","names":["ContextAPI","NonRecordingSpan","getSpanContext","isSpanContextValid","setSpan"],"sources":["../../src/trace/NoopTracer.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ContextAPI } from '../api/context';\nimport type { Context } from '../context/types';\nimport { getSpanContext, setSpan } from '../trace/context-utils';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport type { Span } from './span';\nimport { isSpanContextValid } from './spancontext-utils';\nimport type { SpanOptions } from './SpanOptions';\nimport type { SpanContext } from './span_context';\nimport type { Tracer } from './tracer';\n\nconst contextApi = ContextAPI.getInstance();\n\n/**\n * No-op implementations of {@link Tracer}.\n */\nexport class NoopTracer implements Tracer {\n  // startSpan starts a noop span.\n  startSpan(\n    name: string,\n    options?: SpanOptions,\n    context = contextApi.active()\n  ): Span {\n    const root = Boolean(options?.root);\n    if (root) {\n      return new NonRecordingSpan();\n    }\n\n    const parentFromContext = context && getSpanContext(context);\n\n    if (\n      isSpanContext(parentFromContext) &&\n      isSpanContextValid(parentFromContext)\n    ) {\n      return new NonRecordingSpan(parentFromContext);\n    } else {\n      return new NonRecordingSpan();\n    }\n  }\n\n  startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n    name: string,\n    fn: F\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n    name: string,\n    opts: SpanOptions | undefined,\n    fn: F\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n    name: string,\n    opts: SpanOptions | undefined,\n    ctx: Context | undefined,\n    fn: F\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n    name: string,\n    arg2?: F | SpanOptions,\n    arg3?: F | Context,\n    arg4?: F\n  ): ReturnType<F> | undefined {\n    let opts: SpanOptions | undefined;\n    let ctx: Context | undefined;\n    let fn: F;\n\n    if (arguments.length < 2) {\n      return;\n    } else if (arguments.length === 2) {\n      fn = arg2 as F;\n    } else if (arguments.length === 3) {\n      opts = arg2 as SpanOptions | undefined;\n      fn = arg3 as F;\n    } else {\n      opts = arg2 as SpanOptions | undefined;\n      ctx = arg3 as Context | undefined;\n      fn = arg4 as F;\n    }\n\n    const parentContext = ctx ?? contextApi.active();\n    const span = this.startSpan(name, opts, parentContext);\n    const contextWithSpanSet = setSpan(parentContext, span);\n\n    return contextApi.with(contextWithSpanSet, fn, undefined, span);\n  }\n}\n\nfunction isSpanContext(spanContext: unknown): spanContext is SpanContext {\n  return (\n    spanContext !== null &&\n    typeof spanContext === 'object' &&\n    'spanId' in spanContext &&\n    typeof spanContext['spanId'] === 'string' &&\n    'traceId' in spanContext &&\n    typeof spanContext['traceId'] === 'string' &&\n    'traceFlags' in spanContext &&\n    typeof spanContext['traceFlags'] === 'number'\n  );\n}\n"],"mappings":";;;;;AAeA,MAAM,aAAaA,gBAAAA,WAAW,YAAY;;;;AAK1C,IAAa,aAAb,MAA0C;CAExC,UACE,MACA,SACA,UAAU,WAAW,OAAO,GACtB;EAEN,IADa,QAAA,YAAA,QAAA,YAAA,KAAA,IAAA,KAAA,IAAQ,QAAS,IACvB,GACL,OAAO,IAAIC,yBAAAA,iBAAiB;EAG9B,MAAM,oBAAoB,WAAWC,sBAAAA,eAAe,OAAO;EAE3D,IACE,cAAc,iBAAiB,KAC/BC,0BAAAA,mBAAmB,iBAAiB,GAEpC,OAAO,IAAIF,yBAAAA,iBAAiB,iBAAiB;OAE7C,OAAO,IAAIA,yBAAAA,iBAAiB;CAEhC;CAiBA,gBACE,MACA,MACA,MACA,MAC2B;;EAC3B,IAAI;EACJ,IAAI;EACJ,IAAI;EAEJ,IAAI,UAAU,SAAS,GACrB;OACK,IAAI,UAAU,WAAW,GAC9B,KAAK;OACA,IAAI,UAAU,WAAW,GAAG;GACjC,OAAO;GACP,KAAK;EACP,OAAO;GACL,OAAO;GACP,MAAM;GACN,KAAK;EACP;EAEA,MAAM,iBAAA,OAAgB,SAAA,QAAA,SAAA,KAAA,IAAA,OAAO,WAAW,OAAO;EAC/C,MAAM,OAAO,KAAK,UAAU,MAAM,MAAM,aAAa;EACrD,MAAM,qBAAqBG,sBAAAA,QAAQ,eAAe,IAAI;EAEtD,OAAO,WAAW,KAAK,oBAAoB,IAAI,KAAA,GAAW,IAAI;CAChE;AACF;AAEA,SAAS,cAAc,aAAkD;CACvE,OACE,gBAAgB,QAChB,OAAO,gBAAgB,YACvB,YAAY,eACZ,OAAO,YAAY,cAAc,YACjC,aAAa,eACb,OAAO,YAAY,eAAe,YAClC,gBAAgB,eAChB,OAAO,YAAY,kBAAkB;AAEzC"}