@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,486 +0,0 @@
1
- "use strict";
2
- /**
3
- * Element Finder
4
- *
5
- * Searches for elements using Playwright's own locator strategies in priority order:
6
- * ① getByTestId — data-testid attribute
7
- * ② getByRole — ARIA role + accessible name (exact match, then fallback roles)
8
- * ③ getByLabel — associated <label> text
9
- * ④ getByPlaceholder — placeholder attribute
10
- * ⑤ getByText — visible text content
11
- *
12
- * The result records WHICH Playwright strategy found the element,
13
- * so `map` can generate the correct locator code.
14
- */
15
- Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.findElement = findElement;
17
- const role_fallback_1 = require("./role-fallback");
18
- /**
19
- * Find an element on the page using cascading Playwright locator strategies.
20
- */
21
- async function findElement(page, gherkinRef, gherkinType, nth = 0, context = 'page') {
22
- const namePattern = new RegExp(escapeRegex(gherkinRef), 'i');
23
- const result = await cascadingSearch(page, gherkinRef, gherkinType, namePattern, nth, context);
24
- if (!result) {
25
- return buildUnresolvedElement(gherkinRef, gherkinType);
26
- }
27
- const attrs = await extractElementAttributes(result.locator);
28
- // Use Playwright's computed accessible name (includes alt text, aria-label, etc.)
29
- // This matches what getByRole/getByText actually see, unlike textContent
30
- let playwrightName = '';
31
- try {
32
- playwrightName = await result.locator.evaluate((el) => {
33
- // computedRole/computedLabel not available in all browsers, fallback to aria
34
- const raw = el.computedName
35
- || el.getAttribute('aria-label')
36
- || el.textContent?.trim()?.substring(0, 100)
37
- || '';
38
- return raw.replace(/[\n\r\t]/g, ' ').replace(/\s+/g, ' ').trim();
39
- });
40
- // Better approach: use Playwright's accessibility snapshot
41
- const ariaSnapshot = await result.locator.ariaSnapshot();
42
- // Parse accessible name from snapshot (format: "- role \"name\"" or "- role \"name\": ...")
43
- // Regex handles escaped quotes (\") inside the name string
44
- const nameMatch = ariaSnapshot?.match(/"((?:[^"\\]|\\.)*)"/);
45
- if (nameMatch) {
46
- playwrightName = unescapeAriaSnapshot(nameMatch[1]);
47
- }
48
- }
49
- catch {
50
- playwrightName = attrs.accessibleName || gherkinRef;
51
- }
52
- const actualName = playwrightName || attrs.accessibleName || gherkinRef;
53
- const isExactMatch = actualName.toLowerCase().trim() === gherkinRef.toLowerCase().trim();
54
- return {
55
- gherkinRef,
56
- gherkinType,
57
- selectorType: result.selectorType,
58
- selectorValue: result.selectorValue,
59
- role: result.role,
60
- name: actualName,
61
- testid: attrs.testid,
62
- tag: attrs.tag,
63
- contenteditable: attrs.contenteditable,
64
- placeholder: attrs.placeholder,
65
- label: attrs.label,
66
- context: 'page',
67
- matchMethod: result.matchMethod,
68
- exact: isExactMatch,
69
- warning: result.warning,
70
- };
71
- }
72
- async function cascadingSearch(page, gherkinRef, gherkinType, namePattern, nth, context = 'page') {
73
- // ① getByTestId
74
- const testidResult = await tryTestId(page, gherkinRef, nth);
75
- if (testidResult)
76
- return testidResult;
77
- // For text-only types (text, message, error), skip role and go to text
78
- if (!(0, role_fallback_1.isTextOnlyType)(gherkinType)) {
79
- // ② getByRole — exact role match
80
- const roles = (0, role_fallback_1.getRoleFallbacks)(gherkinType);
81
- if (roles.length > 0) {
82
- const exactResult = await tryRole(page, roles[0], gherkinRef, namePattern, nth);
83
- if (exactResult) {
84
- return {
85
- ...exactResult,
86
- matchMethod: 'exact_role',
87
- warning: null,
88
- };
89
- }
90
- // ③ getByRole — fallback roles
91
- for (let i = 1; i < roles.length; i++) {
92
- const fallbackResult = await tryRole(page, roles[i], gherkinRef, namePattern, nth);
93
- if (fallbackResult) {
94
- return {
95
- ...fallbackResult,
96
- matchMethod: 'role_fallback',
97
- warning: `Gherkin says '${gherkinType}' but found role '${roles[i]}'`,
98
- };
99
- }
100
- }
101
- }
102
- // ④ getByLabel — for form elements
103
- const labelResult = await tryLabel(page, gherkinRef, namePattern, nth);
104
- if (labelResult)
105
- return labelResult;
106
- // ⑤ getByPlaceholder — for input fields
107
- const placeholderResult = await tryPlaceholder(page, gherkinRef, namePattern, nth);
108
- if (placeholderResult)
109
- return placeholderResult;
110
- // ⑤.5 contenteditable — for rich text editors (textarea/textbox/field types)
111
- // When role match fails (editor has role="textbox" but no accessible name),
112
- // try to find a [contenteditable="true"] element scoped to the current context
113
- if (isEditableType(gherkinType)) {
114
- const ceResult = await tryContentEditable(page, nth, context);
115
- if (ceResult)
116
- return ceResult;
117
- }
118
- }
119
- // ⑥ getByText — final fallback
120
- const textResult = await tryText(page, gherkinRef, namePattern, nth);
121
- if (textResult)
122
- return textResult;
123
- return null;
124
- }
125
- // ① getByTestId
126
- async function tryTestId(page, ref, nth) {
127
- const normalized = ref.toLowerCase().replace(/[\s_-]+/g, '-');
128
- const patterns = [normalized, ref.toLowerCase().replace(/\s+/g, '')];
129
- for (const pattern of patterns) {
130
- try {
131
- const locator = page.locator(`[data-testid*="${pattern}" i]`);
132
- const count = await locator.count();
133
- if (count > 0) {
134
- const target = nth > 0 ? locator.nth(nth) : locator.first();
135
- if (await target.isVisible({ timeout: 3000 })) {
136
- const testid = await target.getAttribute('data-testid');
137
- return {
138
- locator: target,
139
- selectorType: 'testid',
140
- selectorValue: testid || pattern,
141
- role: '',
142
- matchMethod: 'testid',
143
- warning: null,
144
- };
145
- }
146
- }
147
- }
148
- catch {
149
- // Continue
150
- }
151
- }
152
- return null;
153
- }
154
- // ② ③ getByRole — regex first, exact disambiguation when ambiguous
155
- async function tryRole(page, role, gherkinRef, namePattern, nth) {
156
- try {
157
- const locator = page.getByRole(role, { name: namePattern });
158
- const count = await locator.count();
159
- if (count === 0)
160
- return null;
161
- if (count === 1) {
162
- // Single match — use directly, zero overhead
163
- const target = nth > 0 ? locator.nth(nth) : locator.first();
164
- if (await target.isVisible({ timeout: 3000 })) {
165
- // Get the actual accessible name for the selector
166
- const accessibleName = await target.evaluate((el) => el.getAttribute('aria-label') || el.textContent?.trim()?.substring(0, 100) || '');
167
- return {
168
- locator: target,
169
- selectorType: 'role',
170
- selectorValue: role,
171
- role: role,
172
- matchMethod: 'exact_role',
173
- warning: null,
174
- };
175
- }
176
- }
177
- else {
178
- // Multiple matches — try exact to disambiguate
179
- try {
180
- const exactLocator = page.getByRole(role, { name: gherkinRef, exact: true });
181
- const exactCount = await exactLocator.count();
182
- if (exactCount > 0) {
183
- const target = nth > 0 ? exactLocator.nth(nth) : exactLocator.first();
184
- if (await target.isVisible({ timeout: 3000 })) {
185
- return {
186
- locator: target,
187
- selectorType: 'role',
188
- selectorValue: role,
189
- role: role,
190
- matchMethod: 'exact_role',
191
- warning: null,
192
- };
193
- }
194
- }
195
- }
196
- catch {
197
- // Exact disambiguation failed
198
- }
199
- // Fall back to first regex match
200
- const target = nth > 0 ? locator.nth(nth) : locator.first();
201
- if (await target.isVisible({ timeout: 3000 })) {
202
- // Get the actual accessible name for the selector
203
- const accessibleName = await target.evaluate((el) => el.getAttribute('aria-label') || el.textContent?.trim()?.substring(0, 100) || '');
204
- return {
205
- locator: target,
206
- selectorType: 'role',
207
- selectorValue: role,
208
- role: role,
209
- matchMethod: 'exact_role',
210
- warning: null,
211
- };
212
- }
213
- }
214
- }
215
- catch {
216
- // Role not found
217
- }
218
- return null;
219
- }
220
- // ④ getByLabel — regex first, exact disambiguation when ambiguous
221
- async function tryLabel(page, gherkinRef, namePattern, nth) {
222
- try {
223
- const locator = page.getByLabel(namePattern);
224
- const count = await locator.count();
225
- if (count === 0)
226
- return null;
227
- if (count > 1) {
228
- // Multiple matches — try exact to disambiguate
229
- try {
230
- const exactLocator = page.getByLabel(gherkinRef, { exact: true });
231
- const exactCount = await exactLocator.count();
232
- if (exactCount > 0) {
233
- const target = nth > 0 ? exactLocator.nth(nth) : exactLocator.first();
234
- if (await target.isVisible({ timeout: 3000 })) {
235
- return {
236
- locator: target,
237
- selectorType: 'label',
238
- selectorValue: '',
239
- role: '',
240
- matchMethod: 'label',
241
- warning: null,
242
- };
243
- }
244
- }
245
- }
246
- catch {
247
- // Exact disambiguation failed
248
- }
249
- }
250
- // Single match or exact failed — use first regex match
251
- const target = nth > 0 ? locator.nth(nth) : locator.first();
252
- if (await target.isVisible({ timeout: 3000 })) {
253
- return {
254
- locator: target,
255
- selectorType: 'label',
256
- selectorValue: '',
257
- role: '',
258
- matchMethod: 'label',
259
- warning: null,
260
- };
261
- }
262
- }
263
- catch {
264
- // Label not found
265
- }
266
- return null;
267
- }
268
- // ⑤ getByPlaceholder — regex first, exact disambiguation when ambiguous
269
- async function tryPlaceholder(page, gherkinRef, namePattern, nth) {
270
- try {
271
- const locator = page.getByPlaceholder(namePattern);
272
- const count = await locator.count();
273
- if (count === 0)
274
- return null;
275
- if (count > 1) {
276
- // Multiple matches — try exact to disambiguate
277
- try {
278
- const exactLocator = page.getByPlaceholder(gherkinRef, { exact: true });
279
- const exactCount = await exactLocator.count();
280
- if (exactCount > 0) {
281
- const target = nth > 0 ? exactLocator.nth(nth) : exactLocator.first();
282
- if (await target.isVisible({ timeout: 3000 })) {
283
- const rawPlaceholder = await target.getAttribute('placeholder');
284
- return {
285
- locator: target,
286
- selectorType: 'placeholder',
287
- selectorValue: sanitizeText(rawPlaceholder || ''),
288
- role: '',
289
- matchMethod: 'placeholder',
290
- warning: null,
291
- };
292
- }
293
- }
294
- }
295
- catch {
296
- // Exact disambiguation failed
297
- }
298
- }
299
- // Single match or exact failed — use first regex match
300
- const target = nth > 0 ? locator.nth(nth) : locator.first();
301
- if (await target.isVisible({ timeout: 3000 })) {
302
- const rawPlaceholder = await target.getAttribute('placeholder');
303
- return {
304
- locator: target,
305
- selectorType: 'placeholder',
306
- selectorValue: sanitizeText(rawPlaceholder || ''),
307
- role: '',
308
- matchMethod: 'placeholder',
309
- warning: null,
310
- };
311
- }
312
- }
313
- catch {
314
- // Placeholder not found
315
- }
316
- return null;
317
- }
318
- /**
319
- * Check if gherkinType is an editable/input type that could be a contenteditable div
320
- */
321
- function isEditableType(gherkinType) {
322
- const normalized = gherkinType.toLowerCase().trim();
323
- return normalized === 'textarea' || normalized === 'textbox' || normalized === 'field' || normalized === 'editor';
324
- }
325
- // ⑤.5 contenteditable — for rich text editors
326
- // Scoped to current context (dialog/page) to avoid matching wrong editor.
327
- // The nth from Gherkin refers to text matches, not contenteditable count,
328
- // so we try the requested nth first, then fall back to first match.
329
- async function tryContentEditable(page, nth, context) {
330
- try {
331
- // Scope the search to the current context
332
- const root = context === 'dialog' ? page.getByRole('dialog') : page;
333
- const locator = root.locator('[contenteditable="true"]');
334
- const count = await locator.count();
335
- if (count === 0)
336
- return null;
337
- // Try requested nth first, then fall back to first visible
338
- const candidates = nth > 0 && count > nth ? [nth, 0] : [0];
339
- for (const idx of candidates) {
340
- const target = idx > 0 ? locator.nth(idx) : locator.first();
341
- if (await target.isVisible({ timeout: 3000 })) {
342
- return {
343
- locator: target,
344
- selectorType: 'locator',
345
- selectorValue: '[contenteditable="true"]',
346
- role: 'textbox',
347
- matchMethod: 'contenteditable',
348
- warning: count > 1
349
- ? `${count} contenteditable elements in ${context}, using index ${idx}. Use nth in Gherkin to disambiguate.`
350
- : null,
351
- };
352
- }
353
- }
354
- }
355
- catch {
356
- // Not found
357
- }
358
- return null;
359
- }
360
- // ⑥ getByText — regex first, exact disambiguation when ambiguous
361
- async function tryText(page, gherkinRef, namePattern, nth) {
362
- try {
363
- const locator = page.getByText(namePattern);
364
- const count = await locator.count();
365
- if (count === 0)
366
- return null;
367
- if (count > 1) {
368
- // Multiple matches — try exact to disambiguate
369
- try {
370
- const exactLocator = page.getByText(gherkinRef, { exact: true });
371
- const exactCount = await exactLocator.count();
372
- if (exactCount > 0) {
373
- const target = nth > 0 ? exactLocator.nth(nth) : exactLocator.first();
374
- if (await target.isVisible({ timeout: 3000 })) {
375
- return {
376
- locator: target,
377
- selectorType: 'text',
378
- selectorValue: '',
379
- role: '',
380
- matchMethod: 'text_only',
381
- warning: null,
382
- };
383
- }
384
- }
385
- }
386
- catch {
387
- // Exact disambiguation failed
388
- }
389
- }
390
- // Single match or exact failed — use first regex match
391
- const target = nth > 0 ? locator.nth(nth) : locator.first();
392
- if (await target.isVisible({ timeout: 3000 })) {
393
- return {
394
- locator: target,
395
- selectorType: 'text',
396
- selectorValue: '',
397
- role: '',
398
- matchMethod: 'text_only',
399
- warning: null,
400
- };
401
- }
402
- }
403
- catch {
404
- // Text not found
405
- }
406
- return null;
407
- }
408
- async function extractElementAttributes(locator) {
409
- try {
410
- return await locator.evaluate((el) => {
411
- // Inline sanitizer — browser context can't access Node functions
412
- const clean = (s) => (s || '').replace(/[\n\r\t]/g, ' ').replace(/\s+/g, ' ').trim();
413
- // Find associated label
414
- let label = null;
415
- if (el.id) {
416
- const labelEl = el.ownerDocument.querySelector(`label[for="${el.id}"]`);
417
- if (labelEl)
418
- label = clean(labelEl.textContent) || null;
419
- }
420
- if (!label && el.closest('label')) {
421
- label = clean(el.closest('label')?.textContent) || null;
422
- }
423
- // Detect contenteditable: check element itself and ancestors (rich text editors
424
- // often have contenteditable on a parent div wrapping the editable area)
425
- const isContentEditable = el.getAttribute('contenteditable') === 'true'
426
- || el.isContentEditable;
427
- return {
428
- testid: el.getAttribute('data-testid'),
429
- tag: el.tagName.toLowerCase(),
430
- contenteditable: isContentEditable,
431
- accessibleName: clean(el.getAttribute('aria-label') || el.textContent?.trim()?.substring(0, 100)),
432
- placeholder: clean(el.getAttribute('placeholder')) || null,
433
- label,
434
- };
435
- });
436
- }
437
- catch {
438
- return { testid: null, tag: 'unknown', contenteditable: false, accessibleName: '', placeholder: null, label: null };
439
- }
440
- }
441
- function buildUnresolvedElement(gherkinRef, gherkinType) {
442
- return {
443
- gherkinRef,
444
- gherkinType,
445
- selectorType: '',
446
- selectorValue: '',
447
- role: '',
448
- name: gherkinRef,
449
- testid: null,
450
- tag: '',
451
- contenteditable: false,
452
- placeholder: null,
453
- label: null,
454
- context: 'page',
455
- matchMethod: 'unresolved',
456
- exact: false,
457
- warning: 'Element not found on page',
458
- };
459
- }
460
- /**
461
- * Normalize a DOM text value for YAML output:
462
- * collapse real newlines/tabs/carriage-returns into spaces, then deduplicate whitespace.
463
- * Runs in both browser evaluate() and Node context.
464
- */
465
- function sanitizeText(str) {
466
- return str.replace(/[\n\r\t]/g, ' ').replace(/\s+/g, ' ').trim();
467
- }
468
- /**
469
- * Unescape a string extracted from Playwright's ariaSnapshot() output.
470
- * ariaSnapshot encodes special chars as literal escape sequences:
471
- * \n → newline, \t → tab, \\ → backslash, \" → quote
472
- * We unescape them then normalize whitespace.
473
- */
474
- function unescapeAriaSnapshot(str) {
475
- return str
476
- .replace(/\\n/g, ' ')
477
- .replace(/\\t/g, ' ')
478
- .replace(/\\"/g, '"')
479
- .replace(/\\\\/g, '\\')
480
- .replace(/\s+/g, ' ')
481
- .trim();
482
- }
483
- function escapeRegex(str) {
484
- return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
485
- }
486
- //# sourceMappingURL=element-finder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"element-finder.js","sourceRoot":"","sources":["../../../src/core/live-scanner/element-finder.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- export { LiveScanner } from './scanner';
2
- export { findElement } from './element-finder';
3
- export { getRoleFallbacks, isTextOnlyType } from './role-fallback';
4
- export { writeMatrix } from './matrix-writer';
5
- export { readMatrix, mergeMatrixElements } from './matrix-reader';
6
- export { readBaseUrlFromPlaywrightConfig } from './config-reader';
7
- export * from './types';
8
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/live-scanner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAClE,cAAc,SAAS,CAAC"}
@@ -1,33 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.readBaseUrlFromPlaywrightConfig = exports.mergeMatrixElements = exports.readMatrix = exports.writeMatrix = exports.isTextOnlyType = exports.getRoleFallbacks = exports.findElement = exports.LiveScanner = void 0;
18
- var scanner_1 = require("./scanner");
19
- Object.defineProperty(exports, "LiveScanner", { enumerable: true, get: function () { return scanner_1.LiveScanner; } });
20
- var element_finder_1 = require("./element-finder");
21
- Object.defineProperty(exports, "findElement", { enumerable: true, get: function () { return element_finder_1.findElement; } });
22
- var role_fallback_1 = require("./role-fallback");
23
- Object.defineProperty(exports, "getRoleFallbacks", { enumerable: true, get: function () { return role_fallback_1.getRoleFallbacks; } });
24
- Object.defineProperty(exports, "isTextOnlyType", { enumerable: true, get: function () { return role_fallback_1.isTextOnlyType; } });
25
- var matrix_writer_1 = require("./matrix-writer");
26
- Object.defineProperty(exports, "writeMatrix", { enumerable: true, get: function () { return matrix_writer_1.writeMatrix; } });
27
- var matrix_reader_1 = require("./matrix-reader");
28
- Object.defineProperty(exports, "readMatrix", { enumerable: true, get: function () { return matrix_reader_1.readMatrix; } });
29
- Object.defineProperty(exports, "mergeMatrixElements", { enumerable: true, get: function () { return matrix_reader_1.mergeMatrixElements; } });
30
- var config_reader_1 = require("./config-reader");
31
- Object.defineProperty(exports, "readBaseUrlFromPlaywrightConfig", { enumerable: true, get: function () { return config_reader_1.readBaseUrlFromPlaywrightConfig; } });
32
- __exportStar(require("./types"), exports);
33
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/live-scanner/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qCAAwC;AAA/B,sGAAA,WAAW,OAAA;AACpB,mDAA+C;AAAtC,6GAAA,WAAW,OAAA;AACpB,iDAAmE;AAA1D,iHAAA,gBAAgB,OAAA;AAAE,+GAAA,cAAc,OAAA;AACzC,iDAA8C;AAArC,4GAAA,WAAW,OAAA;AACpB,iDAAkE;AAAzD,2GAAA,UAAU,OAAA;AAAE,oHAAA,mBAAmB,OAAA;AACxC,iDAAkE;AAAzD,gIAAA,+BAA+B,OAAA;AACxC,0CAAwB"}
@@ -1,17 +0,0 @@
1
- /**
2
- * Matrix Reader
3
- * Loads and parses a .live-scan.yaml file for consumption by the map command.
4
- * Merges elements across scenarios (first match wins).
5
- */
6
- import { LiveElement, LiveScanResult } from './types';
7
- /**
8
- * Read a .live-scan.yaml file and return the parsed result.
9
- * Returns null if file doesn't exist.
10
- */
11
- export declare function readMatrix(filePath: string): LiveScanResult | null;
12
- /**
13
- * Merge all elements across scenarios into a flat map.
14
- * First successful (non-unresolved) match wins for duplicate keys.
15
- */
16
- export declare function mergeMatrixElements(result: LiveScanResult): Record<string, LiveElement>;
17
- //# sourceMappingURL=matrix-reader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"matrix-reader.d.ts","sourceRoot":"","sources":["../../../src/core/live-scanner/matrix-reader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAQlE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAqCvF"}
@@ -1,60 +0,0 @@
1
- "use strict";
2
- /**
3
- * Matrix Reader
4
- * Loads and parses a .live-scan.yaml file for consumption by the map command.
5
- * Merges elements across scenarios (first match wins).
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.readMatrix = readMatrix;
9
- exports.mergeMatrixElements = mergeMatrixElements;
10
- const yaml_io_1 = require("../../utils/yaml-io");
11
- /**
12
- * Read a .live-scan.yaml file and return the parsed result.
13
- * Returns null if file doesn't exist.
14
- */
15
- function readMatrix(filePath) {
16
- const parsed = (0, yaml_io_1.readYamlIfExists)(filePath);
17
- if (!parsed || !parsed.scenarios) {
18
- return null;
19
- }
20
- return parsed;
21
- }
22
- /**
23
- * Merge all elements across scenarios into a flat map.
24
- * First successful (non-unresolved) match wins for duplicate keys.
25
- */
26
- function mergeMatrixElements(result) {
27
- const merged = {};
28
- for (const scenario of Object.values(result.scenarios)) {
29
- const elements = scenario.elements;
30
- if (!elements)
31
- continue;
32
- for (const [key, raw] of Object.entries(elements)) {
33
- const el = raw;
34
- // Convert from YAML snake_case to interface camelCase
35
- const element = {
36
- gherkinRef: el.name || key,
37
- gherkinType: el.gherkin_type || '',
38
- selectorType: el.selector_type || '',
39
- selectorValue: el.selector_value || '',
40
- role: el.role || '',
41
- name: el.name || '',
42
- testid: el.testid || null,
43
- tag: el.tag || '',
44
- contenteditable: el.contenteditable === true,
45
- placeholder: el.placeholder || null,
46
- label: el.label || null,
47
- context: el.context || 'page',
48
- matchMethod: el.match_method || 'unresolved',
49
- exact: el.exact === true,
50
- warning: el.warning || null,
51
- };
52
- // First non-unresolved match wins
53
- if (!merged[key] || (merged[key].matchMethod === 'unresolved' && element.matchMethod !== 'unresolved')) {
54
- merged[key] = element;
55
- }
56
- }
57
- }
58
- return merged;
59
- }
60
- //# sourceMappingURL=matrix-reader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"matrix-reader.js","sourceRoot":"","sources":["../../../src/core/live-scanner/matrix-reader.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AASH,gCAQC;AAMD,kDAqCC;AA1DD,iDAAuD;AAGvD;;;GAGG;AACH,SAAgB,UAAU,CAAC,QAAgB;IACzC,MAAM,MAAM,GAAG,IAAA,0BAAgB,EAAM,QAAQ,CAAC,CAAC;IAE/C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAwB,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,MAAsB;IACxD,MAAM,MAAM,GAAgC,EAAE,CAAC;IAE/C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAI,QAAgB,CAAC,QAAQ,CAAC;QAC5C,IAAI,CAAC,QAAQ;YAAE,SAAS;QAExB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClD,MAAM,EAAE,GAAG,GAAU,CAAC;YAEtB,sDAAsD;YACtD,MAAM,OAAO,GAAgB;gBAC3B,UAAU,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG;gBAC1B,WAAW,EAAE,EAAE,CAAC,YAAY,IAAI,EAAE;gBAClC,YAAY,EAAE,EAAE,CAAC,aAAa,IAAI,EAAE;gBACpC,aAAa,EAAE,EAAE,CAAC,cAAc,IAAI,EAAE;gBACtC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE;gBACnB,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE;gBACnB,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,IAAI;gBACzB,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE;gBACjB,eAAe,EAAE,EAAE,CAAC,eAAe,KAAK,IAAI;gBAC5C,WAAW,EAAE,EAAE,CAAC,WAAW,IAAI,IAAI;gBACnC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI;gBACvB,OAAO,EAAG,EAAE,CAAC,OAAe,IAAI,MAAM;gBACtC,WAAW,EAAG,EAAE,CAAC,YAAoB,IAAI,YAAY;gBACrD,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI;gBACxB,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,IAAI;aAC5B,CAAC;YAEF,kCAAkC;YAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK,YAAY,IAAI,OAAO,CAAC,WAAW,KAAK,YAAY,CAAC,EAAE,CAAC;gBACvG,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Matrix Writer
3
- * Writes LiveScanResult to a .live-scan.yaml file.
4
- */
5
- import { LiveScanResult } from './types';
6
- export declare function writeMatrix(result: LiveScanResult, outputPath: string): void;
7
- //# sourceMappingURL=matrix-writer.d.ts.map