From faf0d24cfe5567f6f0a9df0aa5637542a696392d Mon Sep 17 00:00:00 2001 From: Marco Saia Date: Fri, 23 Aug 2024 11:46:11 +0200 Subject: [PATCH] Track React Native version --- packages/core/src/DdSdkReactNative.tsx | 9 +++++++++ .../core/src/__tests__/DdSdkReactNative.test.tsx | 15 +++++++++++++++ packages/core/src/__tests__/mock.test.ts | 1 + .../__tests__/initialization.test.tsx | 2 ++ 4 files changed, 27 insertions(+) diff --git a/packages/core/src/DdSdkReactNative.tsx b/packages/core/src/DdSdkReactNative.tsx index a2ed703be..3a70739cb 100644 --- a/packages/core/src/DdSdkReactNative.tsx +++ b/packages/core/src/DdSdkReactNative.tsx @@ -4,6 +4,7 @@ * Copyright 2016-Present Datadog, Inc. */ +import { version as reactNativeVersion } from 'react-native/package.json'; import { InteractionManager } from 'react-native'; import { @@ -48,6 +49,8 @@ export class DdSdkReactNative { private static readonly DD_SDK_VERSION = '_dd.sdk_version'; private static readonly DD_VERSION = '_dd.version'; private static readonly DD_VERSION_SUFFIX = '_dd.version_suffix'; + private static readonly DD_REACT_NATIVE_VERSION = + '_dd.react_native_version'; private static wasAutoInstrumented = false; private static features?: AutoInstrumentationConfiguration; @@ -241,6 +244,12 @@ export class DdSdkReactNative { ] = `-${configuration.versionSuffix}`; } + if (reactNativeVersion) { + configuration.additionalConfiguration[ + DdSdkReactNative.DD_REACT_NATIVE_VERSION + ] = `${reactNativeVersion}`; + } + return new DdSdkConfiguration( configuration.clientToken, configuration.env, diff --git a/packages/core/src/__tests__/DdSdkReactNative.test.tsx b/packages/core/src/__tests__/DdSdkReactNative.test.tsx index f7928fc09..65a161718 100644 --- a/packages/core/src/__tests__/DdSdkReactNative.test.tsx +++ b/packages/core/src/__tests__/DdSdkReactNative.test.tsx @@ -4,6 +4,7 @@ * Copyright 2016-Present Datadog, Inc. */ +import { version as reactNativeVersion } from 'react-native/package.json'; import { NativeModules } from 'react-native'; import { DdSdkReactNativeConfiguration } from '../DdSdkReactNativeConfiguration'; @@ -114,6 +115,7 @@ describe('DdSdkReactNative', () => { expect(ddSdkConfiguration.bundleLogsWithTraces).toBe(true); expect(ddSdkConfiguration.additionalConfiguration).toStrictEqual({ + '_dd.react_native_version': reactNativeVersion, '_dd.source': 'react-native', '_dd.sdk_version': sdkVersion }); @@ -148,6 +150,7 @@ describe('DdSdkReactNative', () => { TrackingConsent.GRANTED ); expect(ddSdkConfiguration.additionalConfiguration).toStrictEqual({ + '_dd.react_native_version': reactNativeVersion, '_dd.source': 'react-native', '_dd.sdk_version': sdkVersion }); @@ -190,6 +193,7 @@ describe('DdSdkReactNative', () => { expect(ddSdkConfiguration.env).toBe(fakeEnvName); expect(ddSdkConfiguration.trackingConsent).toBe(fakeConsent); expect(ddSdkConfiguration.additionalConfiguration).toStrictEqual({ + '_dd.react_native_version': reactNativeVersion, '_dd.source': 'react-native', '_dd.sdk_version': sdkVersion }); @@ -222,6 +226,7 @@ describe('DdSdkReactNative', () => { expect(ddSdkConfiguration.applicationId).toBe(fakeAppId); expect(ddSdkConfiguration.env).toBe(fakeEnvName); expect(ddSdkConfiguration.additionalConfiguration).toStrictEqual({ + '_dd.react_native_version': reactNativeVersion, '_dd.source': 'react-native', '_dd.sdk_version': sdkVersion }); @@ -281,6 +286,7 @@ describe('DdSdkReactNative', () => { expect( ddSdkConfiguration.additionalConfiguration ).toStrictEqual({ + '_dd.react_native_version': reactNativeVersion, '_dd.source': 'react-native', '_dd.sdk_version': sdkVersion }); @@ -503,6 +509,7 @@ describe('DdSdkReactNative', () => { expect(ddSdkConfiguration.applicationId).toBe(fakeAppId); expect(ddSdkConfiguration.env).toBe(fakeEnvName); expect(ddSdkConfiguration.additionalConfiguration).toStrictEqual({ + '_dd.react_native_version': reactNativeVersion, '_dd.source': 'react-native', '_dd.sdk_version': sdkVersion }); @@ -555,6 +562,7 @@ describe('DdSdkReactNative', () => { } ]); expect(ddSdkConfiguration.additionalConfiguration).toStrictEqual({ + '_dd.react_native_version': reactNativeVersion, '_dd.source': 'react-native', '_dd.sdk_version': sdkVersion }); @@ -604,6 +612,7 @@ describe('DdSdkReactNative', () => { expect(ddSdkConfiguration.applicationId).toBe(fakeAppId); expect(ddSdkConfiguration.env).toBe(fakeEnvName); expect(ddSdkConfiguration.additionalConfiguration).toStrictEqual({ + '_dd.react_native_version': reactNativeVersion, '_dd.source': 'react-native', '_dd.sdk_version': sdkVersion }); @@ -804,6 +813,7 @@ describe('DdSdkReactNative', () => { expect(ddSdkConfiguration.env).toBe(fakeEnvName); expect(ddSdkConfiguration.serviceName).toBe(fakeServiceName); expect(ddSdkConfiguration.additionalConfiguration).toStrictEqual({ + '_dd.react_native_version': reactNativeVersion, '_dd.source': 'react-native', '_dd.sdk_version': sdkVersion }); @@ -839,6 +849,7 @@ describe('DdSdkReactNative', () => { expect(ddSdkConfiguration.env).toBe(fakeEnvName); expect(ddSdkConfiguration.verbosity).toBe(SdkVerbosity.DEBUG); expect(ddSdkConfiguration.additionalConfiguration).toStrictEqual({ + '_dd.react_native_version': reactNativeVersion, '_dd.source': 'react-native', '_dd.sdk_version': sdkVersion }); @@ -874,6 +885,7 @@ describe('DdSdkReactNative', () => { expect(ddSdkConfiguration.env).toBe(fakeEnvName); expect(ddSdkConfiguration.nativeViewTracking).toBe(true); expect(ddSdkConfiguration.additionalConfiguration).toStrictEqual({ + '_dd.react_native_version': reactNativeVersion, '_dd.source': 'react-native', '_dd.sdk_version': sdkVersion }); @@ -909,6 +921,7 @@ describe('DdSdkReactNative', () => { expect(ddSdkConfiguration.env).toBe(fakeEnvName); expect(ddSdkConfiguration.nativeInteractionTracking).toBe(true); expect(ddSdkConfiguration.additionalConfiguration).toStrictEqual({ + '_dd.react_native_version': reactNativeVersion, '_dd.source': 'react-native', '_dd.sdk_version': sdkVersion }); @@ -1115,6 +1128,7 @@ describe('DdSdkReactNative', () => { expect( ddSdkConfiguration.additionalConfiguration ).toStrictEqual({ + '_dd.react_native_version': reactNativeVersion, '_dd.source': 'react-native', '_dd.sdk_version': sdkVersion }); @@ -1177,6 +1191,7 @@ describe('DdSdkReactNative', () => { expect( ddSdkConfiguration.additionalConfiguration ).toStrictEqual({ + '_dd.react_native_version': reactNativeVersion, '_dd.source': 'react-native', '_dd.sdk_version': sdkVersion }); diff --git a/packages/core/src/__tests__/mock.test.ts b/packages/core/src/__tests__/mock.test.ts index 5d0108023..5ae493dc8 100644 --- a/packages/core/src/__tests__/mock.test.ts +++ b/packages/core/src/__tests__/mock.test.ts @@ -45,6 +45,7 @@ const privateProperties = { 'DD_SDK_VERSION', 'DD_VERSION', 'DD_VERSION_SUFFIX', + 'DD_REACT_NATIVE_VERSION', 'wasAutoInstrumented', 'initializeNativeSDK', '_initializeFromDatadogProviderWithConfigurationAsync', diff --git a/packages/core/src/sdk/DatadogProvider/__tests__/initialization.test.tsx b/packages/core/src/sdk/DatadogProvider/__tests__/initialization.test.tsx index f45ef9d82..48a2f14a7 100644 --- a/packages/core/src/sdk/DatadogProvider/__tests__/initialization.test.tsx +++ b/packages/core/src/sdk/DatadogProvider/__tests__/initialization.test.tsx @@ -4,6 +4,7 @@ * Copyright 2016-Present Datadog, Inc. */ +import { version as reactNativeVersion } from 'react-native/package.json'; import { NativeModules } from 'react-native'; import { InitializationMode } from '../../../DdSdkReactNativeConfiguration'; @@ -64,6 +65,7 @@ describe('DatadogProvider', () => { expect(receivedConfiguration).toMatchInlineSnapshot(` DdSdkConfiguration { "additionalConfiguration": { + "_dd.react_native_version": "${reactNativeVersion}", "_dd.source": "react-native", }, "applicationId": "fakeApplicationId",