@sun-asterisk/sungen 1.0.23 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. package/README.md +198 -74
  2. package/dist/cli/commands/add.d.ts.map +1 -1
  3. package/dist/cli/commands/add.js +5 -3
  4. package/dist/cli/commands/add.js.map +1 -1
  5. package/dist/cli/commands/generate.d.ts.map +1 -1
  6. package/dist/cli/commands/generate.js +110 -35
  7. package/dist/cli/commands/generate.js.map +1 -1
  8. package/dist/cli/index.d.ts +2 -2
  9. package/dist/cli/index.js +5 -16
  10. package/dist/cli/index.js.map +1 -1
  11. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/frame-enter-action.hbs +1 -0
  12. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/frame-exit-action.hbs +1 -0
  13. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/keyboard-global-action.hbs +1 -0
  14. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/scroll-action.hbs +1 -0
  15. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row.hbs +2 -0
  16. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/label-value-assertion.hbs +2 -0
  17. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-filter.hbs +3 -0
  18. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-index.hbs +3 -0
  19. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-column-exists.hbs +2 -0
  20. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-empty.hbs +2 -0
  21. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-count.hbs +2 -0
  22. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-exists.hbs +2 -0
  23. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-not-exists.hbs +2 -0
  24. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +1 -1
  25. package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +11 -2
  26. package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +11 -2
  27. package/dist/generators/test-generator/code-generator.d.ts +0 -1
  28. package/dist/generators/test-generator/code-generator.d.ts.map +1 -1
  29. package/dist/generators/test-generator/code-generator.js +0 -47
  30. package/dist/generators/test-generator/code-generator.js.map +1 -1
  31. package/dist/generators/test-generator/patterns/assertion-patterns.d.ts.map +1 -1
  32. package/dist/generators/test-generator/patterns/assertion-patterns.js +33 -8
  33. package/dist/generators/test-generator/patterns/assertion-patterns.js.map +1 -1
  34. package/dist/generators/test-generator/patterns/index.d.ts +4 -1
  35. package/dist/generators/test-generator/patterns/index.d.ts.map +1 -1
  36. package/dist/generators/test-generator/patterns/index.js +17 -5
  37. package/dist/generators/test-generator/patterns/index.js.map +1 -1
  38. package/dist/generators/test-generator/patterns/interaction-patterns.js +1 -1
  39. package/dist/generators/test-generator/patterns/interaction-patterns.js.map +1 -1
  40. package/dist/generators/test-generator/patterns/keyboard-patterns.d.ts +7 -0
  41. package/dist/generators/test-generator/patterns/keyboard-patterns.d.ts.map +1 -0
  42. package/dist/generators/test-generator/patterns/keyboard-patterns.js +47 -0
  43. package/dist/generators/test-generator/patterns/keyboard-patterns.js.map +1 -0
  44. package/dist/generators/test-generator/patterns/scope-patterns.d.ts +7 -0
  45. package/dist/generators/test-generator/patterns/scope-patterns.d.ts.map +1 -0
  46. package/dist/generators/test-generator/patterns/scope-patterns.js +36 -0
  47. package/dist/generators/test-generator/patterns/scope-patterns.js.map +1 -0
  48. package/dist/generators/test-generator/patterns/scroll-patterns.d.ts +7 -0
  49. package/dist/generators/test-generator/patterns/scroll-patterns.d.ts.map +1 -0
  50. package/dist/generators/test-generator/patterns/scroll-patterns.js +25 -0
  51. package/dist/generators/test-generator/patterns/scroll-patterns.js.map +1 -0
  52. package/dist/generators/test-generator/patterns/table-patterns.d.ts +7 -0
  53. package/dist/generators/test-generator/patterns/table-patterns.d.ts.map +1 -0
  54. package/dist/generators/test-generator/patterns/table-patterns.js +192 -0
  55. package/dist/generators/test-generator/patterns/table-patterns.js.map +1 -0
  56. package/dist/generators/test-generator/step-mapper.d.ts +1 -3
  57. package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
  58. package/dist/generators/test-generator/step-mapper.js +36 -34
  59. package/dist/generators/test-generator/step-mapper.js.map +1 -1
  60. package/dist/generators/test-generator/template-engine.d.ts.map +1 -1
  61. package/dist/generators/test-generator/template-engine.js +4 -1
  62. package/dist/generators/test-generator/template-engine.js.map +1 -1
  63. package/dist/generators/test-generator/types.d.ts +7 -24
  64. package/dist/generators/test-generator/types.d.ts.map +1 -1
  65. package/dist/generators/test-generator/types.js +2 -101
  66. package/dist/generators/test-generator/types.js.map +1 -1
  67. package/dist/generators/test-generator/utils/selector-resolver.d.ts +14 -0
  68. package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
  69. package/dist/generators/test-generator/utils/selector-resolver.js +37 -11
  70. package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
  71. package/dist/orchestrator/project-initializer.d.ts +8 -0
  72. package/dist/orchestrator/project-initializer.d.ts.map +1 -1
  73. package/dist/orchestrator/project-initializer.js +343 -32
  74. package/dist/orchestrator/project-initializer.js.map +1 -1
  75. package/dist/orchestrator/screen-manager.d.ts +1 -32
  76. package/dist/orchestrator/screen-manager.d.ts.map +1 -1
  77. package/dist/orchestrator/screen-manager.js +55 -216
  78. package/dist/orchestrator/screen-manager.js.map +1 -1
  79. package/dist/utils/selector-types.d.ts +1 -1
  80. package/dist/utils/selector-types.d.ts.map +1 -1
  81. package/dist/utils/selector-types.js +3 -0
  82. package/dist/utils/selector-types.js.map +1 -1
  83. package/package.json +2 -2
  84. package/src/cli/commands/add.ts +5 -3
  85. package/src/cli/commands/generate.ts +90 -38
  86. package/src/cli/index.ts +5 -16
  87. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/frame-enter-action.hbs +1 -0
  88. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/frame-exit-action.hbs +1 -0
  89. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/keyboard-global-action.hbs +1 -0
  90. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/scroll-action.hbs +1 -0
  91. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row.hbs +2 -0
  92. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/label-value-assertion.hbs +2 -0
  93. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-filter.hbs +3 -0
  94. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-index.hbs +3 -0
  95. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-column-exists.hbs +2 -0
  96. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-empty.hbs +2 -0
  97. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-count.hbs +2 -0
  98. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-exists.hbs +2 -0
  99. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-not-exists.hbs +2 -0
  100. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +1 -1
  101. package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +11 -2
  102. package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +11 -2
  103. package/src/generators/test-generator/code-generator.ts +0 -59
  104. package/src/generators/test-generator/patterns/assertion-patterns.ts +39 -8
  105. package/src/generators/test-generator/patterns/index.ts +12 -3
  106. package/src/generators/test-generator/patterns/interaction-patterns.ts +1 -1
  107. package/src/generators/test-generator/patterns/keyboard-patterns.ts +51 -0
  108. package/src/generators/test-generator/patterns/scope-patterns.ts +40 -0
  109. package/src/generators/test-generator/patterns/scroll-patterns.ts +27 -0
  110. package/src/generators/test-generator/patterns/table-patterns.ts +232 -0
  111. package/src/generators/test-generator/step-mapper.ts +39 -34
  112. package/src/generators/test-generator/template-engine.ts +3 -1
  113. package/src/generators/test-generator/types.ts +7 -112
  114. package/src/generators/test-generator/utils/selector-resolver.ts +70 -25
  115. package/src/orchestrator/project-initializer.ts +345 -32
  116. package/src/orchestrator/screen-manager.ts +61 -233
  117. package/src/utils/selector-types.ts +3 -0
  118. package/dist/cli/commands/cache-clear.d.ts +0 -3
  119. package/dist/cli/commands/cache-clear.d.ts.map +0 -1
  120. package/dist/cli/commands/cache-clear.js +0 -24
  121. package/dist/cli/commands/cache-clear.js.map +0 -1
  122. package/dist/cli/commands/full.d.ts +0 -3
  123. package/dist/cli/commands/full.d.ts.map +0 -1
  124. package/dist/cli/commands/full.js +0 -37
  125. package/dist/cli/commands/full.js.map +0 -1
  126. package/dist/cli/commands/live-scan.d.ts +0 -3
  127. package/dist/cli/commands/live-scan.d.ts.map +0 -1
  128. package/dist/cli/commands/live-scan.js +0 -78
  129. package/dist/cli/commands/live-scan.js.map +0 -1
  130. package/dist/cli/commands/map.d.ts +0 -3
  131. package/dist/cli/commands/map.d.ts.map +0 -1
  132. package/dist/cli/commands/map.js +0 -93
  133. package/dist/cli/commands/map.js.map +0 -1
  134. package/dist/cli/commands/validate.d.ts +0 -3
  135. package/dist/cli/commands/validate.d.ts.map +0 -1
  136. package/dist/cli/commands/validate.js +0 -43
  137. package/dist/cli/commands/validate.js.map +0 -1
  138. package/dist/cli/utils.d.ts +0 -6
  139. package/dist/cli/utils.d.ts.map +0 -1
  140. package/dist/cli/utils.js +0 -101
  141. package/dist/cli/utils.js.map +0 -1
  142. package/dist/config/config-loader.d.ts +0 -51
  143. package/dist/config/config-loader.d.ts.map +0 -1
  144. package/dist/config/config-loader.js +0 -216
  145. package/dist/config/config-loader.js.map +0 -1
  146. package/dist/config/config-schema.d.ts +0 -121
  147. package/dist/config/config-schema.d.ts.map +0 -1
  148. package/dist/config/config-schema.js +0 -7
  149. package/dist/config/config-schema.js.map +0 -1
  150. package/dist/core/live-scanner/config-reader.d.ts +0 -10
  151. package/dist/core/live-scanner/config-reader.d.ts.map +0 -1
  152. package/dist/core/live-scanner/config-reader.js +0 -87
  153. package/dist/core/live-scanner/config-reader.js.map +0 -1
  154. package/dist/core/live-scanner/element-finder.d.ts +0 -20
  155. package/dist/core/live-scanner/element-finder.d.ts.map +0 -1
  156. package/dist/core/live-scanner/element-finder.js +0 -486
  157. package/dist/core/live-scanner/element-finder.js.map +0 -1
  158. package/dist/core/live-scanner/index.d.ts +0 -8
  159. package/dist/core/live-scanner/index.d.ts.map +0 -1
  160. package/dist/core/live-scanner/index.js +0 -33
  161. package/dist/core/live-scanner/index.js.map +0 -1
  162. package/dist/core/live-scanner/matrix-reader.d.ts +0 -17
  163. package/dist/core/live-scanner/matrix-reader.d.ts.map +0 -1
  164. package/dist/core/live-scanner/matrix-reader.js +0 -60
  165. package/dist/core/live-scanner/matrix-reader.js.map +0 -1
  166. package/dist/core/live-scanner/matrix-writer.d.ts +0 -7
  167. package/dist/core/live-scanner/matrix-writer.d.ts.map +0 -1
  168. package/dist/core/live-scanner/matrix-writer.js +0 -103
  169. package/dist/core/live-scanner/matrix-writer.js.map +0 -1
  170. package/dist/core/live-scanner/role-fallback.d.ts +0 -15
  171. package/dist/core/live-scanner/role-fallback.d.ts.map +0 -1
  172. package/dist/core/live-scanner/role-fallback.js +0 -45
  173. package/dist/core/live-scanner/role-fallback.js.map +0 -1
  174. package/dist/core/live-scanner/scanner.d.ts +0 -13
  175. package/dist/core/live-scanner/scanner.d.ts.map +0 -1
  176. package/dist/core/live-scanner/scanner.js +0 -243
  177. package/dist/core/live-scanner/scanner.js.map +0 -1
  178. package/dist/core/live-scanner/step-replayer.d.ts +0 -26
  179. package/dist/core/live-scanner/step-replayer.d.ts.map +0 -1
  180. package/dist/core/live-scanner/step-replayer.js +0 -286
  181. package/dist/core/live-scanner/step-replayer.js.map +0 -1
  182. package/dist/core/live-scanner/types.d.ts +0 -52
  183. package/dist/core/live-scanner/types.d.ts.map +0 -1
  184. package/dist/core/live-scanner/types.js +0 -14
  185. package/dist/core/live-scanner/types.js.map +0 -1
  186. package/dist/core/selector-base/annotation-handler.d.ts +0 -45
  187. package/dist/core/selector-base/annotation-handler.d.ts.map +0 -1
  188. package/dist/core/selector-base/annotation-handler.js +0 -102
  189. package/dist/core/selector-base/annotation-handler.js.map +0 -1
  190. package/dist/core/selector-base/base-generator.d.ts +0 -49
  191. package/dist/core/selector-base/base-generator.d.ts.map +0 -1
  192. package/dist/core/selector-base/base-generator.js +0 -214
  193. package/dist/core/selector-base/base-generator.js.map +0 -1
  194. package/dist/core/selector-base/gherkin-parser.d.ts +0 -24
  195. package/dist/core/selector-base/gherkin-parser.d.ts.map +0 -1
  196. package/dist/core/selector-base/gherkin-parser.js +0 -42
  197. package/dist/core/selector-base/gherkin-parser.js.map +0 -1
  198. package/dist/core/selector-mapper/priority-mapper.d.ts +0 -74
  199. package/dist/core/selector-mapper/priority-mapper.d.ts.map +0 -1
  200. package/dist/core/selector-mapper/priority-mapper.js +0 -477
  201. package/dist/core/selector-mapper/priority-mapper.js.map +0 -1
  202. package/dist/core/ui-scanner/heuristics/base-heuristic.d.ts +0 -91
  203. package/dist/core/ui-scanner/heuristics/base-heuristic.d.ts.map +0 -1
  204. package/dist/core/ui-scanner/heuristics/base-heuristic.js +0 -175
  205. package/dist/core/ui-scanner/heuristics/base-heuristic.js.map +0 -1
  206. package/dist/core/ui-scanner/react-scanner.d.ts +0 -32
  207. package/dist/core/ui-scanner/react-scanner.d.ts.map +0 -1
  208. package/dist/core/ui-scanner/react-scanner.js +0 -163
  209. package/dist/core/ui-scanner/react-scanner.js.map +0 -1
  210. package/dist/core/ui-scanner/scanner-interface.d.ts +0 -94
  211. package/dist/core/ui-scanner/scanner-interface.d.ts.map +0 -1
  212. package/dist/core/ui-scanner/scanner-interface.js +0 -33
  213. package/dist/core/ui-scanner/scanner-interface.js.map +0 -1
  214. package/dist/core/ui-scanner/strict-scanner.d.ts +0 -81
  215. package/dist/core/ui-scanner/strict-scanner.d.ts.map +0 -1
  216. package/dist/core/ui-scanner/strict-scanner.js +0 -511
  217. package/dist/core/ui-scanner/strict-scanner.js.map +0 -1
  218. package/dist/core/validator/data-validator.d.ts +0 -38
  219. package/dist/core/validator/data-validator.d.ts.map +0 -1
  220. package/dist/core/validator/data-validator.js +0 -212
  221. package/dist/core/validator/data-validator.js.map +0 -1
  222. package/dist/core/validator/feature-validator.d.ts +0 -27
  223. package/dist/core/validator/feature-validator.d.ts.map +0 -1
  224. package/dist/core/validator/feature-validator.js +0 -182
  225. package/dist/core/validator/feature-validator.js.map +0 -1
  226. package/dist/core/validator/index.d.ts +0 -46
  227. package/dist/core/validator/index.d.ts.map +0 -1
  228. package/dist/core/validator/index.js +0 -17
  229. package/dist/core/validator/index.js.map +0 -1
  230. package/dist/core/validator/screen-validator.d.ts +0 -35
  231. package/dist/core/validator/screen-validator.d.ts.map +0 -1
  232. package/dist/core/validator/screen-validator.js +0 -195
  233. package/dist/core/validator/screen-validator.js.map +0 -1
  234. package/dist/core/validator/selector-validator.d.ts +0 -36
  235. package/dist/core/validator/selector-validator.d.ts.map +0 -1
  236. package/dist/core/validator/selector-validator.js +0 -210
  237. package/dist/core/validator/selector-validator.js.map +0 -1
  238. package/dist/external/ai-provider.d.ts +0 -60
  239. package/dist/external/ai-provider.d.ts.map +0 -1
  240. package/dist/external/ai-provider.js +0 -30
  241. package/dist/external/ai-provider.js.map +0 -1
  242. package/dist/external/anthropic-provider.d.ts +0 -29
  243. package/dist/external/anthropic-provider.d.ts.map +0 -1
  244. package/dist/external/anthropic-provider.js +0 -85
  245. package/dist/external/anthropic-provider.js.map +0 -1
  246. package/dist/generators/cache/cache-manager.d.ts +0 -66
  247. package/dist/generators/cache/cache-manager.d.ts.map +0 -1
  248. package/dist/generators/cache/cache-manager.js +0 -286
  249. package/dist/generators/cache/cache-manager.js.map +0 -1
  250. package/dist/generators/dsl-writer/index.d.ts +0 -33
  251. package/dist/generators/dsl-writer/index.d.ts.map +0 -1
  252. package/dist/generators/dsl-writer/index.js +0 -226
  253. package/dist/generators/dsl-writer/index.js.map +0 -1
  254. package/dist/generators/scaffold-generator/index.d.ts +0 -162
  255. package/dist/generators/scaffold-generator/index.d.ts.map +0 -1
  256. package/dist/generators/scaffold-generator/index.js +0 -868
  257. package/dist/generators/scaffold-generator/index.js.map +0 -1
  258. package/dist/generators/selector-mapper/ai-mapper.d.ts +0 -56
  259. package/dist/generators/selector-mapper/ai-mapper.d.ts.map +0 -1
  260. package/dist/generators/selector-mapper/ai-mapper.js +0 -457
  261. package/dist/generators/selector-mapper/ai-mapper.js.map +0 -1
  262. package/dist/generators/selector-mapper/hybrid-mapper.d.ts +0 -67
  263. package/dist/generators/selector-mapper/hybrid-mapper.d.ts.map +0 -1
  264. package/dist/generators/selector-mapper/hybrid-mapper.js +0 -349
  265. package/dist/generators/selector-mapper/hybrid-mapper.js.map +0 -1
  266. package/dist/generators/selector-mapper/index.d.ts +0 -8
  267. package/dist/generators/selector-mapper/index.d.ts.map +0 -1
  268. package/dist/generators/selector-mapper/index.js +0 -12
  269. package/dist/generators/selector-mapper/index.js.map +0 -1
  270. package/dist/generators/selector-mapper/intelligent-mapper.d.ts +0 -125
  271. package/dist/generators/selector-mapper/intelligent-mapper.d.ts.map +0 -1
  272. package/dist/generators/selector-mapper/intelligent-mapper.js +0 -391
  273. package/dist/generators/selector-mapper/intelligent-mapper.js.map +0 -1
  274. package/dist/generators/test-generator/ai-step-mapper.d.ts +0 -27
  275. package/dist/generators/test-generator/ai-step-mapper.d.ts.map +0 -1
  276. package/dist/generators/test-generator/ai-step-mapper.js +0 -204
  277. package/dist/generators/test-generator/ai-step-mapper.js.map +0 -1
  278. package/dist/generators/test-generator/auth-setup-generator.d.ts +0 -18
  279. package/dist/generators/test-generator/auth-setup-generator.d.ts.map +0 -1
  280. package/dist/generators/test-generator/auth-setup-generator.js +0 -82
  281. package/dist/generators/test-generator/auth-setup-generator.js.map +0 -1
  282. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts +0 -7
  283. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts.map +0 -1
  284. package/dist/generators/test-generator/patterns/legacy-patterns.js +0 -98
  285. package/dist/generators/test-generator/patterns/legacy-patterns.js.map +0 -1
  286. package/dist/generators/test-generator/templates/auth-setup.ts.hbs +0 -36
  287. package/dist/generators/ui-model-builder/deep-scanner.d.ts +0 -121
  288. package/dist/generators/ui-model-builder/deep-scanner.d.ts.map +0 -1
  289. package/dist/generators/ui-model-builder/deep-scanner.js +0 -1113
  290. package/dist/generators/ui-model-builder/deep-scanner.js.map +0 -1
  291. package/dist/generators/ui-model-builder/enhanced-deep-scanner.d.ts +0 -110
  292. package/dist/generators/ui-model-builder/enhanced-deep-scanner.d.ts.map +0 -1
  293. package/dist/generators/ui-model-builder/enhanced-deep-scanner.js +0 -608
  294. package/dist/generators/ui-model-builder/enhanced-deep-scanner.js.map +0 -1
  295. package/dist/generators/ui-model-builder/react-scanner.d.ts +0 -107
  296. package/dist/generators/ui-model-builder/react-scanner.d.ts.map +0 -1
  297. package/dist/generators/ui-model-builder/react-scanner.js +0 -797
  298. package/dist/generators/ui-model-builder/react-scanner.js.map +0 -1
  299. package/dist/orchestrator/cache-manager.d.ts +0 -15
  300. package/dist/orchestrator/cache-manager.d.ts.map +0 -1
  301. package/dist/orchestrator/cache-manager.js +0 -62
  302. package/dist/orchestrator/cache-manager.js.map +0 -1
  303. package/dist/orchestrator/pipeline.d.ts +0 -56
  304. package/dist/orchestrator/pipeline.d.ts.map +0 -1
  305. package/dist/orchestrator/pipeline.js +0 -298
  306. package/dist/orchestrator/pipeline.js.map +0 -1
  307. package/dist/orchestrator/reporter.d.ts +0 -15
  308. package/dist/orchestrator/reporter.d.ts.map +0 -1
  309. package/dist/orchestrator/reporter.js +0 -30
  310. package/dist/orchestrator/reporter.js.map +0 -1
  311. package/src/cli/commands/cache-clear.ts +0 -22
  312. package/src/cli/commands/full.ts +0 -35
  313. package/src/cli/commands/live-scan.ts +0 -82
  314. package/src/cli/commands/map.ts +0 -97
  315. package/src/cli/commands/validate.ts +0 -43
  316. package/src/cli/utils.ts +0 -106
  317. package/src/config/ai-providers.yaml +0 -56
  318. package/src/config/config-loader.ts +0 -248
  319. package/src/config/config-schema.ts +0 -148
  320. package/src/config/default.config.yaml +0 -107
  321. package/src/config/framework.config.yaml +0 -52
  322. package/src/config/routes.yaml +0 -31
  323. package/src/core/live-scanner/config-reader.ts +0 -57
  324. package/src/core/live-scanner/element-finder.ts +0 -541
  325. package/src/core/live-scanner/index.ts +0 -7
  326. package/src/core/live-scanner/matrix-reader.ts +0 -65
  327. package/src/core/live-scanner/matrix-writer.ts +0 -77
  328. package/src/core/live-scanner/role-fallback.ts +0 -43
  329. package/src/core/live-scanner/scanner.ts +0 -254
  330. package/src/core/live-scanner/step-replayer.ts +0 -306
  331. package/src/core/live-scanner/types.ts +0 -58
  332. package/src/core/selector-base/annotation-handler.ts +0 -127
  333. package/src/core/selector-base/base-generator.ts +0 -234
  334. package/src/core/selector-base/gherkin-parser.ts +0 -57
  335. package/src/core/selector-mapper/priority-mapper.ts +0 -607
  336. package/src/core/ui-scanner/heuristics/base-heuristic.ts +0 -216
  337. package/src/core/ui-scanner/react-scanner.ts +0 -156
  338. package/src/core/ui-scanner/scanner-interface.ts +0 -133
  339. package/src/core/ui-scanner/strict-scanner.ts +0 -629
  340. package/src/core/validator/data-validator.ts +0 -202
  341. package/src/core/validator/feature-validator.ts +0 -176
  342. package/src/core/validator/index.ts +0 -57
  343. package/src/core/validator/screen-validator.ts +0 -209
  344. package/src/core/validator/selector-validator.ts +0 -209
  345. package/src/external/ai-provider.ts +0 -90
  346. package/src/external/anthropic-provider.ts +0 -114
  347. package/src/generators/README.md +0 -410
  348. package/src/generators/cache/cache-manager.ts +0 -322
  349. package/src/generators/dsl-writer/index.ts +0 -253
  350. package/src/generators/scaffold-generator/index.ts +0 -1019
  351. package/src/generators/selector-mapper/ai-mapper.ts +0 -528
  352. package/src/generators/selector-mapper/hybrid-mapper.ts +0 -427
  353. package/src/generators/selector-mapper/index.ts +0 -10
  354. package/src/generators/selector-mapper/intelligent-mapper.ts +0 -530
  355. package/src/generators/test-generator/ai-step-mapper.ts +0 -224
  356. package/src/generators/test-generator/auth-setup-generator.ts +0 -59
  357. package/src/generators/test-generator/patterns/legacy-patterns.ts +0 -104
  358. package/src/generators/test-generator/templates/auth-setup.ts.hbs +0 -36
  359. package/src/generators/ui-model-builder/deep-scanner.ts +0 -1244
  360. package/src/generators/ui-model-builder/enhanced-deep-scanner.ts +0 -731
  361. package/src/generators/ui-model-builder/react-scanner.ts +0 -959
  362. package/src/orchestrator/cache-manager.ts +0 -32
  363. package/src/orchestrator/pipeline.ts +0 -354
  364. package/src/orchestrator/reporter.ts +0 -36
@@ -9,6 +9,7 @@ import * as path from 'path';
9
9
  export interface ScreenOptions {
10
10
  name: string;
11
11
  path?: string;
12
+ feature?: string;
12
13
  description?: string;
13
14
  }
14
15
 
@@ -25,20 +26,23 @@ export class ScreenManager {
25
26
  * Add a new screen definition
26
27
  */
27
28
  async addScreen(options: ScreenOptions): Promise<void> {
28
- console.log(`šŸ“± Adding screen: ${options.name}...\n`);
29
-
30
29
  // Validate screen name
31
30
  this.validateScreenName(options.name);
32
31
 
33
32
  // Normalize screen name for directory
34
33
  const screenName = this.normalizeScreenName(options.name);
35
34
  const screenDir = path.join(this.screensDir, screenName);
36
-
37
- // Derive filename from path or use screen name
38
- const filename = options.path
39
- ? this.extractFilenameFromPath(options.path)
40
- : screenName;
41
-
35
+
36
+ // Derive filename: --feature flag creates "<screen>-<feature>" name
37
+ let filename: string;
38
+ if (options.feature) {
39
+ filename = `${screenName}-${this.normalizeScreenName(options.feature)}`;
40
+ } else if (options.path) {
41
+ filename = this.extractFilenameFromPath(options.path);
42
+ } else {
43
+ filename = screenName;
44
+ }
45
+
42
46
  // Create directory structure
43
47
  const featuresDir = path.join(screenDir, 'features');
44
48
  const selectorsDir = path.join(screenDir, 'selectors');
@@ -46,102 +50,92 @@ export class ScreenManager {
46
50
 
47
51
  // File paths
48
52
  const featurePath = path.join(featuresDir, `${filename}.feature`);
49
- const selectorOverridePath = path.join(selectorsDir, `${filename}.override.yaml`);
50
- const testDataOverridePath = path.join(testDataDir, `${filename}.override.yaml`);
53
+ const selectorPath = path.join(selectorsDir, `${filename}.yaml`);
54
+ const testDataPath = path.join(testDataDir, `${filename}.yaml`);
51
55
 
52
56
  // Smart behavior: Create dirs only if first file
53
57
  const isFirstFile = !fs.existsSync(screenDir);
54
-
58
+
55
59
  if (isFirstFile) {
56
- console.log(`šŸ“± Creating screen: ${options.name}...\n`);
57
-
58
- // Create directories
60
+ console.log(`Creating screen: ${options.name}\n`);
61
+
59
62
  try {
60
63
  if (!fs.existsSync(this.screensDir)) {
61
64
  fs.mkdirSync(this.screensDir, { recursive: true });
62
- console.log(`āœ“ Created directory: qa/screens/\n`);
63
65
  }
64
66
  fs.mkdirSync(featuresDir, { recursive: true });
65
67
  fs.mkdirSync(selectorsDir, { recursive: true });
66
68
  fs.mkdirSync(testDataDir, { recursive: true });
67
69
  } catch (error) {
68
- console.error(`āŒ Error: Failed to create directories`);
69
- console.error(` ${error instanceof Error ? error.message : String(error)}`);
70
- console.error(' Check file permissions and try again.\n');
70
+ console.error(`Error: Failed to create directories`);
71
+ console.error(` ${error instanceof Error ? error.message : String(error)}`);
71
72
  process.exit(1);
72
73
  }
73
74
  } else {
74
- console.log(`šŸ“„ Adding feature to screen: ${options.name}...\n`);
75
+ console.log(`Adding feature to screen: ${options.name}\n`);
75
76
  }
76
-
77
+
77
78
  // Check file existence to prevent overwrite
78
79
  if (fs.existsSync(featurePath)) {
79
- console.error(`āŒ Error: Feature file "${filename}.feature" already exists`);
80
- console.error(` Path: ${featurePath}`);
81
- console.error(` Use a different --path value or delete existing file.`);
80
+ console.error(`Error: Feature file "${filename}.feature" already exists`);
81
+ console.error(` Path: ${featurePath}`);
82
+ console.error(` Use a different --path or --feature value.`);
82
83
  process.exit(1);
83
84
  }
84
85
 
85
86
  // Generate and write feature file
86
87
  const featureContent = this.generateFeatureTemplate(options, filename);
87
- try {
88
- fs.writeFileSync(featurePath, featureContent, 'utf-8');
89
- } catch (error) {
90
- console.error(`āŒ Error: Failed to create feature file at ${featurePath}`);
91
- console.error(` ${error instanceof Error ? error.message : String(error)}`);
92
- process.exit(1);
88
+ fs.writeFileSync(featurePath, featureContent, 'utf-8');
89
+
90
+ // Generate empty selector YAML (with page entry)
91
+ if (!fs.existsSync(selectorPath)) {
92
+ const pagePath = options.path || `/${screenName}`;
93
+ fs.writeFileSync(selectorPath, [
94
+ `# ${options.name} Screen Selectors`,
95
+ `# Fill via AI or manually`,
96
+ ``,
97
+ `${screenName}:`,
98
+ ` type: 'page'`,
99
+ ` value: '${pagePath}'`,
100
+ ` nth: 0`,
101
+ ``,
102
+ ].join('\n'), 'utf-8');
93
103
  }
94
104
 
95
- // Generate and write selector override file (NOT base file)
96
- const selectorOverrideContent = this.generateSelectorOverrideTemplate(filename);
97
- try {
98
- fs.writeFileSync(selectorOverridePath, selectorOverrideContent, 'utf-8');
99
- } catch (error) {
100
- console.error(`āŒ Error: Failed to create selector override file at ${selectorOverridePath}`);
101
- console.error(` ${error instanceof Error ? error.message : String(error)}`);
102
- process.exit(1);
105
+ // Generate empty test-data YAML
106
+ if (!fs.existsSync(testDataPath)) {
107
+ fs.writeFileSync(testDataPath, [
108
+ `# ${options.name} Screen Test Data`,
109
+ `# Fill via AI or manually`,
110
+ `# Reference in features using {{variable}} syntax`,
111
+ ``,
112
+ ].join('\n'), 'utf-8');
103
113
  }
104
114
 
105
- // Generate and write test data override file (NOT base file)
106
- const testDataOverrideContent = this.generateTestDataOverrideTemplate(filename);
107
- try {
108
- fs.writeFileSync(testDataOverridePath, testDataOverrideContent, 'utf-8');
109
- } catch (error) {
110
- console.error(`āŒ Error: Failed to create test data override file at ${testDataOverridePath}`);
111
- console.error(` ${error instanceof Error ? error.message : String(error)}`);
112
- process.exit(1);
113
- }
115
+ // Display success
116
+ console.log(`Created files:`);
117
+ console.log(` ${path.relative(this.cwd, featurePath)}`);
118
+ console.log(` ${path.relative(this.cwd, selectorPath)}`);
119
+ console.log(` ${path.relative(this.cwd, testDataPath)}\n`);
114
120
 
115
- // Display success message
116
- if (isFirstFile) {
117
- console.log(`āœ“ Created screen: ${options.name} at ${screenDir}`);
118
- } else {
119
- console.log(`āœ“ Added feature: ${filename} to ${screenName}`);
120
- }
121
-
122
- this.displaySuccess(options.name, filename, screenDir);
121
+ console.log('Next steps:');
122
+ console.log(` 1. Use AI (Copilot/Claude) to generate Gherkin + selectors from the live page`);
123
+ console.log(` 2. Fill in test-data values`);
124
+ console.log(` 3. Compile: sungen generate --screen ${screenName}`);
125
+ console.log(` 4. Run: npx playwright test\n`);
123
126
  }
124
127
 
125
- /**
126
- * Validate screen name
127
- */
128
128
  private validateScreenName(name: string): void {
129
129
  if (!name || name.trim().length === 0) {
130
- console.error('āŒ Error: Screen name cannot be empty');
130
+ console.error('Error: Screen name cannot be empty');
131
131
  process.exit(1);
132
132
  }
133
-
134
- // Check if name contains at least one alphanumeric character
135
133
  if (!/[a-zA-Z0-9]/.test(name)) {
136
- console.error('āŒ Error: Screen name must contain at least one alphanumeric character');
137
- console.error(' Valid examples: login, user-profile, Dashboard');
134
+ console.error('Error: Screen name must contain at least one alphanumeric character');
138
135
  process.exit(1);
139
136
  }
140
137
  }
141
138
 
142
- /**
143
- * Normalize screen name to kebab-case for filename
144
- */
145
139
  private normalizeScreenName(name: string): string {
146
140
  return name
147
141
  .toLowerCase()
@@ -150,29 +144,18 @@ export class ScreenManager {
150
144
  .replace(/-+/g, '-');
151
145
  }
152
146
 
153
- /**
154
- * Extract filename from path value
155
- */
156
147
  private extractFilenameFromPath(pathString: string): string {
157
- // Remove leading and trailing slashes
158
148
  const cleanPath = pathString.replace(/^\/+/, '').replace(/\/+$/, '');
159
-
160
- // Split by '/' and take last segment
161
149
  const segments = cleanPath.split('/');
162
150
  const lastSegment = segments[segments.length - 1];
163
-
164
- // Normalize to kebab-case
165
151
  return this.normalizeScreenName(lastSegment);
166
152
  }
167
153
 
168
- /**
169
- * Generate feature file template
170
- */
171
154
  private generateFeatureTemplate(options: ScreenOptions, filename: string): string {
172
155
  const screenName = this.normalizeScreenName(options.name);
173
156
  const featurePath = options.path || `/${screenName}`;
174
157
  const description = options.description || `interact with the ${options.name} screen`;
175
-
158
+
176
159
  return `Feature: ${options.name} Screen
177
160
 
178
161
  As a user
@@ -182,164 +165,9 @@ export class ScreenManager {
182
165
 
183
166
  @high
184
167
  Scenario: Sample scenario for ${options.name}
185
- Given User is on [${options.name}] page
168
+ Given User is on [${screenName}] page
186
169
  When User click [element] button
187
170
  Then User see [result] text with {{success}}
188
171
  `;
189
172
  }
190
-
191
- /**
192
- * Generate selector YAML template
193
- */
194
- private generateSelectorTemplate(options: ScreenOptions, filename: string): string {
195
- const timestamp = new Date().toISOString().split('T')[0];
196
- const screenPath = options.path || '';
197
-
198
- return `# ${options.name} Screen Selectors
199
- # Created: ${timestamp}
200
- ${screenPath ? `# Path: ${screenPath}` : '# Path: (not specified - update as needed)'}
201
-
202
- # Example element - replace with actual elements or use 'sungen map'
203
- #
204
- # Element structure:
205
- # key: element-identifier
206
- # locator: "" # Playwright locator
207
- # type: text|role|placeholder|testid|xpath
208
- # value: "text content" # Element value/text/label
209
- # name: "Display Name" # Optional: readable name
210
- # nth: 0 # Optional: element index if multiple matches
211
-
212
- # element:
213
- # locator: ""
214
- # type: role
215
- # value: "button"
216
- # name: "element"
217
- # nth: 0
218
-
219
- # Next steps:
220
- # 1. Edit the feature file: qa/screens/${filename}/features/${filename}.feature
221
- # 2. Run: sungen map --screen ${filename}
222
- # This will populate selectors from your feature file
223
- #
224
- # Documentation: https://github.com/sun-asterisk/sungen
225
- `;
226
- }
227
-
228
- /**
229
- * Generate test data YAML template
230
- */
231
- private generateTestDataTemplate(options: ScreenOptions): string {
232
- const timestamp = new Date().toISOString().split('T')[0];
233
-
234
- return `# ${options.name} Screen Test Data
235
- # Created: ${timestamp}
236
-
237
- # Define test data variables here
238
- # Example:
239
- # success: "Operation completed successfully"
240
- # username: "testuser@example.com"
241
- # password: "SecurePassword123"
242
-
243
- # Next steps:
244
- # 1. Add test data variables referenced in your feature scenarios
245
- # 2. Use {{variable}} syntax in your feature files to reference these values
246
- `;
247
- }
248
-
249
- /**
250
- * Generate selector override YAML template (empty with guidelines)
251
- */
252
- private generateSelectorOverrideTemplate(filename: string): string {
253
- return `# ${filename}.override.yaml - User Override File
254
- # This file will NEVER be modified by 'sungen map' command
255
- # Use this to override auto-generated selectors or add custom ones
256
- #
257
- # Format:
258
- # element.key:
259
- # locator: "css-locator-here" # Optional: custom CSS locator
260
- # type: role|testid|placeholder|label|text
261
- # value: "value-for-type"
262
- # name: "Display Name" # Optional
263
- # nth: 0 # Optional: element index
264
- #
265
- # Examples:
266
- # email.field:
267
- # type: testid
268
- # value: "login-email"
269
- #
270
- # submit.button:
271
- # type: role
272
- # value: "button"
273
- # name: "Sign In"
274
- #
275
- # custom.element:
276
- # locator: "#my-custom-id"
277
- # type: placeholder
278
- # value: "Enter text"
279
- #
280
- # Leave empty if no overrides needed
281
- # Base selectors will be auto-generated by: sungen map --screen ${filename}
282
- `;
283
- }
284
-
285
- /**
286
- * Generate test-data override YAML template (empty with guidelines)
287
- */
288
- private generateTestDataOverrideTemplate(filename: string): string {
289
- return `# ${filename}.override.yaml - User Override File
290
- # This file will NEVER be modified by 'sungen map' command
291
- # Use this to override auto-generated test data or add custom data
292
- #
293
- # Format:
294
- # variable_name: "value"
295
- #
296
- # nested:
297
- # variable: "value"
298
- #
299
- # array_example:
300
- # - "item1"
301
- # - "item2"
302
- #
303
- # Examples:
304
- # # Simple string override
305
- # valid_email: "custom@example.com"
306
- #
307
- # # Nested object override
308
- # api:
309
- # url: "https://staging.example.com"
310
- # timeout: 5000
311
- #
312
- # # Array override
313
- # test_users:
314
- # - "user1@example.com"
315
- # - "user2@example.com"
316
- #
317
- # Leave empty if no overrides needed
318
- # Base test data will be auto-generated by: sungen map --screen ${filename}
319
- `;
320
- }
321
-
322
- /**
323
- * Display success message with next steps
324
- */
325
- private displaySuccess(name: string, filename: string, screenDir: string): void {
326
- console.log('āœ… Screen definition created successfully!\n');
327
- console.log(`Screen: ${name}`);
328
- console.log(`Path: ${screenDir}\n`);
329
-
330
- console.log('Created files:');
331
- console.log(` šŸ“„ ${path.join(screenDir, 'features', `${filename}.feature`)}`);
332
- console.log(` šŸ“ ${path.join(screenDir, 'selectors', `${filename}.override.yaml`)} (user-editable)`);
333
- console.log(` šŸ“ ${path.join(screenDir, 'test-data', `${filename}.override.yaml`)} (user-editable)\n`);
334
-
335
- console.log('šŸ“Œ Note: Override files will NEVER be modified by automation');
336
- console.log(' Edit these files to customize selectors and test data\n');
337
-
338
- console.log('Next steps:');
339
- console.log(` 1. Edit the Gherkin feature file to define test scenarios`);
340
- console.log(` 2. Run: sungen map --screen ${name}`);
341
- console.log(` This will generate BASE selector and test-data files`);
342
- console.log(` (Override files remain untouched)\n`);
343
- console.log('Documentation: https://github.com/sun-asterisk/sungen');
344
- }
345
173
  }
@@ -12,6 +12,9 @@ export const VALID_SELECTOR_TYPES = [
12
12
  'column',
13
13
  'locator',
14
14
  'id',
15
+ 'upload',
16
+ 'frame',
17
+ 'table',
15
18
  ] as const;
16
19
 
17
20
  export type SelectorType = (typeof VALID_SELECTOR_TYPES)[number];
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerCacheClearCommand(program: Command): void;
3
- //# sourceMappingURL=cache-clear.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,24 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerFullCommand(program: Command): void;
3
- //# sourceMappingURL=full.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,37 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerLiveScanCommand(program: Command): void;
3
- //# sourceMappingURL=live-scan.d.ts.map
@@ -1 +0,0 @@
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,78 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.registerLiveScanCommand = registerLiveScanCommand;
4
- function registerLiveScanCommand(program) {
5
- program
6
- .command('live-scan')
7
- .description('Scan a live site to discover real selectors for Gherkin element references')
8
- .requiredOption('-s, --screen <name>', 'Screen name to scan')
9
- .option('--url <baseUrl>', 'Override base URL (default: read from playwright.config.ts)')
10
- .option('--headed', 'Launch browser in headed (visible) mode', false)
11
- .option('--auth-dir <path>', 'Directory containing auth storage state files', 'specs/.auth')
12
- .option('-f, --force', 'Force rescan all elements, ignoring existing results', false)
13
- .action(async (options) => {
14
- try {
15
- const { LiveScanner } = require('../../core/live-scanner');
16
- console.log('\nšŸ” Sungen Live Scanner\n');
17
- console.log(`šŸ“ Screen: ${options.screen}`);
18
- console.log(`šŸ–„ļø Mode: ${options.headed ? 'headed' : 'headless'}`);
19
- if (options.force) {
20
- console.log(`šŸ”„ Force mode: rescanning all elements`);
21
- }
22
- const scanner = new LiveScanner({
23
- baseUrl: options.url,
24
- screenName: options.screen,
25
- screensDir: 'qa/screens',
26
- headed: options.headed,
27
- authDir: options.authDir,
28
- force: options.force,
29
- });
30
- const results = await scanner.scan();
31
- // Print final summary
32
- console.log('\nšŸ“Š SCAN SUMMARY\n');
33
- let totalElements = 0;
34
- let totalResolved = 0;
35
- let totalWarnings = 0;
36
- let totalUnresolved = 0;
37
- let totalSkipped = 0;
38
- for (const result of results) {
39
- for (const scenario of Object.values(result.scenarios)) {
40
- for (const element of Object.values(scenario.elements)) {
41
- totalElements++;
42
- if (element.skipped) {
43
- totalSkipped++;
44
- totalResolved++;
45
- }
46
- else if (element.matchMethod === 'unresolved') {
47
- totalUnresolved++;
48
- }
49
- else {
50
- totalResolved++;
51
- if (element.warning)
52
- totalWarnings++;
53
- }
54
- }
55
- }
56
- }
57
- console.log(`Total Elements: ${totalElements}`);
58
- console.log(`Resolved: ${totalResolved}`);
59
- if (totalSkipped > 0) {
60
- console.log(`Skipped (cached): ${totalSkipped}`);
61
- }
62
- console.log(`Warnings: ${totalWarnings}`);
63
- console.log(`Unresolved: ${totalUnresolved}`);
64
- if (totalUnresolved > 0) {
65
- console.log(`\nāš ļø ${totalUnresolved} element(s) could not be found on the live site`);
66
- }
67
- if (totalResolved > 0) {
68
- console.log(`\nāœ… Live scan complete. Run 'sungen map --screen ${options.screen}' to generate selectors.`);
69
- }
70
- console.log('');
71
- }
72
- catch (error) {
73
- console.error('\nāŒ Live scan failed:', error.message);
74
- process.exit(1);
75
- }
76
- });
77
- }
78
- //# sourceMappingURL=live-scan.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"live-scan.js","sourceRoot":"","sources":["../../../src/cli/commands/live-scan.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerMapCommand(program: Command): void;
3
- //# sourceMappingURL=map.d.ts.map
@@ -1 +0,0 @@
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"}