@empiricalrun/playwright-utils 0.22.7 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/bundled/test-gen/actions/assert.d.ts +4 -0
  3. package/bundled/test-gen/actions/assert.d.ts.map +1 -0
  4. package/bundled/test-gen/actions/assert.js +50 -0
  5. package/bundled/test-gen/actions/click.d.ts +4 -0
  6. package/bundled/test-gen/actions/click.d.ts.map +1 -0
  7. package/bundled/test-gen/actions/click.js +51 -0
  8. package/bundled/test-gen/actions/constants/index.d.ts +2 -0
  9. package/bundled/test-gen/actions/constants/index.d.ts.map +1 -0
  10. package/bundled/test-gen/actions/constants/index.js +4 -0
  11. package/bundled/test-gen/actions/done.d.ts +4 -0
  12. package/bundled/test-gen/actions/done.d.ts.map +1 -0
  13. package/bundled/test-gen/actions/done.js +30 -0
  14. package/bundled/test-gen/actions/fill.d.ts +4 -0
  15. package/bundled/test-gen/actions/fill.d.ts.map +1 -0
  16. package/bundled/test-gen/actions/fill.js +82 -0
  17. package/bundled/test-gen/actions/goto.d.ts +4 -0
  18. package/bundled/test-gen/actions/goto.d.ts.map +1 -0
  19. package/bundled/test-gen/actions/goto.js +47 -0
  20. package/bundled/test-gen/actions/hover.d.ts +4 -0
  21. package/bundled/test-gen/actions/hover.d.ts.map +1 -0
  22. package/bundled/test-gen/actions/hover.js +51 -0
  23. package/bundled/test-gen/actions/index.d.ts +30 -0
  24. package/bundled/test-gen/actions/index.d.ts.map +1 -0
  25. package/bundled/test-gen/actions/index.js +159 -0
  26. package/bundled/test-gen/actions/next-task.d.ts +53 -0
  27. package/bundled/test-gen/actions/next-task.d.ts.map +1 -0
  28. package/bundled/test-gen/actions/next-task.js +58 -0
  29. package/bundled/test-gen/actions/press.d.ts +4 -0
  30. package/bundled/test-gen/actions/press.d.ts.map +1 -0
  31. package/bundled/test-gen/actions/press.js +56 -0
  32. package/bundled/test-gen/actions/skill.d.ts +21 -0
  33. package/bundled/test-gen/actions/skill.d.ts.map +1 -0
  34. package/bundled/test-gen/actions/skill.js +127 -0
  35. package/bundled/test-gen/actions/text-content.d.ts +4 -0
  36. package/bundled/test-gen/actions/text-content.d.ts.map +1 -0
  37. package/bundled/test-gen/actions/text-content.js +58 -0
  38. package/bundled/test-gen/actions/utils/index.d.ts +10 -0
  39. package/bundled/test-gen/actions/utils/index.d.ts.map +1 -0
  40. package/bundled/test-gen/actions/utils/index.js +109 -0
  41. package/bundled/test-gen/agent/browsing/index.d.ts +15 -0
  42. package/bundled/test-gen/agent/browsing/index.d.ts.map +1 -0
  43. package/bundled/test-gen/agent/browsing/index.js +68 -0
  44. package/bundled/test-gen/agent/browsing/run.d.ts +19 -0
  45. package/bundled/test-gen/agent/browsing/run.d.ts.map +1 -0
  46. package/bundled/test-gen/agent/browsing/run.js +88 -0
  47. package/bundled/test-gen/agent/browsing/utils.d.ts +41 -0
  48. package/bundled/test-gen/agent/browsing/utils.d.ts.map +1 -0
  49. package/bundled/test-gen/agent/browsing/utils.js +406 -0
  50. package/bundled/test-gen/agent/codegen/create-test-block.d.ts +9 -0
  51. package/bundled/test-gen/agent/codegen/create-test-block.d.ts.map +1 -0
  52. package/bundled/test-gen/agent/codegen/create-test-block.js +63 -0
  53. package/bundled/test-gen/agent/codegen/fix-ts-errors.d.ts +13 -0
  54. package/bundled/test-gen/agent/codegen/fix-ts-errors.d.ts.map +1 -0
  55. package/bundled/test-gen/agent/codegen/fix-ts-errors.js +80 -0
  56. package/bundled/test-gen/agent/codegen/generate-code-apply-changes.d.ts +13 -0
  57. package/bundled/test-gen/agent/codegen/generate-code-apply-changes.d.ts.map +1 -0
  58. package/bundled/test-gen/agent/codegen/generate-code-apply-changes.js +381 -0
  59. package/bundled/test-gen/agent/codegen/lexical-scoped-vars.d.ts +9 -0
  60. package/bundled/test-gen/agent/codegen/lexical-scoped-vars.d.ts.map +1 -0
  61. package/bundled/test-gen/agent/codegen/lexical-scoped-vars.js +56 -0
  62. package/bundled/test-gen/agent/codegen/repo-edit.d.ts +23 -0
  63. package/bundled/test-gen/agent/codegen/repo-edit.d.ts.map +1 -0
  64. package/bundled/test-gen/agent/codegen/repo-edit.js +86 -0
  65. package/bundled/test-gen/agent/codegen/run.d.ts +16 -0
  66. package/bundled/test-gen/agent/codegen/run.d.ts.map +1 -0
  67. package/bundled/test-gen/agent/codegen/run.js +119 -0
  68. package/bundled/test-gen/agent/codegen/skills-retriever.d.ts +26 -0
  69. package/bundled/test-gen/agent/codegen/skills-retriever.d.ts.map +1 -0
  70. package/bundled/test-gen/agent/codegen/skills-retriever.js +93 -0
  71. package/bundled/test-gen/agent/codegen/test-update-feedback.d.ts +12 -0
  72. package/bundled/test-gen/agent/codegen/test-update-feedback.d.ts.map +1 -0
  73. package/bundled/test-gen/agent/codegen/test-update-feedback.js +50 -0
  74. package/bundled/test-gen/agent/codegen/types.d.ts +25 -0
  75. package/bundled/test-gen/agent/codegen/types.d.ts.map +1 -0
  76. package/bundled/test-gen/agent/codegen/types.js +8 -0
  77. package/bundled/test-gen/agent/codegen/update-flow.d.ts +34 -0
  78. package/bundled/test-gen/agent/codegen/update-flow.d.ts.map +1 -0
  79. package/bundled/test-gen/agent/codegen/update-flow.js +300 -0
  80. package/bundled/test-gen/agent/codegen/use-skill.d.ts +11 -0
  81. package/bundled/test-gen/agent/codegen/use-skill.d.ts.map +1 -0
  82. package/bundled/test-gen/agent/codegen/use-skill.js +54 -0
  83. package/bundled/test-gen/agent/codegen/utils.d.ts +126 -0
  84. package/bundled/test-gen/agent/codegen/utils.d.ts.map +1 -0
  85. package/bundled/test-gen/agent/codegen/utils.js +416 -0
  86. package/bundled/test-gen/agent/diagnosis-agent/index.d.ts +18 -0
  87. package/bundled/test-gen/agent/diagnosis-agent/index.d.ts.map +1 -0
  88. package/bundled/test-gen/agent/diagnosis-agent/index.js +105 -0
  89. package/bundled/test-gen/agent/diagnosis-agent/strict-mode-violation.d.ts +9 -0
  90. package/bundled/test-gen/agent/diagnosis-agent/strict-mode-violation.d.ts.map +1 -0
  91. package/bundled/test-gen/agent/diagnosis-agent/strict-mode-violation.js +31 -0
  92. package/bundled/test-gen/agent/enrich-prompt/index.d.ts +12 -0
  93. package/bundled/test-gen/agent/enrich-prompt/index.d.ts.map +1 -0
  94. package/bundled/test-gen/agent/enrich-prompt/index.js +81 -0
  95. package/bundled/test-gen/agent/enrich-prompt/utils.d.ts +6 -0
  96. package/bundled/test-gen/agent/enrich-prompt/utils.d.ts.map +1 -0
  97. package/bundled/test-gen/agent/enrich-prompt/utils.js +12 -0
  98. package/bundled/test-gen/agent/infer-agent/index.d.ts +10 -0
  99. package/bundled/test-gen/agent/infer-agent/index.d.ts.map +1 -0
  100. package/bundled/test-gen/agent/infer-agent/index.js +70 -0
  101. package/bundled/test-gen/agent/master/action-tool-calls.d.ts +42 -0
  102. package/bundled/test-gen/agent/master/action-tool-calls.d.ts.map +1 -0
  103. package/bundled/test-gen/agent/master/action-tool-calls.js +87 -0
  104. package/bundled/test-gen/agent/master/browser-tests/fixtures.d.ts +9 -0
  105. package/bundled/test-gen/agent/master/browser-tests/fixtures.d.ts.map +1 -0
  106. package/bundled/test-gen/agent/master/browser-tests/fixtures.js +33 -0
  107. package/bundled/test-gen/agent/master/browser-tests/index.spec.d.ts +2 -0
  108. package/bundled/test-gen/agent/master/browser-tests/index.spec.d.ts.map +1 -0
  109. package/bundled/test-gen/agent/master/browser-tests/index.spec.js +113 -0
  110. package/bundled/test-gen/agent/master/browser-tests/skills.spec.d.ts +2 -0
  111. package/bundled/test-gen/agent/master/browser-tests/skills.spec.d.ts.map +1 -0
  112. package/bundled/test-gen/agent/master/browser-tests/skills.spec.js +109 -0
  113. package/bundled/test-gen/agent/master/element-annotation.d.ts +30 -0
  114. package/bundled/test-gen/agent/master/element-annotation.d.ts.map +1 -0
  115. package/bundled/test-gen/agent/master/element-annotation.js +195 -0
  116. package/bundled/test-gen/agent/master/execute-browser-action.d.ts +24 -0
  117. package/bundled/test-gen/agent/master/execute-browser-action.d.ts.map +1 -0
  118. package/bundled/test-gen/agent/master/execute-browser-action.js +124 -0
  119. package/bundled/test-gen/agent/master/execute-skill-action.d.ts +11 -0
  120. package/bundled/test-gen/agent/master/execute-skill-action.d.ts.map +1 -0
  121. package/bundled/test-gen/agent/master/execute-skill-action.js +25 -0
  122. package/bundled/test-gen/agent/master/icon-descriptor/index.d.ts +22 -0
  123. package/bundled/test-gen/agent/master/icon-descriptor/index.d.ts.map +1 -0
  124. package/bundled/test-gen/agent/master/icon-descriptor/index.js +250 -0
  125. package/bundled/test-gen/agent/master/icon-descriptor/normalize-svg.d.ts +2 -0
  126. package/bundled/test-gen/agent/master/icon-descriptor/normalize-svg.d.ts.map +1 -0
  127. package/bundled/test-gen/agent/master/icon-descriptor/normalize-svg.js +248 -0
  128. package/bundled/test-gen/agent/master/next-action.d.ts +22 -0
  129. package/bundled/test-gen/agent/master/next-action.d.ts.map +1 -0
  130. package/bundled/test-gen/agent/master/next-action.js +104 -0
  131. package/bundled/test-gen/agent/master/planner.d.ts +15 -0
  132. package/bundled/test-gen/agent/master/planner.d.ts.map +1 -0
  133. package/bundled/test-gen/agent/master/planner.js +144 -0
  134. package/bundled/test-gen/agent/master/run.d.ts +15 -0
  135. package/bundled/test-gen/agent/master/run.d.ts.map +1 -0
  136. package/bundled/test-gen/agent/master/run.js +274 -0
  137. package/bundled/test-gen/agent/master/scroller.d.ts +15 -0
  138. package/bundled/test-gen/agent/master/scroller.d.ts.map +1 -0
  139. package/bundled/test-gen/agent/master/scroller.js +375 -0
  140. package/bundled/test-gen/agent/master/with-hints.d.ts +17 -0
  141. package/bundled/test-gen/agent/master/with-hints.d.ts.map +1 -0
  142. package/bundled/test-gen/agent/master/with-hints.js +102 -0
  143. package/bundled/test-gen/agent/planner/run-time-planner.d.ts +15 -0
  144. package/bundled/test-gen/agent/planner/run-time-planner.d.ts.map +1 -0
  145. package/bundled/test-gen/agent/planner/run-time-planner.js +100 -0
  146. package/bundled/test-gen/agent/planner/run.d.ts +7 -0
  147. package/bundled/test-gen/agent/planner/run.d.ts.map +1 -0
  148. package/bundled/test-gen/agent/planner/run.js +127 -0
  149. package/bundled/test-gen/agent/utils.d.ts +2 -0
  150. package/bundled/test-gen/agent/utils.d.ts.map +1 -0
  151. package/bundled/test-gen/agent/utils.js +12 -0
  152. package/bundled/test-gen/bin/index.d.ts +3 -0
  153. package/bundled/test-gen/bin/index.d.ts.map +1 -0
  154. package/bundled/test-gen/bin/index.js +212 -0
  155. package/bundled/test-gen/bin/logger/index.d.ts +14 -0
  156. package/bundled/test-gen/bin/logger/index.d.ts.map +1 -0
  157. package/bundled/test-gen/bin/logger/index.js +57 -0
  158. package/bundled/test-gen/bin/utils/context.d.ts +13 -0
  159. package/bundled/test-gen/bin/utils/context.d.ts.map +1 -0
  160. package/bundled/test-gen/bin/utils/context.js +67 -0
  161. package/bundled/test-gen/bin/utils/fs/index.d.ts +6 -0
  162. package/bundled/test-gen/bin/utils/fs/index.d.ts.map +1 -0
  163. package/bundled/test-gen/bin/utils/fs/index.js +63 -0
  164. package/bundled/test-gen/bin/utils/index.d.ts +9 -0
  165. package/bundled/test-gen/bin/utils/index.d.ts.map +1 -0
  166. package/bundled/test-gen/bin/utils/index.js +64 -0
  167. package/bundled/test-gen/bin/utils/platform/web/index.d.ts +78 -0
  168. package/bundled/test-gen/bin/utils/platform/web/index.d.ts.map +1 -0
  169. package/bundled/test-gen/bin/utils/platform/web/index.js +544 -0
  170. package/bundled/test-gen/bin/utils/platform/web/test-files/ts-path-import-validate.d.ts +2 -0
  171. package/bundled/test-gen/bin/utils/platform/web/test-files/ts-path-import-validate.d.ts.map +1 -0
  172. package/bundled/test-gen/bin/utils/platform/web/test-files/ts-path-import-validate.js +7 -0
  173. package/bundled/test-gen/bin/utils/scenarios/index.d.ts +6 -0
  174. package/bundled/test-gen/bin/utils/scenarios/index.d.ts.map +1 -0
  175. package/bundled/test-gen/bin/utils/scenarios/index.js +57 -0
  176. package/bundled/test-gen/browser-injected-scripts/annotate-elements.js +615 -0
  177. package/bundled/test-gen/browser-injected-scripts/annotate-elements.spec.d.ts +2 -0
  178. package/bundled/test-gen/browser-injected-scripts/annotate-elements.spec.d.ts.map +1 -0
  179. package/bundled/test-gen/browser-injected-scripts/annotate-elements.spec.js +207 -0
  180. package/bundled/test-gen/browser-injected-scripts/annotate-elements.spec.ts +332 -0
  181. package/bundled/test-gen/constants/index.d.ts +7 -0
  182. package/bundled/test-gen/constants/index.d.ts.map +1 -0
  183. package/bundled/test-gen/constants/index.js +18 -0
  184. package/bundled/test-gen/errors/index.d.ts +5 -0
  185. package/bundled/test-gen/errors/index.d.ts.map +1 -0
  186. package/bundled/test-gen/errors/index.js +9 -0
  187. package/bundled/test-gen/evals/add-scenario-agent.evals.d.ts +4 -0
  188. package/bundled/test-gen/evals/add-scenario-agent.evals.d.ts.map +1 -0
  189. package/bundled/test-gen/evals/add-scenario-agent.evals.js +44 -0
  190. package/bundled/test-gen/evals/append-create-test-agent.evals.d.ts +4 -0
  191. package/bundled/test-gen/evals/append-create-test-agent.evals.d.ts.map +1 -0
  192. package/bundled/test-gen/evals/append-create-test-agent.evals.js +117 -0
  193. package/bundled/test-gen/evals/fetch-pom-skills-agent.evals.d.ts +4 -0
  194. package/bundled/test-gen/evals/fetch-pom-skills-agent.evals.d.ts.map +1 -0
  195. package/bundled/test-gen/evals/fetch-pom-skills-agent.evals.js +36 -0
  196. package/bundled/test-gen/evals/infer-master-or-code-agent.evals.d.ts +4 -0
  197. package/bundled/test-gen/evals/infer-master-or-code-agent.evals.d.ts.map +1 -0
  198. package/bundled/test-gen/evals/infer-master-or-code-agent.evals.js +22 -0
  199. package/bundled/test-gen/evals/master-agent.evals.d.ts +4 -0
  200. package/bundled/test-gen/evals/master-agent.evals.d.ts.map +1 -0
  201. package/bundled/test-gen/evals/master-agent.evals.js +35 -0
  202. package/bundled/test-gen/evals/type.d.ts +12 -0
  203. package/bundled/test-gen/evals/type.d.ts.map +1 -0
  204. package/bundled/test-gen/evals/type.js +2 -0
  205. package/bundled/test-gen/evals/update-scenario-agent.evals.d.ts +4 -0
  206. package/bundled/test-gen/evals/update-scenario-agent.evals.d.ts.map +1 -0
  207. package/bundled/test-gen/evals/update-scenario-agent.evals.js +47 -0
  208. package/bundled/test-gen/file/client.d.ts +14 -0
  209. package/bundled/test-gen/file/client.d.ts.map +1 -0
  210. package/bundled/test-gen/file/client.js +48 -0
  211. package/bundled/test-gen/file/server.d.ts +13 -0
  212. package/bundled/test-gen/file/server.d.ts.map +1 -0
  213. package/bundled/test-gen/file/server.js +52 -0
  214. package/bundled/test-gen/human-in-the-loop/cli.d.ts +2 -0
  215. package/bundled/test-gen/human-in-the-loop/cli.d.ts.map +1 -0
  216. package/bundled/test-gen/human-in-the-loop/cli.js +24 -0
  217. package/bundled/test-gen/human-in-the-loop/index.d.ts +12 -0
  218. package/bundled/test-gen/human-in-the-loop/index.d.ts.map +1 -0
  219. package/bundled/test-gen/human-in-the-loop/index.js +30 -0
  220. package/bundled/test-gen/human-in-the-loop/ipc.d.ts +4 -0
  221. package/bundled/test-gen/human-in-the-loop/ipc.d.ts.map +1 -0
  222. package/bundled/test-gen/human-in-the-loop/ipc.js +47 -0
  223. package/bundled/test-gen/index.d.ts +4 -0
  224. package/bundled/test-gen/index.d.ts.map +1 -0
  225. package/bundled/test-gen/index.js +55 -0
  226. package/bundled/test-gen/package.json +106 -0
  227. package/bundled/test-gen/page/index.d.ts +11 -0
  228. package/bundled/test-gen/page/index.d.ts.map +1 -0
  229. package/bundled/test-gen/page/index.js +16 -0
  230. package/bundled/test-gen/prompts/lib/ts-transformer.d.ts +4 -0
  231. package/bundled/test-gen/prompts/lib/ts-transformer.d.ts.map +1 -0
  232. package/bundled/test-gen/prompts/lib/ts-transformer.js +92 -0
  233. package/bundled/test-gen/reporter/index.d.ts +33 -0
  234. package/bundled/test-gen/reporter/index.d.ts.map +1 -0
  235. package/bundled/test-gen/reporter/index.js +161 -0
  236. package/bundled/test-gen/session/index.d.ts +20 -0
  237. package/bundled/test-gen/session/index.d.ts.map +1 -0
  238. package/bundled/test-gen/session/index.js +105 -0
  239. package/bundled/test-gen/test-build/index.d.ts +10 -0
  240. package/bundled/test-gen/test-build/index.d.ts.map +1 -0
  241. package/bundled/test-gen/test-build/index.js +30 -0
  242. package/bundled/test-gen/types/index.d.ts +69 -0
  243. package/bundled/test-gen/types/index.d.ts.map +1 -0
  244. package/bundled/test-gen/types/index.js +2 -0
  245. package/bundled/test-gen/uploader/index.d.ts +26 -0
  246. package/bundled/test-gen/uploader/index.d.ts.map +1 -0
  247. package/bundled/test-gen/uploader/index.js +102 -0
  248. package/bundled/test-gen/utils/env.d.ts +2 -0
  249. package/bundled/test-gen/utils/env.d.ts.map +1 -0
  250. package/bundled/test-gen/utils/env.js +9 -0
  251. package/bundled/test-gen/utils/exec.d.ts +4 -0
  252. package/bundled/test-gen/utils/exec.d.ts.map +1 -0
  253. package/bundled/test-gen/utils/exec.js +45 -0
  254. package/bundled/test-gen/utils/file.d.ts +2 -0
  255. package/bundled/test-gen/utils/file.d.ts.map +1 -0
  256. package/bundled/test-gen/utils/file.js +25 -0
  257. package/bundled/test-gen/utils/html.d.ts +4 -0
  258. package/bundled/test-gen/utils/html.d.ts.map +1 -0
  259. package/bundled/test-gen/utils/html.js +46 -0
  260. package/bundled/test-gen/utils/index.d.ts +2 -0
  261. package/bundled/test-gen/utils/index.d.ts.map +1 -0
  262. package/bundled/test-gen/utils/index.js +5 -0
  263. package/bundled/test-gen/utils/pw-test.d.ts +3 -0
  264. package/bundled/test-gen/utils/pw-test.d.ts.map +1 -0
  265. package/bundled/test-gen/utils/pw-test.js +26 -0
  266. package/bundled/test-gen/utils/slug.d.ts +2 -0
  267. package/bundled/test-gen/utils/slug.d.ts.map +1 -0
  268. package/bundled/test-gen/utils/slug.js +18 -0
  269. package/bundled/test-gen/utils/string.d.ts +2 -0
  270. package/bundled/test-gen/utils/string.d.ts.map +1 -0
  271. package/bundled/test-gen/utils/string.js +9 -0
  272. package/dist/overlay-tests/click.spec.js +1 -1
  273. package/package.json +3 -3
  274. package/scripts/prepare-publish.js +42 -0
@@ -0,0 +1,544 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isSyntaxValid = exports.getVariableDeclarationsFromCode = exports.buildTestNamePrompt = exports.isTestPresent = exports.appendScopeToCreateTest = exports.addUserContextFixture = exports.importAllExportsStmtFromFilePaths = exports.injectCodeSnippetBySuiteChain = exports.replaceCreateTestWithNewCode = exports.getPageVariableNameFromCreateTest = exports.getFixtureImportPath = exports.removeTestOnly = exports.addNewImport = exports.formatCode = exports.lintErrors = exports.stripAndPrependImports = exports.validateTypescript = exports.appendToTestBlock = exports.findFirstSerialDescribeBlock = exports.hasTopLevelDescribeConfigureWithSerialMode = exports.getTypescriptTestBlock = exports.getTestModuleAliasFromSourceFile = void 0;
7
+ const parser_1 = require("@babel/parser");
8
+ const eslint_1 = require("eslint");
9
+ const fs_extra_1 = __importDefault(require("fs-extra"));
10
+ const lodash_isequal_1 = __importDefault(require("lodash.isequal"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const prettier_1 = __importDefault(require("prettier"));
13
+ const ts_morph_1 = require("ts-morph");
14
+ const typescript_1 = __importDefault(require("typescript"));
15
+ const getTestModuleAliasFromSourceFile = (sourceFile) => {
16
+ return (sourceFile
17
+ .getImportDeclarations()
18
+ // Look for any import that includes "test" as a named import, regardless of module path
19
+ // "test" can be imported from "@playwright/test" or "<some-fixture>"
20
+ .find((importDecl) => importDecl
21
+ .getNamedImports()
22
+ .some((namedImport) => namedImport.getName() === "test"))
23
+ ?.getNamedImports()
24
+ .find((namedImport) => namedImport.getName() === "test")
25
+ ?.getAliasNode()
26
+ ?.getText() || "test");
27
+ };
28
+ exports.getTestModuleAliasFromSourceFile = getTestModuleAliasFromSourceFile;
29
+ /**
30
+ * function to get the test block and test node for the scenario
31
+ * @export
32
+ * @param {string} scenarioName
33
+ * @param {string} content
34
+ * @return { testBlock: string; parentDescribe: string; } testBlock - the test block content, testNode - the test function node
35
+ */
36
+ function getTypescriptTestBlock({ scenarioName, suites, content, }) {
37
+ const project = new ts_morph_1.Project();
38
+ const sourceFile = project.createSourceFile("test.ts", content);
39
+ const testAlias = (0, exports.getTestModuleAliasFromSourceFile)(sourceFile);
40
+ // Get all test function nodes that match the scenario name
41
+ const matchingTestFunctionNodes = sourceFile
42
+ .getDescendantsOfKind(ts_morph_1.SyntaxKind.CallExpression)
43
+ .filter((node) => {
44
+ return Boolean(node.getExpression().getText() === testAlias &&
45
+ node.getArguments()[0]?.getText().includes(scenarioName));
46
+ });
47
+ if (!suites?.length) {
48
+ const firstNode = matchingTestFunctionNodes?.[0];
49
+ return {
50
+ testBlock: firstNode?.getText(),
51
+ testNode: firstNode,
52
+ testAlias,
53
+ };
54
+ }
55
+ // Iterate over each test function node and check if the suites match
56
+ for (const testNode of matchingTestFunctionNodes) {
57
+ const parentDescribes = getParentDescribeNames(testNode);
58
+ if ((0, lodash_isequal_1.default)(parentDescribes, suites)) {
59
+ // Found the matching test block
60
+ return {
61
+ testBlock: testNode.getText(),
62
+ testNode,
63
+ testAlias,
64
+ };
65
+ }
66
+ }
67
+ // No matching test block found
68
+ return {
69
+ testBlock: undefined,
70
+ testNode: undefined,
71
+ testAlias,
72
+ };
73
+ }
74
+ exports.getTypescriptTestBlock = getTypescriptTestBlock;
75
+ // get the names of parent describe blocks
76
+ function getParentDescribeNames(node) {
77
+ const names = [];
78
+ let current = node.getParent();
79
+ while (current) {
80
+ if (ts_morph_1.Node.isCallExpression(current)) {
81
+ const expr = current.getExpression();
82
+ if (expr.getText() === "test.describe") {
83
+ const describeBlockArguments = current.getArguments();
84
+ if (describeBlockArguments.length > 0) {
85
+ const describeBlockName = describeBlockArguments[0];
86
+ if (ts_morph_1.Node.isStringLiteral(describeBlockName)) {
87
+ names.push(describeBlockName.getLiteralText());
88
+ }
89
+ }
90
+ }
91
+ }
92
+ current = current.getParent();
93
+ }
94
+ return names.reverse(); // Reverse to get from outermost to innermost
95
+ }
96
+ async function hasTopLevelDescribeConfigureWithSerialMode(filePath) {
97
+ const project = new ts_morph_1.Project();
98
+ const content = await fs_extra_1.default.readFile(filePath, "utf-8");
99
+ const sourceFile = project.createSourceFile("test.ts", content);
100
+ const statements = sourceFile.getStatements();
101
+ for (const statement of statements) {
102
+ // Check if the statement is an expression statement
103
+ if (statement.getKind() === ts_morph_1.SyntaxKind.ExpressionStatement) {
104
+ const expression = statement.getFirstChildByKind(ts_morph_1.SyntaxKind.CallExpression);
105
+ if (expression) {
106
+ const expressionText = expression.getExpression().getText();
107
+ // Check if it's `test.describe.configure`
108
+ if (expressionText === "test.describe.configure") {
109
+ // Check if arguments exist and if the first argument is an object literal with mode serial
110
+ const args = expression.getArguments();
111
+ const firstArgText = args[0]?.getText();
112
+ if (firstArgText &&
113
+ firstArgText.includes("serial") &&
114
+ firstArgText.includes("mode")) {
115
+ return true;
116
+ }
117
+ }
118
+ }
119
+ }
120
+ }
121
+ return false;
122
+ }
123
+ exports.hasTopLevelDescribeConfigureWithSerialMode = hasTopLevelDescribeConfigureWithSerialMode;
124
+ /**
125
+ * Function to find the first 'describe' block configured with 'serial: true'
126
+ *
127
+ * e.g.
128
+ *
129
+ * test.describe("foo", () => {
130
+ *
131
+ * test.describe.configure({ mode: "serial" });
132
+ *
133
+ * test.describe("bar", () => {
134
+ *
135
+ * test.describe.configure({ mode: "serial" });
136
+ *
137
+ * })
138
+ *
139
+ * })
140
+ *
141
+ * for the above example,
142
+ * this function will return the first 'describe' block which is named "foo"
143
+ *
144
+ * @param {(Node | undefined)} node
145
+ * @return {(Node | undefined)}
146
+ */
147
+ function findFirstSerialDescribeBlock(node) {
148
+ let currentNode = node;
149
+ // Traverse upwards until we find a 'describe' block with 'serial: true'
150
+ while (currentNode) {
151
+ const parentDescribe = currentNode.getFirstAncestorByKind(ts_morph_1.SyntaxKind.CallExpression);
152
+ if (parentDescribe) {
153
+ const isDescribe = parentDescribe.getFirstChild()?.getText() === "test.describe";
154
+ if (isDescribe) {
155
+ const configureCall = parentDescribe
156
+ .getDescendantsOfKind(ts_morph_1.SyntaxKind.CallExpression)
157
+ .find((call) => call.getText().includes("configure"));
158
+ if (configureCall) {
159
+ // Check if 'serial: true' exists
160
+ if (configureCall.getText().includes("serial")) {
161
+ return parentDescribe;
162
+ }
163
+ }
164
+ }
165
+ }
166
+ currentNode = parentDescribe; // Move up the tree
167
+ }
168
+ return undefined; // Return undefined if no 'describe' with serial: true is found
169
+ }
170
+ exports.findFirstSerialDescribeBlock = findFirstSerialDescribeBlock;
171
+ function appendToTestBlock(testBlock, content) {
172
+ const updateTestBlock = testBlock.replace(/\}\)$/, `\n\n${content}\n\n })`);
173
+ return updateTestBlock;
174
+ }
175
+ exports.appendToTestBlock = appendToTestBlock;
176
+ function validateTypescript(filePath) {
177
+ // Create a compiler host to read files
178
+ const compilerHost = typescript_1.default.createCompilerHost({});
179
+ compilerHost.readFile = (file) => fs_extra_1.default.readFileSync(file, "utf8");
180
+ // Create a program with a single source file
181
+ const program = typescript_1.default.createProgram([filePath], {
182
+ esModuleInterop: true,
183
+ allowSyntheticDefaultImports: true,
184
+ }, compilerHost);
185
+ // Get the source file
186
+ const sourceFile = program.getSourceFile(filePath);
187
+ // Get and report any syntactic errors
188
+ const errors = [];
189
+ const syntacticDiagnostics = program.getSyntacticDiagnostics(sourceFile);
190
+ if (syntacticDiagnostics.length > 0) {
191
+ syntacticDiagnostics.forEach((diagnostic) => {
192
+ if (typeof diagnostic.messageText === "string") {
193
+ errors.push(diagnostic.messageText);
194
+ }
195
+ });
196
+ }
197
+ // Get and report any semantic errors
198
+ const semanticDiagnostics = program.getSemanticDiagnostics(sourceFile);
199
+ if (semanticDiagnostics.length > 0) {
200
+ semanticDiagnostics.forEach((diagnostic) => {
201
+ if (typeof diagnostic.messageText === "string") {
202
+ errors.push(diagnostic.messageText);
203
+ }
204
+ else {
205
+ let messageChain = diagnostic.messageText;
206
+ errors.push(messageChain.messageText);
207
+ while (messageChain?.next) {
208
+ messageChain = messageChain.next[0];
209
+ errors.push(messageChain?.messageText);
210
+ }
211
+ }
212
+ });
213
+ }
214
+ return errors;
215
+ }
216
+ exports.validateTypescript = validateTypescript;
217
+ async function stripAndPrependImports(content, testName) {
218
+ const importRegexp = /import\s+\{[^}]*\}\s+from\s+["'][^"']+["'];?/g;
219
+ const imports = content.match(importRegexp);
220
+ const { testBlock: strippedContent } = getTypescriptTestBlock({
221
+ scenarioName: testName,
222
+ content,
223
+ suites: [], // since this method is called on the generated content, not the whole file
224
+ });
225
+ const prependContent = (imports?.join("\n") || "") + "\n\n";
226
+ return [prependContent, strippedContent];
227
+ }
228
+ exports.stripAndPrependImports = stripAndPrependImports;
229
+ async function lintErrors(filePath) {
230
+ const eslint = new eslint_1.ESLint({
231
+ fix: true,
232
+ useEslintrc: true,
233
+ });
234
+ const [result] = await eslint.lintFiles(filePath);
235
+ if (result?.output) {
236
+ await fs_extra_1.default.writeFile(filePath, result.output);
237
+ }
238
+ }
239
+ exports.lintErrors = lintErrors;
240
+ async function formatCode(filePath, trace) {
241
+ const fileContent = fs_extra_1.default.readFileSync(filePath, "utf8");
242
+ if (!fileContent) {
243
+ trace?.span({
244
+ name: "prettier-format-output",
245
+ output: `${filePath} file is empty`,
246
+ });
247
+ return;
248
+ }
249
+ const prettierConfig = {};
250
+ const formattedContent = await prettier_1.default.format(fileContent, {
251
+ ...prettierConfig,
252
+ filepath: filePath,
253
+ });
254
+ trace?.span({ name: "prettier-format-output", output: formattedContent });
255
+ await fs_extra_1.default.writeFile(filePath, formattedContent);
256
+ }
257
+ exports.formatCode = formatCode;
258
+ function addNewImport(contents, modules, pkg) {
259
+ return `import { ${modules.join(", ")} } from "${pkg}";\n${contents}`;
260
+ }
261
+ exports.addNewImport = addNewImport;
262
+ async function removeTestOnly(filePath) {
263
+ const contents = await fs_extra_1.default.readFile(filePath, "utf8");
264
+ const updatedContent = contents
265
+ .replace("test.only(", "test(")
266
+ .replace("test.describe.only(", "test.describe(");
267
+ return fs_extra_1.default.writeFile(filePath, updatedContent);
268
+ }
269
+ exports.removeTestOnly = removeTestOnly;
270
+ function getFixtureImportPath(filePath) {
271
+ // get the depth from the tests folder
272
+ // assumption fixtures are always int the folder tests/fixtures
273
+ const subFolder = filePath.split("/tests/")[1];
274
+ const subFolderDepth = subFolder?.split("/").length
275
+ ? subFolder?.split("/").length - 1
276
+ : 0;
277
+ // create an array of path segments to the fixtures file
278
+ const fixturesPath = [
279
+ "./",
280
+ subFolderDepth ? new Array(subFolderDepth).fill("../").join("") : "",
281
+ "fixtures",
282
+ ].join("");
283
+ return fixturesPath;
284
+ }
285
+ exports.getFixtureImportPath = getFixtureImportPath;
286
+ async function getPageVariableNameFromCreateTest(filePath) {
287
+ const contents = await fs_extra_1.default.readFile(filePath, "utf-8");
288
+ const project = new ts_morph_1.Project();
289
+ const sourceFile = project.createSourceFile("test.ts", contents);
290
+ const createTestNode = sourceFile.getFirstDescendant((node) => !!(node.isKind(ts_morph_1.SyntaxKind.CallExpression) &&
291
+ node.getExpression().getText() === "createTest"));
292
+ if (!createTestNode) {
293
+ throw new Error("createTest not found in file");
294
+ }
295
+ const descendants = createTestNode?.getDescendants();
296
+ const descendentTexts = descendants.map((d) => d.getText());
297
+ const parameterSeparatorIdx = descendentTexts.findIndex((s) => s === ",");
298
+ const pageVariableName = descendentTexts[parameterSeparatorIdx + 1];
299
+ // handle cases like "page as Page"
300
+ return pageVariableName?.split(" ")[0];
301
+ }
302
+ exports.getPageVariableNameFromCreateTest = getPageVariableNameFromCreateTest;
303
+ function resolveImportsFromFixtures({ fixtureImportNode, testAlias, filePath, updatedTestFile, }) {
304
+ const imports = {};
305
+ const importClause = fixtureImportNode.getImportClause();
306
+ if (!importClause) {
307
+ return updatedTestFile;
308
+ }
309
+ const namedImports = importClause.getNamedImports().map((imp) => {
310
+ // aliasNode is truthy if the import is aliased (e.g. import { test as setup } ...)
311
+ const aliasNode = imp.getAliasNode();
312
+ const originalImportName = imp.getName();
313
+ const aliasImportName = aliasNode?.getText();
314
+ const importName = aliasImportName || originalImportName;
315
+ imports[originalImportName] = imp.getText();
316
+ return importName;
317
+ });
318
+ const isComplete = namedImports.includes(testAlias) && namedImports.includes("expect");
319
+ if (!isComplete) {
320
+ if (!Object.keys(imports).includes("test")) {
321
+ imports["test"] = "test";
322
+ }
323
+ if (!Object.keys(imports).includes("expect")) {
324
+ imports["expect"] = "expect";
325
+ }
326
+ const expectedImports = `import { ${Object.values(imports).join(", ")} } from "${getFixtureImportPath(filePath)}";`;
327
+ updatedTestFile = updatedTestFile.replace(fixtureImportNode.getText(), expectedImports);
328
+ }
329
+ return updatedTestFile;
330
+ }
331
+ function replaceCreateTestWithNewCode(filePath, contents, generatedCode) {
332
+ const project = new ts_morph_1.Project();
333
+ const sourceFile = project.createSourceFile("test.ts", contents);
334
+ const testAlias = (0, exports.getTestModuleAliasFromSourceFile)(sourceFile);
335
+ const createTestNode = sourceFile.getFirstDescendant((node) => !!(node.isKind(ts_morph_1.SyntaxKind.CallExpression) &&
336
+ node.getExpression().getText() === "createTest"));
337
+ const createTestWithAwait = `await ${createTestNode?.getText()}`;
338
+ let updatedTestFile = contents.replace(createTestWithAwait, function () {
339
+ // str.replace treats characters like $ differently
340
+ // Using a function helps us avoid special handling
341
+ // https://stackoverflow.com/a/28103073
342
+ return "\n" + generatedCode;
343
+ });
344
+ const fixtureImportNode = sourceFile.getFirstDescendant((node) => !!(node.isKind(ts_morph_1.SyntaxKind.ImportDeclaration) &&
345
+ node.getText().includes("fixtures")));
346
+ if (fixtureImportNode) {
347
+ updatedTestFile = resolveImportsFromFixtures({
348
+ fixtureImportNode,
349
+ testAlias,
350
+ filePath,
351
+ updatedTestFile,
352
+ });
353
+ }
354
+ return updatedTestFile;
355
+ }
356
+ exports.replaceCreateTestWithNewCode = replaceCreateTestWithNewCode;
357
+ const injectCodeSnippetBySuiteChain = ({ testFileContent, codeSnippet, suites, }) => {
358
+ const project = new ts_morph_1.Project();
359
+ // Add the source file content directly into memory
360
+ const sourceFile = project.createSourceFile("test-file.ts", testFileContent);
361
+ // Function to insert the test into the appropriate describe block
362
+ let parentNode = sourceFile;
363
+ if (!suites.length) {
364
+ parentNode.addStatements(codeSnippet);
365
+ return sourceFile.getFullText();
366
+ }
367
+ suites.forEach((suiteName, index) => {
368
+ // Try to find the describe block with the given name
369
+ let describeBlock = parentNode
370
+ .getDescendantsOfKind(ts_morph_1.SyntaxKind.CallExpression)
371
+ .find((callExpr) => {
372
+ const expression = callExpr.getExpression();
373
+ const firstArg = callExpr?.getArguments()?.[0];
374
+ return (expression?.getText() === "test.describe" &&
375
+ firstArg?.getLiteralText() === suiteName);
376
+ });
377
+ // If the describe block doesn't exist, create it
378
+ if (!describeBlock) {
379
+ const newDescribe = `\n\ntest.describe("${suiteName}", () => {});`;
380
+ parentNode.addStatements(newDescribe);
381
+ describeBlock = parentNode
382
+ .getDescendantsOfKind(ts_morph_1.SyntaxKind.CallExpression)
383
+ .find((callExpr) => {
384
+ const expression = callExpr.getExpression();
385
+ const firstArg = callExpr?.getArguments()?.[0];
386
+ return (expression?.getText() === "test.describe" &&
387
+ firstArg?.getLiteralText() === suiteName);
388
+ });
389
+ }
390
+ // If it's the last in the chain, add the test block inside this describe
391
+ if (index === suites.length - 1) {
392
+ const block = describeBlock?.getArguments()[1];
393
+ block.addStatements(codeSnippet);
394
+ }
395
+ // Update parentNode to navigate deeper into nested describe blocks
396
+ parentNode = describeBlock.getArguments()[1];
397
+ });
398
+ return sourceFile.getFullText();
399
+ };
400
+ exports.injectCodeSnippetBySuiteChain = injectCodeSnippetBySuiteChain;
401
+ const importAllExportsStmtFromFilePaths = async (repoDir, filePaths, testFilePath) => {
402
+ const statements = [];
403
+ for (const filePath of filePaths) {
404
+ const fullPath = path_1.default.resolve(repoDir, filePath);
405
+ let importPath = path_1.default.relative(path_1.default.dirname(testFilePath), filePath);
406
+ if (!importPath.startsWith(".")) {
407
+ importPath = "./" + importPath;
408
+ }
409
+ const file = await fs_extra_1.default.readFile(fullPath, "utf-8");
410
+ const project = new ts_morph_1.Project();
411
+ const sourceFile = project.createSourceFile("index.ts", file);
412
+ const exportedFunctions = sourceFile
413
+ .getFunctions()
414
+ .filter((fn) => fn.isExported())
415
+ .map((fn) => fn.getName());
416
+ const exportedVariables = sourceFile
417
+ .getVariableDeclarations()
418
+ .filter((v) => v.isExported())
419
+ .map((fn) => fn.getName());
420
+ const imports = [...exportedFunctions, ...exportedVariables];
421
+ const importStatement = `import { ${imports.join(",")} } from '${importPath.replace(".ts", "")}';`;
422
+ statements.push(importStatement);
423
+ }
424
+ return statements;
425
+ };
426
+ exports.importAllExportsStmtFromFilePaths = importAllExportsStmtFromFilePaths;
427
+ async function addUserContextFixture({ scenarioName, filePath, suites, }) {
428
+ // TODO: remove this check when we support user context across repos
429
+ let fixtureContent = "";
430
+ try {
431
+ fixtureContent = await fs_extra_1.default.readFile("./tests/fixtures.ts", "utf-8");
432
+ }
433
+ catch (e) {
434
+ // do nothing
435
+ }
436
+ if (!fixtureContent || !fixtureContent.includes("userContext")) {
437
+ return;
438
+ }
439
+ const fileContent = await fs_extra_1.default.readFile(filePath, "utf-8");
440
+ const { testNode } = getTypescriptTestBlock({
441
+ scenarioName,
442
+ content: fileContent,
443
+ suites,
444
+ });
445
+ const currentBlock = testNode?.getText();
446
+ const arrowFunction = testNode?.getFirstDescendantByKind(ts_morph_1.SyntaxKind.ArrowFunction);
447
+ if (arrowFunction) {
448
+ const param = arrowFunction.getParameters()[0]; // Get the first parameter
449
+ const destructuringParam = param?.getFirstDescendantByKind(ts_morph_1.SyntaxKind.ObjectBindingPattern);
450
+ if (destructuringParam) {
451
+ const elements = destructuringParam.getElements();
452
+ const userContextExists = elements.some((e) => e.getText().includes("userContext"));
453
+ if (!userContextExists) {
454
+ const updatedImport = destructuringParam
455
+ .getText()
456
+ .replace(/\s+/g, "") // Replace all whitespace
457
+ .replace(",}", "}") // Remove any trailing commas
458
+ .replace("}", ", userContext }");
459
+ destructuringParam.replaceWithText(updatedImport);
460
+ await fs_extra_1.default.writeFile(filePath, fileContent.replace(currentBlock, testNode.getText()), "utf-8");
461
+ }
462
+ }
463
+ }
464
+ }
465
+ exports.addUserContextFixture = addUserContextFixture;
466
+ async function appendScopeToCreateTest(filePath, scopeVariables) {
467
+ const contents = await fs_extra_1.default.readFile(filePath, "utf-8");
468
+ const project = new ts_morph_1.Project();
469
+ const sourceFile = project.createSourceFile("test.ts", contents);
470
+ const createTestNode = sourceFile
471
+ .getDescendantsOfKind(ts_morph_1.SyntaxKind.CallExpression)
472
+ .find((node) => {
473
+ const expression = node.getExpression();
474
+ return expression && expression.getText() === "createTest";
475
+ });
476
+ if (!createTestNode) {
477
+ throw new Error("No createTest call found in the file.");
478
+ }
479
+ const args = createTestNode.getArguments();
480
+ const scopeArgStr = `{ ${scopeVariables.join(", ")} }`;
481
+ createTestNode.insertArgument(args.length, scopeArgStr);
482
+ await fs_extra_1.default.writeFile(filePath, sourceFile.getFullText());
483
+ }
484
+ exports.appendScopeToCreateTest = appendScopeToCreateTest;
485
+ function isTestPresent({ specPath, testCase, }) {
486
+ let isTestPresent = true;
487
+ isTestPresent = fs_extra_1.default.existsSync(specPath);
488
+ if (isTestPresent) {
489
+ const { testBlock } = getTypescriptTestBlock({
490
+ suites: testCase.suites,
491
+ scenarioName: testCase.name,
492
+ content: fs_extra_1.default.readFileSync(specPath, "utf-8"),
493
+ });
494
+ isTestPresent = Boolean(testBlock);
495
+ }
496
+ return isTestPresent;
497
+ }
498
+ exports.isTestPresent = isTestPresent;
499
+ function buildTestNamePrompt({ testName, suites, }) {
500
+ return suites?.length
501
+ ? suites.reduce((text, suite) => {
502
+ text += `Describe block: ${suite} ----> `;
503
+ return text;
504
+ }, "") + testName
505
+ : testName;
506
+ }
507
+ exports.buildTestNamePrompt = buildTestNamePrompt;
508
+ function getVariableDeclarationsFromCode(sourceCode) {
509
+ const project = new ts_morph_1.Project();
510
+ const sourceFile = project.createSourceFile("temp.ts", sourceCode);
511
+ // Extract variable declarations
512
+ const variables = sourceFile.getDescendantsOfKind(ts_morph_1.SyntaxKind.VariableDeclaration);
513
+ // Function to extract individual variables from destructured declarations
514
+ function extractVariables(variable) {
515
+ const nameNode = variable.getNameNode();
516
+ if (nameNode.getKind() === ts_morph_1.SyntaxKind.ObjectBindingPattern) {
517
+ // For object destructuring
518
+ return nameNode.getElements().map((element) => element.getName());
519
+ }
520
+ else if (nameNode.getKind() === ts_morph_1.SyntaxKind.ArrayBindingPattern) {
521
+ // For array destructuring
522
+ return nameNode.getElements().map((element) => element.getText());
523
+ }
524
+ else {
525
+ // For regular variable declarations
526
+ return [variable.getName()];
527
+ }
528
+ }
529
+ // Collect all variable names
530
+ const allVariables = variables.flatMap((variable) => extractVariables(variable));
531
+ return allVariables;
532
+ }
533
+ exports.getVariableDeclarationsFromCode = getVariableDeclarationsFromCode;
534
+ function isSyntaxValid(code) {
535
+ let isSyntaxValid = true;
536
+ try {
537
+ (0, parser_1.parse)(code, { sourceType: "module", plugins: ["typescript"] }); // Attempt to parse the code
538
+ }
539
+ catch (error) {
540
+ isSyntaxValid = false;
541
+ }
542
+ return isSyntaxValid;
543
+ }
544
+ exports.isSyntaxValid = isSyntaxValid;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ts-path-import-validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ts-path-import-validate.d.ts","sourceRoot":"","sources":["../../../../../../src/bin/utils/platform/web/test-files/ts-path-import-validate.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const path_1 = __importDefault(require("path"));
7
+ console.log(path_1.default);
@@ -0,0 +1,6 @@
1
+ import type { TestGenConfig } from "@empiricalrun/shared-types";
2
+ import { CliOptions } from "../index";
3
+ export declare function buildTokenFromOptions(options: Omit<CliOptions, "token">): string;
4
+ export declare function buildTestConfigFromOptions(options: Omit<CliOptions, "token">): TestGenConfig;
5
+ export declare function loadTestConfigs(testGenToken: string): TestGenConfig;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bin/utils/scenarios/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,aAAa,EAEd,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAetC,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,GACjC,MAAM,CAgBR;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,GACjC,aAAa,CAaf;AAED,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CAmBnE"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadTestConfigs = exports.buildTestConfigFromOptions = exports.buildTokenFromOptions = void 0;
4
+ function buildTokenFromOptions(options) {
5
+ const genConfig = buildTestConfigFromOptions(options);
6
+ const requestConfig = {
7
+ specPath: genConfig.specPath,
8
+ id: genConfig.testCase.id,
9
+ name: genConfig.testCase.name,
10
+ steps: genConfig.testCase.steps,
11
+ filePath: genConfig.testCase.filePath,
12
+ suites: genConfig.testCase.suites,
13
+ ai_gist: genConfig.testCase.ai_gist,
14
+ build: genConfig.build,
15
+ options: genConfig.options,
16
+ environment: genConfig.environment,
17
+ testErrorDiagnosis: genConfig.testErrorDiagnosis,
18
+ };
19
+ return btoa(encodeURIComponent(JSON.stringify(requestConfig)));
20
+ }
21
+ exports.buildTokenFromOptions = buildTokenFromOptions;
22
+ function buildTestConfigFromOptions(options) {
23
+ return {
24
+ specPath: `./tests/${options.file}`,
25
+ testCase: {
26
+ id: 0,
27
+ name: options.name,
28
+ steps: [options.prompt],
29
+ filePath: options.file,
30
+ suites: options.suites
31
+ ? options.suites.split(",").map((s) => s.trim())
32
+ : [],
33
+ },
34
+ };
35
+ }
36
+ exports.buildTestConfigFromOptions = buildTestConfigFromOptions;
37
+ function loadTestConfigs(testGenToken) {
38
+ const str = decodeURIComponent(atob(testGenToken));
39
+ const config = JSON.parse(str);
40
+ const specPath = `./tests/${config.filePath || "index.spec.ts"}`;
41
+ return {
42
+ specPath,
43
+ testCase: {
44
+ id: config.id,
45
+ name: config.name,
46
+ steps: config.steps.filter((s) => !!s),
47
+ filePath: config.filePath,
48
+ suites: config.suites,
49
+ ai_gist: config.ai_gist,
50
+ },
51
+ testErrorDiagnosis: config.testErrorDiagnosis,
52
+ build: config.build,
53
+ options: config.options,
54
+ environment: config.environment,
55
+ };
56
+ }
57
+ exports.loadTestConfigs = loadTestConfigs;