@appsurify-testmap/rrweb 3.1.1-alpha.3 → 3.3.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/rrweb.cjs CHANGED
@@ -15490,6 +15490,30 @@ class MutationBuffer {
15490
15490
  this.shadowDomManager.reset();
15491
15491
  this.canvasManager.reset();
15492
15492
  }
15493
+ /**
15494
+ * Clear all accumulated mutation data without emitting.
15495
+ * Used after freeze+debounce checkout — FullSnapshot already captured the state.
15496
+ */
15497
+ resetBuffers() {
15498
+ this.addedSet = /* @__PURE__ */ new Set();
15499
+ this.movedSet = /* @__PURE__ */ new Set();
15500
+ this.droppedSet = /* @__PURE__ */ new Set();
15501
+ this.removesSubTreeCache = /* @__PURE__ */ new Set();
15502
+ this.mapRemoves = [];
15503
+ this.movedMap = {};
15504
+ this.attributes = [];
15505
+ this.texts = [];
15506
+ this.attributeMap = /* @__PURE__ */ new WeakMap();
15507
+ this.removes = [];
15508
+ }
15509
+ /**
15510
+ * Clear frozen flag without triggering emit.
15511
+ * Used after freeze+debounce checkout — buffers already cleared by resetBuffers().
15512
+ */
15513
+ unsetFrozen() {
15514
+ this.frozen = false;
15515
+ this.canvasManager.unfreeze();
15516
+ }
15493
15517
  }
15494
15518
  function deepDelete(addsSet, n2) {
15495
15519
  addsSet.delete(n2);
@@ -15855,6 +15879,30 @@ function initNavigationObserver({
15855
15879
  handlers.push(restoreReplaceState);
15856
15880
  handlers.push(on("popstate", () => emitNavigation("popstate"), win));
15857
15881
  handlers.push(on("hashchange", () => emitNavigation("hashchange"), win));
15882
+ const useNavigationAPI = typeof sampling.navigation === "object" ? sampling.navigation.useNavigationAPI ?? true : true;
15883
+ if (useNavigationAPI && "navigation" in win) {
15884
+ try {
15885
+ const nav = win.navigation;
15886
+ const handler = (event) => {
15887
+ var _a2;
15888
+ const navEvent = event;
15889
+ if (navEvent.navigationType === "push" || navEvent.navigationType === "replace") {
15890
+ const destUrl = (_a2 = navEvent.destination) == null ? void 0 : _a2.url;
15891
+ if (destUrl && destUrl !== lastHref) {
15892
+ navigationCb({
15893
+ href: destUrl,
15894
+ oldHref: lastHref,
15895
+ navigationType: "navigate"
15896
+ });
15897
+ lastHref = destUrl;
15898
+ }
15899
+ }
15900
+ };
15901
+ nav.addEventListener("navigate", handler);
15902
+ handlers.push(() => nav.removeEventListener("navigate", handler));
15903
+ } catch {
15904
+ }
15905
+ }
15858
15906
  return callbackWrapper(() => {
15859
15907
  handlers.forEach((h) => h());
15860
15908
  });
@@ -17900,10 +17948,13 @@ class VisibilityManager {
17900
17948
  }
17901
17949
  flushBuffer() {
17902
17950
  var _a2;
17951
+ if (this.frozen || this.locked) return;
17903
17952
  if (this.buffer.size === 0) return;
17904
- (_a2 = this.notifyActivity) == null ? void 0 : _a2.call(this, this.buffer.size);
17905
- this.mutationCb({ mutations: Array.from(this.buffer.values()) });
17953
+ const mutations = Array.from(this.buffer.values());
17954
+ const count = mutations.length;
17906
17955
  this.buffer.clear();
17956
+ this.mutationCb({ mutations });
17957
+ (_a2 = this.notifyActivity) == null ? void 0 : _a2.call(this, count);
17907
17958
  }
17908
17959
  observe(el) {
17909
17960
  if (this.disabled) return;
@@ -17917,6 +17968,10 @@ class VisibilityManager {
17917
17968
  }
17918
17969
  freeze() {
17919
17970
  this.frozen = true;
17971
+ if (this.debounceTimer) {
17972
+ clearTimeout(this.debounceTimer);
17973
+ this.debounceTimer = null;
17974
+ }
17920
17975
  }
17921
17976
  unfreeze() {
17922
17977
  this.frozen = false;
@@ -17924,9 +17979,33 @@ class VisibilityManager {
17924
17979
  }
17925
17980
  lock() {
17926
17981
  this.locked = true;
17982
+ if (this.debounceTimer) {
17983
+ clearTimeout(this.debounceTimer);
17984
+ this.debounceTimer = null;
17985
+ }
17927
17986
  }
17928
17987
  unlock() {
17929
17988
  this.locked = false;
17989
+ this.buffer.clear();
17990
+ if (this.debounceTimer) {
17991
+ clearTimeout(this.debounceTimer);
17992
+ this.debounceTimer = null;
17993
+ }
17994
+ if (!this.disabled && this.elements.size > 0) {
17995
+ this.previousState = computeVisibility(this.elements, /* @__PURE__ */ new Map(), {
17996
+ root: this.root,
17997
+ threshold: this.threshold,
17998
+ sensitivity: this.sensitivity,
17999
+ rootMargin: this.rootMargin
18000
+ });
18001
+ }
18002
+ }
18003
+ /**
18004
+ * Clear frozen flag without triggering flush.
18005
+ * Used after freeze+debounce checkout — buffer already cleared by unlock().
18006
+ */
18007
+ unsetFrozen() {
18008
+ this.frozen = false;
17930
18009
  }
17931
18010
  reset() {
17932
18011
  this.elements.clear();
@@ -17942,6 +18021,164 @@ class VisibilityManager {
17942
18021
  }
17943
18022
  }
17944
18023
  }
18024
+ const DEFAULT_SETTLE_TIMEOUT = 150;
18025
+ const DEFAULT_MAX_WAIT = 5e3;
18026
+ const DEFAULT_DEBOUNCE = 100;
18027
+ class NavigationManager {
18028
+ constructor(options) {
18029
+ __publicField(this, "frozen", false);
18030
+ __publicField(this, "locked", false);
18031
+ __publicField(this, "disabled", false);
18032
+ __publicField(this, "settleTimeout");
18033
+ __publicField(this, "maxWait");
18034
+ __publicField(this, "debounceMs");
18035
+ __publicField(this, "settlingObserver", null);
18036
+ __publicField(this, "debounceTimer", null);
18037
+ __publicField(this, "settleCheckTimer", null);
18038
+ __publicField(this, "maxWaitTimer", null);
18039
+ __publicField(this, "lastMutationTime", 0);
18040
+ __publicField(this, "pendingNavigation", null);
18041
+ __publicField(this, "doc");
18042
+ __publicField(this, "onSnapshot");
18043
+ const { doc, config, onSnapshot } = options;
18044
+ this.doc = doc;
18045
+ this.onSnapshot = callbackWrapper(onSnapshot);
18046
+ this.settleTimeout = config.settleTimeout ?? DEFAULT_SETTLE_TIMEOUT;
18047
+ this.maxWait = config.maxWait ?? DEFAULT_MAX_WAIT;
18048
+ this.debounceMs = config.debounce ?? DEFAULT_DEBOUNCE;
18049
+ }
18050
+ handleNavigation(data) {
18051
+ if (this.disabled) return;
18052
+ if (this.locked) return;
18053
+ this.cancelTimers();
18054
+ this.disconnectSettlingObserver();
18055
+ this.pendingNavigation = data;
18056
+ if (this.frozen) {
18057
+ return;
18058
+ }
18059
+ this.startDebounce();
18060
+ }
18061
+ cancelPending() {
18062
+ this.cancelTimers();
18063
+ this.disconnectSettlingObserver();
18064
+ this.pendingNavigation = null;
18065
+ }
18066
+ freeze() {
18067
+ this.frozen = true;
18068
+ this.cancelTimers();
18069
+ this.disconnectSettlingObserver();
18070
+ }
18071
+ unfreeze() {
18072
+ this.frozen = false;
18073
+ if (this.pendingNavigation && !this.locked && !this.disabled) {
18074
+ this.startDebounce();
18075
+ }
18076
+ }
18077
+ lock() {
18078
+ this.locked = true;
18079
+ this.cancelTimers();
18080
+ this.disconnectSettlingObserver();
18081
+ }
18082
+ unlock() {
18083
+ this.locked = false;
18084
+ this.pendingNavigation = null;
18085
+ }
18086
+ unsetFrozen() {
18087
+ this.frozen = false;
18088
+ }
18089
+ reset() {
18090
+ this.cancelTimers();
18091
+ this.disconnectSettlingObserver();
18092
+ this.pendingNavigation = null;
18093
+ this.frozen = false;
18094
+ this.locked = false;
18095
+ }
18096
+ destroy() {
18097
+ this.reset();
18098
+ this.disabled = true;
18099
+ }
18100
+ startDebounce() {
18101
+ this.debounceTimer = setTimeout(() => {
18102
+ this.debounceTimer = null;
18103
+ this.startDOMSettling();
18104
+ }, this.debounceMs);
18105
+ }
18106
+ startDOMSettling() {
18107
+ if (this.frozen || this.locked || this.disabled) return;
18108
+ this.lastMutationTime = performance.now();
18109
+ const ObserverCtor = mutationObserverCtor();
18110
+ this.settlingObserver = new ObserverCtor(() => {
18111
+ this.lastMutationTime = performance.now();
18112
+ if (this.settleCheckTimer !== null) {
18113
+ clearTimeout(this.settleCheckTimer);
18114
+ }
18115
+ this.settleCheckTimer = setTimeout(
18116
+ () => this.checkSettled(),
18117
+ this.settleTimeout
18118
+ );
18119
+ });
18120
+ this.settlingObserver.observe(this.doc, {
18121
+ childList: true,
18122
+ subtree: true,
18123
+ attributes: true,
18124
+ characterData: true
18125
+ });
18126
+ this.settleCheckTimer = setTimeout(
18127
+ () => this.checkSettled(),
18128
+ this.settleTimeout
18129
+ );
18130
+ this.maxWaitTimer = setTimeout(() => {
18131
+ this.maxWaitTimer = null;
18132
+ this.completeSettling();
18133
+ }, this.maxWait);
18134
+ }
18135
+ checkSettled() {
18136
+ this.settleCheckTimer = null;
18137
+ const elapsed = performance.now() - this.lastMutationTime;
18138
+ if (elapsed >= this.settleTimeout) {
18139
+ this.completeSettling();
18140
+ } else {
18141
+ this.settleCheckTimer = setTimeout(
18142
+ () => this.checkSettled(),
18143
+ this.settleTimeout - elapsed
18144
+ );
18145
+ }
18146
+ }
18147
+ completeSettling() {
18148
+ if (this.frozen || this.locked || this.disabled) return;
18149
+ if (!this.pendingNavigation) return;
18150
+ this.cancelTimers();
18151
+ this.disconnectSettlingObserver();
18152
+ this.pendingNavigation = null;
18153
+ requestAnimationFrame(() => {
18154
+ requestAnimationFrame(() => {
18155
+ if (!this.frozen && !this.locked && !this.disabled) {
18156
+ this.onSnapshot(true);
18157
+ }
18158
+ });
18159
+ });
18160
+ }
18161
+ cancelTimers() {
18162
+ if (this.debounceTimer !== null) {
18163
+ clearTimeout(this.debounceTimer);
18164
+ this.debounceTimer = null;
18165
+ }
18166
+ if (this.settleCheckTimer !== null) {
18167
+ clearTimeout(this.settleCheckTimer);
18168
+ this.settleCheckTimer = null;
18169
+ }
18170
+ if (this.maxWaitTimer !== null) {
18171
+ clearTimeout(this.maxWaitTimer);
18172
+ this.maxWaitTimer = null;
18173
+ }
18174
+ }
18175
+ disconnectSettlingObserver() {
18176
+ if (this.settlingObserver) {
18177
+ this.settlingObserver.disconnect();
18178
+ this.settlingObserver = null;
18179
+ }
18180
+ }
18181
+ }
17945
18182
  class StylesheetManager {
17946
18183
  constructor(options) {
17947
18184
  __publicField(this, "trackedLinkElements", /* @__PURE__ */ new WeakSet());
@@ -18025,43 +18262,13 @@ class ProcessedNodeManager {
18025
18262
  destroy() {
18026
18263
  }
18027
18264
  }
18028
- const version$1 = "3.1.1-alpha.3";
18265
+ const version$1 = "3.3.0-alpha.1";
18029
18266
  let wrappedEmit;
18030
18267
  let takeFullSnapshot$1;
18031
18268
  let canvasManager;
18032
18269
  let recording = false;
18033
18270
  const customEventQueue = [];
18034
18271
  let flushCustomEventQueue$1;
18035
- function waitForDOMStabilization(win) {
18036
- const maxWaitMs = 5e3;
18037
- return new Promise((resolve2) => {
18038
- const captureAfterPaint = () => {
18039
- requestAnimationFrame(() => {
18040
- requestAnimationFrame(() => {
18041
- resolve2();
18042
- });
18043
- });
18044
- };
18045
- const safeResolve = /* @__PURE__ */ (() => {
18046
- let called = false;
18047
- return () => {
18048
- if (!called) {
18049
- called = true;
18050
- captureAfterPaint();
18051
- }
18052
- };
18053
- })();
18054
- if (["interactive", "complete"].includes(win.document.readyState)) {
18055
- safeResolve();
18056
- } else {
18057
- win.addEventListener("DOMContentLoaded", safeResolve, { once: true });
18058
- win.addEventListener("load", safeResolve, { once: true });
18059
- setTimeout(() => {
18060
- safeResolve();
18061
- }, maxWaitMs);
18062
- }
18063
- });
18064
- }
18065
18272
  try {
18066
18273
  if (Array.from([1], (x2) => x2 * 2)[0] !== 2) {
18067
18274
  const cleanFrame = document.createElement("iframe");
@@ -18079,6 +18286,7 @@ function record(options = {}) {
18079
18286
  checkoutEveryNms,
18080
18287
  checkoutEveryNth,
18081
18288
  checkoutEveryNvm,
18289
+ checkoutDebounce,
18082
18290
  blockClass = "rr-block",
18083
18291
  blockSelector = null,
18084
18292
  ignoreClass = "rr-ignore",
@@ -18173,6 +18381,10 @@ function record(options = {}) {
18173
18381
  let lastFullSnapshotEvent;
18174
18382
  let incrementalSnapshotCount = 0;
18175
18383
  let visibilityMutationCount = 0;
18384
+ let checkoutId = 0;
18385
+ let checkoutPending = false;
18386
+ let checkoutDebounceTimer = null;
18387
+ let checkoutFreezeTimestamp = null;
18176
18388
  const eventProcessor = (e2) => {
18177
18389
  for (const plugin3 of plugins || []) {
18178
18390
  if (plugin3.eventProcessor) {
@@ -18185,13 +18397,32 @@ function record(options = {}) {
18185
18397
  }
18186
18398
  return e2;
18187
18399
  };
18400
+ const executeCheckout = () => {
18401
+ checkoutDebounceTimer = null;
18402
+ checkoutPending = false;
18403
+ checkoutFreezeTimestamp = null;
18404
+ navigationManager == null ? void 0 : navigationManager.cancelPending();
18405
+ takeFullSnapshot$1(true);
18406
+ mutationBuffers.forEach((buf) => {
18407
+ buf.resetBuffers();
18408
+ buf.unsetFrozen();
18409
+ });
18410
+ if (visibilityManager) {
18411
+ visibilityManager.unsetFrozen();
18412
+ }
18413
+ if (navigationManager) {
18414
+ navigationManager.unsetFrozen();
18415
+ }
18416
+ };
18188
18417
  wrappedEmit = (r2, isCheckout) => {
18189
18418
  var _a2;
18190
18419
  const e2 = r2;
18191
18420
  e2.timestamp = nowTimestamp();
18192
- if (((_a2 = mutationBuffers[0]) == null ? void 0 : _a2.isFrozen()) && e2.type !== EventType.FullSnapshot && !(e2.type === EventType.IncrementalSnapshot && e2.data.source === IncrementalSource.Mutation)) {
18421
+ e2.checkoutId = checkoutId;
18422
+ if (((_a2 = mutationBuffers[0]) == null ? void 0 : _a2.isFrozen()) && !checkoutPending && e2.type !== EventType.FullSnapshot && !(e2.type === EventType.IncrementalSnapshot && e2.data.source === IncrementalSource.Mutation)) {
18193
18423
  mutationBuffers.forEach((buf) => buf.unfreeze());
18194
18424
  visibilityManager == null ? void 0 : visibilityManager.unfreeze();
18425
+ navigationManager == null ? void 0 : navigationManager.unfreeze();
18195
18426
  }
18196
18427
  if (inEmittingFrame) {
18197
18428
  emit == null ? void 0 : emit(eventProcessor(e2), isCheckout);
@@ -18216,7 +18447,29 @@ function record(options = {}) {
18216
18447
  const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;
18217
18448
  const exceedTime = checkoutEveryNms && e2.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;
18218
18449
  if (exceedCount || exceedTime) {
18219
- takeFullSnapshot$1(true);
18450
+ if (checkoutDebounce) {
18451
+ if (!checkoutPending) {
18452
+ checkoutPending = true;
18453
+ checkoutFreezeTimestamp = nowTimestamp();
18454
+ mutationBuffers.forEach((buf) => buf.freeze());
18455
+ visibilityManager == null ? void 0 : visibilityManager.freeze();
18456
+ }
18457
+ if (checkoutDebounceTimer) {
18458
+ clearTimeout(checkoutDebounceTimer);
18459
+ }
18460
+ const frozenDuration = nowTimestamp() - checkoutFreezeTimestamp;
18461
+ const maxFreeze = checkoutDebounce * 3;
18462
+ if (frozenDuration >= maxFreeze) {
18463
+ executeCheckout();
18464
+ } else {
18465
+ checkoutDebounceTimer = setTimeout(
18466
+ () => executeCheckout(),
18467
+ checkoutDebounce
18468
+ );
18469
+ }
18470
+ } else {
18471
+ takeFullSnapshot$1(true);
18472
+ }
18220
18473
  }
18221
18474
  }
18222
18475
  }
@@ -18331,8 +18584,30 @@ function record(options = {}) {
18331
18584
  notifyActivity: checkoutEveryNvm != null ? (count) => {
18332
18585
  visibilityMutationCount += count;
18333
18586
  if (visibilityMutationCount >= checkoutEveryNvm) {
18334
- takeFullSnapshot$1(true);
18335
18587
  visibilityMutationCount = 0;
18588
+ if (checkoutDebounce) {
18589
+ if (!checkoutPending) {
18590
+ checkoutPending = true;
18591
+ checkoutFreezeTimestamp = nowTimestamp();
18592
+ mutationBuffers.forEach((buf) => buf.freeze());
18593
+ visibilityManager == null ? void 0 : visibilityManager.freeze();
18594
+ }
18595
+ if (checkoutDebounceTimer) {
18596
+ clearTimeout(checkoutDebounceTimer);
18597
+ }
18598
+ const frozenDuration = nowTimestamp() - checkoutFreezeTimestamp;
18599
+ const maxFreeze = checkoutDebounce * 3;
18600
+ if (frozenDuration >= maxFreeze) {
18601
+ executeCheckout();
18602
+ } else {
18603
+ checkoutDebounceTimer = setTimeout(
18604
+ () => executeCheckout(),
18605
+ checkoutDebounce
18606
+ );
18607
+ }
18608
+ } else {
18609
+ takeFullSnapshot$1(true);
18610
+ }
18336
18611
  }
18337
18612
  } : void 0
18338
18613
  });
@@ -18341,6 +18616,7 @@ function record(options = {}) {
18341
18616
  if (!recordDOM) {
18342
18617
  return;
18343
18618
  }
18619
+ checkoutId++;
18344
18620
  wrappedEmit(
18345
18621
  {
18346
18622
  type: EventType.Meta,
@@ -18356,6 +18632,7 @@ function record(options = {}) {
18356
18632
  shadowDomManager.init();
18357
18633
  mutationBuffers.forEach((buf) => buf.lock());
18358
18634
  visibilityManager == null ? void 0 : visibilityManager.lock();
18635
+ navigationManager == null ? void 0 : navigationManager.lock();
18359
18636
  const node2 = snapshot(document, {
18360
18637
  mirror,
18361
18638
  blockClass,
@@ -18407,6 +18684,7 @@ function record(options = {}) {
18407
18684
  );
18408
18685
  mutationBuffers.forEach((buf) => buf.unlock());
18409
18686
  visibilityManager == null ? void 0 : visibilityManager.unlock();
18687
+ navigationManager == null ? void 0 : navigationManager.unlock();
18410
18688
  if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)
18411
18689
  stylesheetManager.adoptStyleSheets(
18412
18690
  document.adoptedStyleSheets,
@@ -18419,6 +18697,31 @@ function record(options = {}) {
18419
18697
  }
18420
18698
  customEventQueue.length = 0;
18421
18699
  };
18700
+ let navigationManager;
18701
+ const navigationSampling = sampling.navigation;
18702
+ if (navigationSampling !== false) {
18703
+ const navConfig = typeof navigationSampling === "object" ? navigationSampling : {};
18704
+ navigationManager = new NavigationManager({
18705
+ doc: document,
18706
+ config: navConfig,
18707
+ onSnapshot: (isCheckout) => {
18708
+ if (checkoutPending) {
18709
+ if (checkoutDebounceTimer) {
18710
+ clearTimeout(checkoutDebounceTimer);
18711
+ checkoutDebounceTimer = null;
18712
+ }
18713
+ checkoutPending = false;
18714
+ checkoutFreezeTimestamp = null;
18715
+ mutationBuffers.forEach((buf) => {
18716
+ buf.resetBuffers();
18717
+ buf.unsetFrozen();
18718
+ });
18719
+ visibilityManager == null ? void 0 : visibilityManager.unsetFrozen();
18720
+ }
18721
+ takeFullSnapshot$1(isCheckout);
18722
+ }
18723
+ });
18724
+ }
18422
18725
  try {
18423
18726
  const handlers = [];
18424
18727
  const observe = (doc) => {
@@ -18449,14 +18752,11 @@ function record(options = {}) {
18449
18752
  }
18450
18753
  }),
18451
18754
  navigationCb: (navData) => {
18452
- console.debug(
18453
- `[${nowTimestamp()}] [rrweb:record/navigation] 🧭 Navigation detected:`,
18454
- navData.navigationType,
18455
- navData.oldHref,
18456
- "→",
18457
- navData.href
18458
- );
18459
- takeFullSnapshot$1(true);
18755
+ if (navigationManager) {
18756
+ navigationManager.handleNavigation(navData);
18757
+ } else {
18758
+ takeFullSnapshot$1(true);
18759
+ }
18460
18760
  },
18461
18761
  inputCb: (v2) => wrappedEmit({
18462
18762
  type: EventType.IncrementalSnapshot,
@@ -18575,23 +18875,6 @@ function record(options = {}) {
18575
18875
  flushCustomEventQueue$1();
18576
18876
  }
18577
18877
  };
18578
- const runInit = async () => {
18579
- if (flushCustomEvent === "before") {
18580
- flushCustomEventQueue$1();
18581
- }
18582
- if (recordAfter === "DOMContentStabilized") {
18583
- console.debug(`[${nowTimestamp()}] [rrweb:record] 🟢 Waiting for DOM stabilization...`);
18584
- await waitForDOMStabilization(window);
18585
- console.debug(`[${nowTimestamp()}] [rrweb:record] ✅ DOM stabilized, starting recording`);
18586
- }
18587
- console.debug(`[${nowTimestamp()}] [rrweb:record] ✅ Init dom and takeFullSnapshot `);
18588
- takeFullSnapshot$1();
18589
- handlers.push(observe(document));
18590
- recording = true;
18591
- if (flushCustomEvent === "after") {
18592
- flushCustomEventQueue$1();
18593
- }
18594
- };
18595
18878
  if (document.readyState === "interactive" || document.readyState === "complete") {
18596
18879
  init();
18597
18880
  } else {
@@ -18619,8 +18902,13 @@ function record(options = {}) {
18619
18902
  );
18620
18903
  }
18621
18904
  return () => {
18905
+ if (checkoutDebounceTimer) {
18906
+ clearTimeout(checkoutDebounceTimer);
18907
+ checkoutDebounceTimer = null;
18908
+ }
18622
18909
  flushCustomEventQueue$1();
18623
18910
  handlers.forEach((h) => h());
18911
+ navigationManager == null ? void 0 : navigationManager.destroy();
18624
18912
  processedNodeManager.destroy();
18625
18913
  recording = false;
18626
18914
  unregisterErrorHandler();
@@ -21553,7 +21841,7 @@ class Replayer {
21553
21841
  this.config.logger.log(REPLAY_CONSOLE_PREFIX, ...args);
21554
21842
  }
21555
21843
  }
21556
- const version = "3.1.1-alpha.3";
21844
+ const version = "3.3.0-alpha.1";
21557
21845
  const { getVersion } = record;
21558
21846
  const { isRecording } = record;
21559
21847
  const { flushCustomEventQueue } = record;