@testspectra/cli 1.0.69 → 1.1.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 (278) 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-DPfv5_EF.js +116 -0
  7. package/demo-app/assets/index-gIwu2EMV.css +1 -0
  8. package/demo-app/index.html +2 -2
  9. package/dist/.tsbuildinfo +1 -0
  10. package/dist/commands/__tests__/cloud-run.test.d.ts +1 -0
  11. package/dist/commands/__tests__/cloud-run.test.js +93 -0
  12. package/dist/commands/__tests__/doctor.test.d.ts +1 -0
  13. package/dist/commands/__tests__/doctor.test.js +39 -0
  14. package/dist/commands/__tests__/init.test.d.ts +1 -0
  15. package/dist/commands/__tests__/init.test.js +148 -0
  16. package/dist/commands/__tests__/license.test.d.ts +1 -0
  17. package/dist/commands/__tests__/license.test.js +13 -0
  18. package/dist/commands/__tests__/refactor.test.d.ts +1 -0
  19. package/dist/commands/__tests__/refactor.test.js +64 -0
  20. package/dist/commands/__tests__/run-e2e.test.d.ts +1 -0
  21. package/dist/commands/__tests__/run-e2e.test.js +181 -0
  22. package/dist/commands/__tests__/run.test.d.ts +1 -0
  23. package/dist/commands/__tests__/run.test.js +197 -0
  24. package/dist/commands/__tests__/watch.test.d.ts +1 -0
  25. package/dist/commands/__tests__/watch.test.js +155 -0
  26. package/dist/commands/add.js +86 -85
  27. package/dist/commands/cloud-run.d.ts +11 -0
  28. package/dist/commands/cloud-run.js +118 -0
  29. package/dist/commands/demo.js +7 -7
  30. package/dist/commands/devices.d.ts +14 -2
  31. package/dist/commands/devices.js +44 -34
  32. package/dist/commands/doctor.d.ts +3 -1
  33. package/dist/commands/doctor.js +43 -264
  34. package/dist/commands/init.d.ts +1 -1
  35. package/dist/commands/init.js +206 -196
  36. package/dist/commands/install.d.ts +4 -0
  37. package/dist/commands/install.js +59 -0
  38. package/dist/commands/license.d.ts +4 -0
  39. package/dist/commands/license.js +30 -0
  40. package/dist/commands/refactor.d.ts +8 -0
  41. package/dist/commands/refactor.js +78 -0
  42. package/dist/commands/run.d.ts +22 -1
  43. package/dist/commands/run.js +252 -109
  44. package/dist/commands/sync-types.d.ts +4 -0
  45. package/dist/commands/sync-types.js +14 -0
  46. package/dist/commands/update.d.ts +3 -0
  47. package/dist/commands/update.js +109 -0
  48. package/dist/commands/watch.d.ts +6 -0
  49. package/dist/commands/watch.js +47 -43
  50. package/dist/config/loader.d.ts +1 -1
  51. package/dist/config/loader.js +40 -25
  52. package/dist/config/schema.d.ts +117 -49
  53. package/dist/config/schema.js +41 -34
  54. package/dist/generator/__tests__/tsconfig-isolation.test.d.ts +1 -0
  55. package/dist/generator/__tests__/tsconfig-isolation.test.js +278 -0
  56. package/dist/generator/__tests__/type-generator.test.d.ts +1 -0
  57. package/dist/generator/__tests__/type-generator.test.js +386 -0
  58. package/dist/generator/index.d.ts +2 -0
  59. package/dist/generator/index.js +2 -0
  60. package/dist/generator/tsconfig-generator.d.ts +27 -0
  61. package/dist/generator/tsconfig-generator.js +391 -0
  62. package/dist/generator/type-generator.d.ts +36 -0
  63. package/dist/generator/type-generator.js +644 -0
  64. package/dist/index.d.ts +9 -5
  65. package/dist/index.js +126 -47
  66. package/dist/lifecycle/__tests__/lifecycle-engine.test.d.ts +1 -0
  67. package/dist/lifecycle/__tests__/lifecycle-engine.test.js +290 -0
  68. package/dist/lifecycle/hook-discovery.d.ts +24 -0
  69. package/dist/lifecycle/hook-discovery.js +60 -0
  70. package/dist/lifecycle/hook-dispatcher.d.ts +34 -0
  71. package/dist/lifecycle/hook-dispatcher.js +190 -0
  72. package/dist/lifecycle/index.d.ts +3 -0
  73. package/dist/lifecycle/index.js +3 -0
  74. package/dist/lifecycle/parallel-grouping.d.ts +27 -0
  75. package/dist/lifecycle/parallel-grouping.js +151 -0
  76. package/dist/mobile/__tests__/android-device-e2e.test.d.ts +1 -0
  77. package/dist/mobile/__tests__/android-device-e2e.test.js +53 -0
  78. package/dist/mobile/__tests__/device-pool.test.d.ts +1 -0
  79. package/dist/mobile/__tests__/device-pool.test.js +97 -0
  80. package/dist/mobile/device-pool.d.ts +23 -0
  81. package/dist/mobile/device-pool.js +1 -0
  82. package/dist/mobile/index.d.ts +1 -0
  83. package/dist/mobile/index.js +1 -0
  84. package/dist/refactor/__tests__/refactor-engine.test.d.ts +1 -0
  85. package/dist/refactor/__tests__/refactor-engine.test.js +175 -0
  86. package/dist/refactor/index.d.ts +1 -0
  87. package/dist/refactor/index.js +1 -0
  88. package/dist/refactor/refactor-engine.d.ts +25 -0
  89. package/dist/refactor/refactor-engine.js +255 -0
  90. package/dist/reporter/__tests__/semantic-formatter.test.d.ts +1 -0
  91. package/dist/reporter/__tests__/semantic-formatter.test.js +73 -0
  92. package/dist/reporter/semantic-formatter.d.ts +6 -0
  93. package/dist/reporter/semantic-formatter.js +191 -0
  94. package/dist/reporter/summary-view.d.ts +12 -0
  95. package/dist/reporter/summary-view.js +19 -0
  96. package/dist/reporter/terminal-stream.d.ts +32 -0
  97. package/dist/reporter/terminal-stream.js +82 -0
  98. package/dist/reporter/types.d.ts +2 -0
  99. package/dist/reporter/types.js +1 -0
  100. package/dist/runner/bridge.d.ts +10 -5
  101. package/dist/runner/bridge.js +69 -44
  102. package/dist/runner/reporter.d.ts +30 -2
  103. package/dist/runner/reporter.js +419 -13
  104. package/dist/server/demo.js +43 -44
  105. package/dist/types/generator.d.ts +1 -17
  106. package/dist/types/generator.js +1 -443
  107. package/dist/utils/demo-server.js +38 -35
  108. package/package.json +20 -12
  109. package/templates/default/CLAUDE.md +7 -5
  110. package/templates/default/fixtures/apiData.json +24 -0
  111. package/templates/default/package.json +13 -4
  112. package/templates/default/page-objects/MatchersPage/mobile.ts +41 -16
  113. package/templates/default/page-objects/MatchersPage/web.ts +14 -0
  114. package/templates/default/page-objects/NavigationPage/mobile.ts +10 -1
  115. package/templates/default/page-objects/PlaygroundPage/mobile.ts +27 -17
  116. package/templates/default/page-objects/PlaygroundPage/web.ts +2 -0
  117. package/templates/default/specs/ApiInterception/TC-0008-fetch-mocking/mobile.test.ts +11 -0
  118. package/templates/default/specs/ApiInterception/TC-0008-fetch-mocking/spec.md +12 -0
  119. package/templates/default/specs/ApiInterception/TC-0008-fetch-mocking/web.test.ts +27 -0
  120. package/templates/default/specs/ApiInterception/TC-0009-post-mocking/mobile.test.ts +16 -0
  121. package/templates/default/specs/ApiInterception/TC-0009-post-mocking/spec.md +12 -0
  122. package/templates/default/specs/ApiInterception/TC-0009-post-mocking/web.test.ts +24 -0
  123. package/templates/default/specs/ApiInterception/suite.md +9 -0
  124. package/templates/default/specs/BrowserContext/TC-0007-title-and-navigation/mobile.test.ts +7 -1
  125. package/templates/default/specs/BrowserContext/TC-0007-title-and-navigation/web.test.ts +17 -3
  126. package/templates/default/specs/ContentMatchers/TC-0005-text-and-values/mobile.test.ts +15 -1
  127. package/templates/default/specs/ContentMatchers/TC-0005-text-and-values/web.test.ts +14 -4
  128. package/templates/default/specs/ContentMatchers/TC-0006-collections-and-empty/mobile.test.ts +9 -1
  129. package/templates/default/specs/ContentMatchers/TC-0006-collections-and-empty/web.test.ts +8 -3
  130. package/templates/default/specs/ElementMatchers/TC-0003-visibility-and-dom/mobile.test.ts +9 -1
  131. package/templates/default/specs/ElementMatchers/TC-0003-visibility-and-dom/web.test.ts +9 -3
  132. package/templates/default/specs/ElementMatchers/TC-0004-states-and-attributes/mobile.test.ts +27 -1
  133. package/templates/default/specs/ElementMatchers/TC-0004-states-and-attributes/web.test.ts +27 -6
  134. package/templates/default/specs/Playground/TC-0001-form-controls/mobile.test.ts +4 -1
  135. package/templates/default/specs/Playground/TC-0001-form-controls/web.test.ts +3 -3
  136. package/templates/default/specs/Playground/TC-0002-toggle-elements/mobile.test.ts +4 -1
  137. package/templates/default/specs/Playground/TC-0002-toggle-elements/web.test.ts +2 -2
  138. package/templates/default/spectra.config.ts +21 -14
  139. package/templates/default/support/actions/fillCredentials/mobile.action.ts +2 -2
  140. package/templates/default/support/steps/togglePlaygroundStates/mobile.step.ts +2 -0
  141. package/templates/default/support/steps/togglePlaygroundStates/web.step.ts +2 -2
  142. package/templates/default/support/steps/verifyPlaygroundState/mobile.step.ts +3 -1
  143. package/templates/default/support/steps/verifyPlaygroundState/web.step.ts +3 -3
  144. package/templates/default/tsconfig.json +3 -1
  145. package/templates/nx/.nx/workspace-data/d/daemon.log +168 -0
  146. package/templates/nx/CLAUDE.md +2 -2
  147. package/templates/nx/package.json +7 -5
  148. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0008-fetch-mocking/mobile.test.ts +3 -0
  149. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0008-fetch-mocking/spec.md +12 -0
  150. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0008-fetch-mocking/web.test.ts +27 -0
  151. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0009-post-mocking/mobile.test.ts +3 -0
  152. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0009-post-mocking/spec.md +12 -0
  153. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0009-post-mocking/web.test.ts +24 -0
  154. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/suite.md +9 -0
  155. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/TC-0007-title-and-navigation/web.test.ts +17 -3
  156. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0005-text-and-values/web.test.ts +14 -4
  157. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0006-collections-and-empty/web.test.ts +8 -3
  158. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0003-visibility-and-dom/web.test.ts +9 -3
  159. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0004-states-and-attributes/web.test.ts +27 -6
  160. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0001-form-controls/web.test.ts +3 -3
  161. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0002-toggle-elements/web.test.ts +2 -2
  162. package/templates/nx/pnpm-lock.yaml +6663 -0
  163. package/templates/nx/pnpm-workspace.yaml +2 -1
  164. package/templates/nx/shared/testing/fixtures/apiData.json +24 -0
  165. package/templates/nx/shared/testing/page-objects/MatchersPage/mobile.ts +12 -0
  166. package/templates/nx/shared/testing/page-objects/MatchersPage/web.ts +14 -0
  167. package/templates/nx/shared/testing/page-objects/PlaygroundPage/web.ts +2 -0
  168. package/templates/nx/shared/testing/project.json +19 -0
  169. package/templates/nx/shared/testing/support/steps/togglePlaygroundStates/web.step.ts +2 -2
  170. package/templates/nx/shared/testing/support/steps/verifyPlaygroundState/mobile.step.ts +1 -1
  171. package/templates/nx/shared/testing/support/steps/verifyPlaygroundState/web.step.ts +3 -3
  172. package/templates/nx/spectra.config.ts +19 -12
  173. package/templates/nx/tsconfig.json +3 -1
  174. package/demo-app/assets/index-DAUlrHTr.css +0 -1
  175. package/demo-app/assets/index-DN2Kb0A8.js +0 -100
  176. package/dist/index.cjs +0 -101
  177. package/dist/plugin.cjs +0 -575
  178. package/dist/plugin.d.ts +0 -16
  179. package/dist/plugin.js +0 -184
  180. package/dist/step/index.d.ts +0 -6
  181. package/dist/step/index.js +0 -6
  182. package/dist/step/matchers.d.ts +0 -14
  183. package/dist/step/matchers.js +0 -114
  184. package/dist/step/proto.d.ts +0 -46
  185. package/dist/step/proto.js +0 -114
  186. package/dist/step/runner/collection.d.ts +0 -13
  187. package/dist/step/runner/collection.js +0 -51
  188. package/dist/step/runner/single.d.ts +0 -21
  189. package/dist/step/runner/single.js +0 -138
  190. package/dist/step/spectra.d.ts +0 -34
  191. package/dist/step/spectra.js +0 -156
  192. package/dist/step/types.d.ts +0 -32
  193. package/dist/step/types.js +0 -5
  194. package/templates/default/tsconfig.spectra.android.json +0 -46
  195. package/templates/default/tsconfig.spectra.ios.json +0 -46
  196. package/templates/default/tsconfig.spectra.json +0 -22
  197. package/templates/default/tsconfig.spectra.web.json +0 -53
  198. package/templates/nx/fixtures/playgroundData.json +0 -7
  199. package/templates/nx/global-hooks/after/mobile.hook.ts +0 -3
  200. package/templates/nx/global-hooks/after/web.hook.ts +0 -3
  201. package/templates/nx/global-hooks/before/mobile.hook.ts +0 -3
  202. package/templates/nx/global-hooks/before/web.hook.ts +0 -3
  203. package/templates/nx/page-objects/MatchersPage/mobile.ts +0 -21
  204. package/templates/nx/page-objects/MatchersPage/web.ts +0 -23
  205. package/templates/nx/page-objects/NavigationPage/mobile.ts +0 -5
  206. package/templates/nx/page-objects/NavigationPage/web.ts +0 -8
  207. package/templates/nx/page-objects/PlaygroundPage/mobile.ts +0 -26
  208. package/templates/nx/page-objects/PlaygroundPage/web.ts +0 -29
  209. package/templates/nx/specs/BrowserContext/TC-0007-title-and-navigation/mobile.test.ts +0 -3
  210. package/templates/nx/specs/BrowserContext/TC-0007-title-and-navigation/spec.md +0 -12
  211. package/templates/nx/specs/BrowserContext/TC-0007-title-and-navigation/web.test.ts +0 -5
  212. package/templates/nx/specs/BrowserContext/suite.md +0 -9
  213. package/templates/nx/specs/ContentMatchers/TC-0005-text-and-values/mobile.test.ts +0 -3
  214. package/templates/nx/specs/ContentMatchers/TC-0005-text-and-values/spec.md +0 -12
  215. package/templates/nx/specs/ContentMatchers/TC-0005-text-and-values/web.test.ts +0 -7
  216. package/templates/nx/specs/ContentMatchers/TC-0006-collections-and-empty/mobile.test.ts +0 -3
  217. package/templates/nx/specs/ContentMatchers/TC-0006-collections-and-empty/spec.md +0 -12
  218. package/templates/nx/specs/ContentMatchers/TC-0006-collections-and-empty/web.test.ts +0 -6
  219. package/templates/nx/specs/ContentMatchers/suite.md +0 -9
  220. package/templates/nx/specs/ElementMatchers/TC-0003-visibility-and-dom/mobile.test.ts +0 -3
  221. package/templates/nx/specs/ElementMatchers/TC-0003-visibility-and-dom/spec.md +0 -12
  222. package/templates/nx/specs/ElementMatchers/TC-0003-visibility-and-dom/web.test.ts +0 -5
  223. package/templates/nx/specs/ElementMatchers/TC-0004-states-and-attributes/mobile.test.ts +0 -3
  224. package/templates/nx/specs/ElementMatchers/TC-0004-states-and-attributes/spec.md +0 -12
  225. package/templates/nx/specs/ElementMatchers/TC-0004-states-and-attributes/web.test.ts +0 -8
  226. package/templates/nx/specs/ElementMatchers/hooks/after/mobile.hook.ts +0 -1
  227. package/templates/nx/specs/ElementMatchers/hooks/after/web.hook.ts +0 -1
  228. package/templates/nx/specs/ElementMatchers/hooks/afterEach/mobile.hook.ts +0 -1
  229. package/templates/nx/specs/ElementMatchers/hooks/afterEach/web.hook.ts +0 -1
  230. package/templates/nx/specs/ElementMatchers/hooks/before/mobile.hook.ts +0 -1
  231. package/templates/nx/specs/ElementMatchers/hooks/before/web.hook.ts +0 -1
  232. package/templates/nx/specs/ElementMatchers/hooks/beforeEach/mobile.hook.ts +0 -1
  233. package/templates/nx/specs/ElementMatchers/hooks/beforeEach/web.hook.ts +0 -1
  234. package/templates/nx/specs/ElementMatchers/suite.md +0 -9
  235. package/templates/nx/specs/Playground/TC-0001-form-controls/mobile.test.ts +0 -3
  236. package/templates/nx/specs/Playground/TC-0001-form-controls/spec.md +0 -12
  237. package/templates/nx/specs/Playground/TC-0001-form-controls/web.test.ts +0 -6
  238. package/templates/nx/specs/Playground/TC-0002-toggle-elements/mobile.test.ts +0 -3
  239. package/templates/nx/specs/Playground/TC-0002-toggle-elements/spec.md +0 -12
  240. package/templates/nx/specs/Playground/TC-0002-toggle-elements/web.test.ts +0 -6
  241. package/templates/nx/specs/Playground/hooks/after/mobile.hook.ts +0 -1
  242. package/templates/nx/specs/Playground/hooks/after/web.hook.ts +0 -1
  243. package/templates/nx/specs/Playground/hooks/afterEach/mobile.hook.ts +0 -1
  244. package/templates/nx/specs/Playground/hooks/afterEach/web.hook.ts +0 -1
  245. package/templates/nx/specs/Playground/hooks/before/mobile.hook.ts +0 -1
  246. package/templates/nx/specs/Playground/hooks/before/web.hook.ts +0 -1
  247. package/templates/nx/specs/Playground/hooks/beforeEach/mobile.hook.ts +0 -1
  248. package/templates/nx/specs/Playground/hooks/beforeEach/web.hook.ts +0 -1
  249. package/templates/nx/specs/Playground/suite.md +0 -9
  250. package/templates/nx/support/actions/fillCredentials/mobile.action.ts +0 -4
  251. package/templates/nx/support/actions/fillCredentials/web.action.ts +0 -4
  252. package/templates/nx/support/steps/togglePlaygroundStates/mobile.step.ts +0 -3
  253. package/templates/nx/support/steps/togglePlaygroundStates/step.md +0 -7
  254. package/templates/nx/support/steps/togglePlaygroundStates/web.step.ts +0 -5
  255. package/templates/nx/support/steps/verifyPlaygroundState/mobile.step.ts +0 -4
  256. package/templates/nx/support/steps/verifyPlaygroundState/step.md +0 -7
  257. package/templates/nx/support/steps/verifyPlaygroundState/web.step.ts +0 -6
  258. package/templates/nx/tsconfig.spectra.android.json +0 -39
  259. package/templates/nx/tsconfig.spectra.ios.json +0 -39
  260. package/templates/nx/tsconfig.spectra.json +0 -25
  261. package/templates/nx/tsconfig.spectra.shared.json +0 -25
  262. package/templates/nx/tsconfig.spectra.web.json +0 -45
  263. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/after/mobile.hook.ts +0 -0
  264. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/after/web.hook.ts +0 -0
  265. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/afterEach/mobile.hook.ts +0 -0
  266. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/afterEach/web.hook.ts +0 -0
  267. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/before/mobile.hook.ts +0 -0
  268. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/before/web.hook.ts +0 -0
  269. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/beforeEach/mobile.hook.ts +0 -0
  270. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/beforeEach/web.hook.ts +0 -0
  271. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/after/mobile.hook.ts +0 -0
  272. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/after/web.hook.ts +0 -0
  273. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/afterEach/mobile.hook.ts +0 -0
  274. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/afterEach/web.hook.ts +0 -0
  275. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/before/mobile.hook.ts +0 -0
  276. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/before/web.hook.ts +0 -0
  277. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/beforeEach/mobile.hook.ts +0 -0
  278. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/beforeEach/web.hook.ts +0 -0
package/LICENSE.md ADDED
@@ -0,0 +1,48 @@
1
+ # TestSpectra Commercial Software License Agreement
2
+
3
+ Copyright (c) 2026 TestSpectra. All rights reserved.
4
+
5
+ IMPORTANT NOTICE: This software is NOT open-source. Although distribution archives,
6
+ npm packages, and editor extensions are publicly downloadable, installation,
7
+ execution, and use of the Software are strictly conditioned upon obtaining a valid
8
+ Commercial License or an authorized Evaluation/Trial License from TestSpectra.
9
+
10
+ 1. GRANT OF LICENSE
11
+ Subject to payment of applicable license fees or an active authorized evaluation
12
+ period, TestSpectra grants you a non-exclusive, non-transferable, revocable license
13
+ to install and execute the Software solely for authoring, debugging, and executing
14
+ automated software tests.
15
+
16
+ 2. LICENSE ACTIVATION & ENFORCEMENT
17
+ - Use of the Software requires activation via a valid License Key, authorized CI token,
18
+ or active TestSpectra Cloud account.
19
+ - Any attempt to circumvent, disable, modify, reverse engineer, or tamper with the
20
+ license verification mechanisms, cryptographic signatures, or binary checks is
21
+ a material breach of this Agreement and automatically terminates your license.
22
+
23
+ 3. RESTRICTIONS
24
+ You shall not, and shall not permit any third party to:
25
+ - Decompile, disassemble, reverse engineer, or derive source code from the binaries,
26
+ compiled scripts, or libraries of the Software.
27
+ - Sublicense, sell, rent, lease, distribute, or host the Software as a service for third parties.
28
+ - Re-brand, white-label, or package the Software or any of its components as part of a
29
+ competing commercial QA, testing, or developer tooling product.
30
+ - Modify, alter, or remove any proprietary notices, copyright labels, or license headers.
31
+
32
+ 4. INTELLECTUAL PROPERTY
33
+ The Software, including its source code, architecture, Rust core engine, algorithms,
34
+ matchers, extensions, interfaces, and documentation, represents valuable intellectual
35
+ property and trade secrets of TestSpectra.
36
+
37
+ 5. TERMINATION
38
+ This license is effective until terminated. Your rights under this license will terminate
39
+ automatically without notice if you fail to comply with any of its terms, or upon expiration
40
+ of your active subscription or trial term. Upon termination, you must cease all use of
41
+ the Software and delete all copies in your possession.
42
+
43
+ 6. DISCLAIMER OF WARRANTY & LIMITATION OF LIABILITY
44
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
45
+ INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
46
+ PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
47
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
48
+ ARISING FROM THE USE OF OR INABILITY TO USE THE SOFTWARE.
package/README.md CHANGED
@@ -1,295 +1,61 @@
1
- # @testspectra/cli — Architecture & Implementation
1
+ # @testspectra/cli
2
2
 
3
- The **TestSpectra CLI** (`spectra` / `testspectra`) is the command-line orchestrator and developer tooling layer for the TestSpectra testing framework. It enables unified multi-platform test authoring (Web, Android, iOS), zero-import ambient typing, dynamic configuration, and high-performance native test execution powered by the Rust core runner.
3
+ Command-line interface and development tooling layer for the TestSpectra testing framework.
4
4
 
5
5
  ---
6
6
 
7
- ## 1. Core Architecture Overview
7
+ ## 🛠️ Development Guide
8
8
 
9
- ```
10
- ┌──────────────────────────┐
11
- │ User Test Project │
12
- │ (Zero-Import TypeScript) │
13
- └─────────────┬────────────┘
14
- │
15
- ┌──────────────────────┴──────────────────────┐
16
- │ │
17
- ▼ ▼
18
- ┌──────────────────────┐ ┌────────────────────────┐
19
- │ spectra run / CLI │ │ Solution TSConfigs │
20
- │ (CLI Orchestration) │ │ (tsconfig.*.json) │
21
- └───────────┬──────────┘ └────────────┬───────────┘
22
- │ │
23
- │ 1. Generates Ambient .d.ts │ 2. Isolated Platform
24
- │ in .testspectra/types/ │ Type Checking
25
- ▼ ▼
26
- ┌──────────────────────┐ ┌────────────────────────┐
27
- │ Core Test Runner │ │ Standard IDE & tsc │
28
- │ (Rust Native Bin) │ │ (VS Code, Cursor, CI) │
29
- └──────────────────────┘ └────────────────────────┘
30
- ```
31
-
32
- ---
33
-
34
- ## 2. Key Architectural Pillars
35
-
36
- ### A. Zero-Import Multi-Platform Authoring
37
- TestSpectra allows developers to write clean, boilerplate-free test specs, steps, actions, and page objects without manual `import` statements for globals or framework entities:
38
- - **Page Objects**: `LoginPage.login(...)` and getters `LoginPage.flashAlert` resolve automatically based on target platform.
39
- - **Actions (`Spectra.*`)**: Built-in 16 atomic actions (`Spectra.navigate`, `Spectra.click`, `Spectra.type`, `Spectra.select`, `Spectra.scroll`, `Spectra.swipe`, `Spectra.wait`, etc.) matching TestSpectra database schema, merged seamlessly with user-defined custom actions (`Spectra.verifyOtp`).
40
- - **Direct Callable Assertions**: Instant, auto-completed assertion methods available directly on `WebdriverIO.Element`, `ChainablePromiseElement`, and `browser` (`shouldBeVisible()`, `shouldContainText()`, `shouldHaveValue()`, `shouldHaveUrl()`, etc.).
41
- - **Steps**: `Step.loginUser(...)` exposes shared business step flows.
42
- - **Fixtures**: `Fixture.userData` provides typed, platform-agnostic test fixture access.
43
- - **WebdriverIO Globals**: `$`, `$$`, `browser`, `expect` are available globally across all platforms.
44
-
45
- ### B. Built-in Regular Actions & Direct Callable Assertions
46
-
47
- TestSpectra provides a bundled, 100% database-schema-compatible library of built-in atomic actions and direct element assertions:
48
-
49
- #### 1. Direct Callable Element Assertions (`should*`)
50
- All Page Object elements and locators support direct callable assertions without extra nesting:
51
- ```typescript
52
- it("should authenticate user using Page Objects and assertions", async () => {
53
- // Navigation & high-level business flows
54
- await LoginPage.open();
55
- await Step.loginUser("tomsmith", "SuperSecretPassword!");
56
-
57
- // Direct assertions on Page Object elements
58
- await LoginPage.flashAlert.shouldBeVisible();
59
- await LoginPage.flashAlert.shouldContainText("You logged into a secure area!");
60
- await LoginPage.usernameInput.shouldHaveValue("tomsmith");
61
- });
62
- ```
9
+ ### Prerequisites
63
10
 
64
- #### Available Assertion Methods:
65
- | Kategori | Method Callable |
66
- | :--- | :--- |
67
- | **Visibility** | `await el.shouldBeVisible()` / `await el.shouldNotBeVisible()` |
68
- | **DOM Existence** | `await el.shouldExist()` / `await el.shouldNotExist()` |
69
- | **Element State** | `await el.shouldBeEnabled()` / `await el.shouldBeDisabled()` / `await el.shouldBeSelected()` / `await el.shouldBeChecked()` |
70
- | **Text Matching** | `await el.shouldHaveText(expected)` / `await el.shouldContainText(expected)` |
71
- | **Input Value** | `await el.shouldHaveValue(expected)` / `await el.shouldContainValue(expected)` |
72
- | **CSS Class** | `await el.shouldHaveClass(className)` |
73
- | **Attribute** | `await el.shouldHaveAttribute(name, val?)` |
74
- | **Browser URL / Title**| `await browser.shouldHaveUrl(url)` / `await browser.shouldHaveTitle(title)` |
11
+ - [Node.js](https://nodejs.org/) (>= 18.0.0)
12
+ - [pnpm](https://pnpm.io/) (>= 8.0.0)
13
+ - [Bun](https://bun.sh/) (>= 1.0.0)
75
14
 
76
- #### 2. Built-in Atomic Actions (`Spectra.*`)
77
- Available inside Page Objects, Actions, and Steps for raw element manipulation:
78
- ```typescript
79
- // Navigation
80
- await Spectra.navigate("https://example.com/login");
81
- await Spectra.back();
82
- await Spectra.refresh();
15
+ ### Getting Started
83
16
 
84
- // Interactions with Page Object getters or locators
85
- await Spectra.type(this.usernameInput, "tomsmith");
86
- await Spectra.click(this.submitButton);
87
- await Spectra.select(this.countryDropdown, "ID");
88
- await Spectra.clear(this.searchField);
89
- await Spectra.pressKey("Enter");
17
+ ```bash
18
+ # Install workspace dependencies
19
+ pnpm install
90
20
 
91
- // Gestures & Timing
92
- await Spectra.scroll({ direction: "down", pixels: 300 });
93
- await Spectra.swipe({ direction: "up", distance: 500 });
94
- await Spectra.wait(1000);
95
- await Spectra.waitForElement(this.flashAlert, 5000);
96
- ```
21
+ # Build @testspectra/cli
22
+ pnpm --filter @testspectra/cli build
97
23
 
98
- ### C. Platform Hierarchy & Resolution
99
- Entities are structured with hierarchical platform stems:
100
- ```
101
- page-objects/
102
- └── LoginPage/
103
- ├── web.ts # Used for Web
104
- └── mobile.ts # Fallback for Android and iOS
24
+ # Run type check
25
+ pnpm --filter @testspectra/cli type-check
105
26
 
106
- specs/
107
- └── TC-LOGIN-01/
108
- ├── web.test.ts # Web spec
109
- ├── android.test.ts # Android spec
110
- └── ios.test.ts # iOS spec
27
+ # Run unit tests
28
+ pnpm --filter @testspectra/cli test
111
29
  ```
112
30
 
113
- Resolution order:
114
- - **`web`**: `web` → `common`
115
- - **`android`**: `android` → `mobile` → `common`
116
- - **`ios`**: `ios` → `mobile` → `common`
117
- - **`mobile`**: `mobile` → `common`
118
- - **`common`**: `common`
119
-
120
- ### D. Solution-Style TypeScript Configuration & Language Service Plugin
121
- To avoid ambient type clashes between platforms (such as different method signatures across Web and Mobile Page Objects), TestSpectra uses standard TypeScript **Project References**:
122
- - **`tsconfig.json`**: Root project reference orchestrator with `@testspectra/cli` plugin registered.
123
- - **`tsconfig.web.json`**: Scoped exclusively to Web files and `.testspectra/types/web.d.ts`.
124
- - **`tsconfig.android.json`**: Scoped exclusively to Android files and `.testspectra/types/android.d.ts`.
125
- - **`tsconfig.ios.json`**: Scoped exclusively to iOS files and `.testspectra/types/ios.d.ts`.
126
- - **`fixtures.d.ts`**: Single platform-agnostic declaration file referenced by all platform declarations.
31
+ ### Development Watch Mode
127
32
 
128
- #### Zero-Terminal Background Type Generation (TS Plugin)
129
- With the built-in TypeScript Server plugin (`@testspectra/cli`), background type generation is completely automatic:
130
- - When you open the project in **VS Code**, **Cursor**, or **WebStorm**, the IDE's TypeScript Server automatically boots the `@testspectra/cli` Language Service plugin.
131
- - The plugin generates and updates `.testspectra/types/` ambient declarations in the background in real-time as you author Page Objects, Actions, Steps, and Fixtures.
132
-
133
- Project verification is executed with standard `tsc`:
134
33
  ```bash
135
- tsc -b
136
- ```
137
-
138
- ### E. Typed Configuration with `defineConfig`
139
- Configuration is strongly typed with full JSDoc documentation via `spectra.config.ts`:
140
- ```typescript
141
- import { defineConfig } from "@testspectra/cli";
142
-
143
- export default defineConfig({
144
- webConfig: {
145
- baseUrl: "https://the-internet.herokuapp.com",
146
- headlessMode: true,
147
- },
148
- browsers: [
149
- { id: "chrome-desktop", type: "chrome" },
150
- ],
151
- androidConfig: {
152
- platformName: "Android",
153
- automationName: "UiAutomator2",
154
- },
155
- });
34
+ # Watch and rebuild on file changes
35
+ pnpm --filter @testspectra/cli dev
156
36
  ```
157
37
 
158
38
  ---
159
39
 
160
- ## 3. CLI Commands
40
+ ## 💻 CLI Commands Summary
161
41
 
162
- | Command | Description |
163
- | :--- | :--- |
164
- | `spectra init` / `npx @testspectra/cli init` | Interactive project setup. Auto-detects standalone or Nx Monorepos, discovers workspace packages from `pnpm-workspace.yaml`, and scaffolds centralized/distributed configurations. |
165
- | `spectra add [module]` | Adds a new TestSpectra E2E testing module to an existing workspace project or creates a new feature testing suite. |
166
- | `spectra run [spec]` | Automatically updates ambient declarations and invokes the native Rust test runner to execute the test suite. |
167
- | `spectra doctor` | Verifies local environment prerequisites (ADB, Java, Chrome, Bun, Node). |
168
- | `spectra devices` | Lists connected Android/iOS devices and local browsers. |
42
+ | Command | Usage | Description |
43
+ | :---------------- | :------------------------------------------ | :---------------------------------------------------------------------- |
44
+ | `spectra init` | `spectra init [-t default\|nx]` | Scaffold a new TestSpectra project or monorepo workspace |
45
+ | `spectra run` | `spectra run [path] [-t web\|android\|ios]` | Execute test specs or suites |
46
+ | `spectra watch` | `spectra watch [-w <dir>]` | Watch workspace and generate `.testspectra/types/` declarations |
47
+ | `spectra doctor` | `spectra doctor [--fix] [--json]` | Diagnose local environment prerequisites (ADB, Java, Chrome, Bun, Node) |
48
+ | `spectra demo` | `spectra demo [-p <port>]` | Launch built-in demo web application |
49
+ | `spectra devices` | `spectra devices [-t <target>]` | List connected Android/iOS devices and browsers |
50
+ | `spectra add` | `spectra add [module]` | Add a new testing module to an existing workspace |
51
+ | `spectra update` | `spectra update [--check]` | Check and update TestSpectra packages |
169
52
 
170
53
  ---
171
54
 
172
- ## 4. Standalone Project Directory Structure
55
+ ## 📚 Documentation & Specifications
173
56
 
174
- ```
175
- ├── spectra.config.ts # Central typed project configuration
176
- ├── package.json # Scripts & dependencies
177
- ├── tsconfig.json # Root solution references
178
- ├── tsconfig.web.json # Web platform TypeScript scope
179
- ├── tsconfig.android.json # Android platform TypeScript scope
180
- ├── tsconfig.ios.json # iOS platform TypeScript scope
181
- ├── page-objects/ # Page Object Model folders
182
- │ └── PlaygroundPage/
183
- │ ├── web.ts
184
- │ └── mobile.ts
185
- ├── support/
186
- │ ├── actions/ # Reusable atomic actions
187
- │ │ └── fillCredentials/
188
- │ │ ├── web.action.ts
189
- │ │ └── mobile.action.ts
190
- │ └── steps/ # High-level business flows
191
- │ └── verifyPlaygroundState/
192
- │ ├── web.step.ts
193
- │ └── mobile.step.ts
194
- ├── global-hooks/ # Global lifecycle hooks
195
- │ └── before/
196
- │ └── web.hook.ts
197
- ├── specs/ # Layered zero-import test cases
198
- │ └── Playground/
199
- │ └── TC-0001-form-controls/
200
- │ ├── web.test.ts
201
- │ └── mobile.test.ts
202
- ├── fixtures/ # Platform-agnostic test data
203
- │ └── playgroundData.json
204
- ├── .testspectra/ # Auto-generated ambient typings & cache
205
- │ └── types/
206
- │ ├── fixtures.d.ts
207
- │ ├── web.d.ts
208
- │ ├── android.d.ts
209
- │ ├── ios.d.ts
210
- │ ├── mobile.d.ts
211
- │ └── common.d.ts
212
- ```
213
-
214
- ---
215
-
216
- ## 5. Enterprise Monorepo Architecture (Nx & PNPM Workspace)
217
-
218
- TestSpectra features an enterprise-grade architecture for large monorepos: **"Centralized Configuration, Distributed Implementation"**.
219
-
220
- ```
221
- ┌───────────────────────────────────────────────────────────┐
222
- │ Root Monorepo Directory │
223
- │ │
224
- │ ├── spectra.config.ts (Central Execution Config) │
225
- │ ├── .testspectra/ (Central Cache, AppData, Log)│
226
- │ ├── pnpm-workspace.yaml (Workspace Definition) │
227
- │ ├── nx.json (Nx Target & Caching Rules) │
228
- │ └── tsconfig.json (Solution References) │
229
- └─────────────────────────────┬─────────────────────────────┘
230
- │
231
- ┌──────────────────────────────┴──────────────────────────────┐
232
- ▼ ▼
233
- ┌───────────────────────────────┐ ┌───────────────────────────────┐
234
- │ shared/testing/ (Library) │ │ packages/playground/e2e/ │
235
- ├───────────────────────────────┤ ├───────────────────────────────┤
236
- │ - Shared Page Objects │ ◄─── Auto-Scanned Globals ──│ - Feature Specs (specs/) │
237
- │ - Shared Steps (verifyState) │ (100% Zero-Import!) │ - Feature Page Objects (POMs) │
238
- │ - Shared Actions (fillCreds) │ │ - project.json (Nx Target) │
239
- │ - Shared Fixtures (playData) │ │ - tsconfig.web/android/ios │
240
- └───────────────────────────────┘ └───────────────────────────────┘
241
- ```
242
-
243
- ### Key Pillars of Monorepo Integration:
244
-
245
- 1. **Interactive Workspace Auto-Discovery (`spectra init`)**:
246
- - Parses `pnpm-workspace.yaml` (e.g. `packages/*`, `modules/**`).
247
- - Scans sub-directories for existing `project.json` or `package.json`.
248
- - Prompts the user with an interactive multi-select checkbox to choose which features will receive E2E testing.
249
- - Prompts for customizable E2E folder names (e.g. `e2e`, `test/e2e`) and the shared testing library path (`shared/testing`).
57
+ For comprehensive feature guides and technical specifications, refer to:
250
58
 
251
- 2. **Centralized Configuration (`spectra.config.ts`) & App Data (`.testspectra/`)**:
252
- - `spectra.config.ts` lives exclusively at the root of the monorepo.
253
- - CLI test runs executed from sub-feature folders automatically traverse up to find the root configuration.
254
- - Driver caches, binaries, and logs reside in `<root>/.testspectra/`, preventing repository clutter across individual feature folders.
255
-
256
- 3. **Global Zero-Import Consumption of Shared Library**:
257
- - Entities placed inside `shared/testing/page-objects/`, `shared/testing/support/steps/`, `shared/testing/support/actions/`, and `shared/testing/fixtures/` are automatically aggregated into ambient declarations.
258
- - Feature test specs consume shared Page Objects (`PlaygroundPage.open()`), steps (`Step.verifyPlaygroundState()`), actions (`Spectra.fillCredentials()`), and fixtures (`Fixture.playgroundData`) **without a single line of `import` statement**.
259
-
260
- 4. **Nx Target Execution & Affected Caching**:
261
- - Each feature E2E folder includes an Nx `project.json`:
262
- ```json
263
- {
264
- "name": "playground-e2e",
265
- "targets": {
266
- "e2e": {
267
- "executor": "nx:run-commands",
268
- "options": { "command": "spectra run", "cwd": "packages/playground/e2e" },
269
- "configurations": {
270
- "android": { "command": "spectra run --target android" },
271
- "ios": { "command": "spectra run --target ios" },
272
- "headless": { "command": "spectra run --headless" }
273
- }
274
- }
275
- }
276
- }
277
- ```
278
- - Running `nx run-many -t e2e` executes all feature test suites in parallel.
279
- 5. **Automatic Architecture Documentation (`ARCHITECTURE.md`)**:
280
- - Every `spectra init` run produces a comprehensive, project-tailored `ARCHITECTURE.md` file in the root workspace.
281
- - It documents the generated file map, exact distributed feature paths, shared library resolution, and zero-import mechanics for onboarding engineers.
282
-
283
- ---
284
-
285
- ## 6. Development & Verification
286
-
287
- To verify the CLI and example app:
288
- ```bash
289
- # Build CLI
290
- pnpm --filter @testspectra/cli build
291
-
292
- # Test interactive scaffolding
293
- npx @testspectra/cli init
294
- pnpm type-check
295
- ```
59
+ - **Feature Guides**: [`docs/v2/features/`](../docs/v2/features/)
60
+ - **CLI Technical Specifications**: [`docs/v2/cli/`](../docs/v2/cli/)
61
+ - **Master v2 Architecture**: [`docs/v2/README.md`](../docs/v2/README.md)
@@ -0,0 +1 @@
1
+ 0c453049994f6a1e36715e78b8ad5a6d464fe0659bde15ac50f97f787348b014
package/bin/spectra.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { runCli } from "../dist/index.js";
2
+ import { runCli } from '../dist/index.js';
3
3
 
4
4
  runCli().catch((err) => {
5
5
  console.error(err);
Binary file