diff --git a/packages/sdk/svelte/__tests__/lib/client/SvelteLDClient.test.ts b/packages/sdk/svelte/__tests__/lib/client/SvelteLDClient.test.ts index ea689d6eda..01b332016d 100644 --- a/packages/sdk/svelte/__tests__/lib/client/SvelteLDClient.test.ts +++ b/packages/sdk/svelte/__tests__/lib/client/SvelteLDClient.test.ts @@ -2,11 +2,11 @@ import { EventEmitter } from 'node:events'; import { get } from 'svelte/store'; import { afterEach, beforeEach, describe, expect, it, Mock, vi } from 'vitest'; -import { initialize, LDClient } from '@launchdarkly/js-client-sdk/compat'; +import { createClient, LDClient } from '@launchdarkly/js-client-sdk'; import { LD } from '../../../src/lib/client/SvelteLDClient'; -vi.mock('@launchdarkly/js-client-sdk/compat', { spy: true }); +vi.mock('@launchdarkly/js-client-sdk', { spy: true }); const clientSideID = 'test-client-side-id'; const rawFlags = { 'test-flag': true, 'another-test-flag': 'flag-value' }; @@ -21,6 +21,7 @@ const mockLDClient = { allFlags: vi.fn().mockReturnValue(rawFlags), variation: vi.fn((_, defaultValue) => defaultValue), identify: vi.fn(), + start: vi.fn(), }; describe('launchDarkly', () => { @@ -40,8 +41,7 @@ describe('launchDarkly', () => { const ld = LD; beforeEach(() => { - // mocks the initialize function to return the mockLDClient - (initialize as Mock).mockReturnValue( + (createClient as Mock).mockReturnValue( mockLDClient as unknown as LDClient, ); }); @@ -66,7 +66,7 @@ describe('launchDarkly', () => { ld.initialize(clientSideID, mockContext); expect(get(initializing)).toBe(true); // should be true before the ready event is emitted - mockLDEventEmitter.emit('ready'); + mockLDEventEmitter.emit('initialized'); expect(get(initializing)).toBe(false); }); @@ -74,7 +74,7 @@ describe('launchDarkly', () => { it('should initialize the LaunchDarkly SDK instance', () => { ld.initialize(clientSideID, mockContext); - expect(initialize).toHaveBeenCalledWith('test-client-side-id', mockContext); + expect(createClient).toHaveBeenCalledWith('test-client-side-id', mockContext, undefined); }); it('should register function that gets flag values when client is ready', () => { @@ -82,7 +82,7 @@ describe('launchDarkly', () => { const allFlagsSpy = vi.spyOn(mockLDClient, 'allFlags').mockReturnValue(newFlags); ld.initialize(clientSideID, mockContext); - mockLDEventEmitter.emit('ready'); + mockLDEventEmitter.emit('initialized'); expect(allFlagsSpy).toHaveBeenCalledOnce(); expect(allFlagsSpy).toHaveReturnedWith(newFlags); @@ -104,8 +104,7 @@ describe('launchDarkly', () => { const ld = LD; beforeEach(() => { - // mocks the initialize function to return the mockLDClient - (initialize as Mock).mockReturnValue( + (createClient as Mock).mockReturnValue( mockLDClient as unknown as LDClient, ); }); @@ -166,8 +165,7 @@ describe('launchDarkly', () => { const ld = LD; beforeEach(() => { - // mocks the initialize function to return the mockLDClient - (initialize as Mock).mockReturnValue( + (createClient as Mock).mockReturnValue( mockLDClient as unknown as LDClient, ); }); @@ -191,8 +189,7 @@ describe('launchDarkly', () => { const ld = LD; beforeEach(() => { - // mocks the initialize function to return the mockLDClient - (initialize as Mock).mockReturnValue( + (createClient as Mock).mockReturnValue( mockLDClient as unknown as LDClient, ); }); diff --git a/packages/sdk/svelte/src/lib/client/SvelteLDClient.ts b/packages/sdk/svelte/src/lib/client/SvelteLDClient.ts index 21fc32ffb5..83a4e849a9 100644 --- a/packages/sdk/svelte/src/lib/client/SvelteLDClient.ts +++ b/packages/sdk/svelte/src/lib/client/SvelteLDClient.ts @@ -1,12 +1,13 @@ import { derived, type Readable, readonly, writable, type Writable } from 'svelte/store'; -import type { LDFlagSet } from '@launchdarkly/js-client-sdk'; import { - initialize, + createClient as createClientSdk, type LDClient, type LDContext, + type LDFlagSet, type LDFlagValue, -} from '@launchdarkly/js-client-sdk/compat'; + type LDOptions, +} from '@launchdarkly/js-client-sdk'; export type { LDContext, LDFlagValue }; @@ -62,7 +63,7 @@ function toFlagsProxy(client: LDClient, flags: LDFlags): LDFlags { * Creates a LaunchDarkly instance. * @returns {Object} The LaunchDarkly instance object. */ -function createLD() { +function init() { let coreLdClient: LDClient | undefined; const loading = writable(true); const flagsWritable = writable({}); @@ -73,21 +74,23 @@ function createLD() { * @param {LDContext} context - The user context. * @returns {Object} An object with the initialization status store. */ - function LDInitialize(clientId: LDClientID, context: LDContext) { - coreLdClient = initialize(clientId, context); - coreLdClient!.on('ready', () => { + function initialize(clientId: LDClientID, context: LDContext, options?: LDOptions) { + coreLdClient = createClientSdk(clientId, context, options); + coreLdClient.on('initialized', () => { loading.set(false); const rawFlags = coreLdClient!.allFlags(); const allFlags = toFlagsProxy(coreLdClient!, rawFlags); flagsWritable.set(allFlags); }); - coreLdClient!.on('change', () => { + coreLdClient.on('change', () => { const rawFlags = coreLdClient!.allFlags(); const allFlags = toFlagsProxy(coreLdClient!, rawFlags); flagsWritable.set(allFlags); }); + coreLdClient.start(); + return { initializing: loading, }; @@ -125,7 +128,7 @@ function createLD() { return { identify, flags: readonly(flagsWritable), - initialize: LDInitialize, + initialize, initializing: readonly(loading), watch, useFlag, @@ -133,4 +136,4 @@ function createLD() { } /** The LaunchDarkly instance */ -export const LD = createLD(); +export const LD = init();