@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
@@ -1,216 +0,0 @@
1
- /**
2
- * Base Heuristic Interface
3
- * All element detection heuristics implement this interface
4
- */
5
-
6
- import * as t from '@babel/types';
7
- import { UIElement } from '../scanner-interface';
8
-
9
- export interface ElementHeuristic {
10
- /**
11
- * Heuristic name for debugging
12
- */
13
- readonly name: string;
14
-
15
- /**
16
- * Detect if a JSX element matches this heuristic
17
- */
18
- matches(node: t.JSXElement | t.JSXFragment, context: HeuristicContext): boolean;
19
-
20
- /**
21
- * Extract UI element information from matched node
22
- */
23
- extract(node: t.JSXElement | t.JSXFragment, context: HeuristicContext): UIElement | null;
24
- }
25
-
26
- /**
27
- * Context passed to heuristics for element detection
28
- */
29
- export interface HeuristicContext {
30
- /**
31
- * Current component name
32
- */
33
- componentName?: string;
34
-
35
- /**
36
- * Parent component name
37
- */
38
- parentComponent?: string;
39
-
40
- /**
41
- * Current depth in component tree
42
- */
43
- depth?: number;
44
-
45
- /**
46
- * Element counter for ID generation
47
- */
48
- elementCounter: number;
49
-
50
- /**
51
- * Increment element counter
52
- */
53
- incrementCounter(): void;
54
-
55
- /**
56
- * File path being scanned
57
- */
58
- filePath?: string;
59
- }
60
-
61
- /**
62
- * Helper functions for heuristics
63
- */
64
- export class HeuristicHelpers {
65
- /**
66
- * Get JSX element name (e.g., "input", "Button")
67
- */
68
- static getElementName(node: t.JSXElement): string | null {
69
- const openingElement = node.openingElement;
70
- if (t.isJSXIdentifier(openingElement.name)) {
71
- return openingElement.name.name;
72
- }
73
- if (t.isJSXMemberExpression(openingElement.name)) {
74
- // Handle cases like <Form.Input>
75
- return this.getMemberExpressionName(openingElement.name);
76
- }
77
- return null;
78
- }
79
-
80
- /**
81
- * Get member expression name (e.g., "Form.Input" -> "Input")
82
- */
83
- private static getMemberExpressionName(expr: t.JSXMemberExpression): string {
84
- if (t.isJSXIdentifier(expr.property)) {
85
- return expr.property.name;
86
- }
87
- return '';
88
- }
89
-
90
- /**
91
- * Get attribute value from JSX element
92
- */
93
- static getAttributeValue(node: t.JSXElement, attrName: string): string | null {
94
- const attr = node.openingElement.attributes.find(
95
- (a): a is t.JSXAttribute =>
96
- t.isJSXAttribute(a) && t.isJSXIdentifier(a.name) && a.name.name === attrName
97
- );
98
-
99
- if (!attr) return null;
100
-
101
- if (t.isStringLiteral(attr.value)) {
102
- return attr.value.value;
103
- }
104
-
105
- if (t.isJSXExpressionContainer(attr.value)) {
106
- const expr = attr.value.expression;
107
- if (t.isStringLiteral(expr)) {
108
- return expr.value;
109
- }
110
- }
111
-
112
- return null;
113
- }
114
-
115
- /**
116
- * Check if element has attribute
117
- */
118
- static hasAttribute(node: t.JSXElement, attrName: string): boolean {
119
- return node.openingElement.attributes.some(
120
- (a) => t.isJSXAttribute(a) && t.isJSXIdentifier(a.name) && a.name.name === attrName
121
- );
122
- }
123
-
124
- /**
125
- * Get all attributes as key-value pairs
126
- */
127
- static getAllAttributes(node: t.JSXElement): Record<string, string> {
128
- const attrs: Record<string, string> = {};
129
-
130
- for (const attr of node.openingElement.attributes) {
131
- if (t.isJSXAttribute(attr) && t.isJSXIdentifier(attr.name)) {
132
- const value = this.getAttributeValue(node, attr.name.name);
133
- if (value) {
134
- attrs[attr.name.name] = value;
135
- }
136
- }
137
- }
138
-
139
- return attrs;
140
- }
141
-
142
- /**
143
- * Generate element ID from attributes
144
- */
145
- static generateElementId(node: t.JSXElement, counter: number): string {
146
- // Priority: id > data-testid > name > placeholder > generated
147
- const id = this.getAttributeValue(node, 'id');
148
- if (id) return id;
149
-
150
- const testId = this.getAttributeValue(node, 'data-testid');
151
- if (testId) return testId;
152
-
153
- const name = this.getAttributeValue(node, 'name');
154
- if (name) return name;
155
-
156
- const placeholder = this.getAttributeValue(node, 'placeholder');
157
- if (placeholder) {
158
- return placeholder.toLowerCase().replace(/\s+/g, '-');
159
- }
160
-
161
- const elementName = this.getElementName(node);
162
- return `${elementName || 'element'}-${counter}`;
163
- }
164
-
165
- /**
166
- * Build CSS selector for element
167
- */
168
- static buildSelector(node: t.JSXElement): string {
169
- const elementName = this.getElementName(node);
170
- if (!elementName) return '';
171
-
172
- const selectors: string[] = [elementName.toLowerCase()];
173
-
174
- // Add attribute selectors
175
- const id = this.getAttributeValue(node, 'id');
176
- if (id) {
177
- selectors.push(`#${id}`);
178
- }
179
-
180
- const className = this.getAttributeValue(node, 'className');
181
- if (className) {
182
- const classes = className.split(/\s+/).filter(c => c && !c.includes('${'));
183
- if (classes.length > 0) {
184
- selectors.push(`.${classes.join('.')}`);
185
- }
186
- }
187
-
188
- const testId = this.getAttributeValue(node, 'data-testid');
189
- if (testId) {
190
- selectors.push(`[data-testid="${testId}"]`);
191
- }
192
-
193
- const placeholder = this.getAttributeValue(node, 'placeholder');
194
- if (placeholder && !placeholder.includes('${')) {
195
- selectors.push(`[placeholder="${placeholder}"]`);
196
- }
197
-
198
- return selectors.join('');
199
- }
200
-
201
- /**
202
- * Check if element is a form control
203
- */
204
- static isFormControl(elementName: string): boolean {
205
- const formControls = ['input', 'textarea', 'select', 'button'];
206
- return formControls.includes(elementName.toLowerCase());
207
- }
208
-
209
- /**
210
- * Check if element name suggests it's a custom component
211
- */
212
- static isCustomComponent(elementName: string): boolean {
213
- // Custom components start with uppercase
214
- return /^[A-Z]/.test(elementName);
215
- }
216
- }
@@ -1,156 +0,0 @@
1
- /**
2
- * React UI Scanner
3
- * Refactored implementation that conforms to UIScanner interface
4
- * Uses DeepScanner for high-quality element detection
5
- */
6
-
7
- import { UIScanner, UIModel, UIElement, ScanStats } from './scanner-interface';
8
- import { RuntimeConfig } from '../../config/config-schema';
9
- import { DeepScanner } from '../../generators/ui-model-builder/deep-scanner';
10
- import * as path from 'path';
11
- import * as fs from 'fs';
12
-
13
- export class ReactScanner implements UIScanner {
14
- readonly name = 'ReactScanner';
15
- readonly framework = 'react' as const;
16
-
17
- private config: RuntimeConfig;
18
- private deepScanner: DeepScanner;
19
-
20
- constructor(config: RuntimeConfig) {
21
- this.config = config;
22
-
23
- // Initialize DeepScanner with config
24
- this.deepScanner = new DeepScanner({
25
- sourceRoot: config.paths.sourceRoot,
26
- projectRoot: process.cwd(),
27
- maxDepth: config.scanner.maxDepth,
28
- verbose: config.verbose
29
- });
30
- }
31
-
32
- /**
33
- * Scan a screen and generate UI model
34
- */
35
- async scan(screenName: string, config: RuntimeConfig): Promise<UIModel> {
36
- const startTime = Date.now();
37
-
38
- // Find screen files
39
- const screenFiles = this.findScreenFiles(screenName);
40
-
41
- if (config.verbose) {
42
- console.log(` Scanning ${screenFiles.length} file(s) for screen: ${screenName}`);
43
- screenFiles.forEach(f => console.log(` - ${path.relative(process.cwd(), f)}`));
44
- }
45
-
46
- // Use DeepScanner to scan files
47
- // @ts-ignore - DeepScanner elements compatible but different type definition
48
- const elements = await this.deepScanner.scanFiles(screenFiles);
49
-
50
- if (config.verbose) {
51
- console.log(` Found ${elements.length} elements`);
52
- }
53
-
54
- // Build UI model
55
- const uiModel: UIModel = {
56
- screen: screenName,
57
- timestamp: Date.now(),
58
- framework: this.framework,
59
- sourceFiles: screenFiles.map(f => path.relative(process.cwd(), f)),
60
- elements: elements as any, // Type cast - DeepScanner elements are compatible
61
- stats: {
62
- totalComponents: 0, // DeepScanner doesn't track this
63
- totalElements: elements.length,
64
- maxDepth: config.scanner.maxDepth,
65
- scanDuration: Date.now() - startTime,
66
- filesScanned: screenFiles.length
67
- }
68
- };
69
-
70
- return uiModel;
71
- }
72
-
73
- /**
74
- * Validate scanner can run
75
- */
76
- validate(): boolean {
77
- return fs.existsSync(this.config.paths.sourceRoot);
78
- }
79
-
80
- /**
81
- * Find all source files for a screen
82
- * Looks for: app/{screen}/page.tsx, app/{screen}/page.jsx, etc.
83
- */
84
- private findScreenFiles(screenName: string): string[] {
85
- const files: string[] = [];
86
- const sourceRoot = this.config.paths.sourceRoot;
87
-
88
- // Convert screen name to possible paths
89
- // auth-login -> auth/login
90
- const screenPath = screenName.replace(/-/g, '/');
91
-
92
- // Possible file patterns
93
- const patterns = [
94
- path.join(sourceRoot, screenPath, 'page.tsx'),
95
- path.join(sourceRoot, screenPath, 'page.jsx'),
96
- path.join(sourceRoot, screenPath, 'index.tsx'),
97
- path.join(sourceRoot, screenPath, 'index.jsx'),
98
- path.join(sourceRoot, `${screenName}.tsx`),
99
- path.join(sourceRoot, `${screenName}.jsx`),
100
- path.join(sourceRoot, 'page.tsx'), // Root page for "home"
101
- path.join(sourceRoot, 'layout.tsx') // Always include layout
102
- ];
103
-
104
- // Add files that exist
105
- for (const pattern of patterns) {
106
- if (fs.existsSync(pattern) && !files.includes(pattern)) {
107
- files.push(pattern);
108
- }
109
- }
110
-
111
- return files;
112
- }
113
-
114
- /**
115
- * Discover all available screens
116
- */
117
- async discoverScreens(): Promise<string[]> {
118
- const screens: string[] = [];
119
- const sourceRoot = this.config.paths.sourceRoot;
120
-
121
- if (!fs.existsSync(sourceRoot)) {
122
- return screens;
123
- }
124
-
125
- // Scan sourceRoot for directories with page.tsx/jsx files
126
- const scanDir = (dir: string, prefix = '') => {
127
- const entries = fs.readdirSync(dir, { withFileTypes: true });
128
-
129
- for (const entry of entries) {
130
- if (entry.isDirectory()) {
131
- const fullPath = path.join(dir, entry.name);
132
- const hasPageFile = fs.existsSync(path.join(fullPath, 'page.tsx')) ||
133
- fs.existsSync(path.join(fullPath, 'page.jsx'));
134
-
135
- if (hasPageFile) {
136
- const screenName = prefix ? `${prefix}-${entry.name}` : entry.name;
137
- screens.push(screenName);
138
- }
139
-
140
- // Recursively scan subdirectories
141
- scanDir(fullPath, prefix ? `${prefix}-${entry.name}` : entry.name);
142
- }
143
- }
144
- };
145
-
146
- scanDir(sourceRoot);
147
-
148
- // Add "home" if root page exists
149
- if (fs.existsSync(path.join(sourceRoot, 'page.tsx')) ||
150
- fs.existsSync(path.join(sourceRoot, 'page.jsx'))) {
151
- screens.unshift('home');
152
- }
153
-
154
- return screens;
155
- }
156
- }
@@ -1,133 +0,0 @@
1
- /**
2
- * UI Scanner Interface
3
- * Defines the contract for UI scanning implementations
4
- * Supports multiple frameworks: React, Vue, Angular, etc.
5
- */
6
-
7
- import { RuntimeConfig } from '../../config/config-schema';
8
-
9
- /**
10
- * Main Scanner Interface
11
- */
12
- export interface UIScanner {
13
- /**
14
- * Scanner name/type
15
- */
16
- readonly name: string;
17
-
18
- /**
19
- * Supported framework
20
- */
21
- readonly framework: 'react' | 'vue' | 'angular';
22
-
23
- /**
24
- * Scan a screen and generate UI model
25
- *
26
- * @param screenName - Screen identifier (e.g., 'chat', 'login')
27
- * @param config - Runtime configuration
28
- * @returns UI Model
29
- */
30
- scan(screenName: string, config: RuntimeConfig): Promise<UIModel>;
31
-
32
- /**
33
- * Validate scanner can run in current environment
34
- */
35
- validate(): boolean;
36
- }
37
-
38
- /**
39
- * UI Model Structure
40
- * Represents discovered UI elements for a screen
41
- */
42
- export interface UIModel {
43
- screen: string;
44
- timestamp: number;
45
- framework: string;
46
- sourceFiles: string[];
47
- elements: UIElement[];
48
- stats: ScanStats;
49
- }
50
-
51
- /**
52
- * UI Element
53
- * Represents a discovered UI element
54
- */
55
- export interface UIElement {
56
- id: string; // Suggested ID (e.g., 'message-input')
57
- type: ElementType; // Element type (input, button, etc.)
58
- selector: string; // CSS selector to locate element
59
- label?: string; // Associated label text
60
- placeholder?: string; // Placeholder text (for inputs)
61
- role?: string; // ARIA role
62
- required?: boolean; // Is required field
63
- context?: ElementContext; // Additional context
64
- }
65
-
66
- /**
67
- * Element Types
68
- */
69
- export type ElementType =
70
- | 'input'
71
- | 'textarea'
72
- | 'select'
73
- | 'button'
74
- | 'link'
75
- | 'checkbox'
76
- | 'radio'
77
- | 'container'
78
- | 'heading'
79
- | 'text'
80
- | 'image'
81
- | 'list'
82
- | 'unknown';
83
-
84
- /**
85
- * Element Context
86
- * Additional contextual information about an element
87
- */
88
- export interface ElementContext {
89
- component?: string; // Component name where element was found
90
- parentComponent?: string; // Parent component name
91
- depth?: number; // Nesting depth from root
92
- conditionalRendering?: boolean; // Is conditionally rendered
93
- dynamicContent?: boolean; // Contains dynamic content
94
- props?: Record<string, any>; // Component props (if available)
95
- }
96
-
97
- /**
98
- * Scan Statistics
99
- */
100
- export interface ScanStats {
101
- totalComponents: number; // Total components scanned
102
- totalElements: number; // Total elements found
103
- maxDepth: number; // Maximum depth reached
104
- scanDuration: number; // Scan duration in ms
105
- filesScanned: number; // Number of files scanned
106
- }
107
-
108
- /**
109
- * Scanner Factory
110
- * Creates appropriate scanner based on framework type
111
- */
112
- export class ScannerFactory {
113
- /**
114
- * Create scanner instance for framework
115
- */
116
- static create(framework: 'react' | 'vue' | 'angular', config: RuntimeConfig): UIScanner {
117
- switch (framework) {
118
- case 'react':
119
- // Dynamic import to avoid loading all scanners
120
- const ReactScanner = require('./react-scanner').ReactScanner;
121
- return new ReactScanner(config);
122
-
123
- case 'vue':
124
- throw new Error('Vue scanner not yet implemented');
125
-
126
- case 'angular':
127
- throw new Error('Angular scanner not yet implemented');
128
-
129
- default:
130
- throw new Error(`Unsupported framework: ${framework}`);
131
- }
132
- }
133
- }