testeranto 0.200.0 → 0.202.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 (376) hide show
  1. package/README.md +26 -1
  2. package/bundle.js +3 -2
  3. package/design-editor/DesignEditor.tsx +40 -241
  4. package/dist/common/design-editor/DesignEditor.js +33 -198
  5. package/dist/common/src/App.js +158 -16
  6. package/dist/common/src/PM/PM_WithBuild.js +135 -0
  7. package/dist/common/src/PM/PM_WithEslintAndTsc.js +79 -67
  8. package/dist/common/src/PM/PM_WithGit.js +517 -0
  9. package/dist/common/src/PM/PM_WithProcesses.js +519 -0
  10. package/dist/common/src/PM/PM_WithWebSocket.js +535 -0
  11. package/dist/common/src/PM/base.js +62 -0
  12. package/dist/common/src/PM/main.js +533 -1676
  13. package/dist/common/src/PM/metafileOutputs.js +78 -0
  14. package/dist/common/src/PM/node.js +0 -6
  15. package/dist/common/src/PM/pure.js +0 -8
  16. package/dist/common/src/PM/types.js +1 -0
  17. package/dist/common/src/PM/utils.js +210 -0
  18. package/dist/common/src/PM/web.js +0 -6
  19. package/dist/common/src/ReportServer.js +0 -10
  20. package/dist/common/src/ReportServerLib.js +0 -140
  21. package/dist/common/src/components/pure/AppFrame.js +68 -56
  22. package/dist/common/src/components/pure/ArtifactTree.js +80 -0
  23. package/dist/common/src/components/pure/BuildLogViewer.js +106 -0
  24. package/dist/common/src/components/pure/DebugEnv.js +30 -0
  25. package/dist/common/src/components/pure/FileTree.js +34 -0
  26. package/dist/common/src/components/pure/FileTreeItem.js +29 -0
  27. package/dist/common/src/components/pure/GitHubLoginButton.js +18 -0
  28. package/dist/common/src/components/pure/GitIntegrationView.js +342 -0
  29. package/dist/common/src/components/pure/ProcessManager.js +1 -0
  30. package/dist/common/src/components/pure/ProcessManagerView.js +73 -74
  31. package/dist/common/src/components/pure/ProjectPageView.js +4 -117
  32. package/dist/common/src/components/pure/Settings.js +121 -0
  33. package/dist/common/src/components/pure/Settings.test.js +34 -0
  34. package/dist/common/src/components/pure/SignIn.js +22 -0
  35. package/dist/common/src/components/pure/SingleProcessView.js +166 -213
  36. package/dist/common/src/components/pure/TestPageView.js +113 -368
  37. package/dist/common/src/components/pure/TestPageView_utils.js +117 -0
  38. package/dist/common/src/components/pure/TestTable.js +33 -0
  39. package/dist/common/src/components/pure/ToastNotification.js +14 -0
  40. package/dist/common/src/components/pure/UserProfile.js +27 -0
  41. package/dist/common/src/components/stateful/AuthCallbackPage.js +51 -0
  42. package/dist/common/src/components/stateful/FeaturesReporter.js +2 -1
  43. package/dist/common/src/components/stateful/FileTree.js +58 -39
  44. package/dist/common/src/components/stateful/GitIntegrationPage.js +12 -0
  45. package/dist/common/src/components/stateful/ProcessManagerPage.js +13 -15
  46. package/dist/common/src/components/stateful/ProjectPage.js +6 -5
  47. package/dist/common/src/components/stateful/ProjectsPage.js +17 -19
  48. package/dist/common/src/components/stateful/SingleProcessPage.js +16 -26
  49. package/dist/common/src/components/stateful/TestPage.js +7 -5
  50. package/dist/common/src/hooks/useGitMode.js +21 -0
  51. package/dist/common/src/lib/BaseSuite.test/mock.js +15 -8
  52. package/dist/common/src/lib/BaseSuite.test/test.js +56 -80
  53. package/dist/common/src/lib/Tiposkripto.js +24 -0
  54. package/dist/common/src/lib/Tiposkripto.test/MockTiposkripto.js +154 -10
  55. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.adapter.js +6 -12
  56. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.implementation.js +63 -23
  57. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.specification.js +14 -6
  58. package/dist/common/src/lib/pmProxy.test/specification.js +167 -52
  59. package/dist/common/src/services/FileService.js +505 -0
  60. package/dist/common/src/services/GitHubAuthService.js +184 -0
  61. package/dist/common/src/testeranto.js +38 -97
  62. package/dist/common/src/utils/api.js +12 -8
  63. package/dist/common/src/utils/gitTest.js +27 -0
  64. package/dist/common/src/utils.js +23 -13
  65. package/dist/common/testeranto.config.js +21 -17
  66. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  67. package/dist/module/design-editor/DesignEditor.js +33 -199
  68. package/dist/module/src/App.js +121 -15
  69. package/dist/module/src/PM/PM_WithBuild.js +128 -0
  70. package/dist/module/src/PM/PM_WithEslintAndTsc.js +79 -67
  71. package/dist/module/src/PM/PM_WithGit.js +477 -0
  72. package/dist/module/src/PM/PM_WithProcesses.js +479 -0
  73. package/dist/module/src/PM/PM_WithWebSocket.js +528 -0
  74. package/dist/module/src/PM/base.js +62 -0
  75. package/dist/module/src/PM/main.js +533 -1676
  76. package/dist/module/src/PM/metafileOutputs.js +78 -0
  77. package/dist/module/src/PM/node.js +0 -6
  78. package/dist/module/src/PM/pure.js +0 -8
  79. package/dist/module/src/PM/types.js +1 -1
  80. package/dist/module/src/PM/utils.js +196 -0
  81. package/dist/module/src/PM/web.js +0 -6
  82. package/dist/module/src/ReportServer.js +1 -9
  83. package/dist/module/src/ReportServerLib.js +1 -134
  84. package/dist/module/src/components/pure/AppFrame.js +66 -24
  85. package/dist/module/src/components/pure/ArtifactTree.js +80 -0
  86. package/dist/module/src/components/pure/BuildLogViewer.js +99 -0
  87. package/dist/module/src/components/pure/DebugEnv.js +23 -0
  88. package/dist/module/src/components/pure/FileTree.js +27 -0
  89. package/dist/module/src/components/pure/FileTreeItem.js +22 -0
  90. package/dist/module/src/components/pure/GitHubLoginButton.js +11 -0
  91. package/dist/module/src/components/pure/GitIntegrationView.js +305 -0
  92. package/dist/module/src/components/pure/ProcessManager.js +1 -0
  93. package/dist/module/src/components/pure/ProcessManagerView.js +74 -75
  94. package/dist/module/src/components/pure/ProjectPageView.js +5 -118
  95. package/dist/module/src/components/pure/Settings.js +84 -0
  96. package/dist/module/src/components/pure/Settings.test.js +29 -0
  97. package/dist/module/src/components/pure/SignIn.js +15 -0
  98. package/dist/module/src/components/pure/SingleProcessView.js +130 -214
  99. package/dist/module/src/components/pure/TestPageView.js +97 -352
  100. package/dist/module/src/components/pure/TestPageView_utils.js +109 -0
  101. package/dist/module/src/components/pure/TestTable.js +26 -0
  102. package/dist/module/src/components/pure/ToastNotification.js +7 -0
  103. package/dist/module/src/components/pure/UserProfile.js +20 -0
  104. package/dist/module/src/components/stateful/AuthCallbackPage.js +14 -0
  105. package/dist/module/src/components/stateful/FeaturesReporter.js +2 -1
  106. package/dist/module/src/components/stateful/FileTree.js +59 -33
  107. package/dist/module/src/components/stateful/GitIntegrationPage.js +5 -0
  108. package/dist/module/src/components/stateful/ProcessManagerPage.js +13 -15
  109. package/dist/module/src/components/stateful/ProjectPage.js +6 -5
  110. package/dist/module/src/components/stateful/ProjectsPage.js +16 -18
  111. package/dist/module/src/components/stateful/SingleProcessPage.js +16 -26
  112. package/dist/module/src/components/stateful/TestPage.js +8 -6
  113. package/dist/module/src/hooks/useGitMode.js +17 -0
  114. package/dist/module/src/lib/BaseSuite.test/mock.js +15 -8
  115. package/dist/module/src/lib/BaseSuite.test/test.js +56 -80
  116. package/dist/module/src/lib/Tiposkripto.js +24 -0
  117. package/dist/module/src/lib/Tiposkripto.test/MockTiposkripto.js +154 -10
  118. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.adapter.js +6 -12
  119. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.implementation.js +63 -23
  120. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.specification.js +14 -6
  121. package/dist/module/src/lib/pmProxy.test/specification.js +167 -52
  122. package/dist/module/src/services/FileService.js +468 -0
  123. package/dist/module/src/services/GitHubAuthService.js +180 -0
  124. package/dist/module/src/testeranto.js +38 -97
  125. package/dist/module/src/utils/api.js +10 -7
  126. package/dist/module/src/utils/gitTest.js +23 -0
  127. package/dist/module/src/utils.js +21 -12
  128. package/dist/module/testeranto.config.js +21 -17
  129. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  130. package/dist/prebuild/App.css +94 -121
  131. package/dist/prebuild/App.js +44601 -11225
  132. package/dist/prebuild/testeranto.mjs +4106 -0
  133. package/dist/types/design-editor/DesignEditor.d.ts +1 -18
  134. package/dist/types/src/App.d.ts +18 -0
  135. package/dist/types/src/PM/PM_WithBuild.d.ts +13 -0
  136. package/dist/types/src/PM/PM_WithEslintAndTsc.d.ts +2 -4
  137. package/dist/types/src/PM/PM_WithGit.d.ts +27 -0
  138. package/dist/types/src/PM/PM_WithProcesses.d.ts +29 -0
  139. package/dist/types/src/PM/PM_WithWebSocket.d.ts +108 -0
  140. package/dist/types/src/PM/base.d.ts +1 -1
  141. package/dist/types/src/PM/index.d.ts +0 -2
  142. package/dist/types/src/PM/main.d.ts +6 -77
  143. package/dist/types/src/PM/metafileOutputs.d.ts +0 -0
  144. package/dist/types/src/PM/node.d.ts +0 -2
  145. package/dist/types/src/PM/pure.d.ts +0 -2
  146. package/dist/types/src/PM/types.d.ts +118 -0
  147. package/dist/types/src/PM/utils.d.ts +35 -0
  148. package/dist/types/src/PM/web.d.ts +0 -2
  149. package/dist/types/src/Pure.d.ts +6 -1
  150. package/dist/types/src/ReportServer.d.ts +0 -1
  151. package/dist/types/src/ReportServerLib.d.ts +0 -1
  152. package/dist/types/src/Types.d.ts +1 -0
  153. package/dist/types/src/components/pure/ArtifactTree.d.ts +0 -0
  154. package/dist/types/src/components/pure/BuildLogViewer.d.ts +7 -0
  155. package/dist/types/src/components/pure/DebugEnv.d.ts +2 -0
  156. package/dist/types/src/components/pure/FileTree.d.ts +6 -0
  157. package/dist/types/src/components/pure/FileTreeItem.d.ts +8 -0
  158. package/dist/types/src/components/pure/GitHubLoginButton.d.ts +8 -0
  159. package/dist/types/src/components/pure/GitIntegrationView.d.ts +1 -0
  160. package/dist/types/src/components/pure/Settings.d.ts +1 -0
  161. package/dist/types/src/components/pure/Settings.test.d.ts +1 -0
  162. package/dist/types/src/components/pure/SignIn.d.ts +1 -0
  163. package/dist/types/src/components/pure/SingleProcessView.d.ts +10 -0
  164. package/dist/types/src/components/pure/TestPageView.d.ts +2 -1
  165. package/dist/types/src/components/pure/TestPageView_utils.d.ts +23 -0
  166. package/dist/types/src/components/pure/TestTable.d.ts +16 -0
  167. package/dist/types/src/components/pure/ToastNotification.d.ts +6 -0
  168. package/dist/types/src/components/pure/UserProfile.d.ts +2 -0
  169. package/dist/types/src/components/stateful/AuthCallbackPage.d.ts +2 -0
  170. package/dist/types/src/components/stateful/FileTree.d.ts +0 -8
  171. package/dist/types/src/components/stateful/GitIntegrationPage.d.ts +1 -0
  172. package/dist/types/src/hooks/useGitMode.d.ts +7 -0
  173. package/dist/types/src/lib/BaseSuite.test/mock.d.ts +2 -2
  174. package/dist/types/src/lib/BaseSuite.test/test.d.ts +4 -3
  175. package/dist/types/src/lib/Tiposkripto.d.ts +2 -0
  176. package/dist/types/src/lib/Tiposkripto.test/MockTiposkripto.d.ts +3 -0
  177. package/dist/types/src/lib/Tiposkripto.test/Tiposkripto.types.d.ts +5 -0
  178. package/dist/types/src/lib/index.d.ts +6 -0
  179. package/dist/types/src/services/FileService.d.ts +34 -0
  180. package/dist/types/src/services/GitHubAuthService.d.ts +32 -0
  181. package/dist/types/src/utils/api.d.ts +1 -0
  182. package/dist/types/src/utils/gitTest.d.ts +11 -0
  183. package/dist/types/src/utils.d.ts +3 -3
  184. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  185. package/example/__pycache__/Calculator.cpython-313.pyc +0 -0
  186. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/README.md +187 -0
  187. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/base_given.go +163 -0
  188. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/base_suite.go +85 -0
  189. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/base_then.go +21 -0
  190. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/base_when.go +21 -0
  191. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/golingvu.go +554 -0
  192. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/test_adapter.go +33 -0
  193. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/types.go +72 -0
  194. package/example/vendor/modules.txt +5 -0
  195. package/git-integration-plan.md +395 -0
  196. package/package.json +26 -14
  197. package/src/App.tsx +169 -18
  198. package/src/PM/PM_WithBuild.ts +171 -0
  199. package/src/PM/PM_WithEslintAndTsc.ts +109 -86
  200. package/src/PM/PM_WithGit.ts +585 -0
  201. package/src/PM/PM_WithProcesses.ts +639 -0
  202. package/src/PM/PM_WithWebSocket.ts +631 -0
  203. package/src/PM/base.ts +63 -1
  204. package/src/PM/index.ts +8 -5
  205. package/src/PM/main.ts +672 -2050
  206. package/src/PM/metafileOutputs.ts +90 -0
  207. package/src/PM/node.ts +18 -18
  208. package/src/PM/pure.ts +5 -13
  209. package/src/PM/types.ts +145 -0
  210. package/src/PM/utils.ts +256 -0
  211. package/src/PM/web.ts +8 -8
  212. package/src/README.md +122 -0
  213. package/src/ReportServer.ts +0 -12
  214. package/src/ReportServerLib.ts +0 -147
  215. package/src/Types.ts +1 -0
  216. package/src/app.scss +14 -164
  217. package/src/components/pure/AppFrame.tsx +237 -71
  218. package/src/components/pure/ArtifactTree.tsx +82 -0
  219. package/src/components/pure/BuildLogViewer.tsx +168 -0
  220. package/src/components/pure/DebugEnv.tsx +30 -0
  221. package/src/components/pure/FileTree.tsx +58 -0
  222. package/src/components/pure/FileTreeItem.tsx +49 -0
  223. package/src/components/pure/GitHubLoginButton.tsx +31 -0
  224. package/src/components/pure/GitIntegrationView.tsx +443 -0
  225. package/src/components/pure/ProcessManager.tsx +6 -5
  226. package/src/components/pure/ProcessManagerView.tsx +162 -166
  227. package/src/components/pure/ProjectPageView.tsx +6 -224
  228. package/src/components/pure/Settings.test.tsx +34 -0
  229. package/src/components/pure/Settings.tsx +163 -0
  230. package/src/components/pure/SignIn.tsx +33 -0
  231. package/src/components/pure/SingleProcessView.tsx +231 -235
  232. package/src/components/pure/TestPageView.test/specification.ts +1 -0
  233. package/src/components/pure/TestPageView.tsx +317 -826
  234. package/src/components/pure/TestPageView_utils.tsx +285 -0
  235. package/src/components/pure/TestTable.tsx +88 -0
  236. package/src/components/pure/ToastNotification.tsx +19 -0
  237. package/src/components/pure/UserProfile.tsx +44 -0
  238. package/src/components/stateful/AuthCallbackPage.tsx +21 -0
  239. package/src/components/stateful/FeaturesReporter.tsx +3 -1
  240. package/src/components/stateful/FileTree.tsx +58 -58
  241. package/src/components/stateful/GitIntegrationPage.tsx +8 -0
  242. package/src/components/stateful/ProcessManagerPage.tsx +13 -17
  243. package/src/components/stateful/ProjectPage.tsx +6 -5
  244. package/src/components/stateful/ProjectsPage.tsx +17 -19
  245. package/src/components/stateful/SVGEditor/CircleForm.tsx +68 -0
  246. package/src/components/stateful/SVGEditor/GroupForm.tsx +56 -0
  247. package/src/components/stateful/SVGEditor/RectForm.tsx +74 -0
  248. package/src/components/stateful/SVGEditor/SVGAttributeField.tsx +29 -0
  249. package/src/components/stateful/SVGEditor/SVGAttributesEditor.tsx +73 -0
  250. package/src/components/stateful/SVGEditor/SVGEditorControls.tsx +45 -0
  251. package/src/components/stateful/SVGEditor/SVGElementForm.tsx +45 -0
  252. package/src/components/stateful/SVGEditor/SVGPreview.tsx +225 -0
  253. package/src/components/stateful/SVGEditor/SVGTextEditor.tsx +166 -0
  254. package/src/components/stateful/SVGEditor/SVGTree.tsx +159 -0
  255. package/src/components/stateful/SVGEditor/SVGTypes.ts +36 -0
  256. package/src/components/stateful/SVGEditor/svg.xsd.xml +3038 -0
  257. package/src/components/stateful/SVGEditorPage.tsx +503 -0
  258. package/src/components/stateful/SingleProcessPage.tsx +18 -31
  259. package/src/components/stateful/TestPage.tsx +25 -22
  260. package/src/golingvu/golingvu.go +38 -2
  261. package/src/hooks/useGitMode.ts +20 -0
  262. package/src/lib/BaseSuite.test/mock.ts +16 -10
  263. package/src/lib/BaseSuite.test/test.ts +144 -103
  264. package/src/lib/Tiposkripto.test/MockTiposkripto.ts +178 -14
  265. package/src/lib/Tiposkripto.test/Tiposkripto.adapter.ts +9 -14
  266. package/src/lib/Tiposkripto.test/Tiposkripto.implementation.ts +78 -38
  267. package/src/lib/Tiposkripto.test/Tiposkripto.specification.ts +51 -9
  268. package/src/lib/Tiposkripto.test/Tiposkripto.types.ts +5 -0
  269. package/src/lib/Tiposkripto.ts +27 -0
  270. package/src/lib/index.ts +7 -0
  271. package/src/lib/pmProxy.test/specification.ts +168 -166
  272. package/src/pitono/PM/__pycache__/python.cpython-313.pyc +0 -0
  273. package/src/pitono/__pycache__/Pitono.cpython-313.pyc +0 -0
  274. package/src/pitono/__pycache__/__init__.cpython-313.pyc +0 -0
  275. package/src/pitono/__pycache__/base_given.cpython-313.pyc +0 -0
  276. package/src/pitono/__pycache__/base_suite.cpython-313.pyc +0 -0
  277. package/src/pitono/__pycache__/base_then.cpython-313.pyc +0 -0
  278. package/src/pitono/__pycache__/base_when.cpython-313.pyc +0 -0
  279. package/src/pitono/__pycache__/core_generator.cpython-313.pyc +0 -0
  280. package/src/pitono/__pycache__/simple_adapter.cpython-313.pyc +0 -0
  281. package/src/pitono/__pycache__/types.cpython-313.pyc +0 -0
  282. package/src/services/FileService.ts +542 -0
  283. package/src/services/GitHubAuthService.ts +240 -0
  284. package/src/testeranto.ts +62 -140
  285. package/src/utils/api.ts +15 -13
  286. package/src/utils/gitTest.ts +29 -0
  287. package/src/utils.ts +21 -12
  288. package/testeranto/App.css +94 -121
  289. package/testeranto/App.js +44601 -11225
  290. package/testeranto/bundles/golang/core/Calculator.golingvu.go +53 -0
  291. package/testeranto/bundles/golang/core/Calculator.golingvu.golingvu.go +53 -0
  292. package/testeranto/bundles/node/core/chunk-RIM6RECA.mjs +1170 -0
  293. package/testeranto/bundles/node/core/chunk-VXVF7WFO.mjs +4321 -0
  294. package/testeranto/bundles/node/core/example/Calculator.test.mjs +503 -0
  295. package/testeranto/bundles/node/core/src/lib/BaseSuite.test/node.test.mjs +94 -1231
  296. package/testeranto/bundles/node/core/src/lib/TipoSkripto.test/TipoSkripto.mjs +574 -0
  297. package/testeranto/bundles/node/core/src/lib/pmProxy.test/index.mjs +482 -0
  298. package/testeranto/bundles/pure/core/chunk-XYOCRDEQ.mjs +1080 -0
  299. package/testeranto/bundles/pure/core/src/Pure.test.mjs +410 -0
  300. package/testeranto/bundles/pure/core/src/lib/BaseSuite.test/pure.test.mjs +93 -1146
  301. package/testeranto/bundles/python/core/Calculator.pitono.test.py +24 -0
  302. package/testeranto/bundles/python/core/test_example.py +24 -0
  303. package/testeranto/bundles/web/core/MPLUSRounded1c-Black-O75GP5JI.ttf +0 -0
  304. package/testeranto/bundles/web/core/MPLUSRounded1c-Bold-R524Q5BH.ttf +0 -0
  305. package/testeranto/bundles/web/core/MPLUSRounded1c-ExtraBold-C6GRMYVT.ttf +0 -0
  306. package/testeranto/bundles/web/core/MPLUSRounded1c-Light-WKN65Y2C.ttf +0 -0
  307. package/testeranto/bundles/web/core/MPLUSRounded1c-Medium-ZC4DWL7C.ttf +0 -0
  308. package/testeranto/bundles/web/core/MPLUSRounded1c-Regular-DT6EKZ3S.ttf +0 -0
  309. package/testeranto/bundles/web/core/MPLUSRounded1c-Thin-YWDNVG6M.ttf +0 -0
  310. package/testeranto/bundles/web/core/chunk-DFRN4SYZ.mjs +2297 -0
  311. package/testeranto/bundles/web/core/chunk-JMDLMADH.mjs +27996 -0
  312. package/testeranto/bundles/web/core/chunk-LQMU5NCG.mjs +3082 -0
  313. package/testeranto/bundles/web/core/chunk-Q5TONB2Z.mjs +6874 -0
  314. package/testeranto/bundles/web/core/src/components/pure/FeaturesReporterView.test/index.mjs +164 -0
  315. package/testeranto/bundles/web/core/src/components/pure/ModalContent.test/index.css +11697 -0
  316. package/testeranto/bundles/web/core/src/components/pure/ModalContent.test/index.mjs +336 -0
  317. package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.css +11697 -0
  318. package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.mjs +517 -0
  319. package/testeranto/bundles/web/core/src/lib/BaseSuite.test/web.test.mjs +107 -1134
  320. package/testeranto/metafiles/golang/core.json +3 -3
  321. package/testeranto/metafiles/node/core.json +474 -31
  322. package/testeranto/metafiles/pure/core.json +144 -28
  323. package/testeranto/metafiles/python/core.json +11 -0
  324. package/testeranto/metafiles/web/core.json +15829 -45
  325. package/testeranto/reports/core/config.json +40 -0
  326. package/testeranto/reports/core/src/Pure.test/pure/exit.log +0 -0
  327. package/testeranto/reports/core/src/Pure.test/pure/lint_errors.txt +0 -0
  328. package/testeranto/reports/core/src/Pure.test/pure/prompt.txt +14 -0
  329. package/testeranto/reports/core/src/Pure.test/pure/type_errors.txt +73 -0
  330. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/debug.log +0 -0
  331. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/error.log +91 -0
  332. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/exit.log +1 -0
  333. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/info.log +2 -0
  334. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/tests.json +68 -0
  335. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/warn.log +0 -0
  336. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/debug.log +0 -0
  337. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/error.log +30 -0
  338. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/exit.log +1 -0
  339. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/info.log +2 -0
  340. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/tests.json +88 -0
  341. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/warn.log +0 -0
  342. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/lint_errors.txt +0 -6
  343. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/prompt.txt +0 -11
  344. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/stdout.log +1 -0
  345. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/tests.json +1 -1
  346. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/type_errors.txt +35 -38
  347. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/lint_errors.txt +0 -2
  348. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/prompt.txt +0 -10
  349. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/type_errors.txt +40 -38
  350. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/tests.json +1 -1
  351. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/exit.log +1 -0
  352. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/lint_errors.txt +0 -0
  353. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/message.txt +17 -0
  354. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/prompt.txt +17 -0
  355. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/stderr.log +55 -0
  356. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/stdout.log +191 -0
  357. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/type_errors.txt +71 -0
  358. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/exit.log +1 -0
  359. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/lint_errors.txt +15 -0
  360. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/message.txt +17 -0
  361. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/prompt.txt +17 -0
  362. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stderr.log +20 -0
  363. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stdout.log +4 -0
  364. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/type_errors.txt +49 -0
  365. package/testeranto/reports/core/summary.json +34 -6
  366. package/testeranto.config.ts +26 -20
  367. package/tsc.log +141 -91
  368. package/tsconfig.json +6 -2
  369. package/dist/prebuild/ReportServer.mjs +0 -227
  370. package/dist/prebuild/mothership/index.mjs +0 -22
  371. package/dist/types/design-editor/server.d.ts +0 -1
  372. package/testeranto/bundles/web/core/src/lib/BaseSuite.test/web.test.html +0 -15
  373. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/lint_errors.txt +0 -2
  374. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/prompt.txt +0 -25
  375. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/type_errors.txt +0 -56
  376. /package/testeranto/reports/core/src/{lib/BaseSuite.test/web.test/web → Pure.test/pure}/message.txt +0 -0
@@ -2,6 +2,7 @@
2
2
  import React, { useState, useEffect, useRef } from "react";
3
3
  import { Container, Row, Col, Badge, Button, Alert } from "react-bootstrap";
4
4
  import { useNavigate } from "react-router-dom";
5
+ import { useWebSocket } from '../../App';
5
6
 
6
7
  export interface Process {
7
8
  processId: string;
@@ -31,20 +32,18 @@ export const ProcessManagerView: React.FC<ProcessManagerViewProps> = ({
31
32
  }) => {
32
33
  const navigate = useNavigate();
33
34
  const [selectedProcess, setSelectedProcess] = useState<Process | null>(null);
34
- const [ws, setWs] = useState<WebSocket | null>(null);
35
+ // Use the centralized WebSocket from App context
36
+ const { ws } = useWebSocket();
35
37
  const [processLogs, setProcessLogs] = useState<string[]>([]);
36
38
  const [autoScroll, setAutoScroll] = useState(true);
37
39
  const logsContainerRef = useRef<HTMLDivElement>(null);
38
40
  const [isNavbarCollapsed, setIsNavbarCollapsed] = useState(false);
39
41
 
40
- // Set up WebSocket connection
42
+ // Handle WebSocket messages for the selected process
41
43
  useEffect(() => {
42
- const wsProtocol = window.location.protocol === "https:" ? "wss:" : "ws:";
43
- const wsUrl = `${wsProtocol}//${window.location.host}`;
44
- const websocket = new WebSocket(wsUrl);
45
- setWs(websocket);
46
-
47
- websocket.onmessage = (event) => {
44
+ if (!ws) return;
45
+
46
+ const handleMessage = (event: MessageEvent) => {
48
47
  try {
49
48
  const data = JSON.parse(event.data);
50
49
  // Handle process data response
@@ -76,10 +75,12 @@ export const ProcessManagerView: React.FC<ProcessManagerViewProps> = ({
76
75
  }
77
76
  };
78
77
 
78
+ ws.addEventListener('message', handleMessage);
79
+
79
80
  return () => {
80
- websocket.close();
81
+ ws.removeEventListener('message', handleMessage);
81
82
  };
82
- }, [selectedProcess]);
83
+ }, [ws, selectedProcess]);
83
84
 
84
85
  // Request process data when selected
85
86
  useEffect(() => {
@@ -150,7 +151,7 @@ export const ProcessManagerView: React.FC<ProcessManagerViewProps> = ({
150
151
  <Row className="g-0" style={{ height: "calc(100vh - 56px)" }}>
151
152
  {/* Left Column - Process List (Compact) */}
152
153
  <Col
153
- sm={3}
154
+ sm={2}
154
155
  className="border-end"
155
156
  style={{
156
157
  height: "100%",
@@ -160,7 +161,7 @@ export const ProcessManagerView: React.FC<ProcessManagerViewProps> = ({
160
161
  >
161
162
 
162
163
  <div className="p-1">
163
- {processes.map((process) => (
164
+ {[...processes].reverse().map((process) => (
164
165
  <div
165
166
  key={process.processId}
166
167
  className={`p-2 mb-1 rounded ${selectedProcess?.processId === process.processId
@@ -217,56 +218,74 @@ export const ProcessManagerView: React.FC<ProcessManagerViewProps> = ({
217
218
  </div>
218
219
  </Col>
219
220
 
220
- {/* Middle Column - Selected process details */}
221
+ {/* Middle Column - Process Details (5 units) */}
221
222
  <Col
222
223
  sm={5}
223
- className="border-end p-3"
224
- style={{ height: "100%", overflow: "auto" }}
224
+ className="border-end p-3 d-flex flex-column"
225
+ style={{ height: "100%", overflow: "hidden" }}
225
226
  >
226
227
  {selectedProcess ? (
227
- <div>
228
- <div className="mb-3">
229
- <strong>Command:</strong>
230
- <code
231
- className="bg-light p-2 rounded d-block mt-1"
232
- style={{ fontSize: "0.8rem" }}
233
- >
234
- {selectedProcess.command}
235
- </code>
236
- </div>
237
-
238
- <div className="mb-2">
239
- <strong>Status:</strong>
240
- <div className="mt-1">{getStatusBadge(selectedProcess)}</div>
241
- </div>
242
-
243
- <div className="mb-2">
244
- <strong>PID:</strong>
245
- <div className="text-muted">{selectedProcess.pid || "N/A"}</div>
246
- </div>
247
-
248
- <div className="mb-2">
249
- <strong>Started:</strong>
228
+ <div className="flex-grow-1 d-flex flex-column">
229
+ {/* Horizontal controls row */}
230
+ <div className="d-flex align-items-center gap-2 mb-3 flex-wrap">
231
+ {/* Status */}
232
+ <div>{getStatusBadge(selectedProcess)}</div>
233
+
234
+ {/* PID */}
235
+ <div className="text-muted">
236
+ {selectedProcess.pid || "N/A"}
237
+ </div>
238
+
239
+ {/* Started time */}
250
240
  <div className="text-muted">
251
241
  {new Date(selectedProcess.timestamp).toLocaleString()}
252
242
  </div>
243
+
244
+ {/* Stop button */}
245
+ {selectedProcess.status === "running" && onKillProcess && (
246
+ <Button
247
+ variant="danger"
248
+ size="sm"
249
+ onClick={() => onKillProcess(selectedProcess.processId)}
250
+ className="flex-grow-0 ms-auto"
251
+ >
252
+ ⏹️ Stop
253
+ </Button>
254
+ )}
255
+
256
+ {/* Exit code if applicable */}
257
+ {selectedProcess.exitCode !== undefined && (
258
+ <div className="text-muted">
259
+ {selectedProcess.exitCode}
260
+ </div>
261
+ )}
253
262
  </div>
254
-
255
- {selectedProcess.exitCode !== undefined && (
256
- <div className="mb-2">
257
- <strong>Exit Code:</strong>
258
- <div className="text-muted">{selectedProcess.exitCode}</div>
259
- </div>
260
- )}
261
-
263
+
264
+ {/* Error message if present */}
262
265
  {selectedProcess.error && (
263
- <div className="mt-3">
264
- <strong className="text-danger">Error:</strong>
265
- <div className="text-danger small mt-1">
266
- {selectedProcess.error}
267
- </div>
268
- </div>
266
+ <Alert variant="danger" className="py-2 mb-3">
267
+ {selectedProcess.error}
268
+ </Alert>
269
269
  )}
270
+
271
+ {/* Command styled like terminal */}
272
+ <div>
273
+ <div className="mb-1 small text-muted">Command:</div>
274
+ <div
275
+ className="bg-dark text-light p-2 rounded"
276
+ style={{
277
+ fontFamily: 'Monaco, Menlo, "Ubuntu Mono", monospace',
278
+ fontSize: "14px",
279
+ lineHeight: "1.4",
280
+ overflow: "auto",
281
+ whiteSpace: "pre-wrap",
282
+ wordBreak: "break-word",
283
+ maxHeight: "200px" // Prevent it from expanding too much
284
+ }}
285
+ >
286
+ {selectedProcess.command}
287
+ </div>
288
+ </div>
270
289
  </div>
271
290
  ) : (
272
291
  <div className="text-center text-muted mt-5">
@@ -274,140 +293,117 @@ export const ProcessManagerView: React.FC<ProcessManagerViewProps> = ({
274
293
  </div>
275
294
  )}
276
295
  </Col>
277
-
278
- {/* Right Column - Live logs with input */}
296
+
297
+ {/* Right Column - Terminal (5 units) */}
279
298
  <Col
280
- sm={4}
281
- className="p-0"
299
+ sm={5}
300
+ className="p-3 d-flex flex-column"
282
301
  style={{ height: "100%", overflow: "hidden" }}
283
302
  >
284
303
  {selectedProcess ? (
285
- <div className="d-flex flex-column h-100">
286
- {/* <div className="d-flex justify-content-between align-items-center p-3 border-bottom bg-white">
287
-
288
- <small className="text-muted">
289
- {processLogs.length} lines
290
- </small>
291
- </div> */}
292
-
293
- {/* Scrollable log content */}
294
- <div
295
- ref={logsContainerRef}
296
- className="bg-dark text-light flex-grow-1"
297
- style={{
298
- overflowY: "auto",
299
- fontFamily: 'Monaco, Menlo, "Ubuntu Mono", monospace',
300
- fontSize: "14px",
301
- lineHeight: "1.4",
302
- // padding: '1rem'
303
- }}
304
- onScroll={handleLogsScroll}
305
- >
306
- {processLogs.length > 0 ? (
307
- <pre
308
- className="mb-0"
309
- style={{
310
- whiteSpace: "pre-wrap",
311
- wordBreak: "break-word",
312
- backgroundColor: "transparent",
313
- border: "none",
314
- color: "inherit",
315
- }}
316
- >
317
- {processLogs.join("")}
318
- </pre>
319
- ) : (
320
- <div className="text-muted text-center py-4">
321
- <i>No output yet</i>
322
- </div>
323
- )}
324
- {/* Auto-scroll indicator */}
325
- {!autoScroll && (
326
- <div className="position-sticky bottom-0 d-flex justify-content-center mb-2">
327
- <Button
328
- variant="primary"
329
- size="sm"
330
- onClick={() => {
331
- setAutoScroll(true);
332
- if (logsContainerRef.current) {
333
- logsContainerRef.current.scrollTop =
334
- logsContainerRef.current.scrollHeight;
335
- }
336
- }}
337
- >
338
- Scroll to Bottom
339
- </Button>
340
- </div>
341
- )}
342
- </div>
343
-
344
- {/* Input area and stop button for running processes */}
345
- {selectedProcess.status === "running" && (
304
+ <>
305
+ {/* Terminal area - fills space and scrolls internally */}
306
+ <div className="flex-grow-1 d-flex flex-column" style={{ minHeight: 0 }}>
307
+ {/* Scrollable terminal content */}
346
308
  <div
347
- className="border-top bg-white p-3"
348
- style={{ flexShrink: 0 }}
309
+ ref={logsContainerRef}
310
+ className="bg-dark text-light flex-grow-1"
311
+ style={{
312
+ overflowY: "auto",
313
+ fontFamily: 'Monaco, Menlo, "Ubuntu Mono", monospace',
314
+ fontSize: "14px",
315
+ lineHeight: "1.4",
316
+ padding: "0.5rem"
317
+ }}
318
+ onScroll={handleLogsScroll}
349
319
  >
350
- {/* Stop button */}
351
- {onKillProcess && (
352
- <div className="mb-3">
320
+ {processLogs.length > 0 ? (
321
+ <pre
322
+ className="mb-0"
323
+ style={{
324
+ whiteSpace: "pre-wrap",
325
+ wordBreak: "break-word",
326
+ backgroundColor: "transparent",
327
+ border: "none",
328
+ color: "inherit",
329
+ }}
330
+ >
331
+ {processLogs.join("")}
332
+ </pre>
333
+ ) : (
334
+ <div className="text-muted text-center py-4">
335
+ <i>No output yet</i>
336
+ </div>
337
+ )}
338
+ {/* Auto-scroll indicator */}
339
+ {!autoScroll && (
340
+ <div className="position-sticky bottom-0 d-flex justify-content-center mb-2">
353
341
  <Button
354
- variant="danger"
342
+ variant="primary"
355
343
  size="sm"
356
- onClick={() => onKillProcess(selectedProcess.processId)}
357
- className="w-100"
344
+ onClick={() => {
345
+ setAutoScroll(true);
346
+ if (logsContainerRef.current) {
347
+ logsContainerRef.current.scrollTop =
348
+ logsContainerRef.current.scrollHeight;
349
+ }
350
+ }}
358
351
  >
359
- ⏹️ Stop Process
352
+ Scroll to Bottom
360
353
  </Button>
361
354
  </div>
362
355
  )}
363
-
364
- {/* Input area */}
365
- <div className="input-group">
366
- <input
367
- type="text"
368
- className="form-control"
369
- placeholder="Type input and press Enter..."
370
- onKeyPress={(e) => {
371
- if (e.key === "Enter") {
372
- const target = e.target as HTMLInputElement;
373
- const inputValue = target.value;
356
+ </div>
357
+
358
+ {/* Input area - fixed at the bottom */}
359
+ {selectedProcess.status === "running" && (
360
+ <div className="border-top bg-white p-2 mt-2" style={{ flexShrink: 0 }}>
361
+ <div className="input-group">
362
+ <input
363
+ type="text"
364
+ className="form-control"
365
+ placeholder="Type input and press Enter..."
366
+ onKeyPress={(e) => {
367
+ if (e.key === "Enter") {
368
+ const target = e.target as HTMLInputElement;
369
+ const inputValue = target.value;
370
+ if (inputValue.trim()) {
371
+ handleInput(inputValue + "\n");
372
+ target.value = "";
373
+ }
374
+ }
375
+ }}
376
+ autoFocus
377
+ />
378
+ <button
379
+ className="btn btn-primary"
380
+ type="button"
381
+ onClick={() => {
382
+ const input = document.querySelector(
383
+ "input"
384
+ ) as HTMLInputElement;
385
+ const inputValue = input.value;
374
386
  if (inputValue.trim()) {
375
387
  handleInput(inputValue + "\n");
376
- target.value = "";
388
+ input.value = "";
377
389
  }
378
- }
379
- }}
380
- autoFocus
381
- />
382
- <button
383
- className="btn btn-primary"
384
- type="button"
385
- onClick={() => {
386
- const input = document.querySelector(
387
- "input"
388
- ) as HTMLInputElement;
389
- const inputValue = input.value;
390
- if (inputValue.trim()) {
391
- handleInput(inputValue + "\n");
392
- input.value = "";
393
- }
394
- }}
395
- >
396
- Send
397
- </button>
390
+ }}
391
+ >
392
+ Send
393
+ </button>
394
+ </div>
398
395
  </div>
399
- <small className="text-muted">
400
- 💡 Press Enter to send input to the process
401
- </small>
402
- </div>
403
- )}
404
- </div>
396
+ )}
397
+ </div>
398
+ </>
405
399
  ) : (
406
- <div className="p-3 text-center text-muted mt-5">
407
- <i>Live logs will appear here when a process is selected</i>
400
+ <div className="text-center text-muted mt-5">
401
+ <i>Terminal will appear here when a process is selected</i>
408
402
  </div>
409
403
  )}
410
404
  </Col>
405
+
406
+
411
407
  </Row>
412
408
  </Container>
413
409
  );
@@ -1,188 +1,13 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import React from 'react';
3
- import { Tab, Container, Alert, Table, Badge, Nav, Card, ListGroup, Col, Row } from 'react-bootstrap';
4
-
5
- import { TestStatusBadge } from '../TestStatusBadge';
3
+ import { Container, Alert, Badge, Nav, Col, Row } from 'react-bootstrap';
6
4
 
5
+ import { TestTable } from './TestTable';
6
+ import { BuildLogViewer } from './BuildLogViewer';
7
7
  import { NavBar } from './NavBar';
8
8
 
9
9
  import "./../../App.scss";
10
10
 
11
- const BuildLogViewer = ({ logs, runtime }: { logs: any, runtime: string }) => {
12
- if (!logs) return <Alert variant="info">Loading {runtime.toLowerCase()} build logs...</Alert>;
13
-
14
- const hasErrors = logs.errors?.length > 0;
15
- const hasWarnings = logs.warnings?.length > 0;
16
- const [activeTab, setActiveTab] = React.useState('summary');
17
-
18
- return (
19
- <div>
20
- <Tab.Container activeKey={activeTab} onSelect={(k) => setActiveTab(k || 'summary')}>
21
- <Nav variant="tabs" className="mb-3">
22
- <Nav.Item>
23
- <Nav.Link eventKey="summary">Build Summary</Nav.Link>
24
- </Nav.Item>
25
- <Nav.Item>
26
- <Nav.Link eventKey="warnings">
27
- {hasWarnings ? `⚠️ Warnings (${logs.warnings.length})` : 'Warnings'}
28
- </Nav.Link>
29
- </Nav.Item>
30
- <Nav.Item>
31
- <Nav.Link eventKey="errors">
32
- {hasErrors ? `❌ Errors (${logs.errors.length})` : 'Errors'}
33
- </Nav.Link>
34
- </Nav.Item>
35
- </Nav>
36
-
37
- <Tab.Content>
38
- <Tab.Pane eventKey="summary">
39
- <Card>
40
- <Card.Header className="d-flex justify-content-between align-items-center">
41
- <h5>Build Summary</h5>
42
- <div>
43
- {hasErrors && (
44
- <Badge bg="danger" className="me-2">
45
- {logs.errors.length} Error{logs.errors.length !== 1 ? 's' : ''}
46
- </Badge>
47
- )}
48
- {hasWarnings && (
49
- <Badge bg="warning" text="dark">
50
- {logs.warnings.length} Warning{logs.warnings.length !== 1 ? 's' : ''}
51
- </Badge>
52
- )}
53
- {!hasErrors && !hasWarnings && (
54
- <Badge bg="success">Build Successful</Badge>
55
- )}
56
- </div>
57
- </Card.Header>
58
- <Card.Body>
59
- <div className="mb-3">
60
- <h6>Input Files ({Object.keys(logs.metafile?.inputs || {}).length})</h6>
61
- <ListGroup className="max-h-200 overflow-auto">
62
- {Object.keys(logs.metafile?.inputs || {}).map((file) => (
63
- <ListGroup.Item key={file} className="py-2">
64
- <code>{file}</code>
65
- <div className="text-muted small">
66
- {logs.metafile.inputs[file].bytes} bytes
67
- </div>
68
- </ListGroup.Item>
69
- ))}
70
- </ListGroup>
71
- </div>
72
- <div>
73
- <h6>Output Files ({Object.keys(logs.metafile?.outputs || {}).length})</h6>
74
- <ListGroup className="max-h-200 overflow-auto">
75
- {Object.keys(logs.metafile?.outputs || {}).map((file) => (
76
- <ListGroup.Item key={file} className="py-2">
77
- <code>{file}</code>
78
- <div className="text-muted small">
79
- {logs.metafile.outputs[file].bytes} bytes
80
- {logs.metafile.outputs[file].entryPoint && (
81
- <span className="ms-2 badge bg-info">Entry Point</span>
82
- )}
83
- </div>
84
- </ListGroup.Item>
85
- ))}
86
- </ListGroup>
87
- </div>
88
- </Card.Body>
89
- </Card>
90
- </Tab.Pane>
91
- <Tab.Pane eventKey="warnings">
92
- {hasWarnings ? (
93
- <Card className="border-warning">
94
- <Card.Header className="bg-warning text-white d-flex justify-content-between align-items-center">
95
- <span>Build Warnings ({logs.warnings.length})</span>
96
- <Badge bg="light" text="dark">
97
- {new Date().toLocaleString()}
98
- </Badge>
99
- </Card.Header>
100
- <Card.Body className="p-0">
101
- <ListGroup variant="flush">
102
- {logs.warnings.map((warn: any, i: number) => (
103
- <ListGroup.Item key={i} className="text-warning">
104
- <div className="d-flex justify-content-between">
105
- <strong>
106
- {warn.location?.file || 'Unknown file'}
107
- {warn.location?.line && `:${warn.location.line}`}
108
- </strong>
109
- <small className="text-muted">
110
- {warn.pluginName ? `[${warn.pluginName}]` : ''}
111
- </small>
112
- </div>
113
- <div className="mt-1">
114
- <pre className="mb-0 p-2 bg-light rounded">
115
- {JSON.stringify(warn)}
116
- </pre>
117
- </div>
118
- {/* {warn.detail && (
119
- <div className="mt-1 small text-muted">
120
- <pre className="mb-0 p-2 bg-light rounded">
121
- {warn.detail}
122
- </pre>
123
- </div>
124
- )} */}
125
- </ListGroup.Item>
126
- ))}
127
- </ListGroup>
128
- </Card.Body>
129
- </Card>
130
- ) : (
131
- <Alert variant="info">No warnings found</Alert>
132
- )}
133
- </Tab.Pane>
134
- <Tab.Pane eventKey="errors">
135
- {hasErrors ? (
136
- <Card className="border-danger">
137
- <Card.Header className="bg-danger text-white d-flex justify-content-between align-items-center">
138
- <span>Build Errors ({logs.errors.length})</span>
139
- <Badge bg="light" text="dark">
140
- {new Date().toLocaleString()}
141
- </Badge>
142
- </Card.Header>
143
- <Card.Body className="p-0">
144
- <ListGroup variant="flush">
145
- {logs.errors.map((err: any, i: number) => (
146
- <ListGroup.Item key={i} className="text-danger">
147
- <div className="d-flex justify-content-between">
148
- <strong>
149
- {err.location?.file || 'Unknown file'}
150
- {err.location?.line && `:${err.location.line}`}
151
- </strong>
152
- <small className="text-muted">
153
- {err.pluginName ? `[${err.pluginName}]` : ''}
154
- </small>
155
- </div>
156
- <div className="mt-1">
157
- <pre className="mb-0 p-2 bg-light rounded">
158
- {/* {err.text || err.message || JSON.stringify(err)} */}
159
- {JSON.stringify(err)}
160
- </pre>
161
- </div>
162
- {/* {err.detail && (
163
- <div className="mt-1 small text-muted">
164
- <pre className="mb-0 p-2 bg-light rounded">
165
- {err.detail}
166
- </pre>
167
- </div>
168
- )} */}
169
- </ListGroup.Item>
170
- ))}
171
- </ListGroup>
172
- </Card.Body>
173
- </Card>
174
- ) : (
175
- <Alert variant="success">
176
- <h5>No Errors Found</h5>
177
- <p className="mb-0">The build completed without any errors.</p>
178
- </Alert>
179
- )}
180
- </Tab.Pane>
181
- </Tab.Content>
182
- </Tab.Container>
183
- </div>
184
- );
185
- };
186
11
 
187
12
  export type IProjectPageViewProps = {
188
13
  summary: any;
@@ -218,6 +43,7 @@ export const ProjectPageView = ({
218
43
  runTimeErrors: number;
219
44
  typeErrors: number;
220
45
  staticErrors: number;
46
+ runTimeTests: number;
221
47
  }]) => {
222
48
  const runTime = config.tests?.find((t: [string, string]) => t[0] === testName)?.[1] || 'node';
223
49
  return {
@@ -226,6 +52,7 @@ export const ProjectPageView = ({
226
52
  runTimeErrors: Number(testData.runTimeErrors) || 0,
227
53
  typeErrors: Number(testData.typeErrors) || 0,
228
54
  staticErrors: Number(testData.staticErrors) || 0,
55
+ runTimeTests: Number(testData.runTimeTests) || 0,
229
56
  runTime
230
57
  };
231
58
  });
@@ -305,52 +132,7 @@ export const ProjectPageView = ({
305
132
  <Col sm={9}>
306
133
  <div className="p-3">
307
134
  {activeTab === 'tests' ? (
308
- <Table striped bordered hover>
309
- <thead>
310
- <tr>
311
- <th>Test</th>
312
- <th>Runtime</th>
313
- <th>Status</th>
314
- <th>Type Errors</th>
315
- <th>Lint Errors</th>
316
- </tr>
317
- </thead>
318
- <tbody>
319
- {testStatuses.map((test) => (
320
- <tr key={test.testName} data-testid={`test-row-${test.testName}`}>
321
- <td>
322
- <a href={`#/projects/${projectName}/tests/${encodeURIComponent(test.testName)}/${test.runTime}`}>
323
- {test.testName}
324
- </a>
325
- </td>
326
- <td>
327
- <Badge bg="secondary" className="ms-2">
328
- {test.runTime}
329
- </Badge>
330
- </td>
331
- <td>
332
- <TestStatusBadge
333
- testName={test.testName}
334
- testsExist={test.testsExist}
335
- runTimeErrors={test.runTimeErrors}
336
- typeErrors={test.typeErrors}
337
- staticErrors={test.staticErrors}
338
- />
339
- </td>
340
- <td>
341
- <a href={`#/projects/${projectName}/tests/${encodeURIComponent(test.testName)}/${test.runTime}#types`}>
342
- {test.typeErrors > 0 ? `❌ ${test.typeErrors}` : '✅'}
343
- </a>
344
- </td>
345
- <td>
346
- <a href={`#/projects/${projectName}/tests/${encodeURIComponent(test.testName)}/${test.runTime}#lint`}>
347
- {test.staticErrors > 0 ? `❌ ${test.staticErrors}` : '✅'}
348
- </a>
349
- </td>
350
- </tr>
351
- ))}
352
- </tbody>
353
- </Table>
135
+ <TestTable testStatuses={testStatuses} projectName={projectName} />
354
136
  ) : activeTab === 'node' ? (
355
137
  <BuildLogViewer logs={nodeLogs} runtime="Node" />
356
138
  ) : activeTab === 'web' ? (