From 9035782bbba4e9fe4e88af9972dc9aea711b29f0 Mon Sep 17 00:00:00 2001 From: Raju Ahmed Date: Fri, 16 May 2025 17:48:06 +0600 Subject: [PATCH] [FSSDK-11510] refactor unsupported factories to not throw --- lib/entrypoint.test-d.ts | 3 ++- lib/index.browser.ts | 2 +- lib/index.node.ts | 4 ++-- lib/index.react_native.ts | 4 ++-- lib/vuid/vuid_manager_factory.browser.spec.ts | 2 +- lib/vuid/vuid_manager_factory.node.spec.ts | 8 ++++---- lib/vuid/vuid_manager_factory.node.ts | 7 ++----- lib/vuid/vuid_manager_factory.ts | 7 ++++--- 8 files changed, 18 insertions(+), 19 deletions(-) diff --git a/lib/entrypoint.test-d.ts b/lib/entrypoint.test-d.ts index 5dcf2e73e..3dd2f3c06 100644 --- a/lib/entrypoint.test-d.ts +++ b/lib/entrypoint.test-d.ts @@ -55,6 +55,7 @@ import { NOTIFICATION_TYPES, DECISION_NOTIFICATION_TYPES } from './notification_ import { LogLevel } from './logging/logger'; import { OptimizelyDecideOption } from './shared_types'; +import { Maybe } from './utils/type'; export type Entrypoint = { // client factory @@ -66,7 +67,7 @@ export type Entrypoint = { // event processor related exports eventDispatcher: EventDispatcher; - getSendBeaconEventDispatcher: () => EventDispatcher; + getSendBeaconEventDispatcher: () => Maybe; createForwardingEventProcessor: (eventDispatcher?: EventDispatcher) => OpaqueEventProcessor; createBatchEventProcessor: (options?: BatchEventProcessorOptions) => OpaqueEventProcessor; diff --git a/lib/index.browser.ts b/lib/index.browser.ts index 98c7a11d2..96249c6a9 100644 --- a/lib/index.browser.ts +++ b/lib/index.browser.ts @@ -45,7 +45,7 @@ export const createInstance = function(config: Config): Client | null { return client; }; -export const getSendBeaconEventDispatcher = (): EventDispatcher => { +export const getSendBeaconEventDispatcher = (): EventDispatcher | undefined => { return sendBeaconEventDispatcher; }; diff --git a/lib/index.node.ts b/lib/index.node.ts index 348c8c3d9..b911d0d6a 100644 --- a/lib/index.node.ts +++ b/lib/index.node.ts @@ -35,8 +35,8 @@ export const createInstance = function(config: Config): Client | null { return getOptimizelyInstance(nodeConfig); }; -export const getSendBeaconEventDispatcher = function(): EventDispatcher { - throw new Error('Send beacon event dispatcher is not supported in NodeJS'); +export const getSendBeaconEventDispatcher = function(): EventDispatcher | undefined { + return undefined; }; export { default as eventDispatcher } from './event_processor/event_dispatcher/default_dispatcher.node'; diff --git a/lib/index.react_native.ts b/lib/index.react_native.ts index fbdf9c8a0..df386fa66 100644 --- a/lib/index.react_native.ts +++ b/lib/index.react_native.ts @@ -38,8 +38,8 @@ export const createInstance = function(config: Config): Client | null { return getOptimizelyInstance(rnConfig); }; -export const getSendBeaconEventDispatcher = function(): EventDispatcher { - throw new Error('Send beacon event dispatcher is not supported in React Native'); +export const getSendBeaconEventDispatcher = function(): EventDispatcher | undefined { + return undefined; }; export { default as eventDispatcher } from './event_processor/event_dispatcher/default_dispatcher.browser'; diff --git a/lib/vuid/vuid_manager_factory.browser.spec.ts b/lib/vuid/vuid_manager_factory.browser.spec.ts index 805064c4b..59c8602db 100644 --- a/lib/vuid/vuid_manager_factory.browser.spec.ts +++ b/lib/vuid/vuid_manager_factory.browser.spec.ts @@ -35,7 +35,7 @@ import { LocalStorageCache } from '../utils/cache/local_storage_cache.browser'; import { DefaultVuidManager, VuidCacheManager } from './vuid_manager'; import { extractVuidManager } from './vuid_manager_factory'; -describe('extractVuidManager(createVuidManager', () => { +describe('createVuidManager', () => { const MockVuidCacheManager = vi.mocked(VuidCacheManager); const MockLocalStorageCache = vi.mocked(LocalStorageCache); const MockDefaultVuidManager = vi.mocked(DefaultVuidManager); diff --git a/lib/vuid/vuid_manager_factory.node.spec.ts b/lib/vuid/vuid_manager_factory.node.spec.ts index 0d8a6af5b..8f6b21e74 100644 --- a/lib/vuid/vuid_manager_factory.node.spec.ts +++ b/lib/vuid/vuid_manager_factory.node.spec.ts @@ -17,11 +17,11 @@ import { vi, describe, expect, it } from 'vitest'; import { createVuidManager } from './vuid_manager_factory.node'; -import { VUID_IS_NOT_SUPPORTED_IN_NODEJS } from './vuid_manager_factory.node'; +import { extractVuidManager } from './vuid_manager_factory'; describe('createVuidManager', () => { - it('should throw an error', () => { - expect(() => createVuidManager({ enableVuid: true })) - .toThrowError(VUID_IS_NOT_SUPPORTED_IN_NODEJS); + it('should return a undefined vuid manager wrapped as OpaqueVuidManager', () => { + expect(extractVuidManager(createVuidManager({ enableVuid: true }))) + .toBeUndefined(); }); }); diff --git a/lib/vuid/vuid_manager_factory.node.ts b/lib/vuid/vuid_manager_factory.node.ts index 54dd2dbaa..439e70ec1 100644 --- a/lib/vuid/vuid_manager_factory.node.ts +++ b/lib/vuid/vuid_manager_factory.node.ts @@ -13,11 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { VuidManager } from './vuid_manager'; -import { OpaqueVuidManager, VuidManagerOptions } from './vuid_manager_factory'; - -export const VUID_IS_NOT_SUPPORTED_IN_NODEJS= 'VUID is not supported in Node.js environment'; +import { OpaqueVuidManager, VuidManagerOptions, wrapVuidManager } from './vuid_manager_factory'; export const createVuidManager = (options: VuidManagerOptions = {}): OpaqueVuidManager => { - throw new Error(VUID_IS_NOT_SUPPORTED_IN_NODEJS); + return wrapVuidManager(undefined); }; diff --git a/lib/vuid/vuid_manager_factory.ts b/lib/vuid/vuid_manager_factory.ts index ccc4ce2b2..94c777e26 100644 --- a/lib/vuid/vuid_manager_factory.ts +++ b/lib/vuid/vuid_manager_factory.ts @@ -15,6 +15,7 @@ */ import { Store } from '../utils/cache/store'; +import { Maybe } from '../utils/type'; import { VuidManager } from './vuid_manager'; export type VuidManagerOptions = { @@ -28,11 +29,11 @@ export type OpaqueVuidManager = { [vuidManagerSymbol]: unknown; }; -export const extractVuidManager = (opaqueVuidManager: OpaqueVuidManager): VuidManager => { - return opaqueVuidManager[vuidManagerSymbol] as VuidManager; +export const extractVuidManager = (opaqueVuidManager: OpaqueVuidManager): Maybe => { + return opaqueVuidManager[vuidManagerSymbol] as Maybe; }; -export const wrapVuidManager = (vuidManager: VuidManager): OpaqueVuidManager => { +export const wrapVuidManager = (vuidManager: Maybe): OpaqueVuidManager => { return { [vuidManagerSymbol]: vuidManager }