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
@@ -0,0 +1,503 @@
1
+ import React, { useState, useCallback } from "react";
2
+ import {
3
+ Container,
4
+ Row,
5
+ Col,
6
+ Card,
7
+ Form,
8
+ Button,
9
+ ButtonGroup,
10
+ } from "react-bootstrap";
11
+ import { SVGTree } from "./SVGEditor/SVGTree";
12
+ import { SVGPreview } from "./SVGEditor/SVGPreview";
13
+ import { SVGAttributesEditor } from "./SVGEditor/SVGAttributesEditor";
14
+ import { SVGTextEditor } from "./SVGEditor/SVGTextEditor";
15
+ import { SVGElementForm } from "./SVGEditor/SVGElementForm";
16
+
17
+ export interface SVGNode {
18
+ id: string;
19
+ type: string;
20
+ attributes: Record<string, string>;
21
+ children: SVGNode[];
22
+ }
23
+
24
+ export const SVGEditorPage = () => {
25
+ const initialTree: SVGNode = {
26
+ id: "root",
27
+ type: "svg",
28
+ attributes: {
29
+ width: "400",
30
+ height: "400",
31
+ viewBox: "0 0 400 400",
32
+ xmlns: "http://www.w3.org/2000/svg",
33
+ },
34
+ children: [],
35
+ };
36
+
37
+ const [svgTree, setSvgTree] = useState<SVGNode>(initialTree);
38
+ const [selectedNodeId, setSelectedNodeId] = useState<string | null>(null);
39
+ const [activeTab, setActiveTab] = useState<string>("preview");
40
+ const [history, setHistory] = useState<SVGNode[]>([initialTree]);
41
+ const [historyIndex, setHistoryIndex] = useState<number>(0);
42
+ const [editMode, setEditMode] = useState<
43
+ "none" | "move" | "scale" | "rotate"
44
+ >("none");
45
+ const [showGrid, setShowGrid] = useState<boolean>(false);
46
+ const [snapToGrid, setSnapToGrid] = useState<boolean>(false);
47
+ const [hiddenNodes, setHiddenNodes] = useState<Set<string>>(new Set());
48
+ const [dragInfo, setDragInfo] = useState<{
49
+ isDragging: boolean;
50
+ nodeId: string | null;
51
+ }>({
52
+ isDragging: false,
53
+ nodeId: null,
54
+ });
55
+
56
+ // Find a node by ID
57
+ const findNode = useCallback((node: SVGNode, id: string): SVGNode | null => {
58
+ if (node.id === id) return node;
59
+ for (const child of node.children) {
60
+ const found = findNode(child, id);
61
+ if (found) return found;
62
+ }
63
+ return null;
64
+ }, []);
65
+
66
+ // Helper to update tree and manage history
67
+ const updateTree = useCallback(
68
+ (newTree: SVGNode) => {
69
+ setSvgTree(newTree);
70
+ // Add to history, truncating future history if we're not at the end
71
+ setHistory((prevHistory) => {
72
+ const newHistory = prevHistory.slice(0, historyIndex + 1);
73
+ newHistory.push(newTree);
74
+ return newHistory;
75
+ });
76
+ setHistoryIndex((prevIndex) => prevIndex + 1);
77
+ },
78
+ [historyIndex]
79
+ );
80
+
81
+ // Update node attributes
82
+ const updateNodeAttributes = useCallback(
83
+ (nodeId: string, attributes: Record<string, string>) => {
84
+ setSvgTree((prevTree) => {
85
+ const newTree = JSON.parse(JSON.stringify(prevTree));
86
+ const node = findNode(newTree, nodeId);
87
+ if (node) {
88
+ node.attributes = { ...node.attributes, ...attributes };
89
+ }
90
+ updateTree(newTree);
91
+ return newTree;
92
+ });
93
+ },
94
+ [findNode, updateTree]
95
+ );
96
+
97
+ // Update node text content
98
+ const updateNodeTextContent = useCallback(
99
+ (nodeId: string, textContent: string) => {
100
+ setSvgTree((prevTree) => {
101
+ const newTree = JSON.parse(JSON.stringify(prevTree));
102
+ const node = findNode(newTree, nodeId);
103
+ if (node) {
104
+ // For text and tspan nodes, we need to handle text content
105
+ // This is a simplified approach - in a real implementation, you'd track text content separately
106
+ // For now, we'll add a special attribute to track the text content
107
+ node.attributes['data-text-content'] = textContent;
108
+ }
109
+ updateTree(newTree);
110
+ return newTree;
111
+ });
112
+ },
113
+ [findNode, updateTree]
114
+ );
115
+
116
+ // Toggle node visibility
117
+ const toggleNodeVisibility = useCallback((nodeId: string) => {
118
+ setHiddenNodes((prev) => {
119
+ const newHidden = new Set(prev);
120
+ if (newHidden.has(nodeId)) {
121
+ newHidden.delete(nodeId);
122
+ } else {
123
+ newHidden.add(nodeId);
124
+ }
125
+ return newHidden;
126
+ });
127
+ }, []);
128
+
129
+ // Handle drag start
130
+ const handleDragStart = useCallback((nodeId: string) => {
131
+ setDragInfo({ isDragging: true, nodeId });
132
+ }, []);
133
+
134
+ // Handle drag end
135
+ const handleDragEnd = useCallback(() => {
136
+ setDragInfo({ isDragging: false, nodeId: null });
137
+ }, []);
138
+
139
+ // Move a node
140
+ const moveNode = useCallback(
141
+ (nodeId: string, newParentId: string | null, index: number) => {
142
+ setSvgTree((prevTree) => {
143
+ const newTree = JSON.parse(JSON.stringify(prevTree));
144
+
145
+ // Find the node to move and its original parent
146
+ let nodeToMove: SVGNode | null = null;
147
+ let oldParent: SVGNode | null = null;
148
+
149
+ const findNodeAndParent = (
150
+ current: SVGNode,
151
+ parent: SVGNode | null = null
152
+ ): boolean => {
153
+ if (current.id === nodeId) {
154
+ nodeToMove = current;
155
+ oldParent = parent;
156
+ return true;
157
+ }
158
+ for (const child of current.children) {
159
+ if (findNodeAndParent(child, current)) return true;
160
+ }
161
+ return false;
162
+ };
163
+
164
+ findNodeAndParent(newTree);
165
+
166
+ if (!nodeToMove || !oldParent) return prevTree;
167
+
168
+ // Remove from old parent
169
+ oldParent.children = oldParent.children.filter(
170
+ (child) => child.id !== nodeId
171
+ );
172
+
173
+ // Find new parent
174
+ let targetParent: SVGNode | null = null;
175
+ if (newParentId === null) {
176
+ targetParent = newTree;
177
+ } else {
178
+ const findParent = (current: SVGNode): SVGNode | null => {
179
+ if (current.id === newParentId) return current;
180
+ for (const child of current.children) {
181
+ const found = findParent(child);
182
+ if (found) return found;
183
+ }
184
+ return null;
185
+ };
186
+ targetParent = findParent(newTree);
187
+ }
188
+
189
+ if (!targetParent) return prevTree;
190
+
191
+ // Insert at specified index
192
+ targetParent.children.splice(index, 0, nodeToMove);
193
+
194
+ updateTree(newTree);
195
+ return newTree;
196
+ });
197
+ },
198
+ [updateTree]
199
+ );
200
+
201
+ // Add a new child node
202
+ const addChildNode = useCallback(
203
+ (parentId: string, nodeType: string) => {
204
+ setSvgTree((prevTree) => {
205
+ const newTree = JSON.parse(JSON.stringify(prevTree));
206
+ const parent = findNode(newTree, parentId);
207
+ if (parent) {
208
+ // Default attributes based on node type to make them visible
209
+ let defaultAttributes: Record<string, string> = {};
210
+ switch (nodeType) {
211
+ case "rect":
212
+ defaultAttributes = {
213
+ x: "50",
214
+ y: "50",
215
+ width: "100",
216
+ height: "100",
217
+ fill: "blue",
218
+ stroke: "black",
219
+ "stroke-width": "2",
220
+ };
221
+ break;
222
+ case "circle":
223
+ defaultAttributes = {
224
+ cx: "100",
225
+ cy: "100",
226
+ r: "50",
227
+ fill: "red",
228
+ stroke: "black",
229
+ "stroke-width": "2",
230
+ };
231
+ break;
232
+ case "path":
233
+ defaultAttributes = {
234
+ d: "M50 50 L150 150",
235
+ stroke: "green",
236
+ "stroke-width": "3",
237
+ fill: "none",
238
+ };
239
+ break;
240
+ case "text":
241
+ defaultAttributes = {
242
+ x: "50",
243
+ y: "50",
244
+ fill: "black",
245
+ "font-size": "16",
246
+ };
247
+ break;
248
+ case "g":
249
+ defaultAttributes = {
250
+ transform: "translate(0,0)",
251
+ };
252
+ break;
253
+ default:
254
+ defaultAttributes = {};
255
+ }
256
+
257
+ const newNode: SVGNode = {
258
+ id: `${nodeType}-${Date.now()}`,
259
+ type: nodeType,
260
+ attributes: defaultAttributes,
261
+ children: [],
262
+ };
263
+ parent.children = [...parent.children, newNode];
264
+ setSelectedNodeId(newNode.id);
265
+ updateTree(newTree);
266
+ }
267
+ return newTree;
268
+ });
269
+ },
270
+ [findNode, updateTree]
271
+ );
272
+
273
+ // Remove a node
274
+ const removeNode = useCallback(
275
+ (nodeId: string) => {
276
+ setSvgTree((prevTree) => {
277
+ const newTree = JSON.parse(JSON.stringify(prevTree));
278
+
279
+ // Function to remove node from its parent's children
280
+ const removeFromParent = (node: SVGNode, targetId: string): boolean => {
281
+ for (let i = 0; i < node.children.length; i++) {
282
+ if (node.children[i].id === targetId) {
283
+ node.children.splice(i, 1);
284
+ return true;
285
+ }
286
+ if (removeFromParent(node.children[i], targetId)) {
287
+ return true;
288
+ }
289
+ }
290
+ return false;
291
+ };
292
+
293
+ removeFromParent(newTree, nodeId);
294
+ if (selectedNodeId === nodeId) {
295
+ setSelectedNodeId(null);
296
+ }
297
+ updateTree(newTree);
298
+ return newTree;
299
+ });
300
+ },
301
+ [selectedNodeId, updateTree]
302
+ );
303
+
304
+ // Undo/Redo handlers
305
+ const handleUndo = useCallback(() => {
306
+ if (historyIndex > 0) {
307
+ setHistoryIndex((prevIndex) => prevIndex - 1);
308
+ setSvgTree(history[historyIndex - 1]);
309
+ }
310
+ }, [history, historyIndex]);
311
+
312
+ const handleRedo = useCallback(() => {
313
+ if (historyIndex < history.length - 1) {
314
+ setHistoryIndex((prevIndex) => prevIndex + 1);
315
+ setSvgTree(history[historyIndex + 1]);
316
+ }
317
+ }, [history, historyIndex]);
318
+
319
+ // Move handler - for now, just log to console
320
+ const handleMove = useCallback(() => {
321
+ console.log("Move functionality to be implemented");
322
+ // This would typically involve setting up a mode where nodes can be dragged
323
+ }, []);
324
+
325
+ // Helper variables for edit modes
326
+ const isMoveMode = editMode === "move";
327
+ const isScaleMode = editMode === "scale";
328
+ const isRotateMode = editMode === "rotate";
329
+
330
+ const selectedNode = selectedNodeId
331
+ ? findNode(svgTree, selectedNodeId)
332
+ : null;
333
+
334
+ return (
335
+ <Container fluid className="h-100">
336
+ <Row className="h-100">
337
+ {/* Tree View */}
338
+ <Col md={3} className="border-end p-3">
339
+ <ul style={{ paddingLeft: '0', marginBottom: '0' }}>
340
+ <SVGTree
341
+ node={svgTree}
342
+ selectedNodeId={selectedNodeId}
343
+ onSelectNode={setSelectedNodeId}
344
+ onAddNode={addChildNode}
345
+ onRemoveNode={removeNode}
346
+ onToggleVisibility={toggleNodeVisibility}
347
+ onMoveNode={moveNode}
348
+ hiddenNodes={hiddenNodes}
349
+ dragInfo={dragInfo}
350
+ onDragStart={handleDragStart}
351
+ onDragEnd={handleDragEnd}
352
+ />
353
+ </ul>
354
+ </Col>
355
+
356
+ {/* Preview/Text Editor Area */}
357
+ <Col md={6} className="border-end p-3">
358
+ <div className="d-flex justify-content-between align-items-center mb-3">
359
+ {/* <h5 className="mb-0">Editor</h5> */}
360
+ <ButtonGroup size="sm">
361
+ <Button
362
+ variant={
363
+ activeTab === "preview" ? "primary" : "outline-secondary"
364
+ }
365
+ onClick={() => setActiveTab("preview")}
366
+ >
367
+ Render Mode
368
+ </Button>
369
+ <Button
370
+ variant={activeTab === "text" ? "primary" : "outline-secondary"}
371
+ onClick={() => setActiveTab("text")}
372
+ >
373
+ Text Mode
374
+ </Button>
375
+ </ButtonGroup>
376
+ </div>
377
+ {/* Controls */}
378
+
379
+ {activeTab === "preview" ? (
380
+ <>
381
+ <div className="d-flex flex-wrap mb-3 gap-2 align-items-center">
382
+ <ButtonGroup size="sm">
383
+ <Button
384
+ variant="outline-secondary"
385
+ onClick={handleUndo}
386
+ disabled={historyIndex === 0}
387
+ >
388
+ Undo
389
+ </Button>
390
+ <Button
391
+ variant="outline-secondary"
392
+ onClick={handleRedo}
393
+ disabled={historyIndex === history.length - 1}
394
+ >
395
+ Redo
396
+ </Button>
397
+ </ButtonGroup>
398
+ <ButtonGroup size="sm">
399
+ <Button
400
+ variant={isMoveMode ? "primary" : "outline-primary"}
401
+ onClick={() => setEditMode(isMoveMode ? "none" : "move")}
402
+ >
403
+ Move
404
+ </Button>
405
+ <Button
406
+ variant={isScaleMode ? "info" : "outline-info"}
407
+ onClick={() => setEditMode(isScaleMode ? "none" : "scale")}
408
+ >
409
+ Scale
410
+ </Button>
411
+ <Button
412
+ variant={isRotateMode ? "info" : "outline-info"}
413
+ onClick={() =>
414
+ setEditMode(isRotateMode ? "none" : "rotate")
415
+ }
416
+ >
417
+ Rotate
418
+ </Button>
419
+ </ButtonGroup>
420
+ <ButtonGroup size="sm">
421
+ <Form.Check
422
+ type="switch"
423
+ id="grid-toggle"
424
+ label="Grid"
425
+ checked={showGrid}
426
+ onChange={(e) => setShowGrid(e.target.checked)}
427
+ />
428
+ </ButtonGroup>
429
+ <ButtonGroup size="sm">
430
+ <Form.Check
431
+ type="switch"
432
+ id="snap-toggle"
433
+ label="Snap"
434
+ checked={snapToGrid}
435
+ onChange={(e) => setSnapToGrid(e.target.checked)}
436
+ disabled={!showGrid}
437
+ />
438
+ </ButtonGroup>
439
+ </div>
440
+
441
+ <SVGPreview
442
+ svgTree={svgTree}
443
+ editMode={editMode}
444
+ showGrid={showGrid}
445
+ selectedNodeId={selectedNodeId}
446
+ onNodeInteraction={(nodeId, updates) => {
447
+ // Update the node attributes based on the interaction
448
+ updateNodeAttributes(nodeId, updates);
449
+ }}
450
+ hiddenNodes={hiddenNodes}
451
+ />
452
+ </>
453
+ ) : (
454
+ <SVGTextEditor svgTree={svgTree} onUpdateTree={setSvgTree} />
455
+ )}
456
+ </Col>
457
+
458
+ {/* Editor Controls and Attributes */}
459
+ <Col md={3} className="p-3">
460
+ {selectedNode ? (
461
+ <>
462
+ <Card className="mb-3">
463
+ <Card.Header>
464
+ <strong>Node: {selectedNode.type}</strong>
465
+ </Card.Header>
466
+ <Card.Body>
467
+ {/* Use SVGElementForm for supported types, fallback to SVGAttributesEditor */}
468
+ {["circle", "rect", "g"].includes(selectedNode.type) ? (
469
+ <SVGElementForm
470
+ elementType={selectedNode.type as "circle" | "rect" | "g"}
471
+ attributes={selectedNode.attributes}
472
+ onChange={(attrs) =>
473
+ updateNodeAttributes(selectedNode.id, attrs)
474
+ }
475
+ />
476
+ ) : (
477
+ <SVGAttributesEditor
478
+ node={selectedNode}
479
+ onUpdateAttributes={(attrs) =>
480
+ updateNodeAttributes(selectedNode.id, attrs)
481
+ }
482
+ onUpdateTextContent={(text) =>
483
+ updateNodeTextContent(selectedNode.id, text)
484
+ }
485
+ />
486
+ )}
487
+ </Card.Body>
488
+ </Card>
489
+ </>
490
+ ) : (
491
+ <Card>
492
+ <Card.Body>
493
+ <p className="text-muted">
494
+ Select a node to edit its properties
495
+ </p>
496
+ </Card.Body>
497
+ </Card>
498
+ )}
499
+ </Col>
500
+ </Row>
501
+ </Container>
502
+ );
503
+ };
@@ -1,22 +1,19 @@
1
1
  import React, { useState, useEffect, useCallback } from "react";
2
-
3
2
  import { useNavigate, useParams } from "react-router-dom";
4
3
  import { SingleProcessView } from "../pure/SingleProcessView";
5
4
  import { Process } from "../pure/ProcessManagerView";
5
+ import { useWebSocket } from '../../App';
6
6
 
7
7
  export const SingleProcessPage: React.FC = () => {
8
8
  const [process, setProcess] = useState<Process | null>(null);
9
- const [ws, setWs] = useState<WebSocket | null>(null);
9
+ const ws = useWebSocket();
10
10
  const [loading, setLoading] = useState(true);
11
11
  const navigate = useNavigate();
12
12
  const { processId } = useParams<{ processId: string }>();
13
13
 
14
- // Connect to WebSocket
14
+ // Handle WebSocket messages
15
15
  useEffect(() => {
16
- const wsProtocol = window.location.protocol === "https:" ? "wss:" : "ws:";
17
- const wsUrl = `${wsProtocol}//${window.location.host}`;
18
- const websocket = new WebSocket(wsUrl);
19
- setWs(websocket);
16
+ if (!ws) return;
20
17
 
21
18
  // Set a timeout to handle cases where we don't get a response
22
19
  const timeoutId = setTimeout(() => {
@@ -27,26 +24,6 @@ export const SingleProcessPage: React.FC = () => {
27
24
  }
28
25
  }, 3000);
29
26
 
30
- // Request specific process when connected
31
- websocket.onopen = () => {
32
- setLoading(true);
33
- if (processId) {
34
- websocket.send(
35
- JSON.stringify({
36
- type: "getProcess",
37
- processId,
38
- })
39
- );
40
- }
41
- };
42
-
43
- websocket.onerror = (error) => {
44
- console.error("WebSocket error:", error);
45
- setLoading(false);
46
- setProcess(null);
47
- clearTimeout(timeoutId);
48
- };
49
-
50
27
  const handleMessage = (event: MessageEvent) => {
51
28
  try {
52
29
  const data = JSON.parse(event.data);
@@ -104,14 +81,24 @@ export const SingleProcessPage: React.FC = () => {
104
81
  }
105
82
  };
106
83
 
107
- websocket.addEventListener("message", handleMessage);
84
+ ws.addEventListener("message", handleMessage);
85
+
86
+ // Request specific process when connected
87
+ if (ws.readyState === WebSocket.OPEN && processId) {
88
+ setLoading(true);
89
+ ws.send(
90
+ JSON.stringify({
91
+ type: "getProcess",
92
+ processId,
93
+ })
94
+ );
95
+ }
108
96
 
109
97
  return () => {
110
- websocket.removeEventListener("message", handleMessage);
111
- websocket.close();
98
+ ws.removeEventListener("message", handleMessage);
112
99
  clearTimeout(timeoutId);
113
100
  };
114
- }, [processId]);
101
+ }, [ws, processId]);
115
102
 
116
103
  // Try to find the process in the global state if WebSocket doesn't respond
117
104
  useEffect(() => {