From dafce16dbf6d95c7ae6f3612ca759b90871a4b79 Mon Sep 17 00:00:00 2001 From: Matias Pequeno Date: Thu, 2 Oct 2025 11:34:55 -0300 Subject: [PATCH 1/2] Allow for 0 maxSeconds --- src/browser/replay/recorder.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/browser/replay/recorder.js b/src/browser/replay/recorder.js index 20862d83..6226776b 100644 --- a/src/browser/replay/recorder.js +++ b/src/browser/replay/recorder.js @@ -97,7 +97,7 @@ export default class Recorder { * @returns {number} Checkout interval in milliseconds */ checkoutEveryNms() { - return ((this.options.maxSeconds || 10) * 1000) / 2; + return ((this.options.maxSeconds ?? 10) * 1000) / 2; } /** From 1d60e0d62d7ab04b0e7be678431676a5c63223f5 Mon Sep 17 00:00:00 2001 From: Matias Pequeno Date: Thu, 2 Oct 2025 16:08:47 -0300 Subject: [PATCH 2/2] maybe --- src/browser/replay/recorder.js | 7 ++++++- test/replay/unit/recorder.test.js | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/browser/replay/recorder.js b/src/browser/replay/recorder.js index 6226776b..1d2c42ce 100644 --- a/src/browser/replay/recorder.js +++ b/src/browser/replay/recorder.js @@ -3,6 +3,7 @@ import { EventType } from '@rrweb/types'; import hrtime from '../../tracing/hrtime.js'; import logger from '../../logger.js'; +import defaults from './defaults.js'; /** @typedef {import('./recorder.js').BufferCursor} BufferCursor */ @@ -97,7 +98,11 @@ export default class Recorder { * @returns {number} Checkout interval in milliseconds */ checkoutEveryNms() { - return ((this.options.maxSeconds ?? 10) * 1000) / 2; + const maxSeconds = + this.options.maxSeconds > 0 + ? this.options.maxSeconds + : defaults.maxSeconds; + return (maxSeconds * 1000) / 2; } /** diff --git a/test/replay/unit/recorder.test.js b/test/replay/unit/recorder.test.js index 3e16fc95..9c5fc5f4 100644 --- a/test/replay/unit/recorder.test.js +++ b/test/replay/unit/recorder.test.js @@ -159,10 +159,10 @@ describe('Recorder', function () { expect(recorder.checkoutEveryNms()).to.equal(5000); }); - it('uses default of 10 seconds when maxSeconds not provided', function () { + it('uses default of 300 seconds when maxSeconds not provided', function () { const recorder = new Recorder({}, mockRecordFn); - expect(recorder.checkoutEveryNms()).to.equal(5000); + expect(recorder.checkoutEveryNms()).to.equal(150000); }); it('calculates correctly for different maxSeconds values', function () { @@ -170,6 +170,18 @@ describe('Recorder', function () { expect(recorder.checkoutEveryNms()).to.equal(10000); }); + + it('uses default when maxSeconds is 0', function () { + const recorder = new Recorder({ maxSeconds: 0 }, mockRecordFn); + + expect(recorder.checkoutEveryNms()).to.equal(150000); + }); + + it('uses default when maxSeconds is negative', function () { + const recorder = new Recorder({ maxSeconds: -5 }, mockRecordFn); + + expect(recorder.checkoutEveryNms()).to.equal(150000); + }); }); describe('_previousSlot', function () {