Skip to content

Commit 55e0b62

Browse files
committed
ref(replay): Make options and recordingOptions private
1 parent 1297d5f commit 55e0b62

File tree

3 files changed

+43
-37
lines changed

3 files changed

+43
-37
lines changed

packages/replay/src/replay.ts

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ export class ReplayContainer implements ReplayContainerInterface {
6767
/**
6868
* Options to pass to `rrweb.record()`
6969
*/
70-
readonly recordingOptions: RecordingOptions;
70+
private readonly _recordingOptions: RecordingOptions;
7171

72-
readonly options: ReplayPluginOptions;
72+
private readonly _options: ReplayPluginOptions;
7373

7474
private _performanceObserver: PerformanceObserver | null = null;
7575

@@ -123,11 +123,11 @@ export class ReplayContainer implements ReplayContainerInterface {
123123
};
124124

125125
constructor({ options, recordingOptions }: { options: ReplayPluginOptions; recordingOptions: RecordingOptions }) {
126-
this.recordingOptions = recordingOptions;
127-
this.options = options;
126+
this._recordingOptions = recordingOptions;
127+
this._options = options;
128128

129-
this._debouncedFlush = debounce(() => this.flush(), this.options.flushMinDelay, {
130-
maxWait: this.options.flushMaxDelay,
129+
this._debouncedFlush = debounce(() => this.flush(), this._options.flushMinDelay, {
130+
maxWait: this._options.flushMaxDelay,
131131
});
132132
}
133133

@@ -146,6 +146,11 @@ export class ReplayContainer implements ReplayContainerInterface {
146146
return this._isPaused;
147147
}
148148

149+
/** Get the replay integration options. */
150+
public getOptions(): ReplayPluginOptions {
151+
return this._options;
152+
}
153+
149154
/**
150155
* Initializes the plugin.
151156
*
@@ -181,7 +186,7 @@ export class ReplayContainer implements ReplayContainerInterface {
181186
this.updateSessionActivity();
182187

183188
this.eventBuffer = createEventBuffer({
184-
useCompression: Boolean(this.options.useCompression),
189+
useCompression: Boolean(this._options.useCompression),
185190
});
186191

187192
this.addListeners();
@@ -199,7 +204,7 @@ export class ReplayContainer implements ReplayContainerInterface {
199204
startRecording(): void {
200205
try {
201206
this._stopRecording = record({
202-
...this.recordingOptions,
207+
...this._recordingOptions,
203208
// When running in error sampling mode, we need to overwrite `checkoutEveryNth`
204209
// Without this, it would record forever, until an error happens, which we don't want
205210
// instead, we'll always keep the last 60 seconds of replay before an error happened
@@ -273,7 +278,7 @@ export class ReplayContainer implements ReplayContainerInterface {
273278
handleException(error: unknown): void {
274279
__DEBUG_BUILD__ && logger.error('[Replay]', error);
275280

276-
if (__DEBUG_BUILD__ && this.options._experiments && this.options._experiments.captureExceptions) {
281+
if (__DEBUG_BUILD__ && this._options._experiments && this._options._experiments.captureExceptions) {
277282
captureException(error);
278283
}
279284
}
@@ -295,10 +300,10 @@ export class ReplayContainer implements ReplayContainerInterface {
295300
loadSession({ expiry }: { expiry: number }): void {
296301
const { type, session } = getSession({
297302
expiry,
298-
stickySession: Boolean(this.options.stickySession),
303+
stickySession: Boolean(this._options.stickySession),
299304
currentSession: this.session,
300-
sessionSampleRate: this.options.sessionSampleRate,
301-
errorSampleRate: this.options.errorSampleRate,
305+
sessionSampleRate: this._options.sessionSampleRate,
306+
errorSampleRate: this._options.errorSampleRate,
302307
});
303308

304309
// If session was newly created (i.e. was not loaded from storage), then
@@ -480,7 +485,7 @@ export class ReplayContainer implements ReplayContainerInterface {
480485
// a previous session ID. In this case, we want to buffer events
481486
// for a set amount of time before flushing. This can help avoid
482487
// capturing replays of users that immediately close the window.
483-
setTimeout(() => this.conditionalFlush(), this.options.initialFlushDelay);
488+
setTimeout(() => this.conditionalFlush(), this._options.initialFlushDelay);
484489

485490
// Cancel any previously debounced flushes to ensure there are no [near]
486491
// simultaneous flushes happening. The latter request should be
@@ -953,8 +958,8 @@ export class ReplayContainer implements ReplayContainerInterface {
953958

954959
preparedEvent.tags = {
955960
...preparedEvent.tags,
956-
sessionSampleRate: this.options.sessionSampleRate,
957-
errorSampleRate: this.options.errorSampleRate,
961+
sessionSampleRate: this._options.sessionSampleRate,
962+
errorSampleRate: this._options.errorSampleRate,
958963
replayType: this.session?.sampled,
959964
};
960965

@@ -1059,7 +1064,7 @@ export class ReplayContainer implements ReplayContainerInterface {
10591064

10601065
/** Save the session, if it is sticky */
10611066
private _maybeSaveSession(): void {
1062-
if (this.session && this.options.stickySession) {
1067+
if (this.session && this._options.stickySession) {
10631068
saveSession(this.session);
10641069
}
10651070
}

packages/replay/src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,4 +227,5 @@ export interface ReplayContainer {
227227
flushImmediate(): void;
228228
triggerUserActivity(): void;
229229
addUpdate(cb: AddUpdateCallback): void;
230+
getOptions(): ReplayPluginOptions;
230231
}

packages/replay/test/unit/index-integrationSettings.test.ts

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ describe('integration settings', () => {
99
it('sets the correct configuration when `blockAllMedia` is disabled', async () => {
1010
const { replay } = await mockSdk({ replayOptions: { blockAllMedia: false } });
1111

12-
expect(replay.recordingOptions.blockSelector).toBe('[data-sentry-block]');
12+
expect(replay['_recordingOptions'].blockSelector).toBe('[data-sentry-block]');
1313
});
1414

1515
it('sets the correct configuration when `blockSelector` is empty and `blockAllMedia` is enabled', async () => {
1616
const { replay } = await mockSdk({ replayOptions: { blockSelector: '' } });
1717

18-
expect(replay.recordingOptions.blockSelector).toMatchInlineSnapshot(
18+
expect(replay['_recordingOptions'].blockSelector).toMatchInlineSnapshot(
1919
'"img,image,svg,path,rect,area,video,object,picture,embed,map,audio"',
2020
);
2121
});
@@ -25,7 +25,7 @@ describe('integration settings', () => {
2525
replayOptions: { blockSelector: '[data-test-blockSelector]' },
2626
});
2727

28-
expect(replay.recordingOptions.blockSelector).toMatchInlineSnapshot(
28+
expect(replay['_recordingOptions'].blockSelector).toMatchInlineSnapshot(
2929
'"[data-test-blockSelector],img,image,svg,path,rect,area,video,object,picture,embed,map,audio"',
3030
);
3131
});
@@ -48,7 +48,7 @@ describe('integration settings', () => {
4848
sentryOptions: { replaysSessionSampleRate: undefined },
4949
});
5050

51-
expect(replay.options.sessionSampleRate).toBe(0.5);
51+
expect(replay.getOptions().sessionSampleRate).toBe(0.5);
5252
expect(mockConsole).toBeCalledTimes(1);
5353
});
5454

@@ -58,21 +58,21 @@ describe('integration settings', () => {
5858
sentryOptions: { replaysSessionSampleRate: undefined },
5959
});
6060

61-
expect(replay.options.sessionSampleRate).toBe(0);
61+
expect(replay.getOptions().sessionSampleRate).toBe(0);
6262
expect(mockConsole).toBeCalledTimes(1);
6363
});
6464

6565
it('works with defining settings in SDK', async () => {
6666
const { replay } = await mockSdk({ sentryOptions: { replaysSessionSampleRate: 0.5 }, replayOptions: {} });
6767

68-
expect(replay.options.sessionSampleRate).toBe(0.5);
68+
expect(replay.getOptions().sessionSampleRate).toBe(0.5);
6969
expect(mockConsole).toBeCalledTimes(0);
7070
});
7171

7272
it('works with defining 0 in SDK', async () => {
7373
const { replay } = await mockSdk({ sentryOptions: { replaysSessionSampleRate: 0 }, replayOptions: {} });
7474

75-
expect(replay.options.sessionSampleRate).toBe(0);
75+
expect(replay.getOptions().sessionSampleRate).toBe(0);
7676
expect(mockConsole).toBeCalledTimes(0);
7777
});
7878

@@ -82,7 +82,7 @@ describe('integration settings', () => {
8282
replayOptions: { sessionSampleRate: 0.1 },
8383
});
8484

85-
expect(replay.options.sessionSampleRate).toBe(0.5);
85+
expect(replay.getOptions().sessionSampleRate).toBe(0.5);
8686
expect(mockConsole).toBeCalledTimes(1);
8787
});
8888

@@ -92,7 +92,7 @@ describe('integration settings', () => {
9292
replayOptions: { sessionSampleRate: 0.1 },
9393
});
9494

95-
expect(replay.options.sessionSampleRate).toBe(0);
95+
expect(replay.getOptions().sessionSampleRate).toBe(0);
9696
expect(mockConsole).toBeCalledTimes(1);
9797
});
9898
});
@@ -114,7 +114,7 @@ describe('integration settings', () => {
114114
sentryOptions: { replaysOnErrorSampleRate: undefined },
115115
});
116116

117-
expect(replay.options.errorSampleRate).toBe(0.5);
117+
expect(replay.getOptions().errorSampleRate).toBe(0.5);
118118
expect(mockConsole).toBeCalledTimes(1);
119119
});
120120

@@ -124,21 +124,21 @@ describe('integration settings', () => {
124124
sentryOptions: { replaysOnErrorSampleRate: undefined },
125125
});
126126

127-
expect(replay.options.errorSampleRate).toBe(0);
127+
expect(replay.getOptions().errorSampleRate).toBe(0);
128128
expect(mockConsole).toBeCalledTimes(1);
129129
});
130130

131131
it('works with defining settings in SDK', async () => {
132132
const { replay } = await mockSdk({ sentryOptions: { replaysOnErrorSampleRate: 0.5 }, replayOptions: {} });
133133

134-
expect(replay.options.errorSampleRate).toBe(0.5);
134+
expect(replay.getOptions().errorSampleRate).toBe(0.5);
135135
expect(mockConsole).toBeCalledTimes(0);
136136
});
137137

138138
it('works with defining 0 in SDK', async () => {
139139
const { replay } = await mockSdk({ sentryOptions: { replaysOnErrorSampleRate: 0 }, replayOptions: {} });
140140

141-
expect(replay.options.errorSampleRate).toBe(0);
141+
expect(replay.getOptions().errorSampleRate).toBe(0);
142142
expect(mockConsole).toBeCalledTimes(0);
143143
});
144144

@@ -148,7 +148,7 @@ describe('integration settings', () => {
148148
replayOptions: { errorSampleRate: 0.1 },
149149
});
150150

151-
expect(replay.options.errorSampleRate).toBe(0.5);
151+
expect(replay.getOptions().errorSampleRate).toBe(0.5);
152152
expect(mockConsole).toBeCalledTimes(1);
153153
});
154154

@@ -158,7 +158,7 @@ describe('integration settings', () => {
158158
replayOptions: { errorSampleRate: 0.1 },
159159
});
160160

161-
expect(replay.options.errorSampleRate).toBe(0);
161+
expect(replay.getOptions().errorSampleRate).toBe(0);
162162
expect(mockConsole).toBeCalledTimes(1);
163163
});
164164
});
@@ -168,25 +168,25 @@ describe('integration settings', () => {
168168
const { replay } = await mockSdk({ replayOptions: {} });
169169

170170
// Default is true
171-
expect(replay.recordingOptions.maskTextSelector).toBe('*');
171+
expect(replay['_recordingOptions'].maskTextSelector).toBe('*');
172172
});
173173

174174
it('works with true', async () => {
175175
const { replay } = await mockSdk({ replayOptions: { maskAllText: true } });
176176

177-
expect(replay.recordingOptions.maskTextSelector).toBe('*');
177+
expect(replay['_recordingOptions'].maskTextSelector).toBe('*');
178178
});
179179

180180
it('works with false', async () => {
181181
const { replay } = await mockSdk({ replayOptions: { maskAllText: false } });
182182

183-
expect(replay.recordingOptions.maskTextSelector).toBe(undefined);
183+
expect(replay['_recordingOptions'].maskTextSelector).toBe(undefined);
184184
});
185185

186186
it('overwrites custom maskTextSelector option', async () => {
187187
const { replay } = await mockSdk({ replayOptions: { maskAllText: true, maskTextSelector: '[custom]' } });
188188

189-
expect(replay.recordingOptions.maskTextSelector).toBe('*');
189+
expect(replay['_recordingOptions'].maskTextSelector).toBe('*');
190190
});
191191
});
192192

@@ -197,7 +197,7 @@ describe('integration settings', () => {
197197
sentryOptions: {},
198198
});
199199

200-
expect(replay.options._experiments).toEqual({ captureExceptions: true });
200+
expect(replay.getOptions()._experiments).toEqual({ captureExceptions: true });
201201
});
202202

203203
it('works without defining _experiments in integration', async () => {
@@ -206,7 +206,7 @@ describe('integration settings', () => {
206206
sentryOptions: {},
207207
});
208208

209-
expect(replay.options._experiments).toEqual({});
209+
expect(replay.getOptions()._experiments).toEqual({});
210210
});
211211
});
212212
});

0 commit comments

Comments
 (0)