@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,281 @@
1
+ import { interpret as v, createMachine as s, assign as o } from './../../../../ext/@xstate/fsm/es/index.js';
2
+ import { EventType, IncrementalSource, ReplayerEvents } from '../types.js';
3
+ import { addDelay } from './timer.js';
4
+
5
+ function discardPriorSnapshots(events, baselineTime) {
6
+ for (let idx = events.length - 1; idx >= 0; idx--) {
7
+ const event = events[idx];
8
+ if (event.type === EventType.Meta) {
9
+ if (event.timestamp <= baselineTime) {
10
+ return events.slice(idx);
11
+ }
12
+ }
13
+ }
14
+ return events;
15
+ }
16
+ function createPlayerService(context, { getCastFn, applyEventsSynchronously, emitter }) {
17
+ const playerMachine = s({
18
+ id: 'player',
19
+ context,
20
+ initial: 'paused',
21
+ states: {
22
+ playing: {
23
+ on: {
24
+ PAUSE: {
25
+ target: 'paused',
26
+ actions: ['pause'],
27
+ },
28
+ CAST_EVENT: {
29
+ target: 'playing',
30
+ actions: 'castEvent',
31
+ },
32
+ END: {
33
+ target: 'paused',
34
+ actions: ['resetLastPlayedEvent', 'pause'],
35
+ },
36
+ ADD_EVENT: {
37
+ target: 'playing',
38
+ actions: ['addEvent'],
39
+ },
40
+ REPLACE_EVENTS: {
41
+ target: 'playing',
42
+ actions: ['replaceEvents'],
43
+ },
44
+ },
45
+ },
46
+ paused: {
47
+ on: {
48
+ PLAY: {
49
+ target: 'playing',
50
+ actions: ['recordTimeOffset', 'play'],
51
+ },
52
+ CAST_EVENT: {
53
+ target: 'paused',
54
+ actions: 'castEvent',
55
+ },
56
+ TO_LIVE: {
57
+ target: 'live',
58
+ actions: ['startLive'],
59
+ },
60
+ ADD_EVENT: {
61
+ target: 'paused',
62
+ actions: ['addEvent'],
63
+ },
64
+ REPLACE_EVENTS: {
65
+ target: 'paused',
66
+ actions: ['replaceEvents'],
67
+ },
68
+ },
69
+ },
70
+ live: {
71
+ on: {
72
+ ADD_EVENT: {
73
+ target: 'live',
74
+ actions: ['addEvent'],
75
+ },
76
+ CAST_EVENT: {
77
+ target: 'live',
78
+ actions: ['castEvent'],
79
+ },
80
+ },
81
+ },
82
+ },
83
+ }, {
84
+ actions: {
85
+ castEvent: o({
86
+ lastPlayedEvent: (ctx, event) => {
87
+ if (event.type === 'CAST_EVENT') {
88
+ return event.payload.event;
89
+ }
90
+ return ctx.lastPlayedEvent;
91
+ },
92
+ }),
93
+ recordTimeOffset: o((ctx, event) => {
94
+ let timeOffset = ctx.timeOffset;
95
+ if ('payload' in event && 'timeOffset' in event.payload) {
96
+ timeOffset = event.payload.timeOffset;
97
+ }
98
+ return Object.assign(Object.assign({}, ctx), { timeOffset, baselineTime: ctx.events[0].timestamp + timeOffset });
99
+ }),
100
+ play(ctx) {
101
+ var _a;
102
+ const { timer, events, baselineTime, lastPlayedEvent } = ctx;
103
+ timer.clear();
104
+ for (const event of events) {
105
+ addDelay(event, baselineTime);
106
+ }
107
+ const neededEvents = discardPriorSnapshots(events, baselineTime);
108
+ let lastPlayedTimestamp = lastPlayedEvent === null || lastPlayedEvent === void 0 ? void 0 : lastPlayedEvent.timestamp;
109
+ if ((lastPlayedEvent === null || lastPlayedEvent === void 0 ? void 0 : lastPlayedEvent.type) === EventType.IncrementalSnapshot &&
110
+ lastPlayedEvent.data.source === IncrementalSource.MouseMove) {
111
+ lastPlayedTimestamp =
112
+ lastPlayedEvent.timestamp +
113
+ ((_a = lastPlayedEvent.data.positions[0]) === null || _a === void 0 ? void 0 : _a.timeOffset);
114
+ }
115
+ if (baselineTime < (lastPlayedTimestamp || 0)) {
116
+ emitter.emit(ReplayerEvents.PlayBack);
117
+ }
118
+ const syncEvents = new Array();
119
+ const actions = new Array();
120
+ for (const event of neededEvents) {
121
+ if (lastPlayedTimestamp &&
122
+ lastPlayedTimestamp < baselineTime &&
123
+ (event.timestamp <= lastPlayedTimestamp ||
124
+ event === lastPlayedEvent)) {
125
+ continue;
126
+ }
127
+ if (event.timestamp < baselineTime) {
128
+ syncEvents.push(event);
129
+ }
130
+ else {
131
+ const castFn = getCastFn(event, false);
132
+ actions.push({
133
+ doAction: () => {
134
+ castFn();
135
+ },
136
+ delay: event.delay,
137
+ });
138
+ }
139
+ }
140
+ applyEventsSynchronously(syncEvents);
141
+ emitter.emit(ReplayerEvents.Flush);
142
+ timer.addActions(actions);
143
+ timer.start();
144
+ },
145
+ pause(ctx) {
146
+ ctx.timer.clear();
147
+ },
148
+ resetLastPlayedEvent: o((ctx) => {
149
+ return Object.assign(Object.assign({}, ctx), { lastPlayedEvent: null });
150
+ }),
151
+ startLive: o({
152
+ baselineTime: (ctx, event) => {
153
+ ctx.timer.toggleLiveMode(true);
154
+ ctx.timer.start();
155
+ if (event.type === 'TO_LIVE' && event.payload.baselineTime) {
156
+ return event.payload.baselineTime;
157
+ }
158
+ return Date.now();
159
+ },
160
+ }),
161
+ replaceEvents: o((ctx, machineEvent) => {
162
+ const { events: curEvents, timer, baselineTime } = ctx;
163
+ if (machineEvent.type === 'REPLACE_EVENTS') {
164
+ const { events: newEvents } = machineEvent.payload;
165
+ curEvents.length = 0;
166
+ const actions = [];
167
+ for (const event of newEvents) {
168
+ addDelay(event, baselineTime);
169
+ curEvents.push(event);
170
+ if (event.timestamp >= timer.timeOffset + baselineTime) {
171
+ const castFn = getCastFn(event, false);
172
+ actions.push({
173
+ doAction: () => {
174
+ castFn();
175
+ },
176
+ delay: event.delay,
177
+ });
178
+ }
179
+ }
180
+ if (timer.isActive()) {
181
+ timer.replaceActions(actions);
182
+ }
183
+ }
184
+ return Object.assign(Object.assign({}, ctx), { events: curEvents });
185
+ }),
186
+ addEvent: o((ctx, machineEvent) => {
187
+ const { baselineTime, timer, events } = ctx;
188
+ if (machineEvent.type === 'ADD_EVENT') {
189
+ const { event } = machineEvent.payload;
190
+ addDelay(event, baselineTime);
191
+ let end = events.length - 1;
192
+ if (!events[end] || events[end].timestamp <= event.timestamp) {
193
+ events.push(event);
194
+ }
195
+ else {
196
+ let insertionIndex = -1;
197
+ let start = 0;
198
+ while (start <= end) {
199
+ const mid = Math.floor((start + end) / 2);
200
+ if (events[mid].timestamp <= event.timestamp) {
201
+ start = mid + 1;
202
+ }
203
+ else {
204
+ end = mid - 1;
205
+ }
206
+ }
207
+ if (insertionIndex === -1) {
208
+ insertionIndex = start;
209
+ }
210
+ events.splice(insertionIndex, 0, event);
211
+ }
212
+ const isSync = event.timestamp < baselineTime;
213
+ const castFn = getCastFn(event, isSync);
214
+ if (isSync) {
215
+ castFn();
216
+ }
217
+ else if (timer.isActive()) {
218
+ timer.addAction({
219
+ doAction: () => {
220
+ castFn();
221
+ },
222
+ delay: event.delay,
223
+ });
224
+ }
225
+ }
226
+ return Object.assign(Object.assign({}, ctx), { events });
227
+ }),
228
+ },
229
+ });
230
+ return v(playerMachine);
231
+ }
232
+ function createSpeedService(context) {
233
+ const speedMachine = s({
234
+ id: 'speed',
235
+ context,
236
+ initial: 'normal',
237
+ states: {
238
+ normal: {
239
+ on: {
240
+ FAST_FORWARD: {
241
+ target: 'skipping',
242
+ actions: ['recordSpeed', 'setSpeed'],
243
+ },
244
+ SET_SPEED: {
245
+ target: 'normal',
246
+ actions: ['setSpeed'],
247
+ },
248
+ },
249
+ },
250
+ skipping: {
251
+ on: {
252
+ BACK_TO_NORMAL: {
253
+ target: 'normal',
254
+ actions: ['restoreSpeed'],
255
+ },
256
+ SET_SPEED: {
257
+ target: 'normal',
258
+ actions: ['setSpeed'],
259
+ },
260
+ },
261
+ },
262
+ },
263
+ }, {
264
+ actions: {
265
+ setSpeed: (ctx, event) => {
266
+ if ('payload' in event) {
267
+ ctx.timer.setSpeed(event.payload.speed);
268
+ }
269
+ },
270
+ recordSpeed: o({
271
+ normalSpeed: (ctx) => ctx.timer.speed,
272
+ }),
273
+ restoreSpeed: (ctx) => {
274
+ ctx.timer.setSpeed(ctx.normalSpeed);
275
+ },
276
+ },
277
+ });
278
+ return v(speedMachine);
279
+ }
280
+
281
+ export { createPlayerService, createSpeedService, discardPriorSnapshots };
@@ -0,0 +1,219 @@
1
+ function polyfill(w = window, d = document) {
2
+ if ('scrollBehavior' in d.documentElement.style &&
3
+ w.__forceSmoothScrollPolyfill__ !== true) {
4
+ return;
5
+ }
6
+ const Element = w.HTMLElement || w.Element;
7
+ const SCROLL_TIME = 468;
8
+ const original = {
9
+ scroll: w.scroll || w.scrollTo,
10
+ scrollBy: w.scrollBy,
11
+ elementScroll: Element.prototype.scroll || scrollElement,
12
+ scrollIntoView: Element.prototype.scrollIntoView,
13
+ };
14
+ const now = w.performance && w.performance.now
15
+ ? w.performance.now.bind(w.performance)
16
+ : Date.now;
17
+ function isMicrosoftBrowser(userAgent) {
18
+ const userAgentPatterns = ['MSIE ', 'Trident/', 'Edge/'];
19
+ return new RegExp(userAgentPatterns.join('|')).test(userAgent);
20
+ }
21
+ const ROUNDING_TOLERANCE = isMicrosoftBrowser(w.navigator.userAgent) ? 1 : 0;
22
+ function scrollElement(x, y) {
23
+ this.scrollLeft = x;
24
+ this.scrollTop = y;
25
+ }
26
+ function ease(k) {
27
+ return 0.5 * (1 - Math.cos(Math.PI * k));
28
+ }
29
+ function shouldBailOut(firstArg) {
30
+ if (firstArg === null ||
31
+ typeof firstArg !== 'object' ||
32
+ firstArg.behavior === undefined ||
33
+ firstArg.behavior === 'auto' ||
34
+ firstArg.behavior === 'instant') {
35
+ return true;
36
+ }
37
+ if (typeof firstArg === 'object' && firstArg.behavior === 'smooth') {
38
+ return false;
39
+ }
40
+ throw new TypeError('behavior member of ScrollOptions ' +
41
+ firstArg.behavior +
42
+ ' is not a valid value for enumeration ScrollBehavior.');
43
+ }
44
+ function hasScrollableSpace(el, axis) {
45
+ if (axis === 'Y') {
46
+ return el.clientHeight + ROUNDING_TOLERANCE < el.scrollHeight;
47
+ }
48
+ if (axis === 'X') {
49
+ return el.clientWidth + ROUNDING_TOLERANCE < el.scrollWidth;
50
+ }
51
+ }
52
+ function canOverflow(el, axis) {
53
+ const overflowValue = w.getComputedStyle(el, null)['overflow' + axis];
54
+ return overflowValue === 'auto' || overflowValue === 'scroll';
55
+ }
56
+ function isScrollable(el) {
57
+ const isScrollableY = hasScrollableSpace(el, 'Y') && canOverflow(el, 'Y');
58
+ const isScrollableX = hasScrollableSpace(el, 'X') && canOverflow(el, 'X');
59
+ return isScrollableY || isScrollableX;
60
+ }
61
+ function findScrollableParent(el) {
62
+ while (el !== d.body && isScrollable(el) === false) {
63
+ el = el.parentNode || el.host;
64
+ }
65
+ return el;
66
+ }
67
+ function step(context) {
68
+ const time = now();
69
+ let value;
70
+ let currentX;
71
+ let currentY;
72
+ let elapsed = (time - context.startTime) / SCROLL_TIME;
73
+ elapsed = elapsed > 1 ? 1 : elapsed;
74
+ value = ease(elapsed);
75
+ currentX = context.startX + (context.x - context.startX) * value;
76
+ currentY = context.startY + (context.y - context.startY) * value;
77
+ context.method.call(context.scrollable, currentX, currentY);
78
+ if (currentX !== context.x || currentY !== context.y) {
79
+ w.requestAnimationFrame(step.bind(w, context));
80
+ }
81
+ }
82
+ function smoothScroll(el, x, y) {
83
+ let scrollable;
84
+ let startX;
85
+ let startY;
86
+ let method;
87
+ const startTime = now();
88
+ if (el === d.body) {
89
+ scrollable = w;
90
+ startX = w.scrollX || w.pageXOffset;
91
+ startY = w.scrollY || w.pageYOffset;
92
+ method = original.scroll;
93
+ }
94
+ else {
95
+ scrollable = el;
96
+ startX = el.scrollLeft;
97
+ startY = el.scrollTop;
98
+ method = scrollElement;
99
+ }
100
+ step({
101
+ scrollable: scrollable,
102
+ method: method,
103
+ startTime: startTime,
104
+ startX: startX,
105
+ startY: startY,
106
+ x: x,
107
+ y: y,
108
+ });
109
+ }
110
+ w.scroll = w.scrollTo = function () {
111
+ if (arguments[0] === undefined) {
112
+ return;
113
+ }
114
+ if (shouldBailOut(arguments[0]) === true) {
115
+ original.scroll.call(w, arguments[0].left !== undefined
116
+ ? arguments[0].left
117
+ : typeof arguments[0] !== 'object'
118
+ ? arguments[0]
119
+ : w.scrollX || w.pageXOffset, arguments[0].top !== undefined
120
+ ? arguments[0].top
121
+ : arguments[1] !== undefined
122
+ ? arguments[1]
123
+ : w.scrollY || w.pageYOffset);
124
+ return;
125
+ }
126
+ smoothScroll.call(w, d.body, arguments[0].left !== undefined
127
+ ? ~~arguments[0].left
128
+ : w.scrollX || w.pageXOffset, arguments[0].top !== undefined
129
+ ? ~~arguments[0].top
130
+ : w.scrollY || w.pageYOffset);
131
+ };
132
+ w.scrollBy = function () {
133
+ if (arguments[0] === undefined) {
134
+ return;
135
+ }
136
+ if (shouldBailOut(arguments[0])) {
137
+ original.scrollBy.call(w, arguments[0].left !== undefined
138
+ ? arguments[0].left
139
+ : typeof arguments[0] !== 'object'
140
+ ? arguments[0]
141
+ : 0, arguments[0].top !== undefined
142
+ ? arguments[0].top
143
+ : arguments[1] !== undefined
144
+ ? arguments[1]
145
+ : 0);
146
+ return;
147
+ }
148
+ smoothScroll.call(w, d.body, ~~arguments[0].left + (w.scrollX || w.pageXOffset), ~~arguments[0].top + (w.scrollY || w.pageYOffset));
149
+ };
150
+ Element.prototype.scroll = Element.prototype.scrollTo = function () {
151
+ if (arguments[0] === undefined) {
152
+ return;
153
+ }
154
+ if (shouldBailOut(arguments[0]) === true) {
155
+ if (typeof arguments[0] === 'number' && arguments[1] === undefined) {
156
+ throw new SyntaxError('Value could not be converted');
157
+ }
158
+ original.elementScroll.call(this, arguments[0].left !== undefined
159
+ ? ~~arguments[0].left
160
+ : typeof arguments[0] !== 'object'
161
+ ? ~~arguments[0]
162
+ : this.scrollLeft, arguments[0].top !== undefined
163
+ ? ~~arguments[0].top
164
+ : arguments[1] !== undefined
165
+ ? ~~arguments[1]
166
+ : this.scrollTop);
167
+ return;
168
+ }
169
+ const left = arguments[0].left;
170
+ const top = arguments[0].top;
171
+ smoothScroll.call(this, this, typeof left === 'undefined' ? this.scrollLeft : ~~left, typeof top === 'undefined' ? this.scrollTop : ~~top);
172
+ };
173
+ Element.prototype.scrollBy = function () {
174
+ if (arguments[0] === undefined) {
175
+ return;
176
+ }
177
+ if (shouldBailOut(arguments[0]) === true) {
178
+ original.elementScroll.call(this, arguments[0].left !== undefined
179
+ ? ~~arguments[0].left + this.scrollLeft
180
+ : ~~arguments[0] + this.scrollLeft, arguments[0].top !== undefined
181
+ ? ~~arguments[0].top + this.scrollTop
182
+ : ~~arguments[1] + this.scrollTop);
183
+ return;
184
+ }
185
+ this.scroll({
186
+ left: ~~arguments[0].left + this.scrollLeft,
187
+ top: ~~arguments[0].top + this.scrollTop,
188
+ behavior: arguments[0].behavior,
189
+ });
190
+ };
191
+ Element.prototype.scrollIntoView = function () {
192
+ if (shouldBailOut(arguments[0]) === true) {
193
+ original.scrollIntoView.call(this, arguments[0] === undefined ? true : arguments[0]);
194
+ return;
195
+ }
196
+ const scrollableParent = findScrollableParent(this);
197
+ const parentRects = scrollableParent.getBoundingClientRect();
198
+ const clientRects = this.getBoundingClientRect();
199
+ if (scrollableParent !== d.body) {
200
+ smoothScroll.call(this, scrollableParent, scrollableParent.scrollLeft + clientRects.left - parentRects.left, scrollableParent.scrollTop + clientRects.top - parentRects.top);
201
+ if (w.getComputedStyle(scrollableParent).position !== 'fixed') {
202
+ w.scrollBy({
203
+ left: parentRects.left,
204
+ top: parentRects.top,
205
+ behavior: 'smooth',
206
+ });
207
+ }
208
+ }
209
+ else {
210
+ w.scrollBy({
211
+ left: clientRects.left,
212
+ top: clientRects.top,
213
+ behavior: 'smooth',
214
+ });
215
+ }
216
+ };
217
+ }
218
+
219
+ export { polyfill };
@@ -0,0 +1,8 @@
1
+ const rules = (blockClass) => [
2
+ `.${blockClass} { background: currentColor }`,
3
+ 'noscript { display: none !important; }',
4
+ `.${blockClass} { background: currentColor; border-radius: 5px; }`,
5
+ `.${blockClass}:hover::after {content: 'Redacted'; color: white; background: black; text-align: center; width: 100%; display: block;}`,
6
+ ];
7
+
8
+ export { rules as default };
@@ -0,0 +1,92 @@
1
+ import { EventType, IncrementalSource } from '../types.js';
2
+
3
+ class Timer {
4
+ constructor(actions = [], speed) {
5
+ this.timeOffset = 0;
6
+ this.raf = null;
7
+ this.actions = actions;
8
+ this.speed = speed;
9
+ }
10
+ addAction(action) {
11
+ const index = this.findActionIndex(action);
12
+ this.actions.splice(index, 0, action);
13
+ }
14
+ addActions(actions) {
15
+ this.actions = this.actions.concat(actions);
16
+ }
17
+ replaceActions(actions) {
18
+ this.actions.length = 0;
19
+ this.actions.splice(0, 0, ...actions);
20
+ }
21
+ start() {
22
+ this.timeOffset = 0;
23
+ let lastTimestamp = performance.now();
24
+ const { actions } = this;
25
+ const self = this;
26
+ function check() {
27
+ const time = performance.now();
28
+ self.timeOffset += (time - lastTimestamp) * self.speed;
29
+ lastTimestamp = time;
30
+ while (actions.length) {
31
+ const action = actions[0];
32
+ if (self.timeOffset >= action.delay) {
33
+ actions.shift();
34
+ action.doAction();
35
+ }
36
+ else {
37
+ break;
38
+ }
39
+ }
40
+ if (actions.length > 0 || self.liveMode) {
41
+ self.raf = requestAnimationFrame(check);
42
+ }
43
+ }
44
+ this.raf = requestAnimationFrame(check);
45
+ }
46
+ clear() {
47
+ if (this.raf) {
48
+ cancelAnimationFrame(this.raf);
49
+ this.raf = null;
50
+ }
51
+ this.actions.length = 0;
52
+ }
53
+ setSpeed(speed) {
54
+ this.speed = speed;
55
+ }
56
+ toggleLiveMode(mode) {
57
+ this.liveMode = mode;
58
+ }
59
+ isActive() {
60
+ return this.raf !== null;
61
+ }
62
+ findActionIndex(action) {
63
+ let start = 0;
64
+ let end = this.actions.length - 1;
65
+ while (start <= end) {
66
+ const mid = Math.floor((start + end) / 2);
67
+ if (this.actions[mid].delay < action.delay) {
68
+ start = mid + 1;
69
+ }
70
+ else if (this.actions[mid].delay > action.delay) {
71
+ end = mid - 1;
72
+ }
73
+ else {
74
+ return mid + 1;
75
+ }
76
+ }
77
+ return start;
78
+ }
79
+ }
80
+ function addDelay(event, baselineTime) {
81
+ if (event.type === EventType.IncrementalSnapshot &&
82
+ event.data.source === IncrementalSource.MouseMove) {
83
+ const firstOffset = event.data.positions[0].timeOffset;
84
+ const firstTimestamp = event.timestamp + firstOffset;
85
+ event.delay = firstTimestamp - baselineTime;
86
+ return firstTimestamp - baselineTime;
87
+ }
88
+ event.delay = event.timestamp - baselineTime;
89
+ return event.delay;
90
+ }
91
+
92
+ export { Timer, addDelay };
@@ -0,0 +1,75 @@
1
+ var EventType;
2
+ (function (EventType) {
3
+ EventType[EventType["DomContentLoaded"] = 0] = "DomContentLoaded";
4
+ EventType[EventType["Load"] = 1] = "Load";
5
+ EventType[EventType["FullSnapshot"] = 2] = "FullSnapshot";
6
+ EventType[EventType["IncrementalSnapshot"] = 3] = "IncrementalSnapshot";
7
+ EventType[EventType["Meta"] = 4] = "Meta";
8
+ EventType[EventType["Custom"] = 5] = "Custom";
9
+ EventType[EventType["Plugin"] = 6] = "Plugin";
10
+ })(EventType || (EventType = {}));
11
+ var IncrementalSource;
12
+ (function (IncrementalSource) {
13
+ IncrementalSource[IncrementalSource["Mutation"] = 0] = "Mutation";
14
+ IncrementalSource[IncrementalSource["MouseMove"] = 1] = "MouseMove";
15
+ IncrementalSource[IncrementalSource["MouseInteraction"] = 2] = "MouseInteraction";
16
+ IncrementalSource[IncrementalSource["Scroll"] = 3] = "Scroll";
17
+ IncrementalSource[IncrementalSource["ViewportResize"] = 4] = "ViewportResize";
18
+ IncrementalSource[IncrementalSource["Input"] = 5] = "Input";
19
+ IncrementalSource[IncrementalSource["TouchMove"] = 6] = "TouchMove";
20
+ IncrementalSource[IncrementalSource["MediaInteraction"] = 7] = "MediaInteraction";
21
+ IncrementalSource[IncrementalSource["StyleSheetRule"] = 8] = "StyleSheetRule";
22
+ IncrementalSource[IncrementalSource["CanvasMutation"] = 9] = "CanvasMutation";
23
+ IncrementalSource[IncrementalSource["Font"] = 10] = "Font";
24
+ IncrementalSource[IncrementalSource["Log"] = 11] = "Log";
25
+ IncrementalSource[IncrementalSource["Drag"] = 12] = "Drag";
26
+ IncrementalSource[IncrementalSource["StyleDeclaration"] = 13] = "StyleDeclaration";
27
+ })(IncrementalSource || (IncrementalSource = {}));
28
+ var MouseInteractions;
29
+ (function (MouseInteractions) {
30
+ MouseInteractions[MouseInteractions["MouseUp"] = 0] = "MouseUp";
31
+ MouseInteractions[MouseInteractions["MouseDown"] = 1] = "MouseDown";
32
+ MouseInteractions[MouseInteractions["Click"] = 2] = "Click";
33
+ MouseInteractions[MouseInteractions["ContextMenu"] = 3] = "ContextMenu";
34
+ MouseInteractions[MouseInteractions["DblClick"] = 4] = "DblClick";
35
+ MouseInteractions[MouseInteractions["Focus"] = 5] = "Focus";
36
+ MouseInteractions[MouseInteractions["Blur"] = 6] = "Blur";
37
+ MouseInteractions[MouseInteractions["TouchStart"] = 7] = "TouchStart";
38
+ MouseInteractions[MouseInteractions["TouchMove_Departed"] = 8] = "TouchMove_Departed";
39
+ MouseInteractions[MouseInteractions["TouchEnd"] = 9] = "TouchEnd";
40
+ MouseInteractions[MouseInteractions["TouchCancel"] = 10] = "TouchCancel";
41
+ })(MouseInteractions || (MouseInteractions = {}));
42
+ var CanvasContext;
43
+ (function (CanvasContext) {
44
+ CanvasContext[CanvasContext["2D"] = 0] = "2D";
45
+ CanvasContext[CanvasContext["WebGL"] = 1] = "WebGL";
46
+ CanvasContext[CanvasContext["WebGL2"] = 2] = "WebGL2";
47
+ })(CanvasContext || (CanvasContext = {}));
48
+ var MediaInteractions;
49
+ (function (MediaInteractions) {
50
+ MediaInteractions[MediaInteractions["Play"] = 0] = "Play";
51
+ MediaInteractions[MediaInteractions["Pause"] = 1] = "Pause";
52
+ MediaInteractions[MediaInteractions["Seeked"] = 2] = "Seeked";
53
+ MediaInteractions[MediaInteractions["VolumeChange"] = 3] = "VolumeChange";
54
+ })(MediaInteractions || (MediaInteractions = {}));
55
+ var ReplayerEvents;
56
+ (function (ReplayerEvents) {
57
+ ReplayerEvents["Start"] = "start";
58
+ ReplayerEvents["Pause"] = "pause";
59
+ ReplayerEvents["Resume"] = "resume";
60
+ ReplayerEvents["Resize"] = "resize";
61
+ ReplayerEvents["Finish"] = "finish";
62
+ ReplayerEvents["FullsnapshotRebuilded"] = "fullsnapshot-rebuilded";
63
+ ReplayerEvents["LoadStylesheetStart"] = "load-stylesheet-start";
64
+ ReplayerEvents["LoadStylesheetEnd"] = "load-stylesheet-end";
65
+ ReplayerEvents["SkipStart"] = "skip-start";
66
+ ReplayerEvents["SkipEnd"] = "skip-end";
67
+ ReplayerEvents["MouseInteraction"] = "mouse-interaction";
68
+ ReplayerEvents["EventCast"] = "event-cast";
69
+ ReplayerEvents["CustomEvent"] = "custom-event";
70
+ ReplayerEvents["Flush"] = "flush";
71
+ ReplayerEvents["StateChange"] = "state-change";
72
+ ReplayerEvents["PlayBack"] = "play-back";
73
+ })(ReplayerEvents || (ReplayerEvents = {}));
74
+
75
+ export { CanvasContext, EventType, IncrementalSource, MediaInteractions, MouseInteractions, ReplayerEvents };