/** * Test setup for @suaveplan/test-vite. * * Registers a real in-memory OpenTelemetry MeterProvider BEFORE source * modules import so the global meter resolved on first use binds to it, * and provides a `webcrypto`-backed `globalThis.crypto` for plain Node runs. */ import { webcrypto } from "node:crypto"; import { metrics } from "@opentelemetry/api"; import { AggregationTemporality, InMemoryMetricExporter, MeterProvider, PeriodicExportingMetricReader, } from "@opentelemetry/sdk-metrics"; type WritableGlobal = { crypto?: Crypto }; const g = globalThis as WritableGlobal; if (g.crypto === undefined) { g.crypto = webcrypto as unknown as Crypto; } export const testInMemoryMetricExporter = new InMemoryMetricExporter( AggregationTemporality.CUMULATIVE ); const reader = new PeriodicExportingMetricReader({ exporter: testInMemoryMetricExporter, exportIntervalMillis: 60_000, }); export const testMeterProvider = new MeterProvider({ readers: [reader] }); metrics.setGlobalMeterProvider(testMeterProvider); export async function flushTestMetrics() { await testMeterProvider.forceFlush(); const collected = testInMemoryMetricExporter.getMetrics(); testInMemoryMetricExporter.reset(); return collected; }