@simplysm/sd-cli 13.0.99 → 14.0.1

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 (409) hide show
  1. package/dist/commands/build.js +29 -19
  2. package/dist/commands/build.js.map +1 -6
  3. package/dist/commands/check.d.ts +1 -0
  4. package/dist/commands/check.d.ts.map +1 -1
  5. package/dist/commands/check.js +130 -115
  6. package/dist/commands/check.js.map +1 -6
  7. package/dist/commands/dev.d.ts +6 -7
  8. package/dist/commands/dev.d.ts.map +1 -1
  9. package/dist/commands/dev.js +24 -14
  10. package/dist/commands/dev.js.map +1 -6
  11. package/dist/commands/lint.d.ts +1 -1
  12. package/dist/commands/lint.js +158 -116
  13. package/dist/commands/lint.js.map +1 -6
  14. package/dist/commands/publish.d.ts.map +1 -1
  15. package/dist/commands/publish.js +637 -510
  16. package/dist/commands/publish.js.map +1 -6
  17. package/dist/commands/replace-deps.js +12 -12
  18. package/dist/commands/replace-deps.js.map +1 -6
  19. package/dist/commands/typecheck.d.ts +5 -30
  20. package/dist/commands/typecheck.d.ts.map +1 -1
  21. package/dist/commands/typecheck.js +144 -207
  22. package/dist/commands/typecheck.js.map +1 -6
  23. package/dist/commands/watch.d.ts +6 -4
  24. package/dist/commands/watch.d.ts.map +1 -1
  25. package/dist/commands/watch.js +25 -16
  26. package/dist/commands/watch.js.map +1 -6
  27. package/dist/engines/NgtscEngine.d.ts +47 -0
  28. package/dist/engines/NgtscEngine.d.ts.map +1 -0
  29. package/dist/engines/NgtscEngine.js +151 -0
  30. package/dist/engines/NgtscEngine.js.map +1 -0
  31. package/dist/engines/ServerEsbuildEngine.d.ts +47 -0
  32. package/dist/engines/ServerEsbuildEngine.d.ts.map +1 -0
  33. package/dist/engines/ServerEsbuildEngine.js +159 -0
  34. package/dist/engines/ServerEsbuildEngine.js.map +1 -0
  35. package/dist/engines/TscEngine.d.ts +47 -0
  36. package/dist/engines/TscEngine.d.ts.map +1 -0
  37. package/dist/engines/TscEngine.js +153 -0
  38. package/dist/engines/TscEngine.js.map +1 -0
  39. package/dist/engines/ViteEngine.d.ts +49 -0
  40. package/dist/engines/ViteEngine.d.ts.map +1 -0
  41. package/dist/engines/ViteEngine.js +161 -0
  42. package/dist/engines/ViteEngine.js.map +1 -0
  43. package/dist/engines/index.d.ts +26 -0
  44. package/dist/engines/index.d.ts.map +1 -0
  45. package/dist/engines/index.js +30 -0
  46. package/dist/engines/index.js.map +1 -0
  47. package/dist/engines/types.d.ts +77 -0
  48. package/dist/engines/types.d.ts.map +1 -0
  49. package/dist/engines/types.js +2 -0
  50. package/dist/engines/types.js.map +1 -0
  51. package/dist/index.d.ts +0 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +2 -2
  54. package/dist/index.js.map +1 -6
  55. package/dist/infra/ResultCollector.d.ts +1 -1
  56. package/dist/infra/ResultCollector.d.ts.map +1 -1
  57. package/dist/infra/ResultCollector.js +30 -27
  58. package/dist/infra/ResultCollector.js.map +1 -6
  59. package/dist/infra/SignalHandler.js +45 -42
  60. package/dist/infra/SignalHandler.js.map +1 -6
  61. package/dist/infra/WorkerManager.js +56 -53
  62. package/dist/infra/WorkerManager.js.map +1 -6
  63. package/dist/orchestrators/BuildOrchestrator.d.ts +33 -1
  64. package/dist/orchestrators/BuildOrchestrator.d.ts.map +1 -1
  65. package/dist/orchestrators/BuildOrchestrator.js +314 -309
  66. package/dist/orchestrators/BuildOrchestrator.js.map +1 -6
  67. package/dist/orchestrators/DevWatchOrchestrator.d.ts +60 -0
  68. package/dist/orchestrators/DevWatchOrchestrator.d.ts.map +1 -0
  69. package/dist/orchestrators/DevWatchOrchestrator.js +465 -0
  70. package/dist/orchestrators/DevWatchOrchestrator.js.map +1 -0
  71. package/dist/sd-cli-entry.d.ts.map +1 -1
  72. package/dist/sd-cli-entry.js +190 -266
  73. package/dist/sd-cli-entry.js.map +1 -6
  74. package/dist/sd-cli.js +77 -49
  75. package/dist/sd-cli.js.map +1 -6
  76. package/dist/sd-config.types.d.ts +2 -0
  77. package/dist/sd-config.types.d.ts.map +1 -1
  78. package/dist/sd-config.types.js +2 -1
  79. package/dist/sd-config.types.js.map +1 -6
  80. package/dist/utils/angular-build.d.ts +77 -0
  81. package/dist/utils/angular-build.d.ts.map +1 -0
  82. package/dist/utils/angular-build.js +84 -0
  83. package/dist/utils/angular-build.js.map +1 -0
  84. package/dist/utils/build-env.js +9 -9
  85. package/dist/utils/build-env.js.map +1 -6
  86. package/dist/utils/concurrency.d.ts +15 -0
  87. package/dist/utils/concurrency.d.ts.map +1 -0
  88. package/dist/utils/concurrency.js +38 -0
  89. package/dist/utils/concurrency.js.map +1 -0
  90. package/dist/utils/copy-public.js +104 -87
  91. package/dist/utils/copy-public.js.map +1 -6
  92. package/dist/utils/copy-src.js +49 -35
  93. package/dist/utils/copy-src.js.map +1 -6
  94. package/dist/utils/esbuild-config.d.ts +0 -29
  95. package/dist/utils/esbuild-config.d.ts.map +1 -1
  96. package/dist/utils/esbuild-config.js +151 -218
  97. package/dist/utils/esbuild-config.js.map +1 -6
  98. package/dist/utils/ngtsc-build-core.d.ts +49 -0
  99. package/dist/utils/ngtsc-build-core.d.ts.map +1 -0
  100. package/dist/utils/ngtsc-build-core.js +250 -0
  101. package/dist/utils/ngtsc-build-core.js.map +1 -0
  102. package/dist/utils/output-path-rewriter.d.ts +23 -0
  103. package/dist/utils/output-path-rewriter.d.ts.map +1 -0
  104. package/dist/utils/output-path-rewriter.js +74 -0
  105. package/dist/utils/output-path-rewriter.js.map +1 -0
  106. package/dist/utils/output-utils.js +55 -40
  107. package/dist/utils/output-utils.js.map +1 -6
  108. package/dist/utils/package-utils.d.ts +8 -0
  109. package/dist/utils/package-utils.d.ts.map +1 -1
  110. package/dist/utils/package-utils.js +103 -73
  111. package/dist/utils/package-utils.js.map +1 -6
  112. package/dist/utils/rebuild-manager.js +41 -44
  113. package/dist/utils/rebuild-manager.js.map +1 -6
  114. package/dist/utils/replace-deps.js +283 -184
  115. package/dist/utils/replace-deps.js.map +1 -6
  116. package/dist/utils/scss-compiler.d.ts +10 -0
  117. package/dist/utils/scss-compiler.d.ts.map +1 -0
  118. package/dist/utils/scss-compiler.js +36 -0
  119. package/dist/utils/scss-compiler.js.map +1 -0
  120. package/dist/utils/sd-config.js +29 -19
  121. package/dist/utils/sd-config.js.map +1 -6
  122. package/dist/utils/tsc-build.d.ts +36 -0
  123. package/dist/utils/tsc-build.d.ts.map +1 -0
  124. package/dist/utils/tsc-build.js +130 -0
  125. package/dist/utils/tsc-build.js.map +1 -0
  126. package/dist/utils/tsconfig.d.ts +7 -26
  127. package/dist/utils/tsconfig.d.ts.map +1 -1
  128. package/dist/utils/tsconfig.js +39 -64
  129. package/dist/utils/tsconfig.js.map +1 -6
  130. package/dist/utils/typecheck-non-package.d.ts +18 -0
  131. package/dist/utils/typecheck-non-package.d.ts.map +1 -0
  132. package/dist/utils/typecheck-non-package.js +64 -0
  133. package/dist/utils/typecheck-non-package.js.map +1 -0
  134. package/dist/utils/typecheck-serialization.js +58 -40
  135. package/dist/utils/typecheck-serialization.js.map +1 -6
  136. package/dist/utils/worker-events.js +48 -40
  137. package/dist/utils/worker-events.js.map +1 -6
  138. package/dist/utils/worker-utils.js +48 -28
  139. package/dist/utils/worker-utils.js.map +1 -6
  140. package/dist/vitest-plugin.d.ts +9 -0
  141. package/dist/vitest-plugin.d.ts.map +1 -0
  142. package/dist/vitest-plugin.js +85 -0
  143. package/dist/vitest-plugin.js.map +1 -0
  144. package/dist/workers/library-build.worker.d.ts +54 -0
  145. package/dist/workers/library-build.worker.d.ts.map +1 -0
  146. package/dist/workers/library-build.worker.js +97 -0
  147. package/dist/workers/library-build.worker.js.map +1 -0
  148. package/dist/workers/lint.worker.js +9 -6
  149. package/dist/workers/lint.worker.js.map +1 -6
  150. package/dist/workers/ngtsc-build.worker.d.ts +23 -0
  151. package/dist/workers/ngtsc-build.worker.d.ts.map +1 -0
  152. package/dist/workers/ngtsc-build.worker.js +98 -0
  153. package/dist/workers/ngtsc-build.worker.js.map +1 -0
  154. package/dist/workers/{server.worker.d.ts → server-build.worker.d.ts} +39 -29
  155. package/dist/workers/server-build.worker.d.ts.map +1 -0
  156. package/dist/workers/server-build.worker.js +399 -0
  157. package/dist/workers/server-build.worker.js.map +1 -0
  158. package/dist/workers/server-runtime.worker.d.ts +3 -2
  159. package/dist/workers/server-runtime.worker.d.ts.map +1 -1
  160. package/dist/workers/server-runtime.worker.js +100 -95
  161. package/dist/workers/server-runtime.worker.js.map +1 -6
  162. package/dist/workers/vite-build.worker.d.ts +56 -0
  163. package/dist/workers/vite-build.worker.d.ts.map +1 -0
  164. package/dist/workers/vite-build.worker.js +167 -0
  165. package/dist/workers/vite-build.worker.js.map +1 -0
  166. package/package.json +10 -16
  167. package/src/commands/check.ts +21 -3
  168. package/src/commands/dev.ts +10 -8
  169. package/src/commands/lint.ts +1 -1
  170. package/src/commands/publish.ts +4 -0
  171. package/src/commands/typecheck.ts +89 -256
  172. package/src/commands/watch.ts +9 -8
  173. package/src/engines/NgtscEngine.ts +190 -0
  174. package/src/engines/ServerEsbuildEngine.ts +195 -0
  175. package/src/engines/TscEngine.ts +189 -0
  176. package/src/engines/ViteEngine.ts +203 -0
  177. package/src/engines/index.ts +49 -0
  178. package/src/engines/types.ts +79 -0
  179. package/src/index.ts +0 -3
  180. package/src/infra/ResultCollector.ts +1 -1
  181. package/src/orchestrators/BuildOrchestrator.ts +87 -157
  182. package/src/orchestrators/DevWatchOrchestrator.ts +573 -0
  183. package/src/sd-cli-entry.ts +13 -116
  184. package/src/sd-config.types.ts +2 -0
  185. package/src/utils/angular-build.ts +157 -0
  186. package/src/utils/concurrency.ts +43 -0
  187. package/src/utils/esbuild-config.ts +1 -122
  188. package/src/utils/ngtsc-build-core.ts +379 -0
  189. package/src/utils/output-path-rewriter.ts +82 -0
  190. package/src/utils/package-utils.ts +20 -0
  191. package/src/utils/scss-compiler.ts +58 -0
  192. package/src/utils/tsc-build.ts +175 -0
  193. package/src/utils/tsconfig.ts +27 -95
  194. package/src/utils/typecheck-non-package.ts +87 -0
  195. package/src/vitest-plugin.ts +118 -0
  196. package/src/workers/library-build.worker.ts +153 -0
  197. package/src/workers/ngtsc-build.worker.ts +146 -0
  198. package/src/workers/server-build.worker.ts +565 -0
  199. package/src/workers/server-runtime.worker.ts +17 -26
  200. package/src/workers/vite-build.worker.ts +252 -0
  201. package/tests/commands/check.spec.ts +276 -0
  202. package/tests/commands/dev.spec.ts +53 -0
  203. package/tests/commands/lint.spec.ts +243 -0
  204. package/tests/commands/publish.spec.ts +1159 -0
  205. package/tests/commands/typecheck.spec.ts +294 -0
  206. package/tests/commands/watch.spec.ts +53 -0
  207. package/tests/engines/engine-selection.spec.ts +247 -0
  208. package/tests/engines/ngtsc-engine.spec.ts +274 -0
  209. package/tests/engines/server-esbuild-engine.spec.ts +256 -0
  210. package/tests/engines/tsc-engine.spec.ts +213 -0
  211. package/tests/engines/vite-engine.spec.ts +358 -0
  212. package/tests/infra/result-collector.spec.ts +46 -0
  213. package/tests/infra/signal-handler.spec.ts +32 -0
  214. package/tests/infra/worker-manager.spec.ts +63 -0
  215. package/tests/orchestrators/build-orchestrator.spec.ts +772 -0
  216. package/tests/orchestrators/dev-watch-orchestrator.spec.ts +1173 -0
  217. package/tests/sd-cli-entry.spec.ts +49 -0
  218. package/tests/utils/angular-build.spec.ts +251 -0
  219. package/tests/utils/build-env.spec.ts +33 -0
  220. package/tests/utils/concurrency.spec.ts +65 -0
  221. package/tests/utils/copy-src.spec.ts +144 -0
  222. package/tests/utils/esbuild-config.spec.ts +186 -0
  223. package/tests/utils/external-modules.spec.ts +161 -0
  224. package/tests/utils/ngtsc-scss-refactor.spec.ts +66 -0
  225. package/tests/utils/output-path-rewriter.spec.ts +165 -0
  226. package/tests/utils/output-utils.spec.ts +104 -0
  227. package/tests/utils/package-utils.spec.ts +52 -0
  228. package/tests/utils/rebuild-manager.spec.ts +30 -27
  229. package/tests/utils/replace-deps.spec.ts +69 -0
  230. package/tests/utils/scss-compiler.spec.ts +131 -0
  231. package/tests/utils/sd-config.spec.ts +77 -0
  232. package/tests/utils/tsc-build.spec.ts +358 -0
  233. package/tests/utils/tsconfig-angular.spec.ts +71 -0
  234. package/tests/utils/typecheck-non-package.spec.ts +120 -0
  235. package/tests/utils/worker-events.spec.ts +155 -0
  236. package/tests/utils/worker-utils.spec.ts +43 -0
  237. package/tests/vitest-plugin-cwd.spec.ts +68 -0
  238. package/tests/vitest-plugin.spec.ts +103 -0
  239. package/tests/workers/library-build-worker.spec.ts +258 -0
  240. package/tests/workers/ngtsc-build-worker.spec.ts +187 -0
  241. package/tests/workers/server-build-worker.spec.ts +566 -0
  242. package/tests/workers/server-runtime-worker.spec.ts +251 -0
  243. package/README.md +0 -295
  244. package/dist/builders/BaseBuilder.d.ts +0 -88
  245. package/dist/builders/BaseBuilder.d.ts.map +0 -1
  246. package/dist/builders/BaseBuilder.js +0 -142
  247. package/dist/builders/BaseBuilder.js.map +0 -6
  248. package/dist/builders/DtsBuilder.d.ts +0 -22
  249. package/dist/builders/DtsBuilder.d.ts.map +0 -1
  250. package/dist/builders/DtsBuilder.js +0 -72
  251. package/dist/builders/DtsBuilder.js.map +0 -6
  252. package/dist/builders/LibraryBuilder.d.ts +0 -22
  253. package/dist/builders/LibraryBuilder.d.ts.map +0 -1
  254. package/dist/builders/LibraryBuilder.js +0 -85
  255. package/dist/builders/LibraryBuilder.js.map +0 -6
  256. package/dist/builders/types.d.ts +0 -55
  257. package/dist/builders/types.d.ts.map +0 -1
  258. package/dist/builders/types.js +0 -1
  259. package/dist/builders/types.js.map +0 -6
  260. package/dist/capacitor/capacitor.d.ts +0 -151
  261. package/dist/capacitor/capacitor.d.ts.map +0 -1
  262. package/dist/capacitor/capacitor.js +0 -694
  263. package/dist/capacitor/capacitor.js.map +0 -6
  264. package/dist/commands/device.d.ts +0 -22
  265. package/dist/commands/device.d.ts.map +0 -1
  266. package/dist/commands/device.js +0 -98
  267. package/dist/commands/device.js.map +0 -6
  268. package/dist/commands/init.d.ts +0 -14
  269. package/dist/commands/init.d.ts.map +0 -1
  270. package/dist/commands/init.js +0 -72
  271. package/dist/commands/init.js.map +0 -6
  272. package/dist/electron/electron.d.ts +0 -84
  273. package/dist/electron/electron.d.ts.map +0 -1
  274. package/dist/electron/electron.js +0 -263
  275. package/dist/electron/electron.js.map +0 -6
  276. package/dist/orchestrators/DevOrchestrator.d.ts +0 -83
  277. package/dist/orchestrators/DevOrchestrator.d.ts.map +0 -1
  278. package/dist/orchestrators/DevOrchestrator.js +0 -540
  279. package/dist/orchestrators/DevOrchestrator.js.map +0 -6
  280. package/dist/orchestrators/WatchOrchestrator.d.ts +0 -57
  281. package/dist/orchestrators/WatchOrchestrator.d.ts.map +0 -1
  282. package/dist/orchestrators/WatchOrchestrator.js +0 -199
  283. package/dist/orchestrators/WatchOrchestrator.js.map +0 -6
  284. package/dist/utils/tailwind-config-deps.d.ts +0 -8
  285. package/dist/utils/tailwind-config-deps.d.ts.map +0 -1
  286. package/dist/utils/tailwind-config-deps.js +0 -82
  287. package/dist/utils/tailwind-config-deps.js.map +0 -6
  288. package/dist/utils/template.d.ts +0 -14
  289. package/dist/utils/template.d.ts.map +0 -1
  290. package/dist/utils/template.js +0 -33
  291. package/dist/utils/template.js.map +0 -6
  292. package/dist/utils/vite-config.d.ts +0 -35
  293. package/dist/utils/vite-config.d.ts.map +0 -1
  294. package/dist/utils/vite-config.js +0 -259
  295. package/dist/utils/vite-config.js.map +0 -6
  296. package/dist/workers/client.worker.d.ts +0 -83
  297. package/dist/workers/client.worker.d.ts.map +0 -1
  298. package/dist/workers/client.worker.js +0 -111
  299. package/dist/workers/client.worker.js.map +0 -6
  300. package/dist/workers/dts.worker.d.ts +0 -75
  301. package/dist/workers/dts.worker.d.ts.map +0 -1
  302. package/dist/workers/dts.worker.js +0 -270
  303. package/dist/workers/dts.worker.js.map +0 -6
  304. package/dist/workers/library.worker.d.ts +0 -75
  305. package/dist/workers/library.worker.d.ts.map +0 -1
  306. package/dist/workers/library.worker.js +0 -166
  307. package/dist/workers/library.worker.js.map +0 -6
  308. package/dist/workers/server.worker.d.ts.map +0 -1
  309. package/dist/workers/server.worker.js +0 -482
  310. package/dist/workers/server.worker.js.map +0 -6
  311. package/src/builders/BaseBuilder.ts +0 -218
  312. package/src/builders/DtsBuilder.ts +0 -92
  313. package/src/builders/LibraryBuilder.ts +0 -110
  314. package/src/builders/types.ts +0 -60
  315. package/src/capacitor/capacitor.ts +0 -931
  316. package/src/commands/device.ts +0 -140
  317. package/src/commands/init.ts +0 -113
  318. package/src/electron/electron.ts +0 -362
  319. package/src/orchestrators/DevOrchestrator.ts +0 -744
  320. package/src/orchestrators/WatchOrchestrator.ts +0 -277
  321. package/src/utils/tailwind-config-deps.ts +0 -98
  322. package/src/utils/template.ts +0 -56
  323. package/src/utils/vite-config.ts +0 -390
  324. package/src/workers/client.worker.ts +0 -250
  325. package/src/workers/dts.worker.ts +0 -453
  326. package/src/workers/library.worker.ts +0 -316
  327. package/src/workers/server.worker.ts +0 -734
  328. package/templates/init/.gitignore.hbs +0 -34
  329. package/templates/init/.npmrc.hbs +0 -1
  330. package/templates/init/.prettierignore +0 -1
  331. package/templates/init/.prettierrc.yaml +0 -12
  332. package/templates/init/eslint.config.ts +0 -15
  333. package/templates/init/mise.toml +0 -3
  334. package/templates/init/package.json.hbs +0 -32
  335. package/templates/init/packages/client-admin/index.html.hbs +0 -144
  336. package/templates/init/packages/client-admin/package.json.hbs +0 -27
  337. package/templates/init/packages/client-admin/public/assets/logo-landscape.png +0 -0
  338. package/templates/init/packages/client-admin/public/assets/logo.png +0 -0
  339. package/templates/init/packages/client-admin/public/favicon.ico +0 -0
  340. package/templates/init/packages/client-admin/src/App.tsx +0 -42
  341. package/templates/init/packages/client-admin/src/dev/DevDialog.tsx +0 -34
  342. package/templates/init/packages/client-admin/src/events/AuthChangeEvent.ts +0 -3
  343. package/templates/init/packages/client-admin/src/main.css +0 -4
  344. package/templates/init/packages/client-admin/src/main.tsx.hbs +0 -146
  345. package/templates/init/packages/client-admin/src/providers/AppServiceProvider.tsx.hbs +0 -103
  346. package/templates/init/packages/client-admin/src/providers/AppStructureProvider.tsx +0 -84
  347. package/templates/init/packages/client-admin/src/providers/AuthProvider.tsx.hbs +0 -96
  348. package/templates/init/packages/client-admin/src/providers/configureSharedData.ts.hbs +0 -67
  349. package/templates/init/packages/client-admin/src/views/auth/LoginView.tsx +0 -132
  350. package/templates/init/packages/client-admin/src/views/home/HomeView.tsx +0 -108
  351. package/templates/init/packages/client-admin/src/views/home/base/employee/EmployeeDetail.tsx.hbs +0 -243
  352. package/templates/init/packages/client-admin/src/views/home/base/employee/EmployeeSheet.tsx.hbs +0 -271
  353. package/templates/init/packages/client-admin/src/views/home/base/role-permission/RoleDetail.tsx.hbs +0 -146
  354. package/templates/init/packages/client-admin/src/views/home/base/role-permission/RolePermissionDetail.tsx.hbs +0 -121
  355. package/templates/init/packages/client-admin/src/views/home/base/role-permission/RolePermissionView.tsx +0 -52
  356. package/templates/init/packages/client-admin/src/views/home/base/role-permission/RoleSheet.tsx.hbs +0 -125
  357. package/templates/init/packages/client-admin/src/views/home/main/MainView.tsx.hbs +0 -13
  358. package/templates/init/packages/client-admin/src/views/home/my-info/MyInfoDetail.tsx.hbs +0 -241
  359. package/templates/init/packages/client-admin/src/views/home/system/system-log/SystemLogSheet.tsx.hbs +0 -169
  360. package/templates/init/packages/client-admin/src/views/not-found/NotFoundView.tsx +0 -15
  361. package/templates/init/packages/client-admin/tailwind.config.ts +0 -10
  362. package/templates/init/packages/db-main/package.json.hbs +0 -13
  363. package/templates/init/packages/db-main/src/MainDbContext.ts +0 -22
  364. package/templates/init/packages/db-main/src/dataLogExt.ts +0 -127
  365. package/templates/init/packages/db-main/src/index.ts +0 -14
  366. package/templates/init/packages/db-main/src/tables/base/Employee.ts +0 -24
  367. package/templates/init/packages/db-main/src/tables/base/EmployeeConfig.ts +0 -13
  368. package/templates/init/packages/db-main/src/tables/base/Role.ts +0 -9
  369. package/templates/init/packages/db-main/src/tables/base/RolePermission.ts +0 -13
  370. package/templates/init/packages/db-main/src/tables/system/_DataLog.ts +0 -19
  371. package/templates/init/packages/db-main/src/tables/system/_Log.ts +0 -16
  372. package/templates/init/packages/server/package.json.hbs +0 -20
  373. package/templates/init/packages/server/public-dev/dev//354/264/210/352/270/260/355/231/224.xlsx +0 -0
  374. package/templates/init/packages/server/src/index.ts +0 -4
  375. package/templates/init/packages/server/src/main.ts.hbs +0 -34
  376. package/templates/init/packages/server/src/services/AuthService.ts.hbs +0 -171
  377. package/templates/init/packages/server/src/services/DevService.ts.hbs +0 -94
  378. package/templates/init/packages/server/src/services/EmployeeService.ts.hbs +0 -122
  379. package/templates/init/packages/server/src/services/RoleService.ts.hbs +0 -59
  380. package/templates/init/pnpm-workspace.yaml +0 -15
  381. package/templates/init/sd.config.ts.hbs +0 -48
  382. package/templates/init/tsconfig.json.hbs +0 -39
  383. package/templates/init/vitest.config.ts +0 -36
  384. package/tests/capacitor-exclude.spec.ts +0 -78
  385. package/tests/capacitor.spec.ts +0 -49
  386. package/tests/copy-src.spec.ts +0 -50
  387. package/tests/electron-exclude.spec.ts +0 -61
  388. package/tests/get-compiler-options-for-package.spec.ts +0 -80
  389. package/tests/get-package-source-files.spec.ts +0 -139
  390. package/tests/get-types-from-package-json.spec.ts +0 -92
  391. package/tests/infra/ResultCollector.spec.ts +0 -30
  392. package/tests/infra/SignalHandler.spec.ts +0 -38
  393. package/tests/infra/WorkerManager.spec.ts +0 -63
  394. package/tests/load-ignore-patterns.spec.ts +0 -163
  395. package/tests/load-sd-config.spec.ts +0 -100
  396. package/tests/package-utils.spec.ts +0 -188
  397. package/tests/parse-root-tsconfig.spec.ts +0 -89
  398. package/tests/publish-config-narrowing.spec.ts +0 -20
  399. package/tests/replace-deps.spec.ts +0 -308
  400. package/tests/run-lint.spec.ts +0 -366
  401. package/tests/run-typecheck.spec.ts +0 -544
  402. package/tests/run-watch.spec.ts +0 -76
  403. package/tests/sd-cli.spec.ts +0 -265
  404. package/tests/sd-public-dev-plugin-mime.spec.ts +0 -19
  405. package/tests/tailwind-config-deps.spec.ts +0 -30
  406. package/tests/template.spec.ts +0 -70
  407. package/tests/vite-config-exclude.spec.ts +0 -35
  408. package/tests/vite-config-outdir.spec.ts +0 -38
  409. package/tests/write-changed-output-files.spec.ts +0 -97
@@ -0,0 +1,573 @@
1
+ import path from "path";
2
+ import { spawn, type ChildProcess } from "child_process";
3
+ import { consola } from "consola";
4
+ import { Worker, type WorkerProxy } from "@simplysm/core-node";
5
+ import { FsWatcher } from "@simplysm/core-node";
6
+ import { err as errNs } from "@simplysm/core-common";
7
+ import type {
8
+ BuildTarget,
9
+ SdBuildPackageConfig,
10
+ SdClientPackageConfig,
11
+ SdConfig,
12
+ SdScriptsPackageConfig,
13
+ SdServerPackageConfig,
14
+ } from "../sd-config.types";
15
+ import { loadSdConfig } from "../utils/sd-config";
16
+ import { filterPackagesByTargets, validateTargets } from "../utils/package-utils";
17
+ import { getVersion } from "../utils/build-env";
18
+ import { watchReplaceDeps, type WatchReplaceDepResult } from "../utils/replace-deps";
19
+ import { printErrors, printServers } from "../utils/output-utils";
20
+ import { RebuildManager } from "../utils/rebuild-manager";
21
+ import { ResultCollector } from "../infra/ResultCollector";
22
+ import { SignalHandler } from "../infra/SignalHandler";
23
+ import { createBuildEngine, type BuildEngine, type BuildPackageInfo, type ClientPackageInfo, type ServerPackageInfo } from "../engines/index";
24
+ import { watchCopySrcFiles } from "../utils/copy-src";
25
+ import type * as ServerRuntimeWorkerModule from "../workers/server-runtime.worker";
26
+ import type { ServerReadyEventData, ErrorEventData } from "../utils/worker-events";
27
+
28
+ /**
29
+ * Orchestrator mode
30
+ */
31
+ export type OrchestratorMode = "watch" | "dev";
32
+
33
+ /**
34
+ * DevWatchOrchestrator options
35
+ */
36
+ export interface DevWatchOrchestratorOptions {
37
+ mode: OrchestratorMode;
38
+ targets: string[];
39
+ options: string[];
40
+ }
41
+
42
+ /**
43
+ * Unified Orchestrator for watch and dev modes.
44
+ *
45
+ * - watch: Library(js+dts) + Scripts(watch hook) + copySrc + replaceDeps
46
+ * - dev: Server(js+runtime) + client-ready(skip) + replaceDeps
47
+ */
48
+ export class DevWatchOrchestrator {
49
+ private readonly _cwd: string;
50
+ private readonly _options: DevWatchOrchestratorOptions;
51
+ private readonly _logger;
52
+
53
+ // Infrastructure
54
+ private _resultCollector!: ResultCollector;
55
+ private _signalHandler!: SignalHandler;
56
+ private _rebuildManager!: RebuildManager;
57
+
58
+ // Engines
59
+ private readonly _libraryEngines: BuildEngine[] = [];
60
+ private readonly _serverEngines = new Map<string, BuildEngine>();
61
+
62
+ // Package info
63
+ private readonly _libraryPackages: BuildPackageInfo[] = [];
64
+ private readonly _serverPackages: Array<{ name: string; dir: string; config: SdServerPackageConfig }> = [];
65
+ private readonly _watchHookPackages: Array<{ name: string; dir: string; config: SdScriptsPackageConfig | SdBuildPackageConfig }> = [];
66
+ private readonly _clientPackages: Array<{ name: string; dir: string; config: SdClientPackageConfig }> = [];
67
+ private readonly _clientEngines = new Map<string, BuildEngine>();
68
+ private readonly _serverClientsMap = new Map<string, string[]>();
69
+
70
+ // Dev mode: runtime workers
71
+ private _baseEnv: { VER: string; DEV: string } | undefined;
72
+ private readonly _serverRuntimeWorkers = new Map<string, WorkerProxy<typeof ServerRuntimeWorkerModule>>();
73
+ private _printServersTimer: ReturnType<typeof setTimeout> | undefined;
74
+
75
+ // Watchers
76
+ private _copySrcWatchers: FsWatcher[] = [];
77
+ private readonly _watchHookWatchers: FsWatcher[] = [];
78
+ private readonly _watchHookChildren = new Map<string, ChildProcess>();
79
+ private _replaceDepWatcher: WatchReplaceDepResult | undefined;
80
+
81
+ private _hasPackages = false;
82
+
83
+ constructor(options: DevWatchOrchestratorOptions) {
84
+ this._cwd = process.cwd();
85
+ this._options = options;
86
+ this._logger = consola.withTag(`sd:cli:${options.mode}`);
87
+ }
88
+
89
+ async initialize(): Promise<void> {
90
+ this._logger.debug(`${this._options.mode} start`, { targets: this._options.targets });
91
+
92
+ // Load sd.config.ts
93
+ let sdConfig: SdConfig;
94
+ try {
95
+ sdConfig = await loadSdConfig({
96
+ cwd: this._cwd,
97
+ dev: true,
98
+ options: this._options.options,
99
+ });
100
+ this._logger.debug("sd.config.ts loaded");
101
+ } catch (err) {
102
+ this._logger.error(`Failed to load sd.config.ts: ${err instanceof Error ? err.message : err}`);
103
+ process.exitCode = 1;
104
+ throw err;
105
+ }
106
+
107
+ // Validate targets
108
+ validateTargets(this._options.targets, sdConfig.packages);
109
+
110
+ // Start watch if replaceDeps config exists
111
+ if (sdConfig.replaceDeps != null) {
112
+ this._replaceDepWatcher = await watchReplaceDeps(this._cwd, sdConfig.replaceDeps);
113
+ }
114
+
115
+ // Prepare VER, DEV environment variables for dev mode
116
+ if (this._options.mode === "dev") {
117
+ const version = await getVersion(this._cwd);
118
+ this._baseEnv = { VER: version, DEV: "true" };
119
+ }
120
+
121
+ // Filter by targets
122
+ const allPackages = filterPackagesByTargets(sdConfig.packages, this._options.targets);
123
+
124
+ // Classify packages based on mode
125
+ const isLibraryTarget = (target: string): target is BuildTarget =>
126
+ target === "node" || target === "browser" || target === "neutral";
127
+
128
+ if (this._options.mode === "watch") {
129
+ this._classifyWatchPackages(allPackages, isLibraryTarget);
130
+ } else {
131
+ this._classifyDevPackages(allPackages);
132
+ }
133
+
134
+ // Check if there are packages to process
135
+ const totalPackages = this._libraryPackages.length + this._serverPackages.length + this._watchHookPackages.length + this._clientPackages.length;
136
+ if (totalPackages === 0) {
137
+ const modeLabel = this._options.mode === "watch" ? "watch" : "develop";
138
+ process.stdout.write(`⚠ No packages to ${modeLabel}.\n`);
139
+ return;
140
+ }
141
+
142
+ this._hasPackages = true;
143
+
144
+ // Initialize infrastructure
145
+ this._signalHandler = new SignalHandler();
146
+ this._resultCollector = new ResultCollector();
147
+ this._rebuildManager = new RebuildManager(this._logger);
148
+
149
+ // Batch complete handler
150
+ if (this._options.mode === "watch") {
151
+ this._rebuildManager.on("batchComplete", () => {
152
+ printErrors(this._resultCollector.toMap());
153
+ });
154
+ } else {
155
+ this._rebuildManager.on("batchComplete", () => {
156
+ this._onDevBatchComplete();
157
+ });
158
+ }
159
+
160
+ // Create BuildEngines for library packages (watch mode only)
161
+ for (const pkg of this._libraryPackages) {
162
+ const engine = createBuildEngine(pkg, {
163
+ cwd: this._cwd,
164
+ resultCollector: this._resultCollector,
165
+ rebuildManager: this._rebuildManager,
166
+ });
167
+ this._libraryEngines.push(engine);
168
+ }
169
+
170
+ // Create BuildEngines for server packages
171
+ for (const { name, dir, config } of this._serverPackages) {
172
+ const engineConfig = this._options.mode === "dev"
173
+ ? { ...config, env: { ...this._baseEnv, ...config.env } }
174
+ : config;
175
+
176
+ const engine = createBuildEngine(
177
+ { name, dir, config: engineConfig } as ServerPackageInfo,
178
+ {
179
+ cwd: this._cwd,
180
+ resultCollector: this._resultCollector,
181
+ rebuildManager: this._rebuildManager,
182
+ },
183
+ );
184
+ this._serverEngines.set(name, engine);
185
+ }
186
+
187
+ // Create BuildEngines for client packages (dev mode only, no env)
188
+ for (const { name, dir, config } of this._clientPackages) {
189
+ const engine = createBuildEngine(
190
+ { name, dir, config } as ClientPackageInfo,
191
+ {
192
+ cwd: this._cwd,
193
+ resultCollector: this._resultCollector,
194
+ rebuildManager: this._rebuildManager,
195
+ },
196
+ );
197
+ this._clientEngines.set(name, engine);
198
+ }
199
+ }
200
+
201
+ async start(): Promise<void> {
202
+ if (!this._hasPackages) {
203
+ return;
204
+ }
205
+
206
+ if (this._options.mode === "watch") {
207
+ await this._startWatchMode();
208
+ } else {
209
+ await this._startDevMode();
210
+ }
211
+ }
212
+
213
+ async awaitTermination(): Promise<void> {
214
+ if (!this._hasPackages) {
215
+ return;
216
+ }
217
+ await this._signalHandler.waitForTermination();
218
+ }
219
+
220
+ async shutdown(): Promise<void> {
221
+ if (!this._hasPackages) {
222
+ return;
223
+ }
224
+
225
+ process.stdout.write("⏳ Shutting down...\n");
226
+
227
+ const shutdownTasks: Array<Promise<void>> = [];
228
+
229
+ // Stop all engines
230
+ shutdownTasks.push(...this._libraryEngines.map((e) => e.stop()));
231
+ shutdownTasks.push(...[...this._serverEngines.values()].map((e) => e.stop()));
232
+ shutdownTasks.push(...[...this._clientEngines.values()].map((e) => e.stop()));
233
+
234
+ // Close watchers (watch mode)
235
+ shutdownTasks.push(...this._copySrcWatchers.map((w) => w.close()));
236
+ shutdownTasks.push(...this._watchHookWatchers.map((w) => w.close()));
237
+
238
+ // Kill hook child processes
239
+ for (const child of this._watchHookChildren.values()) {
240
+ if (child.exitCode == null) {
241
+ child.kill();
242
+ }
243
+ }
244
+ this._watchHookChildren.clear();
245
+
246
+ // Terminate runtime workers (dev mode)
247
+ shutdownTasks.push(...[...this._serverRuntimeWorkers.values()].map((w) => w.terminate()));
248
+
249
+ await Promise.all(shutdownTasks);
250
+ this._copySrcWatchers = [];
251
+ this._watchHookWatchers.length = 0;
252
+ this._replaceDepWatcher?.dispose();
253
+
254
+ process.stdout.write("✔ Done\n");
255
+ }
256
+
257
+ // --- Package classification ---
258
+
259
+ private _classifyWatchPackages(
260
+ allPackages: Record<string, any>,
261
+ isLibraryTarget: (target: string) => target is BuildTarget,
262
+ ): void {
263
+ for (const [name, config] of Object.entries(allPackages)) {
264
+ if (isLibraryTarget(config.target)) {
265
+ const pkgDir = path.join(this._cwd, "packages", name);
266
+ const buildConfig = config as SdBuildPackageConfig;
267
+ this._libraryPackages.push({ name, dir: pkgDir, config: buildConfig });
268
+ if (buildConfig.watch != null) {
269
+ this._watchHookPackages.push({ name, dir: pkgDir, config: buildConfig });
270
+ }
271
+ } else if (config.target === "scripts" && config.watch != null) {
272
+ this._watchHookPackages.push({
273
+ name,
274
+ dir: path.join(this._cwd, "packages", name),
275
+ config: config as SdScriptsPackageConfig,
276
+ });
277
+ }
278
+ }
279
+ }
280
+
281
+ private _classifyDevPackages(allPackages: Record<string, any>): void {
282
+ // First pass: collect server names
283
+ const serverNames = new Set<string>();
284
+ for (const [name, config] of Object.entries(allPackages)) {
285
+ if (config.target === "server") {
286
+ serverNames.add(name);
287
+ }
288
+ }
289
+
290
+ // Second pass: classify all packages
291
+ for (const [name, config] of Object.entries(allPackages)) {
292
+ if (config.target === "server") {
293
+ this._serverPackages.push({
294
+ name,
295
+ dir: path.join(this._cwd, "packages", name),
296
+ config: config as SdServerPackageConfig,
297
+ });
298
+ } else if (config.target === "client") {
299
+ this._clientPackages.push({
300
+ name,
301
+ dir: path.join(this._cwd, "packages", name),
302
+ config: config as SdClientPackageConfig,
303
+ });
304
+
305
+ // Build server-client mapping
306
+ if (typeof config.server === "string") {
307
+ if (serverNames.has(config.server)) {
308
+ const clients = this._serverClientsMap.get(config.server) ?? [];
309
+ clients.push(name);
310
+ this._serverClientsMap.set(config.server, clients);
311
+ } else {
312
+ process.stdout.write(
313
+ `⚠ Client "${name}" server "${config.server}" not in dev targets — running as standalone.\n`,
314
+ );
315
+ }
316
+ }
317
+ }
318
+ // Library and scripts packages are excluded from dev mode
319
+ }
320
+ }
321
+
322
+ // --- Watch mode ---
323
+
324
+ private async _startWatchMode(): Promise<void> {
325
+ // Start copySrc watchers for library packages
326
+ for (const pkg of this._libraryPackages) {
327
+ if (pkg.config.copySrc != null && pkg.config.copySrc.length > 0) {
328
+ const watcher = await watchCopySrcFiles(pkg.dir, pkg.config.copySrc);
329
+ this._copySrcWatchers.push(watcher);
330
+ }
331
+ }
332
+
333
+ // Start all engines
334
+ this._logger.start("Running initial build...");
335
+ const watchPromises: Array<Promise<void>> = [];
336
+ watchPromises.push(...this._libraryEngines.map((e) => e.startWatch({ js: true, dts: true })));
337
+
338
+ await Promise.allSettled(watchPromises);
339
+ this._logger.success("Initial build completed");
340
+
341
+ // Print initial build results
342
+ printErrors(this._resultCollector.toMap());
343
+
344
+ // Start watch hook watchers for scripts+watch packages
345
+ for (const pkg of this._watchHookPackages) {
346
+ const watchConfig = pkg.config.watch!;
347
+ const watchTargets = watchConfig.target.map((t) => path.resolve(pkg.dir, t));
348
+
349
+ // Run initial hook
350
+ this._runWatchHookCmd(pkg.name, pkg.dir, watchConfig.cmd, watchConfig.args);
351
+
352
+ // Start watching
353
+ const watcher = await FsWatcher.watch(watchTargets);
354
+ watcher.onChange({ delay: 300 }, () => {
355
+ this._runWatchHookCmd(pkg.name, pkg.dir, watchConfig.cmd, watchConfig.args);
356
+ });
357
+ this._watchHookWatchers.push(watcher);
358
+
359
+ this._logger.success(`Watch hook started: ${pkg.name}`);
360
+ }
361
+ }
362
+
363
+ private _runWatchHookCmd(pkgName: string, cwd: string, cmd: string, args?: string[]): void {
364
+ // Kill previous hook process if still running
365
+ const prev = this._watchHookChildren.get(pkgName);
366
+ if (prev != null && prev.exitCode == null) {
367
+ prev.kill();
368
+ }
369
+
370
+ const child = spawn(cmd, args ?? [], { cwd, stdio: "inherit", shell: true });
371
+ this._watchHookChildren.set(pkgName, child);
372
+
373
+ child.on("error", (err) => {
374
+ this._logger.error(`Watch hook error (${pkgName}): ${err.message}`);
375
+ });
376
+ child.on("close", (code) => {
377
+ if (code !== 0 && code !== null) {
378
+ this._logger.warn(`Watch hook (${pkgName}) exited with code ${String(code)}`);
379
+ }
380
+ });
381
+ }
382
+
383
+ // --- Dev mode ---
384
+
385
+ private async _startDevMode(): Promise<void> {
386
+ // Start client and server engines in parallel
387
+ this._logger.debug("Starting initial build (Promise.allSettled)");
388
+ const initialBuildPromises: Array<{ name: string; promise: Promise<void> }> = [];
389
+
390
+ for (const [name, engine] of this._clientEngines) {
391
+ initialBuildPromises.push({
392
+ name: `${name} (client)`,
393
+ promise: engine.startWatch({ js: true, dts: false }),
394
+ });
395
+ }
396
+
397
+ for (const [name, engine] of this._serverEngines) {
398
+ initialBuildPromises.push({
399
+ name: `${name} (server)`,
400
+ promise: engine.startWatch({ js: true, dts: false }),
401
+ });
402
+ }
403
+
404
+ const initialResults = await Promise.allSettled(
405
+ initialBuildPromises.map((item) => item.promise),
406
+ );
407
+
408
+ initialResults.forEach((result, index) => {
409
+ const taskName = initialBuildPromises[index].name;
410
+ if (result.status === "rejected") {
411
+ this._logger.debug(`[${taskName}] Initial build failed:`, result.reason);
412
+ } else {
413
+ this._logger.debug(`[${taskName}] Initial build completed`);
414
+ }
415
+ });
416
+
417
+ // Register standalone client results in ResultCollector
418
+ for (const { name } of this._clientPackages) {
419
+ const isServerConnected = [...this._serverClientsMap.values()].some(
420
+ (clients) => clients.includes(name),
421
+ );
422
+ if (!isServerConnected) {
423
+ const port = this._getClientPort(name);
424
+ if (port != null) {
425
+ this._resultCollector.add({
426
+ name,
427
+ target: "client",
428
+ type: "server",
429
+ status: "running",
430
+ port,
431
+ });
432
+ }
433
+ }
434
+ }
435
+
436
+ // Start runtimes for successful initial builds
437
+ for (const { name, config } of this._serverPackages) {
438
+ const buildResult = this._resultCollector.get(`${name}:build`);
439
+ if (buildResult?.status === "success") {
440
+ const mainJsPath = path.join(this._cwd, "packages", name, "dist", "main.js");
441
+ const clientPorts = this._collectClientPorts(name);
442
+ try {
443
+ await this._startServerRuntime(name, mainJsPath, { ...this._baseEnv, ...config.env }, clientPorts);
444
+ } catch (err) {
445
+ this._logger.error(`[${name}] Error starting Server Runtime:`, errNs.message(err));
446
+ this._resultCollector.add({
447
+ name,
448
+ target: "server",
449
+ type: "server",
450
+ status: "error",
451
+ message: errNs.message(err),
452
+ });
453
+ }
454
+ }
455
+ }
456
+
457
+ // Print initial results
458
+ printErrors(this._resultCollector.toMap());
459
+ printServers(this._resultCollector.toMap(), this._serverClientsMap);
460
+ }
461
+
462
+ private _onDevBatchComplete(): void {
463
+ const restartPromises: Array<Promise<void>> = [];
464
+ for (const { name, config } of this._serverPackages) {
465
+ const buildResult = this._resultCollector.get(`${name}:build`);
466
+ if (buildResult?.status === "success") {
467
+ const mainJsPath = path.join(this._cwd, "packages", name, "dist", "main.js");
468
+ const clientPorts = this._collectClientPorts(name);
469
+ restartPromises.push(
470
+ this._startServerRuntime(name, mainJsPath, { ...this._baseEnv, ...config.env }, clientPorts)
471
+ .catch((err: unknown) => {
472
+ this._logger.error(`[${name}] Error starting Server Runtime:`, errNs.message(err));
473
+ this._resultCollector.add({
474
+ name,
475
+ target: "server",
476
+ type: "server",
477
+ status: "error",
478
+ message: errNs.message(err),
479
+ });
480
+ }),
481
+ );
482
+ }
483
+ }
484
+ void Promise.all(restartPromises).then(() => {
485
+ printErrors(this._resultCollector.toMap());
486
+ this._schedulePrintServers();
487
+ });
488
+ }
489
+
490
+ private _schedulePrintServers(): void {
491
+ if (this._printServersTimer != null) clearTimeout(this._printServersTimer);
492
+ this._printServersTimer = setTimeout(() => {
493
+ printServers(this._resultCollector.toMap(), this._serverClientsMap);
494
+ }, 300);
495
+ }
496
+
497
+ /** Get port from a client engine (duck-typing for ViteEngine.port) */
498
+ private _getClientPort(name: string): number | undefined {
499
+ const engine = this._clientEngines.get(name) as { port?: number } | undefined;
500
+ return engine?.port;
501
+ }
502
+
503
+ /** Collect client ports for a server's connected clients */
504
+ private _collectClientPorts(serverName: string): Record<string, number> {
505
+ const clientPorts: Record<string, number> = {};
506
+ const connectedClients = this._serverClientsMap.get(serverName) ?? [];
507
+ for (const clientName of connectedClients) {
508
+ const port = this._getClientPort(clientName);
509
+ if (port != null) {
510
+ clientPorts[clientName] = port;
511
+ }
512
+ }
513
+ return clientPorts;
514
+ }
515
+
516
+ private async _startServerRuntime(
517
+ serverName: string,
518
+ mainJsPath: string,
519
+ env?: Record<string, string>,
520
+ clientPorts?: Record<string, number>,
521
+ ): Promise<void> {
522
+ this._logger.debug(`[${serverName}] _startServerRuntime: ${mainJsPath}`);
523
+
524
+ // Terminate existing runtime
525
+ const existingRuntime = this._serverRuntimeWorkers.get(serverName);
526
+ if (existingRuntime != null) {
527
+ this._logger.info(`[${serverName}] Restarting server...`);
528
+ await existingRuntime.terminate();
529
+ }
530
+
531
+ // Create and start new runtime worker
532
+ const runtimeWorkerPath = import.meta.resolve("../workers/server-runtime.worker");
533
+ const runtimeWorker = Worker.create<typeof ServerRuntimeWorkerModule>(runtimeWorkerPath);
534
+ this._serverRuntimeWorkers.set(serverName, runtimeWorker);
535
+
536
+ // Runtime event handlers
537
+ runtimeWorker.on("serverReady", (readyData) => {
538
+ const readyEvent = readyData as ServerReadyEventData;
539
+ this._resultCollector.add({
540
+ name: serverName,
541
+ target: "server",
542
+ type: "server",
543
+ status: "running",
544
+ port: readyEvent.port,
545
+ });
546
+ this._schedulePrintServers();
547
+ });
548
+
549
+ runtimeWorker.on("error", (errorData) => {
550
+ const errorEvent = errorData as ErrorEventData;
551
+ this._resultCollector.add({
552
+ name: serverName,
553
+ target: "server",
554
+ type: "server",
555
+ status: "error",
556
+ message: errorEvent.message,
557
+ });
558
+ });
559
+
560
+ runtimeWorker
561
+ .start({ mainJsPath, clientPorts, env })
562
+ .catch((err: unknown) => {
563
+ this._logger.error(`[${serverName}] Server Runtime Worker crashed:`, errNs.message(err));
564
+ this._resultCollector.add({
565
+ name: serverName,
566
+ target: "server",
567
+ type: "server",
568
+ status: "error",
569
+ message: errNs.message(err),
570
+ });
571
+ });
572
+ }
573
+ }