Skip to content
Source
Sign inSign up

clientTracer.ts

27 lines731 Bytes

1import * as Layer from "effect/Layer";
2import * as Tracer from "effect/Tracer";
3​
4import { randomUUID } from "../lib/utils";
5​
6/** `service.instance.id` for this page load, shared by every resource the UI exports. */
7export const serviceInstanceId = randomUUID();
8​
9let delegate: Tracer.Tracer | null = null;
10​
11export function setDelegate(next: Tracer.Tracer | null): void {
12 delegate = next;
14​
15export function hasDelegate(): boolean {
16 return delegate !== null;
18​
19// Install before exporters exist so spans reach whichever exporter is configured later.
20export const layer = Layer.succeed(
21 Tracer.Tracer,
22 Tracer.make({
23 span(options) {
24 return delegate?.span(options) ?? new Tracer.NativeSpan(options);
25 },
26 }),
27);