@highlight-run/rrweb 1.2.0 → 2.0.1

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 (185) hide show
  1. package/dist/plugins/console-record.js +655 -0
  2. package/dist/plugins/console-record.min.js +1 -1
  3. package/dist/plugins/console-record.min.js.map +1 -1
  4. package/dist/plugins/console-replay.js +293 -0
  5. package/dist/plugins/console-replay.min.js +16 -0
  6. package/dist/plugins/console-replay.min.js.map +1 -0
  7. package/dist/plugins/sequential-id-record.js +33 -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 +37 -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 +747 -0
  14. package/dist/record/rrweb-record-pack.min.js +16 -0
  15. package/dist/record/rrweb-record-pack.min.js.map +1 -0
  16. package/dist/record/rrweb-record.js +3318 -0
  17. package/dist/record/rrweb-record.min.js +16 -0
  18. package/dist/record/rrweb-record.min.js.map +1 -0
  19. package/dist/replay/rrweb-replay-unpack.js +4626 -0
  20. package/dist/replay/rrweb-replay-unpack.min.css +2 -0
  21. package/dist/replay/rrweb-replay-unpack.min.css.map +1 -0
  22. package/dist/replay/rrweb-replay-unpack.min.js +30 -0
  23. package/dist/replay/rrweb-replay-unpack.min.js.map +1 -0
  24. package/dist/replay/rrweb-replay.js +4216 -0
  25. package/dist/replay/rrweb-replay.min.css +2 -0
  26. package/dist/replay/rrweb-replay.min.css.map +1 -0
  27. package/dist/replay/rrweb-replay.min.js +30 -0
  28. package/dist/replay/rrweb-replay.min.js.map +1 -0
  29. package/dist/rrweb-all.js +8708 -0
  30. package/dist/rrweb-all.min.css +2 -0
  31. package/dist/rrweb-all.min.css.map +1 -0
  32. package/dist/rrweb-all.min.js +30 -0
  33. package/dist/rrweb-all.min.js.map +1 -0
  34. package/dist/rrweb.js +7294 -0
  35. package/dist/rrweb.min.css +2 -0
  36. package/dist/rrweb.min.css.map +1 -0
  37. package/dist/rrweb.min.js +2 -2
  38. package/dist/rrweb.min.js.map +1 -1
  39. package/es/rrweb/ext/@xstate/fsm/es/index.js +17 -0
  40. package/es/rrweb/ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js +49 -0
  41. package/es/rrweb/ext/fflate/esm/browser.js +777 -0
  42. package/es/rrweb/ext/mitt/dist/mitt.es.js +63 -0
  43. package/es/rrweb/packages/rrweb/ext/tslib/tslib.es6.js +78 -0
  44. package/es/rrweb/packages/rrweb/src/entries/all.js +13 -0
  45. package/es/rrweb/packages/rrweb/src/index.js +12 -0
  46. package/es/rrweb/packages/rrweb/src/packer/base.js +3 -0
  47. package/es/rrweb/packages/rrweb/src/packer/pack.js +10 -0
  48. package/es/rrweb/packages/rrweb/src/packer/unpack.js +29 -0
  49. package/es/rrweb/packages/rrweb/src/plugins/console/record/error-stack-parser.js +179 -0
  50. package/es/rrweb/packages/rrweb/src/plugins/console/record/index.js +134 -0
  51. package/es/rrweb/packages/rrweb/src/plugins/console/record/stringify.js +141 -0
  52. package/es/rrweb/packages/rrweb/src/plugins/console/replay/index.js +111 -0
  53. package/es/rrweb/packages/rrweb/src/plugins/sequential-id/record/index.js +23 -0
  54. package/es/rrweb/packages/rrweb/src/plugins/sequential-id/replay/index.js +28 -0
  55. package/es/rrweb/packages/rrweb/src/record/iframe-manager.js +32 -0
  56. package/es/rrweb/packages/rrweb/src/record/index.js +381 -0
  57. package/es/rrweb/packages/rrweb/src/record/mutation.js +532 -0
  58. package/es/rrweb/packages/rrweb/src/record/observer.js +665 -0
  59. package/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js +78 -0
  60. package/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js +93 -0
  61. package/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js +30 -0
  62. package/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js +116 -0
  63. package/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js +78 -0
  64. package/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js +45 -0
  65. package/es/rrweb/packages/rrweb/src/replay/canvas/2d.js +25 -0
  66. package/es/rrweb/packages/rrweb/src/replay/canvas/index.js +35 -0
  67. package/es/rrweb/packages/rrweb/src/replay/canvas/webgl.js +124 -0
  68. package/es/rrweb/packages/rrweb/src/replay/index.js +1864 -0
  69. package/es/rrweb/packages/rrweb/src/replay/machine.js +321 -0
  70. package/es/rrweb/packages/rrweb/src/replay/smoothscroll.js +221 -0
  71. package/es/rrweb/packages/rrweb/src/replay/styles/inject-style.js +8 -0
  72. package/es/rrweb/packages/rrweb/src/replay/timer.js +96 -0
  73. package/es/rrweb/packages/rrweb/src/replay/virtual-styles.js +121 -0
  74. package/es/rrweb/packages/rrweb/src/types.js +75 -0
  75. package/es/rrweb/packages/rrweb/src/utils.js +509 -0
  76. package/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js +1697 -0
  77. package/lib/plugins/console-record.js +650 -0
  78. package/lib/plugins/console-replay.js +288 -0
  79. package/lib/plugins/sequential-id-record.js +28 -0
  80. package/lib/plugins/sequential-id-replay.js +32 -0
  81. package/lib/record/rrweb-record-pack.js +742 -0
  82. package/lib/record/rrweb-record.js +3315 -0
  83. package/lib/replay/rrweb-replay-unpack.js +4621 -0
  84. package/lib/replay/rrweb-replay.js +4211 -0
  85. package/lib/rrweb-all.js +8703 -0
  86. package/lib/rrweb.js +7289 -0
  87. package/package.json +41 -43
  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 +0 -0
  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 +3 -2
  98. package/{dist → typings}/plugins/console/record/stringify.d.ts +0 -0
  99. package/{dist → typings}/plugins/console/replay/index.d.ts +2 -2
  100. package/{dist → typings}/plugins/sequential-id/record/index.d.ts +0 -0
  101. package/{dist → typings}/plugins/sequential-id/replay/index.d.ts +0 -0
  102. package/{dist → typings}/record/iframe-manager.d.ts +1 -1
  103. package/{dist → typings}/record/index.d.ts +0 -0
  104. package/{dist → typings}/record/mutation.d.ts +5 -8
  105. package/typings/record/observer.d.ts +7 -0
  106. package/{dist → typings}/record/observers/canvas/2d.d.ts +0 -0
  107. package/{dist → typings}/record/observers/canvas/canvas-manager.d.ts +0 -0
  108. package/{dist → typings}/record/observers/canvas/canvas.d.ts +0 -0
  109. package/{dist → typings}/record/observers/canvas/serialize-args.d.ts +1 -1
  110. package/{dist → typings}/record/observers/canvas/webgl.d.ts +0 -0
  111. package/typings/record/observers/canvas/webgl2.d.ts +2 -0
  112. package/typings/record/shadow-dom-manager.d.ts +21 -0
  113. package/{dist → typings}/replay/canvas/2d.d.ts +0 -0
  114. package/{dist → typings}/replay/canvas/index.d.ts +0 -0
  115. package/{dist → typings}/replay/canvas/webgl.d.ts +0 -0
  116. package/{dist → typings}/replay/index.d.ts +1 -0
  117. package/{dist → typings}/replay/machine.d.ts +0 -0
  118. package/{dist → typings}/replay/smoothscroll.d.ts +0 -0
  119. package/{dist → typings}/replay/styles/inject-style.d.ts +0 -0
  120. package/{dist → typings}/replay/timer.d.ts +0 -0
  121. package/{dist → typings}/replay/virtual-styles.d.ts +1 -1
  122. package/{dist → typings}/rrdom/index.d.ts +0 -0
  123. package/{dist → typings}/rrdom/tree-node.d.ts +0 -0
  124. package/{dist → typings}/types.d.ts +7 -8
  125. package/{dist → typings}/utils.d.ts +3 -4
  126. package/CHANGELOG.md +0 -26
  127. package/README.md +0 -124
  128. package/README.zh_CN.md +0 -122
  129. package/dist/entries/all.d.ts +0 -4
  130. package/dist/index.css +0 -82
  131. package/dist/index.css.map +0 -1
  132. package/dist/index.js +0 -3
  133. package/dist/index.js.LICENSE.txt +0 -14
  134. package/dist/index.js.map +0 -1
  135. package/dist/plugins/entries/all.d.ts +0 -4
  136. package/dist/plugins/entries/record-pack.d.ts +0 -2
  137. package/dist/plugins/entries/replay-unpack.d.ts +0 -2
  138. package/dist/plugins/index.d.ts +0 -9
  139. package/dist/plugins/packer/base.d.ts +0 -7
  140. package/dist/plugins/packer/index.d.ts +0 -2
  141. package/dist/plugins/packer/pack.d.ts +0 -2
  142. package/dist/plugins/packer/unpack.d.ts +0 -2
  143. package/dist/plugins/plugins/console/record/error-stack-parser.d.ts +0 -37
  144. package/dist/plugins/plugins/console/record/index.d.ts +0 -41
  145. package/dist/plugins/plugins/console/record/stringify.d.ts +0 -2
  146. package/dist/plugins/plugins/console/replay/index.d.ts +0 -9
  147. package/dist/plugins/plugins/sequential-id/record/index.d.ts +0 -6
  148. package/dist/plugins/plugins/sequential-id/replay/index.d.ts +0 -7
  149. package/dist/plugins/record/iframe-manager.d.ts +0 -13
  150. package/dist/plugins/record/index.d.ts +0 -9
  151. package/dist/plugins/record/mutation.d.ts +0 -45
  152. package/dist/plugins/record/observer.d.ts +0 -11
  153. package/dist/plugins/record/observers/canvas/2d.d.ts +0 -2
  154. package/dist/plugins/record/observers/canvas/canvas-manager.d.ts +0 -32
  155. package/dist/plugins/record/observers/canvas/canvas.d.ts +0 -2
  156. package/dist/plugins/record/observers/canvas/serialize-args.d.ts +0 -6
  157. package/dist/plugins/record/observers/canvas/webgl.d.ts +0 -2
  158. package/dist/plugins/record/shadow-dom-manager.d.ts +0 -34
  159. package/dist/plugins/replay/canvas/2d.d.ts +0 -9
  160. package/dist/plugins/replay/canvas/index.d.ts +0 -9
  161. package/dist/plugins/replay/canvas/webgl.d.ts +0 -11
  162. package/dist/plugins/replay/index.d.ts +0 -82
  163. package/dist/plugins/replay/machine.d.ts +0 -85
  164. package/dist/plugins/replay/smoothscroll.d.ts +0 -1
  165. package/dist/plugins/replay/styles/inject-style.d.ts +0 -2
  166. package/dist/plugins/replay/timer.d.ts +0 -19
  167. package/dist/plugins/replay/virtual-styles.d.ts +0 -43
  168. package/dist/plugins/rrdom/index.d.ts +0 -1
  169. package/dist/plugins/rrdom/tree-node.d.ts +0 -20
  170. package/dist/plugins/snapshot/css.d.ts +0 -92
  171. package/dist/plugins/snapshot/index.d.ts +0 -5
  172. package/dist/plugins/snapshot/rebuild.d.ts +0 -19
  173. package/dist/plugins/snapshot/snapshot.d.ts +0 -49
  174. package/dist/plugins/snapshot/types.d.ts +0 -99
  175. package/dist/plugins/snapshot/utils.d.ts +0 -11
  176. package/dist/plugins/types.d.ts +0 -509
  177. package/dist/plugins/utils.d.ts +0 -71
  178. package/dist/record/observer.d.ts +0 -11
  179. package/dist/record/shadow-dom-manager.d.ts +0 -34
  180. package/dist/snapshot/css.d.ts +0 -92
  181. package/dist/snapshot/index.d.ts +0 -5
  182. package/dist/snapshot/rebuild.d.ts +0 -19
  183. package/dist/snapshot/snapshot.d.ts +0 -49
  184. package/dist/snapshot/types.d.ts +0 -99
  185. package/dist/snapshot/utils.d.ts +0 -11
@@ -0,0 +1,665 @@
1
+ import { __read, __values, __spreadArray, __assign } from '../../ext/tslib/tslib.es6.js';
2
+ import { maskInputValue } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';
3
+ import { on, throttle, isTouchEvent, isBlocked, getWindowHeight, getWindowWidth, hookSetter, patch, isCanvasNode } from '../utils.js';
4
+ import { IncrementalSource, MouseInteractions } from '../types.js';
5
+ import MutationBuffer from './mutation.js';
6
+
7
+ var mutationBuffers = [];
8
+ var isCSSGroupingRuleSupported = typeof CSSGroupingRule !== 'undefined';
9
+ var isCSSMediaRuleSupported = typeof CSSMediaRule !== 'undefined';
10
+ var isCSSSupportsRuleSupported = typeof CSSSupportsRule !== 'undefined';
11
+ var isCSSConditionRuleSupported = typeof CSSConditionRule !== 'undefined';
12
+ function getEventTarget(event) {
13
+ try {
14
+ if ('composedPath' in event) {
15
+ var path = event.composedPath();
16
+ if (path.length) {
17
+ return path[0];
18
+ }
19
+ }
20
+ else if ('path' in event && event.path.length) {
21
+ return event.path[0];
22
+ }
23
+ return event.target;
24
+ }
25
+ catch (_a) {
26
+ return event.target;
27
+ }
28
+ }
29
+ function initMutationObserver(options, rootEl) {
30
+ var _a, _b;
31
+ var mutationBuffer = new MutationBuffer();
32
+ mutationBuffers.push(mutationBuffer);
33
+ mutationBuffer.init(options);
34
+ var mutationObserverCtor = window.MutationObserver ||
35
+ window.__rrMutationObserver;
36
+ var angularZoneSymbol = (_b = (_a = window === null || window === void 0 ? void 0 : window.Zone) === null || _a === void 0 ? void 0 : _a.__symbol__) === null || _b === void 0 ? void 0 : _b.call(_a, 'MutationObserver');
37
+ if (angularZoneSymbol &&
38
+ window[angularZoneSymbol]) {
39
+ mutationObserverCtor = window[angularZoneSymbol];
40
+ }
41
+ var observer = new mutationObserverCtor(mutationBuffer.processMutations.bind(mutationBuffer));
42
+ observer.observe(rootEl, {
43
+ attributes: true,
44
+ attributeOldValue: true,
45
+ characterData: true,
46
+ characterDataOldValue: true,
47
+ childList: true,
48
+ subtree: true,
49
+ });
50
+ return observer;
51
+ }
52
+ function initMoveObserver(_a) {
53
+ var mousemoveCb = _a.mousemoveCb, sampling = _a.sampling, doc = _a.doc, mirror = _a.mirror;
54
+ if (sampling.mousemove === false) {
55
+ return function () { };
56
+ }
57
+ var threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;
58
+ var callbackThreshold = typeof sampling.mousemoveCallback === 'number'
59
+ ? sampling.mousemoveCallback
60
+ : 500;
61
+ var positions = [];
62
+ var timeBaseline;
63
+ var wrappedCb = throttle(function (source) {
64
+ var totalOffset = Date.now() - timeBaseline;
65
+ mousemoveCb(positions.map(function (p) {
66
+ p.timeOffset -= totalOffset;
67
+ return p;
68
+ }), source);
69
+ positions = [];
70
+ timeBaseline = null;
71
+ }, callbackThreshold);
72
+ var updatePosition = throttle(function (evt) {
73
+ var target = getEventTarget(evt);
74
+ var _a = isTouchEvent(evt)
75
+ ? evt.changedTouches[0]
76
+ : evt, clientX = _a.clientX, clientY = _a.clientY;
77
+ if (!timeBaseline) {
78
+ timeBaseline = Date.now();
79
+ }
80
+ positions.push({
81
+ x: clientX,
82
+ y: clientY,
83
+ id: mirror.getId(target),
84
+ timeOffset: Date.now() - timeBaseline,
85
+ });
86
+ wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent
87
+ ? IncrementalSource.Drag
88
+ : evt instanceof MouseEvent
89
+ ? IncrementalSource.MouseMove
90
+ : IncrementalSource.TouchMove);
91
+ }, threshold, {
92
+ trailing: false,
93
+ });
94
+ var handlers = [
95
+ on('mousemove', updatePosition, doc),
96
+ on('touchmove', updatePosition, doc),
97
+ on('drag', updatePosition, doc),
98
+ ];
99
+ return function () {
100
+ handlers.forEach(function (h) { return h(); });
101
+ };
102
+ }
103
+ function initMouseInteractionObserver(_a) {
104
+ var mouseInteractionCb = _a.mouseInteractionCb, doc = _a.doc, mirror = _a.mirror, blockClass = _a.blockClass, sampling = _a.sampling;
105
+ if (sampling.mouseInteraction === false) {
106
+ return function () { };
107
+ }
108
+ var disableMap = sampling.mouseInteraction === true ||
109
+ sampling.mouseInteraction === undefined
110
+ ? {}
111
+ : sampling.mouseInteraction;
112
+ var handlers = [];
113
+ var getHandler = function (eventKey) {
114
+ return function (event) {
115
+ var target = getEventTarget(event);
116
+ if (isBlocked(target, blockClass) ||
117
+ isCanvasNode(target)) {
118
+ return;
119
+ }
120
+ var e = isTouchEvent(event) ? event.changedTouches[0] : event;
121
+ if (!e) {
122
+ return;
123
+ }
124
+ var id = mirror.getId(target);
125
+ var clientX = e.clientX, clientY = e.clientY;
126
+ mouseInteractionCb({
127
+ type: MouseInteractions[eventKey],
128
+ id: id,
129
+ x: clientX,
130
+ y: clientY,
131
+ });
132
+ };
133
+ };
134
+ Object.keys(MouseInteractions)
135
+ .filter(function (key) {
136
+ return Number.isNaN(Number(key)) &&
137
+ !key.endsWith('_Departed') &&
138
+ disableMap[key] !== false;
139
+ })
140
+ .forEach(function (eventKey) {
141
+ var eventName = eventKey.toLowerCase();
142
+ var handler = getHandler(eventKey);
143
+ handlers.push(on(eventName, handler, doc));
144
+ });
145
+ return function () {
146
+ handlers.forEach(function (h) { return h(); });
147
+ };
148
+ }
149
+ function initScrollObserver(_a) {
150
+ var scrollCb = _a.scrollCb, doc = _a.doc, mirror = _a.mirror, blockClass = _a.blockClass, sampling = _a.sampling;
151
+ var updatePosition = throttle(function (evt) {
152
+ var target = getEventTarget(evt);
153
+ if (!target || isBlocked(target, blockClass)) {
154
+ return;
155
+ }
156
+ var id = mirror.getId(target);
157
+ if (target === doc) {
158
+ var scrollEl = (doc.scrollingElement || doc.documentElement);
159
+ scrollCb({
160
+ id: id,
161
+ x: scrollEl.scrollLeft,
162
+ y: scrollEl.scrollTop,
163
+ });
164
+ }
165
+ else {
166
+ scrollCb({
167
+ id: id,
168
+ x: target.scrollLeft,
169
+ y: target.scrollTop,
170
+ });
171
+ }
172
+ }, sampling.scroll || 100);
173
+ return on('scroll', updatePosition, doc);
174
+ }
175
+ function initViewportResizeObserver(_a) {
176
+ var viewportResizeCb = _a.viewportResizeCb;
177
+ var lastH = -1;
178
+ var lastW = -1;
179
+ var updateDimension = throttle(function () {
180
+ var height = getWindowHeight();
181
+ var width = getWindowWidth();
182
+ if (lastH !== height || lastW !== width) {
183
+ viewportResizeCb({
184
+ width: Number(width),
185
+ height: Number(height),
186
+ });
187
+ lastH = height;
188
+ lastW = width;
189
+ }
190
+ }, 200);
191
+ return on('resize', updateDimension, window);
192
+ }
193
+ function wrapEventWithUserTriggeredFlag(v, enable) {
194
+ var value = __assign({}, v);
195
+ if (!enable)
196
+ delete value.userTriggered;
197
+ return value;
198
+ }
199
+ var INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];
200
+ var lastInputValueMap = new WeakMap();
201
+ function initInputObserver(_a) {
202
+ var inputCb = _a.inputCb, doc = _a.doc, mirror = _a.mirror, blockClass = _a.blockClass, ignoreClass = _a.ignoreClass, maskInputOptions = _a.maskInputOptions, maskInputFn = _a.maskInputFn, sampling = _a.sampling, userTriggeredOnInput = _a.userTriggeredOnInput;
203
+ function eventHandler(event) {
204
+ var target = getEventTarget(event);
205
+ var userTriggered = event.isTrusted;
206
+ if (target && target.tagName === 'OPTION')
207
+ target = target.parentElement;
208
+ if (!target ||
209
+ !target.tagName ||
210
+ INPUT_TAGS.indexOf(target.tagName) < 0 ||
211
+ isBlocked(target, blockClass)) {
212
+ return;
213
+ }
214
+ var type = target.type;
215
+ if (target.classList.contains(ignoreClass)) {
216
+ return;
217
+ }
218
+ var text = target.value;
219
+ var isChecked = false;
220
+ if (type === 'radio' || type === 'checkbox') {
221
+ isChecked = target.checked;
222
+ }
223
+ else if (maskInputOptions[target.tagName.toLowerCase()] ||
224
+ maskInputOptions[type]) {
225
+ text = maskInputValue({
226
+ maskInputOptions: maskInputOptions,
227
+ tagName: target.tagName,
228
+ type: type,
229
+ value: text,
230
+ maskInputFn: maskInputFn,
231
+ });
232
+ }
233
+ cbWithDedup(target, wrapEventWithUserTriggeredFlag({ text: text, isChecked: isChecked, userTriggered: userTriggered }, userTriggeredOnInput));
234
+ var name = target.name;
235
+ if (type === 'radio' && name && isChecked) {
236
+ doc
237
+ .querySelectorAll("input[type=\"radio\"][name=\"".concat(name, "\"]"))
238
+ .forEach(function (el) {
239
+ if (el !== target) {
240
+ cbWithDedup(el, wrapEventWithUserTriggeredFlag({
241
+ text: el.value,
242
+ isChecked: !isChecked,
243
+ userTriggered: false,
244
+ }, userTriggeredOnInput));
245
+ }
246
+ });
247
+ }
248
+ }
249
+ function cbWithDedup(target, v) {
250
+ var lastInputValue = lastInputValueMap.get(target);
251
+ if (!lastInputValue ||
252
+ lastInputValue.text !== v.text ||
253
+ lastInputValue.isChecked !== v.isChecked) {
254
+ lastInputValueMap.set(target, v);
255
+ var id = mirror.getId(target);
256
+ inputCb(__assign(__assign({}, v), { id: id }));
257
+ }
258
+ }
259
+ var events = sampling.input === 'last' ? ['change'] : ['input', 'change'];
260
+ var handlers = events.map(function (eventName) { return on(eventName, eventHandler, doc); });
261
+ var propertyDescriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value');
262
+ var hookProperties = [
263
+ [HTMLInputElement.prototype, 'value'],
264
+ [HTMLInputElement.prototype, 'checked'],
265
+ [HTMLSelectElement.prototype, 'value'],
266
+ [HTMLTextAreaElement.prototype, 'value'],
267
+ [HTMLSelectElement.prototype, 'selectedIndex'],
268
+ [HTMLOptionElement.prototype, 'selected'],
269
+ ];
270
+ if (propertyDescriptor && propertyDescriptor.set) {
271
+ handlers.push.apply(handlers, __spreadArray([], __read(hookProperties.map(function (p) {
272
+ return hookSetter(p[0], p[1], {
273
+ set: function () {
274
+ eventHandler({ target: this });
275
+ },
276
+ });
277
+ })), false));
278
+ }
279
+ return function () {
280
+ handlers.forEach(function (h) { return h(); });
281
+ };
282
+ }
283
+ function getNestedCSSRulePositions(rule) {
284
+ var positions = [];
285
+ function recurse(childRule, pos) {
286
+ if ((isCSSGroupingRuleSupported &&
287
+ childRule.parentRule instanceof CSSGroupingRule) ||
288
+ (isCSSMediaRuleSupported &&
289
+ childRule.parentRule instanceof CSSMediaRule) ||
290
+ (isCSSSupportsRuleSupported &&
291
+ childRule.parentRule instanceof CSSSupportsRule) ||
292
+ (isCSSConditionRuleSupported &&
293
+ childRule.parentRule instanceof CSSConditionRule)) {
294
+ var rules = Array.from(childRule.parentRule.cssRules);
295
+ var index = rules.indexOf(childRule);
296
+ pos.unshift(index);
297
+ }
298
+ else {
299
+ var rules = Array.from(childRule.parentStyleSheet.cssRules);
300
+ var index = rules.indexOf(childRule);
301
+ pos.unshift(index);
302
+ }
303
+ return pos;
304
+ }
305
+ return recurse(rule, positions);
306
+ }
307
+ function initStyleSheetObserver(_a, _b) {
308
+ var styleSheetRuleCb = _a.styleSheetRuleCb, mirror = _a.mirror;
309
+ var win = _b.win;
310
+ var insertRule = win.CSSStyleSheet.prototype.insertRule;
311
+ win.CSSStyleSheet.prototype.insertRule = function (rule, index) {
312
+ var id = mirror.getId(this.ownerNode);
313
+ if (id !== -1) {
314
+ styleSheetRuleCb({
315
+ id: id,
316
+ adds: [{ rule: rule, index: index }],
317
+ });
318
+ }
319
+ return insertRule.apply(this, arguments);
320
+ };
321
+ var deleteRule = win.CSSStyleSheet.prototype.deleteRule;
322
+ win.CSSStyleSheet.prototype.deleteRule = function (index) {
323
+ var id = mirror.getId(this.ownerNode);
324
+ if (id !== -1) {
325
+ styleSheetRuleCb({
326
+ id: id,
327
+ removes: [{ index: index }],
328
+ });
329
+ }
330
+ return deleteRule.apply(this, arguments);
331
+ };
332
+ var supportedNestedCSSRuleTypes = {};
333
+ if (isCSSGroupingRuleSupported) {
334
+ supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;
335
+ }
336
+ else {
337
+ if (isCSSMediaRuleSupported) {
338
+ supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;
339
+ }
340
+ if (isCSSConditionRuleSupported) {
341
+ supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;
342
+ }
343
+ if (isCSSSupportsRuleSupported) {
344
+ supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;
345
+ }
346
+ }
347
+ var unmodifiedFunctions = {};
348
+ Object.entries(supportedNestedCSSRuleTypes).forEach(function (_a) {
349
+ var _b = __read(_a, 2), typeKey = _b[0], type = _b[1];
350
+ unmodifiedFunctions[typeKey] = {
351
+ insertRule: type.prototype.insertRule,
352
+ deleteRule: type.prototype.deleteRule,
353
+ };
354
+ type.prototype.insertRule = function (rule, index) {
355
+ var id = mirror.getId(this.parentStyleSheet.ownerNode);
356
+ if (id !== -1) {
357
+ styleSheetRuleCb({
358
+ id: id,
359
+ adds: [
360
+ {
361
+ rule: rule,
362
+ index: __spreadArray(__spreadArray([], __read(getNestedCSSRulePositions(this)), false), [
363
+ index || 0,
364
+ ], false),
365
+ },
366
+ ],
367
+ });
368
+ }
369
+ return unmodifiedFunctions[typeKey].insertRule.apply(this, arguments);
370
+ };
371
+ type.prototype.deleteRule = function (index) {
372
+ var id = mirror.getId(this.parentStyleSheet.ownerNode);
373
+ if (id !== -1) {
374
+ styleSheetRuleCb({
375
+ id: id,
376
+ removes: [{ index: __spreadArray(__spreadArray([], __read(getNestedCSSRulePositions(this)), false), [index], false) }],
377
+ });
378
+ }
379
+ return unmodifiedFunctions[typeKey].deleteRule.apply(this, arguments);
380
+ };
381
+ });
382
+ return function () {
383
+ win.CSSStyleSheet.prototype.insertRule = insertRule;
384
+ win.CSSStyleSheet.prototype.deleteRule = deleteRule;
385
+ Object.entries(supportedNestedCSSRuleTypes).forEach(function (_a) {
386
+ var _b = __read(_a, 2), typeKey = _b[0], type = _b[1];
387
+ type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;
388
+ type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;
389
+ });
390
+ };
391
+ }
392
+ function initStyleDeclarationObserver(_a, _b) {
393
+ var styleDeclarationCb = _a.styleDeclarationCb, mirror = _a.mirror;
394
+ var win = _b.win;
395
+ var setProperty = win.CSSStyleDeclaration.prototype.setProperty;
396
+ win.CSSStyleDeclaration.prototype.setProperty = function (property, value, priority) {
397
+ var _a, _b;
398
+ var id = mirror.getId((_b = (_a = this.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet) === null || _b === void 0 ? void 0 : _b.ownerNode);
399
+ if (id !== -1) {
400
+ styleDeclarationCb({
401
+ id: id,
402
+ set: {
403
+ property: property,
404
+ value: value,
405
+ priority: priority,
406
+ },
407
+ index: getNestedCSSRulePositions(this.parentRule),
408
+ });
409
+ }
410
+ return setProperty.apply(this, arguments);
411
+ };
412
+ var removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;
413
+ win.CSSStyleDeclaration.prototype.removeProperty = function (property) {
414
+ var _a, _b;
415
+ var id = mirror.getId((_b = (_a = this.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet) === null || _b === void 0 ? void 0 : _b.ownerNode);
416
+ if (id !== -1) {
417
+ styleDeclarationCb({
418
+ id: id,
419
+ remove: {
420
+ property: property,
421
+ },
422
+ index: getNestedCSSRulePositions(this.parentRule),
423
+ });
424
+ }
425
+ return removeProperty.apply(this, arguments);
426
+ };
427
+ return function () {
428
+ win.CSSStyleDeclaration.prototype.setProperty = setProperty;
429
+ win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;
430
+ };
431
+ }
432
+ function initMediaInteractionObserver(_a) {
433
+ var mediaInteractionCb = _a.mediaInteractionCb, blockClass = _a.blockClass, mirror = _a.mirror, sampling = _a.sampling;
434
+ var handler = function (type) {
435
+ return throttle(function (event) {
436
+ var target = getEventTarget(event);
437
+ if (!target || isBlocked(target, blockClass)) {
438
+ return;
439
+ }
440
+ var _a = target, currentTime = _a.currentTime, volume = _a.volume, muted = _a.muted;
441
+ mediaInteractionCb({
442
+ type: type,
443
+ id: mirror.getId(target),
444
+ currentTime: currentTime,
445
+ volume: volume,
446
+ muted: muted,
447
+ });
448
+ }, sampling.media || 500);
449
+ };
450
+ var handlers = [
451
+ on('play', handler(0)),
452
+ on('pause', handler(1)),
453
+ on('seeked', handler(2)),
454
+ on('volumechange', handler(3)),
455
+ ];
456
+ return function () {
457
+ handlers.forEach(function (h) { return h(); });
458
+ };
459
+ }
460
+ function initFontObserver(_a) {
461
+ var fontCb = _a.fontCb, doc = _a.doc;
462
+ var win = doc.defaultView;
463
+ if (!win) {
464
+ return function () { };
465
+ }
466
+ var handlers = [];
467
+ var fontMap = new WeakMap();
468
+ var originalFontFace = win.FontFace;
469
+ win.FontFace = function FontFace(family, source, descriptors) {
470
+ var fontFace = new originalFontFace(family, source, descriptors);
471
+ fontMap.set(fontFace, {
472
+ family: family,
473
+ buffer: typeof source !== 'string',
474
+ descriptors: descriptors,
475
+ fontSource: typeof source === 'string'
476
+ ? source
477
+ :
478
+ JSON.stringify(Array.from(new Uint8Array(source))),
479
+ });
480
+ return fontFace;
481
+ };
482
+ var restoreHandler = patch(doc.fonts, 'add', function (original) {
483
+ return function (fontFace) {
484
+ setTimeout(function () {
485
+ var p = fontMap.get(fontFace);
486
+ if (p) {
487
+ fontCb(p);
488
+ fontMap.delete(fontFace);
489
+ }
490
+ }, 0);
491
+ return original.apply(this, [fontFace]);
492
+ };
493
+ });
494
+ handlers.push(function () {
495
+ win.FontFace = originalFontFace;
496
+ });
497
+ handlers.push(restoreHandler);
498
+ return function () {
499
+ handlers.forEach(function (h) { return h(); });
500
+ };
501
+ }
502
+ function mergeHooks(o, hooks) {
503
+ var mutationCb = o.mutationCb, mousemoveCb = o.mousemoveCb, mouseInteractionCb = o.mouseInteractionCb, scrollCb = o.scrollCb, viewportResizeCb = o.viewportResizeCb, inputCb = o.inputCb, mediaInteractionCb = o.mediaInteractionCb, styleSheetRuleCb = o.styleSheetRuleCb, styleDeclarationCb = o.styleDeclarationCb, canvasMutationCb = o.canvasMutationCb, fontCb = o.fontCb;
504
+ o.mutationCb = function () {
505
+ var p = [];
506
+ for (var _i = 0; _i < arguments.length; _i++) {
507
+ p[_i] = arguments[_i];
508
+ }
509
+ if (hooks.mutation) {
510
+ hooks.mutation.apply(hooks, __spreadArray([], __read(p), false));
511
+ }
512
+ mutationCb.apply(void 0, __spreadArray([], __read(p), false));
513
+ };
514
+ o.mousemoveCb = function () {
515
+ var p = [];
516
+ for (var _i = 0; _i < arguments.length; _i++) {
517
+ p[_i] = arguments[_i];
518
+ }
519
+ if (hooks.mousemove) {
520
+ hooks.mousemove.apply(hooks, __spreadArray([], __read(p), false));
521
+ }
522
+ mousemoveCb.apply(void 0, __spreadArray([], __read(p), false));
523
+ };
524
+ o.mouseInteractionCb = function () {
525
+ var p = [];
526
+ for (var _i = 0; _i < arguments.length; _i++) {
527
+ p[_i] = arguments[_i];
528
+ }
529
+ if (hooks.mouseInteraction) {
530
+ hooks.mouseInteraction.apply(hooks, __spreadArray([], __read(p), false));
531
+ }
532
+ mouseInteractionCb.apply(void 0, __spreadArray([], __read(p), false));
533
+ };
534
+ o.scrollCb = function () {
535
+ var p = [];
536
+ for (var _i = 0; _i < arguments.length; _i++) {
537
+ p[_i] = arguments[_i];
538
+ }
539
+ if (hooks.scroll) {
540
+ hooks.scroll.apply(hooks, __spreadArray([], __read(p), false));
541
+ }
542
+ scrollCb.apply(void 0, __spreadArray([], __read(p), false));
543
+ };
544
+ o.viewportResizeCb = function () {
545
+ var p = [];
546
+ for (var _i = 0; _i < arguments.length; _i++) {
547
+ p[_i] = arguments[_i];
548
+ }
549
+ if (hooks.viewportResize) {
550
+ hooks.viewportResize.apply(hooks, __spreadArray([], __read(p), false));
551
+ }
552
+ viewportResizeCb.apply(void 0, __spreadArray([], __read(p), false));
553
+ };
554
+ o.inputCb = function () {
555
+ var p = [];
556
+ for (var _i = 0; _i < arguments.length; _i++) {
557
+ p[_i] = arguments[_i];
558
+ }
559
+ if (hooks.input) {
560
+ hooks.input.apply(hooks, __spreadArray([], __read(p), false));
561
+ }
562
+ inputCb.apply(void 0, __spreadArray([], __read(p), false));
563
+ };
564
+ o.mediaInteractionCb = function () {
565
+ var p = [];
566
+ for (var _i = 0; _i < arguments.length; _i++) {
567
+ p[_i] = arguments[_i];
568
+ }
569
+ if (hooks.mediaInteaction) {
570
+ hooks.mediaInteaction.apply(hooks, __spreadArray([], __read(p), false));
571
+ }
572
+ mediaInteractionCb.apply(void 0, __spreadArray([], __read(p), false));
573
+ };
574
+ o.styleSheetRuleCb = function () {
575
+ var p = [];
576
+ for (var _i = 0; _i < arguments.length; _i++) {
577
+ p[_i] = arguments[_i];
578
+ }
579
+ if (hooks.styleSheetRule) {
580
+ hooks.styleSheetRule.apply(hooks, __spreadArray([], __read(p), false));
581
+ }
582
+ styleSheetRuleCb.apply(void 0, __spreadArray([], __read(p), false));
583
+ };
584
+ o.styleDeclarationCb = function () {
585
+ var p = [];
586
+ for (var _i = 0; _i < arguments.length; _i++) {
587
+ p[_i] = arguments[_i];
588
+ }
589
+ if (hooks.styleDeclaration) {
590
+ hooks.styleDeclaration.apply(hooks, __spreadArray([], __read(p), false));
591
+ }
592
+ styleDeclarationCb.apply(void 0, __spreadArray([], __read(p), false));
593
+ };
594
+ o.canvasMutationCb = function () {
595
+ var p = [];
596
+ for (var _i = 0; _i < arguments.length; _i++) {
597
+ p[_i] = arguments[_i];
598
+ }
599
+ if (hooks.canvasMutation) {
600
+ hooks.canvasMutation.apply(hooks, __spreadArray([], __read(p), false));
601
+ }
602
+ canvasMutationCb.apply(void 0, __spreadArray([], __read(p), false));
603
+ };
604
+ o.fontCb = function () {
605
+ var p = [];
606
+ for (var _i = 0; _i < arguments.length; _i++) {
607
+ p[_i] = arguments[_i];
608
+ }
609
+ if (hooks.font) {
610
+ hooks.font.apply(hooks, __spreadArray([], __read(p), false));
611
+ }
612
+ fontCb.apply(void 0, __spreadArray([], __read(p), false));
613
+ };
614
+ }
615
+ function initObservers(o, hooks) {
616
+ var e_1, _a;
617
+ if (hooks === void 0) { hooks = {}; }
618
+ var currentWindow = o.doc.defaultView;
619
+ if (!currentWindow) {
620
+ return function () { };
621
+ }
622
+ mergeHooks(o, hooks);
623
+ var mutationObserver = initMutationObserver(o, o.doc);
624
+ var mousemoveHandler = initMoveObserver(o);
625
+ var mouseInteractionHandler = initMouseInteractionObserver(o);
626
+ var scrollHandler = initScrollObserver(o);
627
+ var viewportResizeHandler = initViewportResizeObserver(o);
628
+ var inputHandler = initInputObserver(o);
629
+ var mediaInteractionHandler = initMediaInteractionObserver(o);
630
+ var styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });
631
+ var styleDeclarationObserver = initStyleDeclarationObserver(o, {
632
+ win: currentWindow,
633
+ });
634
+ var fontObserver = o.collectFonts ? initFontObserver(o) : function () { };
635
+ var pluginHandlers = [];
636
+ try {
637
+ for (var _b = __values(o.plugins), _c = _b.next(); !_c.done; _c = _b.next()) {
638
+ var plugin = _c.value;
639
+ pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));
640
+ }
641
+ }
642
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
643
+ finally {
644
+ try {
645
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
646
+ }
647
+ finally { if (e_1) throw e_1.error; }
648
+ }
649
+ return function () {
650
+ mutationBuffers.forEach(function (b) { return b.reset(); });
651
+ mutationObserver.disconnect();
652
+ mousemoveHandler();
653
+ mouseInteractionHandler();
654
+ scrollHandler();
655
+ viewportResizeHandler();
656
+ inputHandler();
657
+ mediaInteractionHandler();
658
+ styleSheetObserver();
659
+ styleDeclarationObserver();
660
+ fontObserver();
661
+ pluginHandlers.forEach(function (h) { return h(); });
662
+ };
663
+ }
664
+
665
+ export { INPUT_TAGS, initMutationObserver, initObservers, initScrollObserver, mutationBuffers };