From 810c68ceecb552b756eb7cbfdee80289c7601a2f Mon Sep 17 00:00:00 2001 From: Marco Saia Date: Fri, 20 Feb 2026 16:57:42 +0100 Subject: [PATCH] fix: missing events in Expo caused by wrong singleton usage --- packages/core/src/InternalLog.tsx | 20 +++++++++++----- .../DatadogProvider/Buffer/BufferSingleton.ts | 23 +++++++++++++------ 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/packages/core/src/InternalLog.tsx b/packages/core/src/InternalLog.tsx index eb755efdd..8b5f1460c 100644 --- a/packages/core/src/InternalLog.tsx +++ b/packages/core/src/InternalLog.tsx @@ -5,30 +5,33 @@ */ import { SdkVerbosity } from './config/types/SdkVerbosity'; +import { getGlobalInstance } from './utils/singletonUtils'; export const DATADOG_MESSAGE_PREFIX = 'DATADOG:'; +const INTERNAL_LOG_MODULE = 'com.datadog.reactnative.internal_log'; + /** * /!\ DO NOT USE THIS IN YOUR APP /!\\ * * This logger is only for debugging the Datadog SDK. */ -export class InternalLog { - private static levelMap = new Map([ +class _InternalLog { + private levelMap = new Map([ [SdkVerbosity.DEBUG, 1], [SdkVerbosity.INFO, 2], [SdkVerbosity.WARN, 3], [SdkVerbosity.ERROR, 4] ]); - public static verbosity: SdkVerbosity | undefined = undefined; + public verbosity: SdkVerbosity | undefined = undefined; - public static log(message: string, verbosity: SdkVerbosity): void { - if (InternalLog.verbosity === undefined) { + public log(message: string, verbosity: SdkVerbosity): void { + if (this.verbosity === undefined) { return; } const requiredLevel = InternalLog.levelMap.get(verbosity); - const allowedLevel = InternalLog.levelMap.get(InternalLog.verbosity); + const allowedLevel = InternalLog.levelMap.get(this.verbosity); if (allowedLevel === undefined || requiredLevel === undefined) { return; } @@ -50,3 +53,8 @@ export class InternalLog { } } } + +export const InternalLog = getGlobalInstance( + INTERNAL_LOG_MODULE, + () => new _InternalLog() +); diff --git a/packages/core/src/sdk/DatadogProvider/Buffer/BufferSingleton.ts b/packages/core/src/sdk/DatadogProvider/Buffer/BufferSingleton.ts index d3d47bb26..7c84fb910 100644 --- a/packages/core/src/sdk/DatadogProvider/Buffer/BufferSingleton.ts +++ b/packages/core/src/sdk/DatadogProvider/Buffer/BufferSingleton.ts @@ -4,23 +4,32 @@ * Copyright 2016-Present Datadog, Inc. */ +import { getGlobalInstance } from '../../../utils/singletonUtils'; + import { BoundedBuffer } from './BoundedBuffer'; import type { DatadogBuffer } from './DatadogBuffer'; import { PassThroughBuffer } from './PassThroughBuffer'; -export class BufferSingleton { - private static bufferInstance: DatadogBuffer = new BoundedBuffer(); +const BUFFER_SINGLETON_MODULE = 'com.datadog.reactnative.buffer_singleton'; + +class _BufferSingleton { + private bufferInstance: DatadogBuffer = new BoundedBuffer(); - static getInstance = (): DatadogBuffer => { + getInstance = (): DatadogBuffer => { return BufferSingleton.bufferInstance; }; - static onInitialization = () => { - BufferSingleton.bufferInstance.drain(); - BufferSingleton.bufferInstance = new PassThroughBuffer(); + onInitialization = () => { + this.bufferInstance.drain(); + this.bufferInstance = new PassThroughBuffer(); }; - static reset = () => { + reset = () => { BufferSingleton.bufferInstance = new BoundedBuffer(); }; } + +export const BufferSingleton = getGlobalInstance( + BUFFER_SINGLETON_MODULE, + () => new _BufferSingleton() +);