@highlight-run/rrweb 2.0.12 → 2.0.16

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 (37) hide show
  1. package/dist/plugins/console-record.min.js.map +1 -1
  2. package/dist/plugins/console-replay.min.js.map +1 -1
  3. package/dist/record/rrweb-record-pack.min.js.map +1 -1
  4. package/dist/record/rrweb-record.js +3 -3
  5. package/dist/record/rrweb-record.min.js +3 -3
  6. package/dist/record/rrweb-record.min.js.map +1 -1
  7. package/dist/replay/rrweb-replay-unpack.js +4 -4
  8. package/dist/replay/rrweb-replay-unpack.min.js +4 -4
  9. package/dist/replay/rrweb-replay-unpack.min.js.map +1 -1
  10. package/dist/replay/rrweb-replay.js +4 -4
  11. package/dist/replay/rrweb-replay.min.js +4 -4
  12. package/dist/replay/rrweb-replay.min.js.map +1 -1
  13. package/dist/rrweb-all.js +8 -8
  14. package/dist/rrweb-all.min.js +8 -8
  15. package/dist/rrweb-all.min.js.map +1 -1
  16. package/dist/rrweb.js +5 -5
  17. package/dist/rrweb.min.js +5 -5
  18. package/dist/rrweb.min.js.map +1 -1
  19. package/es/rrweb/packages/rrdom/es/{virtual-dom.js → rrdom.js} +104 -114
  20. package/es/rrweb/packages/rrweb/src/index.js +1 -1
  21. package/es/rrweb/packages/rrweb/src/record/index.js +2 -0
  22. package/es/rrweb/packages/rrweb/src/record/mutation.js +12 -1
  23. package/es/rrweb/packages/rrweb/src/replay/index.js +3 -3
  24. package/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js +1860 -1861
  25. package/lib/plugins/console-record.js +8 -8
  26. package/lib/plugins/console-replay.js +8 -8
  27. package/lib/record/rrweb-record-pack.js +8 -8
  28. package/lib/record/rrweb-record.js +1055 -1043
  29. package/lib/replay/rrweb-replay-unpack.js +988 -998
  30. package/lib/replay/rrweb-replay.js +988 -998
  31. package/lib/rrweb-all.js +1980 -1978
  32. package/lib/rrweb.js +1980 -1978
  33. package/package.json +5 -5
  34. package/typings/record/mutation.d.ts +1 -0
  35. package/typings/replay/index.d.ts +1 -1
  36. package/typings/types.d.ts +3 -2
  37. package/typings/utils.d.ts +1 -1
@@ -1,65 +1,65 @@
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";
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
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();
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
63
  }
64
64
 
65
65
  function parseCSSText(cssText) {
@@ -629,43 +629,45 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
629
629
  let oldStartNode = oldChildren[oldStartIndex], oldEndNode = oldChildren[oldEndIndex], newStartNode = newChildren[newStartIndex], newEndNode = newChildren[newEndIndex];
630
630
  let oldIdToIndex = undefined, indexInOld;
631
631
  while (oldStartIndex <= oldEndIndex && newStartIndex <= newEndIndex) {
632
+ const oldStartId = replayer.mirror.getId(oldStartNode);
633
+ const oldEndId = replayer.mirror.getId(oldEndNode);
634
+ const newStartId = rrnodeMirror.getId(newStartNode);
635
+ const newEndId = rrnodeMirror.getId(newEndNode);
636
+ console.log('oldStartId', oldStartId);
637
+ console.log('oldEndId', oldEndId);
638
+ console.log('newStartId', newStartId);
639
+ console.log('newEndId', newEndId);
632
640
  if (oldStartNode === undefined) {
633
641
  oldStartNode = oldChildren[++oldStartIndex];
634
642
  }
635
643
  else if (oldEndNode === undefined) {
636
644
  oldEndNode = oldChildren[--oldEndIndex];
637
645
  }
638
- else if (replayer.mirror.getId(oldStartNode) === rrnodeMirror.getId(newStartNode)) {
646
+ else if (oldStartId !== -1 &&
647
+ oldStartId === newStartId) {
639
648
  diff(oldStartNode, newStartNode, replayer, rrnodeMirror);
640
649
  oldStartNode = oldChildren[++oldStartIndex];
641
650
  newStartNode = newChildren[++newStartIndex];
642
651
  }
643
- else if (replayer.mirror.getId(oldEndNode) === rrnodeMirror.getId(newEndNode)) {
652
+ else if (oldEndId !== -1 &&
653
+ oldEndId === newEndId) {
644
654
  diff(oldEndNode, newEndNode, replayer, rrnodeMirror);
645
655
  oldEndNode = oldChildren[--oldEndIndex];
646
656
  newEndNode = newChildren[--newEndIndex];
647
657
  }
648
- else if (replayer.mirror.getId(oldStartNode) === rrnodeMirror.getId(newEndNode)) {
649
- try {
650
- parentNode.insertBefore(oldStartNode, oldEndNode.nextSibling);
651
- diff(oldStartNode, newEndNode, replayer, rrnodeMirror);
652
- oldStartNode = oldChildren[++oldStartIndex];
653
- newEndNode = newChildren[--newEndIndex];
654
- }
655
- catch (e) {
656
- console.error(e, parentNode, oldStartNode, oldEndNode);
657
- }
658
+ else if (oldStartId !== -1 &&
659
+ oldStartId === newEndId) {
660
+ parentNode.insertBefore(oldStartNode, oldEndNode.nextSibling);
661
+ diff(oldStartNode, newEndNode, replayer, rrnodeMirror);
662
+ oldStartNode = oldChildren[++oldStartIndex];
663
+ newEndNode = newChildren[--newEndIndex];
658
664
  }
659
- else if (replayer.mirror.getId(oldEndNode) === rrnodeMirror.getId(newStartNode)) {
660
- try {
661
- parentNode.insertBefore(oldEndNode, oldStartNode);
662
- diff(oldEndNode, newStartNode, replayer, rrnodeMirror);
663
- oldEndNode = oldChildren[--oldEndIndex];
664
- newStartNode = newChildren[++newStartIndex];
665
- }
666
- catch (e) {
667
- console.error(e, parentNode, oldEndNode, oldStartNode);
668
- }
665
+ else if (oldEndId !== -1 &&
666
+ oldEndId === newStartId) {
667
+ parentNode.insertBefore(oldEndNode, oldStartNode);
668
+ diff(oldEndNode, newStartNode, replayer, rrnodeMirror);
669
+ oldEndNode = oldChildren[--oldEndIndex];
670
+ newStartNode = newChildren[++newStartIndex];
669
671
  }
670
672
  else {
671
673
  if (!oldIdToIndex) {
@@ -679,14 +681,9 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
679
681
  indexInOld = oldIdToIndex[rrnodeMirror.getId(newStartNode)];
680
682
  if (indexInOld) {
681
683
  const nodeToMove = oldChildren[indexInOld];
682
- try {
683
- parentNode.insertBefore(nodeToMove, oldStartNode);
684
- diff(nodeToMove, newStartNode, replayer, rrnodeMirror);
685
- oldChildren[indexInOld] = undefined;
686
- }
687
- catch (e) {
688
- console.error(e, parentNode, nodeToMove, oldStartNode);
689
- }
684
+ parentNode.insertBefore(nodeToMove, oldStartNode);
685
+ diff(nodeToMove, newStartNode, replayer, rrnodeMirror);
686
+ oldChildren[indexInOld] = undefined;
690
687
  }
691
688
  else {
692
689
  const newNode = createOrGetNode(newStartNode, replayer.mirror, rrnodeMirror);
@@ -697,13 +694,8 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
697
694
  oldChildren[oldStartIndex] = undefined;
698
695
  oldStartNode = undefined;
699
696
  }
700
- try {
701
- parentNode.insertBefore(newNode, oldStartNode || null);
702
- diff(newNode, newStartNode, replayer, rrnodeMirror);
703
- }
704
- catch (e) {
705
- console.error(e, parentNode, newNode, oldStartNode || null);
706
- }
697
+ parentNode.insertBefore(newNode, oldStartNode || null);
698
+ diff(newNode, newStartNode, replayer, rrnodeMirror);
707
699
  }
708
700
  newStartNode = newChildren[++newStartIndex];
709
701
  }
@@ -718,13 +710,8 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
718
710
  });
719
711
  for (; newStartIndex <= newEndIndex; ++newStartIndex) {
720
712
  const newNode = createOrGetNode(newChildren[newStartIndex], replayer.mirror, rrnodeMirror);
721
- try {
722
- parentNode.insertBefore(newNode, referenceNode);
723
- diff(newNode, newChildren[newStartIndex], replayer, rrnodeMirror);
724
- }
725
- catch (e) {
726
- console.error(e, parentNode, newNode, referenceNode);
727
- }
713
+ parentNode.insertBefore(newNode, referenceNode);
714
+ diff(newNode, newChildren[newStartIndex], replayer, rrnodeMirror);
728
715
  }
729
716
  }
730
717
  else if (newStartIndex > newEndIndex) {
@@ -738,8 +725,11 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
738
725
  }
739
726
  }
740
727
  function createOrGetNode(rrNode, domMirror, rrnodeMirror) {
741
- let node = domMirror.getNode(rrnodeMirror.getId(rrNode));
728
+ const nodeId = rrnodeMirror.getId(rrNode);
742
729
  const sn = rrnodeMirror.getMeta(rrNode);
730
+ let node = null;
731
+ if (nodeId > -1)
732
+ node = domMirror.getNode(nodeId);
743
733
  if (node !== null)
744
734
  return node;
745
735
  switch (rrNode.RRNodeType) {
@@ -958,11 +948,11 @@ function buildFromNode(node, rrdom, domMirror, parentRRNode) {
958
948
  }
959
949
  break;
960
950
  case NodeType.DOCUMENT_TYPE_NODE:
961
- const documentType = (node);
951
+ const documentType = node;
962
952
  rrNode = rrdom.createDocumentType(documentType.name, documentType.publicId, documentType.systemId);
963
953
  break;
964
954
  case NodeType.ELEMENT_NODE:
965
- const elementNode = (node);
955
+ const elementNode = node;
966
956
  const tagName = getValidTagName(elementNode);
967
957
  rrNode = rrdom.createElement(tagName);
968
958
  const rrElement = rrNode;
@@ -973,13 +963,13 @@ function buildFromNode(node, rrdom, domMirror, parentRRNode) {
973
963
  elementNode.scrollTop && (rrElement.scrollTop = elementNode.scrollTop);
974
964
  break;
975
965
  case NodeType.TEXT_NODE:
976
- rrNode = rrdom.createTextNode((node).textContent || '');
966
+ rrNode = rrdom.createTextNode(node.textContent || '');
977
967
  break;
978
968
  case NodeType.CDATA_SECTION_NODE:
979
- rrNode = rrdom.createCDATASection((node).data);
969
+ rrNode = rrdom.createCDATASection(node.data);
980
970
  break;
981
971
  case NodeType.COMMENT_NODE:
982
- rrNode = rrdom.createComment((node).textContent || '');
972
+ rrNode = rrdom.createComment(node.textContent || '');
983
973
  break;
984
974
  case NodeType.DOCUMENT_FRAGMENT_NODE:
985
975
  rrNode = parentRRNode.attachShadow({ mode: 'open' });
@@ -1015,8 +1005,8 @@ function buildFromDom(dom, domMirror = createMirror$1(), rrdom = new RRDocument(
1015
1005
  node.nodeType === NodeType.ELEMENT_NODE ||
1016
1006
  node.nodeType === NodeType.DOCUMENT_FRAGMENT_NODE) {
1017
1007
  if (node.nodeType === NodeType.ELEMENT_NODE &&
1018
- (node).shadowRoot)
1019
- walk((node).shadowRoot, rrNode);
1008
+ node.shadowRoot)
1009
+ walk(node.shadowRoot, rrNode);
1020
1010
  node.childNodes.forEach((childNode) => walk(childNode, rrNode));
1021
1011
  }
1022
1012
  }
@@ -1119,4 +1109,4 @@ function getDefaultSN(node, id) {
1119
1109
  }
1120
1110
  }
1121
1111
 
1122
- export { Mirror, RRCDATASection, RRCanvasElement, RRComment, RRDocument, RRDocumentType, RRElement, RRIFrameElement, RRMediaElement, BaseRRNode as RRNode, RRStyleElement, RRText, StyleRuleType, buildFromDom, buildFromNode, createMirror, createOrGetNode, diff, getDefaultSN };
1112
+ 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
3
  import '../../rrweb-snapshot/es/rrweb-snapshot.js';
4
- import '../../rrdom/es/virtual-dom.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 };
@@ -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,
@@ -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,6 +1,6 @@
1
1
  import { __awaiter } from './../../../../ext/tslib/tslib.es6.js';
2
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/virtual-dom.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)) {