@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.
- package/dist/plugins/console-record.js +5 -5
- package/dist/plugins/console-record.min.js +5 -5
- package/dist/plugins/console-record.min.js.map +1 -1
- package/dist/plugins/console-replay.js +3 -3
- package/dist/plugins/console-replay.min.js +3 -3
- package/dist/plugins/console-replay.min.js.map +1 -1
- package/dist/record/rrweb-record-pack.js +2 -2
- package/dist/record/rrweb-record-pack.min.js +2 -2
- package/dist/record/rrweb-record-pack.min.js.map +1 -1
- package/dist/record/rrweb-record.js +3 -3
- package/dist/record/rrweb-record.min.js +3 -3
- package/dist/record/rrweb-record.min.js.map +1 -1
- package/dist/replay/rrweb-replay-unpack.js +4 -3
- package/dist/replay/rrweb-replay-unpack.min.js +4 -3
- package/dist/replay/rrweb-replay-unpack.min.js.map +1 -1
- package/dist/replay/rrweb-replay.js +4 -3
- package/dist/replay/rrweb-replay.min.js +4 -3
- package/dist/replay/rrweb-replay.min.js.map +1 -1
- package/dist/rrweb-all.js +25 -24
- package/dist/rrweb-all.min.js +25 -24
- package/dist/rrweb-all.min.js.map +1 -1
- package/dist/rrweb.js +15 -14
- package/dist/rrweb.min.js +15 -14
- package/dist/rrweb.min.js.map +1 -1
- package/es/rrweb/packages/rrdom/es/{virtual-dom.js → rrdom.js} +86 -49
- package/es/rrweb/packages/rrweb/src/index.js +2 -2
- package/es/rrweb/packages/rrweb/src/record/index.js +3 -1
- package/es/rrweb/packages/rrweb/src/record/mutation.js +13 -2
- package/es/rrweb/packages/rrweb/src/record/observer.js +1 -1
- package/es/rrweb/packages/rrweb/src/replay/index.js +4 -4
- package/es/rrweb/packages/rrweb/src/utils.js +1 -1
- package/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js +1870 -0
- package/lib/plugins/console-record.js +9 -1
- package/lib/plugins/console-replay.js +9 -1
- package/lib/record/rrweb-record-pack.js +9 -3
- package/lib/record/rrweb-record.js +1075 -17
- package/lib/replay/rrweb-replay-unpack.js +1023 -96
- package/lib/replay/rrweb-replay.js +1023 -96
- package/lib/rrweb-all.js +2056 -137
- package/lib/rrweb.js +2056 -137
- package/package.json +5 -5
- package/typings/record/mutation.d.ts +1 -0
- package/typings/replay/index.d.ts +1 -1
- package/typings/types.d.ts +3 -2
- package/typings/utils.d.ts +1 -1
|
@@ -1,4 +1,66 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
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
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
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
|
-
|
|
621
|
-
|
|
622
|
-
|
|
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
|
-
|
|
639
|
-
|
|
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
|
-
|
|
660
|
-
|
|
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 =
|
|
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 =
|
|
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(
|
|
951
|
+
rrNode = rrdom.createTextNode(node.textContent || '');
|
|
915
952
|
break;
|
|
916
953
|
case NodeType.CDATA_SECTION_NODE:
|
|
917
|
-
rrNode = rrdom.createCDATASection(
|
|
954
|
+
rrNode = rrdom.createCDATASection(node.data);
|
|
918
955
|
break;
|
|
919
956
|
case NodeType.COMMENT_NODE:
|
|
920
|
-
rrNode = rrdom.createComment(
|
|
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
|
-
|
|
957
|
-
walk(
|
|
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 '
|
|
4
|
-
import '../../rrdom/es/
|
|
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 '
|
|
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 '
|
|
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,
|
|
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 '
|
|
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 '
|
|
3
|
-
import { RRDocument, diff, createOrGetNode, getDefaultSN, StyleRuleType, buildFromDom, buildFromNode } from '../../../rrdom/es/
|
|
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
|
-
|
|
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 =
|
|
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 '
|
|
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 };
|