@yinuo-ngm/server 1.0.15 → 1.0.17

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 (349) hide show
  1. package/lib/app.js +3 -15
  2. package/lib/common/editor.js +2 -2
  3. package/lib/env.d.ts +1 -0
  4. package/lib/env.js +1 -0
  5. package/lib/plugins/error-handler.plugin.d.ts +2 -2
  6. package/lib/plugins/error-handler.plugin.js +97 -88
  7. package/lib/plugins/ws/topics/nginx.ws.js +2 -1
  8. package/lib/plugins/ws/topics/svn.ws.d.ts +2 -1
  9. package/lib/plugins/ws/topics/svn.ws.js +3 -2
  10. package/lib/plugins/ws/topics/syslog.ws.d.ts +1 -1
  11. package/lib/plugins/ws/topics/task.ws.d.ts +2 -1
  12. package/lib/plugins/ws/topics/task.ws.js +2 -1
  13. package/lib/plugins/ws/ws.context.d.ts +1 -1
  14. package/lib/plugins/ws/ws.plugin.js +4 -3
  15. package/lib/plugins/ws/ws.router.d.ts +2 -2
  16. package/lib/plugins/ws/ws.router.js +8 -7
  17. package/lib/routes/api-client/collection.routes.js +8 -6
  18. package/lib/routes/api-client/env.routes.js +4 -3
  19. package/lib/routes/api-client/history.routes.js +3 -2
  20. package/lib/routes/api-client/hub-token.routes.js +32 -10
  21. package/lib/routes/api-client/request.routes.js +7 -6
  22. package/lib/routes/api-client/send.routes.js +3 -2
  23. package/lib/routes/config.routes.js +5 -5
  24. package/lib/routes/hub.routes.js +10 -10
  25. package/lib/routes/index.js +2 -0
  26. package/lib/routes/nginx/nginx-lifecycle.routes.js +4 -0
  27. package/lib/routes/nginx/nginx-route.context.js +23 -7
  28. package/lib/routes/nginx/nginx-server.routes.js +158 -6
  29. package/lib/routes/node-version.routes.d.ts +2 -0
  30. package/lib/routes/node-version.routes.js +56 -0
  31. package/lib/routes/project.routes.js +14 -9
  32. package/lib/routes/rss.routes.js +3 -3
  33. package/lib/routes/sprite-browse.routes.js +21 -6
  34. package/lib/routes/sprite.routes.js +18 -12
  35. package/lib/routes/static-files.routes.js +21 -5
  36. package/lib/routes/svn.routes.js +5 -3
  37. package/lib/routes/system.routes.js +20 -1
  38. package/lib/routes/task.routes.js +10 -3
  39. package/package.json +13 -6
  40. package/www/3rdpartylicenses.txt +66 -118
  41. package/www/browser/chunk-2L7NUOMX.js +2 -0
  42. package/www/browser/chunk-2NZJ7CN2.js +20 -0
  43. package/www/browser/chunk-3CM4SKDO.js +15 -0
  44. package/www/browser/chunk-3I7BQCXS.js +1 -0
  45. package/www/browser/chunk-3M56F2S2.js +1 -0
  46. package/www/browser/chunk-3OHBKMAA.js +1 -0
  47. package/www/browser/chunk-3XNNQFWR.js +1 -0
  48. package/www/browser/chunk-4BRW6LCZ.js +4 -0
  49. package/www/browser/chunk-4LBSLURA.js +1 -0
  50. package/www/browser/chunk-4X42HB6N.js +2 -0
  51. package/www/browser/chunk-5DYX4DUX.js +11 -0
  52. package/www/browser/chunk-6SYVDN5L.js +1 -0
  53. package/www/browser/chunk-6YYNHZ2A.js +1 -0
  54. package/www/browser/chunk-75W3GVSO.js +1 -0
  55. package/www/browser/chunk-7U44RF5F.js +63 -0
  56. package/www/browser/chunk-AELTP6YN.js +1 -0
  57. package/www/browser/chunk-AMXRL4GR.js +1 -0
  58. package/www/browser/chunk-AV2ZODEH.js +1 -0
  59. package/www/browser/chunk-AZ6SIMYH.js +1 -0
  60. package/www/browser/chunk-B3C35ET3.js +2 -0
  61. package/www/browser/chunk-BTQIUVTQ.js +1 -0
  62. package/www/browser/chunk-CN5J4WNO.js +1 -0
  63. package/www/browser/chunk-D2ODDESN.js +1 -0
  64. package/www/browser/chunk-DE6E23ET.js +1 -0
  65. package/www/browser/chunk-DIJPUYIA.js +1 -0
  66. package/www/browser/chunk-DLGJD6YU.js +4 -0
  67. package/www/browser/chunk-EEDA5U4V.js +1 -0
  68. package/www/browser/chunk-FK6Z4HLL.js +1 -0
  69. package/www/browser/chunk-FL6GDGHW.js +1 -0
  70. package/www/browser/chunk-FXCG34QS.js +1 -0
  71. package/www/browser/chunk-H2USFIYR.js +1 -0
  72. package/www/browser/chunk-H5HGMOE6.js +1 -0
  73. package/www/browser/chunk-HB3HECPD.js +1 -0
  74. package/www/browser/chunk-HDNG236Q.js +1 -0
  75. package/www/browser/chunk-HFZLJHYR.js +1 -0
  76. package/www/browser/chunk-HJTXXSMC.js +1 -0
  77. package/www/browser/chunk-HUMCWAKJ.js +3 -0
  78. package/www/browser/chunk-IKB3EQCP.js +2 -0
  79. package/www/browser/chunk-K7PESFPY.js +1 -0
  80. package/www/browser/chunk-KRYMOHYF.js +2 -0
  81. package/www/browser/chunk-M4QRBV3K.js +1 -0
  82. package/www/browser/chunk-N2PELLMM.js +30 -0
  83. package/www/browser/chunk-ONXBYGIG.js +1 -0
  84. package/www/browser/chunk-OSBDR36P.js +1 -0
  85. package/www/browser/chunk-OZCK4XVV.js +1 -0
  86. package/www/browser/chunk-QJP5F735.js +1 -0
  87. package/www/browser/chunk-RGOYDY7H.js +1 -0
  88. package/www/browser/chunk-UJKK4A7Y.js +1 -0
  89. package/www/browser/chunk-WD2EKZQC.js +1 -0
  90. package/www/browser/chunk-WUA5JFDD.js +1 -0
  91. package/www/browser/chunk-XLFHB7RS.js +3 -0
  92. package/www/browser/chunk-YNW4HEJO.js +37 -0
  93. package/www/browser/chunk-ZTDLWBW5.js +1 -0
  94. package/www/browser/dark.css +1 -30433
  95. package/www/browser/default.css +1 -30149
  96. package/www/browser/index.html +3 -3
  97. package/www/browser/main-N64WJCHX.js +34 -0
  98. package/www/browser/scripts-U25HCVEI.js +6 -0
  99. package/www/browser/styles-ROAHD7MY.css +1 -0
  100. package/www/browser/add-widget-drawer.component.css.map +0 -7
  101. package/www/browser/advanced-editor.component.css.map +0 -7
  102. package/www/browser/api-client.component.css.map +0 -7
  103. package/www/browser/api-history-drawer.component.css.map +0 -7
  104. package/www/browser/app.css.map +0 -7
  105. package/www/browser/attachment-viewer.component.css.map +0 -7
  106. package/www/browser/auth-editor.component.css.map +0 -7
  107. package/www/browser/body-editor.component.css.map +0 -7
  108. package/www/browser/chunk-2YSUXBGC.js +0 -627
  109. package/www/browser/chunk-2YSUXBGC.js.map +0 -1
  110. package/www/browser/chunk-3G2GEOPV.js +0 -456
  111. package/www/browser/chunk-3G2GEOPV.js.map +0 -1
  112. package/www/browser/chunk-3L72DF3R.js +0 -1683
  113. package/www/browser/chunk-3L72DF3R.js.map +0 -1
  114. package/www/browser/chunk-3MCIETCQ.js +0 -8279
  115. package/www/browser/chunk-3MCIETCQ.js.map +0 -1
  116. package/www/browser/chunk-665WC4RU.js +0 -5383
  117. package/www/browser/chunk-665WC4RU.js.map +0 -1
  118. package/www/browser/chunk-6QMSEZPT.js +0 -10044
  119. package/www/browser/chunk-6QMSEZPT.js.map +0 -1
  120. package/www/browser/chunk-6TBQERYX.js +0 -280
  121. package/www/browser/chunk-6TBQERYX.js.map +0 -1
  122. package/www/browser/chunk-6UW4MRJZ.js +0 -43
  123. package/www/browser/chunk-6UW4MRJZ.js.map +0 -7
  124. package/www/browser/chunk-6XUMIL3W.js +0 -5495
  125. package/www/browser/chunk-6XUMIL3W.js.map +0 -1
  126. package/www/browser/chunk-724YOJI3.js +0 -903
  127. package/www/browser/chunk-724YOJI3.js.map +0 -1
  128. package/www/browser/chunk-766T7YES.js +0 -437
  129. package/www/browser/chunk-766T7YES.js.map +0 -1
  130. package/www/browser/chunk-7FC7DN65.js +0 -728
  131. package/www/browser/chunk-7FC7DN65.js.map +0 -1
  132. package/www/browser/chunk-APGQRYWX.js +0 -156
  133. package/www/browser/chunk-APGQRYWX.js.map +0 -7
  134. package/www/browser/chunk-AQHSGTHS.js +0 -1960
  135. package/www/browser/chunk-AQHSGTHS.js.map +0 -1
  136. package/www/browser/chunk-CTOEAJQK.js +0 -40
  137. package/www/browser/chunk-CTOEAJQK.js.map +0 -7
  138. package/www/browser/chunk-DEGQJKKZ.js +0 -409
  139. package/www/browser/chunk-DEGQJKKZ.js.map +0 -1
  140. package/www/browser/chunk-DIJX2663.js +0 -1166
  141. package/www/browser/chunk-DIJX2663.js.map +0 -1
  142. package/www/browser/chunk-E4XD4GLT.js +0 -427
  143. package/www/browser/chunk-E4XD4GLT.js.map +0 -1
  144. package/www/browser/chunk-EQOY6A3M.js +0 -212
  145. package/www/browser/chunk-EQOY6A3M.js.map +0 -1
  146. package/www/browser/chunk-ETTBRXVA.js +0 -2643
  147. package/www/browser/chunk-ETTBRXVA.js.map +0 -1
  148. package/www/browser/chunk-FLSUSPBD.js +0 -5569
  149. package/www/browser/chunk-FLSUSPBD.js.map +0 -1
  150. package/www/browser/chunk-FZNHBEAZ.js +0 -102
  151. package/www/browser/chunk-FZNHBEAZ.js.map +0 -1
  152. package/www/browser/chunk-GJC7CZIJ.js +0 -361
  153. package/www/browser/chunk-GJC7CZIJ.js.map +0 -7
  154. package/www/browser/chunk-GMCNMOTD.js +0 -844
  155. package/www/browser/chunk-GMCNMOTD.js.map +0 -7
  156. package/www/browser/chunk-H43HGCRW.js +0 -198
  157. package/www/browser/chunk-H43HGCRW.js.map +0 -7
  158. package/www/browser/chunk-J447GBHM.js +0 -160
  159. package/www/browser/chunk-J447GBHM.js.map +0 -1
  160. package/www/browser/chunk-JN3VOWP7.js +0 -384
  161. package/www/browser/chunk-JN3VOWP7.js.map +0 -1
  162. package/www/browser/chunk-KSHAGY2M.js +0 -399
  163. package/www/browser/chunk-KSHAGY2M.js.map +0 -7
  164. package/www/browser/chunk-KV72AKOD.js +0 -59
  165. package/www/browser/chunk-KV72AKOD.js.map +0 -7
  166. package/www/browser/chunk-LAVMY2SJ.js +0 -26
  167. package/www/browser/chunk-LAVMY2SJ.js.map +0 -7
  168. package/www/browser/chunk-LLRVGHG5.js +0 -73
  169. package/www/browser/chunk-LLRVGHG5.js.map +0 -7
  170. package/www/browser/chunk-LPME4AJ3.js +0 -196
  171. package/www/browser/chunk-LPME4AJ3.js.map +0 -1
  172. package/www/browser/chunk-LVPSURVU.js +0 -4615
  173. package/www/browser/chunk-LVPSURVU.js.map +0 -1
  174. package/www/browser/chunk-MMPO7QLO.js +0 -4146
  175. package/www/browser/chunk-MMPO7QLO.js.map +0 -7
  176. package/www/browser/chunk-O7LB6VFM.js +0 -1953
  177. package/www/browser/chunk-O7LB6VFM.js.map +0 -1
  178. package/www/browser/chunk-P5CWA4FO.js +0 -685
  179. package/www/browser/chunk-P5CWA4FO.js.map +0 -1
  180. package/www/browser/chunk-RBWIWNTL.js +0 -203
  181. package/www/browser/chunk-RBWIWNTL.js.map +0 -7
  182. package/www/browser/chunk-RUXJCM3V.js +0 -26199
  183. package/www/browser/chunk-RUXJCM3V.js.map +0 -1
  184. package/www/browser/chunk-S77VVYUZ.js +0 -168
  185. package/www/browser/chunk-S77VVYUZ.js.map +0 -1
  186. package/www/browser/chunk-SCXPYFOB.js +0 -4316
  187. package/www/browser/chunk-SCXPYFOB.js.map +0 -1
  188. package/www/browser/chunk-SS73S33S.js +0 -471
  189. package/www/browser/chunk-SS73S33S.js.map +0 -7
  190. package/www/browser/chunk-T6UAOWNP.js +0 -600
  191. package/www/browser/chunk-T6UAOWNP.js.map +0 -1
  192. package/www/browser/chunk-TEW4MY4J.js +0 -148
  193. package/www/browser/chunk-TEW4MY4J.js.map +0 -7
  194. package/www/browser/chunk-TVORF3SF.js +0 -82
  195. package/www/browser/chunk-TVORF3SF.js.map +0 -7
  196. package/www/browser/chunk-UAN42EUZ.js +0 -2147
  197. package/www/browser/chunk-UAN42EUZ.js.map +0 -1
  198. package/www/browser/chunk-ULOHDK7Y.js +0 -1
  199. package/www/browser/chunk-ULOHDK7Y.js.map +0 -7
  200. package/www/browser/chunk-UYJ3FVRV.js +0 -3978
  201. package/www/browser/chunk-UYJ3FVRV.js.map +0 -1
  202. package/www/browser/chunk-VXHZMSDM.js +0 -5509
  203. package/www/browser/chunk-VXHZMSDM.js.map +0 -1
  204. package/www/browser/chunk-VYNQPZQO.js +0 -281
  205. package/www/browser/chunk-VYNQPZQO.js.map +0 -1
  206. package/www/browser/chunk-W3J23PZI.js +0 -9213
  207. package/www/browser/chunk-W3J23PZI.js.map +0 -1
  208. package/www/browser/chunk-W5HGHCQT.js +0 -1642
  209. package/www/browser/chunk-W5HGHCQT.js.map +0 -7
  210. package/www/browser/chunk-XF5H7E4L.js +0 -4723
  211. package/www/browser/chunk-XF5H7E4L.js.map +0 -1
  212. package/www/browser/chunk-XNFNEBMY.js +0 -398
  213. package/www/browser/chunk-XNFNEBMY.js.map +0 -7
  214. package/www/browser/chunk-XQY5SPGI.js +0 -30811
  215. package/www/browser/chunk-XQY5SPGI.js.map +0 -1
  216. package/www/browser/chunk-Y7JBZHNK.js +0 -514
  217. package/www/browser/chunk-Y7JBZHNK.js.map +0 -1
  218. package/www/browser/chunk-YWHRP4X3.js +0 -406
  219. package/www/browser/chunk-YWHRP4X3.js.map +0 -1
  220. package/www/browser/chunk-Z7FJIV62.js +0 -95
  221. package/www/browser/chunk-Z7FJIV62.js.map +0 -7
  222. package/www/browser/chunk-ZBZHXS46.js +0 -1674
  223. package/www/browser/chunk-ZBZHXS46.js.map +0 -1
  224. package/www/browser/chunk-ZZA5NVAI.js +0 -735
  225. package/www/browser/chunk-ZZA5NVAI.js.map +0 -1
  226. package/www/browser/collection-modal.component.css.map +0 -7
  227. package/www/browser/collection-tree-item.component.css.map +0 -7
  228. package/www/browser/collection-tree.component.css.map +0 -7
  229. package/www/browser/config-change-bar-component.css.map +0 -7
  230. package/www/browser/config-item-component.css.map +0 -7
  231. package/www/browser/config-nav-component.css.map +0 -7
  232. package/www/browser/config-section-component.css.map +0 -7
  233. package/www/browser/create-summary-aside.component.css.map +0 -7
  234. package/www/browser/curl-actions.component.css.map +0 -7
  235. package/www/browser/dark.css.map +0 -7
  236. package/www/browser/dashboard-canvas.component.css.map +0 -7
  237. package/www/browser/dashboard.component.css.map +0 -7
  238. package/www/browser/default.css.map +0 -7
  239. package/www/browser/detail-item-card.component.css.map +0 -7
  240. package/www/browser/ellipsis-text.component.css.map +0 -7
  241. package/www/browser/env-modal.component.css.map +0 -7
  242. package/www/browser/env-picker.component.css.map +0 -7
  243. package/www/browser/feedback.component.css.map +0 -7
  244. package/www/browser/fs-explorer.component.css.map +0 -7
  245. package/www/browser/git-import-modal.component.css.map +0 -7
  246. package/www/browser/hub-v2-personal-token-modal.component.css.map +0 -7
  247. package/www/browser/issue-action-area.component.css.map +0 -7
  248. package/www/browser/issue-add-participants-dialog.component.css.map +0 -7
  249. package/www/browser/issue-assign-dialog.component.css.map +0 -7
  250. package/www/browser/issue-attachment-area.component.css.map +0 -7
  251. package/www/browser/issue-base-info-area.component.css.map +0 -7
  252. package/www/browser/issue-branches.component.css.map +0 -7
  253. package/www/browser/issue-close-dialog.component.css.map +0 -7
  254. package/www/browser/issue-collaborators-panel.component.css.map +0 -7
  255. package/www/browser/issue-comment-editor.component.css.map +0 -7
  256. package/www/browser/issue-create-branch-dialog.component.css.map +0 -7
  257. package/www/browser/issue-description-area.component.css.map +0 -7
  258. package/www/browser/issue-detail.component.css.map +0 -7
  259. package/www/browser/issue-resolve-dialog.component.css.map +0 -7
  260. package/www/browser/issue-start-own-branch-dialog.component.css.map +0 -7
  261. package/www/browser/issues-list-table.component.css.map +0 -7
  262. package/www/browser/issues.component.css.map +0 -7
  263. package/www/browser/kill-port-widget.component.css.map +0 -7
  264. package/www/browser/kv-table.component.css.map +0 -7
  265. package/www/browser/layout-footer.component.css.map +0 -7
  266. package/www/browser/layout-header.component.css.map +0 -7
  267. package/www/browser/layout-menu.component.css.map +0 -7
  268. package/www/browser/layout-project-nav.component.css.map +0 -7
  269. package/www/browser/layout-sidebar.component.css.map +0 -7
  270. package/www/browser/layout.component.css.map +0 -7
  271. package/www/browser/less-viewport-component.css.map +0 -7
  272. package/www/browser/main.js +0 -1872
  273. package/www/browser/main.js.map +0 -1
  274. package/www/browser/markdown-viewer.component.css.map +0 -7
  275. package/www/browser/news-feed-widget.component.css.map +0 -7
  276. package/www/browser/ng-devtool.component.css.map +0 -7
  277. package/www/browser/nginx-config-editor.component.css.map +0 -7
  278. package/www/browser/nginx-log-viewer.component.css.map +0 -7
  279. package/www/browser/nginx-secondary-logs-tab.component.css.map +0 -7
  280. package/www/browser/nginx-secondary-perf-tab.component.css.map +0 -7
  281. package/www/browser/nginx-secondary-settings-tab.component.css.map +0 -7
  282. package/www/browser/nginx-secondary-ssl-tab.component.css.map +0 -7
  283. package/www/browser/nginx-secondary-test-tab.component.css.map +0 -7
  284. package/www/browser/nginx-secondary-traffic-tab.component.css.map +0 -7
  285. package/www/browser/nginx-secondary-upstream-tab.component.css.map +0 -7
  286. package/www/browser/nginx-section-card.component.css.map +0 -7
  287. package/www/browser/nginx-server-drawer.component.css.map +0 -7
  288. package/www/browser/nginx-server-list.component.css.map +0 -7
  289. package/www/browser/nginx-stat-card.component.css.map +0 -7
  290. package/www/browser/nginx.component.css.map +0 -7
  291. package/www/browser/page-layout.component.css.map +0 -7
  292. package/www/browser/pick-workspace-modal.component.css.map +0 -7
  293. package/www/browser/polyfills.js +0 -26584
  294. package/www/browser/polyfills.js.map +0 -7
  295. package/www/browser/project-conf.component.css.map +0 -7
  296. package/www/browser/project-create-modal.component.css.map +0 -7
  297. package/www/browser/project-create.component.css.map +0 -7
  298. package/www/browser/project-deps.component.css.map +0 -7
  299. package/www/browser/project-edit-modal.component.css.map +0 -7
  300. package/www/browser/project-import.component.css.map +0 -7
  301. package/www/browser/project-item-popover.component.css.map +0 -7
  302. package/www/browser/project-item.component.css.map +0 -7
  303. package/www/browser/project-list.component.css.map +0 -7
  304. package/www/browser/projects.component.css.map +0 -7
  305. package/www/browser/quick-task-widget.component.css.map +0 -7
  306. package/www/browser/rd-action-area.component.css.map +0 -7
  307. package/www/browser/rd-advance-stage-dialog.component.css.map +0 -7
  308. package/www/browser/rd-block-dialog.component.css.map +0 -7
  309. package/www/browser/rd-create-dialog.component.css.map +0 -7
  310. package/www/browser/rd-detail.component.css.map +0 -7
  311. package/www/browser/rd-item-card.component.css.map +0 -7
  312. package/www/browser/rd-list-board.component.css.map +0 -7
  313. package/www/browser/rd-list-table.component.css.map +0 -7
  314. package/www/browser/rd.component.css.map +0 -7
  315. package/www/browser/request-collections.component.css.map +0 -7
  316. package/www/browser/request-editor.component.css.map +0 -7
  317. package/www/browser/request-list-item.component.css.map +0 -7
  318. package/www/browser/request-list.component.css.map +0 -7
  319. package/www/browser/request-tabs-bar.component.css.map +0 -7
  320. package/www/browser/request-tabs.component.css.map +0 -7
  321. package/www/browser/request-urlbar.component.css.map +0 -7
  322. package/www/browser/response-viewer.component.css.map +0 -7
  323. package/www/browser/scripts.js +0 -245
  324. package/www/browser/scripts.js.map +0 -7
  325. package/www/browser/setting.component.css.map +0 -7
  326. package/www/browser/sprite-conf-modal.component.css.map +0 -7
  327. package/www/browser/sprite-icons-panel-component.css.map +0 -7
  328. package/www/browser/sprite-images-panel-component.css.map +0 -7
  329. package/www/browser/sprite-result-tabs.component.css.map +0 -7
  330. package/www/browser/sprite-viewport-component.css.map +0 -7
  331. package/www/browser/sprite.component.css.map +0 -7
  332. package/www/browser/step-advance.component.css.map +0 -7
  333. package/www/browser/step-basic.component.css.map +0 -7
  334. package/www/browser/step-config.component.css.map +0 -7
  335. package/www/browser/step-features.component.css.map +0 -7
  336. package/www/browser/step-preset.component.css.map +0 -7
  337. package/www/browser/step-summary-aside.component.css.map +0 -7
  338. package/www/browser/styles.css +0 -258
  339. package/www/browser/styles.css.map +0 -7
  340. package/www/browser/system-log.component.css.map +0 -7
  341. package/www/browser/task-actions.component.css.map +0 -7
  342. package/www/browser/task-console.component.css.map +0 -7
  343. package/www/browser/task-header.component.css.map +0 -7
  344. package/www/browser/task-list.component.css.map +0 -7
  345. package/www/browser/tasks.component.css.map +0 -7
  346. package/www/browser/terminal-view.component.css.map +0 -7
  347. package/www/browser/welcome-widget.component.css.map +0 -7
  348. package/www/browser/widget-base.component.css.map +0 -7
  349. package/www/browser/widget-host.component.css.map +0 -7
@@ -1,471 +0,0 @@
1
- import {
2
- TaskRuntimeStore,
3
- TasksApiService
4
- } from "./chunk-RBWIWNTL.js";
5
- import {
6
- WsClientService
7
- } from "./chunk-APGQRYWX.js";
8
- import {
9
- Injectable,
10
- Subject,
11
- __decorate,
12
- __spreadProps,
13
- __spreadValues,
14
- computed,
15
- effect,
16
- firstValueFrom,
17
- inject,
18
- signal
19
- } from "./chunk-XQY5SPGI.js";
20
-
21
- // src/app/pages/tasks/services/task-stream.service.ts
22
- var TaskStreamService = class TaskStreamService2 {
23
- ws;
24
- runtimeStore;
25
- outputByTaskId = /* @__PURE__ */ new Map();
26
- // taskId -> output stream
27
- event$ = new Subject();
28
- subs = /* @__PURE__ */ new Map();
29
- // taskId -> tail
30
- lastWsState = "idle";
31
- constructor(ws, runtimeStore) {
32
- this.ws = ws;
33
- this.runtimeStore = runtimeStore;
34
- this.ws.messages().subscribe((msg) => this.onMessage(msg));
35
- this.ws.stateChanges().subscribe((s) => {
36
- if (s === "open" && this.lastWsState !== "open") {
37
- this.replaySubs();
38
- }
39
- this.lastWsState = s;
40
- });
41
- }
42
- ensureConnected() {
43
- this.ws.connect();
44
- }
45
- subscribeTask(taskId, tail = 200) {
46
- const id = taskId.trim();
47
- if (!id)
48
- return;
49
- const t = Math.max(0, Math.min(5e3, tail | 0));
50
- if (this.subs.get(id) === t)
51
- return;
52
- this.subs.set(id, t);
53
- if (this.ws.isOpen()) {
54
- this.ws.send({ op: "sub", topic: "task", taskId: id, tail: t });
55
- }
56
- }
57
- unsubscribeTask(taskId) {
58
- const id = taskId.trim();
59
- if (!this.subs.has(id))
60
- return;
61
- this.subs.delete(id);
62
- if (this.ws.isOpen()) {
63
- this.ws.send({ op: "unsub", topic: "task", taskId: id });
64
- }
65
- }
66
- resize(taskId, cols, rows) {
67
- const id = String(taskId ?? "").trim();
68
- if (!id)
69
- return;
70
- if (!this.ws.isOpen())
71
- return;
72
- this.ws.send({ op: "resize", topic: "task", taskId: id, cols, rows });
73
- }
74
- output$(taskId) {
75
- return this.ensureOutput(taskId).asObservable();
76
- }
77
- events$() {
78
- return this.event$.asObservable();
79
- }
80
- status$(runId) {
81
- return this.runtimeStore.status$(runId);
82
- }
83
- replaySubs() {
84
- for (const [taskId, tail] of this.subs.entries()) {
85
- this.ws.send({ op: "sub", topic: "task", taskId, tail });
86
- }
87
- }
88
- onMessage(msg) {
89
- const op = msg?.op;
90
- if (op === "task.output") {
91
- const payload = msg.payload;
92
- const taskId = String(payload.taskId ?? "").trim();
93
- if (!taskId)
94
- return;
95
- this.ensureOutput(taskId).next(msg);
96
- return;
97
- }
98
- if (op === "task.event") {
99
- const payload = msg.payload;
100
- const type = msg.type;
101
- const taskId = String(payload.taskId ?? "").trim();
102
- if (!taskId)
103
- return;
104
- this.event$.next(msg);
105
- const nextRt = this.applyEventToRuntime(type, payload);
106
- if (nextRt) {
107
- this.runtimeStore.setRuntime(nextRt);
108
- }
109
- if (type === "exited" || type === "failed") {
110
- setTimeout(() => this.outputByTaskId.delete(taskId), 5 * 60 * 1e3);
111
- }
112
- if (type === "failed") {
113
- const failePayload = payload;
114
- const errText = `[failed] ${failePayload?.error ?? ""}`.trim();
115
- const outputPayload = {
116
- runId: failePayload.runId,
117
- taskId,
118
- stream: "stderr",
119
- text: errText + "\n"
120
- };
121
- this.ensureOutput(taskId).next({ op: "task.output", payload: outputPayload, ts: msg.ts });
122
- }
123
- }
124
- }
125
- ensureOutput(taskId) {
126
- const id = String(taskId ?? "").trim();
127
- if (!this.outputByTaskId.has(id))
128
- this.outputByTaskId.set(id, new Subject());
129
- return this.outputByTaskId.get(id);
130
- }
131
- applyEventToRuntime(type, payload) {
132
- const taskId = String(payload?.taskId ?? "").trim();
133
- const runId = String(payload?.runId ?? "").trim();
134
- if (!taskId || !runId)
135
- return null;
136
- const prev = this.runtimeStore.runtimeSignal(taskId)();
137
- const base = prev && prev.runId === runId ? __spreadValues({}, prev) : {
138
- taskId,
139
- runId,
140
- projectId: String(payload?.projectId ?? prev?.projectId ?? "").trim(),
141
- status: "idle"
142
- };
143
- switch (type) {
144
- case "snapshot":
145
- const snapPayload = payload;
146
- base.projectId = String(snapPayload?.projectId ?? base.projectId ?? "").trim();
147
- base.status = snapPayload.status;
148
- base.startedAt = snapPayload.startedAt;
149
- base.stoppedAt = snapPayload.stoppedAt;
150
- base.pid = snapPayload.pid;
151
- base.exitCode = snapPayload.exitCode;
152
- base.signal = snapPayload.signal;
153
- return base;
154
- case "started":
155
- base.projectId = String(payload?.projectId ?? base.projectId ?? "").trim();
156
- base.status = "running";
157
- base.pid = payload?.pid ?? base.pid;
158
- base.startedAt = payload?.startedAt ?? base.startedAt ?? Date.now();
159
- base.stoppedAt = void 0;
160
- base.exitCode = void 0;
161
- base.signal = void 0;
162
- return base;
163
- case "stopRequested":
164
- base.status = "stopping";
165
- return base;
166
- case "exited":
167
- base.status = "stopped";
168
- base.exitCode = payload?.exitCode ?? null;
169
- base.signal = payload?.signal ?? null;
170
- base.stoppedAt = payload?.stoppedAt ?? Date.now();
171
- return base;
172
- case "failed":
173
- base.status = "failed";
174
- base.stoppedAt = base.stoppedAt ?? Date.now();
175
- base.exitCode = base.exitCode ?? null;
176
- base.signal = base.signal ?? null;
177
- return base;
178
- default:
179
- return null;
180
- }
181
- }
182
- static ctorParameters = () => [
183
- { type: WsClientService },
184
- { type: TaskRuntimeStore }
185
- ];
186
- };
187
- TaskStreamService = __decorate([
188
- Injectable({ providedIn: "root" })
189
- ], TaskStreamService);
190
-
191
- // src/app/pages/tasks/services/task-catalog.service.ts
192
- var TaskCatalogService = class TaskCatalogService2 {
193
- api = inject(TasksApiService);
194
- runtimeStore = inject(TaskRuntimeStore);
195
- state = signal({
196
- rowsByProject: {},
197
- loadingByProject: {},
198
- loadedAtByProject: {}
199
- });
200
- /** 某项目任务 rows(spec + runtime快照,可选),不包含 ui 运行态 */
201
- rowsOf(projectId) {
202
- const pid = (projectId ?? "").trim();
203
- return computed(() => this.state().rowsByProject[pid] ?? []);
204
- }
205
- /** 是否正在加载中 */
206
- isLoading(projectId) {
207
- const pid = (projectId ?? "").trim();
208
- return computed(() => !!this.state().loadingByProject[pid]);
209
- }
210
- /** 是否已缓存:以 loadedAt 为准(0 tasks 也算 loaded) */
211
- isLoaded(projectId) {
212
- const pid = (projectId ?? "").trim();
213
- return computed(() => this.state().loadedAtByProject[pid] != null);
214
- }
215
- /**
216
- * 主入口:确保该项目 tasks 已加载
217
- * 使用 getViews(list) 读取,不做 refresh(避免副作用)
218
- */
219
- async ensureLoaded(projectId, opts) {
220
- const pid = (projectId ?? "").trim();
221
- if (!pid)
222
- return;
223
- const s = this.state();
224
- const loaded = s.loadedAtByProject[pid] != null;
225
- const loading = !!s.loadingByProject[pid];
226
- if (!opts?.force && (loaded || loading))
227
- return;
228
- this.state.update((st) => __spreadProps(__spreadValues({}, st), {
229
- loadingByProject: __spreadProps(__spreadValues({}, st.loadingByProject), { [pid]: true })
230
- }));
231
- try {
232
- const res = await firstValueFrom(this.api.getViews(pid));
233
- const normalized = (res ?? []).map((r) => ({
234
- spec: r.spec,
235
- runtime: r.runtime ? {
236
- taskId: r.runtime.taskId,
237
- projectId: r.runtime.projectId,
238
- runId: r.runtime.runId,
239
- status: r.runtime.status,
240
- pid: r.runtime.pid,
241
- startedAt: r.runtime.startedAt,
242
- stoppedAt: r.runtime.stoppedAt,
243
- exitCode: r.runtime.exitCode,
244
- signal: r.runtime.signal
245
- } : void 0
246
- }));
247
- for (const row of normalized) {
248
- if (row.runtime)
249
- this.runtimeStore.setRuntime(row.runtime);
250
- }
251
- this.state.update((st) => __spreadProps(__spreadValues({}, st), {
252
- rowsByProject: __spreadProps(__spreadValues({}, st.rowsByProject), { [pid]: normalized }),
253
- loadedAtByProject: __spreadProps(__spreadValues({}, st.loadedAtByProject), { [pid]: Date.now() })
254
- }));
255
- } finally {
256
- this.state.update((st) => __spreadProps(__spreadValues({}, st), {
257
- loadingByProject: __spreadProps(__spreadValues({}, st.loadingByProject), { [pid]: false })
258
- }));
259
- }
260
- }
261
- /** tasks 页面刷新后,把结果写回 catalog(保持一致) */
262
- setRows(projectId, rows) {
263
- const pid = (projectId ?? "").trim();
264
- if (!pid)
265
- return;
266
- for (const row of rows ?? []) {
267
- if (row.runtime)
268
- this.runtimeStore.setRuntime(row.runtime);
269
- }
270
- this.state.update((st) => __spreadProps(__spreadValues({}, st), {
271
- rowsByProject: __spreadProps(__spreadValues({}, st.rowsByProject), { [pid]: rows ?? [] }),
272
- loadedAtByProject: __spreadProps(__spreadValues({}, st.loadedAtByProject), { [pid]: Date.now() })
273
- }));
274
- }
275
- /** 清除某项目缓存 */
276
- clear(projectId) {
277
- const pid = (projectId ?? "").trim();
278
- if (!pid)
279
- return;
280
- this.state.update((st) => {
281
- const rowsByProject = __spreadValues({}, st.rowsByProject);
282
- const loadingByProject = __spreadValues({}, st.loadingByProject);
283
- const loadedAtByProject = __spreadValues({}, st.loadedAtByProject);
284
- delete rowsByProject[pid];
285
- delete loadingByProject[pid];
286
- delete loadedAtByProject[pid];
287
- return { rowsByProject, loadingByProject, loadedAtByProject };
288
- });
289
- }
290
- };
291
- TaskCatalogService = __decorate([
292
- Injectable({ providedIn: "root" })
293
- ], TaskCatalogService);
294
-
295
- // src/app/pages/tasks/services/tasks.state.service.ts
296
- var TaskStateService = class TaskStateService2 {
297
- api = inject(TasksApiService);
298
- stream = inject(TaskStreamService);
299
- runtimeStore = inject(TaskRuntimeStore);
300
- catalog = inject(TaskCatalogService);
301
- /* ---------------- 基础状态 ---------------- */
302
- projectId = signal("");
303
- keyword = signal("");
304
- loading = signal(false);
305
- selectedTaskId = signal("");
306
- /** 当前项目 rows(spec + runtime 快照) */
307
- rows = computed(() => {
308
- const pid = this.projectId();
309
- if (!pid)
310
- return [];
311
- return this.catalog.rowsOf(pid)();
312
- });
313
- /* ---------------- 派生状态 ---------------- */
314
- rowsView = computed(() => {
315
- const rows = this.rows();
316
- return rows.map((r) => {
317
- const taskId = r.spec.id;
318
- const rt = this.getRuntimeSignal(taskId);
319
- return __spreadProps(__spreadValues({}, r), {
320
- runtime: rt ?? r.runtime
321
- });
322
- });
323
- });
324
- rowsViewFiltered = computed(() => {
325
- const kw = this.keyword().trim().toLowerCase();
326
- const rows = this.rowsView();
327
- if (!kw)
328
- return rows;
329
- return rows.filter((r) => {
330
- return r.spec.name?.toLowerCase().includes(kw);
331
- });
332
- });
333
- selectedRow = computed(() => {
334
- const id = this.selectedTaskId();
335
- return this.rowsView().find((r) => r.spec.id === id) ?? null;
336
- });
337
- selectedRuntimeStatus = computed(() => {
338
- const taskId = this.selectedTaskId();
339
- if (!taskId)
340
- return { status: "idle" };
341
- const st = this.getRuntime(taskId);
342
- return st;
343
- });
344
- isRunning = computed(() => this.selectedRuntimeStatus().status === "running");
345
- isStopping = computed(() => this.selectedRuntimeStatus().status === "stopping");
346
- isStopped = computed(() => {
347
- const st = this.selectedRuntimeStatus().status;
348
- return st === "idle" || st === "stopped" || st === "failed" || st === "success";
349
- });
350
- /* ---------------- 构造 & WS 同步 ---------------- */
351
- constructor() {
352
- effect((onCleanup) => {
353
- const taskId = this.selectedTaskId();
354
- if (!taskId)
355
- return;
356
- this.stream.ensureConnected();
357
- this.stream.subscribeTask(taskId, 200);
358
- const sub = this.runtimeStore.status$(taskId).subscribe();
359
- onCleanup(() => {
360
- sub.unsubscribe();
361
- this.stream.unsubscribeTask(taskId);
362
- });
363
- });
364
- }
365
- getRuntime(taskId) {
366
- return this.runtimeStore.statusSignal(taskId)();
367
- }
368
- getRuntimeSignal(taskId) {
369
- return this.runtimeStore.runtimeSignal(taskId)();
370
- }
371
- /* ---------------- 页面动作 ---------------- */
372
- async setProject(projectId) {
373
- const pid = projectId?.trim();
374
- if (!pid || this.projectId() === pid)
375
- return;
376
- this.projectId.set(pid);
377
- this.selectedTaskId.set("");
378
- this.keyword.set("");
379
- await this.catalog.ensureLoaded(pid);
380
- const first = this.rows()[0];
381
- if (first)
382
- this.select(first.spec.id);
383
- }
384
- refresh() {
385
- const pid = this.projectId();
386
- if (!pid)
387
- return;
388
- this.loading.set(true);
389
- this.api.refresh(pid).subscribe({
390
- next: (rows) => {
391
- this.catalog.setRows(pid, rows ?? []);
392
- this.loading.set(false);
393
- },
394
- error: (e) => {
395
- this.loading.set(false);
396
- }
397
- });
398
- }
399
- select(taskId) {
400
- this.selectedTaskId.set(taskId);
401
- }
402
- /* ---------------- 运行 / 停止 ---------------- */
403
- toggleTask() {
404
- if (this.isRunning()) {
405
- this.stopSelected();
406
- } else if (this.isStopped()) {
407
- this.startSelected();
408
- }
409
- }
410
- /**
411
- * 启动选中任务
412
- * @param taskId 如果不传则启动 selectedTaskId 指定的任务
413
- */
414
- startSelected(taskId) {
415
- taskId = taskId?.trim() || this.selectedRow()?.spec?.id;
416
- if (!taskId)
417
- return;
418
- this.api.start(taskId).subscribe();
419
- }
420
- /**
421
- * 停止选中任务
422
- * @param taskId 如果不传则停止 selectedTaskId 指定的任务
423
- */
424
- stopSelected(taskId) {
425
- taskId = taskId?.trim() || this.selectedTaskId();
426
- if (!taskId)
427
- return;
428
- const curRt = this.getRuntimeSignal(taskId);
429
- if (curRt) {
430
- this.runtimeStore.setRuntime(__spreadProps(__spreadValues({}, curRt), { status: "stopping" }));
431
- }
432
- this.api.stop(taskId).subscribe({
433
- next: () => {
434
- },
435
- error: () => {
436
- if (curRt && curRt.status === "running") {
437
- this.runtimeStore.setRuntime(curRt);
438
- }
439
- }
440
- });
441
- }
442
- /* ---------------- 给 popover 用 ---------------- */
443
- rowsViewOf(projectId) {
444
- return computed(() => {
445
- const pid = projectId?.trim();
446
- if (!pid)
447
- return [];
448
- const rows = this.catalog.rowsOf(pid)();
449
- return rows.map((r) => {
450
- const taskId = r.spec.id;
451
- const st = this.getRuntime(taskId);
452
- return __spreadProps(__spreadValues({}, r), {
453
- runtime: __spreadProps(__spreadValues({}, r.runtime ?? {}), { status: st.status })
454
- });
455
- });
456
- });
457
- }
458
- ensureProjectLoaded(projectId) {
459
- return this.catalog.ensureLoaded(projectId);
460
- }
461
- static ctorParameters = () => [];
462
- };
463
- TaskStateService = __decorate([
464
- Injectable({ providedIn: "root" })
465
- ], TaskStateService);
466
-
467
- export {
468
- TaskStreamService,
469
- TaskStateService
470
- };
471
- //# sourceMappingURL=chunk-SS73S33S.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["src/app/pages/tasks/services/task-stream.service.ts", "src/app/pages/tasks/services/task-catalog.service.ts", "src/app/pages/tasks/services/tasks.state.service.ts"],
4
- "sourcesContent": ["import { Injectable } from \"@angular/core\";\r\nimport { WsClientService } from \"@app/core/ws/ws-client.service\";\r\nimport type { TaskEventMsg, TaskEventPayloadMap, TaskEventType, TaskExitedPayload, TaskOutputMsg, TaskOutputPayload, TaskSnapshotPayload, TaskStartedPayload, TaskStatus, WsClientMsg, WsServerMsg, WsState } from \"@core/ws\";\r\nimport type { TaskRuntime } from \"@models/task.model\";\r\nimport { Subject } from \"rxjs\";\r\nimport { TaskRuntimeStore } from \"./task-runtime-store\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class TaskStreamService {\r\n private outputByTaskId = new Map<string, Subject<TaskOutputMsg>>(); // taskId -> output stream\r\n private event$ = new Subject<TaskEventMsg>();\r\n\r\n private subs = new Map<string, number>(); // taskId -> tail\r\n private lastWsState: WsState = \"idle\";\r\n\r\n constructor(\r\n private ws: WsClientService,\r\n private runtimeStore: TaskRuntimeStore\r\n ) {\r\n this.ws.messages().subscribe((msg) => this.onMessage(msg));\r\n\r\n this.ws.stateChanges().subscribe((s) => {\r\n if (s === \"open\" && this.lastWsState !== \"open\") {\r\n this.replaySubs();\r\n }\r\n this.lastWsState = s;\r\n });\r\n }\r\n\r\n ensureConnected() {\r\n this.ws.connect();\r\n }\r\n\r\n subscribeTask(taskId: string, tail = 200) {\r\n const id = taskId.trim();\r\n if (!id) return;\r\n const t = Math.max(0, Math.min(5000, tail | 0));\r\n if (this.subs.get(id) === t) return;\r\n\r\n this.subs.set(id, t);\r\n if (this.ws.isOpen()) {\r\n this.ws.send({ op: \"sub\", topic: \"task\", taskId: id, tail: t });\r\n }\r\n }\r\n\r\n unsubscribeTask(taskId: string) {\r\n const id = taskId.trim();\r\n if (!this.subs.has(id)) return;\r\n this.subs.delete(id);\r\n if (this.ws.isOpen()) {\r\n this.ws.send({ op: \"unsub\", topic: \"task\", taskId: id });\r\n }\r\n }\r\n\r\n resize(taskId: string, cols: number, rows: number) {\r\n const id = String(taskId ?? \"\").trim();\r\n if (!id) return;\r\n // 仅 open 发送,避免 pending 堆积 resize\r\n if (!this.ws.isOpen()) return;\r\n this.ws.send({ op: \"resize\", topic: \"task\", taskId: id, cols, rows } as Extract<WsClientMsg, { op: \"resize\" }>);\r\n }\r\n\r\n output$(taskId: string) {\r\n return this.ensureOutput(taskId).asObservable();\r\n }\r\n\r\n events$() {\r\n return this.event$.asObservable();\r\n }\r\n\r\n status$(runId: string) {\r\n return this.runtimeStore.status$(runId);\r\n }\r\n\r\n\r\n private replaySubs() {\r\n for (const [taskId, tail] of this.subs.entries()) {\r\n this.ws.send({ op: \"sub\", topic: \"task\", taskId, tail } as WsClientMsg);\r\n }\r\n }\r\n\r\n private onMessage(msg: WsServerMsg) {\r\n const op = msg?.op;\r\n if (op === \"task.output\") {\r\n const payload = msg.payload;\r\n const taskId = String(payload.taskId ?? \"\").trim();\r\n if (!taskId) return;\r\n this.ensureOutput(taskId).next(msg);\r\n return;\r\n }\r\n\r\n if (op === \"task.event\") {\r\n const payload = msg.payload;\r\n const type = msg.type;\r\n const taskId = String(payload.taskId ?? \"\").trim();\r\n if (!taskId) return;\r\n // 事件先发出去(StateService 用它维护 taskId -> runId)\r\n this.event$.next(msg);\r\n // 组装 TaskRuntime,然后 setRuntime\r\n const nextRt = this.applyEventToRuntime(type, payload);\r\n if (nextRt) {\r\n this.runtimeStore.setRuntime(nextRt);\r\n }\r\n // 清理 output subject \r\n if (type === \"exited\" || type === \"failed\") {\r\n setTimeout(() => this.outputByTaskId.delete(taskId), 5 * 60 * 1000);\r\n }\r\n // failed 追加一条 stderr \r\n if (type === \"failed\") {\r\n const failePayload = payload as TaskEventPayloadMap[\"failed\"];\r\n const errText = `[failed] ${failePayload?.error ?? \"\"}`.trim();\r\n const outputPayload: TaskOutputPayload = {\r\n runId: failePayload.runId,\r\n taskId,\r\n stream: \"stderr\",\r\n text: errText + \"\\n\",\r\n }\r\n this.ensureOutput(taskId).next({ op: \"task.output\", payload: outputPayload, ts: msg.ts });\r\n }\r\n }\r\n }\r\n\r\n private ensureOutput(taskId: string) {\r\n const id = String(taskId ?? \"\").trim();\r\n if (!this.outputByTaskId.has(id)) this.outputByTaskId.set(id, new Subject<TaskOutputMsg>());\r\n return this.outputByTaskId.get(id)!;\r\n }\r\n\r\n private applyEventToRuntime<K extends TaskEventType>(type: K, payload: TaskEventPayloadMap[K]): TaskRuntime | null {\r\n const taskId = String(payload?.taskId ?? '').trim();\r\n const runId = String(payload?.runId ?? '').trim();\r\n if (!taskId || !runId) return null;\r\n const prev = this.runtimeStore.runtimeSignal(taskId)();\r\n // 如果 runId 变了(新一次执行),以新 runId 为准\r\n const base: TaskRuntime = prev && prev.runId === runId\r\n ? { ...prev }\r\n : {\r\n taskId,\r\n runId,\r\n projectId: String(payload?.projectId ?? prev?.projectId ?? '').trim(),\r\n status: 'idle',\r\n };\r\n\r\n // 不同事件填充不同字段\r\n switch (type) {\r\n case \"snapshot\":\r\n const snapPayload = payload as TaskSnapshotPayload;\r\n base.projectId = String(snapPayload?.projectId ?? base.projectId ?? '').trim();\r\n base.status = snapPayload.status as TaskStatus;\r\n base.startedAt = snapPayload.startedAt;\r\n base.stoppedAt = snapPayload.stoppedAt;\r\n base.pid = snapPayload.pid;\r\n base.exitCode = snapPayload.exitCode;\r\n base.signal = snapPayload.signal;\r\n return base;\r\n case 'started':\r\n base.projectId = String(payload?.projectId ?? base.projectId ?? '').trim();\r\n base.status = 'running';\r\n base.pid = (payload as TaskStartedPayload)?.pid ?? base.pid;\r\n base.startedAt = (payload as TaskStartedPayload)?.startedAt ?? base.startedAt ?? Date.now();\r\n // 清理上一次退出字段\r\n base.stoppedAt = undefined;\r\n base.exitCode = undefined;\r\n base.signal = undefined;\r\n return base;\r\n case 'stopRequested':\r\n base.status = 'stopping';\r\n return base;\r\n case 'exited':\r\n // exited payload: { taskId, runId, exitCode, signal, stoppedAt }\r\n base.status = 'stopped'; // 后端规则里 stopping/exited 都归 stopped,但前端先落 stopped\r\n base.exitCode = (payload as TaskExitedPayload)?.exitCode ?? null;\r\n base.signal = (payload as TaskExitedPayload)?.signal ?? null;\r\n base.stoppedAt = (payload as TaskExitedPayload)?.stoppedAt ?? Date.now();\r\n return base;\r\n case 'failed':\r\n // failed payload: { taskId, runId, error }\r\n // 失败事件未必代表进程退出,后端 exit 会再来一次 exited。\r\n // 这里做“UI 立即失败提示”:标为 failed(busy=false),避免一直转圈\r\n base.status = 'failed';\r\n base.stoppedAt = base.stoppedAt ?? Date.now();\r\n base.exitCode = base.exitCode ?? null;\r\n base.signal = base.signal ?? null;\r\n return base;\r\n\r\n default:\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n", "import { Injectable, computed, inject, signal } from \"@angular/core\";\r\nimport type { TaskRow } from \"@models/task.model\";\r\nimport { firstValueFrom } from \"rxjs\";\r\nimport { TasksApiService } from \"./tasks-api.service\";\r\nimport { TaskRuntimeStore } from \"./task-runtime-store\";\r\n\r\ntype ProjectId = string;\r\n\r\ntype CatalogState = {\r\n rowsByProject: Record<ProjectId, TaskRow[]>;\r\n loadingByProject: Record<ProjectId, boolean>;\r\n loadedAtByProject: Record<ProjectId, number | undefined>;\r\n};\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class TaskCatalogService {\r\n private api = inject(TasksApiService);\r\n private runtimeStore = inject(TaskRuntimeStore);\r\n private state = signal<CatalogState>({\r\n rowsByProject: {},\r\n loadingByProject: {},\r\n loadedAtByProject: {},\r\n });\r\n\r\n /** 某项目任务 rows(spec + runtime快照,可选),不包含 ui 运行态 */\r\n rowsOf(projectId: string) {\r\n const pid = (projectId ?? \"\").trim();\r\n return computed(() => this.state().rowsByProject[pid] ?? []);\r\n }\r\n\r\n /** 是否正在加载中 */\r\n isLoading(projectId: string) {\r\n const pid = (projectId ?? \"\").trim();\r\n return computed(() => !!this.state().loadingByProject[pid]);\r\n }\r\n\r\n /** 是否已缓存:以 loadedAt 为准(0 tasks 也算 loaded) */\r\n isLoaded(projectId: string) {\r\n const pid = (projectId ?? \"\").trim();\r\n return computed(() => this.state().loadedAtByProject[pid] != null);\r\n }\r\n\r\n /**\r\n * 主入口:确保该项目 tasks 已加载\r\n * 使用 getViews(list) 读取,不做 refresh(避免副作用)\r\n */\r\n async ensureLoaded(projectId: string, opts?: { force?: boolean }): Promise<void> {\r\n const pid = (projectId ?? \"\").trim();\r\n if (!pid) return;\r\n\r\n const s = this.state();\r\n const loaded = s.loadedAtByProject[pid] != null;\r\n const loading = !!s.loadingByProject[pid];\r\n if (!opts?.force && (loaded || loading)) return;\r\n\r\n this.state.update((st) => ({\r\n ...st,\r\n loadingByProject: { ...st.loadingByProject, [pid]: true },\r\n }));\r\n\r\n try {\r\n const res = await firstValueFrom(this.api.getViews(pid));\r\n // console.log(\"[task catalog] loaded\", pid, res);\r\n\r\n // 这里保留后端 runtime(是快照,不是实时态)\r\n const normalized: TaskRow[] = (res ?? []).map((r: any) => ({\r\n spec: r.spec,\r\n runtime: r.runtime\r\n ? {\r\n taskId: r.runtime.taskId,\r\n projectId: r.runtime.projectId,\r\n runId: r.runtime.runId,\r\n status: r.runtime.status,\r\n pid: r.runtime.pid,\r\n startedAt: r.runtime.startedAt,\r\n stoppedAt: r.runtime.stoppedAt,\r\n exitCode: r.runtime.exitCode,\r\n signal: r.runtime.signal,\r\n }\r\n : undefined,\r\n }));\r\n\r\n // 用后端 runtime 快照初始化 runtimeStore(建立 runningCount)\r\n for (const row of normalized) {\r\n if (row.runtime) this.runtimeStore.setRuntime(row.runtime);\r\n }\r\n\r\n this.state.update((st) => ({\r\n ...st,\r\n rowsByProject: { ...st.rowsByProject, [pid]: normalized },\r\n loadedAtByProject: { ...st.loadedAtByProject, [pid]: Date.now() },\r\n }));\r\n } finally {\r\n this.state.update((st) => ({\r\n ...st,\r\n loadingByProject: { ...st.loadingByProject, [pid]: false },\r\n }));\r\n }\r\n }\r\n\r\n /** tasks 页面刷新后,把结果写回 catalog(保持一致) */\r\n setRows(projectId: string, rows: TaskRow[]) {\r\n const pid = (projectId ?? \"\").trim();\r\n if (!pid) return;\r\n for (const row of rows ?? []) {\r\n if (row.runtime) this.runtimeStore.setRuntime(row.runtime);\r\n }\r\n this.state.update((st) => ({\r\n ...st,\r\n rowsByProject: { ...st.rowsByProject, [pid]: rows ?? [] },\r\n loadedAtByProject: { ...st.loadedAtByProject, [pid]: Date.now() },\r\n }));\r\n }\r\n\r\n /** 清除某项目缓存 */\r\n clear(projectId: string) {\r\n const pid = (projectId ?? \"\").trim();\r\n if (!pid) return;\r\n\r\n this.state.update((st) => {\r\n const rowsByProject = { ...st.rowsByProject };\r\n const loadingByProject = { ...st.loadingByProject };\r\n const loadedAtByProject = { ...st.loadedAtByProject };\r\n delete rowsByProject[pid];\r\n delete loadingByProject[pid];\r\n delete loadedAtByProject[pid];\r\n return { rowsByProject, loadingByProject, loadedAtByProject };\r\n });\r\n }\r\n}\r\n", "import { Injectable, Signal, computed, effect, inject, signal } from \"@angular/core\";\r\nimport { TaskRow, TaskRuntime, TaskRuntimeStatus } from \"@models/task.model\";\r\nimport { TasksApiService } from \"./tasks-api.service\";\r\nimport { TaskStreamService } from \"./task-stream.service\";\r\nimport { TaskRuntimeStore } from \"./task-runtime-store\";\r\nimport { TaskCatalogService } from \"./task-catalog.service\";\r\n@Injectable({ providedIn: \"root\" })\r\nexport class TaskStateService {\r\n private api = inject(TasksApiService);\r\n private stream = inject(TaskStreamService);\r\n private runtimeStore = inject(TaskRuntimeStore);\r\n private catalog = inject(TaskCatalogService);\r\n\r\n /* ---------------- 基础状态 ---------------- */\r\n\r\n readonly projectId = signal<string>(\"\");\r\n\r\n readonly keyword = signal(\"\");\r\n readonly loading = signal(false);\r\n readonly selectedTaskId = signal<string>(\"\");\r\n\r\n /** 当前项目 rows(spec + runtime 快照) */\r\n readonly rows = computed<TaskRow[]>(() => {\r\n const pid = this.projectId();\r\n if (!pid) return [];\r\n return this.catalog.rowsOf(pid)();\r\n });\r\n\r\n /* ---------------- 派生状态 ---------------- */\r\n\r\n readonly rowsView = computed(() => {\r\n const rows = this.rows();\r\n return rows.map((r) => {\r\n const taskId = r.spec.id;\r\n const rt = this.getRuntimeSignal(taskId);\r\n return {\r\n ...r,\r\n runtime: rt ?? r.runtime,\r\n };\r\n });\r\n });\r\n\r\n readonly rowsViewFiltered = computed(() => {\r\n const kw = this.keyword().trim().toLowerCase();\r\n const rows = this.rowsView();\r\n if (!kw) return rows;\r\n return rows.filter((r) => {\r\n return (\r\n r.spec.name?.toLowerCase().includes(kw)\r\n );\r\n });\r\n });\r\n\r\n readonly selectedRow = computed(() => {\r\n const id = this.selectedTaskId();\r\n return this.rowsView().find((r) => r.spec.id === id) ?? null;\r\n });\r\n\r\n readonly selectedRuntimeStatus = computed<TaskRuntimeStatus>(() => {\r\n const taskId = this.selectedTaskId();\r\n if (!taskId) return { status: \"idle\" };\r\n const st = this.getRuntime(taskId);\r\n return st;\r\n });\r\n\r\n readonly isRunning = computed(() => this.selectedRuntimeStatus().status === \"running\");\r\n readonly isStopping = computed(() => this.selectedRuntimeStatus().status === \"stopping\");\r\n readonly isStopped = computed(() => {\r\n const st = this.selectedRuntimeStatus().status;\r\n return st === \"idle\" || st === \"stopped\" || st === \"failed\" || st === \"success\";\r\n });\r\n\r\n /* ---------------- 构造 & WS 同步 ---------------- */\r\n\r\n constructor() {\r\n /** WS 事件是 runIndex 的唯一实时来源 */\r\n // this.stream.events$().subscribe((e) => {\r\n // console.log(\"[task state] event\", e);\r\n // });\r\n\r\n /** 选中 runId → 自动订阅 WS */\r\n effect((onCleanup) => {\r\n const taskId = this.selectedTaskId();\r\n if (!taskId) return;\r\n // console.log(\"[task state effect] subscribe task stream\", taskId);\r\n this.stream.ensureConnected();\r\n this.stream.subscribeTask(taskId, 200);\r\n const sub = this.runtimeStore.status$(taskId).subscribe();\r\n onCleanup(() => {\r\n sub.unsubscribe();\r\n this.stream.unsubscribeTask(taskId);\r\n });\r\n });\r\n }\r\n\r\n getRuntime(taskId: string): TaskRuntimeStatus {\r\n return this.runtimeStore.statusSignal(taskId)();\r\n }\r\n\r\n private getRuntimeSignal(taskId: string): TaskRuntime | undefined {\r\n return this.runtimeStore.runtimeSignal(taskId)();\r\n }\r\n\r\n /* ---------------- 页面动作 ---------------- */\r\n\r\n async setProject(projectId: string) {\r\n const pid = projectId?.trim();\r\n if (!pid || this.projectId() === pid) return;\r\n this.projectId.set(pid);\r\n this.selectedTaskId.set(\"\");\r\n this.keyword.set(\"\");\r\n await this.catalog.ensureLoaded(pid);\r\n const first = this.rows()[0];\r\n if (first) this.select(first.spec.id);\r\n }\r\n\r\n refresh() {\r\n const pid = this.projectId();\r\n if (!pid) return;\r\n\r\n this.loading.set(true);\r\n\r\n this.api.refresh(pid).subscribe({\r\n next: (rows) => {\r\n this.catalog.setRows(pid, rows ?? []);\r\n this.loading.set(false);\r\n },\r\n error: (e) => {\r\n this.loading.set(false);\r\n },\r\n });\r\n }\r\n\r\n select(taskId: string) {\r\n this.selectedTaskId.set(taskId);\r\n }\r\n\r\n /* ---------------- 运行 / 停止 ---------------- */\r\n toggleTask() {\r\n if (this.isRunning()) {\r\n this.stopSelected();\r\n } else if (this.isStopped()) {\r\n this.startSelected();\r\n }\r\n }\r\n\r\n /**\r\n * 启动选中任务\r\n * @param taskId 如果不传则启动 selectedTaskId 指定的任务\r\n */\r\n startSelected(taskId?: string) {\r\n taskId = taskId?.trim() || this.selectedRow()?.spec?.id;\r\n if (!taskId) return;\r\n // const spec = this.selectedRow()?.spec;\r\n // if (!spec) return;\r\n this.api.start(taskId).subscribe();\r\n }\r\n\r\n /**\r\n * 停止选中任务\r\n * @param taskId 如果不传则停止 selectedTaskId 指定的任务\r\n */\r\n stopSelected(taskId?: string) {\r\n taskId = taskId?.trim() || this.selectedTaskId();\r\n if (!taskId) return;\r\n // 取当前 runtime(必须要有 runId/projectId 才能工程化维护 runningCount) \r\n const curRt = this.getRuntimeSignal(taskId);\r\n if (curRt) {\r\n // 先置 stopping(保留 pid/startedAt/runId/projectId)\r\n this.runtimeStore.setRuntime({ ...curRt, status: 'stopping' });\r\n }\r\n\r\n this.api.stop(taskId).subscribe({\r\n next: () => { },\r\n error: () => {\r\n // 回滚:如果乐观置了 stopping,则恢复为 running(前提:原来确实在 running)\r\n if (curRt && curRt.status === 'running') {\r\n this.runtimeStore.setRuntime(curRt);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /* ---------------- 给 popover 用 ---------------- */\r\n\r\n rowsViewOf(projectId: string): Signal<TaskRow[]> {\r\n return computed(() => {\r\n const pid = projectId?.trim();\r\n if (!pid) return [];\r\n const rows = this.catalog.rowsOf(pid)();\r\n return rows.map((r) => {\r\n const taskId = r.spec.id;\r\n const st = this.getRuntime(taskId);\r\n return {\r\n ...r,\r\n runtime: { ...(r.runtime ?? {}), status: st.status } as TaskRuntime,\r\n }\r\n });\r\n });\r\n }\r\n\r\n ensureProjectLoaded(projectId: string) {\r\n return this.catalog.ensureLoaded(projectId);\r\n }\r\n\r\n}\r\n"],
5
- "mappings": "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",
6
- "names": ["TaskStreamService", "TaskCatalogService", "TaskStateService"]
7
- }