From f2bd264fe1eb716ee43b65ff831de4a4471a1425 Mon Sep 17 00:00:00 2001 From: Yusinto Ngadiman Date: Mon, 26 Feb 2024 22:57:24 -0800 Subject: [PATCH] fix: Guard against null auto env attributes and async-storage. --- .../src/platform/ConditionalAsyncStorage.ts | 15 ++++++++------- packages/sdk/react-native/src/platform/autoEnv.ts | 2 +- packages/sdk/react-native/src/platform/locale.ts | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/sdk/react-native/src/platform/ConditionalAsyncStorage.ts b/packages/sdk/react-native/src/platform/ConditionalAsyncStorage.ts index 8f4f111a61..de3ea70916 100644 --- a/packages/sdk/react-native/src/platform/ConditionalAsyncStorage.ts +++ b/packages/sdk/react-native/src/platform/ConditionalAsyncStorage.ts @@ -1,7 +1,7 @@ /* eslint-disable import/no-mutable-exports,global-require */ /** - * For react-native version >= 0.71, the LaunchDarkly React-Native SDK uses + * The LaunchDarkly React-Native SDK uses * @react-native-async-storage/async-storage for bootstrapping. This is a native * dependency. * @@ -14,17 +14,18 @@ * does not work with transitive dependencies: * https://github.com/react-native-community/cli/issues/1347 * - * For react-native version < 0.71, the built-in react-native AsyncStorage - * module is used. */ let ConditionalAsyncStorage: any; try { - // react-native version < 0.71 - ConditionalAsyncStorage = require('react-native').AsyncStorage; -} catch (e) { - // react-native version >= 0.71 ConditionalAsyncStorage = require('@react-native-async-storage/async-storage').default; +} catch (e) { + // Use a mock if async-storage is unavailable + ConditionalAsyncStorage = { + getItem: (_key: string) => Promise.resolve(null), + setItem: (_key: string, _value: string) => Promise.resolve(), + removeItem: (_key: string) => Promise.resolve(), + }; } export default ConditionalAsyncStorage; diff --git a/packages/sdk/react-native/src/platform/autoEnv.ts b/packages/sdk/react-native/src/platform/autoEnv.ts index 4203c41a42..74db9e1eb9 100644 --- a/packages/sdk/react-native/src/platform/autoEnv.ts +++ b/packages/sdk/react-native/src/platform/autoEnv.ts @@ -37,6 +37,6 @@ export const ldDevice: LDDevice = { default: Platform.OS, }), name: Platform.OS, - version: Platform.Version.toString(), + version: Platform.Version?.toString(), }, }; diff --git a/packages/sdk/react-native/src/platform/locale.ts b/packages/sdk/react-native/src/platform/locale.ts index d5a5fab5e0..ae3f3e8c23 100644 --- a/packages/sdk/react-native/src/platform/locale.ts +++ b/packages/sdk/react-native/src/platform/locale.ts @@ -7,6 +7,6 @@ import { NativeModules, Platform } from 'react-native'; const locale = Platform.OS === 'ios' ? NativeModules.SettingsManager.settings.AppleLocale // iOS - : NativeModules.I18nManager.localeIdentifier; // Android and rest + : NativeModules.I18nManager?.localeIdentifier; export default locale;