@sun-asterisk/sungen 1.0.24 → 2.0.1

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 (378) 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 +10 -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 +5 -3
  56. package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
  57. package/dist/generators/test-generator/step-mapper.js +38 -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 +12 -0
  71. package/dist/orchestrator/project-initializer.d.ts.map +1 -1
  72. package/dist/orchestrator/project-initializer.js +72 -160
  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/orchestrator/templates/ai-rules.md +189 -0
  79. package/dist/orchestrator/templates/gitignore +16 -0
  80. package/dist/orchestrator/templates/playwright.config.d.ts +10 -0
  81. package/dist/orchestrator/templates/playwright.config.d.ts.map +1 -0
  82. package/dist/orchestrator/templates/playwright.config.js +77 -0
  83. package/dist/orchestrator/templates/playwright.config.js.map +1 -0
  84. package/dist/orchestrator/templates/playwright.config.ts +80 -0
  85. package/dist/orchestrator/templates/readme.md +197 -0
  86. package/dist/utils/selector-types.d.ts +1 -1
  87. package/dist/utils/selector-types.d.ts.map +1 -1
  88. package/dist/utils/selector-types.js +3 -0
  89. package/dist/utils/selector-types.js.map +1 -1
  90. package/docs/gherkin standards/gherkin-core-standard.md +377 -0
  91. package/docs/gherkin standards/gherkin-core-standard.vi.md +303 -0
  92. package/docs/gherkin-dictionary.md +1071 -0
  93. package/docs/makeauth.md +225 -0
  94. package/package.json +4 -3
  95. package/src/cli/commands/add.ts +5 -3
  96. package/src/cli/commands/generate.ts +90 -38
  97. package/src/cli/index.ts +5 -16
  98. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/frame-enter-action.hbs +1 -0
  99. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/frame-exit-action.hbs +1 -0
  100. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/keyboard-global-action.hbs +1 -0
  101. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/scroll-action.hbs +1 -0
  102. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row.hbs +2 -0
  103. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-filter.hbs +3 -0
  104. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-index.hbs +3 -0
  105. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-column-exists.hbs +2 -0
  106. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-empty.hbs +2 -0
  107. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-count.hbs +2 -0
  108. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-exists.hbs +2 -0
  109. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-not-exists.hbs +2 -0
  110. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +1 -1
  111. package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +11 -2
  112. package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +11 -2
  113. package/src/generators/test-generator/code-generator.ts +11 -59
  114. package/src/generators/test-generator/patterns/assertion-patterns.ts +2 -0
  115. package/src/generators/test-generator/patterns/index.ts +12 -3
  116. package/src/generators/test-generator/patterns/interaction-patterns.ts +1 -1
  117. package/src/generators/test-generator/patterns/keyboard-patterns.ts +51 -0
  118. package/src/generators/test-generator/patterns/scope-patterns.ts +40 -0
  119. package/src/generators/test-generator/patterns/scroll-patterns.ts +27 -0
  120. package/src/generators/test-generator/patterns/table-patterns.ts +232 -0
  121. package/src/generators/test-generator/step-mapper.ts +42 -27
  122. package/src/generators/test-generator/template-engine.ts +3 -1
  123. package/src/generators/test-generator/types.ts +7 -112
  124. package/src/generators/test-generator/utils/selector-resolver.ts +70 -25
  125. package/src/orchestrator/project-initializer.ts +75 -160
  126. package/src/orchestrator/screen-manager.ts +61 -233
  127. package/src/orchestrator/templates/ai-rules.md +189 -0
  128. package/src/orchestrator/templates/gitignore +16 -0
  129. package/src/orchestrator/templates/playwright.config.ts +80 -0
  130. package/src/orchestrator/templates/readme.md +197 -0
  131. package/src/utils/selector-types.ts +3 -0
  132. package/dist/cli/commands/cache-clear.d.ts +0 -3
  133. package/dist/cli/commands/cache-clear.d.ts.map +0 -1
  134. package/dist/cli/commands/cache-clear.js +0 -24
  135. package/dist/cli/commands/cache-clear.js.map +0 -1
  136. package/dist/cli/commands/full.d.ts +0 -3
  137. package/dist/cli/commands/full.d.ts.map +0 -1
  138. package/dist/cli/commands/full.js +0 -37
  139. package/dist/cli/commands/full.js.map +0 -1
  140. package/dist/cli/commands/live-scan.d.ts +0 -3
  141. package/dist/cli/commands/live-scan.d.ts.map +0 -1
  142. package/dist/cli/commands/live-scan.js +0 -78
  143. package/dist/cli/commands/live-scan.js.map +0 -1
  144. package/dist/cli/commands/map.d.ts +0 -3
  145. package/dist/cli/commands/map.d.ts.map +0 -1
  146. package/dist/cli/commands/map.js +0 -93
  147. package/dist/cli/commands/map.js.map +0 -1
  148. package/dist/cli/commands/validate.d.ts +0 -3
  149. package/dist/cli/commands/validate.d.ts.map +0 -1
  150. package/dist/cli/commands/validate.js +0 -43
  151. package/dist/cli/commands/validate.js.map +0 -1
  152. package/dist/cli/utils.d.ts +0 -6
  153. package/dist/cli/utils.d.ts.map +0 -1
  154. package/dist/cli/utils.js +0 -101
  155. package/dist/cli/utils.js.map +0 -1
  156. package/dist/config/config-loader.d.ts +0 -51
  157. package/dist/config/config-loader.d.ts.map +0 -1
  158. package/dist/config/config-loader.js +0 -216
  159. package/dist/config/config-loader.js.map +0 -1
  160. package/dist/config/config-schema.d.ts +0 -121
  161. package/dist/config/config-schema.d.ts.map +0 -1
  162. package/dist/config/config-schema.js +0 -7
  163. package/dist/config/config-schema.js.map +0 -1
  164. package/dist/core/live-scanner/config-reader.d.ts +0 -10
  165. package/dist/core/live-scanner/config-reader.d.ts.map +0 -1
  166. package/dist/core/live-scanner/config-reader.js +0 -87
  167. package/dist/core/live-scanner/config-reader.js.map +0 -1
  168. package/dist/core/live-scanner/element-finder.d.ts +0 -20
  169. package/dist/core/live-scanner/element-finder.d.ts.map +0 -1
  170. package/dist/core/live-scanner/element-finder.js +0 -481
  171. package/dist/core/live-scanner/element-finder.js.map +0 -1
  172. package/dist/core/live-scanner/index.d.ts +0 -8
  173. package/dist/core/live-scanner/index.d.ts.map +0 -1
  174. package/dist/core/live-scanner/index.js +0 -33
  175. package/dist/core/live-scanner/index.js.map +0 -1
  176. package/dist/core/live-scanner/matrix-reader.d.ts +0 -17
  177. package/dist/core/live-scanner/matrix-reader.d.ts.map +0 -1
  178. package/dist/core/live-scanner/matrix-reader.js +0 -60
  179. package/dist/core/live-scanner/matrix-reader.js.map +0 -1
  180. package/dist/core/live-scanner/matrix-writer.d.ts +0 -7
  181. package/dist/core/live-scanner/matrix-writer.d.ts.map +0 -1
  182. package/dist/core/live-scanner/matrix-writer.js +0 -103
  183. package/dist/core/live-scanner/matrix-writer.js.map +0 -1
  184. package/dist/core/live-scanner/role-fallback.d.ts +0 -15
  185. package/dist/core/live-scanner/role-fallback.d.ts.map +0 -1
  186. package/dist/core/live-scanner/role-fallback.js +0 -46
  187. package/dist/core/live-scanner/role-fallback.js.map +0 -1
  188. package/dist/core/live-scanner/scanner.d.ts +0 -22
  189. package/dist/core/live-scanner/scanner.d.ts.map +0 -1
  190. package/dist/core/live-scanner/scanner.js +0 -303
  191. package/dist/core/live-scanner/scanner.js.map +0 -1
  192. package/dist/core/live-scanner/step-replayer.d.ts +0 -26
  193. package/dist/core/live-scanner/step-replayer.d.ts.map +0 -1
  194. package/dist/core/live-scanner/step-replayer.js +0 -473
  195. package/dist/core/live-scanner/step-replayer.js.map +0 -1
  196. package/dist/core/live-scanner/types.d.ts +0 -52
  197. package/dist/core/live-scanner/types.d.ts.map +0 -1
  198. package/dist/core/live-scanner/types.js +0 -14
  199. package/dist/core/live-scanner/types.js.map +0 -1
  200. package/dist/core/selector-base/annotation-handler.d.ts +0 -45
  201. package/dist/core/selector-base/annotation-handler.d.ts.map +0 -1
  202. package/dist/core/selector-base/annotation-handler.js +0 -102
  203. package/dist/core/selector-base/annotation-handler.js.map +0 -1
  204. package/dist/core/selector-base/base-generator.d.ts +0 -49
  205. package/dist/core/selector-base/base-generator.d.ts.map +0 -1
  206. package/dist/core/selector-base/base-generator.js +0 -214
  207. package/dist/core/selector-base/base-generator.js.map +0 -1
  208. package/dist/core/selector-base/gherkin-parser.d.ts +0 -24
  209. package/dist/core/selector-base/gherkin-parser.d.ts.map +0 -1
  210. package/dist/core/selector-base/gherkin-parser.js +0 -42
  211. package/dist/core/selector-base/gherkin-parser.js.map +0 -1
  212. package/dist/core/selector-mapper/priority-mapper.d.ts +0 -74
  213. package/dist/core/selector-mapper/priority-mapper.d.ts.map +0 -1
  214. package/dist/core/selector-mapper/priority-mapper.js +0 -477
  215. package/dist/core/selector-mapper/priority-mapper.js.map +0 -1
  216. package/dist/core/ui-scanner/heuristics/base-heuristic.d.ts +0 -91
  217. package/dist/core/ui-scanner/heuristics/base-heuristic.d.ts.map +0 -1
  218. package/dist/core/ui-scanner/heuristics/base-heuristic.js +0 -175
  219. package/dist/core/ui-scanner/heuristics/base-heuristic.js.map +0 -1
  220. package/dist/core/ui-scanner/react-scanner.d.ts +0 -32
  221. package/dist/core/ui-scanner/react-scanner.d.ts.map +0 -1
  222. package/dist/core/ui-scanner/react-scanner.js +0 -163
  223. package/dist/core/ui-scanner/react-scanner.js.map +0 -1
  224. package/dist/core/ui-scanner/scanner-interface.d.ts +0 -94
  225. package/dist/core/ui-scanner/scanner-interface.d.ts.map +0 -1
  226. package/dist/core/ui-scanner/scanner-interface.js +0 -33
  227. package/dist/core/ui-scanner/scanner-interface.js.map +0 -1
  228. package/dist/core/ui-scanner/strict-scanner.d.ts +0 -81
  229. package/dist/core/ui-scanner/strict-scanner.d.ts.map +0 -1
  230. package/dist/core/ui-scanner/strict-scanner.js +0 -511
  231. package/dist/core/ui-scanner/strict-scanner.js.map +0 -1
  232. package/dist/core/validator/data-validator.d.ts +0 -38
  233. package/dist/core/validator/data-validator.d.ts.map +0 -1
  234. package/dist/core/validator/data-validator.js +0 -212
  235. package/dist/core/validator/data-validator.js.map +0 -1
  236. package/dist/core/validator/feature-validator.d.ts +0 -27
  237. package/dist/core/validator/feature-validator.d.ts.map +0 -1
  238. package/dist/core/validator/feature-validator.js +0 -182
  239. package/dist/core/validator/feature-validator.js.map +0 -1
  240. package/dist/core/validator/index.d.ts +0 -46
  241. package/dist/core/validator/index.d.ts.map +0 -1
  242. package/dist/core/validator/index.js +0 -17
  243. package/dist/core/validator/index.js.map +0 -1
  244. package/dist/core/validator/screen-validator.d.ts +0 -35
  245. package/dist/core/validator/screen-validator.d.ts.map +0 -1
  246. package/dist/core/validator/screen-validator.js +0 -195
  247. package/dist/core/validator/screen-validator.js.map +0 -1
  248. package/dist/core/validator/selector-validator.d.ts +0 -36
  249. package/dist/core/validator/selector-validator.d.ts.map +0 -1
  250. package/dist/core/validator/selector-validator.js +0 -210
  251. package/dist/core/validator/selector-validator.js.map +0 -1
  252. package/dist/external/ai-provider.d.ts +0 -60
  253. package/dist/external/ai-provider.d.ts.map +0 -1
  254. package/dist/external/ai-provider.js +0 -30
  255. package/dist/external/ai-provider.js.map +0 -1
  256. package/dist/external/anthropic-provider.d.ts +0 -29
  257. package/dist/external/anthropic-provider.d.ts.map +0 -1
  258. package/dist/external/anthropic-provider.js +0 -85
  259. package/dist/external/anthropic-provider.js.map +0 -1
  260. package/dist/generators/cache/cache-manager.d.ts +0 -66
  261. package/dist/generators/cache/cache-manager.d.ts.map +0 -1
  262. package/dist/generators/cache/cache-manager.js +0 -286
  263. package/dist/generators/cache/cache-manager.js.map +0 -1
  264. package/dist/generators/dsl-writer/index.d.ts +0 -33
  265. package/dist/generators/dsl-writer/index.d.ts.map +0 -1
  266. package/dist/generators/dsl-writer/index.js +0 -226
  267. package/dist/generators/dsl-writer/index.js.map +0 -1
  268. package/dist/generators/scaffold-generator/index.d.ts +0 -162
  269. package/dist/generators/scaffold-generator/index.d.ts.map +0 -1
  270. package/dist/generators/scaffold-generator/index.js +0 -877
  271. package/dist/generators/scaffold-generator/index.js.map +0 -1
  272. package/dist/generators/selector-mapper/ai-mapper.d.ts +0 -56
  273. package/dist/generators/selector-mapper/ai-mapper.d.ts.map +0 -1
  274. package/dist/generators/selector-mapper/ai-mapper.js +0 -457
  275. package/dist/generators/selector-mapper/ai-mapper.js.map +0 -1
  276. package/dist/generators/selector-mapper/hybrid-mapper.d.ts +0 -67
  277. package/dist/generators/selector-mapper/hybrid-mapper.d.ts.map +0 -1
  278. package/dist/generators/selector-mapper/hybrid-mapper.js +0 -349
  279. package/dist/generators/selector-mapper/hybrid-mapper.js.map +0 -1
  280. package/dist/generators/selector-mapper/index.d.ts +0 -8
  281. package/dist/generators/selector-mapper/index.d.ts.map +0 -1
  282. package/dist/generators/selector-mapper/index.js +0 -12
  283. package/dist/generators/selector-mapper/index.js.map +0 -1
  284. package/dist/generators/selector-mapper/intelligent-mapper.d.ts +0 -125
  285. package/dist/generators/selector-mapper/intelligent-mapper.d.ts.map +0 -1
  286. package/dist/generators/selector-mapper/intelligent-mapper.js +0 -391
  287. package/dist/generators/selector-mapper/intelligent-mapper.js.map +0 -1
  288. package/dist/generators/test-generator/ai-step-mapper.d.ts +0 -27
  289. package/dist/generators/test-generator/ai-step-mapper.d.ts.map +0 -1
  290. package/dist/generators/test-generator/ai-step-mapper.js +0 -204
  291. package/dist/generators/test-generator/ai-step-mapper.js.map +0 -1
  292. package/dist/generators/test-generator/auth-setup-generator.d.ts +0 -18
  293. package/dist/generators/test-generator/auth-setup-generator.d.ts.map +0 -1
  294. package/dist/generators/test-generator/auth-setup-generator.js +0 -82
  295. package/dist/generators/test-generator/auth-setup-generator.js.map +0 -1
  296. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts +0 -7
  297. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts.map +0 -1
  298. package/dist/generators/test-generator/patterns/legacy-patterns.js +0 -98
  299. package/dist/generators/test-generator/patterns/legacy-patterns.js.map +0 -1
  300. package/dist/generators/test-generator/templates/auth-setup.ts.hbs +0 -36
  301. package/dist/generators/ui-model-builder/deep-scanner.d.ts +0 -121
  302. package/dist/generators/ui-model-builder/deep-scanner.d.ts.map +0 -1
  303. package/dist/generators/ui-model-builder/deep-scanner.js +0 -1113
  304. package/dist/generators/ui-model-builder/deep-scanner.js.map +0 -1
  305. package/dist/generators/ui-model-builder/enhanced-deep-scanner.d.ts +0 -110
  306. package/dist/generators/ui-model-builder/enhanced-deep-scanner.d.ts.map +0 -1
  307. package/dist/generators/ui-model-builder/enhanced-deep-scanner.js +0 -608
  308. package/dist/generators/ui-model-builder/enhanced-deep-scanner.js.map +0 -1
  309. package/dist/generators/ui-model-builder/react-scanner.d.ts +0 -107
  310. package/dist/generators/ui-model-builder/react-scanner.d.ts.map +0 -1
  311. package/dist/generators/ui-model-builder/react-scanner.js +0 -797
  312. package/dist/generators/ui-model-builder/react-scanner.js.map +0 -1
  313. package/dist/orchestrator/cache-manager.d.ts +0 -15
  314. package/dist/orchestrator/cache-manager.d.ts.map +0 -1
  315. package/dist/orchestrator/cache-manager.js +0 -62
  316. package/dist/orchestrator/cache-manager.js.map +0 -1
  317. package/dist/orchestrator/pipeline.d.ts +0 -56
  318. package/dist/orchestrator/pipeline.d.ts.map +0 -1
  319. package/dist/orchestrator/pipeline.js +0 -298
  320. package/dist/orchestrator/pipeline.js.map +0 -1
  321. package/dist/orchestrator/reporter.d.ts +0 -15
  322. package/dist/orchestrator/reporter.d.ts.map +0 -1
  323. package/dist/orchestrator/reporter.js +0 -30
  324. package/dist/orchestrator/reporter.js.map +0 -1
  325. package/src/cli/commands/cache-clear.ts +0 -22
  326. package/src/cli/commands/full.ts +0 -35
  327. package/src/cli/commands/live-scan.ts +0 -82
  328. package/src/cli/commands/map.ts +0 -97
  329. package/src/cli/commands/validate.ts +0 -43
  330. package/src/cli/utils.ts +0 -106
  331. package/src/config/ai-providers.yaml +0 -56
  332. package/src/config/config-loader.ts +0 -248
  333. package/src/config/config-schema.ts +0 -148
  334. package/src/config/default.config.yaml +0 -107
  335. package/src/config/framework.config.yaml +0 -52
  336. package/src/config/routes.yaml +0 -31
  337. package/src/core/live-scanner/config-reader.ts +0 -57
  338. package/src/core/live-scanner/element-finder.ts +0 -534
  339. package/src/core/live-scanner/index.ts +0 -7
  340. package/src/core/live-scanner/matrix-reader.ts +0 -65
  341. package/src/core/live-scanner/matrix-writer.ts +0 -77
  342. package/src/core/live-scanner/role-fallback.ts +0 -44
  343. package/src/core/live-scanner/scanner.ts +0 -321
  344. package/src/core/live-scanner/step-replayer.ts +0 -503
  345. package/src/core/live-scanner/types.ts +0 -58
  346. package/src/core/selector-base/annotation-handler.ts +0 -127
  347. package/src/core/selector-base/base-generator.ts +0 -234
  348. package/src/core/selector-base/gherkin-parser.ts +0 -57
  349. package/src/core/selector-mapper/priority-mapper.ts +0 -607
  350. package/src/core/ui-scanner/heuristics/base-heuristic.ts +0 -216
  351. package/src/core/ui-scanner/react-scanner.ts +0 -156
  352. package/src/core/ui-scanner/scanner-interface.ts +0 -133
  353. package/src/core/ui-scanner/strict-scanner.ts +0 -629
  354. package/src/core/validator/data-validator.ts +0 -202
  355. package/src/core/validator/feature-validator.ts +0 -176
  356. package/src/core/validator/index.ts +0 -57
  357. package/src/core/validator/screen-validator.ts +0 -209
  358. package/src/core/validator/selector-validator.ts +0 -209
  359. package/src/external/ai-provider.ts +0 -90
  360. package/src/external/anthropic-provider.ts +0 -114
  361. package/src/generators/README.md +0 -410
  362. package/src/generators/cache/cache-manager.ts +0 -322
  363. package/src/generators/dsl-writer/index.ts +0 -253
  364. package/src/generators/scaffold-generator/index.ts +0 -1029
  365. package/src/generators/selector-mapper/ai-mapper.ts +0 -528
  366. package/src/generators/selector-mapper/hybrid-mapper.ts +0 -427
  367. package/src/generators/selector-mapper/index.ts +0 -10
  368. package/src/generators/selector-mapper/intelligent-mapper.ts +0 -530
  369. package/src/generators/test-generator/ai-step-mapper.ts +0 -224
  370. package/src/generators/test-generator/auth-setup-generator.ts +0 -59
  371. package/src/generators/test-generator/patterns/legacy-patterns.ts +0 -104
  372. package/src/generators/test-generator/templates/auth-setup.ts.hbs +0 -36
  373. package/src/generators/ui-model-builder/deep-scanner.ts +0 -1244
  374. package/src/generators/ui-model-builder/enhanced-deep-scanner.ts +0 -731
  375. package/src/generators/ui-model-builder/react-scanner.ts +0 -959
  376. package/src/orchestrator/cache-manager.ts +0 -32
  377. package/src/orchestrator/pipeline.ts +0 -354
  378. package/src/orchestrator/reporter.ts +0 -36
@@ -1,103 +0,0 @@
1
- "use strict";
2
- /**
3
- * Matrix Writer
4
- * Writes LiveScanResult to a .live-scan.yaml file.
5
- */
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || (function () {
23
- var ownKeys = function(o) {
24
- ownKeys = Object.getOwnPropertyNames || function (o) {
25
- var ar = [];
26
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
- return ar;
28
- };
29
- return ownKeys(o);
30
- };
31
- return function (mod) {
32
- if (mod && mod.__esModule) return mod;
33
- var result = {};
34
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
- __setModuleDefault(result, mod);
36
- return result;
37
- };
38
- })();
39
- Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.writeMatrix = writeMatrix;
41
- const fs = __importStar(require("fs"));
42
- const yaml = __importStar(require("yaml"));
43
- /**
44
- * Sanitize a string value before YAML serialization:
45
- * collapse newlines/tabs/carriage-returns into spaces to prevent
46
- * broken escape sequences (e.g. \\n) in QUOTE_DOUBLE output.
47
- */
48
- function sanitizeForYaml(value) {
49
- if (!value)
50
- return value;
51
- return value.replace(/[\n\r\t]/g, ' ').replace(/\s+/g, ' ').trim() || null;
52
- }
53
- function writeMatrix(result, outputPath) {
54
- const output = {
55
- screen: result.screen,
56
- baseUrl: result.baseUrl,
57
- scannedAt: result.scannedAt,
58
- scenarios: {},
59
- };
60
- for (const [scenarioKey, scenario] of Object.entries(result.scenarios)) {
61
- const scenarioData = {
62
- auth: scenario.auth,
63
- path: scenario.path,
64
- };
65
- if (scenario.extends) {
66
- scenarioData.extends = scenario.extends;
67
- }
68
- scenarioData.elements = {};
69
- for (const [elementKey, element] of Object.entries(scenario.elements)) {
70
- scenarioData.elements[elementKey] = {
71
- gherkin_type: element.gherkinType,
72
- selector_type: element.selectorType,
73
- selector_value: sanitizeForYaml(element.selectorValue),
74
- role: element.role,
75
- name: sanitizeForYaml(element.name),
76
- testid: element.testid,
77
- tag: element.tag,
78
- contenteditable: element.contenteditable,
79
- placeholder: sanitizeForYaml(element.placeholder),
80
- label: sanitizeForYaml(element.label),
81
- context: element.context,
82
- match_method: element.matchMethod,
83
- exact: element.exact,
84
- warning: element.warning,
85
- };
86
- }
87
- output.scenarios[scenarioKey] = scenarioData;
88
- }
89
- const header = [
90
- `# Auto-generated by sungen live-scan`,
91
- `# Screen: ${result.screen} | Base URL: ${result.baseUrl}`,
92
- `# Scanned: ${result.scannedAt}`,
93
- `# Do not edit manually — re-run 'sungen live-scan' to regenerate`,
94
- '',
95
- ].join('\n');
96
- const yamlStr = yaml.stringify(output, {
97
- lineWidth: 120,
98
- defaultStringType: 'QUOTE_DOUBLE',
99
- nullStr: 'null',
100
- });
101
- fs.writeFileSync(outputPath, header + yamlStr, 'utf-8');
102
- }
103
- //# sourceMappingURL=matrix-writer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"matrix-writer.js","sourceRoot":"","sources":["../../../src/core/live-scanner/matrix-writer.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBH,kCAyDC;AAvED,uCAAyB;AACzB,2CAA6B;AAG7B;;;;GAIG;AACH,SAAS,eAAe,CAAC,KAAoB;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;AAC7E,CAAC;AAED,SAAgB,WAAW,CAAC,MAAsB,EAAE,UAAkB;IACpE,MAAM,MAAM,GAAQ;QAClB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,EAAE;KACd,CAAC;IAEF,KAAK,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACvE,MAAM,YAAY,GAAQ;YACxB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;SACpB,CAAC;QAEF,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,YAAY,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC1C,CAAC;QAED,YAAY,CAAC,QAAQ,GAAG,EAAE,CAAC;QAE3B,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtE,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG;gBAClC,YAAY,EAAE,OAAO,CAAC,WAAW;gBACjC,aAAa,EAAE,OAAO,CAAC,YAAY;gBACnC,cAAc,EAAE,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC;gBACtD,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC;gBACnC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC;gBACjD,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC;gBACrC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,YAAY,EAAE,OAAO,CAAC,WAAW;gBACjC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC;IAC/C,CAAC;IAED,MAAM,MAAM,GAAG;QACb,sCAAsC;QACtC,aAAa,MAAM,CAAC,MAAM,gBAAgB,MAAM,CAAC,OAAO,EAAE;QAC1D,cAAc,MAAM,CAAC,SAAS,EAAE;QAChC,kEAAkE;QAClE,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;QACrC,SAAS,EAAE,GAAG;QACd,iBAAiB,EAAE,cAAc;QACjC,OAAO,EAAE,MAAM;KAChB,CAAC,CAAC;IAEH,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1D,CAAC"}
@@ -1,15 +0,0 @@
1
- /**
2
- * Role Fallback Groups
3
- * Maps Gherkin element type hints to ordered lists of ARIA roles to try.
4
- */
5
- /**
6
- * Get the ordered list of ARIA roles to try for a given Gherkin element type.
7
- * Returns empty array if the type is unknown (will fall through to text matching).
8
- */
9
- export declare function getRoleFallbacks(gherkinType: string): string[];
10
- /**
11
- * Check if a Gherkin type should use getByText as its primary strategy
12
- * (types that don't map well to ARIA roles).
13
- */
14
- export declare function isTextOnlyType(gherkinType: string): boolean;
15
- //# sourceMappingURL=role-fallback.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"role-fallback.d.ts","sourceRoot":"","sources":["../../../src/core/live-scanner/role-fallback.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuBH;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAG9D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAI3D"}
@@ -1,46 +0,0 @@
1
- "use strict";
2
- /**
3
- * Role Fallback Groups
4
- * Maps Gherkin element type hints to ordered lists of ARIA roles to try.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.getRoleFallbacks = getRoleFallbacks;
8
- exports.isTextOnlyType = isTextOnlyType;
9
- const ROLE_FALLBACK_GROUPS = {
10
- button: ['button', 'link', 'menuitem', 'tab'],
11
- link: ['link', 'button', 'menuitem'],
12
- field: ['textbox', 'combobox', 'searchbox', 'spinbutton'],
13
- dropdown: ['combobox', 'listbox', 'select', 'button'],
14
- checkbox: ['checkbox', 'switch'],
15
- text: ['heading', 'paragraph'],
16
- menuitem: ['menuitem', 'option', 'link'],
17
- dialog: ['dialog', 'alertdialog'],
18
- modal: ['dialog', 'alertdialog'],
19
- tab: ['tab', 'button', 'link'],
20
- option: ['option', 'menuitem', 'listitem'],
21
- row: ['row', 'listitem', 'option'],
22
- tag: ['button', 'link', 'option'],
23
- uploader: ['textbox', 'button'],
24
- textarea: ['textbox'],
25
- radio: ['radio'],
26
- select: ['combobox', 'listbox', 'select'],
27
- page: [],
28
- };
29
- /**
30
- * Get the ordered list of ARIA roles to try for a given Gherkin element type.
31
- * Returns empty array if the type is unknown (will fall through to text matching).
32
- */
33
- function getRoleFallbacks(gherkinType) {
34
- const normalized = gherkinType.toLowerCase().trim();
35
- return ROLE_FALLBACK_GROUPS[normalized] || [];
36
- }
37
- /**
38
- * Check if a Gherkin type should use getByText as its primary strategy
39
- * (types that don't map well to ARIA roles).
40
- */
41
- function isTextOnlyType(gherkinType) {
42
- const normalized = gherkinType.toLowerCase().trim();
43
- return normalized === 'text' || normalized === 'message' || normalized === 'error'
44
- || normalized === 'warning' || normalized === 'success' || normalized === 'alert';
45
- }
46
- //# sourceMappingURL=role-fallback.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"role-fallback.js","sourceRoot":"","sources":["../../../src/core/live-scanner/role-fallback.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AA2BH,4CAGC;AAMD,wCAIC;AAtCD,MAAM,oBAAoB,GAA6B;IACrD,MAAM,EAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC;IAC/C,IAAI,EAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC;IACxC,KAAK,EAAK,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC;IAC5D,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;IACrD,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;IAChC,IAAI,EAAM,CAAC,SAAS,EAAE,WAAW,CAAC;IAClC,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC;IACxC,MAAM,EAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;IACnC,KAAK,EAAK,CAAC,QAAQ,EAAE,aAAa,CAAC;IACnC,GAAG,EAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC;IACnC,MAAM,EAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC;IAC5C,GAAG,EAAO,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC;IACvC,GAAG,EAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;IACtC,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC/B,QAAQ,EAAE,CAAC,SAAS,CAAC;IACrB,KAAK,EAAK,CAAC,OAAO,CAAC;IACnB,MAAM,EAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC;IAC3C,IAAI,EAAM,EAAE;CACb,CAAC;AAEF;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,WAAmB;IAClD,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACpD,OAAO,oBAAoB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAAC,WAAmB;IAChD,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACpD,OAAO,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,OAAO;WAC7E,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,OAAO,CAAC;AACtF,CAAC"}
@@ -1,22 +0,0 @@
1
- /**
2
- * Live Scanner
3
- * Main orchestrator: parses features, sets up auth, replays steps, collects elements.
4
- */
5
- import { LiveScanResult, LiveScanOptions } from './types';
6
- export declare class LiveScanner {
7
- private options;
8
- constructor(options: LiveScanOptions);
9
- scan(): Promise<LiveScanResult[]>;
10
- /**
11
- * Load test-data YAML for a feature, merging override over base.
12
- * Returns null if no test-data file exists.
13
- */
14
- private loadTestData;
15
- /**
16
- * Find dataRef keys from steps that resolve to empty string in testData.
17
- */
18
- private findEmptyDataKeys;
19
- private resolveBaseUrl;
20
- private scanFeature;
21
- }
22
- //# sourceMappingURL=scanner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/core/live-scanner/scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,cAAc,EAAoB,eAAe,EAAE,MAAM,SAAS,CAAC;AAO5E,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAkB;gBAErB,OAAO,EAAE,eAAe;IAI9B,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAoFvC;;;OAGG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,cAAc;YAoBR,WAAW;CAiJ1B"}
@@ -1,303 +0,0 @@
1
- "use strict";
2
- /**
3
- * Live Scanner
4
- * Main orchestrator: parses features, sets up auth, replays steps, collects elements.
5
- */
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || (function () {
23
- var ownKeys = function(o) {
24
- ownKeys = Object.getOwnPropertyNames || function (o) {
25
- var ar = [];
26
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
- return ar;
28
- };
29
- return ownKeys(o);
30
- };
31
- return function (mod) {
32
- if (mod && mod.__esModule) return mod;
33
- var result = {};
34
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
- __setModuleDefault(result, mod);
36
- return result;
37
- };
38
- })();
39
- Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.LiveScanner = void 0;
41
- const fs = __importStar(require("fs"));
42
- const path = __importStar(require("path"));
43
- const glob_1 = require("glob");
44
- const step_replayer_1 = require("./step-replayer");
45
- const matrix_writer_1 = require("./matrix-writer");
46
- const matrix_reader_1 = require("./matrix-reader");
47
- const config_reader_1 = require("./config-reader");
48
- const yaml_io_1 = require("../../utils/yaml-io");
49
- class LiveScanner {
50
- constructor(options) {
51
- this.options = options;
52
- }
53
- async scan() {
54
- const { screenName, screensDir } = this.options;
55
- const screenDir = path.join(screensDir, screenName);
56
- const featuresDir = path.join(screenDir, 'features');
57
- const selectorsDir = path.join(screenDir, 'selectors');
58
- if (!fs.existsSync(featuresDir)) {
59
- throw new Error(`Features directory not found: ${featuresDir}`);
60
- }
61
- // Resolve baseUrl: explicit option > playwright.config.ts
62
- const baseUrl = this.resolveBaseUrl();
63
- console.log(`🌐 Base URL: ${baseUrl}`);
64
- fs.mkdirSync(selectorsDir, { recursive: true });
65
- const featureFiles = glob_1.glob.sync('**/*.feature', {
66
- cwd: featuresDir,
67
- absolute: true,
68
- });
69
- if (featureFiles.length === 0) {
70
- throw new Error(`No .feature files found in ${featuresDir}`);
71
- }
72
- // Lazy-load playwright to avoid errors when not installed
73
- let playwright;
74
- try {
75
- playwright = require('playwright');
76
- }
77
- catch {
78
- throw new Error('Playwright is required for live-scan. Install it with: npm install playwright');
79
- }
80
- const browser = await playwright.chromium.launch({
81
- headless: !this.options.headed,
82
- });
83
- const results = [];
84
- try {
85
- // Parse all features first
86
- const { GherkinParser } = require('../../generators/gherkin-parser');
87
- const parser = new GherkinParser();
88
- for (const featureFile of featureFiles) {
89
- const featureName = path.basename(featureFile, '.feature');
90
- console.log(`\n📄 Scanning feature: ${featureName}`);
91
- // Load existing matrix for incremental scan (non-force mode)
92
- let existingResult = null;
93
- if (!this.options.force) {
94
- const matrixPath = path.join(selectorsDir, `${featureName}.live-scan.yaml`);
95
- existingResult = (0, matrix_reader_1.readMatrix)(matrixPath);
96
- if (existingResult) {
97
- console.log(` 📦 Found existing scan — resolved elements will be skipped`);
98
- }
99
- }
100
- try {
101
- const parsed = parser.parseFeatureFile(featureFile);
102
- const result = await this.scanFeature(browser, playwright, parsed, baseUrl, existingResult, featureName);
103
- if (!result) {
104
- console.log(` ⏭️ Feature skipped (missing test-data)`);
105
- continue;
106
- }
107
- results.push(result);
108
- // Write matrix file
109
- const matrixPath = path.join(selectorsDir, `${featureName}.live-scan.yaml`);
110
- (0, matrix_writer_1.writeMatrix)(result, matrixPath);
111
- console.log(` ✅ Matrix written: ${matrixPath}`);
112
- }
113
- catch (error) {
114
- console.error(` ❌ Failed to scan ${featureName}: ${error.message}`);
115
- }
116
- }
117
- }
118
- finally {
119
- await browser.close();
120
- }
121
- return results;
122
- }
123
- /**
124
- * Load test-data YAML for a feature, merging override over base.
125
- * Returns null if no test-data file exists.
126
- */
127
- loadTestData(featureName) {
128
- const testDataDir = path.join(this.options.screensDir, this.options.screenName, 'test-data');
129
- const basePath = path.join(testDataDir, `${featureName}.yaml`);
130
- const overridePath = path.join(testDataDir, `${featureName}.override.yaml`);
131
- const base = (0, yaml_io_1.readYamlIfExists)(basePath);
132
- const override = (0, yaml_io_1.readYamlIfExists)(overridePath);
133
- if (!base && !override)
134
- return null;
135
- return { ...(base || {}), ...(override || {}) };
136
- }
137
- /**
138
- * Find dataRef keys from steps that resolve to empty string in testData.
139
- */
140
- findEmptyDataKeys(testData, steps) {
141
- const emptyKeys = [];
142
- for (const step of steps) {
143
- if (!step.dataRef)
144
- continue;
145
- const parts = step.dataRef.replace(/[{}]/g, '').split('.');
146
- let value = testData;
147
- for (const part of parts) {
148
- value = value?.[part];
149
- }
150
- if (value === undefined || value === null || value === '') {
151
- emptyKeys.push(step.dataRef);
152
- }
153
- }
154
- return [...new Set(emptyKeys)];
155
- }
156
- resolveBaseUrl() {
157
- // 1. Explicit option (from --url flag)
158
- if (this.options.baseUrl) {
159
- return this.options.baseUrl;
160
- }
161
- // 2. Auto-detect from playwright.config.ts
162
- const detected = (0, config_reader_1.readBaseUrlFromPlaywrightConfig)(process.cwd());
163
- if (detected) {
164
- console.log(`📋 Auto-detected baseURL from playwright.config.ts`);
165
- return detected;
166
- }
167
- throw new Error('Base URL not found. Either:\n' +
168
- ' • Add baseURL to your playwright.config.ts\n' +
169
- ' • Use --url <baseUrl> flag');
170
- }
171
- async scanFeature(browser, playwright, feature, baseUrl, existingResult, featureFileName) {
172
- const featurePath = feature.path || '/';
173
- const scenarios = {};
174
- // Build merged existing elements map for skip logic
175
- const existingElements = existingResult ? (0, matrix_reader_1.mergeMatrixElements)(existingResult) : undefined;
176
- // Build a map of @steps scenarios for resolution
177
- const stepsMap = new Map();
178
- for (const scenario of feature.scenarios) {
179
- if (scenario.stepsName) {
180
- stepsMap.set(scenario.stepsName, scenario);
181
- }
182
- }
183
- // Collect all steps across scenarios to check for dataRefs
184
- const allSteps = feature.scenarios.flatMap((s) => s.steps || []);
185
- const hasDataRefs = allSteps.some((s) => s.dataRef);
186
- // Load test-data if needed
187
- let testData = null;
188
- if (hasDataRefs) {
189
- const testDataName = featureFileName || path.basename(feature.sourceFile || '', '.feature');
190
- testData = this.loadTestData(testDataName);
191
- if (!testData) {
192
- const screenName = this.options.screenName;
193
- console.warn(` ⚠️ Feature has {{dataRef}} steps but no test-data file found — skipping feature`);
194
- console.warn(` 💡 To fix:`);
195
- console.warn(` 1. Run: sungen map --screen ${screenName} --skip-live-scan`);
196
- console.warn(` 2. Fill test-data values in qa/screens/${screenName}/test-data/`);
197
- console.warn(` 3. Re-run: sungen live-scan --screen ${screenName}`);
198
- return null;
199
- }
200
- const emptyKeys = this.findEmptyDataKeys(testData, allSteps);
201
- if (emptyKeys.length > 0) {
202
- console.warn(` ⚠️ Empty test-data values for: ${emptyKeys.join(', ')}`);
203
- console.warn(` 💡 Fill these in qa/screens/${this.options.screenName}/test-data/ for accurate results`);
204
- }
205
- }
206
- for (const scenario of feature.scenarios) {
207
- // Skip @steps-only scenarios (they're reusable blocks, not standalone)
208
- if (scenario.stepsName && !scenario.extendsName) {
209
- console.log(` ⏭️ Skipping @steps block: ${scenario.name}`);
210
- continue;
211
- }
212
- const scenarioKey = slugify(scenario.name);
213
- console.log(` 🎬 Scenario: ${scenario.name}`);
214
- // Extract auth tag
215
- const authTag = scenario.tags.find((t) => t.startsWith('@auth:'));
216
- const authRole = authTag ? authTag.replace('@auth:', '') : null;
217
- // Resolve @extend: inline base steps
218
- let steps = [...scenario.steps];
219
- if (scenario.extendsName) {
220
- const baseScenario = stepsMap.get(scenario.extendsName);
221
- if (baseScenario) {
222
- steps = [...baseScenario.steps, ...steps];
223
- console.log(` 🔗 Extended with @steps:${scenario.extendsName} (${baseScenario.steps.length} steps)`);
224
- }
225
- else {
226
- console.warn(` ⚠️ @extend:${scenario.extendsName} not found`);
227
- }
228
- }
229
- // Set up browser context with auth
230
- const contextOptions = {};
231
- if (authRole) {
232
- const authPath = path.join(this.options.authDir || 'specs/.auth', `${authRole}.json`);
233
- if (fs.existsSync(authPath)) {
234
- contextOptions.storageState = authPath;
235
- console.log(` 🔐 Auth: ${authRole}`);
236
- }
237
- else {
238
- console.warn(` ⚠️ Auth file not found for role '${authRole}', scanning without authentication`);
239
- }
240
- }
241
- const context = await browser.newContext(contextOptions);
242
- const page = await context.newPage();
243
- try {
244
- const result = await (0, step_replayer_1.replaySteps)(page, steps, featurePath, baseUrl, existingElements, testData);
245
- scenarios[scenarioKey] = {
246
- auth: authRole,
247
- extends: scenario.extendsName || null,
248
- path: featurePath,
249
- elements: result.elements,
250
- };
251
- // Print element summary
252
- const elementCount = Object.keys(result.elements).length;
253
- const skipped = Object.values(result.elements).filter((e) => e.skipped).length;
254
- const resolved = Object.values(result.elements).filter((e) => e.matchMethod !== 'unresolved').length;
255
- const warnings = Object.values(result.elements).filter((e) => e.warning).length;
256
- const skippedInfo = skipped > 0 ? `, ${skipped} cached` : '';
257
- console.log(` 📊 Elements: ${resolved}/${elementCount} resolved${skippedInfo}${warnings > 0 ? `, ${warnings} warnings` : ''}`);
258
- for (const error of result.errors) {
259
- console.log(` ⚠️ ${error}`);
260
- }
261
- // Print per-element status
262
- for (const [key, el] of Object.entries(result.elements)) {
263
- if (el.skipped) {
264
- // Already printed in replaySteps
265
- continue;
266
- }
267
- // Use dataValue (from data-value fallback) for display when name is empty
268
- const displayName = el.name || el.dataValue || el.gherkinRef;
269
- if (el.matchMethod === 'unresolved') {
270
- console.log(` ✗ [${el.gherkinRef}] ${el.gherkinType} → NOT FOUND`);
271
- }
272
- else if (el.warning) {
273
- console.log(` ⚠ [${el.gherkinRef}] ${el.gherkinType} → ${el.selectorType}(${el.selectorValue || displayName}) (${el.warning})`);
274
- }
275
- else {
276
- console.log(` ✓ [${el.gherkinRef}] → getBy${capitalize(el.selectorType || 'text')}${el.role ? `('${el.role}', {name: '${displayName}'})` : `('${el.selectorValue || displayName}')`}`);
277
- }
278
- }
279
- }
280
- finally {
281
- await context.close();
282
- }
283
- }
284
- return {
285
- screen: this.options.screenName,
286
- baseUrl,
287
- scannedAt: new Date().toISOString(),
288
- scenarios,
289
- };
290
- }
291
- }
292
- exports.LiveScanner = LiveScanner;
293
- function slugify(text) {
294
- return text
295
- .toLowerCase()
296
- .replace(/[^\w\s-]/g, '')
297
- .trim()
298
- .replace(/\s+/g, '-');
299
- }
300
- function capitalize(str) {
301
- return str.charAt(0).toUpperCase() + str.slice(1);
302
- }
303
- //# sourceMappingURL=scanner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/core/live-scanner/scanner.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,+BAA4B;AAG5B,mDAA8C;AAC9C,mDAA8C;AAC9C,mDAAkE;AAClE,mDAAkE;AAClE,iDAAuD;AAEvD,MAAa,WAAW;IAGtB,YAAY,OAAwB;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAEvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,iCAAiC,WAAW,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,0DAA0D;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;QAEvC,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhD,MAAM,YAAY,GAAG,WAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAC7C,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,8BAA8B,WAAW,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,0DAA0D;QAC1D,IAAI,UAAe,CAAC;QACpB,IAAI,CAAC;YACH,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC/C,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;SAC/B,CAAC,CAAC;QAEH,MAAM,OAAO,GAAqB,EAAE,CAAC;QAErC,IAAI,CAAC;YACH,2BAA2B;YAC3B,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAEnC,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;gBACvC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;gBAC3D,OAAO,CAAC,GAAG,CAAC,0BAA0B,WAAW,EAAE,CAAC,CAAC;gBAErD,6DAA6D;gBAC7D,IAAI,cAAc,GAA0B,IAAI,CAAC;gBACjD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACxB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,WAAW,iBAAiB,CAAC,CAAC;oBAC5E,cAAc,GAAG,IAAA,0BAAU,EAAC,UAAU,CAAC,CAAC;oBACxC,IAAI,cAAc,EAAE,CAAC;wBACnB,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;oBAC/E,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;oBACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;oBACzG,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;wBAC1D,SAAS;oBACX,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAErB,oBAAoB;oBACpB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,WAAW,iBAAiB,CAAC,CAAC;oBAC5E,IAAA,2BAAW,EAAC,MAAM,EAAE,UAAU,CAAC,CAAC;oBAChC,OAAO,CAAC,GAAG,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;gBACpD,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,OAAO,CAAC,KAAK,CAAC,uBAAuB,WAAW,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACK,YAAY,CAAC,WAAmB;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC7F,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,WAAW,OAAO,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,WAAW,gBAAgB,CAAC,CAAC;QAE5E,MAAM,IAAI,GAAG,IAAA,0BAAgB,EAAsB,QAAQ,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,IAAA,0BAAgB,EAAsB,YAAY,CAAC,CAAC;QAErE,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAEpC,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;IAClD,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,QAA6B,EAAE,KAAY;QACnE,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,SAAS;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3D,IAAI,KAAK,GAAQ,QAAQ,CAAC;YAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,KAAK,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;YACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;gBAC1D,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IACjC,CAAC;IAEO,cAAc;QACpB,uCAAuC;QACvC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC9B,CAAC;QAED,2CAA2C;QAC3C,MAAM,QAAQ,GAAG,IAAA,+CAA+B,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAChE,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;YAClE,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,KAAK,CACb,+BAA+B;YAC/B,gDAAgD;YAChD,8BAA8B,CAC/B,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,OAAY,EACZ,UAAe,EACf,OAAY,EACZ,OAAe,EACf,cAAsC,EACtC,eAAwB;QAExB,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC;QACxC,MAAM,SAAS,GAAqC,EAAE,CAAC;QAEvD,oDAAoD;QACpD,MAAM,gBAAgB,GAAG,cAAc,CAAC,CAAC,CAAC,IAAA,mCAAmB,EAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE1F,iDAAiD;QACjD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAe,CAAC;QACxC,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACzC,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACvB,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,2DAA2D;QAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAEzD,2BAA2B;QAC3B,IAAI,QAAQ,GAA+B,IAAI,CAAC;QAChD,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,YAAY,GAAG,eAAe,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YAC5F,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;gBACpG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC9B,OAAO,CAAC,IAAI,CAAC,qCAAqC,UAAU,mBAAmB,CAAC,CAAC;gBACjF,OAAO,CAAC,IAAI,CAAC,gDAAgD,UAAU,aAAa,CAAC,CAAC;gBACtF,OAAO,CAAC,IAAI,CAAC,8CAA8C,UAAU,EAAE,CAAC,CAAC;gBACzE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC7D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,sCAAsC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC3E,OAAO,CAAC,IAAI,CAAC,kCAAkC,IAAI,CAAC,OAAO,CAAC,UAAU,kCAAkC,CAAC,CAAC;YAC5G,CAAC;QACH,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACzC,uEAAuE;YACvE,IAAI,QAAQ,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,iCAAiC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9D,SAAS;YACX,CAAC;YAED,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,mBAAmB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAEhD,mBAAmB;YACnB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1E,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAEhE,qCAAqC;YACrC,IAAI,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACzB,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBACxD,IAAI,YAAY,EAAE,CAAC;oBACjB,KAAK,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC;oBAC1C,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,CAAC,WAAW,KAAK,YAAY,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;gBACzG,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,kBAAkB,QAAQ,CAAC,WAAW,YAAY,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;YAED,mCAAmC;YACnC,MAAM,cAAc,GAAQ,EAAE,CAAC;YAC/B,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,aAAa,EAAE,GAAG,QAAQ,OAAO,CAAC,CAAC;gBACtF,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,cAAc,CAAC,YAAY,GAAG,QAAQ,CAAC;oBACvC,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC;gBACzC,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,wCAAwC,QAAQ,oCAAoC,CAAC,CAAC;gBACrG,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YAErC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAW,EAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;gBAEhG,SAAS,CAAC,WAAW,CAAC,GAAG;oBACvB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,QAAQ,CAAC,WAAW,IAAI,IAAI;oBACrC,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC;gBAEF,wBAAwB;gBACxB,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;gBACzD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CACnD,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CACtB,CAAC,MAAM,CAAC;gBACT,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CACpD,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,YAAY,CAC3C,CAAC,MAAM,CAAC;gBACT,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CACpD,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CACtB,CAAC,MAAM,CAAC;gBAET,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,OAAO,CAAC,GAAG,CAAC,mBAAmB,QAAQ,IAAI,YAAY,YAAY,WAAW,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAEjI,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;gBACjC,CAAC;gBAED,2BAA2B;gBAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAQ,EAAE,CAAC;oBAC/D,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;wBACf,iCAAiC;wBACjC,SAAS;oBACX,CAAC;oBACD,0EAA0E;oBAC1E,MAAM,WAAW,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,UAAU,CAAC;oBAC7D,IAAI,EAAE,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;wBACpC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,WAAW,cAAc,CAAC,CAAC;oBAC1E,CAAC;yBAAM,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;wBACtB,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,WAAW,MAAM,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,aAAa,IAAI,WAAW,MAAM,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC;oBACvI,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,YAAY,UAAU,CAAC,EAAE,CAAC,YAAY,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,cAAc,WAAW,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,aAAa,IAAI,WAAW,IAAI,EAAE,CAAC,CAAC;oBAC9L,CAAC;gBACH,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;YAC/B,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS;SACV,CAAC;IACJ,CAAC;CACF;AApSD,kCAoSC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,IAAI,EAAE;SACN,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Step Replayer
3
- * Replays Gherkin steps on a live Playwright page to reveal dynamic elements.
4
- * Takes a snapshot and finds elements after each action.
5
- */
6
- import type { Page } from 'playwright';
7
- import { LiveElement } from './types';
8
- interface ParsedStepInfo {
9
- keyword: string;
10
- text: string;
11
- selectorRef?: string;
12
- dataRef?: string;
13
- elementType?: string;
14
- nth?: number;
15
- }
16
- interface ReplayResult {
17
- elements: Record<string, LiveElement>;
18
- errors: string[];
19
- }
20
- /**
21
- * Replay a sequence of Gherkin steps on a Playwright page,
22
- * finding and interacting with elements along the way.
23
- */
24
- export declare function replaySteps(page: Page, steps: ParsedStepInfo[], featurePath: string, baseUrl: string, existingElements?: Record<string, LiveElement>, testData?: Record<string, any> | null): Promise<ReplayResult>;
25
- export {};
26
- //# sourceMappingURL=step-replayer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"step-replayer.d.ts","sourceRoot":"","sources":["../../../src/core/live-scanner/step-replayer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAkB,MAAM,SAAS,CAAC;AAGtD,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtC,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAeD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,cAAc,EAAE,EACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GACpC,OAAO,CAAC,YAAY,CAAC,CAmNvB"}