@highlight-run/rrweb 2.0.7 → 2.0.10
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 +1 -1
- package/dist/plugins/console-record.min.js +1 -1
- package/dist/plugins/console-record.min.js.map +1 -1
- package/dist/plugins/console-replay.min.js.map +1 -1
- 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 -4
- package/dist/replay/rrweb-replay-unpack.min.js +4 -4
- package/dist/replay/rrweb-replay-unpack.min.js.map +1 -1
- package/dist/replay/rrweb-replay.js +4 -4
- package/dist/replay/rrweb-replay.min.js +4 -4
- package/dist/replay/rrweb-replay.min.js.map +1 -1
- package/dist/rrweb-all.js +7 -7
- package/dist/rrweb-all.min.js +7 -7
- package/dist/rrweb-all.min.js.map +1 -1
- package/dist/rrweb.js +5 -5
- package/dist/rrweb.min.js +5 -5
- package/dist/rrweb.min.js.map +1 -1
- package/es/rrweb/packages/rrdom/es/virtual-dom.js +47 -24
- package/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js +10 -0
- package/lib/replay/rrweb-replay-unpack.js +57 -24
- package/lib/replay/rrweb-replay.js +57 -24
- package/lib/rrweb-all.js +57 -24
- package/lib/rrweb.js +57 -24
- package/package.json +4 -4
|
@@ -535,7 +535,7 @@ function diff(oldTree, newTree, replayer, rrnodeMirror) {
|
|
|
535
535
|
break;
|
|
536
536
|
}
|
|
537
537
|
case NodeType$1.Element: {
|
|
538
|
-
const oldElement =
|
|
538
|
+
const oldElement = oldTree;
|
|
539
539
|
const newRRElement = newTree;
|
|
540
540
|
diffProps(oldElement, newRRElement, rrnodeMirror);
|
|
541
541
|
scrollDataToApply = newRRElement.scrollData;
|
|
@@ -543,7 +543,7 @@ function diff(oldTree, newTree, replayer, rrnodeMirror) {
|
|
|
543
543
|
switch (newRRElement.tagName) {
|
|
544
544
|
case 'AUDIO':
|
|
545
545
|
case 'VIDEO': {
|
|
546
|
-
const oldMediaElement =
|
|
546
|
+
const oldMediaElement = oldTree;
|
|
547
547
|
const newMediaRRElement = newRRElement;
|
|
548
548
|
if (newMediaRRElement.paused !== undefined)
|
|
549
549
|
newMediaRRElement.paused
|
|
@@ -558,7 +558,7 @@ function diff(oldTree, newTree, replayer, rrnodeMirror) {
|
|
|
558
558
|
break;
|
|
559
559
|
}
|
|
560
560
|
case 'CANVAS':
|
|
561
|
-
newTree.canvasMutations.forEach((canvasMutation) => replayer.applyCanvas(canvasMutation.event, canvasMutation.mutation,
|
|
561
|
+
newTree.canvasMutations.forEach((canvasMutation) => replayer.applyCanvas(canvasMutation.event, canvasMutation.mutation, oldTree));
|
|
562
562
|
break;
|
|
563
563
|
case 'STYLE':
|
|
564
564
|
applyVirtualStyleRulesToNode(oldElement, newTree.rules);
|
|
@@ -585,8 +585,7 @@ function diff(oldTree, newTree, replayer, rrnodeMirror) {
|
|
|
585
585
|
scrollDataToApply && replayer.applyScroll(scrollDataToApply, true);
|
|
586
586
|
inputDataToApply && replayer.applyInput(inputDataToApply);
|
|
587
587
|
if (newTree.nodeName === 'IFRAME') {
|
|
588
|
-
const oldContentDocument =
|
|
589
|
-
.contentDocument;
|
|
588
|
+
const oldContentDocument = oldTree.contentDocument;
|
|
590
589
|
const newIFrameElement = newTree;
|
|
591
590
|
if (oldContentDocument) {
|
|
592
591
|
const sn = rrnodeMirror.getMeta(newIFrameElement.contentDocument);
|
|
@@ -647,16 +646,26 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
|
|
|
647
646
|
newEndNode = newChildren[--newEndIndex];
|
|
648
647
|
}
|
|
649
648
|
else if (replayer.mirror.getId(oldStartNode) === rrnodeMirror.getId(newEndNode)) {
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
649
|
+
try {
|
|
650
|
+
parentNode.insertBefore(oldStartNode, oldEndNode.nextSibling);
|
|
651
|
+
}
|
|
652
|
+
catch (e) {
|
|
653
|
+
console.error(e, parentNode, oldStartNode, oldEndNode);
|
|
654
|
+
diff(oldStartNode, newEndNode, replayer, rrnodeMirror);
|
|
655
|
+
oldStartNode = oldChildren[++oldStartIndex];
|
|
656
|
+
newEndNode = newChildren[--newEndIndex];
|
|
657
|
+
}
|
|
654
658
|
}
|
|
655
659
|
else if (replayer.mirror.getId(oldEndNode) === rrnodeMirror.getId(newStartNode)) {
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
+
try {
|
|
661
|
+
parentNode.insertBefore(oldEndNode, oldStartNode);
|
|
662
|
+
}
|
|
663
|
+
catch (e) {
|
|
664
|
+
console.error(e, parentNode, oldEndNode, oldStartNode);
|
|
665
|
+
diff(oldEndNode, newStartNode, replayer, rrnodeMirror);
|
|
666
|
+
oldEndNode = oldChildren[--oldEndIndex];
|
|
667
|
+
newStartNode = newChildren[++newStartIndex];
|
|
668
|
+
}
|
|
660
669
|
}
|
|
661
670
|
else {
|
|
662
671
|
if (!oldIdToIndex) {
|
|
@@ -670,21 +679,31 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
|
|
|
670
679
|
indexInOld = oldIdToIndex[rrnodeMirror.getId(newStartNode)];
|
|
671
680
|
if (indexInOld) {
|
|
672
681
|
const nodeToMove = oldChildren[indexInOld];
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
682
|
+
try {
|
|
683
|
+
parentNode.insertBefore(nodeToMove, oldStartNode);
|
|
684
|
+
}
|
|
685
|
+
catch (e) {
|
|
686
|
+
console.error(e, parentNode, nodeToMove, oldStartNode);
|
|
687
|
+
diff(nodeToMove, newStartNode, replayer, rrnodeMirror);
|
|
688
|
+
oldChildren[indexInOld] = undefined;
|
|
689
|
+
}
|
|
676
690
|
}
|
|
677
691
|
else {
|
|
678
692
|
const newNode = createOrGetNode(newStartNode, replayer.mirror, rrnodeMirror);
|
|
679
693
|
if (((_a = replayer.mirror.getMeta(parentNode)) === null || _a === void 0 ? void 0 : _a.type) === NodeType$1.Document &&
|
|
680
694
|
((_b = replayer.mirror.getMeta(newNode)) === null || _b === void 0 ? void 0 : _b.type) === NodeType$1.Element &&
|
|
681
|
-
|
|
682
|
-
parentNode.removeChild(
|
|
695
|
+
parentNode.documentElement) {
|
|
696
|
+
parentNode.removeChild(parentNode.documentElement);
|
|
683
697
|
oldChildren[oldStartIndex] = undefined;
|
|
684
698
|
oldStartNode = undefined;
|
|
685
699
|
}
|
|
686
|
-
|
|
687
|
-
|
|
700
|
+
try {
|
|
701
|
+
parentNode.insertBefore(newNode, oldStartNode || null);
|
|
702
|
+
}
|
|
703
|
+
catch (e) {
|
|
704
|
+
console.error(e, parentNode, newNode, oldStartNode || null);
|
|
705
|
+
diff(newNode, newStartNode, replayer, rrnodeMirror);
|
|
706
|
+
}
|
|
688
707
|
}
|
|
689
708
|
newStartNode = newChildren[++newStartIndex];
|
|
690
709
|
}
|
|
@@ -699,8 +718,13 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
|
|
|
699
718
|
});
|
|
700
719
|
for (; newStartIndex <= newEndIndex; ++newStartIndex) {
|
|
701
720
|
const newNode = createOrGetNode(newChildren[newStartIndex], replayer.mirror, rrnodeMirror);
|
|
702
|
-
|
|
703
|
-
|
|
721
|
+
try {
|
|
722
|
+
parentNode.insertBefore(newNode, referenceNode);
|
|
723
|
+
}
|
|
724
|
+
catch (e) {
|
|
725
|
+
console.error(e, parentNode, newNode, referenceNode);
|
|
726
|
+
diff(newNode, newChildren[newStartIndex], replayer, rrnodeMirror);
|
|
727
|
+
}
|
|
704
728
|
}
|
|
705
729
|
}
|
|
706
730
|
else if (newStartIndex > newEndIndex) {
|
|
@@ -754,8 +778,7 @@ function getNestedRule(rules, position) {
|
|
|
754
778
|
return rule;
|
|
755
779
|
}
|
|
756
780
|
else {
|
|
757
|
-
return getNestedRule(
|
|
758
|
-
.cssRules, position.slice(2));
|
|
781
|
+
return getNestedRule(rule.cssRules[position[1]].cssRules, position.slice(2));
|
|
759
782
|
}
|
|
760
783
|
}
|
|
761
784
|
var StyleRuleType;
|
|
@@ -1702,6 +1702,7 @@ function buildNode(n, options) {
|
|
|
1702
1702
|
if (!image.currentSrc.startsWith('data:')) {
|
|
1703
1703
|
image.setAttribute('rrweb-original-src', n.attributes.src);
|
|
1704
1704
|
image.src = value;
|
|
1705
|
+
image.setAttribute('rrweb-inline-src', value);
|
|
1705
1706
|
}
|
|
1706
1707
|
}
|
|
1707
1708
|
if (name_1 === 'rr_width') {
|
|
@@ -1730,6 +1731,15 @@ function buildNode(n, options) {
|
|
|
1730
1731
|
for (var name_1 in n.attributes) {
|
|
1731
1732
|
_loop_1(name_1);
|
|
1732
1733
|
}
|
|
1734
|
+
if (tagName === 'img') {
|
|
1735
|
+
var image = node_1;
|
|
1736
|
+
if (!image.currentSrc.startsWith('data:')) {
|
|
1737
|
+
var inlineSrc = image.getAttribute('rrweb-inline-src');
|
|
1738
|
+
if (inlineSrc === null || inlineSrc === void 0 ? void 0 : inlineSrc.startsWith('data:')) {
|
|
1739
|
+
image.src = inlineSrc;
|
|
1740
|
+
}
|
|
1741
|
+
}
|
|
1742
|
+
}
|
|
1733
1743
|
if (n.isShadowHost) {
|
|
1734
1744
|
if (!node_1.shadowRoot) {
|
|
1735
1745
|
node_1.attachShadow({ mode: 'open' });
|
|
@@ -751,6 +751,7 @@ function buildNode(n, options) {
|
|
|
751
751
|
if (!image.currentSrc.startsWith('data:')) {
|
|
752
752
|
image.setAttribute('rrweb-original-src', n.attributes.src);
|
|
753
753
|
image.src = value;
|
|
754
|
+
image.setAttribute('rrweb-inline-src', value);
|
|
754
755
|
}
|
|
755
756
|
}
|
|
756
757
|
if (name_1 === 'rr_width') {
|
|
@@ -779,6 +780,15 @@ function buildNode(n, options) {
|
|
|
779
780
|
for (var name_1 in n.attributes) {
|
|
780
781
|
_loop_1(name_1);
|
|
781
782
|
}
|
|
783
|
+
if (tagName === 'img') {
|
|
784
|
+
var image = node_1;
|
|
785
|
+
if (!image.currentSrc.startsWith('data:')) {
|
|
786
|
+
var inlineSrc = image.getAttribute('rrweb-inline-src');
|
|
787
|
+
if (inlineSrc === null || inlineSrc === void 0 ? void 0 : inlineSrc.startsWith('data:')) {
|
|
788
|
+
image.src = inlineSrc;
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
}
|
|
782
792
|
if (n.isShadowHost) {
|
|
783
793
|
if (!node_1.shadowRoot) {
|
|
784
794
|
node_1.attachShadow({ mode: 'open' });
|
|
@@ -1444,7 +1454,7 @@ function diff(oldTree, newTree, replayer, rrnodeMirror) {
|
|
|
1444
1454
|
break;
|
|
1445
1455
|
}
|
|
1446
1456
|
case NodeType$1.Element: {
|
|
1447
|
-
const oldElement =
|
|
1457
|
+
const oldElement = oldTree;
|
|
1448
1458
|
const newRRElement = newTree;
|
|
1449
1459
|
diffProps(oldElement, newRRElement, rrnodeMirror);
|
|
1450
1460
|
scrollDataToApply = newRRElement.scrollData;
|
|
@@ -1452,7 +1462,7 @@ function diff(oldTree, newTree, replayer, rrnodeMirror) {
|
|
|
1452
1462
|
switch (newRRElement.tagName) {
|
|
1453
1463
|
case 'AUDIO':
|
|
1454
1464
|
case 'VIDEO': {
|
|
1455
|
-
const oldMediaElement =
|
|
1465
|
+
const oldMediaElement = oldTree;
|
|
1456
1466
|
const newMediaRRElement = newRRElement;
|
|
1457
1467
|
if (newMediaRRElement.paused !== undefined)
|
|
1458
1468
|
newMediaRRElement.paused
|
|
@@ -1467,7 +1477,7 @@ function diff(oldTree, newTree, replayer, rrnodeMirror) {
|
|
|
1467
1477
|
break;
|
|
1468
1478
|
}
|
|
1469
1479
|
case 'CANVAS':
|
|
1470
|
-
newTree.canvasMutations.forEach((canvasMutation) => replayer.applyCanvas(canvasMutation.event, canvasMutation.mutation,
|
|
1480
|
+
newTree.canvasMutations.forEach((canvasMutation) => replayer.applyCanvas(canvasMutation.event, canvasMutation.mutation, oldTree));
|
|
1471
1481
|
break;
|
|
1472
1482
|
case 'STYLE':
|
|
1473
1483
|
applyVirtualStyleRulesToNode(oldElement, newTree.rules);
|
|
@@ -1494,8 +1504,7 @@ function diff(oldTree, newTree, replayer, rrnodeMirror) {
|
|
|
1494
1504
|
scrollDataToApply && replayer.applyScroll(scrollDataToApply, true);
|
|
1495
1505
|
inputDataToApply && replayer.applyInput(inputDataToApply);
|
|
1496
1506
|
if (newTree.nodeName === 'IFRAME') {
|
|
1497
|
-
const oldContentDocument =
|
|
1498
|
-
.contentDocument;
|
|
1507
|
+
const oldContentDocument = oldTree.contentDocument;
|
|
1499
1508
|
const newIFrameElement = newTree;
|
|
1500
1509
|
if (oldContentDocument) {
|
|
1501
1510
|
const sn = rrnodeMirror.getMeta(newIFrameElement.contentDocument);
|
|
@@ -1556,16 +1565,26 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
|
|
|
1556
1565
|
newEndNode = newChildren[--newEndIndex];
|
|
1557
1566
|
}
|
|
1558
1567
|
else if (replayer.mirror.getId(oldStartNode) === rrnodeMirror.getId(newEndNode)) {
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1568
|
+
try {
|
|
1569
|
+
parentNode.insertBefore(oldStartNode, oldEndNode.nextSibling);
|
|
1570
|
+
}
|
|
1571
|
+
catch (e) {
|
|
1572
|
+
console.error(e, parentNode, oldStartNode, oldEndNode);
|
|
1573
|
+
diff(oldStartNode, newEndNode, replayer, rrnodeMirror);
|
|
1574
|
+
oldStartNode = oldChildren[++oldStartIndex];
|
|
1575
|
+
newEndNode = newChildren[--newEndIndex];
|
|
1576
|
+
}
|
|
1563
1577
|
}
|
|
1564
1578
|
else if (replayer.mirror.getId(oldEndNode) === rrnodeMirror.getId(newStartNode)) {
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1579
|
+
try {
|
|
1580
|
+
parentNode.insertBefore(oldEndNode, oldStartNode);
|
|
1581
|
+
}
|
|
1582
|
+
catch (e) {
|
|
1583
|
+
console.error(e, parentNode, oldEndNode, oldStartNode);
|
|
1584
|
+
diff(oldEndNode, newStartNode, replayer, rrnodeMirror);
|
|
1585
|
+
oldEndNode = oldChildren[--oldEndIndex];
|
|
1586
|
+
newStartNode = newChildren[++newStartIndex];
|
|
1587
|
+
}
|
|
1569
1588
|
}
|
|
1570
1589
|
else {
|
|
1571
1590
|
if (!oldIdToIndex) {
|
|
@@ -1579,21 +1598,31 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
|
|
|
1579
1598
|
indexInOld = oldIdToIndex[rrnodeMirror.getId(newStartNode)];
|
|
1580
1599
|
if (indexInOld) {
|
|
1581
1600
|
const nodeToMove = oldChildren[indexInOld];
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1601
|
+
try {
|
|
1602
|
+
parentNode.insertBefore(nodeToMove, oldStartNode);
|
|
1603
|
+
}
|
|
1604
|
+
catch (e) {
|
|
1605
|
+
console.error(e, parentNode, nodeToMove, oldStartNode);
|
|
1606
|
+
diff(nodeToMove, newStartNode, replayer, rrnodeMirror);
|
|
1607
|
+
oldChildren[indexInOld] = undefined;
|
|
1608
|
+
}
|
|
1585
1609
|
}
|
|
1586
1610
|
else {
|
|
1587
1611
|
const newNode = createOrGetNode(newStartNode, replayer.mirror, rrnodeMirror);
|
|
1588
1612
|
if (((_a = replayer.mirror.getMeta(parentNode)) === null || _a === void 0 ? void 0 : _a.type) === NodeType$1.Document &&
|
|
1589
1613
|
((_b = replayer.mirror.getMeta(newNode)) === null || _b === void 0 ? void 0 : _b.type) === NodeType$1.Element &&
|
|
1590
|
-
|
|
1591
|
-
parentNode.removeChild(
|
|
1614
|
+
parentNode.documentElement) {
|
|
1615
|
+
parentNode.removeChild(parentNode.documentElement);
|
|
1592
1616
|
oldChildren[oldStartIndex] = undefined;
|
|
1593
1617
|
oldStartNode = undefined;
|
|
1594
1618
|
}
|
|
1595
|
-
|
|
1596
|
-
|
|
1619
|
+
try {
|
|
1620
|
+
parentNode.insertBefore(newNode, oldStartNode || null);
|
|
1621
|
+
}
|
|
1622
|
+
catch (e) {
|
|
1623
|
+
console.error(e, parentNode, newNode, oldStartNode || null);
|
|
1624
|
+
diff(newNode, newStartNode, replayer, rrnodeMirror);
|
|
1625
|
+
}
|
|
1597
1626
|
}
|
|
1598
1627
|
newStartNode = newChildren[++newStartIndex];
|
|
1599
1628
|
}
|
|
@@ -1608,8 +1637,13 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
|
|
|
1608
1637
|
});
|
|
1609
1638
|
for (; newStartIndex <= newEndIndex; ++newStartIndex) {
|
|
1610
1639
|
const newNode = createOrGetNode(newChildren[newStartIndex], replayer.mirror, rrnodeMirror);
|
|
1611
|
-
|
|
1612
|
-
|
|
1640
|
+
try {
|
|
1641
|
+
parentNode.insertBefore(newNode, referenceNode);
|
|
1642
|
+
}
|
|
1643
|
+
catch (e) {
|
|
1644
|
+
console.error(e, parentNode, newNode, referenceNode);
|
|
1645
|
+
diff(newNode, newChildren[newStartIndex], replayer, rrnodeMirror);
|
|
1646
|
+
}
|
|
1613
1647
|
}
|
|
1614
1648
|
}
|
|
1615
1649
|
else if (newStartIndex > newEndIndex) {
|
|
@@ -1663,8 +1697,7 @@ function getNestedRule$1(rules, position) {
|
|
|
1663
1697
|
return rule;
|
|
1664
1698
|
}
|
|
1665
1699
|
else {
|
|
1666
|
-
return getNestedRule$1(
|
|
1667
|
-
.cssRules, position.slice(2));
|
|
1700
|
+
return getNestedRule$1(rule.cssRules[position[1]].cssRules, position.slice(2));
|
|
1668
1701
|
}
|
|
1669
1702
|
}
|
|
1670
1703
|
var StyleRuleType;
|
|
@@ -751,6 +751,7 @@ function buildNode(n, options) {
|
|
|
751
751
|
if (!image.currentSrc.startsWith('data:')) {
|
|
752
752
|
image.setAttribute('rrweb-original-src', n.attributes.src);
|
|
753
753
|
image.src = value;
|
|
754
|
+
image.setAttribute('rrweb-inline-src', value);
|
|
754
755
|
}
|
|
755
756
|
}
|
|
756
757
|
if (name_1 === 'rr_width') {
|
|
@@ -779,6 +780,15 @@ function buildNode(n, options) {
|
|
|
779
780
|
for (var name_1 in n.attributes) {
|
|
780
781
|
_loop_1(name_1);
|
|
781
782
|
}
|
|
783
|
+
if (tagName === 'img') {
|
|
784
|
+
var image = node_1;
|
|
785
|
+
if (!image.currentSrc.startsWith('data:')) {
|
|
786
|
+
var inlineSrc = image.getAttribute('rrweb-inline-src');
|
|
787
|
+
if (inlineSrc === null || inlineSrc === void 0 ? void 0 : inlineSrc.startsWith('data:')) {
|
|
788
|
+
image.src = inlineSrc;
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
}
|
|
782
792
|
if (n.isShadowHost) {
|
|
783
793
|
if (!node_1.shadowRoot) {
|
|
784
794
|
node_1.attachShadow({ mode: 'open' });
|
|
@@ -1444,7 +1454,7 @@ function diff(oldTree, newTree, replayer, rrnodeMirror) {
|
|
|
1444
1454
|
break;
|
|
1445
1455
|
}
|
|
1446
1456
|
case NodeType$1.Element: {
|
|
1447
|
-
const oldElement =
|
|
1457
|
+
const oldElement = oldTree;
|
|
1448
1458
|
const newRRElement = newTree;
|
|
1449
1459
|
diffProps(oldElement, newRRElement, rrnodeMirror);
|
|
1450
1460
|
scrollDataToApply = newRRElement.scrollData;
|
|
@@ -1452,7 +1462,7 @@ function diff(oldTree, newTree, replayer, rrnodeMirror) {
|
|
|
1452
1462
|
switch (newRRElement.tagName) {
|
|
1453
1463
|
case 'AUDIO':
|
|
1454
1464
|
case 'VIDEO': {
|
|
1455
|
-
const oldMediaElement =
|
|
1465
|
+
const oldMediaElement = oldTree;
|
|
1456
1466
|
const newMediaRRElement = newRRElement;
|
|
1457
1467
|
if (newMediaRRElement.paused !== undefined)
|
|
1458
1468
|
newMediaRRElement.paused
|
|
@@ -1467,7 +1477,7 @@ function diff(oldTree, newTree, replayer, rrnodeMirror) {
|
|
|
1467
1477
|
break;
|
|
1468
1478
|
}
|
|
1469
1479
|
case 'CANVAS':
|
|
1470
|
-
newTree.canvasMutations.forEach((canvasMutation) => replayer.applyCanvas(canvasMutation.event, canvasMutation.mutation,
|
|
1480
|
+
newTree.canvasMutations.forEach((canvasMutation) => replayer.applyCanvas(canvasMutation.event, canvasMutation.mutation, oldTree));
|
|
1471
1481
|
break;
|
|
1472
1482
|
case 'STYLE':
|
|
1473
1483
|
applyVirtualStyleRulesToNode(oldElement, newTree.rules);
|
|
@@ -1494,8 +1504,7 @@ function diff(oldTree, newTree, replayer, rrnodeMirror) {
|
|
|
1494
1504
|
scrollDataToApply && replayer.applyScroll(scrollDataToApply, true);
|
|
1495
1505
|
inputDataToApply && replayer.applyInput(inputDataToApply);
|
|
1496
1506
|
if (newTree.nodeName === 'IFRAME') {
|
|
1497
|
-
const oldContentDocument =
|
|
1498
|
-
.contentDocument;
|
|
1507
|
+
const oldContentDocument = oldTree.contentDocument;
|
|
1499
1508
|
const newIFrameElement = newTree;
|
|
1500
1509
|
if (oldContentDocument) {
|
|
1501
1510
|
const sn = rrnodeMirror.getMeta(newIFrameElement.contentDocument);
|
|
@@ -1556,16 +1565,26 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
|
|
|
1556
1565
|
newEndNode = newChildren[--newEndIndex];
|
|
1557
1566
|
}
|
|
1558
1567
|
else if (replayer.mirror.getId(oldStartNode) === rrnodeMirror.getId(newEndNode)) {
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1568
|
+
try {
|
|
1569
|
+
parentNode.insertBefore(oldStartNode, oldEndNode.nextSibling);
|
|
1570
|
+
}
|
|
1571
|
+
catch (e) {
|
|
1572
|
+
console.error(e, parentNode, oldStartNode, oldEndNode);
|
|
1573
|
+
diff(oldStartNode, newEndNode, replayer, rrnodeMirror);
|
|
1574
|
+
oldStartNode = oldChildren[++oldStartIndex];
|
|
1575
|
+
newEndNode = newChildren[--newEndIndex];
|
|
1576
|
+
}
|
|
1563
1577
|
}
|
|
1564
1578
|
else if (replayer.mirror.getId(oldEndNode) === rrnodeMirror.getId(newStartNode)) {
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1579
|
+
try {
|
|
1580
|
+
parentNode.insertBefore(oldEndNode, oldStartNode);
|
|
1581
|
+
}
|
|
1582
|
+
catch (e) {
|
|
1583
|
+
console.error(e, parentNode, oldEndNode, oldStartNode);
|
|
1584
|
+
diff(oldEndNode, newStartNode, replayer, rrnodeMirror);
|
|
1585
|
+
oldEndNode = oldChildren[--oldEndIndex];
|
|
1586
|
+
newStartNode = newChildren[++newStartIndex];
|
|
1587
|
+
}
|
|
1569
1588
|
}
|
|
1570
1589
|
else {
|
|
1571
1590
|
if (!oldIdToIndex) {
|
|
@@ -1579,21 +1598,31 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
|
|
|
1579
1598
|
indexInOld = oldIdToIndex[rrnodeMirror.getId(newStartNode)];
|
|
1580
1599
|
if (indexInOld) {
|
|
1581
1600
|
const nodeToMove = oldChildren[indexInOld];
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1601
|
+
try {
|
|
1602
|
+
parentNode.insertBefore(nodeToMove, oldStartNode);
|
|
1603
|
+
}
|
|
1604
|
+
catch (e) {
|
|
1605
|
+
console.error(e, parentNode, nodeToMove, oldStartNode);
|
|
1606
|
+
diff(nodeToMove, newStartNode, replayer, rrnodeMirror);
|
|
1607
|
+
oldChildren[indexInOld] = undefined;
|
|
1608
|
+
}
|
|
1585
1609
|
}
|
|
1586
1610
|
else {
|
|
1587
1611
|
const newNode = createOrGetNode(newStartNode, replayer.mirror, rrnodeMirror);
|
|
1588
1612
|
if (((_a = replayer.mirror.getMeta(parentNode)) === null || _a === void 0 ? void 0 : _a.type) === NodeType$1.Document &&
|
|
1589
1613
|
((_b = replayer.mirror.getMeta(newNode)) === null || _b === void 0 ? void 0 : _b.type) === NodeType$1.Element &&
|
|
1590
|
-
|
|
1591
|
-
parentNode.removeChild(
|
|
1614
|
+
parentNode.documentElement) {
|
|
1615
|
+
parentNode.removeChild(parentNode.documentElement);
|
|
1592
1616
|
oldChildren[oldStartIndex] = undefined;
|
|
1593
1617
|
oldStartNode = undefined;
|
|
1594
1618
|
}
|
|
1595
|
-
|
|
1596
|
-
|
|
1619
|
+
try {
|
|
1620
|
+
parentNode.insertBefore(newNode, oldStartNode || null);
|
|
1621
|
+
}
|
|
1622
|
+
catch (e) {
|
|
1623
|
+
console.error(e, parentNode, newNode, oldStartNode || null);
|
|
1624
|
+
diff(newNode, newStartNode, replayer, rrnodeMirror);
|
|
1625
|
+
}
|
|
1597
1626
|
}
|
|
1598
1627
|
newStartNode = newChildren[++newStartIndex];
|
|
1599
1628
|
}
|
|
@@ -1608,8 +1637,13 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
|
|
|
1608
1637
|
});
|
|
1609
1638
|
for (; newStartIndex <= newEndIndex; ++newStartIndex) {
|
|
1610
1639
|
const newNode = createOrGetNode(newChildren[newStartIndex], replayer.mirror, rrnodeMirror);
|
|
1611
|
-
|
|
1612
|
-
|
|
1640
|
+
try {
|
|
1641
|
+
parentNode.insertBefore(newNode, referenceNode);
|
|
1642
|
+
}
|
|
1643
|
+
catch (e) {
|
|
1644
|
+
console.error(e, parentNode, newNode, referenceNode);
|
|
1645
|
+
diff(newNode, newChildren[newStartIndex], replayer, rrnodeMirror);
|
|
1646
|
+
}
|
|
1613
1647
|
}
|
|
1614
1648
|
}
|
|
1615
1649
|
else if (newStartIndex > newEndIndex) {
|
|
@@ -1663,8 +1697,7 @@ function getNestedRule$1(rules, position) {
|
|
|
1663
1697
|
return rule;
|
|
1664
1698
|
}
|
|
1665
1699
|
else {
|
|
1666
|
-
return getNestedRule$1(
|
|
1667
|
-
.cssRules, position.slice(2));
|
|
1700
|
+
return getNestedRule$1(rule.cssRules[position[1]].cssRules, position.slice(2));
|
|
1668
1701
|
}
|
|
1669
1702
|
}
|
|
1670
1703
|
var StyleRuleType;
|
package/lib/rrweb-all.js
CHANGED
|
@@ -1706,6 +1706,7 @@ function buildNode(n, options) {
|
|
|
1706
1706
|
if (!image.currentSrc.startsWith('data:')) {
|
|
1707
1707
|
image.setAttribute('rrweb-original-src', n.attributes.src);
|
|
1708
1708
|
image.src = value;
|
|
1709
|
+
image.setAttribute('rrweb-inline-src', value);
|
|
1709
1710
|
}
|
|
1710
1711
|
}
|
|
1711
1712
|
if (name_1 === 'rr_width') {
|
|
@@ -1734,6 +1735,15 @@ function buildNode(n, options) {
|
|
|
1734
1735
|
for (var name_1 in n.attributes) {
|
|
1735
1736
|
_loop_1(name_1);
|
|
1736
1737
|
}
|
|
1738
|
+
if (tagName === 'img') {
|
|
1739
|
+
var image = node_1;
|
|
1740
|
+
if (!image.currentSrc.startsWith('data:')) {
|
|
1741
|
+
var inlineSrc = image.getAttribute('rrweb-inline-src');
|
|
1742
|
+
if (inlineSrc === null || inlineSrc === void 0 ? void 0 : inlineSrc.startsWith('data:')) {
|
|
1743
|
+
image.src = inlineSrc;
|
|
1744
|
+
}
|
|
1745
|
+
}
|
|
1746
|
+
}
|
|
1737
1747
|
if (n.isShadowHost) {
|
|
1738
1748
|
if (!node_1.shadowRoot) {
|
|
1739
1749
|
node_1.attachShadow({ mode: 'open' });
|
|
@@ -4895,7 +4905,7 @@ function diff(oldTree, newTree, replayer, rrnodeMirror) {
|
|
|
4895
4905
|
break;
|
|
4896
4906
|
}
|
|
4897
4907
|
case NodeType$1.Element: {
|
|
4898
|
-
const oldElement =
|
|
4908
|
+
const oldElement = oldTree;
|
|
4899
4909
|
const newRRElement = newTree;
|
|
4900
4910
|
diffProps(oldElement, newRRElement, rrnodeMirror);
|
|
4901
4911
|
scrollDataToApply = newRRElement.scrollData;
|
|
@@ -4903,7 +4913,7 @@ function diff(oldTree, newTree, replayer, rrnodeMirror) {
|
|
|
4903
4913
|
switch (newRRElement.tagName) {
|
|
4904
4914
|
case 'AUDIO':
|
|
4905
4915
|
case 'VIDEO': {
|
|
4906
|
-
const oldMediaElement =
|
|
4916
|
+
const oldMediaElement = oldTree;
|
|
4907
4917
|
const newMediaRRElement = newRRElement;
|
|
4908
4918
|
if (newMediaRRElement.paused !== undefined)
|
|
4909
4919
|
newMediaRRElement.paused
|
|
@@ -4918,7 +4928,7 @@ function diff(oldTree, newTree, replayer, rrnodeMirror) {
|
|
|
4918
4928
|
break;
|
|
4919
4929
|
}
|
|
4920
4930
|
case 'CANVAS':
|
|
4921
|
-
newTree.canvasMutations.forEach((canvasMutation) => replayer.applyCanvas(canvasMutation.event, canvasMutation.mutation,
|
|
4931
|
+
newTree.canvasMutations.forEach((canvasMutation) => replayer.applyCanvas(canvasMutation.event, canvasMutation.mutation, oldTree));
|
|
4922
4932
|
break;
|
|
4923
4933
|
case 'STYLE':
|
|
4924
4934
|
applyVirtualStyleRulesToNode(oldElement, newTree.rules);
|
|
@@ -4945,8 +4955,7 @@ function diff(oldTree, newTree, replayer, rrnodeMirror) {
|
|
|
4945
4955
|
scrollDataToApply && replayer.applyScroll(scrollDataToApply, true);
|
|
4946
4956
|
inputDataToApply && replayer.applyInput(inputDataToApply);
|
|
4947
4957
|
if (newTree.nodeName === 'IFRAME') {
|
|
4948
|
-
const oldContentDocument =
|
|
4949
|
-
.contentDocument;
|
|
4958
|
+
const oldContentDocument = oldTree.contentDocument;
|
|
4950
4959
|
const newIFrameElement = newTree;
|
|
4951
4960
|
if (oldContentDocument) {
|
|
4952
4961
|
const sn = rrnodeMirror.getMeta(newIFrameElement.contentDocument);
|
|
@@ -5007,16 +5016,26 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
|
|
|
5007
5016
|
newEndNode = newChildren[--newEndIndex];
|
|
5008
5017
|
}
|
|
5009
5018
|
else if (replayer.mirror.getId(oldStartNode) === rrnodeMirror.getId(newEndNode)) {
|
|
5010
|
-
|
|
5011
|
-
|
|
5012
|
-
|
|
5013
|
-
|
|
5019
|
+
try {
|
|
5020
|
+
parentNode.insertBefore(oldStartNode, oldEndNode.nextSibling);
|
|
5021
|
+
}
|
|
5022
|
+
catch (e) {
|
|
5023
|
+
console.error(e, parentNode, oldStartNode, oldEndNode);
|
|
5024
|
+
diff(oldStartNode, newEndNode, replayer, rrnodeMirror);
|
|
5025
|
+
oldStartNode = oldChildren[++oldStartIndex];
|
|
5026
|
+
newEndNode = newChildren[--newEndIndex];
|
|
5027
|
+
}
|
|
5014
5028
|
}
|
|
5015
5029
|
else if (replayer.mirror.getId(oldEndNode) === rrnodeMirror.getId(newStartNode)) {
|
|
5016
|
-
|
|
5017
|
-
|
|
5018
|
-
|
|
5019
|
-
|
|
5030
|
+
try {
|
|
5031
|
+
parentNode.insertBefore(oldEndNode, oldStartNode);
|
|
5032
|
+
}
|
|
5033
|
+
catch (e) {
|
|
5034
|
+
console.error(e, parentNode, oldEndNode, oldStartNode);
|
|
5035
|
+
diff(oldEndNode, newStartNode, replayer, rrnodeMirror);
|
|
5036
|
+
oldEndNode = oldChildren[--oldEndIndex];
|
|
5037
|
+
newStartNode = newChildren[++newStartIndex];
|
|
5038
|
+
}
|
|
5020
5039
|
}
|
|
5021
5040
|
else {
|
|
5022
5041
|
if (!oldIdToIndex) {
|
|
@@ -5030,21 +5049,31 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
|
|
|
5030
5049
|
indexInOld = oldIdToIndex[rrnodeMirror.getId(newStartNode)];
|
|
5031
5050
|
if (indexInOld) {
|
|
5032
5051
|
const nodeToMove = oldChildren[indexInOld];
|
|
5033
|
-
|
|
5034
|
-
|
|
5035
|
-
|
|
5052
|
+
try {
|
|
5053
|
+
parentNode.insertBefore(nodeToMove, oldStartNode);
|
|
5054
|
+
}
|
|
5055
|
+
catch (e) {
|
|
5056
|
+
console.error(e, parentNode, nodeToMove, oldStartNode);
|
|
5057
|
+
diff(nodeToMove, newStartNode, replayer, rrnodeMirror);
|
|
5058
|
+
oldChildren[indexInOld] = undefined;
|
|
5059
|
+
}
|
|
5036
5060
|
}
|
|
5037
5061
|
else {
|
|
5038
5062
|
const newNode = createOrGetNode(newStartNode, replayer.mirror, rrnodeMirror);
|
|
5039
5063
|
if (((_a = replayer.mirror.getMeta(parentNode)) === null || _a === void 0 ? void 0 : _a.type) === NodeType$1.Document &&
|
|
5040
5064
|
((_b = replayer.mirror.getMeta(newNode)) === null || _b === void 0 ? void 0 : _b.type) === NodeType$1.Element &&
|
|
5041
|
-
|
|
5042
|
-
parentNode.removeChild(
|
|
5065
|
+
parentNode.documentElement) {
|
|
5066
|
+
parentNode.removeChild(parentNode.documentElement);
|
|
5043
5067
|
oldChildren[oldStartIndex] = undefined;
|
|
5044
5068
|
oldStartNode = undefined;
|
|
5045
5069
|
}
|
|
5046
|
-
|
|
5047
|
-
|
|
5070
|
+
try {
|
|
5071
|
+
parentNode.insertBefore(newNode, oldStartNode || null);
|
|
5072
|
+
}
|
|
5073
|
+
catch (e) {
|
|
5074
|
+
console.error(e, parentNode, newNode, oldStartNode || null);
|
|
5075
|
+
diff(newNode, newStartNode, replayer, rrnodeMirror);
|
|
5076
|
+
}
|
|
5048
5077
|
}
|
|
5049
5078
|
newStartNode = newChildren[++newStartIndex];
|
|
5050
5079
|
}
|
|
@@ -5059,8 +5088,13 @@ function diffChildren(oldChildren, newChildren, parentNode, replayer, rrnodeMirr
|
|
|
5059
5088
|
});
|
|
5060
5089
|
for (; newStartIndex <= newEndIndex; ++newStartIndex) {
|
|
5061
5090
|
const newNode = createOrGetNode(newChildren[newStartIndex], replayer.mirror, rrnodeMirror);
|
|
5062
|
-
|
|
5063
|
-
|
|
5091
|
+
try {
|
|
5092
|
+
parentNode.insertBefore(newNode, referenceNode);
|
|
5093
|
+
}
|
|
5094
|
+
catch (e) {
|
|
5095
|
+
console.error(e, parentNode, newNode, referenceNode);
|
|
5096
|
+
diff(newNode, newChildren[newStartIndex], replayer, rrnodeMirror);
|
|
5097
|
+
}
|
|
5064
5098
|
}
|
|
5065
5099
|
}
|
|
5066
5100
|
else if (newStartIndex > newEndIndex) {
|
|
@@ -5114,8 +5148,7 @@ function getNestedRule(rules, position) {
|
|
|
5114
5148
|
return rule;
|
|
5115
5149
|
}
|
|
5116
5150
|
else {
|
|
5117
|
-
return getNestedRule(
|
|
5118
|
-
.cssRules, position.slice(2));
|
|
5151
|
+
return getNestedRule(rule.cssRules[position[1]].cssRules, position.slice(2));
|
|
5119
5152
|
}
|
|
5120
5153
|
}
|
|
5121
5154
|
var StyleRuleType;
|