@sun-asterisk/sungen 1.0.24 → 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 (362) 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/table-cell-by-filter.hbs +3 -0
  17. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-index.hbs +3 -0
  18. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-column-exists.hbs +2 -0
  19. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-empty.hbs +2 -0
  20. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-count.hbs +2 -0
  21. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-exists.hbs +2 -0
  22. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-not-exists.hbs +2 -0
  23. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +1 -1
  24. package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +11 -2
  25. package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +11 -2
  26. package/dist/generators/test-generator/code-generator.d.ts +0 -1
  27. package/dist/generators/test-generator/code-generator.d.ts.map +1 -1
  28. package/dist/generators/test-generator/code-generator.js +0 -47
  29. package/dist/generators/test-generator/code-generator.js.map +1 -1
  30. package/dist/generators/test-generator/patterns/assertion-patterns.d.ts.map +1 -1
  31. package/dist/generators/test-generator/patterns/assertion-patterns.js +2 -0
  32. package/dist/generators/test-generator/patterns/assertion-patterns.js.map +1 -1
  33. package/dist/generators/test-generator/patterns/index.d.ts +4 -1
  34. package/dist/generators/test-generator/patterns/index.d.ts.map +1 -1
  35. package/dist/generators/test-generator/patterns/index.js +17 -5
  36. package/dist/generators/test-generator/patterns/index.js.map +1 -1
  37. package/dist/generators/test-generator/patterns/interaction-patterns.js +1 -1
  38. package/dist/generators/test-generator/patterns/interaction-patterns.js.map +1 -1
  39. package/dist/generators/test-generator/patterns/keyboard-patterns.d.ts +7 -0
  40. package/dist/generators/test-generator/patterns/keyboard-patterns.d.ts.map +1 -0
  41. package/dist/generators/test-generator/patterns/keyboard-patterns.js +47 -0
  42. package/dist/generators/test-generator/patterns/keyboard-patterns.js.map +1 -0
  43. package/dist/generators/test-generator/patterns/scope-patterns.d.ts +7 -0
  44. package/dist/generators/test-generator/patterns/scope-patterns.d.ts.map +1 -0
  45. package/dist/generators/test-generator/patterns/scope-patterns.js +36 -0
  46. package/dist/generators/test-generator/patterns/scope-patterns.js.map +1 -0
  47. package/dist/generators/test-generator/patterns/scroll-patterns.d.ts +7 -0
  48. package/dist/generators/test-generator/patterns/scroll-patterns.d.ts.map +1 -0
  49. package/dist/generators/test-generator/patterns/scroll-patterns.js +25 -0
  50. package/dist/generators/test-generator/patterns/scroll-patterns.js.map +1 -0
  51. package/dist/generators/test-generator/patterns/table-patterns.d.ts +7 -0
  52. package/dist/generators/test-generator/patterns/table-patterns.d.ts.map +1 -0
  53. package/dist/generators/test-generator/patterns/table-patterns.js +192 -0
  54. package/dist/generators/test-generator/patterns/table-patterns.js.map +1 -0
  55. package/dist/generators/test-generator/step-mapper.d.ts +1 -3
  56. package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
  57. package/dist/generators/test-generator/step-mapper.js +30 -27
  58. package/dist/generators/test-generator/step-mapper.js.map +1 -1
  59. package/dist/generators/test-generator/template-engine.d.ts.map +1 -1
  60. package/dist/generators/test-generator/template-engine.js +4 -1
  61. package/dist/generators/test-generator/template-engine.js.map +1 -1
  62. package/dist/generators/test-generator/types.d.ts +7 -24
  63. package/dist/generators/test-generator/types.d.ts.map +1 -1
  64. package/dist/generators/test-generator/types.js +2 -101
  65. package/dist/generators/test-generator/types.js.map +1 -1
  66. package/dist/generators/test-generator/utils/selector-resolver.d.ts +14 -0
  67. package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
  68. package/dist/generators/test-generator/utils/selector-resolver.js +37 -11
  69. package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
  70. package/dist/orchestrator/project-initializer.d.ts +8 -0
  71. package/dist/orchestrator/project-initializer.d.ts.map +1 -1
  72. package/dist/orchestrator/project-initializer.js +343 -32
  73. package/dist/orchestrator/project-initializer.js.map +1 -1
  74. package/dist/orchestrator/screen-manager.d.ts +1 -32
  75. package/dist/orchestrator/screen-manager.d.ts.map +1 -1
  76. package/dist/orchestrator/screen-manager.js +55 -216
  77. package/dist/orchestrator/screen-manager.js.map +1 -1
  78. package/dist/utils/selector-types.d.ts +1 -1
  79. package/dist/utils/selector-types.d.ts.map +1 -1
  80. package/dist/utils/selector-types.js +3 -0
  81. package/dist/utils/selector-types.js.map +1 -1
  82. package/package.json +2 -2
  83. package/src/cli/commands/add.ts +5 -3
  84. package/src/cli/commands/generate.ts +90 -38
  85. package/src/cli/index.ts +5 -16
  86. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/frame-enter-action.hbs +1 -0
  87. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/frame-exit-action.hbs +1 -0
  88. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/keyboard-global-action.hbs +1 -0
  89. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/scroll-action.hbs +1 -0
  90. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row.hbs +2 -0
  91. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-filter.hbs +3 -0
  92. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-index.hbs +3 -0
  93. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-column-exists.hbs +2 -0
  94. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-empty.hbs +2 -0
  95. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-count.hbs +2 -0
  96. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-exists.hbs +2 -0
  97. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-not-exists.hbs +2 -0
  98. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +1 -1
  99. package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +11 -2
  100. package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +11 -2
  101. package/src/generators/test-generator/code-generator.ts +0 -59
  102. package/src/generators/test-generator/patterns/assertion-patterns.ts +2 -0
  103. package/src/generators/test-generator/patterns/index.ts +12 -3
  104. package/src/generators/test-generator/patterns/interaction-patterns.ts +1 -1
  105. package/src/generators/test-generator/patterns/keyboard-patterns.ts +51 -0
  106. package/src/generators/test-generator/patterns/scope-patterns.ts +40 -0
  107. package/src/generators/test-generator/patterns/scroll-patterns.ts +27 -0
  108. package/src/generators/test-generator/patterns/table-patterns.ts +232 -0
  109. package/src/generators/test-generator/step-mapper.ts +33 -27
  110. package/src/generators/test-generator/template-engine.ts +3 -1
  111. package/src/generators/test-generator/types.ts +7 -112
  112. package/src/generators/test-generator/utils/selector-resolver.ts +70 -25
  113. package/src/orchestrator/project-initializer.ts +345 -32
  114. package/src/orchestrator/screen-manager.ts +61 -233
  115. package/src/utils/selector-types.ts +3 -0
  116. package/dist/cli/commands/cache-clear.d.ts +0 -3
  117. package/dist/cli/commands/cache-clear.d.ts.map +0 -1
  118. package/dist/cli/commands/cache-clear.js +0 -24
  119. package/dist/cli/commands/cache-clear.js.map +0 -1
  120. package/dist/cli/commands/full.d.ts +0 -3
  121. package/dist/cli/commands/full.d.ts.map +0 -1
  122. package/dist/cli/commands/full.js +0 -37
  123. package/dist/cli/commands/full.js.map +0 -1
  124. package/dist/cli/commands/live-scan.d.ts +0 -3
  125. package/dist/cli/commands/live-scan.d.ts.map +0 -1
  126. package/dist/cli/commands/live-scan.js +0 -78
  127. package/dist/cli/commands/live-scan.js.map +0 -1
  128. package/dist/cli/commands/map.d.ts +0 -3
  129. package/dist/cli/commands/map.d.ts.map +0 -1
  130. package/dist/cli/commands/map.js +0 -93
  131. package/dist/cli/commands/map.js.map +0 -1
  132. package/dist/cli/commands/validate.d.ts +0 -3
  133. package/dist/cli/commands/validate.d.ts.map +0 -1
  134. package/dist/cli/commands/validate.js +0 -43
  135. package/dist/cli/commands/validate.js.map +0 -1
  136. package/dist/cli/utils.d.ts +0 -6
  137. package/dist/cli/utils.d.ts.map +0 -1
  138. package/dist/cli/utils.js +0 -101
  139. package/dist/cli/utils.js.map +0 -1
  140. package/dist/config/config-loader.d.ts +0 -51
  141. package/dist/config/config-loader.d.ts.map +0 -1
  142. package/dist/config/config-loader.js +0 -216
  143. package/dist/config/config-loader.js.map +0 -1
  144. package/dist/config/config-schema.d.ts +0 -121
  145. package/dist/config/config-schema.d.ts.map +0 -1
  146. package/dist/config/config-schema.js +0 -7
  147. package/dist/config/config-schema.js.map +0 -1
  148. package/dist/core/live-scanner/config-reader.d.ts +0 -10
  149. package/dist/core/live-scanner/config-reader.d.ts.map +0 -1
  150. package/dist/core/live-scanner/config-reader.js +0 -87
  151. package/dist/core/live-scanner/config-reader.js.map +0 -1
  152. package/dist/core/live-scanner/element-finder.d.ts +0 -20
  153. package/dist/core/live-scanner/element-finder.d.ts.map +0 -1
  154. package/dist/core/live-scanner/element-finder.js +0 -481
  155. package/dist/core/live-scanner/element-finder.js.map +0 -1
  156. package/dist/core/live-scanner/index.d.ts +0 -8
  157. package/dist/core/live-scanner/index.d.ts.map +0 -1
  158. package/dist/core/live-scanner/index.js +0 -33
  159. package/dist/core/live-scanner/index.js.map +0 -1
  160. package/dist/core/live-scanner/matrix-reader.d.ts +0 -17
  161. package/dist/core/live-scanner/matrix-reader.d.ts.map +0 -1
  162. package/dist/core/live-scanner/matrix-reader.js +0 -60
  163. package/dist/core/live-scanner/matrix-reader.js.map +0 -1
  164. package/dist/core/live-scanner/matrix-writer.d.ts +0 -7
  165. package/dist/core/live-scanner/matrix-writer.d.ts.map +0 -1
  166. package/dist/core/live-scanner/matrix-writer.js +0 -103
  167. package/dist/core/live-scanner/matrix-writer.js.map +0 -1
  168. package/dist/core/live-scanner/role-fallback.d.ts +0 -15
  169. package/dist/core/live-scanner/role-fallback.d.ts.map +0 -1
  170. package/dist/core/live-scanner/role-fallback.js +0 -46
  171. package/dist/core/live-scanner/role-fallback.js.map +0 -1
  172. package/dist/core/live-scanner/scanner.d.ts +0 -22
  173. package/dist/core/live-scanner/scanner.d.ts.map +0 -1
  174. package/dist/core/live-scanner/scanner.js +0 -303
  175. package/dist/core/live-scanner/scanner.js.map +0 -1
  176. package/dist/core/live-scanner/step-replayer.d.ts +0 -26
  177. package/dist/core/live-scanner/step-replayer.d.ts.map +0 -1
  178. package/dist/core/live-scanner/step-replayer.js +0 -473
  179. package/dist/core/live-scanner/step-replayer.js.map +0 -1
  180. package/dist/core/live-scanner/types.d.ts +0 -52
  181. package/dist/core/live-scanner/types.d.ts.map +0 -1
  182. package/dist/core/live-scanner/types.js +0 -14
  183. package/dist/core/live-scanner/types.js.map +0 -1
  184. package/dist/core/selector-base/annotation-handler.d.ts +0 -45
  185. package/dist/core/selector-base/annotation-handler.d.ts.map +0 -1
  186. package/dist/core/selector-base/annotation-handler.js +0 -102
  187. package/dist/core/selector-base/annotation-handler.js.map +0 -1
  188. package/dist/core/selector-base/base-generator.d.ts +0 -49
  189. package/dist/core/selector-base/base-generator.d.ts.map +0 -1
  190. package/dist/core/selector-base/base-generator.js +0 -214
  191. package/dist/core/selector-base/base-generator.js.map +0 -1
  192. package/dist/core/selector-base/gherkin-parser.d.ts +0 -24
  193. package/dist/core/selector-base/gherkin-parser.d.ts.map +0 -1
  194. package/dist/core/selector-base/gherkin-parser.js +0 -42
  195. package/dist/core/selector-base/gherkin-parser.js.map +0 -1
  196. package/dist/core/selector-mapper/priority-mapper.d.ts +0 -74
  197. package/dist/core/selector-mapper/priority-mapper.d.ts.map +0 -1
  198. package/dist/core/selector-mapper/priority-mapper.js +0 -477
  199. package/dist/core/selector-mapper/priority-mapper.js.map +0 -1
  200. package/dist/core/ui-scanner/heuristics/base-heuristic.d.ts +0 -91
  201. package/dist/core/ui-scanner/heuristics/base-heuristic.d.ts.map +0 -1
  202. package/dist/core/ui-scanner/heuristics/base-heuristic.js +0 -175
  203. package/dist/core/ui-scanner/heuristics/base-heuristic.js.map +0 -1
  204. package/dist/core/ui-scanner/react-scanner.d.ts +0 -32
  205. package/dist/core/ui-scanner/react-scanner.d.ts.map +0 -1
  206. package/dist/core/ui-scanner/react-scanner.js +0 -163
  207. package/dist/core/ui-scanner/react-scanner.js.map +0 -1
  208. package/dist/core/ui-scanner/scanner-interface.d.ts +0 -94
  209. package/dist/core/ui-scanner/scanner-interface.d.ts.map +0 -1
  210. package/dist/core/ui-scanner/scanner-interface.js +0 -33
  211. package/dist/core/ui-scanner/scanner-interface.js.map +0 -1
  212. package/dist/core/ui-scanner/strict-scanner.d.ts +0 -81
  213. package/dist/core/ui-scanner/strict-scanner.d.ts.map +0 -1
  214. package/dist/core/ui-scanner/strict-scanner.js +0 -511
  215. package/dist/core/ui-scanner/strict-scanner.js.map +0 -1
  216. package/dist/core/validator/data-validator.d.ts +0 -38
  217. package/dist/core/validator/data-validator.d.ts.map +0 -1
  218. package/dist/core/validator/data-validator.js +0 -212
  219. package/dist/core/validator/data-validator.js.map +0 -1
  220. package/dist/core/validator/feature-validator.d.ts +0 -27
  221. package/dist/core/validator/feature-validator.d.ts.map +0 -1
  222. package/dist/core/validator/feature-validator.js +0 -182
  223. package/dist/core/validator/feature-validator.js.map +0 -1
  224. package/dist/core/validator/index.d.ts +0 -46
  225. package/dist/core/validator/index.d.ts.map +0 -1
  226. package/dist/core/validator/index.js +0 -17
  227. package/dist/core/validator/index.js.map +0 -1
  228. package/dist/core/validator/screen-validator.d.ts +0 -35
  229. package/dist/core/validator/screen-validator.d.ts.map +0 -1
  230. package/dist/core/validator/screen-validator.js +0 -195
  231. package/dist/core/validator/screen-validator.js.map +0 -1
  232. package/dist/core/validator/selector-validator.d.ts +0 -36
  233. package/dist/core/validator/selector-validator.d.ts.map +0 -1
  234. package/dist/core/validator/selector-validator.js +0 -210
  235. package/dist/core/validator/selector-validator.js.map +0 -1
  236. package/dist/external/ai-provider.d.ts +0 -60
  237. package/dist/external/ai-provider.d.ts.map +0 -1
  238. package/dist/external/ai-provider.js +0 -30
  239. package/dist/external/ai-provider.js.map +0 -1
  240. package/dist/external/anthropic-provider.d.ts +0 -29
  241. package/dist/external/anthropic-provider.d.ts.map +0 -1
  242. package/dist/external/anthropic-provider.js +0 -85
  243. package/dist/external/anthropic-provider.js.map +0 -1
  244. package/dist/generators/cache/cache-manager.d.ts +0 -66
  245. package/dist/generators/cache/cache-manager.d.ts.map +0 -1
  246. package/dist/generators/cache/cache-manager.js +0 -286
  247. package/dist/generators/cache/cache-manager.js.map +0 -1
  248. package/dist/generators/dsl-writer/index.d.ts +0 -33
  249. package/dist/generators/dsl-writer/index.d.ts.map +0 -1
  250. package/dist/generators/dsl-writer/index.js +0 -226
  251. package/dist/generators/dsl-writer/index.js.map +0 -1
  252. package/dist/generators/scaffold-generator/index.d.ts +0 -162
  253. package/dist/generators/scaffold-generator/index.d.ts.map +0 -1
  254. package/dist/generators/scaffold-generator/index.js +0 -877
  255. package/dist/generators/scaffold-generator/index.js.map +0 -1
  256. package/dist/generators/selector-mapper/ai-mapper.d.ts +0 -56
  257. package/dist/generators/selector-mapper/ai-mapper.d.ts.map +0 -1
  258. package/dist/generators/selector-mapper/ai-mapper.js +0 -457
  259. package/dist/generators/selector-mapper/ai-mapper.js.map +0 -1
  260. package/dist/generators/selector-mapper/hybrid-mapper.d.ts +0 -67
  261. package/dist/generators/selector-mapper/hybrid-mapper.d.ts.map +0 -1
  262. package/dist/generators/selector-mapper/hybrid-mapper.js +0 -349
  263. package/dist/generators/selector-mapper/hybrid-mapper.js.map +0 -1
  264. package/dist/generators/selector-mapper/index.d.ts +0 -8
  265. package/dist/generators/selector-mapper/index.d.ts.map +0 -1
  266. package/dist/generators/selector-mapper/index.js +0 -12
  267. package/dist/generators/selector-mapper/index.js.map +0 -1
  268. package/dist/generators/selector-mapper/intelligent-mapper.d.ts +0 -125
  269. package/dist/generators/selector-mapper/intelligent-mapper.d.ts.map +0 -1
  270. package/dist/generators/selector-mapper/intelligent-mapper.js +0 -391
  271. package/dist/generators/selector-mapper/intelligent-mapper.js.map +0 -1
  272. package/dist/generators/test-generator/ai-step-mapper.d.ts +0 -27
  273. package/dist/generators/test-generator/ai-step-mapper.d.ts.map +0 -1
  274. package/dist/generators/test-generator/ai-step-mapper.js +0 -204
  275. package/dist/generators/test-generator/ai-step-mapper.js.map +0 -1
  276. package/dist/generators/test-generator/auth-setup-generator.d.ts +0 -18
  277. package/dist/generators/test-generator/auth-setup-generator.d.ts.map +0 -1
  278. package/dist/generators/test-generator/auth-setup-generator.js +0 -82
  279. package/dist/generators/test-generator/auth-setup-generator.js.map +0 -1
  280. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts +0 -7
  281. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts.map +0 -1
  282. package/dist/generators/test-generator/patterns/legacy-patterns.js +0 -98
  283. package/dist/generators/test-generator/patterns/legacy-patterns.js.map +0 -1
  284. package/dist/generators/test-generator/templates/auth-setup.ts.hbs +0 -36
  285. package/dist/generators/ui-model-builder/deep-scanner.d.ts +0 -121
  286. package/dist/generators/ui-model-builder/deep-scanner.d.ts.map +0 -1
  287. package/dist/generators/ui-model-builder/deep-scanner.js +0 -1113
  288. package/dist/generators/ui-model-builder/deep-scanner.js.map +0 -1
  289. package/dist/generators/ui-model-builder/enhanced-deep-scanner.d.ts +0 -110
  290. package/dist/generators/ui-model-builder/enhanced-deep-scanner.d.ts.map +0 -1
  291. package/dist/generators/ui-model-builder/enhanced-deep-scanner.js +0 -608
  292. package/dist/generators/ui-model-builder/enhanced-deep-scanner.js.map +0 -1
  293. package/dist/generators/ui-model-builder/react-scanner.d.ts +0 -107
  294. package/dist/generators/ui-model-builder/react-scanner.d.ts.map +0 -1
  295. package/dist/generators/ui-model-builder/react-scanner.js +0 -797
  296. package/dist/generators/ui-model-builder/react-scanner.js.map +0 -1
  297. package/dist/orchestrator/cache-manager.d.ts +0 -15
  298. package/dist/orchestrator/cache-manager.d.ts.map +0 -1
  299. package/dist/orchestrator/cache-manager.js +0 -62
  300. package/dist/orchestrator/cache-manager.js.map +0 -1
  301. package/dist/orchestrator/pipeline.d.ts +0 -56
  302. package/dist/orchestrator/pipeline.d.ts.map +0 -1
  303. package/dist/orchestrator/pipeline.js +0 -298
  304. package/dist/orchestrator/pipeline.js.map +0 -1
  305. package/dist/orchestrator/reporter.d.ts +0 -15
  306. package/dist/orchestrator/reporter.d.ts.map +0 -1
  307. package/dist/orchestrator/reporter.js +0 -30
  308. package/dist/orchestrator/reporter.js.map +0 -1
  309. package/src/cli/commands/cache-clear.ts +0 -22
  310. package/src/cli/commands/full.ts +0 -35
  311. package/src/cli/commands/live-scan.ts +0 -82
  312. package/src/cli/commands/map.ts +0 -97
  313. package/src/cli/commands/validate.ts +0 -43
  314. package/src/cli/utils.ts +0 -106
  315. package/src/config/ai-providers.yaml +0 -56
  316. package/src/config/config-loader.ts +0 -248
  317. package/src/config/config-schema.ts +0 -148
  318. package/src/config/default.config.yaml +0 -107
  319. package/src/config/framework.config.yaml +0 -52
  320. package/src/config/routes.yaml +0 -31
  321. package/src/core/live-scanner/config-reader.ts +0 -57
  322. package/src/core/live-scanner/element-finder.ts +0 -534
  323. package/src/core/live-scanner/index.ts +0 -7
  324. package/src/core/live-scanner/matrix-reader.ts +0 -65
  325. package/src/core/live-scanner/matrix-writer.ts +0 -77
  326. package/src/core/live-scanner/role-fallback.ts +0 -44
  327. package/src/core/live-scanner/scanner.ts +0 -321
  328. package/src/core/live-scanner/step-replayer.ts +0 -503
  329. package/src/core/live-scanner/types.ts +0 -58
  330. package/src/core/selector-base/annotation-handler.ts +0 -127
  331. package/src/core/selector-base/base-generator.ts +0 -234
  332. package/src/core/selector-base/gherkin-parser.ts +0 -57
  333. package/src/core/selector-mapper/priority-mapper.ts +0 -607
  334. package/src/core/ui-scanner/heuristics/base-heuristic.ts +0 -216
  335. package/src/core/ui-scanner/react-scanner.ts +0 -156
  336. package/src/core/ui-scanner/scanner-interface.ts +0 -133
  337. package/src/core/ui-scanner/strict-scanner.ts +0 -629
  338. package/src/core/validator/data-validator.ts +0 -202
  339. package/src/core/validator/feature-validator.ts +0 -176
  340. package/src/core/validator/index.ts +0 -57
  341. package/src/core/validator/screen-validator.ts +0 -209
  342. package/src/core/validator/selector-validator.ts +0 -209
  343. package/src/external/ai-provider.ts +0 -90
  344. package/src/external/anthropic-provider.ts +0 -114
  345. package/src/generators/README.md +0 -410
  346. package/src/generators/cache/cache-manager.ts +0 -322
  347. package/src/generators/dsl-writer/index.ts +0 -253
  348. package/src/generators/scaffold-generator/index.ts +0 -1029
  349. package/src/generators/selector-mapper/ai-mapper.ts +0 -528
  350. package/src/generators/selector-mapper/hybrid-mapper.ts +0 -427
  351. package/src/generators/selector-mapper/index.ts +0 -10
  352. package/src/generators/selector-mapper/intelligent-mapper.ts +0 -530
  353. package/src/generators/test-generator/ai-step-mapper.ts +0 -224
  354. package/src/generators/test-generator/auth-setup-generator.ts +0 -59
  355. package/src/generators/test-generator/patterns/legacy-patterns.ts +0 -104
  356. package/src/generators/test-generator/templates/auth-setup.ts.hbs +0 -36
  357. package/src/generators/ui-model-builder/deep-scanner.ts +0 -1244
  358. package/src/generators/ui-model-builder/enhanced-deep-scanner.ts +0 -731
  359. package/src/generators/ui-model-builder/react-scanner.ts +0 -959
  360. package/src/orchestrator/cache-manager.ts +0 -32
  361. package/src/orchestrator/pipeline.ts +0 -354
  362. package/src/orchestrator/reporter.ts +0 -36
@@ -1,473 +0,0 @@
1
- "use strict";
2
- /**
3
- * Step Replayer
4
- * Replays Gherkin steps on a live Playwright page to reveal dynamic elements.
5
- * Takes a snapshot and finds elements after each action.
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.replaySteps = replaySteps;
9
- const element_finder_1 = require("./element-finder");
10
- const selector_resolver_1 = require("../../generators/test-generator/utils/selector-resolver");
11
- /**
12
- * Resolve a {{dataRef}} path against test-data object.
13
- * Supports dot-notation: "email.valid" → testData.email.valid
14
- */
15
- function resolveDataRef(testData, dataRef) {
16
- const parts = dataRef.replace(/[{}]/g, '').split('.');
17
- let value = testData;
18
- for (const part of parts) {
19
- value = value?.[part];
20
- }
21
- return typeof value === 'string' ? value : String(value ?? '');
22
- }
23
- /**
24
- * Replay a sequence of Gherkin steps on a Playwright page,
25
- * finding and interacting with elements along the way.
26
- */
27
- async function replaySteps(page, steps, featurePath, baseUrl, existingElements, testData) {
28
- const elements = {};
29
- const errors = [];
30
- let currentContext = 'page';
31
- // Pre-scan: detect which base keys have multiple normalized element types
32
- // so we can append --type suffix (matching scaffold generator behavior)
33
- // Uses normalizeElementType to match scaffold generator's extractTargetType mapping
34
- // e.g. modal/dialog both normalize to 'dialog', so they won't create a false conflict
35
- const typesPerKey = new Map();
36
- for (const step of steps) {
37
- if (!step.selectorRef)
38
- continue;
39
- const baseKey = generateElementKey(step.selectorRef, step.elementType, step.nth);
40
- const action = detectAction(step.text);
41
- const normalizedType = normalizeElementType(step.elementType || 'button', action);
42
- if (!typesPerKey.has(baseKey)) {
43
- typesPerKey.set(baseKey, new Set());
44
- }
45
- typesPerKey.get(baseKey).add(normalizedType);
46
- }
47
- const conflictKeys = new Set();
48
- for (const [key, types] of typesPerKey) {
49
- if (types.size > 1)
50
- conflictKeys.add(key);
51
- }
52
- for (const step of steps) {
53
- try {
54
- const action = detectAction(step.text);
55
- // Handle navigation (Given User is on [x] page)
56
- if (action === 'navigate') {
57
- await page.goto(baseUrl + featurePath, { waitUntil: 'networkidle', timeout: 15000 });
58
- await settle(page);
59
- if (step.selectorRef) {
60
- const baseKey = generateElementKey(step.selectorRef, step.elementType, step.nth);
61
- const normalizedType = normalizeElementType(step.elementType || 'page', action);
62
- const key = conflictKeys.has(baseKey) ? `${baseKey}--${normalizedType}` : baseKey;
63
- // Record the page element but don't search for it on the DOM
64
- elements[key] = {
65
- gherkinRef: step.selectorRef,
66
- gherkinType: step.elementType || 'page',
67
- selectorType: '',
68
- selectorValue: featurePath,
69
- role: '',
70
- name: step.selectorRef,
71
- testid: null,
72
- tag: '',
73
- contenteditable: false,
74
- placeholder: null,
75
- label: null,
76
- context: 'page',
77
- matchMethod: 'exact_role',
78
- exact: false,
79
- warning: null,
80
- };
81
- }
82
- continue;
83
- }
84
- // Skip steps without element references
85
- if (!step.selectorRef)
86
- continue;
87
- const baseKey = generateElementKey(step.selectorRef, step.elementType, step.nth);
88
- const elementType = step.elementType || 'button';
89
- const normalizedType = normalizeElementType(elementType, action);
90
- const key = conflictKeys.has(baseKey) ? `${baseKey}--${normalizedType}` : baseKey;
91
- const nth = step.nth || 0;
92
- // Skip column-type elements — they use header text matching, no DOM lookup needed
93
- if (normalizedType === 'column') {
94
- console.log(` ⏭️ [${step.selectorRef}] column → skipped (table header match)`);
95
- continue;
96
- }
97
- // Skip if element already resolved in existing scan (non-force mode)
98
- if (existingElements && existingElements[key] && existingElements[key].matchMethod !== 'unresolved') {
99
- elements[key] = existingElements[key];
100
- elements[key].skipped = true;
101
- console.log(` ⏩ [${step.selectorRef}] ${elementType} → cached (${existingElements[key].selectorType})`);
102
- // Still execute actions for cached elements to maintain page state
103
- if (action === 'click') {
104
- try {
105
- await executeClick(page, step.selectorRef, elementType, nth);
106
- await settle(page);
107
- currentContext = await detectCurrentContext(page, currentContext, step.text);
108
- }
109
- catch {
110
- // Click failed for cached element, continue anyway
111
- }
112
- }
113
- else if (action === 'fill' && testData && step.dataRef) {
114
- try {
115
- const value = resolveDataRef(testData, step.dataRef);
116
- if (value) {
117
- await executeFill(page, step.selectorRef, elementType, nth, value);
118
- await settle(page);
119
- }
120
- }
121
- catch {
122
- // Fill failed for cached element, continue anyway
123
- }
124
- }
125
- else if (action === 'select' && testData && step.dataRef) {
126
- try {
127
- const value = resolveDataRef(testData, step.dataRef);
128
- if (value) {
129
- await executeSelect(page, step.selectorRef, elementType, nth, value);
130
- await settle(page);
131
- }
132
- }
133
- catch {
134
- // Select failed for cached element, continue anyway
135
- }
136
- }
137
- continue;
138
- }
139
- // Find the element on the page, scoped to current context (dialog/page)
140
- const element = await (0, element_finder_1.findElement)(page, step.selectorRef, elementType, nth, currentContext);
141
- element.context = currentContext;
142
- // Record in matrix (first match wins for duplicate keys)
143
- if (!elements[key]) {
144
- elements[key] = element;
145
- }
146
- // Execute the action if element was found
147
- if (element.matchMethod !== 'unresolved') {
148
- if (action === 'click') {
149
- await executeClick(page, step.selectorRef, elementType, nth);
150
- await settle(page);
151
- currentContext = await detectCurrentContext(page, currentContext, step.text);
152
- }
153
- else if (action === 'fill') {
154
- if (testData && step.dataRef) {
155
- const value = resolveDataRef(testData, step.dataRef);
156
- if (value) {
157
- try {
158
- await executeFill(page, step.selectorRef, elementType, nth, value);
159
- await settle(page);
160
- }
161
- catch (e) {
162
- errors.push(`Step "${step.text}": fill failed — ${e.message}`);
163
- }
164
- }
165
- }
166
- }
167
- else if (action === 'select') {
168
- if (testData && step.dataRef) {
169
- const value = resolveDataRef(testData, step.dataRef);
170
- if (value) {
171
- try {
172
- await executeSelect(page, step.selectorRef, elementType, nth, value);
173
- await settle(page);
174
- }
175
- catch (e) {
176
- errors.push(`Step "${step.text}": select failed — ${e.message}`);
177
- }
178
- }
179
- }
180
- }
181
- // Label-value detection: check if the data value appears in a sibling element
182
- if (action === 'see' && normalizedType === 'text' && (elementType === 'label' || elementType === 'title' || elementType === 'caption') && testData && step.dataRef) {
183
- const dataValue = resolveDataRef(testData, step.dataRef);
184
- if (dataValue) {
185
- try {
186
- // Check if the parent container has both the label text and the data value
187
- const hasLabelValue = await page.getByText(new RegExp(escapeRegex(element.gherkinRef) + '.*' + escapeRegex(dataValue))).first().isVisible({ timeout: 2000 });
188
- if (hasLabelValue) {
189
- element.matchMethod = 'label-value';
190
- elements[key] = element;
191
- }
192
- }
193
- catch {
194
- // Regex match failed, keep original matchMethod
195
- }
196
- }
197
- }
198
- // 'see' and 'wait' actions: just record, don't interact
199
- }
200
- else {
201
- // Try data-value fallback for click actions: use the resolved data value as element name
202
- if (action === 'click' && testData && step.dataRef) {
203
- const dataValue = resolveDataRef(testData, step.dataRef);
204
- if (dataValue) {
205
- // Brief wait for dynamic content (e.g. autocomplete dropdown after fill)
206
- await page.waitForTimeout(1000);
207
- const fallback = await (0, element_finder_1.findElement)(page, dataValue, elementType, nth, currentContext);
208
- if (fallback.matchMethod !== 'unresolved') {
209
- // Preserve original gherkinRef; clear locator values since they come
210
- // from test-data ({{dataRef}}) at runtime, not hardcoded from DOM.
211
- // Store dataValue for logging in scanner.ts
212
- fallback.gherkinRef = step.selectorRef;
213
- fallback.dataValue = dataValue;
214
- fallback.name = '';
215
- fallback.exact = false;
216
- elements[key] = fallback;
217
- try {
218
- await executeClick(page, dataValue, elementType, nth);
219
- await settle(page);
220
- currentContext = await detectCurrentContext(page, currentContext, step.text);
221
- }
222
- catch {
223
- // Click failed, element still recorded
224
- }
225
- continue;
226
- }
227
- }
228
- }
229
- errors.push(`Step "${step.text}": element [${step.selectorRef}] not found`);
230
- // Continue scanning remaining steps — record what we can even if some elements are missing
231
- }
232
- }
233
- catch (error) {
234
- errors.push(`Step "${step.text}": ${error.message}`);
235
- // On navigation or critical errors, stop replaying this scenario
236
- if (error.message.includes('Navigation') || error.message.includes('net::')) {
237
- break;
238
- }
239
- }
240
- }
241
- return { elements, errors };
242
- }
243
- async function executeClick(page, ref, elementType, nth) {
244
- const namePattern = new RegExp(escapeRegex(ref), 'i');
245
- // Try role-based click first
246
- const { getRoleFallbacks } = require('./role-fallback');
247
- const roles = getRoleFallbacks(elementType);
248
- for (const role of roles) {
249
- try {
250
- const locator = page.getByRole(role, { name: namePattern });
251
- const target = nth > 0 ? locator.nth(nth) : locator.first();
252
- if (await target.isVisible({ timeout: 3000 })) {
253
- await target.click({ timeout: 5000 });
254
- return;
255
- }
256
- }
257
- catch {
258
- continue;
259
- }
260
- }
261
- // Fallback to text click
262
- try {
263
- const locator = page.getByText(namePattern);
264
- const target = nth > 0 ? locator.nth(nth) : locator.first();
265
- await target.click({ timeout: 5000 });
266
- }
267
- catch {
268
- // Try testid as last resort
269
- const normalized = ref.toLowerCase().replace(/[\s_-]+/g, '-');
270
- await page.locator(`[data-testid*="${normalized}" i]`).first().click({ timeout: 5000 });
271
- }
272
- }
273
- async function executeFill(page, ref, elementType, nth, value) {
274
- const namePattern = new RegExp(escapeRegex(ref), 'i');
275
- // Try placeholder first — most direct for input fields, avoids slow role attempts
276
- try {
277
- const locator = page.getByPlaceholder(namePattern);
278
- const target = nth > 0 ? locator.nth(nth) : locator.first();
279
- if (await target.isVisible({ timeout: 3000 })) {
280
- await target.fill(value, { timeout: 5000 });
281
- return;
282
- }
283
- }
284
- catch {
285
- // continue
286
- }
287
- // Try label
288
- try {
289
- const locator = page.getByLabel(namePattern);
290
- const target = nth > 0 ? locator.nth(nth) : locator.first();
291
- if (await target.isVisible({ timeout: 3000 })) {
292
- await target.fill(value, { timeout: 5000 });
293
- return;
294
- }
295
- }
296
- catch {
297
- // continue
298
- }
299
- // Try role-based fill (textbox, combobox, spinbutton)
300
- const { getRoleFallbacks } = require('./role-fallback');
301
- const roles = getRoleFallbacks(elementType);
302
- for (const role of roles) {
303
- try {
304
- const locator = page.getByRole(role, { name: namePattern });
305
- const target = nth > 0 ? locator.nth(nth) : locator.first();
306
- if (await target.isVisible({ timeout: 3000 })) {
307
- await target.fill(value, { timeout: 5000 });
308
- return;
309
- }
310
- }
311
- catch {
312
- continue;
313
- }
314
- }
315
- // Try testid as last resort
316
- const normalized = ref.toLowerCase().replace(/[\s_-]+/g, '-');
317
- await page.locator(`[data-testid*="${normalized}" i]`).first().fill(value, { timeout: 5000 });
318
- }
319
- async function executeSelect(page, ref, elementType, nth, value) {
320
- const namePattern = new RegExp(escapeRegex(ref), 'i');
321
- // Try label first — most direct for select elements
322
- try {
323
- const locator = page.getByLabel(namePattern);
324
- const target = nth > 0 ? locator.nth(nth) : locator.first();
325
- if (await target.isVisible({ timeout: 3000 })) {
326
- await target.selectOption(value, { timeout: 5000 });
327
- return;
328
- }
329
- }
330
- catch {
331
- // continue
332
- }
333
- // Try role-based select (combobox, listbox)
334
- const { getRoleFallbacks } = require('./role-fallback');
335
- const roles = getRoleFallbacks(elementType);
336
- for (const role of roles) {
337
- try {
338
- const locator = page.getByRole(role, { name: namePattern });
339
- const target = nth > 0 ? locator.nth(nth) : locator.first();
340
- if (await target.isVisible({ timeout: 3000 })) {
341
- await target.selectOption(value, { timeout: 5000 });
342
- return;
343
- }
344
- }
345
- catch {
346
- continue;
347
- }
348
- }
349
- // Try testid as last resort
350
- const normalized = ref.toLowerCase().replace(/[\s_-]+/g, '-');
351
- await page.locator(`[data-testid*="${normalized}" i]`).first().selectOption(value, { timeout: 5000 });
352
- }
353
- function detectAction(text) {
354
- const lower = text.toLowerCase();
355
- if (/\b(is on|navigate|go to|visit|open)\b/.test(lower) && /\bpage\b/.test(lower))
356
- return 'navigate';
357
- if (/\b(click|press|tap|submit)\b/.test(lower))
358
- return 'click';
359
- if (/\b(fill|enter|type|input)\b/.test(lower))
360
- return 'fill';
361
- if (/\b(see|verify|check|expect|visible|displayed)\b/.test(lower))
362
- return 'see';
363
- if (/\b(select|choose|pick)\b/.test(lower))
364
- return 'select';
365
- if (/\b(wait)\b/.test(lower))
366
- return 'wait';
367
- return 'see';
368
- }
369
- async function detectCurrentContext(page, previous, stepText) {
370
- const lower = stepText.toLowerCase();
371
- // Check if we opened a dialog/modal
372
- if (/\b(dialog|modal|panel)\b/.test(lower)) {
373
- return 'dialog';
374
- }
375
- // Check if a dialog is now visible on the page
376
- try {
377
- const dialogLocator = page.getByRole('dialog');
378
- if (await dialogLocator.count() > 0) {
379
- return 'dialog';
380
- }
381
- }
382
- catch {
383
- // ignore
384
- }
385
- // Check for menu
386
- if (/\b(menu|dropdown)\b/.test(lower)) {
387
- return 'menu';
388
- }
389
- try {
390
- const menuLocator = page.getByRole('menu');
391
- if (await menuLocator.count() > 0) {
392
- return 'menu';
393
- }
394
- }
395
- catch {
396
- // ignore
397
- }
398
- return previous;
399
- }
400
- async function settle(page) {
401
- try {
402
- await page.waitForLoadState('networkidle', { timeout: 5000 });
403
- }
404
- catch {
405
- // Timeout is acceptable — page may have long-polling connections
406
- }
407
- // Small extra wait for animations/transitions
408
- await page.waitForTimeout(300);
409
- }
410
- function generateElementKey(ref, elementType, nth) {
411
- // Use the same key generation as the scaffold generator
412
- // so live-scan keys match scaffold keys in the map command.
413
- // Append --N suffix for nth > 0, consistent with scaffold generator format.
414
- const baseKey = selector_resolver_1.SelectorResolver.generateKey(ref);
415
- return nth && nth > 0 ? `${baseKey}--${nth}` : baseKey;
416
- }
417
- /**
418
- * Normalize element type to match scaffold generator's extractTargetType() mapping.
419
- * e.g. modal→dialog, img/icon/logo→img, input→field, select→dropdown, etc.
420
- */
421
- function normalizeElementType(elementType, action) {
422
- const t = elementType.toLowerCase();
423
- if (t === 'page')
424
- return 'page';
425
- if (t === 'link')
426
- return 'link';
427
- if (t === 'button')
428
- return 'button';
429
- if (t === 'radio')
430
- return 'radio';
431
- if (t === 'dropdown' || t === 'select')
432
- return 'dropdown';
433
- if (t === 'checkbox')
434
- return 'checkbox';
435
- if (t === 'field' || t === 'input')
436
- return 'field';
437
- if (t === 'textbox')
438
- return 'textbox';
439
- if (t === 'textarea')
440
- return 'textarea';
441
- if (t === 'text')
442
- return 'text';
443
- if (t === 'label')
444
- return 'label';
445
- if (t === 'uploader')
446
- return 'uploader';
447
- if (t === 'element')
448
- return 'element';
449
- if (t === 'column' || t === 'columnheader')
450
- return 'column';
451
- if (t === 'logo' || t === 'image' || t === 'img' || t === 'icon')
452
- return 'img';
453
- if (t === 'option' || t === 'item' || t === 'listitem')
454
- return 'option';
455
- if (t === 'dialog' || t === 'modal')
456
- return 'dialog';
457
- if (t === 'heading' || t === 'header')
458
- return 'heading';
459
- if (t === 'title' || t === 'caption' || t === 'message')
460
- return 'text';
461
- // Default based on action (matches scaffold generator)
462
- switch (action) {
463
- case 'click': return 'text';
464
- case 'fill': return 'field';
465
- case 'see': return 'text';
466
- case 'select': return 'dropdown';
467
- default: return 'element';
468
- }
469
- }
470
- function escapeRegex(str) {
471
- return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
472
- }
473
- //# sourceMappingURL=step-replayer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"step-replayer.js","sourceRoot":"","sources":["../../../src/core/live-scanner/step-replayer.ts"],"names":[],"mappings":"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"}
@@ -1,52 +0,0 @@
1
- /**
2
- * Live Scanner Types
3
- * Defines the data structures for live DOM scanning and matrix file output.
4
- *
5
- * Selector types map directly to Playwright locator strategies:
6
- * testid → page.getByTestId(value)
7
- * role → page.getByRole(value, { name })
8
- * label → page.getByLabel(value)
9
- * placeholder → page.getByPlaceholder(value)
10
- * text → page.getByText(value)
11
- */
12
- export type MatchMethod = 'testid' | 'exact_role' | 'role_fallback' | 'label' | 'placeholder' | 'text_only' | 'contenteditable' | 'label-value' | 'unresolved';
13
- export type SelectorType = 'testid' | 'role' | 'label' | 'placeholder' | 'text' | 'locator';
14
- export type ElementContext = 'page' | 'dialog' | 'menu' | 'modal' | 'popup';
15
- export interface LiveElement {
16
- gherkinRef: string;
17
- gherkinType: string;
18
- selectorType: SelectorType | '';
19
- selectorValue: string;
20
- role: string;
21
- name: string;
22
- testid: string | null;
23
- tag: string;
24
- contenteditable: boolean;
25
- placeholder: string | null;
26
- label: string | null;
27
- context: ElementContext;
28
- matchMethod: MatchMethod;
29
- exact: boolean;
30
- warning: string | null;
31
- }
32
- export interface LiveScanScenario {
33
- auth: string | null;
34
- extends: string | null;
35
- path: string;
36
- elements: Record<string, LiveElement>;
37
- }
38
- export interface LiveScanResult {
39
- screen: string;
40
- baseUrl: string;
41
- scannedAt: string;
42
- scenarios: Record<string, LiveScanScenario>;
43
- }
44
- export interface LiveScanOptions {
45
- baseUrl?: string;
46
- screenName: string;
47
- screensDir: string;
48
- headed?: boolean;
49
- authDir?: string;
50
- force?: boolean;
51
- }
52
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/live-scanner/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,eAAe,GAAG,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,iBAAiB,GAAG,aAAa,GAAG,YAAY,CAAC;AAE/J,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,MAAM,GAAG,SAAS,CAAC;AAE5F,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5E,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,YAAY,GAAG,EAAE,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,cAAc,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB"}
@@ -1,14 +0,0 @@
1
- "use strict";
2
- /**
3
- * Live Scanner Types
4
- * Defines the data structures for live DOM scanning and matrix file output.
5
- *
6
- * Selector types map directly to Playwright locator strategies:
7
- * testid → page.getByTestId(value)
8
- * role → page.getByRole(value, { name })
9
- * label → page.getByLabel(value)
10
- * placeholder → page.getByPlaceholder(value)
11
- * text → page.getByText(value)
12
- */
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/live-scanner/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG"}
@@ -1,45 +0,0 @@
1
- /**
2
- * Annotation Handler
3
- * Handles Gherkin annotations: selector IDs, data refs, ignore, etc.
4
- */
5
- import { RuntimeConfig } from '../../config/config-schema';
6
- import { ParsedScenario, ParsedStep } from './gherkin-parser';
7
- export interface ExtractedAnnotation {
8
- id: string;
9
- type: 'selector' | 'data' | 'ignore';
10
- value?: string;
11
- }
12
- export declare class AnnotationHandler {
13
- private config;
14
- constructor(config: RuntimeConfig);
15
- /**
16
- * Extract element ID from step text
17
- * Supports: [screen.element] ONLY (not data refs)
18
- * Data refs <data.field> are handled separately in test-data system
19
- */
20
- extractElementId(stepText: string, screenName: string): ExtractedAnnotation | null;
21
- /**
22
- * Check if step should be ignored
23
- * Supports: # @ignore
24
- */
25
- shouldIgnoreStep(step: ParsedStep): boolean;
26
- /**
27
- * Check if entire scenario should be ignored
28
- * Supports: # @ignore-testcase
29
- */
30
- shouldIgnoreScenario(scenario: ParsedScenario): boolean;
31
- /**
32
- * Check if step should be skipped in production
33
- * Supports: # @skip-production
34
- */
35
- shouldSkipInProduction(step: ParsedStep): boolean;
36
- /**
37
- * Extract all element IDs from step (can have multiple)
38
- */
39
- extractAllElementIds(stepText: string): string[];
40
- /**
41
- * Extract data references from step
42
- */
43
- extractDataRefs(stepText: string): string[];
44
- }
45
- //# sourceMappingURL=annotation-handler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"annotation-handler.d.ts","sourceRoot":"","sources":["../../../src/core/selector-base/annotation-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAIjC;;;;OAIG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAyBlF;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO;IAK3C;;;OAGG;IACH,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO;IAoBvD;;;OAGG;IACH,sBAAsB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO;IAKjD;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAchD;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;CAa5C"}