testeranto 0.177.0 → 0.197.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 (546) hide show
  1. package/ALL_LICENSES.txt +11246 -0
  2. package/LICENSE +21 -0
  3. package/README.md +24 -4
  4. package/default-project.json +44 -0
  5. package/design-editor/DesignEditor.tsx +247 -0
  6. package/design-editor/index.ts +2 -0
  7. package/design-editor/server.ts +121 -0
  8. package/design-editor/types.ts +16 -0
  9. package/designs/default-project.json +210 -0
  10. package/dist/common/design-editor/DesignEditor.js +239 -0
  11. package/dist/common/design-editor/index.js +18 -0
  12. package/dist/common/design-editor/server.js +98 -0
  13. package/dist/common/design-editor/types.js +2 -0
  14. package/dist/common/src/App.js +53 -0
  15. package/dist/common/src/Node.js +4 -8
  16. package/dist/common/src/PM/PM_WithEslintAndTsc.js +10 -34
  17. package/dist/common/src/PM/base.js +1 -1
  18. package/dist/common/src/PM/main.js +581 -113
  19. package/dist/common/src/PM/node.js +4 -2
  20. package/dist/common/src/PM/nodeSidecar.js +1 -0
  21. package/dist/common/src/PM/pure.js +20 -57
  22. package/dist/common/src/PM/pureSidecar.js +1 -1
  23. package/dist/common/src/PM/types.js +1 -0
  24. package/dist/common/src/PM/web.js +7 -4
  25. package/dist/common/src/Pure.js +1 -1
  26. package/dist/common/src/Pure.test.js +49 -79
  27. package/dist/common/src/ReportServer.js +8 -2
  28. package/dist/common/src/build.js +31 -40
  29. package/dist/common/src/components/DesignEditorPage.js +169 -0
  30. package/dist/common/src/components/SunriseAnimation.js +291 -0
  31. package/dist/common/src/components/SunriseAnimation.test/interface.js +67 -0
  32. package/dist/common/src/components/SunriseAnimation.test/types.js +2 -0
  33. package/dist/common/src/components/TestStatusBadge.js +1 -21
  34. package/dist/common/src/components/pure/AppFrame.js +69 -0
  35. package/dist/common/src/components/pure/AppFrame.test/implementation.js +63 -0
  36. package/dist/common/src/components/pure/AppFrame.test/index.js +14 -0
  37. package/dist/common/src/components/pure/AppFrame.test/specification.js +25 -0
  38. package/dist/common/src/components/pure/AppFrame.test/types.js +3 -0
  39. package/dist/common/src/components/pure/FeaturesReporterView.js +23 -0
  40. package/dist/common/src/components/pure/FeaturesReporterView.test/implementation.js +84 -0
  41. package/dist/common/src/components/pure/FeaturesReporterView.test/index.js +14 -0
  42. package/dist/common/src/components/pure/FeaturesReporterView.test/specification.js +27 -0
  43. package/dist/common/src/components/pure/FeaturesReporterView.test/types.js +2 -0
  44. package/dist/common/src/components/pure/ModalContent.js +86 -0
  45. package/dist/common/src/components/pure/ModalContent.test/implementation.js +35 -0
  46. package/dist/common/src/components/pure/ModalContent.test/index.js +58 -0
  47. package/dist/common/src/components/pure/ModalContent.test/specification.js +19 -0
  48. package/dist/common/src/components/pure/ModalContent.test/types.js +4 -0
  49. package/dist/common/src/{NavBar.js → components/pure/NavBar.js} +9 -10
  50. package/dist/common/src/components/pure/ProcessManager.js +112 -0
  51. package/dist/common/src/components/pure/ProcessManagerView.js +237 -0
  52. package/dist/common/src/components/pure/ProjectPageView.js +53 -76
  53. package/dist/common/src/components/pure/ProjectPageView.test/implementation.js +167 -54
  54. package/dist/common/src/components/pure/ProjectPageView.test/index.js +5 -1
  55. package/dist/common/src/components/pure/ProjectPageView.test/specification.js +15 -2
  56. package/dist/common/src/components/pure/ProjectPageView.test/types.js +2 -0
  57. package/dist/common/src/components/pure/ProjectsPageView.js +72 -0
  58. package/dist/common/src/components/pure/SettingsButton.js +13 -0
  59. package/dist/common/src/components/pure/SingleProcessView.js +214 -0
  60. package/dist/common/src/components/pure/TestPageView.js +513 -0
  61. package/dist/common/src/components/pure/TestPageView.test/implementation.js +157 -0
  62. package/dist/common/src/components/pure/TestPageView.test/index.js +15 -0
  63. package/dist/common/src/components/pure/TestPageView.test/specification.js +26 -0
  64. package/dist/common/src/components/pure/TestPageView.test/types.js +4 -0
  65. package/dist/common/src/components/pure/ThemeCard.js +15 -0
  66. package/dist/common/src/components/stateful/FeaturesReporter.js +59 -0
  67. package/dist/common/src/components/stateful/FileTree.js +40 -0
  68. package/dist/common/src/components/stateful/ProcessManagerPage.js +112 -0
  69. package/dist/common/src/components/stateful/ProjectPage.js +101 -0
  70. package/dist/common/src/components/stateful/ProjectsPage.js +118 -0
  71. package/dist/common/src/components/stateful/SettingsPage.js +72 -0
  72. package/dist/common/src/components/stateful/SingleProcessPage.js +147 -0
  73. package/dist/common/src/components/stateful/TestPage.js +229 -0
  74. package/dist/common/src/components/stateful/TextEditorPage.js +154 -0
  75. package/dist/common/src/defaultConfig.js +1 -0
  76. package/dist/common/src/esbuildConfigs/inputFilesPlugin.js +3 -4
  77. package/dist/common/src/esbuildConfigs/web.js +1 -1
  78. package/dist/common/src/lib/BaseSuite.js +7 -3
  79. package/dist/common/src/lib/BaseSuite.test/mock.js +17 -41
  80. package/dist/common/src/lib/BaseSuite.test/test.js +33 -42
  81. package/dist/common/src/lib/Sidecar.js +1 -0
  82. package/dist/common/src/lib/abstractBase.js +40 -13
  83. package/dist/common/src/lib/baseBuilder.test/baseBuilder.test.adapter.js +12 -12
  84. package/dist/common/src/lib/baseBuilder.test/baseBuilder.test.implementation.js +15 -13
  85. package/dist/common/src/lib/baseBuilder.test/baseBuilder.test.mock.js +28 -17
  86. package/dist/common/src/lib/baseBuilder.test/baseBuilder.test.pure.js +2 -2
  87. package/dist/common/src/lib/basebuilder.js +29 -35
  88. package/dist/common/src/lib/classBuilder.js +5 -3
  89. package/dist/common/src/lib/core.js +3 -6
  90. package/dist/common/src/lib/core.test/MockCore.js +0 -14
  91. package/dist/common/src/lib/core.test/core.test.adapter.js +2 -9
  92. package/dist/common/src/lib/core.test/core.test.implementation.js +3 -7
  93. package/dist/common/src/lib/index.js +13 -14
  94. package/dist/common/src/lib/pmProxy.js +37 -16
  95. package/dist/common/src/lib/pmProxy.test/adapter.js +20 -4
  96. package/dist/common/src/lib/pmProxy.test/implementation.js +93 -34
  97. package/dist/common/src/lib/pmProxy.test/mockPMBase.js +9 -0
  98. package/dist/common/src/lib/pmProxy.test/specification.js +3 -0
  99. package/dist/common/src/mothership/index.js +5 -0
  100. package/dist/common/src/mothership/test.js +44 -25
  101. package/dist/common/src/types/features.js +34 -0
  102. package/dist/common/src/utils/api.js +57 -27
  103. package/dist/common/src/utils/featureUtils.js +29 -0
  104. package/dist/common/src/utils/logFiles.js +51 -0
  105. package/dist/common/src/utils/makePrompt.js +116 -0
  106. package/dist/common/src/web.html.js +2 -6
  107. package/dist/common/testeranto.config.js +54 -24
  108. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  109. package/dist/module/design-editor/DesignEditor.js +203 -0
  110. package/dist/module/design-editor/index.js +2 -0
  111. package/dist/module/design-editor/server.js +92 -0
  112. package/dist/module/design-editor/types.js +1 -0
  113. package/dist/module/src/App.js +19 -17
  114. package/dist/module/src/Node.js +4 -8
  115. package/dist/module/src/PM/PM_WithEslintAndTsc.js +11 -35
  116. package/dist/module/src/PM/base.js +1 -1
  117. package/dist/module/src/PM/main.js +577 -109
  118. package/dist/module/src/PM/node.js +4 -2
  119. package/dist/module/src/PM/nodeSidecar.js +1 -0
  120. package/dist/module/src/PM/pure.js +20 -57
  121. package/dist/module/src/PM/pureSidecar.js +1 -1
  122. package/dist/module/src/PM/types.js +1 -0
  123. package/dist/module/src/PM/web.js +7 -4
  124. package/dist/module/src/Pure.js +1 -1
  125. package/dist/module/src/Pure.test.js +49 -79
  126. package/dist/module/src/ReportServer.js +8 -2
  127. package/dist/module/src/build.js +26 -38
  128. package/dist/module/src/components/DesignEditorPage.js +132 -0
  129. package/dist/module/src/components/SunriseAnimation.test/interface.js +32 -1
  130. package/dist/module/src/components/SunriseAnimation.test/types.js +1 -0
  131. package/dist/module/src/components/TestStatusBadge.js +1 -21
  132. package/dist/module/src/components/pure/AppFrame.js +32 -0
  133. package/dist/module/src/components/pure/AppFrame.test/implementation.js +57 -0
  134. package/dist/module/src/components/pure/AppFrame.test/index.js +9 -0
  135. package/dist/module/src/components/pure/AppFrame.test/specification.js +21 -0
  136. package/dist/module/src/components/pure/AppFrame.test/types.js +2 -0
  137. package/dist/module/src/components/pure/FeaturesReporterView.js +16 -0
  138. package/dist/module/src/components/pure/FeaturesReporterView.test/implementation.js +81 -0
  139. package/dist/module/src/components/pure/FeaturesReporterView.test/index.js +9 -0
  140. package/dist/module/src/components/pure/FeaturesReporterView.test/specification.js +23 -0
  141. package/dist/module/src/components/pure/FeaturesReporterView.test/types.js +1 -0
  142. package/dist/module/src/components/pure/ModalContent.js +79 -0
  143. package/dist/module/src/components/pure/ModalContent.test/implementation.js +32 -0
  144. package/dist/module/src/components/pure/ModalContent.test/index.js +53 -0
  145. package/dist/module/src/components/pure/ModalContent.test/specification.js +15 -0
  146. package/dist/module/src/components/pure/ModalContent.test/types.js +3 -0
  147. package/dist/module/src/{NavBar.js → components/pure/NavBar.js} +10 -11
  148. package/dist/module/src/components/pure/ProcessManager.js +75 -0
  149. package/dist/module/src/components/pure/ProcessManagerView.js +200 -0
  150. package/dist/module/src/components/pure/ProjectPageView.js +54 -77
  151. package/dist/module/src/components/pure/ProjectPageView.test/implementation.js +167 -54
  152. package/dist/module/src/components/pure/ProjectPageView.test/index.js +5 -1
  153. package/dist/module/src/components/pure/ProjectPageView.test/specification.js +15 -2
  154. package/dist/module/src/components/pure/ProjectPageView.test/types.js +2 -0
  155. package/dist/module/src/components/pure/ProjectsPageView.js +21 -14
  156. package/dist/module/src/components/pure/SettingsButton.js +6 -0
  157. package/dist/module/src/components/pure/SingleProcessView.js +214 -0
  158. package/dist/module/src/components/pure/TestPageView.js +470 -142
  159. package/dist/module/src/components/pure/TestPageView.test/implementation.js +121 -0
  160. package/dist/module/src/components/pure/TestPageView.test/index.js +10 -0
  161. package/dist/module/src/components/pure/TestPageView.test/specification.js +22 -0
  162. package/dist/module/src/components/pure/TestPageView.test/types.js +3 -0
  163. package/dist/module/src/components/pure/ThemeCard.js +8 -0
  164. package/dist/module/src/components/stateful/FeaturesReporter.js +22 -0
  165. package/dist/module/src/components/stateful/FileTree.js +33 -0
  166. package/dist/module/src/components/stateful/ProcessManagerPage.js +75 -0
  167. package/dist/module/src/components/stateful/ProjectPage.js +7 -6
  168. package/dist/module/src/components/stateful/ProjectsPage.js +32 -6
  169. package/dist/module/src/components/stateful/SettingsPage.js +35 -0
  170. package/dist/module/src/components/stateful/SingleProcessPage.js +110 -0
  171. package/dist/module/src/components/stateful/TestPage.js +123 -13
  172. package/dist/module/src/components/stateful/TextEditorPage.js +117 -0
  173. package/dist/module/src/defaultConfig.js +1 -0
  174. package/dist/module/src/esbuildConfigs/inputFilesPlugin.js +3 -4
  175. package/dist/module/src/esbuildConfigs/web.js +1 -1
  176. package/dist/module/src/lib/BaseSuite.js +7 -3
  177. package/dist/module/src/lib/BaseSuite.test/mock.js +17 -41
  178. package/dist/module/src/lib/BaseSuite.test/test.js +33 -42
  179. package/dist/module/src/lib/Sidecar.js +1 -0
  180. package/dist/module/src/lib/abstractBase.js +40 -13
  181. package/dist/module/src/lib/baseBuilder.test/baseBuilder.test.adapter.js +12 -12
  182. package/dist/module/src/lib/baseBuilder.test/baseBuilder.test.implementation.js +15 -13
  183. package/dist/module/src/lib/baseBuilder.test/baseBuilder.test.mock.js +28 -17
  184. package/dist/module/src/lib/baseBuilder.test/baseBuilder.test.pure.js +1 -1
  185. package/dist/module/src/lib/basebuilder.js +29 -35
  186. package/dist/module/src/lib/classBuilder.js +5 -3
  187. package/dist/module/src/lib/core.js +3 -6
  188. package/dist/module/src/lib/core.test/MockCore.js +0 -14
  189. package/dist/module/src/lib/core.test/core.test.adapter.js +2 -9
  190. package/dist/module/src/lib/core.test/core.test.implementation.js +3 -7
  191. package/dist/module/src/lib/index.js +13 -14
  192. package/dist/module/src/lib/pmProxy.js +37 -16
  193. package/dist/module/src/lib/pmProxy.test/adapter.js +20 -4
  194. package/dist/module/src/lib/pmProxy.test/implementation.js +93 -34
  195. package/dist/module/src/lib/pmProxy.test/mockPMBase.js +9 -0
  196. package/dist/module/src/lib/pmProxy.test/specification.js +3 -0
  197. package/dist/module/src/mothership/index.js +5 -0
  198. package/dist/module/src/mothership/test.js +44 -25
  199. package/dist/module/src/types/features.js +31 -0
  200. package/dist/module/src/utils/api.js +56 -25
  201. package/dist/module/src/utils/featureUtils.js +24 -0
  202. package/dist/module/src/utils/logFiles.js +46 -0
  203. package/dist/module/src/utils/makePrompt.js +109 -0
  204. package/dist/module/src/web.html.js +2 -6
  205. package/dist/module/testeranto.config.js +54 -24
  206. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  207. package/dist/prebuild/App.css +53 -80
  208. package/dist/prebuild/App.js +15520 -4397
  209. package/dist/prebuild/ReportServer.mjs +104 -6
  210. package/dist/prebuild/build.mjs +95 -108
  211. package/dist/prebuild/mothership/index.mjs +5 -0
  212. package/dist/prebuild/run.mjs +704 -221
  213. package/dist/types/design-editor/DesignEditor.d.ts +18 -0
  214. package/dist/types/design-editor/server.d.ts +1 -0
  215. package/dist/types/src/App.d.ts +1 -0
  216. package/dist/types/src/PM/index.d.ts +1 -1
  217. package/dist/types/src/PM/main.d.ts +37 -3
  218. package/dist/types/src/PM/pure.d.ts +10 -7
  219. package/dist/types/src/PM/web.d.ts +1 -1
  220. package/dist/types/src/Pure.test.d.ts +13 -1
  221. package/dist/types/src/Types.d.ts +1 -0
  222. package/dist/types/src/components/DesignEditorPage.d.ts +1 -0
  223. package/dist/types/src/components/SunriseAnimation.d.ts +5 -0
  224. package/dist/types/src/components/SunriseAnimation.test/interface.d.ts +11 -0
  225. package/dist/types/src/components/SunriseAnimation.test/types.d.ts +39 -0
  226. package/dist/types/src/components/pure/AppFrame.d.ts +11 -0
  227. package/dist/types/src/components/pure/AppFrame.test/implementation.d.ts +3 -0
  228. package/dist/types/src/components/pure/AppFrame.test/index.d.ts +5 -0
  229. package/dist/types/src/components/pure/AppFrame.test/specification.d.ts +3 -0
  230. package/dist/types/src/components/pure/AppFrame.test/types.d.ts +33 -0
  231. package/dist/types/src/components/pure/FeaturesReporterView.d.ts +7 -0
  232. package/dist/types/src/components/pure/FeaturesReporterView.test/implementation.d.ts +3 -0
  233. package/dist/types/src/components/pure/FeaturesReporterView.test/index.d.ts +2 -0
  234. package/dist/types/src/components/pure/FeaturesReporterView.test/specification.d.ts +3 -0
  235. package/dist/types/src/components/pure/FeaturesReporterView.test/types.d.ts +54 -0
  236. package/dist/types/src/components/pure/ModalContent.d.ts +7 -0
  237. package/dist/types/src/components/pure/ModalContent.test/implementation.d.ts +3 -0
  238. package/dist/types/src/components/pure/ModalContent.test/index.d.ts +3 -0
  239. package/dist/types/src/components/pure/ModalContent.test/specification.d.ts +3 -0
  240. package/dist/types/src/components/pure/ModalContent.test/types.d.ts +45 -0
  241. package/dist/types/src/{NavBar.d.ts → components/pure/NavBar.d.ts} +4 -0
  242. package/dist/types/src/components/pure/ProcessManager.d.ts +8 -0
  243. package/dist/types/src/components/pure/ProcessManagerView.d.ts +20 -0
  244. package/dist/types/src/components/pure/ProjectPageView.d.ts +7 -7
  245. package/dist/types/src/components/pure/ProjectPageView.test/index.d.ts +1 -2
  246. package/dist/types/src/components/pure/ProjectPageView.test/types.d.ts +29 -11
  247. package/dist/types/src/components/pure/ProjectsPageView.d.ts +29 -0
  248. package/dist/types/src/components/pure/SettingsButton.d.ts +2 -0
  249. package/dist/types/src/components/pure/SingleProcessView.d.ts +0 -0
  250. package/dist/types/src/components/pure/TestPageView.d.ts +15 -0
  251. package/dist/types/src/components/pure/TestPageView.test/implementation.d.ts +12 -0
  252. package/dist/types/src/components/pure/TestPageView.test/index.d.ts +3 -0
  253. package/dist/types/src/components/pure/TestPageView.test/specification.d.ts +11 -0
  254. package/dist/types/src/components/pure/TestPageView.test/types.d.ts +65 -0
  255. package/dist/types/src/components/pure/ThemeCard.d.ts +9 -0
  256. package/dist/types/src/components/stateful/FeaturesReporter.d.ts +2 -0
  257. package/dist/types/src/components/stateful/FileTree.d.ts +8 -0
  258. package/dist/types/src/components/stateful/ProcessManagerPage.d.ts +2 -0
  259. package/dist/types/src/components/stateful/ProjectPage.d.ts +1 -0
  260. package/dist/types/src/components/stateful/ProjectsPage.d.ts +1 -0
  261. package/dist/types/src/components/stateful/SettingsPage.d.ts +2 -0
  262. package/dist/types/src/components/stateful/SingleProcessPage.d.ts +2 -0
  263. package/dist/types/src/components/stateful/TestPage.d.ts +1 -0
  264. package/dist/types/src/components/stateful/TextEditorPage.d.ts +1 -0
  265. package/dist/types/src/lib/BaseSuite.test/mock.d.ts +3 -3
  266. package/dist/types/src/lib/abstractBase.d.ts +1 -1
  267. package/dist/types/src/lib/abstractBase.test/MockGiven.d.ts +1 -1
  268. package/dist/types/src/lib/baseBuilder.test/baseBuilder.test.pure.d.ts +1 -1
  269. package/dist/types/src/lib/basebuilder.d.ts +1 -1
  270. package/dist/types/src/lib/index.d.ts +8 -8
  271. package/dist/types/src/lib/pmProxy.test/mockPMBase.d.ts +1 -1
  272. package/dist/types/src/types/features.d.ts +7 -0
  273. package/dist/types/src/utils/api.d.ts +1 -5
  274. package/dist/types/src/utils/featureUtils.d.ts +6 -0
  275. package/dist/types/src/utils/logFiles.d.ts +71 -0
  276. package/dist/types/src/utils/makePrompt.d.ts +2 -0
  277. package/dist/types/src/web.html.d.ts +1 -1
  278. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  279. package/docs/index.md +17 -0
  280. package/docs/test-page-components.md +91 -0
  281. package/docs/testing.prompt.txt +1 -3
  282. package/index.d.ts +38 -13
  283. package/marketing.md +166 -0
  284. package/package.json +38 -11
  285. package/src/App.tsx +22 -25
  286. package/src/Node.ts +6 -9
  287. package/src/PM/PM_WithEslintAndTsc.ts +16 -97
  288. package/src/PM/__tests__/nodeSidecar.testeranto.ts +2 -0
  289. package/src/PM/base.ts +1 -3
  290. package/src/PM/index.ts +1 -1
  291. package/src/PM/main.ts +673 -128
  292. package/src/PM/node.ts +5 -2
  293. package/src/PM/nodeSidecar.ts +1 -0
  294. package/src/PM/pure.ts +28 -72
  295. package/src/PM/pureSidecar.ts +1 -1
  296. package/src/PM/types.ts +0 -0
  297. package/src/PM/web.ts +9 -4
  298. package/src/Pure.test.ts +66 -101
  299. package/src/Pure.ts +1 -1
  300. package/src/README.md +85 -0
  301. package/src/ReportServer.ts +10 -3
  302. package/src/Types.ts +1 -0
  303. package/src/app.scss +169 -0
  304. package/src/build.ts +33 -55
  305. package/src/components/DesignEditorPage.tsx +169 -0
  306. package/src/components/{pure/ProjectPageView.test/index.ts → SunriseAnimation.test/index.tsx} +7 -4
  307. package/src/components/SunriseAnimation.test/interface.ts +49 -0
  308. package/src/components/SunriseAnimation.test/types.ts +53 -0
  309. package/src/components/TestStatusBadge.tsx +2 -23
  310. package/src/components/pure/AppFrame.test/implementation.tsx +72 -0
  311. package/src/components/pure/AppFrame.test/index.tsx +22 -0
  312. package/src/components/pure/AppFrame.test/specification.ts +35 -0
  313. package/src/components/pure/AppFrame.test/types.ts +65 -0
  314. package/src/components/pure/AppFrame.tsx +134 -0
  315. package/src/components/pure/FeaturesReporterView.test/implementation.tsx +106 -0
  316. package/src/components/pure/FeaturesReporterView.test/index.tsx +18 -0
  317. package/src/components/pure/FeaturesReporterView.test/specification.ts +39 -0
  318. package/src/components/pure/FeaturesReporterView.test/types.ts +77 -0
  319. package/src/components/pure/FeaturesReporterView.tsx +37 -0
  320. package/src/components/pure/ModalContent.test/implementation.tsx +45 -0
  321. package/src/components/pure/ModalContent.test/index.tsx +67 -0
  322. package/src/components/pure/ModalContent.test/specification.ts +27 -0
  323. package/src/components/pure/ModalContent.test/types.ts +72 -0
  324. package/src/components/pure/ModalContent.tsx +182 -0
  325. package/src/{NavBar.tsx → components/pure/NavBar.tsx} +31 -15
  326. package/src/components/pure/ProcessManager.tsx +117 -0
  327. package/src/components/pure/ProcessManagerView.tsx +414 -0
  328. package/src/components/pure/ProjectPageView.test/implementation.tsx +186 -57
  329. package/src/components/pure/ProjectPageView.test/index.tsx +18 -0
  330. package/src/components/pure/ProjectPageView.test/specification.ts +15 -2
  331. package/src/components/pure/ProjectPageView.test/types.ts +57 -13
  332. package/src/components/pure/ProjectPageView.tsx +155 -121
  333. package/src/components/pure/ProjectsPageView.tsx +73 -32
  334. package/src/components/pure/SettingsButton.md +1 -0
  335. package/src/components/pure/SettingsButton.tsx +11 -0
  336. package/src/components/pure/SingleProcessView.tsx +235 -0
  337. package/src/components/pure/TestPageView.test/implementation.ts +162 -0
  338. package/src/components/pure/TestPageView.test/index.tsx +20 -0
  339. package/src/components/pure/TestPageView.test/specification.ts +58 -0
  340. package/src/components/pure/TestPageView.test/types.ts +92 -0
  341. package/src/components/pure/TestPageView.tsx +1009 -299
  342. package/src/components/pure/ThemeCard.tsx +34 -0
  343. package/src/components/stateful/FeaturesReporter.tsx +24 -0
  344. package/src/components/stateful/FileTree.tsx +66 -0
  345. package/src/components/stateful/ProcessManagerPage.tsx +108 -0
  346. package/src/components/stateful/ProjectPage.tsx +10 -8
  347. package/src/components/stateful/ProjectsPage.tsx +36 -7
  348. package/src/components/stateful/SettingsPage.tsx +82 -0
  349. package/src/components/stateful/SingleProcessPage.tsx +155 -0
  350. package/src/components/stateful/TestPage.tsx +147 -30
  351. package/src/components/stateful/TextEditorPage.tsx +170 -0
  352. package/src/defaultConfig.ts +1 -0
  353. package/src/esbuildConfigs/inputFilesPlugin.ts +3 -4
  354. package/src/esbuildConfigs/web.ts +2 -1
  355. package/src/lib/BaseSuite.test/mock.ts +21 -68
  356. package/src/lib/BaseSuite.test/test.ts +39 -65
  357. package/src/lib/BaseSuite.ts +9 -3
  358. package/src/lib/Sidecar.ts +2 -0
  359. package/src/lib/abstractBase.test/MockGiven.ts +1 -1
  360. package/src/lib/abstractBase.ts +47 -20
  361. package/src/lib/baseBuilder.test/baseBuilder.test.adapter.ts +14 -13
  362. package/src/lib/baseBuilder.test/baseBuilder.test.implementation.ts +17 -14
  363. package/src/lib/baseBuilder.test/baseBuilder.test.mock.ts +27 -17
  364. package/src/lib/baseBuilder.test/baseBuilder.test.pure.ts +1 -1
  365. package/src/lib/basebuilder.ts +48 -54
  366. package/src/lib/classBuilder.ts +11 -10
  367. package/src/lib/core.test/MockCore.ts +0 -23
  368. package/src/lib/core.test/core.test.adapter.ts +6 -12
  369. package/src/lib/core.test/core.test.implementation.ts +7 -10
  370. package/src/lib/core.ts +5 -20
  371. package/src/lib/index.ts +28 -27
  372. package/src/lib/pmProxy.test/adapter.ts +18 -4
  373. package/src/lib/pmProxy.test/implementation.ts +130 -46
  374. package/src/lib/pmProxy.test/mockPMBase.ts +12 -1
  375. package/src/lib/pmProxy.test/specification.ts +11 -0
  376. package/src/lib/pmProxy.ts +42 -17
  377. package/src/lib/types.ts +2 -0
  378. package/src/mothership/index.ts +6 -0
  379. package/src/mothership/test.ts +53 -26
  380. package/src/style.md +2 -0
  381. package/src/style.scss +3 -486
  382. package/src/templates/frontpage.html +331 -0
  383. package/src/templates/frontpage.md +79 -0
  384. package/src/themes.scss +48 -16
  385. package/src/types/features.ts +38 -0
  386. package/src/utils/api.ts +66 -33
  387. package/src/utils/featureUtils.tsx +42 -0
  388. package/src/utils/logFiles.ts +60 -0
  389. package/src/utils/makePrompt.ts +149 -0
  390. package/src/web.html.ts +6 -6
  391. package/stargazers.txt +15 -0
  392. package/stargzers.js +68 -0
  393. package/testeranto/App.css +53 -80
  394. package/testeranto/App.js +15520 -4397
  395. package/testeranto/bundles/node/core/chunk-4CSH4UJE.mjs +872 -0
  396. package/testeranto/bundles/node/core/chunk-4JTDLQVA.mjs +253 -0
  397. package/testeranto/bundles/node/core/chunk-C3APFDUV.mjs +70 -0
  398. package/testeranto/bundles/node/core/src/lib/BaseSuite.test/node.test.mjs +295 -0
  399. package/testeranto/bundles/node/core/src/lib/baseBuilder.test/baseBuilder.test.node.mjs +243 -0
  400. package/testeranto/bundles/node/core/src/lib/classBuilder.test/classBuilder.test.mjs +411 -0
  401. package/testeranto/bundles/node/core/src/lib/core.test/core.test.mjs +494 -0
  402. package/testeranto/bundles/node/core/src/lib/pmProxy.test/index.mjs +4755 -0
  403. package/testeranto/bundles/pure/core/chunk-62UVCSQC.mjs +1022 -0
  404. package/testeranto/bundles/pure/core/src/Pure.test.mjs +410 -0
  405. package/testeranto/bundles/pure/core/src/lib/BaseSuite.test/pure.test.mjs +352 -0
  406. package/testeranto/bundles/pure/core/src/lib/baseBuilder.test/baseBuilder.test.pure.mjs +241 -0
  407. package/testeranto/bundles/web/core/src/components/pure/FeaturesReporterView.test/index.html +15 -0
  408. package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.html +1 -5
  409. package/testeranto/bundles/web/core/src/components/pure/TestPageView.test/index.html +15 -0
  410. package/testeranto/bundles/web/core/src/lib/BaseSuite.test/web.test.html +15 -0
  411. package/testeranto/bundles/web/core/src/lib/baseBuilder.test/baseBuilder.test.web.html +15 -0
  412. package/testeranto/metafiles/node/core.json +2906 -0
  413. package/testeranto/metafiles/pure/core.json +860 -0
  414. package/testeranto/metafiles/web/core.json +546 -0
  415. package/testeranto/reports/core/config.json +103 -2
  416. package/testeranto/reports/core/src/Pure.test/pure/exit.log +0 -0
  417. package/testeranto/reports/core/src/Pure.test/pure/lint_errors.txt +0 -0
  418. package/testeranto/reports/core/src/Pure.test/pure/message.txt +17 -0
  419. package/testeranto/reports/core/src/Pure.test/pure/prompt.txt +14 -0
  420. package/testeranto/reports/core/src/Pure.test/pure/type_errors.txt +71 -0
  421. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/debug.log +0 -0
  422. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/error.log +3 -0
  423. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/exit.log +1 -0
  424. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/info.log +0 -0
  425. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/warn.log +0 -0
  426. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/debug.log +0 -0
  427. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/error.log +3 -0
  428. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/exit.log +1 -0
  429. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/info.log +0 -0
  430. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/warn.log +0 -0
  431. package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/debug.log +0 -0
  432. package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/error.log +3 -0
  433. package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/exit.log +1 -0
  434. package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/info.log +0 -0
  435. package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/warn.log +0 -0
  436. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/exit.log +1 -0
  437. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/lint_errors.txt +0 -0
  438. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/message.txt +17 -0
  439. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/prompt.txt +14 -0
  440. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/stderr.log +0 -0
  441. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/stdout.log +0 -0
  442. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/tests.json +31 -0
  443. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/type_errors.txt +61 -0
  444. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/exit.log +0 -0
  445. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/lint_errors.txt +0 -0
  446. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/message.txt +17 -0
  447. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/prompt.txt +15 -0
  448. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/type_errors.txt +61 -0
  449. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/debug.log +0 -0
  450. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/error.log +3 -0
  451. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/exit.log +1 -0
  452. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/info.log +0 -0
  453. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/warn.log +0 -0
  454. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/exit.log +1 -0
  455. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/lint_errors.txt +10 -0
  456. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/message.txt +17 -0
  457. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/prompt.txt +17 -0
  458. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/stderr.log +0 -0
  459. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/stdout.log +6 -0
  460. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/suite-0/given-testInitialization/then-0/butThen/hello.txt +1 -0
  461. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/suite-0/given-testInitialization/then-1/butThen/artifact_test.txt +1 -0
  462. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/tests.json +71 -0
  463. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/type_errors.txt +42 -0
  464. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/exit.log +0 -0
  465. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/lint_errors.txt +10 -0
  466. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/message.txt +17 -0
  467. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/prompt.txt +17 -0
  468. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/type_errors.txt +42 -0
  469. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/debug.log +0 -0
  470. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/error.log +3 -0
  471. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/exit.log +1 -0
  472. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/info.log +0 -0
  473. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/warn.log +0 -0
  474. package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/exit.log +1 -0
  475. package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/lint_errors.txt +0 -0
  476. package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/message.txt +17 -0
  477. package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/prompt.txt +17 -0
  478. package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/stderr.log +0 -0
  479. package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/stdout.log +619 -0
  480. package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/tests.json +165 -0
  481. package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/type_errors.txt +88 -0
  482. package/testeranto/reports/core/src/lib/core.test/core.test/node/exit.log +1 -0
  483. package/testeranto/reports/core/src/lib/core.test/core.test/node/lint_errors.txt +21 -0
  484. package/testeranto/reports/core/src/lib/core.test/core.test/node/message.txt +17 -0
  485. package/testeranto/reports/core/src/lib/core.test/core.test/node/prompt.txt +19 -0
  486. package/testeranto/reports/core/src/lib/core.test/core.test/node/stderr.log +0 -0
  487. package/testeranto/reports/core/src/lib/core.test/core.test/node/stdout.log +0 -0
  488. package/testeranto/reports/core/src/lib/core.test/core.test/node/type_errors.txt +45 -0
  489. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/exit.log +1 -0
  490. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/lint_errors.txt +15 -0
  491. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/message.txt +17 -0
  492. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/prompt.txt +17 -0
  493. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stderr.log +88 -0
  494. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stdout.log +10 -0
  495. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/tests.json +152 -0
  496. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/type_errors.txt +52 -0
  497. package/testeranto/reports/core/summary.json +74 -5
  498. package/testeranto/reportsweb_build_errors +546 -0
  499. package/testeranto.config.ts +58 -25
  500. package/tsc.log +378 -211
  501. package/tsconfig.common.json +4 -2
  502. package/tsconfig.json +9 -6
  503. package/tsconfig.module.json +3 -2
  504. package/tsconfig.types.json +3 -1
  505. package/dist/common/src/components/pure/ProjectPageView.test/adapter.js +0 -20
  506. package/dist/common/src/lib/dailyAnimation.js +0 -130
  507. package/dist/module/src/Footer.js +0 -5
  508. package/dist/module/src/ProjectPage.js +0 -319
  509. package/dist/module/src/ProjectsPage.js +0 -1
  510. package/dist/module/src/SettingsButton.js +0 -157
  511. package/dist/module/src/TestPage.js +0 -271
  512. package/dist/module/src/TestReport.js +0 -368
  513. package/dist/module/src/components/pure/ProjectPageView.test/adapter.js +0 -17
  514. package/dist/module/src/lib/dailyAnimation.js +0 -130
  515. package/dist/types/src/components/pure/ProjectPageView.test/adapter.d.ts +0 -3
  516. package/dist/types/testeranto.config.d.ts +0 -3
  517. package/docs/testing.ai.txt +0 -106
  518. package/docs.html +0 -572
  519. package/example.css +0 -351
  520. package/index.html +0 -284
  521. package/scripts/compile-docs.js +0 -140
  522. package/src/App.scss +0 -132
  523. package/src/Footer.tsx +0 -8
  524. package/src/Project.scss +0 -1
  525. package/src/ProjectPage.tsx +0 -459
  526. package/src/ProjectsPage.tsx +0 -1
  527. package/src/ReportApp.scss +0 -1
  528. package/src/SettingsButton.tsx +0 -268
  529. package/src/TestPage.tsx +0 -476
  530. package/src/TestReport.scss +0 -24
  531. package/src/TestReport.tsx +0 -411
  532. package/src/components/pure/ProjectPageView.test/adapter.ts +0 -21
  533. package/src/fonts.scss +0 -55
  534. package/src/lib/dailyAnimation.ts +0 -147
  535. package/style.css +0 -12156
  536. package/testeranto/bundles/node/core/metafile.json +0 -8
  537. package/testeranto/bundles/pure/core/metafile.json +0 -8
  538. package/testeranto/bundles/web/core/metafile.json +0 -15086
  539. package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.mjs +0 -39991
  540. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/lint_errors.txt +0 -18
  541. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/logs.txt +0 -59
  542. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/message.txt +0 -2
  543. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/prompt.txt +0 -27
  544. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/suite-0/given-basicRender/then-0/butThen/happyPath.png +0 -0
  545. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/type_errors.txt +0 -50
  546. /package/dist/types/src/{lib/dailyAnimation.d.ts → PM/types.d.ts} +0 -0
@@ -1,4 +1,8 @@
1
1
  "use strict";
2
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
3
+ /* eslint-disable no-async-promise-executor */
4
+ /* eslint-disable @typescript-eslint/no-explicit-any */
5
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
6
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
7
  if (k2 === undefined) k2 = k;
4
8
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -37,10 +41,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
41
  };
38
42
  Object.defineProperty(exports, "__esModule", { value: true });
39
43
  exports.PM_Main = void 0;
40
- /* eslint-disable @typescript-eslint/ban-ts-comment */
41
- /* eslint-disable no-async-promise-executor */
42
- /* eslint-disable @typescript-eslint/no-explicit-any */
43
- /* eslint-disable @typescript-eslint/no-unused-vars */
44
44
  const node_child_process_1 = require("node:child_process");
45
45
  const ansi_colors_1 = __importDefault(require("ansi-colors"));
46
46
  const net_1 = __importDefault(require("net"));
@@ -49,6 +49,10 @@ const path_1 = __importDefault(require("path"));
49
49
  const puppeteer_core_1 = __importDefault(require("puppeteer-core"));
50
50
  const ansi_colors_2 = __importDefault(require("ansi-colors"));
51
51
  const node_crypto_1 = __importDefault(require("node:crypto"));
52
+ const ws_1 = require("ws");
53
+ const http_1 = __importDefault(require("http"));
54
+ const url_1 = __importDefault(require("url"));
55
+ const mime_types_1 = __importDefault(require("mime-types"));
52
56
  const utils_1 = require("../utils");
53
57
  const queue_js_1 = require("../utils/queue.js");
54
58
  const PM_WithEslintAndTsc_js_1 = require("./PM_WithEslintAndTsc.js");
@@ -56,6 +60,87 @@ const changes = {};
56
60
  const fileHashes = {};
57
61
  const files = {};
58
62
  const screenshots = {};
63
+ function runtimeLogs(runtime, reportDest) {
64
+ const safeDest = reportDest || `testeranto/reports/default_${Date.now()}`;
65
+ try {
66
+ if (!fs_1.default.existsSync(safeDest)) {
67
+ fs_1.default.mkdirSync(safeDest, { recursive: true });
68
+ }
69
+ if (runtime === "node") {
70
+ return {
71
+ stdout: fs_1.default.createWriteStream(`${safeDest}/stdout.log`),
72
+ stderr: fs_1.default.createWriteStream(`${safeDest}/stderr.log`),
73
+ exit: fs_1.default.createWriteStream(`${safeDest}/exit.log`),
74
+ };
75
+ }
76
+ else if (runtime === "web") {
77
+ return {
78
+ info: fs_1.default.createWriteStream(`${safeDest}/info.log`),
79
+ warn: fs_1.default.createWriteStream(`${safeDest}/warn.log`),
80
+ error: fs_1.default.createWriteStream(`${safeDest}/error.log`),
81
+ debug: fs_1.default.createWriteStream(`${safeDest}/debug.log`),
82
+ exit: fs_1.default.createWriteStream(`${safeDest}/exit.log`),
83
+ };
84
+ }
85
+ else if (runtime === "pure") {
86
+ return {
87
+ exit: fs_1.default.createWriteStream(`${safeDest}/exit.log`),
88
+ };
89
+ }
90
+ else {
91
+ throw `unknown runtime: ${runtime}`;
92
+ }
93
+ }
94
+ catch (e) {
95
+ console.error(`Failed to create log streams in ${safeDest}:`, e);
96
+ throw e;
97
+ }
98
+ }
99
+ function createLogStreams(reportDest, runtime) {
100
+ // Create directory if it doesn't exist
101
+ if (!fs_1.default.existsSync(reportDest)) {
102
+ fs_1.default.mkdirSync(reportDest, { recursive: true });
103
+ }
104
+ const streams = runtimeLogs(runtime, reportDest);
105
+ // const streams = {
106
+ // exit: fs.createWriteStream(`${reportDest}/exit.log`),
107
+ const safeDest = reportDest || `testeranto/reports/default_${Date.now()}`;
108
+ try {
109
+ if (!fs_1.default.existsSync(safeDest)) {
110
+ fs_1.default.mkdirSync(safeDest, { recursive: true });
111
+ }
112
+ const streams = runtimeLogs(runtime, safeDest);
113
+ // const streams = {
114
+ // exit: fs.createWriteStream(`${safeDest}/exit.log`),
115
+ // ...(runtime === "node" || runtime === "pure"
116
+ // ? {
117
+ // stdout: fs.createWriteStream(`${safeDest}/stdout.log`),
118
+ // stderr: fs.createWriteStream(`${safeDest}/stderr.log`),
119
+ // }
120
+ // : {
121
+ // info: fs.createWriteStream(`${safeDest}/info.log`),
122
+ // warn: fs.createWriteStream(`${safeDest}/warn.log`),
123
+ // error: fs.createWriteStream(`${safeDest}/error.log`),
124
+ // debug: fs.createWriteStream(`${safeDest}/debug.log`),
125
+ // }),
126
+ // };
127
+ return Object.assign(Object.assign({}, streams), { closeAll: () => {
128
+ Object.values(streams).forEach((stream) => !stream.closed && stream.close());
129
+ }, writeExitCode: (code, error) => {
130
+ if (error) {
131
+ streams.exit.write(`Error: ${error.message}\n`);
132
+ if (error.stack) {
133
+ streams.exit.write(`Stack Trace:\n${error.stack}\n`);
134
+ }
135
+ }
136
+ streams.exit.write(`${code}\n`);
137
+ }, exit: streams.exit });
138
+ }
139
+ catch (e) {
140
+ console.error(`Failed to create log streams in ${safeDest}:`, e);
141
+ throw e;
142
+ }
143
+ }
59
144
  async function fileHash(filePath, algorithm = "md5") {
60
145
  return new Promise((resolve, reject) => {
61
146
  const hash = node_crypto_1.default.createHash(algorithm);
@@ -74,10 +159,13 @@ async function fileHash(filePath, algorithm = "md5") {
74
159
  }
75
160
  const statusMessagePretty = (failures, test, runtime) => {
76
161
  if (failures === 0) {
77
- console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`${runtime} > ${test} completed successfully`)));
162
+ console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`${runtime} > ${test}`)));
163
+ }
164
+ else if (failures > 0) {
165
+ console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${runtime} > ${test} failed ${failures} times (exit code: ${failures})`)));
78
166
  }
79
167
  else {
80
- console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${runtime} > ${test} failed ${failures} times`)));
168
+ console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${runtime} > ${test} crashed (exit code: -1)`)));
81
169
  }
82
170
  };
83
171
  async function writeFileAndCreateDir(filePath, data) {
@@ -119,6 +207,12 @@ async function pollForFile(path, timeout = 2000) {
119
207
  class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
120
208
  constructor(configs, name, mode) {
121
209
  super(configs, name, mode);
210
+ this.logStreams = {};
211
+ this.sidecars = {};
212
+ this.clients = new Set();
213
+ this.runningProcesses = new Map();
214
+ this.allProcesses = new Map();
215
+ this.processLogs = new Map();
122
216
  this.getRunnables = (tests, testName, payload = {
123
217
  nodeEntryPoints: {},
124
218
  nodeEntryPointSidecars: {},
@@ -176,7 +270,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
176
270
  }
177
271
  else {
178
272
  this.queue.push(src);
179
- return;
273
+ return [Math.random(), argz];
180
274
  }
181
275
  }
182
276
  else {
@@ -209,8 +303,20 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
209
303
  // }
210
304
  // })
211
305
  // );
306
+ const logs = createLogStreams(reportDest, "pure");
212
307
  try {
213
308
  await Promise.resolve(`${`${builtfile}?cacheBust=${Date.now()}`}`).then(s => __importStar(require(s))).then((module) => {
309
+ // Override console methods to redirect logs
310
+ // Only override stdout/stderr methods for pure runtime
311
+ const originalConsole = Object.assign({}, console);
312
+ // console.log = (...args) => {
313
+ // logs.stdout.write(args.join(" ") + "\n");
314
+ // originalConsole.log(...args);
315
+ // };
316
+ // console.error = (...args) => {
317
+ // logs.stderr.write(args.join(" ") + "\n");
318
+ // originalConsole.error(...args);
319
+ // };
214
320
  return module.default
215
321
  .then((defaultModule) => {
216
322
  defaultModule
@@ -222,7 +328,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
222
328
  this.bddTestIsNowDone(src, results.fails);
223
329
  })
224
330
  .catch((e1) => {
225
- console.log(ansi_colors_2.default.red(`launchPure - ${src} errored with: ${e1}`));
331
+ console.log(ansi_colors_2.default.red(`launchPure - ${src} errored with: ${e1.stack}`));
226
332
  this.bddTestIsNowDone(src, -1);
227
333
  statusMessagePretty(-1, src, "pure");
228
334
  });
@@ -231,8 +337,9 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
231
337
  // });
232
338
  })
233
339
  .catch((e2) => {
234
- console.log(ansi_colors_1.default.red(`pure ! ${src} failed to execute. No "tests.json" file was generated. Check ${reportDest}/logs.txt for more info`));
235
- this.writeFileSync(`${reportDest}/logs.txt`, e2.stack, src);
340
+ console.log(ansi_colors_1.default.red(`pure ! ${src} failed to execute. No "tests.json" file was generated. Check the logs for more info`));
341
+ logs.exit.write(e2.stack);
342
+ logs.exit.write(-1);
236
343
  this.bddTestIsNowDone(src, -1);
237
344
  statusMessagePretty(-1, src, "pure");
238
345
  // console.error(e);
@@ -247,11 +354,12 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
247
354
  });
248
355
  }
249
356
  catch (e3) {
250
- console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${src} 1 errored with: ${e3}. Check ${reportDest}/logs.txt for more info`)));
251
- this.writeFileSync(`${reportDest}/logs.txt`, e3.stack, src);
357
+ logs.writeExitCode(-1, e3);
358
+ console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${src} 1 errored with: ${e3}. Check logs for more info`)));
359
+ logs.exit.write(e3.stack);
360
+ logs.exit.write(-1);
252
361
  this.bddTestIsNowDone(src, -1);
253
362
  statusMessagePretty(-1, src, "pure");
254
- console.log("III) PURE IS EXITING BADLY WITH error", e3);
255
363
  }
256
364
  for (let i = 0; i <= portsToUse.length; i++) {
257
365
  if (portsToUse[i]) {
@@ -294,7 +402,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
294
402
  const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen === "");
295
403
  if (openPorts.length >= testConfigResource.ports) {
296
404
  for (let i = 0; i < testConfigResource.ports; i++) {
297
- portsToUse.push(openPorts[i][0]);
405
+ portsToUse.push(openPorts[i][0]); // Convert string port to number
298
406
  this.ports[openPorts[i][0]] = src; // port is now claimed
299
407
  }
300
408
  testResources = JSON.stringify({
@@ -308,7 +416,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
308
416
  else {
309
417
  console.log(ansi_colors_2.default.red(`node: cannot run ${src} because there are no open ports ATM. This job will be enqueued and run again run a port is available`));
310
418
  this.queue.push(src);
311
- return;
419
+ return [Math.random(), argz]; // Add this return
312
420
  }
313
421
  }
314
422
  else {
@@ -366,45 +474,45 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
366
474
  }
367
475
  });
368
476
  });
369
- const oStream = fs_1.default.createWriteStream(`${reportDest}/logs.txt`);
370
- const errFile = `${reportDest}/logs.txt`;
371
- if (fs_1.default.existsSync(errFile)) {
372
- fs_1.default.rmSync(errFile);
373
- }
477
+ const logs = createLogStreams(reportDest, "node");
374
478
  server.listen(ipcfile, () => {
375
479
  var _a, _b;
376
- (_a = child.stderr) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
377
- oStream.write(`stderr > ${data}`);
480
+ // Only handle stdout/stderr for node runtime
481
+ (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
482
+ var _a;
483
+ (_a = logs.stdout) === null || _a === void 0 ? void 0 : _a.write(data); // Add null check
378
484
  });
379
- (_b = child.stdout) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
380
- oStream.write(`stdout > ${data}`);
485
+ (_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
486
+ var _a;
487
+ (_a = logs.stderr) === null || _a === void 0 ? void 0 : _a.write(data); // Add null check
381
488
  });
382
489
  child.on("error", (err) => { });
383
490
  child.on("close", (code) => {
384
- // oStream.close();
491
+ const exitCode = code === null ? -1 : code;
492
+ if (exitCode < 0) {
493
+ logs.writeExitCode(exitCode, new Error("Process crashed or was terminated"));
494
+ }
495
+ else {
496
+ logs.writeExitCode(exitCode);
497
+ }
498
+ logs.closeAll();
385
499
  server.close();
386
500
  if (!files[src]) {
387
501
  files[src] = new Set();
388
502
  }
389
- // files[src].add(filepath);
390
- // fs.writeFileSync(
391
- // reportDest + "/manifest.json",
392
- // JSON.stringify(Array.from(files[src]))
393
- // );
394
- if (code === 255) {
395
- console.log(ansi_colors_1.default.red(`node ! ${src} failed to execute. No "tests.json" file was generated. Check ${reportDest}/logs.txt for more info`));
503
+ if (exitCode === 255) {
504
+ console.log(ansi_colors_1.default.red(`node ! ${src} failed to execute. No "tests.json" file was generated. Check ${reportDest}/stderr.log for more info`));
396
505
  this.bddTestIsNowDone(src, -1);
397
506
  statusMessagePretty(-1, src, "node");
398
- oStream.close();
399
507
  return;
400
508
  }
401
- else if (code === 0) {
509
+ else if (exitCode === 0) {
402
510
  this.bddTestIsNowDone(src, 0);
403
511
  statusMessagePretty(0, src, "node");
404
512
  }
405
513
  else {
406
- this.bddTestIsNowDone(src, code);
407
- statusMessagePretty(code, src, "node");
514
+ this.bddTestIsNowDone(src, exitCode);
515
+ statusMessagePretty(exitCode, src, "node");
408
516
  }
409
517
  haltReturns = true;
410
518
  });
@@ -419,8 +527,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
419
527
  child.on("error", (e) => {
420
528
  console.log("error");
421
529
  haltReturns = true;
422
- console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${src} errored with: ${e.name}. Check ${errFile} for more info`)));
423
- this.writeFileSync(`${reportDest}/logs.txt`, e.toString(), src);
530
+ console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${src} errored with: ${e.name}. Check error logs for more info`)));
424
531
  this.bddTestIsNowDone(src, -1);
425
532
  statusMessagePretty(-1, src, "node");
426
533
  });
@@ -432,9 +539,9 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
432
539
  // const d = dest + ".mjs";
433
540
  const destFolder = dest.replace(".mjs", "");
434
541
  console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`launchWebSideCar ${src}`)));
435
- const fileStreams2 = [];
436
- const doneFileStream2 = [];
437
- const oStream = fs_1.default.createWriteStream(`${destFolder}/logs.txt`);
542
+ // const fileStreams2: fs.WriteStream[] = [];
543
+ // const doneFileStream2: Promise<any>[] = [];
544
+ const logs = createLogStreams(dest, "web");
438
545
  return new Promise((res, rej) => {
439
546
  this.browser
440
547
  .newPage()
@@ -455,34 +562,40 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
455
562
  Promise.all(screenshots[src] || []).then(() => {
456
563
  delete screenshots[src];
457
564
  page.close();
458
- oStream.close();
459
565
  });
460
566
  };
461
567
  page.on("pageerror", (err) => {
462
568
  console.debug(`Error from ${src}: [${err.name}] `);
463
- oStream.write(err.name);
464
- oStream.write("\n");
569
+ console.debug(`Error from ${src}: [${err.name}] `);
465
570
  if (err.cause) {
466
571
  console.debug(`Error from ${src} cause: [${err.cause}] `);
467
- oStream.write(err.cause);
468
- oStream.write("\n");
469
572
  }
470
573
  if (err.stack) {
471
574
  console.debug(`Error from stack ${src}: [${err.stack}] `);
472
- oStream.write(err.stack);
473
- oStream.write("\n");
474
575
  }
475
576
  console.debug(`Error from message ${src}: [${err.message}] `);
476
- oStream.write(err.message);
477
- oStream.write("\n");
478
577
  this.bddTestIsNowDone(src, -1);
479
578
  close();
480
579
  });
481
580
  page.on("console", (log) => {
482
- oStream.write(log.text());
483
- oStream.write(JSON.stringify(log.location()));
484
- oStream.write(JSON.stringify(log.stackTrace()));
485
- oStream.write("\n");
581
+ var _a, _b, _c, _d;
582
+ const msg = `${log.text()}\n${JSON.stringify(log.location())}\n${JSON.stringify(log.stackTrace())}\n`;
583
+ switch (log.type()) {
584
+ case "info":
585
+ (_a = logs.info) === null || _a === void 0 ? void 0 : _a.write(msg);
586
+ break;
587
+ case "warn":
588
+ (_b = logs.warn) === null || _b === void 0 ? void 0 : _b.write(msg);
589
+ break;
590
+ case "error":
591
+ (_c = logs.error) === null || _c === void 0 ? void 0 : _c.write(msg);
592
+ break;
593
+ case "debug":
594
+ (_d = logs.debug) === null || _d === void 0 ? void 0 : _d.write(msg);
595
+ break;
596
+ default:
597
+ break;
598
+ }
486
599
  });
487
600
  await page.goto(`file://${`${destFolder}.html`}`, {});
488
601
  const webArgz = JSON.stringify({
@@ -521,7 +634,6 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
521
634
  })
522
635
  .then(async (page) => {
523
636
  await page.goto(`file://${`${dest}.html`}`, {});
524
- /* @ts-ignore:next-line */
525
637
  res([Math.random(), page]);
526
638
  });
527
639
  });
@@ -543,6 +655,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
543
655
  browserWSEndpoint: this.browser.wsEndpoint(),
544
656
  };
545
657
  const testReq = sidecar[2];
658
+ const logs = createLogStreams(dest, "node");
546
659
  const portsToUse = [];
547
660
  if (testReq.ports === 0) {
548
661
  // argz = {
@@ -556,7 +669,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
556
669
  const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen === "");
557
670
  if (openPorts.length >= testReq.ports) {
558
671
  for (let i = 0; i < testReq.ports; i++) {
559
- portsToUse.push(openPorts[i][0]);
672
+ portsToUse.push(Number(openPorts[i][0])); // Convert string port to number
560
673
  this.ports[openPorts[i][0]] = src; // port is now closed
561
674
  }
562
675
  argz.ports = portsToUse;
@@ -596,23 +709,13 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
596
709
  });
597
710
  });
598
711
  });
599
- const oStream = fs_1.default.createWriteStream(`${reportDest}/logs.txt`);
600
712
  const child = (0, node_child_process_1.spawn)("node", [builtfile, JSON.stringify(argz)], {
601
713
  stdio: ["pipe", "pipe", "pipe", "ipc"],
602
714
  // silent: true
603
715
  });
604
716
  const p = "/tmp/tpipe" + Math.random();
605
- const errFile = `${reportDest}/logs.txt`;
606
717
  server.listen(p, () => {
607
- var _a, _b;
608
- (_a = child.stderr) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
609
- oStream.write(`stderr > ${data}`);
610
- });
611
- (_b = child.stdout) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
612
- oStream.write(`stdout > ${data}`);
613
- });
614
718
  child.on("close", (code) => {
615
- oStream.close();
616
719
  server.close();
617
720
  haltReturns = true;
618
721
  });
@@ -625,12 +728,13 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
625
728
  }
626
729
  });
627
730
  child.on("error", (e) => {
731
+ var _a;
628
732
  if (fs_1.default.existsSync(p)) {
629
733
  fs_1.default.rmSync(p);
630
734
  }
631
735
  haltReturns = true;
632
- console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`launchNodeSideCar - ${src} errored with: ${e.name}. Check ${errFile}for more info`)));
633
- this.writeFileSync(`${reportDest}/logs.txt`, e.toString(), src);
736
+ console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`launchNodeSideCar - ${src} errored with: ${e.name}. Check logs for more info`)));
737
+ (_a = logs.error) === null || _a === void 0 ? void 0 : _a.write(e.toString() + "\n");
634
738
  // this.bddTestIsNowDone(src, -1);
635
739
  // statusMessagePretty(-1, src);
636
740
  });
@@ -680,7 +784,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
680
784
  const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen === "");
681
785
  if (openPorts.length >= testConfigResource.ports) {
682
786
  for (let i = 0; i < testConfigResource.ports; i++) {
683
- portsToUse.push(openPorts[i][0]);
787
+ portsToUse.push(Number(openPorts[i][0]));
684
788
  this.ports[openPorts[i][0]] = src; // port is now claimed
685
789
  }
686
790
  argz = {
@@ -694,7 +798,7 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
694
798
  }
695
799
  else {
696
800
  this.queue.push(src);
697
- return;
801
+ // return;
698
802
  }
699
803
  }
700
804
  else {
@@ -703,6 +807,8 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
703
807
  }
704
808
  // const builtfile = dest + ".mjs";
705
809
  await Promise.resolve(`${`${builtfile}?cacheBust=${Date.now()}`}`).then(s => __importStar(require(s))).then((module) => {
810
+ if (!this.pureSidecars)
811
+ this.pureSidecars = {};
706
812
  this.pureSidecars[r] = module.default;
707
813
  this.pureSidecars[r].start(argz);
708
814
  });
@@ -731,11 +837,35 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
731
837
  browserWSEndpoint: this.browser.wsEndpoint(),
732
838
  });
733
839
  const d = `${dest}?cacheBust=${Date.now()}`;
734
- const ofile = `${reportDest}/logs.txt`;
735
- const oStream = fs_1.default.createWriteStream(ofile);
840
+ const logs = createLogStreams(reportDest, "web");
736
841
  this.browser
737
842
  .newPage()
738
843
  .then((page) => {
844
+ page.on("console", (log) => {
845
+ var _a, _b, _c, _d;
846
+ const msg = `${log.text()}\n`;
847
+ switch (log.type()) {
848
+ case "info":
849
+ (_a = logs.info) === null || _a === void 0 ? void 0 : _a.write(msg);
850
+ break;
851
+ case "warn":
852
+ (_b = logs.warn) === null || _b === void 0 ? void 0 : _b.write(msg);
853
+ break;
854
+ case "error":
855
+ (_c = logs.error) === null || _c === void 0 ? void 0 : _c.write(msg);
856
+ break;
857
+ case "debug":
858
+ (_d = logs.debug) === null || _d === void 0 ? void 0 : _d.write(msg);
859
+ break;
860
+ default:
861
+ break;
862
+ }
863
+ });
864
+ page.on("close", () => {
865
+ logs.writeExitCode(0); // Web tests exit with 0 unless there's an error
866
+ logs.closeAll();
867
+ logs.closeAll();
868
+ });
739
869
  this.mapping().forEach(async ([command, func]) => {
740
870
  if (command === "page") {
741
871
  page.exposeFunction(command, (x) => {
@@ -767,44 +897,16 @@ class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
767
897
  Promise.all(screenshots[src] || []).then(() => {
768
898
  delete screenshots[src];
769
899
  page.close();
770
- oStream.close();
771
900
  });
772
901
  return;
773
902
  };
774
903
  page.on("pageerror", (err) => {
775
- console.log(ansi_colors_1.default.red(`web ! ${src} failed to execute No "tests.json" file was generated. Check ${reportDest}/logs.txt for more info`));
776
- oStream.write(err.name);
777
- oStream.write("\n");
778
- if (err.cause) {
779
- oStream.write(err.cause);
780
- oStream.write("\n");
781
- }
782
- if (err.stack) {
783
- oStream.write(err.stack);
784
- oStream.write("\n");
785
- }
786
- if (err.message) {
787
- oStream.write(err.message);
788
- oStream.write("\n");
789
- }
904
+ logs.writeExitCode(-1, err);
905
+ console.log(ansi_colors_1.default.red(`web ! ${src} failed to execute No "tests.json" file was generated. Check ${reportDest}/error.log for more info`));
790
906
  this.bddTestIsNowDone(src, -1);
791
907
  close();
792
908
  });
793
- page.on("console", (log) => {
794
- // console.log("console message: ", log.text());
795
- if (oStream.closed) {
796
- console.log("missed console message: ", log.text());
797
- return;
798
- }
799
- else {
800
- oStream.write(log.text());
801
- oStream.write("\n");
802
- oStream.write(JSON.stringify(log.location()));
803
- oStream.write("\n");
804
- oStream.write(JSON.stringify(log.stackTrace()));
805
- oStream.write("\n");
806
- }
807
- });
909
+ // page.on("console", (log: ConsoleMessage) => {});
808
910
  await page.goto(`file://${`${destFolder}.html`}`, {});
809
911
  await page
810
912
  .evaluate(`
@@ -823,7 +925,7 @@ import('${d}').then(async (x) => {
823
925
  })
824
926
  .catch((e) => {
825
927
  console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(e.stack)));
826
- console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`web ! ${src} failed to execute. No "tests.json" file was generated. Check ${reportDest}/logs.txt for more info`)));
928
+ console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`web ! ${src} failed to execute. No "tests.json" file was generated. Check logs for more info`)));
827
929
  this.bddTestIsNowDone(src, -1);
828
930
  })
829
931
  .finally(() => {
@@ -835,7 +937,24 @@ import('${d}').then(async (x) => {
835
937
  };
836
938
  this.receiveFeaturesV2 = (reportDest, srcTest, platform) => {
837
939
  const featureDestination = path_1.default.resolve(process.cwd(), "reports", "features", "strings", srcTest.split(".").slice(0, -1).join(".") + ".features.txt");
838
- const testReport = JSON.parse(fs_1.default.readFileSync(`${reportDest}/tests.json`).toString());
940
+ // Read and parse the test report
941
+ const testReportPath = `${reportDest}/tests.json`;
942
+ if (!fs_1.default.existsSync(testReportPath)) {
943
+ console.error(`tests.json not found at: ${testReportPath}`);
944
+ return;
945
+ }
946
+ const testReport = JSON.parse(fs_1.default.readFileSync(testReportPath, "utf8"));
947
+ // Add full path information to each test
948
+ if (testReport.tests) {
949
+ testReport.tests.forEach((test) => {
950
+ // Add the full path to each test
951
+ test.fullPath = path_1.default.resolve(process.cwd(), srcTest);
952
+ });
953
+ }
954
+ // Add full path to the report itself
955
+ testReport.fullPath = path_1.default.resolve(process.cwd(), srcTest);
956
+ // Write the modified report back
957
+ fs_1.default.writeFileSync(testReportPath, JSON.stringify(testReport, null, 2));
839
958
  testReport.features
840
959
  .reduce(async (mm, featureStringKey) => {
841
960
  const accum = await mm;
@@ -878,7 +997,7 @@ import('${d}').then(async (x) => {
878
997
  return accum;
879
998
  }, Promise.resolve({ files: [], strings: [] }))
880
999
  .then(({ files, strings }) => {
881
- // Markdown files must be referenced in the prompt but string style features are already present in the test.json file
1000
+ // Markdown files must be referenced in the prompt but string style features are already present in the tests.json file
882
1001
  fs_1.default.writeFileSync(`testeranto/reports/${this.name}/${srcTest
883
1002
  .split(".")
884
1003
  .slice(0, -1)
@@ -932,10 +1051,14 @@ import('${d}').then(async (x) => {
932
1051
  });
933
1052
  this.writeBigBoard();
934
1053
  if (!inflight) {
935
- this.browser.disconnect().then(() => {
936
- console.log(ansi_colors_2.default.inverse(`${this.name} has been tested. Goodbye.`));
937
- process.exit();
938
- });
1054
+ if (this.browser) {
1055
+ if (this.browser) {
1056
+ this.browser.disconnect().then(() => {
1057
+ console.log(ansi_colors_2.default.inverse(`${this.name} has been tested. Goodbye.`));
1058
+ process.exit();
1059
+ });
1060
+ }
1061
+ }
939
1062
  }
940
1063
  };
941
1064
  this.launchers = {};
@@ -947,6 +1070,196 @@ import('${d}').then(async (x) => {
947
1070
  this.configs.ports.forEach((element) => {
948
1071
  this.ports[element] = ""; // set ports as open
949
1072
  });
1073
+ // Create HTTP server
1074
+ this.httpServer = http_1.default.createServer(this.requestHandler.bind(this));
1075
+ // Start WebSocket server attached to the HTTP server
1076
+ this.wss = new ws_1.WebSocketServer({ server: this.httpServer });
1077
+ this.wss.on("connection", (ws) => {
1078
+ this.clients.add(ws);
1079
+ console.log("Client connected");
1080
+ ws.on("message", (data) => {
1081
+ var _a, _b;
1082
+ try {
1083
+ const message = JSON.parse(data.toString());
1084
+ if (message.type === "executeCommand") {
1085
+ // Validate the command starts with 'aider'
1086
+ if (message.command && message.command.trim().startsWith("aider")) {
1087
+ console.log(`Executing command: ${message.command}`);
1088
+ // Execute the command
1089
+ const processId = Date.now().toString();
1090
+ const child = (0, node_child_process_1.spawn)(message.command, {
1091
+ shell: true,
1092
+ cwd: process.cwd(),
1093
+ });
1094
+ // Track the process in both maps
1095
+ this.runningProcesses.set(processId, child);
1096
+ this.allProcesses.set(processId, {
1097
+ child,
1098
+ status: "running",
1099
+ command: message.command,
1100
+ pid: child.pid,
1101
+ timestamp: new Date().toISOString(),
1102
+ });
1103
+ // Initialize logs for this process
1104
+ this.processLogs.set(processId, []);
1105
+ // Broadcast process started
1106
+ this.broadcast({
1107
+ type: "processStarted",
1108
+ processId,
1109
+ command: message.command,
1110
+ timestamp: new Date().toISOString(),
1111
+ logs: [],
1112
+ });
1113
+ // Capture stdout and stderr
1114
+ (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
1115
+ const logData = data.toString();
1116
+ // Add to stored logs
1117
+ const logs = this.processLogs.get(processId) || [];
1118
+ logs.push(logData);
1119
+ this.processLogs.set(processId, logs);
1120
+ this.broadcast({
1121
+ type: "processStdout",
1122
+ processId,
1123
+ data: logData,
1124
+ timestamp: new Date().toISOString(),
1125
+ });
1126
+ });
1127
+ (_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
1128
+ const logData = data.toString();
1129
+ // Add to stored logs
1130
+ const logs = this.processLogs.get(processId) || [];
1131
+ logs.push(logData);
1132
+ this.processLogs.set(processId, logs);
1133
+ this.broadcast({
1134
+ type: "processStderr",
1135
+ processId,
1136
+ data: logData,
1137
+ timestamp: new Date().toISOString(),
1138
+ });
1139
+ });
1140
+ child.on("error", (error) => {
1141
+ console.error(`Failed to execute command: ${error}`);
1142
+ this.runningProcesses.delete(processId);
1143
+ // Update the process status to error
1144
+ const processInfo = this.allProcesses.get(processId);
1145
+ if (processInfo) {
1146
+ this.allProcesses.set(processId, Object.assign(Object.assign({}, processInfo), { status: "error", error: error.message }));
1147
+ }
1148
+ this.broadcast({
1149
+ type: "processError",
1150
+ processId,
1151
+ error: error.message,
1152
+ timestamp: new Date().toISOString(),
1153
+ });
1154
+ });
1155
+ child.on("exit", (code) => {
1156
+ console.log(`Command exited with code ${code}`);
1157
+ // Remove from running processes but keep in allProcesses
1158
+ this.runningProcesses.delete(processId);
1159
+ // Update the process status to exited
1160
+ const processInfo = this.allProcesses.get(processId);
1161
+ if (processInfo) {
1162
+ this.allProcesses.set(processId, Object.assign(Object.assign({}, processInfo), { status: "exited", exitCode: code }));
1163
+ }
1164
+ this.broadcast({
1165
+ type: "processExited",
1166
+ processId,
1167
+ exitCode: code,
1168
+ timestamp: new Date().toISOString(),
1169
+ });
1170
+ });
1171
+ }
1172
+ else {
1173
+ console.error('Invalid command: must start with "aider"');
1174
+ }
1175
+ }
1176
+ else if (message.type === "getRunningProcesses") {
1177
+ // Send list of all processes (both running and completed) with their full logs
1178
+ const processes = Array.from(this.allProcesses.entries()).map(([id, procInfo]) => ({
1179
+ processId: id,
1180
+ command: procInfo.command,
1181
+ pid: procInfo.pid,
1182
+ status: procInfo.status,
1183
+ exitCode: procInfo.exitCode,
1184
+ error: procInfo.error,
1185
+ timestamp: procInfo.timestamp,
1186
+ logs: this.processLogs.get(id) || [],
1187
+ }));
1188
+ ws.send(JSON.stringify({
1189
+ type: "runningProcesses",
1190
+ processes,
1191
+ }));
1192
+ }
1193
+ else if (message.type === "getProcess") {
1194
+ // Send specific process with full logs
1195
+ const processId = message.processId;
1196
+ const procInfo = this.allProcesses.get(processId);
1197
+ if (procInfo) {
1198
+ ws.send(JSON.stringify({
1199
+ type: "processData",
1200
+ processId,
1201
+ command: procInfo.command,
1202
+ pid: procInfo.pid,
1203
+ status: procInfo.status,
1204
+ exitCode: procInfo.exitCode,
1205
+ error: procInfo.error,
1206
+ timestamp: procInfo.timestamp,
1207
+ logs: this.processLogs.get(processId) || [],
1208
+ }));
1209
+ }
1210
+ }
1211
+ else if (message.type === "stdin") {
1212
+ // Handle stdin input for a process
1213
+ const processId = message.processId;
1214
+ const data = message.data;
1215
+ console.log("Received stdin for process", processId, ":", data);
1216
+ const childProcess = this.runningProcesses.get(processId);
1217
+ if (childProcess && childProcess.stdin) {
1218
+ console.log("Writing to process stdin");
1219
+ childProcess.stdin.write(data);
1220
+ }
1221
+ else {
1222
+ console.log("Cannot write to stdin - process not found or no stdin:", {
1223
+ processExists: !!childProcess,
1224
+ stdinExists: (childProcess === null || childProcess === void 0 ? void 0 : childProcess.stdin) ? true : false,
1225
+ });
1226
+ }
1227
+ }
1228
+ else if (message.type === "killProcess") {
1229
+ // Handle killing a process
1230
+ const processId = message.processId;
1231
+ console.log("Received killProcess for process", processId);
1232
+ const childProcess = this.runningProcesses.get(processId);
1233
+ if (childProcess) {
1234
+ console.log("Killing process");
1235
+ childProcess.kill("SIGTERM");
1236
+ // The process exit handler will update the status and broadcast the change
1237
+ }
1238
+ else {
1239
+ console.log("Cannot kill process - process not found:", {
1240
+ processExists: !!childProcess,
1241
+ });
1242
+ }
1243
+ }
1244
+ }
1245
+ catch (error) {
1246
+ console.error("Error handling WebSocket message:", error);
1247
+ }
1248
+ });
1249
+ ws.on("close", () => {
1250
+ this.clients.delete(ws);
1251
+ console.log("Client disconnected");
1252
+ });
1253
+ ws.on("error", (error) => {
1254
+ console.error("WebSocket error:", error);
1255
+ this.clients.delete(ws);
1256
+ });
1257
+ });
1258
+ // Start HTTP server
1259
+ const httpPort = Number(process.env.HTTP_PORT) || 3000;
1260
+ this.httpServer.listen(httpPort, () => {
1261
+ console.log(`HTTP server running on http://localhost:${httpPort}`);
1262
+ });
950
1263
  }
951
1264
  async stopSideCar(uid) {
952
1265
  console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`stopSideCar ${uid}`)));
@@ -1038,16 +1351,17 @@ import('${d}').then(async (x) => {
1038
1351
  waitForInitialPage: false,
1039
1352
  executablePath,
1040
1353
  headless: true,
1354
+ defaultViewport: null, // Disable default 800x600 viewport
1041
1355
  dumpio: false,
1042
1356
  devtools: false,
1043
1357
  args: [
1044
- "--disable-features=site-per-process",
1045
1358
  "--allow-file-access-from-files",
1046
1359
  "--allow-insecure-localhost",
1047
1360
  "--allow-running-insecure-content",
1048
1361
  "--auto-open-devtools-for-tabs",
1049
1362
  "--disable-dev-shm-usage",
1050
1363
  "--disable-extensions",
1364
+ "--disable-features=site-per-process",
1051
1365
  "--disable-gpu",
1052
1366
  "--disable-setuid-sandbox",
1053
1367
  "--disable-site-isolation-trials",
@@ -1057,6 +1371,7 @@ import('${d}').then(async (x) => {
1057
1371
  "--no-startup-window",
1058
1372
  "--reduce-security-for-testing",
1059
1373
  "--remote-allow-origins=*",
1374
+ "--start-maximized",
1060
1375
  "--unsafely-treat-insecure-origin-as-secure=*",
1061
1376
  `--remote-debugging-port=3234`,
1062
1377
  // "--disable-features=IsolateOrigins,site-per-process",
@@ -1103,7 +1418,7 @@ import('${d}').then(async (x) => {
1103
1418
  },
1104
1419
  ],
1105
1420
  ].forEach(async ([eps, launcher, runtime, watcher]) => {
1106
- const metafile = `./testeranto/bundles/${runtime}/${this.name}/metafile.json`;
1421
+ const metafile = `./testeranto/metafiles/${runtime}/${this.name}.json`;
1107
1422
  await pollForFile(metafile);
1108
1423
  Object.entries(eps).forEach(async ([inputFile, outputFile]) => {
1109
1424
  // await pollForFile(outputFile);\
@@ -1170,11 +1485,26 @@ import('${d}').then(async (x) => {
1170
1485
  this.nodeMetafileWatcher.close();
1171
1486
  this.webMetafileWatcher.close();
1172
1487
  this.importMetafileWatcher.close();
1488
+ // Close any remaining log streams
1489
+ Object.values(this.logStreams || {}).forEach((logs) => logs.closeAll());
1490
+ // Close WebSocket server
1491
+ this.wss.close(() => {
1492
+ console.log("WebSocket server closed");
1493
+ });
1494
+ // Close all client connections
1495
+ this.clients.forEach((client) => {
1496
+ client.terminate();
1497
+ });
1498
+ this.clients.clear();
1499
+ // Close HTTP server
1500
+ this.httpServer.close(() => {
1501
+ console.log("HTTP server closed");
1502
+ });
1173
1503
  this.checkForShutdown();
1174
1504
  }
1175
1505
  async metafileOutputs(platform) {
1176
1506
  const metafile = JSON.parse(fs_1.default
1177
- .readFileSync(`./testeranto/bundles/${platform}/${this.name}/metafile.json`)
1507
+ .readFileSync(`./testeranto/metafiles/${platform}/${this.name}.json`)
1178
1508
  .toString()).metafile;
1179
1509
  if (!metafile)
1180
1510
  return;
@@ -1216,6 +1546,144 @@ import('${d}').then(async (x) => {
1216
1546
  }
1217
1547
  });
1218
1548
  }
1549
+ requestHandler(req, res) {
1550
+ // Parse the URL
1551
+ const parsedUrl = url_1.default.parse(req.url || "/");
1552
+ let pathname = parsedUrl.pathname || "/";
1553
+ // Handle root path
1554
+ if (pathname === "/") {
1555
+ pathname = "/index.html";
1556
+ }
1557
+ // Remove leading slash
1558
+ let filePath = pathname.substring(1);
1559
+ // Determine which directory to serve from
1560
+ if (filePath.startsWith("reports/")) {
1561
+ // Serve from reports directory
1562
+ filePath = `testeranto/${filePath}`;
1563
+ }
1564
+ else if (filePath.startsWith("metafiles/")) {
1565
+ // Serve from metafiles directory
1566
+ filePath = `testeranto/${filePath}`;
1567
+ }
1568
+ else if (filePath === "projects.json") {
1569
+ // Serve projects.json
1570
+ filePath = `testeranto/${filePath}`;
1571
+ }
1572
+ else {
1573
+ // For frontend assets, try multiple possible locations
1574
+ // First, try the dist directory
1575
+ const possiblePaths = [
1576
+ `dist/${filePath}`,
1577
+ `testeranto/dist/${filePath}`,
1578
+ `../dist/${filePath}`,
1579
+ `./${filePath}`,
1580
+ ];
1581
+ // Find the first existing file
1582
+ let foundPath = null;
1583
+ for (const possiblePath of possiblePaths) {
1584
+ if (fs_1.default.existsSync(possiblePath)) {
1585
+ foundPath = possiblePath;
1586
+ break;
1587
+ }
1588
+ }
1589
+ if (foundPath) {
1590
+ filePath = foundPath;
1591
+ }
1592
+ else {
1593
+ // If no file found, serve index.html for SPA routing
1594
+ const indexPath = this.findIndexHtml();
1595
+ if (indexPath) {
1596
+ fs_1.default.readFile(indexPath, (err, data) => {
1597
+ if (err) {
1598
+ res.writeHead(404, { "Content-Type": "text/plain" });
1599
+ res.end("404 Not Found");
1600
+ return;
1601
+ }
1602
+ res.writeHead(200, { "Content-Type": "text/html" });
1603
+ res.end(data);
1604
+ });
1605
+ return;
1606
+ }
1607
+ else {
1608
+ res.writeHead(404, { "Content-Type": "text/plain" });
1609
+ res.end("404 Not Found");
1610
+ return;
1611
+ }
1612
+ }
1613
+ }
1614
+ // Check if file exists
1615
+ fs_1.default.exists(filePath, (exists) => {
1616
+ if (!exists) {
1617
+ // For SPA routing, serve index.html if the path looks like a route
1618
+ if (!pathname.includes(".") && pathname !== "/") {
1619
+ const indexPath = this.findIndexHtml();
1620
+ if (indexPath) {
1621
+ fs_1.default.readFile(indexPath, (err, data) => {
1622
+ if (err) {
1623
+ res.writeHead(404, { "Content-Type": "text/plain" });
1624
+ res.end("404 Not Found");
1625
+ return;
1626
+ }
1627
+ res.writeHead(200, { "Content-Type": "text/html" });
1628
+ res.end(data);
1629
+ });
1630
+ return;
1631
+ }
1632
+ else {
1633
+ // Serve a simple message if index.html is not found
1634
+ res.writeHead(200, { "Content-Type": "text/html" });
1635
+ res.end(`
1636
+ <html>
1637
+ <body>
1638
+ <h1>Testeranto is running</h1>
1639
+ <p>Frontend files are not built yet. Run 'npm run build' to build the frontend.</p>
1640
+ </body>
1641
+ </html>
1642
+ `);
1643
+ return;
1644
+ }
1645
+ }
1646
+ res.writeHead(404, { "Content-Type": "text/plain" });
1647
+ res.end("404 Not Found");
1648
+ return;
1649
+ }
1650
+ // Read and serve the file
1651
+ fs_1.default.readFile(filePath, (err, data) => {
1652
+ if (err) {
1653
+ res.writeHead(500, { "Content-Type": "text/plain" });
1654
+ res.end("500 Internal Server Error");
1655
+ return;
1656
+ }
1657
+ // Get MIME type
1658
+ const mimeType = mime_types_1.default.lookup(filePath) || "application/octet-stream";
1659
+ res.writeHead(200, { "Content-Type": mimeType });
1660
+ res.end(data);
1661
+ });
1662
+ });
1663
+ }
1664
+ findIndexHtml() {
1665
+ const possiblePaths = [
1666
+ "dist/index.html",
1667
+ "testeranto/dist/index.html",
1668
+ "../dist/index.html",
1669
+ "./index.html",
1670
+ ];
1671
+ for (const path of possiblePaths) {
1672
+ if (fs_1.default.existsSync(path)) {
1673
+ return path;
1674
+ }
1675
+ }
1676
+ return null;
1677
+ }
1678
+ broadcast(message) {
1679
+ const data = typeof message === "string" ? message : JSON.stringify(message);
1680
+ this.clients.forEach((client) => {
1681
+ if (client.readyState === 1) {
1682
+ // WebSocket.OPEN
1683
+ client.send(data);
1684
+ }
1685
+ });
1686
+ }
1219
1687
  checkQueue() {
1220
1688
  const x = this.queue.pop();
1221
1689
  if (!x) {