@posthog/rrweb-snapshot 0.0.55 → 0.0.57
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/record.cjs +1012 -13
- package/dist/record.cjs.map +1 -1
- package/dist/record.d.cts +4 -0
- package/dist/record.d.ts +4 -0
- package/dist/record.js +1029 -29
- package/dist/record.js.map +1 -1
- package/dist/record.umd.cjs +955 -976
- package/dist/record.umd.cjs.map +3 -3
- package/dist/record.umd.min.cjs +1 -1
- package/dist/record.umd.min.cjs.map +4 -4
- package/dist/rrweb-snapshot.cjs +1 -1
- package/dist/rrweb-snapshot.js +26 -26
- package/dist/rrweb-snapshot.umd.cjs +26 -4
- package/dist/rrweb-snapshot.umd.cjs.map +2 -2
- package/dist/rrweb-snapshot.umd.min.cjs +10 -10
- package/dist/rrweb-snapshot.umd.min.cjs.map +2 -2
- package/package.json +3 -3
- package/dist/record-BhFABPFv.js +0 -1016
- package/dist/record-BhFABPFv.js.map +0 -1
- package/dist/record-Rc5ocxPN.cjs +0 -1015
- package/dist/record-Rc5ocxPN.cjs.map +0 -1
- package/dist/record-Rc5ocxPN.umd.cjs +0 -1593
- package/dist/record-Rc5ocxPN.umd.cjs.map +0 -7
- package/dist/record-Rc5ocxPN.umd.min.cjs +0 -20
- package/dist/record-Rc5ocxPN.umd.min.cjs.map +0 -7
package/dist/record.umd.cjs
CHANGED
|
@@ -559,1042 +559,1007 @@ var require_types_BjupQhwp = __commonJS({
|
|
|
559
559
|
}
|
|
560
560
|
});
|
|
561
561
|
|
|
562
|
-
// dist/record
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
562
|
+
// dist/record.cjs
|
|
563
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
564
|
+
var types = require_types_BjupQhwp();
|
|
565
|
+
var _id = 1;
|
|
566
|
+
var tagNameRegex = new RegExp("[^a-z0-9-_:]");
|
|
567
|
+
var IGNORED_NODE = -2;
|
|
568
|
+
function genId() {
|
|
569
|
+
return _id++;
|
|
570
|
+
}
|
|
571
|
+
function getValidTagName(element) {
|
|
572
|
+
if (element instanceof HTMLFormElement) {
|
|
573
|
+
return "form";
|
|
574
|
+
}
|
|
575
|
+
const processedTagName = types.toLowerCase(element.tagName);
|
|
576
|
+
if (tagNameRegex.test(processedTagName)) {
|
|
577
|
+
return "div";
|
|
578
|
+
}
|
|
579
|
+
return processedTagName;
|
|
580
|
+
}
|
|
581
|
+
var canvasService;
|
|
582
|
+
var canvasCtx;
|
|
583
|
+
var SRCSET_NOT_SPACES = /^[^ \t\n\r\u000c]+/;
|
|
584
|
+
var SRCSET_COMMAS_OR_SPACES = /^[, \t\n\r\u000c]+/;
|
|
585
|
+
function getAbsoluteSrcsetString(doc, attributeValue) {
|
|
586
|
+
if (attributeValue.trim() === "") {
|
|
587
|
+
return attributeValue;
|
|
588
|
+
}
|
|
589
|
+
let pos = 0;
|
|
590
|
+
function collectCharacters(regEx) {
|
|
591
|
+
let chars;
|
|
592
|
+
const match = regEx.exec(attributeValue.substring(pos));
|
|
593
|
+
if (match) {
|
|
594
|
+
chars = match[0];
|
|
595
|
+
pos += chars.length;
|
|
596
|
+
return chars;
|
|
597
|
+
}
|
|
598
|
+
return "";
|
|
599
|
+
}
|
|
600
|
+
const output = [];
|
|
601
|
+
while (true) {
|
|
602
|
+
collectCharacters(SRCSET_COMMAS_OR_SPACES);
|
|
603
|
+
if (pos >= attributeValue.length) {
|
|
604
|
+
break;
|
|
605
|
+
}
|
|
606
|
+
let url = collectCharacters(SRCSET_NOT_SPACES);
|
|
607
|
+
if (url.slice(-1) === ",") {
|
|
608
|
+
url = absoluteToDoc(doc, url.substring(0, url.length - 1));
|
|
609
|
+
output.push(url);
|
|
610
|
+
} else {
|
|
611
|
+
let descriptorsStr = "";
|
|
612
|
+
url = absoluteToDoc(doc, url);
|
|
613
|
+
let inParens = false;
|
|
603
614
|
while (true) {
|
|
604
|
-
|
|
605
|
-
if (
|
|
615
|
+
const c = attributeValue.charAt(pos);
|
|
616
|
+
if (c === "") {
|
|
617
|
+
output.push((url + descriptorsStr).trim());
|
|
606
618
|
break;
|
|
607
|
-
}
|
|
608
|
-
|
|
609
|
-
if (url.slice(-1) === ",") {
|
|
610
|
-
url = absoluteToDoc(doc, url.substring(0, url.length - 1));
|
|
611
|
-
output.push(url);
|
|
612
|
-
} else {
|
|
613
|
-
let descriptorsStr = "";
|
|
614
|
-
url = absoluteToDoc(doc, url);
|
|
615
|
-
let inParens = false;
|
|
616
|
-
while (true) {
|
|
617
|
-
const c = attributeValue.charAt(pos);
|
|
618
|
-
if (c === "") {
|
|
619
|
-
output.push((url + descriptorsStr).trim());
|
|
620
|
-
break;
|
|
621
|
-
} else if (!inParens) {
|
|
622
|
-
if (c === ",") {
|
|
623
|
-
pos += 1;
|
|
624
|
-
output.push((url + descriptorsStr).trim());
|
|
625
|
-
break;
|
|
626
|
-
} else if (c === "(") {
|
|
627
|
-
inParens = true;
|
|
628
|
-
}
|
|
629
|
-
} else {
|
|
630
|
-
if (c === ")") {
|
|
631
|
-
inParens = false;
|
|
632
|
-
}
|
|
633
|
-
}
|
|
634
|
-
descriptorsStr += c;
|
|
619
|
+
} else if (!inParens) {
|
|
620
|
+
if (c === ",") {
|
|
635
621
|
pos += 1;
|
|
622
|
+
output.push((url + descriptorsStr).trim());
|
|
623
|
+
break;
|
|
624
|
+
} else if (c === "(") {
|
|
625
|
+
inParens = true;
|
|
626
|
+
}
|
|
627
|
+
} else {
|
|
628
|
+
if (c === ")") {
|
|
629
|
+
inParens = false;
|
|
636
630
|
}
|
|
637
631
|
}
|
|
632
|
+
descriptorsStr += c;
|
|
633
|
+
pos += 1;
|
|
638
634
|
}
|
|
639
|
-
return output.join(", ");
|
|
640
|
-
}
|
|
641
|
-
var cachedDocument = /* @__PURE__ */ new WeakMap();
|
|
642
|
-
function absoluteToDoc(doc, attributeValue) {
|
|
643
|
-
if (!attributeValue || attributeValue.trim() === "") {
|
|
644
|
-
return attributeValue;
|
|
645
|
-
}
|
|
646
|
-
return getHref(doc, attributeValue);
|
|
647
|
-
}
|
|
648
|
-
function isSVGElement(el) {
|
|
649
|
-
return Boolean(el.tagName === "svg" || el.ownerSVGElement);
|
|
650
635
|
}
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
636
|
+
}
|
|
637
|
+
return output.join(", ");
|
|
638
|
+
}
|
|
639
|
+
var cachedDocument = /* @__PURE__ */ new WeakMap();
|
|
640
|
+
function absoluteToDoc(doc, attributeValue) {
|
|
641
|
+
if (!attributeValue || attributeValue.trim() === "") {
|
|
642
|
+
return attributeValue;
|
|
643
|
+
}
|
|
644
|
+
return getHref(doc, attributeValue);
|
|
645
|
+
}
|
|
646
|
+
function isSVGElement(el) {
|
|
647
|
+
return Boolean(el.tagName === "svg" || el.ownerSVGElement);
|
|
648
|
+
}
|
|
649
|
+
function getHref(doc, customHref) {
|
|
650
|
+
let a = cachedDocument.get(doc);
|
|
651
|
+
if (!a) {
|
|
652
|
+
a = doc.createElement("a");
|
|
653
|
+
cachedDocument.set(doc, a);
|
|
654
|
+
}
|
|
655
|
+
if (!customHref) {
|
|
656
|
+
customHref = "";
|
|
657
|
+
} else if (customHref.startsWith("blob:") || customHref.startsWith("data:")) {
|
|
658
|
+
return customHref;
|
|
659
|
+
}
|
|
660
|
+
a.setAttribute("href", customHref);
|
|
661
|
+
return a.href;
|
|
662
|
+
}
|
|
663
|
+
function transformAttribute(doc, tagName, name, value, element, dataURLOptions) {
|
|
664
|
+
if (!value) {
|
|
665
|
+
return value;
|
|
666
|
+
}
|
|
667
|
+
if (name === "src" || name === "href" && !(tagName === "use" && value[0] === "#")) {
|
|
668
|
+
const transformedValue = absoluteToDoc(doc, value);
|
|
669
|
+
if (tagName === "img" && transformedValue.startsWith("data:") && element) {
|
|
670
|
+
const img = element;
|
|
671
|
+
let processedDataURL = transformedValue;
|
|
672
|
+
if ((dataURLOptions == null ? void 0 : dataURLOptions.type) || (dataURLOptions == null ? void 0 : dataURLOptions.quality) !== void 0) {
|
|
673
|
+
processedDataURL = types.recompressBase64Image(
|
|
674
|
+
img,
|
|
675
|
+
transformedValue,
|
|
676
|
+
dataURLOptions.type,
|
|
677
|
+
dataURLOptions.quality
|
|
678
|
+
);
|
|
656
679
|
}
|
|
657
|
-
if (
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
680
|
+
if (dataURLOptions == null ? void 0 : dataURLOptions.maxBase64ImageLength) {
|
|
681
|
+
processedDataURL = types.checkDataURLSize(
|
|
682
|
+
processedDataURL,
|
|
683
|
+
dataURLOptions.maxBase64ImageLength
|
|
684
|
+
);
|
|
661
685
|
}
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
686
|
+
return processedDataURL;
|
|
687
|
+
}
|
|
688
|
+
return transformedValue;
|
|
689
|
+
} else if (name === "xlink:href" && value[0] !== "#") {
|
|
690
|
+
return absoluteToDoc(doc, value);
|
|
691
|
+
} else if (name === "background" && (tagName === "table" || tagName === "td" || tagName === "th")) {
|
|
692
|
+
return absoluteToDoc(doc, value);
|
|
693
|
+
} else if (name === "srcset") {
|
|
694
|
+
return getAbsoluteSrcsetString(doc, value);
|
|
695
|
+
} else if (name === "style") {
|
|
696
|
+
return types.absolutifyURLs(value, getHref(doc));
|
|
697
|
+
} else if (tagName === "object" && name === "data") {
|
|
698
|
+
return absoluteToDoc(doc, value);
|
|
699
|
+
}
|
|
700
|
+
return value;
|
|
701
|
+
}
|
|
702
|
+
function ignoreAttribute(tagName, name, _value) {
|
|
703
|
+
return (tagName === "video" || tagName === "audio") && name === "autoplay";
|
|
704
|
+
}
|
|
705
|
+
function _isBlockedElement(element, blockClass, blockSelector) {
|
|
706
|
+
try {
|
|
707
|
+
if (typeof blockClass === "string") {
|
|
708
|
+
if (element.classList.contains(blockClass)) {
|
|
709
|
+
return true;
|
|
668
710
|
}
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
if ((dataURLOptions == null ? void 0 : dataURLOptions.type) || (dataURLOptions == null ? void 0 : dataURLOptions.quality) !== void 0) {
|
|
675
|
-
processedDataURL = types2.recompressBase64Image(
|
|
676
|
-
img,
|
|
677
|
-
transformedValue,
|
|
678
|
-
dataURLOptions.type,
|
|
679
|
-
dataURLOptions.quality
|
|
680
|
-
);
|
|
681
|
-
}
|
|
682
|
-
if (dataURLOptions == null ? void 0 : dataURLOptions.maxBase64ImageLength) {
|
|
683
|
-
processedDataURL = types2.checkDataURLSize(
|
|
684
|
-
processedDataURL,
|
|
685
|
-
dataURLOptions.maxBase64ImageLength
|
|
686
|
-
);
|
|
687
|
-
}
|
|
688
|
-
return processedDataURL;
|
|
711
|
+
} else {
|
|
712
|
+
for (let eIndex = element.classList.length; eIndex--; ) {
|
|
713
|
+
const className = element.classList[eIndex];
|
|
714
|
+
if (blockClass.test(className)) {
|
|
715
|
+
return true;
|
|
689
716
|
}
|
|
690
|
-
return transformedValue;
|
|
691
|
-
} else if (name === "xlink:href" && value[0] !== "#") {
|
|
692
|
-
return absoluteToDoc(doc, value);
|
|
693
|
-
} else if (name === "background" && (tagName === "table" || tagName === "td" || tagName === "th")) {
|
|
694
|
-
return absoluteToDoc(doc, value);
|
|
695
|
-
} else if (name === "srcset") {
|
|
696
|
-
return getAbsoluteSrcsetString(doc, value);
|
|
697
|
-
} else if (name === "style") {
|
|
698
|
-
return types2.absolutifyURLs(value, getHref(doc));
|
|
699
|
-
} else if (tagName === "object" && name === "data") {
|
|
700
|
-
return absoluteToDoc(doc, value);
|
|
701
717
|
}
|
|
702
|
-
return value;
|
|
703
718
|
}
|
|
704
|
-
|
|
705
|
-
return (
|
|
719
|
+
if (blockSelector) {
|
|
720
|
+
return element.matches(blockSelector);
|
|
706
721
|
}
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
722
|
+
} catch (e) {
|
|
723
|
+
}
|
|
724
|
+
return false;
|
|
725
|
+
}
|
|
726
|
+
function classMatchesRegex(node, regex, checkAncestors) {
|
|
727
|
+
if (!node) return false;
|
|
728
|
+
if (node.nodeType !== node.ELEMENT_NODE) {
|
|
729
|
+
if (!checkAncestors) return false;
|
|
730
|
+
return classMatchesRegex(types.index.parentNode(node), regex, checkAncestors);
|
|
731
|
+
}
|
|
732
|
+
for (let eIndex = node.classList.length; eIndex--; ) {
|
|
733
|
+
const className = node.classList[eIndex];
|
|
734
|
+
if (regex.test(className)) {
|
|
735
|
+
return true;
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
if (!checkAncestors) return false;
|
|
739
|
+
return classMatchesRegex(types.index.parentNode(node), regex, checkAncestors);
|
|
740
|
+
}
|
|
741
|
+
function needMaskingText(node, maskTextClass, maskTextSelector, checkAncestors) {
|
|
742
|
+
let el;
|
|
743
|
+
if (types.isElement(node)) {
|
|
744
|
+
el = node;
|
|
745
|
+
if (!types.index.childNodes(el).length) {
|
|
726
746
|
return false;
|
|
727
747
|
}
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
if (
|
|
737
|
-
return true;
|
|
738
|
-
}
|
|
739
|
-
}
|
|
740
|
-
if (!checkAncestors) return false;
|
|
741
|
-
return classMatchesRegex(types2.index.parentNode(node), regex, checkAncestors);
|
|
742
|
-
}
|
|
743
|
-
function needMaskingText(node, maskTextClass, maskTextSelector, checkAncestors) {
|
|
744
|
-
let el;
|
|
745
|
-
if (types2.isElement(node)) {
|
|
746
|
-
el = node;
|
|
747
|
-
if (!types2.index.childNodes(el).length) {
|
|
748
|
-
return false;
|
|
749
|
-
}
|
|
750
|
-
} else if (types2.index.parentElement(node) === null) {
|
|
751
|
-
return false;
|
|
748
|
+
} else if (types.index.parentElement(node) === null) {
|
|
749
|
+
return false;
|
|
750
|
+
} else {
|
|
751
|
+
el = types.index.parentElement(node);
|
|
752
|
+
}
|
|
753
|
+
try {
|
|
754
|
+
if (typeof maskTextClass === "string") {
|
|
755
|
+
if (checkAncestors) {
|
|
756
|
+
if (el.closest(`.${maskTextClass}`)) return true;
|
|
752
757
|
} else {
|
|
753
|
-
el
|
|
754
|
-
}
|
|
755
|
-
try {
|
|
756
|
-
if (typeof maskTextClass === "string") {
|
|
757
|
-
if (checkAncestors) {
|
|
758
|
-
if (el.closest(`.${maskTextClass}`)) return true;
|
|
759
|
-
} else {
|
|
760
|
-
if (el.classList.contains(maskTextClass)) return true;
|
|
761
|
-
}
|
|
762
|
-
} else {
|
|
763
|
-
if (classMatchesRegex(el, maskTextClass, checkAncestors)) return true;
|
|
764
|
-
}
|
|
765
|
-
if (maskTextSelector) {
|
|
766
|
-
if (checkAncestors) {
|
|
767
|
-
if (el.closest(maskTextSelector)) return true;
|
|
768
|
-
} else {
|
|
769
|
-
if (el.matches(maskTextSelector)) return true;
|
|
770
|
-
}
|
|
771
|
-
}
|
|
772
|
-
} catch (e) {
|
|
758
|
+
if (el.classList.contains(maskTextClass)) return true;
|
|
773
759
|
}
|
|
774
|
-
|
|
760
|
+
} else {
|
|
761
|
+
if (classMatchesRegex(el, maskTextClass, checkAncestors)) return true;
|
|
775
762
|
}
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
let fired = false;
|
|
782
|
-
let readyState;
|
|
783
|
-
try {
|
|
784
|
-
readyState = win.document.readyState;
|
|
785
|
-
} catch (error) {
|
|
786
|
-
return;
|
|
787
|
-
}
|
|
788
|
-
if (readyState !== "complete") {
|
|
789
|
-
const timer = setTimeout(() => {
|
|
790
|
-
if (!fired) {
|
|
791
|
-
listener();
|
|
792
|
-
fired = true;
|
|
793
|
-
}
|
|
794
|
-
}, iframeLoadTimeout);
|
|
795
|
-
iframeEl.addEventListener("load", () => {
|
|
796
|
-
clearTimeout(timer);
|
|
797
|
-
fired = true;
|
|
798
|
-
listener();
|
|
799
|
-
});
|
|
800
|
-
return;
|
|
801
|
-
}
|
|
802
|
-
const blankUrl = "about:blank";
|
|
803
|
-
if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === "") {
|
|
804
|
-
setTimeout(listener, 0);
|
|
805
|
-
return iframeEl.addEventListener("load", listener);
|
|
763
|
+
if (maskTextSelector) {
|
|
764
|
+
if (checkAncestors) {
|
|
765
|
+
if (el.closest(maskTextSelector)) return true;
|
|
766
|
+
} else {
|
|
767
|
+
if (el.matches(maskTextSelector)) return true;
|
|
806
768
|
}
|
|
807
|
-
iframeEl.addEventListener("load", listener);
|
|
808
769
|
}
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
770
|
+
} catch (e) {
|
|
771
|
+
}
|
|
772
|
+
return false;
|
|
773
|
+
}
|
|
774
|
+
function onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {
|
|
775
|
+
const win = iframeEl.contentWindow;
|
|
776
|
+
if (!win) {
|
|
777
|
+
return;
|
|
778
|
+
}
|
|
779
|
+
let fired = false;
|
|
780
|
+
let readyState;
|
|
781
|
+
try {
|
|
782
|
+
readyState = win.document.readyState;
|
|
783
|
+
} catch (error) {
|
|
784
|
+
return;
|
|
785
|
+
}
|
|
786
|
+
if (readyState !== "complete") {
|
|
787
|
+
const timer = setTimeout(() => {
|
|
788
|
+
if (!fired) {
|
|
827
789
|
listener();
|
|
828
|
-
|
|
829
|
-
}
|
|
830
|
-
function serializeNode(n, options) {
|
|
831
|
-
const {
|
|
832
|
-
doc,
|
|
833
|
-
mirror,
|
|
834
|
-
blockClass,
|
|
835
|
-
blockSelector,
|
|
836
|
-
needsMask,
|
|
837
|
-
inlineStylesheet,
|
|
838
|
-
maskInputOptions = {},
|
|
839
|
-
maskTextFn,
|
|
840
|
-
maskInputFn,
|
|
841
|
-
dataURLOptions = {},
|
|
842
|
-
inlineImages,
|
|
843
|
-
recordCanvas,
|
|
844
|
-
keepIframeSrcFn,
|
|
845
|
-
newlyAddedElement = false
|
|
846
|
-
} = options;
|
|
847
|
-
const rootId = getRootId(doc, mirror);
|
|
848
|
-
switch (n.nodeType) {
|
|
849
|
-
case n.DOCUMENT_NODE:
|
|
850
|
-
if (n.compatMode !== "CSS1Compat") {
|
|
851
|
-
return {
|
|
852
|
-
type: types2.NodeType$1.Document,
|
|
853
|
-
childNodes: [],
|
|
854
|
-
compatMode: n.compatMode
|
|
855
|
-
// probably "BackCompat"
|
|
856
|
-
};
|
|
857
|
-
} else {
|
|
858
|
-
return {
|
|
859
|
-
type: types2.NodeType$1.Document,
|
|
860
|
-
childNodes: []
|
|
861
|
-
};
|
|
862
|
-
}
|
|
863
|
-
case n.DOCUMENT_TYPE_NODE:
|
|
864
|
-
return {
|
|
865
|
-
type: types2.NodeType$1.DocumentType,
|
|
866
|
-
name: n.name,
|
|
867
|
-
publicId: n.publicId,
|
|
868
|
-
systemId: n.systemId,
|
|
869
|
-
rootId
|
|
870
|
-
};
|
|
871
|
-
case n.ELEMENT_NODE:
|
|
872
|
-
return serializeElementNode(n, {
|
|
873
|
-
doc,
|
|
874
|
-
blockClass,
|
|
875
|
-
blockSelector,
|
|
876
|
-
inlineStylesheet,
|
|
877
|
-
maskInputOptions,
|
|
878
|
-
maskInputFn,
|
|
879
|
-
dataURLOptions,
|
|
880
|
-
inlineImages,
|
|
881
|
-
recordCanvas,
|
|
882
|
-
keepIframeSrcFn,
|
|
883
|
-
newlyAddedElement,
|
|
884
|
-
rootId
|
|
885
|
-
});
|
|
886
|
-
case n.TEXT_NODE:
|
|
887
|
-
return serializeTextNode(n, {
|
|
888
|
-
doc,
|
|
889
|
-
needsMask,
|
|
890
|
-
maskTextFn,
|
|
891
|
-
rootId
|
|
892
|
-
});
|
|
893
|
-
case n.CDATA_SECTION_NODE:
|
|
894
|
-
return {
|
|
895
|
-
type: types2.NodeType$1.CDATA,
|
|
896
|
-
textContent: "",
|
|
897
|
-
rootId
|
|
898
|
-
};
|
|
899
|
-
case n.COMMENT_NODE:
|
|
900
|
-
return {
|
|
901
|
-
type: types2.NodeType$1.Comment,
|
|
902
|
-
textContent: types2.index.textContent(n) || "",
|
|
903
|
-
rootId
|
|
904
|
-
};
|
|
905
|
-
default:
|
|
906
|
-
return false;
|
|
907
|
-
}
|
|
908
|
-
}
|
|
909
|
-
function getRootId(doc, mirror) {
|
|
910
|
-
if (!mirror.hasNode(doc)) return void 0;
|
|
911
|
-
const docId = mirror.getId(doc);
|
|
912
|
-
return docId === 1 ? void 0 : docId;
|
|
913
|
-
}
|
|
914
|
-
function serializeTextNode(n, options) {
|
|
915
|
-
var _a;
|
|
916
|
-
const { needsMask, maskTextFn, rootId } = options;
|
|
917
|
-
const parent = types2.index.parentNode(n);
|
|
918
|
-
const parentTagName = parent && parent.tagName;
|
|
919
|
-
let text = types2.index.textContent(n);
|
|
920
|
-
const isStyle = parentTagName === "STYLE" ? true : void 0;
|
|
921
|
-
const isScript = parentTagName === "SCRIPT" ? true : void 0;
|
|
922
|
-
if (isStyle && text) {
|
|
923
|
-
try {
|
|
924
|
-
if (n.nextSibling || n.previousSibling) {
|
|
925
|
-
} else if ((_a = parent.sheet) == null ? void 0 : _a.cssRules) {
|
|
926
|
-
text = types2.stringifyStylesheet(parent.sheet);
|
|
927
|
-
}
|
|
928
|
-
} catch (err) {
|
|
929
|
-
console.warn(
|
|
930
|
-
`Cannot get CSS styles from text's parentNode. Error: ${err}`,
|
|
931
|
-
n
|
|
932
|
-
);
|
|
933
|
-
}
|
|
934
|
-
text = types2.absolutifyURLs(text, getHref(options.doc));
|
|
935
|
-
}
|
|
936
|
-
if (isScript) {
|
|
937
|
-
text = "SCRIPT_PLACEHOLDER";
|
|
790
|
+
fired = true;
|
|
938
791
|
}
|
|
939
|
-
|
|
940
|
-
|
|
792
|
+
}, iframeLoadTimeout);
|
|
793
|
+
iframeEl.addEventListener("load", () => {
|
|
794
|
+
clearTimeout(timer);
|
|
795
|
+
fired = true;
|
|
796
|
+
listener();
|
|
797
|
+
});
|
|
798
|
+
return;
|
|
799
|
+
}
|
|
800
|
+
const blankUrl = "about:blank";
|
|
801
|
+
if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === "") {
|
|
802
|
+
setTimeout(listener, 0);
|
|
803
|
+
return iframeEl.addEventListener("load", listener);
|
|
804
|
+
}
|
|
805
|
+
iframeEl.addEventListener("load", listener);
|
|
806
|
+
}
|
|
807
|
+
function onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {
|
|
808
|
+
let fired = false;
|
|
809
|
+
let styleSheetLoaded;
|
|
810
|
+
try {
|
|
811
|
+
styleSheetLoaded = link.sheet;
|
|
812
|
+
} catch (error) {
|
|
813
|
+
return;
|
|
814
|
+
}
|
|
815
|
+
if (styleSheetLoaded) return;
|
|
816
|
+
const timer = setTimeout(() => {
|
|
817
|
+
if (!fired) {
|
|
818
|
+
listener();
|
|
819
|
+
fired = true;
|
|
820
|
+
}
|
|
821
|
+
}, styleSheetLoadTimeout);
|
|
822
|
+
link.addEventListener("load", () => {
|
|
823
|
+
clearTimeout(timer);
|
|
824
|
+
fired = true;
|
|
825
|
+
listener();
|
|
826
|
+
});
|
|
827
|
+
}
|
|
828
|
+
function serializeNode(n, options) {
|
|
829
|
+
const {
|
|
830
|
+
doc,
|
|
831
|
+
mirror,
|
|
832
|
+
blockClass,
|
|
833
|
+
blockSelector,
|
|
834
|
+
needsMask,
|
|
835
|
+
inlineStylesheet,
|
|
836
|
+
maskInputOptions = {},
|
|
837
|
+
maskTextFn,
|
|
838
|
+
maskInputFn,
|
|
839
|
+
dataURLOptions = {},
|
|
840
|
+
inlineImages,
|
|
841
|
+
recordCanvas,
|
|
842
|
+
keepIframeSrcFn,
|
|
843
|
+
newlyAddedElement = false
|
|
844
|
+
} = options;
|
|
845
|
+
const rootId = getRootId(doc, mirror);
|
|
846
|
+
switch (n.nodeType) {
|
|
847
|
+
case n.DOCUMENT_NODE:
|
|
848
|
+
if (n.compatMode !== "CSS1Compat") {
|
|
849
|
+
return {
|
|
850
|
+
type: types.NodeType$1.Document,
|
|
851
|
+
childNodes: [],
|
|
852
|
+
compatMode: n.compatMode
|
|
853
|
+
// probably "BackCompat"
|
|
854
|
+
};
|
|
855
|
+
} else {
|
|
856
|
+
return {
|
|
857
|
+
type: types.NodeType$1.Document,
|
|
858
|
+
childNodes: []
|
|
859
|
+
};
|
|
941
860
|
}
|
|
861
|
+
case n.DOCUMENT_TYPE_NODE:
|
|
942
862
|
return {
|
|
943
|
-
type:
|
|
944
|
-
|
|
945
|
-
|
|
863
|
+
type: types.NodeType$1.DocumentType,
|
|
864
|
+
name: n.name,
|
|
865
|
+
publicId: n.publicId,
|
|
866
|
+
systemId: n.systemId,
|
|
946
867
|
rootId
|
|
947
868
|
};
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
return Array.from(doc.styleSheets).find((s) => s.href === href);
|
|
951
|
-
}
|
|
952
|
-
function hrefFrom(n) {
|
|
953
|
-
return n.href;
|
|
954
|
-
}
|
|
955
|
-
function serializeElementNode(n, options) {
|
|
956
|
-
var _a, _b;
|
|
957
|
-
const {
|
|
869
|
+
case n.ELEMENT_NODE:
|
|
870
|
+
return serializeElementNode(n, {
|
|
958
871
|
doc,
|
|
959
872
|
blockClass,
|
|
960
873
|
blockSelector,
|
|
961
874
|
inlineStylesheet,
|
|
962
|
-
maskInputOptions
|
|
875
|
+
maskInputOptions,
|
|
963
876
|
maskInputFn,
|
|
964
|
-
dataURLOptions
|
|
877
|
+
dataURLOptions,
|
|
965
878
|
inlineImages,
|
|
966
879
|
recordCanvas,
|
|
967
880
|
keepIframeSrcFn,
|
|
968
|
-
newlyAddedElement
|
|
881
|
+
newlyAddedElement,
|
|
969
882
|
rootId
|
|
970
|
-
}
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
883
|
+
});
|
|
884
|
+
case n.TEXT_NODE:
|
|
885
|
+
return serializeTextNode(n, {
|
|
886
|
+
doc,
|
|
887
|
+
needsMask,
|
|
888
|
+
maskTextFn,
|
|
889
|
+
rootId
|
|
890
|
+
});
|
|
891
|
+
case n.CDATA_SECTION_NODE:
|
|
892
|
+
return {
|
|
893
|
+
type: types.NodeType$1.CDATA,
|
|
894
|
+
textContent: "",
|
|
895
|
+
rootId
|
|
896
|
+
};
|
|
897
|
+
case n.COMMENT_NODE:
|
|
898
|
+
return {
|
|
899
|
+
type: types.NodeType$1.Comment,
|
|
900
|
+
textContent: types.index.textContent(n) || "",
|
|
901
|
+
rootId
|
|
902
|
+
};
|
|
903
|
+
default:
|
|
904
|
+
return false;
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
function getRootId(doc, mirror) {
|
|
908
|
+
if (!mirror.hasNode(doc)) return void 0;
|
|
909
|
+
const docId = mirror.getId(doc);
|
|
910
|
+
return docId === 1 ? void 0 : docId;
|
|
911
|
+
}
|
|
912
|
+
function serializeTextNode(n, options) {
|
|
913
|
+
var _a;
|
|
914
|
+
const { needsMask, maskTextFn, rootId } = options;
|
|
915
|
+
const parent = types.index.parentNode(n);
|
|
916
|
+
const parentTagName = parent && parent.tagName;
|
|
917
|
+
let text = types.index.textContent(n);
|
|
918
|
+
const isStyle = parentTagName === "STYLE" ? true : void 0;
|
|
919
|
+
const isScript = parentTagName === "SCRIPT" ? true : void 0;
|
|
920
|
+
if (isStyle && text) {
|
|
921
|
+
try {
|
|
922
|
+
if (n.nextSibling || n.previousSibling) {
|
|
923
|
+
} else if ((_a = parent.sheet) == null ? void 0 : _a.cssRules) {
|
|
924
|
+
text = types.stringifyStylesheet(parent.sheet);
|
|
925
|
+
}
|
|
926
|
+
} catch (err) {
|
|
927
|
+
console.warn(
|
|
928
|
+
`Cannot get CSS styles from text's parentNode. Error: ${err}`,
|
|
929
|
+
n
|
|
930
|
+
);
|
|
931
|
+
}
|
|
932
|
+
text = types.absolutifyURLs(text, getHref(options.doc));
|
|
933
|
+
}
|
|
934
|
+
if (isScript) {
|
|
935
|
+
text = "SCRIPT_PLACEHOLDER";
|
|
936
|
+
}
|
|
937
|
+
if (!isStyle && !isScript && text && needsMask) {
|
|
938
|
+
text = maskTextFn ? maskTextFn(text, types.index.parentElement(n)) : text.replace(/[\S]/g, "*");
|
|
939
|
+
}
|
|
940
|
+
return {
|
|
941
|
+
type: types.NodeType$1.Text,
|
|
942
|
+
textContent: text || "",
|
|
943
|
+
isStyle,
|
|
944
|
+
rootId
|
|
945
|
+
};
|
|
946
|
+
}
|
|
947
|
+
function findStylesheet(doc, href) {
|
|
948
|
+
return Array.from(doc.styleSheets).find((s) => s.href === href);
|
|
949
|
+
}
|
|
950
|
+
function hrefFrom(n) {
|
|
951
|
+
return n.href;
|
|
952
|
+
}
|
|
953
|
+
function serializeElementNode(n, options) {
|
|
954
|
+
var _a, _b;
|
|
955
|
+
const {
|
|
956
|
+
doc,
|
|
957
|
+
blockClass,
|
|
958
|
+
blockSelector,
|
|
959
|
+
inlineStylesheet,
|
|
960
|
+
maskInputOptions = {},
|
|
961
|
+
maskInputFn,
|
|
962
|
+
dataURLOptions = {},
|
|
963
|
+
inlineImages,
|
|
964
|
+
recordCanvas,
|
|
965
|
+
keepIframeSrcFn,
|
|
966
|
+
newlyAddedElement = false,
|
|
967
|
+
rootId
|
|
968
|
+
} = options;
|
|
969
|
+
const needBlock = _isBlockedElement(n, blockClass, blockSelector);
|
|
970
|
+
const tagName = getValidTagName(n);
|
|
971
|
+
let attributes = {};
|
|
972
|
+
const len = n.attributes.length;
|
|
973
|
+
for (let i = 0; i < len; i++) {
|
|
974
|
+
const attr = n.attributes[i];
|
|
975
|
+
if (!ignoreAttribute(tagName, attr.name, attr.value)) {
|
|
976
|
+
attributes[attr.name] = transformAttribute(
|
|
977
|
+
doc,
|
|
978
|
+
tagName,
|
|
979
|
+
types.toLowerCase(attr.name),
|
|
980
|
+
attr.value,
|
|
981
|
+
n,
|
|
982
|
+
dataURLOptions
|
|
983
|
+
);
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
if (tagName === "link" && inlineStylesheet) {
|
|
987
|
+
const href = hrefFrom(n);
|
|
988
|
+
if (href) {
|
|
989
|
+
let stylesheet = findStylesheet(doc, href);
|
|
990
|
+
if (!stylesheet && href.includes(".css")) {
|
|
991
|
+
const rootDomain = window.location.origin;
|
|
992
|
+
const stylesheetPath = href.replace(window.location.href, "");
|
|
993
|
+
const potentialStylesheetHref = rootDomain + "/" + stylesheetPath;
|
|
994
|
+
stylesheet = findStylesheet(doc, potentialStylesheetHref);
|
|
995
|
+
}
|
|
996
|
+
let cssText = null;
|
|
997
|
+
if (stylesheet) {
|
|
998
|
+
cssText = types.stringifyStylesheet(stylesheet);
|
|
999
|
+
}
|
|
1000
|
+
if (cssText) {
|
|
1001
|
+
delete attributes.rel;
|
|
1002
|
+
delete attributes.href;
|
|
1003
|
+
attributes._cssText = cssText;
|
|
1008
1004
|
}
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
if (tagName === "style" && n.sheet && // TODO: Currently we only try to get dynamic stylesheet when it is an empty style element
|
|
1008
|
+
!(n.innerText || types.index.textContent(n) || "").trim().length) {
|
|
1009
|
+
const cssText = types.stringifyStylesheet(
|
|
1010
|
+
n.sheet
|
|
1011
|
+
);
|
|
1012
|
+
if (cssText) {
|
|
1013
|
+
attributes._cssText = cssText;
|
|
1014
|
+
}
|
|
1015
|
+
}
|
|
1016
|
+
if (tagName === "input" || tagName === "textarea" || tagName === "select") {
|
|
1017
|
+
const value = n.value;
|
|
1018
|
+
const checked = n.checked;
|
|
1019
|
+
if (attributes.type !== "radio" && attributes.type !== "checkbox" && attributes.type !== "submit" && attributes.type !== "button" && value) {
|
|
1020
|
+
attributes.value = types.maskInputValue({
|
|
1021
|
+
element: n,
|
|
1022
|
+
type: types.getInputType(n),
|
|
1023
|
+
tagName,
|
|
1024
|
+
value,
|
|
1025
|
+
maskInputOptions,
|
|
1026
|
+
maskInputFn
|
|
1027
|
+
});
|
|
1028
|
+
} else if (checked) {
|
|
1029
|
+
attributes.checked = checked;
|
|
1030
|
+
}
|
|
1031
|
+
}
|
|
1032
|
+
if (tagName === "option") {
|
|
1033
|
+
if (n.selected && !maskInputOptions["select"]) {
|
|
1034
|
+
attributes.selected = true;
|
|
1035
|
+
} else {
|
|
1036
|
+
delete attributes.selected;
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
if (tagName === "dialog" && n.open) {
|
|
1040
|
+
try {
|
|
1041
|
+
attributes.rr_open_mode = n.matches("dialog:modal") ? "modal" : "non-modal";
|
|
1042
|
+
} catch (e) {
|
|
1043
|
+
attributes.rr_open_mode = "modal";
|
|
1044
|
+
attributes.ph_rr_could_not_detect_modal = true;
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
if (tagName === "canvas" && recordCanvas) {
|
|
1048
|
+
if (n.__context === "2d") {
|
|
1049
|
+
if (!types.is2DCanvasBlank(n)) {
|
|
1050
|
+
attributes.rr_dataURL = n.toDataURL(
|
|
1051
|
+
dataURLOptions.type,
|
|
1052
|
+
dataURLOptions.quality
|
|
1013
1053
|
);
|
|
1014
|
-
if (cssText) {
|
|
1015
|
-
attributes._cssText = cssText;
|
|
1016
|
-
}
|
|
1017
1054
|
}
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
}
|
|
1055
|
+
} else if (!("__context" in n)) {
|
|
1056
|
+
const canvasDataURL = n.toDataURL(
|
|
1057
|
+
dataURLOptions.type,
|
|
1058
|
+
dataURLOptions.quality
|
|
1059
|
+
);
|
|
1060
|
+
const blankCanvas = doc.createElement("canvas");
|
|
1061
|
+
blankCanvas.width = n.width;
|
|
1062
|
+
blankCanvas.height = n.height;
|
|
1063
|
+
const blankCanvasDataURL = blankCanvas.toDataURL(
|
|
1064
|
+
dataURLOptions.type,
|
|
1065
|
+
dataURLOptions.quality
|
|
1066
|
+
);
|
|
1067
|
+
if (canvasDataURL !== blankCanvasDataURL) {
|
|
1068
|
+
attributes.rr_dataURL = canvasDataURL;
|
|
1033
1069
|
}
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1070
|
+
}
|
|
1071
|
+
}
|
|
1072
|
+
if (tagName === "img" && inlineImages) {
|
|
1073
|
+
if (!canvasService) {
|
|
1074
|
+
canvasService = doc.createElement("canvas");
|
|
1075
|
+
canvasCtx = canvasService.getContext("2d");
|
|
1076
|
+
}
|
|
1077
|
+
const image = n;
|
|
1078
|
+
const imageSrc = image.currentSrc || image.getAttribute("src") || "<unknown-src>";
|
|
1079
|
+
const priorCrossOrigin = image.crossOrigin;
|
|
1080
|
+
const recordInlineImage = () => {
|
|
1081
|
+
image.removeEventListener("load", recordInlineImage);
|
|
1082
|
+
try {
|
|
1083
|
+
canvasService.width = image.naturalWidth;
|
|
1084
|
+
canvasService.height = image.naturalHeight;
|
|
1085
|
+
canvasCtx.drawImage(image, 0, 0);
|
|
1086
|
+
attributes.rr_dataURL = canvasService.toDataURL(
|
|
1087
|
+
dataURLOptions.type,
|
|
1088
|
+
dataURLOptions.quality
|
|
1089
|
+
);
|
|
1090
|
+
} catch (err) {
|
|
1091
|
+
if (image.crossOrigin !== "anonymous") {
|
|
1092
|
+
image.crossOrigin = "anonymous";
|
|
1093
|
+
if (image.complete && image.naturalWidth !== 0)
|
|
1094
|
+
recordInlineImage();
|
|
1095
|
+
else image.addEventListener("load", recordInlineImage);
|
|
1096
|
+
return;
|
|
1037
1097
|
} else {
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
}
|
|
1041
|
-
if (tagName === "dialog" && n.open) {
|
|
1042
|
-
try {
|
|
1043
|
-
attributes.rr_open_mode = n.matches("dialog:modal") ? "modal" : "non-modal";
|
|
1044
|
-
} catch (e) {
|
|
1045
|
-
attributes.rr_open_mode = "modal";
|
|
1046
|
-
attributes.ph_rr_could_not_detect_modal = true;
|
|
1047
|
-
}
|
|
1048
|
-
}
|
|
1049
|
-
if (tagName === "canvas" && recordCanvas) {
|
|
1050
|
-
if (n.__context === "2d") {
|
|
1051
|
-
if (!types2.is2DCanvasBlank(n)) {
|
|
1052
|
-
attributes.rr_dataURL = n.toDataURL(
|
|
1053
|
-
dataURLOptions.type,
|
|
1054
|
-
dataURLOptions.quality
|
|
1055
|
-
);
|
|
1056
|
-
}
|
|
1057
|
-
} else if (!("__context" in n)) {
|
|
1058
|
-
const canvasDataURL = n.toDataURL(
|
|
1059
|
-
dataURLOptions.type,
|
|
1060
|
-
dataURLOptions.quality
|
|
1061
|
-
);
|
|
1062
|
-
const blankCanvas = doc.createElement("canvas");
|
|
1063
|
-
blankCanvas.width = n.width;
|
|
1064
|
-
blankCanvas.height = n.height;
|
|
1065
|
-
const blankCanvasDataURL = blankCanvas.toDataURL(
|
|
1066
|
-
dataURLOptions.type,
|
|
1067
|
-
dataURLOptions.quality
|
|
1098
|
+
console.warn(
|
|
1099
|
+
`Cannot inline img src=${imageSrc}! Error: ${err}`
|
|
1068
1100
|
);
|
|
1069
|
-
if (canvasDataURL !== blankCanvasDataURL) {
|
|
1070
|
-
attributes.rr_dataURL = canvasDataURL;
|
|
1071
|
-
}
|
|
1072
1101
|
}
|
|
1073
1102
|
}
|
|
1074
|
-
if (
|
|
1075
|
-
|
|
1076
|
-
canvasService = doc.createElement("canvas");
|
|
1077
|
-
canvasCtx = canvasService.getContext("2d");
|
|
1078
|
-
}
|
|
1079
|
-
const image = n;
|
|
1080
|
-
const imageSrc = image.currentSrc || image.getAttribute("src") || "<unknown-src>";
|
|
1081
|
-
const priorCrossOrigin = image.crossOrigin;
|
|
1082
|
-
const recordInlineImage = () => {
|
|
1083
|
-
image.removeEventListener("load", recordInlineImage);
|
|
1084
|
-
try {
|
|
1085
|
-
canvasService.width = image.naturalWidth;
|
|
1086
|
-
canvasService.height = image.naturalHeight;
|
|
1087
|
-
canvasCtx.drawImage(image, 0, 0);
|
|
1088
|
-
attributes.rr_dataURL = canvasService.toDataURL(
|
|
1089
|
-
dataURLOptions.type,
|
|
1090
|
-
dataURLOptions.quality
|
|
1091
|
-
);
|
|
1092
|
-
} catch (err) {
|
|
1093
|
-
if (image.crossOrigin !== "anonymous") {
|
|
1094
|
-
image.crossOrigin = "anonymous";
|
|
1095
|
-
if (image.complete && image.naturalWidth !== 0)
|
|
1096
|
-
recordInlineImage();
|
|
1097
|
-
else image.addEventListener("load", recordInlineImage);
|
|
1098
|
-
return;
|
|
1099
|
-
} else {
|
|
1100
|
-
console.warn(
|
|
1101
|
-
`Cannot inline img src=${imageSrc}! Error: ${err}`
|
|
1102
|
-
);
|
|
1103
|
-
}
|
|
1104
|
-
}
|
|
1105
|
-
if (image.crossOrigin === "anonymous") {
|
|
1106
|
-
priorCrossOrigin ? attributes.crossOrigin = priorCrossOrigin : image.removeAttribute("crossorigin");
|
|
1107
|
-
}
|
|
1108
|
-
};
|
|
1109
|
-
if (image.complete && image.naturalWidth !== 0) recordInlineImage();
|
|
1110
|
-
else image.addEventListener("load", recordInlineImage);
|
|
1111
|
-
}
|
|
1112
|
-
if (tagName === "audio" || tagName === "video") {
|
|
1113
|
-
const mediaAttributes = attributes;
|
|
1114
|
-
mediaAttributes.rr_mediaState = n.paused ? "paused" : "played";
|
|
1115
|
-
mediaAttributes.rr_mediaCurrentTime = n.currentTime;
|
|
1116
|
-
mediaAttributes.rr_mediaPlaybackRate = n.playbackRate;
|
|
1117
|
-
mediaAttributes.rr_mediaMuted = n.muted;
|
|
1118
|
-
mediaAttributes.rr_mediaLoop = n.loop;
|
|
1119
|
-
mediaAttributes.rr_mediaVolume = n.volume;
|
|
1120
|
-
}
|
|
1121
|
-
if (!newlyAddedElement) {
|
|
1122
|
-
if (n.scrollLeft) {
|
|
1123
|
-
attributes.rr_scrollLeft = n.scrollLeft;
|
|
1124
|
-
}
|
|
1125
|
-
if (n.scrollTop) {
|
|
1126
|
-
attributes.rr_scrollTop = n.scrollTop;
|
|
1127
|
-
}
|
|
1128
|
-
}
|
|
1129
|
-
if (needBlock) {
|
|
1130
|
-
const { width, height, left, top } = n.getBoundingClientRect();
|
|
1131
|
-
attributes = {
|
|
1132
|
-
class: attributes.class,
|
|
1133
|
-
rr_width: `${width}px`,
|
|
1134
|
-
rr_height: `${height}px`,
|
|
1135
|
-
rr_left: `${Math.floor(left + (((_a = doc.defaultView) == null ? void 0 : _a.scrollX) || 0))}px`,
|
|
1136
|
-
rr_top: `${Math.floor(top + (((_b = doc.defaultView) == null ? void 0 : _b.scrollY) || 0))}px`
|
|
1137
|
-
};
|
|
1103
|
+
if (image.crossOrigin === "anonymous") {
|
|
1104
|
+
priorCrossOrigin ? attributes.crossOrigin = priorCrossOrigin : image.removeAttribute("crossorigin");
|
|
1138
1105
|
}
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
isSVG: isSVGElement(n) || void 0,
|
|
1156
|
-
needBlock,
|
|
1157
|
-
rootId,
|
|
1158
|
-
isCustom: isCustomElement
|
|
1159
|
-
};
|
|
1106
|
+
};
|
|
1107
|
+
if (image.complete && image.naturalWidth !== 0) recordInlineImage();
|
|
1108
|
+
else image.addEventListener("load", recordInlineImage);
|
|
1109
|
+
}
|
|
1110
|
+
if (tagName === "audio" || tagName === "video") {
|
|
1111
|
+
const mediaAttributes = attributes;
|
|
1112
|
+
mediaAttributes.rr_mediaState = n.paused ? "paused" : "played";
|
|
1113
|
+
mediaAttributes.rr_mediaCurrentTime = n.currentTime;
|
|
1114
|
+
mediaAttributes.rr_mediaPlaybackRate = n.playbackRate;
|
|
1115
|
+
mediaAttributes.rr_mediaMuted = n.muted;
|
|
1116
|
+
mediaAttributes.rr_mediaLoop = n.loop;
|
|
1117
|
+
mediaAttributes.rr_mediaVolume = n.volume;
|
|
1118
|
+
}
|
|
1119
|
+
if (!newlyAddedElement) {
|
|
1120
|
+
if (n.scrollLeft) {
|
|
1121
|
+
attributes.rr_scrollLeft = n.scrollLeft;
|
|
1160
1122
|
}
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
return "";
|
|
1164
|
-
} else {
|
|
1165
|
-
return maybeAttr.toLowerCase();
|
|
1166
|
-
}
|
|
1123
|
+
if (n.scrollTop) {
|
|
1124
|
+
attributes.rr_scrollTop = n.scrollTop;
|
|
1167
1125
|
}
|
|
1168
|
-
|
|
1169
|
-
|
|
1126
|
+
}
|
|
1127
|
+
if (needBlock) {
|
|
1128
|
+
const { width, height, left, top } = n.getBoundingClientRect();
|
|
1129
|
+
attributes = {
|
|
1130
|
+
class: attributes.class,
|
|
1131
|
+
rr_width: `${width}px`,
|
|
1132
|
+
rr_height: `${height}px`,
|
|
1133
|
+
rr_left: `${Math.floor(left + (((_a = doc.defaultView) == null ? void 0 : _a.scrollX) || 0))}px`,
|
|
1134
|
+
rr_top: `${Math.floor(top + (((_b = doc.defaultView) == null ? void 0 : _b.scrollY) || 0))}px`
|
|
1135
|
+
};
|
|
1136
|
+
}
|
|
1137
|
+
if (tagName === "iframe" && !keepIframeSrcFn(attributes.src)) {
|
|
1138
|
+
if (!n.contentDocument) {
|
|
1139
|
+
attributes.rr_src = attributes.src;
|
|
1140
|
+
}
|
|
1141
|
+
delete attributes.src;
|
|
1142
|
+
}
|
|
1143
|
+
let isCustomElement;
|
|
1144
|
+
try {
|
|
1145
|
+
if (customElements.get(tagName)) isCustomElement = true;
|
|
1146
|
+
} catch (e) {
|
|
1147
|
+
}
|
|
1148
|
+
return {
|
|
1149
|
+
type: types.NodeType$1.Element,
|
|
1150
|
+
tagName,
|
|
1151
|
+
attributes,
|
|
1152
|
+
childNodes: [],
|
|
1153
|
+
isSVG: isSVGElement(n) || void 0,
|
|
1154
|
+
needBlock,
|
|
1155
|
+
rootId,
|
|
1156
|
+
isCustom: isCustomElement
|
|
1157
|
+
};
|
|
1158
|
+
}
|
|
1159
|
+
function lowerIfExists(maybeAttr) {
|
|
1160
|
+
if (maybeAttr === void 0 || maybeAttr === null) {
|
|
1161
|
+
return "";
|
|
1162
|
+
} else {
|
|
1163
|
+
return maybeAttr.toLowerCase();
|
|
1164
|
+
}
|
|
1165
|
+
}
|
|
1166
|
+
function slimDOMExcluded(sn, slimDOMOptions) {
|
|
1167
|
+
if (slimDOMOptions.comment && sn.type === types.NodeType$1.Comment) {
|
|
1168
|
+
return true;
|
|
1169
|
+
} else if (sn.type === types.NodeType$1.Element) {
|
|
1170
|
+
if (slimDOMOptions.script && // script tag
|
|
1171
|
+
(sn.tagName === "script" || // (module)preload link
|
|
1172
|
+
sn.tagName === "link" && (sn.attributes.rel === "preload" && sn.attributes.as === "script" || sn.attributes.rel === "modulepreload") || // prefetch link
|
|
1173
|
+
sn.tagName === "link" && sn.attributes.rel === "prefetch" && typeof sn.attributes.href === "string" && types.extractFileExtension(sn.attributes.href) === "js")) {
|
|
1174
|
+
return true;
|
|
1175
|
+
} else if (slimDOMOptions.headFavicon && (sn.tagName === "link" && sn.attributes.rel === "shortcut icon" || sn.tagName === "meta" && (lowerIfExists(sn.attributes.name).match(
|
|
1176
|
+
/^msapplication-tile(image|color)$/
|
|
1177
|
+
) || lowerIfExists(sn.attributes.name) === "application-name" || ["icon", "apple-touch-icon", "shortcut icon"].includes(
|
|
1178
|
+
lowerIfExists(sn.attributes.rel)
|
|
1179
|
+
)))) {
|
|
1180
|
+
return true;
|
|
1181
|
+
} else if (sn.tagName === "meta") {
|
|
1182
|
+
if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {
|
|
1183
|
+
return true;
|
|
1184
|
+
} else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)
|
|
1185
|
+
lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === "pinterest")) {
|
|
1186
|
+
return true;
|
|
1187
|
+
} else if (slimDOMOptions.headMetaRobots && ["robots", "googlebot", "bingbot"].includes(
|
|
1188
|
+
lowerIfExists(sn.attributes.name)
|
|
1189
|
+
)) {
|
|
1190
|
+
return true;
|
|
1191
|
+
} else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes["http-equiv"] !== void 0) {
|
|
1192
|
+
return true;
|
|
1193
|
+
} else if (slimDOMOptions.headMetaAuthorship && (["author", "generator", "framework", "publisher", "progid"].includes(
|
|
1194
|
+
lowerIfExists(sn.attributes.name)
|
|
1195
|
+
) || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) {
|
|
1196
|
+
return true;
|
|
1197
|
+
} else if (slimDOMOptions.headMetaVerification && [
|
|
1198
|
+
"google-site-verification",
|
|
1199
|
+
"yandex-verification",
|
|
1200
|
+
"csrf-token",
|
|
1201
|
+
"p:domain_verify",
|
|
1202
|
+
"verify-v1",
|
|
1203
|
+
"verification",
|
|
1204
|
+
"shopify-checkout-api-token"
|
|
1205
|
+
].includes(lowerIfExists(sn.attributes.name))) {
|
|
1170
1206
|
return true;
|
|
1171
|
-
} else if (sn.type === types2.NodeType$1.Element) {
|
|
1172
|
-
if (slimDOMOptions.script && // script tag
|
|
1173
|
-
(sn.tagName === "script" || // (module)preload link
|
|
1174
|
-
sn.tagName === "link" && (sn.attributes.rel === "preload" && sn.attributes.as === "script" || sn.attributes.rel === "modulepreload") || // prefetch link
|
|
1175
|
-
sn.tagName === "link" && sn.attributes.rel === "prefetch" && typeof sn.attributes.href === "string" && types2.extractFileExtension(sn.attributes.href) === "js")) {
|
|
1176
|
-
return true;
|
|
1177
|
-
} else if (slimDOMOptions.headFavicon && (sn.tagName === "link" && sn.attributes.rel === "shortcut icon" || sn.tagName === "meta" && (lowerIfExists(sn.attributes.name).match(
|
|
1178
|
-
/^msapplication-tile(image|color)$/
|
|
1179
|
-
) || lowerIfExists(sn.attributes.name) === "application-name" || ["icon", "apple-touch-icon", "shortcut icon"].includes(
|
|
1180
|
-
lowerIfExists(sn.attributes.rel)
|
|
1181
|
-
)))) {
|
|
1182
|
-
return true;
|
|
1183
|
-
} else if (sn.tagName === "meta") {
|
|
1184
|
-
if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {
|
|
1185
|
-
return true;
|
|
1186
|
-
} else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)
|
|
1187
|
-
lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === "pinterest")) {
|
|
1188
|
-
return true;
|
|
1189
|
-
} else if (slimDOMOptions.headMetaRobots && ["robots", "googlebot", "bingbot"].includes(
|
|
1190
|
-
lowerIfExists(sn.attributes.name)
|
|
1191
|
-
)) {
|
|
1192
|
-
return true;
|
|
1193
|
-
} else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes["http-equiv"] !== void 0) {
|
|
1194
|
-
return true;
|
|
1195
|
-
} else if (slimDOMOptions.headMetaAuthorship && (["author", "generator", "framework", "publisher", "progid"].includes(
|
|
1196
|
-
lowerIfExists(sn.attributes.name)
|
|
1197
|
-
) || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) {
|
|
1198
|
-
return true;
|
|
1199
|
-
} else if (slimDOMOptions.headMetaVerification && [
|
|
1200
|
-
"google-site-verification",
|
|
1201
|
-
"yandex-verification",
|
|
1202
|
-
"csrf-token",
|
|
1203
|
-
"p:domain_verify",
|
|
1204
|
-
"verify-v1",
|
|
1205
|
-
"verification",
|
|
1206
|
-
"shopify-checkout-api-token"
|
|
1207
|
-
].includes(lowerIfExists(sn.attributes.name))) {
|
|
1208
|
-
return true;
|
|
1209
|
-
}
|
|
1210
|
-
}
|
|
1211
1207
|
}
|
|
1212
|
-
return false;
|
|
1213
|
-
}
|
|
1214
|
-
var DEFAULT_MAX_DEPTH = 50;
|
|
1215
|
-
var _maxDepthWarned = false;
|
|
1216
|
-
var _maxDepthReached = false;
|
|
1217
|
-
function wasMaxDepthReached() {
|
|
1218
|
-
return _maxDepthReached;
|
|
1219
1208
|
}
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1209
|
+
}
|
|
1210
|
+
return false;
|
|
1211
|
+
}
|
|
1212
|
+
var DEFAULT_MAX_DEPTH = 50;
|
|
1213
|
+
var _maxDepthWarned = false;
|
|
1214
|
+
var _maxDepthReached = false;
|
|
1215
|
+
function wasMaxDepthReached() {
|
|
1216
|
+
return _maxDepthReached;
|
|
1217
|
+
}
|
|
1218
|
+
function resetMaxDepthState() {
|
|
1219
|
+
_maxDepthReached = false;
|
|
1220
|
+
_maxDepthWarned = false;
|
|
1221
|
+
}
|
|
1222
|
+
function serializeNodeWithId(n, options) {
|
|
1223
|
+
const {
|
|
1224
|
+
doc,
|
|
1225
|
+
mirror,
|
|
1226
|
+
blockClass,
|
|
1227
|
+
blockSelector,
|
|
1228
|
+
maskTextClass,
|
|
1229
|
+
maskTextSelector,
|
|
1230
|
+
skipChild = false,
|
|
1231
|
+
inlineStylesheet = true,
|
|
1232
|
+
maskInputOptions = {},
|
|
1233
|
+
maskTextFn,
|
|
1234
|
+
maskInputFn,
|
|
1235
|
+
slimDOMOptions,
|
|
1236
|
+
dataURLOptions = {},
|
|
1237
|
+
inlineImages = false,
|
|
1238
|
+
recordCanvas = false,
|
|
1239
|
+
onSerialize,
|
|
1240
|
+
onIframeLoad,
|
|
1241
|
+
iframeLoadTimeout = 5e3,
|
|
1242
|
+
onStylesheetLoad,
|
|
1243
|
+
stylesheetLoadTimeout = 5e3,
|
|
1244
|
+
keepIframeSrcFn = () => false,
|
|
1245
|
+
newlyAddedElement = false,
|
|
1246
|
+
depth = 0,
|
|
1247
|
+
maxDepth = DEFAULT_MAX_DEPTH
|
|
1248
|
+
} = options;
|
|
1249
|
+
let { needsMask } = options;
|
|
1250
|
+
let { preserveWhiteSpace = true } = options;
|
|
1251
|
+
if (depth >= maxDepth) {
|
|
1252
|
+
_maxDepthReached = true;
|
|
1253
|
+
if (!_maxDepthWarned) {
|
|
1254
|
+
_maxDepthWarned = true;
|
|
1255
|
+
console.warn(
|
|
1256
|
+
`[rrweb-snapshot] DOM tree depth exceeded max depth of ${maxDepth}. Children beyond this depth will not be recorded. This may indicate deeply nested DOM structures.`
|
|
1257
|
+
);
|
|
1223
1258
|
}
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1259
|
+
return null;
|
|
1260
|
+
}
|
|
1261
|
+
if (!needsMask) {
|
|
1262
|
+
const checkAncestors = needsMask === void 0;
|
|
1263
|
+
needsMask = needMaskingText(
|
|
1264
|
+
n,
|
|
1265
|
+
maskTextClass,
|
|
1266
|
+
maskTextSelector,
|
|
1267
|
+
checkAncestors
|
|
1268
|
+
);
|
|
1269
|
+
}
|
|
1270
|
+
const _serializedNode = serializeNode(n, {
|
|
1271
|
+
doc,
|
|
1272
|
+
mirror,
|
|
1273
|
+
blockClass,
|
|
1274
|
+
blockSelector,
|
|
1275
|
+
needsMask,
|
|
1276
|
+
inlineStylesheet,
|
|
1277
|
+
maskInputOptions,
|
|
1278
|
+
maskTextFn,
|
|
1279
|
+
maskInputFn,
|
|
1280
|
+
dataURLOptions,
|
|
1281
|
+
inlineImages,
|
|
1282
|
+
recordCanvas,
|
|
1283
|
+
keepIframeSrcFn,
|
|
1284
|
+
newlyAddedElement
|
|
1285
|
+
});
|
|
1286
|
+
if (!_serializedNode) {
|
|
1287
|
+
console.warn(n, "not serialized");
|
|
1288
|
+
return null;
|
|
1289
|
+
}
|
|
1290
|
+
let id;
|
|
1291
|
+
if (mirror.hasNode(n)) {
|
|
1292
|
+
id = mirror.getId(n);
|
|
1293
|
+
} else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === types.NodeType$1.Text && !_serializedNode.isStyle && !_serializedNode.textContent.replace(/^\s+|\s+$/gm, "").length) {
|
|
1294
|
+
id = IGNORED_NODE;
|
|
1295
|
+
} else {
|
|
1296
|
+
id = genId();
|
|
1297
|
+
}
|
|
1298
|
+
const serializedNode = Object.assign(_serializedNode, { id });
|
|
1299
|
+
mirror.add(n, serializedNode);
|
|
1300
|
+
if (id === IGNORED_NODE) {
|
|
1301
|
+
return null;
|
|
1302
|
+
}
|
|
1303
|
+
if (onSerialize) {
|
|
1304
|
+
onSerialize(n);
|
|
1305
|
+
}
|
|
1306
|
+
let recordChild = !skipChild;
|
|
1307
|
+
if (serializedNode.type === types.NodeType$1.Element) {
|
|
1308
|
+
recordChild = recordChild && !serializedNode.needBlock;
|
|
1309
|
+
delete serializedNode.needBlock;
|
|
1310
|
+
const shadowRootEl = types.index.shadowRoot(n);
|
|
1311
|
+
if (shadowRootEl && types.isNativeShadowDom(shadowRootEl))
|
|
1312
|
+
serializedNode.isShadowHost = true;
|
|
1313
|
+
}
|
|
1314
|
+
if ((serializedNode.type === types.NodeType$1.Document || serializedNode.type === types.NodeType$1.Element) && recordChild) {
|
|
1315
|
+
if (slimDOMOptions.headWhitespace && serializedNode.type === types.NodeType$1.Element && serializedNode.tagName === "head") {
|
|
1316
|
+
preserveWhiteSpace = false;
|
|
1317
|
+
}
|
|
1318
|
+
const bypassOptions = {
|
|
1319
|
+
doc,
|
|
1320
|
+
mirror,
|
|
1321
|
+
blockClass,
|
|
1322
|
+
blockSelector,
|
|
1323
|
+
needsMask,
|
|
1324
|
+
maskTextClass,
|
|
1325
|
+
maskTextSelector,
|
|
1326
|
+
skipChild,
|
|
1327
|
+
inlineStylesheet,
|
|
1328
|
+
maskInputOptions,
|
|
1329
|
+
maskTextFn,
|
|
1330
|
+
maskInputFn,
|
|
1331
|
+
slimDOMOptions,
|
|
1332
|
+
dataURLOptions,
|
|
1333
|
+
inlineImages,
|
|
1334
|
+
recordCanvas,
|
|
1335
|
+
preserveWhiteSpace,
|
|
1336
|
+
onSerialize,
|
|
1337
|
+
onIframeLoad,
|
|
1338
|
+
iframeLoadTimeout,
|
|
1339
|
+
onStylesheetLoad,
|
|
1340
|
+
stylesheetLoadTimeout,
|
|
1341
|
+
keepIframeSrcFn,
|
|
1342
|
+
depth: depth + 1,
|
|
1343
|
+
maxDepth
|
|
1344
|
+
};
|
|
1345
|
+
if (serializedNode.type === types.NodeType$1.Element && serializedNode.tagName === "textarea" && serializedNode.attributes.value !== void 0) ;
|
|
1346
|
+
else {
|
|
1347
|
+
for (const childN of Array.from(types.index.childNodes(n))) {
|
|
1348
|
+
const serializedChildNode = serializeNodeWithId(childN, bypassOptions);
|
|
1349
|
+
if (serializedChildNode) {
|
|
1350
|
+
serializedNode.childNodes.push(serializedChildNode);
|
|
1260
1351
|
}
|
|
1261
|
-
return null;
|
|
1262
|
-
}
|
|
1263
|
-
if (!needsMask) {
|
|
1264
|
-
const checkAncestors = needsMask === void 0;
|
|
1265
|
-
needsMask = needMaskingText(
|
|
1266
|
-
n,
|
|
1267
|
-
maskTextClass,
|
|
1268
|
-
maskTextSelector,
|
|
1269
|
-
checkAncestors
|
|
1270
|
-
);
|
|
1271
|
-
}
|
|
1272
|
-
const _serializedNode = serializeNode(n, {
|
|
1273
|
-
doc,
|
|
1274
|
-
mirror,
|
|
1275
|
-
blockClass,
|
|
1276
|
-
blockSelector,
|
|
1277
|
-
needsMask,
|
|
1278
|
-
inlineStylesheet,
|
|
1279
|
-
maskInputOptions,
|
|
1280
|
-
maskTextFn,
|
|
1281
|
-
maskInputFn,
|
|
1282
|
-
dataURLOptions,
|
|
1283
|
-
inlineImages,
|
|
1284
|
-
recordCanvas,
|
|
1285
|
-
keepIframeSrcFn,
|
|
1286
|
-
newlyAddedElement
|
|
1287
|
-
});
|
|
1288
|
-
if (!_serializedNode) {
|
|
1289
|
-
console.warn(n, "not serialized");
|
|
1290
|
-
return null;
|
|
1291
|
-
}
|
|
1292
|
-
let id;
|
|
1293
|
-
if (mirror.hasNode(n)) {
|
|
1294
|
-
id = mirror.getId(n);
|
|
1295
|
-
} else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === types2.NodeType$1.Text && !_serializedNode.isStyle && !_serializedNode.textContent.replace(/^\s+|\s+$/gm, "").length) {
|
|
1296
|
-
id = IGNORED_NODE;
|
|
1297
|
-
} else {
|
|
1298
|
-
id = genId();
|
|
1299
|
-
}
|
|
1300
|
-
const serializedNode = Object.assign(_serializedNode, { id });
|
|
1301
|
-
mirror.add(n, serializedNode);
|
|
1302
|
-
if (id === IGNORED_NODE) {
|
|
1303
|
-
return null;
|
|
1304
|
-
}
|
|
1305
|
-
if (onSerialize) {
|
|
1306
|
-
onSerialize(n);
|
|
1307
1352
|
}
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
const
|
|
1313
|
-
if (
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
if ((serializedNode.type === types2.NodeType$1.Document || serializedNode.type === types2.NodeType$1.Element) && recordChild) {
|
|
1317
|
-
if (slimDOMOptions.headWhitespace && serializedNode.type === types2.NodeType$1.Element && serializedNode.tagName === "head") {
|
|
1318
|
-
preserveWhiteSpace = false;
|
|
1353
|
+
}
|
|
1354
|
+
let shadowRootEl = null;
|
|
1355
|
+
if (types.isElement(n) && (shadowRootEl = types.index.shadowRoot(n))) {
|
|
1356
|
+
for (const childN of Array.from(types.index.childNodes(shadowRootEl))) {
|
|
1357
|
+
const serializedChildNode = serializeNodeWithId(childN, bypassOptions);
|
|
1358
|
+
if (serializedChildNode) {
|
|
1359
|
+
types.isNativeShadowDom(shadowRootEl) && (serializedChildNode.isShadow = true);
|
|
1360
|
+
serializedNode.childNodes.push(serializedChildNode);
|
|
1319
1361
|
}
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1362
|
+
}
|
|
1363
|
+
}
|
|
1364
|
+
}
|
|
1365
|
+
const parent = types.index.parentNode(n);
|
|
1366
|
+
if (parent && types.isShadowRoot(parent) && types.isNativeShadowDom(parent)) {
|
|
1367
|
+
serializedNode.isShadow = true;
|
|
1368
|
+
}
|
|
1369
|
+
if (serializedNode.type === types.NodeType$1.Element && serializedNode.tagName === "iframe") {
|
|
1370
|
+
onceIframeLoaded(
|
|
1371
|
+
n,
|
|
1372
|
+
() => {
|
|
1373
|
+
const iframeDoc = n.contentDocument;
|
|
1374
|
+
if (iframeDoc && onIframeLoad) {
|
|
1375
|
+
const serializedIframeNode = serializeNodeWithId(iframeDoc, {
|
|
1376
|
+
doc: iframeDoc,
|
|
1377
|
+
mirror,
|
|
1378
|
+
blockClass,
|
|
1379
|
+
blockSelector,
|
|
1380
|
+
needsMask,
|
|
1381
|
+
maskTextClass,
|
|
1382
|
+
maskTextSelector,
|
|
1383
|
+
skipChild: false,
|
|
1384
|
+
inlineStylesheet,
|
|
1385
|
+
maskInputOptions,
|
|
1386
|
+
maskTextFn,
|
|
1387
|
+
maskInputFn,
|
|
1388
|
+
slimDOMOptions,
|
|
1389
|
+
dataURLOptions,
|
|
1390
|
+
inlineImages,
|
|
1391
|
+
recordCanvas,
|
|
1392
|
+
preserveWhiteSpace,
|
|
1393
|
+
onSerialize,
|
|
1394
|
+
onIframeLoad,
|
|
1395
|
+
iframeLoadTimeout,
|
|
1396
|
+
onStylesheetLoad,
|
|
1397
|
+
stylesheetLoadTimeout,
|
|
1398
|
+
keepIframeSrcFn,
|
|
1399
|
+
depth: depth + 1,
|
|
1400
|
+
maxDepth
|
|
1401
|
+
});
|
|
1402
|
+
if (serializedIframeNode) {
|
|
1403
|
+
onIframeLoad(
|
|
1404
|
+
n,
|
|
1405
|
+
serializedIframeNode
|
|
1406
|
+
);
|
|
1354
1407
|
}
|
|
1355
1408
|
}
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1409
|
+
},
|
|
1410
|
+
iframeLoadTimeout
|
|
1411
|
+
);
|
|
1412
|
+
}
|
|
1413
|
+
if (serializedNode.type === types.NodeType$1.Element && serializedNode.tagName === "link" && typeof serializedNode.attributes.rel === "string" && (serializedNode.attributes.rel === "stylesheet" || serializedNode.attributes.rel === "preload" && typeof serializedNode.attributes.href === "string" && types.extractFileExtension(serializedNode.attributes.href) === "css")) {
|
|
1414
|
+
onceStylesheetLoaded(
|
|
1415
|
+
n,
|
|
1416
|
+
() => {
|
|
1417
|
+
if (onStylesheetLoad) {
|
|
1418
|
+
const serializedLinkNode = serializeNodeWithId(n, {
|
|
1419
|
+
doc,
|
|
1420
|
+
mirror,
|
|
1421
|
+
blockClass,
|
|
1422
|
+
blockSelector,
|
|
1423
|
+
needsMask,
|
|
1424
|
+
maskTextClass,
|
|
1425
|
+
maskTextSelector,
|
|
1426
|
+
skipChild: false,
|
|
1427
|
+
inlineStylesheet,
|
|
1428
|
+
maskInputOptions,
|
|
1429
|
+
maskTextFn,
|
|
1430
|
+
maskInputFn,
|
|
1431
|
+
slimDOMOptions,
|
|
1432
|
+
dataURLOptions,
|
|
1433
|
+
inlineImages,
|
|
1434
|
+
recordCanvas,
|
|
1435
|
+
preserveWhiteSpace,
|
|
1436
|
+
onSerialize,
|
|
1437
|
+
onIframeLoad,
|
|
1438
|
+
iframeLoadTimeout,
|
|
1439
|
+
onStylesheetLoad,
|
|
1440
|
+
stylesheetLoadTimeout,
|
|
1441
|
+
keepIframeSrcFn,
|
|
1442
|
+
depth,
|
|
1443
|
+
maxDepth
|
|
1444
|
+
});
|
|
1445
|
+
if (serializedLinkNode) {
|
|
1446
|
+
onStylesheetLoad(
|
|
1447
|
+
n,
|
|
1448
|
+
serializedLinkNode
|
|
1449
|
+
);
|
|
1364
1450
|
}
|
|
1365
1451
|
}
|
|
1366
|
-
}
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
headMetaVerification: true,
|
|
1471
|
-
headMetaAuthorship: slimDOM === "all",
|
|
1472
|
-
headMetaDescKeywords: slimDOM === "all",
|
|
1473
|
-
headTitleMutations: slimDOM === "all"
|
|
1474
|
-
};
|
|
1475
|
-
}
|
|
1476
|
-
if (slimDOM === false) {
|
|
1477
|
-
return {};
|
|
1478
|
-
}
|
|
1479
|
-
return slimDOM;
|
|
1480
|
-
}
|
|
1481
|
-
function snapshot(n, options) {
|
|
1482
|
-
const {
|
|
1483
|
-
mirror = new types2.Mirror(),
|
|
1484
|
-
blockClass = "rr-block",
|
|
1485
|
-
blockSelector = null,
|
|
1486
|
-
maskTextClass = "rr-mask",
|
|
1487
|
-
maskTextSelector = null,
|
|
1488
|
-
inlineStylesheet = true,
|
|
1489
|
-
inlineImages = false,
|
|
1490
|
-
recordCanvas = false,
|
|
1491
|
-
maskAllInputs = false,
|
|
1492
|
-
maskTextFn,
|
|
1493
|
-
maskInputFn,
|
|
1494
|
-
slimDOM = false,
|
|
1495
|
-
dataURLOptions,
|
|
1496
|
-
preserveWhiteSpace,
|
|
1497
|
-
onSerialize,
|
|
1498
|
-
onIframeLoad,
|
|
1499
|
-
iframeLoadTimeout,
|
|
1500
|
-
onStylesheetLoad,
|
|
1501
|
-
stylesheetLoadTimeout,
|
|
1502
|
-
keepIframeSrcFn = () => false,
|
|
1503
|
-
maxDepth
|
|
1504
|
-
} = options || {};
|
|
1505
|
-
const maskInputOptions = maskAllInputs === true ? {
|
|
1506
|
-
color: true,
|
|
1507
|
-
date: true,
|
|
1508
|
-
"datetime-local": true,
|
|
1509
|
-
email: true,
|
|
1510
|
-
month: true,
|
|
1511
|
-
number: true,
|
|
1512
|
-
range: true,
|
|
1513
|
-
search: true,
|
|
1514
|
-
tel: true,
|
|
1515
|
-
text: true,
|
|
1516
|
-
time: true,
|
|
1517
|
-
url: true,
|
|
1518
|
-
week: true,
|
|
1519
|
-
textarea: true,
|
|
1520
|
-
select: true,
|
|
1521
|
-
password: true
|
|
1522
|
-
} : maskAllInputs === false ? {
|
|
1523
|
-
password: true
|
|
1524
|
-
} : maskAllInputs;
|
|
1525
|
-
const slimDOMOptions = slimDOMDefaults(slimDOM);
|
|
1526
|
-
return serializeNodeWithId(n, {
|
|
1527
|
-
doc: n,
|
|
1528
|
-
mirror,
|
|
1529
|
-
blockClass,
|
|
1530
|
-
blockSelector,
|
|
1531
|
-
maskTextClass,
|
|
1532
|
-
maskTextSelector,
|
|
1533
|
-
skipChild: false,
|
|
1534
|
-
inlineStylesheet,
|
|
1535
|
-
maskInputOptions,
|
|
1536
|
-
maskTextFn,
|
|
1537
|
-
maskInputFn,
|
|
1538
|
-
slimDOMOptions,
|
|
1539
|
-
dataURLOptions,
|
|
1540
|
-
inlineImages,
|
|
1541
|
-
recordCanvas,
|
|
1542
|
-
preserveWhiteSpace,
|
|
1543
|
-
onSerialize,
|
|
1544
|
-
onIframeLoad,
|
|
1545
|
-
iframeLoadTimeout,
|
|
1546
|
-
onStylesheetLoad,
|
|
1547
|
-
stylesheetLoadTimeout,
|
|
1548
|
-
keepIframeSrcFn,
|
|
1549
|
-
newlyAddedElement: false,
|
|
1550
|
-
maxDepth
|
|
1551
|
-
});
|
|
1452
|
+
},
|
|
1453
|
+
stylesheetLoadTimeout
|
|
1454
|
+
);
|
|
1455
|
+
}
|
|
1456
|
+
return serializedNode;
|
|
1457
|
+
}
|
|
1458
|
+
function slimDOMDefaults(slimDOM) {
|
|
1459
|
+
if (slimDOM === true || slimDOM === "all") {
|
|
1460
|
+
return {
|
|
1461
|
+
script: true,
|
|
1462
|
+
comment: true,
|
|
1463
|
+
headFavicon: true,
|
|
1464
|
+
headWhitespace: true,
|
|
1465
|
+
headMetaSocial: true,
|
|
1466
|
+
headMetaRobots: true,
|
|
1467
|
+
headMetaHttpEquiv: true,
|
|
1468
|
+
headMetaVerification: true,
|
|
1469
|
+
headMetaAuthorship: slimDOM === "all",
|
|
1470
|
+
headMetaDescKeywords: slimDOM === "all",
|
|
1471
|
+
headTitleMutations: slimDOM === "all"
|
|
1472
|
+
};
|
|
1473
|
+
}
|
|
1474
|
+
if (slimDOM === false) {
|
|
1475
|
+
return {};
|
|
1476
|
+
}
|
|
1477
|
+
return slimDOM;
|
|
1478
|
+
}
|
|
1479
|
+
function snapshot(n, options) {
|
|
1480
|
+
const {
|
|
1481
|
+
mirror = new types.Mirror(),
|
|
1482
|
+
blockClass = "rr-block",
|
|
1483
|
+
blockSelector = null,
|
|
1484
|
+
maskTextClass = "rr-mask",
|
|
1485
|
+
maskTextSelector = null,
|
|
1486
|
+
inlineStylesheet = true,
|
|
1487
|
+
inlineImages = false,
|
|
1488
|
+
recordCanvas = false,
|
|
1489
|
+
maskAllInputs = false,
|
|
1490
|
+
maskTextFn,
|
|
1491
|
+
maskInputFn,
|
|
1492
|
+
slimDOM = false,
|
|
1493
|
+
dataURLOptions,
|
|
1494
|
+
preserveWhiteSpace,
|
|
1495
|
+
onSerialize,
|
|
1496
|
+
onIframeLoad,
|
|
1497
|
+
iframeLoadTimeout,
|
|
1498
|
+
onStylesheetLoad,
|
|
1499
|
+
stylesheetLoadTimeout,
|
|
1500
|
+
keepIframeSrcFn = () => false,
|
|
1501
|
+
maxDepth
|
|
1502
|
+
} = options || {};
|
|
1503
|
+
const maskInputOptions = maskAllInputs === true ? {
|
|
1504
|
+
color: true,
|
|
1505
|
+
date: true,
|
|
1506
|
+
"datetime-local": true,
|
|
1507
|
+
email: true,
|
|
1508
|
+
month: true,
|
|
1509
|
+
number: true,
|
|
1510
|
+
range: true,
|
|
1511
|
+
search: true,
|
|
1512
|
+
tel: true,
|
|
1513
|
+
text: true,
|
|
1514
|
+
time: true,
|
|
1515
|
+
url: true,
|
|
1516
|
+
week: true,
|
|
1517
|
+
textarea: true,
|
|
1518
|
+
select: true,
|
|
1519
|
+
password: true
|
|
1520
|
+
} : maskAllInputs === false ? {
|
|
1521
|
+
password: true
|
|
1522
|
+
} : maskAllInputs;
|
|
1523
|
+
const slimDOMOptions = slimDOMDefaults(slimDOM);
|
|
1524
|
+
return serializeNodeWithId(n, {
|
|
1525
|
+
doc: n,
|
|
1526
|
+
mirror,
|
|
1527
|
+
blockClass,
|
|
1528
|
+
blockSelector,
|
|
1529
|
+
maskTextClass,
|
|
1530
|
+
maskTextSelector,
|
|
1531
|
+
skipChild: false,
|
|
1532
|
+
inlineStylesheet,
|
|
1533
|
+
maskInputOptions,
|
|
1534
|
+
maskTextFn,
|
|
1535
|
+
maskInputFn,
|
|
1536
|
+
slimDOMOptions,
|
|
1537
|
+
dataURLOptions,
|
|
1538
|
+
inlineImages,
|
|
1539
|
+
recordCanvas,
|
|
1540
|
+
preserveWhiteSpace,
|
|
1541
|
+
onSerialize,
|
|
1542
|
+
onIframeLoad,
|
|
1543
|
+
iframeLoadTimeout,
|
|
1544
|
+
onStylesheetLoad,
|
|
1545
|
+
stylesheetLoadTimeout,
|
|
1546
|
+
keepIframeSrcFn,
|
|
1547
|
+
newlyAddedElement: false,
|
|
1548
|
+
maxDepth
|
|
1549
|
+
});
|
|
1550
|
+
}
|
|
1551
|
+
function visitSnapshot(node, onVisit) {
|
|
1552
|
+
function walk(current) {
|
|
1553
|
+
onVisit(current);
|
|
1554
|
+
if (current.type === types.NodeType$1.Document || current.type === types.NodeType$1.Element) {
|
|
1555
|
+
current.childNodes.forEach(walk);
|
|
1552
1556
|
}
|
|
1553
|
-
function visitSnapshot(node, onVisit) {
|
|
1554
|
-
function walk(current) {
|
|
1555
|
-
onVisit(current);
|
|
1556
|
-
if (current.type === types2.NodeType$1.Document || current.type === types2.NodeType$1.Element) {
|
|
1557
|
-
current.childNodes.forEach(walk);
|
|
1558
|
-
}
|
|
1559
|
-
}
|
|
1560
|
-
walk(node);
|
|
1561
|
-
}
|
|
1562
|
-
function cleanupSnapshot() {
|
|
1563
|
-
_id = 1;
|
|
1564
|
-
}
|
|
1565
|
-
exports2.DEFAULT_MAX_DEPTH = DEFAULT_MAX_DEPTH;
|
|
1566
|
-
exports2.IGNORED_NODE = IGNORED_NODE;
|
|
1567
|
-
exports2.classMatchesRegex = classMatchesRegex;
|
|
1568
|
-
exports2.cleanupSnapshot = cleanupSnapshot;
|
|
1569
|
-
exports2.genId = genId;
|
|
1570
|
-
exports2.ignoreAttribute = ignoreAttribute;
|
|
1571
|
-
exports2.needMaskingText = needMaskingText;
|
|
1572
|
-
exports2.resetMaxDepthState = resetMaxDepthState;
|
|
1573
|
-
exports2.serializeNodeWithId = serializeNodeWithId;
|
|
1574
|
-
exports2.slimDOMDefaults = slimDOMDefaults;
|
|
1575
|
-
exports2.snapshot = snapshot;
|
|
1576
|
-
exports2.transformAttribute = transformAttribute;
|
|
1577
|
-
exports2.visitSnapshot = visitSnapshot;
|
|
1578
|
-
exports2.wasMaxDepthReached = wasMaxDepthReached;
|
|
1579
1557
|
}
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
var types = require_types_BjupQhwp();
|
|
1586
|
-
exports.DEFAULT_MAX_DEPTH = record.DEFAULT_MAX_DEPTH;
|
|
1587
|
-
exports.IGNORED_NODE = record.IGNORED_NODE;
|
|
1588
|
-
exports.classMatchesRegex = record.classMatchesRegex;
|
|
1589
|
-
exports.cleanupSnapshot = record.cleanupSnapshot;
|
|
1590
|
-
exports.genId = record.genId;
|
|
1591
|
-
exports.ignoreAttribute = record.ignoreAttribute;
|
|
1592
|
-
exports.needMaskingText = record.needMaskingText;
|
|
1593
|
-
exports.serializeNodeWithId = record.serializeNodeWithId;
|
|
1594
|
-
exports.snapshot = record.snapshot;
|
|
1595
|
-
exports.transformAttribute = record.transformAttribute;
|
|
1596
|
-
exports.visitSnapshot = record.visitSnapshot;
|
|
1597
|
-
exports.wasMaxDepthReached = record.wasMaxDepthReached;
|
|
1558
|
+
walk(node);
|
|
1559
|
+
}
|
|
1560
|
+
function cleanupSnapshot() {
|
|
1561
|
+
_id = 1;
|
|
1562
|
+
}
|
|
1598
1563
|
exports.Mirror = types.Mirror;
|
|
1599
1564
|
exports.NodeType = types.NodeType;
|
|
1600
1565
|
exports.absolutifyURLs = types.absolutifyURLs;
|
|
@@ -1616,6 +1581,20 @@ exports.recompressBase64Image = types.recompressBase64Image;
|
|
|
1616
1581
|
exports.stringifyRule = types.stringifyRule;
|
|
1617
1582
|
exports.stringifyStylesheet = types.stringifyStylesheet;
|
|
1618
1583
|
exports.toLowerCase = types.toLowerCase;
|
|
1584
|
+
exports.DEFAULT_MAX_DEPTH = DEFAULT_MAX_DEPTH;
|
|
1585
|
+
exports.IGNORED_NODE = IGNORED_NODE;
|
|
1586
|
+
exports.classMatchesRegex = classMatchesRegex;
|
|
1587
|
+
exports.cleanupSnapshot = cleanupSnapshot;
|
|
1588
|
+
exports.genId = genId;
|
|
1589
|
+
exports.ignoreAttribute = ignoreAttribute;
|
|
1590
|
+
exports.needMaskingText = needMaskingText;
|
|
1591
|
+
exports.resetMaxDepthState = resetMaxDepthState;
|
|
1592
|
+
exports.serializeNodeWithId = serializeNodeWithId;
|
|
1593
|
+
exports.slimDOMDefaults = slimDOMDefaults;
|
|
1594
|
+
exports.snapshot = snapshot;
|
|
1595
|
+
exports.transformAttribute = transformAttribute;
|
|
1596
|
+
exports.visitSnapshot = visitSnapshot;
|
|
1597
|
+
exports.wasMaxDepthReached = wasMaxDepthReached;
|
|
1619
1598
|
;if (typeof module.exports == "object" && typeof exports == "object") {
|
|
1620
1599
|
var __cp = (to, from, except, desc) => {
|
|
1621
1600
|
if ((from && typeof from === "object") || typeof from === "function") {
|