@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,481 +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
- const target = nth > 0 ? locator.nth(nth) : locator.first();
163
- if (await target.isVisible({ timeout: 3000 })) {
164
- return {
165
- locator: target,
166
- selectorType: 'role',
167
- selectorValue: role,
168
- role: role,
169
- matchMethod: 'exact_role',
170
- warning: null,
171
- };
172
- }
173
- }
174
- else {
175
- // Multiple matches — try exact to disambiguate
176
- try {
177
- const exactLocator = page.getByRole(role, { name: gherkinRef, exact: true });
178
- const exactCount = await exactLocator.count();
179
- if (exactCount > 0) {
180
- const target = nth > 0 ? exactLocator.nth(nth) : exactLocator.first();
181
- if (await target.isVisible({ timeout: 3000 })) {
182
- return {
183
- locator: target,
184
- selectorType: 'role',
185
- selectorValue: role,
186
- role: role,
187
- matchMethod: 'exact_role',
188
- warning: null,
189
- };
190
- }
191
- }
192
- }
193
- catch {
194
- // Exact disambiguation failed
195
- }
196
- // Fall back to first regex match
197
- const target = nth > 0 ? locator.nth(nth) : locator.first();
198
- if (await target.isVisible({ timeout: 3000 })) {
199
- return {
200
- locator: target,
201
- selectorType: 'role',
202
- selectorValue: role,
203
- role: role,
204
- matchMethod: 'exact_role',
205
- warning: null,
206
- };
207
- }
208
- }
209
- }
210
- catch {
211
- // Role not found
212
- }
213
- return null;
214
- }
215
- // ④ getByLabel — regex first, exact disambiguation when ambiguous
216
- async function tryLabel(page, gherkinRef, namePattern, nth) {
217
- try {
218
- const locator = page.getByLabel(namePattern);
219
- const count = await locator.count();
220
- if (count === 0)
221
- return null;
222
- if (count > 1) {
223
- // Multiple matches — try exact to disambiguate
224
- try {
225
- const exactLocator = page.getByLabel(gherkinRef, { exact: true });
226
- const exactCount = await exactLocator.count();
227
- if (exactCount > 0) {
228
- const target = nth > 0 ? exactLocator.nth(nth) : exactLocator.first();
229
- if (await target.isVisible({ timeout: 3000 })) {
230
- return {
231
- locator: target,
232
- selectorType: 'label',
233
- selectorValue: '',
234
- role: '',
235
- matchMethod: 'label',
236
- warning: null,
237
- };
238
- }
239
- }
240
- }
241
- catch {
242
- // Exact disambiguation failed
243
- }
244
- }
245
- // Single match or exact failed — use first regex match
246
- const target = nth > 0 ? locator.nth(nth) : locator.first();
247
- if (await target.isVisible({ timeout: 3000 })) {
248
- return {
249
- locator: target,
250
- selectorType: 'label',
251
- selectorValue: '',
252
- role: '',
253
- matchMethod: 'label',
254
- warning: null,
255
- };
256
- }
257
- }
258
- catch {
259
- // Label not found
260
- }
261
- return null;
262
- }
263
- // ⑤ getByPlaceholder — regex first, exact disambiguation when ambiguous
264
- async function tryPlaceholder(page, gherkinRef, namePattern, nth) {
265
- try {
266
- const locator = page.getByPlaceholder(namePattern);
267
- const count = await locator.count();
268
- if (count === 0)
269
- return null;
270
- if (count > 1) {
271
- // Multiple matches — try exact to disambiguate
272
- try {
273
- const exactLocator = page.getByPlaceholder(gherkinRef, { exact: true });
274
- const exactCount = await exactLocator.count();
275
- if (exactCount > 0) {
276
- const target = nth > 0 ? exactLocator.nth(nth) : exactLocator.first();
277
- if (await target.isVisible({ timeout: 3000 })) {
278
- const rawPlaceholder = await target.getAttribute('placeholder');
279
- return {
280
- locator: target,
281
- selectorType: 'placeholder',
282
- selectorValue: sanitizeText(rawPlaceholder || ''),
283
- role: '',
284
- matchMethod: 'placeholder',
285
- warning: null,
286
- };
287
- }
288
- }
289
- }
290
- catch {
291
- // Exact disambiguation failed
292
- }
293
- }
294
- // Single match or exact failed — use first regex match
295
- const target = nth > 0 ? locator.nth(nth) : locator.first();
296
- if (await target.isVisible({ timeout: 3000 })) {
297
- const rawPlaceholder = await target.getAttribute('placeholder');
298
- return {
299
- locator: target,
300
- selectorType: 'placeholder',
301
- selectorValue: sanitizeText(rawPlaceholder || ''),
302
- role: '',
303
- matchMethod: 'placeholder',
304
- warning: null,
305
- };
306
- }
307
- }
308
- catch {
309
- // Placeholder not found
310
- }
311
- return null;
312
- }
313
- /**
314
- * Check if gherkinType is an editable/input type that could be a contenteditable div
315
- */
316
- function isEditableType(gherkinType) {
317
- const normalized = gherkinType.toLowerCase().trim();
318
- return normalized === 'textarea' || normalized === 'textbox' || normalized === 'field' || normalized === 'editor';
319
- }
320
- // ⑤.5 contenteditable — for rich text editors
321
- // Scoped to current context (dialog/page) to avoid matching wrong editor.
322
- // The nth from Gherkin refers to text matches, not contenteditable count,
323
- // so we try the requested nth first, then fall back to first match.
324
- async function tryContentEditable(page, nth, context) {
325
- try {
326
- // Scope the search to the current context
327
- const root = context === 'dialog' ? page.getByRole('dialog') : page;
328
- const locator = root.locator('[contenteditable="true"]');
329
- const count = await locator.count();
330
- if (count === 0)
331
- return null;
332
- // Try requested nth first, then fall back to first visible
333
- const candidates = nth > 0 && count > nth ? [nth, 0] : [0];
334
- for (const idx of candidates) {
335
- const target = idx > 0 ? locator.nth(idx) : locator.first();
336
- if (await target.isVisible({ timeout: 3000 })) {
337
- return {
338
- locator: target,
339
- selectorType: 'locator',
340
- selectorValue: '[contenteditable="true"]',
341
- role: 'textbox',
342
- matchMethod: 'contenteditable',
343
- warning: count > 1
344
- ? `${count} contenteditable elements in ${context}, using index ${idx}. Use nth in Gherkin to disambiguate.`
345
- : null,
346
- };
347
- }
348
- }
349
- }
350
- catch {
351
- // Not found
352
- }
353
- return null;
354
- }
355
- // ⑥ getByText — regex first, exact disambiguation when ambiguous
356
- async function tryText(page, gherkinRef, namePattern, nth) {
357
- try {
358
- const locator = page.getByText(namePattern);
359
- const count = await locator.count();
360
- if (count === 0)
361
- return null;
362
- if (count > 1) {
363
- // Multiple matches — try exact to disambiguate
364
- try {
365
- const exactLocator = page.getByText(gherkinRef, { exact: true });
366
- const exactCount = await exactLocator.count();
367
- if (exactCount > 0) {
368
- const target = nth > 0 ? exactLocator.nth(nth) : exactLocator.first();
369
- if (await target.isVisible({ timeout: 3000 })) {
370
- return {
371
- locator: target,
372
- selectorType: 'text',
373
- selectorValue: '',
374
- role: '',
375
- matchMethod: 'text_only',
376
- warning: null,
377
- };
378
- }
379
- }
380
- }
381
- catch {
382
- // Exact disambiguation failed
383
- }
384
- }
385
- // Single match or exact failed — use first regex match
386
- const target = nth > 0 ? locator.nth(nth) : locator.first();
387
- if (await target.isVisible({ timeout: 3000 })) {
388
- return {
389
- locator: target,
390
- selectorType: 'text',
391
- selectorValue: '',
392
- role: '',
393
- matchMethod: 'text_only',
394
- warning: null,
395
- };
396
- }
397
- }
398
- catch {
399
- // Text not found
400
- }
401
- return null;
402
- }
403
- async function extractElementAttributes(locator) {
404
- try {
405
- return await locator.evaluate((el) => {
406
- // Inline sanitizer — browser context can't access Node functions
407
- const clean = (s) => (s || '').replace(/[\n\r\t]/g, ' ').replace(/\s+/g, ' ').trim();
408
- // Find associated label
409
- let label = null;
410
- if (el.id) {
411
- const labelEl = el.ownerDocument.querySelector(`label[for="${el.id}"]`);
412
- if (labelEl)
413
- label = clean(labelEl.textContent) || null;
414
- }
415
- if (!label && el.closest('label')) {
416
- label = clean(el.closest('label')?.textContent) || null;
417
- }
418
- // Detect contenteditable: check element itself and ancestors (rich text editors
419
- // often have contenteditable on a parent div wrapping the editable area)
420
- const isContentEditable = el.getAttribute('contenteditable') === 'true'
421
- || el.isContentEditable;
422
- return {
423
- testid: el.getAttribute('data-testid'),
424
- tag: el.tagName.toLowerCase(),
425
- contenteditable: isContentEditable,
426
- accessibleName: clean(el.getAttribute('aria-label') || el.textContent?.trim()?.substring(0, 100)),
427
- placeholder: clean(el.getAttribute('placeholder')) || null,
428
- label,
429
- };
430
- });
431
- }
432
- catch {
433
- return { testid: null, tag: 'unknown', contenteditable: false, accessibleName: '', placeholder: null, label: null };
434
- }
435
- }
436
- function buildUnresolvedElement(gherkinRef, gherkinType) {
437
- return {
438
- gherkinRef,
439
- gherkinType,
440
- selectorType: '',
441
- selectorValue: '',
442
- role: '',
443
- name: gherkinRef,
444
- testid: null,
445
- tag: '',
446
- contenteditable: false,
447
- placeholder: null,
448
- label: null,
449
- context: 'page',
450
- matchMethod: 'unresolved',
451
- exact: false,
452
- warning: 'Element not found on page',
453
- };
454
- }
455
- /**
456
- * Normalize a DOM text value for YAML output:
457
- * collapse real newlines/tabs/carriage-returns into spaces, then deduplicate whitespace.
458
- * Runs in both browser evaluate() and Node context.
459
- */
460
- function sanitizeText(str) {
461
- return str.replace(/[\n\r\t]/g, ' ').replace(/\s+/g, ' ').trim();
462
- }
463
- /**
464
- * Unescape a string extracted from Playwright's ariaSnapshot() output.
465
- * ariaSnapshot encodes special chars as literal escape sequences:
466
- * \n → newline, \t → tab, \\ → backslash, \" → quote
467
- * We unescape them then normalize whitespace.
468
- */
469
- function unescapeAriaSnapshot(str) {
470
- return str
471
- .replace(/\\n/g, ' ')
472
- .replace(/\\t/g, ' ')
473
- .replace(/\\"/g, '"')
474
- .replace(/\\\\/g, '\\')
475
- .replace(/\s+/g, ' ')
476
- .trim();
477
- }
478
- function escapeRegex(str) {
479
- return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
480
- }
481
- //# 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
@@ -1 +0,0 @@
1
- {"version":3,"file":"matrix-writer.d.ts","sourceRoot":"","sources":["../../../src/core/live-scanner/matrix-writer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAYzC,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAyD5E"}