Compare commits
2 Commits
8c7e5947cd
...
085f4fa5fa
| Author | SHA1 | Date |
|---|---|---|
|
|
085f4fa5fa | |
|
|
c55bbde5a8 |
File diff suppressed because one or more lines are too long
|
|
@ -23,30 +23,30 @@
|
|||
<div class='clearfix'>
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">49.43% </span>
|
||||
<span class="strong">51.53% </span>
|
||||
<span class="quiet">Statements</span>
|
||||
<span class='fraction'>2635/5330</span>
|
||||
<span class='fraction'>2834/5499</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">87.24% </span>
|
||||
<span class="strong">85.41% </span>
|
||||
<span class="quiet">Branches</span>
|
||||
<span class='fraction'>513/588</span>
|
||||
<span class='fraction'>568/665</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">41.97% </span>
|
||||
<span class="strong">51.19% </span>
|
||||
<span class="quiet">Functions</span>
|
||||
<span class='fraction'>123/293</span>
|
||||
<span class='fraction'>150/293</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">49.43% </span>
|
||||
<span class="strong">51.53% </span>
|
||||
<span class="quiet">Lines</span>
|
||||
<span class='fraction'>2635/5330</span>
|
||||
<span class='fraction'>2834/5499</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
</div>
|
||||
</template>
|
||||
</div>
|
||||
<div class='status-line low'></div>
|
||||
<div class='status-line medium'></div>
|
||||
<div class="pad1">
|
||||
<table class="coverage-summary">
|
||||
<thead>
|
||||
|
|
@ -79,33 +79,33 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody><tr>
|
||||
<td class="file medium" data-value="src"><a href="src/index.html">src</a></td>
|
||||
<td data-value="50.39" class="pic medium">
|
||||
<div class="chart"><div class="cover-fill" style="width: 50%"></div><div class="cover-empty" style="width: 50%"></div></div>
|
||||
<td class="file low" data-value="src"><a href="src/index.html">src</a></td>
|
||||
<td data-value="37.57" class="pic low">
|
||||
<div class="chart"><div class="cover-fill" style="width: 37%"></div><div class="cover-empty" style="width: 63%"></div></div>
|
||||
</td>
|
||||
<td data-value="50.39" class="pct medium">50.39%</td>
|
||||
<td data-value="252" class="abs medium">127/252</td>
|
||||
<td data-value="37.57" class="pct low">37.57%</td>
|
||||
<td data-value="338" class="abs low">127/338</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">0/0</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="21" class="abs low">0/21</td>
|
||||
<td data-value="50.39" class="pct medium">50.39%</td>
|
||||
<td data-value="252" class="abs medium">127/252</td>
|
||||
<td data-value="37.57" class="pct low">37.57%</td>
|
||||
<td data-value="338" class="abs low">127/338</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file medium" data-value="src/core"><a href="src/core/index.html">src/core</a></td>
|
||||
<td data-value="60.64" class="pic medium">
|
||||
<div class="chart"><div class="cover-fill" style="width: 60%"></div><div class="cover-empty" style="width: 40%"></div></div>
|
||||
<td data-value="69.23" class="pic medium">
|
||||
<div class="chart"><div class="cover-fill" style="width: 69%"></div><div class="cover-empty" style="width: 31%"></div></div>
|
||||
</td>
|
||||
<td data-value="60.64" class="pct medium">60.64%</td>
|
||||
<td data-value="1606" class="abs medium">974/1606</td>
|
||||
<td data-value="85.78" class="pct high">85.78%</td>
|
||||
<td data-value="197" class="abs high">169/197</td>
|
||||
<td data-value="52" class="pct medium">52%</td>
|
||||
<td data-value="100" class="abs medium">52/100</td>
|
||||
<td data-value="60.64" class="pct medium">60.64%</td>
|
||||
<td data-value="1606" class="abs medium">974/1606</td>
|
||||
<td data-value="69.23" class="pct medium">69.23%</td>
|
||||
<td data-value="1690" class="abs medium">1170/1690</td>
|
||||
<td data-value="80.43" class="pct high">80.43%</td>
|
||||
<td data-value="276" class="abs high">222/276</td>
|
||||
<td data-value="79" class="pct medium">79%</td>
|
||||
<td data-value="100" class="abs medium">79/100</td>
|
||||
<td data-value="69.23" class="pct medium">69.23%</td>
|
||||
<td data-value="1690" class="abs medium">1170/1690</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
|
@ -125,17 +125,17 @@
|
|||
|
||||
<tr>
|
||||
<td class="file high" data-value="src/utils"><a href="src/utils/index.html">src/utils</a></td>
|
||||
<td data-value="97.36" class="pic high">
|
||||
<td data-value="97.71" class="pic high">
|
||||
<div class="chart"><div class="cover-fill" style="width: 97%"></div><div class="cover-empty" style="width: 3%"></div></div>
|
||||
</td>
|
||||
<td data-value="97.36" class="pct high">97.36%</td>
|
||||
<td data-value="1138" class="abs high">1108/1138</td>
|
||||
<td data-value="87.87" class="pct high">87.87%</td>
|
||||
<td data-value="363" class="abs high">319/363</td>
|
||||
<td data-value="97.71" class="pct high">97.71%</td>
|
||||
<td data-value="1137" class="abs high">1111/1137</td>
|
||||
<td data-value="88.91" class="pct high">88.91%</td>
|
||||
<td data-value="361" class="abs high">321/361</td>
|
||||
<td data-value="96.92" class="pct high">96.92%</td>
|
||||
<td data-value="65" class="abs high">63/65</td>
|
||||
<td data-value="97.36" class="pct high">97.36%</td>
|
||||
<td data-value="1138" class="abs high">1108/1138</td>
|
||||
<td data-value="97.71" class="pct high">97.71%</td>
|
||||
<td data-value="1137" class="abs high">1111/1137</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
|
|
@ -146,7 +146,7 @@
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -30,9 +30,9 @@
|
|||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">81.81% </span>
|
||||
<span class="strong">83.63% </span>
|
||||
<span class="quiet">Branches</span>
|
||||
<span class='fraction'>45/55</span>
|
||||
<span class='fraction'>46/55</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -337,50 +337,50 @@
|
|||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">40x</span>
|
||||
<span class="cline-any cline-yes">40x</span>
|
||||
<span class="cline-any cline-yes">72x</span>
|
||||
<span class="cline-any cline-yes">72x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">10x</span>
|
||||
<span class="cline-any cline-yes">10x</span>
|
||||
<span class="cline-any cline-yes">172x</span>
|
||||
<span class="cline-any cline-yes">172x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">6x</span>
|
||||
<span class="cline-any cline-yes">6x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
|
|
@ -623,7 +623,7 @@ export class ConfigManager {
|
|||
}
|
||||
|
||||
isIgnoredError(message: string): boolean {
|
||||
return matchPatterns(message, this.config.<span class="branch-0 cbranch-no" title="branch not covered" >ignoreErrors || [])</span>;
|
||||
return matchPatterns(message, this.config.ignoreErrors || []);
|
||||
}
|
||||
|
||||
shouldSample(): boolean {
|
||||
|
|
@ -802,7 +802,7 @@ export class ConfigManager {
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -113,49 +113,49 @@
|
|||
<a name='L48'></a><a href='#L48'>48</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">42x</span>
|
||||
<span class="cline-any cline-yes">74x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">24x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">24x</span>
|
||||
<span class="cline-any cline-yes">24x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">10x</span>
|
||||
<span class="cline-any cline-yes">10x</span>
|
||||
<span class="cline-any cline-yes">9x</span>
|
||||
<span class="cline-any cline-yes">9x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">9x</span>
|
||||
<span class="cline-any cline-yes">10x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">95x</span>
|
||||
<span class="cline-any cline-yes">95x</span>
|
||||
<span class="cline-any cline-yes">16x</span>
|
||||
<span class="cline-any cline-yes">16x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">9x</span>
|
||||
<span class="cline-any cline-yes">9x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">9x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">88x</span>
|
||||
<span class="cline-any cline-yes">88x</span>
|
||||
<span class="cline-any cline-yes">14x</span>
|
||||
<span class="cline-any cline-yes">15x</span>
|
||||
<span class="cline-any cline-yes">15x</span>
|
||||
<span class="cline-any cline-yes">15x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">15x</span>
|
||||
<span class="cline-any cline-yes">14x</span>
|
||||
<span class="cline-any cline-yes">88x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">16x</span>
|
||||
<span class="cline-any cline-yes">95x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">36x</span>
|
||||
<span class="cline-any cline-yes">36x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">type Handler = (...args: unknown[]) => void;
|
||||
|
||||
|
|
@ -211,7 +211,7 @@ export class EventBus {
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -23,16 +23,16 @@
|
|||
<div class='clearfix'>
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">89.9% </span>
|
||||
<span class="strong">90.53% </span>
|
||||
<span class="quiet">Statements</span>
|
||||
<span class='fraction'>285/317</span>
|
||||
<span class='fraction'>287/317</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">83.82% </span>
|
||||
<span class="strong">86.11% </span>
|
||||
<span class="quiet">Branches</span>
|
||||
<span class='fraction'>57/68</span>
|
||||
<span class='fraction'>62/72</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -44,9 +44,9 @@
|
|||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">89.9% </span>
|
||||
<span class="strong">90.53% </span>
|
||||
<span class="quiet">Lines</span>
|
||||
<span class='fraction'>285/317</span>
|
||||
<span class='fraction'>287/317</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -412,122 +412,122 @@
|
|||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">27x</span>
|
||||
<span class="cline-any cline-yes">27x</span>
|
||||
<span class="cline-any cline-yes">27x</span>
|
||||
<span class="cline-any cline-yes">27x</span>
|
||||
<span class="cline-any cline-yes">27x</span>
|
||||
<span class="cline-any cline-yes">27x</span>
|
||||
<span class="cline-any cline-yes">27x</span>
|
||||
<span class="cline-any cline-yes">27x</span>
|
||||
<span class="cline-any cline-yes">27x</span>
|
||||
<span class="cline-any cline-yes">27x</span>
|
||||
<span class="cline-any cline-yes">27x</span>
|
||||
<span class="cline-any cline-yes">27x</span>
|
||||
<span class="cline-any cline-yes">59x</span>
|
||||
<span class="cline-any cline-yes">59x</span>
|
||||
<span class="cline-any cline-yes">59x</span>
|
||||
<span class="cline-any cline-yes">59x</span>
|
||||
<span class="cline-any cline-yes">59x</span>
|
||||
<span class="cline-any cline-yes">59x</span>
|
||||
<span class="cline-any cline-yes">59x</span>
|
||||
<span class="cline-any cline-yes">59x</span>
|
||||
<span class="cline-any cline-yes">59x</span>
|
||||
<span class="cline-any cline-yes">59x</span>
|
||||
<span class="cline-any cline-yes">59x</span>
|
||||
<span class="cline-any cline-yes">59x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">26x</span>
|
||||
<span class="cline-any cline-yes">26x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">77x</span>
|
||||
<span class="cline-any cline-yes">77x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">83x</span>
|
||||
<span class="cline-any cline-yes">83x</span>
|
||||
<span class="cline-any cline-yes">83x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">83x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">77x</span>
|
||||
<span class="cline-any cline-yes">77x</span>
|
||||
<span class="cline-any cline-yes">77x</span>
|
||||
<span class="cline-any cline-yes">77x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">79x</span>
|
||||
<span class="cline-any cline-yes">79x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">87x</span>
|
||||
<span class="cline-any cline-yes">87x</span>
|
||||
<span class="cline-any cline-yes">87x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">86x</span>
|
||||
<span class="cline-any cline-yes">86x</span>
|
||||
<span class="cline-any cline-yes">86x</span>
|
||||
<span class="cline-any cline-yes">86x</span>
|
||||
<span class="cline-any cline-yes">86x</span>
|
||||
<span class="cline-any cline-yes">87x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">79x</span>
|
||||
<span class="cline-any cline-yes">79x</span>
|
||||
<span class="cline-any cline-yes">79x</span>
|
||||
<span class="cline-any cline-yes">79x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">51x</span>
|
||||
<span class="cline-any cline-yes">51x</span>
|
||||
<span class="cline-any cline-yes">33x</span>
|
||||
|
|
@ -548,69 +548,69 @@
|
|||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">26x</span>
|
||||
<span class="cline-any cline-yes">26x</span>
|
||||
<span class="cline-any cline-yes">26x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">46x</span>
|
||||
<span class="cline-any cline-yes">46x</span>
|
||||
<span class="cline-any cline-yes">46x</span>
|
||||
<span class="cline-any cline-yes">46x</span>
|
||||
<span class="cline-any cline-yes">46x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">50x</span>
|
||||
<span class="cline-any cline-yes">50x</span>
|
||||
<span class="cline-any cline-yes">50x</span>
|
||||
<span class="cline-any cline-yes">50x</span>
|
||||
<span class="cline-any cline-yes">50x</span>
|
||||
<span class="cline-any cline-yes">87x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">87x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">86x</span>
|
||||
<span class="cline-any cline-yes">6x</span>
|
||||
<span class="cline-any cline-yes">6x</span>
|
||||
<span class="cline-any cline-yes">6x</span>
|
||||
<span class="cline-any cline-yes">6x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">86x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">86x</span>
|
||||
<span class="cline-any cline-yes">83x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">83x</span>
|
||||
<span class="cline-any cline-yes">83x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">86x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">12x</span>
|
||||
<span class="cline-any cline-yes">12x</span>
|
||||
<span class="cline-any cline-yes">12x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">80x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
|
|
@ -639,7 +639,7 @@
|
|||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-yes">9x</span>
|
||||
<span class="cline-any cline-yes">9x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
<span class="cline-any cline-yes">12x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
|
|
@ -672,30 +672,30 @@
|
|||
<span class="cline-any cline-yes">19x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">61x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">61x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">61x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">61x</span>
|
||||
<span class="cline-any cline-yes">61x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">61x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">61x</span>
|
||||
<span class="cline-any cline-yes">61x</span>
|
||||
<span class="cline-any cline-yes">61x</span>
|
||||
<span class="cline-any cline-yes">61x</span>
|
||||
<span class="cline-any cline-yes">61x</span>
|
||||
<span class="cline-any cline-yes">61x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import type { SentryEvent, ErrorEvent, CountEvent } from '../types';
|
||||
import { EventBus } from './EventBus';
|
||||
|
|
@ -888,9 +888,9 @@ export class EventQueue {
|
|||
const expiryTime = 60000;
|
||||
|
||||
for (const [key, entry] of this.dedupeMap) {
|
||||
if (currentTime - entry.lastTime > expiryTime) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
||||
<span class="cstat-no" title="statement not covered" > this.dedupeMap.delete(key);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
if (currentTime - entry.lastTime > expiryTime) {
|
||||
this.dedupeMap.delete(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1021,7 +1021,7 @@ export class EventQueue {
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -157,20 +157,20 @@
|
|||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">26x</span>
|
||||
<span class="cline-any cline-yes">26x</span>
|
||||
<span class="cline-any cline-yes">58x</span>
|
||||
<span class="cline-any cline-yes">58x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">30x</span>
|
||||
<span class="cline-any cline-yes">32x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">29x</span>
|
||||
<span class="cline-any cline-yes">29x</span>
|
||||
<span class="cline-any cline-yes">29x</span>
|
||||
<span class="cline-any cline-yes">30x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">30x</span>
|
||||
<span class="cline-any cline-yes">31x</span>
|
||||
<span class="cline-any cline-yes">31x</span>
|
||||
<span class="cline-any cline-yes">31x</span>
|
||||
<span class="cline-any cline-yes">32x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">32x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
|
|
@ -225,17 +225,17 @@
|
|||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">6x</span>
|
||||
<span class="cline-any cline-yes">37x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">6x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">37x</span>
|
||||
<span class="cline-any cline-yes">37x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import type { LightPlugin, LightClient, SentryEvent } from '../types';
|
||||
|
||||
|
|
@ -331,7 +331,7 @@ export class PluginManager {
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -23,30 +23,30 @@
|
|||
<div class='clearfix'>
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">16.9% </span>
|
||||
<span class="strong">18.05% </span>
|
||||
<span class="quiet">Statements</span>
|
||||
<span class='fraction'>59/349</span>
|
||||
<span class='fraction'>63/349</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">100% </span>
|
||||
<span class="quiet">Branches</span>
|
||||
<span class='fraction'>0/0</span>
|
||||
<span class='fraction'>1/1</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">0% </span>
|
||||
<span class="strong">8.33% </span>
|
||||
<span class="quiet">Functions</span>
|
||||
<span class='fraction'>0/12</span>
|
||||
<span class='fraction'>1/12</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">16.9% </span>
|
||||
<span class="strong">18.05% </span>
|
||||
<span class="quiet">Lines</span>
|
||||
<span class='fraction'>59/349</span>
|
||||
<span class='fraction'>63/349</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -425,10 +425,10 @@
|
|||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">32x</span>
|
||||
<span class="cline-any cline-yes">32x</span>
|
||||
<span class="cline-any cline-yes">32x</span>
|
||||
<span class="cline-any cline-yes">32x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
|
|
@ -773,11 +773,11 @@ export class Reporter {
|
|||
private retryDelay: number;
|
||||
private useShortFields: boolean = true; // 是否使用短字段编码
|
||||
|
||||
<span class="fstat-no" title="function not covered" > constructor(dsn: DSNInfo, maxRetries: number, retryDelay: number) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > this.dsn = dsn;</span>
|
||||
<span class="cstat-no" title="statement not covered" > this.maxRetries = maxRetries;</span>
|
||||
<span class="cstat-no" title="statement not covered" > this.retryDelay = retryDelay;</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
constructor(dsn: DSNInfo, maxRetries: number, retryDelay: number) {
|
||||
this.dsn = dsn;
|
||||
this.maxRetries = maxRetries;
|
||||
this.retryDelay = retryDelay;
|
||||
}
|
||||
|
||||
<span class="fstat-no" title="function not covered" > async report(events: SentryEvent[]): Promise<void> {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logDebug('Reporter', 'report called', { eventCount: events.length });</span>
|
||||
|
|
@ -1117,7 +1117,7 @@ export class Reporter {
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -23,16 +23,16 @@
|
|||
<div class='clearfix'>
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">86.86% </span>
|
||||
<span class="strong">87.87% </span>
|
||||
<span class="quiet">Statements</span>
|
||||
<span class='fraction'>172/198</span>
|
||||
<span class='fraction'>174/198</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">80% </span>
|
||||
<span class="strong">89.74% </span>
|
||||
<span class="quiet">Branches</span>
|
||||
<span class='fraction'>28/35</span>
|
||||
<span class='fraction'>35/39</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -44,9 +44,9 @@
|
|||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">86.86% </span>
|
||||
<span class="strong">87.87% </span>
|
||||
<span class="quiet">Lines</span>
|
||||
<span class='fraction'>172/198</span>
|
||||
<span class='fraction'>174/198</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -273,22 +273,22 @@
|
|||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">29x</span>
|
||||
<span class="cline-any cline-yes">29x</span>
|
||||
<span class="cline-any cline-yes">29x</span>
|
||||
<span class="cline-any cline-yes">29x</span>
|
||||
<span class="cline-any cline-yes">61x</span>
|
||||
<span class="cline-any cline-yes">61x</span>
|
||||
<span class="cline-any cline-yes">61x</span>
|
||||
<span class="cline-any cline-yes">61x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">19x</span>
|
||||
<span class="cline-any cline-yes">19x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
|
|
@ -302,78 +302,78 @@
|
|||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-yes">19x</span>
|
||||
<span class="cline-any cline-yes">19x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">13x</span>
|
||||
<span class="cline-any cline-yes">13x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">22x</span>
|
||||
<span class="cline-any cline-yes">22x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">19x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">20x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">16x</span>
|
||||
<span class="cline-any cline-yes">16x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">9x</span>
|
||||
<span class="cline-any cline-yes">9x</span>
|
||||
<span class="cline-any cline-yes">9x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
|
|
@ -404,25 +404,15 @@
|
|||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">9x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
|
|
@ -433,10 +423,20 @@
|
|||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
|
|
@ -447,17 +447,17 @@
|
|||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">31x</span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-yes">64x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-yes">31x</span>
|
||||
<span class="cline-any cline-yes">31x</span>
|
||||
<span class="cline-any cline-yes">31x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">64x</span>
|
||||
<span class="cline-any cline-yes">64x</span>
|
||||
<span class="cline-any cline-yes">64x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import type { LightConfig, SpanContext, TransactionContext, Span, Transaction, LightClient, SamplingContext } from '../types';
|
||||
import { Span as SpanImpl, Transaction as TransactionImpl } from '../utils/tracing';
|
||||
|
|
@ -501,7 +501,7 @@ export class TracingManager {
|
|||
<span class="cstat-no" title="statement not covered" > return Math.random() < clampedRate;</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
|
||||
const rate = this.config.<span class="branch-0 cbranch-no" title="branch not covered" >tracesSampleRate ?? 0;</span>
|
||||
const rate = this.config.tracesSampleRate ?? 0;
|
||||
if (rate >= 1) return true;
|
||||
if (rate <= 0) return <span class="branch-0 cbranch-no" title="branch not covered" >false;</span>
|
||||
<span class="cstat-no" title="statement not covered" > return Math.random() < rate;</span>
|
||||
|
|
@ -610,9 +610,9 @@ export class TracingManager {
|
|||
this.spanStack.splice(idx, 1);
|
||||
}
|
||||
|
||||
if (this.spanStack.length === <span class="branch-0 cbranch-no" title="branch not covered" >0 && this.currentTransaction) <span class="branch-0 cbranch-no" title="branch not covered" >{</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > this.spanStack = [this.currentTransaction];</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
if (this.spanStack.length === 0 && this.currentTransaction) {
|
||||
this.spanStack = [this.currentTransaction];
|
||||
}
|
||||
|
||||
logDebug('TracingManager', 'Span finished', {
|
||||
op: span.op,
|
||||
|
|
@ -664,7 +664,7 @@ export class TracingManager {
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -23,30 +23,30 @@
|
|||
<div class='clearfix'>
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">60.64% </span>
|
||||
<span class="strong">69.23% </span>
|
||||
<span class="quiet">Statements</span>
|
||||
<span class='fraction'>974/1606</span>
|
||||
<span class='fraction'>1170/1690</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">85.78% </span>
|
||||
<span class="strong">80.43% </span>
|
||||
<span class="quiet">Branches</span>
|
||||
<span class='fraction'>169/197</span>
|
||||
<span class='fraction'>222/276</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">52% </span>
|
||||
<span class="strong">79% </span>
|
||||
<span class="quiet">Functions</span>
|
||||
<span class='fraction'>52/100</span>
|
||||
<span class='fraction'>79/100</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">60.64% </span>
|
||||
<span class="strong">69.23% </span>
|
||||
<span class="quiet">Lines</span>
|
||||
<span class='fraction'>974/1606</span>
|
||||
<span class='fraction'>1170/1690</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -79,18 +79,18 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody><tr>
|
||||
<td class="file low" data-value="Client.ts"><a href="Client.ts.html">Client.ts</a></td>
|
||||
<td data-value="24.72" class="pic low">
|
||||
<div class="chart"><div class="cover-fill" style="width: 24%"></div><div class="cover-empty" style="width: 76%"></div></div>
|
||||
<td class="file medium" data-value="Client.ts"><a href="Client.ts.html">Client.ts</a></td>
|
||||
<td data-value="62.05" class="pic medium">
|
||||
<div class="chart"><div class="cover-fill" style="width: 62%"></div><div class="cover-empty" style="width: 38%"></div></div>
|
||||
</td>
|
||||
<td data-value="24.72" class="pct low">24.72%</td>
|
||||
<td data-value="364" class="abs low">90/364</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">0/0</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="29" class="abs low">0/29</td>
|
||||
<td data-value="24.72" class="pct low">24.72%</td>
|
||||
<td data-value="364" class="abs low">90/364</td>
|
||||
<td data-value="62.05" class="pct medium">62.05%</td>
|
||||
<td data-value="448" class="abs medium">278/448</td>
|
||||
<td data-value="55.71" class="pct medium">55.71%</td>
|
||||
<td data-value="70" class="abs medium">39/70</td>
|
||||
<td data-value="89.65" class="pct high">89.65%</td>
|
||||
<td data-value="29" class="abs high">26/29</td>
|
||||
<td data-value="62.05" class="pct medium">62.05%</td>
|
||||
<td data-value="448" class="abs medium">278/448</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
|
@ -100,8 +100,8 @@
|
|||
</td>
|
||||
<td data-value="95.9" class="pct high">95.9%</td>
|
||||
<td data-value="244" class="abs high">234/244</td>
|
||||
<td data-value="81.81" class="pct high">81.81%</td>
|
||||
<td data-value="55" class="abs high">45/55</td>
|
||||
<td data-value="83.63" class="pct high">83.63%</td>
|
||||
<td data-value="55" class="abs high">46/55</td>
|
||||
<td data-value="92.85" class="pct high">92.85%</td>
|
||||
<td data-value="14" class="abs high">13/14</td>
|
||||
<td data-value="95.9" class="pct high">95.9%</td>
|
||||
|
|
@ -125,17 +125,17 @@
|
|||
|
||||
<tr>
|
||||
<td class="file high" data-value="EventQueue.ts"><a href="EventQueue.ts.html">EventQueue.ts</a></td>
|
||||
<td data-value="89.9" class="pic high">
|
||||
<div class="chart"><div class="cover-fill" style="width: 89%"></div><div class="cover-empty" style="width: 11%"></div></div>
|
||||
<td data-value="90.53" class="pic high">
|
||||
<div class="chart"><div class="cover-fill" style="width: 90%"></div><div class="cover-empty" style="width: 10%"></div></div>
|
||||
</td>
|
||||
<td data-value="89.9" class="pct high">89.9%</td>
|
||||
<td data-value="317" class="abs high">285/317</td>
|
||||
<td data-value="83.82" class="pct high">83.82%</td>
|
||||
<td data-value="68" class="abs high">57/68</td>
|
||||
<td data-value="90.53" class="pct high">90.53%</td>
|
||||
<td data-value="317" class="abs high">287/317</td>
|
||||
<td data-value="86.11" class="pct high">86.11%</td>
|
||||
<td data-value="72" class="abs high">62/72</td>
|
||||
<td data-value="81.25" class="pct high">81.25%</td>
|
||||
<td data-value="16" class="abs high">13/16</td>
|
||||
<td data-value="89.9" class="pct high">89.9%</td>
|
||||
<td data-value="317" class="abs high">285/317</td>
|
||||
<td data-value="90.53" class="pct high">90.53%</td>
|
||||
<td data-value="317" class="abs high">287/317</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
|
@ -155,32 +155,32 @@
|
|||
|
||||
<tr>
|
||||
<td class="file low" data-value="Reporter.ts"><a href="Reporter.ts.html">Reporter.ts</a></td>
|
||||
<td data-value="16.9" class="pic low">
|
||||
<div class="chart"><div class="cover-fill" style="width: 16%"></div><div class="cover-empty" style="width: 84%"></div></div>
|
||||
<td data-value="18.05" class="pic low">
|
||||
<div class="chart"><div class="cover-fill" style="width: 18%"></div><div class="cover-empty" style="width: 82%"></div></div>
|
||||
</td>
|
||||
<td data-value="16.9" class="pct low">16.9%</td>
|
||||
<td data-value="349" class="abs low">59/349</td>
|
||||
<td data-value="18.05" class="pct low">18.05%</td>
|
||||
<td data-value="349" class="abs low">63/349</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">0/0</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="12" class="abs low">0/12</td>
|
||||
<td data-value="16.9" class="pct low">16.9%</td>
|
||||
<td data-value="349" class="abs low">59/349</td>
|
||||
<td data-value="1" class="abs high">1/1</td>
|
||||
<td data-value="8.33" class="pct low">8.33%</td>
|
||||
<td data-value="12" class="abs low">1/12</td>
|
||||
<td data-value="18.05" class="pct low">18.05%</td>
|
||||
<td data-value="349" class="abs low">63/349</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file high" data-value="TracingManager.ts"><a href="TracingManager.ts.html">TracingManager.ts</a></td>
|
||||
<td data-value="86.86" class="pic high">
|
||||
<div class="chart"><div class="cover-fill" style="width: 86%"></div><div class="cover-empty" style="width: 14%"></div></div>
|
||||
<td data-value="87.87" class="pic high">
|
||||
<div class="chart"><div class="cover-fill" style="width: 87%"></div><div class="cover-empty" style="width: 13%"></div></div>
|
||||
</td>
|
||||
<td data-value="86.86" class="pct high">86.86%</td>
|
||||
<td data-value="198" class="abs high">172/198</td>
|
||||
<td data-value="80" class="pct high">80%</td>
|
||||
<td data-value="35" class="abs high">28/35</td>
|
||||
<td data-value="87.87" class="pct high">87.87%</td>
|
||||
<td data-value="198" class="abs high">174/198</td>
|
||||
<td data-value="89.74" class="pct high">89.74%</td>
|
||||
<td data-value="39" class="abs high">35/39</td>
|
||||
<td data-value="78.57" class="pct medium">78.57%</td>
|
||||
<td data-value="14" class="abs medium">11/14</td>
|
||||
<td data-value="86.86" class="pct high">86.86%</td>
|
||||
<td data-value="198" class="abs high">172/198</td>
|
||||
<td data-value="87.87" class="pct high">87.87%</td>
|
||||
<td data-value="198" class="abs high">174/198</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
|
|
@ -191,7 +191,7 @@
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@
|
|||
<div class='clearfix'>
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">50.39% </span>
|
||||
<span class="strong">37.57% </span>
|
||||
<span class="quiet">Statements</span>
|
||||
<span class='fraction'>127/252</span>
|
||||
<span class='fraction'>127/338</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -44,9 +44,9 @@
|
|||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">50.39% </span>
|
||||
<span class="strong">37.57% </span>
|
||||
<span class="quiet">Lines</span>
|
||||
<span class='fraction'>127/252</span>
|
||||
<span class='fraction'>127/338</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
</div>
|
||||
</template>
|
||||
</div>
|
||||
<div class='status-line medium'></div>
|
||||
<div class='status-line low'></div>
|
||||
<div class="pad1">
|
||||
<table class="coverage-summary">
|
||||
<thead>
|
||||
|
|
@ -79,18 +79,18 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody><tr>
|
||||
<td class="file medium" data-value="index.ts"><a href="index.ts.html">index.ts</a></td>
|
||||
<td data-value="50.39" class="pic medium">
|
||||
<div class="chart"><div class="cover-fill" style="width: 50%"></div><div class="cover-empty" style="width: 50%"></div></div>
|
||||
<td class="file low" data-value="index.ts"><a href="index.ts.html">index.ts</a></td>
|
||||
<td data-value="37.57" class="pic low">
|
||||
<div class="chart"><div class="cover-fill" style="width: 37%"></div><div class="cover-empty" style="width: 63%"></div></div>
|
||||
</td>
|
||||
<td data-value="50.39" class="pct medium">50.39%</td>
|
||||
<td data-value="252" class="abs medium">127/252</td>
|
||||
<td data-value="37.57" class="pct low">37.57%</td>
|
||||
<td data-value="338" class="abs low">127/338</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">0/0</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="21" class="abs low">0/21</td>
|
||||
<td data-value="50.39" class="pct medium">50.39%</td>
|
||||
<td data-value="252" class="abs medium">127/252</td>
|
||||
<td data-value="37.57" class="pct low">37.57%</td>
|
||||
<td data-value="338" class="abs low">127/338</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
|
|
@ -101,7 +101,7 @@
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@
|
|||
<div class='clearfix'>
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">50.39% </span>
|
||||
<span class="strong">37.57% </span>
|
||||
<span class="quiet">Statements</span>
|
||||
<span class='fraction'>127/252</span>
|
||||
<span class='fraction'>127/338</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -44,9 +44,9 @@
|
|||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">50.39% </span>
|
||||
<span class="strong">37.57% </span>
|
||||
<span class="quiet">Lines</span>
|
||||
<span class='fraction'>127/252</span>
|
||||
<span class='fraction'>127/338</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
</div>
|
||||
</template>
|
||||
</div>
|
||||
<div class='status-line medium'></div>
|
||||
<div class='status-line low'></div>
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
||||
<a name='L2'></a><a href='#L2'>2</a>
|
||||
|
|
@ -315,7 +315,93 @@
|
|||
<a name='L250'></a><a href='#L250'>250</a>
|
||||
<a name='L251'></a><a href='#L251'>251</a>
|
||||
<a name='L252'></a><a href='#L252'>252</a>
|
||||
<a name='L253'></a><a href='#L253'>253</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
||||
<a name='L253'></a><a href='#L253'>253</a>
|
||||
<a name='L254'></a><a href='#L254'>254</a>
|
||||
<a name='L255'></a><a href='#L255'>255</a>
|
||||
<a name='L256'></a><a href='#L256'>256</a>
|
||||
<a name='L257'></a><a href='#L257'>257</a>
|
||||
<a name='L258'></a><a href='#L258'>258</a>
|
||||
<a name='L259'></a><a href='#L259'>259</a>
|
||||
<a name='L260'></a><a href='#L260'>260</a>
|
||||
<a name='L261'></a><a href='#L261'>261</a>
|
||||
<a name='L262'></a><a href='#L262'>262</a>
|
||||
<a name='L263'></a><a href='#L263'>263</a>
|
||||
<a name='L264'></a><a href='#L264'>264</a>
|
||||
<a name='L265'></a><a href='#L265'>265</a>
|
||||
<a name='L266'></a><a href='#L266'>266</a>
|
||||
<a name='L267'></a><a href='#L267'>267</a>
|
||||
<a name='L268'></a><a href='#L268'>268</a>
|
||||
<a name='L269'></a><a href='#L269'>269</a>
|
||||
<a name='L270'></a><a href='#L270'>270</a>
|
||||
<a name='L271'></a><a href='#L271'>271</a>
|
||||
<a name='L272'></a><a href='#L272'>272</a>
|
||||
<a name='L273'></a><a href='#L273'>273</a>
|
||||
<a name='L274'></a><a href='#L274'>274</a>
|
||||
<a name='L275'></a><a href='#L275'>275</a>
|
||||
<a name='L276'></a><a href='#L276'>276</a>
|
||||
<a name='L277'></a><a href='#L277'>277</a>
|
||||
<a name='L278'></a><a href='#L278'>278</a>
|
||||
<a name='L279'></a><a href='#L279'>279</a>
|
||||
<a name='L280'></a><a href='#L280'>280</a>
|
||||
<a name='L281'></a><a href='#L281'>281</a>
|
||||
<a name='L282'></a><a href='#L282'>282</a>
|
||||
<a name='L283'></a><a href='#L283'>283</a>
|
||||
<a name='L284'></a><a href='#L284'>284</a>
|
||||
<a name='L285'></a><a href='#L285'>285</a>
|
||||
<a name='L286'></a><a href='#L286'>286</a>
|
||||
<a name='L287'></a><a href='#L287'>287</a>
|
||||
<a name='L288'></a><a href='#L288'>288</a>
|
||||
<a name='L289'></a><a href='#L289'>289</a>
|
||||
<a name='L290'></a><a href='#L290'>290</a>
|
||||
<a name='L291'></a><a href='#L291'>291</a>
|
||||
<a name='L292'></a><a href='#L292'>292</a>
|
||||
<a name='L293'></a><a href='#L293'>293</a>
|
||||
<a name='L294'></a><a href='#L294'>294</a>
|
||||
<a name='L295'></a><a href='#L295'>295</a>
|
||||
<a name='L296'></a><a href='#L296'>296</a>
|
||||
<a name='L297'></a><a href='#L297'>297</a>
|
||||
<a name='L298'></a><a href='#L298'>298</a>
|
||||
<a name='L299'></a><a href='#L299'>299</a>
|
||||
<a name='L300'></a><a href='#L300'>300</a>
|
||||
<a name='L301'></a><a href='#L301'>301</a>
|
||||
<a name='L302'></a><a href='#L302'>302</a>
|
||||
<a name='L303'></a><a href='#L303'>303</a>
|
||||
<a name='L304'></a><a href='#L304'>304</a>
|
||||
<a name='L305'></a><a href='#L305'>305</a>
|
||||
<a name='L306'></a><a href='#L306'>306</a>
|
||||
<a name='L307'></a><a href='#L307'>307</a>
|
||||
<a name='L308'></a><a href='#L308'>308</a>
|
||||
<a name='L309'></a><a href='#L309'>309</a>
|
||||
<a name='L310'></a><a href='#L310'>310</a>
|
||||
<a name='L311'></a><a href='#L311'>311</a>
|
||||
<a name='L312'></a><a href='#L312'>312</a>
|
||||
<a name='L313'></a><a href='#L313'>313</a>
|
||||
<a name='L314'></a><a href='#L314'>314</a>
|
||||
<a name='L315'></a><a href='#L315'>315</a>
|
||||
<a name='L316'></a><a href='#L316'>316</a>
|
||||
<a name='L317'></a><a href='#L317'>317</a>
|
||||
<a name='L318'></a><a href='#L318'>318</a>
|
||||
<a name='L319'></a><a href='#L319'>319</a>
|
||||
<a name='L320'></a><a href='#L320'>320</a>
|
||||
<a name='L321'></a><a href='#L321'>321</a>
|
||||
<a name='L322'></a><a href='#L322'>322</a>
|
||||
<a name='L323'></a><a href='#L323'>323</a>
|
||||
<a name='L324'></a><a href='#L324'>324</a>
|
||||
<a name='L325'></a><a href='#L325'>325</a>
|
||||
<a name='L326'></a><a href='#L326'>326</a>
|
||||
<a name='L327'></a><a href='#L327'>327</a>
|
||||
<a name='L328'></a><a href='#L328'>328</a>
|
||||
<a name='L329'></a><a href='#L329'>329</a>
|
||||
<a name='L330'></a><a href='#L330'>330</a>
|
||||
<a name='L331'></a><a href='#L331'>331</a>
|
||||
<a name='L332'></a><a href='#L332'>332</a>
|
||||
<a name='L333'></a><a href='#L333'>333</a>
|
||||
<a name='L334'></a><a href='#L334'>334</a>
|
||||
<a name='L335'></a><a href='#L335'>335</a>
|
||||
<a name='L336'></a><a href='#L336'>336</a>
|
||||
<a name='L337'></a><a href='#L337'>337</a>
|
||||
<a name='L338'></a><a href='#L338'>338</a>
|
||||
<a name='L339'></a><a href='#L339'>339</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
|
|
@ -382,6 +468,11 @@
|
|||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
|
|
@ -395,6 +486,69 @@
|
|||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
|
|
@ -417,7 +571,8 @@
|
|||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
|
|
@ -425,7 +580,7 @@
|
|||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
|
|
@ -433,7 +588,8 @@
|
|||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
|
|
@ -441,7 +597,7 @@
|
|||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
|
|
@ -449,7 +605,7 @@
|
|||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
|
|
@ -457,7 +613,7 @@
|
|||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
|
|
@ -465,7 +621,7 @@
|
|||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
|
|
@ -473,10 +629,26 @@
|
|||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
|
|
@ -579,60 +751,65 @@ import InteractionPlugin from './plugins/InteractionPlugin';
|
|||
import { Span as SpanClass, Transaction as TransactionClass, httpStatusToSpanStatus, dbStatusToSpanStatus, statusToSpanStatus } from './utils/tracing';
|
||||
import { serializeBaggage, parseBaggage, createBaggageFromTransaction } from './utils/baggage';
|
||||
import type { LightConfig, LightClient, SentryEvent, EventLevel, UserInfo, Breadcrumb, LightPlugin, ErrorEvent, PerformanceEvent, NetworkEvent, BehaviorEvent, DSNInfo, TransactionContext, SpanContext, Transaction, Span, SamplingContext, BaggageFields, SpanStatus } from './types';
|
||||
import { logDebug, setDebug } from './utils/logger';
|
||||
import { logDebug, logError, setDebug } from './utils/logger';
|
||||
import { setAnonymousId as setStoredAnonymousId, clearAnonymousId as clearStoredAnonymousId, getAnonymousId as getStoredAnonymousId } from './utils/identity';
|
||||
|
||||
let globalClient: LightClient | null = null;
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function init(config: LightConfig): LightClient {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > setDebug(config.debug === true);</span>
|
||||
<span class="cstat-no" title="statement not covered" > logDebug('Index', 'init called', { dsn: config.dsn, debug: config.debug });</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > setDebug(config.debug === true);</span>
|
||||
<span class="cstat-no" title="statement not covered" > logDebug('Index', 'init called', { dsn: config.dsn, debug: config.debug });</span>
|
||||
<span class="cstat-no" title="statement not covered" ></span>
|
||||
<span class="cstat-no" title="statement not covered" > const client = new Client(config);</span>
|
||||
<span class="cstat-no" title="statement not covered" > const client = new Client(config);</span>
|
||||
<span class="cstat-no" title="statement not covered" ></span>
|
||||
<span class="cstat-no" title="statement not covered" > const defaultPlugins: LightPlugin[] = [</span>
|
||||
<span class="cstat-no" title="statement not covered" > new OfflinePlugin(),</span>
|
||||
<span class="cstat-no" title="statement not covered" > new SamplingPlugin(),</span>
|
||||
<span class="cstat-no" title="statement not covered" > new ErrorPlugin(),</span>
|
||||
<span class="cstat-no" title="statement not covered" > ];</span>
|
||||
<span class="cstat-no" title="statement not covered" > const defaultPlugins: LightPlugin[] = [</span>
|
||||
<span class="cstat-no" title="statement not covered" > new OfflinePlugin(),</span>
|
||||
<span class="cstat-no" title="statement not covered" > new SamplingPlugin(),</span>
|
||||
<span class="cstat-no" title="statement not covered" > new ErrorPlugin(),</span>
|
||||
<span class="cstat-no" title="statement not covered" > ];</span>
|
||||
<span class="cstat-no" title="statement not covered" ></span>
|
||||
<span class="cstat-no" title="statement not covered" > const pluginNames = config.plugins?.filter(p => typeof p === 'string') as string[] || [];</span>
|
||||
<span class="cstat-no" title="statement not covered" > </span>
|
||||
<span class="cstat-no" title="statement not covered" > if (pluginNames.includes('performance') || pluginNames.includes('all')) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > defaultPlugins.push(new PerformancePlugin());</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (pluginNames.includes('network') || pluginNames.includes('all')) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > defaultPlugins.push(new NetworkPlugin());</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (pluginNames.includes('behavior') || pluginNames.includes('all')) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > defaultPlugins.push(new BehaviorPlugin());</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (pluginNames.includes('router') || pluginNames.includes('all')) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > defaultPlugins.push(new RouterPlugin());</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (pluginNames.includes('interaction') || pluginNames.includes('all')) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > defaultPlugins.push(new InteractionPlugin());</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > const pluginNames = config.plugins?.filter(p => typeof p === 'string') as string[] || [];</span>
|
||||
<span class="cstat-no" title="statement not covered" > </span>
|
||||
<span class="cstat-no" title="statement not covered" > if (pluginNames.includes('performance') || pluginNames.includes('all')) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > defaultPlugins.push(new PerformancePlugin());</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (pluginNames.includes('network') || pluginNames.includes('all')) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > defaultPlugins.push(new NetworkPlugin());</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (pluginNames.includes('behavior') || pluginNames.includes('all')) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > defaultPlugins.push(new BehaviorPlugin());</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (pluginNames.includes('router') || pluginNames.includes('all')) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > defaultPlugins.push(new RouterPlugin());</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (pluginNames.includes('interaction') || pluginNames.includes('all')) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > defaultPlugins.push(new InteractionPlugin());</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" ></span>
|
||||
<span class="cstat-no" title="statement not covered" > logDebug('Index', 'Registering plugins', { count: defaultPlugins.length, plugins: defaultPlugins.map(p => p.name) });</span>
|
||||
<span class="cstat-no" title="statement not covered" > logDebug('Index', 'Registering plugins', { count: defaultPlugins.length, plugins: defaultPlugins.map(p => p.name) });</span>
|
||||
<span class="cstat-no" title="statement not covered" ></span>
|
||||
<span class="cstat-no" title="statement not covered" > for (const plugin of defaultPlugins) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > client.use(plugin);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > for (const plugin of defaultPlugins) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > client.use(plugin);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" ></span>
|
||||
<span class="cstat-no" title="statement not covered" > if (config.plugins) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > for (const plugin of config.plugins) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (typeof plugin === 'object' && plugin !== null && 'name' in plugin && 'setup' in plugin) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > client.use(plugin as LightPlugin);</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (config.plugins) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > for (const plugin of config.plugins) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (typeof plugin === 'object' && plugin !== null && 'name' in plugin && 'setup' in plugin) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > client.use(plugin as LightPlugin);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" ></span>
|
||||
<span class="cstat-no" title="statement not covered" > client.init();</span>
|
||||
<span class="cstat-no" title="statement not covered" ></span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient = client;</span>
|
||||
<span class="cstat-no" title="statement not covered" > logDebug('Index', 'init completed, globalClient set');</span>
|
||||
<span class="cstat-no" title="statement not covered" > return client;</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'init failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > throw e;</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" ></span>
|
||||
<span class="cstat-no" title="statement not covered" > client.init();</span>
|
||||
<span class="cstat-no" title="statement not covered" ></span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient = client;</span>
|
||||
<span class="cstat-no" title="statement not covered" > logDebug('Index', 'init completed, globalClient set');</span>
|
||||
<span class="cstat-no" title="statement not covered" > return client;</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function getClient(): LightClient | null {</span></span>
|
||||
|
|
@ -640,94 +817,175 @@ let globalClient: LightClient | null = null;
|
|||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function captureException(error: Error | unknown): void {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > logDebug('Index', 'captureException called', { hasClient: !!globalClient });</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (!globalClient) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > console.warn('[LightSDK] SDK not initialized. Call LightSentry.init() first.');</span>
|
||||
<span class="cstat-no" title="statement not covered" > return;</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logDebug('Index', 'captureException called', { hasClient: !!globalClient });</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (!globalClient) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > console.warn('[LightSDK] SDK not initialized. Call LightSentry.init() first.');</span>
|
||||
<span class="cstat-no" title="statement not covered" > return;</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient.captureException(error);</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'captureException failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient.captureException(error);</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function captureMessage(message: string, level?: EventLevel): void {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > logDebug('Index', 'captureMessage called', { hasClient: !!globalClient });</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (!globalClient) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > console.warn('[LightSDK] SDK not initialized. Call LightSentry.init() first.');</span>
|
||||
<span class="cstat-no" title="statement not covered" > return;</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logDebug('Index', 'captureMessage called', { hasClient: !!globalClient });</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (!globalClient) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > console.warn('[LightSDK] SDK not initialized. Call LightSentry.init() first.');</span>
|
||||
<span class="cstat-no" title="statement not covered" > return;</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient.captureMessage(message, level);</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'captureMessage failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient.captureMessage(message, level);</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function captureEvent(event: Partial<SentryEvent> & { type: string }): void {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > logDebug('Index', 'captureEvent called', { hasClient: !!globalClient });</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (!globalClient) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > console.warn('[LightSDK] SDK not initialized. Call LightSentry.init() first.');</span>
|
||||
<span class="cstat-no" title="statement not covered" > return;</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logDebug('Index', 'captureEvent called', { hasClient: !!globalClient });</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (!globalClient) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > console.warn('[LightSDK] SDK not initialized. Call LightSentry.init() first.');</span>
|
||||
<span class="cstat-no" title="statement not covered" > return;</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient.captureEvent(event);</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'captureEvent failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient.captureEvent(event);</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function setUser(user: UserInfo | null): void {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient?.setUser(user);</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient?.setUser(user);</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'setUser failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function setAnonymousId(id: string): void {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > setStoredAnonymousId(id);</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > setStoredAnonymousId(id);</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'setAnonymousId failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function clearAnonymousId(): void {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > clearStoredAnonymousId();</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > clearStoredAnonymousId();</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'clearAnonymousId failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function getAnonymousId(): string | null {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > return getStoredAnonymousId();</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return getStoredAnonymousId();</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'getAnonymousId failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > return null;</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function startTransaction(context: TransactionContext): Transaction | null {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > return globalClient?.startTransaction(context) || null;</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return globalClient?.startTransaction(context) || null;</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'startTransaction failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > return null;</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function getCurrentTransaction(): Transaction | null {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > return globalClient?.getCurrentTransaction() || null;</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return globalClient?.getCurrentTransaction() || null;</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'getCurrentTransaction failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > return null;</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function getCurrentSpan(): Span | null {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > return globalClient?.getCurrentSpan() || null;</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return globalClient?.getCurrentSpan() || null;</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'getCurrentSpan failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > return null;</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function setSpan(span: Span | null): void {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient?.setSpan(span);</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient?.setSpan(span);</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'setSpan failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function startSpan(context: SpanContext): Span | null {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > return globalClient?.startSpan(context) || null;</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return globalClient?.startSpan(context) || null;</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'startSpan failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > return null;</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function setTag(key: string, value: string): void {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient?.setTag(key, value);</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient?.setTag(key, value);</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'setTag failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function setTags(tags: Record<string, string>): void {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient?.setTags(tags);</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient?.setTags(tags);</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'setTags failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function setExtra(key: string, value: unknown): void {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient?.setExtra(key, value);</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient?.setExtra(key, value);</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'setExtra failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function addBreadcrumb(breadcrumb: Omit<Breadcrumb, 'timestamp'>): void {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient?.addBreadcrumb(breadcrumb);</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient?.addBreadcrumb(breadcrumb);</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'addBreadcrumb failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >async function flush(): Promise<void> {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > await globalClient?.flush();</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > await globalClient?.flush();</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'flush failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function disable(): void {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient?.disable();</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient?.disable();</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'disable failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function enable(): void {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient?.enable();</span>
|
||||
<span class="cstat-no" title="statement not covered" > try {</span>
|
||||
<span class="cstat-no" title="statement not covered" > globalClient?.enable();</span>
|
||||
<span class="cstat-no" title="statement not covered" > } catch (e) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > logError('Index', 'enable failed', e);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
<span class="cstat-no" title="statement not covered" >}</span>
|
||||
|
||||
export {
|
||||
|
|
@ -826,7 +1084,7 @@ export default {
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -1075,7 +1075,7 @@ export default BehaviorPlugin;
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -967,7 +967,7 @@ export default ErrorPlugin;
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -691,7 +691,7 @@ export default InteractionPlugin;
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -1222,7 +1222,7 @@ export default NetworkPlugin;
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -982,7 +982,7 @@ export default OfflinePlugin;
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -1660,7 +1660,7 @@ export default PerformancePlugin;
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -613,7 +613,7 @@ export default RouterPlugin;
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -352,7 +352,7 @@ export default SamplingPlugin;
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -206,7 +206,7 @@
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -367,7 +367,7 @@ export function createBaggageFromTransaction(
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -95,24 +95,24 @@
|
|||
<a name='L30'></a><a href='#L30'>30</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">37x</span>
|
||||
<span class="cline-any cline-yes">37x</span>
|
||||
<span class="cline-any cline-yes">37x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">35x</span>
|
||||
<span class="cline-any cline-yes">35x</span>
|
||||
<span class="cline-any cline-yes">35x</span>
|
||||
<span class="cline-any cline-yes">35x</span>
|
||||
<span class="cline-any cline-yes">35x</span>
|
||||
<span class="cline-any cline-yes">35x</span>
|
||||
<span class="cline-any cline-yes">35x</span>
|
||||
<span class="cline-any cline-yes">35x</span>
|
||||
<span class="cline-any cline-yes">35x</span>
|
||||
<span class="cline-any cline-yes">37x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">37x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
|
|
@ -157,7 +157,7 @@ export <span class="fstat-no" title="function not covered" >function getStoreUrl
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -949,7 +949,7 @@ export function getContextId(): string {
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -334,7 +334,7 @@ export function decodeFields(obj: Record<string, unknown>): Record<stri
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ export function computeFingerprint(type: string, message: string, frames: { file
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -122,13 +122,13 @@
|
|||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">293x</span>
|
||||
<span class="cline-any cline-yes">293x</span>
|
||||
<span class="cline-any cline-yes">308x</span>
|
||||
<span class="cline-any cline-yes">308x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">190x</span>
|
||||
<span class="cline-any cline-yes">190x</span>
|
||||
<span class="cline-any cline-yes">190x</span>
|
||||
<span class="cline-any cline-yes">192x</span>
|
||||
<span class="cline-any cline-yes">192x</span>
|
||||
<span class="cline-any cline-yes">192x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
|
|
@ -159,7 +159,7 @@
|
|||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">15x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">13x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
|
|
@ -226,7 +226,7 @@ export function matchPatterns(value: string, patterns: (string | RegExp)[]): boo
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -167,17 +167,17 @@
|
|||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">6x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">6x</span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">6x</span>
|
||||
<span class="cline-any cline-yes">6x</span>
|
||||
<span class="cline-any cline-yes">6x</span>
|
||||
<span class="cline-any cline-yes">6x</span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
|
|
@ -280,7 +280,7 @@ export function isAnonymousTrackingEnabled(config: { trackAnonymousUsers?: boole
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -23,16 +23,16 @@
|
|||
<div class='clearfix'>
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">97.36% </span>
|
||||
<span class="strong">97.71% </span>
|
||||
<span class="quiet">Statements</span>
|
||||
<span class='fraction'>1108/1138</span>
|
||||
<span class='fraction'>1111/1137</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">87.87% </span>
|
||||
<span class="strong">88.91% </span>
|
||||
<span class="quiet">Branches</span>
|
||||
<span class='fraction'>319/363</span>
|
||||
<span class='fraction'>321/361</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -44,9 +44,9 @@
|
|||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">97.36% </span>
|
||||
<span class="strong">97.71% </span>
|
||||
<span class="quiet">Lines</span>
|
||||
<span class='fraction'>1108/1138</span>
|
||||
<span class='fraction'>1111/1137</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -189,13 +189,13 @@
|
|||
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
|
||||
</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="31" class="abs high">31/31</td>
|
||||
<td data-value="30" class="abs high">30/30</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="13" class="abs high">13/13</td>
|
||||
<td data-value="11" class="abs high">11/11</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="4" class="abs high">4/4</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="31" class="abs high">31/31</td>
|
||||
<td data-value="30" class="abs high">30/30</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
|
@ -215,17 +215,17 @@
|
|||
|
||||
<tr>
|
||||
<td class="file high" data-value="tracing.ts"><a href="tracing.ts.html">tracing.ts</a></td>
|
||||
<td data-value="93.82" class="pic high">
|
||||
<div class="chart"><div class="cover-fill" style="width: 93%"></div><div class="cover-empty" style="width: 7%"></div></div>
|
||||
<td data-value="94.94" class="pic high">
|
||||
<div class="chart"><div class="cover-fill" style="width: 94%"></div><div class="cover-empty" style="width: 6%"></div></div>
|
||||
</td>
|
||||
<td data-value="93.82" class="pct high">93.82%</td>
|
||||
<td data-value="356" class="abs high">334/356</td>
|
||||
<td data-value="83.08" class="pct high">83.08%</td>
|
||||
<td data-value="136" class="abs high">113/136</td>
|
||||
<td data-value="94.94" class="pct high">94.94%</td>
|
||||
<td data-value="356" class="abs high">338/356</td>
|
||||
<td data-value="86.02" class="pct high">86.02%</td>
|
||||
<td data-value="136" class="abs high">117/136</td>
|
||||
<td data-value="96.15" class="pct high">96.15%</td>
|
||||
<td data-value="26" class="abs high">25/26</td>
|
||||
<td data-value="93.82" class="pct high">93.82%</td>
|
||||
<td data-value="356" class="abs high">334/356</td>
|
||||
<td data-value="94.94" class="pct high">94.94%</td>
|
||||
<td data-value="356" class="abs high">338/356</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
|
|
@ -236,7 +236,7 @@
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -25,14 +25,14 @@
|
|||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">100% </span>
|
||||
<span class="quiet">Statements</span>
|
||||
<span class='fraction'>31/31</span>
|
||||
<span class='fraction'>30/30</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">100% </span>
|
||||
<span class="quiet">Branches</span>
|
||||
<span class='fraction'>13/13</span>
|
||||
<span class='fraction'>11/11</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -46,7 +46,7 @@
|
|||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">100% </span>
|
||||
<span class="quiet">Lines</span>
|
||||
<span class='fraction'>31/31</span>
|
||||
<span class='fraction'>30/30</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -93,19 +93,18 @@
|
|||
<a name='L28'></a><a href='#L28'>28</a>
|
||||
<a name='L29'></a><a href='#L29'>29</a>
|
||||
<a name='L30'></a><a href='#L30'>30</a>
|
||||
<a name='L31'></a><a href='#L31'>31</a>
|
||||
<a name='L32'></a><a href='#L32'>32</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
||||
<a name='L31'></a><a href='#L31'>31</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">42x</span>
|
||||
<span class="cline-any cline-yes">42x</span>
|
||||
<span class="cline-any cline-yes">69x</span>
|
||||
<span class="cline-any cline-yes">69x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">6x</span>
|
||||
<span class="cline-any cline-yes">6x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">289x</span>
|
||||
<span class="cline-any cline-yes">377x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">10x</span>
|
||||
|
|
@ -113,17 +112,16 @@
|
|||
<span class="cline-any cline-yes">10x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">289x</span>
|
||||
<span class="cline-any cline-yes">377x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">10x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">10x</span>
|
||||
<span class="cline-any cline-yes">10x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
<span class="cline-any cline-yes">10x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">5x</span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-yes">10x</span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">let debugEnabled = false;
|
||||
|
||||
|
|
@ -147,13 +145,12 @@ export function logDebug(tag: string, message: string, data?: unknown): void {
|
|||
}
|
||||
|
||||
export function logError(tag: string, message: string, error?: unknown): void {
|
||||
if (!debugEnabled) return;
|
||||
const timestamp = new Date().toISOString();
|
||||
const prefix = `[LightSDK][${tag}][ERROR]`;
|
||||
if (error !== undefined) {
|
||||
console.error(`${prefix} ${timestamp} ${message}`, error);
|
||||
console.warn(`${prefix} ${timestamp} ${message}`, error);
|
||||
} else {
|
||||
console.error(`${prefix} ${timestamp} ${message}`);
|
||||
console.warn(`${prefix} ${timestamp} ${message}`);
|
||||
}
|
||||
}
|
||||
</pre></td></tr></table></pre>
|
||||
|
|
@ -163,7 +160,7 @@ export function logError(tag: string, message: string, error?: unknown): void {
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -370,7 +370,7 @@ export function parseStackTrace(stack?: string, options: ParseStackOptions = {})
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -23,16 +23,16 @@
|
|||
<div class='clearfix'>
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">93.82% </span>
|
||||
<span class="strong">94.94% </span>
|
||||
<span class="quiet">Statements</span>
|
||||
<span class='fraction'>334/356</span>
|
||||
<span class='fraction'>338/356</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">83.08% </span>
|
||||
<span class="strong">86.02% </span>
|
||||
<span class="quiet">Branches</span>
|
||||
<span class='fraction'>113/136</span>
|
||||
<span class='fraction'>117/136</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -44,9 +44,9 @@
|
|||
|
||||
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">93.82% </span>
|
||||
<span class="strong">94.94% </span>
|
||||
<span class="quiet">Lines</span>
|
||||
<span class='fraction'>334/356</span>
|
||||
<span class='fraction'>338/356</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -423,13 +423,13 @@
|
|||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">81x</span>
|
||||
<span class="cline-any cline-yes">81x</span>
|
||||
<span class="cline-any cline-yes">81x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">82x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">98x</span>
|
||||
<span class="cline-any cline-yes">98x</span>
|
||||
<span class="cline-any cline-yes">98x</span>
|
||||
<span class="cline-any cline-yes">99x</span>
|
||||
<span class="cline-any cline-yes">99x</span>
|
||||
<span class="cline-any cline-yes">99x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
|
|
@ -520,18 +520,18 @@
|
|||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">99x</span>
|
||||
<span class="cline-any cline-yes">99x</span>
|
||||
<span class="cline-any cline-yes">99x</span>
|
||||
<span class="cline-any cline-yes">99x</span>
|
||||
<span class="cline-any cline-yes">99x</span>
|
||||
<span class="cline-any cline-yes">99x</span>
|
||||
<span class="cline-any cline-yes">99x</span>
|
||||
<span class="cline-any cline-yes">99x</span>
|
||||
<span class="cline-any cline-yes">99x</span>
|
||||
<span class="cline-any cline-yes">99x</span>
|
||||
<span class="cline-any cline-yes">99x</span>
|
||||
<span class="cline-any cline-yes">99x</span>
|
||||
<span class="cline-any cline-yes">100x</span>
|
||||
<span class="cline-any cline-yes">100x</span>
|
||||
<span class="cline-any cline-yes">100x</span>
|
||||
<span class="cline-any cline-yes">100x</span>
|
||||
<span class="cline-any cline-yes">100x</span>
|
||||
<span class="cline-any cline-yes">100x</span>
|
||||
<span class="cline-any cline-yes">100x</span>
|
||||
<span class="cline-any cline-yes">100x</span>
|
||||
<span class="cline-any cline-yes">100x</span>
|
||||
<span class="cline-any cline-yes">100x</span>
|
||||
<span class="cline-any cline-yes">100x</span>
|
||||
<span class="cline-any cline-yes">100x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">11x</span>
|
||||
|
|
@ -544,9 +544,9 @@
|
|||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">28x</span>
|
||||
<span class="cline-any cline-yes">29x</span>
|
||||
<span class="cline-any cline-yes">29x</span>
|
||||
<span class="cline-any cline-yes">29x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
|
|
@ -585,17 +585,17 @@
|
|||
<span class="cline-any cline-yes">16x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">23x</span>
|
||||
<span class="cline-any cline-yes">22x</span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-yes">22x</span>
|
||||
<span class="cline-any cline-yes">22x</span>
|
||||
<span class="cline-any cline-yes">22x</span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-yes">22x</span>
|
||||
<span class="cline-any cline-yes">23x</span>
|
||||
<span class="cline-any cline-yes">23x</span>
|
||||
<span class="cline-any cline-yes">23x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">23x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">3x</span>
|
||||
|
|
@ -634,18 +634,18 @@
|
|||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">42x</span>
|
||||
<span class="cline-any cline-yes">42x</span>
|
||||
<span class="cline-any cline-yes">42x</span>
|
||||
<span class="cline-any cline-yes">42x</span>
|
||||
<span class="cline-any cline-yes">42x</span>
|
||||
<span class="cline-any cline-yes">42x</span>
|
||||
<span class="cline-any cline-yes">42x</span>
|
||||
<span class="cline-any cline-yes">42x</span>
|
||||
<span class="cline-any cline-yes">42x</span>
|
||||
<span class="cline-any cline-yes">43x</span>
|
||||
<span class="cline-any cline-yes">43x</span>
|
||||
<span class="cline-any cline-yes">43x</span>
|
||||
<span class="cline-any cline-yes">43x</span>
|
||||
<span class="cline-any cline-yes">43x</span>
|
||||
<span class="cline-any cline-yes">43x</span>
|
||||
<span class="cline-any cline-yes">43x</span>
|
||||
<span class="cline-any cline-yes">43x</span>
|
||||
<span class="cline-any cline-yes">43x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">42x</span>
|
||||
<span class="cline-any cline-yes">43x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">13x</span>
|
||||
|
|
@ -701,21 +701,21 @@
|
|||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">13x</span>
|
||||
<span class="cline-any cline-yes">13x</span>
|
||||
<span class="cline-any cline-yes">13x</span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-yes">17x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">14x</span>
|
||||
|
|
@ -947,9 +947,9 @@ export class Span implements SpanInterface {
|
|||
|
||||
if (this._client) {
|
||||
const clientInternal = this._client as unknown as { tracingManager?: { onSpanFinished: (span: Span) => void } };
|
||||
if (clientInternal.<span class="branch-0 cbranch-no" title="branch not covered" >tracingManager?.onSpanFinished) <span class="branch-0 cbranch-no" title="branch not covered" >{</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > clientInternal.tracingManager.onSpanFinished(this);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
if (clientInternal.tracingManager?.onSpanFinished) {
|
||||
clientInternal.tracingManager.onSpanFinished(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1067,9 +1067,9 @@ export class Transaction extends Span implements TransactionInterface {
|
|||
|
||||
if (this._client) {
|
||||
const clientInternal = this._client as unknown as { tracingManager?: { onTransactionFinished: (tx: Transaction) => void } };
|
||||
if (clientInternal.<span class="branch-0 cbranch-no" title="branch not covered" >tracingManager?.onTransactionFinished) <span class="branch-0 cbranch-no" title="branch not covered" >{</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > clientInternal.tracingManager.onTransactionFinished(this);</span>
|
||||
<span class="cstat-no" title="statement not covered" > }</span>
|
||||
if (clientInternal.tracingManager?.onTransactionFinished) {
|
||||
clientInternal.tracingManager.onTransactionFinished(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1138,7 +1138,7 @@ export { generateTraceId, generateSpanId };
|
|||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage generated by
|
||||
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
||||
at 2026-06-25T14:49:54.914Z
|
||||
at 2026-06-25T15:09:05.618Z
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -3,7 +3,7 @@ import { parseDSN } from '../utils/dsn';
|
|||
import { now } from '../utils/helper';
|
||||
import { computeFingerprint } from '../utils/hash';
|
||||
import { parseStackTrace } from '../utils/stacktrace';
|
||||
import { logDebug, setDebug } from '../utils/logger';
|
||||
import { logDebug, logError, setDebug } from '../utils/logger';
|
||||
import { setAnonymousId as setStoredAnonymousId } from '../utils/identity';
|
||||
import { ConfigManager } from './ConfigManager';
|
||||
import { EventBus } from './EventBus';
|
||||
|
|
@ -63,9 +63,13 @@ class Client implements LightClient {
|
|||
}
|
||||
|
||||
init(): void {
|
||||
if (!this.enabled) return;
|
||||
this.queue.start();
|
||||
this.emit('ready');
|
||||
try {
|
||||
if (!this.enabled) return;
|
||||
this.queue.start();
|
||||
this.emit('ready');
|
||||
} catch (e) {
|
||||
logError('Client', 'init failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
private async flushEvents(events: SentryEvent[]): Promise<void> {
|
||||
|
|
@ -164,56 +168,68 @@ class Client implements LightClient {
|
|||
}
|
||||
|
||||
captureException(error: Error | unknown): void {
|
||||
logDebug('Client', 'captureException called', { error: error instanceof Error ? error.message : String(error) });
|
||||
try {
|
||||
logDebug('Client', 'captureException called', { error: error instanceof Error ? error.message : String(error) });
|
||||
|
||||
if (!this.enabled) {
|
||||
logDebug('Client', 'captureException skipped: SDK disabled');
|
||||
return;
|
||||
if (!this.enabled) {
|
||||
logDebug('Client', 'captureException skipped: SDK disabled');
|
||||
return;
|
||||
}
|
||||
|
||||
const errorEvent = this.buildErrorEvent(error);
|
||||
logDebug('Client', 'Error event built', { type: errorEvent.type, message: errorEvent.message, fingerprint: (errorEvent as ErrorEvent).fingerprint });
|
||||
|
||||
if (this.configManager.isIgnoredError(errorEvent.message)) {
|
||||
logDebug('Client', 'captureException skipped: error ignored by ignoreErrors');
|
||||
return;
|
||||
}
|
||||
|
||||
this.attachTraceContext(errorEvent);
|
||||
errorEvent.breadcrumbs = [...this.breadcrumbs];
|
||||
logDebug('Client', 'Enqueue error event', { breadcrumbs: this.breadcrumbs.length });
|
||||
this.queue.enqueue(errorEvent);
|
||||
} catch (e) {
|
||||
logError('Client', 'captureException failed', e);
|
||||
}
|
||||
|
||||
const errorEvent = this.buildErrorEvent(error);
|
||||
logDebug('Client', 'Error event built', { type: errorEvent.type, message: errorEvent.message, fingerprint: (errorEvent as ErrorEvent).fingerprint });
|
||||
|
||||
if (this.configManager.isIgnoredError(errorEvent.message)) {
|
||||
logDebug('Client', 'captureException skipped: error ignored by ignoreErrors');
|
||||
return;
|
||||
}
|
||||
|
||||
this.attachTraceContext(errorEvent);
|
||||
errorEvent.breadcrumbs = [...this.breadcrumbs];
|
||||
logDebug('Client', 'Enqueue error event', { breadcrumbs: this.breadcrumbs.length });
|
||||
this.queue.enqueue(errorEvent);
|
||||
}
|
||||
|
||||
captureMessage(message: string, level: EventLevel = 'info'): void {
|
||||
if (!this.enabled) return;
|
||||
try {
|
||||
if (!this.enabled) return;
|
||||
|
||||
const event: ErrorEvent = {
|
||||
type: 'error',
|
||||
level,
|
||||
message,
|
||||
timestamp: now(),
|
||||
breadcrumbs: [...this.breadcrumbs],
|
||||
};
|
||||
const event: ErrorEvent = {
|
||||
type: 'error',
|
||||
level,
|
||||
message,
|
||||
timestamp: now(),
|
||||
breadcrumbs: [...this.breadcrumbs],
|
||||
};
|
||||
|
||||
if (this.configManager.isIgnoredError(message)) return;
|
||||
if (this.configManager.isIgnoredError(message)) return;
|
||||
|
||||
this.attachTraceContext(event);
|
||||
this.queue.enqueue(event);
|
||||
this.attachTraceContext(event);
|
||||
this.queue.enqueue(event);
|
||||
} catch (e) {
|
||||
logError('Client', 'captureMessage failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
captureEvent(event: Partial<SentryEvent> & { type: string }): void {
|
||||
if (!this.enabled) return;
|
||||
try {
|
||||
if (!this.enabled) return;
|
||||
|
||||
const fullEvent = {
|
||||
timestamp: now(),
|
||||
level: 'info' as EventLevel,
|
||||
breadcrumbs: [...this.breadcrumbs],
|
||||
...event,
|
||||
} as SentryEvent;
|
||||
const fullEvent = {
|
||||
timestamp: now(),
|
||||
level: 'info' as EventLevel,
|
||||
breadcrumbs: [...this.breadcrumbs],
|
||||
...event,
|
||||
} as SentryEvent;
|
||||
|
||||
this.attachTraceContext(fullEvent);
|
||||
this.queue.enqueue(fullEvent);
|
||||
this.attachTraceContext(fullEvent);
|
||||
this.queue.enqueue(fullEvent);
|
||||
} catch (e) {
|
||||
logError('Client', 'captureEvent failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
private attachTraceContext(event: SentryEvent): void {
|
||||
|
|
@ -273,91 +289,159 @@ class Client implements LightClient {
|
|||
}
|
||||
|
||||
setUser(user: UserInfo | null): void {
|
||||
this.configManager.setUser(user);
|
||||
this.tracingManager.updateConfig(this.configManager.getAll());
|
||||
try {
|
||||
this.configManager.setUser(user);
|
||||
this.tracingManager.updateConfig(this.configManager.getAll());
|
||||
} catch (e) {
|
||||
logError('Client', 'setUser failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
setAnonymousId(id: string): void {
|
||||
setStoredAnonymousId(id);
|
||||
try {
|
||||
setStoredAnonymousId(id);
|
||||
} catch (e) {
|
||||
logError('Client', 'setAnonymousId failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
startTransaction(context: TransactionContext): Transaction | null {
|
||||
if (!this.enabled) return null;
|
||||
try {
|
||||
if (!this.enabled) return null;
|
||||
|
||||
const transaction = this.tracingManager.startTransaction(context);
|
||||
if (transaction && transaction.sampled) {
|
||||
logDebug('Client', 'Transaction started and sampled', {
|
||||
name: transaction.name,
|
||||
traceId: transaction.traceId,
|
||||
});
|
||||
const transaction = this.tracingManager.startTransaction(context);
|
||||
if (transaction && transaction.sampled) {
|
||||
logDebug('Client', 'Transaction started and sampled', {
|
||||
name: transaction.name,
|
||||
traceId: transaction.traceId,
|
||||
});
|
||||
}
|
||||
|
||||
return transaction;
|
||||
} catch (e) {
|
||||
logError('Client', 'startTransaction failed', e);
|
||||
return null;
|
||||
}
|
||||
|
||||
return transaction;
|
||||
}
|
||||
|
||||
getCurrentTransaction(): Transaction | null {
|
||||
return this.tracingManager.getCurrentTransaction();
|
||||
try {
|
||||
return this.tracingManager.getCurrentTransaction();
|
||||
} catch (e) {
|
||||
logError('Client', 'getCurrentTransaction failed', e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
getCurrentSpan(): Span | null {
|
||||
return this.tracingManager.getCurrentSpan();
|
||||
try {
|
||||
return this.tracingManager.getCurrentSpan();
|
||||
} catch (e) {
|
||||
logError('Client', 'getCurrentSpan failed', e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
setSpan(span: Span | null): void {
|
||||
this.tracingManager.setCurrentSpan(span);
|
||||
try {
|
||||
this.tracingManager.setCurrentSpan(span);
|
||||
} catch (e) {
|
||||
logError('Client', 'setSpan failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
startSpan(context: SpanContext): Span | null {
|
||||
if (!this.enabled) return null;
|
||||
return this.tracingManager.startSpan(context);
|
||||
try {
|
||||
if (!this.enabled) return null;
|
||||
return this.tracingManager.startSpan(context);
|
||||
} catch (e) {
|
||||
logError('Client', 'startSpan failed', e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
setTag(key: string, value: string): void {
|
||||
this.configManager.setTag(key, value);
|
||||
try {
|
||||
this.configManager.setTag(key, value);
|
||||
} catch (e) {
|
||||
logError('Client', 'setTag failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
setTags(tags: Record<string, string>): void {
|
||||
this.configManager.setTags(tags);
|
||||
try {
|
||||
this.configManager.setTags(tags);
|
||||
} catch (e) {
|
||||
logError('Client', 'setTags failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
setExtra(key: string, value: unknown): void {
|
||||
this.configManager.setExtra(key, value);
|
||||
try {
|
||||
this.configManager.setExtra(key, value);
|
||||
} catch (e) {
|
||||
logError('Client', 'setExtra failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
addBreadcrumb(breadcrumb: Omit<Breadcrumb, 'timestamp'>): void {
|
||||
const fullBreadcrumb: Breadcrumb = {
|
||||
...breadcrumb,
|
||||
timestamp: now(),
|
||||
};
|
||||
try {
|
||||
const fullBreadcrumb: Breadcrumb = {
|
||||
...breadcrumb,
|
||||
timestamp: now(),
|
||||
};
|
||||
|
||||
this.breadcrumbs.push(fullBreadcrumb);
|
||||
if (this.breadcrumbs.length > this.maxBreadcrumbs) {
|
||||
this.breadcrumbs.shift();
|
||||
this.breadcrumbs.push(fullBreadcrumb);
|
||||
if (this.breadcrumbs.length > this.maxBreadcrumbs) {
|
||||
this.breadcrumbs.shift();
|
||||
}
|
||||
} catch (e) {
|
||||
logError('Client', 'addBreadcrumb failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
async flush(): Promise<void> {
|
||||
await this.queue.flush();
|
||||
try {
|
||||
await this.queue.flush();
|
||||
} catch (e) {
|
||||
logError('Client', 'flush failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
disable(): void {
|
||||
this.enabled = false;
|
||||
try {
|
||||
this.enabled = false;
|
||||
} catch (e) {
|
||||
logError('Client', 'disable failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
enable(): void {
|
||||
this.enabled = true;
|
||||
try {
|
||||
this.enabled = true;
|
||||
} catch (e) {
|
||||
logError('Client', 'enable failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
use(plugin: LightPlugin): void {
|
||||
this.pluginManager.add(plugin);
|
||||
try {
|
||||
this.pluginManager.add(plugin);
|
||||
} catch (e) {
|
||||
logError('Client', 'use plugin failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
destroy(): void {
|
||||
this.pluginManager.destroy();
|
||||
this.tracingManager.destroy();
|
||||
this.queue.destroy();
|
||||
this.eventBus.destroy();
|
||||
this.breadcrumbs = [];
|
||||
try {
|
||||
this.pluginManager.destroy();
|
||||
this.tracingManager.destroy();
|
||||
this.queue.destroy();
|
||||
this.eventBus.destroy();
|
||||
this.breadcrumbs = [];
|
||||
} catch (e) {
|
||||
logError('Client', 'destroy failed', e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
228
src/index.ts
228
src/index.ts
|
|
@ -10,60 +10,65 @@ import InteractionPlugin from './plugins/InteractionPlugin';
|
|||
import { Span as SpanClass, Transaction as TransactionClass, httpStatusToSpanStatus, dbStatusToSpanStatus, statusToSpanStatus } from './utils/tracing';
|
||||
import { serializeBaggage, parseBaggage, createBaggageFromTransaction } from './utils/baggage';
|
||||
import type { LightConfig, LightClient, SentryEvent, EventLevel, UserInfo, Breadcrumb, LightPlugin, ErrorEvent, PerformanceEvent, NetworkEvent, BehaviorEvent, DSNInfo, TransactionContext, SpanContext, Transaction, Span, SamplingContext, BaggageFields, SpanStatus } from './types';
|
||||
import { logDebug, setDebug } from './utils/logger';
|
||||
import { logDebug, logError, setDebug } from './utils/logger';
|
||||
import { setAnonymousId as setStoredAnonymousId, clearAnonymousId as clearStoredAnonymousId, getAnonymousId as getStoredAnonymousId } from './utils/identity';
|
||||
|
||||
let globalClient: LightClient | null = null;
|
||||
|
||||
function init(config: LightConfig): LightClient {
|
||||
setDebug(config.debug === true);
|
||||
logDebug('Index', 'init called', { dsn: config.dsn, debug: config.debug });
|
||||
try {
|
||||
setDebug(config.debug === true);
|
||||
logDebug('Index', 'init called', { dsn: config.dsn, debug: config.debug });
|
||||
|
||||
const client = new Client(config);
|
||||
const client = new Client(config);
|
||||
|
||||
const defaultPlugins: LightPlugin[] = [
|
||||
new OfflinePlugin(),
|
||||
new SamplingPlugin(),
|
||||
new ErrorPlugin(),
|
||||
];
|
||||
const defaultPlugins: LightPlugin[] = [
|
||||
new OfflinePlugin(),
|
||||
new SamplingPlugin(),
|
||||
new ErrorPlugin(),
|
||||
];
|
||||
|
||||
const pluginNames = config.plugins?.filter(p => typeof p === 'string') as string[] || [];
|
||||
|
||||
if (pluginNames.includes('performance') || pluginNames.includes('all')) {
|
||||
defaultPlugins.push(new PerformancePlugin());
|
||||
}
|
||||
if (pluginNames.includes('network') || pluginNames.includes('all')) {
|
||||
defaultPlugins.push(new NetworkPlugin());
|
||||
}
|
||||
if (pluginNames.includes('behavior') || pluginNames.includes('all')) {
|
||||
defaultPlugins.push(new BehaviorPlugin());
|
||||
}
|
||||
if (pluginNames.includes('router') || pluginNames.includes('all')) {
|
||||
defaultPlugins.push(new RouterPlugin());
|
||||
}
|
||||
if (pluginNames.includes('interaction') || pluginNames.includes('all')) {
|
||||
defaultPlugins.push(new InteractionPlugin());
|
||||
}
|
||||
const pluginNames = config.plugins?.filter(p => typeof p === 'string') as string[] || [];
|
||||
|
||||
if (pluginNames.includes('performance') || pluginNames.includes('all')) {
|
||||
defaultPlugins.push(new PerformancePlugin());
|
||||
}
|
||||
if (pluginNames.includes('network') || pluginNames.includes('all')) {
|
||||
defaultPlugins.push(new NetworkPlugin());
|
||||
}
|
||||
if (pluginNames.includes('behavior') || pluginNames.includes('all')) {
|
||||
defaultPlugins.push(new BehaviorPlugin());
|
||||
}
|
||||
if (pluginNames.includes('router') || pluginNames.includes('all')) {
|
||||
defaultPlugins.push(new RouterPlugin());
|
||||
}
|
||||
if (pluginNames.includes('interaction') || pluginNames.includes('all')) {
|
||||
defaultPlugins.push(new InteractionPlugin());
|
||||
}
|
||||
|
||||
logDebug('Index', 'Registering plugins', { count: defaultPlugins.length, plugins: defaultPlugins.map(p => p.name) });
|
||||
logDebug('Index', 'Registering plugins', { count: defaultPlugins.length, plugins: defaultPlugins.map(p => p.name) });
|
||||
|
||||
for (const plugin of defaultPlugins) {
|
||||
client.use(plugin);
|
||||
}
|
||||
for (const plugin of defaultPlugins) {
|
||||
client.use(plugin);
|
||||
}
|
||||
|
||||
if (config.plugins) {
|
||||
for (const plugin of config.plugins) {
|
||||
if (typeof plugin === 'object' && plugin !== null && 'name' in plugin && 'setup' in plugin) {
|
||||
client.use(plugin as LightPlugin);
|
||||
if (config.plugins) {
|
||||
for (const plugin of config.plugins) {
|
||||
if (typeof plugin === 'object' && plugin !== null && 'name' in plugin && 'setup' in plugin) {
|
||||
client.use(plugin as LightPlugin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
client.init();
|
||||
|
||||
globalClient = client;
|
||||
logDebug('Index', 'init completed, globalClient set');
|
||||
return client;
|
||||
} catch (e) {
|
||||
logError('Index', 'init failed', e);
|
||||
throw e;
|
||||
}
|
||||
|
||||
client.init();
|
||||
|
||||
globalClient = client;
|
||||
logDebug('Index', 'init completed, globalClient set');
|
||||
return client;
|
||||
}
|
||||
|
||||
function getClient(): LightClient | null {
|
||||
|
|
@ -71,94 +76,175 @@ function getClient(): LightClient | null {
|
|||
}
|
||||
|
||||
function captureException(error: Error | unknown): void {
|
||||
logDebug('Index', 'captureException called', { hasClient: !!globalClient });
|
||||
if (!globalClient) {
|
||||
console.warn('[LightSDK] SDK not initialized. Call LightSentry.init() first.');
|
||||
return;
|
||||
try {
|
||||
logDebug('Index', 'captureException called', { hasClient: !!globalClient });
|
||||
if (!globalClient) {
|
||||
console.warn('[LightSDK] SDK not initialized. Call LightSentry.init() first.');
|
||||
return;
|
||||
}
|
||||
globalClient.captureException(error);
|
||||
} catch (e) {
|
||||
logError('Index', 'captureException failed', e);
|
||||
}
|
||||
globalClient.captureException(error);
|
||||
}
|
||||
|
||||
function captureMessage(message: string, level?: EventLevel): void {
|
||||
logDebug('Index', 'captureMessage called', { hasClient: !!globalClient });
|
||||
if (!globalClient) {
|
||||
console.warn('[LightSDK] SDK not initialized. Call LightSentry.init() first.');
|
||||
return;
|
||||
try {
|
||||
logDebug('Index', 'captureMessage called', { hasClient: !!globalClient });
|
||||
if (!globalClient) {
|
||||
console.warn('[LightSDK] SDK not initialized. Call LightSentry.init() first.');
|
||||
return;
|
||||
}
|
||||
globalClient.captureMessage(message, level);
|
||||
} catch (e) {
|
||||
logError('Index', 'captureMessage failed', e);
|
||||
}
|
||||
globalClient.captureMessage(message, level);
|
||||
}
|
||||
|
||||
function captureEvent(event: Partial<SentryEvent> & { type: string }): void {
|
||||
logDebug('Index', 'captureEvent called', { hasClient: !!globalClient });
|
||||
if (!globalClient) {
|
||||
console.warn('[LightSDK] SDK not initialized. Call LightSentry.init() first.');
|
||||
return;
|
||||
try {
|
||||
logDebug('Index', 'captureEvent called', { hasClient: !!globalClient });
|
||||
if (!globalClient) {
|
||||
console.warn('[LightSDK] SDK not initialized. Call LightSentry.init() first.');
|
||||
return;
|
||||
}
|
||||
globalClient.captureEvent(event);
|
||||
} catch (e) {
|
||||
logError('Index', 'captureEvent failed', e);
|
||||
}
|
||||
globalClient.captureEvent(event);
|
||||
}
|
||||
|
||||
function setUser(user: UserInfo | null): void {
|
||||
globalClient?.setUser(user);
|
||||
try {
|
||||
globalClient?.setUser(user);
|
||||
} catch (e) {
|
||||
logError('Index', 'setUser failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
function setAnonymousId(id: string): void {
|
||||
setStoredAnonymousId(id);
|
||||
try {
|
||||
setStoredAnonymousId(id);
|
||||
} catch (e) {
|
||||
logError('Index', 'setAnonymousId failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
function clearAnonymousId(): void {
|
||||
clearStoredAnonymousId();
|
||||
try {
|
||||
clearStoredAnonymousId();
|
||||
} catch (e) {
|
||||
logError('Index', 'clearAnonymousId failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
function getAnonymousId(): string | null {
|
||||
return getStoredAnonymousId();
|
||||
try {
|
||||
return getStoredAnonymousId();
|
||||
} catch (e) {
|
||||
logError('Index', 'getAnonymousId failed', e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function startTransaction(context: TransactionContext): Transaction | null {
|
||||
return globalClient?.startTransaction(context) || null;
|
||||
try {
|
||||
return globalClient?.startTransaction(context) || null;
|
||||
} catch (e) {
|
||||
logError('Index', 'startTransaction failed', e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function getCurrentTransaction(): Transaction | null {
|
||||
return globalClient?.getCurrentTransaction() || null;
|
||||
try {
|
||||
return globalClient?.getCurrentTransaction() || null;
|
||||
} catch (e) {
|
||||
logError('Index', 'getCurrentTransaction failed', e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function getCurrentSpan(): Span | null {
|
||||
return globalClient?.getCurrentSpan() || null;
|
||||
try {
|
||||
return globalClient?.getCurrentSpan() || null;
|
||||
} catch (e) {
|
||||
logError('Index', 'getCurrentSpan failed', e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function setSpan(span: Span | null): void {
|
||||
globalClient?.setSpan(span);
|
||||
try {
|
||||
globalClient?.setSpan(span);
|
||||
} catch (e) {
|
||||
logError('Index', 'setSpan failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
function startSpan(context: SpanContext): Span | null {
|
||||
return globalClient?.startSpan(context) || null;
|
||||
try {
|
||||
return globalClient?.startSpan(context) || null;
|
||||
} catch (e) {
|
||||
logError('Index', 'startSpan failed', e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function setTag(key: string, value: string): void {
|
||||
globalClient?.setTag(key, value);
|
||||
try {
|
||||
globalClient?.setTag(key, value);
|
||||
} catch (e) {
|
||||
logError('Index', 'setTag failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
function setTags(tags: Record<string, string>): void {
|
||||
globalClient?.setTags(tags);
|
||||
try {
|
||||
globalClient?.setTags(tags);
|
||||
} catch (e) {
|
||||
logError('Index', 'setTags failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
function setExtra(key: string, value: unknown): void {
|
||||
globalClient?.setExtra(key, value);
|
||||
try {
|
||||
globalClient?.setExtra(key, value);
|
||||
} catch (e) {
|
||||
logError('Index', 'setExtra failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
function addBreadcrumb(breadcrumb: Omit<Breadcrumb, 'timestamp'>): void {
|
||||
globalClient?.addBreadcrumb(breadcrumb);
|
||||
try {
|
||||
globalClient?.addBreadcrumb(breadcrumb);
|
||||
} catch (e) {
|
||||
logError('Index', 'addBreadcrumb failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
async function flush(): Promise<void> {
|
||||
await globalClient?.flush();
|
||||
try {
|
||||
await globalClient?.flush();
|
||||
} catch (e) {
|
||||
logError('Index', 'flush failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
function disable(): void {
|
||||
globalClient?.disable();
|
||||
try {
|
||||
globalClient?.disable();
|
||||
} catch (e) {
|
||||
logError('Index', 'disable failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
function enable(): void {
|
||||
globalClient?.enable();
|
||||
try {
|
||||
globalClient?.enable();
|
||||
} catch (e) {
|
||||
logError('Index', 'enable failed', e);
|
||||
}
|
||||
}
|
||||
|
||||
export {
|
||||
|
|
|
|||
|
|
@ -20,12 +20,11 @@ export function logDebug(tag: string, message: string, data?: unknown): void {
|
|||
}
|
||||
|
||||
export function logError(tag: string, message: string, error?: unknown): void {
|
||||
if (!debugEnabled) return;
|
||||
const timestamp = new Date().toISOString();
|
||||
const prefix = `[LightSDK][${tag}][ERROR]`;
|
||||
if (error !== undefined) {
|
||||
console.error(`${prefix} ${timestamp} ${message}`, error);
|
||||
console.warn(`${prefix} ${timestamp} ${message}`, error);
|
||||
} else {
|
||||
console.error(`${prefix} ${timestamp} ${message}`);
|
||||
console.warn(`${prefix} ${timestamp} ${message}`);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,270 @@
|
|||
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
||||
import Client from '../src/core/Client';
|
||||
import { setAnonymousId } from '../src/utils/identity';
|
||||
|
||||
describe('SDK Error Safety', () => {
|
||||
const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
||||
const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
|
||||
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
consoleWarnSpy.mockRestore();
|
||||
consoleLogSpy.mockRestore();
|
||||
});
|
||||
|
||||
describe('Client public methods should not throw', () => {
|
||||
let client: Client;
|
||||
|
||||
beforeEach(() => {
|
||||
client = new Client({
|
||||
dsn: 'https://proj_abc123@log.example.com/1001',
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
client.destroy();
|
||||
});
|
||||
|
||||
it('captureException should not throw on invalid input', () => {
|
||||
expect(() => {
|
||||
client.captureException(null as unknown as Error);
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('captureException should not throw on undefined input', () => {
|
||||
expect(() => {
|
||||
client.captureException(undefined);
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('captureException should not throw when SDK is disabled', () => {
|
||||
client.disable();
|
||||
expect(() => {
|
||||
client.captureException(new Error('test'));
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('captureMessage should not throw on empty message', () => {
|
||||
expect(() => {
|
||||
client.captureMessage('');
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('captureMessage should not throw when SDK is disabled', () => {
|
||||
client.disable();
|
||||
expect(() => {
|
||||
client.captureMessage('test');
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('captureEvent should not throw on minimal event', () => {
|
||||
expect(() => {
|
||||
client.captureEvent({ type: 'custom' });
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('captureEvent should not throw when SDK is disabled', () => {
|
||||
client.disable();
|
||||
expect(() => {
|
||||
client.captureEvent({ type: 'custom' });
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('setUser should not throw on null input', () => {
|
||||
expect(() => {
|
||||
client.setUser(null);
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('setUser should not throw on valid input', () => {
|
||||
expect(() => {
|
||||
client.setUser({ id: '123', username: 'test' });
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('setTag should not throw', () => {
|
||||
expect(() => {
|
||||
client.setTag('key', 'value');
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('setTags should not throw', () => {
|
||||
expect(() => {
|
||||
client.setTags({ key1: 'val1', key2: 'val2' });
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('setExtra should not throw', () => {
|
||||
expect(() => {
|
||||
client.setExtra('key', { nested: true });
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('addBreadcrumb should not throw', () => {
|
||||
expect(() => {
|
||||
client.addBreadcrumb({
|
||||
type: 'default',
|
||||
message: 'test breadcrumb',
|
||||
level: 'info',
|
||||
});
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('addBreadcrumb should not throw on empty breadcrumb', () => {
|
||||
expect(() => {
|
||||
client.addBreadcrumb({
|
||||
type: 'default',
|
||||
});
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('startTransaction should not throw', () => {
|
||||
expect(() => {
|
||||
client.startTransaction({ name: 'test-tx', op: 'test' });
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('startTransaction should not throw when SDK is disabled', () => {
|
||||
client.disable();
|
||||
const result = client.startTransaction({ name: 'test-tx', op: 'test' });
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
|
||||
it('getCurrentTransaction should not throw', () => {
|
||||
expect(() => {
|
||||
client.getCurrentTransaction();
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('getCurrentSpan should not throw', () => {
|
||||
expect(() => {
|
||||
client.getCurrentSpan();
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('setSpan should not throw', () => {
|
||||
expect(() => {
|
||||
client.setSpan(null);
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('startSpan should not throw', () => {
|
||||
expect(() => {
|
||||
client.startSpan({ name: 'test-span', op: 'test' });
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('startSpan should not throw when SDK is disabled', () => {
|
||||
client.disable();
|
||||
const result = client.startSpan({ name: 'test-span', op: 'test' });
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
|
||||
it('disable should not throw', () => {
|
||||
expect(() => {
|
||||
client.disable();
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('enable should not throw', () => {
|
||||
expect(() => {
|
||||
client.enable();
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('use should not throw on valid plugin', () => {
|
||||
const plugin = {
|
||||
name: 'test-plugin',
|
||||
setup: vi.fn(),
|
||||
};
|
||||
expect(() => {
|
||||
client.use(plugin);
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('use should not throw when plugin setup throws', () => {
|
||||
const plugin = {
|
||||
name: 'bad-plugin',
|
||||
setup: () => {
|
||||
throw new Error('setup failed');
|
||||
},
|
||||
};
|
||||
expect(() => {
|
||||
client.use(plugin);
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('flush should not throw', async () => {
|
||||
await expect(client.flush()).resolves.not.toThrow();
|
||||
});
|
||||
|
||||
it('destroy should not throw', () => {
|
||||
expect(() => {
|
||||
client.destroy();
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('init should not throw', () => {
|
||||
const newClient = new Client({
|
||||
dsn: 'https://proj_abc123@log.example.com/1001',
|
||||
});
|
||||
expect(() => {
|
||||
newClient.init();
|
||||
}).not.toThrow();
|
||||
newClient.destroy();
|
||||
});
|
||||
|
||||
it('setAnonymousId should not throw', () => {
|
||||
expect(() => {
|
||||
client.setAnonymousId('test-anon-id');
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('on/off/emit should not throw', () => {
|
||||
const handler = vi.fn();
|
||||
expect(() => {
|
||||
client.on('test', handler);
|
||||
}).not.toThrow();
|
||||
expect(() => {
|
||||
client.emit('test', 'data');
|
||||
}).not.toThrow();
|
||||
expect(() => {
|
||||
client.off('test', handler);
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('event handler errors should not affect other handlers', () => {
|
||||
const handler1 = vi.fn(() => {
|
||||
throw new Error('handler1 failed');
|
||||
});
|
||||
const handler2 = vi.fn();
|
||||
|
||||
client.on('test-event', handler1);
|
||||
client.on('test-event', handler2);
|
||||
|
||||
expect(() => {
|
||||
client.emit('test-event', 'data');
|
||||
}).not.toThrow();
|
||||
|
||||
expect(handler1).toHaveBeenCalled();
|
||||
expect(handler2).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Config edge cases', () => {
|
||||
it('should throw on missing DSN (config error, not SDK bug)', () => {
|
||||
expect(() => {
|
||||
new Client({ dsn: '' });
|
||||
}).toThrow();
|
||||
});
|
||||
|
||||
it('should throw on undefined DSN', () => {
|
||||
expect(() => {
|
||||
new Client({ dsn: undefined as unknown as string });
|
||||
}).toThrow();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -107,70 +107,73 @@ describe('logger', () => {
|
|||
});
|
||||
|
||||
describe('logError', () => {
|
||||
it('should not log when debug is disabled', () => {
|
||||
const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
|
||||
logError('Test', 'This should not appear');
|
||||
expect(consoleSpy).not.toHaveBeenCalled();
|
||||
it('should always log errors even when debug is disabled', () => {
|
||||
setDebug(false);
|
||||
const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
||||
logError('Test', 'This should always appear');
|
||||
expect(consoleSpy).toHaveBeenCalled();
|
||||
consoleSpy.mockRestore();
|
||||
});
|
||||
|
||||
it('should log error message when debug is enabled', () => {
|
||||
setDebug(true);
|
||||
const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
|
||||
const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
||||
logError('Test', 'This error should appear');
|
||||
expect(consoleSpy).toHaveBeenCalled();
|
||||
consoleSpy.mockRestore();
|
||||
});
|
||||
|
||||
it('should include ERROR tag in log message', () => {
|
||||
setDebug(true);
|
||||
const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
|
||||
const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
||||
logError('Module', 'Error message');
|
||||
expect(consoleSpy).toHaveBeenCalled();
|
||||
const loggedMessage = consoleSpy.mock.calls[0][0];
|
||||
expect(loggedMessage).toContain('[LightSDK][Module][ERROR]');
|
||||
consoleSpy.mockRestore();
|
||||
});
|
||||
|
||||
it('should log error with error data', () => {
|
||||
setDebug(true);
|
||||
const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
|
||||
const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
||||
const error = new Error('Test error');
|
||||
logError('Module', 'Error occurred', error);
|
||||
expect(consoleSpy).toHaveBeenCalled();
|
||||
consoleSpy.mockRestore();
|
||||
});
|
||||
|
||||
it('should handle plain object error', () => {
|
||||
setDebug(true);
|
||||
const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
|
||||
const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
||||
const errorObj = { status: 404, message: 'Not found' };
|
||||
logError('Module', 'Request failed', errorObj);
|
||||
expect(consoleSpy).toHaveBeenCalled();
|
||||
consoleSpy.mockRestore();
|
||||
});
|
||||
|
||||
it('should handle error message without data', () => {
|
||||
setDebug(true);
|
||||
const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
|
||||
const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
||||
logError('Module', 'Simple error');
|
||||
expect(consoleSpy).toHaveBeenCalled();
|
||||
consoleSpy.mockRestore();
|
||||
});
|
||||
|
||||
it('should handle string error', () => {
|
||||
setDebug(true);
|
||||
const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
|
||||
const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
||||
logError('Module', 'String error', 'error details');
|
||||
expect(consoleSpy).toHaveBeenCalled();
|
||||
consoleSpy.mockRestore();
|
||||
});
|
||||
|
||||
it('should handle undefined error', () => {
|
||||
setDebug(true);
|
||||
const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
|
||||
const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
||||
logError('Module', 'Error without details', undefined);
|
||||
expect(consoleSpy).toHaveBeenCalled();
|
||||
consoleSpy.mockRestore();
|
||||
});
|
||||
});
|
||||
|
||||
describe('debug toggle behavior', () => {
|
||||
it('should toggle between enabled and disabled', () => {
|
||||
it('should toggle debug logs between enabled and disabled', () => {
|
||||
const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
|
||||
const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
|
||||
const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
||||
|
||||
setDebug(true);
|
||||
logDebug('Test', 'Debug on');
|
||||
|
|
@ -180,13 +183,18 @@ describe('logger', () => {
|
|||
logDebug('Test', 'Debug off');
|
||||
expect(consoleLogSpy).toHaveBeenCalledTimes(1);
|
||||
|
||||
// logError should always work regardless of debug flag
|
||||
setDebug(true);
|
||||
logError('Test', 'Error on');
|
||||
expect(consoleErrorSpy).toHaveBeenCalled();
|
||||
const errorCallCountWhenOn = consoleWarnSpy.mock.calls.length;
|
||||
expect(errorCallCountWhenOn).toBeGreaterThan(0);
|
||||
|
||||
setDebug(false);
|
||||
logError('Test', 'Error off');
|
||||
expect(consoleErrorSpy).toHaveBeenCalledTimes(1);
|
||||
expect(consoleWarnSpy).toHaveBeenCalledTimes(errorCallCountWhenOn + 1);
|
||||
|
||||
consoleLogSpy.mockRestore();
|
||||
consoleWarnSpy.mockRestore();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue