QMetaRam / node_modules /@supabase /supabase-js /src /lib /tracingRegistry.ts
metarm's picture
Upload folder using huggingface_hub (part 11)
96c8713 verified
Raw History Blame Contribute Delete
1.65 kB
import type { TraceContextExtractor } from '@supabase/tracing'
export type { TraceContextExtractor }
// The extractor lives in a `Symbol.for()`-keyed slot on `globalThis` rather
// than a module-level variable. Bundlers and the ESM/CJS dual build can load
// this module more than once in a single application (e.g. the tracing
// subpath resolved to `dist/tracing.mjs` while the main entry resolves to
// `dist/index.cjs`) — separate module instances would each get their own
// variable, but they all share the global symbol registry.
//
// The symbol string is a de-facto stable contract: module-resolution tests
// read the slot directly, and changing it orphans registrations from other
// copies of this package in the same process.
const EXTRACTOR_KEY = Symbol.for('@supabase/supabase-js.traceContextExtractor')
type ExtractorSlot = { [EXTRACTOR_KEY]?: TraceContextExtractor }
/**
* Register the trace context extractor used by all Supabase clients in this
* process. Called by the `@supabase/supabase-js/tracing` subpath as an import
* side effect; the last registration wins.
*/
export function registerTraceContextExtractor(extractor: TraceContextExtractor): void {
;(globalThis as ExtractorSlot)[EXTRACTOR_KEY] = extractor
}
/**
* The currently registered trace context extractor, if any.
*/
export function getTraceContextExtractor(): TraceContextExtractor | undefined {
return (globalThis as ExtractorSlot)[EXTRACTOR_KEY]
}
/**
* For tests only. Removes the registered extractor.
*
* @internal
*/
export function _unregisterTraceContextExtractor(): void {
delete (globalThis as ExtractorSlot)[EXTRACTOR_KEY]
}