aboutsummaryrefslogtreecommitdiffstats
path: root/vanilla/node_modules/vitest/dist/chunks/traces.CCmnQaNT.js
diff options
context:
space:
mode:
authorAdam Mathes <adam@adammathes.com>2026-02-13 21:34:48 -0800
committerAdam Mathes <adam@adammathes.com>2026-02-13 21:34:48 -0800
commit76cb9c2a39d477a64824a985ade40507e3bbade1 (patch)
tree41e997aa9c6f538d3a136af61dae9424db2005a9 /vanilla/node_modules/vitest/dist/chunks/traces.CCmnQaNT.js
parent819a39a21ac992b1393244a4c283bbb125208c69 (diff)
downloadneko-76cb9c2a39d477a64824a985ade40507e3bbade1.tar.gz
neko-76cb9c2a39d477a64824a985ade40507e3bbade1.tar.bz2
neko-76cb9c2a39d477a64824a985ade40507e3bbade1.zip
feat(vanilla): add testing infrastructure and tests (NK-wjnczv)
Diffstat (limited to 'vanilla/node_modules/vitest/dist/chunks/traces.CCmnQaNT.js')
-rw-r--r--vanilla/node_modules/vitest/dist/chunks/traces.CCmnQaNT.js217
1 files changed, 217 insertions, 0 deletions
diff --git a/vanilla/node_modules/vitest/dist/chunks/traces.CCmnQaNT.js b/vanilla/node_modules/vitest/dist/chunks/traces.CCmnQaNT.js
new file mode 100644
index 0000000..b94a0c4
--- /dev/null
+++ b/vanilla/node_modules/vitest/dist/chunks/traces.CCmnQaNT.js
@@ -0,0 +1,217 @@
+class Traces {
+ /**
+ * otel stands for OpenTelemetry
+ */
+ #otel = null;
+ #sdk = null;
+ #init = null;
+ #noopSpan = createNoopSpan();
+ #noopContext = createNoopContext();
+ #initStartTime = performance.now();
+ #initEndTime = 0;
+ #initRecorded = false;
+ constructor(options) {
+ if (options.enabled) {
+ const apiInit = import('@opentelemetry/api').then((api) => {
+ this.#otel = {
+ tracer: api.trace.getTracer(options.tracerName || "vitest"),
+ context: api.context,
+ propagation: api.propagation,
+ trace: api.trace,
+ SpanKind: api.SpanKind,
+ SpanStatusCode: api.SpanStatusCode
+ };
+ }).catch(() => {
+ throw new Error(`"@opentelemetry/api" is not installed locally. Make sure you have setup OpenTelemetry instrumentation: https://vitest.dev/guide/open-telemetry`);
+ });
+ const sdkInit = (options.sdkPath ? import(
+ /* @vite-ignore */
+ options.sdkPath
+) : Promise.resolve()).catch((cause) => {
+ throw new Error(`Failed to import custom OpenTelemetry SDK script (${options.sdkPath}): ${cause.message}`);
+ });
+ this.#init = Promise.all([sdkInit, apiInit]).then(([sdk]) => {
+ if (sdk != null) {
+ if (sdk.default != null && typeof sdk.default === "object" && typeof sdk.default.shutdown === "function") this.#sdk = sdk.default;
+ else if (options.watchMode !== true && process.env.VITEST_MODE !== "watch") console.warn(`OpenTelemetry instrumentation module (${options.sdkPath}) does not have a default export with a "shutdown" method. Vitest won't be able to ensure that all traces are processed in time. Try running Vitest in watch mode instead.`);
+ }
+ }).finally(() => {
+ this.#initEndTime = performance.now();
+ this.#init = null;
+ });
+ }
+ }
+ isEnabled() {
+ return !!this.#otel;
+ }
+ /**
+ * @internal
+ */
+ async waitInit() {
+ if (this.#init) await this.#init;
+ return this;
+ }
+ /**
+ * @internal
+ */
+ recordInitSpan(context) {
+ if (this.#initRecorded) return;
+ this.#initRecorded = true;
+ this.startSpan("vitest.runtime.traces", { startTime: this.#initStartTime }, context).end(this.#initEndTime);
+ }
+ /**
+ * @internal
+ */
+ startContextSpan(name, currentContext) {
+ if (!this.#otel) return {
+ span: this.#noopSpan,
+ context: this.#noopContext
+ };
+ const activeContext = currentContext || this.#otel.context.active();
+ const span = this.#otel.tracer.startSpan(name, {}, activeContext);
+ return {
+ span,
+ context: this.#otel.trace.setSpan(activeContext, span)
+ };
+ }
+ /**
+ * @internal
+ */
+ getContextFromCarrier(carrier) {
+ if (!this.#otel) return this.#noopContext;
+ const activeContext = this.#otel.context.active();
+ if (!carrier) return activeContext;
+ return this.#otel.propagation.extract(activeContext, carrier);
+ }
+ /**
+ * @internal
+ */
+ getContextFromEnv(env) {
+ if (!this.#otel) return this.#noopContext;
+ // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/context/env-carriers.md
+ // some tools sets only `TRACEPARENT` but not `TRACESTATE`
+ const carrier = {};
+ if (typeof env.TRACEPARENT === "string") carrier.traceparent = env.TRACEPARENT;
+ if (typeof env.TRACESTATE === "string") carrier.tracestate = env.TRACESTATE;
+ return this.getContextFromCarrier(carrier);
+ }
+ /**
+ * @internal
+ */
+ getContextCarrier(context) {
+ if (!this.#otel) return;
+ const carrier = {};
+ this.#otel.propagation.inject(context || this.#otel.context.active(), carrier);
+ return carrier;
+ }
+ #callActiveSpan(span, callback) {
+ const otel = this.#otel;
+ let result;
+ try {
+ result = callback(span);
+ if (result instanceof Promise) return result.catch((error) => {
+ span.recordException({
+ name: error.name,
+ message: error.message,
+ stack: error.stack
+ });
+ span.setStatus({ code: otel.SpanStatusCode.ERROR });
+ throw error;
+ }).finally(() => span.end());
+ return result;
+ } catch (error) {
+ if (error instanceof Error) {
+ span.recordException({
+ name: error.name,
+ message: error.message,
+ stack: error.stack
+ });
+ span.setStatus({ code: otel.SpanStatusCode.ERROR });
+ }
+ throw error;
+ } finally {
+ // end sync callbcak
+ if (!(result instanceof Promise)) span.end();
+ }
+ }
+ /**
+ * @internal
+ */
+ $(name, optionsOrFn, fn) {
+ const callback = typeof optionsOrFn === "function" ? optionsOrFn : fn;
+ if (!this.#otel) return callback(this.#noopSpan);
+ const otel = this.#otel;
+ const options = typeof optionsOrFn === "function" ? {} : optionsOrFn;
+ const context = options.context;
+ if (context) return otel.tracer.startActiveSpan(name, options, context, (span) => this.#callActiveSpan(span, callback));
+ return otel.tracer.startActiveSpan(name, options, (span) => this.#callActiveSpan(span, callback));
+ }
+ /**
+ * @internal
+ */
+ startSpan(name, options, context) {
+ if (!this.#otel) return this.#noopSpan;
+ const { tracer } = this.#otel;
+ return tracer.startSpan(name, options, context);
+ }
+ // On browser mode, async context is not automatically propagated,
+ // so we manually bind the `$` calls to the provided context.
+ // TODO: this doesn't bind to user land's `@optelemetry/api` calls
+ /**
+ * @internal
+ */
+ bind(context) {
+ if (!this.#otel) return;
+ const original = this.$.__original ?? this.$;
+ this.$ = this.#otel.context.bind(context, original);
+ this.$.__original = original;
+ }
+ /**
+ * @internal
+ */
+ async finish() {
+ await this.#sdk?.shutdown();
+ }
+ /**
+ * @internal
+ */
+ async flush() {
+ await this.#sdk?.forceFlush?.();
+ }
+}
+function noopSpan() {
+ return this;
+}
+function createNoopSpan() {
+ return {
+ setAttribute: noopSpan,
+ setStatus: noopSpan,
+ addEvent: noopSpan,
+ addLink: noopSpan,
+ addLinks: noopSpan,
+ setAttributes: noopSpan,
+ updateName: noopSpan,
+ end: () => {},
+ isRecording: () => false,
+ recordException: noopSpan,
+ spanContext() {
+ return {
+ spanId: "",
+ traceFlags: 0,
+ traceId: ""
+ };
+ }
+ };
+}
+function noopContext() {
+ return this;
+}
+function createNoopContext() {
+ return {
+ getValue: noopContext,
+ setValue: noopContext,
+ deleteValue: noopContext
+ };
+}
+
+export { Traces as T };