59 lines
2.0 KiB
JavaScript
59 lines
2.0 KiB
JavaScript
/*
|
|
* Copyright The OpenTelemetry Authors
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
import { INVALID_SPANID, INVALID_TRACEID } from './invalid-span-constants';
|
|
import { NonRecordingSpan } from './NonRecordingSpan';
|
|
// Valid characters (0-9, a-f, A-F) are marked as 1.
|
|
const isHex = new Uint8Array([
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
]);
|
|
function isValidHex(id, length) {
|
|
// As of 1.9.0 the id was allowed to be a non-string value,
|
|
// even though it was not possible in the types.
|
|
if (typeof id !== 'string' || id.length !== length)
|
|
return false;
|
|
let r = 0;
|
|
for (let i = 0; i < id.length; i += 4) {
|
|
r +=
|
|
(isHex[id.charCodeAt(i)] | 0) +
|
|
(isHex[id.charCodeAt(i + 1)] | 0) +
|
|
(isHex[id.charCodeAt(i + 2)] | 0) +
|
|
(isHex[id.charCodeAt(i + 3)] | 0);
|
|
}
|
|
return r === length;
|
|
}
|
|
/**
|
|
* @since 1.0.0
|
|
*/
|
|
export function isValidTraceId(traceId) {
|
|
return isValidHex(traceId, 32) && traceId !== INVALID_TRACEID;
|
|
}
|
|
/**
|
|
* @since 1.0.0
|
|
*/
|
|
export function isValidSpanId(spanId) {
|
|
return isValidHex(spanId, 16) && spanId !== INVALID_SPANID;
|
|
}
|
|
/**
|
|
* Returns true if this {@link SpanContext} is valid.
|
|
* @return true if this {@link SpanContext} is valid.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
export function isSpanContextValid(spanContext) {
|
|
return (isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId));
|
|
}
|
|
/**
|
|
* Wrap the given {@link SpanContext} in a new non-recording {@link Span}
|
|
*
|
|
* @param spanContext span context to be wrapped
|
|
* @returns a new non-recording {@link Span} with the provided context
|
|
*/
|
|
export function wrapSpanContext(spanContext) {
|
|
return new NonRecordingSpan(spanContext);
|
|
}
|
|
//# sourceMappingURL=spancontext-utils.js.map
|