@futdevpro/dynamo-e2e 1.9.0 → 1.11.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 (138) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +2 -2
  3. package/bin/dye2e.js +46 -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-diagnose.util.d.ts +37 -0
  9. package/build/_modules/cwv/_collections/cwv-diagnose.util.d.ts.map +1 -0
  10. package/build/_modules/cwv/_collections/cwv-diagnose.util.js +108 -0
  11. package/build/_modules/cwv/_collections/cwv-diagnose.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-diagnose.spec.d.ts +2 -0
  17. package/build/_modules/cwv/cwv-diagnose.spec.d.ts.map +1 -0
  18. package/build/_modules/cwv/cwv-diagnose.spec.js +78 -0
  19. package/build/_modules/cwv/cwv-diagnose.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 +28 -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 +123 -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/build/_modules/generators/doctor.spec.d.ts +2 -0
  33. package/build/_modules/generators/doctor.spec.d.ts.map +1 -0
  34. package/build/_modules/generators/doctor.spec.js +68 -0
  35. package/build/_modules/generators/doctor.spec.js.map +1 -0
  36. package/coverage/contracts/_collections/index.html +1 -1
  37. package/coverage/contracts/_collections/index.ts.html +1 -1
  38. package/coverage/contracts/_collections/utils/index.html +1 -1
  39. package/coverage/contracts/_collections/utils/test-id.util.ts.html +1 -1
  40. package/coverage/contracts/_enums/cwv-metric-type.enum.ts.html +1 -1
  41. package/coverage/contracts/_enums/field-test-case-type.enum.ts.html +1 -1
  42. package/coverage/contracts/_enums/index.html +1 -1
  43. package/coverage/contracts/_enums/index.ts.html +1 -1
  44. package/coverage/contracts/_enums/standard-viewport.enum.ts.html +1 -1
  45. package/coverage/contracts/_enums/test-expectation-type.enum.ts.html +1 -1
  46. package/coverage/contracts/_enums/test-run-mode-type.enum.ts.html +1 -1
  47. package/coverage/contracts/index.html +1 -1
  48. package/coverage/contracts/index.ts.html +1 -1
  49. package/coverage/cwv/_collections/cwv-aggregator.util.ts.html +1 -1
  50. package/coverage/cwv/_collections/cwv-comparison.util.ts.html +355 -0
  51. package/coverage/cwv/_collections/cwv-diagnose.util.ts.html +553 -0
  52. package/coverage/cwv/_collections/cwv-emission.util.ts.html +1 -1
  53. package/coverage/cwv/_collections/index.html +38 -8
  54. package/coverage/cwv/_collections/inp-interaction-script.const.ts.html +1 -1
  55. package/coverage/cwv/_collections/web-vitals-page-script.const.ts.html +1 -1
  56. package/coverage/cwv/cwv-suite.generator.ts.html +1 -1
  57. package/coverage/cwv/index.html +1 -1
  58. package/coverage/generators/_collections/cli-runner.util.ts.html +414 -15
  59. package/coverage/generators/_collections/field-emission.util.ts.html +1 -1
  60. package/coverage/generators/_collections/form-level-emission.util.ts.html +1 -1
  61. package/coverage/generators/_collections/index.html +13 -13
  62. package/coverage/generators/_collections/spec-emission.util.ts.html +1 -1
  63. package/coverage/generators/_collections/test-case-filter.util.ts.html +1 -1
  64. package/coverage/generators/_collections/viewport-emission.util.ts.html +1 -1
  65. package/coverage/generators/form-suite.generator.ts.html +1 -1
  66. package/coverage/generators/index.html +1 -1
  67. package/coverage/generators/viewport-suite.generator.ts.html +1 -1
  68. package/coverage/index.html +26 -26
  69. package/coverage/lcov-report/contracts/_collections/index.html +1 -1
  70. package/coverage/lcov-report/contracts/_collections/index.ts.html +1 -1
  71. package/coverage/lcov-report/contracts/_collections/utils/index.html +1 -1
  72. package/coverage/lcov-report/contracts/_collections/utils/test-id.util.ts.html +1 -1
  73. package/coverage/lcov-report/contracts/_enums/cwv-metric-type.enum.ts.html +1 -1
  74. package/coverage/lcov-report/contracts/_enums/field-test-case-type.enum.ts.html +1 -1
  75. package/coverage/lcov-report/contracts/_enums/index.html +1 -1
  76. package/coverage/lcov-report/contracts/_enums/index.ts.html +1 -1
  77. package/coverage/lcov-report/contracts/_enums/standard-viewport.enum.ts.html +1 -1
  78. package/coverage/lcov-report/contracts/_enums/test-expectation-type.enum.ts.html +1 -1
  79. package/coverage/lcov-report/contracts/_enums/test-run-mode-type.enum.ts.html +1 -1
  80. package/coverage/lcov-report/contracts/index.html +1 -1
  81. package/coverage/lcov-report/contracts/index.ts.html +1 -1
  82. package/coverage/lcov-report/cwv/_collections/cwv-aggregator.util.ts.html +1 -1
  83. package/coverage/lcov-report/cwv/_collections/cwv-comparison.util.ts.html +355 -0
  84. package/coverage/lcov-report/cwv/_collections/cwv-diagnose.util.ts.html +553 -0
  85. package/coverage/lcov-report/cwv/_collections/cwv-emission.util.ts.html +1 -1
  86. package/coverage/lcov-report/cwv/_collections/index.html +38 -8
  87. package/coverage/lcov-report/cwv/_collections/inp-interaction-script.const.ts.html +1 -1
  88. package/coverage/lcov-report/cwv/_collections/web-vitals-page-script.const.ts.html +1 -1
  89. package/coverage/lcov-report/cwv/cwv-suite.generator.ts.html +1 -1
  90. package/coverage/lcov-report/cwv/index.html +1 -1
  91. package/coverage/lcov-report/generators/_collections/cli-runner.util.ts.html +414 -15
  92. package/coverage/lcov-report/generators/_collections/field-emission.util.ts.html +1 -1
  93. package/coverage/lcov-report/generators/_collections/form-level-emission.util.ts.html +1 -1
  94. package/coverage/lcov-report/generators/_collections/index.html +13 -13
  95. package/coverage/lcov-report/generators/_collections/spec-emission.util.ts.html +1 -1
  96. package/coverage/lcov-report/generators/_collections/test-case-filter.util.ts.html +1 -1
  97. package/coverage/lcov-report/generators/_collections/viewport-emission.util.ts.html +1 -1
  98. package/coverage/lcov-report/generators/form-suite.generator.ts.html +1 -1
  99. package/coverage/lcov-report/generators/index.html +1 -1
  100. package/coverage/lcov-report/generators/viewport-suite.generator.ts.html +1 -1
  101. package/coverage/lcov-report/index.html +26 -26
  102. package/coverage/lcov-report/runtime/_collections/assertion-helpers.util.ts.html +1 -1
  103. package/coverage/lcov-report/runtime/_collections/index.html +1 -1
  104. package/coverage/lcov-report/runtime/_collections/unique-generator.util.ts.html +1 -1
  105. package/coverage/lcov-report/runtime/_collections/wait-helpers.util.ts.html +1 -1
  106. package/coverage/lcov-report/runtime/_services/dialog-page-object.ts.html +1 -1
  107. package/coverage/lcov-report/runtime/_services/field-page-object.ts.html +1 -1
  108. package/coverage/lcov-report/runtime/_services/form-page-object.ts.html +1 -1
  109. package/coverage/lcov-report/runtime/_services/index.html +1 -1
  110. package/coverage/lcov-report/runtime/_services/loader-page-object.ts.html +1 -1
  111. package/coverage/lcov-report/runtime/_services/logger.service.ts.html +1 -1
  112. package/coverage/lcov-report/runtime/_services/login-flow-helper.base.ts.html +1 -1
  113. package/coverage/lcov-report/runtime/_services/nav-page-object.ts.html +1 -1
  114. package/coverage/lcov-report/runtime/_services/toast-page-object.ts.html +1 -1
  115. package/coverage/lcov-report/runtime/_services/wave-2b-page-objects.ts.html +1 -1
  116. package/coverage/lcov-report/runtime/index.html +1 -1
  117. package/coverage/lcov-report/runtime/index.ts.html +1 -1
  118. package/coverage/lcov.info +580 -70
  119. package/coverage/runtime/_collections/assertion-helpers.util.ts.html +1 -1
  120. package/coverage/runtime/_collections/index.html +1 -1
  121. package/coverage/runtime/_collections/unique-generator.util.ts.html +1 -1
  122. package/coverage/runtime/_collections/wait-helpers.util.ts.html +1 -1
  123. package/coverage/runtime/_services/dialog-page-object.ts.html +1 -1
  124. package/coverage/runtime/_services/field-page-object.ts.html +1 -1
  125. package/coverage/runtime/_services/form-page-object.ts.html +1 -1
  126. package/coverage/runtime/_services/index.html +1 -1
  127. package/coverage/runtime/_services/loader-page-object.ts.html +1 -1
  128. package/coverage/runtime/_services/logger.service.ts.html +1 -1
  129. package/coverage/runtime/_services/login-flow-helper.base.ts.html +1 -1
  130. package/coverage/runtime/_services/nav-page-object.ts.html +1 -1
  131. package/coverage/runtime/_services/toast-page-object.ts.html +1 -1
  132. package/coverage/runtime/_services/wave-2b-page-objects.ts.html +1 -1
  133. package/coverage/runtime/index.html +1 -1
  134. package/coverage/runtime/index.ts.html +1 -1
  135. package/coverage/tmp/coverage-221932-1781072712070-0.json +1 -0
  136. package/coverage/tmp/{coverage-225712-1781070050591-0.json → coverage-224696-1781072711012-0.json} +1 -1
  137. package/package.json +1 -1
  138. package/coverage/tmp/coverage-222216-1781070051665-0.json +0 -1
@@ -289,7 +289,7 @@ export interface DyE2E_INPInteraction_Shape {
289
289
  <div class='footer quiet pad2 space-top1 center small'>
290
290
  Code coverage generated by
291
291
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
292
- at 2026-06-10T05:40:52.028Z
292
+ at 2026-06-10T06:25:12.717Z
293
293
  </div>
294
294
  <script src="../../prettify.js"></script>
295
295
  <script>
@@ -316,7 +316,7 @@ export const DYE2E_WEB_VITALS_PAGE_SCRIPT: string = `
316
316
  <div class='footer quiet pad2 space-top1 center small'>
317
317
  Code coverage generated by
318
318
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
319
- at 2026-06-10T05:40:52.028Z
319
+ at 2026-06-10T06:25:12.717Z
320
320
  </div>
321
321
  <script src="../../prettify.js"></script>
322
322
  <script>
@@ -244,7 +244,7 @@ ${DyE2E_SpecEmission_Util.indent(routeBlocks.join('\n\n'), 1)}
244
244
  <div class='footer quiet pad2 space-top1 center small'>
245
245
  Code coverage generated by
246
246
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
247
- at 2026-06-10T05:40:52.028Z
247
+ at 2026-06-10T06:25:12.717Z
248
248
  </div>
249
249
  <script src="../prettify.js"></script>
250
250
  <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-10T05:40:52.028Z
104
+ at 2026-06-10T06:25:12.717Z
105
105
  </div>
106
106
  <script src="../prettify.js"></script>
107
107
  <script>
@@ -25,28 +25,28 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>92/92</span>
28
+ <span class='fraction'>225/225</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
33
+ <span class="strong">96.42% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>15/15</span>
35
+ <span class='fraction'>27/28</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>4/4</span>
42
+ <span class='fraction'>6/6</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>92/92</span>
49
+ <span class='fraction'>225/225</span>
50
50
  </div>
51
51
 
52
52
 
@@ -155,7 +155,140 @@
155
155
  <a name='L90'></a><a href='#L90'>90</a>
156
156
  <a name='L91'></a><a href='#L91'>91</a>
157
157
  <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
159
292
  <span class="cline-any cline-yes">1x</span>
160
293
  <span class="cline-any cline-yes">1x</span>
161
294
  <span class="cline-any cline-yes">1x</span>
@@ -193,12 +326,105 @@
193
326
  <span class="cline-any cline-yes">3x</span>
194
327
  <span class="cline-any cline-yes">1x</span>
195
328
  <span class="cline-any cline-yes">1x</span>
329
+ <span class="cline-any cline-yes">3x</span>
330
+ <span class="cline-any cline-yes">3x</span>
331
+ <span class="cline-any cline-yes">3x</span>
332
+ <span class="cline-any cline-yes">3x</span>
333
+ <span class="cline-any cline-yes">3x</span>
334
+ <span class="cline-any cline-yes">3x</span>
335
+ <span class="cline-any cline-yes">3x</span>
336
+ <span class="cline-any cline-yes">3x</span>
337
+ <span class="cline-any cline-yes">3x</span>
338
+ <span class="cline-any cline-yes">3x</span>
339
+ <span class="cline-any cline-yes">3x</span>
340
+ <span class="cline-any cline-yes">3x</span>
341
+ <span class="cline-any cline-yes">3x</span>
342
+ <span class="cline-any cline-yes">3x</span>
343
+ <span class="cline-any cline-yes">3x</span>
344
+ <span class="cline-any cline-yes">3x</span>
345
+ <span class="cline-any cline-yes">3x</span>
346
+ <span class="cline-any cline-yes">3x</span>
347
+ <span class="cline-any cline-yes">3x</span>
348
+ <span class="cline-any cline-yes">3x</span>
349
+ <span class="cline-any cline-yes">3x</span>
350
+ <span class="cline-any cline-yes">3x</span>
351
+ <span class="cline-any cline-yes">3x</span>
352
+ <span class="cline-any cline-yes">3x</span>
353
+ <span class="cline-any cline-yes">3x</span>
354
+ <span class="cline-any cline-yes">3x</span>
355
+ <span class="cline-any cline-yes">3x</span>
356
+ <span class="cline-any cline-yes">3x</span>
357
+ <span class="cline-any cline-yes">3x</span>
358
+ <span class="cline-any cline-yes">3x</span>
359
+ <span class="cline-any cline-yes">3x</span>
360
+ <span class="cline-any cline-yes">3x</span>
361
+ <span class="cline-any cline-yes">3x</span>
362
+ <span class="cline-any cline-yes">3x</span>
363
+ <span class="cline-any cline-yes">3x</span>
364
+ <span class="cline-any cline-yes">3x</span>
365
+ <span class="cline-any cline-yes">3x</span>
196
366
  <span class="cline-any cline-yes">1x</span>
197
367
  <span class="cline-any cline-yes">1x</span>
198
368
  <span class="cline-any cline-yes">1x</span>
199
369
  <span class="cline-any cline-yes">1x</span>
200
370
  <span class="cline-any cline-yes">1x</span>
201
371
  <span class="cline-any cline-yes">1x</span>
372
+ <span class="cline-any cline-yes">4x</span>
373
+ <span class="cline-any cline-yes">4x</span>
374
+ <span class="cline-any cline-yes">4x</span>
375
+ <span class="cline-any cline-yes">4x</span>
376
+ <span class="cline-any cline-yes">4x</span>
377
+ <span class="cline-any cline-yes">4x</span>
378
+ <span class="cline-any cline-yes">4x</span>
379
+ <span class="cline-any cline-yes">4x</span>
380
+ <span class="cline-any cline-yes">4x</span>
381
+ <span class="cline-any cline-yes">4x</span>
382
+ <span class="cline-any cline-yes">4x</span>
383
+ <span class="cline-any cline-yes">4x</span>
384
+ <span class="cline-any cline-yes">4x</span>
385
+ <span class="cline-any cline-yes">4x</span>
386
+ <span class="cline-any cline-yes">4x</span>
387
+ <span class="cline-any cline-yes">4x</span>
388
+ <span class="cline-any cline-yes">4x</span>
389
+ <span class="cline-any cline-yes">4x</span>
390
+ <span class="cline-any cline-yes">4x</span>
391
+ <span class="cline-any cline-yes">4x</span>
392
+ <span class="cline-any cline-yes">4x</span>
393
+ <span class="cline-any cline-yes">4x</span>
394
+ <span class="cline-any cline-yes">4x</span>
395
+ <span class="cline-any cline-yes">4x</span>
396
+ <span class="cline-any cline-yes">4x</span>
397
+ <span class="cline-any cline-yes">4x</span>
398
+ <span class="cline-any cline-yes">4x</span>
399
+ <span class="cline-any cline-yes">4x</span>
400
+ <span class="cline-any cline-yes">4x</span>
401
+ <span class="cline-any cline-yes">4x</span>
402
+ <span class="cline-any cline-yes">4x</span>
403
+ <span class="cline-any cline-yes">4x</span>
404
+ <span class="cline-any cline-yes">4x</span>
405
+ <span class="cline-any cline-yes">4x</span>
406
+ <span class="cline-any cline-yes">4x</span>
407
+ <span class="cline-any cline-yes">4x</span>
408
+ <span class="cline-any cline-yes">4x</span>
409
+ <span class="cline-any cline-yes">4x</span>
410
+ <span class="cline-any cline-yes">4x</span>
411
+ <span class="cline-any cline-yes">4x</span>
412
+ <span class="cline-any cline-yes">4x</span>
413
+ <span class="cline-any cline-yes">4x</span>
414
+ <span class="cline-any cline-yes">4x</span>
415
+ <span class="cline-any cline-yes">4x</span>
416
+ <span class="cline-any cline-yes">4x</span>
417
+ <span class="cline-any cline-yes">4x</span>
418
+ <span class="cline-any cline-yes">4x</span>
419
+ <span class="cline-any cline-yes">4x</span>
420
+ <span class="cline-any cline-yes">4x</span>
421
+ <span class="cline-any cline-yes">4x</span>
422
+ <span class="cline-any cline-yes">4x</span>
423
+ <span class="cline-any cline-yes">4x</span>
424
+ <span class="cline-any cline-yes">4x</span>
425
+ <span class="cline-any cline-yes">4x</span>
426
+ <span class="cline-any cline-yes">4x</span>
427
+ <span class="cline-any cline-yes">4x</span>
202
428
  <span class="cline-any cline-yes">1x</span>
203
429
  <span class="cline-any cline-yes">1x</span>
204
430
  <span class="cline-any cline-yes">1x</span>
@@ -213,14 +439,54 @@
213
439
  <span class="cline-any cline-yes">1x</span>
214
440
  <span class="cline-any cline-yes">1x</span>
215
441
  <span class="cline-any cline-yes">1x</span>
216
- <span class="cline-any cline-yes">1x</span>
217
- <span class="cline-any cline-yes">1x</span>
218
- <span class="cline-any cline-yes">1x</span>
219
- <span class="cline-any cline-yes">1x</span>
220
- <span class="cline-any cline-yes">1x</span>
221
- <span class="cline-any cline-yes">1x</span>
222
- <span class="cline-any cline-yes">1x</span>
223
- <span class="cline-any cline-yes">1x</span>
442
+ <span class="cline-any cline-yes">7x</span>
443
+ <span class="cline-any cline-yes">7x</span>
444
+ <span class="cline-any cline-yes">7x</span>
445
+ <span class="cline-any cline-yes">7x</span>
446
+ <span class="cline-any cline-yes">7x</span>
447
+ <span class="cline-any cline-yes">7x</span>
448
+ <span class="cline-any cline-yes">7x</span>
449
+ <span class="cline-any cline-yes">7x</span>
450
+ <span class="cline-any cline-yes">7x</span>
451
+ <span class="cline-any cline-yes">7x</span>
452
+ <span class="cline-any cline-yes">7x</span>
453
+ <span class="cline-any cline-yes">3x</span>
454
+ <span class="cline-any cline-yes">3x</span>
455
+ <span class="cline-any cline-yes">3x</span>
456
+ <span class="cline-any cline-yes">3x</span>
457
+ <span class="cline-any cline-yes">3x</span>
458
+ <span class="cline-any cline-yes">3x</span>
459
+ <span class="cline-any cline-yes">3x</span>
460
+ <span class="cline-any cline-yes">7x</span>
461
+ <span class="cline-any cline-yes">7x</span>
462
+ <span class="cline-any cline-yes">7x</span>
463
+ <span class="cline-any cline-yes">7x</span>
464
+ <span class="cline-any cline-yes">7x</span>
465
+ <span class="cline-any cline-yes">7x</span>
466
+ <span class="cline-any cline-yes">5x</span>
467
+ <span class="cline-any cline-yes">5x</span>
468
+ <span class="cline-any cline-yes">7x</span>
469
+ <span class="cline-any cline-yes">5x</span>
470
+ <span class="cline-any cline-yes">5x</span>
471
+ <span class="cline-any cline-yes">7x</span>
472
+ <span class="cline-any cline-yes">5x</span>
473
+ <span class="cline-any cline-yes">5x</span>
474
+ <span class="cline-any cline-yes">7x</span>
475
+ <span class="cline-any cline-yes">5x</span>
476
+ <span class="cline-any cline-yes">5x</span>
477
+ <span class="cline-any cline-yes">7x</span>
478
+ <span class="cline-any cline-yes">5x</span>
479
+ <span class="cline-any cline-yes">5x</span>
480
+ <span class="cline-any cline-yes">7x</span>
481
+ <span class="cline-any cline-yes">7x</span>
482
+ <span class="cline-any cline-yes">7x</span>
483
+ <span class="cline-any cline-yes">7x</span>
484
+ <span class="cline-any cline-yes">7x</span>
485
+ <span class="cline-any cline-yes">7x</span>
486
+ <span class="cline-any cline-yes">7x</span>
487
+ <span class="cline-any cline-yes">7x</span>
488
+ <span class="cline-any cline-yes">7x</span>
489
+ <span class="cline-any cline-yes">7x</span>
224
490
  <span class="cline-any cline-yes">1x</span>
225
491
  <span class="cline-any cline-yes">1x</span>
226
492
  <span class="cline-any cline-yes">1x</span>
@@ -294,6 +560,8 @@ Commands:
294
560
  generate-form-suite Settings POJO → Playwright form-coverage spec.ts
295
561
  generate-viewport-audit Route-list → 7 viewport × theme spec.ts
296
562
  generate-cwv-diag Route-list → CWV synthetic measurement spec.ts
563
+ doctor Diagnose project config (config-files, deps, conventions)
564
+ bootstrap Scaffold playwright.config.ts + e2e/ + generate.ts
297
565
  version Print package version
298
566
  help This message
299
567
  &nbsp;
@@ -311,8 +579,139 @@ Flags (generate-cwv-diag):
311
579
  --config &lt;path&gt; Path to JSON config (routes, thresholds, ...)
312
580
  --out &lt;path&gt; Output spec.ts path
313
581
  --stdout Print to stdout
582
+ &nbsp;
583
+ Flags (doctor):
584
+ --pwd &lt;path&gt; Project root (default: cwd)
585
+ &nbsp;
586
+ Flags (bootstrap):
587
+ --pwd &lt;path&gt; Project root (default: cwd)
588
+ --force Overwrite existing files
314
589
  `;
315
590
  }
591
+ &nbsp;
592
+ /**
593
+ * Bootstrap scaffold — visszaadja a generálandó fájlok mappáját
594
+ * ({ path → content }), a CLI ezeket beírja.
595
+ */
596
+ static bootstrapFiles(): Record&lt;string, string&gt; {
597
+ return {
598
+ 'playwright.config.ts': `import { defineConfig, devices } from '@playwright/test';
599
+ &nbsp;
600
+ export default defineConfig({
601
+ testDir: './e2e/tests',
602
+ fullyParallel: true,
603
+ retries: 0,
604
+ reporter: [['html'], ['list']],
605
+ use: {
606
+ baseURL: process.env.E2E_BASE_URL || 'http://localhost:4200',
607
+ ignoreHTTPSErrors: process.env.E2E_IGNORE_HTTPS_ERRORS === '1',
608
+ trace: 'retain-on-failure',
609
+ },
610
+ projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }],
611
+ });
612
+ `,
613
+ 'e2e/generate.ts': `import { DyE2E_FormSuite_Generator } from '@futdevpro/dynamo-e2e/generators';
614
+ import * as fs from 'fs';
615
+ import * as path from 'path';
616
+ &nbsp;
617
+ const OUT_DIR: string = path.join(__dirname, 'tests/generated');
618
+ fs.mkdirSync(OUT_DIR, { recursive: true });
619
+ &nbsp;
620
+ // Példa: 1 mintaform — bővítsd a saját Settings POJO-iddal
621
+ const exampleConfig = {
622
+ formSettings: {
623
+ key: 'login',
624
+ fields: [
625
+ { key: 'email', type: 'text', required: true, maxLength: 254 },
626
+ { key: 'password', type: 'password', required: true, minLength: 8 },
627
+ ],
628
+ },
629
+ formRoute: '/login',
630
+ formSelector: 'dynamo-form-new',
631
+ };
632
+ &nbsp;
633
+ const spec = DyE2E_FormSuite_Generator.emit(exampleConfig);
634
+ fs.writeFileSync(path.join(OUT_DIR, 'login.spec.ts'), spec);
635
+ console.log('[generate] wrote', fs.readdirSync(OUT_DIR).length, 'spec files');
636
+ `,
637
+ 'e2e/tests/.gitkeep': '',
638
+ 'e2e/tests/generated/.gitkeep': '',
639
+ 'e2e/README.md': `# E2E tests (dynamo-e2e)
640
+ &nbsp;
641
+ \`\`\`bash
642
+ # Generate
643
+ node e2e/generate.ts
644
+ &nbsp;
645
+ # Run
646
+ npx playwright test
647
+ \`\`\`
648
+ &nbsp;
649
+ See: https://github.com/futdevpro/dynamo-e2e/blob/master/__documentations/getting-started.md
650
+ `,
651
+ };
652
+ }
653
+ &nbsp;
654
+ /**
655
+ * Doctor parancs — projekt-config-validáció.
656
+ *
657
+ * Megnézi:
658
+ * - van-e `@futdevpro/dynamo-e2e` a package.json deps-jében
659
+ * - van-e `@playwright/test`
660
+ * - létezik-e `playwright.config.ts` vagy `playwright.config.js`
661
+ * - létezik-e `e2e/` vagy `tests/` mappa
662
+ * - létezik-e `.dynamo/pipeline.cicd.config.json` (FDP-project esetén)
663
+ *
664
+ * Bemenet: cwd → kimenet JSON-szerű object.
665
+ */
666
+ static doctorReport(cwd: string, fs: { existsSync: (p: string) =&gt; boolean; readFileSync: (p: string, enc: string) =&gt; string }): {
667
+ hasDynamoE2E: boolean;
668
+ hasPlaywrightTest: boolean;
669
+ hasPlaywrightConfig: boolean;
670
+ hasE2EDir: boolean;
671
+ hasCicdConfig: boolean;
672
+ suggestions: string[];
673
+ } {
674
+ const pkgJsonPath: string = `${cwd}/package.json`;
675
+ let hasDynamoE2E: boolean = false;
676
+ let hasPlaywrightTest: boolean = false;
677
+ if (fs.existsSync(pkgJsonPath)) {
678
+ try {
679
+ const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));
680
+ const allDeps: Record&lt;string, string&gt; = { ...(pkg.dependencies || {}), ...(pkg.devDependencies<span class="branch-0 cbranch-no" title="branch not covered" > || {})</span> };
681
+ hasDynamoE2E = '@futdevpro/dynamo-e2e' in allDeps;
682
+ hasPlaywrightTest = '@playwright/test' in allDeps;
683
+ } catch (e: unknown) { /* swallow */ }
684
+ }
685
+ const hasPlaywrightConfig: boolean = fs.existsSync(`${cwd}/playwright.config.ts`) || fs.existsSync(`${cwd}/playwright.config.js`);
686
+ const hasE2EDir: boolean = fs.existsSync(`${cwd}/e2e`) || fs.existsSync(`${cwd}/tests`);
687
+ const hasCicdConfig: boolean = fs.existsSync(`${cwd}/.dynamo/pipeline.cicd.config.json`);
688
+ &nbsp;
689
+ const suggestions: string[] = [];
690
+ if (!hasDynamoE2E) {
691
+ suggestions.push('Install: pnpm add -D @futdevpro/dynamo-e2e');
692
+ }
693
+ if (!hasPlaywrightTest) {
694
+ suggestions.push('Install: pnpm add -D @playwright/test');
695
+ }
696
+ if (!hasPlaywrightConfig) {
697
+ suggestions.push('Create: playwright.config.ts — lásd getting-started.md');
698
+ }
699
+ if (!hasE2EDir) {
700
+ suggestions.push('Create: e2e/ folder a generated spec-eknek');
701
+ }
702
+ if (!hasCicdConfig) {
703
+ suggestions.push('Optional: .dynamo/pipeline.cicd.config.json — Overseer CICD step (lásd overseer-step-template.md)');
704
+ }
705
+ &nbsp;
706
+ return {
707
+ hasDynamoE2E,
708
+ hasPlaywrightTest,
709
+ hasPlaywrightConfig,
710
+ hasE2EDir,
711
+ hasCicdConfig,
712
+ suggestions,
713
+ };
714
+ }
316
715
  &nbsp;
317
716
  static versionText(version: string): string {
318
717
  return `@futdevpro/dynamo-e2e ${version}`;
@@ -346,7 +745,7 @@ Flags (generate-cwv-diag):
346
745
  <div class='footer quiet pad2 space-top1 center small'>
347
746
  Code coverage generated by
348
747
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
349
- at 2026-06-10T05:40:52.028Z
748
+ at 2026-06-10T06:25:12.717Z
350
749
  </div>
351
750
  <script src="../../prettify.js"></script>
352
751
  <script>
@@ -589,7 +589,7 @@ expect(true).toBe(true);`;
589
589
  <div class='footer quiet pad2 space-top1 center small'>
590
590
  Code coverage generated by
591
591
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
592
- at 2026-06-10T05:40:52.028Z
592
+ at 2026-06-10T06:25:12.717Z
593
593
  </div>
594
594
  <script src="../../prettify.js"></script>
595
595
  <script>
@@ -205,7 +205,7 @@ ${requiredFieldCount &gt; 0
205
205
  <div class='footer quiet pad2 space-top1 center small'>
206
206
  Code coverage generated by
207
207
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
208
- at 2026-06-10T05:40:52.028Z
208
+ at 2026-06-10T06:25:12.717Z
209
209
  </div>
210
210
  <script src="../../prettify.js"></script>
211
211
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">98.83% </span>
26
+ <span class="strong">99.04% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>596/603</span>
28
+ <span class='fraction'>729/736</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">82.31% </span>
33
+ <span class="strong">83.05% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>135/164</span>
35
+ <span class='fraction'>147/177</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>19/19</span>
42
+ <span class='fraction'>21/21</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">98.83% </span>
47
+ <span class="strong">99.04% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>596/603</span>
49
+ <span class='fraction'>729/736</span>
50
50
  </div>
51
51
 
52
52
 
@@ -84,13 +84,13 @@
84
84
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
85
85
  </td>
86
86
  <td data-value="100" class="pct high">100%</td>
87
- <td data-value="92" class="abs high">92/92</td>
87
+ <td data-value="225" class="abs high">225/225</td>
88
+ <td data-value="96.42" class="pct high">96.42%</td>
89
+ <td data-value="28" class="abs high">27/28</td>
88
90
  <td data-value="100" class="pct high">100%</td>
89
- <td data-value="15" class="abs high">15/15</td>
91
+ <td data-value="6" class="abs high">6/6</td>
90
92
  <td data-value="100" class="pct high">100%</td>
91
- <td data-value="4" class="abs high">4/4</td>
92
- <td data-value="100" class="pct high">100%</td>
93
- <td data-value="92" class="abs high">92/92</td>
93
+ <td data-value="225" class="abs high">225/225</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
@@ -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-10T05:40:52.028Z
179
+ at 2026-06-10T06:25:12.717Z
180
180
  </div>
181
181
  <script src="../../prettify.js"></script>
182
182
  <script>
@@ -283,7 +283,7 @@ export class DyE2E_SpecEmission_Util {
283
283
  <div class='footer quiet pad2 space-top1 center small'>
284
284
  Code coverage generated by
285
285
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
286
- at 2026-06-10T05:40:52.028Z
286
+ at 2026-06-10T06:25:12.717Z
287
287
  </div>
288
288
  <script src="../../prettify.js"></script>
289
289
  <script>