@sun-asterisk/sungen 1.0.20 → 1.0.22

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 (294) hide show
  1. package/dist/cli/commands/add.d.ts +3 -0
  2. package/dist/cli/commands/add.d.ts.map +1 -0
  3. package/dist/cli/commands/add.js +27 -0
  4. package/dist/cli/commands/add.js.map +1 -0
  5. package/dist/cli/commands/cache-clear.d.ts +3 -0
  6. package/dist/cli/commands/cache-clear.d.ts.map +1 -0
  7. package/dist/cli/commands/cache-clear.js +24 -0
  8. package/dist/cli/commands/cache-clear.js.map +1 -0
  9. package/dist/cli/commands/full.d.ts +3 -0
  10. package/dist/cli/commands/full.d.ts.map +1 -0
  11. package/dist/cli/commands/full.js +37 -0
  12. package/dist/cli/commands/full.js.map +1 -0
  13. package/dist/cli/commands/generate.d.ts +3 -0
  14. package/dist/cli/commands/generate.d.ts.map +1 -0
  15. package/dist/cli/commands/generate.js +53 -0
  16. package/dist/cli/commands/generate.js.map +1 -0
  17. package/dist/cli/commands/init.d.ts +3 -0
  18. package/dist/cli/commands/init.d.ts.map +1 -0
  19. package/dist/cli/commands/init.js +20 -0
  20. package/dist/cli/commands/init.js.map +1 -0
  21. package/dist/cli/commands/live-scan.d.ts +3 -0
  22. package/dist/cli/commands/live-scan.d.ts.map +1 -0
  23. package/dist/cli/commands/{live-scan-command.js → live-scan.js} +8 -15
  24. package/dist/cli/commands/live-scan.js.map +1 -0
  25. package/dist/cli/commands/makeauth.d.ts +3 -0
  26. package/dist/cli/commands/makeauth.d.ts.map +1 -0
  27. package/dist/cli/commands/makeauth.js +76 -0
  28. package/dist/cli/commands/makeauth.js.map +1 -0
  29. package/dist/cli/commands/map.d.ts +3 -0
  30. package/dist/cli/commands/map.d.ts.map +1 -0
  31. package/dist/cli/commands/map.js +93 -0
  32. package/dist/cli/commands/map.js.map +1 -0
  33. package/dist/cli/commands/validate.d.ts +3 -0
  34. package/dist/cli/commands/validate.d.ts.map +1 -0
  35. package/dist/cli/commands/validate.js +43 -0
  36. package/dist/cli/commands/validate.js.map +1 -0
  37. package/dist/cli/index.js +29 -442
  38. package/dist/cli/index.js.map +1 -1
  39. package/dist/cli/types.d.ts +9 -0
  40. package/dist/cli/types.d.ts.map +1 -0
  41. package/dist/cli/types.js +7 -0
  42. package/dist/cli/types.js.map +1 -0
  43. package/dist/cli/utils.d.ts +6 -0
  44. package/dist/cli/utils.d.ts.map +1 -0
  45. package/dist/cli/utils.js +101 -0
  46. package/dist/cli/utils.js.map +1 -0
  47. package/dist/core/live-scanner/element-finder.d.ts.map +1 -1
  48. package/dist/core/live-scanner/element-finder.js +138 -22
  49. package/dist/core/live-scanner/element-finder.js.map +1 -1
  50. package/dist/core/live-scanner/matrix-reader.d.ts.map +1 -1
  51. package/dist/core/live-scanner/matrix-reader.js +2 -40
  52. package/dist/core/live-scanner/matrix-reader.js.map +1 -1
  53. package/dist/core/live-scanner/matrix-writer.d.ts.map +1 -1
  54. package/dist/core/live-scanner/matrix-writer.js +14 -4
  55. package/dist/core/live-scanner/matrix-writer.js.map +1 -1
  56. package/dist/core/live-scanner/step-replayer.d.ts.map +1 -1
  57. package/dist/core/live-scanner/step-replayer.js +7 -0
  58. package/dist/core/live-scanner/step-replayer.js.map +1 -1
  59. package/dist/core/validator/selector-validator.d.ts.map +1 -1
  60. package/dist/core/validator/selector-validator.js +2 -1
  61. package/dist/core/validator/selector-validator.js.map +1 -1
  62. package/dist/generators/scaffold-generator/index.d.ts +2 -1
  63. package/dist/generators/scaffold-generator/index.d.ts.map +1 -1
  64. package/dist/generators/scaffold-generator/index.js +21 -1
  65. package/dist/generators/scaffold-generator/index.js.map +1 -1
  66. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/click-select-action.hbs +2 -0
  67. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-role-with-data.hbs +1 -0
  68. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-role.hbs +1 -0
  69. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/checked-assertion.hbs +2 -1
  70. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/column-cell-assertion.hbs +3 -0
  71. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/contain-text-assertion.hbs +2 -1
  72. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/count-assertion.hbs +2 -1
  73. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-assertion.hbs +2 -1
  74. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-filter-assertion.hbs +2 -1
  75. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-role-variable-assertion.hbs +4 -3
  76. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-variable-assertion.hbs +2 -1
  77. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/empty-assertion.hbs +2 -1
  78. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/enabled-assertion.hbs +2 -1
  79. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/focused-assertion.hbs +2 -1
  80. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/have-text-assertion.hbs +2 -1
  81. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-dialog-heading-assertion.hbs +2 -0
  82. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-filter-assertion.hbs +2 -1
  83. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-role-variable-assertion.hbs +4 -3
  84. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-variable-assertion.hbs +2 -1
  85. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/is-hidden-assertion.hbs +1 -0
  86. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/list-item-count-assertion.hbs +2 -1
  87. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/not-checked-assertion.hbs +2 -1
  88. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/page-assertion.hbs +1 -0
  89. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-assertion.hbs +2 -1
  90. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-dialog-heading-assertion.hbs +2 -0
  91. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-locator-variable-assertion.hbs +2 -1
  92. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-role-variable-assertion.hbs +4 -3
  93. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +2 -1
  94. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-variable-assertion.hbs +1 -0
  95. package/dist/generators/test-generator/adapters/playwright/templates/steps/navigation/navigation.hbs +1 -1
  96. package/dist/generators/test-generator/adapters/playwright/templates/steps/navigation/wait-for-element-with-text.hbs +1 -1
  97. package/dist/generators/test-generator/patterns/assertion-patterns.d.ts.map +1 -1
  98. package/dist/generators/test-generator/patterns/assertion-patterns.js +95 -58
  99. package/dist/generators/test-generator/patterns/assertion-patterns.js.map +1 -1
  100. package/dist/generators/test-generator/patterns/form-patterns.d.ts +0 -2
  101. package/dist/generators/test-generator/patterns/form-patterns.d.ts.map +1 -1
  102. package/dist/generators/test-generator/patterns/form-patterns.js +34 -47
  103. package/dist/generators/test-generator/patterns/form-patterns.js.map +1 -1
  104. package/dist/generators/test-generator/patterns/index.d.ts +3 -1
  105. package/dist/generators/test-generator/patterns/index.d.ts.map +1 -1
  106. package/dist/generators/test-generator/patterns/index.js +20 -3
  107. package/dist/generators/test-generator/patterns/index.js.map +1 -1
  108. package/dist/generators/test-generator/patterns/interaction-patterns.d.ts +0 -1
  109. package/dist/generators/test-generator/patterns/interaction-patterns.d.ts.map +1 -1
  110. package/dist/generators/test-generator/patterns/interaction-patterns.js +44 -85
  111. package/dist/generators/test-generator/patterns/interaction-patterns.js.map +1 -1
  112. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts +7 -0
  113. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts.map +1 -0
  114. package/dist/generators/test-generator/patterns/legacy-patterns.js +98 -0
  115. package/dist/generators/test-generator/patterns/legacy-patterns.js.map +1 -0
  116. package/dist/generators/test-generator/patterns/navigation-patterns.d.ts +0 -2
  117. package/dist/generators/test-generator/patterns/navigation-patterns.d.ts.map +1 -1
  118. package/dist/generators/test-generator/patterns/navigation-patterns.js +14 -42
  119. package/dist/generators/test-generator/patterns/navigation-patterns.js.map +1 -1
  120. package/dist/generators/test-generator/patterns/setup-patterns.d.ts +0 -1
  121. package/dist/generators/test-generator/patterns/setup-patterns.d.ts.map +1 -1
  122. package/dist/generators/test-generator/patterns/setup-patterns.js +23 -35
  123. package/dist/generators/test-generator/patterns/setup-patterns.js.map +1 -1
  124. package/dist/generators/test-generator/patterns/types.d.ts +18 -3
  125. package/dist/generators/test-generator/patterns/types.d.ts.map +1 -1
  126. package/dist/generators/test-generator/step-mapper.d.ts +0 -15
  127. package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
  128. package/dist/generators/test-generator/step-mapper.js +4 -106
  129. package/dist/generators/test-generator/step-mapper.js.map +1 -1
  130. package/dist/{executor/test-generator.d.ts → generators/test-generator/types.d.ts} +4 -25
  131. package/dist/generators/test-generator/types.d.ts.map +1 -0
  132. package/dist/generators/test-generator/types.js +106 -0
  133. package/dist/generators/test-generator/types.js.map +1 -0
  134. package/dist/generators/test-generator/utils/data-resolver.d.ts.map +1 -1
  135. package/dist/generators/test-generator/utils/data-resolver.js +8 -17
  136. package/dist/generators/test-generator/utils/data-resolver.js.map +1 -1
  137. package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
  138. package/dist/generators/test-generator/utils/selector-resolver.js +10 -18
  139. package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
  140. package/dist/orchestrator/cache-manager.d.ts +1 -23
  141. package/dist/orchestrator/cache-manager.d.ts.map +1 -1
  142. package/dist/orchestrator/cache-manager.js +1 -87
  143. package/dist/orchestrator/cache-manager.js.map +1 -1
  144. package/dist/orchestrator/pipeline.d.ts +11 -28
  145. package/dist/orchestrator/pipeline.d.ts.map +1 -1
  146. package/dist/orchestrator/pipeline.js +52 -371
  147. package/dist/orchestrator/pipeline.js.map +1 -1
  148. package/dist/orchestrator/reporter.d.ts +1 -1
  149. package/dist/orchestrator/reporter.d.ts.map +1 -1
  150. package/dist/orchestrator/screen-manager.js +1 -1
  151. package/dist/orchestrator/screen-manager.js.map +1 -1
  152. package/dist/utils/feature-finder.d.ts +9 -0
  153. package/dist/utils/feature-finder.d.ts.map +1 -0
  154. package/dist/utils/feature-finder.js +67 -0
  155. package/dist/utils/feature-finder.js.map +1 -0
  156. package/dist/utils/screen-paths.d.ts +10 -0
  157. package/dist/utils/screen-paths.d.ts.map +1 -0
  158. package/dist/utils/screen-paths.js +73 -0
  159. package/dist/utils/screen-paths.js.map +1 -0
  160. package/dist/utils/selector-loader.d.ts +6 -0
  161. package/dist/utils/selector-loader.d.ts.map +1 -0
  162. package/dist/utils/selector-loader.js +20 -0
  163. package/dist/utils/selector-loader.js.map +1 -0
  164. package/dist/utils/selector-types.d.ts +7 -0
  165. package/dist/utils/selector-types.d.ts.map +1 -0
  166. package/dist/utils/selector-types.js +19 -0
  167. package/dist/utils/selector-types.js.map +1 -0
  168. package/dist/utils/test-data-loader.d.ts +6 -0
  169. package/dist/utils/test-data-loader.d.ts.map +1 -0
  170. package/dist/utils/test-data-loader.js +20 -0
  171. package/dist/utils/test-data-loader.js.map +1 -0
  172. package/dist/utils/yaml-io.d.ts +14 -0
  173. package/dist/utils/yaml-io.d.ts.map +1 -0
  174. package/dist/utils/yaml-io.js +72 -0
  175. package/dist/utils/yaml-io.js.map +1 -0
  176. package/package.json +1 -1
  177. package/src/cli/commands/add.ts +25 -0
  178. package/src/cli/commands/cache-clear.ts +22 -0
  179. package/src/cli/commands/full.ts +35 -0
  180. package/src/cli/commands/generate.ts +55 -0
  181. package/src/cli/commands/init.ts +17 -0
  182. package/src/cli/commands/{live-scan-command.ts → live-scan.ts} +8 -17
  183. package/src/cli/commands/makeauth.ts +77 -0
  184. package/src/cli/commands/map.ts +97 -0
  185. package/src/cli/commands/validate.ts +43 -0
  186. package/src/cli/index.ts +32 -473
  187. package/src/cli/types.ts +9 -0
  188. package/src/cli/utils.ts +106 -0
  189. package/src/core/live-scanner/element-finder.ts +142 -21
  190. package/src/core/live-scanner/matrix-reader.ts +2 -8
  191. package/src/core/live-scanner/matrix-writer.ts +14 -4
  192. package/src/core/live-scanner/step-replayer.ts +7 -0
  193. package/src/core/validator/selector-validator.ts +3 -2
  194. package/src/generators/scaffold-generator/index.ts +23 -2
  195. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/click-select-action.hbs +2 -0
  196. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-role-with-data.hbs +1 -0
  197. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-role.hbs +1 -0
  198. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/checked-assertion.hbs +2 -1
  199. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/column-cell-assertion.hbs +3 -0
  200. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/contain-text-assertion.hbs +2 -1
  201. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/count-assertion.hbs +2 -1
  202. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-assertion.hbs +2 -1
  203. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-filter-assertion.hbs +2 -1
  204. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-role-variable-assertion.hbs +4 -3
  205. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-variable-assertion.hbs +2 -1
  206. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/empty-assertion.hbs +2 -1
  207. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/enabled-assertion.hbs +2 -1
  208. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/focused-assertion.hbs +2 -1
  209. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/have-text-assertion.hbs +2 -1
  210. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-dialog-heading-assertion.hbs +2 -0
  211. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-filter-assertion.hbs +2 -1
  212. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-role-variable-assertion.hbs +4 -3
  213. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-variable-assertion.hbs +2 -1
  214. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/is-hidden-assertion.hbs +1 -0
  215. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/list-item-count-assertion.hbs +2 -1
  216. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/not-checked-assertion.hbs +2 -1
  217. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/page-assertion.hbs +1 -0
  218. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-assertion.hbs +2 -1
  219. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-dialog-heading-assertion.hbs +2 -0
  220. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-locator-variable-assertion.hbs +2 -1
  221. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-role-variable-assertion.hbs +4 -3
  222. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +2 -1
  223. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-variable-assertion.hbs +1 -0
  224. package/src/generators/test-generator/adapters/playwright/templates/steps/navigation/navigation.hbs +1 -1
  225. package/src/generators/test-generator/adapters/playwright/templates/steps/navigation/wait-for-element-with-text.hbs +1 -1
  226. package/src/generators/test-generator/patterns/assertion-patterns.ts +102 -62
  227. package/src/generators/test-generator/patterns/form-patterns.ts +38 -60
  228. package/src/generators/test-generator/patterns/index.ts +22 -4
  229. package/src/generators/test-generator/patterns/interaction-patterns.ts +47 -107
  230. package/src/generators/test-generator/patterns/legacy-patterns.ts +104 -0
  231. package/src/generators/test-generator/patterns/navigation-patterns.ts +27 -69
  232. package/src/generators/test-generator/patterns/setup-patterns.ts +23 -41
  233. package/src/generators/test-generator/patterns/types.ts +26 -9
  234. package/src/generators/test-generator/step-mapper.ts +4 -124
  235. package/src/generators/test-generator/types.ts +131 -0
  236. package/src/generators/test-generator/utils/data-resolver.ts +8 -13
  237. package/src/generators/test-generator/utils/selector-resolver.ts +15 -17
  238. package/src/orchestrator/cache-manager.ts +1 -107
  239. package/src/orchestrator/pipeline.ts +58 -433
  240. package/src/orchestrator/reporter.ts +1 -1
  241. package/src/orchestrator/screen-manager.ts +1 -1
  242. package/src/utils/feature-finder.ts +33 -0
  243. package/src/utils/screen-paths.ts +37 -0
  244. package/src/utils/selector-loader.ts +23 -0
  245. package/src/utils/selector-types.ts +17 -0
  246. package/src/utils/test-data-loader.ts +23 -0
  247. package/src/utils/yaml-io.ts +33 -0
  248. package/dist/cli/commands/auto-tag-command.d.ts +0 -8
  249. package/dist/cli/commands/auto-tag-command.d.ts.map +0 -1
  250. package/dist/cli/commands/auto-tag-command.js +0 -104
  251. package/dist/cli/commands/auto-tag-command.js.map +0 -1
  252. package/dist/cli/commands/live-scan-command.d.ts +0 -9
  253. package/dist/cli/commands/live-scan-command.d.ts.map +0 -1
  254. package/dist/cli/commands/live-scan-command.js.map +0 -1
  255. package/dist/executor/playwright/playwright-generator.d.ts +0 -33
  256. package/dist/executor/playwright/playwright-generator.d.ts.map +0 -1
  257. package/dist/executor/playwright/playwright-generator.js +0 -136
  258. package/dist/executor/playwright/playwright-generator.js.map +0 -1
  259. package/dist/executor/test-generator.d.ts.map +0 -1
  260. package/dist/executor/test-generator.js +0 -30
  261. package/dist/executor/test-generator.js.map +0 -1
  262. package/dist/generators/cli.d.ts +0 -7
  263. package/dist/generators/cli.d.ts.map +0 -1
  264. package/dist/generators/cli.js +0 -570
  265. package/dist/generators/cli.js.map +0 -1
  266. package/dist/input/cli-adapter.d.ts +0 -75
  267. package/dist/input/cli-adapter.d.ts.map +0 -1
  268. package/dist/input/cli-adapter.js +0 -218
  269. package/dist/input/cli-adapter.js.map +0 -1
  270. package/dist/input/config-adapter.d.ts +0 -25
  271. package/dist/input/config-adapter.d.ts.map +0 -1
  272. package/dist/input/config-adapter.js +0 -70
  273. package/dist/input/config-adapter.js.map +0 -1
  274. package/dist/input/input-adapter.d.ts +0 -28
  275. package/dist/input/input-adapter.d.ts.map +0 -1
  276. package/dist/input/input-adapter.js +0 -17
  277. package/dist/input/input-adapter.js.map +0 -1
  278. package/dist/input/vscode-adapter.d.ts +0 -62
  279. package/dist/input/vscode-adapter.d.ts.map +0 -1
  280. package/dist/input/vscode-adapter.js +0 -64
  281. package/dist/input/vscode-adapter.js.map +0 -1
  282. package/dist/tools/auto-tagger.d.ts +0 -107
  283. package/dist/tools/auto-tagger.d.ts.map +0 -1
  284. package/dist/tools/auto-tagger.js +0 -502
  285. package/dist/tools/auto-tagger.js.map +0 -1
  286. package/src/cli/commands/auto-tag-command.ts +0 -80
  287. package/src/executor/playwright/playwright-generator.ts +0 -125
  288. package/src/executor/test-generator.ts +0 -90
  289. package/src/generators/cli.ts +0 -640
  290. package/src/input/cli-adapter.ts +0 -233
  291. package/src/input/config-adapter.ts +0 -71
  292. package/src/input/input-adapter.ts +0 -32
  293. package/src/input/vscode-adapter.ts +0 -90
  294. package/src/tools/auto-tagger.ts +0 -572
@@ -1,17 +1,8 @@
1
- /**
2
- * Live Scan CLI Command
3
- * Launches a browser, replays Gherkin steps, and produces .live-scan.yaml matrix files.
4
- * Auto-detects baseURL from playwright.config.ts.
5
- */
6
-
7
1
  import { Command } from 'commander';
8
- import { RuntimeConfig } from '../../config/config-schema';
9
- import { LiveScanner } from '../../core/live-scanner';
10
-
11
- export function createLiveScanCommand(config: RuntimeConfig): Command {
12
- const cmd = new Command('live-scan');
13
2
 
14
- cmd
3
+ export function registerLiveScanCommand(program: Command): void {
4
+ program
5
+ .command('live-scan')
15
6
  .description('Scan a live site to discover real selectors for Gherkin element references')
16
7
  .requiredOption('-s, --screen <name>', 'Screen name to scan')
17
8
  .option('--url <baseUrl>', 'Override base URL (default: read from playwright.config.ts)')
@@ -20,6 +11,8 @@ export function createLiveScanCommand(config: RuntimeConfig): Command {
20
11
  .option('-f, --force', 'Force rescan all elements, ignoring existing results', false)
21
12
  .action(async (options) => {
22
13
  try {
14
+ const { LiveScanner } = require('../../core/live-scanner');
15
+
23
16
  console.log('\n🔍 Sungen Live Scanner\n');
24
17
  console.log(`📍 Screen: ${options.screen}`);
25
18
  console.log(`🖥️ Mode: ${options.headed ? 'headed' : 'headless'}`);
@@ -28,7 +21,7 @@ export function createLiveScanCommand(config: RuntimeConfig): Command {
28
21
  }
29
22
 
30
23
  const scanner = new LiveScanner({
31
- baseUrl: options.url, // undefined = auto-detect from playwright.config.ts
24
+ baseUrl: options.url,
32
25
  screenName: options.screen,
33
26
  screensDir: 'qa/screens',
34
27
  headed: options.headed,
@@ -48,8 +41,8 @@ export function createLiveScanCommand(config: RuntimeConfig): Command {
48
41
  let totalSkipped = 0;
49
42
 
50
43
  for (const result of results) {
51
- for (const scenario of Object.values(result.scenarios)) {
52
- for (const element of Object.values(scenario.elements)) {
44
+ for (const scenario of Object.values(result.scenarios) as any[]) {
45
+ for (const element of Object.values(scenario.elements) as any[]) {
53
46
  totalElements++;
54
47
  if ((element as any).skipped) {
55
48
  totalSkipped++;
@@ -86,6 +79,4 @@ export function createLiveScanCommand(config: RuntimeConfig): Command {
86
79
  process.exit(1);
87
80
  }
88
81
  });
89
-
90
- return cmd;
91
82
  }
@@ -0,0 +1,77 @@
1
+ import { Command } from 'commander';
2
+
3
+ export function registerMakeauthCommand(program: Command): void {
4
+ program
5
+ .command('makeauth <name>')
6
+ .description('Generate auth state by opening browser for manual SSO login')
7
+ .option('-u, --url <url>', 'Base URL of the application')
8
+ .option('-p, --path <path>', 'Login page path (default: /login)')
9
+ .option('-o, --output <dir>', 'Output directory (default: specs/.auth)')
10
+ .option('-t, --timeout <ms>', 'Overall timeout in milliseconds (default: 180000)')
11
+ .option('--nav-timeout <ms>', 'Navigation timeout in milliseconds')
12
+ .option('--stability-wait <ms>', 'Wait time to confirm login stability')
13
+ .option('--headless', 'Run in headless mode (not recommended for SSO)')
14
+ .option('-l, --list', 'List existing auth states')
15
+ .option('--verify', 'Verify an existing auth state is still valid')
16
+ .option('--export', 'Export auth state as base64 (for CI)')
17
+ .action(async (name: string, options: any) => {
18
+ try {
19
+ const { AuthMaker } = require('../../tools/auth-maker');
20
+
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
+
30
+ if (options.list) {
31
+ const authStates = authMaker.listAuth();
32
+ if (authStates.length === 0) {
33
+ console.log('No auth states found.');
34
+ } else {
35
+ console.log('Available auth states:');
36
+ for (const state of authStates) {
37
+ console.log(` - ${state}`);
38
+ }
39
+ }
40
+ return;
41
+ }
42
+
43
+ if (options.verify) {
44
+ const isValid = await authMaker.verifyAuth(name);
45
+ process.exit(isValid ? 0 : 1);
46
+ }
47
+
48
+ if (options.export) {
49
+ const base64 = authMaker.exportAuth(name);
50
+ if (base64) {
51
+ console.log('');
52
+ console.log('Base64 Auth State (for CI):');
53
+ console.log('========================================');
54
+ console.log(base64);
55
+ console.log('========================================');
56
+ console.log('');
57
+ console.log('Save this to CI secret: AUTH_STATE_' + name.toUpperCase());
58
+ }
59
+ return;
60
+ }
61
+
62
+ await authMaker.makeAuth({
63
+ name,
64
+ baseURL: options.url,
65
+ loginPath: options.path,
66
+ outputDir: options.output,
67
+ timeout: options.timeout ? parseInt(options.timeout, 10) : undefined,
68
+ navigationTimeout: options.navTimeout ? parseInt(options.navTimeout, 10) : undefined,
69
+ stabilityWait: options.stabilityWait ? parseInt(options.stabilityWait, 10) : undefined,
70
+ headless: options.headless,
71
+ });
72
+ } catch (error) {
73
+ console.error('❌ Auth generation failed:', error);
74
+ process.exit(1);
75
+ }
76
+ });
77
+ }
@@ -0,0 +1,97 @@
1
+ import { Command } from 'commander';
2
+ import { ConfigLoader } from '../../config/config-loader';
3
+
4
+ export function registerMapCommand(program: Command): void {
5
+ program
6
+ .command('map')
7
+ .description('Generate selector and test-data YAML from Gherkin feature files')
8
+ .option('-s, --screen <name>', 'Screen name (reads from qa/screens/<name>/features/)')
9
+ .option('--file <path>', 'Single feature file path (generates selectors next to features folder)')
10
+ .option('-o, --output <dir>', 'Output directory for generated files')
11
+ .option('-f, --force', 'Force overwrite existing YAML files and rescan all elements')
12
+ .option('--skip-live-scan', 'Skip live-scan before mapping (live-scan runs by default)')
13
+ .option('--headed', 'Launch browser in headed mode during live-scan', false)
14
+ .option('--auth-dir <path>', 'Auth storage state directory for live-scan', 'specs/.auth')
15
+ .option('-v, --verbose', 'Detailed output')
16
+ .action(async (options) => {
17
+ try {
18
+ const path = require('path');
19
+ const cliOptions = {
20
+ ...program.opts(),
21
+ ...options,
22
+ };
23
+ const config = new ConfigLoader().load(cliOptions);
24
+ const { ScaffoldGenerator } = require('../../generators/scaffold-generator');
25
+
26
+ const generator = new ScaffoldGenerator();
27
+
28
+ if (options.screen) {
29
+ const screensDir = options.output || 'qa/screens';
30
+ const forceOverwrite = cliOptions.force || false;
31
+
32
+ // Run live-scan by default before mapping (skip with --skip-live-scan)
33
+ if (!options.skipLiveScan) {
34
+ const { LiveScanner } = require('../../core/live-scanner');
35
+ console.log('🔍 Running live-scan before mapping...\n');
36
+
37
+ const scanner = new LiveScanner({
38
+ screenName: options.screen,
39
+ screensDir,
40
+ headed: options.headed,
41
+ authDir: options.authDir,
42
+ });
43
+
44
+ await scanner.scan();
45
+ console.log('');
46
+ }
47
+
48
+ if (forceOverwrite) {
49
+ console.log(`Mapping screen: ${options.screen} (force: selectors will be overwritten)\n`);
50
+ } else {
51
+ console.log(`Mapping screen: ${options.screen}\n`);
52
+ }
53
+
54
+ const results = generator.processScreen(options.screen, screensDir, forceOverwrite);
55
+
56
+ for (const result of results) {
57
+ console.log(`✓ Mapped ${result.featureFile}.feature`);
58
+
59
+ if (result.selectorsSkipped) {
60
+ console.log(` ⊘ ${path.basename(result.selectorsPath)} (skipped - already exists)`);
61
+ } else {
62
+ console.log(` → ${path.basename(result.selectorsPath)} (${result.elementCount} elements)`);
63
+ }
64
+
65
+ if (result.testDataMerged) {
66
+ console.log(` ↻ ${path.basename(result.testDataPath)} (smart-merged — ${result.dataRefCount} variables)\n`);
67
+ } else {
68
+ console.log(` → ${path.basename(result.testDataPath)} (${result.dataRefCount} variables)\n`);
69
+ }
70
+ }
71
+
72
+ console.log(`Next step: sungen generate --screen ${options.screen}`);
73
+ console.log(' This will create the test specs based on the mapped selectors and test data.');
74
+ } else if (options.file) {
75
+ const deriveOutputDir = (featureFilePath: string): string => {
76
+ const featureDir = path.dirname(featureFilePath);
77
+ if (featureDir.includes('features')) {
78
+ return featureDir.replace(/features\/?$/, 'selectors/screens');
79
+ }
80
+ return path.join(featureDir, '..', 'selectors', 'screens');
81
+ };
82
+
83
+ const outputDir = options.output || deriveOutputDir(options.file);
84
+ const forceOverwrite = cliOptions.force || false;
85
+ console.log(`Mapping from file: ${options.file}\n`);
86
+ const result = generator.processFeatureFile(options.file, outputDir, forceOverwrite);
87
+ console.log(`✓ Generated: ${result.outputPath} (${result.elementCount} elements)`);
88
+ } else {
89
+ console.error('❌ Error: Please specify --screen <name> or --file <path>');
90
+ process.exit(1);
91
+ }
92
+ } catch (error) {
93
+ console.error('❌ Mapping failed:', error);
94
+ process.exit(1);
95
+ }
96
+ });
97
+ }
@@ -0,0 +1,43 @@
1
+ import { Command } from 'commander';
2
+ import { ValidationResult } from '../../core/validator';
3
+ import { printValidationResult } from '../utils';
4
+
5
+ export function registerValidateCommand(program: Command): void {
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
+
16
+ const validator = new ScreenValidator({
17
+ verbose: options.verbose,
18
+ });
19
+
20
+ let result: ValidationResult;
21
+ if (options.screen) {
22
+ console.log(`Validating screen: ${options.screen}\n`);
23
+ result = validator.validateScreen(options.screen);
24
+ } else {
25
+ console.log('Validating all screens...\n');
26
+ result = validator.validateAll();
27
+ }
28
+
29
+ if (options.json) {
30
+ console.log(JSON.stringify(result, null, 2));
31
+ } else {
32
+ printValidationResult(result, options.verbose);
33
+ }
34
+
35
+ if (!result.valid) {
36
+ process.exit(1);
37
+ }
38
+ } catch (error) {
39
+ console.error('❌ Validation failed:', error);
40
+ process.exit(1);
41
+ }
42
+ });
43
+ }