@highlight-run/rrweb 2.0.1 → 2.0.4

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.
Files changed (117) hide show
  1. package/dist/plugins/console-record.js +408 -609
  2. package/dist/plugins/console-record.min.js +12 -15
  3. package/dist/plugins/console-record.min.js.map +1 -1
  4. package/dist/plugins/console-replay.js +142 -271
  5. package/dist/plugins/console-replay.min.js +4 -15
  6. package/dist/plugins/console-replay.min.js.map +1 -1
  7. package/dist/plugins/sequential-id-record.js +23 -26
  8. package/dist/plugins/sequential-id-record.min.js +1 -1
  9. package/dist/plugins/sequential-id-record.min.js.map +1 -1
  10. package/dist/plugins/sequential-id-replay.js +26 -30
  11. package/dist/plugins/sequential-id-replay.min.js +1 -1
  12. package/dist/plugins/sequential-id-replay.min.js.map +1 -1
  13. package/dist/record/rrweb-record-pack.js +63 -146
  14. package/dist/record/rrweb-record-pack.min.js +3 -15
  15. package/dist/record/rrweb-record-pack.min.js.map +1 -1
  16. package/dist/record/rrweb-record.js +3002 -3118
  17. package/dist/record/rrweb-record.min.js +4 -15
  18. package/dist/record/rrweb-record.min.js.map +1 -1
  19. package/dist/replay/rrweb-replay-unpack.js +4354 -4054
  20. package/dist/replay/rrweb-replay-unpack.min.js +5 -17
  21. package/dist/replay/rrweb-replay-unpack.min.js.map +1 -1
  22. package/dist/replay/rrweb-replay.js +4286 -3984
  23. package/dist/replay/rrweb-replay.min.js +5 -17
  24. package/dist/replay/rrweb-replay.min.js.map +1 -1
  25. package/dist/rrweb-all.js +7634 -7453
  26. package/dist/rrweb-all.min.js +16 -17
  27. package/dist/rrweb-all.min.js.map +1 -1
  28. package/dist/rrweb.js +7339 -7075
  29. package/dist/rrweb.min.js +6 -17
  30. package/dist/rrweb.min.js.map +1 -1
  31. package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +12 -0
  32. package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +7 -0
  33. package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +31 -0
  34. package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +11 -0
  35. package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +18 -0
  36. package/es/rrweb/_virtual/image-bitmap-data-url-worker.js +6 -0
  37. package/es/rrweb/ext/mitt/dist/mitt.es.js +1 -1
  38. package/es/rrweb/ext/tslib/tslib.es6.js +38 -0
  39. package/es/rrweb/packages/rrdom/es/virtual-dom.js +1099 -0
  40. package/es/rrweb/packages/rrweb/src/index.js +6 -4
  41. package/es/rrweb/packages/rrweb/src/packer/base.js +1 -1
  42. package/es/rrweb/packages/rrweb/src/packer/pack.js +4 -5
  43. package/es/rrweb/packages/rrweb/src/packer/unpack.js +24 -24
  44. package/es/rrweb/packages/rrweb/src/plugins/console/record/error-stack-parser.js +175 -176
  45. package/es/rrweb/packages/rrweb/src/plugins/console/record/index.js +109 -128
  46. package/es/rrweb/packages/rrweb/src/plugins/console/record/stringify.js +125 -138
  47. package/es/rrweb/packages/rrweb/src/plugins/console/replay/index.js +88 -105
  48. package/es/rrweb/packages/rrweb/src/plugins/sequential-id/record/index.js +19 -20
  49. package/es/rrweb/packages/rrweb/src/plugins/sequential-id/replay/index.js +25 -25
  50. package/es/rrweb/packages/rrweb/src/record/iframe-manager.js +29 -30
  51. package/es/rrweb/packages/rrweb/src/record/index.js +348 -373
  52. package/es/rrweb/packages/rrweb/src/record/mutation.js +487 -528
  53. package/es/rrweb/packages/rrweb/src/record/observer.js +584 -659
  54. package/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js +44 -73
  55. package/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js +166 -87
  56. package/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js +21 -26
  57. package/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js +119 -112
  58. package/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js +53 -72
  59. package/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js +38 -40
  60. package/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js +31 -0
  61. package/es/rrweb/packages/rrweb/src/replay/canvas/2d.js +27 -23
  62. package/es/rrweb/packages/rrweb/src/replay/canvas/deserialize-args.js +67 -0
  63. package/es/rrweb/packages/rrweb/src/replay/canvas/index.js +37 -29
  64. package/es/rrweb/packages/rrweb/src/replay/canvas/webgl.js +58 -120
  65. package/es/rrweb/packages/rrweb/src/replay/index.js +1545 -1854
  66. package/es/rrweb/packages/rrweb/src/replay/machine.js +275 -315
  67. package/es/rrweb/packages/rrweb/src/replay/smoothscroll.js +216 -218
  68. package/es/rrweb/packages/rrweb/src/replay/styles/inject-style.js +7 -7
  69. package/es/rrweb/packages/rrweb/src/replay/timer.js +87 -91
  70. package/es/rrweb/packages/rrweb/src/types.js +72 -72
  71. package/es/rrweb/packages/rrweb/src/utils.js +312 -506
  72. package/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js +195 -71
  73. package/lib/plugins/console-record.js +469 -627
  74. package/lib/plugins/console-replay.js +198 -268
  75. package/lib/plugins/sequential-id-record.js +19 -20
  76. package/lib/plugins/sequential-id-replay.js +25 -25
  77. package/lib/record/rrweb-record-pack.js +184 -139
  78. package/lib/record/rrweb-record.js +2473 -2425
  79. package/lib/replay/rrweb-replay-unpack.js +3797 -3343
  80. package/lib/replay/rrweb-replay.js +3742 -3288
  81. package/lib/rrweb-all.js +6725 -6247
  82. package/lib/rrweb.js +6157 -5632
  83. package/package.json +14 -13
  84. package/typings/packer/base.d.ts +1 -1
  85. package/typings/plugins/console/record/index.d.ts +1 -1
  86. package/typings/plugins/console/record/stringify.d.ts +1 -1
  87. package/typings/plugins/sequential-id/record/index.d.ts +1 -1
  88. package/typings/plugins/sequential-id/replay/index.d.ts +1 -1
  89. package/typings/record/iframe-manager.d.ts +3 -3
  90. package/typings/record/index.d.ts +1 -1
  91. package/typings/record/mutation.d.ts +2 -1
  92. package/typings/record/observers/canvas/2d.d.ts +2 -1
  93. package/typings/record/observers/canvas/canvas-manager.d.ts +5 -2
  94. package/typings/record/observers/canvas/canvas.d.ts +1 -1
  95. package/typings/record/observers/canvas/serialize-args.d.ts +5 -5
  96. package/typings/record/observers/canvas/webgl.d.ts +2 -1
  97. package/typings/record/shadow-dom-manager.d.ts +2 -1
  98. package/typings/record/stylesheet-manager.d.ts +12 -0
  99. package/typings/record/workers/image-bitmap-data-url-worker.d.ts +5 -0
  100. package/typings/replay/canvas/2d.d.ts +3 -3
  101. package/typings/replay/canvas/deserialize-args.d.ts +7 -0
  102. package/typings/replay/canvas/index.d.ts +4 -3
  103. package/typings/replay/canvas/webgl.d.ts +3 -5
  104. package/typings/replay/index.d.ts +7 -10
  105. package/typings/types.d.ts +45 -17
  106. package/typings/utils.d.ts +17 -44
  107. package/dist/replay/rrweb-replay-unpack.min.css +0 -2
  108. package/dist/replay/rrweb-replay-unpack.min.css.map +0 -1
  109. package/dist/replay/rrweb-replay.min.css +0 -2
  110. package/dist/replay/rrweb-replay.min.css.map +0 -1
  111. package/dist/rrweb-all.min.css +0 -2
  112. package/dist/rrweb-all.min.css.map +0 -1
  113. package/dist/rrweb.min.css +0 -2
  114. package/dist/rrweb.min.css.map +0 -1
  115. package/es/rrweb/packages/rrweb/ext/tslib/tslib.es6.js +0 -78
  116. package/es/rrweb/packages/rrweb/src/replay/virtual-styles.js +0 -121
  117. package/typings/replay/virtual-styles.d.ts +0 -43
@@ -1,509 +1,315 @@
1
- import { __values } from '../ext/tslib/tslib.es6.js';
2
- import { IncrementalSource } from './types.js';
3
- import { IGNORED_NODE, isShadowRoot, NodeType } from '../../rrweb-snapshot/es/rrweb-snapshot.js';
1
+ import { IGNORED_NODE, isShadowRoot } from '../../rrweb-snapshot/es/rrweb-snapshot.js';
4
2
 
5
- function on(type, fn, target) {
6
- if (target === void 0) { target = document; }
7
- var options = { capture: true, passive: true };
8
- target.addEventListener(type, fn, options);
9
- return function () { return target.removeEventListener(type, fn, options); };
10
- }
11
- function createMirror() {
12
- return {
13
- map: {},
14
- getId: function (n) {
15
- if (!n || !n.__sn) {
16
- return -1;
17
- }
18
- return n.__sn.id;
19
- },
20
- getNode: function (id) {
21
- return this.map[id] || null;
22
- },
23
- removeNodeFromMap: function (n) {
24
- var _this = this;
25
- var id = n.__sn && n.__sn.id;
26
- delete this.map[id];
27
- if (n.childNodes) {
28
- n.childNodes.forEach(function (child) {
29
- return _this.removeNodeFromMap(child);
30
- });
31
- }
32
- },
33
- has: function (id) {
34
- return this.map.hasOwnProperty(id);
35
- },
36
- reset: function () {
37
- this.map = {};
38
- },
39
- };
40
- }
41
- var DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +
42
- '\r\n' +
43
- 'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +
44
- '\r\n' +
45
- 'or you can use record.mirror to access the mirror instance during recording.';
46
- var _mirror = {
47
- map: {},
48
- getId: function () {
49
- console.error(DEPARTED_MIRROR_ACCESS_WARNING);
50
- return -1;
51
- },
52
- getNode: function () {
53
- console.error(DEPARTED_MIRROR_ACCESS_WARNING);
54
- return null;
55
- },
56
- removeNodeFromMap: function () {
57
- console.error(DEPARTED_MIRROR_ACCESS_WARNING);
58
- },
59
- has: function () {
60
- console.error(DEPARTED_MIRROR_ACCESS_WARNING);
61
- return false;
62
- },
63
- reset: function () {
64
- console.error(DEPARTED_MIRROR_ACCESS_WARNING);
65
- },
66
- };
67
- if (typeof window !== 'undefined' && window.Proxy && window.Reflect) {
68
- _mirror = new Proxy(_mirror, {
69
- get: function (target, prop, receiver) {
70
- if (prop === 'map') {
71
- console.error(DEPARTED_MIRROR_ACCESS_WARNING);
72
- }
73
- return Reflect.get(target, prop, receiver);
74
- },
75
- });
76
- }
77
- function throttle(func, wait, options) {
78
- if (options === void 0) { options = {}; }
79
- var timeout = null;
80
- var previous = 0;
81
- return function (arg) {
82
- var now = Date.now();
83
- if (!previous && options.leading === false) {
84
- previous = now;
85
- }
86
- var remaining = wait - (now - previous);
87
- var context = this;
88
- var args = arguments;
89
- if (remaining <= 0 || remaining > wait) {
90
- if (timeout) {
91
- clearTimeout(timeout);
92
- timeout = null;
93
- }
94
- previous = now;
95
- func.apply(context, args);
96
- }
97
- else if (!timeout && options.trailing !== false) {
98
- timeout = setTimeout(function () {
99
- previous = options.leading === false ? 0 : Date.now();
100
- timeout = null;
101
- func.apply(context, args);
102
- }, remaining);
103
- }
104
- };
105
- }
106
- function hookSetter(target, key, d, isRevoked, win) {
107
- if (win === void 0) { win = window; }
108
- var original = win.Object.getOwnPropertyDescriptor(target, key);
109
- win.Object.defineProperty(target, key, isRevoked
110
- ? d
111
- : {
112
- set: function (value) {
113
- var _this = this;
114
- setTimeout(function () {
115
- d.set.call(_this, value);
116
- }, 0);
117
- if (original && original.set) {
118
- original.set.call(this, value);
119
- }
120
- },
121
- });
122
- return function () { return hookSetter(target, key, original || {}, true); };
123
- }
124
- function patch(source, name, replacement) {
125
- try {
126
- if (!(name in source)) {
127
- return function () { };
128
- }
129
- var original_1 = source[name];
130
- var wrapped = replacement(original_1);
131
- if (typeof wrapped === 'function') {
132
- wrapped.prototype = wrapped.prototype || {};
133
- Object.defineProperties(wrapped, {
134
- __rrweb_original__: {
135
- enumerable: false,
136
- value: original_1,
137
- },
138
- });
139
- }
140
- source[name] = wrapped;
141
- return function () {
142
- source[name] = original_1;
143
- };
144
- }
145
- catch (_a) {
146
- return function () { };
147
- }
148
- }
149
- function getWindowHeight() {
150
- return (window.innerHeight ||
151
- (document.documentElement && document.documentElement.clientHeight) ||
152
- (document.body && document.body.clientHeight));
153
- }
154
- function getWindowWidth() {
155
- return (window.innerWidth ||
156
- (document.documentElement && document.documentElement.clientWidth) ||
157
- (document.body && document.body.clientWidth));
158
- }
159
- var isCanvasNode = function (node) {
160
- try {
161
- if (node instanceof HTMLElement) {
162
- return node.tagName === 'CANVAS';
163
- }
164
- }
165
- catch (_a) {
166
- return false;
167
- }
168
- return false;
169
- };
170
- function isBlocked(node, blockClass) {
171
- if (!node) {
172
- return false;
173
- }
174
- if (node.nodeType === node.ELEMENT_NODE) {
175
- var needBlock_1 = false;
176
- if (typeof blockClass === 'string') {
177
- if (node.closest !== undefined) {
178
- return node.closest('.' + blockClass) !== null;
179
- }
180
- else {
181
- needBlock_1 = node.classList.contains(blockClass);
182
- }
183
- }
184
- else {
185
- node.classList.forEach(function (className) {
186
- if (blockClass.test(className)) {
187
- needBlock_1 = true;
188
- }
189
- });
190
- }
191
- return needBlock_1 || isBlocked(node.parentNode, blockClass);
192
- }
193
- if (node.nodeType === node.TEXT_NODE) {
194
- return isBlocked(node.parentNode, blockClass);
195
- }
196
- return isBlocked(node.parentNode, blockClass);
197
- }
198
- function isIgnored(n) {
199
- if ('__sn' in n) {
200
- return n.__sn.id === IGNORED_NODE;
201
- }
202
- return false;
203
- }
204
- function isAncestorRemoved(target, mirror) {
205
- if (isShadowRoot(target)) {
206
- return false;
207
- }
208
- var id = mirror.getId(target);
209
- if (!mirror.has(id)) {
210
- return true;
211
- }
212
- if (target.parentNode &&
213
- target.parentNode.nodeType === target.DOCUMENT_NODE) {
214
- return false;
215
- }
216
- if (!target.parentNode) {
217
- return true;
218
- }
219
- return isAncestorRemoved(target.parentNode, mirror);
220
- }
221
- function isTouchEvent(event) {
222
- return Boolean(event.changedTouches);
223
- }
224
- function polyfill(win) {
225
- if (win === void 0) { win = window; }
226
- if ('NodeList' in win && !win.NodeList.prototype.forEach) {
227
- win.NodeList.prototype.forEach = Array.prototype
228
- .forEach;
229
- }
230
- if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {
231
- win.DOMTokenList.prototype.forEach = Array.prototype
232
- .forEach;
233
- }
234
- if (!Node.prototype.contains) {
235
- Node.prototype.contains = function contains(node) {
236
- if (!(0 in arguments)) {
237
- throw new TypeError('1 argument is required');
238
- }
239
- do {
240
- if (this === node) {
241
- return true;
242
- }
243
- } while ((node = node && node.parentNode));
244
- return false;
245
- };
246
- }
247
- }
248
- var TreeIndex = (function () {
249
- function TreeIndex() {
250
- this.reset();
251
- }
252
- TreeIndex.prototype.add = function (mutation) {
253
- var parentTreeNode = this.indexes.get(mutation.parentId);
254
- var treeNode = {
255
- id: mutation.node.id,
256
- mutation: mutation,
257
- children: [],
258
- texts: [],
259
- attributes: [],
260
- };
261
- if (!parentTreeNode) {
262
- this.tree[treeNode.id] = treeNode;
263
- }
264
- else {
265
- treeNode.parent = parentTreeNode;
266
- parentTreeNode.children[treeNode.id] = treeNode;
267
- }
268
- this.indexes.set(treeNode.id, treeNode);
269
- };
270
- TreeIndex.prototype.remove = function (mutation, mirror) {
271
- var _this = this;
272
- var parentTreeNode = this.indexes.get(mutation.parentId);
273
- var treeNode = this.indexes.get(mutation.id);
274
- var deepRemoveFromMirror = function (id) {
275
- _this.removeIdSet.add(id);
276
- var node = mirror.getNode(id);
277
- node === null || node === void 0 ? void 0 : node.childNodes.forEach(function (childNode) {
278
- if ('__sn' in childNode) {
279
- deepRemoveFromMirror(childNode.__sn.id);
280
- }
281
- });
282
- };
283
- var deepRemoveFromTreeIndex = function (node) {
284
- _this.removeIdSet.add(node.id);
285
- Object.values(node.children).forEach(function (n) { return deepRemoveFromTreeIndex(n); });
286
- var _treeNode = _this.indexes.get(node.id);
287
- if (_treeNode) {
288
- var _parentTreeNode = _treeNode.parent;
289
- if (_parentTreeNode) {
290
- delete _treeNode.parent;
291
- delete _parentTreeNode.children[_treeNode.id];
292
- _this.indexes.delete(mutation.id);
293
- }
294
- }
295
- };
296
- if (!treeNode) {
297
- this.removeNodeMutations.push(mutation);
298
- deepRemoveFromMirror(mutation.id);
299
- }
300
- else if (!parentTreeNode) {
301
- delete this.tree[treeNode.id];
302
- this.indexes.delete(treeNode.id);
303
- deepRemoveFromTreeIndex(treeNode);
304
- }
305
- else {
306
- delete treeNode.parent;
307
- delete parentTreeNode.children[treeNode.id];
308
- this.indexes.delete(mutation.id);
309
- deepRemoveFromTreeIndex(treeNode);
310
- }
311
- };
312
- TreeIndex.prototype.text = function (mutation) {
313
- var treeNode = this.indexes.get(mutation.id);
314
- if (treeNode) {
315
- treeNode.texts.push(mutation);
316
- }
317
- else {
318
- this.textMutations.push(mutation);
319
- }
320
- };
321
- TreeIndex.prototype.attribute = function (mutation) {
322
- var treeNode = this.indexes.get(mutation.id);
323
- if (treeNode) {
324
- treeNode.attributes.push(mutation);
325
- }
326
- else {
327
- this.attributeMutations.push(mutation);
328
- }
329
- };
330
- TreeIndex.prototype.scroll = function (d) {
331
- this.scrollMap.set(d.id, d);
332
- };
333
- TreeIndex.prototype.input = function (d) {
334
- this.inputMap.set(d.id, d);
335
- };
336
- TreeIndex.prototype.flush = function () {
337
- var e_1, _a, e_2, _b;
338
- var _this = this;
339
- var _c = this, tree = _c.tree, removeNodeMutations = _c.removeNodeMutations, textMutations = _c.textMutations, attributeMutations = _c.attributeMutations;
340
- var batchMutationData = {
341
- source: IncrementalSource.Mutation,
342
- removes: removeNodeMutations,
343
- texts: textMutations,
344
- attributes: attributeMutations,
345
- adds: [],
346
- };
347
- var walk = function (treeNode, removed) {
348
- if (removed) {
349
- _this.removeIdSet.add(treeNode.id);
350
- }
351
- batchMutationData.texts = batchMutationData.texts
352
- .concat(removed ? [] : treeNode.texts)
353
- .filter(function (m) { return !_this.removeIdSet.has(m.id); });
354
- batchMutationData.attributes = batchMutationData.attributes
355
- .concat(removed ? [] : treeNode.attributes)
356
- .filter(function (m) { return !_this.removeIdSet.has(m.id); });
357
- if (!_this.removeIdSet.has(treeNode.id) &&
358
- !_this.removeIdSet.has(treeNode.mutation.parentId) &&
359
- !removed) {
360
- batchMutationData.adds.push(treeNode.mutation);
361
- if (treeNode.children) {
362
- Object.values(treeNode.children).forEach(function (n) { return walk(n, false); });
363
- }
364
- }
365
- else {
366
- Object.values(treeNode.children).forEach(function (n) { return walk(n, true); });
367
- }
368
- };
369
- Object.values(tree).forEach(function (n) { return walk(n, false); });
370
- try {
371
- for (var _d = __values(this.scrollMap.keys()), _e = _d.next(); !_e.done; _e = _d.next()) {
372
- var id = _e.value;
373
- if (this.removeIdSet.has(id)) {
374
- this.scrollMap.delete(id);
375
- }
376
- }
377
- }
378
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
379
- finally {
380
- try {
381
- if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
382
- }
383
- finally { if (e_1) throw e_1.error; }
384
- }
385
- try {
386
- for (var _f = __values(this.inputMap.keys()), _g = _f.next(); !_g.done; _g = _f.next()) {
387
- var id = _g.value;
388
- if (this.removeIdSet.has(id)) {
389
- this.inputMap.delete(id);
390
- }
391
- }
392
- }
393
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
394
- finally {
395
- try {
396
- if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
397
- }
398
- finally { if (e_2) throw e_2.error; }
399
- }
400
- var scrollMap = new Map(this.scrollMap);
401
- var inputMap = new Map(this.inputMap);
402
- this.reset();
403
- return {
404
- mutationData: batchMutationData,
405
- scrollMap: scrollMap,
406
- inputMap: inputMap,
407
- };
408
- };
409
- TreeIndex.prototype.reset = function () {
410
- this.tree = [];
411
- this.indexes = new Map();
412
- this.removeNodeMutations = [];
413
- this.textMutations = [];
414
- this.attributeMutations = [];
415
- this.removeIdSet = new Set();
416
- this.scrollMap = new Map();
417
- this.inputMap = new Map();
418
- };
419
- TreeIndex.prototype.idRemoved = function (id) {
420
- return this.removeIdSet.has(id);
421
- };
422
- return TreeIndex;
423
- }());
424
- function queueToResolveTrees(queue) {
425
- var e_3, _a;
426
- var queueNodeMap = {};
427
- var putIntoMap = function (m, parent) {
428
- var nodeInTree = {
429
- value: m,
430
- parent: parent,
431
- children: [],
432
- };
433
- queueNodeMap[m.node.id] = nodeInTree;
434
- return nodeInTree;
435
- };
436
- var queueNodeTrees = [];
437
- try {
438
- for (var queue_1 = __values(queue), queue_1_1 = queue_1.next(); !queue_1_1.done; queue_1_1 = queue_1.next()) {
439
- var mutation = queue_1_1.value;
440
- var nextId = mutation.nextId, parentId = mutation.parentId;
441
- if (nextId && nextId in queueNodeMap) {
442
- var nextInTree = queueNodeMap[nextId];
443
- if (nextInTree.parent) {
444
- var idx = nextInTree.parent.children.indexOf(nextInTree);
445
- nextInTree.parent.children.splice(idx, 0, putIntoMap(mutation, nextInTree.parent));
446
- }
447
- else {
448
- var idx = queueNodeTrees.indexOf(nextInTree);
449
- queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));
450
- }
451
- continue;
452
- }
453
- if (parentId in queueNodeMap) {
454
- var parentInTree = queueNodeMap[parentId];
455
- parentInTree.children.push(putIntoMap(mutation, parentInTree));
456
- continue;
457
- }
458
- queueNodeTrees.push(putIntoMap(mutation, null));
459
- }
460
- }
461
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
462
- finally {
463
- try {
464
- if (queue_1_1 && !queue_1_1.done && (_a = queue_1.return)) _a.call(queue_1);
465
- }
466
- finally { if (e_3) throw e_3.error; }
467
- }
468
- return queueNodeTrees;
469
- }
470
- function iterateResolveTree(tree, cb) {
471
- cb(tree.value);
472
- for (var i = tree.children.length - 1; i >= 0; i--) {
473
- iterateResolveTree(tree.children[i], cb);
474
- }
475
- }
476
- function isIframeINode(node) {
477
- if ('__sn' in node) {
478
- return (node.__sn.type === NodeType.Element && node.__sn.tagName === 'iframe');
479
- }
480
- return false;
481
- }
482
- function getBaseDimension(node, rootIframe) {
483
- var _a, _b;
484
- var frameElement = (_b = (_a = node.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView) === null || _b === void 0 ? void 0 : _b.frameElement;
485
- if (!frameElement || frameElement === rootIframe) {
486
- return {
487
- x: 0,
488
- y: 0,
489
- relativeScale: 1,
490
- absoluteScale: 1,
491
- };
492
- }
493
- var frameDimension = frameElement.getBoundingClientRect();
494
- var frameBaseDimension = getBaseDimension(frameElement, rootIframe);
495
- var relativeScale = frameDimension.height / frameElement.clientHeight;
496
- return {
497
- x: frameDimension.x * frameBaseDimension.relativeScale +
498
- frameBaseDimension.x,
499
- y: frameDimension.y * frameBaseDimension.relativeScale +
500
- frameBaseDimension.y,
501
- relativeScale: relativeScale,
502
- absoluteScale: frameBaseDimension.absoluteScale * relativeScale,
503
- };
504
- }
505
- function hasShadowRoot(n) {
506
- return Boolean(n === null || n === void 0 ? void 0 : n.shadowRoot);
3
+ function on(type, fn, target = document) {
4
+ const options = { capture: true, passive: true };
5
+ target.addEventListener(type, fn, options);
6
+ return () => target.removeEventListener(type, fn, options);
7
+ }
8
+ const DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +
9
+ '\r\n' +
10
+ 'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +
11
+ '\r\n' +
12
+ 'or you can use record.mirror to access the mirror instance during recording.';
13
+ let _mirror = {
14
+ map: {},
15
+ getId() {
16
+ console.error(DEPARTED_MIRROR_ACCESS_WARNING);
17
+ return -1;
18
+ },
19
+ getNode() {
20
+ console.error(DEPARTED_MIRROR_ACCESS_WARNING);
21
+ return null;
22
+ },
23
+ removeNodeFromMap() {
24
+ console.error(DEPARTED_MIRROR_ACCESS_WARNING);
25
+ },
26
+ has() {
27
+ console.error(DEPARTED_MIRROR_ACCESS_WARNING);
28
+ return false;
29
+ },
30
+ reset() {
31
+ console.error(DEPARTED_MIRROR_ACCESS_WARNING);
32
+ },
33
+ };
34
+ if (typeof window !== 'undefined' && window.Proxy && window.Reflect) {
35
+ _mirror = new Proxy(_mirror, {
36
+ get(target, prop, receiver) {
37
+ if (prop === 'map') {
38
+ console.error(DEPARTED_MIRROR_ACCESS_WARNING);
39
+ }
40
+ return Reflect.get(target, prop, receiver);
41
+ },
42
+ });
43
+ }
44
+ function throttle(func, wait, options = {}) {
45
+ let timeout = null;
46
+ let previous = 0;
47
+ return function (arg) {
48
+ const now = Date.now();
49
+ if (!previous && options.leading === false) {
50
+ previous = now;
51
+ }
52
+ const remaining = wait - (now - previous);
53
+ const context = this;
54
+ const args = arguments;
55
+ if (remaining <= 0 || remaining > wait) {
56
+ if (timeout) {
57
+ clearTimeout(timeout);
58
+ timeout = null;
59
+ }
60
+ previous = now;
61
+ func.apply(context, args);
62
+ }
63
+ else if (!timeout && options.trailing !== false) {
64
+ timeout = setTimeout(() => {
65
+ previous = options.leading === false ? 0 : Date.now();
66
+ timeout = null;
67
+ func.apply(context, args);
68
+ }, remaining);
69
+ }
70
+ };
71
+ }
72
+ function hookSetter(target, key, d, isRevoked, win = window) {
73
+ const original = win.Object.getOwnPropertyDescriptor(target, key);
74
+ win.Object.defineProperty(target, key, isRevoked
75
+ ? d
76
+ : {
77
+ set(value) {
78
+ setTimeout(() => {
79
+ d.set.call(this, value);
80
+ }, 0);
81
+ if (original && original.set) {
82
+ original.set.call(this, value);
83
+ }
84
+ },
85
+ });
86
+ return () => hookSetter(target, key, original || {}, true);
87
+ }
88
+ function patch(source, name, replacement) {
89
+ try {
90
+ if (!(name in source)) {
91
+ return () => { };
92
+ }
93
+ const original = source[name];
94
+ const wrapped = replacement(original);
95
+ if (typeof wrapped === 'function') {
96
+ wrapped.prototype = wrapped.prototype || {};
97
+ Object.defineProperties(wrapped, {
98
+ __rrweb_original__: {
99
+ enumerable: false,
100
+ value: original,
101
+ },
102
+ });
103
+ }
104
+ source[name] = wrapped;
105
+ return () => {
106
+ source[name] = original;
107
+ };
108
+ }
109
+ catch (_a) {
110
+ return () => { };
111
+ }
112
+ }
113
+ function getWindowHeight() {
114
+ return (window.innerHeight ||
115
+ (document.documentElement && document.documentElement.clientHeight) ||
116
+ (document.body && document.body.clientHeight));
117
+ }
118
+ function getWindowWidth() {
119
+ return (window.innerWidth ||
120
+ (document.documentElement && document.documentElement.clientWidth) ||
121
+ (document.body && document.body.clientWidth));
122
+ }
123
+ const isCanvasNode = (node) => {
124
+ try {
125
+ if (node instanceof HTMLElement) {
126
+ return node.tagName === 'CANVAS';
127
+ }
128
+ }
129
+ catch (_a) {
130
+ return false;
131
+ }
132
+ return false;
133
+ };
134
+ function isBlocked(node, blockClass) {
135
+ if (!node) {
136
+ return false;
137
+ }
138
+ if (node.nodeType === node.ELEMENT_NODE) {
139
+ let needBlock = false;
140
+ if (typeof blockClass === 'string') {
141
+ if (node.closest !== undefined) {
142
+ return node.closest('.' + blockClass) !== null;
143
+ }
144
+ else {
145
+ needBlock = node.classList.contains(blockClass);
146
+ }
147
+ }
148
+ else {
149
+ node.classList.forEach((className) => {
150
+ if (blockClass.test(className)) {
151
+ needBlock = true;
152
+ }
153
+ });
154
+ }
155
+ return needBlock || isBlocked(node.parentNode, blockClass);
156
+ }
157
+ if (node.nodeType === node.TEXT_NODE) {
158
+ return isBlocked(node.parentNode, blockClass);
159
+ }
160
+ return isBlocked(node.parentNode, blockClass);
161
+ }
162
+ function isSerialized(n, mirror) {
163
+ return mirror.getId(n) !== -1;
164
+ }
165
+ function isIgnored(n, mirror) {
166
+ return mirror.getId(n) === IGNORED_NODE;
167
+ }
168
+ function isAncestorRemoved(target, mirror) {
169
+ if (isShadowRoot(target)) {
170
+ return false;
171
+ }
172
+ const id = mirror.getId(target);
173
+ if (!mirror.has(id)) {
174
+ return true;
175
+ }
176
+ if (target.parentNode &&
177
+ target.parentNode.nodeType === target.DOCUMENT_NODE) {
178
+ return false;
179
+ }
180
+ if (!target.parentNode) {
181
+ return true;
182
+ }
183
+ return isAncestorRemoved(target.parentNode, mirror);
184
+ }
185
+ function isTouchEvent(event) {
186
+ return Boolean(event.changedTouches);
187
+ }
188
+ function polyfill(win = window) {
189
+ if ('NodeList' in win && !win.NodeList.prototype.forEach) {
190
+ win.NodeList.prototype.forEach = Array.prototype
191
+ .forEach;
192
+ }
193
+ if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {
194
+ win.DOMTokenList.prototype.forEach = Array.prototype
195
+ .forEach;
196
+ }
197
+ if (!Node.prototype.contains) {
198
+ Node.prototype.contains = function contains(node) {
199
+ if (!(0 in arguments)) {
200
+ throw new TypeError('1 argument is required');
201
+ }
202
+ do {
203
+ if (this === node) {
204
+ return true;
205
+ }
206
+ } while ((node = node && node.parentNode));
207
+ return false;
208
+ };
209
+ }
210
+ }
211
+ function queueToResolveTrees(queue) {
212
+ const queueNodeMap = {};
213
+ const putIntoMap = (m, parent) => {
214
+ const nodeInTree = {
215
+ value: m,
216
+ parent,
217
+ children: [],
218
+ };
219
+ queueNodeMap[m.node.id] = nodeInTree;
220
+ return nodeInTree;
221
+ };
222
+ const queueNodeTrees = [];
223
+ for (const mutation of queue) {
224
+ const { nextId, parentId } = mutation;
225
+ if (nextId && nextId in queueNodeMap) {
226
+ const nextInTree = queueNodeMap[nextId];
227
+ if (nextInTree.parent) {
228
+ const idx = nextInTree.parent.children.indexOf(nextInTree);
229
+ nextInTree.parent.children.splice(idx, 0, putIntoMap(mutation, nextInTree.parent));
230
+ }
231
+ else {
232
+ const idx = queueNodeTrees.indexOf(nextInTree);
233
+ queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));
234
+ }
235
+ continue;
236
+ }
237
+ if (parentId in queueNodeMap) {
238
+ const parentInTree = queueNodeMap[parentId];
239
+ parentInTree.children.push(putIntoMap(mutation, parentInTree));
240
+ continue;
241
+ }
242
+ queueNodeTrees.push(putIntoMap(mutation, null));
243
+ }
244
+ return queueNodeTrees;
245
+ }
246
+ function iterateResolveTree(tree, cb) {
247
+ cb(tree.value);
248
+ for (let i = tree.children.length - 1; i >= 0; i--) {
249
+ iterateResolveTree(tree.children[i], cb);
250
+ }
251
+ }
252
+ function isSerializedIframe(n, mirror) {
253
+ return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));
254
+ }
255
+ function isSerializedStylesheet(n, mirror) {
256
+ return Boolean(n.nodeName === 'LINK' &&
257
+ n.nodeType === n.ELEMENT_NODE &&
258
+ n.getAttribute &&
259
+ n.getAttribute('rel') === 'stylesheet' &&
260
+ mirror.getMeta(n));
261
+ }
262
+ function getBaseDimension(node, rootIframe) {
263
+ var _a, _b;
264
+ const frameElement = (_b = (_a = node.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView) === null || _b === void 0 ? void 0 : _b.frameElement;
265
+ if (!frameElement || frameElement === rootIframe) {
266
+ return {
267
+ x: 0,
268
+ y: 0,
269
+ relativeScale: 1,
270
+ absoluteScale: 1,
271
+ };
272
+ }
273
+ const frameDimension = frameElement.getBoundingClientRect();
274
+ const frameBaseDimension = getBaseDimension(frameElement, rootIframe);
275
+ const relativeScale = frameDimension.height / frameElement.clientHeight;
276
+ return {
277
+ x: frameDimension.x * frameBaseDimension.relativeScale +
278
+ frameBaseDimension.x,
279
+ y: frameDimension.y * frameBaseDimension.relativeScale +
280
+ frameBaseDimension.y,
281
+ relativeScale,
282
+ absoluteScale: frameBaseDimension.absoluteScale * relativeScale,
283
+ };
284
+ }
285
+ function hasShadowRoot(n) {
286
+ return Boolean(n === null || n === void 0 ? void 0 : n.shadowRoot);
287
+ }
288
+ function getNestedRule(rules, position) {
289
+ const rule = rules[position[0]];
290
+ if (position.length === 1) {
291
+ return rule;
292
+ }
293
+ else {
294
+ return getNestedRule(rule.cssRules[position[1]].cssRules, position.slice(2));
295
+ }
296
+ }
297
+ function getPositionsAndIndex(nestedIndex) {
298
+ const positions = [...nestedIndex];
299
+ const index = positions.pop();
300
+ return { positions, index };
301
+ }
302
+ function uniqueTextMutations(mutations) {
303
+ const idSet = new Set();
304
+ const uniqueMutations = [];
305
+ for (let i = mutations.length; i--;) {
306
+ const mutation = mutations[i];
307
+ if (!idSet.has(mutation.id)) {
308
+ uniqueMutations.push(mutation);
309
+ idSet.add(mutation.id);
310
+ }
311
+ }
312
+ return uniqueMutations;
507
313
  }
508
314
 
509
- export { TreeIndex, _mirror, createMirror, getBaseDimension, getWindowHeight, getWindowWidth, hasShadowRoot, hookSetter, isAncestorRemoved, isBlocked, isCanvasNode, isIframeINode, isIgnored, isTouchEvent, iterateResolveTree, on, patch, polyfill, queueToResolveTrees, throttle };
315
+ export { _mirror, getBaseDimension, getNestedRule, getPositionsAndIndex, getWindowHeight, getWindowWidth, hasShadowRoot, hookSetter, isAncestorRemoved, isBlocked, isCanvasNode, isIgnored, isSerialized, isSerializedIframe, isSerializedStylesheet, isTouchEvent, iterateResolveTree, on, patch, polyfill, queueToResolveTrees, throttle, uniqueTextMutations };