From c18f5b4ff46dc4e7d33d8617591b155f32b12d73 Mon Sep 17 00:00:00 2001 From: Sameeran Kunche Date: Thu, 16 Jan 2025 11:32:23 -0800 Subject: [PATCH 1/4] Initialize with an empty client --- src/index.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index f151ad6..6da95e1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -556,7 +556,13 @@ export function getConfigUrl(apiKey: string, baseUrl?: string): URL { * @public */ export class EppoPrecomputedJSClient extends EppoPrecomputedClient { - public static instance: EppoPrecomputedJSClient; + public static instance = new EppoPrecomputedJSClient({ + precomputedFlagStore: memoryOnlyPrecomputedFlagsStore, + subject: { + subjectKey: '', + subjectAttributes: {}, + }, + }); public static initialized = false; public getStringAssignment(flagKey: string, defaultValue: string): string { From f5d4eb4c9ccf1475bee47f79ee5900a3a18cddee Mon Sep 17 00:00:00 2001 From: Sameeran Kunche Date: Thu, 16 Jan 2025 11:37:39 -0800 Subject: [PATCH 2/4] Add a test --- src/index.spec.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/index.spec.ts b/src/index.spec.ts index 3a406cc..7bede72 100644 --- a/src/index.spec.ts +++ b/src/index.spec.ts @@ -36,6 +36,7 @@ import { EppoPrecomputedJSClient, getConfigUrl, getInstance, + getPrecomputedInstance, IAssignmentLogger, init, offlineInit, @@ -1278,6 +1279,19 @@ describe('offlinePrecomputedInit', () => { }); }); + describe('getPrecomputedInstance', () => { + it('returns an instance that safely returns defaults without logging', () => { + const mockLogger = td.object(); + const instance = getPrecomputedInstance(); + instance.setAssignmentLogger(mockLogger); + + const result = instance.getStringAssignment('any-flag', 'default-value'); + + expect(result).toBe('default-value'); + td.verify(mockLogger.logAssignment(td.matchers.anything()), { times: 0 }); + }); + }); + it('initializes without an assignment logger', () => { const client = offlinePrecomputedInit({ precomputedConfiguration }); From 84fd6454933c6f029bed2b568a1e29876cd82c1a Mon Sep 17 00:00:00 2001 From: Sameeran Kunche Date: Thu, 16 Jan 2025 12:11:13 -0800 Subject: [PATCH 3/4] Adjust check for singleton was initialized --- src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 6da95e1..4c95032 100644 --- a/src/index.ts +++ b/src/index.ts @@ -614,7 +614,7 @@ export class EppoPrecomputedJSClient extends EppoPrecomputedClient { export async function precomputedInit( config: IPrecomputedClientConfig, ): Promise { - if (EppoPrecomputedJSClient.instance) { + if (EppoPrecomputedJSClient.initialized) { return EppoPrecomputedJSClient.instance; } From 438ea47bc2819f297bec88b9ce79303ea3119d7a Mon Sep 17 00:00:00 2001 From: Sameeran Kunche Date: Thu, 16 Jan 2025 12:18:32 -0800 Subject: [PATCH 4/4] Check for instance is no longer necessary because it is always defined --- src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 4c95032..837cb91 100644 --- a/src/index.ts +++ b/src/index.ts @@ -768,7 +768,7 @@ export function offlinePrecomputedInit( } function shutdownEppoPrecomputedClient() { - if (EppoPrecomputedJSClient.instance && EppoPrecomputedJSClient.initialized) { + if (EppoPrecomputedJSClient.initialized) { EppoPrecomputedJSClient.instance.stopPolling(); EppoPrecomputedJSClient.initialized = false; applicationLogger.warn('[Eppo SDK] Precomputed client is being re-initialized.');