Skip to content

Commit ec71cac

Browse files
authored
fix: getprecomputedinstance should always return an instance (#151)
* Initialize with an empty client * Add a test * Adjust check for singleton was initialized * Check for instance is no longer necessary because it is always defined
1 parent b8f579e commit ec71cac

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

src/index.spec.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import {
3636
EppoPrecomputedJSClient,
3737
getConfigUrl,
3838
getInstance,
39+
getPrecomputedInstance,
3940
IAssignmentLogger,
4041
init,
4142
offlineInit,
@@ -1278,6 +1279,19 @@ describe('offlinePrecomputedInit', () => {
12781279
});
12791280
});
12801281

1282+
describe('getPrecomputedInstance', () => {
1283+
it('returns an instance that safely returns defaults without logging', () => {
1284+
const mockLogger = td.object<IAssignmentLogger>();
1285+
const instance = getPrecomputedInstance();
1286+
instance.setAssignmentLogger(mockLogger);
1287+
1288+
const result = instance.getStringAssignment('any-flag', 'default-value');
1289+
1290+
expect(result).toBe('default-value');
1291+
td.verify(mockLogger.logAssignment(td.matchers.anything()), { times: 0 });
1292+
});
1293+
});
1294+
12811295
it('initializes without an assignment logger', () => {
12821296
const client = offlinePrecomputedInit({ precomputedConfiguration });
12831297

src/index.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,13 @@ export function getConfigUrl(apiKey: string, baseUrl?: string): URL {
557557
* @public
558558
*/
559559
export class EppoPrecomputedJSClient extends EppoPrecomputedClient {
560-
public static instance: EppoPrecomputedJSClient;
560+
public static instance = new EppoPrecomputedJSClient({
561+
precomputedFlagStore: memoryOnlyPrecomputedFlagsStore,
562+
subject: {
563+
subjectKey: '',
564+
subjectAttributes: {},
565+
},
566+
});
561567
public static initialized = false;
562568

563569
public getStringAssignment(flagKey: string, defaultValue: string): string {
@@ -609,7 +615,7 @@ export class EppoPrecomputedJSClient extends EppoPrecomputedClient {
609615
export async function precomputedInit(
610616
config: IPrecomputedClientConfig,
611617
): Promise<EppoPrecomputedClient> {
612-
if (EppoPrecomputedJSClient.instance) {
618+
if (EppoPrecomputedJSClient.initialized) {
613619
return EppoPrecomputedJSClient.instance;
614620
}
615621

@@ -764,7 +770,7 @@ export function offlinePrecomputedInit(
764770
}
765771

766772
function shutdownEppoPrecomputedClient() {
767-
if (EppoPrecomputedJSClient.instance && EppoPrecomputedJSClient.initialized) {
773+
if (EppoPrecomputedJSClient.initialized) {
768774
EppoPrecomputedJSClient.instance.stopPolling();
769775
EppoPrecomputedJSClient.initialized = false;
770776
applicationLogger.warn('[Eppo SDK] Precomputed client is being re-initialized.');

0 commit comments

Comments
 (0)