@highlight-run/rrweb 2.0.11 → 2.0.15

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.
Files changed (45) hide show
  1. package/dist/plugins/console-record.js +5 -5
  2. package/dist/plugins/console-record.min.js +5 -5
  3. package/dist/plugins/console-record.min.js.map +1 -1
  4. package/dist/plugins/console-replay.js +3 -3
  5. package/dist/plugins/console-replay.min.js +3 -3
  6. package/dist/plugins/console-replay.min.js.map +1 -1
  7. package/dist/record/rrweb-record-pack.js +2 -2
  8. package/dist/record/rrweb-record-pack.min.js +2 -2
  9. package/dist/record/rrweb-record-pack.min.js.map +1 -1
  10. package/dist/record/rrweb-record.js +3 -3
  11. package/dist/record/rrweb-record.min.js +3 -3
  12. package/dist/record/rrweb-record.min.js.map +1 -1
  13. package/dist/replay/rrweb-replay-unpack.js +4 -3
  14. package/dist/replay/rrweb-replay-unpack.min.js +4 -3
  15. package/dist/replay/rrweb-replay-unpack.min.js.map +1 -1
  16. package/dist/replay/rrweb-replay.js +4 -3
  17. package/dist/replay/rrweb-replay.min.js +4 -3
  18. package/dist/replay/rrweb-replay.min.js.map +1 -1
  19. package/dist/rrweb-all.js +25 -24
  20. package/dist/rrweb-all.min.js +25 -24
  21. package/dist/rrweb-all.min.js.map +1 -1
  22. package/dist/rrweb.js +15 -14
  23. package/dist/rrweb.min.js +15 -14
  24. package/dist/rrweb.min.js.map +1 -1
  25. package/es/rrweb/packages/rrdom/es/{virtual-dom.js → rrdom.js} +86 -49
  26. package/es/rrweb/packages/rrweb/src/index.js +2 -2
  27. package/es/rrweb/packages/rrweb/src/record/index.js +3 -1
  28. package/es/rrweb/packages/rrweb/src/record/mutation.js +13 -2
  29. package/es/rrweb/packages/rrweb/src/record/observer.js +1 -1
  30. package/es/rrweb/packages/rrweb/src/replay/index.js +4 -4
  31. package/es/rrweb/packages/rrweb/src/utils.js +1 -1
  32. package/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js +1870 -0
  33. package/lib/plugins/console-record.js +9 -1
  34. package/lib/plugins/console-replay.js +9 -1
  35. package/lib/record/rrweb-record-pack.js +9 -3
  36. package/lib/record/rrweb-record.js +1075 -17
  37. package/lib/replay/rrweb-replay-unpack.js +1023 -96
  38. package/lib/replay/rrweb-replay.js +1023 -96
  39. package/lib/rrweb-all.js +2056 -137
  40. package/lib/rrweb.js +2056 -137
  41. package/package.json +5 -5
  42. package/typings/record/mutation.d.ts +1 -0
  43. package/typings/replay/index.d.ts +1 -1
  44. package/typings/types.d.ts +3 -2
  45. package/typings/utils.d.ts +1 -1
@@ -1,4 +1,66 @@
1
- import { NodeType as NodeType$1, createMirror as createMirror$1 } from '@highlight-run/rrweb-snapshot';
1
+ var NodeType$1;
2
+ (function (NodeType) {
3
+ NodeType[NodeType["Document"] = 0] = "Document";
4
+ NodeType[NodeType["DocumentType"] = 1] = "DocumentType";
5
+ NodeType[NodeType["Element"] = 2] = "Element";
6
+ NodeType[NodeType["Text"] = 3] = "Text";
7
+ NodeType[NodeType["CDATA"] = 4] = "CDATA";
8
+ NodeType[NodeType["Comment"] = 5] = "Comment";
9
+ })(NodeType$1 || (NodeType$1 = {}));
10
+ var Mirror$1 = (function () {
11
+ function Mirror() {
12
+ this.idNodeMap = new Map();
13
+ this.nodeMetaMap = new WeakMap();
14
+ }
15
+ Mirror.prototype.getId = function (n) {
16
+ var _a;
17
+ if (!n)
18
+ return -1;
19
+ var id = (_a = this.getMeta(n)) === null || _a === void 0 ? void 0 : _a.id;
20
+ return id !== null && id !== void 0 ? id : -1;
21
+ };
22
+ Mirror.prototype.getNode = function (id) {
23
+ return this.idNodeMap.get(id) || null;
24
+ };
25
+ Mirror.prototype.getIds = function () {
26
+ return Array.from(this.idNodeMap.keys());
27
+ };
28
+ Mirror.prototype.getMeta = function (n) {
29
+ return this.nodeMetaMap.get(n) || null;
30
+ };
31
+ Mirror.prototype.removeNodeFromMap = function (n) {
32
+ var _this = this;
33
+ var id = this.getId(n);
34
+ this.idNodeMap["delete"](id);
35
+ if (n.childNodes) {
36
+ n.childNodes.forEach(function (childNode) {
37
+ return _this.removeNodeFromMap(childNode);
38
+ });
39
+ }
40
+ };
41
+ Mirror.prototype.has = function (id) {
42
+ return this.idNodeMap.has(id);
43
+ };
44
+ Mirror.prototype.hasNode = function (node) {
45
+ return this.nodeMetaMap.has(node);
46
+ };
47
+ Mirror.prototype.add = function (n, meta) {
48
+ var id = meta.id;
49
+ this.idNodeMap.set(id, n);
50
+ this.nodeMetaMap.set(n, meta);
51
+ };
52
+ Mirror.prototype.replace = function (id, n) {
53
+ this.idNodeMap.set(id, n);
54
+ };
55
+ Mirror.prototype.reset = function () {
56
+ this.idNodeMap = new Map();
57
+ this.nodeMetaMap = new WeakMap();
58
+ };
59
+ return Mirror;
60
+ }());
61
+ function createMirror$1() {
62
+ return new Mirror$1();
63
+ }
2
64
 
3
65
  function parseCSSText(cssText) {
4
66
  const res = {};
@@ -584,26 +646,16 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
584
646
  newEndNode = newChildren[--newEndIndex];
585
647
  }
586
648
  else if (replayer.mirror.getId(oldStartNode) === rrnodeMirror.getId(newEndNode)) {
587
- try {
588
- parentNode.insertBefore(oldStartNode, oldEndNode.nextSibling);
589
- diff(oldStartNode, newEndNode, replayer, rrnodeMirror);
590
- oldStartNode = oldChildren[++oldStartIndex];
591
- newEndNode = newChildren[--newEndIndex];
592
- }
593
- catch (e) {
594
- console.error(e, parentNode, oldStartNode, oldEndNode);
595
- }
649
+ parentNode.insertBefore(oldStartNode, oldEndNode.nextSibling);
650
+ diff(oldStartNode, newEndNode, replayer, rrnodeMirror);
651
+ oldStartNode = oldChildren[++oldStartIndex];
652
+ newEndNode = newChildren[--newEndIndex];
596
653
  }
597
654
  else if (replayer.mirror.getId(oldEndNode) === rrnodeMirror.getId(newStartNode)) {
598
- try {
599
- parentNode.insertBefore(oldEndNode, oldStartNode);
600
- diff(oldEndNode, newStartNode, replayer, rrnodeMirror);
601
- oldEndNode = oldChildren[--oldEndIndex];
602
- newStartNode = newChildren[++newStartIndex];
603
- }
604
- catch (e) {
605
- console.error(e, parentNode, oldEndNode, oldStartNode);
606
- }
655
+ parentNode.insertBefore(oldEndNode, oldStartNode);
656
+ diff(oldEndNode, newStartNode, replayer, rrnodeMirror);
657
+ oldEndNode = oldChildren[--oldEndIndex];
658
+ newStartNode = newChildren[++newStartIndex];
607
659
  }
608
660
  else {
609
661
  if (!oldIdToIndex) {
@@ -617,14 +669,9 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
617
669
  indexInOld = oldIdToIndex[rrnodeMirror.getId(newStartNode)];
618
670
  if (indexInOld) {
619
671
  const nodeToMove = oldChildren[indexInOld];
620
- try {
621
- parentNode.insertBefore(nodeToMove, oldStartNode);
622
- diff(nodeToMove, newStartNode, replayer, rrnodeMirror);
623
- oldChildren[indexInOld] = undefined;
624
- }
625
- catch (e) {
626
- console.error(e, parentNode, nodeToMove, oldStartNode);
627
- }
672
+ parentNode.insertBefore(nodeToMove, oldStartNode);
673
+ diff(nodeToMove, newStartNode, replayer, rrnodeMirror);
674
+ oldChildren[indexInOld] = undefined;
628
675
  }
629
676
  else {
630
677
  const newNode = createOrGetNode(newStartNode, replayer.mirror, rrnodeMirror);
@@ -635,13 +682,8 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
635
682
  oldChildren[oldStartIndex] = undefined;
636
683
  oldStartNode = undefined;
637
684
  }
638
- try {
639
- parentNode.insertBefore(newNode, oldStartNode || null);
640
- diff(newNode, newStartNode, replayer, rrnodeMirror);
641
- }
642
- catch (e) {
643
- console.error(e, parentNode, newNode, oldStartNode || null);
644
- }
685
+ parentNode.insertBefore(newNode, oldStartNode || null);
686
+ diff(newNode, newStartNode, replayer, rrnodeMirror);
645
687
  }
646
688
  newStartNode = newChildren[++newStartIndex];
647
689
  }
@@ -656,13 +698,8 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
656
698
  });
657
699
  for (; newStartIndex <= newEndIndex; ++newStartIndex) {
658
700
  const newNode = createOrGetNode(newChildren[newStartIndex], replayer.mirror, rrnodeMirror);
659
- try {
660
- parentNode.insertBefore(newNode, referenceNode);
661
- diff(newNode, newChildren[newStartIndex], replayer, rrnodeMirror);
662
- }
663
- catch (e) {
664
- console.error(e, parentNode, newNode, referenceNode);
665
- }
701
+ parentNode.insertBefore(newNode, referenceNode);
702
+ diff(newNode, newChildren[newStartIndex], replayer, rrnodeMirror);
666
703
  }
667
704
  }
668
705
  else if (newStartIndex > newEndIndex) {
@@ -896,11 +933,11 @@ function buildFromNode(node, rrdom, domMirror, parentRRNode) {
896
933
  }
897
934
  break;
898
935
  case NodeType.DOCUMENT_TYPE_NODE:
899
- const documentType = (node);
936
+ const documentType = node;
900
937
  rrNode = rrdom.createDocumentType(documentType.name, documentType.publicId, documentType.systemId);
901
938
  break;
902
939
  case NodeType.ELEMENT_NODE:
903
- const elementNode = (node);
940
+ const elementNode = node;
904
941
  const tagName = getValidTagName(elementNode);
905
942
  rrNode = rrdom.createElement(tagName);
906
943
  const rrElement = rrNode;
@@ -911,13 +948,13 @@ function buildFromNode(node, rrdom, domMirror, parentRRNode) {
911
948
  elementNode.scrollTop && (rrElement.scrollTop = elementNode.scrollTop);
912
949
  break;
913
950
  case NodeType.TEXT_NODE:
914
- rrNode = rrdom.createTextNode((node).textContent || '');
951
+ rrNode = rrdom.createTextNode(node.textContent || '');
915
952
  break;
916
953
  case NodeType.CDATA_SECTION_NODE:
917
- rrNode = rrdom.createCDATASection((node).data);
954
+ rrNode = rrdom.createCDATASection(node.data);
918
955
  break;
919
956
  case NodeType.COMMENT_NODE:
920
- rrNode = rrdom.createComment((node).textContent || '');
957
+ rrNode = rrdom.createComment(node.textContent || '');
921
958
  break;
922
959
  case NodeType.DOCUMENT_FRAGMENT_NODE:
923
960
  rrNode = parentRRNode.attachShadow({ mode: 'open' });
@@ -953,8 +990,8 @@ function buildFromDom(dom, domMirror = createMirror$1(), rrdom = new RRDocument(
953
990
  node.nodeType === NodeType.ELEMENT_NODE ||
954
991
  node.nodeType === NodeType.DOCUMENT_FRAGMENT_NODE) {
955
992
  if (node.nodeType === NodeType.ELEMENT_NODE &&
956
- (node).shadowRoot)
957
- walk((node).shadowRoot, rrNode);
993
+ node.shadowRoot)
994
+ walk(node.shadowRoot, rrNode);
958
995
  node.childNodes.forEach((childNode) => walk(childNode, rrNode));
959
996
  }
960
997
  }
@@ -1057,4 +1094,4 @@ function getDefaultSN(node, id) {
1057
1094
  }
1058
1095
  }
1059
1096
 
1060
- export { Mirror, RRCDATASection, RRCanvasElement, RRComment, RRDocument, RRDocumentType, RRElement, RRIFrameElement, RRMediaElement, BaseRRNode as RRNode, RRStyleElement, RRText, StyleRuleType, buildFromDom, buildFromNode, createMirror, createOrGetNode, diff, getDefaultSN };
1097
+ export { BaseRRCDATASectionImpl, BaseRRCommentImpl, BaseRRDocumentImpl, BaseRRDocumentTypeImpl, BaseRRElementImpl, BaseRRMediaElementImpl, BaseRRNode, BaseRRTextImpl, ClassList, Mirror, NodeType, RRCDATASection, RRCanvasElement, RRComment, RRDocument, RRDocumentType, RRElement, RRIFrameElement, RRMediaElement, BaseRRNode as RRNode, RRStyleElement, RRText, StyleRuleType, buildFromDom, buildFromNode, createMirror, createOrGetNode, diff, getDefaultSN };
@@ -1,7 +1,7 @@
1
1
  import record from './record/index.js';
2
2
  export { default as record } from './record/index.js';
3
- import '@highlight-run/rrweb-snapshot';
4
- import '../../rrdom/es/virtual-dom.js';
3
+ import '../../rrweb-snapshot/es/rrweb-snapshot.js';
4
+ import '../../rrdom/es/rrdom.js';
5
5
  export { EventType, IncrementalSource, MouseInteractions, ReplayerEvents } from './types.js';
6
6
  import * as utils from './utils.js';
7
7
  export { utils };
@@ -1,4 +1,4 @@
1
- import { createMirror, snapshot } from '@highlight-run/rrweb-snapshot';
1
+ import { createMirror, snapshot } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';
2
2
  import { initObservers, mutationBuffers } from './observer.js';
3
3
  import { polyfill, on, getWindowWidth, getWindowHeight, isSerializedIframe, isSerializedStylesheet, hasShadowRoot } from '../utils.js';
4
4
  import { EventType, IncrementalSource } from '../types.js';
@@ -148,6 +148,7 @@ function record(options = {}) {
148
148
  iframeManager,
149
149
  stylesheetManager,
150
150
  canvasManager,
151
+ keepIframeSrcFn,
151
152
  enableStrictPrivacy
152
153
  },
153
154
  mirror,
@@ -284,6 +285,7 @@ function record(options = {}) {
284
285
  doc,
285
286
  maskInputFn,
286
287
  maskTextFn,
288
+ keepIframeSrcFn,
287
289
  blockSelector,
288
290
  slimDOMOptions,
289
291
  mirror,
@@ -1,4 +1,4 @@
1
- import { obfuscateText, isShadowRoot, maskInputValue, transformAttribute, needMaskingText, IGNORED_NODE, serializeNodeWithId } from '@highlight-run/rrweb-snapshot';
1
+ import { obfuscateText, isShadowRoot, maskInputValue, transformAttribute, needMaskingText, IGNORED_NODE, serializeNodeWithId } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';
2
2
  import { isIgnored, isBlocked, isSerialized, isAncestorRemoved, isSerializedIframe, isSerializedStylesheet, hasShadowRoot } from '../utils.js';
3
3
 
4
4
  function isNodeInLinkedList(n) {
@@ -305,6 +305,16 @@ class MutationBuffer {
305
305
  return;
306
306
  }
307
307
  let item = this.attributes.find((a) => a.node === m.target);
308
+ if (target.tagName === 'IFRAME' &&
309
+ m.attributeName === 'src' &&
310
+ !this.keepIframeSrcFn(value)) {
311
+ if (!target.contentDocument) {
312
+ m.attributeName = 'rr_src';
313
+ }
314
+ else {
315
+ return;
316
+ }
317
+ }
308
318
  if (!item) {
309
319
  item = {
310
320
  node: m.target,
@@ -350,7 +360,7 @@ class MutationBuffer {
350
360
  break;
351
361
  }
352
362
  }
353
- item.attributes[m.attributeName] = transformAttribute(this.doc, m.target.tagName, m.attributeName, value);
363
+ item.attributes[m.attributeName] = transformAttribute(this.doc, target.tagName, m.attributeName, value);
354
364
  }
355
365
  break;
356
366
  }
@@ -424,6 +434,7 @@ class MutationBuffer {
424
434
  'maskInputOptions',
425
435
  'maskTextFn',
426
436
  'maskInputFn',
437
+ 'keepIframeSrcFn',
427
438
  'recordCanvas',
428
439
  'inlineImages',
429
440
  'slimDOMOptions',
@@ -1,4 +1,4 @@
1
- import { maskInputValue } from '@highlight-run/rrweb-snapshot';
1
+ import { maskInputValue } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';
2
2
  import { on, throttle, isBlocked, getWindowHeight, getWindowWidth, hookSetter, patch, isTouchEvent, isCanvasNode } from '../utils.js';
3
3
  import { MouseInteractions, IncrementalSource } from '../types.js';
4
4
  import MutationBuffer from './mutation.js';
@@ -1,6 +1,6 @@
1
1
  import { __awaiter } from './../../../../ext/tslib/tslib.es6.js';
2
- import { createCache, createMirror, rebuild, buildNodeWithSN, NodeType } from '@highlight-run/rrweb-snapshot';
3
- import { RRDocument, diff, createOrGetNode, getDefaultSN, StyleRuleType, buildFromDom, buildFromNode } from '../../../rrdom/es/virtual-dom.js';
2
+ import { createCache, createMirror, rebuild, buildNodeWithSN, NodeType } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';
3
+ import { RRDocument, diff, createOrGetNode, getDefaultSN, StyleRuleType, buildFromDom, buildFromNode } from '../../../rrdom/es/rrdom.js';
4
4
  import * as mitt_es from './../../../../ext/mitt/dist/mitt.es.js';
5
5
  import mitt$1 from './../../../../ext/mitt/dist/mitt.es.js';
6
6
  import { polyfill } from './smoothscroll.js';
@@ -634,7 +634,7 @@ class Replayer {
634
634
  const styleEl = document.createElement('style');
635
635
  documentElement.insertBefore(styleEl, head);
636
636
  for (let idx = 0; idx < injectStylesRules.length; idx++) {
637
- (styleEl.sheet).insertRule(injectStylesRules[idx], idx);
637
+ styleEl.sheet.insertRule(injectStylesRules[idx], idx);
638
638
  }
639
639
  }
640
640
  }
@@ -1019,7 +1019,7 @@ class Replayer {
1019
1019
  if (!target) {
1020
1020
  return this.debugNodeNotFound(d, d.id);
1021
1021
  }
1022
- const styleSheet = (target).sheet;
1022
+ const styleSheet = target.sheet;
1023
1023
  (_d = d.adds) === null || _d === void 0 ? void 0 : _d.forEach(({ rule, index: nestedIndex }) => {
1024
1024
  try {
1025
1025
  if (Array.isArray(nestedIndex)) {
@@ -1,4 +1,4 @@
1
- import { classMatchesRegex, IGNORED_NODE, isShadowRoot } from '@highlight-run/rrweb-snapshot';
1
+ import { classMatchesRegex, IGNORED_NODE, isShadowRoot } from '../../rrweb-snapshot/es/rrweb-snapshot.js';
2
2
 
3
3
  function on(type, fn, target = document) {
4
4
  const options = { capture: true, passive: true };