@sun-asterisk/sungen 1.0.20 → 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 (286) 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/matrix-reader.d.ts.map +1 -1
  48. package/dist/core/live-scanner/matrix-reader.js +2 -40
  49. package/dist/core/live-scanner/matrix-reader.js.map +1 -1
  50. package/dist/core/live-scanner/step-replayer.d.ts.map +1 -1
  51. package/dist/core/live-scanner/step-replayer.js +7 -0
  52. package/dist/core/live-scanner/step-replayer.js.map +1 -1
  53. package/dist/core/validator/selector-validator.d.ts.map +1 -1
  54. package/dist/core/validator/selector-validator.js +2 -1
  55. package/dist/core/validator/selector-validator.js.map +1 -1
  56. package/dist/generators/scaffold-generator/index.d.ts +2 -1
  57. package/dist/generators/scaffold-generator/index.d.ts.map +1 -1
  58. package/dist/generators/scaffold-generator/index.js +21 -1
  59. package/dist/generators/scaffold-generator/index.js.map +1 -1
  60. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/click-select-action.hbs +2 -0
  61. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-role-with-data.hbs +1 -0
  62. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-role.hbs +1 -0
  63. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/checked-assertion.hbs +2 -1
  64. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/column-cell-assertion.hbs +3 -0
  65. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/contain-text-assertion.hbs +2 -1
  66. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/count-assertion.hbs +2 -1
  67. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-assertion.hbs +2 -1
  68. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-filter-assertion.hbs +2 -1
  69. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-role-variable-assertion.hbs +4 -3
  70. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-variable-assertion.hbs +2 -1
  71. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/empty-assertion.hbs +2 -1
  72. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/enabled-assertion.hbs +2 -1
  73. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/focused-assertion.hbs +2 -1
  74. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/have-text-assertion.hbs +2 -1
  75. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-dialog-heading-assertion.hbs +2 -0
  76. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-filter-assertion.hbs +2 -1
  77. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-role-variable-assertion.hbs +4 -3
  78. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-variable-assertion.hbs +2 -1
  79. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/is-hidden-assertion.hbs +1 -0
  80. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/list-item-count-assertion.hbs +2 -1
  81. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/not-checked-assertion.hbs +2 -1
  82. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/page-assertion.hbs +1 -0
  83. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-assertion.hbs +2 -1
  84. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-dialog-heading-assertion.hbs +2 -0
  85. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-locator-variable-assertion.hbs +2 -1
  86. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-role-variable-assertion.hbs +4 -3
  87. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +2 -1
  88. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-variable-assertion.hbs +1 -0
  89. package/dist/generators/test-generator/adapters/playwright/templates/steps/navigation/navigation.hbs +1 -1
  90. package/dist/generators/test-generator/adapters/playwright/templates/steps/navigation/wait-for-element-with-text.hbs +1 -1
  91. package/dist/generators/test-generator/patterns/assertion-patterns.d.ts.map +1 -1
  92. package/dist/generators/test-generator/patterns/assertion-patterns.js +95 -58
  93. package/dist/generators/test-generator/patterns/assertion-patterns.js.map +1 -1
  94. package/dist/generators/test-generator/patterns/form-patterns.d.ts +0 -2
  95. package/dist/generators/test-generator/patterns/form-patterns.d.ts.map +1 -1
  96. package/dist/generators/test-generator/patterns/form-patterns.js +34 -47
  97. package/dist/generators/test-generator/patterns/form-patterns.js.map +1 -1
  98. package/dist/generators/test-generator/patterns/index.d.ts +3 -1
  99. package/dist/generators/test-generator/patterns/index.d.ts.map +1 -1
  100. package/dist/generators/test-generator/patterns/index.js +20 -3
  101. package/dist/generators/test-generator/patterns/index.js.map +1 -1
  102. package/dist/generators/test-generator/patterns/interaction-patterns.d.ts +0 -1
  103. package/dist/generators/test-generator/patterns/interaction-patterns.d.ts.map +1 -1
  104. package/dist/generators/test-generator/patterns/interaction-patterns.js +44 -85
  105. package/dist/generators/test-generator/patterns/interaction-patterns.js.map +1 -1
  106. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts +7 -0
  107. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts.map +1 -0
  108. package/dist/generators/test-generator/patterns/legacy-patterns.js +98 -0
  109. package/dist/generators/test-generator/patterns/legacy-patterns.js.map +1 -0
  110. package/dist/generators/test-generator/patterns/navigation-patterns.d.ts +0 -2
  111. package/dist/generators/test-generator/patterns/navigation-patterns.d.ts.map +1 -1
  112. package/dist/generators/test-generator/patterns/navigation-patterns.js +14 -42
  113. package/dist/generators/test-generator/patterns/navigation-patterns.js.map +1 -1
  114. package/dist/generators/test-generator/patterns/setup-patterns.d.ts +0 -1
  115. package/dist/generators/test-generator/patterns/setup-patterns.d.ts.map +1 -1
  116. package/dist/generators/test-generator/patterns/setup-patterns.js +23 -35
  117. package/dist/generators/test-generator/patterns/setup-patterns.js.map +1 -1
  118. package/dist/generators/test-generator/patterns/types.d.ts +18 -3
  119. package/dist/generators/test-generator/patterns/types.d.ts.map +1 -1
  120. package/dist/generators/test-generator/step-mapper.d.ts +0 -15
  121. package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
  122. package/dist/generators/test-generator/step-mapper.js +4 -106
  123. package/dist/generators/test-generator/step-mapper.js.map +1 -1
  124. package/dist/{executor/test-generator.d.ts → generators/test-generator/types.d.ts} +4 -25
  125. package/dist/generators/test-generator/types.d.ts.map +1 -0
  126. package/dist/generators/test-generator/types.js +106 -0
  127. package/dist/generators/test-generator/types.js.map +1 -0
  128. package/dist/generators/test-generator/utils/data-resolver.d.ts.map +1 -1
  129. package/dist/generators/test-generator/utils/data-resolver.js +8 -17
  130. package/dist/generators/test-generator/utils/data-resolver.js.map +1 -1
  131. package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
  132. package/dist/generators/test-generator/utils/selector-resolver.js +10 -18
  133. package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
  134. package/dist/orchestrator/cache-manager.d.ts +1 -23
  135. package/dist/orchestrator/cache-manager.d.ts.map +1 -1
  136. package/dist/orchestrator/cache-manager.js +1 -87
  137. package/dist/orchestrator/cache-manager.js.map +1 -1
  138. package/dist/orchestrator/pipeline.d.ts +11 -28
  139. package/dist/orchestrator/pipeline.d.ts.map +1 -1
  140. package/dist/orchestrator/pipeline.js +52 -371
  141. package/dist/orchestrator/pipeline.js.map +1 -1
  142. package/dist/orchestrator/reporter.d.ts +1 -1
  143. package/dist/orchestrator/reporter.d.ts.map +1 -1
  144. package/dist/orchestrator/screen-manager.js +1 -1
  145. package/dist/orchestrator/screen-manager.js.map +1 -1
  146. package/dist/utils/feature-finder.d.ts +9 -0
  147. package/dist/utils/feature-finder.d.ts.map +1 -0
  148. package/dist/utils/feature-finder.js +67 -0
  149. package/dist/utils/feature-finder.js.map +1 -0
  150. package/dist/utils/screen-paths.d.ts +10 -0
  151. package/dist/utils/screen-paths.d.ts.map +1 -0
  152. package/dist/utils/screen-paths.js +73 -0
  153. package/dist/utils/screen-paths.js.map +1 -0
  154. package/dist/utils/selector-loader.d.ts +6 -0
  155. package/dist/utils/selector-loader.d.ts.map +1 -0
  156. package/dist/utils/selector-loader.js +20 -0
  157. package/dist/utils/selector-loader.js.map +1 -0
  158. package/dist/utils/selector-types.d.ts +7 -0
  159. package/dist/utils/selector-types.d.ts.map +1 -0
  160. package/dist/utils/selector-types.js +19 -0
  161. package/dist/utils/selector-types.js.map +1 -0
  162. package/dist/utils/test-data-loader.d.ts +6 -0
  163. package/dist/utils/test-data-loader.d.ts.map +1 -0
  164. package/dist/utils/test-data-loader.js +20 -0
  165. package/dist/utils/test-data-loader.js.map +1 -0
  166. package/dist/utils/yaml-io.d.ts +14 -0
  167. package/dist/utils/yaml-io.d.ts.map +1 -0
  168. package/dist/utils/yaml-io.js +72 -0
  169. package/dist/utils/yaml-io.js.map +1 -0
  170. package/package.json +1 -1
  171. package/src/cli/commands/add.ts +25 -0
  172. package/src/cli/commands/cache-clear.ts +22 -0
  173. package/src/cli/commands/full.ts +35 -0
  174. package/src/cli/commands/generate.ts +55 -0
  175. package/src/cli/commands/init.ts +17 -0
  176. package/src/cli/commands/{live-scan-command.ts → live-scan.ts} +8 -17
  177. package/src/cli/commands/makeauth.ts +77 -0
  178. package/src/cli/commands/map.ts +97 -0
  179. package/src/cli/commands/validate.ts +43 -0
  180. package/src/cli/index.ts +32 -473
  181. package/src/cli/types.ts +9 -0
  182. package/src/cli/utils.ts +106 -0
  183. package/src/core/live-scanner/matrix-reader.ts +2 -8
  184. package/src/core/live-scanner/step-replayer.ts +7 -0
  185. package/src/core/validator/selector-validator.ts +3 -2
  186. package/src/generators/scaffold-generator/index.ts +23 -2
  187. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/click-select-action.hbs +2 -0
  188. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-role-with-data.hbs +1 -0
  189. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-role.hbs +1 -0
  190. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/checked-assertion.hbs +2 -1
  191. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/column-cell-assertion.hbs +3 -0
  192. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/contain-text-assertion.hbs +2 -1
  193. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/count-assertion.hbs +2 -1
  194. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-assertion.hbs +2 -1
  195. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-filter-assertion.hbs +2 -1
  196. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-role-variable-assertion.hbs +4 -3
  197. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-variable-assertion.hbs +2 -1
  198. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/empty-assertion.hbs +2 -1
  199. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/enabled-assertion.hbs +2 -1
  200. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/focused-assertion.hbs +2 -1
  201. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/have-text-assertion.hbs +2 -1
  202. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-dialog-heading-assertion.hbs +2 -0
  203. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-filter-assertion.hbs +2 -1
  204. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-role-variable-assertion.hbs +4 -3
  205. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-variable-assertion.hbs +2 -1
  206. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/is-hidden-assertion.hbs +1 -0
  207. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/list-item-count-assertion.hbs +2 -1
  208. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/not-checked-assertion.hbs +2 -1
  209. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/page-assertion.hbs +1 -0
  210. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-assertion.hbs +2 -1
  211. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-dialog-heading-assertion.hbs +2 -0
  212. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-locator-variable-assertion.hbs +2 -1
  213. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-role-variable-assertion.hbs +4 -3
  214. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +2 -1
  215. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-variable-assertion.hbs +1 -0
  216. package/src/generators/test-generator/adapters/playwright/templates/steps/navigation/navigation.hbs +1 -1
  217. package/src/generators/test-generator/adapters/playwright/templates/steps/navigation/wait-for-element-with-text.hbs +1 -1
  218. package/src/generators/test-generator/patterns/assertion-patterns.ts +102 -62
  219. package/src/generators/test-generator/patterns/form-patterns.ts +38 -60
  220. package/src/generators/test-generator/patterns/index.ts +22 -4
  221. package/src/generators/test-generator/patterns/interaction-patterns.ts +47 -107
  222. package/src/generators/test-generator/patterns/legacy-patterns.ts +104 -0
  223. package/src/generators/test-generator/patterns/navigation-patterns.ts +27 -69
  224. package/src/generators/test-generator/patterns/setup-patterns.ts +23 -41
  225. package/src/generators/test-generator/patterns/types.ts +26 -9
  226. package/src/generators/test-generator/step-mapper.ts +4 -124
  227. package/src/generators/test-generator/types.ts +131 -0
  228. package/src/generators/test-generator/utils/data-resolver.ts +8 -13
  229. package/src/generators/test-generator/utils/selector-resolver.ts +15 -17
  230. package/src/orchestrator/cache-manager.ts +1 -107
  231. package/src/orchestrator/pipeline.ts +58 -433
  232. package/src/orchestrator/reporter.ts +1 -1
  233. package/src/orchestrator/screen-manager.ts +1 -1
  234. package/src/utils/feature-finder.ts +33 -0
  235. package/src/utils/screen-paths.ts +37 -0
  236. package/src/utils/selector-loader.ts +23 -0
  237. package/src/utils/selector-types.ts +17 -0
  238. package/src/utils/test-data-loader.ts +23 -0
  239. package/src/utils/yaml-io.ts +33 -0
  240. package/dist/cli/commands/auto-tag-command.d.ts +0 -8
  241. package/dist/cli/commands/auto-tag-command.d.ts.map +0 -1
  242. package/dist/cli/commands/auto-tag-command.js +0 -104
  243. package/dist/cli/commands/auto-tag-command.js.map +0 -1
  244. package/dist/cli/commands/live-scan-command.d.ts +0 -9
  245. package/dist/cli/commands/live-scan-command.d.ts.map +0 -1
  246. package/dist/cli/commands/live-scan-command.js.map +0 -1
  247. package/dist/executor/playwright/playwright-generator.d.ts +0 -33
  248. package/dist/executor/playwright/playwright-generator.d.ts.map +0 -1
  249. package/dist/executor/playwright/playwright-generator.js +0 -136
  250. package/dist/executor/playwright/playwright-generator.js.map +0 -1
  251. package/dist/executor/test-generator.d.ts.map +0 -1
  252. package/dist/executor/test-generator.js +0 -30
  253. package/dist/executor/test-generator.js.map +0 -1
  254. package/dist/generators/cli.d.ts +0 -7
  255. package/dist/generators/cli.d.ts.map +0 -1
  256. package/dist/generators/cli.js +0 -570
  257. package/dist/generators/cli.js.map +0 -1
  258. package/dist/input/cli-adapter.d.ts +0 -75
  259. package/dist/input/cli-adapter.d.ts.map +0 -1
  260. package/dist/input/cli-adapter.js +0 -218
  261. package/dist/input/cli-adapter.js.map +0 -1
  262. package/dist/input/config-adapter.d.ts +0 -25
  263. package/dist/input/config-adapter.d.ts.map +0 -1
  264. package/dist/input/config-adapter.js +0 -70
  265. package/dist/input/config-adapter.js.map +0 -1
  266. package/dist/input/input-adapter.d.ts +0 -28
  267. package/dist/input/input-adapter.d.ts.map +0 -1
  268. package/dist/input/input-adapter.js +0 -17
  269. package/dist/input/input-adapter.js.map +0 -1
  270. package/dist/input/vscode-adapter.d.ts +0 -62
  271. package/dist/input/vscode-adapter.d.ts.map +0 -1
  272. package/dist/input/vscode-adapter.js +0 -64
  273. package/dist/input/vscode-adapter.js.map +0 -1
  274. package/dist/tools/auto-tagger.d.ts +0 -107
  275. package/dist/tools/auto-tagger.d.ts.map +0 -1
  276. package/dist/tools/auto-tagger.js +0 -502
  277. package/dist/tools/auto-tagger.js.map +0 -1
  278. package/src/cli/commands/auto-tag-command.ts +0 -80
  279. package/src/executor/playwright/playwright-generator.ts +0 -125
  280. package/src/executor/test-generator.ts +0 -90
  281. package/src/generators/cli.ts +0 -640
  282. package/src/input/cli-adapter.ts +0 -233
  283. package/src/input/config-adapter.ts +0 -71
  284. package/src/input/input-adapter.ts +0 -32
  285. package/src/input/vscode-adapter.ts +0 -90
  286. 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
+ }