@sun-asterisk/sungen 1.0.19 → 1.0.21

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 (295) hide show
  1. package/README.md +3 -3
  2. package/dist/cli/commands/add.d.ts +3 -0
  3. package/dist/cli/commands/add.d.ts.map +1 -0
  4. package/dist/cli/commands/add.js +27 -0
  5. package/dist/cli/commands/add.js.map +1 -0
  6. package/dist/cli/commands/cache-clear.d.ts +3 -0
  7. package/dist/cli/commands/cache-clear.d.ts.map +1 -0
  8. package/dist/cli/commands/cache-clear.js +24 -0
  9. package/dist/cli/commands/cache-clear.js.map +1 -0
  10. package/dist/cli/commands/full.d.ts +3 -0
  11. package/dist/cli/commands/full.d.ts.map +1 -0
  12. package/dist/cli/commands/full.js +37 -0
  13. package/dist/cli/commands/full.js.map +1 -0
  14. package/dist/cli/commands/generate.d.ts +3 -0
  15. package/dist/cli/commands/generate.d.ts.map +1 -0
  16. package/dist/cli/commands/generate.js +53 -0
  17. package/dist/cli/commands/generate.js.map +1 -0
  18. package/dist/cli/commands/init.d.ts +3 -0
  19. package/dist/cli/commands/init.d.ts.map +1 -0
  20. package/dist/cli/commands/init.js +20 -0
  21. package/dist/cli/commands/init.js.map +1 -0
  22. package/dist/cli/commands/live-scan.d.ts +3 -0
  23. package/dist/cli/commands/live-scan.d.ts.map +1 -0
  24. package/dist/cli/commands/{live-scan-command.js → live-scan.js} +22 -16
  25. package/dist/cli/commands/live-scan.js.map +1 -0
  26. package/dist/cli/commands/makeauth.d.ts +3 -0
  27. package/dist/cli/commands/makeauth.d.ts.map +1 -0
  28. package/dist/cli/commands/makeauth.js +76 -0
  29. package/dist/cli/commands/makeauth.js.map +1 -0
  30. package/dist/cli/commands/map.d.ts +3 -0
  31. package/dist/cli/commands/map.d.ts.map +1 -0
  32. package/dist/cli/commands/map.js +93 -0
  33. package/dist/cli/commands/map.js.map +1 -0
  34. package/dist/cli/commands/validate.d.ts +3 -0
  35. package/dist/cli/commands/validate.d.ts.map +1 -0
  36. package/dist/cli/commands/validate.js +43 -0
  37. package/dist/cli/commands/validate.js.map +1 -0
  38. package/dist/cli/index.js +29 -442
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/cli/types.d.ts +9 -0
  41. package/dist/cli/types.d.ts.map +1 -0
  42. package/dist/cli/types.js +7 -0
  43. package/dist/cli/types.js.map +1 -0
  44. package/dist/cli/utils.d.ts +6 -0
  45. package/dist/cli/utils.d.ts.map +1 -0
  46. package/dist/cli/utils.js +101 -0
  47. package/dist/cli/utils.js.map +1 -0
  48. package/dist/core/live-scanner/matrix-reader.d.ts.map +1 -1
  49. package/dist/core/live-scanner/matrix-reader.js +2 -40
  50. package/dist/core/live-scanner/matrix-reader.js.map +1 -1
  51. package/dist/core/live-scanner/scanner.d.ts.map +1 -1
  52. package/dist/core/live-scanner/scanner.js +22 -4
  53. package/dist/core/live-scanner/scanner.js.map +1 -1
  54. package/dist/core/live-scanner/step-replayer.d.ts +1 -1
  55. package/dist/core/live-scanner/step-replayer.d.ts.map +1 -1
  56. package/dist/core/live-scanner/step-replayer.js +107 -6
  57. package/dist/core/live-scanner/step-replayer.js.map +1 -1
  58. package/dist/core/live-scanner/types.d.ts +1 -0
  59. package/dist/core/live-scanner/types.d.ts.map +1 -1
  60. package/dist/core/validator/selector-validator.d.ts.map +1 -1
  61. package/dist/core/validator/selector-validator.js +2 -1
  62. package/dist/core/validator/selector-validator.js.map +1 -1
  63. package/dist/generators/scaffold-generator/index.d.ts +2 -1
  64. package/dist/generators/scaffold-generator/index.d.ts.map +1 -1
  65. package/dist/generators/scaffold-generator/index.js +21 -1
  66. package/dist/generators/scaffold-generator/index.js.map +1 -1
  67. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/click-select-action.hbs +2 -0
  68. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-role-with-data.hbs +1 -0
  69. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-role.hbs +1 -0
  70. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/checked-assertion.hbs +2 -1
  71. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/column-cell-assertion.hbs +3 -0
  72. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/contain-text-assertion.hbs +2 -1
  73. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/count-assertion.hbs +2 -1
  74. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-assertion.hbs +2 -1
  75. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-filter-assertion.hbs +2 -1
  76. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-role-variable-assertion.hbs +4 -3
  77. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-variable-assertion.hbs +2 -1
  78. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/empty-assertion.hbs +2 -1
  79. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/enabled-assertion.hbs +2 -1
  80. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/focused-assertion.hbs +2 -1
  81. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/have-text-assertion.hbs +2 -1
  82. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-dialog-heading-assertion.hbs +2 -0
  83. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-filter-assertion.hbs +2 -1
  84. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-role-variable-assertion.hbs +4 -3
  85. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-variable-assertion.hbs +2 -1
  86. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/is-hidden-assertion.hbs +1 -0
  87. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/list-item-count-assertion.hbs +2 -1
  88. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/not-checked-assertion.hbs +2 -1
  89. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/page-assertion.hbs +1 -0
  90. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-assertion.hbs +2 -1
  91. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-dialog-heading-assertion.hbs +2 -0
  92. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-locator-variable-assertion.hbs +2 -1
  93. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-role-variable-assertion.hbs +4 -3
  94. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +2 -1
  95. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-variable-assertion.hbs +1 -0
  96. package/dist/generators/test-generator/adapters/playwright/templates/steps/navigation/navigation.hbs +1 -1
  97. package/dist/generators/test-generator/adapters/playwright/templates/steps/navigation/wait-for-element-with-text.hbs +1 -1
  98. package/dist/generators/test-generator/patterns/assertion-patterns.d.ts.map +1 -1
  99. package/dist/generators/test-generator/patterns/assertion-patterns.js +95 -58
  100. package/dist/generators/test-generator/patterns/assertion-patterns.js.map +1 -1
  101. package/dist/generators/test-generator/patterns/form-patterns.d.ts +0 -2
  102. package/dist/generators/test-generator/patterns/form-patterns.d.ts.map +1 -1
  103. package/dist/generators/test-generator/patterns/form-patterns.js +34 -47
  104. package/dist/generators/test-generator/patterns/form-patterns.js.map +1 -1
  105. package/dist/generators/test-generator/patterns/index.d.ts +3 -1
  106. package/dist/generators/test-generator/patterns/index.d.ts.map +1 -1
  107. package/dist/generators/test-generator/patterns/index.js +20 -3
  108. package/dist/generators/test-generator/patterns/index.js.map +1 -1
  109. package/dist/generators/test-generator/patterns/interaction-patterns.d.ts +0 -1
  110. package/dist/generators/test-generator/patterns/interaction-patterns.d.ts.map +1 -1
  111. package/dist/generators/test-generator/patterns/interaction-patterns.js +44 -85
  112. package/dist/generators/test-generator/patterns/interaction-patterns.js.map +1 -1
  113. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts +7 -0
  114. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts.map +1 -0
  115. package/dist/generators/test-generator/patterns/legacy-patterns.js +98 -0
  116. package/dist/generators/test-generator/patterns/legacy-patterns.js.map +1 -0
  117. package/dist/generators/test-generator/patterns/navigation-patterns.d.ts +0 -2
  118. package/dist/generators/test-generator/patterns/navigation-patterns.d.ts.map +1 -1
  119. package/dist/generators/test-generator/patterns/navigation-patterns.js +14 -42
  120. package/dist/generators/test-generator/patterns/navigation-patterns.js.map +1 -1
  121. package/dist/generators/test-generator/patterns/setup-patterns.d.ts +0 -1
  122. package/dist/generators/test-generator/patterns/setup-patterns.d.ts.map +1 -1
  123. package/dist/generators/test-generator/patterns/setup-patterns.js +23 -35
  124. package/dist/generators/test-generator/patterns/setup-patterns.js.map +1 -1
  125. package/dist/generators/test-generator/patterns/types.d.ts +18 -3
  126. package/dist/generators/test-generator/patterns/types.d.ts.map +1 -1
  127. package/dist/generators/test-generator/step-mapper.d.ts +0 -15
  128. package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
  129. package/dist/generators/test-generator/step-mapper.js +4 -106
  130. package/dist/generators/test-generator/step-mapper.js.map +1 -1
  131. package/dist/{executor/test-generator.d.ts → generators/test-generator/types.d.ts} +4 -25
  132. package/dist/generators/test-generator/types.d.ts.map +1 -0
  133. package/dist/generators/test-generator/types.js +106 -0
  134. package/dist/generators/test-generator/types.js.map +1 -0
  135. package/dist/generators/test-generator/utils/data-resolver.d.ts.map +1 -1
  136. package/dist/generators/test-generator/utils/data-resolver.js +8 -17
  137. package/dist/generators/test-generator/utils/data-resolver.js.map +1 -1
  138. package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
  139. package/dist/generators/test-generator/utils/selector-resolver.js +10 -18
  140. package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
  141. package/dist/orchestrator/cache-manager.d.ts +1 -23
  142. package/dist/orchestrator/cache-manager.d.ts.map +1 -1
  143. package/dist/orchestrator/cache-manager.js +1 -87
  144. package/dist/orchestrator/cache-manager.js.map +1 -1
  145. package/dist/orchestrator/pipeline.d.ts +11 -28
  146. package/dist/orchestrator/pipeline.d.ts.map +1 -1
  147. package/dist/orchestrator/pipeline.js +52 -371
  148. package/dist/orchestrator/pipeline.js.map +1 -1
  149. package/dist/orchestrator/reporter.d.ts +1 -1
  150. package/dist/orchestrator/reporter.d.ts.map +1 -1
  151. package/dist/orchestrator/screen-manager.js +1 -1
  152. package/dist/orchestrator/screen-manager.js.map +1 -1
  153. package/dist/utils/feature-finder.d.ts +9 -0
  154. package/dist/utils/feature-finder.d.ts.map +1 -0
  155. package/dist/utils/feature-finder.js +67 -0
  156. package/dist/utils/feature-finder.js.map +1 -0
  157. package/dist/utils/screen-paths.d.ts +10 -0
  158. package/dist/utils/screen-paths.d.ts.map +1 -0
  159. package/dist/utils/screen-paths.js +73 -0
  160. package/dist/utils/screen-paths.js.map +1 -0
  161. package/dist/utils/selector-loader.d.ts +6 -0
  162. package/dist/utils/selector-loader.d.ts.map +1 -0
  163. package/dist/utils/selector-loader.js +20 -0
  164. package/dist/utils/selector-loader.js.map +1 -0
  165. package/dist/utils/selector-types.d.ts +7 -0
  166. package/dist/utils/selector-types.d.ts.map +1 -0
  167. package/dist/utils/selector-types.js +19 -0
  168. package/dist/utils/selector-types.js.map +1 -0
  169. package/dist/utils/test-data-loader.d.ts +6 -0
  170. package/dist/utils/test-data-loader.d.ts.map +1 -0
  171. package/dist/utils/test-data-loader.js +20 -0
  172. package/dist/utils/test-data-loader.js.map +1 -0
  173. package/dist/utils/yaml-io.d.ts +14 -0
  174. package/dist/utils/yaml-io.d.ts.map +1 -0
  175. package/dist/utils/yaml-io.js +72 -0
  176. package/dist/utils/yaml-io.js.map +1 -0
  177. package/package.json +1 -1
  178. package/src/cli/commands/add.ts +25 -0
  179. package/src/cli/commands/cache-clear.ts +22 -0
  180. package/src/cli/commands/full.ts +35 -0
  181. package/src/cli/commands/generate.ts +55 -0
  182. package/src/cli/commands/init.ts +17 -0
  183. package/src/cli/commands/{live-scan-command.ts → live-scan.ts} +21 -18
  184. package/src/cli/commands/makeauth.ts +77 -0
  185. package/src/cli/commands/map.ts +97 -0
  186. package/src/cli/commands/validate.ts +43 -0
  187. package/src/cli/index.ts +32 -473
  188. package/src/cli/types.ts +9 -0
  189. package/src/cli/utils.ts +106 -0
  190. package/src/core/live-scanner/matrix-reader.ts +2 -8
  191. package/src/core/live-scanner/scanner.ts +27 -4
  192. package/src/core/live-scanner/step-replayer.ts +92 -6
  193. package/src/core/live-scanner/types.ts +1 -0
  194. package/src/core/validator/selector-validator.ts +3 -2
  195. package/src/generators/scaffold-generator/index.ts +23 -2
  196. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/click-select-action.hbs +2 -0
  197. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-role-with-data.hbs +1 -0
  198. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-role.hbs +1 -0
  199. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/checked-assertion.hbs +2 -1
  200. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/column-cell-assertion.hbs +3 -0
  201. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/contain-text-assertion.hbs +2 -1
  202. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/count-assertion.hbs +2 -1
  203. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-assertion.hbs +2 -1
  204. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-filter-assertion.hbs +2 -1
  205. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-role-variable-assertion.hbs +4 -3
  206. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-variable-assertion.hbs +2 -1
  207. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/empty-assertion.hbs +2 -1
  208. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/enabled-assertion.hbs +2 -1
  209. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/focused-assertion.hbs +2 -1
  210. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/have-text-assertion.hbs +2 -1
  211. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-dialog-heading-assertion.hbs +2 -0
  212. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-filter-assertion.hbs +2 -1
  213. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-role-variable-assertion.hbs +4 -3
  214. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-variable-assertion.hbs +2 -1
  215. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/is-hidden-assertion.hbs +1 -0
  216. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/list-item-count-assertion.hbs +2 -1
  217. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/not-checked-assertion.hbs +2 -1
  218. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/page-assertion.hbs +1 -0
  219. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-assertion.hbs +2 -1
  220. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-dialog-heading-assertion.hbs +2 -0
  221. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-locator-variable-assertion.hbs +2 -1
  222. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-role-variable-assertion.hbs +4 -3
  223. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +2 -1
  224. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-variable-assertion.hbs +1 -0
  225. package/src/generators/test-generator/adapters/playwright/templates/steps/navigation/navigation.hbs +1 -1
  226. package/src/generators/test-generator/adapters/playwright/templates/steps/navigation/wait-for-element-with-text.hbs +1 -1
  227. package/src/generators/test-generator/patterns/assertion-patterns.ts +102 -62
  228. package/src/generators/test-generator/patterns/form-patterns.ts +38 -60
  229. package/src/generators/test-generator/patterns/index.ts +22 -4
  230. package/src/generators/test-generator/patterns/interaction-patterns.ts +47 -107
  231. package/src/generators/test-generator/patterns/legacy-patterns.ts +104 -0
  232. package/src/generators/test-generator/patterns/navigation-patterns.ts +27 -69
  233. package/src/generators/test-generator/patterns/setup-patterns.ts +23 -41
  234. package/src/generators/test-generator/patterns/types.ts +26 -9
  235. package/src/generators/test-generator/step-mapper.ts +4 -124
  236. package/src/generators/test-generator/types.ts +131 -0
  237. package/src/generators/test-generator/utils/data-resolver.ts +8 -13
  238. package/src/generators/test-generator/utils/selector-resolver.ts +15 -17
  239. package/src/orchestrator/cache-manager.ts +1 -107
  240. package/src/orchestrator/pipeline.ts +58 -433
  241. package/src/orchestrator/reporter.ts +1 -1
  242. package/src/orchestrator/screen-manager.ts +1 -1
  243. package/src/utils/feature-finder.ts +33 -0
  244. package/src/utils/screen-paths.ts +37 -0
  245. package/src/utils/selector-loader.ts +23 -0
  246. package/src/utils/selector-types.ts +17 -0
  247. package/src/utils/test-data-loader.ts +23 -0
  248. package/src/utils/yaml-io.ts +33 -0
  249. package/dist/cli/commands/auto-tag-command.d.ts +0 -8
  250. package/dist/cli/commands/auto-tag-command.d.ts.map +0 -1
  251. package/dist/cli/commands/auto-tag-command.js +0 -104
  252. package/dist/cli/commands/auto-tag-command.js.map +0 -1
  253. package/dist/cli/commands/live-scan-command.d.ts +0 -9
  254. package/dist/cli/commands/live-scan-command.d.ts.map +0 -1
  255. package/dist/cli/commands/live-scan-command.js.map +0 -1
  256. package/dist/executor/playwright/playwright-generator.d.ts +0 -33
  257. package/dist/executor/playwright/playwright-generator.d.ts.map +0 -1
  258. package/dist/executor/playwright/playwright-generator.js +0 -136
  259. package/dist/executor/playwright/playwright-generator.js.map +0 -1
  260. package/dist/executor/test-generator.d.ts.map +0 -1
  261. package/dist/executor/test-generator.js +0 -30
  262. package/dist/executor/test-generator.js.map +0 -1
  263. package/dist/generators/cli.d.ts +0 -7
  264. package/dist/generators/cli.d.ts.map +0 -1
  265. package/dist/generators/cli.js +0 -570
  266. package/dist/generators/cli.js.map +0 -1
  267. package/dist/input/cli-adapter.d.ts +0 -75
  268. package/dist/input/cli-adapter.d.ts.map +0 -1
  269. package/dist/input/cli-adapter.js +0 -218
  270. package/dist/input/cli-adapter.js.map +0 -1
  271. package/dist/input/config-adapter.d.ts +0 -25
  272. package/dist/input/config-adapter.d.ts.map +0 -1
  273. package/dist/input/config-adapter.js +0 -70
  274. package/dist/input/config-adapter.js.map +0 -1
  275. package/dist/input/input-adapter.d.ts +0 -28
  276. package/dist/input/input-adapter.d.ts.map +0 -1
  277. package/dist/input/input-adapter.js +0 -17
  278. package/dist/input/input-adapter.js.map +0 -1
  279. package/dist/input/vscode-adapter.d.ts +0 -62
  280. package/dist/input/vscode-adapter.d.ts.map +0 -1
  281. package/dist/input/vscode-adapter.js +0 -64
  282. package/dist/input/vscode-adapter.js.map +0 -1
  283. package/dist/tools/auto-tagger.d.ts +0 -107
  284. package/dist/tools/auto-tagger.d.ts.map +0 -1
  285. package/dist/tools/auto-tagger.js +0 -502
  286. package/dist/tools/auto-tagger.js.map +0 -1
  287. package/src/cli/commands/auto-tag-command.ts +0 -80
  288. package/src/executor/playwright/playwright-generator.ts +0 -125
  289. package/src/executor/test-generator.ts +0 -90
  290. package/src/generators/cli.ts +0 -640
  291. package/src/input/cli-adapter.ts +0 -233
  292. package/src/input/config-adapter.ts +0 -71
  293. package/src/input/input-adapter.ts +0 -32
  294. package/src/input/vscode-adapter.ts +0 -90
  295. package/src/tools/auto-tagger.ts +0 -572
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Sungen - AI-Native E2E Test Generator
2
2
 
3
- **Version**: 1.0.17
3
+ **Version**: 1.0.20
4
4
  **Deterministic-first E2E test generation**: Gherkin → Playwright tests
5
5
 
6
6
  ---
@@ -140,8 +140,8 @@ Override files (`.override.yaml`) are never overwritten by `sungen map` and take
140
140
  |---------|-------------|
141
141
  | `sungen init` | Initialize project structure |
142
142
  | `sungen add --screen <name> [--path <path>]` | Create screen definition |
143
- | `sungen live-scan --screen <name> [--headed]` | Scan live site to detect real Playwright selectors |
144
- | `sungen map --screen <name> [--force] [--scan-live]` | Generate selector/test-data YAML from Gherkin |
143
+ | `sungen live-scan --screen <name> [-f] [--headed]` | Scan live site to detect real Playwright selectors |
144
+ | `sungen map --screen <name> [--force] [--skip-live-scan]` | Generate selector/test-data YAML from Gherkin |
145
145
  | `sungen generate --screen <name> [--force]` | Generate Playwright .spec.ts |
146
146
  | `sungen full --screen <name>` | Run all: discover → map → generate |
147
147
  | `sungen auto-tag --screen <name> [--dry-run]` | Inject `data-testid` into source code |
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAddCommand(program: Command): void;
3
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsBzD"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerAddCommand = registerAddCommand;
4
+ function registerAddCommand(program) {
5
+ program
6
+ .command('add')
7
+ .description('Add screen definition with scaffolded files')
8
+ .requiredOption('--screen <name>', 'Screen name')
9
+ .option('-p, --path <path>', 'Screen route path')
10
+ .option('-d, --description <text>', 'Screen description')
11
+ .action(async (options) => {
12
+ try {
13
+ const { ScreenManager } = require('../../orchestrator/screen-manager');
14
+ const manager = new ScreenManager();
15
+ await manager.addScreen({
16
+ name: options.screen,
17
+ path: options.path,
18
+ description: options.description,
19
+ });
20
+ }
21
+ catch (error) {
22
+ console.error('❌ Add screen failed:', error);
23
+ process.exit(1);
24
+ }
25
+ });
26
+ }
27
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":";;AAEA,gDAsBC;AAtBD,SAAgB,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,6CAA6C,CAAC;SAC1D,cAAc,CAAC,iBAAiB,EAAE,aAAa,CAAC;SAChD,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;SAChD,MAAM,CAAC,0BAA0B,EAAE,oBAAoB,CAAC;SACxD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,mCAAmC,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;YAEpC,MAAM,OAAO,CAAC,SAAS,CAAC;gBACtB,IAAI,EAAE,OAAO,CAAC,MAAM;gBACpB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerCacheClearCommand(program: Command): void;
3
+ //# sourceMappingURL=cache-clear.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-clear.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cache-clear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiBhE"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerCacheClearCommand = registerCacheClearCommand;
4
+ const config_loader_1 = require("../../config/config-loader");
5
+ const cache_manager_1 = require("../../orchestrator/cache-manager");
6
+ function registerCacheClearCommand(program) {
7
+ program
8
+ .command('cache-clear')
9
+ .description('Clear all caches')
10
+ .action(async () => {
11
+ try {
12
+ const config = new config_loader_1.ConfigLoader().load({});
13
+ const cacheManager = new cache_manager_1.CacheManager(config);
14
+ console.log('🗑️ Clearing cache...');
15
+ await cacheManager.clear();
16
+ console.log('✅ Cache cleared successfully');
17
+ }
18
+ catch (error) {
19
+ console.error('❌ Cache clear failed:', error);
20
+ process.exit(1);
21
+ }
22
+ });
23
+ }
24
+ //# sourceMappingURL=cache-clear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-clear.js","sourceRoot":"","sources":["../../../src/cli/commands/cache-clear.ts"],"names":[],"mappings":";;AAIA,8DAiBC;AApBD,8DAA0D;AAC1D,oEAAgE;AAEhE,SAAgB,yBAAyB,CAAC,OAAgB;IACxD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,kBAAkB,CAAC;SAC/B,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,4BAAY,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3C,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,MAAM,CAAC,CAAC;YAE9C,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACtC,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerFullCommand(program: Command): void;
3
+ //# sourceMappingURL=full.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/full.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8B1D"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerFullCommand = registerFullCommand;
4
+ const config_loader_1 = require("../../config/config-loader");
5
+ const pipeline_1 = require("../../orchestrator/pipeline");
6
+ function registerFullCommand(program) {
7
+ program
8
+ .command('full')
9
+ .description('Run full pipeline (live-scan + map + generate)')
10
+ .option('-s, --screen <name>', 'Process specific screen (optional)')
11
+ .option('-f, --force', 'Force rescan and overwrite')
12
+ .option('--headed', 'Launch browser in headed mode during live-scan', false)
13
+ .option('--auth-dir <path>', 'Auth storage state directory for live-scan', 'specs/.auth')
14
+ .option('--skip-live-scan', 'Skip live-scan phase')
15
+ .action(async (options) => {
16
+ try {
17
+ const cliOptions = {
18
+ ...program.opts(),
19
+ ...options,
20
+ };
21
+ const config = new config_loader_1.ConfigLoader().load(cliOptions);
22
+ const pipeline = new pipeline_1.Pipeline(config);
23
+ const screens = options.screen ? [options.screen] : undefined;
24
+ await pipeline.runFull(screens, {
25
+ headed: options.headed,
26
+ authDir: options.authDir,
27
+ skipLiveScan: options.skipLiveScan,
28
+ force: options.force,
29
+ });
30
+ }
31
+ catch (error) {
32
+ console.error('❌ Full pipeline failed:', error);
33
+ process.exit(1);
34
+ }
35
+ });
36
+ }
37
+ //# sourceMappingURL=full.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full.js","sourceRoot":"","sources":["../../../src/cli/commands/full.ts"],"names":[],"mappings":";;AAIA,kDA8BC;AAjCD,8DAA0D;AAC1D,0DAAuD;AAEvD,SAAgB,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,qBAAqB,EAAE,oCAAoC,CAAC;SACnE,MAAM,CAAC,aAAa,EAAE,4BAA4B,CAAC;SACnD,MAAM,CAAC,UAAU,EAAE,gDAAgD,EAAE,KAAK,CAAC;SAC3E,MAAM,CAAC,mBAAmB,EAAE,4CAA4C,EAAE,aAAa,CAAC;SACxF,MAAM,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;SAClD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG;gBACjB,GAAG,OAAO,CAAC,IAAI,EAAE;gBACjB,GAAG,OAAO;aACX,CAAC;YACF,MAAM,MAAM,GAAG,IAAI,4BAAY,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,IAAI,mBAAQ,CAAC,MAAM,CAAC,CAAC;YAEtC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9D,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE;gBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerGenerateCommand(program: Command): void;
3
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgD9D"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerGenerateCommand = registerGenerateCommand;
4
+ const config_loader_1 = require("../../config/config-loader");
5
+ const pipeline_1 = require("../../orchestrator/pipeline");
6
+ const utils_1 = require("../utils");
7
+ function registerGenerateCommand(program) {
8
+ program
9
+ .command('generate')
10
+ .description('Generate Playwright test code from features')
11
+ .option('--ai-mapper', 'Enable AI fallback for unknown Gherkin patterns')
12
+ .option('--framework <name>', 'Test framework (playwright, appium, integration)', 'playwright')
13
+ .option('-s, --screen <name>', 'Filter generation to specific screen')
14
+ .option('-f, --force', 'Force regeneration, bypass cache')
15
+ .option('--skip-validation', 'Skip validation before generation')
16
+ .action(async (options) => {
17
+ try {
18
+ // Run validation first (unless --skip-validation is set)
19
+ if (!options.skipValidation) {
20
+ const { ScreenValidator } = require('../../core/validator');
21
+ const validator = new ScreenValidator();
22
+ let validationResult;
23
+ if (options.screen) {
24
+ console.log(`🔍 Validating screen: ${options.screen}...\n`);
25
+ validationResult = validator.validateScreen(options.screen);
26
+ }
27
+ else {
28
+ console.log('🔍 Validating all screens...\n');
29
+ validationResult = validator.validateAll();
30
+ }
31
+ if (!validationResult.valid) {
32
+ (0, utils_1.printValidationResult)(validationResult, false);
33
+ console.error('\n❌ Validation failed. Fix errors before generating tests.');
34
+ console.error(' Tip: Use --skip-validation to bypass validation (not recommended)');
35
+ process.exit(1);
36
+ }
37
+ console.log(`✅ Validation passed (${validationResult.summary.totalFiles} files)\n`);
38
+ }
39
+ const cliOptions = {
40
+ ...program.opts(),
41
+ ...options,
42
+ };
43
+ const config = new config_loader_1.ConfigLoader().load(cliOptions);
44
+ const pipeline = new pipeline_1.Pipeline(config);
45
+ await pipeline.runTestGeneration(options.screen);
46
+ }
47
+ catch (error) {
48
+ console.error('❌ Test generation failed:', error);
49
+ process.exit(1);
50
+ }
51
+ });
52
+ }
53
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":";;AAMA,0DAgDC;AArDD,8DAA0D;AAC1D,0DAAuD;AAEvD,oCAAiD;AAEjD,SAAgB,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,aAAa,EAAE,iDAAiD,CAAC;SACxE,MAAM,CAAC,oBAAoB,EAAE,kDAAkD,EAAE,YAAY,CAAC;SAC9F,MAAM,CAAC,qBAAqB,EAAE,sCAAsC,CAAC;SACrE,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;SACzD,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,yDAAyD;YACzD,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC5B,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;gBAC5D,MAAM,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;gBAExC,IAAI,gBAAkC,CAAC;gBACvC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,CAAC,MAAM,OAAO,CAAC,CAAC;oBAC5D,gBAAgB,GAAG,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC9D,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;oBAC9C,gBAAgB,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;gBAC7C,CAAC;gBAED,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBAC5B,IAAA,6BAAqB,EAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;oBAC/C,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;oBAC5E,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;oBACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,gBAAgB,CAAC,OAAO,CAAC,UAAU,WAAW,CAAC,CAAC;YACtF,CAAC;YAED,MAAM,UAAU,GAAG;gBACjB,GAAG,OAAO,CAAC,IAAI,EAAE;gBACjB,GAAG,OAAO;aACX,CAAC;YACF,MAAM,MAAM,GAAG,IAAI,4BAAY,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,IAAI,mBAAQ,CAAC,MAAM,CAAC,CAAC;YAEtC,MAAM,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerInitCommand(program: Command): void;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAc1D"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerInitCommand = registerInitCommand;
4
+ function registerInitCommand(program) {
5
+ program
6
+ .command('init [projectName]')
7
+ .description('Initialize Sungen project (optionally create and initialize in a new project folder)')
8
+ .action(async (projectName) => {
9
+ try {
10
+ const { ProjectInitializer } = require('../../orchestrator/project-initializer');
11
+ const initializer = new ProjectInitializer();
12
+ await initializer.initialize(projectName);
13
+ }
14
+ catch (error) {
15
+ console.error('❌ Init failed:', error);
16
+ process.exit(1);
17
+ }
18
+ });
19
+ }
20
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":";;AAEA,kDAcC;AAdD,SAAgB,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,sFAAsF,CAAC;SACnG,MAAM,CAAC,KAAK,EAAE,WAAoB,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,wCAAwC,CAAC,CAAC;YACjF,MAAM,WAAW,GAAG,IAAI,kBAAkB,EAAE,CAAC;YAC7C,MAAM,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerLiveScanCommand(program: Command): void;
3
+ //# sourceMappingURL=live-scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-scan.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/live-scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+E9D"}
@@ -1,32 +1,31 @@
1
1
  "use strict";
2
- /**
3
- * Live Scan CLI Command
4
- * Launches a browser, replays Gherkin steps, and produces .live-scan.yaml matrix files.
5
- * Auto-detects baseURL from playwright.config.ts.
6
- */
7
2
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.createLiveScanCommand = createLiveScanCommand;
9
- const commander_1 = require("commander");
10
- const live_scanner_1 = require("../../core/live-scanner");
11
- function createLiveScanCommand(config) {
12
- const cmd = new commander_1.Command('live-scan');
13
- cmd
3
+ exports.registerLiveScanCommand = registerLiveScanCommand;
4
+ function registerLiveScanCommand(program) {
5
+ program
6
+ .command('live-scan')
14
7
  .description('Scan a live site to discover real selectors for Gherkin element references')
15
8
  .requiredOption('-s, --screen <name>', 'Screen name to scan')
16
9
  .option('--url <baseUrl>', 'Override base URL (default: read from playwright.config.ts)')
17
10
  .option('--headed', 'Launch browser in headed (visible) mode', false)
18
11
  .option('--auth-dir <path>', 'Directory containing auth storage state files', 'specs/.auth')
12
+ .option('-f, --force', 'Force rescan all elements, ignoring existing results', false)
19
13
  .action(async (options) => {
20
14
  try {
15
+ const { LiveScanner } = require('../../core/live-scanner');
21
16
  console.log('\n🔍 Sungen Live Scanner\n');
22
17
  console.log(`📍 Screen: ${options.screen}`);
23
18
  console.log(`🖥️ Mode: ${options.headed ? 'headed' : 'headless'}`);
24
- const scanner = new live_scanner_1.LiveScanner({
25
- baseUrl: options.url, // undefined = auto-detect from playwright.config.ts
19
+ if (options.force) {
20
+ console.log(`🔄 Force mode: rescanning all elements`);
21
+ }
22
+ const scanner = new LiveScanner({
23
+ baseUrl: options.url,
26
24
  screenName: options.screen,
27
25
  screensDir: 'qa/screens',
28
26
  headed: options.headed,
29
27
  authDir: options.authDir,
28
+ force: options.force,
30
29
  });
31
30
  const results = await scanner.scan();
32
31
  // Print final summary
@@ -35,11 +34,16 @@ function createLiveScanCommand(config) {
35
34
  let totalResolved = 0;
36
35
  let totalWarnings = 0;
37
36
  let totalUnresolved = 0;
37
+ let totalSkipped = 0;
38
38
  for (const result of results) {
39
39
  for (const scenario of Object.values(result.scenarios)) {
40
40
  for (const element of Object.values(scenario.elements)) {
41
41
  totalElements++;
42
- if (element.matchMethod === 'unresolved') {
42
+ if (element.skipped) {
43
+ totalSkipped++;
44
+ totalResolved++;
45
+ }
46
+ else if (element.matchMethod === 'unresolved') {
43
47
  totalUnresolved++;
44
48
  }
45
49
  else {
@@ -52,6 +56,9 @@ function createLiveScanCommand(config) {
52
56
  }
53
57
  console.log(`Total Elements: ${totalElements}`);
54
58
  console.log(`Resolved: ${totalResolved}`);
59
+ if (totalSkipped > 0) {
60
+ console.log(`Skipped (cached): ${totalSkipped}`);
61
+ }
55
62
  console.log(`Warnings: ${totalWarnings}`);
56
63
  console.log(`Unresolved: ${totalUnresolved}`);
57
64
  if (totalUnresolved > 0) {
@@ -67,6 +74,5 @@ function createLiveScanCommand(config) {
67
74
  process.exit(1);
68
75
  }
69
76
  });
70
- return cmd;
71
77
  }
72
- //# sourceMappingURL=live-scan-command.js.map
78
+ //# sourceMappingURL=live-scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-scan.js","sourceRoot":"","sources":["../../../src/cli/commands/live-scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerMakeauthCommand(program: Command): void;
3
+ //# sourceMappingURL=makeauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeauth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/makeauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0E9D"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerMakeauthCommand = registerMakeauthCommand;
4
+ function registerMakeauthCommand(program) {
5
+ program
6
+ .command('makeauth <name>')
7
+ .description('Generate auth state by opening browser for manual SSO login')
8
+ .option('-u, --url <url>', 'Base URL of the application')
9
+ .option('-p, --path <path>', 'Login page path (default: /login)')
10
+ .option('-o, --output <dir>', 'Output directory (default: specs/.auth)')
11
+ .option('-t, --timeout <ms>', 'Overall timeout in milliseconds (default: 180000)')
12
+ .option('--nav-timeout <ms>', 'Navigation timeout in milliseconds')
13
+ .option('--stability-wait <ms>', 'Wait time to confirm login stability')
14
+ .option('--headless', 'Run in headless mode (not recommended for SSO)')
15
+ .option('-l, --list', 'List existing auth states')
16
+ .option('--verify', 'Verify an existing auth state is still valid')
17
+ .option('--export', 'Export auth state as base64 (for CI)')
18
+ .action(async (name, options) => {
19
+ try {
20
+ const { AuthMaker } = require('../../tools/auth-maker');
21
+ const authMaker = new AuthMaker({
22
+ baseURL: options.url,
23
+ loginPath: options.path || '/login',
24
+ outputDir: options.output || 'specs/.auth',
25
+ timeout: options.timeout ? parseInt(options.timeout, 10) : undefined,
26
+ navigationTimeout: options.navTimeout ? parseInt(options.navTimeout, 10) : undefined,
27
+ stabilityWait: options.stabilityWait ? parseInt(options.stabilityWait, 10) : undefined,
28
+ });
29
+ if (options.list) {
30
+ const authStates = authMaker.listAuth();
31
+ if (authStates.length === 0) {
32
+ console.log('No auth states found.');
33
+ }
34
+ else {
35
+ console.log('Available auth states:');
36
+ for (const state of authStates) {
37
+ console.log(` - ${state}`);
38
+ }
39
+ }
40
+ return;
41
+ }
42
+ if (options.verify) {
43
+ const isValid = await authMaker.verifyAuth(name);
44
+ process.exit(isValid ? 0 : 1);
45
+ }
46
+ if (options.export) {
47
+ const base64 = authMaker.exportAuth(name);
48
+ if (base64) {
49
+ console.log('');
50
+ console.log('Base64 Auth State (for CI):');
51
+ console.log('========================================');
52
+ console.log(base64);
53
+ console.log('========================================');
54
+ console.log('');
55
+ console.log('Save this to CI secret: AUTH_STATE_' + name.toUpperCase());
56
+ }
57
+ return;
58
+ }
59
+ await authMaker.makeAuth({
60
+ name,
61
+ baseURL: options.url,
62
+ loginPath: options.path,
63
+ outputDir: options.output,
64
+ timeout: options.timeout ? parseInt(options.timeout, 10) : undefined,
65
+ navigationTimeout: options.navTimeout ? parseInt(options.navTimeout, 10) : undefined,
66
+ stabilityWait: options.stabilityWait ? parseInt(options.stabilityWait, 10) : undefined,
67
+ headless: options.headless,
68
+ });
69
+ }
70
+ catch (error) {
71
+ console.error('❌ Auth generation failed:', error);
72
+ process.exit(1);
73
+ }
74
+ });
75
+ }
76
+ //# sourceMappingURL=makeauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeauth.js","sourceRoot":"","sources":["../../../src/cli/commands/makeauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerMapCommand(program: Command): void;
3
+ //# sourceMappingURL=map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6FzD"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerMapCommand = registerMapCommand;
4
+ const config_loader_1 = require("../../config/config-loader");
5
+ function registerMapCommand(program) {
6
+ program
7
+ .command('map')
8
+ .description('Generate selector and test-data YAML from Gherkin feature files')
9
+ .option('-s, --screen <name>', 'Screen name (reads from qa/screens/<name>/features/)')
10
+ .option('--file <path>', 'Single feature file path (generates selectors next to features folder)')
11
+ .option('-o, --output <dir>', 'Output directory for generated files')
12
+ .option('-f, --force', 'Force overwrite existing YAML files and rescan all elements')
13
+ .option('--skip-live-scan', 'Skip live-scan before mapping (live-scan runs by default)')
14
+ .option('--headed', 'Launch browser in headed mode during live-scan', false)
15
+ .option('--auth-dir <path>', 'Auth storage state directory for live-scan', 'specs/.auth')
16
+ .option('-v, --verbose', 'Detailed output')
17
+ .action(async (options) => {
18
+ try {
19
+ const path = require('path');
20
+ const cliOptions = {
21
+ ...program.opts(),
22
+ ...options,
23
+ };
24
+ const config = new config_loader_1.ConfigLoader().load(cliOptions);
25
+ const { ScaffoldGenerator } = require('../../generators/scaffold-generator');
26
+ const generator = new ScaffoldGenerator();
27
+ if (options.screen) {
28
+ const screensDir = options.output || 'qa/screens';
29
+ const forceOverwrite = cliOptions.force || false;
30
+ // Run live-scan by default before mapping (skip with --skip-live-scan)
31
+ if (!options.skipLiveScan) {
32
+ const { LiveScanner } = require('../../core/live-scanner');
33
+ console.log('🔍 Running live-scan before mapping...\n');
34
+ const scanner = new LiveScanner({
35
+ screenName: options.screen,
36
+ screensDir,
37
+ headed: options.headed,
38
+ authDir: options.authDir,
39
+ });
40
+ await scanner.scan();
41
+ console.log('');
42
+ }
43
+ if (forceOverwrite) {
44
+ console.log(`Mapping screen: ${options.screen} (force: selectors will be overwritten)\n`);
45
+ }
46
+ else {
47
+ console.log(`Mapping screen: ${options.screen}\n`);
48
+ }
49
+ const results = generator.processScreen(options.screen, screensDir, forceOverwrite);
50
+ for (const result of results) {
51
+ console.log(`✓ Mapped ${result.featureFile}.feature`);
52
+ if (result.selectorsSkipped) {
53
+ console.log(` ⊘ ${path.basename(result.selectorsPath)} (skipped - already exists)`);
54
+ }
55
+ else {
56
+ console.log(` → ${path.basename(result.selectorsPath)} (${result.elementCount} elements)`);
57
+ }
58
+ if (result.testDataMerged) {
59
+ console.log(` ↻ ${path.basename(result.testDataPath)} (smart-merged — ${result.dataRefCount} variables)\n`);
60
+ }
61
+ else {
62
+ console.log(` → ${path.basename(result.testDataPath)} (${result.dataRefCount} variables)\n`);
63
+ }
64
+ }
65
+ console.log(`Next step: sungen generate --screen ${options.screen}`);
66
+ console.log(' This will create the test specs based on the mapped selectors and test data.');
67
+ }
68
+ else if (options.file) {
69
+ const deriveOutputDir = (featureFilePath) => {
70
+ const featureDir = path.dirname(featureFilePath);
71
+ if (featureDir.includes('features')) {
72
+ return featureDir.replace(/features\/?$/, 'selectors/screens');
73
+ }
74
+ return path.join(featureDir, '..', 'selectors', 'screens');
75
+ };
76
+ const outputDir = options.output || deriveOutputDir(options.file);
77
+ const forceOverwrite = cliOptions.force || false;
78
+ console.log(`Mapping from file: ${options.file}\n`);
79
+ const result = generator.processFeatureFile(options.file, outputDir, forceOverwrite);
80
+ console.log(`✓ Generated: ${result.outputPath} (${result.elementCount} elements)`);
81
+ }
82
+ else {
83
+ console.error('❌ Error: Please specify --screen <name> or --file <path>');
84
+ process.exit(1);
85
+ }
86
+ }
87
+ catch (error) {
88
+ console.error('❌ Mapping failed:', error);
89
+ process.exit(1);
90
+ }
91
+ });
92
+ }
93
+ //# sourceMappingURL=map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../../src/cli/commands/map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerValidateCommand(program: Command): void;
3
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsC9D"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerValidateCommand = registerValidateCommand;
4
+ const utils_1 = require("../utils");
5
+ function registerValidateCommand(program) {
6
+ program
7
+ .command('validate')
8
+ .description('Validate Gherkin features and selector/test-data mappings')
9
+ .option('-s, --screen <name>', 'Validate specific screen (optional, defaults to all)')
10
+ .option('--json', 'Output results as JSON')
11
+ .option('-v, --verbose', 'Show all checks, not just failures')
12
+ .action(async (options) => {
13
+ try {
14
+ const { ScreenValidator } = require('../../core/validator');
15
+ const validator = new ScreenValidator({
16
+ verbose: options.verbose,
17
+ });
18
+ let result;
19
+ if (options.screen) {
20
+ console.log(`Validating screen: ${options.screen}\n`);
21
+ result = validator.validateScreen(options.screen);
22
+ }
23
+ else {
24
+ console.log('Validating all screens...\n');
25
+ result = validator.validateAll();
26
+ }
27
+ if (options.json) {
28
+ console.log(JSON.stringify(result, null, 2));
29
+ }
30
+ else {
31
+ (0, utils_1.printValidationResult)(result, options.verbose);
32
+ }
33
+ if (!result.valid) {
34
+ process.exit(1);
35
+ }
36
+ }
37
+ catch (error) {
38
+ console.error('❌ Validation failed:', error);
39
+ process.exit(1);
40
+ }
41
+ });
42
+ }
43
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":";;AAIA,0DAsCC;AAxCD,oCAAiD;AAEjD,SAAgB,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,2DAA2D,CAAC;SACxE,MAAM,CAAC,qBAAqB,EAAE,sDAAsD,CAAC;SACrF,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;SAC1C,MAAM,CAAC,eAAe,EAAE,oCAAoC,CAAC;SAC7D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;YAE5D,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC;gBACpC,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;YAEH,IAAI,MAAwB,CAAC;YAC7B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;gBACtD,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;gBAC3C,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;YACnC,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,IAAA,6BAAqB,EAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YACjD,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}