@simplysm/sd-cli 13.0.100 → 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,195 @@
1
+ import { Worker, type WorkerProxy } from "@simplysm/core-node";
2
+ import { consola } from "consola";
3
+ import type * as ServerBuildWorkerModule from "../workers/server-build.worker";
4
+ import type { BuildResult, ResultCollector } from "../infra/ResultCollector";
5
+ import type { RebuildManager } from "../utils/rebuild-manager";
6
+ import type { BuildEngine, BuildOutput, EngineResult, ServerPackageInfo } from "./types";
7
+
8
+ const logger = consola.withTag("sd:cli:engine:server");
9
+
10
+ /**
11
+ * ServerEsbuildEngine options
12
+ */
13
+ export interface ServerEsbuildEngineOptions {
14
+ cwd: string;
15
+ pkg: ServerPackageInfo;
16
+ /** ResultCollector for watch mode rebuild reporting */
17
+ resultCollector?: ResultCollector;
18
+ /** RebuildManager for watch mode batch coordination */
19
+ rebuildManager?: RebuildManager;
20
+ }
21
+
22
+ /**
23
+ * Esbuild-based build engine for Server packages
24
+ *
25
+ * Wraps a single server-build.worker that combines esbuild (JS bundle)
26
+ * + tsc (typecheck) in one Worker thread.
27
+ */
28
+ export class ServerEsbuildEngine implements BuildEngine {
29
+ private readonly _cwd: string;
30
+ private readonly _pkg: ServerPackageInfo;
31
+ private readonly _resultCollector: ResultCollector | undefined;
32
+ private readonly _rebuildManager: RebuildManager | undefined;
33
+
34
+ private _worker: WorkerProxy<typeof ServerBuildWorkerModule> | undefined;
35
+ private _isWatchMode = false;
36
+
37
+ constructor(options: ServerEsbuildEngineOptions) {
38
+ this._cwd = options.cwd;
39
+ this._pkg = options.pkg;
40
+ this._resultCollector = options.resultCollector;
41
+ this._rebuildManager = options.rebuildManager;
42
+ }
43
+
44
+ /**
45
+ * One-time build (production)
46
+ */
47
+ async run(output: BuildOutput): Promise<EngineResult> {
48
+ this._createWorker();
49
+
50
+ const result = await this._worker!.build({
51
+ name: this._pkg.name,
52
+ cwd: this._cwd,
53
+ pkgDir: this._pkg.dir,
54
+ output,
55
+ env: this._pkg.config.env,
56
+ configs: this._pkg.config.configs,
57
+ externals: this._pkg.config.externals,
58
+ pm2: this._pkg.config.pm2,
59
+ packageManager: this._pkg.config.packageManager,
60
+ });
61
+
62
+ return {
63
+ success: result.js.success && result.dts.success,
64
+ js: {
65
+ success: result.js.success,
66
+ errors: result.js.errors ?? [],
67
+ warnings: result.js.warnings ?? [],
68
+ },
69
+ dts: {
70
+ success: result.dts.success,
71
+ errors: result.dts.errors ?? [],
72
+ warnings: [],
73
+ diagnostics: result.dts.diagnostics,
74
+ },
75
+ };
76
+ }
77
+
78
+ /**
79
+ * Start watch mode
80
+ * Promise resolves when initial build completes.
81
+ */
82
+ async startWatch(output: BuildOutput): Promise<void> {
83
+ this._isWatchMode = true;
84
+ this._createWorker();
85
+
86
+ return new Promise<void>((resolve) => {
87
+ let isInitialBuild = true;
88
+ const workerKey = `${this._pkg.name}:build`;
89
+
90
+ this._worker!.on("buildStart", () => {
91
+ if (!isInitialBuild && this._rebuildManager != null) {
92
+ this._rebuildManager.registerBuild(workerKey, `${this._pkg.name} (server)`);
93
+ }
94
+ });
95
+
96
+ this._worker!.on("build", (data) => {
97
+ const event = data;
98
+
99
+ if (event.js.warnings != null && event.js.warnings.length > 0) {
100
+ logger.warn(`${this._pkg.name}: ${event.js.warnings.join(", ")}`);
101
+ }
102
+
103
+ // Report JS result
104
+ const buildResult: BuildResult = {
105
+ name: this._pkg.name,
106
+ target: "server",
107
+ type: "build",
108
+ status: event.js.success ? "success" : "error",
109
+ message: event.js.errors?.join("\n"),
110
+ };
111
+ this._resultCollector?.add(buildResult);
112
+
113
+ // Report DTS result
114
+ const dtsResult: BuildResult = {
115
+ name: this._pkg.name,
116
+ target: "server",
117
+ type: "dts",
118
+ status: event.dts.success ? "success" : "error",
119
+ message: event.dts.errors?.join("\n"),
120
+ };
121
+ this._resultCollector?.add(dtsResult);
122
+
123
+ if (isInitialBuild) {
124
+ isInitialBuild = false;
125
+ resolve();
126
+ }
127
+ });
128
+
129
+ this._worker!.on("error", (data) => {
130
+ const event = data as { message: string };
131
+ const result: BuildResult = {
132
+ name: this._pkg.name,
133
+ target: "server",
134
+ type: "build",
135
+ status: "error",
136
+ message: event.message,
137
+ };
138
+ this._resultCollector?.add(result);
139
+
140
+ if (isInitialBuild) {
141
+ isInitialBuild = false;
142
+ resolve();
143
+ }
144
+ });
145
+
146
+ this._worker!
147
+ .startWatch({
148
+ name: this._pkg.name,
149
+ cwd: this._cwd,
150
+ pkgDir: this._pkg.dir,
151
+ output,
152
+ env: this._pkg.config.env,
153
+ configs: this._pkg.config.configs,
154
+ externals: this._pkg.config.externals,
155
+ })
156
+ .catch(() => {
157
+ if (isInitialBuild) {
158
+ isInitialBuild = false;
159
+ resolve();
160
+ }
161
+ });
162
+ });
163
+ }
164
+
165
+ /**
166
+ * Stop engine and clean up resources
167
+ */
168
+ async stop(): Promise<void> {
169
+ const shutdownTimeout = 3000;
170
+
171
+ if (this._isWatchMode && this._worker != null) {
172
+ try {
173
+ await Promise.race([
174
+ this._worker.stopWatch(),
175
+ new Promise<void>((resolve) => setTimeout(resolve, shutdownTimeout)),
176
+ ]);
177
+ } catch {
178
+ // Continue even if stopWatch fails
179
+ }
180
+ }
181
+
182
+ if (this._worker != null) {
183
+ await this._worker.terminate();
184
+ this._worker = undefined;
185
+ }
186
+ }
187
+
188
+ /**
189
+ * Create worker instance
190
+ */
191
+ private _createWorker(): void {
192
+ const workerPath = import.meta.resolve("../workers/server-build.worker");
193
+ this._worker = Worker.create<typeof ServerBuildWorkerModule>(workerPath);
194
+ }
195
+ }
@@ -0,0 +1,189 @@
1
+ import { Worker, type WorkerProxy } from "@simplysm/core-node";
2
+ import { consola } from "consola";
3
+ import type * as LibraryBuildWorkerModule from "../workers/library-build.worker";
4
+ import type { BuildResult, ResultCollector } from "../infra/ResultCollector";
5
+ import type { RebuildManager } from "../utils/rebuild-manager";
6
+ import type { BuildEngine, BuildOutput, BuildPackageInfo, EngineResult } from "./types";
7
+
8
+ const logger = consola.withTag("sd:cli:engine");
9
+
10
+ /**
11
+ * TscEngine options
12
+ */
13
+ export interface TscEngineOptions {
14
+ cwd: string;
15
+ pkg: BuildPackageInfo;
16
+ /** ResultCollector for watch mode rebuild reporting */
17
+ resultCollector?: ResultCollector;
18
+ /** RebuildManager for watch mode batch coordination */
19
+ rebuildManager?: RebuildManager;
20
+ }
21
+
22
+ /**
23
+ * tsc-based build engine for Library packages (node/browser/neutral)
24
+ *
25
+ * Wraps a single library-build.worker that uses tsc for JS + DTS emit
26
+ * in one Worker thread.
27
+ */
28
+ export class TscEngine implements BuildEngine {
29
+ private readonly _cwd: string;
30
+ private readonly _pkg: BuildPackageInfo;
31
+ private readonly _resultCollector: ResultCollector | undefined;
32
+ private readonly _rebuildManager: RebuildManager | undefined;
33
+
34
+ private _worker: WorkerProxy<typeof LibraryBuildWorkerModule> | undefined;
35
+ private _isWatchMode = false;
36
+
37
+ constructor(options: TscEngineOptions) {
38
+ this._cwd = options.cwd;
39
+ this._pkg = options.pkg;
40
+ this._resultCollector = options.resultCollector;
41
+ this._rebuildManager = options.rebuildManager;
42
+ }
43
+
44
+ /**
45
+ * One-time build (production)
46
+ */
47
+ async run(output: BuildOutput): Promise<EngineResult> {
48
+ this._createWorker();
49
+
50
+ const result = await this._worker!.build({
51
+ name: this._pkg.name,
52
+ config: this._pkg.config,
53
+ cwd: this._cwd,
54
+ pkgDir: this._pkg.dir,
55
+ output,
56
+ });
57
+
58
+ return {
59
+ success: result.js.success && result.dts.success,
60
+ js: {
61
+ success: result.js.success,
62
+ errors: result.js.errors ?? [],
63
+ warnings: result.js.warnings ?? [],
64
+ },
65
+ dts: {
66
+ success: result.dts.success,
67
+ errors: result.dts.errors ?? [],
68
+ warnings: [],
69
+ diagnostics: result.dts.diagnostics,
70
+ },
71
+ };
72
+ }
73
+
74
+ /**
75
+ * Start watch mode
76
+ * Promise resolves when initial build completes.
77
+ */
78
+ async startWatch(output: BuildOutput): Promise<void> {
79
+ this._isWatchMode = true;
80
+ this._createWorker();
81
+
82
+ return new Promise<void>((resolve) => {
83
+ let isInitialBuild = true;
84
+ const workerKey = `${this._pkg.name}:build`;
85
+
86
+ this._worker!.on("buildStart", () => {
87
+ if (!isInitialBuild && this._rebuildManager != null) {
88
+ this._rebuildManager.registerBuild(workerKey, `${this._pkg.name} (${this._pkg.config.target})`);
89
+ }
90
+ });
91
+
92
+ this._worker!.on("build", (data) => {
93
+ const event = data;
94
+
95
+ if (event.js.warnings != null && event.js.warnings.length > 0) {
96
+ logger.warn(`${this._pkg.name}: ${event.js.warnings.join(", ")}`);
97
+ }
98
+
99
+ // Report JS result
100
+ const buildResult: BuildResult = {
101
+ name: this._pkg.name,
102
+ target: this._pkg.config.target,
103
+ type: "build",
104
+ status: event.js.success ? "success" : "error",
105
+ message: event.js.errors?.join("\n"),
106
+ };
107
+ this._resultCollector?.add(buildResult);
108
+
109
+ // Report DTS result
110
+ const dtsResult: BuildResult = {
111
+ name: this._pkg.name,
112
+ target: this._pkg.config.target,
113
+ type: "dts",
114
+ status: event.dts.success ? "success" : "error",
115
+ message: event.dts.errors?.join("\n"),
116
+ };
117
+ this._resultCollector?.add(dtsResult);
118
+
119
+ if (isInitialBuild) {
120
+ isInitialBuild = false;
121
+ resolve();
122
+ }
123
+ });
124
+
125
+ this._worker!.on("error", (data) => {
126
+ const event = data as { message: string };
127
+ const result: BuildResult = {
128
+ name: this._pkg.name,
129
+ target: this._pkg.config.target,
130
+ type: "build",
131
+ status: "error",
132
+ message: event.message,
133
+ };
134
+ this._resultCollector?.add(result);
135
+
136
+ if (isInitialBuild) {
137
+ isInitialBuild = false;
138
+ resolve();
139
+ }
140
+ });
141
+
142
+ this._worker!
143
+ .startWatch({
144
+ name: this._pkg.name,
145
+ config: this._pkg.config,
146
+ cwd: this._cwd,
147
+ pkgDir: this._pkg.dir,
148
+ output,
149
+ })
150
+ .catch(() => {
151
+ if (isInitialBuild) {
152
+ isInitialBuild = false;
153
+ resolve();
154
+ }
155
+ });
156
+ });
157
+ }
158
+
159
+ /**
160
+ * Stop engine and clean up resources
161
+ */
162
+ async stop(): Promise<void> {
163
+ const shutdownTimeout = 3000;
164
+
165
+ if (this._isWatchMode && this._worker != null) {
166
+ try {
167
+ await Promise.race([
168
+ this._worker.stopWatch(),
169
+ new Promise<void>((resolve) => setTimeout(resolve, shutdownTimeout)),
170
+ ]);
171
+ } catch {
172
+ // Continue even if stopWatch fails
173
+ }
174
+ }
175
+
176
+ if (this._worker != null) {
177
+ await this._worker.terminate();
178
+ this._worker = undefined;
179
+ }
180
+ }
181
+
182
+ /**
183
+ * Create worker instance
184
+ */
185
+ private _createWorker(): void {
186
+ const workerPath = import.meta.resolve("../workers/library-build.worker");
187
+ this._worker = Worker.create<typeof LibraryBuildWorkerModule>(workerPath);
188
+ }
189
+ }
@@ -0,0 +1,203 @@
1
+ import { Worker, type WorkerProxy } from "@simplysm/core-node";
2
+ import { consola } from "consola";
3
+ import type * as ViteBuildWorkerModule from "../workers/vite-build.worker";
4
+ import type { BuildResult, ResultCollector } from "../infra/ResultCollector";
5
+ import type { RebuildManager } from "../utils/rebuild-manager";
6
+ import type { BuildEngine, BuildOutput, ClientPackageInfo, EngineResult } from "./types";
7
+
8
+ const logger = consola.withTag("sd:cli:engine:vite");
9
+
10
+ /**
11
+ * ViteEngine options
12
+ */
13
+ export interface ViteEngineOptions {
14
+ cwd: string;
15
+ pkg: ClientPackageInfo;
16
+ /** ResultCollector for watch mode rebuild reporting */
17
+ resultCollector?: ResultCollector;
18
+ /** RebuildManager for watch mode batch coordination */
19
+ rebuildManager?: RebuildManager;
20
+ }
21
+
22
+ /**
23
+ * Vite-based build engine for Angular Client packages
24
+ *
25
+ * Wraps a single vite-build.worker that uses Angular's buildApplicationInternal
26
+ * for production builds and serveWithVite for dev server.
27
+ */
28
+ export class ViteEngine implements BuildEngine {
29
+ private readonly _cwd: string;
30
+ private readonly _pkg: ClientPackageInfo;
31
+ private readonly _resultCollector: ResultCollector | undefined;
32
+ private readonly _rebuildManager: RebuildManager | undefined;
33
+
34
+ private _worker: WorkerProxy<typeof ViteBuildWorkerModule> | undefined;
35
+ private _isWatchMode = false;
36
+
37
+ /** Dev server port (populated by serverReady event in watch mode) */
38
+ port: number | undefined;
39
+
40
+ constructor(options: ViteEngineOptions) {
41
+ this._cwd = options.cwd;
42
+ this._pkg = options.pkg;
43
+ this._resultCollector = options.resultCollector;
44
+ this._rebuildManager = options.rebuildManager;
45
+ }
46
+
47
+ /**
48
+ * One-time build (production)
49
+ */
50
+ async run(output: BuildOutput): Promise<EngineResult> {
51
+ this._createWorker();
52
+
53
+ const result = await this._worker!.build({
54
+ name: this._pkg.name,
55
+ cwd: this._cwd,
56
+ pkgDir: this._pkg.dir,
57
+ output,
58
+ });
59
+
60
+ return {
61
+ success: result.js.success,
62
+ js: {
63
+ success: result.js.success,
64
+ errors: result.js.errors ?? [],
65
+ warnings: result.js.warnings ?? [],
66
+ },
67
+ dts: {
68
+ success: result.dts.success,
69
+ errors: result.dts.errors ?? [],
70
+ warnings: [],
71
+ diagnostics: result.dts.diagnostics,
72
+ },
73
+ };
74
+ }
75
+
76
+ /**
77
+ * Start watch mode (Vite dev server)
78
+ * Promise resolves when initial build completes.
79
+ */
80
+ async startWatch(output: BuildOutput): Promise<void> {
81
+ this._isWatchMode = true;
82
+ this._createWorker();
83
+
84
+ return new Promise<void>((resolve) => {
85
+ let isInitialBuild = true;
86
+ const workerKey = `${this._pkg.name}:build`;
87
+
88
+ this._worker!.on("buildStart", () => {
89
+ if (!isInitialBuild && this._rebuildManager != null) {
90
+ this._rebuildManager.registerBuild(
91
+ workerKey,
92
+ `${this._pkg.name} (client)`,
93
+ );
94
+ }
95
+ });
96
+
97
+ this._worker!.on("build", (data) => {
98
+ const event = data;
99
+
100
+ if (event.js.warnings != null && event.js.warnings.length > 0) {
101
+ logger.warn(`${this._pkg.name}: ${event.js.warnings.join(", ")}`);
102
+ }
103
+
104
+ // Report JS result
105
+ const buildResult: BuildResult = {
106
+ name: this._pkg.name,
107
+ target: "client",
108
+ type: "build",
109
+ status: event.js.success ? "success" : "error",
110
+ message: event.js.errors?.join("\n"),
111
+ };
112
+ this._resultCollector?.add(buildResult);
113
+
114
+ // Report DTS result (always success for client)
115
+ const dtsResult: BuildResult = {
116
+ name: this._pkg.name,
117
+ target: "client",
118
+ type: "dts",
119
+ status: event.dts.success ? "success" : "error",
120
+ message: event.dts.errors?.join("\n"),
121
+ };
122
+ this._resultCollector?.add(dtsResult);
123
+
124
+ if (isInitialBuild) {
125
+ isInitialBuild = false;
126
+ resolve();
127
+ }
128
+ });
129
+
130
+ this._worker!.on("error", (data) => {
131
+ const event = data as { message: string };
132
+ const result: BuildResult = {
133
+ name: this._pkg.name,
134
+ target: "client",
135
+ type: "build",
136
+ status: "error",
137
+ message: event.message,
138
+ };
139
+ this._resultCollector?.add(result);
140
+
141
+ if (isInitialBuild) {
142
+ isInitialBuild = false;
143
+ resolve();
144
+ }
145
+ });
146
+
147
+ this._worker!.on("serverReady", (data) => {
148
+ const event = data as { port: number };
149
+ this.port = event.port;
150
+ });
151
+
152
+ const port = typeof this._pkg.config.server === "number"
153
+ ? this._pkg.config.server
154
+ : undefined;
155
+
156
+ this._worker!
157
+ .startWatch({
158
+ name: this._pkg.name,
159
+ cwd: this._cwd,
160
+ pkgDir: this._pkg.dir,
161
+ output,
162
+ port,
163
+ })
164
+ .catch(() => {
165
+ if (isInitialBuild) {
166
+ isInitialBuild = false;
167
+ resolve();
168
+ }
169
+ });
170
+ });
171
+ }
172
+
173
+ /**
174
+ * Stop engine and clean up resources
175
+ */
176
+ async stop(): Promise<void> {
177
+ const shutdownTimeout = 3000;
178
+
179
+ if (this._isWatchMode && this._worker != null) {
180
+ try {
181
+ await Promise.race([
182
+ this._worker.stopWatch(),
183
+ new Promise<void>((resolve) => setTimeout(resolve, shutdownTimeout)),
184
+ ]);
185
+ } catch {
186
+ // Continue even if stopWatch fails
187
+ }
188
+ }
189
+
190
+ if (this._worker != null) {
191
+ await this._worker.terminate();
192
+ this._worker = undefined;
193
+ }
194
+ }
195
+
196
+ /**
197
+ * Create worker instance
198
+ */
199
+ private _createWorker(): void {
200
+ const workerPath = import.meta.resolve("../workers/vite-build.worker");
201
+ this._worker = Worker.create<typeof ViteBuildWorkerModule>(workerPath);
202
+ }
203
+ }
@@ -0,0 +1,49 @@
1
+ import type { ResultCollector } from "../infra/ResultCollector";
2
+ import type { RebuildManager } from "../utils/rebuild-manager";
3
+ import { hasAngularCompilerOptions } from "../utils/tsconfig";
4
+ import { NgtscEngine } from "./NgtscEngine";
5
+ import { ServerEsbuildEngine } from "./ServerEsbuildEngine";
6
+ import { TscEngine } from "./TscEngine";
7
+ import { ViteEngine } from "./ViteEngine";
8
+ import type { BuildEngine, BuildPackageInfo, ClientPackageInfo, ServerPackageInfo } from "./types";
9
+
10
+ export { NgtscEngine } from "./NgtscEngine";
11
+ export type { NgtscEngineOptions } from "./NgtscEngine";
12
+ export { ServerEsbuildEngine } from "./ServerEsbuildEngine";
13
+ export type { ServerEsbuildEngineOptions } from "./ServerEsbuildEngine";
14
+ export { TscEngine } from "./TscEngine";
15
+ export type { TscEngineOptions } from "./TscEngine";
16
+ export { ViteEngine } from "./ViteEngine";
17
+ export type { ViteEngineOptions } from "./ViteEngine";
18
+ export type { BuildEngine, BuildOutput, BuildPackageInfo, ClientPackageInfo, EngineResult, PackageInfo, ServerPackageInfo } from "./types";
19
+
20
+ /**
21
+ * Create a BuildEngine for the given package.
22
+ *
23
+ * Client packages use ViteEngine (Angular buildApplicationInternal / serveWithVite).
24
+ * Server packages use ServerEsbuildEngine.
25
+ * Angular Library packages (detected by angularCompilerOptions in tsconfig.json) use NgtscEngine.
26
+ * Other Library packages (node/browser/neutral) use TscEngine.
27
+ */
28
+ export function createBuildEngine(
29
+ pkg: BuildPackageInfo | ServerPackageInfo | ClientPackageInfo,
30
+ options: {
31
+ cwd: string;
32
+ resultCollector?: ResultCollector;
33
+ rebuildManager?: RebuildManager;
34
+ },
35
+ ): BuildEngine {
36
+ if (pkg.config.target === "client") {
37
+ return new ViteEngine({ ...options, pkg: pkg as ClientPackageInfo });
38
+ }
39
+
40
+ if (pkg.config.target === "server") {
41
+ return new ServerEsbuildEngine({ ...options, pkg: pkg as ServerPackageInfo });
42
+ }
43
+
44
+ if (hasAngularCompilerOptions(pkg.dir)) {
45
+ return new NgtscEngine({ ...options, pkg: pkg as BuildPackageInfo });
46
+ }
47
+
48
+ return new TscEngine({ ...options, pkg: pkg as BuildPackageInfo });
49
+ }
@@ -0,0 +1,79 @@
1
+ import type { SdBuildPackageConfig, SdClientPackageConfig, SdPackageConfig, SdServerPackageConfig } from "../sd-config.types";
2
+ import type { SerializedDiagnostic } from "../utils/typecheck-serialization";
3
+
4
+ /**
5
+ * Package information
6
+ */
7
+ export interface PackageInfo {
8
+ name: string;
9
+ dir: string;
10
+ config: SdPackageConfig;
11
+ }
12
+
13
+ /**
14
+ * PackageInfo narrowed for build packages (node/browser/neutral)
15
+ */
16
+ export type BuildPackageInfo = PackageInfo & { config: SdBuildPackageConfig };
17
+
18
+ /**
19
+ * PackageInfo narrowed for server packages
20
+ */
21
+ export type ServerPackageInfo = PackageInfo & { config: SdServerPackageConfig };
22
+
23
+ /**
24
+ * PackageInfo narrowed for client packages
25
+ */
26
+ export type ClientPackageInfo = PackageInfo & { config: SdClientPackageConfig };
27
+
28
+ /**
29
+ * Build output control flags
30
+ */
31
+ export interface BuildOutput {
32
+ js: boolean;
33
+ dts: boolean;
34
+ }
35
+
36
+ /**
37
+ * BuildEngine.run() return value
38
+ */
39
+ export interface EngineResult {
40
+ success: boolean;
41
+ js: {
42
+ success: boolean;
43
+ errors: string[];
44
+ warnings: string[];
45
+ };
46
+ dts: {
47
+ success: boolean;
48
+ errors: string[];
49
+ warnings: string[];
50
+ diagnostics: SerializedDiagnostic[];
51
+ };
52
+ }
53
+
54
+ /**
55
+ * Build engine interface
56
+ *
57
+ * Common contract for all build engines.
58
+ * typecheck (diagnostics) is always included — not optional.
59
+ */
60
+ export interface BuildEngine {
61
+ /**
62
+ * One-time build (for production builds)
63
+ * Creates workers, runs build, returns combined result.
64
+ * Call stop() after to clean up resources.
65
+ */
66
+ run(output: BuildOutput): Promise<EngineResult>;
67
+
68
+ /**
69
+ * Start watch mode
70
+ * Promise resolves when initial build is complete.
71
+ * Subsequent rebuilds are reported via injected ResultCollector.
72
+ */
73
+ startWatch(output: BuildOutput): Promise<void>;
74
+
75
+ /**
76
+ * Stop engine and clean up resources (workers, esbuild contexts)
77
+ */
78
+ stop(): Promise<void>;
79
+ }