@openreplay/tracker 13.0.0 → 13.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.
- package/CHANGELOG.md +5 -0
- package/cjs/app/canvas.d.ts +2 -1
- package/cjs/app/canvas.js +27 -13
- package/cjs/app/index.d.ts +6 -0
- package/cjs/app/index.js +23 -4
- package/cjs/index.js +1 -1
- package/coverage/clover.xml +1054 -964
- package/coverage/coverage-final.json +21 -21
- package/coverage/lcov-report/index.html +43 -43
- package/coverage/lcov-report/main/app/canvas.ts.html +224 -47
- package/coverage/lcov-report/main/app/guards.ts.html +26 -26
- package/coverage/lcov-report/main/app/index.html +42 -42
- package/coverage/lcov-report/main/app/index.ts.html +157 -37
- package/coverage/lcov-report/main/app/logger.ts.html +1 -1
- package/coverage/lcov-report/main/app/messages.gen.ts.html +244 -154
- package/coverage/lcov-report/main/app/nodes.ts.html +7 -4
- package/coverage/lcov-report/main/app/observer/iframe_observer.ts.html +1 -1
- package/coverage/lcov-report/main/app/observer/iframe_offsets.ts.html +1 -1
- package/coverage/lcov-report/main/app/observer/index.html +5 -5
- package/coverage/lcov-report/main/app/observer/shadow_root_observer.ts.html +1 -1
- package/coverage/lcov-report/main/app/observer/top_observer.ts.html +7 -4
- package/coverage/lcov-report/main/app/sanitizer.ts.html +2 -2
- package/coverage/lcov-report/main/app/session.ts.html +2 -2
- package/coverage/lcov-report/main/app/ticker.ts.html +1 -1
- package/coverage/lcov-report/main/index.html +13 -13
- package/coverage/lcov-report/main/index.ts.html +32 -14
- package/coverage/lcov-report/main/modules/Network/beaconProxy.ts.html +17 -8
- package/coverage/lcov-report/main/modules/Network/fetchProxy.ts.html +40 -13
- package/coverage/lcov-report/main/modules/Network/index.html +21 -21
- package/coverage/lcov-report/main/modules/Network/index.ts.html +2 -2
- package/coverage/lcov-report/main/modules/Network/networkMessage.ts.html +12 -6
- package/coverage/lcov-report/main/modules/Network/utils.ts.html +17 -8
- package/coverage/lcov-report/main/modules/Network/xhrProxy.ts.html +39 -12
- package/coverage/lcov-report/main/modules/attributeSender.ts.html +1 -1
- package/coverage/lcov-report/main/modules/axiosSpy.ts.html +1 -1
- package/coverage/lcov-report/main/modules/conditionsManager.ts.html +4 -22
- package/coverage/lcov-report/main/modules/connection.ts.html +1 -1
- package/coverage/lcov-report/main/modules/console.ts.html +1 -1
- package/coverage/lcov-report/main/modules/constructedStyleSheets.ts.html +3 -3
- package/coverage/lcov-report/main/modules/cssrules.ts.html +1 -1
- package/coverage/lcov-report/main/modules/exception.ts.html +1 -1
- package/coverage/lcov-report/main/modules/featureFlags.ts.html +1 -1
- package/coverage/lcov-report/main/modules/focus.ts.html +1 -1
- package/coverage/lcov-report/main/modules/fonts.ts.html +1 -1
- package/coverage/lcov-report/main/modules/img.ts.html +4 -4
- package/coverage/lcov-report/main/modules/index.html +24 -24
- package/coverage/lcov-report/main/modules/input.ts.html +1 -1
- package/coverage/lcov-report/main/modules/mouse.ts.html +1 -1
- package/coverage/lcov-report/main/modules/network.ts.html +2 -2
- package/coverage/lcov-report/main/modules/performance.ts.html +1 -1
- package/coverage/lcov-report/main/modules/scroll.ts.html +1 -1
- package/coverage/lcov-report/main/modules/selection.ts.html +1 -1
- package/coverage/lcov-report/main/modules/tabs.ts.html +1 -1
- package/coverage/lcov-report/main/modules/tagWatcher.ts.html +95 -92
- package/coverage/lcov-report/main/modules/timing.ts.html +1 -1
- package/coverage/lcov-report/main/modules/userTesting/SignalManager.ts.html +1 -1
- package/coverage/lcov-report/main/modules/userTesting/dnd.ts.html +1 -1
- package/coverage/lcov-report/main/modules/userTesting/index.html +1 -1
- package/coverage/lcov-report/main/modules/userTesting/index.ts.html +1 -1
- package/coverage/lcov-report/main/modules/userTesting/recorder.ts.html +1 -1
- package/coverage/lcov-report/main/modules/userTesting/styles.ts.html +1 -1
- package/coverage/lcov-report/main/modules/userTesting/utils.ts.html +1 -1
- package/coverage/lcov-report/main/modules/viewport.ts.html +4 -4
- package/coverage/lcov-report/main/utils.ts.html +181 -31
- package/coverage/lcov-report/webworker/BatchWriter.ts.html +1 -1
- package/coverage/lcov-report/webworker/MessageEncoder.gen.ts.html +31 -7
- package/coverage/lcov-report/webworker/PrimitiveEncoder.ts.html +1 -1
- package/coverage/lcov-report/webworker/QueueSender.ts.html +48 -18
- package/coverage/lcov-report/webworker/index.html +14 -14
- package/coverage/lcov-report/webworker/index.ts.html +51 -21
- package/coverage/lcov.info +1882 -1653
- package/lib/app/canvas.d.ts +2 -1
- package/lib/app/canvas.js +27 -13
- package/lib/app/index.d.ts +6 -0
- package/lib/app/index.js +23 -4
- package/lib/index.js +1 -1
- package/package.json +1 -1
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">19.38% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>19/98</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">18.18% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>8/44</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">10.52% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>2/19</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">20.21% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>19/94</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -213,9 +213,68 @@
|
|
|
213
213
|
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
214
|
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
215
|
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
-
<a name='L151'></a><a href='#L151'>151</a
|
|
217
|
-
<
|
|
218
|
-
<
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
+
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
+
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
+
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
+
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
+
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
+
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
+
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
+
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
+
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
+
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
+
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
+
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
276
|
+
<span class="cline-any cline-yes">1x</span>
|
|
277
|
+
<span class="cline-any cline-yes">1x</span>
|
|
219
278
|
<span class="cline-any cline-neutral"> </span>
|
|
220
279
|
<span class="cline-any cline-neutral"> </span>
|
|
221
280
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -229,15 +288,18 @@
|
|
|
229
288
|
<span class="cline-any cline-neutral"> </span>
|
|
230
289
|
<span class="cline-any cline-neutral"> </span>
|
|
231
290
|
<span class="cline-any cline-neutral"> </span>
|
|
232
|
-
<span class="cline-any cline-no"> </span>
|
|
233
|
-
<span class="cline-any cline-no"> </span>
|
|
234
291
|
<span class="cline-any cline-neutral"> </span>
|
|
235
292
|
<span class="cline-any cline-neutral"> </span>
|
|
236
293
|
<span class="cline-any cline-neutral"> </span>
|
|
237
|
-
<span class="cline-any cline-
|
|
238
|
-
<span class="cline-any cline-
|
|
294
|
+
<span class="cline-any cline-yes">2x</span>
|
|
295
|
+
<span class="cline-any cline-yes">2x</span>
|
|
239
296
|
<span class="cline-any cline-neutral"> </span>
|
|
240
|
-
<span class="cline-any cline-
|
|
297
|
+
<span class="cline-any cline-neutral"> </span>
|
|
298
|
+
<span class="cline-any cline-neutral"> </span>
|
|
299
|
+
<span class="cline-any cline-yes">2x</span>
|
|
300
|
+
<span class="cline-any cline-yes">2x</span>
|
|
301
|
+
<span class="cline-any cline-neutral"> </span>
|
|
302
|
+
<span class="cline-any cline-yes">2x</span>
|
|
241
303
|
<span class="cline-any cline-neutral"> </span>
|
|
242
304
|
<span class="cline-any cline-neutral"> </span>
|
|
243
305
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -249,26 +311,57 @@
|
|
|
249
311
|
<span class="cline-any cline-neutral"> </span>
|
|
250
312
|
<span class="cline-any cline-neutral"> </span>
|
|
251
313
|
<span class="cline-any cline-neutral"> </span>
|
|
314
|
+
<span class="cline-any cline-yes">2x</span>
|
|
252
315
|
<span class="cline-any cline-no"> </span>
|
|
253
316
|
<span class="cline-any cline-no"> </span>
|
|
317
|
+
<span class="cline-any cline-neutral"> </span>
|
|
318
|
+
<span class="cline-any cline-neutral"> </span>
|
|
319
|
+
<span class="cline-any cline-yes">2x</span>
|
|
320
|
+
<span class="cline-any cline-yes">2x</span>
|
|
321
|
+
<span class="cline-any cline-yes">2x</span>
|
|
254
322
|
<span class="cline-any cline-no"> </span>
|
|
255
323
|
<span class="cline-any cline-neutral"> </span>
|
|
256
324
|
<span class="cline-any cline-neutral"> </span>
|
|
325
|
+
<span class="cline-any cline-yes">2x</span>
|
|
326
|
+
<span class="cline-any cline-yes">2x</span>
|
|
327
|
+
<span class="cline-any cline-yes">1x</span>
|
|
328
|
+
<span class="cline-any cline-neutral"> </span>
|
|
329
|
+
<span class="cline-any cline-neutral"> </span>
|
|
330
|
+
<span class="cline-any cline-yes">1x</span>
|
|
331
|
+
<span class="cline-any cline-no"> </span>
|
|
257
332
|
<span class="cline-any cline-no"> </span>
|
|
258
333
|
<span class="cline-any cline-no"> </span>
|
|
259
334
|
<span class="cline-any cline-no"> </span>
|
|
260
335
|
<span class="cline-any cline-no"> </span>
|
|
261
|
-
<span class="cline-any cline-neutral"> </span>
|
|
262
336
|
<span class="cline-any cline-neutral"> </span>
|
|
263
337
|
<span class="cline-any cline-no"> </span>
|
|
338
|
+
<span class="cline-any cline-neutral"> </span>
|
|
339
|
+
<span class="cline-any cline-neutral"> </span>
|
|
340
|
+
<span class="cline-any cline-neutral"> </span>
|
|
341
|
+
<span class="cline-any cline-neutral"> </span>
|
|
342
|
+
<span class="cline-any cline-neutral"> </span>
|
|
343
|
+
<span class="cline-any cline-neutral"> </span>
|
|
344
|
+
<span class="cline-any cline-neutral"> </span>
|
|
345
|
+
<span class="cline-any cline-neutral"> </span>
|
|
264
346
|
<span class="cline-any cline-no"> </span>
|
|
265
347
|
<span class="cline-any cline-no"> </span>
|
|
266
348
|
<span class="cline-any cline-neutral"> </span>
|
|
349
|
+
<span class="cline-any cline-neutral"> </span>
|
|
350
|
+
<span class="cline-any cline-neutral"> </span>
|
|
351
|
+
<span class="cline-any cline-neutral"> </span>
|
|
352
|
+
<span class="cline-any cline-neutral"> </span>
|
|
353
|
+
<span class="cline-any cline-neutral"> </span>
|
|
354
|
+
<span class="cline-any cline-yes">1x</span>
|
|
355
|
+
<span class="cline-any cline-neutral"> </span>
|
|
356
|
+
<span class="cline-any cline-neutral"> </span>
|
|
357
|
+
<span class="cline-any cline-yes">2x</span>
|
|
267
358
|
<span class="cline-any cline-no"> </span>
|
|
268
359
|
<span class="cline-any cline-no"> </span>
|
|
269
360
|
<span class="cline-any cline-neutral"> </span>
|
|
270
361
|
<span class="cline-any cline-neutral"> </span>
|
|
271
362
|
<span class="cline-any cline-neutral"> </span>
|
|
363
|
+
<span class="cline-any cline-neutral"> </span>
|
|
364
|
+
<span class="cline-any cline-neutral"> </span>
|
|
272
365
|
<span class="cline-any cline-no"> </span>
|
|
273
366
|
<span class="cline-any cline-no"> </span>
|
|
274
367
|
<span class="cline-any cline-no"> </span>
|
|
@@ -280,12 +373,19 @@
|
|
|
280
373
|
<span class="cline-any cline-neutral"> </span>
|
|
281
374
|
<span class="cline-any cline-no"> </span>
|
|
282
375
|
<span class="cline-any cline-no"> </span>
|
|
376
|
+
<span class="cline-any cline-neutral"> </span>
|
|
377
|
+
<span class="cline-any cline-neutral"> </span>
|
|
378
|
+
<span class="cline-any cline-neutral"> </span>
|
|
379
|
+
<span class="cline-any cline-neutral"> </span>
|
|
380
|
+
<span class="cline-any cline-neutral"> </span>
|
|
381
|
+
<span class="cline-any cline-no"> </span>
|
|
283
382
|
<span class="cline-any cline-no"> </span>
|
|
284
383
|
<span class="cline-any cline-no"> </span>
|
|
285
384
|
<span class="cline-any cline-no"> </span>
|
|
286
385
|
<span class="cline-any cline-neutral"> </span>
|
|
287
386
|
<span class="cline-any cline-neutral"> </span>
|
|
288
387
|
<span class="cline-any cline-neutral"> </span>
|
|
388
|
+
<span class="cline-any cline-neutral"> </span>
|
|
289
389
|
<span class="cline-any cline-no"> </span>
|
|
290
390
|
<span class="cline-any cline-neutral"> </span>
|
|
291
391
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -324,16 +424,33 @@
|
|
|
324
424
|
<span class="cline-any cline-neutral"> </span>
|
|
325
425
|
<span class="cline-any cline-neutral"> </span>
|
|
326
426
|
<span class="cline-any cline-neutral"> </span>
|
|
327
|
-
<span class="cline-any cline-
|
|
427
|
+
<span class="cline-any cline-yes">1x</span>
|
|
428
|
+
<span class="cline-any cline-neutral"> </span>
|
|
429
|
+
<span class="cline-any cline-neutral"> </span>
|
|
430
|
+
<span class="cline-any cline-neutral"> </span>
|
|
328
431
|
<span class="cline-any cline-neutral"> </span>
|
|
329
432
|
<span class="cline-any cline-neutral"> </span>
|
|
330
433
|
<span class="cline-any cline-neutral"> </span>
|
|
331
434
|
<span class="cline-any cline-neutral"> </span>
|
|
332
435
|
<span class="cline-any cline-neutral"> </span>
|
|
333
436
|
<span class="cline-any cline-neutral"> </span>
|
|
437
|
+
<span class="cline-any cline-neutral"> </span>
|
|
438
|
+
<span class="cline-any cline-neutral"> </span>
|
|
439
|
+
<span class="cline-any cline-no"> </span>
|
|
440
|
+
<span class="cline-any cline-no"> </span>
|
|
441
|
+
<span class="cline-any cline-no"> </span>
|
|
442
|
+
<span class="cline-any cline-no"> </span>
|
|
443
|
+
<span class="cline-any cline-no"> </span>
|
|
444
|
+
<span class="cline-any cline-no"> </span>
|
|
334
445
|
<span class="cline-any cline-no"> </span>
|
|
335
446
|
<span class="cline-any cline-no"> </span>
|
|
336
447
|
<span class="cline-any cline-neutral"> </span>
|
|
448
|
+
<span class="cline-any cline-no"> </span>
|
|
449
|
+
<span class="cline-any cline-no"> </span>
|
|
450
|
+
<span class="cline-any cline-neutral"> </span>
|
|
451
|
+
<span class="cline-any cline-no"> </span>
|
|
452
|
+
<span class="cline-any cline-neutral"> </span>
|
|
453
|
+
<span class="cline-any cline-neutral"> </span>
|
|
337
454
|
<span class="cline-any cline-neutral"> </span>
|
|
338
455
|
<span class="cline-any cline-neutral"> </span>
|
|
339
456
|
<span class="cline-any cline-no"> </span>
|
|
@@ -343,6 +460,7 @@
|
|
|
343
460
|
<span class="cline-any cline-no"> </span>
|
|
344
461
|
<span class="cline-any cline-no"> </span>
|
|
345
462
|
<span class="cline-any cline-no"> </span>
|
|
463
|
+
<span class="cline-any cline-no"> </span>
|
|
346
464
|
<span class="cline-any cline-neutral"> </span>
|
|
347
465
|
<span class="cline-any cline-no"> </span>
|
|
348
466
|
<span class="cline-any cline-no"> </span>
|
|
@@ -362,62 +480,96 @@
|
|
|
362
480
|
<span class="cline-any cline-no"> </span>
|
|
363
481
|
<span class="cline-any cline-neutral"> </span>
|
|
364
482
|
<span class="cline-any cline-neutral"> </span>
|
|
365
|
-
<span class="cline-any cline-
|
|
483
|
+
<span class="cline-any cline-yes">1x</span>
|
|
366
484
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import App from '../app/index.js'
|
|
367
|
-
|
|
368
|
-
|
|
485
|
+
import { hasTag } from './guards.js'
|
|
486
|
+
import Message, { CanvasNode } from './messages.gen.js'
|
|
369
487
|
|
|
370
488
|
interface CanvasSnapshot {
|
|
371
489
|
images: { data: string; id: number }[]
|
|
372
490
|
createdAt: number
|
|
491
|
+
paused: boolean
|
|
492
|
+
dummy: HTMLCanvasElement
|
|
373
493
|
}
|
|
374
494
|
|
|
375
495
|
interface Options {
|
|
376
496
|
fps: number
|
|
377
497
|
quality: 'low' | 'medium' | 'high'
|
|
378
498
|
isDebug?: boolean
|
|
499
|
+
fixedScaling?: boolean
|
|
379
500
|
}
|
|
380
501
|
|
|
381
502
|
class CanvasRecorder {
|
|
382
|
-
private
|
|
383
|
-
private readonly
|
|
503
|
+
private snapshots: Record<number, CanvasSnapshot> = {}
|
|
504
|
+
private readonly intervals: NodeJS.Timeout[] = []
|
|
384
505
|
private readonly interval: number
|
|
385
506
|
|
|
386
|
-
|
|
387
|
-
private readonly
|
|
388
|
-
private readonly
|
|
507
|
+
constructor(
|
|
508
|
+
private readonly app: App,
|
|
509
|
+
private readonly options: Options,
|
|
389
510
|
) {
|
|
390
|
-
|
|
511
|
+
this.interval = 1000 / options.fps
|
|
391
512
|
}
|
|
392
513
|
|
|
393
514
|
<span class="fstat-no" title="function not covered" > startTracking(</span>) {
|
|
394
515
|
<span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
395
|
-
<span class="cstat-no" title="statement not covered" > this.app.nodes.scanTree(this.
|
|
516
|
+
<span class="cstat-no" title="statement not covered" > this.app.nodes.scanTree(this.captureCanvas)</span>
|
|
396
517
|
<span class="cstat-no" title="statement not covered" > this.app.nodes.attachNodeCallback(<span class="fstat-no" title="function not covered" >(n</span>ode: Node): void => {</span>
|
|
397
|
-
<span class="cstat-no" title="statement not covered" > this.
|
|
518
|
+
<span class="cstat-no" title="statement not covered" > this.captureCanvas(node)</span>
|
|
398
519
|
})
|
|
399
520
|
}, 500)
|
|
400
521
|
}
|
|
401
522
|
|
|
402
|
-
|
|
523
|
+
restartTracking = <span class="fstat-no" title="function not covered" >() =</span>> {
|
|
403
524
|
<span class="cstat-no" title="statement not covered" > this.clear()</span>
|
|
404
|
-
<span class="cstat-no" title="statement not covered" > this.app.nodes.scanTree(this.
|
|
525
|
+
<span class="cstat-no" title="statement not covered" > this.app.nodes.scanTree(this.captureCanvas)</span>
|
|
405
526
|
}
|
|
406
527
|
|
|
407
|
-
|
|
408
|
-
const id =
|
|
409
|
-
|
|
528
|
+
captureCanvas = (node: Node) => {
|
|
529
|
+
const id = this.app.nodes.getID(node)
|
|
530
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!id || !hasTag(node, 'canvas')) {
|
|
410
531
|
<span class="cstat-no" title="statement not covered" > return</span>
|
|
411
532
|
}
|
|
412
533
|
|
|
413
|
-
const isIgnored =
|
|
414
|
-
|
|
415
|
-
|
|
534
|
+
const isIgnored = this.app.sanitizer.isObscured(id) || this.app.sanitizer.isHidden(id)
|
|
535
|
+
if (isIgnored || !hasTag(node, 'canvas') || this.snapshots[id]) {
|
|
536
|
+
return
|
|
416
537
|
}
|
|
538
|
+
|
|
539
|
+
const observer = new IntersectionObserver(<span class="fstat-no" title="function not covered" >(e</span>ntries) => {
|
|
540
|
+
<span class="cstat-no" title="statement not covered" > entries.forEach(<span class="fstat-no" title="function not covered" >(e</span>ntry) => {</span>
|
|
541
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (entry.isIntersecting) {</span>
|
|
542
|
+
<span class="cstat-no" title="statement not covered" > if (entry.target) {</span>
|
|
543
|
+
<span class="cstat-no" title="statement not covered" > if (this.snapshots[id] && this.snapshots[id].createdAt) {</span>
|
|
544
|
+
<span class="cstat-no" title="statement not covered" > this.snapshots[id].paused = false</span>
|
|
545
|
+
} else {
|
|
546
|
+
<span class="cstat-no" title="statement not covered" > this.recordCanvas(entry.target, id)</span>
|
|
547
|
+
}
|
|
548
|
+
/**
|
|
549
|
+
* We can switch this to start observing when element is in the view
|
|
550
|
+
* but otherwise right now we're just pausing when it's not
|
|
551
|
+
* just to save some bandwidth and space on backend
|
|
552
|
+
* */
|
|
553
|
+
// observer.unobserve(entry.target)
|
|
554
|
+
} else {
|
|
555
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.snapshots[id]) {</span>
|
|
556
|
+
<span class="cstat-no" title="statement not covered" > this.snapshots[id].paused = true</span>
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
})
|
|
561
|
+
})
|
|
562
|
+
|
|
563
|
+
observer.observe(node)
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
recordCanvas = <span class="fstat-no" title="function not covered" >(n</span>ode: Node, id: number) => {
|
|
417
567
|
const ts = <span class="cstat-no" title="statement not covered" >this.app.timestamp()</span>
|
|
418
568
|
<span class="cstat-no" title="statement not covered" > this.snapshots[id] = {</span>
|
|
419
569
|
images: [],
|
|
420
570
|
createdAt: ts,
|
|
571
|
+
paused: false,
|
|
572
|
+
dummy: document.createElement('canvas'),
|
|
421
573
|
}
|
|
422
574
|
const canvasMsg = <span class="cstat-no" title="statement not covered" >CanvasNode(id.toString(), ts)</span>
|
|
423
575
|
<span class="cstat-no" title="statement not covered" > this.app.send(canvasMsg as Message)</span>
|
|
@@ -428,11 +580,18 @@ class CanvasRecorder {
|
|
|
428
580
|
<span class="cstat-no" title="statement not covered" > this.app.debug.log('Canvas element not in sync')</span>
|
|
429
581
|
<span class="cstat-no" title="statement not covered" > clearInterval(int)</span>
|
|
430
582
|
} else {
|
|
431
|
-
|
|
432
|
-
<span class="cstat-no" title="statement not covered" >
|
|
433
|
-
|
|
434
|
-
|
|
583
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.snapshots[id].paused) {</span>
|
|
584
|
+
const snapshot = <span class="cstat-no" title="statement not covered" >captureSnapshot(</span>
|
|
585
|
+
canvas,
|
|
586
|
+
this.options.quality,
|
|
587
|
+
this.snapshots[id].dummy,
|
|
588
|
+
this.options.fixedScaling,
|
|
589
|
+
)
|
|
590
|
+
<span class="cstat-no" title="statement not covered" > this.snapshots[id].images.push({ id: this.app.timestamp(), data: snapshot })</span>
|
|
591
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.snapshots[id].images.length > 9) {</span>
|
|
592
|
+
<span class="cstat-no" title="statement not covered" > this.sendSnaps(this.snapshots[id].images, id, this.snapshots[id].createdAt)</span>
|
|
435
593
|
<span class="cstat-no" title="statement not covered" > this.snapshots[id].images = []</span>
|
|
594
|
+
}
|
|
436
595
|
}
|
|
437
596
|
}
|
|
438
597
|
}, this.interval)
|
|
@@ -474,19 +633,37 @@ class CanvasRecorder {
|
|
|
474
633
|
}
|
|
475
634
|
}
|
|
476
635
|
|
|
477
|
-
const qualityInt =
|
|
478
|
-
low: 0.
|
|
636
|
+
const qualityInt = {
|
|
637
|
+
low: 0.35,
|
|
479
638
|
medium: 0.55,
|
|
480
639
|
high: 0.8,
|
|
481
640
|
}
|
|
482
641
|
|
|
483
|
-
function <span class="fstat-no" title="function not covered" >captureSnapshot(</span>
|
|
642
|
+
function <span class="fstat-no" title="function not covered" >captureSnapshot(</span>
|
|
643
|
+
canvas: HTMLCanvasElement,
|
|
644
|
+
quality: 'low' | 'medium' | 'high' = <span class="branch-0 cbranch-no" title="branch not covered" >'medium',</span>
|
|
645
|
+
dummy: HTMLCanvasElement,
|
|
646
|
+
fixedScaling = <span class="branch-0 cbranch-no" title="branch not covered" >false,</span>
|
|
647
|
+
) {
|
|
484
648
|
const imageFormat = <span class="cstat-no" title="statement not covered" >'image/jpeg' </span>// or /png'
|
|
485
|
-
<span class="cstat-no" title="statement not covered" >
|
|
649
|
+
<span class="cstat-no" title="statement not covered" > if (fixedScaling) {</span>
|
|
650
|
+
const canvasScaleRatio = <span class="cstat-no" title="statement not covered" >window.devicePixelRatio || 1</span>
|
|
651
|
+
<span class="cstat-no" title="statement not covered" > dummy.width = canvas.width / canvasScaleRatio</span>
|
|
652
|
+
<span class="cstat-no" title="statement not covered" > dummy.height = canvas.height / canvasScaleRatio</span>
|
|
653
|
+
const ctx = <span class="cstat-no" title="statement not covered" >dummy.getContext('2d')</span>
|
|
654
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!ctx) {</span>
|
|
655
|
+
<span class="cstat-no" title="statement not covered" > return ''</span>
|
|
656
|
+
}
|
|
657
|
+
<span class="cstat-no" title="statement not covered" > ctx.drawImage(canvas, 0, 0, dummy.width, dummy.height)</span>
|
|
658
|
+
<span class="cstat-no" title="statement not covered" > return dummy.toDataURL(imageFormat, qualityInt[quality])</span>
|
|
659
|
+
} else {
|
|
660
|
+
<span class="cstat-no" title="statement not covered" > return canvas.toDataURL(imageFormat, qualityInt[quality])</span>
|
|
661
|
+
}
|
|
486
662
|
}
|
|
487
663
|
|
|
488
664
|
function <span class="fstat-no" title="function not covered" >dataUrlToBlob(</span>dataUrl: string): [Blob, Uint8Array] | null {
|
|
489
665
|
const [header, base64] = <span class="cstat-no" title="statement not covered" >dataUrl.split(',')</span>
|
|
666
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!header || !base64) <span class="cstat-no" title="statement not covered" >return null</span></span>
|
|
490
667
|
const encParts = <span class="cstat-no" title="statement not covered" >header.match(/:(.*?);/)</span>
|
|
491
668
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!encParts) <span class="cstat-no" title="statement not covered" >return null</span></span>
|
|
492
669
|
const mime = <span class="cstat-no" title="statement not covered" >encParts[1]</span>
|
|
@@ -512,7 +689,7 @@ function <span class="fstat-no" title="function not covered" >saveImageData(</sp
|
|
|
512
689
|
<span class="cstat-no" title="statement not covered" > document.body.removeChild(link)</span>
|
|
513
690
|
}
|
|
514
691
|
|
|
515
|
-
|
|
692
|
+
export default CanvasRecorder
|
|
516
693
|
</pre></td></tr></table></pre>
|
|
517
694
|
|
|
518
695
|
<div class='push'></div><!-- for sticky footer -->
|
|
@@ -520,7 +697,7 @@ function <span class="fstat-no" title="function not covered" >saveImageData(</sp
|
|
|
520
697
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
521
698
|
Code coverage generated by
|
|
522
699
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
523
|
-
at 2024-
|
|
700
|
+
at 2024-06-04T11:50:55.506Z
|
|
524
701
|
</div>
|
|
525
702
|
<script src="../../prettify.js"></script>
|
|
526
703
|
<script>
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">56.25% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>9/16</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
@@ -37,16 +37,16 @@
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">12.5% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>1/8</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">56.25% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>9/16</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line medium'></div>
|
|
65
65
|
<pre><table class="coverage">
|
|
66
66
|
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
67
|
<a name='L2'></a><a href='#L2'>2</a>
|
|
@@ -113,31 +113,31 @@
|
|
|
113
113
|
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
114
|
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
115
|
<a name='L50'></a><a href='#L50'>50</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
116
|
-
<span class="cline-any cline-
|
|
116
|
+
<span class="cline-any cline-yes">1x</span>
|
|
117
117
|
<span class="cline-any cline-no"> </span>
|
|
118
118
|
<span class="cline-any cline-neutral"> </span>
|
|
119
119
|
<span class="cline-any cline-neutral"> </span>
|
|
120
|
-
<span class="cline-any cline-
|
|
120
|
+
<span class="cline-any cline-yes">1x</span>
|
|
121
121
|
<span class="cline-any cline-no"> </span>
|
|
122
122
|
<span class="cline-any cline-neutral"> </span>
|
|
123
123
|
<span class="cline-any cline-neutral"> </span>
|
|
124
|
-
<span class="cline-any cline-
|
|
124
|
+
<span class="cline-any cline-yes">1x</span>
|
|
125
125
|
<span class="cline-any cline-no"> </span>
|
|
126
126
|
<span class="cline-any cline-neutral"> </span>
|
|
127
127
|
<span class="cline-any cline-neutral"> </span>
|
|
128
|
-
<span class="cline-any cline-
|
|
128
|
+
<span class="cline-any cline-yes">1x</span>
|
|
129
129
|
<span class="cline-any cline-no"> </span>
|
|
130
130
|
<span class="cline-any cline-neutral"> </span>
|
|
131
131
|
<span class="cline-any cline-neutral"> </span>
|
|
132
|
-
<span class="cline-any cline-
|
|
132
|
+
<span class="cline-any cline-yes">1x</span>
|
|
133
133
|
<span class="cline-any cline-no"> </span>
|
|
134
134
|
<span class="cline-any cline-neutral"> </span>
|
|
135
135
|
<span class="cline-any cline-neutral"> </span>
|
|
136
|
-
<span class="cline-any cline-
|
|
136
|
+
<span class="cline-any cline-yes">1x</span>
|
|
137
137
|
<span class="cline-any cline-no"> </span>
|
|
138
138
|
<span class="cline-any cline-neutral"> </span>
|
|
139
139
|
<span class="cline-any cline-neutral"> </span>
|
|
140
|
-
<span class="cline-any cline-
|
|
140
|
+
<span class="cline-any cline-yes">1x</span>
|
|
141
141
|
<span class="cline-any cline-no"> </span>
|
|
142
142
|
<span class="cline-any cline-neutral"> </span>
|
|
143
143
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -154,39 +154,39 @@
|
|
|
154
154
|
<span class="cline-any cline-neutral"> </span>
|
|
155
155
|
<span class="cline-any cline-neutral"> </span>
|
|
156
156
|
<span class="cline-any cline-neutral"> </span>
|
|
157
|
-
<span class="cline-any cline-
|
|
157
|
+
<span class="cline-any cline-yes">1x</span>
|
|
158
158
|
<span class="cline-any cline-neutral"> </span>
|
|
159
159
|
<span class="cline-any cline-neutral"> </span>
|
|
160
160
|
<span class="cline-any cline-neutral"> </span>
|
|
161
161
|
<span class="cline-any cline-neutral"> </span>
|
|
162
|
-
<span class="cline-any cline-
|
|
162
|
+
<span class="cline-any cline-yes">3x</span>
|
|
163
163
|
<span class="cline-any cline-neutral"> </span>
|
|
164
164
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">//@ts-ignore
|
|
165
|
-
|
|
165
|
+
export function <span class="fstat-no" title="function not covered" >isNode(</span>sth: any): sth is Node {
|
|
166
166
|
<span class="cstat-no" title="statement not covered" > return !!sth && sth.nodeType != null</span>
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
-
|
|
169
|
+
export function <span class="fstat-no" title="function not covered" >isSVGElement(</span>node: Element): node is SVGElement {
|
|
170
170
|
<span class="cstat-no" title="statement not covered" > return node.namespaceURI === 'http://www.w3.org/2000/svg'</span>
|
|
171
171
|
}
|
|
172
172
|
|
|
173
|
-
|
|
173
|
+
export function <span class="fstat-no" title="function not covered" >isElementNode(</span>node: Node): node is Element {
|
|
174
174
|
<span class="cstat-no" title="statement not covered" > return node.nodeType === Node.ELEMENT_NODE</span>
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
-
|
|
177
|
+
export function <span class="fstat-no" title="function not covered" >isCommentNode(</span>node: Node): node is Comment {
|
|
178
178
|
<span class="cstat-no" title="statement not covered" > return node.nodeType === Node.COMMENT_NODE</span>
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
-
|
|
181
|
+
export function <span class="fstat-no" title="function not covered" >isTextNode(</span>node: Node): node is Text {
|
|
182
182
|
<span class="cstat-no" title="statement not covered" > return node.nodeType === Node.TEXT_NODE</span>
|
|
183
183
|
}
|
|
184
184
|
|
|
185
|
-
|
|
185
|
+
export function <span class="fstat-no" title="function not covered" >isDocument(</span>node: Node): node is Document {
|
|
186
186
|
<span class="cstat-no" title="statement not covered" > return node.nodeType === Node.DOCUMENT_NODE</span>
|
|
187
187
|
}
|
|
188
188
|
|
|
189
|
-
|
|
189
|
+
export function <span class="fstat-no" title="function not covered" >isRootNode(</span>node: Node): node is Document | DocumentFragment {
|
|
190
190
|
<span class="cstat-no" title="statement not covered" > return node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE</span>
|
|
191
191
|
}
|
|
192
192
|
|
|
@@ -203,12 +203,12 @@ type TagTypeMap = {
|
|
|
203
203
|
link: HTMLLinkElement
|
|
204
204
|
canvas: HTMLCanvasElement
|
|
205
205
|
}
|
|
206
|
-
|
|
206
|
+
export function hasTag<T extends keyof TagTypeMap>(
|
|
207
207
|
el: Node,
|
|
208
208
|
tagName: T,
|
|
209
209
|
): el is TagTypeMap[typeof tagName] {
|
|
210
210
|
// @ts-ignore
|
|
211
|
-
|
|
211
|
+
return el.localName === tagName
|
|
212
212
|
}
|
|
213
213
|
</pre></td></tr></table></pre>
|
|
214
214
|
|
|
@@ -217,7 +217,7 @@ type TagTypeMap = {
|
|
|
217
217
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
218
218
|
Code coverage generated by
|
|
219
219
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
220
|
-
at 2024-
|
|
220
|
+
at 2024-06-04T11:50:55.506Z
|
|
221
221
|
</div>
|
|
222
222
|
<script src="../../prettify.js"></script>
|
|
223
223
|
<script>
|