@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
@@ -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,16 +1,9 @@
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)')
@@ -19,14 +12,15 @@ function createLiveScanCommand(config) {
19
12
  .option('-f, --force', 'Force rescan all elements, ignoring existing results', false)
20
13
  .action(async (options) => {
21
14
  try {
15
+ const { LiveScanner } = require('../../core/live-scanner');
22
16
  console.log('\n🔍 Sungen Live Scanner\n');
23
17
  console.log(`📍 Screen: ${options.screen}`);
24
18
  console.log(`🖥️ Mode: ${options.headed ? 'headed' : 'headless'}`);
25
19
  if (options.force) {
26
20
  console.log(`🔄 Force mode: rescanning all elements`);
27
21
  }
28
- const scanner = new live_scanner_1.LiveScanner({
29
- baseUrl: options.url, // undefined = auto-detect from playwright.config.ts
22
+ const scanner = new LiveScanner({
23
+ baseUrl: options.url,
30
24
  screenName: options.screen,
31
25
  screensDir: 'qa/screens',
32
26
  headed: options.headed,
@@ -80,6 +74,5 @@ function createLiveScanCommand(config) {
80
74
  process.exit(1);
81
75
  }
82
76
  });
83
- return cmd;
84
77
  }
85
- //# 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"}