@openreplay/tracker 11.0.6 → 12.0.0

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 (113) hide show
  1. package/CHANGELOG.md +4 -2
  2. package/cjs/app/index.d.ts +84 -6
  3. package/cjs/app/index.js +427 -58
  4. package/cjs/app/logger.d.ts +7 -17
  5. package/cjs/app/logger.js +11 -19
  6. package/cjs/app/messages.gen.d.ts +2 -0
  7. package/cjs/app/messages.gen.js +20 -1
  8. package/cjs/app/observer/iframe_observer.js +4 -1
  9. package/cjs/app/observer/shadow_root_observer.js +4 -1
  10. package/cjs/app/observer/top_observer.js +7 -4
  11. package/cjs/common/interaction.d.ts +5 -2
  12. package/cjs/common/messages.gen.d.ts +17 -2
  13. package/cjs/index.d.ts +45 -2
  14. package/cjs/index.js +237 -106
  15. package/cjs/modules/Network/beaconProxy.js +4 -1
  16. package/cjs/modules/Network/fetchProxy.js +24 -1
  17. package/cjs/modules/Network/index.js +6 -3
  18. package/cjs/modules/Network/xhrProxy.js +24 -1
  19. package/cjs/modules/conditionsManager.d.ts +84 -0
  20. package/cjs/modules/conditionsManager.js +343 -0
  21. package/cjs/modules/exception.js +4 -1
  22. package/cjs/modules/featureFlags.d.ts +1 -1
  23. package/cjs/modules/featureFlags.js +36 -46
  24. package/cjs/modules/network.js +5 -2
  25. package/cjs/modules/tagWatcher.d.ts +21 -0
  26. package/cjs/modules/tagWatcher.js +77 -0
  27. package/cjs/modules/userTesting/index.js +30 -4
  28. package/cjs/modules/userTesting/recorder.js +71 -88
  29. package/coverage/clover.xml +577 -544
  30. package/coverage/coverage-final.json +8 -8
  31. package/coverage/lcov-report/index.html +28 -28
  32. package/coverage/lcov-report/main/app/canvas.ts.html +97 -46
  33. package/coverage/lcov-report/main/app/guards.ts.html +1 -1
  34. package/coverage/lcov-report/main/app/index.html +19 -19
  35. package/coverage/lcov-report/main/app/index.ts.html +62 -35
  36. package/coverage/lcov-report/main/app/logger.ts.html +1 -1
  37. package/coverage/lcov-report/main/app/messages.gen.ts.html +32 -5
  38. package/coverage/lcov-report/main/app/nodes.ts.html +17 -5
  39. package/coverage/lcov-report/main/app/observer/iframe_observer.ts.html +1 -1
  40. package/coverage/lcov-report/main/app/observer/iframe_offsets.ts.html +1 -1
  41. package/coverage/lcov-report/main/app/observer/index.html +1 -1
  42. package/coverage/lcov-report/main/app/observer/shadow_root_observer.ts.html +1 -1
  43. package/coverage/lcov-report/main/app/observer/top_observer.ts.html +1 -1
  44. package/coverage/lcov-report/main/app/sanitizer.ts.html +1 -1
  45. package/coverage/lcov-report/main/app/session.ts.html +1 -1
  46. package/coverage/lcov-report/main/app/ticker.ts.html +1 -1
  47. package/coverage/lcov-report/main/index.html +9 -9
  48. package/coverage/lcov-report/main/index.ts.html +27 -6
  49. package/coverage/lcov-report/main/modules/Network/beaconProxy.ts.html +1 -1
  50. package/coverage/lcov-report/main/modules/Network/fetchProxy.ts.html +1 -1
  51. package/coverage/lcov-report/main/modules/Network/index.html +1 -1
  52. package/coverage/lcov-report/main/modules/Network/index.ts.html +1 -1
  53. package/coverage/lcov-report/main/modules/Network/networkMessage.ts.html +1 -1
  54. package/coverage/lcov-report/main/modules/Network/utils.ts.html +1 -1
  55. package/coverage/lcov-report/main/modules/Network/xhrProxy.ts.html +1 -1
  56. package/coverage/lcov-report/main/modules/attributeSender.ts.html +1 -1
  57. package/coverage/lcov-report/main/modules/axiosSpy.ts.html +1 -1
  58. package/coverage/lcov-report/main/modules/conditionsManager.ts.html +92 -38
  59. package/coverage/lcov-report/main/modules/connection.ts.html +1 -1
  60. package/coverage/lcov-report/main/modules/console.ts.html +1 -1
  61. package/coverage/lcov-report/main/modules/constructedStyleSheets.ts.html +1 -1
  62. package/coverage/lcov-report/main/modules/cssrules.ts.html +1 -1
  63. package/coverage/lcov-report/main/modules/exception.ts.html +1 -1
  64. package/coverage/lcov-report/main/modules/featureFlags.ts.html +1 -1
  65. package/coverage/lcov-report/main/modules/focus.ts.html +1 -1
  66. package/coverage/lcov-report/main/modules/fonts.ts.html +1 -1
  67. package/coverage/lcov-report/main/modules/img.ts.html +1 -1
  68. package/coverage/lcov-report/main/modules/index.html +21 -21
  69. package/coverage/lcov-report/main/modules/input.ts.html +1 -1
  70. package/coverage/lcov-report/main/modules/mouse.ts.html +1 -1
  71. package/coverage/lcov-report/main/modules/network.ts.html +1 -1
  72. package/coverage/lcov-report/main/modules/performance.ts.html +1 -1
  73. package/coverage/lcov-report/main/modules/scroll.ts.html +1 -1
  74. package/coverage/lcov-report/main/modules/selection.ts.html +1 -1
  75. package/coverage/lcov-report/main/modules/tabs.ts.html +1 -1
  76. package/coverage/lcov-report/main/modules/tagWatcher.ts.html +54 -27
  77. package/coverage/lcov-report/main/modules/timing.ts.html +1 -1
  78. package/coverage/lcov-report/main/modules/userTesting/SignalManager.ts.html +1 -1
  79. package/coverage/lcov-report/main/modules/userTesting/dnd.ts.html +1 -1
  80. package/coverage/lcov-report/main/modules/userTesting/index.html +1 -1
  81. package/coverage/lcov-report/main/modules/userTesting/index.ts.html +1 -1
  82. package/coverage/lcov-report/main/modules/userTesting/recorder.ts.html +1 -1
  83. package/coverage/lcov-report/main/modules/userTesting/styles.ts.html +1 -1
  84. package/coverage/lcov-report/main/modules/userTesting/utils.ts.html +1 -1
  85. package/coverage/lcov-report/main/modules/viewport.ts.html +1 -1
  86. package/coverage/lcov-report/main/utils.ts.html +1 -1
  87. package/coverage/lcov-report/webworker/BatchWriter.ts.html +1 -1
  88. package/coverage/lcov-report/webworker/MessageEncoder.gen.ts.html +17 -5
  89. package/coverage/lcov-report/webworker/PrimitiveEncoder.ts.html +1 -1
  90. package/coverage/lcov-report/webworker/QueueSender.ts.html +1 -1
  91. package/coverage/lcov-report/webworker/index.html +7 -7
  92. package/coverage/lcov-report/webworker/index.ts.html +1 -1
  93. package/coverage/lcov.info +1100 -1033
  94. package/lib/app/index.d.ts +84 -6
  95. package/lib/app/index.js +387 -44
  96. package/lib/app/logger.d.ts +7 -17
  97. package/lib/app/logger.js +11 -19
  98. package/lib/app/messages.gen.d.ts +2 -0
  99. package/lib/app/messages.gen.js +17 -0
  100. package/lib/common/interaction.d.ts +5 -2
  101. package/lib/common/messages.gen.d.ts +17 -2
  102. package/lib/common/tsconfig.tsbuildinfo +1 -1
  103. package/lib/index.d.ts +45 -2
  104. package/lib/index.js +191 -86
  105. package/lib/modules/conditionsManager.d.ts +84 -0
  106. package/lib/modules/conditionsManager.js +340 -0
  107. package/lib/modules/featureFlags.d.ts +1 -1
  108. package/lib/modules/featureFlags.js +36 -46
  109. package/lib/modules/tagWatcher.d.ts +21 -0
  110. package/lib/modules/tagWatcher.js +74 -0
  111. package/lib/modules/userTesting/recorder.js +71 -88
  112. package/package.json +1 -1
  113. package/tsconfig-base.json +3 -2
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">0.92% </span>
26
+ <span class="strong">0.91% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>38/4111</span>
28
+ <span class='fraction'>38/4148</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">0.58% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>12/2035</span>
35
+ <span class='fraction'>12/2051</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">1.48% </span>
40
+ <span class="strong">1.46% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>12/808</span>
42
+ <span class='fraction'>12/817</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">0.95% </span>
47
+ <span class="strong">0.94% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>38/3992</span>
49
+ <span class='fraction'>38/4025</span>
50
50
  </div>
51
51
 
52
52
 
@@ -84,13 +84,13 @@
84
84
  <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
85
85
  </td>
86
86
  <td data-value="0" class="pct low">0%</td>
87
- <td data-value="294" class="abs low">0/294</td>
87
+ <td data-value="298" class="abs low">0/298</td>
88
88
  <td data-value="0" class="pct low">0%</td>
89
- <td data-value="149" class="abs low">0/149</td>
89
+ <td data-value="150" class="abs low">0/150</td>
90
90
  <td data-value="0" class="pct low">0%</td>
91
- <td data-value="62" class="abs low">0/62</td>
91
+ <td data-value="63" class="abs low">0/63</td>
92
92
  <td data-value="0" class="pct low">0%</td>
93
- <td data-value="292" class="abs low">0/292</td>
93
+ <td data-value="296" class="abs low">0/296</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
@@ -99,13 +99,13 @@
99
99
  <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
100
100
  </td>
101
101
  <td data-value="0" class="pct low">0%</td>
102
- <td data-value="909" class="abs low">0/909</td>
102
+ <td data-value="932" class="abs low">0/932</td>
103
103
  <td data-value="0" class="pct low">0%</td>
104
- <td data-value="350" class="abs low">0/350</td>
104
+ <td data-value="359" class="abs low">0/359</td>
105
105
  <td data-value="0" class="pct low">0%</td>
106
- <td data-value="234" class="abs low">0/234</td>
106
+ <td data-value="241" class="abs low">0/241</td>
107
107
  <td data-value="0" class="pct low">0%</td>
108
- <td data-value="885" class="abs low">0/885</td>
108
+ <td data-value="905" class="abs low">0/905</td>
109
109
  </tr>
110
110
 
111
111
  <tr>
@@ -125,17 +125,17 @@
125
125
 
126
126
  <tr>
127
127
  <td class="file low" data-value="main/modules"><a href="main/modules/index.html">main/modules</a></td>
128
- <td data-value="2.8" class="pic low">
128
+ <td data-value="2.78" class="pic low">
129
129
  <div class="chart"><div class="cover-fill" style="width: 2%"></div><div class="cover-empty" style="width: 98%"></div></div>
130
130
  </td>
131
- <td data-value="2.8" class="pct low">2.8%</td>
132
- <td data-value="1357" class="abs low">38/1357</td>
133
- <td data-value="1.79" class="pct low">1.79%</td>
134
- <td data-value="668" class="abs low">12/668</td>
135
- <td data-value="4.27" class="pct low">4.27%</td>
136
- <td data-value="281" class="abs low">12/281</td>
137
- <td data-value="2.91" class="pct low">2.91%</td>
138
- <td data-value="1303" class="abs low">38/1303</td>
131
+ <td data-value="2.78" class="pct low">2.78%</td>
132
+ <td data-value="1365" class="abs low">38/1365</td>
133
+ <td data-value="1.78" class="pct low">1.78%</td>
134
+ <td data-value="673" class="abs low">12/673</td>
135
+ <td data-value="4.25" class="pct low">4.25%</td>
136
+ <td data-value="282" class="abs low">12/282</td>
137
+ <td data-value="2.9" class="pct low">2.9%</td>
138
+ <td data-value="1310" class="abs low">38/1310</td>
139
139
  </tr>
140
140
 
141
141
  <tr>
@@ -174,13 +174,13 @@
174
174
  <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
175
175
  </td>
176
176
  <td data-value="0" class="pct low">0%</td>
177
- <td data-value="452" class="abs low">0/452</td>
177
+ <td data-value="454" class="abs low">0/454</td>
178
178
  <td data-value="0" class="pct low">0%</td>
179
- <td data-value="378" class="abs low">0/378</td>
179
+ <td data-value="379" class="abs low">0/379</td>
180
180
  <td data-value="0" class="pct low">0%</td>
181
181
  <td data-value="56" class="abs low">0/56</td>
182
182
  <td data-value="0" class="pct low">0%</td>
183
- <td data-value="445" class="abs low">0/445</td>
183
+ <td data-value="447" class="abs low">0/447</td>
184
184
  </tr>
185
185
 
186
186
  </tbody>
@@ -191,7 +191,7 @@
191
191
  <div class='footer quiet pad2 space-top1 center small'>
192
192
  Code coverage generated by
193
193
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
194
- at 2024-01-09T16:51:30.347Z
194
+ at 2024-01-23T12:19:37.435Z
195
195
  </div>
196
196
  <script src="prettify.js"></script>
197
197
  <script>
@@ -25,28 +25,28 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/61</span>
28
+ <span class='fraction'>0/75</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/21</span>
35
+ <span class='fraction'>0/26</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">0% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/13</span>
42
+ <span class='fraction'>0/16</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/60</span>
49
+ <span class='fraction'>0/72</span>
50
50
  </div>
51
51
 
52
52
 
@@ -196,7 +196,24 @@
196
196
  <a name='L131'></a><a href='#L131'>131</a>
197
197
  <a name='L132'></a><a href='#L132'>132</a>
198
198
  <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
200
217
  <span class="cline-any cline-no">&nbsp;</span>
201
218
  <span class="cline-any cline-no">&nbsp;</span>
202
219
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -211,6 +228,7 @@
211
228
  <span class="cline-any cline-neutral">&nbsp;</span>
212
229
  <span class="cline-any cline-neutral">&nbsp;</span>
213
230
  <span class="cline-any cline-neutral">&nbsp;</span>
231
+ <span class="cline-any cline-neutral">&nbsp;</span>
214
232
  <span class="cline-any cline-no">&nbsp;</span>
215
233
  <span class="cline-any cline-no">&nbsp;</span>
216
234
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -229,6 +247,19 @@
229
247
  <span class="cline-any cline-no">&nbsp;</span>
230
248
  <span class="cline-any cline-neutral">&nbsp;</span>
231
249
  <span class="cline-any cline-neutral">&nbsp;</span>
250
+ <span class="cline-any cline-neutral">&nbsp;</span>
251
+ <span class="cline-any cline-neutral">&nbsp;</span>
252
+ <span class="cline-any cline-no">&nbsp;</span>
253
+ <span class="cline-any cline-no">&nbsp;</span>
254
+ <span class="cline-any cline-no">&nbsp;</span>
255
+ <span class="cline-any cline-neutral">&nbsp;</span>
256
+ <span class="cline-any cline-neutral">&nbsp;</span>
257
+ <span class="cline-any cline-no">&nbsp;</span>
258
+ <span class="cline-any cline-no">&nbsp;</span>
259
+ <span class="cline-any cline-no">&nbsp;</span>
260
+ <span class="cline-any cline-no">&nbsp;</span>
261
+ <span class="cline-any cline-neutral">&nbsp;</span>
262
+ <span class="cline-any cline-neutral">&nbsp;</span>
232
263
  <span class="cline-any cline-no">&nbsp;</span>
233
264
  <span class="cline-any cline-no">&nbsp;</span>
234
265
  <span class="cline-any cline-no">&nbsp;</span>
@@ -259,7 +290,6 @@
259
290
  <span class="cline-any cline-neutral">&nbsp;</span>
260
291
  <span class="cline-any cline-neutral">&nbsp;</span>
261
292
  <span class="cline-any cline-neutral">&nbsp;</span>
262
- <span class="cline-any cline-neutral">&nbsp;</span>
263
293
  <span class="cline-any cline-no">&nbsp;</span>
264
294
  <span class="cline-any cline-no">&nbsp;</span>
265
295
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -267,6 +297,9 @@
267
297
  <span class="cline-any cline-no">&nbsp;</span>
268
298
  <span class="cline-any cline-no">&nbsp;</span>
269
299
  <span class="cline-any cline-no">&nbsp;</span>
300
+ <span class="cline-any cline-no">&nbsp;</span>
301
+ <span class="cline-any cline-no">&nbsp;</span>
302
+ <span class="cline-any cline-no">&nbsp;</span>
270
303
  <span class="cline-any cline-neutral">&nbsp;</span>
271
304
  <span class="cline-any cline-neutral">&nbsp;</span>
272
305
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -304,7 +337,8 @@
304
337
  <span class="cline-any cline-neutral">&nbsp;</span>
305
338
  <span class="cline-any cline-neutral">&nbsp;</span>
306
339
  <span class="cline-any cline-no">&nbsp;</span>
307
- <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-no">&nbsp;</span>
341
+ <span class="cline-any cline-no">&nbsp;</span>
308
342
  <span class="cline-any cline-no">&nbsp;</span>
309
343
  <span class="cline-any cline-no">&nbsp;</span>
310
344
  <span class="cline-any cline-no">&nbsp;</span>
@@ -341,6 +375,7 @@ interface CanvasSnapshot {
341
375
  interface Options {
342
376
  fps: number
343
377
  quality: 'low' | 'medium' | 'high'
378
+ isDebug?: boolean
344
379
  }
345
380
  &nbsp;
346
381
  class CanvasRecorder {
@@ -356,40 +391,52 @@ class CanvasRecorder {
356
391
  }
357
392
  &nbsp;
358
393
  <span class="fstat-no" title="function not covered" > startTracking(</span>) {
359
- <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 =&gt; {</span>
360
- const id = <span class="cstat-no" title="statement not covered" >this.app.nodes.getID(node)</span>
361
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!id) {</span>
362
- <span class="cstat-no" title="statement not covered" > return</span>
363
- }
394
+ <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
395
+ <span class="cstat-no" title="statement not covered" > this.app.nodes.scanTree(this.handleCanvasEl)</span>
396
+ <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 =&gt; {</span>
397
+ <span class="cstat-no" title="statement not covered" > this.handleCanvasEl(node)</span>
398
+ })
399
+ }, 500)
400
+ }
364
401
  &nbsp;
365
- const isIgnored = <span class="cstat-no" title="statement not covered" >this.app.sanitizer.isObscured(id) || this.app.sanitizer.isHidden(id)</span>
366
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isIgnored || !hasTag(node, 'canvas') || this.snapshots[id]) {</span>
367
- <span class="cstat-no" title="statement not covered" > return</span>
368
- }
369
- const ts = <span class="cstat-no" title="statement not covered" >this.app.timestamp()</span>
370
- <span class="cstat-no" title="statement not covered" > this.snapshots[id] = {</span>
371
- images: [],
372
- createdAt: ts,
373
- }
374
- const canvasMsg = <span class="cstat-no" title="statement not covered" >CanvasNode(id.toString(), ts)</span>
375
- <span class="cstat-no" title="statement not covered" > this.app.send(canvasMsg as Message)</span>
376
- const int = <span class="cstat-no" title="statement not covered" >setInterval(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
377
- const cid = <span class="cstat-no" title="statement not covered" >this.app.nodes.getID(node)</span>
378
- const canvas = <span class="cstat-no" title="statement not covered" >cid ? this.app.nodes.getNode(cid) : undefined</span>
379
- <span class="cstat-no" title="statement not covered" > if (!canvas || !hasTag(canvas, 'canvas') || canvas !== node) {</span>
380
- <span class="cstat-no" title="statement not covered" > this.app.debug.log('Canvas element not in sync')</span>
381
- <span class="cstat-no" title="statement not covered" > clearInterval(int)</span>
382
- } else {
383
- const snapshot = <span class="cstat-no" title="statement not covered" >captureSnapshot(canvas, this.options.quality)</span>
384
- <span class="cstat-no" title="statement not covered" > this.snapshots[id].images.push({ id: this.app.timestamp(), data: snapshot })</span>
385
- <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 &gt; 9) {</span>
386
- <span class="cstat-no" title="statement not covered" > this.sendSnaps(this.snapshots[id].images, id, this.snapshots[id].createdAt)</span>
387
- <span class="cstat-no" title="statement not covered" > this.snapshots[id].images = []</span>
388
- }
402
+ <span class="cstat-no" title="statement not covered" > restartTracking = <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
403
+ <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.handleCanvasEl)</span>
405
+ }
406
+ &nbsp;
407
+ <span class="cstat-no" title="statement not covered" > handleCanvasEl = <span class="fstat-no" title="function not covered" >(n</span>ode: Node) =&gt; {</span>
408
+ const id = <span class="cstat-no" title="statement not covered" >this.app.nodes.getID(node)</span>
409
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!id || !hasTag(node, 'canvas')) {</span>
410
+ <span class="cstat-no" title="statement not covered" > return</span>
411
+ }
412
+ &nbsp;
413
+ const isIgnored = <span class="cstat-no" title="statement not covered" >this.app.sanitizer.isObscured(id) || this.app.sanitizer.isHidden(id)</span>
414
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isIgnored || !hasTag(node, 'canvas') || this.snapshots[id]) {</span>
415
+ <span class="cstat-no" title="statement not covered" > return</span>
416
+ }
417
+ const ts = <span class="cstat-no" title="statement not covered" >this.app.timestamp()</span>
418
+ <span class="cstat-no" title="statement not covered" > this.snapshots[id] = {</span>
419
+ images: [],
420
+ createdAt: ts,
421
+ }
422
+ const canvasMsg = <span class="cstat-no" title="statement not covered" >CanvasNode(id.toString(), ts)</span>
423
+ <span class="cstat-no" title="statement not covered" > this.app.send(canvasMsg as Message)</span>
424
+ const int = <span class="cstat-no" title="statement not covered" >setInterval(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
425
+ const cid = <span class="cstat-no" title="statement not covered" >this.app.nodes.getID(node)</span>
426
+ const canvas = <span class="cstat-no" title="statement not covered" >cid ? this.app.nodes.getNode(cid) : undefined</span>
427
+ <span class="cstat-no" title="statement not covered" > if (!canvas || !hasTag(canvas, 'canvas') || canvas !== node) {</span>
428
+ <span class="cstat-no" title="statement not covered" > this.app.debug.log('Canvas element not in sync')</span>
429
+ <span class="cstat-no" title="statement not covered" > clearInterval(int)</span>
430
+ } else {
431
+ const snapshot = <span class="cstat-no" title="statement not covered" >captureSnapshot(canvas, this.options.quality)</span>
432
+ <span class="cstat-no" title="statement not covered" > this.snapshots[id].images.push({ id: this.app.timestamp(), data: snapshot })</span>
433
+ <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 &gt; 9) {</span>
434
+ <span class="cstat-no" title="statement not covered" > this.sendSnaps(this.snapshots[id].images, id, this.snapshots[id].createdAt)</span>
435
+ <span class="cstat-no" title="statement not covered" > this.snapshots[id].images = []</span>
389
436
  }
390
- }, this.interval)
391
- <span class="cstat-no" title="statement not covered" > this.intervals.push(int)</span>
392
- })
437
+ }
438
+ }, this.interval)
439
+ <span class="cstat-no" title="statement not covered" > this.intervals.push(int)</span>
393
440
  }
394
441
  &nbsp;
395
442
  <span class="fstat-no" title="function not covered" > sendSnaps(</span>images: { data: string; id: number }[], canvasId: number, createdAt: number) {
@@ -398,9 +445,12 @@ class CanvasRecorder {
398
445
  }
399
446
  const formData = <span class="cstat-no" title="statement not covered" >new FormData()</span>
400
447
  <span class="cstat-no" title="statement not covered" > images.forEach(<span class="fstat-no" title="function not covered" >(s</span>napshot) =&gt; {</span>
401
- const blob = <span class="cstat-no" title="statement not covered" >dataUrlToBlob(snapshot.data)[0]</span>
402
- <span class="cstat-no" title="statement not covered" > formData.append('snapshot', blob, `${createdAt}_${canvasId}_${snapshot.id}.jpeg`)</span>
403
- // saveImageData(snapshot.data, `${createdAt}_${canvasId}_${snapshot.id}.jpeg`)
448
+ const blob = <span class="cstat-no" title="statement not covered" >dataUrlToBlob(snapshot.data)</span>
449
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!blob) <span class="cstat-no" title="statement not covered" >return</span></span>
450
+ <span class="cstat-no" title="statement not covered" > formData.append('snapshot', blob[0], `${createdAt}_${canvasId}_${snapshot.id}.jpeg`)</span>
451
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.options.isDebug) {</span>
452
+ <span class="cstat-no" title="statement not covered" > saveImageData(snapshot.data, `${createdAt}_${canvasId}_${snapshot.id}.jpeg`)</span>
453
+ }
404
454
  })
405
455
  &nbsp;
406
456
  <span class="cstat-no" title="statement not covered" > fetch(this.app.options.ingestPoint + '/v1/web/images', {</span>
@@ -435,10 +485,11 @@ function <span class="fstat-no" title="function not covered" >captureSnapshot(</
435
485
  <span class="cstat-no" title="statement not covered" > return canvas.toDataURL(imageFormat, qualityInt[quality])</span>
436
486
  }
437
487
  &nbsp;
438
- function <span class="fstat-no" title="function not covered" >dataUrlToBlob(</span>dataUrl: string): [Blob, Uint8Array] {
488
+ function <span class="fstat-no" title="function not covered" >dataUrlToBlob(</span>dataUrl: string): [Blob, Uint8Array] | null {
439
489
  const [header, base64] = <span class="cstat-no" title="statement not covered" >dataUrl.split(',')</span>
440
- // @ts-ignore
441
- const mime = <span class="cstat-no" title="statement not covered" >header.match(/:(.*?);/)[1]</span>
490
+ const encParts = <span class="cstat-no" title="statement not covered" >header.match(/:(.*?);/)</span>
491
+ <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
+ const mime = <span class="cstat-no" title="statement not covered" >encParts[1]</span>
442
493
  const blobStr = <span class="cstat-no" title="statement not covered" >atob(base64)</span>
443
494
  let n = <span class="cstat-no" title="statement not covered" >blobStr.length</span>
444
495
  const u8arr = <span class="cstat-no" title="statement not covered" >new Uint8Array(n)</span>
@@ -469,7 +520,7 @@ function <span class="fstat-no" title="function not covered" >saveImageData(</sp
469
520
  <div class='footer quiet pad2 space-top1 center small'>
470
521
  Code coverage generated by
471
522
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
472
- at 2024-01-09T16:51:30.347Z
523
+ at 2024-01-23T12:19:37.435Z
473
524
  </div>
474
525
  <script src="../../prettify.js"></script>
475
526
  <script>
@@ -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-01-09T16:51:30.347Z
220
+ at 2024-01-23T12:19:37.435Z
221
221
  </div>
222
222
  <script src="../../prettify.js"></script>
223
223
  <script>
@@ -25,28 +25,28 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/909</span>
28
+ <span class='fraction'>0/932</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/350</span>
35
+ <span class='fraction'>0/359</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">0% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/234</span>
42
+ <span class='fraction'>0/241</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/885</span>
49
+ <span class='fraction'>0/905</span>
50
50
  </div>
51
51
 
52
52
 
@@ -84,13 +84,13 @@
84
84
  <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
85
85
  </td>
86
86
  <td data-value="0" class="pct low">0%</td>
87
- <td data-value="61" class="abs low">0/61</td>
87
+ <td data-value="75" class="abs low">0/75</td>
88
88
  <td data-value="0" class="pct low">0%</td>
89
- <td data-value="21" class="abs low">0/21</td>
89
+ <td data-value="26" class="abs low">0/26</td>
90
90
  <td data-value="0" class="pct low">0%</td>
91
- <td data-value="13" class="abs low">0/13</td>
91
+ <td data-value="16" class="abs low">0/16</td>
92
92
  <td data-value="0" class="pct low">0%</td>
93
- <td data-value="60" class="abs low">0/60</td>
93
+ <td data-value="72" class="abs low">0/72</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
@@ -114,13 +114,13 @@
114
114
  <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
115
115
  </td>
116
116
  <td data-value="0" class="pct low">0%</td>
117
- <td data-value="486" class="abs low">0/486</td>
117
+ <td data-value="490" class="abs low">0/490</td>
118
118
  <td data-value="0" class="pct low">0%</td>
119
- <td data-value="257" class="abs low">0/257</td>
119
+ <td data-value="261" class="abs low">0/261</td>
120
120
  <td data-value="0" class="pct low">0%</td>
121
- <td data-value="86" class="abs low">0/86</td>
121
+ <td data-value="87" class="abs low">0/87</td>
122
122
  <td data-value="0" class="pct low">0%</td>
123
- <td data-value="472" class="abs low">0/472</td>
123
+ <td data-value="476" class="abs low">0/476</td>
124
124
  </tr>
125
125
 
126
126
  <tr>
@@ -144,13 +144,13 @@
144
144
  <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
145
145
  </td>
146
146
  <td data-value="0" class="pct low">0%</td>
147
- <td data-value="142" class="abs low">0/142</td>
147
+ <td data-value="144" class="abs low">0/144</td>
148
148
  <td data-value="100" class="pct high">100%</td>
149
149
  <td data-value="0" class="abs high">0/0</td>
150
150
  <td data-value="0" class="pct low">0%</td>
151
- <td data-value="71" class="abs low">0/71</td>
151
+ <td data-value="72" class="abs low">0/72</td>
152
152
  <td data-value="0" class="pct low">0%</td>
153
- <td data-value="142" class="abs low">0/142</td>
153
+ <td data-value="144" class="abs low">0/144</td>
154
154
  </tr>
155
155
 
156
156
  <tr>
@@ -159,13 +159,13 @@
159
159
  <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
160
160
  </td>
161
161
  <td data-value="0" class="pct low">0%</td>
162
- <td data-value="55" class="abs low">0/55</td>
162
+ <td data-value="58" class="abs low">0/58</td>
163
163
  <td data-value="0" class="pct low">0%</td>
164
164
  <td data-value="11" class="abs low">0/11</td>
165
165
  <td data-value="0" class="pct low">0%</td>
166
- <td data-value="13" class="abs low">0/13</td>
166
+ <td data-value="15" class="abs low">0/15</td>
167
167
  <td data-value="0" class="pct low">0%</td>
168
- <td data-value="51" class="abs low">0/51</td>
168
+ <td data-value="53" class="abs low">0/53</td>
169
169
  </tr>
170
170
 
171
171
  <tr>
@@ -221,7 +221,7 @@
221
221
  <div class='footer quiet pad2 space-top1 center small'>
222
222
  Code coverage generated by
223
223
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
224
- at 2024-01-09T16:51:30.347Z
224
+ at 2024-01-23T12:19:37.435Z
225
225
  </div>
226
226
  <script src="../../prettify.js"></script>
227
227
  <script>