{"version":3,"file":"spancontext-utils.mjs","names":[],"sources":["../../src/trace/spancontext-utils.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { INVALID_SPANID, INVALID_TRACEID } from './invalid-span-constants';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport type { Span } from './span';\nimport type { SpanContext } from './span_context';\n\n// Valid characters (0-9, a-f, A-F) are marked as 1.\nconst isHex = new Uint8Array([\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,\n]);\n\nfunction isValidHex(id: string, length: number): boolean {\n  // As of 1.9.0 the id was allowed to be a non-string value,\n  // even though it was not possible in the types.\n  if (typeof id !== 'string' || id.length !== length) return false;\n\n  let r = 0;\n  for (let i = 0; i < id.length; i += 4) {\n    r +=\n      (isHex[id.charCodeAt(i)] | 0) +\n      (isHex[id.charCodeAt(i + 1)] | 0) +\n      (isHex[id.charCodeAt(i + 2)] | 0) +\n      (isHex[id.charCodeAt(i + 3)] | 0);\n  }\n\n  return r === length;\n}\n\n/**\n * @since 1.0.0\n */\nexport function isValidTraceId(traceId: string): boolean {\n  return isValidHex(traceId, 32) && traceId !== INVALID_TRACEID;\n}\n\n/**\n * @since 1.0.0\n */\nexport function isValidSpanId(spanId: string): boolean {\n  return isValidHex(spanId, 16) && spanId !== INVALID_SPANID;\n}\n\n/**\n * Returns true if this {@link SpanContext} is valid.\n * @return true if this {@link SpanContext} is valid.\n *\n * @since 1.0.0\n */\nexport function isSpanContextValid(spanContext: SpanContext): boolean {\n  return (\n    isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId)\n  );\n}\n\n/**\n * Wrap the given {@link SpanContext} in a new non-recording {@link Span}\n *\n * @param spanContext span context to be wrapped\n * @returns a new non-recording {@link Span} with the provided context\n */\nexport function wrapSpanContext(spanContext: SpanContext): Span {\n  return new NonRecordingSpan(spanContext);\n}\n"],"mappings":";;;AAUA,MAAM,QAAQ,IAAI,WAAW;CAC3B;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAC3E;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAC3E;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAC3E;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAC1E,CAAC;AAED,SAAS,WAAW,IAAY,QAAyB;CAGvD,IAAI,OAAO,OAAO,YAAY,GAAG,WAAW,QAAQ,OAAO;CAE3D,IAAI,IAAI;CACR,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,QAAQ,KAAK,GAClC,MACG,MAAM,GAAG,WAAW,CAAC,KAAK,MAC1B,MAAM,GAAG,WAAW,IAAI,CAAC,KAAK,MAC9B,MAAM,GAAG,WAAW,IAAI,CAAC,KAAK,MAC9B,MAAM,GAAG,WAAW,IAAI,CAAC,KAAK;CAGnC,OAAO,MAAM;AACf;;;;AAKA,SAAgB,eAAe,SAA0B;CACvD,OAAO,WAAW,SAAS,EAAE,KAAK,YAAA;AACpC;;;;AAKA,SAAgB,cAAc,QAAyB;CACrD,OAAO,WAAW,QAAQ,EAAE,KAAK,WAAA;AACnC;;;;;;;AAQA,SAAgB,mBAAmB,aAAmC;CACpE,OACE,eAAe,YAAY,OAAO,KAAK,cAAc,YAAY,MAAM;AAE3E;;;;;;;AAQA,SAAgB,gBAAgB,aAAgC;CAC9D,OAAO,IAAI,iBAAiB,WAAW;AACzC"}