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
@@ -10,6 +10,10 @@ import path from "path";
10
10
  import puppeteer from "puppeteer-core";
11
11
  import ansiC from "ansi-colors";
12
12
  import crypto from "node:crypto";
13
+ import { WebSocketServer } from "ws";
14
+ import http from "http";
15
+ import url from "url";
16
+ import mime from "mime-types";
13
17
  import { getRunnables } from "../utils";
14
18
  import { Queue } from "../utils/queue.js";
15
19
  import { PM_WithEslintAndTsc } from "./PM_WithEslintAndTsc.js";
@@ -17,6 +21,87 @@ const changes = {};
17
21
  const fileHashes = {};
18
22
  const files = {};
19
23
  const screenshots = {};
24
+ function runtimeLogs(runtime, reportDest) {
25
+ const safeDest = reportDest || `testeranto/reports/default_${Date.now()}`;
26
+ try {
27
+ if (!fs.existsSync(safeDest)) {
28
+ fs.mkdirSync(safeDest, { recursive: true });
29
+ }
30
+ if (runtime === "node") {
31
+ return {
32
+ stdout: fs.createWriteStream(`${safeDest}/stdout.log`),
33
+ stderr: fs.createWriteStream(`${safeDest}/stderr.log`),
34
+ exit: fs.createWriteStream(`${safeDest}/exit.log`),
35
+ };
36
+ }
37
+ else if (runtime === "web") {
38
+ return {
39
+ info: fs.createWriteStream(`${safeDest}/info.log`),
40
+ warn: fs.createWriteStream(`${safeDest}/warn.log`),
41
+ error: fs.createWriteStream(`${safeDest}/error.log`),
42
+ debug: fs.createWriteStream(`${safeDest}/debug.log`),
43
+ exit: fs.createWriteStream(`${safeDest}/exit.log`),
44
+ };
45
+ }
46
+ else if (runtime === "pure") {
47
+ return {
48
+ exit: fs.createWriteStream(`${safeDest}/exit.log`),
49
+ };
50
+ }
51
+ else {
52
+ throw `unknown runtime: ${runtime}`;
53
+ }
54
+ }
55
+ catch (e) {
56
+ console.error(`Failed to create log streams in ${safeDest}:`, e);
57
+ throw e;
58
+ }
59
+ }
60
+ function createLogStreams(reportDest, runtime) {
61
+ // Create directory if it doesn't exist
62
+ if (!fs.existsSync(reportDest)) {
63
+ fs.mkdirSync(reportDest, { recursive: true });
64
+ }
65
+ const streams = runtimeLogs(runtime, reportDest);
66
+ // const streams = {
67
+ // exit: fs.createWriteStream(`${reportDest}/exit.log`),
68
+ const safeDest = reportDest || `testeranto/reports/default_${Date.now()}`;
69
+ try {
70
+ if (!fs.existsSync(safeDest)) {
71
+ fs.mkdirSync(safeDest, { recursive: true });
72
+ }
73
+ const streams = runtimeLogs(runtime, safeDest);
74
+ // const streams = {
75
+ // exit: fs.createWriteStream(`${safeDest}/exit.log`),
76
+ // ...(runtime === "node" || runtime === "pure"
77
+ // ? {
78
+ // stdout: fs.createWriteStream(`${safeDest}/stdout.log`),
79
+ // stderr: fs.createWriteStream(`${safeDest}/stderr.log`),
80
+ // }
81
+ // : {
82
+ // info: fs.createWriteStream(`${safeDest}/info.log`),
83
+ // warn: fs.createWriteStream(`${safeDest}/warn.log`),
84
+ // error: fs.createWriteStream(`${safeDest}/error.log`),
85
+ // debug: fs.createWriteStream(`${safeDest}/debug.log`),
86
+ // }),
87
+ // };
88
+ return Object.assign(Object.assign({}, streams), { closeAll: () => {
89
+ Object.values(streams).forEach((stream) => !stream.closed && stream.close());
90
+ }, writeExitCode: (code, error) => {
91
+ if (error) {
92
+ streams.exit.write(`Error: ${error.message}\n`);
93
+ if (error.stack) {
94
+ streams.exit.write(`Stack Trace:\n${error.stack}\n`);
95
+ }
96
+ }
97
+ streams.exit.write(`${code}\n`);
98
+ }, exit: streams.exit });
99
+ }
100
+ catch (e) {
101
+ console.error(`Failed to create log streams in ${safeDest}:`, e);
102
+ throw e;
103
+ }
104
+ }
20
105
  async function fileHash(filePath, algorithm = "md5") {
21
106
  return new Promise((resolve, reject) => {
22
107
  const hash = crypto.createHash(algorithm);
@@ -35,10 +120,13 @@ async function fileHash(filePath, algorithm = "md5") {
35
120
  }
36
121
  const statusMessagePretty = (failures, test, runtime) => {
37
122
  if (failures === 0) {
38
- console.log(ansiC.green(ansiC.inverse(`${runtime} > ${test} completed successfully`)));
123
+ console.log(ansiC.green(ansiC.inverse(`${runtime} > ${test}`)));
124
+ }
125
+ else if (failures > 0) {
126
+ console.log(ansiC.red(ansiC.inverse(`${runtime} > ${test} failed ${failures} times (exit code: ${failures})`)));
39
127
  }
40
128
  else {
41
- console.log(ansiC.red(ansiC.inverse(`${runtime} > ${test} failed ${failures} times`)));
129
+ console.log(ansiC.red(ansiC.inverse(`${runtime} > ${test} crashed (exit code: -1)`)));
42
130
  }
43
131
  };
44
132
  async function writeFileAndCreateDir(filePath, data) {
@@ -80,6 +168,12 @@ async function pollForFile(path, timeout = 2000) {
80
168
  export class PM_Main extends PM_WithEslintAndTsc {
81
169
  constructor(configs, name, mode) {
82
170
  super(configs, name, mode);
171
+ this.logStreams = {};
172
+ this.sidecars = {};
173
+ this.clients = new Set();
174
+ this.runningProcesses = new Map();
175
+ this.allProcesses = new Map();
176
+ this.processLogs = new Map();
83
177
  this.getRunnables = (tests, testName, payload = {
84
178
  nodeEntryPoints: {},
85
179
  nodeEntryPointSidecars: {},
@@ -137,7 +231,7 @@ export class PM_Main extends PM_WithEslintAndTsc {
137
231
  }
138
232
  else {
139
233
  this.queue.push(src);
140
- return;
234
+ return [Math.random(), argz];
141
235
  }
142
236
  }
143
237
  else {
@@ -170,8 +264,20 @@ export class PM_Main extends PM_WithEslintAndTsc {
170
264
  // }
171
265
  // })
172
266
  // );
267
+ const logs = createLogStreams(reportDest, "pure");
173
268
  try {
174
269
  await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
270
+ // Override console methods to redirect logs
271
+ // Only override stdout/stderr methods for pure runtime
272
+ const originalConsole = Object.assign({}, console);
273
+ // console.log = (...args) => {
274
+ // logs.stdout.write(args.join(" ") + "\n");
275
+ // originalConsole.log(...args);
276
+ // };
277
+ // console.error = (...args) => {
278
+ // logs.stderr.write(args.join(" ") + "\n");
279
+ // originalConsole.error(...args);
280
+ // };
175
281
  return module.default
176
282
  .then((defaultModule) => {
177
283
  defaultModule
@@ -183,7 +289,7 @@ export class PM_Main extends PM_WithEslintAndTsc {
183
289
  this.bddTestIsNowDone(src, results.fails);
184
290
  })
185
291
  .catch((e1) => {
186
- console.log(ansiC.red(`launchPure - ${src} errored with: ${e1}`));
292
+ console.log(ansiC.red(`launchPure - ${src} errored with: ${e1.stack}`));
187
293
  this.bddTestIsNowDone(src, -1);
188
294
  statusMessagePretty(-1, src, "pure");
189
295
  });
@@ -192,8 +298,9 @@ export class PM_Main extends PM_WithEslintAndTsc {
192
298
  // });
193
299
  })
194
300
  .catch((e2) => {
195
- console.log(ansiColors.red(`pure ! ${src} failed to execute. No "tests.json" file was generated. Check ${reportDest}/logs.txt for more info`));
196
- this.writeFileSync(`${reportDest}/logs.txt`, e2.stack, src);
301
+ console.log(ansiColors.red(`pure ! ${src} failed to execute. No "tests.json" file was generated. Check the logs for more info`));
302
+ logs.exit.write(e2.stack);
303
+ logs.exit.write(-1);
197
304
  this.bddTestIsNowDone(src, -1);
198
305
  statusMessagePretty(-1, src, "pure");
199
306
  // console.error(e);
@@ -208,11 +315,12 @@ export class PM_Main extends PM_WithEslintAndTsc {
208
315
  });
209
316
  }
210
317
  catch (e3) {
211
- console.log(ansiC.red(ansiC.inverse(`${src} 1 errored with: ${e3}. Check ${reportDest}/logs.txt for more info`)));
212
- this.writeFileSync(`${reportDest}/logs.txt`, e3.stack, src);
318
+ logs.writeExitCode(-1, e3);
319
+ console.log(ansiC.red(ansiC.inverse(`${src} 1 errored with: ${e3}. Check logs for more info`)));
320
+ logs.exit.write(e3.stack);
321
+ logs.exit.write(-1);
213
322
  this.bddTestIsNowDone(src, -1);
214
323
  statusMessagePretty(-1, src, "pure");
215
- console.log("III) PURE IS EXITING BADLY WITH error", e3);
216
324
  }
217
325
  for (let i = 0; i <= portsToUse.length; i++) {
218
326
  if (portsToUse[i]) {
@@ -255,7 +363,7 @@ export class PM_Main extends PM_WithEslintAndTsc {
255
363
  const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen === "");
256
364
  if (openPorts.length >= testConfigResource.ports) {
257
365
  for (let i = 0; i < testConfigResource.ports; i++) {
258
- portsToUse.push(openPorts[i][0]);
366
+ portsToUse.push(openPorts[i][0]); // Convert string port to number
259
367
  this.ports[openPorts[i][0]] = src; // port is now claimed
260
368
  }
261
369
  testResources = JSON.stringify({
@@ -269,7 +377,7 @@ export class PM_Main extends PM_WithEslintAndTsc {
269
377
  else {
270
378
  console.log(ansiC.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`));
271
379
  this.queue.push(src);
272
- return;
380
+ return [Math.random(), argz]; // Add this return
273
381
  }
274
382
  }
275
383
  else {
@@ -327,45 +435,45 @@ export class PM_Main extends PM_WithEslintAndTsc {
327
435
  }
328
436
  });
329
437
  });
330
- const oStream = fs.createWriteStream(`${reportDest}/logs.txt`);
331
- const errFile = `${reportDest}/logs.txt`;
332
- if (fs.existsSync(errFile)) {
333
- fs.rmSync(errFile);
334
- }
438
+ const logs = createLogStreams(reportDest, "node");
335
439
  server.listen(ipcfile, () => {
336
440
  var _a, _b;
337
- (_a = child.stderr) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
338
- oStream.write(`stderr > ${data}`);
441
+ // Only handle stdout/stderr for node runtime
442
+ (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
443
+ var _a;
444
+ (_a = logs.stdout) === null || _a === void 0 ? void 0 : _a.write(data); // Add null check
339
445
  });
340
- (_b = child.stdout) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
341
- oStream.write(`stdout > ${data}`);
446
+ (_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
447
+ var _a;
448
+ (_a = logs.stderr) === null || _a === void 0 ? void 0 : _a.write(data); // Add null check
342
449
  });
343
450
  child.on("error", (err) => { });
344
451
  child.on("close", (code) => {
345
- // oStream.close();
452
+ const exitCode = code === null ? -1 : code;
453
+ if (exitCode < 0) {
454
+ logs.writeExitCode(exitCode, new Error("Process crashed or was terminated"));
455
+ }
456
+ else {
457
+ logs.writeExitCode(exitCode);
458
+ }
459
+ logs.closeAll();
346
460
  server.close();
347
461
  if (!files[src]) {
348
462
  files[src] = new Set();
349
463
  }
350
- // files[src].add(filepath);
351
- // fs.writeFileSync(
352
- // reportDest + "/manifest.json",
353
- // JSON.stringify(Array.from(files[src]))
354
- // );
355
- if (code === 255) {
356
- console.log(ansiColors.red(`node ! ${src} failed to execute. No "tests.json" file was generated. Check ${reportDest}/logs.txt for more info`));
464
+ if (exitCode === 255) {
465
+ console.log(ansiColors.red(`node ! ${src} failed to execute. No "tests.json" file was generated. Check ${reportDest}/stderr.log for more info`));
357
466
  this.bddTestIsNowDone(src, -1);
358
467
  statusMessagePretty(-1, src, "node");
359
- oStream.close();
360
468
  return;
361
469
  }
362
- else if (code === 0) {
470
+ else if (exitCode === 0) {
363
471
  this.bddTestIsNowDone(src, 0);
364
472
  statusMessagePretty(0, src, "node");
365
473
  }
366
474
  else {
367
- this.bddTestIsNowDone(src, code);
368
- statusMessagePretty(code, src, "node");
475
+ this.bddTestIsNowDone(src, exitCode);
476
+ statusMessagePretty(exitCode, src, "node");
369
477
  }
370
478
  haltReturns = true;
371
479
  });
@@ -380,8 +488,7 @@ export class PM_Main extends PM_WithEslintAndTsc {
380
488
  child.on("error", (e) => {
381
489
  console.log("error");
382
490
  haltReturns = true;
383
- console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e.name}. Check ${errFile} for more info`)));
384
- this.writeFileSync(`${reportDest}/logs.txt`, e.toString(), src);
491
+ console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e.name}. Check error logs for more info`)));
385
492
  this.bddTestIsNowDone(src, -1);
386
493
  statusMessagePretty(-1, src, "node");
387
494
  });
@@ -393,9 +500,9 @@ export class PM_Main extends PM_WithEslintAndTsc {
393
500
  // const d = dest + ".mjs";
394
501
  const destFolder = dest.replace(".mjs", "");
395
502
  console.log(ansiC.green(ansiC.inverse(`launchWebSideCar ${src}`)));
396
- const fileStreams2 = [];
397
- const doneFileStream2 = [];
398
- const oStream = fs.createWriteStream(`${destFolder}/logs.txt`);
503
+ // const fileStreams2: fs.WriteStream[] = [];
504
+ // const doneFileStream2: Promise<any>[] = [];
505
+ const logs = createLogStreams(dest, "web");
399
506
  return new Promise((res, rej) => {
400
507
  this.browser
401
508
  .newPage()
@@ -416,34 +523,40 @@ export class PM_Main extends PM_WithEslintAndTsc {
416
523
  Promise.all(screenshots[src] || []).then(() => {
417
524
  delete screenshots[src];
418
525
  page.close();
419
- oStream.close();
420
526
  });
421
527
  };
422
528
  page.on("pageerror", (err) => {
423
529
  console.debug(`Error from ${src}: [${err.name}] `);
424
- oStream.write(err.name);
425
- oStream.write("\n");
530
+ console.debug(`Error from ${src}: [${err.name}] `);
426
531
  if (err.cause) {
427
532
  console.debug(`Error from ${src} cause: [${err.cause}] `);
428
- oStream.write(err.cause);
429
- oStream.write("\n");
430
533
  }
431
534
  if (err.stack) {
432
535
  console.debug(`Error from stack ${src}: [${err.stack}] `);
433
- oStream.write(err.stack);
434
- oStream.write("\n");
435
536
  }
436
537
  console.debug(`Error from message ${src}: [${err.message}] `);
437
- oStream.write(err.message);
438
- oStream.write("\n");
439
538
  this.bddTestIsNowDone(src, -1);
440
539
  close();
441
540
  });
442
541
  page.on("console", (log) => {
443
- oStream.write(log.text());
444
- oStream.write(JSON.stringify(log.location()));
445
- oStream.write(JSON.stringify(log.stackTrace()));
446
- oStream.write("\n");
542
+ var _a, _b, _c, _d;
543
+ const msg = `${log.text()}\n${JSON.stringify(log.location())}\n${JSON.stringify(log.stackTrace())}\n`;
544
+ switch (log.type()) {
545
+ case "info":
546
+ (_a = logs.info) === null || _a === void 0 ? void 0 : _a.write(msg);
547
+ break;
548
+ case "warn":
549
+ (_b = logs.warn) === null || _b === void 0 ? void 0 : _b.write(msg);
550
+ break;
551
+ case "error":
552
+ (_c = logs.error) === null || _c === void 0 ? void 0 : _c.write(msg);
553
+ break;
554
+ case "debug":
555
+ (_d = logs.debug) === null || _d === void 0 ? void 0 : _d.write(msg);
556
+ break;
557
+ default:
558
+ break;
559
+ }
447
560
  });
448
561
  await page.goto(`file://${`${destFolder}.html`}`, {});
449
562
  const webArgz = JSON.stringify({
@@ -482,7 +595,6 @@ export class PM_Main extends PM_WithEslintAndTsc {
482
595
  })
483
596
  .then(async (page) => {
484
597
  await page.goto(`file://${`${dest}.html`}`, {});
485
- /* @ts-ignore:next-line */
486
598
  res([Math.random(), page]);
487
599
  });
488
600
  });
@@ -504,6 +616,7 @@ export class PM_Main extends PM_WithEslintAndTsc {
504
616
  browserWSEndpoint: this.browser.wsEndpoint(),
505
617
  };
506
618
  const testReq = sidecar[2];
619
+ const logs = createLogStreams(dest, "node");
507
620
  const portsToUse = [];
508
621
  if (testReq.ports === 0) {
509
622
  // argz = {
@@ -517,7 +630,7 @@ export class PM_Main extends PM_WithEslintAndTsc {
517
630
  const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen === "");
518
631
  if (openPorts.length >= testReq.ports) {
519
632
  for (let i = 0; i < testReq.ports; i++) {
520
- portsToUse.push(openPorts[i][0]);
633
+ portsToUse.push(Number(openPorts[i][0])); // Convert string port to number
521
634
  this.ports[openPorts[i][0]] = src; // port is now closed
522
635
  }
523
636
  argz.ports = portsToUse;
@@ -557,23 +670,13 @@ export class PM_Main extends PM_WithEslintAndTsc {
557
670
  });
558
671
  });
559
672
  });
560
- const oStream = fs.createWriteStream(`${reportDest}/logs.txt`);
561
673
  const child = spawn("node", [builtfile, JSON.stringify(argz)], {
562
674
  stdio: ["pipe", "pipe", "pipe", "ipc"],
563
675
  // silent: true
564
676
  });
565
677
  const p = "/tmp/tpipe" + Math.random();
566
- const errFile = `${reportDest}/logs.txt`;
567
678
  server.listen(p, () => {
568
- var _a, _b;
569
- (_a = child.stderr) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
570
- oStream.write(`stderr > ${data}`);
571
- });
572
- (_b = child.stdout) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
573
- oStream.write(`stdout > ${data}`);
574
- });
575
679
  child.on("close", (code) => {
576
- oStream.close();
577
680
  server.close();
578
681
  haltReturns = true;
579
682
  });
@@ -586,12 +689,13 @@ export class PM_Main extends PM_WithEslintAndTsc {
586
689
  }
587
690
  });
588
691
  child.on("error", (e) => {
692
+ var _a;
589
693
  if (fs.existsSync(p)) {
590
694
  fs.rmSync(p);
591
695
  }
592
696
  haltReturns = true;
593
- console.log(ansiC.red(ansiC.inverse(`launchNodeSideCar - ${src} errored with: ${e.name}. Check ${errFile}for more info`)));
594
- this.writeFileSync(`${reportDest}/logs.txt`, e.toString(), src);
697
+ console.log(ansiC.red(ansiC.inverse(`launchNodeSideCar - ${src} errored with: ${e.name}. Check logs for more info`)));
698
+ (_a = logs.error) === null || _a === void 0 ? void 0 : _a.write(e.toString() + "\n");
595
699
  // this.bddTestIsNowDone(src, -1);
596
700
  // statusMessagePretty(-1, src);
597
701
  });
@@ -641,7 +745,7 @@ export class PM_Main extends PM_WithEslintAndTsc {
641
745
  const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen === "");
642
746
  if (openPorts.length >= testConfigResource.ports) {
643
747
  for (let i = 0; i < testConfigResource.ports; i++) {
644
- portsToUse.push(openPorts[i][0]);
748
+ portsToUse.push(Number(openPorts[i][0]));
645
749
  this.ports[openPorts[i][0]] = src; // port is now claimed
646
750
  }
647
751
  argz = {
@@ -655,7 +759,7 @@ export class PM_Main extends PM_WithEslintAndTsc {
655
759
  }
656
760
  else {
657
761
  this.queue.push(src);
658
- return;
762
+ // return;
659
763
  }
660
764
  }
661
765
  else {
@@ -664,6 +768,8 @@ export class PM_Main extends PM_WithEslintAndTsc {
664
768
  }
665
769
  // const builtfile = dest + ".mjs";
666
770
  await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
771
+ if (!this.pureSidecars)
772
+ this.pureSidecars = {};
667
773
  this.pureSidecars[r] = module.default;
668
774
  this.pureSidecars[r].start(argz);
669
775
  });
@@ -692,11 +798,35 @@ export class PM_Main extends PM_WithEslintAndTsc {
692
798
  browserWSEndpoint: this.browser.wsEndpoint(),
693
799
  });
694
800
  const d = `${dest}?cacheBust=${Date.now()}`;
695
- const ofile = `${reportDest}/logs.txt`;
696
- const oStream = fs.createWriteStream(ofile);
801
+ const logs = createLogStreams(reportDest, "web");
697
802
  this.browser
698
803
  .newPage()
699
804
  .then((page) => {
805
+ page.on("console", (log) => {
806
+ var _a, _b, _c, _d;
807
+ const msg = `${log.text()}\n`;
808
+ switch (log.type()) {
809
+ case "info":
810
+ (_a = logs.info) === null || _a === void 0 ? void 0 : _a.write(msg);
811
+ break;
812
+ case "warn":
813
+ (_b = logs.warn) === null || _b === void 0 ? void 0 : _b.write(msg);
814
+ break;
815
+ case "error":
816
+ (_c = logs.error) === null || _c === void 0 ? void 0 : _c.write(msg);
817
+ break;
818
+ case "debug":
819
+ (_d = logs.debug) === null || _d === void 0 ? void 0 : _d.write(msg);
820
+ break;
821
+ default:
822
+ break;
823
+ }
824
+ });
825
+ page.on("close", () => {
826
+ logs.writeExitCode(0); // Web tests exit with 0 unless there's an error
827
+ logs.closeAll();
828
+ logs.closeAll();
829
+ });
700
830
  this.mapping().forEach(async ([command, func]) => {
701
831
  if (command === "page") {
702
832
  page.exposeFunction(command, (x) => {
@@ -728,44 +858,16 @@ export class PM_Main extends PM_WithEslintAndTsc {
728
858
  Promise.all(screenshots[src] || []).then(() => {
729
859
  delete screenshots[src];
730
860
  page.close();
731
- oStream.close();
732
861
  });
733
862
  return;
734
863
  };
735
864
  page.on("pageerror", (err) => {
736
- console.log(ansiColors.red(`web ! ${src} failed to execute No "tests.json" file was generated. Check ${reportDest}/logs.txt for more info`));
737
- oStream.write(err.name);
738
- oStream.write("\n");
739
- if (err.cause) {
740
- oStream.write(err.cause);
741
- oStream.write("\n");
742
- }
743
- if (err.stack) {
744
- oStream.write(err.stack);
745
- oStream.write("\n");
746
- }
747
- if (err.message) {
748
- oStream.write(err.message);
749
- oStream.write("\n");
750
- }
865
+ logs.writeExitCode(-1, err);
866
+ console.log(ansiColors.red(`web ! ${src} failed to execute No "tests.json" file was generated. Check ${reportDest}/error.log for more info`));
751
867
  this.bddTestIsNowDone(src, -1);
752
868
  close();
753
869
  });
754
- page.on("console", (log) => {
755
- // console.log("console message: ", log.text());
756
- if (oStream.closed) {
757
- console.log("missed console message: ", log.text());
758
- return;
759
- }
760
- else {
761
- oStream.write(log.text());
762
- oStream.write("\n");
763
- oStream.write(JSON.stringify(log.location()));
764
- oStream.write("\n");
765
- oStream.write(JSON.stringify(log.stackTrace()));
766
- oStream.write("\n");
767
- }
768
- });
870
+ // page.on("console", (log: ConsoleMessage) => {});
769
871
  await page.goto(`file://${`${destFolder}.html`}`, {});
770
872
  await page
771
873
  .evaluate(`
@@ -784,7 +886,7 @@ import('${d}').then(async (x) => {
784
886
  })
785
887
  .catch((e) => {
786
888
  console.log(ansiC.red(ansiC.inverse(e.stack)));
787
- console.log(ansiC.red(ansiC.inverse(`web ! ${src} failed to execute. No "tests.json" file was generated. Check ${reportDest}/logs.txt for more info`)));
889
+ console.log(ansiC.red(ansiC.inverse(`web ! ${src} failed to execute. No "tests.json" file was generated. Check logs for more info`)));
788
890
  this.bddTestIsNowDone(src, -1);
789
891
  })
790
892
  .finally(() => {
@@ -796,7 +898,24 @@ import('${d}').then(async (x) => {
796
898
  };
797
899
  this.receiveFeaturesV2 = (reportDest, srcTest, platform) => {
798
900
  const featureDestination = path.resolve(process.cwd(), "reports", "features", "strings", srcTest.split(".").slice(0, -1).join(".") + ".features.txt");
799
- const testReport = JSON.parse(fs.readFileSync(`${reportDest}/tests.json`).toString());
901
+ // Read and parse the test report
902
+ const testReportPath = `${reportDest}/tests.json`;
903
+ if (!fs.existsSync(testReportPath)) {
904
+ console.error(`tests.json not found at: ${testReportPath}`);
905
+ return;
906
+ }
907
+ const testReport = JSON.parse(fs.readFileSync(testReportPath, "utf8"));
908
+ // Add full path information to each test
909
+ if (testReport.tests) {
910
+ testReport.tests.forEach((test) => {
911
+ // Add the full path to each test
912
+ test.fullPath = path.resolve(process.cwd(), srcTest);
913
+ });
914
+ }
915
+ // Add full path to the report itself
916
+ testReport.fullPath = path.resolve(process.cwd(), srcTest);
917
+ // Write the modified report back
918
+ fs.writeFileSync(testReportPath, JSON.stringify(testReport, null, 2));
800
919
  testReport.features
801
920
  .reduce(async (mm, featureStringKey) => {
802
921
  const accum = await mm;
@@ -839,7 +958,7 @@ import('${d}').then(async (x) => {
839
958
  return accum;
840
959
  }, Promise.resolve({ files: [], strings: [] }))
841
960
  .then(({ files, strings }) => {
842
- // Markdown files must be referenced in the prompt but string style features are already present in the test.json file
961
+ // Markdown files must be referenced in the prompt but string style features are already present in the tests.json file
843
962
  fs.writeFileSync(`testeranto/reports/${this.name}/${srcTest
844
963
  .split(".")
845
964
  .slice(0, -1)
@@ -893,10 +1012,14 @@ import('${d}').then(async (x) => {
893
1012
  });
894
1013
  this.writeBigBoard();
895
1014
  if (!inflight) {
896
- this.browser.disconnect().then(() => {
897
- console.log(ansiC.inverse(`${this.name} has been tested. Goodbye.`));
898
- process.exit();
899
- });
1015
+ if (this.browser) {
1016
+ if (this.browser) {
1017
+ this.browser.disconnect().then(() => {
1018
+ console.log(ansiC.inverse(`${this.name} has been tested. Goodbye.`));
1019
+ process.exit();
1020
+ });
1021
+ }
1022
+ }
900
1023
  }
901
1024
  };
902
1025
  this.launchers = {};
@@ -908,6 +1031,196 @@ import('${d}').then(async (x) => {
908
1031
  this.configs.ports.forEach((element) => {
909
1032
  this.ports[element] = ""; // set ports as open
910
1033
  });
1034
+ // Create HTTP server
1035
+ this.httpServer = http.createServer(this.requestHandler.bind(this));
1036
+ // Start WebSocket server attached to the HTTP server
1037
+ this.wss = new WebSocketServer({ server: this.httpServer });
1038
+ this.wss.on("connection", (ws) => {
1039
+ this.clients.add(ws);
1040
+ console.log("Client connected");
1041
+ ws.on("message", (data) => {
1042
+ var _a, _b;
1043
+ try {
1044
+ const message = JSON.parse(data.toString());
1045
+ if (message.type === "executeCommand") {
1046
+ // Validate the command starts with 'aider'
1047
+ if (message.command && message.command.trim().startsWith("aider")) {
1048
+ console.log(`Executing command: ${message.command}`);
1049
+ // Execute the command
1050
+ const processId = Date.now().toString();
1051
+ const child = spawn(message.command, {
1052
+ shell: true,
1053
+ cwd: process.cwd(),
1054
+ });
1055
+ // Track the process in both maps
1056
+ this.runningProcesses.set(processId, child);
1057
+ this.allProcesses.set(processId, {
1058
+ child,
1059
+ status: "running",
1060
+ command: message.command,
1061
+ pid: child.pid,
1062
+ timestamp: new Date().toISOString(),
1063
+ });
1064
+ // Initialize logs for this process
1065
+ this.processLogs.set(processId, []);
1066
+ // Broadcast process started
1067
+ this.broadcast({
1068
+ type: "processStarted",
1069
+ processId,
1070
+ command: message.command,
1071
+ timestamp: new Date().toISOString(),
1072
+ logs: [],
1073
+ });
1074
+ // Capture stdout and stderr
1075
+ (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
1076
+ const logData = data.toString();
1077
+ // Add to stored logs
1078
+ const logs = this.processLogs.get(processId) || [];
1079
+ logs.push(logData);
1080
+ this.processLogs.set(processId, logs);
1081
+ this.broadcast({
1082
+ type: "processStdout",
1083
+ processId,
1084
+ data: logData,
1085
+ timestamp: new Date().toISOString(),
1086
+ });
1087
+ });
1088
+ (_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
1089
+ const logData = data.toString();
1090
+ // Add to stored logs
1091
+ const logs = this.processLogs.get(processId) || [];
1092
+ logs.push(logData);
1093
+ this.processLogs.set(processId, logs);
1094
+ this.broadcast({
1095
+ type: "processStderr",
1096
+ processId,
1097
+ data: logData,
1098
+ timestamp: new Date().toISOString(),
1099
+ });
1100
+ });
1101
+ child.on("error", (error) => {
1102
+ console.error(`Failed to execute command: ${error}`);
1103
+ this.runningProcesses.delete(processId);
1104
+ // Update the process status to error
1105
+ const processInfo = this.allProcesses.get(processId);
1106
+ if (processInfo) {
1107
+ this.allProcesses.set(processId, Object.assign(Object.assign({}, processInfo), { status: "error", error: error.message }));
1108
+ }
1109
+ this.broadcast({
1110
+ type: "processError",
1111
+ processId,
1112
+ error: error.message,
1113
+ timestamp: new Date().toISOString(),
1114
+ });
1115
+ });
1116
+ child.on("exit", (code) => {
1117
+ console.log(`Command exited with code ${code}`);
1118
+ // Remove from running processes but keep in allProcesses
1119
+ this.runningProcesses.delete(processId);
1120
+ // Update the process status to exited
1121
+ const processInfo = this.allProcesses.get(processId);
1122
+ if (processInfo) {
1123
+ this.allProcesses.set(processId, Object.assign(Object.assign({}, processInfo), { status: "exited", exitCode: code }));
1124
+ }
1125
+ this.broadcast({
1126
+ type: "processExited",
1127
+ processId,
1128
+ exitCode: code,
1129
+ timestamp: new Date().toISOString(),
1130
+ });
1131
+ });
1132
+ }
1133
+ else {
1134
+ console.error('Invalid command: must start with "aider"');
1135
+ }
1136
+ }
1137
+ else if (message.type === "getRunningProcesses") {
1138
+ // Send list of all processes (both running and completed) with their full logs
1139
+ const processes = Array.from(this.allProcesses.entries()).map(([id, procInfo]) => ({
1140
+ processId: id,
1141
+ command: procInfo.command,
1142
+ pid: procInfo.pid,
1143
+ status: procInfo.status,
1144
+ exitCode: procInfo.exitCode,
1145
+ error: procInfo.error,
1146
+ timestamp: procInfo.timestamp,
1147
+ logs: this.processLogs.get(id) || [],
1148
+ }));
1149
+ ws.send(JSON.stringify({
1150
+ type: "runningProcesses",
1151
+ processes,
1152
+ }));
1153
+ }
1154
+ else if (message.type === "getProcess") {
1155
+ // Send specific process with full logs
1156
+ const processId = message.processId;
1157
+ const procInfo = this.allProcesses.get(processId);
1158
+ if (procInfo) {
1159
+ ws.send(JSON.stringify({
1160
+ type: "processData",
1161
+ processId,
1162
+ command: procInfo.command,
1163
+ pid: procInfo.pid,
1164
+ status: procInfo.status,
1165
+ exitCode: procInfo.exitCode,
1166
+ error: procInfo.error,
1167
+ timestamp: procInfo.timestamp,
1168
+ logs: this.processLogs.get(processId) || [],
1169
+ }));
1170
+ }
1171
+ }
1172
+ else if (message.type === "stdin") {
1173
+ // Handle stdin input for a process
1174
+ const processId = message.processId;
1175
+ const data = message.data;
1176
+ console.log("Received stdin for process", processId, ":", data);
1177
+ const childProcess = this.runningProcesses.get(processId);
1178
+ if (childProcess && childProcess.stdin) {
1179
+ console.log("Writing to process stdin");
1180
+ childProcess.stdin.write(data);
1181
+ }
1182
+ else {
1183
+ console.log("Cannot write to stdin - process not found or no stdin:", {
1184
+ processExists: !!childProcess,
1185
+ stdinExists: (childProcess === null || childProcess === void 0 ? void 0 : childProcess.stdin) ? true : false,
1186
+ });
1187
+ }
1188
+ }
1189
+ else if (message.type === "killProcess") {
1190
+ // Handle killing a process
1191
+ const processId = message.processId;
1192
+ console.log("Received killProcess for process", processId);
1193
+ const childProcess = this.runningProcesses.get(processId);
1194
+ if (childProcess) {
1195
+ console.log("Killing process");
1196
+ childProcess.kill("SIGTERM");
1197
+ // The process exit handler will update the status and broadcast the change
1198
+ }
1199
+ else {
1200
+ console.log("Cannot kill process - process not found:", {
1201
+ processExists: !!childProcess,
1202
+ });
1203
+ }
1204
+ }
1205
+ }
1206
+ catch (error) {
1207
+ console.error("Error handling WebSocket message:", error);
1208
+ }
1209
+ });
1210
+ ws.on("close", () => {
1211
+ this.clients.delete(ws);
1212
+ console.log("Client disconnected");
1213
+ });
1214
+ ws.on("error", (error) => {
1215
+ console.error("WebSocket error:", error);
1216
+ this.clients.delete(ws);
1217
+ });
1218
+ });
1219
+ // Start HTTP server
1220
+ const httpPort = Number(process.env.HTTP_PORT) || 3000;
1221
+ this.httpServer.listen(httpPort, () => {
1222
+ console.log(`HTTP server running on http://localhost:${httpPort}`);
1223
+ });
911
1224
  }
912
1225
  async stopSideCar(uid) {
913
1226
  console.log(ansiC.green(ansiC.inverse(`stopSideCar ${uid}`)));
@@ -999,16 +1312,17 @@ import('${d}').then(async (x) => {
999
1312
  waitForInitialPage: false,
1000
1313
  executablePath,
1001
1314
  headless: true,
1315
+ defaultViewport: null, // Disable default 800x600 viewport
1002
1316
  dumpio: false,
1003
1317
  devtools: false,
1004
1318
  args: [
1005
- "--disable-features=site-per-process",
1006
1319
  "--allow-file-access-from-files",
1007
1320
  "--allow-insecure-localhost",
1008
1321
  "--allow-running-insecure-content",
1009
1322
  "--auto-open-devtools-for-tabs",
1010
1323
  "--disable-dev-shm-usage",
1011
1324
  "--disable-extensions",
1325
+ "--disable-features=site-per-process",
1012
1326
  "--disable-gpu",
1013
1327
  "--disable-setuid-sandbox",
1014
1328
  "--disable-site-isolation-trials",
@@ -1018,6 +1332,7 @@ import('${d}').then(async (x) => {
1018
1332
  "--no-startup-window",
1019
1333
  "--reduce-security-for-testing",
1020
1334
  "--remote-allow-origins=*",
1335
+ "--start-maximized",
1021
1336
  "--unsafely-treat-insecure-origin-as-secure=*",
1022
1337
  `--remote-debugging-port=3234`,
1023
1338
  // "--disable-features=IsolateOrigins,site-per-process",
@@ -1064,7 +1379,7 @@ import('${d}').then(async (x) => {
1064
1379
  },
1065
1380
  ],
1066
1381
  ].forEach(async ([eps, launcher, runtime, watcher]) => {
1067
- const metafile = `./testeranto/bundles/${runtime}/${this.name}/metafile.json`;
1382
+ const metafile = `./testeranto/metafiles/${runtime}/${this.name}.json`;
1068
1383
  await pollForFile(metafile);
1069
1384
  Object.entries(eps).forEach(async ([inputFile, outputFile]) => {
1070
1385
  // await pollForFile(outputFile);\
@@ -1131,11 +1446,26 @@ import('${d}').then(async (x) => {
1131
1446
  this.nodeMetafileWatcher.close();
1132
1447
  this.webMetafileWatcher.close();
1133
1448
  this.importMetafileWatcher.close();
1449
+ // Close any remaining log streams
1450
+ Object.values(this.logStreams || {}).forEach((logs) => logs.closeAll());
1451
+ // Close WebSocket server
1452
+ this.wss.close(() => {
1453
+ console.log("WebSocket server closed");
1454
+ });
1455
+ // Close all client connections
1456
+ this.clients.forEach((client) => {
1457
+ client.terminate();
1458
+ });
1459
+ this.clients.clear();
1460
+ // Close HTTP server
1461
+ this.httpServer.close(() => {
1462
+ console.log("HTTP server closed");
1463
+ });
1134
1464
  this.checkForShutdown();
1135
1465
  }
1136
1466
  async metafileOutputs(platform) {
1137
1467
  const metafile = JSON.parse(fs
1138
- .readFileSync(`./testeranto/bundles/${platform}/${this.name}/metafile.json`)
1468
+ .readFileSync(`./testeranto/metafiles/${platform}/${this.name}.json`)
1139
1469
  .toString()).metafile;
1140
1470
  if (!metafile)
1141
1471
  return;
@@ -1177,6 +1507,144 @@ import('${d}').then(async (x) => {
1177
1507
  }
1178
1508
  });
1179
1509
  }
1510
+ requestHandler(req, res) {
1511
+ // Parse the URL
1512
+ const parsedUrl = url.parse(req.url || "/");
1513
+ let pathname = parsedUrl.pathname || "/";
1514
+ // Handle root path
1515
+ if (pathname === "/") {
1516
+ pathname = "/index.html";
1517
+ }
1518
+ // Remove leading slash
1519
+ let filePath = pathname.substring(1);
1520
+ // Determine which directory to serve from
1521
+ if (filePath.startsWith("reports/")) {
1522
+ // Serve from reports directory
1523
+ filePath = `testeranto/${filePath}`;
1524
+ }
1525
+ else if (filePath.startsWith("metafiles/")) {
1526
+ // Serve from metafiles directory
1527
+ filePath = `testeranto/${filePath}`;
1528
+ }
1529
+ else if (filePath === "projects.json") {
1530
+ // Serve projects.json
1531
+ filePath = `testeranto/${filePath}`;
1532
+ }
1533
+ else {
1534
+ // For frontend assets, try multiple possible locations
1535
+ // First, try the dist directory
1536
+ const possiblePaths = [
1537
+ `dist/${filePath}`,
1538
+ `testeranto/dist/${filePath}`,
1539
+ `../dist/${filePath}`,
1540
+ `./${filePath}`,
1541
+ ];
1542
+ // Find the first existing file
1543
+ let foundPath = null;
1544
+ for (const possiblePath of possiblePaths) {
1545
+ if (fs.existsSync(possiblePath)) {
1546
+ foundPath = possiblePath;
1547
+ break;
1548
+ }
1549
+ }
1550
+ if (foundPath) {
1551
+ filePath = foundPath;
1552
+ }
1553
+ else {
1554
+ // If no file found, serve index.html for SPA routing
1555
+ const indexPath = this.findIndexHtml();
1556
+ if (indexPath) {
1557
+ fs.readFile(indexPath, (err, data) => {
1558
+ if (err) {
1559
+ res.writeHead(404, { "Content-Type": "text/plain" });
1560
+ res.end("404 Not Found");
1561
+ return;
1562
+ }
1563
+ res.writeHead(200, { "Content-Type": "text/html" });
1564
+ res.end(data);
1565
+ });
1566
+ return;
1567
+ }
1568
+ else {
1569
+ res.writeHead(404, { "Content-Type": "text/plain" });
1570
+ res.end("404 Not Found");
1571
+ return;
1572
+ }
1573
+ }
1574
+ }
1575
+ // Check if file exists
1576
+ fs.exists(filePath, (exists) => {
1577
+ if (!exists) {
1578
+ // For SPA routing, serve index.html if the path looks like a route
1579
+ if (!pathname.includes(".") && pathname !== "/") {
1580
+ const indexPath = this.findIndexHtml();
1581
+ if (indexPath) {
1582
+ fs.readFile(indexPath, (err, data) => {
1583
+ if (err) {
1584
+ res.writeHead(404, { "Content-Type": "text/plain" });
1585
+ res.end("404 Not Found");
1586
+ return;
1587
+ }
1588
+ res.writeHead(200, { "Content-Type": "text/html" });
1589
+ res.end(data);
1590
+ });
1591
+ return;
1592
+ }
1593
+ else {
1594
+ // Serve a simple message if index.html is not found
1595
+ res.writeHead(200, { "Content-Type": "text/html" });
1596
+ res.end(`
1597
+ <html>
1598
+ <body>
1599
+ <h1>Testeranto is running</h1>
1600
+ <p>Frontend files are not built yet. Run 'npm run build' to build the frontend.</p>
1601
+ </body>
1602
+ </html>
1603
+ `);
1604
+ return;
1605
+ }
1606
+ }
1607
+ res.writeHead(404, { "Content-Type": "text/plain" });
1608
+ res.end("404 Not Found");
1609
+ return;
1610
+ }
1611
+ // Read and serve the file
1612
+ fs.readFile(filePath, (err, data) => {
1613
+ if (err) {
1614
+ res.writeHead(500, { "Content-Type": "text/plain" });
1615
+ res.end("500 Internal Server Error");
1616
+ return;
1617
+ }
1618
+ // Get MIME type
1619
+ const mimeType = mime.lookup(filePath) || "application/octet-stream";
1620
+ res.writeHead(200, { "Content-Type": mimeType });
1621
+ res.end(data);
1622
+ });
1623
+ });
1624
+ }
1625
+ findIndexHtml() {
1626
+ const possiblePaths = [
1627
+ "dist/index.html",
1628
+ "testeranto/dist/index.html",
1629
+ "../dist/index.html",
1630
+ "./index.html",
1631
+ ];
1632
+ for (const path of possiblePaths) {
1633
+ if (fs.existsSync(path)) {
1634
+ return path;
1635
+ }
1636
+ }
1637
+ return null;
1638
+ }
1639
+ broadcast(message) {
1640
+ const data = typeof message === "string" ? message : JSON.stringify(message);
1641
+ this.clients.forEach((client) => {
1642
+ if (client.readyState === 1) {
1643
+ // WebSocket.OPEN
1644
+ client.send(data);
1645
+ }
1646
+ });
1647
+ }
1180
1648
  checkQueue() {
1181
1649
  const x = this.queue.pop();
1182
1650
  if (!x) {