@testspectra/cli 1.0.70 → 1.1.0-rc.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 (427) hide show
  1. package/LICENSE.md +48 -0
  2. package/README.md +36 -270
  3. package/bin/.testspectra-runner.hash +1 -0
  4. package/bin/spectra.js +1 -1
  5. package/bin/testspectra-runner +0 -0
  6. package/demo-app/assets/index-BhlW-eXG.css +1 -0
  7. package/demo-app/assets/index-DOtRypCa.js +154 -0
  8. package/demo-app/index.html +2 -2
  9. package/dist/.tsbuildinfo +1 -0
  10. package/dist/commands/__tests__/doctor.test.d.ts +1 -0
  11. package/dist/commands/__tests__/doctor.test.js +39 -0
  12. package/dist/commands/__tests__/init.test.d.ts +1 -0
  13. package/dist/commands/__tests__/init.test.js +148 -0
  14. package/dist/commands/__tests__/license.test.d.ts +1 -0
  15. package/dist/commands/__tests__/license.test.js +13 -0
  16. package/dist/commands/__tests__/refactor.test.d.ts +1 -0
  17. package/dist/commands/__tests__/refactor.test.js +64 -0
  18. package/dist/commands/__tests__/run-e2e.test.d.ts +1 -0
  19. package/dist/commands/__tests__/run-e2e.test.js +422 -0
  20. package/dist/commands/__tests__/run.test.d.ts +1 -0
  21. package/dist/commands/__tests__/run.test.js +273 -0
  22. package/dist/commands/__tests__/watch.test.d.ts +1 -0
  23. package/dist/commands/__tests__/watch.test.js +155 -0
  24. package/dist/commands/add.js +86 -85
  25. package/dist/commands/demo.js +21 -11
  26. package/dist/commands/devices.d.ts +14 -2
  27. package/dist/commands/devices.js +44 -34
  28. package/dist/commands/doctor.d.ts +3 -1
  29. package/dist/commands/doctor.js +43 -264
  30. package/dist/commands/init.d.ts +1 -1
  31. package/dist/commands/init.js +211 -196
  32. package/dist/commands/install.d.ts +4 -0
  33. package/dist/commands/install.js +59 -0
  34. package/dist/commands/license.d.ts +4 -0
  35. package/dist/commands/license.js +30 -0
  36. package/dist/commands/lint.d.ts +5 -0
  37. package/dist/commands/lint.js +55 -0
  38. package/dist/commands/refactor.d.ts +9 -0
  39. package/dist/commands/refactor.js +172 -0
  40. package/dist/commands/run.d.ts +23 -2
  41. package/dist/commands/run.js +322 -111
  42. package/dist/commands/skills.d.ts +9 -0
  43. package/dist/commands/skills.js +28 -0
  44. package/dist/commands/sync-types.d.ts +4 -0
  45. package/dist/commands/sync-types.js +15 -0
  46. package/dist/commands/test.d.ts +17 -0
  47. package/dist/commands/test.js +76 -0
  48. package/dist/commands/update.js +39 -43
  49. package/dist/commands/watch.d.ts +6 -0
  50. package/dist/commands/watch.js +55 -45
  51. package/dist/config/loader.d.ts +1 -1
  52. package/dist/config/loader.js +40 -25
  53. package/dist/config/schema.d.ts +104 -145
  54. package/dist/config/schema.js +36 -45
  55. package/dist/generator/__tests__/tsconfig-isolation.test.d.ts +1 -0
  56. package/dist/generator/__tests__/tsconfig-isolation.test.js +282 -0
  57. package/dist/generator/__tests__/type-generator.test.d.ts +1 -0
  58. package/dist/generator/__tests__/type-generator.test.js +386 -0
  59. package/dist/generator/index.d.ts +2 -0
  60. package/dist/generator/index.js +2 -0
  61. package/dist/generator/tsconfig-generator.d.ts +27 -0
  62. package/dist/generator/tsconfig-generator.js +419 -0
  63. package/dist/generator/type-generator.d.ts +59 -0
  64. package/dist/generator/type-generator.js +740 -0
  65. package/dist/index.d.ts +9 -5
  66. package/dist/index.js +165 -51
  67. package/dist/lifecycle/__tests__/lifecycle-engine.test.d.ts +1 -0
  68. package/dist/lifecycle/__tests__/lifecycle-engine.test.js +290 -0
  69. package/dist/lifecycle/hook-discovery.d.ts +24 -0
  70. package/dist/lifecycle/hook-discovery.js +60 -0
  71. package/dist/lifecycle/hook-dispatcher.d.ts +34 -0
  72. package/dist/lifecycle/hook-dispatcher.js +190 -0
  73. package/dist/lifecycle/index.d.ts +3 -0
  74. package/dist/lifecycle/index.js +3 -0
  75. package/dist/lifecycle/parallel-grouping.d.ts +27 -0
  76. package/dist/lifecycle/parallel-grouping.js +151 -0
  77. package/dist/linter/__tests__/anonymous-export.test.d.ts +1 -0
  78. package/dist/linter/__tests__/anonymous-export.test.js +184 -0
  79. package/dist/linter/__tests__/component-test-imports.test.d.ts +1 -0
  80. package/dist/linter/__tests__/component-test-imports.test.js +115 -0
  81. package/dist/linter/__tests__/shared-lib-boundary.test.d.ts +1 -0
  82. package/dist/linter/__tests__/shared-lib-boundary.test.js +270 -0
  83. package/dist/linter/__tests__/spec-schema.test.d.ts +1 -0
  84. package/dist/linter/__tests__/spec-schema.test.js +369 -0
  85. package/dist/linter/__tests__/step-parity.test.d.ts +1 -0
  86. package/dist/linter/__tests__/step-parity.test.js +372 -0
  87. package/dist/linter/discovery.d.ts +30 -0
  88. package/dist/linter/discovery.js +249 -0
  89. package/dist/linter/extractor.d.ts +67 -0
  90. package/dist/linter/extractor.js +245 -0
  91. package/dist/linter/index.d.ts +7 -0
  92. package/dist/linter/index.js +7 -0
  93. package/dist/linter/parser.d.ts +24 -0
  94. package/dist/linter/parser.js +219 -0
  95. package/dist/linter/schemas/spec.schema.d.ts +83 -0
  96. package/dist/linter/schemas/spec.schema.js +150 -0
  97. package/dist/linter/schemas/suite.schema.d.ts +59 -0
  98. package/dist/linter/schemas/suite.schema.js +83 -0
  99. package/dist/linter/spec-linter.d.ts +23 -0
  100. package/dist/linter/spec-linter.js +630 -0
  101. package/dist/linter/types.d.ts +28 -0
  102. package/dist/linter/types.js +1 -0
  103. package/dist/mobile/__tests__/android-device-e2e.test.d.ts +1 -0
  104. package/dist/mobile/__tests__/android-device-e2e.test.js +53 -0
  105. package/dist/mobile/__tests__/device-pool.test.d.ts +1 -0
  106. package/dist/mobile/__tests__/device-pool.test.js +97 -0
  107. package/dist/mobile/device-pool.d.ts +23 -0
  108. package/dist/mobile/device-pool.js +1 -0
  109. package/dist/mobile/index.d.ts +1 -0
  110. package/dist/mobile/index.js +1 -0
  111. package/dist/refactor/__tests__/refactor-engine.test.d.ts +1 -0
  112. package/dist/refactor/__tests__/refactor-engine.test.js +873 -0
  113. package/dist/refactor/index.d.ts +1 -0
  114. package/dist/refactor/index.js +1 -0
  115. package/dist/refactor/refactor-engine.d.ts +50 -0
  116. package/dist/refactor/refactor-engine.js +587 -0
  117. package/dist/reporter/__tests__/semantic-formatter.test.d.ts +1 -0
  118. package/dist/reporter/__tests__/semantic-formatter.test.js +73 -0
  119. package/dist/reporter/semantic-formatter.d.ts +6 -0
  120. package/dist/reporter/semantic-formatter.js +206 -0
  121. package/dist/reporter/summary-view.d.ts +12 -0
  122. package/dist/reporter/summary-view.js +19 -0
  123. package/dist/reporter/terminal-stream.d.ts +32 -0
  124. package/dist/reporter/terminal-stream.js +82 -0
  125. package/dist/reporter/types.d.ts +2 -0
  126. package/dist/reporter/types.js +1 -0
  127. package/dist/runner/bridge.d.ts +10 -5
  128. package/dist/runner/bridge.js +101 -45
  129. package/dist/runner/reporter.d.ts +32 -2
  130. package/dist/runner/reporter.js +427 -13
  131. package/dist/server/demo.js +43 -44
  132. package/dist/types/generator.d.ts +1 -17
  133. package/dist/types/generator.js +1 -443
  134. package/dist/utils/__tests__/api-server.test.d.ts +1 -0
  135. package/dist/utils/__tests__/api-server.test.js +62 -0
  136. package/dist/utils/__tests__/demo-server.test.d.ts +1 -0
  137. package/dist/utils/__tests__/demo-server.test.js +35 -0
  138. package/dist/utils/api-server.d.ts +19 -0
  139. package/dist/utils/api-server.js +179 -0
  140. package/dist/utils/demo-server.d.ts +5 -0
  141. package/dist/utils/demo-server.js +46 -36
  142. package/package.json +25 -13
  143. package/templates/default/CLAUDE.md +12 -5
  144. package/templates/default/fixtures/apiData.json +24 -0
  145. package/templates/default/package.json +12 -3
  146. package/templates/default/page-objects/AuthPage/mobile.ts +5 -0
  147. package/templates/default/page-objects/AuthPage/web.ts +10 -0
  148. package/templates/default/page-objects/MatchersPage/mobile.ts +66 -17
  149. package/templates/default/page-objects/MatchersPage/web.ts +22 -2
  150. package/templates/default/page-objects/NavigationPage/mobile.ts +11 -2
  151. package/templates/default/page-objects/NavigationPage/web.ts +1 -1
  152. package/templates/default/page-objects/PlaygroundPage/mobile.ts +34 -18
  153. package/templates/default/page-objects/PlaygroundPage/web.ts +4 -2
  154. package/templates/default/specs/ApiInterception/TC-0008-fetch-mocking/mobile.test.ts +53 -0
  155. package/templates/default/specs/ApiInterception/TC-0008-fetch-mocking/spec.md +19 -0
  156. package/templates/default/specs/ApiInterception/TC-0008-fetch-mocking/web.test.ts +31 -0
  157. package/templates/default/specs/ApiInterception/TC-0009-post-mocking/android.test.ts +3 -0
  158. package/templates/default/specs/ApiInterception/TC-0009-post-mocking/common.test.ts +3 -0
  159. package/templates/default/specs/ApiInterception/TC-0009-post-mocking/mobile.test.ts +27 -0
  160. package/templates/default/specs/ApiInterception/TC-0009-post-mocking/spec.md +19 -0
  161. package/templates/default/specs/ApiInterception/TC-0009-post-mocking/web.test.ts +26 -0
  162. package/templates/default/specs/ApiInterception/TC-0012-direct-and-late-response/common.test.ts +30 -0
  163. package/templates/default/specs/ApiInterception/TC-0012-direct-and-late-response/spec.md +22 -0
  164. package/templates/default/specs/ApiInterception/TC-0013-real-network-call-recorded/common.test.ts +27 -0
  165. package/templates/default/specs/ApiInterception/TC-0013-real-network-call-recorded/spec.md +20 -0
  166. package/templates/default/specs/ApiInterception/TC-0015-mock-server-sent-events/spec.md +24 -0
  167. package/templates/default/specs/ApiInterception/TC-0015-mock-server-sent-events/web.test.ts +26 -0
  168. package/templates/default/specs/ApiInterception/TC-0016-bypass-websocket-with-app-level-mock/spec.md +37 -0
  169. package/templates/default/specs/ApiInterception/TC-0016-bypass-websocket-with-app-level-mock/web.test.ts +21 -0
  170. package/templates/default/specs/ApiInterception/TC-0017-bypass-captcha-with-test-mode-flag/spec.md +29 -0
  171. package/templates/default/specs/ApiInterception/TC-0017-bypass-captcha-with-test-mode-flag/web.test.ts +16 -0
  172. package/templates/default/specs/ApiInterception/suite.md +10 -0
  173. package/templates/default/specs/ApiSeeding/TC-0014-seed-and-cleanup-via-hooks/common.test.ts +30 -0
  174. package/templates/default/specs/ApiSeeding/TC-0014-seed-and-cleanup-via-hooks/spec.md +23 -0
  175. package/templates/default/specs/ApiSeeding/hooks/after/common.hook.ts +16 -0
  176. package/templates/default/specs/ApiSeeding/hooks/before/common.hook.ts +28 -0
  177. package/templates/default/specs/ApiSeeding/suite.md +9 -0
  178. package/templates/default/specs/Authentication/TC-0021-seed-authenticated-session/mobile.test.ts +7 -0
  179. package/templates/default/specs/Authentication/TC-0021-seed-authenticated-session/spec.md +19 -0
  180. package/templates/default/specs/Authentication/TC-0021-seed-authenticated-session/web.test.ts +9 -0
  181. package/templates/default/specs/Authentication/suite.md +9 -0
  182. package/templates/default/specs/BrowserContext/TC-0007-title-and-navigation/mobile.test.ts +7 -1
  183. package/templates/default/specs/BrowserContext/TC-0007-title-and-navigation/spec.md +5 -0
  184. package/templates/default/specs/BrowserContext/TC-0007-title-and-navigation/web.test.ts +17 -3
  185. package/templates/default/specs/BrowserContext/TC-0022-history-navigation/mobile.test.ts +17 -0
  186. package/templates/default/specs/BrowserContext/TC-0022-history-navigation/spec.md +28 -0
  187. package/templates/default/specs/BrowserContext/TC-0022-history-navigation/web.test.ts +26 -0
  188. package/templates/default/specs/ContentMatchers/TC-0005-text-and-values/common.test.ts +26 -0
  189. package/templates/default/specs/ContentMatchers/TC-0005-text-and-values/spec.md +7 -0
  190. package/templates/default/specs/ContentMatchers/TC-0006-collections-and-empty/mobile.test.ts +9 -1
  191. package/templates/default/specs/ContentMatchers/TC-0006-collections-and-empty/spec.md +5 -0
  192. package/templates/default/specs/ContentMatchers/TC-0006-collections-and-empty/web.test.ts +9 -4
  193. package/templates/default/specs/ContentMatchers/TC-0020-scoped-element-access/common.test.ts +14 -0
  194. package/templates/default/specs/ContentMatchers/TC-0020-scoped-element-access/spec.md +21 -0
  195. package/templates/default/specs/DeepLink/TC-0018-navigate-via-deep-link/mobile.test.ts +28 -0
  196. package/templates/default/specs/DeepLink/TC-0018-navigate-via-deep-link/spec.md +29 -0
  197. package/templates/default/specs/DeepLink/suite.md +9 -0
  198. package/templates/default/specs/ElementMatchers/TC-0003-visibility-and-dom/mobile.test.ts +9 -1
  199. package/templates/default/specs/ElementMatchers/TC-0003-visibility-and-dom/spec.md +5 -0
  200. package/templates/default/specs/ElementMatchers/TC-0003-visibility-and-dom/web.test.ts +9 -3
  201. package/templates/default/specs/ElementMatchers/TC-0004-states-and-attributes/mobile.test.ts +27 -1
  202. package/templates/default/specs/ElementMatchers/TC-0004-states-and-attributes/spec.md +7 -0
  203. package/templates/default/specs/ElementMatchers/TC-0004-states-and-attributes/web.test.ts +27 -6
  204. package/templates/default/specs/ElementMatchers/suite.md +2 -1
  205. package/templates/default/specs/EnvironmentConfig/TC-0019-read-custom-environment-variable/common.test.ts +5 -0
  206. package/templates/default/specs/EnvironmentConfig/TC-0019-read-custom-environment-variable/spec.md +16 -0
  207. package/templates/default/specs/EnvironmentConfig/suite.md +9 -0
  208. package/templates/default/specs/PermissionRationale/TC-0010-camera-permission-allow/mobile.test.ts +26 -0
  209. package/templates/default/specs/PermissionRationale/TC-0010-camera-permission-allow/spec.md +22 -0
  210. package/templates/default/specs/PermissionRationale/TC-0011-camera-permission-deny/mobile.test.ts +13 -0
  211. package/templates/default/specs/PermissionRationale/TC-0011-camera-permission-deny/spec.md +20 -0
  212. package/templates/default/specs/PermissionRationale/suite.md +9 -0
  213. package/templates/default/specs/Playground/TC-0001-form-controls/mobile.test.ts +4 -1
  214. package/templates/default/specs/Playground/TC-0001-form-controls/spec.md +6 -0
  215. package/templates/default/specs/Playground/TC-0001-form-controls/web.test.ts +4 -4
  216. package/templates/default/specs/Playground/TC-0002-toggle-elements/mobile.test.ts +4 -1
  217. package/templates/default/specs/Playground/TC-0002-toggle-elements/spec.md +6 -0
  218. package/templates/default/specs/Playground/TC-0002-toggle-elements/web.test.ts +3 -3
  219. package/templates/default/spectra.config.ts +22 -31
  220. package/templates/default/support/actions/fillCredentials/mobile.action.ts +3 -3
  221. package/templates/default/support/actions/fillCredentials/web.action.ts +1 -1
  222. package/templates/default/support/actions/seedSession/mobile.action.ts +9 -0
  223. package/templates/default/support/actions/seedSession/web.action.ts +13 -0
  224. package/templates/default/support/steps/togglePlaygroundStates/mobile.step.ts +3 -1
  225. package/templates/default/support/steps/togglePlaygroundStates/web.step.ts +3 -3
  226. package/templates/default/support/steps/verifyPlaygroundState/mobile.step.ts +4 -2
  227. package/templates/default/support/steps/verifyPlaygroundState/web.step.ts +4 -4
  228. package/templates/default/tsconfig.json +3 -1
  229. package/templates/nx/.nx/workspace-data/70094CFD-E89B-57A1-9619-2FC5F4963C54.db +0 -0
  230. package/templates/nx/.nx/workspace-data/70094CFD-E89B-57A1-9619-2FC5F4963C54.db-shm +0 -0
  231. package/templates/nx/.nx/workspace-data/70094CFD-E89B-57A1-9619-2FC5F4963C54.db-wal +0 -0
  232. package/templates/nx/.nx/workspace-data/d/daemon.log +5366 -0
  233. package/templates/nx/.nx/workspace-data/d/server-process.json +3 -0
  234. package/templates/nx/.nx/workspace-data/file-map.json +464 -0
  235. package/templates/nx/.nx/workspace-data/lockfile.hash +1 -0
  236. package/templates/nx/.nx/workspace-data/nx_files.nxt +0 -0
  237. package/templates/nx/.nx/workspace-data/parsed-lock-file.json +13485 -0
  238. package/templates/nx/.nx/workspace-data/project-graph.json +14389 -0
  239. package/templates/nx/CLAUDE.md +2 -2
  240. package/templates/nx/package.json +6 -4
  241. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0008-fetch-mocking/mobile.test.ts +27 -0
  242. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0008-fetch-mocking/spec.md +12 -0
  243. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0008-fetch-mocking/web.test.ts +27 -0
  244. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0009-post-mocking/mobile.test.ts +24 -0
  245. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0009-post-mocking/spec.md +12 -0
  246. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0009-post-mocking/web.test.ts +24 -0
  247. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/suite.md +9 -0
  248. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/TC-0007-title-and-navigation/mobile.test.ts +1 -1
  249. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/TC-0007-title-and-navigation/web.test.ts +17 -3
  250. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0005-text-and-values/mobile.test.ts +1 -1
  251. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0005-text-and-values/web.test.ts +15 -5
  252. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0006-collections-and-empty/mobile.test.ts +1 -1
  253. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0006-collections-and-empty/web.test.ts +9 -4
  254. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0003-visibility-and-dom/mobile.test.ts +1 -1
  255. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0003-visibility-and-dom/web.test.ts +9 -3
  256. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0004-states-and-attributes/mobile.test.ts +1 -1
  257. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0004-states-and-attributes/web.test.ts +27 -6
  258. package/templates/nx/packages/matchers/e2e/specs/EnvironmentConfig/TC-0019-read-custom-environment-variable/common.test.ts +5 -0
  259. package/templates/nx/packages/matchers/e2e/specs/EnvironmentConfig/TC-0019-read-custom-environment-variable/spec.md +16 -0
  260. package/templates/nx/packages/matchers/e2e/specs/EnvironmentConfig/suite.md +9 -0
  261. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0001-form-controls/mobile.test.ts +1 -1
  262. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0001-form-controls/web.test.ts +4 -4
  263. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0002-toggle-elements/mobile.test.ts +1 -1
  264. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0002-toggle-elements/web.test.ts +3 -3
  265. package/templates/nx/pnpm-lock.yaml +6663 -0
  266. package/templates/nx/pnpm-workspace.yaml +2 -1
  267. package/templates/nx/shared/testing/fixtures/apiData.json +24 -0
  268. package/templates/nx/shared/testing/page-objects/MatchersPage/mobile.ts +13 -1
  269. package/templates/nx/shared/testing/page-objects/MatchersPage/web.ts +85 -17
  270. package/templates/nx/shared/testing/page-objects/NavigationPage/mobile.ts +1 -1
  271. package/templates/nx/shared/testing/page-objects/NavigationPage/web.ts +1 -1
  272. package/templates/nx/shared/testing/page-objects/PlaygroundPage/mobile.ts +1 -1
  273. package/templates/nx/shared/testing/page-objects/PlaygroundPage/web.ts +4 -2
  274. package/templates/nx/shared/testing/project.json +19 -0
  275. package/templates/nx/shared/testing/support/actions/fillCredentials/mobile.action.ts +1 -1
  276. package/templates/nx/shared/testing/support/actions/fillCredentials/web.action.ts +1 -1
  277. package/templates/nx/shared/testing/support/steps/togglePlaygroundStates/mobile.step.ts +1 -1
  278. package/templates/nx/shared/testing/support/steps/togglePlaygroundStates/web.step.ts +3 -3
  279. package/templates/nx/shared/testing/support/steps/verifyPlaygroundState/mobile.step.ts +2 -2
  280. package/templates/nx/shared/testing/support/steps/verifyPlaygroundState/web.step.ts +4 -4
  281. package/templates/nx/spectra.config.ts +20 -29
  282. package/templates/nx/tsconfig.json +3 -1
  283. package/templates/react-component/.cursorrules +17 -0
  284. package/templates/react-component/.vscode/extensions.json +5 -0
  285. package/templates/react-component/CLAUDE.md +14 -0
  286. package/templates/react-component/README.md +69 -0
  287. package/templates/react-component/fixtures/component-mock.json +12 -0
  288. package/templates/react-component/global-hooks/after/web.hook.ts +3 -0
  289. package/templates/react-component/global-hooks/before/web.hook.ts +3 -0
  290. package/templates/react-component/package.json +27 -0
  291. package/templates/react-component/page-objects/BadgeComponent/web.ts +23 -0
  292. package/templates/react-component/page-objects/ButtonComponent/web.ts +23 -0
  293. package/templates/react-component/page-objects/InputComponent/web.ts +13 -0
  294. package/templates/react-component/specs/BadgeComponent/TC-0002-badge-severities-and-dot/spec.md +18 -0
  295. package/templates/react-component/specs/BadgeComponent/TC-0002-badge-severities-and-dot/web.test.tsx +11 -0
  296. package/templates/react-component/specs/BadgeComponent/TC-0006-badge-success-with-dot/spec.md +18 -0
  297. package/templates/react-component/specs/BadgeComponent/TC-0006-badge-success-with-dot/web.test.tsx +10 -0
  298. package/templates/react-component/specs/BadgeComponent/TC-0007-badge-by-severity-lookup/spec.md +18 -0
  299. package/templates/react-component/specs/BadgeComponent/TC-0007-badge-by-severity-lookup/web.test.tsx +16 -0
  300. package/templates/react-component/specs/BadgeComponent/suite.md +12 -0
  301. package/templates/react-component/specs/ButtonComponent/TC-0001-button-rendering-and-click/spec.md +19 -0
  302. package/templates/react-component/specs/ButtonComponent/TC-0001-button-rendering-and-click/web.test.tsx +28 -0
  303. package/templates/react-component/specs/ButtonComponent/TC-0004-disabled-button-not-clickable/spec.md +19 -0
  304. package/templates/react-component/specs/ButtonComponent/TC-0004-disabled-button-not-clickable/web.test.tsx +22 -0
  305. package/templates/react-component/specs/ButtonComponent/TC-0005-button-renders-icon/spec.md +18 -0
  306. package/templates/react-component/specs/ButtonComponent/TC-0005-button-renders-icon/web.test.tsx +8 -0
  307. package/templates/react-component/specs/ButtonComponent/suite.md +12 -0
  308. package/templates/react-component/specs/InputComponent/TC-0003-input-typing-and-clear/spec.md +20 -0
  309. package/templates/react-component/specs/InputComponent/TC-0003-input-typing-and-clear/web.test.tsx +28 -0
  310. package/templates/react-component/specs/InputComponent/TC-0008-disabled-input-not-editable/spec.md +18 -0
  311. package/templates/react-component/specs/InputComponent/TC-0008-disabled-input-not-editable/web.test.tsx +9 -0
  312. package/templates/react-component/specs/InputComponent/suite.md +12 -0
  313. package/templates/react-component/spectra.config.ts +27 -0
  314. package/templates/react-component/src/components/Badge/Badge.tsx +60 -0
  315. package/templates/react-component/src/components/Button/Button.tsx +57 -0
  316. package/templates/react-component/src/components/Input/Input.tsx +41 -0
  317. package/templates/react-component/src/test-utils.tsx +23 -0
  318. package/templates/react-component/support/actions/fillInputField/web.action.ts +9 -0
  319. package/templates/react-component/support/steps/verifyButtonState/web.step.ts +12 -0
  320. package/templates/react-component/tsconfig.json +8 -0
  321. package/demo-app/assets/index-DAUlrHTr.css +0 -1
  322. package/demo-app/assets/index-DN2Kb0A8.js +0 -100
  323. package/dist/index.cjs +0 -101
  324. package/dist/plugin.cjs +0 -575
  325. package/dist/plugin.d.ts +0 -16
  326. package/dist/plugin.js +0 -184
  327. package/dist/step/index.d.ts +0 -6
  328. package/dist/step/index.js +0 -6
  329. package/dist/step/matchers.d.ts +0 -14
  330. package/dist/step/matchers.js +0 -114
  331. package/dist/step/proto.d.ts +0 -46
  332. package/dist/step/proto.js +0 -114
  333. package/dist/step/runner/collection.d.ts +0 -13
  334. package/dist/step/runner/collection.js +0 -51
  335. package/dist/step/runner/single.d.ts +0 -21
  336. package/dist/step/runner/single.js +0 -138
  337. package/dist/step/spectra.d.ts +0 -34
  338. package/dist/step/spectra.js +0 -156
  339. package/dist/step/types.d.ts +0 -32
  340. package/dist/step/types.js +0 -5
  341. package/templates/default/specs/ContentMatchers/TC-0005-text-and-values/mobile.test.ts +0 -3
  342. package/templates/default/specs/ContentMatchers/TC-0005-text-and-values/web.test.ts +0 -7
  343. package/templates/default/tsconfig.spectra.android.json +0 -46
  344. package/templates/default/tsconfig.spectra.ios.json +0 -46
  345. package/templates/default/tsconfig.spectra.json +0 -22
  346. package/templates/default/tsconfig.spectra.web.json +0 -53
  347. package/templates/nx/fixtures/playgroundData.json +0 -7
  348. package/templates/nx/global-hooks/after/mobile.hook.ts +0 -3
  349. package/templates/nx/global-hooks/after/web.hook.ts +0 -3
  350. package/templates/nx/global-hooks/before/mobile.hook.ts +0 -3
  351. package/templates/nx/global-hooks/before/web.hook.ts +0 -3
  352. package/templates/nx/page-objects/MatchersPage/mobile.ts +0 -21
  353. package/templates/nx/page-objects/MatchersPage/web.ts +0 -23
  354. package/templates/nx/page-objects/NavigationPage/mobile.ts +0 -5
  355. package/templates/nx/page-objects/NavigationPage/web.ts +0 -8
  356. package/templates/nx/page-objects/PlaygroundPage/mobile.ts +0 -26
  357. package/templates/nx/page-objects/PlaygroundPage/web.ts +0 -29
  358. package/templates/nx/specs/BrowserContext/TC-0007-title-and-navigation/mobile.test.ts +0 -3
  359. package/templates/nx/specs/BrowserContext/TC-0007-title-and-navigation/spec.md +0 -12
  360. package/templates/nx/specs/BrowserContext/TC-0007-title-and-navigation/web.test.ts +0 -5
  361. package/templates/nx/specs/BrowserContext/suite.md +0 -9
  362. package/templates/nx/specs/ContentMatchers/TC-0005-text-and-values/mobile.test.ts +0 -3
  363. package/templates/nx/specs/ContentMatchers/TC-0005-text-and-values/spec.md +0 -12
  364. package/templates/nx/specs/ContentMatchers/TC-0005-text-and-values/web.test.ts +0 -7
  365. package/templates/nx/specs/ContentMatchers/TC-0006-collections-and-empty/mobile.test.ts +0 -3
  366. package/templates/nx/specs/ContentMatchers/TC-0006-collections-and-empty/spec.md +0 -12
  367. package/templates/nx/specs/ContentMatchers/TC-0006-collections-and-empty/web.test.ts +0 -6
  368. package/templates/nx/specs/ContentMatchers/suite.md +0 -9
  369. package/templates/nx/specs/ElementMatchers/TC-0003-visibility-and-dom/mobile.test.ts +0 -3
  370. package/templates/nx/specs/ElementMatchers/TC-0003-visibility-and-dom/spec.md +0 -12
  371. package/templates/nx/specs/ElementMatchers/TC-0003-visibility-and-dom/web.test.ts +0 -5
  372. package/templates/nx/specs/ElementMatchers/TC-0004-states-and-attributes/mobile.test.ts +0 -3
  373. package/templates/nx/specs/ElementMatchers/TC-0004-states-and-attributes/spec.md +0 -12
  374. package/templates/nx/specs/ElementMatchers/TC-0004-states-and-attributes/web.test.ts +0 -8
  375. package/templates/nx/specs/ElementMatchers/hooks/after/mobile.hook.ts +0 -1
  376. package/templates/nx/specs/ElementMatchers/hooks/after/web.hook.ts +0 -1
  377. package/templates/nx/specs/ElementMatchers/hooks/afterEach/mobile.hook.ts +0 -1
  378. package/templates/nx/specs/ElementMatchers/hooks/afterEach/web.hook.ts +0 -1
  379. package/templates/nx/specs/ElementMatchers/hooks/before/mobile.hook.ts +0 -1
  380. package/templates/nx/specs/ElementMatchers/hooks/before/web.hook.ts +0 -1
  381. package/templates/nx/specs/ElementMatchers/hooks/beforeEach/mobile.hook.ts +0 -1
  382. package/templates/nx/specs/ElementMatchers/hooks/beforeEach/web.hook.ts +0 -1
  383. package/templates/nx/specs/ElementMatchers/suite.md +0 -9
  384. package/templates/nx/specs/Playground/TC-0001-form-controls/mobile.test.ts +0 -3
  385. package/templates/nx/specs/Playground/TC-0001-form-controls/spec.md +0 -12
  386. package/templates/nx/specs/Playground/TC-0001-form-controls/web.test.ts +0 -6
  387. package/templates/nx/specs/Playground/TC-0002-toggle-elements/mobile.test.ts +0 -3
  388. package/templates/nx/specs/Playground/TC-0002-toggle-elements/spec.md +0 -12
  389. package/templates/nx/specs/Playground/TC-0002-toggle-elements/web.test.ts +0 -6
  390. package/templates/nx/specs/Playground/hooks/after/mobile.hook.ts +0 -1
  391. package/templates/nx/specs/Playground/hooks/after/web.hook.ts +0 -1
  392. package/templates/nx/specs/Playground/hooks/afterEach/mobile.hook.ts +0 -1
  393. package/templates/nx/specs/Playground/hooks/afterEach/web.hook.ts +0 -1
  394. package/templates/nx/specs/Playground/hooks/before/mobile.hook.ts +0 -1
  395. package/templates/nx/specs/Playground/hooks/before/web.hook.ts +0 -1
  396. package/templates/nx/specs/Playground/hooks/beforeEach/mobile.hook.ts +0 -1
  397. package/templates/nx/specs/Playground/hooks/beforeEach/web.hook.ts +0 -1
  398. package/templates/nx/specs/Playground/suite.md +0 -9
  399. package/templates/nx/support/actions/fillCredentials/mobile.action.ts +0 -4
  400. package/templates/nx/support/actions/fillCredentials/web.action.ts +0 -4
  401. package/templates/nx/support/steps/togglePlaygroundStates/mobile.step.ts +0 -3
  402. package/templates/nx/support/steps/togglePlaygroundStates/step.md +0 -7
  403. package/templates/nx/support/steps/togglePlaygroundStates/web.step.ts +0 -5
  404. package/templates/nx/support/steps/verifyPlaygroundState/mobile.step.ts +0 -4
  405. package/templates/nx/support/steps/verifyPlaygroundState/step.md +0 -7
  406. package/templates/nx/support/steps/verifyPlaygroundState/web.step.ts +0 -6
  407. package/templates/nx/tsconfig.spectra.android.json +0 -39
  408. package/templates/nx/tsconfig.spectra.ios.json +0 -39
  409. package/templates/nx/tsconfig.spectra.json +0 -25
  410. package/templates/nx/tsconfig.spectra.shared.json +0 -25
  411. package/templates/nx/tsconfig.spectra.web.json +0 -45
  412. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/after/mobile.hook.ts +0 -0
  413. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/after/web.hook.ts +0 -0
  414. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/afterEach/mobile.hook.ts +0 -0
  415. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/afterEach/web.hook.ts +0 -0
  416. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/before/mobile.hook.ts +0 -0
  417. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/before/web.hook.ts +0 -0
  418. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/beforeEach/mobile.hook.ts +0 -0
  419. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/beforeEach/web.hook.ts +0 -0
  420. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/after/mobile.hook.ts +0 -0
  421. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/after/web.hook.ts +0 -0
  422. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/afterEach/mobile.hook.ts +0 -0
  423. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/afterEach/web.hook.ts +0 -0
  424. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/before/mobile.hook.ts +0 -0
  425. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/before/web.hook.ts +0 -0
  426. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/beforeEach/mobile.hook.ts +0 -0
  427. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/beforeEach/web.hook.ts +0 -0
@@ -9,97 +9,106 @@ export interface WebConfig {
9
9
  baseUrl: string;
10
10
  /**
11
11
  * Maximum number of parallel browser sessions/workers spawned during test execution.
12
- * @default "1"
12
+ * Can be an explicit number, numeric string, or `"auto"`.
13
+ * @default "auto"
13
14
  */
14
- maxConcurrentSessions: string;
15
+ maxConcurrentSessions: number | string | 'auto';
15
16
  /**
16
17
  * Whether to run browsers in headless mode without a visible GUI window.
17
18
  * @default true
18
19
  */
19
- headlessMode: boolean;
20
+ headless: boolean | 'new';
20
21
  /**
21
22
  * Implicit wait timeout (in milliseconds) for finding elements before throwing an error.
23
+ * Also the ceiling auto-waiting element assertions/actions poll against (capped at 2000ms for
24
+ * assertions — see `getAssertionTimeoutMs()`).
22
25
  * @default "5000"
23
26
  */
24
27
  implicitWait: string;
25
28
  /**
26
- * Maximum time (in milliseconds) allowed for a webpage to complete navigation and initial load.
27
- * @default "30000"
28
- */
29
- pageLoadTimeout: string;
30
- /**
31
- * Maximum time (in milliseconds) allowed for asynchronous scripts to finish executing.
32
- * @default "30000"
29
+ * Delay between consecutive actions and commands in milliseconds (slow motion).
30
+ * @default 0
33
31
  */
34
- scriptTimeout: string;
32
+ stepDelay?: number;
35
33
  /**
36
34
  * Parallelization granularity:
37
35
  * - `"testcase"`: Each test case executes in parallel across available workers.
38
36
  * - `"suite"`: Test cases within a suite run serially, while different suites run in parallel.
39
37
  * @default "testcase"
40
38
  */
41
- parallelizationMode: "testcase" | "suite";
39
+ parallelizationMode: 'testcase' | 'suite';
42
40
  }
43
41
  /**
44
- * Browser target definition for web test execution.
42
+ * Target Android device specification for multi-device parallel execution.
45
43
  */
46
- export interface Browser {
44
+ export interface AndroidDeviceTarget {
47
45
  /**
48
- * Unique identifier for this browser configuration.
46
+ * ADB serial or device ID (e.g. "emulator-5554", "192.168.1.50:5555").
49
47
  */
50
48
  id: string;
51
49
  /**
52
- * Browser type/engine: `"chrome"`, `"firefox"`, `"safari"`, `"edge"`.
53
- * @default "chrome"
50
+ * Emulator AVD name (e.g. "Pixel_7_Pro_API_34").
54
51
  */
55
- type: string;
52
+ avd?: string;
56
53
  /**
57
- * Whether to simulate mobile viewport and touch metrics.
58
- * @default false
54
+ * Friendly display/model name (e.g. "Pixel 7 Pro").
59
55
  */
60
- mobileEmulation: boolean;
56
+ name?: string;
61
57
  /**
62
- * Emulated device name when `mobileEmulation` is true (e.g. `"iPhone 14"`, `"Pixel 7"`).
58
+ * Android OS version (e.g. "14.0").
63
59
  */
64
- deviceName?: string;
60
+ version?: string;
65
61
  /**
66
- * Custom browser window width in pixels.
62
+ * UiAutomator2 port (e.g. 8200).
67
63
  */
68
- width?: string;
64
+ systemPort?: number;
69
65
  /**
70
- * Custom browser window height in pixels.
66
+ * Custom Appium capabilities overrides for this specific device.
71
67
  */
72
- height?: string;
68
+ capabilities?: Record<string, any>;
73
69
  }
74
70
  /**
75
- * Configuration for Android mobile test automation with Appium & UiAutomator2.
71
+ * Target iOS device specification for multi-device parallel execution.
76
72
  */
77
- export interface AndroidConfig {
73
+ export interface IosDeviceTarget {
78
74
  /**
79
- * Appium server endpoint URL.
80
- * @default "http://127.0.0.1:4723"
75
+ * Device ID or simulator slug (e.g. "iphone-15-pro").
81
76
  */
82
- appiumServer: string;
77
+ id: string;
83
78
  /**
84
- * Mobile platform name.
85
- * @default "Android"
79
+ * Friendly name (e.g. "iPhone 15 Pro Simulator").
86
80
  */
87
- platformName: string;
81
+ name?: string;
88
82
  /**
89
- * Android OS version (e.g. `"13"`, `"14"`).
90
- * @default "13"
83
+ * iOS version (e.g. "17.0").
91
84
  */
92
- platformVersion: string;
85
+ version?: string;
93
86
  /**
94
- * Target Android device name or ADB serial ID (e.g. `"emulator-5554"`).
95
- * @default "emulator-5554"
87
+ * Physical device UDID or "auto".
96
88
  */
97
- deviceName: string;
89
+ udid?: string;
98
90
  /**
99
- * Appium mobile automation driver engine.
100
- * @default "UiAutomator2"
91
+ * WebDriverAgent local port (e.g. 8100).
101
92
  */
102
- automationName: string;
93
+ wdaLocalPort?: number;
94
+ /**
95
+ * Custom Appium capabilities overrides for this specific device.
96
+ */
97
+ capabilities?: Record<string, any>;
98
+ }
99
+ /**
100
+ * Configuration for Android mobile test automation with Spectra Android Native Driver.
101
+ */
102
+ export interface AndroidConfig {
103
+ /**
104
+ * Spectra Android Driver server endpoint URL.
105
+ * @default "tcp://127.0.0.1:8200"
106
+ */
107
+ driverServer?: string;
108
+ /**
109
+ * Legacy Appium server endpoint URL (fallback, deprecated — use `driverServer`).
110
+ */
111
+ appiumServer?: string;
103
112
  /**
104
113
  * Android application package name (e.g. `"com.example.app"`).
105
114
  */
@@ -108,11 +117,6 @@ export interface AndroidConfig {
108
117
  * Main activity name launched when starting the app.
109
118
  */
110
119
  appActivity: string;
111
- /**
112
- * Whether to automatically grant Android runtime permissions upon installation.
113
- * @default true
114
- */
115
- autoGrantPermissions: boolean;
116
120
  /**
117
121
  * Whether to preserve app state and prevent clearing app data/cache between sessions.
118
122
  * @default false
@@ -120,39 +124,47 @@ export interface AndroidConfig {
120
124
  noReset: boolean;
121
125
  /**
122
126
  * Implicit wait timeout (in milliseconds) for locating mobile elements.
123
- * @default "10000"
127
+ * @default 10000
124
128
  */
125
- implicitWait: string;
129
+ implicitWait: string | number;
126
130
  /**
127
131
  * Parallelization execution mode for Android mobile tests.
128
132
  * @default "suite"
129
133
  */
130
- parallelizationMode: "testcase" | "suite";
134
+ parallelizationMode: 'testcase' | 'suite';
135
+ /**
136
+ * Array of explicit target devices or configurations for multi-device parallel execution.
137
+ * Each entry can specify its own `id`, `name`, `version`, `avd`, `systemPort`, etc.
138
+ */
139
+ devices: (string | AndroidDeviceTarget)[] | 'auto';
140
+ /**
141
+ * Raw custom WebdriverIO / Appium capabilities array override.
142
+ */
143
+ capabilities?: Record<string, any>[];
144
+ /**
145
+ * Maximum concurrent mobile sessions/devices cap.
146
+ */
147
+ maxConcurrentSessions?: number | string;
148
+ /**
149
+ * Delay between consecutive actions and commands in milliseconds (slow motion).
150
+ * @default 0
151
+ */
152
+ stepDelay?: number;
131
153
  }
132
154
  /**
133
155
  * Configuration for iOS mobile test automation with Appium & XCUITest.
134
156
  */
135
157
  export interface IosConfig {
158
+ /**
159
+ * Delay between consecutive actions and commands in milliseconds (slow motion).
160
+ * @default 0
161
+ */
162
+ stepDelay?: number;
136
163
  /**
137
164
  * Appium server endpoint URL.
138
165
  * @default "http://127.0.0.1:4723"
139
166
  */
140
167
  appiumServer: string;
141
- /**
142
- * Mobile platform name.
143
- * @default "iOS"
144
- */
145
- platformName: string;
146
- /**
147
- * iOS version (e.g. `"16.0"`, `"17.0"`).
148
- * @default "16.0"
149
- */
150
- platformVersion: string;
151
- /**
152
- * iOS simulator or connected physical device name (e.g. `"iPhone 14"`).
153
- * @default "iPhone 14"
154
- */
155
- deviceName: string;
156
168
  /**
157
169
  * Appium mobile automation driver engine for iOS.
158
170
  * @default "XCUITest"
@@ -166,16 +178,28 @@ export interface IosConfig {
166
178
  * Target device Unique Device Identifier (UDID) or `"auto"`.
167
179
  * @default "auto"
168
180
  */
169
- udid: string;
181
+ udid?: string;
182
+ /**
183
+ * Array of explicit target devices or configurations for multi-device execution.
184
+ */
185
+ devices: (string | IosDeviceTarget)[] | 'auto';
186
+ /**
187
+ * Raw custom WebdriverIO / Appium capabilities array override.
188
+ */
189
+ capabilities?: Record<string, any>[];
190
+ /**
191
+ * Maximum concurrent mobile sessions/devices cap.
192
+ */
193
+ maxConcurrentSessions?: number | string;
170
194
  /**
171
195
  * Apple Developer Team 10-character Organization ID for code signing.
172
196
  */
173
- xcodeOrgId: string;
197
+ xcodeOrgId?: string;
174
198
  /**
175
199
  * Xcode code signing identity string (e.g. `"iPhone Developer"`).
176
200
  * @default "iPhone Developer"
177
201
  */
178
- xcodeSigningId: string;
202
+ xcodeSigningId?: string;
179
203
  /**
180
204
  * Whether to automatically accept iOS system permission alerts.
181
205
  * @default true
@@ -188,48 +212,14 @@ export interface IosConfig {
188
212
  noReset: boolean;
189
213
  /**
190
214
  * Implicit wait timeout (in milliseconds) for locating iOS UI elements.
191
- * @default "10000"
215
+ * @default 10000
192
216
  */
193
- implicitWait: string;
217
+ implicitWait: string | number;
194
218
  /**
195
219
  * Parallelization execution mode for iOS mobile tests.
196
220
  * @default "suite"
197
221
  */
198
- parallelizationMode: "testcase" | "suite";
199
- }
200
- /**
201
- * Load testing stage ramp-up profile.
202
- */
203
- export interface LoadStage {
204
- /**
205
- * Stage identifier.
206
- */
207
- id: string;
208
- /**
209
- * Duration for this load stage (e.g. `"30s"`, `"2m"`).
210
- */
211
- duration: string;
212
- /**
213
- * Target virtual users (VUs) to scale to during this stage.
214
- */
215
- targetVUs: string;
216
- }
217
- /**
218
- * Performance and pass/fail metric threshold definition.
219
- */
220
- export interface SuccessThreshold {
221
- /**
222
- * Unique threshold identifier.
223
- */
224
- id: string;
225
- /**
226
- * Performance metric type (e.g. `"http_req_duration"`, `"http_req_failed"`).
227
- */
228
- metricType: string;
229
- /**
230
- * Maximum acceptable value (e.g. `"500ms"`, `"0.01"`).
231
- */
232
- maxValue: string;
222
+ parallelizationMode: 'testcase' | 'suite';
233
223
  }
234
224
  /**
235
225
  * Specific domain filter for real-time network interception and recording.
@@ -244,19 +234,6 @@ export interface MonitoredDomain {
244
234
  */
245
235
  enabled: boolean;
246
236
  }
247
- /**
248
- * Custom environment variable key-value pair injected into the test execution sandbox.
249
- */
250
- export interface EnvironmentVariable {
251
- /**
252
- * Environment variable name (e.g. `"API_SECRET_KEY"`).
253
- */
254
- key: string;
255
- /**
256
- * Environment variable value.
257
- */
258
- value: string;
259
- }
260
237
  /**
261
238
  * Test execution, CDP network monitoring, and sandbox environment configuration.
262
239
  */
@@ -281,9 +258,10 @@ export interface ExecutionConfig {
281
258
  */
282
259
  monitoredDomains?: MonitoredDomain[];
283
260
  /**
284
- * Custom environment variables injected into the test process runtime.
261
+ * Custom environment variables injected into the test process runtime
262
+ * (e.g. `{ API_SECRET_KEY: "..." }`).
285
263
  */
286
- environmentVariables?: EnvironmentVariable[];
264
+ environmentVariables?: Record<string, string>;
287
265
  }
288
266
  /**
289
267
  * Root configuration data structure matching TestSpectra project schema.
@@ -293,10 +271,6 @@ export interface ConfigData {
293
271
  * Web browser execution settings.
294
272
  */
295
273
  webConfig: WebConfig;
296
- /**
297
- * List of target browsers for web automation runs.
298
- */
299
- browsers: Browser[];
300
274
  /**
301
275
  * Android Appium driver and device options.
302
276
  */
@@ -305,21 +279,6 @@ export interface ConfigData {
305
279
  * iOS Appium driver and device options.
306
280
  */
307
281
  iosConfig: IosConfig;
308
- /**
309
- * Load testing parameters.
310
- */
311
- loadConfig: {
312
- virtualUsers: string;
313
- duration: string;
314
- };
315
- /**
316
- * Load testing stages.
317
- */
318
- loadStages: LoadStage[];
319
- /**
320
- * Pass/fail metric thresholds.
321
- */
322
- thresholds: SuccessThreshold[];
323
282
  /**
324
283
  * Advanced execution and network recording settings.
325
284
  */
@@ -328,9 +287,9 @@ export interface ConfigData {
328
287
  /**
329
288
  * Deep recursive partial type for user-friendly configuration objects.
330
289
  */
331
- export type DeepPartial<T> = {
332
- [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
333
- };
290
+ export type DeepPartial<T> = T extends Function | boolean | number | string | symbol | null | undefined ? T : T extends Array<infer U> ? DeepPartial<U>[] : T extends ReadonlyArray<infer U> ? readonly DeepPartial<U>[] : T extends object ? {
291
+ [K in keyof T]?: DeepPartial<T[K]>;
292
+ } : T;
334
293
  /**
335
294
  * User-provided configuration options with optional deep partial properties.
336
295
  */
@@ -345,7 +304,7 @@ export type UserConfig = DeepPartial<ConfigData>;
345
304
  * export default defineConfig({
346
305
  * webConfig: {
347
306
  * baseUrl: "https://example.com",
348
- * headlessMode: false,
307
+ * headless: false,
349
308
  * },
350
309
  * });
351
310
  * ```
@@ -8,7 +8,7 @@
8
8
  * export default defineConfig({
9
9
  * webConfig: {
10
10
  * baseUrl: "https://example.com",
11
- * headlessMode: false,
11
+ * headless: false,
12
12
  * },
13
13
  * });
14
14
  * ```
@@ -21,60 +21,51 @@ export function defineConfig(config) {
21
21
  */
22
22
  export const DEFAULT_CONFIG_DATA = {
23
23
  webConfig: {
24
- baseUrl: "http://localhost:3000",
25
- maxConcurrentSessions: "1",
26
- headlessMode: true,
27
- implicitWait: "5000",
28
- pageLoadTimeout: "30000",
29
- scriptTimeout: "30000",
30
- parallelizationMode: "testcase",
24
+ baseUrl: 'http://localhost:3000',
25
+ maxConcurrentSessions: '1',
26
+ headless: true,
27
+ implicitWait: '5000',
28
+ parallelizationMode: 'testcase',
31
29
  },
32
- browsers: [
33
- {
34
- id: "chrome-desktop",
35
- type: "chrome",
36
- mobileEmulation: false,
37
- },
38
- ],
39
30
  androidConfig: {
40
- appiumServer: "http://127.0.0.1:4723",
41
- platformName: "Android",
42
- platformVersion: "13",
43
- deviceName: "emulator-5554",
44
- automationName: "UiAutomator2",
45
- appPackage: "",
46
- appActivity: "",
47
- autoGrantPermissions: true,
31
+ driverServer: 'http://127.0.0.1:4800',
32
+ appPackage: '',
33
+ appActivity: '',
48
34
  noReset: false,
49
- implicitWait: "10000",
50
- parallelizationMode: "suite",
35
+ implicitWait: 10000,
36
+ parallelizationMode: 'suite',
37
+ devices: [
38
+ {
39
+ id: 'emulator-5554',
40
+ name: 'Pixel 7 Pro Emulator',
41
+ version: '14.0',
42
+ systemPort: 8200,
43
+ },
44
+ ],
51
45
  },
52
46
  iosConfig: {
53
- appiumServer: "http://127.0.0.1:4723",
54
- platformName: "iOS",
55
- platformVersion: "16.0",
56
- deviceName: "iPhone 14",
57
- automationName: "XCUITest",
58
- bundleId: "",
59
- udid: "auto",
60
- xcodeOrgId: "",
61
- xcodeSigningId: "iPhone Developer",
47
+ appiumServer: 'http://127.0.0.1:4723',
48
+ automationName: 'XCUITest',
49
+ bundleId: '',
62
50
  autoAcceptAlerts: true,
63
51
  noReset: false,
64
- implicitWait: "10000",
65
- parallelizationMode: "suite",
52
+ implicitWait: 10000,
53
+ parallelizationMode: 'suite',
54
+ devices: [
55
+ {
56
+ id: 'iphone-15-pro',
57
+ name: 'iPhone 15 Pro Simulator',
58
+ version: '17.0',
59
+ udid: 'auto',
60
+ wdaLocalPort: 8100,
61
+ },
62
+ ],
66
63
  },
67
- loadConfig: {
68
- virtualUsers: "10",
69
- duration: "1m",
70
- },
71
- loadStages: [],
72
- thresholds: [],
73
64
  executionConfig: {
74
65
  networkMonitoringEnabled: true,
75
- fastResponseTime: "200",
76
- normalResponseTime: "1000",
66
+ fastResponseTime: '200',
67
+ normalResponseTime: '1000',
77
68
  monitoredDomains: [],
78
- environmentVariables: [],
69
+ environmentVariables: {},
79
70
  },
80
71
  };