@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.
@@ -535,7 +535,7 @@ function diff(oldTree, newTree, replayer, rrnodeMirror) {
535
535
  break;
536
536
  }
537
537
  case NodeType$1.Element: {
538
- const oldElement = (oldTree);
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 = (oldTree);
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, (oldTree)));
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 = (oldTree)
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
- parentNode.insertBefore(oldStartNode, oldEndNode.nextSibling);
651
- diff(oldStartNode, newEndNode, replayer, rrnodeMirror);
652
- oldStartNode = oldChildren[++oldStartIndex];
653
- newEndNode = newChildren[--newEndIndex];
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
- parentNode.insertBefore(oldEndNode, oldStartNode);
657
- diff(oldEndNode, newStartNode, replayer, rrnodeMirror);
658
- oldEndNode = oldChildren[--oldEndIndex];
659
- newStartNode = newChildren[++newStartIndex];
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
- parentNode.insertBefore(nodeToMove, oldStartNode);
674
- diff(nodeToMove, newStartNode, replayer, rrnodeMirror);
675
- oldChildren[indexInOld] = undefined;
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
- (parentNode).documentElement) {
682
- parentNode.removeChild((parentNode).documentElement);
695
+ parentNode.documentElement) {
696
+ parentNode.removeChild(parentNode.documentElement);
683
697
  oldChildren[oldStartIndex] = undefined;
684
698
  oldStartNode = undefined;
685
699
  }
686
- parentNode.insertBefore(newNode, oldStartNode || null);
687
- diff(newNode, newStartNode, replayer, rrnodeMirror);
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
- parentNode.insertBefore(newNode, referenceNode);
703
- diff(newNode, newChildren[newStartIndex], replayer, rrnodeMirror);
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((rule).cssRules[position[1]]
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 = (oldTree);
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 = (oldTree);
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, (oldTree)));
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 = (oldTree)
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
- parentNode.insertBefore(oldStartNode, oldEndNode.nextSibling);
1560
- diff(oldStartNode, newEndNode, replayer, rrnodeMirror);
1561
- oldStartNode = oldChildren[++oldStartIndex];
1562
- newEndNode = newChildren[--newEndIndex];
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
- parentNode.insertBefore(oldEndNode, oldStartNode);
1566
- diff(oldEndNode, newStartNode, replayer, rrnodeMirror);
1567
- oldEndNode = oldChildren[--oldEndIndex];
1568
- newStartNode = newChildren[++newStartIndex];
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
- parentNode.insertBefore(nodeToMove, oldStartNode);
1583
- diff(nodeToMove, newStartNode, replayer, rrnodeMirror);
1584
- oldChildren[indexInOld] = undefined;
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
- (parentNode).documentElement) {
1591
- parentNode.removeChild((parentNode).documentElement);
1614
+ parentNode.documentElement) {
1615
+ parentNode.removeChild(parentNode.documentElement);
1592
1616
  oldChildren[oldStartIndex] = undefined;
1593
1617
  oldStartNode = undefined;
1594
1618
  }
1595
- parentNode.insertBefore(newNode, oldStartNode || null);
1596
- diff(newNode, newStartNode, replayer, rrnodeMirror);
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
- parentNode.insertBefore(newNode, referenceNode);
1612
- diff(newNode, newChildren[newStartIndex], replayer, rrnodeMirror);
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((rule).cssRules[position[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 = (oldTree);
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 = (oldTree);
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, (oldTree)));
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 = (oldTree)
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
- parentNode.insertBefore(oldStartNode, oldEndNode.nextSibling);
1560
- diff(oldStartNode, newEndNode, replayer, rrnodeMirror);
1561
- oldStartNode = oldChildren[++oldStartIndex];
1562
- newEndNode = newChildren[--newEndIndex];
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
- parentNode.insertBefore(oldEndNode, oldStartNode);
1566
- diff(oldEndNode, newStartNode, replayer, rrnodeMirror);
1567
- oldEndNode = oldChildren[--oldEndIndex];
1568
- newStartNode = newChildren[++newStartIndex];
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
- parentNode.insertBefore(nodeToMove, oldStartNode);
1583
- diff(nodeToMove, newStartNode, replayer, rrnodeMirror);
1584
- oldChildren[indexInOld] = undefined;
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
- (parentNode).documentElement) {
1591
- parentNode.removeChild((parentNode).documentElement);
1614
+ parentNode.documentElement) {
1615
+ parentNode.removeChild(parentNode.documentElement);
1592
1616
  oldChildren[oldStartIndex] = undefined;
1593
1617
  oldStartNode = undefined;
1594
1618
  }
1595
- parentNode.insertBefore(newNode, oldStartNode || null);
1596
- diff(newNode, newStartNode, replayer, rrnodeMirror);
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
- parentNode.insertBefore(newNode, referenceNode);
1612
- diff(newNode, newChildren[newStartIndex], replayer, rrnodeMirror);
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((rule).cssRules[position[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 = (oldTree);
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 = (oldTree);
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, (oldTree)));
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 = (oldTree)
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
- parentNode.insertBefore(oldStartNode, oldEndNode.nextSibling);
5011
- diff(oldStartNode, newEndNode, replayer, rrnodeMirror);
5012
- oldStartNode = oldChildren[++oldStartIndex];
5013
- newEndNode = newChildren[--newEndIndex];
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
- parentNode.insertBefore(oldEndNode, oldStartNode);
5017
- diff(oldEndNode, newStartNode, replayer, rrnodeMirror);
5018
- oldEndNode = oldChildren[--oldEndIndex];
5019
- newStartNode = newChildren[++newStartIndex];
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
- parentNode.insertBefore(nodeToMove, oldStartNode);
5034
- diff(nodeToMove, newStartNode, replayer, rrnodeMirror);
5035
- oldChildren[indexInOld] = undefined;
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
- (parentNode).documentElement) {
5042
- parentNode.removeChild((parentNode).documentElement);
5065
+ parentNode.documentElement) {
5066
+ parentNode.removeChild(parentNode.documentElement);
5043
5067
  oldChildren[oldStartIndex] = undefined;
5044
5068
  oldStartNode = undefined;
5045
5069
  }
5046
- parentNode.insertBefore(newNode, oldStartNode || null);
5047
- diff(newNode, newStartNode, replayer, rrnodeMirror);
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
- parentNode.insertBefore(newNode, referenceNode);
5063
- diff(newNode, newChildren[newStartIndex], replayer, rrnodeMirror);
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((rule).cssRules[position[1]]
5118
- .cssRules, position.slice(2));
5151
+ return getNestedRule(rule.cssRules[position[1]].cssRules, position.slice(2));
5119
5152
  }
5120
5153
  }
5121
5154
  var StyleRuleType;