@highlight-run/rrweb 1.2.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 (191) hide show
  1. package/dist/plugins/console-record.js +454 -0
  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 +164 -0
  5. package/dist/plugins/console-replay.min.js +5 -0
  6. package/dist/plugins/console-replay.min.js.map +1 -0
  7. package/dist/plugins/sequential-id-record.js +30 -0
  8. package/dist/plugins/sequential-id-record.min.js +2 -0
  9. package/dist/plugins/sequential-id-record.min.js.map +1 -0
  10. package/dist/plugins/sequential-id-replay.js +33 -0
  11. package/dist/plugins/sequential-id-replay.min.js +2 -0
  12. package/dist/plugins/sequential-id-replay.min.js.map +1 -0
  13. package/dist/record/rrweb-record-pack.js +664 -0
  14. package/dist/record/rrweb-record-pack.min.js +4 -0
  15. package/dist/record/rrweb-record-pack.min.js.map +1 -0
  16. package/dist/record/rrweb-record.js +3202 -0
  17. package/dist/record/rrweb-record.min.js +5 -0
  18. package/dist/record/rrweb-record.min.js.map +1 -0
  19. package/dist/replay/rrweb-replay-unpack.js +4926 -0
  20. package/dist/replay/rrweb-replay-unpack.min.js +18 -0
  21. package/dist/replay/rrweb-replay-unpack.min.js.map +1 -0
  22. package/dist/replay/rrweb-replay.js +4518 -0
  23. package/dist/replay/rrweb-replay.min.js +18 -0
  24. package/dist/replay/rrweb-replay.min.js.map +1 -0
  25. package/dist/rrweb-all.js +8889 -0
  26. package/dist/rrweb-all.min.js +29 -0
  27. package/dist/rrweb-all.min.js.map +1 -0
  28. package/dist/rrweb.js +7558 -0
  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/@xstate/fsm/es/index.js +17 -0
  38. package/es/rrweb/ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js +49 -0
  39. package/es/rrweb/ext/fflate/esm/browser.js +777 -0
  40. package/es/rrweb/ext/mitt/dist/mitt.es.js +63 -0
  41. package/es/rrweb/ext/tslib/tslib.es6.js +38 -0
  42. package/es/rrweb/packages/rrdom/es/virtual-dom.js +1099 -0
  43. package/es/rrweb/packages/rrweb/src/entries/all.js +13 -0
  44. package/es/rrweb/packages/rrweb/src/index.js +14 -0
  45. package/es/rrweb/packages/rrweb/src/packer/base.js +3 -0
  46. package/es/rrweb/packages/rrweb/src/packer/pack.js +9 -0
  47. package/es/rrweb/packages/rrweb/src/packer/unpack.js +29 -0
  48. package/es/rrweb/packages/rrweb/src/plugins/console/record/error-stack-parser.js +178 -0
  49. package/es/rrweb/packages/rrweb/src/plugins/console/record/index.js +115 -0
  50. package/es/rrweb/packages/rrweb/src/plugins/console/record/stringify.js +128 -0
  51. package/es/rrweb/packages/rrweb/src/plugins/console/replay/index.js +94 -0
  52. package/es/rrweb/packages/rrweb/src/plugins/sequential-id/record/index.js +22 -0
  53. package/es/rrweb/packages/rrweb/src/plugins/sequential-id/replay/index.js +28 -0
  54. package/es/rrweb/packages/rrweb/src/record/iframe-manager.js +31 -0
  55. package/es/rrweb/packages/rrweb/src/record/index.js +356 -0
  56. package/es/rrweb/packages/rrweb/src/record/mutation.js +491 -0
  57. package/es/rrweb/packages/rrweb/src/record/observer.js +590 -0
  58. package/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js +49 -0
  59. package/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js +172 -0
  60. package/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js +25 -0
  61. package/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js +123 -0
  62. package/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js +59 -0
  63. package/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js +43 -0
  64. package/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js +31 -0
  65. package/es/rrweb/packages/rrweb/src/replay/canvas/2d.js +29 -0
  66. package/es/rrweb/packages/rrweb/src/replay/canvas/deserialize-args.js +67 -0
  67. package/es/rrweb/packages/rrweb/src/replay/canvas/index.js +43 -0
  68. package/es/rrweb/packages/rrweb/src/replay/canvas/webgl.js +62 -0
  69. package/es/rrweb/packages/rrweb/src/replay/index.js +1555 -0
  70. package/es/rrweb/packages/rrweb/src/replay/machine.js +281 -0
  71. package/es/rrweb/packages/rrweb/src/replay/smoothscroll.js +219 -0
  72. package/es/rrweb/packages/rrweb/src/replay/styles/inject-style.js +8 -0
  73. package/es/rrweb/packages/rrweb/src/replay/timer.js +92 -0
  74. package/es/rrweb/packages/rrweb/src/types.js +75 -0
  75. package/es/rrweb/packages/rrweb/src/utils.js +315 -0
  76. package/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js +1821 -0
  77. package/lib/plugins/console-record.js +492 -0
  78. package/lib/plugins/console-replay.js +218 -0
  79. package/lib/plugins/sequential-id-record.js +27 -0
  80. package/lib/plugins/sequential-id-replay.js +32 -0
  81. package/lib/record/rrweb-record-pack.js +787 -0
  82. package/lib/record/rrweb-record.js +3363 -0
  83. package/lib/replay/rrweb-replay-unpack.js +5075 -0
  84. package/lib/replay/rrweb-replay.js +4665 -0
  85. package/lib/rrweb-all.js +9181 -0
  86. package/lib/rrweb.js +7814 -0
  87. package/package.json +41 -42
  88. package/typings/entries/all.d.ts +6 -0
  89. package/{dist → typings}/entries/record-pack.d.ts +0 -0
  90. package/{dist → typings}/entries/replay-unpack.d.ts +0 -0
  91. package/{dist → typings}/index.d.ts +1 -2
  92. package/{dist → typings}/packer/base.d.ts +1 -1
  93. package/{dist → typings}/packer/index.d.ts +0 -0
  94. package/{dist → typings}/packer/pack.d.ts +0 -0
  95. package/{dist → typings}/packer/unpack.d.ts +0 -0
  96. package/{dist → typings}/plugins/console/record/error-stack-parser.d.ts +0 -0
  97. package/{dist → typings}/plugins/console/record/index.d.ts +4 -3
  98. package/{dist → typings}/plugins/console/record/stringify.d.ts +1 -1
  99. package/{dist → typings}/plugins/console/replay/index.d.ts +2 -2
  100. package/{dist → typings}/plugins/sequential-id/record/index.d.ts +1 -1
  101. package/{dist → typings}/plugins/sequential-id/replay/index.d.ts +1 -1
  102. package/{dist → typings}/record/iframe-manager.d.ts +3 -3
  103. package/{dist/plugins → typings}/record/index.d.ts +9 -9
  104. package/{dist → typings}/record/mutation.d.ts +6 -8
  105. package/typings/record/observer.d.ts +7 -0
  106. package/{dist/plugins → typings}/record/observers/canvas/2d.d.ts +3 -2
  107. package/{dist → typings}/record/observers/canvas/canvas-manager.d.ts +5 -2
  108. package/{dist/plugins → typings}/record/observers/canvas/canvas.d.ts +2 -2
  109. package/typings/record/observers/canvas/serialize-args.d.ts +6 -0
  110. package/{dist/plugins → typings}/record/observers/canvas/webgl.d.ts +3 -2
  111. package/typings/record/observers/canvas/webgl2.d.ts +2 -0
  112. package/typings/record/shadow-dom-manager.d.ts +22 -0
  113. package/typings/record/stylesheet-manager.d.ts +12 -0
  114. package/typings/record/workers/image-bitmap-data-url-worker.d.ts +5 -0
  115. package/{dist → typings}/replay/canvas/2d.d.ts +3 -3
  116. package/typings/replay/canvas/deserialize-args.d.ts +7 -0
  117. package/{dist/plugins → typings}/replay/canvas/index.d.ts +10 -9
  118. package/typings/replay/canvas/webgl.d.ts +9 -0
  119. package/{dist → typings}/replay/index.d.ts +7 -9
  120. package/{dist → typings}/replay/machine.d.ts +0 -0
  121. package/{dist → typings}/replay/smoothscroll.d.ts +0 -0
  122. package/{dist → typings}/replay/styles/inject-style.d.ts +0 -0
  123. package/{dist → typings}/replay/timer.d.ts +0 -0
  124. package/{dist → typings}/rrdom/index.d.ts +0 -0
  125. package/{dist → typings}/rrdom/tree-node.d.ts +0 -0
  126. package/{dist/plugins → typings}/types.d.ts +536 -509
  127. package/typings/utils.d.ts +43 -0
  128. package/CHANGELOG.md +0 -26
  129. package/README.md +0 -124
  130. package/README.zh_CN.md +0 -122
  131. package/dist/entries/all.d.ts +0 -4
  132. package/dist/index.css +0 -82
  133. package/dist/index.css.map +0 -1
  134. package/dist/index.js +0 -3
  135. package/dist/index.js.LICENSE.txt +0 -14
  136. package/dist/index.js.map +0 -1
  137. package/dist/plugins/entries/all.d.ts +0 -4
  138. package/dist/plugins/entries/record-pack.d.ts +0 -2
  139. package/dist/plugins/entries/replay-unpack.d.ts +0 -2
  140. package/dist/plugins/index.d.ts +0 -9
  141. package/dist/plugins/packer/base.d.ts +0 -7
  142. package/dist/plugins/packer/index.d.ts +0 -2
  143. package/dist/plugins/packer/pack.d.ts +0 -2
  144. package/dist/plugins/packer/unpack.d.ts +0 -2
  145. package/dist/plugins/plugins/console/record/error-stack-parser.d.ts +0 -37
  146. package/dist/plugins/plugins/console/record/index.d.ts +0 -41
  147. package/dist/plugins/plugins/console/record/stringify.d.ts +0 -2
  148. package/dist/plugins/plugins/console/replay/index.d.ts +0 -9
  149. package/dist/plugins/plugins/sequential-id/record/index.d.ts +0 -6
  150. package/dist/plugins/plugins/sequential-id/replay/index.d.ts +0 -7
  151. package/dist/plugins/record/iframe-manager.d.ts +0 -13
  152. package/dist/plugins/record/mutation.d.ts +0 -45
  153. package/dist/plugins/record/observer.d.ts +0 -11
  154. package/dist/plugins/record/observers/canvas/canvas-manager.d.ts +0 -32
  155. package/dist/plugins/record/observers/canvas/serialize-args.d.ts +0 -6
  156. package/dist/plugins/record/shadow-dom-manager.d.ts +0 -34
  157. package/dist/plugins/replay/canvas/2d.d.ts +0 -9
  158. package/dist/plugins/replay/canvas/webgl.d.ts +0 -11
  159. package/dist/plugins/replay/index.d.ts +0 -82
  160. package/dist/plugins/replay/machine.d.ts +0 -85
  161. package/dist/plugins/replay/smoothscroll.d.ts +0 -1
  162. package/dist/plugins/replay/styles/inject-style.d.ts +0 -2
  163. package/dist/plugins/replay/timer.d.ts +0 -19
  164. package/dist/plugins/replay/virtual-styles.d.ts +0 -43
  165. package/dist/plugins/rrdom/index.d.ts +0 -1
  166. package/dist/plugins/rrdom/tree-node.d.ts +0 -20
  167. package/dist/plugins/snapshot/css.d.ts +0 -92
  168. package/dist/plugins/snapshot/index.d.ts +0 -5
  169. package/dist/plugins/snapshot/rebuild.d.ts +0 -19
  170. package/dist/plugins/snapshot/snapshot.d.ts +0 -49
  171. package/dist/plugins/snapshot/types.d.ts +0 -99
  172. package/dist/plugins/snapshot/utils.d.ts +0 -11
  173. package/dist/plugins/utils.d.ts +0 -71
  174. package/dist/record/index.d.ts +0 -9
  175. package/dist/record/observer.d.ts +0 -11
  176. package/dist/record/observers/canvas/2d.d.ts +0 -2
  177. package/dist/record/observers/canvas/canvas.d.ts +0 -2
  178. package/dist/record/observers/canvas/serialize-args.d.ts +0 -6
  179. package/dist/record/observers/canvas/webgl.d.ts +0 -2
  180. package/dist/record/shadow-dom-manager.d.ts +0 -34
  181. package/dist/replay/canvas/index.d.ts +0 -9
  182. package/dist/replay/canvas/webgl.d.ts +0 -11
  183. package/dist/replay/virtual-styles.d.ts +0 -43
  184. package/dist/snapshot/css.d.ts +0 -92
  185. package/dist/snapshot/index.d.ts +0 -5
  186. package/dist/snapshot/rebuild.d.ts +0 -19
  187. package/dist/snapshot/snapshot.d.ts +0 -49
  188. package/dist/snapshot/types.d.ts +0 -99
  189. package/dist/snapshot/utils.d.ts +0 -11
  190. package/dist/types.d.ts +0 -509
  191. package/dist/utils.d.ts +0 -71
@@ -0,0 +1,315 @@
1
+ import { IGNORED_NODE, isShadowRoot } from '../../rrweb-snapshot/es/rrweb-snapshot.js';
2
+
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;
313
+ }
314
+
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 };