@futdevpro/dynamo-e2e 1.10.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +2 -2
  3. package/bin/dye2e.js +82 -0
  4. package/build/_modules/cwv/_collections/cwv-comparison.util.d.ts +48 -0
  5. package/build/_modules/cwv/_collections/cwv-comparison.util.d.ts.map +1 -0
  6. package/build/_modules/cwv/_collections/cwv-comparison.util.js +59 -0
  7. package/build/_modules/cwv/_collections/cwv-comparison.util.js.map +1 -0
  8. package/build/_modules/cwv/_collections/cwv-summarize.util.d.ts +29 -0
  9. package/build/_modules/cwv/_collections/cwv-summarize.util.d.ts.map +1 -0
  10. package/build/_modules/cwv/_collections/cwv-summarize.util.js +63 -0
  11. package/build/_modules/cwv/_collections/cwv-summarize.util.js.map +1 -0
  12. package/build/_modules/cwv/cwv-comparison.spec.d.ts +2 -0
  13. package/build/_modules/cwv/cwv-comparison.spec.d.ts.map +1 -0
  14. package/build/_modules/cwv/cwv-comparison.spec.js +77 -0
  15. package/build/_modules/cwv/cwv-comparison.spec.js.map +1 -0
  16. package/build/_modules/cwv/cwv-summarize.spec.d.ts +2 -0
  17. package/build/_modules/cwv/cwv-summarize.spec.d.ts.map +1 -0
  18. package/build/_modules/cwv/cwv-summarize.spec.js +70 -0
  19. package/build/_modules/cwv/cwv-summarize.spec.js.map +1 -0
  20. package/build/_modules/cwv/index.d.ts +2 -0
  21. package/build/_modules/cwv/index.d.ts.map +1 -1
  22. package/build/_modules/cwv/index.js +2 -0
  23. package/build/_modules/cwv/index.js.map +1 -1
  24. package/build/_modules/generators/_collections/cli-runner.util.d.ts +5 -0
  25. package/build/_modules/generators/_collections/cli-runner.util.d.ts.map +1 -1
  26. package/build/_modules/generators/_collections/cli-runner.util.js +77 -0
  27. package/build/_modules/generators/_collections/cli-runner.util.js.map +1 -1
  28. package/build/_modules/generators/bootstrap.spec.d.ts +2 -0
  29. package/build/_modules/generators/bootstrap.spec.d.ts.map +1 -0
  30. package/build/_modules/generators/bootstrap.spec.js +38 -0
  31. package/build/_modules/generators/bootstrap.spec.js.map +1 -0
  32. package/coverage/contracts/_collections/index.html +1 -1
  33. package/coverage/contracts/_collections/index.ts.html +1 -1
  34. package/coverage/contracts/_collections/utils/index.html +1 -1
  35. package/coverage/contracts/_collections/utils/test-id.util.ts.html +1 -1
  36. package/coverage/contracts/_enums/cwv-metric-type.enum.ts.html +1 -1
  37. package/coverage/contracts/_enums/field-test-case-type.enum.ts.html +1 -1
  38. package/coverage/contracts/_enums/index.html +1 -1
  39. package/coverage/contracts/_enums/index.ts.html +1 -1
  40. package/coverage/contracts/_enums/standard-viewport.enum.ts.html +1 -1
  41. package/coverage/contracts/_enums/test-expectation-type.enum.ts.html +1 -1
  42. package/coverage/contracts/_enums/test-run-mode-type.enum.ts.html +1 -1
  43. package/coverage/contracts/index.html +1 -1
  44. package/coverage/contracts/index.ts.html +1 -1
  45. package/coverage/cwv/_collections/cwv-aggregator.util.ts.html +1 -1
  46. package/coverage/cwv/_collections/cwv-comparison.util.ts.html +355 -0
  47. package/coverage/cwv/_collections/cwv-diagnose.util.ts.html +1 -1
  48. package/coverage/cwv/_collections/cwv-emission.util.ts.html +1 -1
  49. package/coverage/cwv/_collections/cwv-summarize.util.ts.html +325 -0
  50. package/coverage/cwv/_collections/index.html +38 -8
  51. package/coverage/cwv/_collections/inp-interaction-script.const.ts.html +1 -1
  52. package/coverage/cwv/_collections/web-vitals-page-script.const.ts.html +1 -1
  53. package/coverage/cwv/cwv-suite.generator.ts.html +1 -1
  54. package/coverage/cwv/index.html +1 -1
  55. package/coverage/generators/_collections/cli-runner.util.ts.html +273 -39
  56. package/coverage/generators/_collections/field-emission.util.ts.html +1 -1
  57. package/coverage/generators/_collections/form-level-emission.util.ts.html +1 -1
  58. package/coverage/generators/_collections/index.html +13 -13
  59. package/coverage/generators/_collections/spec-emission.util.ts.html +1 -1
  60. package/coverage/generators/_collections/test-case-filter.util.ts.html +1 -1
  61. package/coverage/generators/_collections/viewport-emission.util.ts.html +1 -1
  62. package/coverage/generators/form-suite.generator.ts.html +1 -1
  63. package/coverage/generators/index.html +1 -1
  64. package/coverage/generators/viewport-suite.generator.ts.html +1 -1
  65. package/coverage/index.html +26 -26
  66. package/coverage/lcov-report/contracts/_collections/index.html +1 -1
  67. package/coverage/lcov-report/contracts/_collections/index.ts.html +1 -1
  68. package/coverage/lcov-report/contracts/_collections/utils/index.html +1 -1
  69. package/coverage/lcov-report/contracts/_collections/utils/test-id.util.ts.html +1 -1
  70. package/coverage/lcov-report/contracts/_enums/cwv-metric-type.enum.ts.html +1 -1
  71. package/coverage/lcov-report/contracts/_enums/field-test-case-type.enum.ts.html +1 -1
  72. package/coverage/lcov-report/contracts/_enums/index.html +1 -1
  73. package/coverage/lcov-report/contracts/_enums/index.ts.html +1 -1
  74. package/coverage/lcov-report/contracts/_enums/standard-viewport.enum.ts.html +1 -1
  75. package/coverage/lcov-report/contracts/_enums/test-expectation-type.enum.ts.html +1 -1
  76. package/coverage/lcov-report/contracts/_enums/test-run-mode-type.enum.ts.html +1 -1
  77. package/coverage/lcov-report/contracts/index.html +1 -1
  78. package/coverage/lcov-report/contracts/index.ts.html +1 -1
  79. package/coverage/lcov-report/cwv/_collections/cwv-aggregator.util.ts.html +1 -1
  80. package/coverage/lcov-report/cwv/_collections/cwv-comparison.util.ts.html +355 -0
  81. package/coverage/lcov-report/cwv/_collections/cwv-diagnose.util.ts.html +1 -1
  82. package/coverage/lcov-report/cwv/_collections/cwv-emission.util.ts.html +1 -1
  83. package/coverage/lcov-report/cwv/_collections/cwv-summarize.util.ts.html +325 -0
  84. package/coverage/lcov-report/cwv/_collections/index.html +38 -8
  85. package/coverage/lcov-report/cwv/_collections/inp-interaction-script.const.ts.html +1 -1
  86. package/coverage/lcov-report/cwv/_collections/web-vitals-page-script.const.ts.html +1 -1
  87. package/coverage/lcov-report/cwv/cwv-suite.generator.ts.html +1 -1
  88. package/coverage/lcov-report/cwv/index.html +1 -1
  89. package/coverage/lcov-report/generators/_collections/cli-runner.util.ts.html +273 -39
  90. package/coverage/lcov-report/generators/_collections/field-emission.util.ts.html +1 -1
  91. package/coverage/lcov-report/generators/_collections/form-level-emission.util.ts.html +1 -1
  92. package/coverage/lcov-report/generators/_collections/index.html +13 -13
  93. package/coverage/lcov-report/generators/_collections/spec-emission.util.ts.html +1 -1
  94. package/coverage/lcov-report/generators/_collections/test-case-filter.util.ts.html +1 -1
  95. package/coverage/lcov-report/generators/_collections/viewport-emission.util.ts.html +1 -1
  96. package/coverage/lcov-report/generators/form-suite.generator.ts.html +1 -1
  97. package/coverage/lcov-report/generators/index.html +1 -1
  98. package/coverage/lcov-report/generators/viewport-suite.generator.ts.html +1 -1
  99. package/coverage/lcov-report/index.html +26 -26
  100. package/coverage/lcov-report/runtime/_collections/assertion-helpers.util.ts.html +1 -1
  101. package/coverage/lcov-report/runtime/_collections/index.html +1 -1
  102. package/coverage/lcov-report/runtime/_collections/unique-generator.util.ts.html +1 -1
  103. package/coverage/lcov-report/runtime/_collections/wait-helpers.util.ts.html +5 -5
  104. package/coverage/lcov-report/runtime/_services/dialog-page-object.ts.html +1 -1
  105. package/coverage/lcov-report/runtime/_services/field-page-object.ts.html +1 -1
  106. package/coverage/lcov-report/runtime/_services/form-page-object.ts.html +1 -1
  107. package/coverage/lcov-report/runtime/_services/index.html +1 -1
  108. package/coverage/lcov-report/runtime/_services/loader-page-object.ts.html +1 -1
  109. package/coverage/lcov-report/runtime/_services/logger.service.ts.html +1 -1
  110. package/coverage/lcov-report/runtime/_services/login-flow-helper.base.ts.html +1 -1
  111. package/coverage/lcov-report/runtime/_services/nav-page-object.ts.html +1 -1
  112. package/coverage/lcov-report/runtime/_services/toast-page-object.ts.html +1 -1
  113. package/coverage/lcov-report/runtime/_services/wave-2b-page-objects.ts.html +1 -1
  114. package/coverage/lcov-report/runtime/index.html +1 -1
  115. package/coverage/lcov-report/runtime/index.ts.html +1 -1
  116. package/coverage/lcov.info +485 -150
  117. package/coverage/runtime/_collections/assertion-helpers.util.ts.html +1 -1
  118. package/coverage/runtime/_collections/index.html +1 -1
  119. package/coverage/runtime/_collections/unique-generator.util.ts.html +1 -1
  120. package/coverage/runtime/_collections/wait-helpers.util.ts.html +5 -5
  121. package/coverage/runtime/_services/dialog-page-object.ts.html +1 -1
  122. package/coverage/runtime/_services/field-page-object.ts.html +1 -1
  123. package/coverage/runtime/_services/form-page-object.ts.html +1 -1
  124. package/coverage/runtime/_services/index.html +1 -1
  125. package/coverage/runtime/_services/loader-page-object.ts.html +1 -1
  126. package/coverage/runtime/_services/logger.service.ts.html +1 -1
  127. package/coverage/runtime/_services/login-flow-helper.base.ts.html +1 -1
  128. package/coverage/runtime/_services/nav-page-object.ts.html +1 -1
  129. package/coverage/runtime/_services/toast-page-object.ts.html +1 -1
  130. package/coverage/runtime/_services/wave-2b-page-objects.ts.html +1 -1
  131. package/coverage/runtime/index.html +1 -1
  132. package/coverage/runtime/index.ts.html +1 -1
  133. package/coverage/tmp/coverage-213156-1781073300871-0.json +1 -0
  134. package/coverage/tmp/{coverage-224932-1781071393426-0.json → coverage-220640-1781073299508-0.json} +1 -1
  135. package/package.json +1 -1
  136. package/coverage/tmp/coverage-226960-1781071394780-0.json +0 -1
@@ -82,7 +82,7 @@ export * from './test-case-sets/field-type-registry.const';
82
82
  <div class='footer quiet pad2 space-top1 center small'>
83
83
  Code coverage generated by
84
84
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
85
- at 2026-06-10T06:03:15.288Z
85
+ at 2026-06-10T06:35:01.436Z
86
86
  </div>
87
87
  <script src="../../prettify.js"></script>
88
88
  <script>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at 2026-06-10T06:03:15.288Z
104
+ at 2026-06-10T06:35:01.436Z
105
105
  </div>
106
106
  <script src="../../../prettify.js"></script>
107
107
  <script>
@@ -157,7 +157,7 @@ export class DyE2E_TestId_Util {
157
157
  <div class='footer quiet pad2 space-top1 center small'>
158
158
  Code coverage generated by
159
159
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
160
- at 2026-06-10T06:03:15.288Z
160
+ at 2026-06-10T06:35:01.436Z
161
161
  </div>
162
162
  <script src="../../../prettify.js"></script>
163
163
  <script>
@@ -130,7 +130,7 @@ export enum DyE2E_CWVMetric_Type {
130
130
  <div class='footer quiet pad2 space-top1 center small'>
131
131
  Code coverage generated by
132
132
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
133
- at 2026-06-10T06:03:15.288Z
133
+ at 2026-06-10T06:35:01.436Z
134
134
  </div>
135
135
  <script src="../../prettify.js"></script>
136
136
  <script>
@@ -379,7 +379,7 @@ export enum DyE2E_FieldTestCase_Type {
379
379
  <div class='footer quiet pad2 space-top1 center small'>
380
380
  Code coverage generated by
381
381
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
382
- at 2026-06-10T06:03:15.288Z
382
+ at 2026-06-10T06:35:01.436Z
383
383
  </div>
384
384
  <script src="../../prettify.js"></script>
385
385
  <script>
@@ -176,7 +176,7 @@
176
176
  <div class='footer quiet pad2 space-top1 center small'>
177
177
  Code coverage generated by
178
178
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
179
- at 2026-06-10T06:03:15.288Z
179
+ at 2026-06-10T06:35:01.436Z
180
180
  </div>
181
181
  <script src="../../prettify.js"></script>
182
182
  <script>
@@ -85,7 +85,7 @@ export * from './test-run-mode-type.enum';
85
85
  <div class='footer quiet pad2 space-top1 center small'>
86
86
  Code coverage generated by
87
87
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
88
- at 2026-06-10T06:03:15.288Z
88
+ at 2026-06-10T06:35:01.436Z
89
89
  </div>
90
90
  <script src="../../prettify.js"></script>
91
91
  <script>
@@ -112,7 +112,7 @@ export enum DyE2E_StandardViewport_Type {
112
112
  <div class='footer quiet pad2 space-top1 center small'>
113
113
  Code coverage generated by
114
114
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
115
- at 2026-06-10T06:03:15.288Z
115
+ at 2026-06-10T06:35:01.436Z
116
116
  </div>
117
117
  <script src="../../prettify.js"></script>
118
118
  <script>
@@ -118,7 +118,7 @@ export enum DyE2E_TestExpectation_Type {
118
118
  <div class='footer quiet pad2 space-top1 center small'>
119
119
  Code coverage generated by
120
120
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
121
- at 2026-06-10T06:03:15.288Z
121
+ at 2026-06-10T06:35:01.436Z
122
122
  </div>
123
123
  <script src="../../prettify.js"></script>
124
124
  <script>
@@ -115,7 +115,7 @@ export enum DyE2E_TestRunMode_Type {
115
115
  <div class='footer quiet pad2 space-top1 center small'>
116
116
  Code coverage generated by
117
117
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
118
- at 2026-06-10T06:03:15.288Z
118
+ at 2026-06-10T06:35:01.436Z
119
119
  </div>
120
120
  <script src="../../prettify.js"></script>
121
121
  <script>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at 2026-06-10T06:03:15.288Z
104
+ at 2026-06-10T06:35:01.436Z
105
105
  </div>
106
106
  <script src="../prettify.js"></script>
107
107
  <script>
@@ -106,7 +106,7 @@ export * from './_collections/utils/test-id.util';
106
106
  <div class='footer quiet pad2 space-top1 center small'>
107
107
  Code coverage generated by
108
108
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
109
- at 2026-06-10T06:03:15.288Z
109
+ at 2026-06-10T06:35:01.436Z
110
110
  </div>
111
111
  <script src="../prettify.js"></script>
112
112
  <script>
@@ -226,7 +226,7 @@ export class DyE2E_CWVAggregator_Util {
226
226
  <div class='footer quiet pad2 space-top1 center small'>
227
227
  Code coverage generated by
228
228
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
229
- at 2026-06-10T06:03:15.288Z
229
+ at 2026-06-10T06:35:01.436Z
230
230
  </div>
231
231
  <script src="../../prettify.js"></script>
232
232
  <script>
@@ -0,0 +1,355 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for cwv/_collections/cwv-comparison.util.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">cwv/_collections</a> cwv-comparison.util.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">100% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>90/90</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">83.33% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>20/24</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">100% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>3/3</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">100% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>90/90</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
157
+ <span class="cline-any cline-yes">1x</span>
158
+ <span class="cline-any cline-yes">1x</span>
159
+ <span class="cline-any cline-yes">1x</span>
160
+ <span class="cline-any cline-yes">1x</span>
161
+ <span class="cline-any cline-yes">1x</span>
162
+ <span class="cline-any cline-yes">1x</span>
163
+ <span class="cline-any cline-yes">1x</span>
164
+ <span class="cline-any cline-yes">1x</span>
165
+ <span class="cline-any cline-yes">1x</span>
166
+ <span class="cline-any cline-yes">1x</span>
167
+ <span class="cline-any cline-yes">1x</span>
168
+ <span class="cline-any cline-yes">1x</span>
169
+ <span class="cline-any cline-yes">1x</span>
170
+ <span class="cline-any cline-yes">1x</span>
171
+ <span class="cline-any cline-yes">1x</span>
172
+ <span class="cline-any cline-yes">1x</span>
173
+ <span class="cline-any cline-yes">1x</span>
174
+ <span class="cline-any cline-yes">1x</span>
175
+ <span class="cline-any cline-yes">1x</span>
176
+ <span class="cline-any cline-yes">1x</span>
177
+ <span class="cline-any cline-yes">1x</span>
178
+ <span class="cline-any cline-yes">1x</span>
179
+ <span class="cline-any cline-yes">1x</span>
180
+ <span class="cline-any cline-yes">1x</span>
181
+ <span class="cline-any cline-yes">1x</span>
182
+ <span class="cline-any cline-yes">1x</span>
183
+ <span class="cline-any cline-yes">1x</span>
184
+ <span class="cline-any cline-yes">1x</span>
185
+ <span class="cline-any cline-yes">1x</span>
186
+ <span class="cline-any cline-yes">1x</span>
187
+ <span class="cline-any cline-yes">1x</span>
188
+ <span class="cline-any cline-yes">1x</span>
189
+ <span class="cline-any cline-yes">1x</span>
190
+ <span class="cline-any cline-yes">1x</span>
191
+ <span class="cline-any cline-yes">1x</span>
192
+ <span class="cline-any cline-yes">1x</span>
193
+ <span class="cline-any cline-yes">1x</span>
194
+ <span class="cline-any cline-yes">1x</span>
195
+ <span class="cline-any cline-yes">1x</span>
196
+ <span class="cline-any cline-yes">1x</span>
197
+ <span class="cline-any cline-yes">9x</span>
198
+ <span class="cline-any cline-yes">9x</span>
199
+ <span class="cline-any cline-yes">9x</span>
200
+ <span class="cline-any cline-yes">9x</span>
201
+ <span class="cline-any cline-yes">9x</span>
202
+ <span class="cline-any cline-yes">9x</span>
203
+ <span class="cline-any cline-yes">9x</span>
204
+ <span class="cline-any cline-yes">9x</span>
205
+ <span class="cline-any cline-yes">9x</span>
206
+ <span class="cline-any cline-yes">9x</span>
207
+ <span class="cline-any cline-yes">9x</span>
208
+ <span class="cline-any cline-yes">9x</span>
209
+ <span class="cline-any cline-yes">9x</span>
210
+ <span class="cline-any cline-yes">45x</span>
211
+ <span class="cline-any cline-yes">45x</span>
212
+ <span class="cline-any cline-yes">45x</span>
213
+ <span class="cline-any cline-yes">34x</span>
214
+ <span class="cline-any cline-yes">34x</span>
215
+ <span class="cline-any cline-yes">11x</span>
216
+ <span class="cline-any cline-yes">45x</span>
217
+ <span class="cline-any cline-yes">45x</span>
218
+ <span class="cline-any cline-yes">45x</span>
219
+ <span class="cline-any cline-yes">7x</span>
220
+ <span class="cline-any cline-yes">45x</span>
221
+ <span class="cline-any cline-yes">45x</span>
222
+ <span class="cline-any cline-yes">45x</span>
223
+ <span class="cline-any cline-yes">9x</span>
224
+ <span class="cline-any cline-yes">9x</span>
225
+ <span class="cline-any cline-yes">1x</span>
226
+ <span class="cline-any cline-yes">1x</span>
227
+ <span class="cline-any cline-yes">1x</span>
228
+ <span class="cline-any cline-yes">1x</span>
229
+ <span class="cline-any cline-yes">1x</span>
230
+ <span class="cline-any cline-yes">1x</span>
231
+ <span class="cline-any cline-yes">1x</span>
232
+ <span class="cline-any cline-yes">1x</span>
233
+ <span class="cline-any cline-yes">2x</span>
234
+ <span class="cline-any cline-yes">1x</span>
235
+ <span class="cline-any cline-yes">1x</span>
236
+ <span class="cline-any cline-yes">1x</span>
237
+ <span class="cline-any cline-yes">1x</span>
238
+ <span class="cline-any cline-yes">1x</span>
239
+ <span class="cline-any cline-yes">1x</span>
240
+ <span class="cline-any cline-yes">1x</span>
241
+ <span class="cline-any cline-yes">1x</span>
242
+ <span class="cline-any cline-yes">1x</span>
243
+ <span class="cline-any cline-yes">1x</span>
244
+ <span class="cline-any cline-yes">1x</span>
245
+ <span class="cline-any cline-yes">1x</span>
246
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { DyE2E_CWVMetric_Type } from '../../contracts/_enums/cwv-metric-type.enum';
247
+ &nbsp;
248
+ /**
249
+ * MP-05/Wave-3 — CWV report comparison util.
250
+ *
251
+ * Két JSON-report-ot összevet (régi vs új) és visszaadja a regressziókat.
252
+ * Tipikus use-case: nightly CICD vs előző-stable, vagy PR-build vs main.
253
+ */
254
+ &nbsp;
255
+ export interface DyE2E_CWVComparison_Summary {
256
+ metric: DyE2E_CWVMetric_Type;
257
+ oldP75: number;
258
+ newP75: number;
259
+ /** Delta = newP75 − oldP75. Pozitív = romlás (LCP/CLS/INP/TTFB/FCP-nél). */
260
+ delta: number;
261
+ /** Százalékos változás. */
262
+ deltaPercent: number;
263
+ /** "improved" | "regressed" | "stable". */
264
+ status: 'improved' | 'regressed' | 'stable';
265
+ }
266
+ &nbsp;
267
+ export interface DyE2E_CWVReport_Shape {
268
+ route?: string;
269
+ summary?: Record&lt;string, { p75?: number; n?: number }&gt;;
270
+ raw?: Array&lt;{ metric?: string; value?: number; iter?: number }&gt;;
271
+ [extra: string]: unknown;
272
+ }
273
+ &nbsp;
274
+ export class DyE2E_CWVComparison_Util {
275
+ &nbsp;
276
+ /** Delta-tűrés (% alatti változás "stable"-nek számít). Default 5%. */
277
+ static defaultStableTolerancePercent: number = 5;
278
+ &nbsp;
279
+ /**
280
+ * Összevet két CWV-JSON-report-ot.
281
+ *
282
+ * @param oldReport — előző (baseline) report
283
+ * @param newReport — új (current) report
284
+ * @param tolerance — % alatti változás "stable". Default `defaultStableTolerancePercent`.
285
+ */
286
+ static compareReports(
287
+ oldReport: DyE2E_CWVReport_Shape,
288
+ newReport: DyE2E_CWVReport_Shape,
289
+ tolerance: number = DyE2E_CWVComparison_Util.defaultStableTolerancePercent,
290
+ ): DyE2E_CWVComparison_Summary[] {
291
+ const metrics: DyE2E_CWVMetric_Type[] = [
292
+ DyE2E_CWVMetric_Type.lcp,
293
+ DyE2E_CWVMetric_Type.cls,
294
+ DyE2E_CWVMetric_Type.inp,
295
+ DyE2E_CWVMetric_Type.ttfb,
296
+ DyE2E_CWVMetric_Type.fcp,
297
+ ];
298
+ const result: DyE2E_CWVComparison_Summary[] = [];
299
+ for (const metric of metrics) {
300
+ const oldP75: number = oldReport.summary?.[metric]?.p75 ?? NaN;
301
+ const newP75: number = newReport.summary?.[metric]?.p75 ?? NaN;
302
+ if (!isFinite(oldP75) || !isFinite(newP75)) {
303
+ continue;
304
+ }
305
+ const delta: number = newP75 - oldP75;
306
+ const deltaPercent: number = oldP75 &gt; 0 ? (delta / oldP75) * 100 <span class="branch-0 cbranch-no" title="branch not covered" >: 0;</span>
307
+ const status: 'improved' | 'regressed' | 'stable' =
308
+ Math.abs(deltaPercent) &lt;= tolerance ? 'stable' :
309
+ delta &lt; 0 ? 'improved' :
310
+ 'regressed';
311
+ result.push({ metric, oldP75, newP75, delta, deltaPercent, status });
312
+ }
313
+ return result;
314
+ }
315
+ &nbsp;
316
+ /** Csak a regresszióknak a leírása (kiemelve). */
317
+ static regressionsOnly(comparisons: DyE2E_CWVComparison_Summary[]): DyE2E_CWVComparison_Summary[] {
318
+ return comparisons.filter((c: DyE2E_CWVComparison_Summary): boolean =&gt; c.status === 'regressed');
319
+ }
320
+ &nbsp;
321
+ /** Ember-olvasható összegzés markdown-tablázatra. */
322
+ static formatMarkdownTable(comparisons: DyE2E_CWVComparison_Summary[]): string {
323
+ if (comparisons.length === 0) {
324
+ return '_No comparable metrics._';
325
+ }
326
+ const header: string = '| Metric | Old p75 | New p75 | Delta | Δ% | Status |\n|---|---|---|---|---|---|';
327
+ const rows: string[] = comparisons.map((c: DyE2E_CWVComparison_Summary): string =&gt; {
328
+ const unit: string = c.metric === DyE2E_CWVMetric_Type.cls <span class="branch-0 cbranch-no" title="branch not covered" >? '' </span>: 'ms';
329
+ const icon: string = c.status === 'improved' <span class="branch-0 cbranch-no" title="branch not covered" >? '🟢' </span>:
330
+ c.status === 'regressed' ? '🔴' <span class="branch-0 cbranch-no" title="branch not covered" >: '⚪';</span>
331
+ return `| ${c.metric.toUpperCase()} | ${c.oldP75.toFixed(2)}${unit} | ${c.newP75.toFixed(2)}${unit} | ${c.delta.toFixed(2)}${unit} | ${c.deltaPercent.toFixed(1)}% | ${icon} ${c.status} |`;
332
+ });
333
+ return `${header}\n${rows.join('\n')}`;
334
+ }
335
+ }
336
+ &nbsp;</pre></td></tr></table></pre>
337
+
338
+ <div class='push'></div><!-- for sticky footer -->
339
+ </div><!-- /wrapper -->
340
+ <div class='footer quiet pad2 space-top1 center small'>
341
+ Code coverage generated by
342
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
343
+ at 2026-06-10T06:35:01.436Z
344
+ </div>
345
+ <script src="../../prettify.js"></script>
346
+ <script>
347
+ window.onload = function () {
348
+ prettyPrint();
349
+ };
350
+ </script>
351
+ <script src="../../sorter.js"></script>
352
+ <script src="../../block-navigation.js"></script>
353
+ </body>
354
+ </html>
355
+
@@ -538,7 +538,7 @@ export class DyE2E_CWVDiagnose_Util {
538
538
  <div class='footer quiet pad2 space-top1 center small'>
539
539
  Code coverage generated by
540
540
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
541
- at 2026-06-10T06:03:15.288Z
541
+ at 2026-06-10T06:35:01.436Z
542
542
  </div>
543
543
  <script src="../../prettify.js"></script>
544
544
  <script>
@@ -394,7 +394,7 @@ export class DyE2E_CWVEmission_Util {
394
394
  <div class='footer quiet pad2 space-top1 center small'>
395
395
  Code coverage generated by
396
396
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
397
- at 2026-06-10T06:03:15.288Z
397
+ at 2026-06-10T06:35:01.436Z
398
398
  </div>
399
399
  <script src="../../prettify.js"></script>
400
400
  <script>