@highlight-run/rrweb 2.1.5 → 2.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/plugins/console-record.js +3 -3
- package/dist/plugins/console-record.min.js +3 -3
- package/dist/plugins/console-record.min.js.map +1 -1
- package/dist/plugins/console-replay.js +0 -0
- package/dist/plugins/console-replay.min.js +0 -0
- package/dist/plugins/console-replay.min.js.map +1 -1
- package/dist/plugins/sequential-id-record.js +0 -0
- package/dist/plugins/sequential-id-record.min.js +0 -0
- package/dist/plugins/sequential-id-record.min.js.map +0 -0
- package/dist/plugins/sequential-id-replay.js +0 -0
- package/dist/plugins/sequential-id-replay.min.js +0 -0
- package/dist/plugins/sequential-id-replay.min.js.map +0 -0
- package/dist/record/rrweb-record-pack.js +1 -1
- package/dist/record/rrweb-record-pack.min.js +1 -1
- package/dist/record/rrweb-record-pack.min.js.map +1 -1
- package/dist/record/rrweb-record.js +3 -3
- package/dist/record/rrweb-record.min.js +3 -3
- package/dist/record/rrweb-record.min.js.map +1 -1
- package/dist/replay/rrweb-replay-unpack.css +0 -0
- package/dist/replay/rrweb-replay-unpack.js +4 -4
- package/dist/replay/rrweb-replay-unpack.min.css +0 -0
- package/dist/replay/rrweb-replay-unpack.min.css.map +0 -0
- package/dist/replay/rrweb-replay-unpack.min.js +4 -4
- package/dist/replay/rrweb-replay-unpack.min.js.map +1 -1
- package/dist/replay/rrweb-replay.css +0 -0
- package/dist/replay/rrweb-replay.js +4 -4
- package/dist/replay/rrweb-replay.min.css +0 -0
- package/dist/replay/rrweb-replay.min.css.map +0 -0
- package/dist/replay/rrweb-replay.min.js +4 -4
- package/dist/replay/rrweb-replay.min.js.map +1 -1
- package/dist/rrweb-all.css +0 -0
- package/dist/rrweb-all.js +12 -12
- package/dist/rrweb-all.min.css +0 -0
- package/dist/rrweb-all.min.css.map +0 -0
- package/dist/rrweb-all.min.js +12 -12
- package/dist/rrweb-all.min.js.map +1 -1
- package/dist/rrweb.css +0 -0
- package/dist/rrweb.js +5 -5
- package/dist/rrweb.min.css +0 -0
- package/dist/rrweb.min.css.map +0 -0
- package/dist/rrweb.min.js +5 -5
- package/dist/rrweb.min.js.map +1 -1
- package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +0 -0
- package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +0 -0
- package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +0 -0
- package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +0 -0
- package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +0 -0
- package/es/rrweb/_virtual/image-bitmap-data-url-worker.js +1 -1
- package/es/rrweb/all.css +0 -0
- package/es/rrweb/ext/@xstate/fsm/es/index.js +0 -0
- package/es/rrweb/ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js +0 -0
- package/es/rrweb/ext/fflate/esm/browser.js +0 -0
- package/es/rrweb/ext/mitt/dist/mitt.mjs.js +0 -0
- package/es/rrweb/ext/tslib/tslib.es6.js +0 -0
- package/es/rrweb/packages/rrdom/es/rrdom.js +0 -0
- package/es/rrweb/packages/rrweb/src/entries/all.js +0 -0
- package/es/rrweb/packages/rrweb/src/index.js +0 -0
- package/es/rrweb/packages/rrweb/src/packer/base.js +0 -0
- package/es/rrweb/packages/rrweb/src/packer/pack.js +0 -0
- package/es/rrweb/packages/rrweb/src/packer/unpack.js +0 -0
- package/es/rrweb/packages/rrweb/src/plugins/console/record/error-stack-parser.js +0 -0
- package/es/rrweb/packages/rrweb/src/plugins/console/record/index.js +0 -0
- package/es/rrweb/packages/rrweb/src/plugins/console/record/stringify.js +0 -0
- package/es/rrweb/packages/rrweb/src/plugins/console/replay/index.js +0 -0
- package/es/rrweb/packages/rrweb/src/plugins/sequential-id/record/index.js +0 -0
- package/es/rrweb/packages/rrweb/src/plugins/sequential-id/replay/index.js +0 -0
- package/es/rrweb/packages/rrweb/src/record/iframe-manager.js +0 -0
- package/es/rrweb/packages/rrweb/src/record/index.js +5 -1
- package/es/rrweb/packages/rrweb/src/record/mutation.js +0 -0
- package/es/rrweb/packages/rrweb/src/record/observer.js +0 -0
- package/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js +0 -0
- package/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js +21 -7
- package/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js +0 -0
- package/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js +0 -0
- package/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js +0 -0
- package/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js +0 -0
- package/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js +0 -0
- package/es/rrweb/packages/rrweb/src/replay/canvas/2d.js +0 -0
- package/es/rrweb/packages/rrweb/src/replay/canvas/deserialize-args.js +0 -0
- package/es/rrweb/packages/rrweb/src/replay/canvas/index.js +0 -0
- package/es/rrweb/packages/rrweb/src/replay/canvas/webgl.js +0 -0
- package/es/rrweb/packages/rrweb/src/replay/index.js +0 -0
- package/es/rrweb/packages/rrweb/src/replay/machine.js +0 -0
- package/es/rrweb/packages/rrweb/src/replay/smoothscroll.js +0 -0
- package/es/rrweb/packages/rrweb/src/replay/styles/inject-style.js +0 -0
- package/es/rrweb/packages/rrweb/src/replay/timer.js +0 -0
- package/es/rrweb/packages/rrweb/src/types.js +0 -0
- package/es/rrweb/packages/rrweb/src/utils.js +0 -0
- package/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js +17 -9
- package/lib/plugins/console-record.js +0 -0
- package/lib/plugins/console-replay.js +0 -0
- package/lib/plugins/sequential-id-record.js +0 -0
- package/lib/plugins/sequential-id-replay.js +0 -0
- package/lib/record/rrweb-record-pack.js +1 -1
- package/lib/record/rrweb-record.js +44 -18
- package/lib/replay/rrweb-replay-unpack.css +0 -0
- package/lib/replay/rrweb-replay-unpack.js +0 -0
- package/lib/replay/rrweb-replay.css +0 -0
- package/lib/replay/rrweb-replay.js +0 -0
- package/lib/rrweb-all.css +0 -0
- package/lib/rrweb-all.js +44 -18
- package/lib/rrweb.css +0 -0
- package/lib/rrweb.js +44 -18
- package/package.json +3 -3
- package/typings/record/observers/canvas/canvas-manager.d.ts +3 -0
- package/typings/types.d.ts +11 -1
package/lib/rrweb-all.js
CHANGED
|
@@ -575,8 +575,8 @@ function serializeTextNode(n, options) {
|
|
|
575
575
|
}
|
|
576
576
|
function serializeElementNode(n, options) {
|
|
577
577
|
var doc = options.doc, blockClass = options.blockClass, blockSelector = options.blockSelector, inlineStylesheet = options.inlineStylesheet, _a = options.maskInputOptions, maskInputOptions = _a === void 0 ? {} : _a, maskInputFn = options.maskInputFn, maskTextClass = options.maskTextClass, _b = options.dataURLOptions, dataURLOptions = _b === void 0 ? {} : _b, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _c = options.newlyAddedElement, newlyAddedElement = _c === void 0 ? false : _c, enableStrictPrivacy = options.enableStrictPrivacy, rootId = options.rootId;
|
|
578
|
-
var needBlock = _isBlockedElement(n, blockClass, blockSelector)
|
|
579
|
-
|
|
578
|
+
var needBlock = _isBlockedElement(n, blockClass, blockSelector);
|
|
579
|
+
var needMask = _isBlockedElement(n, maskTextClass, null);
|
|
580
580
|
var tagName = getValidTagName$1(n);
|
|
581
581
|
var attributes = {};
|
|
582
582
|
var len = n.attributes.length;
|
|
@@ -650,7 +650,11 @@ function serializeElementNode(n, options) {
|
|
|
650
650
|
}
|
|
651
651
|
}
|
|
652
652
|
}
|
|
653
|
-
if (tagName === 'img' &&
|
|
653
|
+
if (tagName === 'img' &&
|
|
654
|
+
inlineImages &&
|
|
655
|
+
!needBlock &&
|
|
656
|
+
!needMask &&
|
|
657
|
+
!enableStrictPrivacy) {
|
|
654
658
|
if (!canvasService) {
|
|
655
659
|
canvasService = doc.createElement('canvas');
|
|
656
660
|
canvasCtx = canvasService.getContext('2d');
|
|
@@ -691,14 +695,16 @@ function serializeElementNode(n, options) {
|
|
|
691
695
|
attributes.rr_scrollTop = n.scrollTop;
|
|
692
696
|
}
|
|
693
697
|
}
|
|
694
|
-
if (needBlock || (tagName === 'img' && enableStrictPrivacy)) {
|
|
698
|
+
if (needBlock || needMask || (tagName === 'img' && enableStrictPrivacy)) {
|
|
695
699
|
var _d = n.getBoundingClientRect(), width = _d.width, height = _d.height;
|
|
696
700
|
attributes = {
|
|
697
701
|
"class": attributes["class"],
|
|
698
702
|
rr_width: "".concat(width, "px"),
|
|
699
703
|
rr_height: "".concat(height, "px")
|
|
700
704
|
};
|
|
701
|
-
|
|
705
|
+
if (enableStrictPrivacy) {
|
|
706
|
+
needBlock = true;
|
|
707
|
+
}
|
|
702
708
|
}
|
|
703
709
|
if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {
|
|
704
710
|
if (!n.contentDocument) {
|
|
@@ -706,9 +712,6 @@ function serializeElementNode(n, options) {
|
|
|
706
712
|
}
|
|
707
713
|
delete attributes.src;
|
|
708
714
|
}
|
|
709
|
-
if (needBlock && tagName === 'img') {
|
|
710
|
-
delete attributes.src;
|
|
711
|
-
}
|
|
712
715
|
return {
|
|
713
716
|
type: NodeType$2.Element,
|
|
714
717
|
tagName: tagName,
|
|
@@ -716,6 +719,7 @@ function serializeElementNode(n, options) {
|
|
|
716
719
|
childNodes: [],
|
|
717
720
|
isSVG: isSVGElement(n) || undefined,
|
|
718
721
|
needBlock: needBlock,
|
|
722
|
+
needMask: needMask,
|
|
719
723
|
rootId: rootId
|
|
720
724
|
};
|
|
721
725
|
}
|
|
@@ -849,13 +853,17 @@ function serializeNodeWithId(n, options) {
|
|
|
849
853
|
var strictPrivacy = enableStrictPrivacy;
|
|
850
854
|
if (serializedNode.type === NodeType$2.Element) {
|
|
851
855
|
recordChild = recordChild && !serializedNode.needBlock;
|
|
852
|
-
strictPrivacy =
|
|
856
|
+
strictPrivacy =
|
|
857
|
+
enableStrictPrivacy ||
|
|
858
|
+
!!serializedNode.needBlock ||
|
|
859
|
+
!!serializedNode.needMask;
|
|
853
860
|
if (strictPrivacy && serializedNode.tagName === 'img') {
|
|
854
861
|
var clone = n.cloneNode();
|
|
855
862
|
clone.src = '';
|
|
856
863
|
mirror.add(clone, serializedNode);
|
|
857
864
|
}
|
|
858
865
|
delete serializedNode.needBlock;
|
|
866
|
+
delete serializedNode.needMask;
|
|
859
867
|
var shadowRoot = n.shadowRoot;
|
|
860
868
|
if (shadowRoot && isNativeShadowDom(shadowRoot))
|
|
861
869
|
serializedNode.isShadowHost = true;
|
|
@@ -3903,7 +3911,7 @@ function createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {
|
|
|
3903
3911
|
return createBase64WorkerFactory$1(base64, sourcemapArg, enableUnicodeArg);
|
|
3904
3912
|
}
|
|
3905
3913
|
|
|
3906
|
-
var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIC8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLg0KDQogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55DQogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLg0KDQogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgNCiAgICBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkNCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsDQogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NDQogICAgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1INCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SDQogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4NCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KDQogICAgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikgew0KICAgICAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH0NCiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7DQogICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfQ0KICAgICAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpOw0KICAgICAgICB9KTsNCiAgICB9CgogICAgLyoKICAgICAqIGJhc2U2NC1hcnJheWJ1ZmZlciAxLjAuMSA8aHR0cHM6Ly9naXRodWIuY29tL25pa2xhc3ZoL2Jhc2U2NC1hcnJheWJ1ZmZlcj4KICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBOaWtsYXMgdm9uIEhlcnR6ZW4gPGh0dHBzOi8vaGVydHplbi5jb20+CiAgICAgKiBSZWxlYXNlZCB1bmRlciBNSVQgTGljZW5zZQogICAgICovCiAgICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7CiAgICAvLyBVc2UgYSBsb29rdXAgdGFibGUgdG8gZmluZCB0aGUgaW5kZXguCiAgICB2YXIgbG9va3VwID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gW10gOiBuZXcgVWludDhBcnJheSgyNTYpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykgewogICAgICAgIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7CiAgICB9CiAgICB2YXIgZW5jb2RlID0gZnVuY3Rpb24gKGFycmF5YnVmZmVyKSB7CiAgICAgICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlidWZmZXIpLCBpLCBsZW4gPSBieXRlcy5sZW5ndGgsIGJhc2U2NCA9ICcnOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMykgewogICAgICAgICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaV0gPj4gMl07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1soKGJ5dGVzW2ldICYgMykgPDwgNCkgfCAoYnl0ZXNbaSArIDFdID4+IDQpXTsKICAgICAgICAgICAgYmFzZTY0ICs9IGNoYXJzWygoYnl0ZXNbaSArIDFdICYgMTUpIDw8IDIpIHwgKGJ5dGVzW2kgKyAyXSA+
|
|
3914
|
+
var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIC8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLg0KDQogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55DQogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLg0KDQogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgNCiAgICBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkNCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsDQogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NDQogICAgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1INCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SDQogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4NCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KDQogICAgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikgew0KICAgICAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH0NCiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7DQogICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfQ0KICAgICAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpOw0KICAgICAgICB9KTsNCiAgICB9CgogICAgLyoKICAgICAqIGJhc2U2NC1hcnJheWJ1ZmZlciAxLjAuMSA8aHR0cHM6Ly9naXRodWIuY29tL25pa2xhc3ZoL2Jhc2U2NC1hcnJheWJ1ZmZlcj4KICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBOaWtsYXMgdm9uIEhlcnR6ZW4gPGh0dHBzOi8vaGVydHplbi5jb20+CiAgICAgKiBSZWxlYXNlZCB1bmRlciBNSVQgTGljZW5zZQogICAgICovCiAgICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7CiAgICAvLyBVc2UgYSBsb29rdXAgdGFibGUgdG8gZmluZCB0aGUgaW5kZXguCiAgICB2YXIgbG9va3VwID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gW10gOiBuZXcgVWludDhBcnJheSgyNTYpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykgewogICAgICAgIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7CiAgICB9CiAgICB2YXIgZW5jb2RlID0gZnVuY3Rpb24gKGFycmF5YnVmZmVyKSB7CiAgICAgICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlidWZmZXIpLCBpLCBsZW4gPSBieXRlcy5sZW5ndGgsIGJhc2U2NCA9ICcnOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMykgewogICAgICAgICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaV0gPj4gMl07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1soKGJ5dGVzW2ldICYgMykgPDwgNCkgfCAoYnl0ZXNbaSArIDFdID4+IDQpXTsKICAgICAgICAgICAgYmFzZTY0ICs9IGNoYXJzWygoYnl0ZXNbaSArIDFdICYgMTUpIDw8IDIpIHwgKGJ5dGVzW2kgKyAyXSA+PiA2KV07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1tieXRlc1tpICsgMl0gJiA2M107CiAgICAgICAgfQogICAgICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgJz0nOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgJz09JzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJhc2U2NDsKICAgIH07CgogICAgY29uc3QgbGFzdEJsb2JNYXAgPSBuZXcgTWFwKCk7DQogICAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gbmV3IE1hcCgpOw0KICAgIGZ1bmN0aW9uIGdldFRyYW5zcGFyZW50QmxvYkZvcih3aWR0aCwgaGVpZ2h0KSB7DQogICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7DQogICAgICAgICAgICBjb25zdCBpZCA9IGAke3dpZHRofS0ke2hlaWdodH1gOw0KICAgICAgICAgICAgaWYgKHRyYW5zcGFyZW50QmxvYk1hcC5oYXMoaWQpKQ0KICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudEJsb2JNYXAuZ2V0KGlkKTsNCiAgICAgICAgICAgIGNvbnN0IG9mZnNjcmVlbiA9IG5ldyBPZmZzY3JlZW5DYW52YXMod2lkdGgsIGhlaWdodCk7DQogICAgICAgICAgICBvZmZzY3JlZW4uZ2V0Q29udGV4dCgnMmQnKTsNCiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSB5aWVsZCBvZmZzY3JlZW4uY29udmVydFRvQmxvYigpOw0KICAgICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSB5aWVsZCBibG9iLmFycmF5QnVmZmVyKCk7DQogICAgICAgICAgICBjb25zdCBiYXNlNjQgPSBlbmNvZGUoYXJyYXlCdWZmZXIpOw0KICAgICAgICAgICAgdHJhbnNwYXJlbnRCbG9iTWFwLnNldChpZCwgYmFzZTY0KTsNCiAgICAgICAgICAgIHJldHVybiBiYXNlNjQ7DQogICAgICAgIH0pOw0KICAgIH0NCiAgICBjb25zdCB3b3JrZXIgPSBzZWxmOw0KICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkgew0KICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgew0KICAgICAgICAgICAgaWYgKCEoJ09mZnNjcmVlbkNhbnZhcycgaW4gZ2xvYmFsVGhpcykpDQogICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlci5wb3N0TWVzc2FnZSh7IGlkOiBlLmRhdGEuaWQgfSk7DQogICAgICAgICAgICBjb25zdCB7IGlkLCBiaXRtYXAsIHdpZHRoLCBoZWlnaHQsIGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQgfSA9IGUuZGF0YTsNCiAgICAgICAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKHdpZHRoLCBoZWlnaHQpOw0KICAgICAgICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsNCiAgICAgICAgICAgIGNvbnN0IGN0eCA9IG9mZnNjcmVlbi5nZXRDb250ZXh0KCcyZCcpOw0KICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOw0KICAgICAgICAgICAgYml0bWFwLmNsb3NlKCk7DQogICAgICAgICAgICBjb25zdCBibG9iID0geWllbGQgb2Zmc2NyZWVuLmNvbnZlcnRUb0Jsb2IoKTsNCiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBibG9iLnR5cGU7DQogICAgICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IHlpZWxkIGJsb2IuYXJyYXlCdWZmZXIoKTsNCiAgICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7DQogICAgICAgICAgICBpZiAoIWxhc3RCbG9iTWFwLmhhcyhpZCkgJiYgKHlpZWxkIHRyYW5zcGFyZW50QmFzZTY0KSA9PT0gYmFzZTY0KSB7DQogICAgICAgICAgICAgICAgbGFzdEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOw0KICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXIucG9zdE1lc3NhZ2UoeyBpZCB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChsYXN0QmxvYk1hcC5nZXQoaWQpID09PSBiYXNlNjQpDQogICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlci5wb3N0TWVzc2FnZSh7IGlkIH0pOw0KICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHsNCiAgICAgICAgICAgICAgICBpZCwNCiAgICAgICAgICAgICAgICB0eXBlLA0KICAgICAgICAgICAgICAgIGJhc2U2NCwNCiAgICAgICAgICAgICAgICB3aWR0aCwNCiAgICAgICAgICAgICAgICBoZWlnaHQsDQogICAgICAgICAgICAgICAgY2FudmFzV2lkdGgsDQogICAgICAgICAgICAgICAgY2FudmFzSGVpZ2h0LA0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7DQogICAgICAgIH0pOw0KICAgIH07Cgp9KSgpOwoK', null, false);
|
|
3907
3915
|
/* eslint-enable */
|
|
3908
3916
|
|
|
3909
3917
|
class CanvasManager {
|
|
@@ -3928,7 +3936,7 @@ class CanvasManager {
|
|
|
3928
3936
|
if (recordCanvas && sampling === 'all')
|
|
3929
3937
|
this.initCanvasMutationObserver(win, blockClass);
|
|
3930
3938
|
if (recordCanvas && typeof sampling === 'number')
|
|
3931
|
-
this.initCanvasFPSObserver(sampling, win, blockClass);
|
|
3939
|
+
this.initCanvasFPSObserver(sampling, win, blockClass, options.resizeQuality, options.resizeFactor, options.maxSnapshotDimension);
|
|
3932
3940
|
}
|
|
3933
3941
|
reset() {
|
|
3934
3942
|
this.pendingCanvasMutations.clear();
|
|
@@ -3946,7 +3954,7 @@ class CanvasManager {
|
|
|
3946
3954
|
unlock() {
|
|
3947
3955
|
this.locked = false;
|
|
3948
3956
|
}
|
|
3949
|
-
initCanvasFPSObserver(fps, win, blockClass) {
|
|
3957
|
+
initCanvasFPSObserver(fps, win, blockClass, resizeQuality, resizeFactor, maxSnapshotDimension) {
|
|
3950
3958
|
const canvasContextReset = initCanvasContextObserver(win, blockClass);
|
|
3951
3959
|
const snapshotInProgressMap = new Map();
|
|
3952
3960
|
const worker = new WorkerFactory();
|
|
@@ -3955,14 +3963,14 @@ class CanvasManager {
|
|
|
3955
3963
|
snapshotInProgressMap.set(id, false);
|
|
3956
3964
|
if (!('base64' in e.data))
|
|
3957
3965
|
return;
|
|
3958
|
-
const { base64, type,
|
|
3966
|
+
const { base64, type, canvasWidth, canvasHeight } = e.data;
|
|
3959
3967
|
this.mutationCb({
|
|
3960
3968
|
id,
|
|
3961
3969
|
type: CanvasContext['2D'],
|
|
3962
3970
|
commands: [
|
|
3963
3971
|
{
|
|
3964
3972
|
property: 'clearRect',
|
|
3965
|
-
args: [0, 0,
|
|
3973
|
+
args: [0, 0, canvasWidth, canvasHeight],
|
|
3966
3974
|
},
|
|
3967
3975
|
{
|
|
3968
3976
|
property: 'drawImage',
|
|
@@ -3979,6 +3987,8 @@ class CanvasManager {
|
|
|
3979
3987
|
},
|
|
3980
3988
|
0,
|
|
3981
3989
|
0,
|
|
3990
|
+
canvasWidth,
|
|
3991
|
+
canvasHeight,
|
|
3982
3992
|
],
|
|
3983
3993
|
},
|
|
3984
3994
|
],
|
|
@@ -4011,12 +4021,24 @@ class CanvasManager {
|
|
|
4011
4021
|
if (canvas.width === 0 || canvas.height === 0) {
|
|
4012
4022
|
return;
|
|
4013
4023
|
}
|
|
4014
|
-
|
|
4024
|
+
if (maxSnapshotDimension) {
|
|
4025
|
+
const maxDim = Math.max(canvas.width, canvas.height);
|
|
4026
|
+
resizeFactor = Math.min(resizeFactor || 1, maxSnapshotDimension / maxDim);
|
|
4027
|
+
}
|
|
4028
|
+
const width = canvas.width * (resizeFactor || 1);
|
|
4029
|
+
const height = canvas.height * (resizeFactor || 1);
|
|
4030
|
+
const bitmap = yield createImageBitmap(canvas, {
|
|
4031
|
+
resizeQuality: resizeQuality || 'low',
|
|
4032
|
+
resizeWidth: width,
|
|
4033
|
+
resizeHeight: height,
|
|
4034
|
+
});
|
|
4015
4035
|
worker.postMessage({
|
|
4016
4036
|
id,
|
|
4017
4037
|
bitmap,
|
|
4018
|
-
width
|
|
4019
|
-
height
|
|
4038
|
+
width,
|
|
4039
|
+
height,
|
|
4040
|
+
canvasWidth: canvas.width,
|
|
4041
|
+
canvasHeight: canvas.height,
|
|
4020
4042
|
}, [bitmap]);
|
|
4021
4043
|
}));
|
|
4022
4044
|
rafId = requestAnimationFrame(takeCanvasSnapshots);
|
|
@@ -4110,6 +4132,7 @@ let wrappedEmit;
|
|
|
4110
4132
|
let takeFullSnapshot;
|
|
4111
4133
|
const mirror = createMirror$2();
|
|
4112
4134
|
function record(options = {}) {
|
|
4135
|
+
var _a, _b, _c, _d;
|
|
4113
4136
|
const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'highlight-block', blockSelector = null, ignoreClass = 'highlight-ignore', maskTextClass = 'highlight-mask', maskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskInputFn, maskTextFn = obfuscateText, hooks, packFn, sampling = {}, mousemoveWait, recordCanvas = false, userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, enableStrictPrivacy = false, } = options;
|
|
4114
4137
|
if (!emit) {
|
|
4115
4138
|
throw new Error('emit function is required');
|
|
@@ -4223,7 +4246,10 @@ function record(options = {}) {
|
|
|
4223
4246
|
win: window,
|
|
4224
4247
|
blockClass,
|
|
4225
4248
|
mirror,
|
|
4226
|
-
sampling: sampling.canvas,
|
|
4249
|
+
sampling: (_a = sampling === null || sampling === void 0 ? void 0 : sampling.canvas) === null || _a === void 0 ? void 0 : _a.fps,
|
|
4250
|
+
resizeQuality: (_b = sampling === null || sampling === void 0 ? void 0 : sampling.canvas) === null || _b === void 0 ? void 0 : _b.resizeQuality,
|
|
4251
|
+
resizeFactor: (_c = sampling === null || sampling === void 0 ? void 0 : sampling.canvas) === null || _c === void 0 ? void 0 : _c.resizeFactor,
|
|
4252
|
+
maxSnapshotDimension: (_d = sampling === null || sampling === void 0 ? void 0 : sampling.canvas) === null || _d === void 0 ? void 0 : _d.maxSnapshotDimension,
|
|
4227
4253
|
});
|
|
4228
4254
|
const shadowDomManager = new ShadowDomManager({
|
|
4229
4255
|
mutationCb: wrappedMutationEmit,
|
package/lib/rrweb.css
CHANGED
|
File without changes
|
package/lib/rrweb.js
CHANGED
|
@@ -575,8 +575,8 @@ function serializeTextNode(n, options) {
|
|
|
575
575
|
}
|
|
576
576
|
function serializeElementNode(n, options) {
|
|
577
577
|
var doc = options.doc, blockClass = options.blockClass, blockSelector = options.blockSelector, inlineStylesheet = options.inlineStylesheet, _a = options.maskInputOptions, maskInputOptions = _a === void 0 ? {} : _a, maskInputFn = options.maskInputFn, maskTextClass = options.maskTextClass, _b = options.dataURLOptions, dataURLOptions = _b === void 0 ? {} : _b, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _c = options.newlyAddedElement, newlyAddedElement = _c === void 0 ? false : _c, enableStrictPrivacy = options.enableStrictPrivacy, rootId = options.rootId;
|
|
578
|
-
var needBlock = _isBlockedElement(n, blockClass, blockSelector)
|
|
579
|
-
|
|
578
|
+
var needBlock = _isBlockedElement(n, blockClass, blockSelector);
|
|
579
|
+
var needMask = _isBlockedElement(n, maskTextClass, null);
|
|
580
580
|
var tagName = getValidTagName$1(n);
|
|
581
581
|
var attributes = {};
|
|
582
582
|
var len = n.attributes.length;
|
|
@@ -650,7 +650,11 @@ function serializeElementNode(n, options) {
|
|
|
650
650
|
}
|
|
651
651
|
}
|
|
652
652
|
}
|
|
653
|
-
if (tagName === 'img' &&
|
|
653
|
+
if (tagName === 'img' &&
|
|
654
|
+
inlineImages &&
|
|
655
|
+
!needBlock &&
|
|
656
|
+
!needMask &&
|
|
657
|
+
!enableStrictPrivacy) {
|
|
654
658
|
if (!canvasService) {
|
|
655
659
|
canvasService = doc.createElement('canvas');
|
|
656
660
|
canvasCtx = canvasService.getContext('2d');
|
|
@@ -691,14 +695,16 @@ function serializeElementNode(n, options) {
|
|
|
691
695
|
attributes.rr_scrollTop = n.scrollTop;
|
|
692
696
|
}
|
|
693
697
|
}
|
|
694
|
-
if (needBlock || (tagName === 'img' && enableStrictPrivacy)) {
|
|
698
|
+
if (needBlock || needMask || (tagName === 'img' && enableStrictPrivacy)) {
|
|
695
699
|
var _d = n.getBoundingClientRect(), width = _d.width, height = _d.height;
|
|
696
700
|
attributes = {
|
|
697
701
|
"class": attributes["class"],
|
|
698
702
|
rr_width: "".concat(width, "px"),
|
|
699
703
|
rr_height: "".concat(height, "px")
|
|
700
704
|
};
|
|
701
|
-
|
|
705
|
+
if (enableStrictPrivacy) {
|
|
706
|
+
needBlock = true;
|
|
707
|
+
}
|
|
702
708
|
}
|
|
703
709
|
if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {
|
|
704
710
|
if (!n.contentDocument) {
|
|
@@ -706,9 +712,6 @@ function serializeElementNode(n, options) {
|
|
|
706
712
|
}
|
|
707
713
|
delete attributes.src;
|
|
708
714
|
}
|
|
709
|
-
if (needBlock && tagName === 'img') {
|
|
710
|
-
delete attributes.src;
|
|
711
|
-
}
|
|
712
715
|
return {
|
|
713
716
|
type: NodeType$2.Element,
|
|
714
717
|
tagName: tagName,
|
|
@@ -716,6 +719,7 @@ function serializeElementNode(n, options) {
|
|
|
716
719
|
childNodes: [],
|
|
717
720
|
isSVG: isSVGElement(n) || undefined,
|
|
718
721
|
needBlock: needBlock,
|
|
722
|
+
needMask: needMask,
|
|
719
723
|
rootId: rootId
|
|
720
724
|
};
|
|
721
725
|
}
|
|
@@ -849,13 +853,17 @@ function serializeNodeWithId(n, options) {
|
|
|
849
853
|
var strictPrivacy = enableStrictPrivacy;
|
|
850
854
|
if (serializedNode.type === NodeType$2.Element) {
|
|
851
855
|
recordChild = recordChild && !serializedNode.needBlock;
|
|
852
|
-
strictPrivacy =
|
|
856
|
+
strictPrivacy =
|
|
857
|
+
enableStrictPrivacy ||
|
|
858
|
+
!!serializedNode.needBlock ||
|
|
859
|
+
!!serializedNode.needMask;
|
|
853
860
|
if (strictPrivacy && serializedNode.tagName === 'img') {
|
|
854
861
|
var clone = n.cloneNode();
|
|
855
862
|
clone.src = '';
|
|
856
863
|
mirror.add(clone, serializedNode);
|
|
857
864
|
}
|
|
858
865
|
delete serializedNode.needBlock;
|
|
866
|
+
delete serializedNode.needMask;
|
|
859
867
|
var shadowRoot = n.shadowRoot;
|
|
860
868
|
if (shadowRoot && isNativeShadowDom(shadowRoot))
|
|
861
869
|
serializedNode.isShadowHost = true;
|
|
@@ -3903,7 +3911,7 @@ function createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {
|
|
|
3903
3911
|
return createBase64WorkerFactory$1(base64, sourcemapArg, enableUnicodeArg);
|
|
3904
3912
|
}
|
|
3905
3913
|
|
|
3906
|
-
var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIC8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLg0KDQogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55DQogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLg0KDQogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgNCiAgICBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkNCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsDQogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NDQogICAgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1INCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SDQogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4NCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KDQogICAgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikgew0KICAgICAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH0NCiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7DQogICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfQ0KICAgICAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpOw0KICAgICAgICB9KTsNCiAgICB9CgogICAgLyoKICAgICAqIGJhc2U2NC1hcnJheWJ1ZmZlciAxLjAuMSA8aHR0cHM6Ly9naXRodWIuY29tL25pa2xhc3ZoL2Jhc2U2NC1hcnJheWJ1ZmZlcj4KICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBOaWtsYXMgdm9uIEhlcnR6ZW4gPGh0dHBzOi8vaGVydHplbi5jb20+CiAgICAgKiBSZWxlYXNlZCB1bmRlciBNSVQgTGljZW5zZQogICAgICovCiAgICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7CiAgICAvLyBVc2UgYSBsb29rdXAgdGFibGUgdG8gZmluZCB0aGUgaW5kZXguCiAgICB2YXIgbG9va3VwID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gW10gOiBuZXcgVWludDhBcnJheSgyNTYpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykgewogICAgICAgIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7CiAgICB9CiAgICB2YXIgZW5jb2RlID0gZnVuY3Rpb24gKGFycmF5YnVmZmVyKSB7CiAgICAgICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlidWZmZXIpLCBpLCBsZW4gPSBieXRlcy5sZW5ndGgsIGJhc2U2NCA9ICcnOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMykgewogICAgICAgICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaV0gPj4gMl07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1soKGJ5dGVzW2ldICYgMykgPDwgNCkgfCAoYnl0ZXNbaSArIDFdID4+IDQpXTsKICAgICAgICAgICAgYmFzZTY0ICs9IGNoYXJzWygoYnl0ZXNbaSArIDFdICYgMTUpIDw8IDIpIHwgKGJ5dGVzW2kgKyAyXSA+
|
|
3914
|
+
var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIC8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLg0KDQogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55DQogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLg0KDQogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgNCiAgICBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkNCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsDQogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NDQogICAgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1INCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SDQogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4NCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KDQogICAgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikgew0KICAgICAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH0NCiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7DQogICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfQ0KICAgICAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpOw0KICAgICAgICB9KTsNCiAgICB9CgogICAgLyoKICAgICAqIGJhc2U2NC1hcnJheWJ1ZmZlciAxLjAuMSA8aHR0cHM6Ly9naXRodWIuY29tL25pa2xhc3ZoL2Jhc2U2NC1hcnJheWJ1ZmZlcj4KICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBOaWtsYXMgdm9uIEhlcnR6ZW4gPGh0dHBzOi8vaGVydHplbi5jb20+CiAgICAgKiBSZWxlYXNlZCB1bmRlciBNSVQgTGljZW5zZQogICAgICovCiAgICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7CiAgICAvLyBVc2UgYSBsb29rdXAgdGFibGUgdG8gZmluZCB0aGUgaW5kZXguCiAgICB2YXIgbG9va3VwID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gW10gOiBuZXcgVWludDhBcnJheSgyNTYpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykgewogICAgICAgIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7CiAgICB9CiAgICB2YXIgZW5jb2RlID0gZnVuY3Rpb24gKGFycmF5YnVmZmVyKSB7CiAgICAgICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlidWZmZXIpLCBpLCBsZW4gPSBieXRlcy5sZW5ndGgsIGJhc2U2NCA9ICcnOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMykgewogICAgICAgICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaV0gPj4gMl07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1soKGJ5dGVzW2ldICYgMykgPDwgNCkgfCAoYnl0ZXNbaSArIDFdID4+IDQpXTsKICAgICAgICAgICAgYmFzZTY0ICs9IGNoYXJzWygoYnl0ZXNbaSArIDFdICYgMTUpIDw8IDIpIHwgKGJ5dGVzW2kgKyAyXSA+PiA2KV07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1tieXRlc1tpICsgMl0gJiA2M107CiAgICAgICAgfQogICAgICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgJz0nOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgJz09JzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJhc2U2NDsKICAgIH07CgogICAgY29uc3QgbGFzdEJsb2JNYXAgPSBuZXcgTWFwKCk7DQogICAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gbmV3IE1hcCgpOw0KICAgIGZ1bmN0aW9uIGdldFRyYW5zcGFyZW50QmxvYkZvcih3aWR0aCwgaGVpZ2h0KSB7DQogICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7DQogICAgICAgICAgICBjb25zdCBpZCA9IGAke3dpZHRofS0ke2hlaWdodH1gOw0KICAgICAgICAgICAgaWYgKHRyYW5zcGFyZW50QmxvYk1hcC5oYXMoaWQpKQ0KICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudEJsb2JNYXAuZ2V0KGlkKTsNCiAgICAgICAgICAgIGNvbnN0IG9mZnNjcmVlbiA9IG5ldyBPZmZzY3JlZW5DYW52YXMod2lkdGgsIGhlaWdodCk7DQogICAgICAgICAgICBvZmZzY3JlZW4uZ2V0Q29udGV4dCgnMmQnKTsNCiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSB5aWVsZCBvZmZzY3JlZW4uY29udmVydFRvQmxvYigpOw0KICAgICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSB5aWVsZCBibG9iLmFycmF5QnVmZmVyKCk7DQogICAgICAgICAgICBjb25zdCBiYXNlNjQgPSBlbmNvZGUoYXJyYXlCdWZmZXIpOw0KICAgICAgICAgICAgdHJhbnNwYXJlbnRCbG9iTWFwLnNldChpZCwgYmFzZTY0KTsNCiAgICAgICAgICAgIHJldHVybiBiYXNlNjQ7DQogICAgICAgIH0pOw0KICAgIH0NCiAgICBjb25zdCB3b3JrZXIgPSBzZWxmOw0KICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkgew0KICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgew0KICAgICAgICAgICAgaWYgKCEoJ09mZnNjcmVlbkNhbnZhcycgaW4gZ2xvYmFsVGhpcykpDQogICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlci5wb3N0TWVzc2FnZSh7IGlkOiBlLmRhdGEuaWQgfSk7DQogICAgICAgICAgICBjb25zdCB7IGlkLCBiaXRtYXAsIHdpZHRoLCBoZWlnaHQsIGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQgfSA9IGUuZGF0YTsNCiAgICAgICAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKHdpZHRoLCBoZWlnaHQpOw0KICAgICAgICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsNCiAgICAgICAgICAgIGNvbnN0IGN0eCA9IG9mZnNjcmVlbi5nZXRDb250ZXh0KCcyZCcpOw0KICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOw0KICAgICAgICAgICAgYml0bWFwLmNsb3NlKCk7DQogICAgICAgICAgICBjb25zdCBibG9iID0geWllbGQgb2Zmc2NyZWVuLmNvbnZlcnRUb0Jsb2IoKTsNCiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBibG9iLnR5cGU7DQogICAgICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IHlpZWxkIGJsb2IuYXJyYXlCdWZmZXIoKTsNCiAgICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7DQogICAgICAgICAgICBpZiAoIWxhc3RCbG9iTWFwLmhhcyhpZCkgJiYgKHlpZWxkIHRyYW5zcGFyZW50QmFzZTY0KSA9PT0gYmFzZTY0KSB7DQogICAgICAgICAgICAgICAgbGFzdEJsb2JNYXAuc2V0KGlkLCBiYXNlNjQpOw0KICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXIucG9zdE1lc3NhZ2UoeyBpZCB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChsYXN0QmxvYk1hcC5nZXQoaWQpID09PSBiYXNlNjQpDQogICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlci5wb3N0TWVzc2FnZSh7IGlkIH0pOw0KICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHsNCiAgICAgICAgICAgICAgICBpZCwNCiAgICAgICAgICAgICAgICB0eXBlLA0KICAgICAgICAgICAgICAgIGJhc2U2NCwNCiAgICAgICAgICAgICAgICB3aWR0aCwNCiAgICAgICAgICAgICAgICBoZWlnaHQsDQogICAgICAgICAgICAgICAgY2FudmFzV2lkdGgsDQogICAgICAgICAgICAgICAgY2FudmFzSGVpZ2h0LA0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7DQogICAgICAgIH0pOw0KICAgIH07Cgp9KSgpOwoK', null, false);
|
|
3907
3915
|
/* eslint-enable */
|
|
3908
3916
|
|
|
3909
3917
|
class CanvasManager {
|
|
@@ -3928,7 +3936,7 @@ class CanvasManager {
|
|
|
3928
3936
|
if (recordCanvas && sampling === 'all')
|
|
3929
3937
|
this.initCanvasMutationObserver(win, blockClass);
|
|
3930
3938
|
if (recordCanvas && typeof sampling === 'number')
|
|
3931
|
-
this.initCanvasFPSObserver(sampling, win, blockClass);
|
|
3939
|
+
this.initCanvasFPSObserver(sampling, win, blockClass, options.resizeQuality, options.resizeFactor, options.maxSnapshotDimension);
|
|
3932
3940
|
}
|
|
3933
3941
|
reset() {
|
|
3934
3942
|
this.pendingCanvasMutations.clear();
|
|
@@ -3946,7 +3954,7 @@ class CanvasManager {
|
|
|
3946
3954
|
unlock() {
|
|
3947
3955
|
this.locked = false;
|
|
3948
3956
|
}
|
|
3949
|
-
initCanvasFPSObserver(fps, win, blockClass) {
|
|
3957
|
+
initCanvasFPSObserver(fps, win, blockClass, resizeQuality, resizeFactor, maxSnapshotDimension) {
|
|
3950
3958
|
const canvasContextReset = initCanvasContextObserver(win, blockClass);
|
|
3951
3959
|
const snapshotInProgressMap = new Map();
|
|
3952
3960
|
const worker = new WorkerFactory();
|
|
@@ -3955,14 +3963,14 @@ class CanvasManager {
|
|
|
3955
3963
|
snapshotInProgressMap.set(id, false);
|
|
3956
3964
|
if (!('base64' in e.data))
|
|
3957
3965
|
return;
|
|
3958
|
-
const { base64, type,
|
|
3966
|
+
const { base64, type, canvasWidth, canvasHeight } = e.data;
|
|
3959
3967
|
this.mutationCb({
|
|
3960
3968
|
id,
|
|
3961
3969
|
type: CanvasContext['2D'],
|
|
3962
3970
|
commands: [
|
|
3963
3971
|
{
|
|
3964
3972
|
property: 'clearRect',
|
|
3965
|
-
args: [0, 0,
|
|
3973
|
+
args: [0, 0, canvasWidth, canvasHeight],
|
|
3966
3974
|
},
|
|
3967
3975
|
{
|
|
3968
3976
|
property: 'drawImage',
|
|
@@ -3979,6 +3987,8 @@ class CanvasManager {
|
|
|
3979
3987
|
},
|
|
3980
3988
|
0,
|
|
3981
3989
|
0,
|
|
3990
|
+
canvasWidth,
|
|
3991
|
+
canvasHeight,
|
|
3982
3992
|
],
|
|
3983
3993
|
},
|
|
3984
3994
|
],
|
|
@@ -4011,12 +4021,24 @@ class CanvasManager {
|
|
|
4011
4021
|
if (canvas.width === 0 || canvas.height === 0) {
|
|
4012
4022
|
return;
|
|
4013
4023
|
}
|
|
4014
|
-
|
|
4024
|
+
if (maxSnapshotDimension) {
|
|
4025
|
+
const maxDim = Math.max(canvas.width, canvas.height);
|
|
4026
|
+
resizeFactor = Math.min(resizeFactor || 1, maxSnapshotDimension / maxDim);
|
|
4027
|
+
}
|
|
4028
|
+
const width = canvas.width * (resizeFactor || 1);
|
|
4029
|
+
const height = canvas.height * (resizeFactor || 1);
|
|
4030
|
+
const bitmap = yield createImageBitmap(canvas, {
|
|
4031
|
+
resizeQuality: resizeQuality || 'low',
|
|
4032
|
+
resizeWidth: width,
|
|
4033
|
+
resizeHeight: height,
|
|
4034
|
+
});
|
|
4015
4035
|
worker.postMessage({
|
|
4016
4036
|
id,
|
|
4017
4037
|
bitmap,
|
|
4018
|
-
width
|
|
4019
|
-
height
|
|
4038
|
+
width,
|
|
4039
|
+
height,
|
|
4040
|
+
canvasWidth: canvas.width,
|
|
4041
|
+
canvasHeight: canvas.height,
|
|
4020
4042
|
}, [bitmap]);
|
|
4021
4043
|
}));
|
|
4022
4044
|
rafId = requestAnimationFrame(takeCanvasSnapshots);
|
|
@@ -4110,6 +4132,7 @@ let wrappedEmit;
|
|
|
4110
4132
|
let takeFullSnapshot;
|
|
4111
4133
|
const mirror = createMirror$2();
|
|
4112
4134
|
function record(options = {}) {
|
|
4135
|
+
var _a, _b, _c, _d;
|
|
4113
4136
|
const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'highlight-block', blockSelector = null, ignoreClass = 'highlight-ignore', maskTextClass = 'highlight-mask', maskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskInputFn, maskTextFn = obfuscateText, hooks, packFn, sampling = {}, mousemoveWait, recordCanvas = false, userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, enableStrictPrivacy = false, } = options;
|
|
4114
4137
|
if (!emit) {
|
|
4115
4138
|
throw new Error('emit function is required');
|
|
@@ -4223,7 +4246,10 @@ function record(options = {}) {
|
|
|
4223
4246
|
win: window,
|
|
4224
4247
|
blockClass,
|
|
4225
4248
|
mirror,
|
|
4226
|
-
sampling: sampling.canvas,
|
|
4249
|
+
sampling: (_a = sampling === null || sampling === void 0 ? void 0 : sampling.canvas) === null || _a === void 0 ? void 0 : _a.fps,
|
|
4250
|
+
resizeQuality: (_b = sampling === null || sampling === void 0 ? void 0 : sampling.canvas) === null || _b === void 0 ? void 0 : _b.resizeQuality,
|
|
4251
|
+
resizeFactor: (_c = sampling === null || sampling === void 0 ? void 0 : sampling.canvas) === null || _c === void 0 ? void 0 : _c.resizeFactor,
|
|
4252
|
+
maxSnapshotDimension: (_d = sampling === null || sampling === void 0 ? void 0 : sampling.canvas) === null || _d === void 0 ? void 0 : _d.maxSnapshotDimension,
|
|
4227
4253
|
});
|
|
4228
4254
|
const shadowDomManager = new ShadowDomManager({
|
|
4229
4255
|
mutationCb: wrappedMutationEmit,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@highlight-run/rrweb",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.8",
|
|
4
4
|
"description": "record and replay the web",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"prepare": "npm run prepack",
|
|
@@ -76,12 +76,12 @@
|
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
78
|
"@highlight-run/rrdom": "0.1.17",
|
|
79
|
-
"@highlight-run/rrweb-snapshot": "1.1.
|
|
79
|
+
"@highlight-run/rrweb-snapshot": "1.1.30",
|
|
80
80
|
"@types/css-font-loading-module": "0.0.7",
|
|
81
81
|
"@xstate/fsm": "^1.4.0",
|
|
82
82
|
"base64-arraybuffer": "^1.0.1",
|
|
83
83
|
"fflate": "^0.4.4",
|
|
84
84
|
"mitt": "^3.0.0"
|
|
85
85
|
},
|
|
86
|
-
"gitHead": "
|
|
86
|
+
"gitHead": "ef09ecc9bc1fc3b9469a96e37f232b139e303c9b"
|
|
87
87
|
}
|
|
@@ -24,6 +24,9 @@ export declare class CanvasManager {
|
|
|
24
24
|
blockClass: blockClass;
|
|
25
25
|
mirror: Mirror;
|
|
26
26
|
sampling?: 'all' | number;
|
|
27
|
+
resizeQuality?: 'pixelated' | 'low' | 'medium' | 'high';
|
|
28
|
+
resizeFactor?: number;
|
|
29
|
+
maxSnapshotDimension?: number;
|
|
27
30
|
});
|
|
28
31
|
private processMutation;
|
|
29
32
|
private initCanvasFPSObserver;
|
package/typings/types.d.ts
CHANGED
|
@@ -128,6 +128,12 @@ export declare type canvasEventWithTime = eventWithTime & {
|
|
|
128
128
|
};
|
|
129
129
|
export declare type blockClass = string | RegExp;
|
|
130
130
|
export declare type maskTextClass = string | RegExp;
|
|
131
|
+
export declare type CanvasSamplingStrategy = Partial<{
|
|
132
|
+
fps: 'all' | number;
|
|
133
|
+
resizeFactor: number;
|
|
134
|
+
resizeQuality: 'pixelated' | 'low' | 'medium' | 'high';
|
|
135
|
+
maxSnapshotDimension: number;
|
|
136
|
+
}>;
|
|
131
137
|
export declare type SamplingStrategy = Partial<{
|
|
132
138
|
mousemove: boolean | number;
|
|
133
139
|
mousemoveCallback: number;
|
|
@@ -135,7 +141,7 @@ export declare type SamplingStrategy = Partial<{
|
|
|
135
141
|
scroll: number;
|
|
136
142
|
media: number;
|
|
137
143
|
input: 'all' | 'last';
|
|
138
|
-
canvas:
|
|
144
|
+
canvas: CanvasSamplingStrategy;
|
|
139
145
|
}>;
|
|
140
146
|
export declare type RecordPlugin<TOptions = unknown> = {
|
|
141
147
|
name: string;
|
|
@@ -387,6 +393,8 @@ export declare type ImageBitmapDataURLWorkerParams = {
|
|
|
387
393
|
bitmap: ImageBitmap;
|
|
388
394
|
width: number;
|
|
389
395
|
height: number;
|
|
396
|
+
canvasWidth: number;
|
|
397
|
+
canvasHeight: number;
|
|
390
398
|
};
|
|
391
399
|
export declare type ImageBitmapDataURLWorkerResponse = {
|
|
392
400
|
id: number;
|
|
@@ -396,6 +404,8 @@ export declare type ImageBitmapDataURLWorkerResponse = {
|
|
|
396
404
|
base64: string;
|
|
397
405
|
width: number;
|
|
398
406
|
height: number;
|
|
407
|
+
canvasWidth: number;
|
|
408
|
+
canvasHeight: number;
|
|
399
409
|
};
|
|
400
410
|
export declare type fontParam = {
|
|
401
411
|
family: string;
|