@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
@@ -0,0 +1,225 @@
1
+ # sungen makeauth
2
+
3
+ Generate authentication state for E2E tests with SSO (Single Sign-On) support.
4
+
5
+ ## Overview
6
+
7
+ The `makeauth` command opens a browser window for manual login (including SSO providers like Google, Facebook, GitHub, etc.) and saves the authentication state to a JSON file. This storage state can then be used in Playwright tests to skip the login process.
8
+
9
+ ## Usage
10
+
11
+ ```bash
12
+ sungen makeauth <name> [options]
13
+ ```
14
+
15
+ ### Arguments
16
+
17
+ | Argument | Description |
18
+ |----------|-------------|
19
+ | `name` | Name for the auth state (e.g., `admin`, `user`, `guest`) |
20
+
21
+ ### Options
22
+
23
+ | Option | Description | Default |
24
+ |--------|-------------|---------|
25
+ | `-u, --url <url>` | Base URL of the application | Auto-detect from `playwright.config.ts` |
26
+ | `-p, --path <path>` | Login page path | `/login` |
27
+ | `-o, --output <dir>` | Output directory for auth files | `specs/.auth` |
28
+ | `-t, --timeout <ms>` | Overall timeout for login process | `180000` (3 minutes) |
29
+ | `--nav-timeout <ms>` | Navigation timeout (page load) | `180000` (3 minutes) |
30
+ | `--stability-wait <ms>` | URL stability wait before confirming login | `5000` (5 seconds) |
31
+ | `--headless` | Run browser in headless mode | `false` |
32
+ | `--verify` | Verify existing auth state is still valid | - |
33
+ | `--list` | List all existing auth states | - |
34
+ | `--export` | Export auth state as base64 (for CI) | - |
35
+
36
+ ### Timeout Configuration
37
+
38
+ | Config | Default | Description |
39
+ |--------|---------|-------------|
40
+ | `timeout` | 180000 (3 min) | Overall timeout for the entire login process |
41
+ | `nav-timeout` | 180000 (3 min) | Timeout for page navigation (page.goto) |
42
+ | `stability-wait` | 5000 (5 sec) | Time URL must remain stable before confirming successful login |
43
+
44
+ ## Examples
45
+
46
+ ### Create auth state
47
+
48
+ ```bash
49
+ # Basic usage - auto-detect URL from playwright.config.ts
50
+ sungen makeauth admin
51
+
52
+ # Specify URL explicitly
53
+ sungen makeauth admin --url https://myapp.com
54
+
55
+ # Custom login path
56
+ sungen makeauth admin --url https://myapp.com --path /auth/signin
57
+
58
+ # Longer timeout for slow SSO providers
59
+ sungen makeauth admin --timeout 300000
60
+ ```
61
+
62
+ ### Manage auth states
63
+
64
+ ```bash
65
+ # List all auth states
66
+ sungen makeauth admin --list
67
+
68
+ # Verify auth state is still valid
69
+ sungen makeauth admin --verify
70
+
71
+ # Export for CI (base64)
72
+ sungen makeauth admin --export
73
+ ```
74
+
75
+ ## URL Detection Priority
76
+
77
+ The command automatically detects the base URL in this order:
78
+
79
+ 1. `--url` flag (if provided)
80
+ 2. `playwright.config.ts` - reads `baseURL` from the config
81
+ 3. `APP_BASE_URL` environment variable
82
+ 4. Default: `http://localhost:3000`
83
+
84
+ ## Supported SSO Providers
85
+
86
+ The tool automatically detects and displays the SSO provider being used:
87
+
88
+ | Provider | Detection |
89
+ |----------|-----------|
90
+ | Google | accounts.google.com |
91
+ | Facebook | facebook.com |
92
+ | GitHub | github.com |
93
+ | Microsoft/Azure AD | login.microsoftonline.com |
94
+ | Apple | appleid.apple.com |
95
+ | X (Twitter) | twitter.com, x.com |
96
+ | LinkedIn | linkedin.com |
97
+ | Okta | *.okta.com |
98
+ | Auth0 | *.auth0.com |
99
+ | GitLab | gitlab.com |
100
+ | Atlassian | atlassian.com, bitbucket.org |
101
+ | Slack | slack.com |
102
+ | Discord | discord.com |
103
+ | Amazon Cognito | amazoncognito.com |
104
+ | Yahoo | yahoo.com |
105
+
106
+ Any other SSO provider will show the domain name.
107
+
108
+ ## How It Works
109
+
110
+ 1. **Open Browser**: Launches Chromium browser and navigates to login page
111
+ 2. **Wait for SSO**: Detects when user clicks SSO button (redirect to external domain)
112
+ 3. **Wait for Callback**: Monitors for redirect back to application
113
+ 4. **Save State**: Stores cookies, localStorage, and sessionStorage to JSON file
114
+ 5. **Auto-close**: Browser closes automatically after successful login
115
+
116
+ You can also press **ENTER** at any time to manually save the current state.
117
+
118
+ ## Output
119
+
120
+ Auth states are saved to `specs/.auth/<name>.json`:
121
+
122
+ ```
123
+ specs/
124
+ .auth/
125
+ admin.json
126
+ user.json
127
+ guest.json
128
+ ```
129
+
130
+ ## Using in Playwright Tests
131
+
132
+ ### Method 1: Global Setup (Recommended)
133
+
134
+ ```typescript
135
+ // playwright.config.ts
136
+ import { defineConfig } from '@playwright/test';
137
+
138
+ export default defineConfig({
139
+ projects: [
140
+ {
141
+ name: 'authenticated',
142
+ use: {
143
+ storageState: 'specs/.auth/admin.json',
144
+ },
145
+ },
146
+ ],
147
+ });
148
+ ```
149
+
150
+ ### Method 2: Per-test Setup
151
+
152
+ ```typescript
153
+ // my-test.spec.ts
154
+ import { test } from '@playwright/test';
155
+
156
+ test.use({ storageState: 'specs/.auth/admin.json' });
157
+
158
+ test('authenticated test', async ({ page }) => {
159
+ await page.goto('/dashboard');
160
+ // Already logged in!
161
+ });
162
+ ```
163
+
164
+ ### Method 3: Multiple Roles
165
+
166
+ ```typescript
167
+ // playwright.config.ts
168
+ export default defineConfig({
169
+ projects: [
170
+ {
171
+ name: 'admin',
172
+ use: { storageState: 'specs/.auth/admin.json' },
173
+ },
174
+ {
175
+ name: 'user',
176
+ use: { storageState: 'specs/.auth/user.json' },
177
+ },
178
+ ],
179
+ });
180
+ ```
181
+
182
+ ## CI/CD Integration
183
+
184
+ ### Option 1: Pre-generated Auth State
185
+
186
+ 1. Generate auth state locally:
187
+ ```bash
188
+ sungen makeauth admin
189
+ ```
190
+
191
+ 2. Export as base64:
192
+ ```bash
193
+ sungen makeauth admin --export
194
+ ```
195
+
196
+ 3. Save to CI secret (e.g., `AUTH_STATE_ADMIN`)
197
+
198
+ 4. In CI, decode and save:
199
+ ```bash
200
+ echo "$AUTH_STATE_ADMIN" | base64 -d > specs/.auth/admin.json
201
+ ```
202
+
203
+ ### Option 2: Service Account
204
+
205
+ For automated CI without SSO:
206
+ 1. Create a service account with username/password login
207
+ 2. Use Playwright's built-in auth setup
208
+
209
+ ## Troubleshooting
210
+
211
+ ### Browser closes immediately
212
+ - Make sure to click the SSO button before the browser closes
213
+ - The tool waits for you to leave the base URL domain
214
+
215
+ ### Auth state expired
216
+ - Run `sungen makeauth admin --verify` to check
217
+ - Regenerate with `sungen makeauth admin`
218
+
219
+ ### Wrong URL detected
220
+ - Check your `playwright.config.ts` has correct `baseURL`
221
+ - Or specify explicitly: `--url https://your-app.com`
222
+
223
+ ### Timeout error
224
+ - Increase timeout: `--timeout 300000` (5 minutes)
225
+ - Or press ENTER to save manually at any time
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sun-asterisk/sungen",
3
- "version": "1.0.24",
4
- "description": "AI-Native E2E Test Generator - Generate Playwright tests from Gherkin features using AI",
3
+ "version": "2.0.1",
4
+ "description": "Deterministic E2E Test Compiler - Gherkin + Selectors Playwright tests",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "bin": {
@@ -9,7 +9,7 @@
9
9
  },
10
10
  "scripts": {
11
11
  "build": "tsc && npm run copy-templates",
12
- "copy-templates": "mkdir -p dist/generators/test-generator/adapters/playwright/templates/steps && mkdir -p dist/generators/test-generator/templates && cp -r src/generators/test-generator/adapters/playwright/templates/*.hbs dist/generators/test-generator/adapters/playwright/templates/ 2>/dev/null || true && cp -r src/generators/test-generator/adapters/playwright/templates/steps dist/generators/test-generator/adapters/playwright/templates/ && cp src/generators/test-generator/templates/*.hbs dist/generators/test-generator/templates/ 2>/dev/null || true",
12
+ "copy-templates": "mkdir -p dist/generators/test-generator/adapters/playwright/templates/steps && mkdir -p dist/generators/test-generator/templates && mkdir -p dist/orchestrator/templates && cp -r src/generators/test-generator/adapters/playwright/templates/*.hbs dist/generators/test-generator/adapters/playwright/templates/ 2>/dev/null || true && cp -r src/generators/test-generator/adapters/playwright/templates/steps dist/generators/test-generator/adapters/playwright/templates/ && cp src/generators/test-generator/templates/*.hbs dist/generators/test-generator/templates/ 2>/dev/null || true && cp -r src/orchestrator/templates/* dist/orchestrator/templates/",
13
13
  "dev": "tsx src/cli/index.ts",
14
14
  "test": "echo \"Error: no test specified\" && exit 1",
15
15
  "prepublishOnly": "npm run build"
@@ -67,6 +67,7 @@
67
67
  "dist",
68
68
  "bin",
69
69
  "src",
70
+ "docs",
70
71
  "README.md",
71
72
  "LICENSE"
72
73
  ]
@@ -3,9 +3,10 @@ import { Command } from 'commander';
3
3
  export function registerAddCommand(program: Command): void {
4
4
  program
5
5
  .command('add')
6
- .description('Add screen definition with scaffolded files')
6
+ .description('Add screen or feature definition with scaffolded files')
7
7
  .requiredOption('--screen <name>', 'Screen name')
8
- .option('-p, --path <path>', 'Screen route path')
8
+ .option('-p, --path <path>', 'Screen route path (e.g. /awards)')
9
+ .option('-f, --feature <name>', 'Add additional feature file to existing screen')
9
10
  .option('-d, --description <text>', 'Screen description')
10
11
  .action(async (options) => {
11
12
  try {
@@ -15,10 +16,11 @@ export function registerAddCommand(program: Command): void {
15
16
  await manager.addScreen({
16
17
  name: options.screen,
17
18
  path: options.path,
19
+ feature: options.feature,
18
20
  description: options.description,
19
21
  });
20
22
  } catch (error) {
21
- console.error(' Add screen failed:', error);
23
+ console.error('Error:', error instanceof Error ? error.message : error);
22
24
  process.exit(1);
23
25
  }
24
26
  });
@@ -1,54 +1,106 @@
1
1
  import { Command } from 'commander';
2
- import { ConfigLoader } from '../../config/config-loader';
3
- import { Pipeline } from '../../orchestrator/pipeline';
4
- import { ValidationResult } from '../../core/validator';
5
- import { printValidationResult } from '../utils';
2
+ import * as path from 'path';
3
+ import * as fs from 'fs';
4
+ import { CodeGenerator } from '../../generators/test-generator/code-generator';
5
+
6
+ /**
7
+ * Find .feature files recursively in a directory
8
+ */
9
+ function findFeatureFiles(dir: string): string[] {
10
+ const files: string[] = [];
11
+ if (!fs.existsSync(dir)) return files;
12
+
13
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
14
+ for (const entry of entries) {
15
+ const fullPath = path.join(dir, entry.name);
16
+ if (entry.isDirectory()) {
17
+ files.push(...findFeatureFiles(fullPath));
18
+ } else if (entry.isFile() && entry.name.endsWith('.feature')) {
19
+ files.push(fullPath);
20
+ }
21
+ }
22
+ return files;
23
+ }
24
+
25
+ /**
26
+ * Find feature files for a specific screen
27
+ */
28
+ function findFeatureFilesForScreen(screenName: string): string[] {
29
+ const screenFeaturesDir = path.join(process.cwd(), 'qa', 'screens', screenName, 'features');
30
+ return findFeatureFiles(screenFeaturesDir);
31
+ }
32
+
33
+ /**
34
+ * Find all feature files across all screens
35
+ */
36
+ function findAllFeatureFiles(): string[] {
37
+ const allFiles: string[] = [];
38
+ const screensDir = path.join(process.cwd(), 'qa', 'screens');
39
+
40
+ if (fs.existsSync(screensDir)) {
41
+ const screenDirs = fs.readdirSync(screensDir, { withFileTypes: true })
42
+ .filter(entry => entry.isDirectory())
43
+ .map(entry => entry.name);
44
+
45
+ for (const screenName of screenDirs) {
46
+ const screenFeaturesDir = path.join(screensDir, screenName, 'features');
47
+ allFiles.push(...findFeatureFiles(screenFeaturesDir));
48
+ }
49
+ }
50
+
51
+ return allFiles;
52
+ }
6
53
 
7
54
  export function registerGenerateCommand(program: Command): void {
8
55
  program
9
56
  .command('generate')
10
- .description('Generate Playwright test code from features')
11
- .option('--ai-mapper', 'Enable AI fallback for unknown Gherkin patterns')
12
- .option('--framework <name>', 'Test framework (playwright, appium, integration)', 'playwright')
13
- .option('-s, --screen <name>', 'Filter generation to specific screen')
14
- .option('-f, --force', 'Force regeneration, bypass cache')
15
- .option('--skip-validation', 'Skip validation before generation')
57
+ .description('Generate Playwright test code from Gherkin features')
58
+ .option('-s, --screen <name>', 'Generate tests for a specific screen')
59
+ .option('--all', 'Generate tests for all screens')
60
+ .option('--framework <name>', 'Test framework (default: playwright)', 'playwright')
16
61
  .action(async (options) => {
17
62
  try {
18
- // Run validation first (unless --skip-validation is set)
19
- if (!options.skipValidation) {
20
- const { ScreenValidator } = require('../../core/validator');
21
- const validator = new ScreenValidator();
22
-
23
- let validationResult: ValidationResult;
24
- if (options.screen) {
25
- console.log(`🔍 Validating screen: ${options.screen}...\n`);
26
- validationResult = validator.validateScreen(options.screen);
27
- } else {
28
- console.log('🔍 Validating all screens...\n');
29
- validationResult = validator.validateAll();
30
- }
63
+ const screenName = options.screen;
31
64
 
32
- if (!validationResult.valid) {
33
- printValidationResult(validationResult, false);
34
- console.error('\n❌ Validation failed. Fix errors before generating tests.');
35
- console.error(' Tip: Use --skip-validation to bypass validation (not recommended)');
36
- process.exit(1);
65
+ // Find feature files
66
+ let featureFiles: string[];
67
+ if (screenName) {
68
+ featureFiles = findFeatureFilesForScreen(screenName);
69
+ if (featureFiles.length === 0) {
70
+ throw new Error(
71
+ `No feature files found for screen: ${screenName}\n` +
72
+ `Looked in: qa/screens/${screenName}/features/`
73
+ );
37
74
  }
38
-
39
- console.log(`✅ Validation passed (${validationResult.summary.totalFiles} files)\n`);
75
+ console.log(`\nGenerating tests: ${screenName}\n`);
76
+ } else {
77
+ featureFiles = findAllFeatureFiles();
78
+ if (featureFiles.length === 0) {
79
+ throw new Error('No feature files found in qa/screens/');
80
+ }
81
+ console.log(`\nGenerating tests for all screens\n`);
40
82
  }
41
83
 
42
- const cliOptions = {
43
- ...program.opts(),
44
- ...options,
45
- };
46
- const config = new ConfigLoader().load(cliOptions);
47
- const pipeline = new Pipeline(config);
84
+ // Output directory
85
+ const outputDir = path.join(process.cwd(), 'specs', 'generated');
86
+
87
+ // Create generator and compile
88
+ const generator = new CodeGenerator({
89
+ framework: options.framework || 'playwright',
90
+ screenName,
91
+ verbose: program.opts().verbose,
92
+ });
93
+
94
+ const results = await generator.generateAllTests(
95
+ path.join(process.cwd(), 'qa', 'screens'),
96
+ outputDir,
97
+ featureFiles
98
+ );
48
99
 
49
- await pipeline.runTestGeneration(options.screen);
100
+ console.log(`\n${results.length} test file(s) generated.`);
101
+ console.log(`Next step: npx playwright test --ui\n`);
50
102
  } catch (error) {
51
- console.error(' Test generation failed:', error);
103
+ console.error('Error:', error instanceof Error ? error.message : error);
52
104
  process.exit(1);
53
105
  }
54
106
  });
package/src/cli/index.ts CHANGED
@@ -1,18 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Sungen CLI - AI-Native E2E Test Generator
4
- * Command-line interface for generating E2E tests from Gherkin features
3
+ * Sungen CLI v2 - Deterministic E2E Test Compiler
4
+ * Compiles Gherkin features + selector YAML + test data → Playwright tests
5
5
  */
6
6
 
7
7
  import { Command } from 'commander';
8
8
  import { registerInitCommand } from './commands/init';
9
9
  import { registerAddCommand } from './commands/add';
10
- import { registerLiveScanCommand } from './commands/live-scan';
11
- import { registerMapCommand } from './commands/map';
12
10
  import { registerGenerateCommand } from './commands/generate';
13
- import { registerFullCommand } from './commands/full';
14
- import { registerValidateCommand } from './commands/validate';
15
- import { registerCacheClearCommand } from './commands/cache-clear';
16
11
  import { registerMakeauthCommand } from './commands/makeauth';
17
12
 
18
13
  async function main() {
@@ -20,23 +15,17 @@ async function main() {
20
15
 
21
16
  program
22
17
  .name('sungen')
23
- .description('AI-Native E2E Test Generator - Generate Playwright tests from Gherkin features')
24
- .version('1.0.24');
18
+ .description('Deterministic E2E Test Compiler Gherkin + Selectors Playwright')
19
+ .version('2.0.0');
25
20
 
26
21
  // Global options
27
22
  program
28
- .option('-c, --config <path>', 'Path to custom config file')
29
23
  .option('-v, --verbose', 'Enable verbose logging');
30
24
 
31
- // Register all commands
25
+ // Register commands (5 only)
32
26
  registerInitCommand(program);
33
27
  registerAddCommand(program);
34
- registerLiveScanCommand(program);
35
- registerMapCommand(program);
36
28
  registerGenerateCommand(program);
37
- registerFullCommand(program);
38
- registerValidateCommand(program);
39
- registerCacheClearCommand(program);
40
29
  registerMakeauthCommand(program);
41
30
 
42
31
  await program.parseAsync(process.argv);
@@ -0,0 +1 @@
1
+ const frame = page.frameLocator('{{value}}');
@@ -0,0 +1 @@
1
+ await {{> locator}}.scrollIntoViewIfNeeded();
@@ -0,0 +1,2 @@
1
+ const tableRow = {{> locator}}.getByRole('row').filter({ hasText: '{{escapeQuotes filterValue}}' });
2
+ await tableRow.getByRole('button', { name: '{{escapeQuotes elementName}}' }).{{action}}();
@@ -0,0 +1,3 @@
1
+ await page.waitForLoadState('networkidle');
2
+ const tableRow = {{> locator}}.getByRole('row').filter({ hasText: '{{escapeQuotes filterValue}}' });
3
+ await expect(tableRow.getByRole('cell').filter({ hasText: '{{escapeQuotes cellValue}}' })).toBeVisible();
@@ -0,0 +1,3 @@
1
+ await page.waitForLoadState('networkidle');
2
+ const tableRow = {{> locator}}.getByRole('row').nth({{rowIndex}});
3
+ await expect(tableRow.getByRole('cell').filter({ hasText: '{{escapeQuotes cellValue}}' })).toBeVisible();
@@ -0,0 +1,2 @@
1
+ await page.waitForLoadState('networkidle');
2
+ await expect({{> locator}}.getByRole('columnheader', { name: '{{escapeQuotes columnName}}' })).toBeVisible();
@@ -0,0 +1,2 @@
1
+ await page.waitForLoadState('networkidle');
2
+ await expect({{> locator}}.locator('tbody').getByRole('row')).toHaveCount(0);
@@ -0,0 +1,2 @@
1
+ await page.waitForLoadState('networkidle');
2
+ await expect({{> locator}}.locator('tbody').getByRole('row')).toHaveCount({{expectedCount}});
@@ -0,0 +1,2 @@
1
+ await page.waitForLoadState('networkidle');
2
+ await expect({{> locator}}.getByRole('row').filter({ hasText: '{{escapeQuotes filterValue}}' })).toBeVisible();
@@ -0,0 +1,2 @@
1
+ await page.waitForLoadState('networkidle');
2
+ await expect({{> locator}}.getByRole('row').filter({ hasText: '{{escapeQuotes filterValue}}' })).toHaveCount(0);
@@ -1,2 +1,2 @@
1
1
  await page.waitForLoadState('networkidle');
2
- await expect(page.getByText('{{escapeQuotes value}}').filter({ hasText: /^{{escapeRegex dataValue}}$/ })).toBeVisible();
2
+ await expect(page.getByText('{{escapeQuotes value}}'{{#if exact}}, { exact: true }{{/if}}){{#if (gt nth 0)}}.nth({{subtract nth 1}}){{/if}}).toBeVisible();
@@ -1,4 +1,13 @@
1
- {{#switch strategy~}}
1
+ {{#if scope}}{{pageRoot}}.getByLabel('{{escapeQuotes scope}}').{{#switch strategy~}}
2
+ {{~#case 'testid'}}getByTestId('{{value}}'){{/case~}}
3
+ {{~#case 'role'}}{{#if name}}getByRole('{{role}}', { name: '{{escapeQuotes name}}'{{#if exact}}, exact: true{{/if}} }){{else}}getByRole('{{role}}'{{#if exact}}, { exact: true }{{/if}}){{/if}}{{/case~}}
4
+ {{~#case 'placeholder'}}getByPlaceholder('{{escapeQuotes value}}'{{#if exact}}, { exact: true }{{/if}}){{/case~}}
5
+ {{~#case 'label'}}getByLabel('{{escapeQuotes value}}'{{#if exact}}, { exact: true }{{/if}}){{/case~}}
6
+ {{~#case 'text'}}getByText('{{escapeQuotes value}}'{{#if exact}}, { exact: true }{{/if}}){{/case~}}
7
+ {{~#case 'locator'}}locator('{{value}}'){{/case~}}
8
+ {{~#case 'id'}}locator('{{value}}'){{/case~}}
9
+ {{~#default}}locator('{{value}}'){{/default~}}
10
+ {{~/switch}}{{else}}{{#switch strategy~}}
2
11
  {{~#case 'testid'}}{{> locator-strategies/testid}}{{/case~}}
3
12
  {{~#case 'role'}}{{> locator-strategies/role}}{{/case~}}
4
13
  {{~#case 'placeholder'}}{{> locator-strategies/placeholder}}{{/case~}}
@@ -7,4 +16,4 @@
7
16
  {{~#case 'locator'}}{{> locator-strategies/locator}}{{/case~}}
8
17
  {{~#case 'id'}}{{> locator-strategies/id}}{{/case~}}
9
18
  {{~#default}}{{> locator-strategies/default}}{{/default~}}
10
- {{~/switch}}
19
+ {{~/switch}}{{/if}}
@@ -1,4 +1,13 @@
1
- {{#switch strategy~}}
1
+ {{#if scope}}{{pageRoot}}.getByLabel('{{escapeQuotes scope}}').{{#switch strategy~}}
2
+ {{~#case 'testid'}}getByTestId('{{value}}'){{/case~}}
3
+ {{~#case 'role'}}{{#if name}}getByRole('{{role}}', { name: '{{escapeQuotes name}}'{{#if exact}}, exact: true{{/if}} }){{else}}getByRole('{{role}}'{{#if exact}}, { exact: true }{{/if}}){{/if}}{{/case~}}
4
+ {{~#case 'placeholder'}}getByPlaceholder('{{escapeQuotes value}}'{{#if exact}}, { exact: true }{{/if}}){{/case~}}
5
+ {{~#case 'label'}}getByLabel('{{escapeQuotes value}}'{{#if exact}}, { exact: true }{{/if}}){{/case~}}
6
+ {{~#case 'text'}}getByText('{{escapeQuotes value}}'{{#if exact}}, { exact: true }{{/if}}){{/case~}}
7
+ {{~#case 'locator'}}locator('{{value}}'){{/case~}}
8
+ {{~#case 'id'}}locator('{{value}}'){{/case~}}
9
+ {{~#default}}locator('{{value}}'){{/default~}}
10
+ {{~/switch}}{{> locator-nth}}{{else}}{{#switch strategy~}}
2
11
  {{~#case 'testid'}}{{> locator-strategies/testid}}{{/case~}}
3
12
  {{~#case 'role'}}{{> locator-strategies/role}}{{/case~}}
4
13
  {{~#case 'placeholder'}}{{> locator-strategies/placeholder}}{{/case~}}
@@ -7,4 +16,4 @@
7
16
  {{~#case 'locator'}}{{> locator-strategies/locator}}{{/case~}}
8
17
  {{~#case 'id'}}{{> locator-strategies/id}}{{/case~}}
9
18
  {{~#default}}{{> locator-strategies/default}}{{/default~}}
10
- {{~/switch}}{{> locator-nth}}
19
+ {{~/switch}}{{> locator-nth}}{{/if}}