testeranto 0.200.1 → 0.203.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 (740) hide show
  1. package/README.md +49 -1
  2. package/UX/chache/index.md +11 -0
  3. package/design-editor/DesignEditor.tsx +40 -241
  4. package/dist/prebuild/App.css +171 -120
  5. package/dist/prebuild/App.js +47117 -11727
  6. package/dist/prebuild/testeranto.mjs +5048 -2578
  7. package/example/Calculator.go +63 -0
  8. package/example/Calculator.golingvu.adapter.go +81 -0
  9. package/example/Calculator.golingvu.go +67 -0
  10. package/example/Calculator.golingvu.implementation.go +95 -0
  11. package/example/Calculator.golingvu.specification.go +68 -0
  12. package/example/Calculator.pitono.adapter.py +68 -0
  13. package/example/Calculator.pitono.implementation.py +30 -0
  14. package/example/Calculator.pitono.specification.py +154 -0
  15. package/example/Calculator.pitono.test.py +47 -0
  16. package/example/Calculator.py +93 -0
  17. package/example/Calculator.test.adapter.ts +86 -0
  18. package/example/Calculator.test.implementation.ts +82 -0
  19. package/example/Calculator.test.specification.ts +213 -0
  20. package/example/Calculator.test.ts +13 -0
  21. package/example/Calculator.test.types.ts +50 -0
  22. package/example/Calculator.ts +130 -0
  23. package/example/README.md +1 -0
  24. package/example/base_suite_test.go +51 -0
  25. package/example/cmd/main.go +16 -0
  26. package/example/go.mod +9 -0
  27. package/example/main +0 -0
  28. package/example/test_example.py +143 -74
  29. package/example/testeranto/bundles/golang/core/Calculator.golingvu.go +53 -0
  30. package/example/testeranto/metafiles/golang/core.json +198 -0
  31. package/git-integration-plan.md +395 -0
  32. package/go.mod +3 -1
  33. package/golingvu.tmp.txt +68 -0
  34. package/log.txt +85 -0
  35. package/package.json +67 -46
  36. package/scripts/build-example.ts +245 -0
  37. package/src/App.tsx +226 -25
  38. package/src/Helpo.tsx +89 -0
  39. package/src/PM/PM_WithBuild.ts +183 -0
  40. package/src/PM/PM_WithEslintAndTsc.ts +109 -86
  41. package/src/PM/PM_WithGit.ts +632 -0
  42. package/src/PM/PM_WithHelpo.ts +341 -0
  43. package/src/PM/PM_WithProcesses.ts +900 -0
  44. package/src/PM/PM_WithWebSocket.ts +839 -0
  45. package/src/PM/base.ts +63 -1
  46. package/src/PM/golingvuBuild.ts +56 -0
  47. package/src/PM/index.ts +8 -5
  48. package/src/PM/main.ts +735 -1981
  49. package/src/PM/node.ts +18 -18
  50. package/src/PM/pitonoBuild.ts +56 -0
  51. package/src/PM/pure.ts +5 -13
  52. package/src/PM/types.ts +145 -0
  53. package/src/PM/utils.ts +262 -0
  54. package/src/PM/web.ts +8 -8
  55. package/src/README.md +122 -0
  56. package/src/ReportServer.ts +0 -12
  57. package/src/ReportServerLib.ts +0 -147
  58. package/src/Types.ts +1 -0
  59. package/src/app.scss +92 -140
  60. package/src/components/pure/AppFrame.tsx +354 -78
  61. package/src/components/pure/ArtifactTree.tsx +82 -0
  62. package/src/components/pure/BuildLogViewer.tsx +168 -0
  63. package/src/components/pure/DebugEnv.tsx +30 -0
  64. package/src/components/pure/FileTree.tsx +58 -0
  65. package/src/components/pure/FileTreeItem.tsx +49 -0
  66. package/src/components/pure/GitHubLoginButton.tsx +31 -0
  67. package/src/components/pure/GitIntegrationView.tsx +732 -0
  68. package/src/components/pure/HelpoChatDrawer.tsx +222 -0
  69. package/src/components/pure/MagicRobotModal.tsx +136 -0
  70. package/src/components/pure/ProcessDetails.tsx +99 -0
  71. package/src/components/pure/ProcessInput.tsx +67 -0
  72. package/src/components/pure/ProcessList.tsx +89 -0
  73. package/src/components/pure/ProcessLogs.tsx +54 -0
  74. package/src/components/pure/ProcessManager.tsx +38 -46
  75. package/src/components/pure/ProcessManagerView.tsx +44 -373
  76. package/src/components/pure/ProcessManagerViewTypes.ts +10 -0
  77. package/src/components/pure/ProcessSidebar.tsx +88 -0
  78. package/src/components/pure/ProcessTerminal.tsx +51 -0
  79. package/src/components/pure/ProjectPageView.tsx +6 -224
  80. package/src/components/pure/Settings.test.tsx +34 -0
  81. package/src/components/pure/Settings.tsx +163 -0
  82. package/src/components/pure/SignIn.tsx +33 -0
  83. package/src/components/pure/SingleProcessView.tsx +85 -180
  84. package/src/components/pure/TerminalInput.tsx +73 -0
  85. package/src/components/pure/TerminalLogs.tsx +80 -0
  86. package/src/components/pure/TestPageView.test/specification.ts +1 -0
  87. package/src/components/pure/TestPageView.tsx +308 -912
  88. package/src/components/pure/TestPageView_utils.tsx +287 -0
  89. package/src/components/pure/TestTable.tsx +88 -0
  90. package/src/components/pure/ToastNotification.tsx +19 -0
  91. package/src/components/pure/UserProfile.tsx +44 -0
  92. package/src/components/stateful/AuthCallbackPage.tsx +21 -0
  93. package/src/components/stateful/DratoPage.tsx +457 -0
  94. package/src/components/stateful/FeaturesReporter.tsx +3 -1
  95. package/src/components/stateful/FileTree.tsx +58 -58
  96. package/src/components/stateful/GenericXMLEditor/AttributeEditor.tsx +87 -0
  97. package/src/components/stateful/GenericXMLEditor/Drawer.tsx +174 -0
  98. package/src/components/stateful/GenericXMLEditor/GenericPreview.tsx +160 -0
  99. package/src/components/stateful/GenericXMLEditor/GenericTextEditor.tsx +104 -0
  100. package/src/components/stateful/GenericXMLEditor/GenericTree.tsx +104 -0
  101. package/src/components/stateful/GenericXMLEditorPage.tsx +346 -0
  102. package/src/components/stateful/GitIntegrationPage.tsx +263 -0
  103. package/src/components/stateful/GrafeoPage.tsx +563 -0
  104. package/src/components/stateful/ProcessManagerPage.tsx +13 -17
  105. package/src/components/stateful/ProjectPage.tsx +6 -5
  106. package/src/components/stateful/ProjectsPage.tsx +17 -19
  107. package/src/components/stateful/SVGEditor/CircleForm.tsx +68 -0
  108. package/src/components/stateful/SVGEditor/GroupForm.tsx +56 -0
  109. package/src/components/stateful/SVGEditor/RectForm.tsx +74 -0
  110. package/src/components/stateful/SVGEditor/SVGAttributeField.tsx +29 -0
  111. package/src/components/stateful/SVGEditor/SVGAttributesEditor.tsx +91 -0
  112. package/src/components/stateful/SVGEditor/SVGEditorControls.tsx +45 -0
  113. package/src/components/stateful/SVGEditor/SVGElementForm.tsx +45 -0
  114. package/src/components/stateful/SVGEditor/SVGPreview.tsx +227 -0
  115. package/src/components/stateful/SVGEditor/SVGTextEditor.tsx +166 -0
  116. package/src/components/stateful/SVGEditor/SVGTree.tsx +159 -0
  117. package/src/components/stateful/SVGEditor/SVGTypes.ts +36 -0
  118. package/src/components/stateful/SVGEditor/svg.xsd.xml +3038 -0
  119. package/src/components/stateful/SVGEditorPage.tsx +517 -0
  120. package/src/components/stateful/SingleProcessPage.tsx +133 -144
  121. package/src/components/stateful/SkriboPage.tsx +765 -0
  122. package/src/components/stateful/TestPage.tsx +27 -23
  123. package/src/esbuildConfigs/node.ts +1 -1
  124. package/src/example/go.mod +9 -0
  125. package/src/example/main.go +61 -0
  126. package/src/golingvu/PM/golang_test.go +103 -0
  127. package/src/golingvu/README.md +186 -2
  128. package/src/golingvu/base_given.go +89 -2
  129. package/src/golingvu/base_suite.go +48 -2
  130. package/src/golingvu/go.mod +6 -0
  131. package/src/golingvu/golingvu.go +724 -14
  132. package/src/golingvu/types.go +0 -14
  133. package/src/helpo/directives.md +5 -0
  134. package/src/helpo/prompt.txt +38 -0
  135. package/src/hooks/useGitMode.ts +20 -0
  136. package/src/hooks/useTerminalWebSocket.ts +49 -0
  137. package/src/lib/BaseGiven.ts +126 -28
  138. package/src/lib/BaseSuite.test/mock.ts +16 -10
  139. package/src/lib/BaseSuite.test/test.ts +165 -207
  140. package/src/lib/BaseSuite.ts +52 -10
  141. package/src/lib/BaseThen.ts +34 -38
  142. package/src/lib/BaseWhen.ts +9 -2
  143. package/src/lib/Tiposkripto.test/MockTiposkripto.ts +178 -14
  144. package/src/lib/Tiposkripto.test/Tiposkripto.adapter.ts +9 -14
  145. package/src/lib/Tiposkripto.test/Tiposkripto.implementation.ts +78 -38
  146. package/src/lib/Tiposkripto.test/Tiposkripto.specification.ts +51 -8
  147. package/src/lib/Tiposkripto.test/Tiposkripto.types.ts +5 -0
  148. package/src/lib/Tiposkripto.ts +64 -7
  149. package/src/lib/index.ts +7 -0
  150. package/src/lib/pmProxy.test/specification.ts +168 -166
  151. package/src/lib/pmProxy.ts +55 -18
  152. package/src/pitono/PM/python.py +165 -0
  153. package/src/pitono/Pitono.py +298 -0
  154. package/src/pitono/PitonoTest.py +25 -0
  155. package/src/pitono/README.md +21 -0
  156. package/src/pitono/__init__.py +6 -0
  157. package/{pitono → src/pitono}/base_given.py +42 -20
  158. package/{pitono → src/pitono}/base_suite.py +55 -2
  159. package/{pitono → src/pitono}/base_then.py +15 -1
  160. package/{pitono → src/pitono}/base_when.py +15 -1
  161. package/{pitono → src/pitono}/pitono.egg-info/PKG-INFO +25 -0
  162. package/{pitono → src/pitono}/pitono.egg-info/SOURCES.txt +1 -0
  163. package/src/pitono/types.py +87 -0
  164. package/src/services/FileService.ts +677 -0
  165. package/src/services/GitHubAuthService.ts +240 -0
  166. package/src/testeranto.ts +133 -245
  167. package/src/utils/api.ts +15 -13
  168. package/src/utils/gitTest.ts +29 -0
  169. package/src/utils/golingvuMetafile.ts +822 -118
  170. package/src/utils/golingvuWatcher.ts +285 -0
  171. package/src/utils/logFiles.ts +10 -2
  172. package/src/utils/makePrompt.ts +12 -1
  173. package/src/utils/pitonoMetafile.ts +326 -54
  174. package/src/utils/pitonoWatcher.ts +157 -0
  175. package/src/utils.ts +21 -12
  176. package/testeranto/App.css +171 -120
  177. package/testeranto/App.js +47117 -11727
  178. package/testeranto/bundles/node/core/chunk-MJTSYIAQ.mjs +1099 -0
  179. package/testeranto/bundles/node/core/src/lib/BaseSuite.test/node.test.mjs +58 -1147
  180. package/testeranto/bundles/node/core/src/lib/TipoSkripto.test/TipoSkripto.mjs +572 -0
  181. package/testeranto/bundles/node/core/src/lib/pmProxy.test/index.mjs +4795 -0
  182. package/testeranto/bundles/pure/core/chunk-6HR24P27.mjs +1003 -0
  183. package/testeranto/bundles/pure/core/src/Pure.test.mjs +410 -0
  184. package/testeranto/bundles/pure/core/src/lib/BaseSuite.test/pure.test.mjs +57 -1062
  185. package/testeranto/bundles/web/core/MPLUSRounded1c-Black-O75GP5JI.ttf +0 -0
  186. package/testeranto/bundles/web/core/MPLUSRounded1c-Bold-R524Q5BH.ttf +0 -0
  187. package/testeranto/bundles/web/core/MPLUSRounded1c-ExtraBold-C6GRMYVT.ttf +0 -0
  188. package/testeranto/bundles/web/core/MPLUSRounded1c-Light-WKN65Y2C.ttf +0 -0
  189. package/testeranto/bundles/web/core/MPLUSRounded1c-Medium-ZC4DWL7C.ttf +0 -0
  190. package/testeranto/bundles/web/core/MPLUSRounded1c-Regular-DT6EKZ3S.ttf +0 -0
  191. package/testeranto/bundles/web/core/MPLUSRounded1c-Thin-YWDNVG6M.ttf +0 -0
  192. package/testeranto/bundles/web/core/chunk-AZZHJNSU.mjs +30278 -0
  193. package/testeranto/bundles/web/core/chunk-ME6I6FJZ.mjs +3005 -0
  194. package/testeranto/bundles/web/core/src/components/pure/FeaturesReporterView.test/index.html +15 -0
  195. package/testeranto/bundles/web/core/src/components/pure/FeaturesReporterView.test/index.mjs +162 -0
  196. package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.css +11619 -0
  197. package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.html +15 -0
  198. package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.mjs +6924 -0
  199. package/testeranto/bundles/web/core/src/lib/BaseSuite.test/web.test.mjs +71 -1050
  200. package/testeranto/helpo_chat_history.json +1 -0
  201. package/testeranto/metafiles/golang/core.json +42 -47
  202. package/testeranto/metafiles/node/core.json +584 -125
  203. package/testeranto/metafiles/pure/core.json +152 -51
  204. package/testeranto/metafiles/python/core.json +87 -0
  205. package/testeranto/metafiles/web/core.json +16365 -75
  206. package/testeranto/reports/core/config.json +66 -2
  207. package/testeranto/reports/core/example/Calculator.golingvu/golang/exit.log +1 -0
  208. package/testeranto/reports/core/example/Calculator.golingvu/golang/stderr.log +2 -0
  209. package/testeranto/reports/core/example/Calculator.golingvu/golang/stdout.log +1 -0
  210. package/testeranto/reports/core/example/Calculator.pitono.test/python/exit.log +1 -0
  211. package/testeranto/reports/core/example/Calculator.pitono.test/python/stderr.log +11 -0
  212. package/testeranto/reports/core/example/Calculator.pitono.test/python/stdout.log +1 -0
  213. package/testeranto/reports/core/example/Calculator.test/node/exit.log +1 -0
  214. package/testeranto/reports/core/example/Calculator.test/node/lint_errors.txt +2 -0
  215. package/testeranto/reports/core/example/Calculator.test/node/message.txt +16 -0
  216. package/testeranto/reports/core/example/Calculator.test/node/prompt.txt +13 -0
  217. package/testeranto/reports/core/example/Calculator.test/node/stderr.log +33 -0
  218. package/testeranto/reports/core/example/Calculator.test/node/stdout.log +1076 -0
  219. package/testeranto/reports/core/example/Calculator.test/node/tests.json +1109 -0
  220. package/testeranto/reports/core/example/Calculator.test/node/type_errors.txt +34 -0
  221. package/testeranto/reports/core/example/test_example/python/exit.log +1 -0
  222. package/testeranto/reports/core/example/test_example/python/stderr.log +24 -0
  223. package/testeranto/reports/core/src/Pure.test/pure/message.txt +16 -0
  224. package/testeranto/reports/core/src/Pure.test/pure/prompt.txt +13 -0
  225. package/testeranto/reports/core/src/Pure.test/pure/type_errors.txt +86 -0
  226. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/exit.log +0 -0
  227. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/info.log +0 -0
  228. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/lint_errors.txt +0 -0
  229. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/message.txt +17 -0
  230. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/prompt.txt +26 -0
  231. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/type_errors.txt +69 -0
  232. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/warn.log +0 -0
  233. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/debug.log +0 -0
  234. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/error.log +0 -0
  235. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/exit.log +0 -0
  236. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/info.log +0 -0
  237. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/lint_errors.txt +16 -0
  238. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/message.txt +17 -0
  239. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/prompt.txt +27 -0
  240. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/type_errors.txt +42 -0
  241. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/warn.log +0 -0
  242. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/debug.log +0 -0
  243. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/error.log +0 -0
  244. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/exit.log +0 -0
  245. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/info.log +0 -0
  246. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/lint_errors.txt +30 -0
  247. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/message.txt +17 -0
  248. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/prompt.txt +30 -0
  249. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/type_errors.txt +58 -0
  250. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/warn.log +0 -0
  251. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/exit.log +1 -1
  252. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/lint_errors.txt +0 -6
  253. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/prompt.txt +9 -12
  254. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/stderr.log +1 -0
  255. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/stdout.log +4 -0
  256. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/tests.json +99 -8
  257. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/type_errors.txt +57 -44
  258. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/lint_errors.txt +0 -2
  259. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/message.txt +1 -2
  260. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/prompt.txt +4 -16
  261. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/type_errors.txt +62 -44
  262. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/error.log +0 -1
  263. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/exit.log +0 -1
  264. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/lint_errors.txt +0 -2
  265. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/prompt.txt +13 -13
  266. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/type_errors.txt +57 -44
  267. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/exit.log +1 -0
  268. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/lint_errors.txt +0 -0
  269. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/message.txt +16 -0
  270. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/prompt.txt +13 -0
  271. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/stderr.log +88 -0
  272. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/stdout.log +521 -0
  273. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/tests.json +166 -0
  274. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/type_errors.txt +78 -0
  275. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/exit.log +1 -0
  276. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/lint_errors.txt +15 -0
  277. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/message.txt +17 -0
  278. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/prompt.txt +25 -0
  279. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stderr.log +0 -0
  280. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stdout.log +2 -0
  281. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/tests.json +31 -0
  282. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/type_errors.txt +62 -0
  283. package/testeranto/reports/core/summary.json +66 -11
  284. package/testeranto.config.ts +38 -44
  285. package/tsc.log +141 -91
  286. package/tsconfig.json +6 -2
  287. package/dist/cjs-shim.js +0 -12
  288. package/dist/common/design-editor/DesignEditor.js +0 -242
  289. package/dist/common/design-editor/index.js +0 -18
  290. package/dist/common/design-editor/server.js +0 -98
  291. package/dist/common/design-editor/types.js +0 -2
  292. package/dist/common/package.json +0 -3
  293. package/dist/common/src/App.js +0 -77
  294. package/dist/common/src/CoreTypes.js +0 -2
  295. package/dist/common/src/Init.js +0 -48
  296. package/dist/common/src/Node.js +0 -40
  297. package/dist/common/src/NodeSidecar.js +0 -15
  298. package/dist/common/src/PM/PM_WithEslintAndTsc.js +0 -192
  299. package/dist/common/src/PM/__tests__/nodeSidecar.testeranto.js +0 -108
  300. package/dist/common/src/PM/__tests__/pureSidecar.testeranto.js +0 -93
  301. package/dist/common/src/PM/__tests__/webSidecar.testeranto.js +0 -93
  302. package/dist/common/src/PM/base.js +0 -257
  303. package/dist/common/src/PM/index.js +0 -6
  304. package/dist/common/src/PM/main.js +0 -1815
  305. package/dist/common/src/PM/node.js +0 -185
  306. package/dist/common/src/PM/nodeSidecar.js +0 -65
  307. package/dist/common/src/PM/pitonoRunner.js +0 -54
  308. package/dist/common/src/PM/pure.js +0 -111
  309. package/dist/common/src/PM/pureSidecar.js +0 -48
  310. package/dist/common/src/PM/sidecar.js +0 -11
  311. package/dist/common/src/PM/types.js +0 -1
  312. package/dist/common/src/PM/web.js +0 -112
  313. package/dist/common/src/PM/webSidecar.js +0 -47
  314. package/dist/common/src/Pure.js +0 -52
  315. package/dist/common/src/Pure.test.js +0 -180
  316. package/dist/common/src/PureSidecar.js +0 -13
  317. package/dist/common/src/ReportServer.js +0 -11
  318. package/dist/common/src/ReportServer.test.ts/index.js +0 -78
  319. package/dist/common/src/ReportServerLib.js +0 -141
  320. package/dist/common/src/Types.js +0 -2
  321. package/dist/common/src/Web.js +0 -61
  322. package/dist/common/src/WebSidecar.js +0 -14
  323. package/dist/common/src/components/DesignEditorPage.js +0 -205
  324. package/dist/common/src/components/SunriseAnimation.js +0 -291
  325. package/dist/common/src/components/SunriseAnimation.test/implementation.js +0 -1
  326. package/dist/common/src/components/SunriseAnimation.test/index.js +0 -1
  327. package/dist/common/src/components/SunriseAnimation.test/interface.js +0 -68
  328. package/dist/common/src/components/SunriseAnimation.test/specification.js +0 -1
  329. package/dist/common/src/components/SunriseAnimation.test/types.js +0 -2
  330. package/dist/common/src/components/TestStatusBadge.js +0 -35
  331. package/dist/common/src/components/pure/AppFrame.js +0 -69
  332. package/dist/common/src/components/pure/AppFrame.test/implementation.js +0 -63
  333. package/dist/common/src/components/pure/AppFrame.test/index.js +0 -14
  334. package/dist/common/src/components/pure/AppFrame.test/specification.js +0 -25
  335. package/dist/common/src/components/pure/AppFrame.test/types.js +0 -3
  336. package/dist/common/src/components/pure/FeaturesReporterView.js +0 -23
  337. package/dist/common/src/components/pure/FeaturesReporterView.test/implementation.js +0 -84
  338. package/dist/common/src/components/pure/FeaturesReporterView.test/index.js +0 -14
  339. package/dist/common/src/components/pure/FeaturesReporterView.test/specification.js +0 -27
  340. package/dist/common/src/components/pure/FeaturesReporterView.test/types.js +0 -2
  341. package/dist/common/src/components/pure/ModalContent.js +0 -86
  342. package/dist/common/src/components/pure/ModalContent.test/implementation.js +0 -35
  343. package/dist/common/src/components/pure/ModalContent.test/index.js +0 -58
  344. package/dist/common/src/components/pure/ModalContent.test/specification.js +0 -19
  345. package/dist/common/src/components/pure/ModalContent.test/types.js +0 -4
  346. package/dist/common/src/components/pure/NavBar.js +0 -44
  347. package/dist/common/src/components/pure/ProcessManager.js +0 -112
  348. package/dist/common/src/components/pure/ProcessManagerView.js +0 -237
  349. package/dist/common/src/components/pure/ProjectPageView.js +0 -181
  350. package/dist/common/src/components/pure/ProjectPageView.test/implementation.js +0 -184
  351. package/dist/common/src/components/pure/ProjectPageView.test/index.js +0 -14
  352. package/dist/common/src/components/pure/ProjectPageView.test/specification.js +0 -32
  353. package/dist/common/src/components/pure/ProjectPageView.test/types.js +0 -4
  354. package/dist/common/src/components/pure/ProjectsPageView.js +0 -72
  355. package/dist/common/src/components/pure/SettingsButton.js +0 -13
  356. package/dist/common/src/components/pure/SingleProcessView.js +0 -214
  357. package/dist/common/src/components/pure/TestPageView.js +0 -628
  358. package/dist/common/src/components/pure/TestPageView.test/implementation.js +0 -157
  359. package/dist/common/src/components/pure/TestPageView.test/index.js +0 -15
  360. package/dist/common/src/components/pure/TestPageView.test/specification.js +0 -26
  361. package/dist/common/src/components/pure/TestPageView.test/types.js +0 -4
  362. package/dist/common/src/components/pure/ThemeCard.js +0 -15
  363. package/dist/common/src/components/stateful/FeaturesReporter.js +0 -59
  364. package/dist/common/src/components/stateful/FileTree.js +0 -40
  365. package/dist/common/src/components/stateful/ProcessManagerPage.js +0 -112
  366. package/dist/common/src/components/stateful/ProjectPage.js +0 -101
  367. package/dist/common/src/components/stateful/ProjectsPage.js +0 -118
  368. package/dist/common/src/components/stateful/SettingsPage.js +0 -72
  369. package/dist/common/src/components/stateful/SingleProcessPage.js +0 -147
  370. package/dist/common/src/components/stateful/TestPage.js +0 -268
  371. package/dist/common/src/components/stateful/TextEditorPage.js +0 -154
  372. package/dist/common/src/defaultConfig.js +0 -19
  373. package/dist/common/src/esbuildConfigs/consoleDetectorPlugin.js +0 -38
  374. package/dist/common/src/esbuildConfigs/eslint-formatter-testeranto.js +0 -21
  375. package/dist/common/src/esbuildConfigs/featuresPlugin.js +0 -39
  376. package/dist/common/src/esbuildConfigs/index.js +0 -21
  377. package/dist/common/src/esbuildConfigs/inputFilesPlugin.js +0 -30
  378. package/dist/common/src/esbuildConfigs/nativeImportDetectorPlugin.js +0 -24
  379. package/dist/common/src/esbuildConfigs/node.js +0 -24
  380. package/dist/common/src/esbuildConfigs/pure.js +0 -42
  381. package/dist/common/src/esbuildConfigs/rebuildPlugin.js +0 -19
  382. package/dist/common/src/esbuildConfigs/web.js +0 -48
  383. package/dist/common/src/init-docs.js +0 -9
  384. package/dist/common/src/lib/BaseGiven.js +0 -99
  385. package/dist/common/src/lib/BaseSuite.js +0 -91
  386. package/dist/common/src/lib/BaseSuite.test/mock.js +0 -61
  387. package/dist/common/src/lib/BaseSuite.test/node.test.js +0 -10
  388. package/dist/common/src/lib/BaseSuite.test/pure.test.js +0 -10
  389. package/dist/common/src/lib/BaseSuite.test/test.js +0 -253
  390. package/dist/common/src/lib/BaseSuite.test/web.test.js +0 -10
  391. package/dist/common/src/lib/BaseThen.js +0 -64
  392. package/dist/common/src/lib/BaseWhen.js +0 -45
  393. package/dist/common/src/lib/Sidecar.js +0 -7
  394. package/dist/common/src/lib/Tiposkripto.js +0 -149
  395. package/dist/common/src/lib/Tiposkripto.test/MockTiposkripto.js +0 -36
  396. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.adapter.js +0 -35
  397. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.implementation.js +0 -173
  398. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.js +0 -11
  399. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.specification.js +0 -42
  400. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.types.js +0 -2
  401. package/dist/common/src/lib/abstractBase.test/MockGiven.js +0 -24
  402. package/dist/common/src/lib/abstractBase.test/MockThen.js +0 -16
  403. package/dist/common/src/lib/abstractBase.test/MockWhen.js +0 -20
  404. package/dist/common/src/lib/abstractBase.test/adapter.js +0 -24
  405. package/dist/common/src/lib/abstractBase.test/implementation.js +0 -38
  406. package/dist/common/src/lib/abstractBase.test/index.js +0 -18
  407. package/dist/common/src/lib/abstractBase.test/specification.js +0 -19
  408. package/dist/common/src/lib/abstractBase.test/types.js +0 -2
  409. package/dist/common/src/lib/index.js +0 -31
  410. package/dist/common/src/lib/pmProxy.js +0 -293
  411. package/dist/common/src/lib/pmProxy.test/adapter.js +0 -54
  412. package/dist/common/src/lib/pmProxy.test/implementation.js +0 -137
  413. package/dist/common/src/lib/pmProxy.test/index.js +0 -15
  414. package/dist/common/src/lib/pmProxy.test/mockPM.js +0 -34
  415. package/dist/common/src/lib/pmProxy.test/mockPMBase.js +0 -131
  416. package/dist/common/src/lib/pmProxy.test/specification.js +0 -64
  417. package/dist/common/src/lib/pmProxy.test/types.js +0 -2
  418. package/dist/common/src/lib/types.js +0 -3
  419. package/dist/common/src/mothership/index.js +0 -21
  420. package/dist/common/src/mothership/test.js +0 -83
  421. package/dist/common/src/run.js +0 -49
  422. package/dist/common/src/testeranto.js +0 -283
  423. package/dist/common/src/types/features.js +0 -34
  424. package/dist/common/src/utils/api.js +0 -89
  425. package/dist/common/src/utils/buildTemplates.js +0 -37
  426. package/dist/common/src/utils/featureUtils.js +0 -29
  427. package/dist/common/src/utils/golingvuMetafile.js +0 -116
  428. package/dist/common/src/utils/logFiles.js +0 -52
  429. package/dist/common/src/utils/makePrompt.js +0 -116
  430. package/dist/common/src/utils/pitonoMetafile.js +0 -67
  431. package/dist/common/src/utils/queue.js +0 -36
  432. package/dist/common/src/utils.js +0 -133
  433. package/dist/common/src/web.html.js +0 -18
  434. package/dist/common/testeranto.config.js +0 -98
  435. package/dist/common/tsconfig.common.tsbuildinfo +0 -1
  436. package/dist/module/design-editor/DesignEditor.js +0 -206
  437. package/dist/module/design-editor/index.js +0 -2
  438. package/dist/module/design-editor/server.js +0 -92
  439. package/dist/module/design-editor/types.js +0 -1
  440. package/dist/module/package.json +0 -3
  441. package/dist/module/src/App.js +0 -70
  442. package/dist/module/src/CoreTypes.js +0 -1
  443. package/dist/module/src/Init.js +0 -43
  444. package/dist/module/src/Node.js +0 -33
  445. package/dist/module/src/NodeSidecar.js +0 -11
  446. package/dist/module/src/PM/PM_WithEslintAndTsc.js +0 -185
  447. package/dist/module/src/PM/__tests__/nodeSidecar.testeranto.js +0 -103
  448. package/dist/module/src/PM/__tests__/pureSidecar.testeranto.js +0 -88
  449. package/dist/module/src/PM/__tests__/webSidecar.testeranto.js +0 -88
  450. package/dist/module/src/PM/base.js +0 -250
  451. package/dist/module/src/PM/index.js +0 -2
  452. package/dist/module/src/PM/main.js +0 -1775
  453. package/dist/module/src/PM/node.js +0 -178
  454. package/dist/module/src/PM/nodeSidecar.js +0 -58
  455. package/dist/module/src/PM/pitonoRunner.js +0 -47
  456. package/dist/module/src/PM/pure.js +0 -107
  457. package/dist/module/src/PM/pureSidecar.js +0 -41
  458. package/dist/module/src/PM/sidecar.js +0 -7
  459. package/dist/module/src/PM/types.js +0 -1
  460. package/dist/module/src/PM/web.js +0 -108
  461. package/dist/module/src/PM/webSidecar.js +0 -40
  462. package/dist/module/src/Pure.js +0 -45
  463. package/dist/module/src/Pure.test.js +0 -175
  464. package/dist/module/src/PureSidecar.js +0 -9
  465. package/dist/module/src/ReportServer.js +0 -9
  466. package/dist/module/src/ReportServer.test.ts/index.js +0 -73
  467. package/dist/module/src/ReportServerLib.js +0 -134
  468. package/dist/module/src/Types.js +0 -1
  469. package/dist/module/src/Web.js +0 -54
  470. package/dist/module/src/WebSidecar.js +0 -10
  471. package/dist/module/src/components/DesignEditorPage.js +0 -168
  472. package/dist/module/src/components/SunriseAnimation.js +0 -256
  473. package/dist/module/src/components/SunriseAnimation.test/implementation.js +0 -1
  474. package/dist/module/src/components/SunriseAnimation.test/index.js +0 -1
  475. package/dist/module/src/components/SunriseAnimation.test/interface.js +0 -32
  476. package/dist/module/src/components/SunriseAnimation.test/specification.js +0 -1
  477. package/dist/module/src/components/SunriseAnimation.test/types.js +0 -1
  478. package/dist/module/src/components/TestStatusBadge.js +0 -28
  479. package/dist/module/src/components/pure/AppFrame.js +0 -32
  480. package/dist/module/src/components/pure/AppFrame.test/implementation.js +0 -57
  481. package/dist/module/src/components/pure/AppFrame.test/index.js +0 -9
  482. package/dist/module/src/components/pure/AppFrame.test/specification.js +0 -21
  483. package/dist/module/src/components/pure/AppFrame.test/types.js +0 -2
  484. package/dist/module/src/components/pure/FeaturesReporterView.js +0 -16
  485. package/dist/module/src/components/pure/FeaturesReporterView.test/implementation.js +0 -81
  486. package/dist/module/src/components/pure/FeaturesReporterView.test/index.js +0 -9
  487. package/dist/module/src/components/pure/FeaturesReporterView.test/specification.js +0 -23
  488. package/dist/module/src/components/pure/FeaturesReporterView.test/types.js +0 -1
  489. package/dist/module/src/components/pure/ModalContent.js +0 -79
  490. package/dist/module/src/components/pure/ModalContent.test/implementation.js +0 -32
  491. package/dist/module/src/components/pure/ModalContent.test/index.js +0 -53
  492. package/dist/module/src/components/pure/ModalContent.test/specification.js +0 -15
  493. package/dist/module/src/components/pure/ModalContent.test/types.js +0 -3
  494. package/dist/module/src/components/pure/NavBar.js +0 -37
  495. package/dist/module/src/components/pure/ProcessManager.js +0 -75
  496. package/dist/module/src/components/pure/ProcessManagerView.js +0 -200
  497. package/dist/module/src/components/pure/ProjectPageView.js +0 -174
  498. package/dist/module/src/components/pure/ProjectPageView.test/implementation.js +0 -181
  499. package/dist/module/src/components/pure/ProjectPageView.test/index.js +0 -9
  500. package/dist/module/src/components/pure/ProjectPageView.test/specification.js +0 -28
  501. package/dist/module/src/components/pure/ProjectPageView.test/types.js +0 -3
  502. package/dist/module/src/components/pure/ProjectsPageView.js +0 -65
  503. package/dist/module/src/components/pure/SettingsButton.js +0 -6
  504. package/dist/module/src/components/pure/SingleProcessView.js +0 -214
  505. package/dist/module/src/components/pure/TestPageView.js +0 -591
  506. package/dist/module/src/components/pure/TestPageView.test/implementation.js +0 -121
  507. package/dist/module/src/components/pure/TestPageView.test/index.js +0 -10
  508. package/dist/module/src/components/pure/TestPageView.test/specification.js +0 -22
  509. package/dist/module/src/components/pure/TestPageView.test/types.js +0 -3
  510. package/dist/module/src/components/pure/ThemeCard.js +0 -8
  511. package/dist/module/src/components/stateful/FeaturesReporter.js +0 -22
  512. package/dist/module/src/components/stateful/FileTree.js +0 -33
  513. package/dist/module/src/components/stateful/ProcessManagerPage.js +0 -75
  514. package/dist/module/src/components/stateful/ProjectPage.js +0 -64
  515. package/dist/module/src/components/stateful/ProjectsPage.js +0 -81
  516. package/dist/module/src/components/stateful/SettingsPage.js +0 -35
  517. package/dist/module/src/components/stateful/SingleProcessPage.js +0 -110
  518. package/dist/module/src/components/stateful/TestPage.js +0 -231
  519. package/dist/module/src/components/stateful/TextEditorPage.js +0 -117
  520. package/dist/module/src/defaultConfig.js +0 -17
  521. package/dist/module/src/esbuildConfigs/consoleDetectorPlugin.js +0 -32
  522. package/dist/module/src/esbuildConfigs/eslint-formatter-testeranto.js +0 -18
  523. package/dist/module/src/esbuildConfigs/featuresPlugin.js +0 -34
  524. package/dist/module/src/esbuildConfigs/index.js +0 -19
  525. package/dist/module/src/esbuildConfigs/inputFilesPlugin.js +0 -25
  526. package/dist/module/src/esbuildConfigs/nativeImportDetectorPlugin.js +0 -21
  527. package/dist/module/src/esbuildConfigs/node.js +0 -19
  528. package/dist/module/src/esbuildConfigs/pure.js +0 -37
  529. package/dist/module/src/esbuildConfigs/rebuildPlugin.js +0 -14
  530. package/dist/module/src/esbuildConfigs/web.js +0 -43
  531. package/dist/module/src/init-docs.js +0 -4
  532. package/dist/module/src/lib/BaseGiven.js +0 -95
  533. package/dist/module/src/lib/BaseSuite.js +0 -87
  534. package/dist/module/src/lib/BaseSuite.test/mock.js +0 -54
  535. package/dist/module/src/lib/BaseSuite.test/node.test.js +0 -5
  536. package/dist/module/src/lib/BaseSuite.test/pure.test.js +0 -5
  537. package/dist/module/src/lib/BaseSuite.test/test.js +0 -249
  538. package/dist/module/src/lib/BaseSuite.test/web.test.js +0 -5
  539. package/dist/module/src/lib/BaseThen.js +0 -60
  540. package/dist/module/src/lib/BaseWhen.js +0 -41
  541. package/dist/module/src/lib/Sidecar.js +0 -3
  542. package/dist/module/src/lib/Tiposkripto.js +0 -146
  543. package/dist/module/src/lib/Tiposkripto.test/MockTiposkripto.js +0 -29
  544. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.adapter.js +0 -32
  545. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.implementation.js +0 -170
  546. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.js +0 -6
  547. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.specification.js +0 -38
  548. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.types.js +0 -1
  549. package/dist/module/src/lib/abstractBase.test/MockGiven.js +0 -20
  550. package/dist/module/src/lib/abstractBase.test/MockThen.js +0 -12
  551. package/dist/module/src/lib/abstractBase.test/MockWhen.js +0 -16
  552. package/dist/module/src/lib/abstractBase.test/adapter.js +0 -21
  553. package/dist/module/src/lib/abstractBase.test/implementation.js +0 -35
  554. package/dist/module/src/lib/abstractBase.test/index.js +0 -13
  555. package/dist/module/src/lib/abstractBase.test/specification.js +0 -15
  556. package/dist/module/src/lib/abstractBase.test/types.js +0 -1
  557. package/dist/module/src/lib/index.js +0 -26
  558. package/dist/module/src/lib/pmProxy.js +0 -284
  559. package/dist/module/src/lib/pmProxy.test/adapter.js +0 -51
  560. package/dist/module/src/lib/pmProxy.test/implementation.js +0 -134
  561. package/dist/module/src/lib/pmProxy.test/index.js +0 -10
  562. package/dist/module/src/lib/pmProxy.test/mockPM.js +0 -30
  563. package/dist/module/src/lib/pmProxy.test/mockPMBase.js +0 -127
  564. package/dist/module/src/lib/pmProxy.test/specification.js +0 -60
  565. package/dist/module/src/lib/pmProxy.test/types.js +0 -1
  566. package/dist/module/src/lib/types.js +0 -2
  567. package/dist/module/src/mothership/index.js +0 -16
  568. package/dist/module/src/mothership/test.js +0 -78
  569. package/dist/module/src/run.js +0 -49
  570. package/dist/module/src/testeranto.js +0 -245
  571. package/dist/module/src/types/features.js +0 -31
  572. package/dist/module/src/utils/api.js +0 -84
  573. package/dist/module/src/utils/buildTemplates.js +0 -33
  574. package/dist/module/src/utils/featureUtils.js +0 -24
  575. package/dist/module/src/utils/golingvuMetafile.js +0 -109
  576. package/dist/module/src/utils/logFiles.js +0 -47
  577. package/dist/module/src/utils/makePrompt.js +0 -109
  578. package/dist/module/src/utils/pitonoMetafile.js +0 -60
  579. package/dist/module/src/utils/queue.js +0 -32
  580. package/dist/module/src/utils.js +0 -121
  581. package/dist/module/src/web.html.js +0 -16
  582. package/dist/module/testeranto.config.js +0 -96
  583. package/dist/module/tsconfig.module.tsbuildinfo +0 -1
  584. package/dist/types/design-editor/DesignEditor.d.ts +0 -18
  585. package/dist/types/design-editor/server.d.ts +0 -1
  586. package/dist/types/src/App.d.ts +0 -1
  587. package/dist/types/src/CoreTypes.d.ts +0 -52
  588. package/dist/types/src/Init.d.ts +0 -2
  589. package/dist/types/src/Node.d.ts +0 -9
  590. package/dist/types/src/NodeSidecar.d.ts +0 -6
  591. package/dist/types/src/PM/PM_WithEslintAndTsc.d.ts +0 -24
  592. package/dist/types/src/PM/__tests__/nodeSidecar.testeranto.d.ts +0 -2
  593. package/dist/types/src/PM/__tests__/pureSidecar.testeranto.d.ts +0 -2
  594. package/dist/types/src/PM/__tests__/webSidecar.testeranto.d.ts +0 -2
  595. package/dist/types/src/PM/base.d.ts +0 -35
  596. package/dist/types/src/PM/index.d.ts +0 -37
  597. package/dist/types/src/PM/main.d.ts +0 -79
  598. package/dist/types/src/PM/node.d.ts +0 -40
  599. package/dist/types/src/PM/nodeSidecar.d.ts +0 -13
  600. package/dist/types/src/PM/pitonoRunner.d.ts +0 -7
  601. package/dist/types/src/PM/pure.d.ts +0 -43
  602. package/dist/types/src/PM/pureSidecar.d.ts +0 -11
  603. package/dist/types/src/PM/sidecar.d.ts +0 -8
  604. package/dist/types/src/PM/web.d.ts +0 -43
  605. package/dist/types/src/PM/webSidecar.d.ts +0 -11
  606. package/dist/types/src/Pure.d.ts +0 -9
  607. package/dist/types/src/Pure.test.d.ts +0 -2
  608. package/dist/types/src/PureSidecar.d.ts +0 -8
  609. package/dist/types/src/ReportServer.d.ts +0 -1
  610. package/dist/types/src/ReportServer.test.ts/index.d.ts +0 -2
  611. package/dist/types/src/ReportServerLib.d.ts +0 -1
  612. package/dist/types/src/Types.d.ts +0 -118
  613. package/dist/types/src/Web.d.ts +0 -9
  614. package/dist/types/src/WebSidecar.d.ts +0 -8
  615. package/dist/types/src/components/DesignEditorPage.d.ts +0 -1
  616. package/dist/types/src/components/SunriseAnimation.d.ts +0 -5
  617. package/dist/types/src/components/SunriseAnimation.test/interface.d.ts +0 -11
  618. package/dist/types/src/components/SunriseAnimation.test/types.d.ts +0 -39
  619. package/dist/types/src/components/TestStatusBadge.d.ts +0 -15
  620. package/dist/types/src/components/pure/AppFrame.d.ts +0 -11
  621. package/dist/types/src/components/pure/AppFrame.test/implementation.d.ts +0 -3
  622. package/dist/types/src/components/pure/AppFrame.test/index.d.ts +0 -3
  623. package/dist/types/src/components/pure/AppFrame.test/specification.d.ts +0 -3
  624. package/dist/types/src/components/pure/AppFrame.test/types.d.ts +0 -33
  625. package/dist/types/src/components/pure/FeaturesReporterView.d.ts +0 -7
  626. package/dist/types/src/components/pure/FeaturesReporterView.test/implementation.d.ts +0 -3
  627. package/dist/types/src/components/pure/FeaturesReporterView.test/index.d.ts +0 -2
  628. package/dist/types/src/components/pure/FeaturesReporterView.test/specification.d.ts +0 -3
  629. package/dist/types/src/components/pure/FeaturesReporterView.test/types.d.ts +0 -54
  630. package/dist/types/src/components/pure/ModalContent.d.ts +0 -7
  631. package/dist/types/src/components/pure/ModalContent.test/implementation.d.ts +0 -3
  632. package/dist/types/src/components/pure/ModalContent.test/index.d.ts +0 -2
  633. package/dist/types/src/components/pure/ModalContent.test/specification.d.ts +0 -3
  634. package/dist/types/src/components/pure/ModalContent.test/types.d.ts +0 -45
  635. package/dist/types/src/components/pure/NavBar.d.ts +0 -23
  636. package/dist/types/src/components/pure/ProcessManager.d.ts +0 -8
  637. package/dist/types/src/components/pure/ProcessManagerView.d.ts +0 -20
  638. package/dist/types/src/components/pure/ProjectPageView.d.ts +0 -14
  639. package/dist/types/src/components/pure/ProjectPageView.test/implementation.d.ts +0 -3
  640. package/dist/types/src/components/pure/ProjectPageView.test/index.d.ts +0 -2
  641. package/dist/types/src/components/pure/ProjectPageView.test/specification.d.ts +0 -3
  642. package/dist/types/src/components/pure/ProjectPageView.test/types.d.ts +0 -57
  643. package/dist/types/src/components/pure/ProjectsPageView.d.ts +0 -29
  644. package/dist/types/src/components/pure/SettingsButton.d.ts +0 -2
  645. package/dist/types/src/components/pure/TestPageView.d.ts +0 -15
  646. package/dist/types/src/components/pure/TestPageView.test/implementation.d.ts +0 -12
  647. package/dist/types/src/components/pure/TestPageView.test/index.d.ts +0 -3
  648. package/dist/types/src/components/pure/TestPageView.test/specification.d.ts +0 -11
  649. package/dist/types/src/components/pure/TestPageView.test/types.d.ts +0 -65
  650. package/dist/types/src/components/pure/ThemeCard.d.ts +0 -9
  651. package/dist/types/src/components/stateful/FeaturesReporter.d.ts +0 -2
  652. package/dist/types/src/components/stateful/FileTree.d.ts +0 -8
  653. package/dist/types/src/components/stateful/ProcessManagerPage.d.ts +0 -2
  654. package/dist/types/src/components/stateful/ProjectPage.d.ts +0 -1
  655. package/dist/types/src/components/stateful/ProjectsPage.d.ts +0 -1
  656. package/dist/types/src/components/stateful/SettingsPage.d.ts +0 -2
  657. package/dist/types/src/components/stateful/SingleProcessPage.d.ts +0 -2
  658. package/dist/types/src/components/stateful/TestPage.d.ts +0 -1
  659. package/dist/types/src/components/stateful/TextEditorPage.d.ts +0 -1
  660. package/dist/types/src/defaultConfig.d.ts +0 -3
  661. package/dist/types/src/esbuildConfigs/consoleDetectorPlugin.d.ts +0 -2
  662. package/dist/types/src/esbuildConfigs/eslint-formatter-testeranto.d.ts +0 -2
  663. package/dist/types/src/esbuildConfigs/featuresPlugin.d.ts +0 -5
  664. package/dist/types/src/esbuildConfigs/index.d.ts +0 -4
  665. package/dist/types/src/esbuildConfigs/inputFilesPlugin.d.ts +0 -7
  666. package/dist/types/src/esbuildConfigs/nativeImportDetectorPlugin.d.ts +0 -2
  667. package/dist/types/src/esbuildConfigs/node.d.ts +0 -4
  668. package/dist/types/src/esbuildConfigs/pure.d.ts +0 -4
  669. package/dist/types/src/esbuildConfigs/rebuildPlugin.d.ts +0 -6
  670. package/dist/types/src/esbuildConfigs/web.d.ts +0 -4
  671. package/dist/types/src/init-docs.d.ts +0 -1
  672. package/dist/types/src/lib/BaseGiven.d.ts +0 -44
  673. package/dist/types/src/lib/BaseSuite.d.ts +0 -46
  674. package/dist/types/src/lib/BaseSuite.test/mock.d.ts +0 -21
  675. package/dist/types/src/lib/BaseSuite.test/node.test.d.ts +0 -2
  676. package/dist/types/src/lib/BaseSuite.test/pure.test.d.ts +0 -2
  677. package/dist/types/src/lib/BaseSuite.test/test.d.ts +0 -36
  678. package/dist/types/src/lib/BaseSuite.test/web.test.d.ts +0 -2
  679. package/dist/types/src/lib/BaseThen.d.ts +0 -27
  680. package/dist/types/src/lib/BaseWhen.d.ts +0 -27
  681. package/dist/types/src/lib/Sidecar.d.ts +0 -5
  682. package/dist/types/src/lib/Tiposkripto.d.ts +0 -35
  683. package/dist/types/src/lib/Tiposkripto.test/MockTiposkripto.d.ts +0 -15
  684. package/dist/types/src/lib/Tiposkripto.test/Tiposkripto.adapter.d.ts +0 -3
  685. package/dist/types/src/lib/Tiposkripto.test/Tiposkripto.d.ts +0 -2
  686. package/dist/types/src/lib/Tiposkripto.test/Tiposkripto.implementation.d.ts +0 -3
  687. package/dist/types/src/lib/Tiposkripto.test/Tiposkripto.specification.d.ts +0 -3
  688. package/dist/types/src/lib/Tiposkripto.test/Tiposkripto.types.d.ts +0 -53
  689. package/dist/types/src/lib/abstractBase.test/MockGiven.d.ts +0 -9
  690. package/dist/types/src/lib/abstractBase.test/MockThen.d.ts +0 -6
  691. package/dist/types/src/lib/abstractBase.test/MockWhen.d.ts +0 -6
  692. package/dist/types/src/lib/abstractBase.test/adapter.d.ts +0 -3
  693. package/dist/types/src/lib/abstractBase.test/implementation.d.ts +0 -3
  694. package/dist/types/src/lib/abstractBase.test/index.d.ts +0 -2
  695. package/dist/types/src/lib/abstractBase.test/specification.d.ts +0 -3
  696. package/dist/types/src/lib/abstractBase.test/types.d.ts +0 -39
  697. package/dist/types/src/lib/index.d.ts +0 -67
  698. package/dist/types/src/lib/pmProxy.d.ts +0 -12
  699. package/dist/types/src/lib/pmProxy.test/adapter.d.ts +0 -3
  700. package/dist/types/src/lib/pmProxy.test/implementation.d.ts +0 -3
  701. package/dist/types/src/lib/pmProxy.test/index.d.ts +0 -6
  702. package/dist/types/src/lib/pmProxy.test/mockPM.d.ts +0 -10
  703. package/dist/types/src/lib/pmProxy.test/mockPMBase.d.ts +0 -40
  704. package/dist/types/src/lib/pmProxy.test/specification.d.ts +0 -3
  705. package/dist/types/src/lib/pmProxy.test/types.d.ts +0 -42
  706. package/dist/types/src/lib/types.d.ts +0 -24
  707. package/dist/types/src/mothership/index.d.ts +0 -2
  708. package/dist/types/src/mothership/test.d.ts +0 -2
  709. package/dist/types/src/testeranto.d.ts +0 -1
  710. package/dist/types/src/types/features.d.ts +0 -7
  711. package/dist/types/src/utils/api.d.ts +0 -9
  712. package/dist/types/src/utils/buildTemplates.d.ts +0 -1
  713. package/dist/types/src/utils/featureUtils.d.ts +0 -6
  714. package/dist/types/src/utils/golingvuMetafile.d.ts +0 -19
  715. package/dist/types/src/utils/logFiles.d.ts +0 -75
  716. package/dist/types/src/utils/makePrompt.d.ts +0 -2
  717. package/dist/types/src/utils/pitonoMetafile.d.ts +0 -7
  718. package/dist/types/src/utils/queue.d.ts +0 -11
  719. package/dist/types/src/utils.d.ts +0 -20
  720. package/dist/types/src/web.html.d.ts +0 -2
  721. package/dist/types/tsconfig.types.tsbuildinfo +0 -1
  722. package/pitono/__init__.py +0 -54
  723. package/pitono/types.py +0 -78
  724. package/src/golingvu/base_suite_test.go +0 -197
  725. package/src/templates/frontpage.html +0 -340
  726. package/src/templates/frontpage.md +0 -79
  727. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/tests.json +0 -29
  728. /package/{pitono → src/pitono}/core_generator.py +0 -0
  729. /package/{pitono → src/pitono}/pitono.egg-info/dependency_links.txt +0 -0
  730. /package/{pitono → src/pitono}/pitono.egg-info/entry_points.txt +0 -0
  731. /package/{pitono → src/pitono}/pitono.egg-info/top_level.txt +0 -0
  732. /package/{pitono → src/pitono}/pyproject.toml +0 -0
  733. /package/{pitono → src/pitono}/setup.py +0 -0
  734. /package/{pitono → src/pitono}/simple_adapter.py +0 -0
  735. /package/{dist/types/src/PM/types.d.ts → testeranto/helpo_chat_message.txt} +0 -0
  736. /package/{dist/types/src/components/SunriseAnimation.test/implementation.d.ts → testeranto/reports/core/example/test_example/python/stdout.log} +0 -0
  737. /package/{dist/types/src/components/SunriseAnimation.test/index.d.ts → testeranto/reports/core/src/Pure.test/pure/exit.log} +0 -0
  738. /package/{dist/types/src/components/SunriseAnimation.test/specification.d.ts → testeranto/reports/core/src/Pure.test/pure/lint_errors.txt} +0 -0
  739. /package/{dist/types/src/components/pure/SingleProcessView.d.ts → testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/debug.log} +0 -0
  740. /package/{dist/types/src/run.d.ts → testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/error.log} +0 -0
@@ -1,1815 +0,0 @@
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 */
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || (function () {
23
- var ownKeys = function(o) {
24
- ownKeys = Object.getOwnPropertyNames || function (o) {
25
- var ar = [];
26
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
- return ar;
28
- };
29
- return ownKeys(o);
30
- };
31
- return function (mod) {
32
- if (mod && mod.__esModule) return mod;
33
- var result = {};
34
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
- __setModuleDefault(result, mod);
36
- return result;
37
- };
38
- })();
39
- var __importDefault = (this && this.__importDefault) || function (mod) {
40
- return (mod && mod.__esModule) ? mod : { "default": mod };
41
- };
42
- Object.defineProperty(exports, "__esModule", { value: true });
43
- exports.PM_Main = void 0;
44
- const node_child_process_1 = require("node:child_process");
45
- const ansi_colors_1 = __importDefault(require("ansi-colors"));
46
- const net_1 = __importDefault(require("net"));
47
- const fs_1 = __importStar(require("fs"));
48
- const path_1 = __importDefault(require("path"));
49
- const puppeteer_core_1 = __importDefault(require("puppeteer-core"));
50
- const ansi_colors_2 = __importDefault(require("ansi-colors"));
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"));
56
- const utils_1 = require("../utils");
57
- const queue_js_1 = require("../utils/queue.js");
58
- const PM_WithEslintAndTsc_js_1 = require("./PM_WithEslintAndTsc.js");
59
- const changes = {};
60
- const fileHashes = {};
61
- const files = {};
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 if (runtime === "pitono") {
91
- return {
92
- stdout: fs_1.default.createWriteStream(`${safeDest}/stdout.log`),
93
- stderr: fs_1.default.createWriteStream(`${safeDest}/stderr.log`),
94
- exit: fs_1.default.createWriteStream(`${safeDest}/exit.log`),
95
- };
96
- }
97
- else {
98
- throw `unknown runtime: ${runtime}`;
99
- }
100
- }
101
- catch (e) {
102
- console.error(`Failed to create log streams in ${safeDest}:`, e);
103
- throw e;
104
- }
105
- }
106
- function createLogStreams(reportDest, runtime) {
107
- // Create directory if it doesn't exist
108
- if (!fs_1.default.existsSync(reportDest)) {
109
- fs_1.default.mkdirSync(reportDest, { recursive: true });
110
- }
111
- const streams = runtimeLogs(runtime, reportDest);
112
- // const streams = {
113
- // exit: fs.createWriteStream(`${reportDest}/exit.log`),
114
- const safeDest = reportDest || `testeranto/reports/default_${Date.now()}`;
115
- try {
116
- if (!fs_1.default.existsSync(safeDest)) {
117
- fs_1.default.mkdirSync(safeDest, { recursive: true });
118
- }
119
- const streams = runtimeLogs(runtime, safeDest);
120
- // const streams = {
121
- // exit: fs.createWriteStream(`${safeDest}/exit.log`),
122
- // ...(runtime === "node" || runtime === "pure"
123
- // ? {
124
- // stdout: fs.createWriteStream(`${safeDest}/stdout.log`),
125
- // stderr: fs.createWriteStream(`${safeDest}/stderr.log`),
126
- // }
127
- // : {
128
- // info: fs.createWriteStream(`${safeDest}/info.log`),
129
- // warn: fs.createWriteStream(`${safeDest}/warn.log`),
130
- // error: fs.createWriteStream(`${safeDest}/error.log`),
131
- // debug: fs.createWriteStream(`${safeDest}/debug.log`),
132
- // }),
133
- // };
134
- return Object.assign(Object.assign({}, streams), { closeAll: () => {
135
- Object.values(streams).forEach((stream) => !stream.closed && stream.close());
136
- }, writeExitCode: (code, error) => {
137
- if (error) {
138
- streams.exit.write(`Error: ${error.message}\n`);
139
- if (error.stack) {
140
- streams.exit.write(`Stack Trace:\n${error.stack}\n`);
141
- }
142
- }
143
- streams.exit.write(`${code}\n`);
144
- }, exit: streams.exit });
145
- }
146
- catch (e) {
147
- console.error(`Failed to create log streams in ${safeDest}:`, e);
148
- throw e;
149
- }
150
- }
151
- async function fileHash(filePath, algorithm = "md5") {
152
- return new Promise((resolve, reject) => {
153
- const hash = node_crypto_1.default.createHash(algorithm);
154
- const fileStream = fs_1.default.createReadStream(filePath);
155
- fileStream.on("data", (data) => {
156
- hash.update(data);
157
- });
158
- fileStream.on("end", () => {
159
- const fileHash = hash.digest("hex");
160
- resolve(fileHash);
161
- });
162
- fileStream.on("error", (error) => {
163
- reject(`Error reading file: ${error.message}`);
164
- });
165
- });
166
- }
167
- const statusMessagePretty = (failures, test, runtime) => {
168
- if (failures === 0) {
169
- console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`${runtime} > ${test}`)));
170
- }
171
- else if (failures > 0) {
172
- console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${runtime} > ${test} failed ${failures} times (exit code: ${failures})`)));
173
- }
174
- else {
175
- console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${runtime} > ${test} crashed (exit code: -1)`)));
176
- }
177
- };
178
- async function writeFileAndCreateDir(filePath, data) {
179
- const dirPath = path_1.default.dirname(filePath);
180
- try {
181
- await fs_1.default.promises.mkdir(dirPath, { recursive: true });
182
- await fs_1.default.writeFileSync(filePath, data);
183
- }
184
- catch (error) {
185
- console.error(`Error writing file: ${error}`);
186
- }
187
- }
188
- const filesHash = async (files, algorithm = "md5") => {
189
- return new Promise((resolve, reject) => {
190
- resolve(files.reduce(async (mm, f) => {
191
- return (await mm) + (await fileHash(f));
192
- }, Promise.resolve("")));
193
- });
194
- };
195
- function isValidUrl(string) {
196
- try {
197
- new URL(string);
198
- return true;
199
- }
200
- catch (err) {
201
- return false;
202
- }
203
- }
204
- // Wait for file to exist, checks every 2 seconds by default
205
- async function pollForFile(path, timeout = 2000) {
206
- const intervalObj = setInterval(function () {
207
- const file = path;
208
- const fileExists = fs_1.default.existsSync(file);
209
- if (fileExists) {
210
- clearInterval(intervalObj);
211
- }
212
- }, timeout);
213
- }
214
- class PM_Main extends PM_WithEslintAndTsc_js_1.PM_WithEslintAndTsc {
215
- constructor(configs, name, mode) {
216
- super(configs, name, mode);
217
- this.logStreams = {};
218
- this.sidecars = {};
219
- this.clients = new Set();
220
- this.runningProcesses = new Map();
221
- this.allProcesses = new Map();
222
- this.processLogs = new Map();
223
- this.getRunnables = (tests, testName, payload = {
224
- nodeEntryPoints: {},
225
- nodeEntryPointSidecars: {},
226
- webEntryPoints: {},
227
- webEntryPointSidecars: {},
228
- pureEntryPoints: {},
229
- pureEntryPointSidecars: {},
230
- }) => {
231
- return (0, utils_1.getRunnables)(tests, testName, payload);
232
- };
233
- this.launchPure = async (src, dest) => {
234
- console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`pure < ${src}`)));
235
- this.bddTestIsRunning(src);
236
- const reportDest = `testeranto/reports/${this.name}/${src
237
- .split(".")
238
- .slice(0, -1)
239
- .join(".")}/pure`;
240
- if (!fs_1.default.existsSync(reportDest)) {
241
- fs_1.default.mkdirSync(reportDest, { recursive: true });
242
- }
243
- const destFolder = dest.replace(".mjs", "");
244
- let argz = "";
245
- const testConfig = this.configs.tests.find((t) => {
246
- return t[0] === src;
247
- });
248
- if (!testConfig) {
249
- console.log(ansi_colors_2.default.inverse("missing test config! Exiting ungracefully!"));
250
- process.exit(-1);
251
- }
252
- const testConfigResource = testConfig[2];
253
- const portsToUse = [];
254
- if (testConfigResource.ports === 0) {
255
- argz = JSON.stringify({
256
- scheduled: true,
257
- name: src,
258
- ports: portsToUse,
259
- fs: reportDest,
260
- browserWSEndpoint: this.browser.wsEndpoint(),
261
- });
262
- }
263
- else if (testConfigResource.ports > 0) {
264
- const openPorts = Object.entries(this.ports).filter(([portnumber, status]) => status === "");
265
- if (openPorts.length >= testConfigResource.ports) {
266
- for (let i = 0; i < testConfigResource.ports; i++) {
267
- portsToUse.push(openPorts[i][0]);
268
- this.ports[openPorts[i][0]] = src; // port is now claimed
269
- }
270
- argz = JSON.stringify({
271
- scheduled: true,
272
- name: src,
273
- ports: portsToUse,
274
- fs: destFolder,
275
- browserWSEndpoint: this.browser.wsEndpoint(),
276
- });
277
- }
278
- else {
279
- this.queue.push(src);
280
- return [Math.random(), argz];
281
- }
282
- }
283
- else {
284
- console.error("negative port makes no sense", src);
285
- process.exit(-1);
286
- }
287
- const builtfile = dest;
288
- // const webSideCares: Page[] = [];
289
- // fs.writeFileSync(
290
- // `${reportDest}/stdlog.txt`,
291
- // "THIS FILE IS AUTO GENERATED. IT IS PURPOSEFULLY LEFT BLANK."
292
- // );
293
- // await Promise.all(
294
- // testConfig[3].map(async (sidecar) => {
295
- // if (sidecar[1] === "web") {
296
- // const s = await this.launchWebSideCar(
297
- // sidecar[0],
298
- // destinationOfRuntime(sidecar[0], "web", this.configs),
299
- // sidecar
300
- // );
301
- // webSideCares.push(s);
302
- // return s;
303
- // }
304
- // if (sidecar[1] === "node") {
305
- // return this.launchNodeSideCar(
306
- // sidecar[0],
307
- // destinationOfRuntime(sidecar[0], "node", this.configs),
308
- // sidecar
309
- // );
310
- // }
311
- // })
312
- // );
313
- const logs = createLogStreams(reportDest, "pure");
314
- try {
315
- await Promise.resolve(`${`${builtfile}?cacheBust=${Date.now()}`}`).then(s => __importStar(require(s))).then((module) => {
316
- // Override console methods to redirect logs
317
- // Only override stdout/stderr methods for pure runtime
318
- const originalConsole = Object.assign({}, console);
319
- // console.log = (...args) => {
320
- // logs.stdout.write(args.join(" ") + "\n");
321
- // originalConsole.log(...args);
322
- // };
323
- // console.error = (...args) => {
324
- // logs.stderr.write(args.join(" ") + "\n");
325
- // originalConsole.error(...args);
326
- // };
327
- return module.default
328
- .then((defaultModule) => {
329
- defaultModule
330
- .receiveTestResourceConfig(argz)
331
- .then(async (results) => {
332
- // this.receiveFeatures(results.features, destFolder, src, "pure");
333
- // this.receiveFeaturesV2(reportDest, src, "pure");
334
- statusMessagePretty(results.fails, src, "pure");
335
- this.bddTestIsNowDone(src, results.fails);
336
- })
337
- .catch((e1) => {
338
- console.log(ansi_colors_2.default.red(`launchPure - ${src} errored with: ${e1.stack}`));
339
- this.bddTestIsNowDone(src, -1);
340
- statusMessagePretty(-1, src, "pure");
341
- });
342
- // .finally(() => {
343
- // // webSideCares.forEach((webSideCar) => webSideCar.close());
344
- // });
345
- })
346
- .catch((e2) => {
347
- console.log(ansi_colors_1.default.red(`pure ! ${src} failed to execute. No "tests.json" file was generated. Check the logs for more info`));
348
- logs.exit.write(e2.stack);
349
- logs.exit.write(-1);
350
- this.bddTestIsNowDone(src, -1);
351
- statusMessagePretty(-1, src, "pure");
352
- // console.error(e);
353
- })
354
- .finally((x) => {
355
- // const fileSet = files[src] || new Set();
356
- // fs.writeFileSync(
357
- // reportDest + "/manifest.json",
358
- // JSON.stringify(Array.from(fileSet))
359
- // );
360
- });
361
- });
362
- }
363
- catch (e3) {
364
- logs.writeExitCode(-1, e3);
365
- console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${src} 1 errored with: ${e3}. Check logs for more info`)));
366
- logs.exit.write(e3.stack);
367
- logs.exit.write("-1");
368
- this.bddTestIsNowDone(src, -1);
369
- statusMessagePretty(-1, src, "pure");
370
- }
371
- for (let i = 0; i <= portsToUse.length; i++) {
372
- if (portsToUse[i]) {
373
- this.ports[portsToUse[i]] = ""; //port is open again
374
- }
375
- }
376
- };
377
- this.launchNode = async (src, dest) => {
378
- console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`node < ${src}`)));
379
- this.bddTestIsRunning(src);
380
- const reportDest = `testeranto/reports/${this.name}/${src
381
- .split(".")
382
- .slice(0, -1)
383
- .join(".")}/node`;
384
- if (!fs_1.default.existsSync(reportDest)) {
385
- fs_1.default.mkdirSync(reportDest, { recursive: true });
386
- }
387
- // const destFolder = dest.replace(".mjs", "");
388
- let testResources = "";
389
- const testConfig = this.configs.tests.find((t) => {
390
- return t[0] === src;
391
- });
392
- if (!testConfig) {
393
- console.log(ansi_colors_2.default.inverse(`missing test config! Exiting ungracefully for '${src}'`));
394
- process.exit(-1);
395
- }
396
- const testConfigResource = testConfig[2];
397
- const portsToUse = [];
398
- if (testConfigResource.ports === 0) {
399
- const t = {
400
- name: src,
401
- // ports: portsToUse.map((v) => Number(v)),
402
- ports: [],
403
- fs: reportDest,
404
- browserWSEndpoint: this.browser.wsEndpoint(),
405
- };
406
- testResources = JSON.stringify(t);
407
- }
408
- else if (testConfigResource.ports > 0) {
409
- const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen === "");
410
- if (openPorts.length >= testConfigResource.ports) {
411
- for (let i = 0; i < testConfigResource.ports; i++) {
412
- portsToUse.push(openPorts[i][0]); // Convert string port to number
413
- this.ports[openPorts[i][0]] = src; // port is now claimed
414
- }
415
- testResources = JSON.stringify({
416
- scheduled: true,
417
- name: src,
418
- ports: portsToUse,
419
- fs: reportDest,
420
- browserWSEndpoint: this.browser.wsEndpoint(),
421
- });
422
- }
423
- else {
424
- 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`));
425
- this.queue.push(src);
426
- return [Math.random(), argz]; // Add this return
427
- }
428
- }
429
- else {
430
- console.error("negative port makes no sense", src);
431
- process.exit(-1);
432
- }
433
- const builtfile = dest;
434
- let haltReturns = false;
435
- const ipcfile = "/tmp/tpipe_" + Math.random();
436
- const child = (0, node_child_process_1.spawn)("node",
437
- // "node",
438
- [
439
- // "--inspect-brk",
440
- builtfile,
441
- testResources,
442
- ipcfile,
443
- ], {
444
- stdio: ["pipe", "pipe", "pipe", "ipc"],
445
- });
446
- let buffer = new Buffer("");
447
- const server = net_1.default.createServer((socket) => {
448
- const queue = new queue_js_1.Queue();
449
- socket.on("data", (data) => {
450
- buffer = Buffer.concat([buffer, data]);
451
- for (let b = 0; b < buffer.length + 1; b++) {
452
- const c = buffer.slice(0, b);
453
- let d;
454
- try {
455
- d = JSON.parse(c.toString());
456
- queue.enqueue(d);
457
- buffer = buffer.slice(b, buffer.length + 1);
458
- b = 0;
459
- }
460
- catch (e) {
461
- // b++;
462
- }
463
- }
464
- while (queue.size() > 0) {
465
- const message = queue.dequeue();
466
- if (message) {
467
- // set up the "node" listeners
468
- this.mapping().forEach(async ([command, func]) => {
469
- if (message[0] === command) {
470
- const x = message.slice(1, -1);
471
- const r = await this[command](...x);
472
- if (!haltReturns) {
473
- child.send(JSON.stringify({
474
- payload: r,
475
- key: message[message.length - 1],
476
- }));
477
- }
478
- }
479
- });
480
- }
481
- }
482
- });
483
- });
484
- const logs = createLogStreams(reportDest, "node");
485
- server.listen(ipcfile, () => {
486
- var _a, _b;
487
- // Only handle stdout/stderr for node runtime
488
- (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
489
- var _a;
490
- (_a = logs.stdout) === null || _a === void 0 ? void 0 : _a.write(data); // Add null check
491
- });
492
- (_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
493
- var _a;
494
- (_a = logs.stderr) === null || _a === void 0 ? void 0 : _a.write(data); // Add null check
495
- });
496
- child.on("error", (err) => { });
497
- child.on("close", (code) => {
498
- const exitCode = code === null ? -1 : code;
499
- if (exitCode < 0) {
500
- logs.writeExitCode(exitCode, new Error("Process crashed or was terminated"));
501
- }
502
- else {
503
- logs.writeExitCode(exitCode);
504
- }
505
- logs.closeAll();
506
- server.close();
507
- if (!files[src]) {
508
- files[src] = new Set();
509
- }
510
- if (exitCode === 255) {
511
- 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`));
512
- this.bddTestIsNowDone(src, -1);
513
- statusMessagePretty(-1, src, "node");
514
- return;
515
- }
516
- else if (exitCode === 0) {
517
- this.bddTestIsNowDone(src, 0);
518
- statusMessagePretty(0, src, "node");
519
- }
520
- else {
521
- this.bddTestIsNowDone(src, exitCode);
522
- statusMessagePretty(exitCode, src, "node");
523
- }
524
- haltReturns = true;
525
- });
526
- child.on("exit", (code) => {
527
- haltReturns = true;
528
- for (let i = 0; i <= portsToUse.length; i++) {
529
- if (portsToUse[i]) {
530
- this.ports[portsToUse[i]] = ""; //port is open again
531
- }
532
- }
533
- });
534
- child.on("error", (e) => {
535
- console.log("error");
536
- haltReturns = true;
537
- console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${src} errored with: ${e.name}. Check error logs for more info`)));
538
- this.bddTestIsNowDone(src, -1);
539
- statusMessagePretty(-1, src, "node");
540
- });
541
- });
542
- };
543
- this.launchWebSideCar = async (testConfig) => {
544
- const src = testConfig[0];
545
- const dest = src.split(".").slice(0, -1).join(".");
546
- // const d = dest + ".mjs";
547
- const destFolder = dest.replace(".mjs", "");
548
- console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`launchWebSideCar ${src}`)));
549
- // const fileStreams2: fs.WriteStream[] = [];
550
- // const doneFileStream2: Promise<any>[] = [];
551
- const logs = createLogStreams(dest, "web");
552
- return new Promise((res, rej) => {
553
- this.browser
554
- .newPage()
555
- .then(async (page) => {
556
- this.mapping().forEach(async ([command, func]) => {
557
- page.exposeFunction(command, func);
558
- });
559
- const close = () => {
560
- if (!files[src]) {
561
- files[src] = new Set();
562
- }
563
- // files[src].add(filepath);
564
- // fs.writeFileSync(
565
- // destFolder + "/manifest.json",
566
- // JSON.stringify(Array.from(files[src]))
567
- // );
568
- delete files[src];
569
- Promise.all(screenshots[src] || []).then(() => {
570
- delete screenshots[src];
571
- page.close();
572
- });
573
- };
574
- page.on("pageerror", (err) => {
575
- console.debug(`Error from ${src}: [${err.name}] `);
576
- console.debug(`Error from ${src}: [${err.name}] `);
577
- if (err.cause) {
578
- console.debug(`Error from ${src} cause: [${err.cause}] `);
579
- }
580
- if (err.stack) {
581
- console.debug(`Error from stack ${src}: [${err.stack}] `);
582
- }
583
- console.debug(`Error from message ${src}: [${err.message}] `);
584
- this.bddTestIsNowDone(src, -1);
585
- close();
586
- });
587
- page.on("console", (log) => {
588
- var _a, _b, _c, _d;
589
- const msg = `${log.text()}\n${JSON.stringify(log.location())}\n${JSON.stringify(log.stackTrace())}\n`;
590
- switch (log.type()) {
591
- case "info":
592
- (_a = logs.info) === null || _a === void 0 ? void 0 : _a.write(msg);
593
- break;
594
- case "warn":
595
- (_b = logs.warn) === null || _b === void 0 ? void 0 : _b.write(msg);
596
- break;
597
- case "error":
598
- (_c = logs.error) === null || _c === void 0 ? void 0 : _c.write(msg);
599
- break;
600
- case "debug":
601
- (_d = logs.debug) === null || _d === void 0 ? void 0 : _d.write(msg);
602
- break;
603
- default:
604
- break;
605
- }
606
- });
607
- await page.goto(`file://${`${destFolder}.html`}`, {});
608
- const webArgz = JSON.stringify({
609
- name: dest,
610
- ports: [].toString(),
611
- fs: dest,
612
- browserWSEndpoint: this.browser.wsEndpoint(),
613
- });
614
- const d = `${dest}?cacheBust=${Date.now()}`;
615
- const evaluation = `
616
- import('${d}').then(async (x) => {
617
-
618
- try {
619
- return await (await x.default).receiveTestResourceConfig(${webArgz})
620
- } catch (e) {
621
- console.log("fail", e.toString())
622
- }
623
- })`;
624
- await page
625
- .evaluate(evaluation)
626
- .then(async ({ fails, failed, features }) => {
627
- // this.receiveFeatures(features, destFolder, src, "web");
628
- // this.receiveFeaturesV2(reportDest, src, "web");
629
- statusMessagePretty(fails, src, "web");
630
- this.bddTestIsNowDone(src, fails);
631
- })
632
- .catch((e) => {
633
- console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`launchWebSidecar - ${src} errored with: ${e}`)));
634
- })
635
- .finally(() => {
636
- this.bddTestIsNowDone(src, -1);
637
- close();
638
- });
639
- return page;
640
- // return page;
641
- })
642
- .then(async (page) => {
643
- await page.goto(`file://${`${dest}.html`}`, {});
644
- res([Math.random(), page]);
645
- });
646
- });
647
- };
648
- this.launchNodeSideCar = async (sidecar) => {
649
- const src = sidecar[0];
650
- const dest = process.cwd() + `/testeranto/bundles/node/${this.name}/${sidecar[0]}`;
651
- const d = dest + ".mjs";
652
- console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`launchNodeSideCar ${sidecar[0]}`)));
653
- const destFolder = dest.replace(".ts", "");
654
- const reportDest = `testeranto/reports/${this.name}/${src
655
- .split(".")
656
- .slice(0, -1)
657
- .join(".")}/node`;
658
- const argz = {
659
- name: sidecar[0],
660
- ports: [],
661
- fs: destFolder,
662
- browserWSEndpoint: this.browser.wsEndpoint(),
663
- };
664
- const testReq = sidecar[2];
665
- const logs = createLogStreams(dest, "node");
666
- const portsToUse = [];
667
- if (testReq.ports === 0) {
668
- // argz = {
669
- // name: sidecar[0],
670
- // ports: portsToUse,
671
- // fs: destFolder,
672
- // browserWSEndpoint: this.browser.wsEndpoint(),
673
- // };
674
- }
675
- else if (testReq.ports > 0) {
676
- const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen === "");
677
- if (openPorts.length >= testReq.ports) {
678
- for (let i = 0; i < testReq.ports; i++) {
679
- portsToUse.push(Number(openPorts[i][0])); // Convert string port to number
680
- this.ports[openPorts[i][0]] = src; // port is now closed
681
- }
682
- argz.ports = portsToUse;
683
- const builtfile = destFolder + ".mjs";
684
- let haltReturns = false;
685
- let buffer = new Buffer("");
686
- const server = net_1.default.createServer((socket) => {
687
- socket.on("data", (data) => {
688
- buffer = Buffer.concat([buffer, data]);
689
- const messages = [];
690
- for (let b = 0; b < buffer.length + 1; b++) {
691
- const c = buffer.slice(0, b);
692
- let d;
693
- try {
694
- d = JSON.parse(c.toString());
695
- messages.push(d);
696
- buffer = buffer.slice(b, buffer.length + 1);
697
- b = 0;
698
- }
699
- catch (e) {
700
- // b++;
701
- }
702
- }
703
- messages.forEach(async (payload) => {
704
- this.mapping().forEach(async ([command, func]) => {
705
- if (payload[0] === command) {
706
- const x = payload.slice(1, -1);
707
- const r = await this[command](...x);
708
- if (!haltReturns) {
709
- child.send(JSON.stringify({
710
- payload: r,
711
- key: payload[payload.length - 1],
712
- }));
713
- }
714
- }
715
- });
716
- });
717
- });
718
- });
719
- const child = (0, node_child_process_1.spawn)("node", [builtfile, JSON.stringify(argz)], {
720
- stdio: ["pipe", "pipe", "pipe", "ipc"],
721
- // silent: true
722
- });
723
- const p = "/tmp/tpipe" + Math.random();
724
- server.listen(p, () => {
725
- child.on("close", (code) => {
726
- server.close();
727
- haltReturns = true;
728
- });
729
- child.on("exit", (code) => {
730
- haltReturns = true;
731
- for (let i = 0; i <= portsToUse.length; i++) {
732
- if (portsToUse[i]) {
733
- this.ports[portsToUse[i]] = ""; //port is open again
734
- }
735
- }
736
- });
737
- child.on("error", (e) => {
738
- var _a;
739
- if (fs_1.default.existsSync(p)) {
740
- fs_1.default.rmSync(p);
741
- }
742
- haltReturns = true;
743
- console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`launchNodeSideCar - ${src} errored with: ${e.name}. Check logs for more info`)));
744
- (_a = logs.error) === null || _a === void 0 ? void 0 : _a.write(e.toString() + "\n");
745
- // this.bddTestIsNowDone(src, -1);
746
- // statusMessagePretty(-1, src);
747
- });
748
- });
749
- child.send({ path: p });
750
- const r = Math.random();
751
- this.nodeSidecars[r] = child;
752
- return [r, argz];
753
- }
754
- else {
755
- console.log(ansi_colors_2.default.red(`cannot ${src} because there are no open ports. the job will be unqueued`));
756
- this.queue.push(sidecar[0]);
757
- return [Math.random(), argz];
758
- }
759
- }
760
- else {
761
- console.error("negative port makes no sense", sidecar[0]);
762
- process.exit(-1);
763
- }
764
- };
765
- this.stopPureSideCar = async (uid) => {
766
- console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`stopPureSideCar ${uid}`)));
767
- await this.sidecars[uid].shutdown();
768
- return;
769
- };
770
- this.launchPureSideCar = async (sidecar) => {
771
- console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`launchPureSideCar ${sidecar[0]}`)));
772
- const r = Math.random();
773
- const dest = process.cwd() + `/testeranto/bundles/pure/${this.name}/${sidecar[0]}`;
774
- const builtfile = dest.split(".").slice(0, -1).concat("mjs").join(".");
775
- const destFolder = dest.replace(".mjs", "");
776
- let argz;
777
- const z = sidecar[2];
778
- const testConfigResource = sidecar[2];
779
- const src = sidecar[0];
780
- const portsToUse = [];
781
- if (testConfigResource.ports === 0) {
782
- argz = {
783
- // scheduled: true,
784
- name: src,
785
- ports: portsToUse,
786
- fs: destFolder,
787
- browserWSEndpoint: this.browser.wsEndpoint(),
788
- };
789
- }
790
- else if (testConfigResource.ports > 0) {
791
- const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen === "");
792
- if (openPorts.length >= testConfigResource.ports) {
793
- for (let i = 0; i < testConfigResource.ports; i++) {
794
- portsToUse.push(Number(openPorts[i][0]));
795
- this.ports[openPorts[i][0]] = src; // port is now claimed
796
- }
797
- argz = {
798
- // scheduled: true,
799
- name: src,
800
- // ports: [3333],
801
- ports: portsToUse,
802
- fs: ".",
803
- browserWSEndpoint: this.browser.wsEndpoint(),
804
- };
805
- }
806
- else {
807
- this.queue.push(src);
808
- // return;
809
- }
810
- }
811
- else {
812
- console.error("negative port makes no sense", src);
813
- process.exit(-1);
814
- }
815
- // const builtfile = dest + ".mjs";
816
- await Promise.resolve(`${`${builtfile}?cacheBust=${Date.now()}`}`).then(s => __importStar(require(s))).then((module) => {
817
- if (!this.pureSidecars)
818
- this.pureSidecars = {};
819
- this.pureSidecars[r] = module.default;
820
- this.pureSidecars[r].start(argz);
821
- });
822
- return [r, argz];
823
- // for (let i = 0; i <= portsToUse.length; i++) {
824
- // if (portsToUse[i]) {
825
- // this.ports[portsToUse[i]] = "true"; //port is open again
826
- // }
827
- // }
828
- };
829
- this.launchPitono = async (src, dest) => {
830
- console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`pitono < ${src}`)));
831
- this.bddTestIsRunning(src);
832
- const reportDest = `testeranto/reports/${this.name}/${src
833
- .split(".")
834
- .slice(0, -1)
835
- .join(".")}/pitono`;
836
- if (!fs_1.default.existsSync(reportDest)) {
837
- fs_1.default.mkdirSync(reportDest, { recursive: true });
838
- }
839
- const logs = createLogStreams(reportDest, "node"); // Use node-style logs for pitono
840
- try {
841
- // Execute the Python test using the pitono runner
842
- const { PitonoRunner } = await Promise.resolve().then(() => __importStar(require('./pitonoRunner')));
843
- const runner = new PitonoRunner(this.configs, this.name);
844
- await runner.run();
845
- this.bddTestIsNowDone(src, 0);
846
- statusMessagePretty(0, src, "pitono");
847
- }
848
- catch (error) {
849
- logs.writeExitCode(-1, error);
850
- console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(`${src} errored with: ${error}. Check logs for more info`)));
851
- this.bddTestIsNowDone(src, -1);
852
- statusMessagePretty(-1, src, "pitono");
853
- }
854
- };
855
- this.launchWeb = async (src, dest) => {
856
- console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`web < ${src}`)));
857
- this.bddTestIsRunning(src);
858
- const reportDest = `testeranto/reports/${this.name}/${src
859
- .split(".")
860
- .slice(0, -1)
861
- .join(".")}/web`;
862
- if (!fs_1.default.existsSync(reportDest)) {
863
- fs_1.default.mkdirSync(reportDest, { recursive: true });
864
- }
865
- const destFolder = dest.replace(".mjs", "");
866
- const webArgz = JSON.stringify({
867
- name: src,
868
- ports: [].toString(),
869
- fs: reportDest,
870
- browserWSEndpoint: this.browser.wsEndpoint(),
871
- });
872
- const d = `${dest}?cacheBust=${Date.now()}`;
873
- const logs = createLogStreams(reportDest, "web");
874
- this.browser
875
- .newPage()
876
- .then((page) => {
877
- page.on("console", (log) => {
878
- var _a, _b, _c, _d;
879
- const msg = `${log.text()}\n`;
880
- switch (log.type()) {
881
- case "info":
882
- (_a = logs.info) === null || _a === void 0 ? void 0 : _a.write(msg);
883
- break;
884
- case "warn":
885
- (_b = logs.warn) === null || _b === void 0 ? void 0 : _b.write(msg);
886
- break;
887
- case "error":
888
- (_c = logs.error) === null || _c === void 0 ? void 0 : _c.write(msg);
889
- break;
890
- case "debug":
891
- (_d = logs.debug) === null || _d === void 0 ? void 0 : _d.write(msg);
892
- break;
893
- default:
894
- break;
895
- }
896
- });
897
- page.on("close", () => {
898
- logs.writeExitCode(0); // Web tests exit with 0 unless there's an error
899
- logs.closeAll();
900
- logs.closeAll();
901
- });
902
- this.mapping().forEach(async ([command, func]) => {
903
- if (command === "page") {
904
- page.exposeFunction(command, (x) => {
905
- if (x) {
906
- return func(x);
907
- }
908
- else {
909
- return func(page.mainFrame()._id);
910
- }
911
- });
912
- }
913
- else {
914
- return page.exposeFunction(command, func);
915
- }
916
- });
917
- return page;
918
- })
919
- .then(async (page) => {
920
- const close = () => {
921
- if (!files[src]) {
922
- files[src] = new Set();
923
- }
924
- // files[t].add(filepath);
925
- // fs.writeFileSync(
926
- // destFolder + "/manifest.json",
927
- // JSON.stringify(Array.from(files[src]))
928
- // );
929
- delete files[src];
930
- Promise.all(screenshots[src] || []).then(() => {
931
- delete screenshots[src];
932
- page.close();
933
- });
934
- return;
935
- };
936
- page.on("pageerror", (err) => {
937
- logs.writeExitCode(-1, err);
938
- 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`));
939
- this.bddTestIsNowDone(src, -1);
940
- close();
941
- });
942
- // page.on("console", (log: ConsoleMessage) => {});
943
- await page.goto(`file://${`${destFolder}.html`}`, {});
944
- await page
945
- .evaluate(`
946
- import('${d}').then(async (x) => {
947
- try {
948
- return await (await x.default).receiveTestResourceConfig(${webArgz})
949
- } catch (e) {
950
- console.log("web run failure", e.toString())
951
- }
952
- })
953
- `)
954
- .then(async ({ fails, failed, features }) => {
955
- statusMessagePretty(fails, src, "web");
956
- this.bddTestIsNowDone(src, fails);
957
- // close();
958
- })
959
- .catch((e) => {
960
- console.log(ansi_colors_2.default.red(ansi_colors_2.default.inverse(e.stack)));
961
- 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`)));
962
- this.bddTestIsNowDone(src, -1);
963
- })
964
- .finally(() => {
965
- // process.exit(-1);
966
- close();
967
- });
968
- return page;
969
- });
970
- };
971
- this.receiveFeaturesV2 = (reportDest, srcTest, platform) => {
972
- const featureDestination = path_1.default.resolve(process.cwd(), "reports", "features", "strings", srcTest.split(".").slice(0, -1).join(".") + ".features.txt");
973
- // Read and parse the test report
974
- const testReportPath = `${reportDest}/tests.json`;
975
- if (!fs_1.default.existsSync(testReportPath)) {
976
- console.error(`tests.json not found at: ${testReportPath}`);
977
- return;
978
- }
979
- const testReport = JSON.parse(fs_1.default.readFileSync(testReportPath, "utf8"));
980
- // Add full path information to each test
981
- if (testReport.tests) {
982
- testReport.tests.forEach((test) => {
983
- // Add the full path to each test
984
- test.fullPath = path_1.default.resolve(process.cwd(), srcTest);
985
- });
986
- }
987
- // Add full path to the report itself
988
- testReport.fullPath = path_1.default.resolve(process.cwd(), srcTest);
989
- // Write the modified report back
990
- fs_1.default.writeFileSync(testReportPath, JSON.stringify(testReport, null, 2));
991
- testReport.features
992
- .reduce(async (mm, featureStringKey) => {
993
- const accum = await mm;
994
- const isUrl = isValidUrl(featureStringKey);
995
- if (isUrl) {
996
- const u = new URL(featureStringKey);
997
- if (u.protocol === "file:") {
998
- const newPath = `${process.cwd()}/testeranto/features/internal/${path_1.default.relative(process.cwd(), u.pathname)}`;
999
- // await fs.promises.mkdir(path.dirname(newPath), { recursive: true });
1000
- // try {
1001
- // await fs.unlinkSync(newPath);
1002
- // // console.log(`Removed existing link at ${newPath}`);
1003
- // } catch (error) {
1004
- // if (error.code !== "ENOENT") {
1005
- // // throw error;
1006
- // }
1007
- // }
1008
- // fs.symlink(u.pathname, newPath, (err) => {
1009
- // if (err) {
1010
- // // console.error("Error creating symlink:", err);
1011
- // } else {
1012
- // // console.log("Symlink created successfully");
1013
- // }
1014
- // });
1015
- accum.files.push(u.pathname);
1016
- }
1017
- else if (u.protocol === "http:" || u.protocol === "https:") {
1018
- const newPath = `${process.cwd()}/testeranto/features/external/${u.hostname}${u.pathname}`;
1019
- const body = await this.configs.featureIngestor(featureStringKey);
1020
- writeFileAndCreateDir(newPath, body);
1021
- accum.files.push(newPath);
1022
- }
1023
- }
1024
- else {
1025
- await fs_1.default.promises.mkdir(path_1.default.dirname(featureDestination), {
1026
- recursive: true,
1027
- });
1028
- accum.strings.push(featureStringKey);
1029
- }
1030
- return accum;
1031
- }, Promise.resolve({ files: [], strings: [] }))
1032
- .then(({ files, strings }) => {
1033
- // Markdown files must be referenced in the prompt but string style features are already present in the tests.json file
1034
- fs_1.default.writeFileSync(`testeranto/reports/${this.name}/${srcTest
1035
- .split(".")
1036
- .slice(0, -1)
1037
- .join(".")}/${platform}/featurePrompt.txt`, files
1038
- .map((f) => {
1039
- return `/read ${f}`;
1040
- })
1041
- .join("\n"));
1042
- });
1043
- // const f: Record<string, string> = {};
1044
- testReport.givens.forEach((g) => {
1045
- if (g.failed === true) {
1046
- this.summary[srcTest].failingFeatures[g.key] = g.features;
1047
- }
1048
- });
1049
- // this.summary[srcTest].failingFeatures = f;
1050
- this.writeBigBoard();
1051
- };
1052
- this.checkForShutdown = () => {
1053
- // console.log(ansiC.inverse(JSON.stringify(this.summary, null, 2)));
1054
- this.checkQueue();
1055
- console.log(ansi_colors_2.default.inverse(`The following jobs are awaiting resources: ${JSON.stringify(this.queue)}`));
1056
- console.log(ansi_colors_2.default.inverse(`The status of ports: ${JSON.stringify(this.ports)}`));
1057
- this.writeBigBoard();
1058
- if (this.mode === "dev")
1059
- return;
1060
- let inflight = false;
1061
- Object.keys(this.summary).forEach((k) => {
1062
- if (this.summary[k].prompt === "?") {
1063
- console.log(ansi_colors_2.default.blue(ansi_colors_2.default.inverse(`🕕 prompt ${k}`)));
1064
- inflight = true;
1065
- }
1066
- });
1067
- Object.keys(this.summary).forEach((k) => {
1068
- if (this.summary[k].runTimeErrors === "?") {
1069
- console.log(ansi_colors_2.default.blue(ansi_colors_2.default.inverse(`🕕 runTimeError ${k}`)));
1070
- inflight = true;
1071
- }
1072
- });
1073
- Object.keys(this.summary).forEach((k) => {
1074
- if (this.summary[k].staticErrors === "?") {
1075
- console.log(ansi_colors_2.default.blue(ansi_colors_2.default.inverse(`🕕 staticErrors ${k}`)));
1076
- inflight = true;
1077
- }
1078
- });
1079
- Object.keys(this.summary).forEach((k) => {
1080
- if (this.summary[k].typeErrors === "?") {
1081
- console.log(ansi_colors_2.default.blue(ansi_colors_2.default.inverse(`🕕 typeErrors ${k}`)));
1082
- inflight = true;
1083
- }
1084
- });
1085
- this.writeBigBoard();
1086
- if (!inflight) {
1087
- if (this.browser) {
1088
- if (this.browser) {
1089
- this.browser.disconnect().then(() => {
1090
- console.log(ansi_colors_2.default.inverse(`${this.name} has been tested. Goodbye.`));
1091
- process.exit();
1092
- });
1093
- }
1094
- }
1095
- }
1096
- };
1097
- this.launchers = {};
1098
- this.ports = {};
1099
- this.queue = [];
1100
- this.nodeSidecars = {};
1101
- this.webSidecars = {};
1102
- this.pureSidecars = {};
1103
- this.configs.ports.forEach((element) => {
1104
- this.ports[element] = ""; // set ports as open
1105
- });
1106
- // Create HTTP server
1107
- this.httpServer = http_1.default.createServer(this.requestHandler.bind(this));
1108
- // Start WebSocket server attached to the HTTP server
1109
- this.wss = new ws_1.WebSocketServer({ server: this.httpServer });
1110
- this.wss.on("connection", (ws) => {
1111
- this.clients.add(ws);
1112
- console.log("Client connected");
1113
- ws.on("message", (data) => {
1114
- var _a, _b;
1115
- try {
1116
- const message = JSON.parse(data.toString());
1117
- if (message.type === "executeCommand") {
1118
- // Validate the command starts with 'aider'
1119
- if (message.command && message.command.trim().startsWith("aider")) {
1120
- console.log(`Executing command: ${message.command}`);
1121
- // Execute the command
1122
- const processId = Date.now().toString();
1123
- const child = (0, node_child_process_1.spawn)(message.command, {
1124
- shell: true,
1125
- cwd: process.cwd(),
1126
- });
1127
- // Track the process in both maps
1128
- this.runningProcesses.set(processId, child);
1129
- this.allProcesses.set(processId, {
1130
- child,
1131
- status: "running",
1132
- command: message.command,
1133
- pid: child.pid,
1134
- timestamp: new Date().toISOString(),
1135
- });
1136
- // Initialize logs for this process
1137
- this.processLogs.set(processId, []);
1138
- // Broadcast process started
1139
- this.broadcast({
1140
- type: "processStarted",
1141
- processId,
1142
- command: message.command,
1143
- timestamp: new Date().toISOString(),
1144
- logs: [],
1145
- });
1146
- // Capture stdout and stderr
1147
- (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
1148
- const logData = data.toString();
1149
- // Add to stored logs
1150
- const logs = this.processLogs.get(processId) || [];
1151
- logs.push(logData);
1152
- this.processLogs.set(processId, logs);
1153
- this.broadcast({
1154
- type: "processStdout",
1155
- processId,
1156
- data: logData,
1157
- timestamp: new Date().toISOString(),
1158
- });
1159
- });
1160
- (_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
1161
- const logData = data.toString();
1162
- // Add to stored logs
1163
- const logs = this.processLogs.get(processId) || [];
1164
- logs.push(logData);
1165
- this.processLogs.set(processId, logs);
1166
- this.broadcast({
1167
- type: "processStderr",
1168
- processId,
1169
- data: logData,
1170
- timestamp: new Date().toISOString(),
1171
- });
1172
- });
1173
- child.on("error", (error) => {
1174
- console.error(`Failed to execute command: ${error}`);
1175
- this.runningProcesses.delete(processId);
1176
- // Update the process status to error
1177
- const processInfo = this.allProcesses.get(processId);
1178
- if (processInfo) {
1179
- this.allProcesses.set(processId, Object.assign(Object.assign({}, processInfo), { status: "error", error: error.message }));
1180
- }
1181
- this.broadcast({
1182
- type: "processError",
1183
- processId,
1184
- error: error.message,
1185
- timestamp: new Date().toISOString(),
1186
- });
1187
- });
1188
- child.on("exit", (code) => {
1189
- console.log(`Command exited with code ${code}`);
1190
- // Remove from running processes but keep in allProcesses
1191
- this.runningProcesses.delete(processId);
1192
- // Update the process status to exited
1193
- const processInfo = this.allProcesses.get(processId);
1194
- if (processInfo) {
1195
- this.allProcesses.set(processId, Object.assign(Object.assign({}, processInfo), { status: "exited", exitCode: code }));
1196
- }
1197
- this.broadcast({
1198
- type: "processExited",
1199
- processId,
1200
- exitCode: code,
1201
- timestamp: new Date().toISOString(),
1202
- });
1203
- });
1204
- }
1205
- else {
1206
- console.error('Invalid command: must start with "aider"');
1207
- }
1208
- }
1209
- else if (message.type === "getRunningProcesses") {
1210
- // Send list of all processes (both running and completed) with their full logs
1211
- const processes = Array.from(this.allProcesses.entries()).map(([id, procInfo]) => ({
1212
- processId: id,
1213
- command: procInfo.command,
1214
- pid: procInfo.pid,
1215
- status: procInfo.status,
1216
- exitCode: procInfo.exitCode,
1217
- error: procInfo.error,
1218
- timestamp: procInfo.timestamp,
1219
- logs: this.processLogs.get(id) || [],
1220
- }));
1221
- ws.send(JSON.stringify({
1222
- type: "runningProcesses",
1223
- processes,
1224
- }));
1225
- }
1226
- else if (message.type === "getProcess") {
1227
- // Send specific process with full logs
1228
- const processId = message.processId;
1229
- const procInfo = this.allProcesses.get(processId);
1230
- if (procInfo) {
1231
- ws.send(JSON.stringify({
1232
- type: "processData",
1233
- processId,
1234
- command: procInfo.command,
1235
- pid: procInfo.pid,
1236
- status: procInfo.status,
1237
- exitCode: procInfo.exitCode,
1238
- error: procInfo.error,
1239
- timestamp: procInfo.timestamp,
1240
- logs: this.processLogs.get(processId) || [],
1241
- }));
1242
- }
1243
- }
1244
- else if (message.type === "stdin") {
1245
- // Handle stdin input for a process
1246
- const processId = message.processId;
1247
- const data = message.data;
1248
- console.log("Received stdin for process", processId, ":", data);
1249
- const childProcess = this.runningProcesses.get(processId);
1250
- if (childProcess && childProcess.stdin) {
1251
- console.log("Writing to process stdin");
1252
- childProcess.stdin.write(data);
1253
- }
1254
- else {
1255
- console.log("Cannot write to stdin - process not found or no stdin:", {
1256
- processExists: !!childProcess,
1257
- stdinExists: (childProcess === null || childProcess === void 0 ? void 0 : childProcess.stdin) ? true : false,
1258
- });
1259
- }
1260
- }
1261
- else if (message.type === "killProcess") {
1262
- // Handle killing a process
1263
- const processId = message.processId;
1264
- console.log("Received killProcess for process", processId);
1265
- const childProcess = this.runningProcesses.get(processId);
1266
- if (childProcess) {
1267
- console.log("Killing process");
1268
- childProcess.kill("SIGTERM");
1269
- // The process exit handler will update the status and broadcast the change
1270
- }
1271
- else {
1272
- console.log("Cannot kill process - process not found:", {
1273
- processExists: !!childProcess,
1274
- });
1275
- }
1276
- }
1277
- }
1278
- catch (error) {
1279
- console.error("Error handling WebSocket message:", error);
1280
- }
1281
- });
1282
- ws.on("close", () => {
1283
- this.clients.delete(ws);
1284
- console.log("Client disconnected");
1285
- });
1286
- ws.on("error", (error) => {
1287
- console.error("WebSocket error:", error);
1288
- this.clients.delete(ws);
1289
- });
1290
- });
1291
- // Start HTTP server
1292
- const httpPort = Number(process.env.HTTP_PORT) || 3000;
1293
- this.httpServer.listen(httpPort, () => {
1294
- console.log(`HTTP server running on http://localhost:${httpPort}`);
1295
- });
1296
- }
1297
- async stopSideCar(uid) {
1298
- console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`stopSideCar ${uid}`)));
1299
- Object.entries(this.pureSidecars).forEach(async ([k, v]) => {
1300
- if (Number(k) === uid) {
1301
- await this.pureSidecars[Number(k)].stop();
1302
- delete this.pureSidecars[Number(k)];
1303
- }
1304
- });
1305
- Object.entries(this.nodeSidecars).forEach(async ([k, v]) => {
1306
- if (Number(k) === uid) {
1307
- await this.nodeSidecars[Number(k)].send("stop");
1308
- delete this.nodeSidecars[Number(k)];
1309
- }
1310
- });
1311
- Object.entries(this.webSidecars).forEach(async ([k, v]) => {
1312
- if (Number(k) === uid) {
1313
- (await this.browser.pages()).forEach(async (p) => {
1314
- if (p.mainFrame()._id === k) {
1315
- await this.webSidecars[Number(k)].close();
1316
- delete this.webSidecars[Number(k)];
1317
- }
1318
- });
1319
- }
1320
- });
1321
- return;
1322
- }
1323
- async launchSideCar(n, name) {
1324
- const c = this.configs.tests.find(([v, r]) => {
1325
- return v === name;
1326
- });
1327
- const s = c[3][n];
1328
- const r = s[1];
1329
- if (r === "node") {
1330
- return this.launchNodeSideCar(s);
1331
- }
1332
- else if (r === "web") {
1333
- return this.launchWebSideCar(s);
1334
- }
1335
- else if (r === "pure") {
1336
- return this.launchPureSideCar(s);
1337
- }
1338
- else {
1339
- throw `unknown runtime ${r}`;
1340
- }
1341
- }
1342
- mapping() {
1343
- return [
1344
- ["$", this.$],
1345
- ["click", this.click],
1346
- ["closePage", this.closePage],
1347
- ["createWriteStream", this.createWriteStream],
1348
- ["customclose", this.customclose],
1349
- ["customScreenShot", this.customScreenShot.bind(this)],
1350
- ["end", this.end],
1351
- ["existsSync", this.existsSync],
1352
- ["focusOn", this.focusOn],
1353
- ["getAttribute", this.getAttribute],
1354
- ["getInnerHtml", this.getInnerHtml],
1355
- // ["setValue", this.setValue],
1356
- ["goto", this.goto.bind(this)],
1357
- ["isDisabled", this.isDisabled],
1358
- ["launchSideCar", this.launchSideCar.bind(this)],
1359
- ["mkdirSync", this.mkdirSync],
1360
- ["newPage", this.newPage],
1361
- ["page", this.page],
1362
- ["pages", this.pages],
1363
- ["screencast", this.screencast],
1364
- ["screencastStop", this.screencastStop],
1365
- ["stopSideCar", this.stopSideCar.bind(this)],
1366
- ["typeInto", this.typeInto],
1367
- ["waitForSelector", this.waitForSelector],
1368
- ["write", this.write],
1369
- ["writeFileSync", this.writeFileSync],
1370
- ];
1371
- }
1372
- async start() {
1373
- // set up the "pure" listeners
1374
- this.mapping().forEach(async ([command, func]) => {
1375
- globalThis[command] = func;
1376
- });
1377
- if (!fs_1.default.existsSync(`testeranto/reports/${this.name}`)) {
1378
- fs_1.default.mkdirSync(`testeranto/reports/${this.name}`);
1379
- }
1380
- const executablePath = "/opt/homebrew/bin/chromium";
1381
- try {
1382
- this.browser = await puppeteer_core_1.default.launch({
1383
- slowMo: 1,
1384
- waitForInitialPage: false,
1385
- executablePath,
1386
- headless: true,
1387
- defaultViewport: null, // Disable default 800x600 viewport
1388
- dumpio: false,
1389
- devtools: false,
1390
- args: [
1391
- "--allow-file-access-from-files",
1392
- "--allow-insecure-localhost",
1393
- "--allow-running-insecure-content",
1394
- "--auto-open-devtools-for-tabs",
1395
- "--disable-dev-shm-usage",
1396
- "--disable-extensions",
1397
- "--disable-features=site-per-process",
1398
- "--disable-gpu",
1399
- "--disable-setuid-sandbox",
1400
- "--disable-site-isolation-trials",
1401
- "--disable-web-security",
1402
- "--no-first-run",
1403
- "--no-sandbox",
1404
- "--no-startup-window",
1405
- "--reduce-security-for-testing",
1406
- "--remote-allow-origins=*",
1407
- "--start-maximized",
1408
- "--unsafely-treat-insecure-origin-as-secure=*",
1409
- `--remote-debugging-port=3234`,
1410
- // "--disable-features=IsolateOrigins,site-per-process",
1411
- // "--disable-features=IsolateOrigins",
1412
- // "--disk-cache-dir=/dev/null",
1413
- // "--disk-cache-size=1",
1414
- // "--no-zygote",
1415
- // "--remote-allow-origins=ws://localhost:3234",
1416
- // "--single-process",
1417
- // "--start-maximized",
1418
- // "--unsafely-treat-insecure-origin-as-secure",
1419
- // "--unsafely-treat-insecure-origin-as-secure=ws://192.168.0.101:3234",
1420
- ],
1421
- });
1422
- }
1423
- catch (e) {
1424
- console.error(e);
1425
- console.error("could not start chrome via puppeter. Check this path: ", executablePath);
1426
- }
1427
- const { nodeEntryPoints, webEntryPoints, pureEntryPoints, pitonoEntryPoints } = this.getRunnables(this.configs.tests, this.name);
1428
- [
1429
- [
1430
- nodeEntryPoints,
1431
- this.launchNode,
1432
- "node",
1433
- (w) => {
1434
- this.nodeMetafileWatcher = w;
1435
- },
1436
- ],
1437
- [
1438
- webEntryPoints,
1439
- this.launchWeb,
1440
- "web",
1441
- (w) => {
1442
- this.webMetafileWatcher = w;
1443
- },
1444
- ],
1445
- [
1446
- pureEntryPoints,
1447
- this.launchPure,
1448
- "pure",
1449
- (w) => {
1450
- this.importMetafileWatcher = w;
1451
- },
1452
- ],
1453
- [
1454
- pitonoEntryPoints,
1455
- this.launchPitono,
1456
- "pitono",
1457
- (w) => {
1458
- this.pitonoMetafileWatcher = w;
1459
- },
1460
- ],
1461
- ].forEach(async ([eps, launcher, runtime, watcher]) => {
1462
- let metafile;
1463
- if (runtime === "pitono") {
1464
- metafile = `./testeranto/metafiles/python/core.json`;
1465
- // Ensure the directory exists before trying to watch
1466
- const metafileDir = path_1.default.dirname(metafile);
1467
- if (!fs_1.default.existsSync(metafileDir)) {
1468
- fs_1.default.mkdirSync(metafileDir, { recursive: true });
1469
- }
1470
- }
1471
- else {
1472
- metafile = `./testeranto/metafiles/${runtime}/${this.name}.json`;
1473
- }
1474
- // Only poll for file if it's not a pitono runtime
1475
- if (runtime !== "pitono") {
1476
- await pollForFile(metafile);
1477
- }
1478
- Object.entries(eps).forEach(async ([inputFile, outputFile]) => {
1479
- // await pollForFile(outputFile);\
1480
- this.launchers[inputFile] = () => launcher(inputFile, outputFile);
1481
- this.launchers[inputFile]();
1482
- try {
1483
- (0, fs_1.watch)(outputFile, async (e, filename) => {
1484
- const hash = await fileHash(outputFile);
1485
- if (fileHashes[inputFile] !== hash) {
1486
- fileHashes[inputFile] = hash;
1487
- console.log(ansi_colors_2.default.yellow(ansi_colors_2.default.inverse(`< ${e} ${filename}`)));
1488
- // launcher(inputFile, outputFile);
1489
- this.launchers[inputFile]();
1490
- }
1491
- });
1492
- }
1493
- catch (e) {
1494
- console.error(e);
1495
- }
1496
- });
1497
- this.metafileOutputs(runtime);
1498
- // For pitono, we need to wait for the file to be created
1499
- if (runtime === "pitono") {
1500
- // Use polling to wait for the file to exist
1501
- const checkFileExists = () => {
1502
- if (fs_1.default.existsSync(metafile)) {
1503
- console.log(ansi_colors_2.default.green(ansi_colors_2.default.inverse(`Pitono metafile found: ${metafile}`)));
1504
- // Set up the watcher once the file exists
1505
- watcher((0, fs_1.watch)(metafile, async (e, filename) => {
1506
- console.log(ansi_colors_2.default.yellow(ansi_colors_2.default.inverse(`< ${e} ${filename} (${runtime})`)));
1507
- this.metafileOutputs(runtime);
1508
- }));
1509
- // Read the metafile immediately
1510
- this.metafileOutputs(runtime);
1511
- }
1512
- else {
1513
- // Check again after a delay
1514
- setTimeout(checkFileExists, 1000);
1515
- }
1516
- };
1517
- // Start checking for the file
1518
- checkFileExists();
1519
- }
1520
- else {
1521
- // For other runtimes, only set up watcher if the file exists
1522
- if (fs_1.default.existsSync(metafile)) {
1523
- watcher((0, fs_1.watch)(metafile, async (e, filename) => {
1524
- console.log(ansi_colors_2.default.yellow(ansi_colors_2.default.inverse(`< ${e} ${filename} (${runtime})`)));
1525
- this.metafileOutputs(runtime);
1526
- }));
1527
- }
1528
- }
1529
- });
1530
- // Object.keys(this.configs.externalTests).forEach((et) => {
1531
- // this.launchExternalTest(et, this.configs.externalTests[et]);
1532
- // });
1533
- }
1534
- // async launchExternalTest(
1535
- // externalTestName: string,
1536
- // externalTest: {
1537
- // watch: string[];
1538
- // exec: string;
1539
- // }
1540
- // ) {
1541
- // // fs.mkdirSync(`testeranto/externalTests/${externalTestName}`);
1542
- // // exec(externalTest.exec, (error, stdout, stderr) => {
1543
- // // if (error) {
1544
- // // fs.writeFileSync(
1545
- // // `testeranto/externalTests/${externalTestName}/exitcode.txt`,
1546
- // // `${error.name}\n${error.message}\n${error.code}\n`
1547
- // // );
1548
- // // } else {
1549
- // // fs.writeFileSync(
1550
- // // `testeranto/externalTests/${externalTestName}/exitcode.txt`,
1551
- // // `0`
1552
- // // );
1553
- // // }
1554
- // // fs.writeFileSync(
1555
- // // `testeranto/externalTests/${externalTestName}/stdout.txt`,
1556
- // // stdout
1557
- // // );
1558
- // // fs.writeFileSync(
1559
- // // `testeranto/externalTests/${externalTestName}/stderr.txt`,
1560
- // // stderr
1561
- // // );
1562
- // // });
1563
- // }
1564
- async stop() {
1565
- console.log(ansi_colors_2.default.inverse("Testeranto-Run is shutting down gracefully..."));
1566
- this.mode = "once";
1567
- this.nodeMetafileWatcher.close();
1568
- this.webMetafileWatcher.close();
1569
- this.importMetafileWatcher.close();
1570
- if (this.pitonoMetafileWatcher) {
1571
- this.pitonoMetafileWatcher.close();
1572
- }
1573
- // Close any remaining log streams
1574
- Object.values(this.logStreams || {}).forEach((logs) => logs.closeAll());
1575
- // Close WebSocket server
1576
- this.wss.close(() => {
1577
- console.log("WebSocket server closed");
1578
- });
1579
- // Close all client connections
1580
- this.clients.forEach((client) => {
1581
- client.terminate();
1582
- });
1583
- this.clients.clear();
1584
- // Close HTTP server
1585
- this.httpServer.close(() => {
1586
- console.log("HTTP server closed");
1587
- });
1588
- this.checkForShutdown();
1589
- }
1590
- async metafileOutputs(platform) {
1591
- let metafilePath;
1592
- if (platform === "pitono") {
1593
- metafilePath = `./testeranto/metafiles/python/core.json`;
1594
- }
1595
- else {
1596
- metafilePath = `./testeranto/metafiles/${platform}/${this.name}.json`;
1597
- }
1598
- // Check if the file exists
1599
- if (!fs_1.default.existsSync(metafilePath)) {
1600
- if (platform === "pitono") {
1601
- console.log(ansi_colors_2.default.yellow(ansi_colors_2.default.inverse(`Pitono metafile not found yet: ${metafilePath}`)));
1602
- }
1603
- return;
1604
- }
1605
- let metafile;
1606
- try {
1607
- const fileContent = fs_1.default.readFileSync(metafilePath).toString();
1608
- const parsedData = JSON.parse(fileContent);
1609
- // Handle different metafile structures
1610
- if (platform === "pitono") {
1611
- // Pitono metafile might be the entire content or have a different structure
1612
- metafile = parsedData.metafile || parsedData;
1613
- }
1614
- else {
1615
- metafile = parsedData.metafile;
1616
- }
1617
- if (!metafile) {
1618
- console.log(ansi_colors_2.default.yellow(ansi_colors_2.default.inverse(`No metafile found in ${metafilePath}`)));
1619
- return;
1620
- }
1621
- }
1622
- catch (error) {
1623
- console.error(`Error reading metafile at ${metafilePath}:`, error);
1624
- return;
1625
- }
1626
- const outputs = metafile.outputs;
1627
- Object.keys(outputs).forEach(async (k) => {
1628
- const pattern = `testeranto/bundles/${platform}/${this.name}/${this.configs.src}`;
1629
- if (!k.startsWith(pattern)) {
1630
- return false;
1631
- }
1632
- const addableFiles = Object.keys(outputs[k].inputs).filter((i) => {
1633
- if (!fs_1.default.existsSync(i))
1634
- return false;
1635
- if (i.startsWith("node_modules"))
1636
- return false;
1637
- if (i.startsWith("./node_modules"))
1638
- return false;
1639
- return true;
1640
- });
1641
- const f = `${k.split(".").slice(0, -1).join(".")}/`;
1642
- if (!fs_1.default.existsSync(f)) {
1643
- fs_1.default.mkdirSync(f);
1644
- }
1645
- const entrypoint = outputs[k].entryPoint;
1646
- if (entrypoint) {
1647
- const changeDigest = await filesHash(addableFiles);
1648
- if (changeDigest === changes[entrypoint]) {
1649
- // skip
1650
- }
1651
- else {
1652
- changes[entrypoint] = changeDigest;
1653
- this.tscCheck({
1654
- platform,
1655
- addableFiles,
1656
- entrypoint: entrypoint,
1657
- });
1658
- this.eslintCheck(entrypoint, platform, addableFiles);
1659
- this.makePrompt(entrypoint, addableFiles, platform);
1660
- }
1661
- }
1662
- });
1663
- }
1664
- requestHandler(req, res) {
1665
- // Parse the URL
1666
- const parsedUrl = url_1.default.parse(req.url || "/");
1667
- let pathname = parsedUrl.pathname || "/";
1668
- // Handle root path
1669
- if (pathname === "/") {
1670
- pathname = "/index.html";
1671
- }
1672
- // Remove leading slash
1673
- let filePath = pathname.substring(1);
1674
- // Determine which directory to serve from
1675
- if (filePath.startsWith("reports/")) {
1676
- // Serve from reports directory
1677
- filePath = `testeranto/${filePath}`;
1678
- }
1679
- else if (filePath.startsWith("metafiles/")) {
1680
- // Serve from metafiles directory
1681
- filePath = `testeranto/${filePath}`;
1682
- }
1683
- else if (filePath === "projects.json") {
1684
- // Serve projects.json
1685
- filePath = `testeranto/${filePath}`;
1686
- }
1687
- else {
1688
- // For frontend assets, try multiple possible locations
1689
- // First, try the dist directory
1690
- const possiblePaths = [
1691
- `dist/${filePath}`,
1692
- `testeranto/dist/${filePath}`,
1693
- `../dist/${filePath}`,
1694
- `./${filePath}`,
1695
- ];
1696
- // Find the first existing file
1697
- let foundPath = null;
1698
- for (const possiblePath of possiblePaths) {
1699
- if (fs_1.default.existsSync(possiblePath)) {
1700
- foundPath = possiblePath;
1701
- break;
1702
- }
1703
- }
1704
- if (foundPath) {
1705
- filePath = foundPath;
1706
- }
1707
- else {
1708
- // If no file found, serve index.html for SPA routing
1709
- const indexPath = this.findIndexHtml();
1710
- if (indexPath) {
1711
- fs_1.default.readFile(indexPath, (err, data) => {
1712
- if (err) {
1713
- res.writeHead(404, { "Content-Type": "text/plain" });
1714
- res.end("404 Not Found");
1715
- return;
1716
- }
1717
- res.writeHead(200, { "Content-Type": "text/html" });
1718
- res.end(data);
1719
- });
1720
- return;
1721
- }
1722
- else {
1723
- res.writeHead(404, { "Content-Type": "text/plain" });
1724
- res.end("404 Not Found");
1725
- return;
1726
- }
1727
- }
1728
- }
1729
- // Check if file exists
1730
- fs_1.default.exists(filePath, (exists) => {
1731
- if (!exists) {
1732
- // For SPA routing, serve index.html if the path looks like a route
1733
- if (!pathname.includes(".") && pathname !== "/") {
1734
- const indexPath = this.findIndexHtml();
1735
- if (indexPath) {
1736
- fs_1.default.readFile(indexPath, (err, data) => {
1737
- if (err) {
1738
- res.writeHead(404, { "Content-Type": "text/plain" });
1739
- res.end("404 Not Found");
1740
- return;
1741
- }
1742
- res.writeHead(200, { "Content-Type": "text/html" });
1743
- res.end(data);
1744
- });
1745
- return;
1746
- }
1747
- else {
1748
- // Serve a simple message if index.html is not found
1749
- res.writeHead(200, { "Content-Type": "text/html" });
1750
- res.end(`
1751
- <html>
1752
- <body>
1753
- <h1>Testeranto is running</h1>
1754
- <p>Frontend files are not built yet. Run 'npm run build' to build the frontend.</p>
1755
- </body>
1756
- </html>
1757
- `);
1758
- return;
1759
- }
1760
- }
1761
- res.writeHead(404, { "Content-Type": "text/plain" });
1762
- res.end("404 Not Found");
1763
- return;
1764
- }
1765
- // Read and serve the file
1766
- fs_1.default.readFile(filePath, (err, data) => {
1767
- if (err) {
1768
- res.writeHead(500, { "Content-Type": "text/plain" });
1769
- res.end("500 Internal Server Error");
1770
- return;
1771
- }
1772
- // Get MIME type
1773
- const mimeType = mime_types_1.default.lookup(filePath) || "application/octet-stream";
1774
- res.writeHead(200, { "Content-Type": mimeType });
1775
- res.end(data);
1776
- });
1777
- });
1778
- }
1779
- findIndexHtml() {
1780
- const possiblePaths = [
1781
- "dist/index.html",
1782
- "testeranto/dist/index.html",
1783
- "../dist/index.html",
1784
- "./index.html",
1785
- ];
1786
- for (const path of possiblePaths) {
1787
- if (fs_1.default.existsSync(path)) {
1788
- return path;
1789
- }
1790
- }
1791
- return null;
1792
- }
1793
- broadcast(message) {
1794
- const data = typeof message === "string" ? message : JSON.stringify(message);
1795
- this.clients.forEach((client) => {
1796
- if (client.readyState === 1) {
1797
- // WebSocket.OPEN
1798
- client.send(data);
1799
- }
1800
- });
1801
- }
1802
- checkQueue() {
1803
- const x = this.queue.pop();
1804
- if (!x) {
1805
- ansi_colors_2.default.inverse(`The following queue is empty`);
1806
- return;
1807
- }
1808
- const test = this.configs.tests.find((t) => t[0] === x);
1809
- if (!test)
1810
- throw `test is undefined ${x}`;
1811
- // const [src, runtime, ...xx]: [string, IRunTime, ...any] = test;
1812
- this.launchers[test[0]]();
1813
- }
1814
- }
1815
- exports.PM_Main = PM_Main;