Skip to content

Commit 0106f1b

Browse files
committed
Refactoring and additional tests.
1 parent 7d6c5ab commit 0106f1b

File tree

4 files changed

+67
-3
lines changed

4 files changed

+67
-3
lines changed

packages/telemetry/browser-telemetry/__tests__/BrowserTelemetryImpl.test.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { LDClientLogging } from '../src/api';
12
import { LDClientTracking } from '../src/api/client/LDClientTracking';
23
import BrowserTelemetryImpl from '../src/BrowserTelemetryImpl';
34
import { ParsedOptions } from '../src/options';
@@ -482,3 +483,42 @@ it('only logs breadcrumb filter error once', () => {
482483
'LaunchDarkly - Browser Telemetry: Error applying breadcrumb filters: Error: Filter error',
483484
);
484485
});
486+
487+
it('uses the client logger when no logger is provided', () => {
488+
const options: ParsedOptions = {
489+
...defaultOptions,
490+
breadcrumbs: {
491+
...defaultOptions.breadcrumbs,
492+
filters: [
493+
() => {
494+
throw new Error('Filter error');
495+
},
496+
],
497+
},
498+
};
499+
500+
const telemetry = new BrowserTelemetryImpl(options);
501+
502+
const mockClientWithLogging: jest.Mocked<LDClientLogging & LDClientTracking> = {
503+
logger: {
504+
warn: jest.fn(),
505+
},
506+
track: jest.fn(),
507+
};
508+
509+
telemetry.register(mockClientWithLogging);
510+
511+
// Add multiple breadcrumbs that will trigger the filter error
512+
telemetry.addBreadcrumb({
513+
type: 'custom',
514+
data: { id: 1 },
515+
timestamp: Date.now(),
516+
class: 'custom',
517+
level: 'info',
518+
});
519+
520+
expect(mockClientWithLogging.logger.warn).toHaveBeenCalledTimes(1);
521+
expect(mockClientWithLogging.logger.warn).toHaveBeenCalledWith(
522+
'LaunchDarkly - Browser Telemetry: Error applying breadcrumb filters: Error: Filter error',
523+
);
524+
});

packages/telemetry/browser-telemetry/src/BrowserTelemetryImpl.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66
import type { LDContext, LDEvaluationDetail, LDInspection } from '@launchdarkly/js-client-sdk';
77

8-
import { BreadcrumbFilter, LDClientTracking, MinLogger } from './api';
8+
import { BreadcrumbFilter, LDClientLogging, LDClientTracking, MinLogger } from './api';
99
import { Breadcrumb, FeatureManagementBreadcrumb } from './api/Breadcrumb';
1010
import { BrowserTelemetry } from './api/BrowserTelemetry';
1111
import { Collector } from './api/Collector';
@@ -75,6 +75,16 @@ function configureTraceKit(options: ParsedStackOptions) {
7575
anyObj.linesOfContext = beforeAfterMax * 2 + 1;
7676
}
7777

78+
/**
79+
* Check if the client supports LDClientLogging.
80+
*
81+
* @param client The client to check.
82+
* @returns True if the client is an instance of LDClientLogging.
83+
*/
84+
function isLDClientLogging(client: unknown): client is LDClientLogging {
85+
return (client as any).logger !== undefined;
86+
}
87+
7888
export default class BrowserTelemetryImpl implements BrowserTelemetry {
7989
private _maxPendingEvents: number;
8090
private _maxBreadcrumbs: number;
@@ -159,8 +169,13 @@ export default class BrowserTelemetryImpl implements BrowserTelemetry {
159169
}
160170

161171
private _setLogger() {
162-
this._logger =
163-
this._options.logger ?? ((this._client as any)?.logger as MinLogger) ?? fallbackLogger;
172+
if (this._options.logger) {
173+
this._logger = this._options.logger;
174+
} else if (isLDClientLogging(this._client)) {
175+
this._logger = this._client.logger;
176+
} else {
177+
this._logger = fallbackLogger;
178+
}
164179
}
165180

166181
inspectors(): LDInspection[] {
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { MinLogger } from '../MinLogger';
2+
3+
/**
4+
* Minimal client interface which allows for loggng. Works with 4.x and higher versions of the javascript client.
5+
*/
6+
export interface LDClientLogging {
7+
readonly logger: MinLogger;
8+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export * from './LDClientTracking';
2+
export * from './LDClientLogging';

0 commit comments

Comments
 (0)