Skip to content

Commit 7f14e75

Browse files
committed
fix: Handle default flush interval for browser SDK.
1 parent 2c09c3b commit 7f14e75

File tree

3 files changed

+34
-9
lines changed

3 files changed

+34
-9
lines changed

packages/sdk/browser/__tests__/options.test.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { jest } from '@jest/globals';
22

33
import { LDLogger } from '@launchdarkly/js-client-sdk-common';
44

5-
import validateOptions, { filterToBaseOptions } from '../src/options';
5+
import validateOptions, { filterToBaseOptions, withBrowserDefaults } from '../src/options';
66

77
let logger: LDLogger;
88

@@ -50,7 +50,7 @@ it('warns for invalid configuration', () => {
5050
);
5151
});
5252

53-
it('applies default options', () => {
53+
it('applies default browser-specific options', () => {
5454
const opts = validateOptions({}, logger);
5555

5656
expect(opts.fetchGoals).toBe(true);
@@ -75,3 +75,23 @@ it('filters to base options', () => {
7575
expect(baseOpts).not.toHaveProperty('fetchGoals');
7676
expect(baseOpts).not.toHaveProperty('eventUrlTransformer');
7777
});
78+
79+
it('applies default overrides to common config flushInterval', () => {
80+
const opts = {};
81+
const result = withBrowserDefaults(opts);
82+
expect(result.flushInterval).toEqual(2);
83+
});
84+
85+
it('does not override common config flushInterval if it is set', () => {
86+
const opts = {
87+
flushInterval: 15,
88+
};
89+
const result = withBrowserDefaults(opts);
90+
expect(result.flushInterval).toEqual(15);
91+
});
92+
93+
it('includes overridden defaults after filtering to base options', () => {
94+
const opts = {};
95+
const result = filterToBaseOptions(withBrowserDefaults(opts));
96+
expect(result.flushInterval).toEqual(2);
97+
});

packages/sdk/browser/src/BrowserClient.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@ import { BrowserIdentifyOptions as LDIdentifyOptions } from './BrowserIdentifyOp
2121
import { registerStateDetection } from './BrowserStateDetector';
2222
import GoalManager from './goals/GoalManager';
2323
import { Goal, isClick } from './goals/Goals';
24-
import validateOptions, { BrowserOptions, filterToBaseOptions } from './options';
24+
import validateOptions, {
25+
BrowserOptions,
26+
filterToBaseOptions,
27+
withBrowserDefaults,
28+
} from './options';
2529
import BrowserPlatform from './platform/BrowserPlatform';
2630

2731
/**
@@ -116,13 +120,14 @@ export class BrowserClient extends LDClientImpl implements LDClient {
116120
const baseUrl = options.baseUri ?? 'https://clientsdk.launchdarkly.com';
117121

118122
const platform = overridePlatform ?? new BrowserPlatform(logger);
119-
const validatedBrowserOptions = validateOptions(options, logger);
123+
const optionsWithDefaults = withBrowserDefaults(options);
124+
const validatedBrowserOptions = validateOptions(optionsWithDefaults, logger);
120125
const { eventUrlTransformer } = validatedBrowserOptions;
121126
super(
122127
clientSideId,
123128
autoEnvAttributes,
124129
platform,
125-
filterToBaseOptions({ ...options, logger }),
130+
filterToBaseOptions({ ...optionsWithDefaults, logger }),
126131
(
127132
flagManager: FlagManager,
128133
configuration: Configuration,

packages/sdk/browser/src/options.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,14 @@ export function filterToBaseOptions(opts: BrowserOptions): LDOptionsBase {
8484
return baseOptions;
8585
}
8686

87-
function applyBrowserDefaults(opts: BrowserOptions) {
88-
// eslint-disable-next-line no-param-reassign
89-
opts.flushInterval ??= DEFAULT_FLUSH_INTERVAL_SECONDS;
87+
export function withBrowserDefaults(opts: BrowserOptions): BrowserOptions {
88+
const output = { ...opts };
89+
output.flushInterval ??= DEFAULT_FLUSH_INTERVAL_SECONDS;
90+
return output;
9091
}
9192

9293
export default function validateOptions(opts: BrowserOptions, logger: LDLogger): ValidatedOptions {
9394
const output: ValidatedOptions = { ...optDefaults };
94-
applyBrowserDefaults(output);
9595

9696
Object.entries(validators).forEach((entry) => {
9797
const [key, validator] = entry as [keyof BrowserOptions, TypeValidator];

0 commit comments

Comments
 (0)