@simplysm/sd-cli 14.0.29 → 14.0.32

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 (626) hide show
  1. package/dist/{utils → angular}/angular-build-pipeline.d.ts +0 -2
  2. package/dist/angular/angular-build-pipeline.d.ts.map +1 -0
  3. package/dist/{utils → angular}/angular-build-pipeline.js +3 -6
  4. package/dist/angular/angular-build-pipeline.js.map +1 -0
  5. package/dist/{utils → angular}/angular-build.d.ts +1 -1
  6. package/dist/angular/angular-build.d.ts.map +1 -0
  7. package/dist/{utils → angular}/angular-build.js +1 -1
  8. package/dist/angular/angular-build.js.map +1 -0
  9. package/dist/{utils → angular}/angular-compiler.d.ts +0 -3
  10. package/dist/angular/angular-compiler.d.ts.map +1 -0
  11. package/dist/{utils → angular}/angular-compiler.js +1 -45
  12. package/dist/angular/angular-compiler.js.map +1 -0
  13. package/dist/angular/client-transform-stylesheet.js +1 -1
  14. package/dist/angular/client-transform-stylesheet.js.map +1 -1
  15. package/dist/{utils → angular}/ngtsc-build-core.d.ts +3 -3
  16. package/dist/angular/ngtsc-build-core.d.ts.map +1 -0
  17. package/dist/angular/ngtsc-build-core.js.map +1 -0
  18. package/dist/angular/scss-compiler.d.ts.map +1 -0
  19. package/dist/angular/scss-compiler.js.map +1 -0
  20. package/dist/angular/vite-angular-plugin.d.ts +2 -10
  21. package/dist/angular/vite-angular-plugin.d.ts.map +1 -1
  22. package/dist/angular/vite-angular-plugin.js +20 -286
  23. package/dist/angular/vite-angular-plugin.js.map +1 -1
  24. package/dist/capacitor/capacitor-build.d.ts +14 -0
  25. package/dist/capacitor/capacitor-build.d.ts.map +1 -0
  26. package/dist/capacitor/capacitor-build.js +105 -0
  27. package/dist/capacitor/capacitor-build.js.map +1 -0
  28. package/dist/capacitor/capacitor-config-writer.d.ts +11 -0
  29. package/dist/capacitor/capacitor-config-writer.d.ts.map +1 -0
  30. package/dist/capacitor/capacitor-config-writer.js +54 -0
  31. package/dist/capacitor/capacitor-config-writer.js.map +1 -0
  32. package/dist/capacitor/capacitor-icon.d.ts +5 -0
  33. package/dist/capacitor/capacitor-icon.d.ts.map +1 -0
  34. package/dist/capacitor/capacitor-icon.js +58 -0
  35. package/dist/capacitor/capacitor-icon.js.map +1 -0
  36. package/dist/capacitor/capacitor-npm-config.d.ts +11 -0
  37. package/dist/capacitor/capacitor-npm-config.d.ts.map +1 -0
  38. package/dist/capacitor/capacitor-npm-config.js +145 -0
  39. package/dist/capacitor/capacitor-npm-config.js.map +1 -0
  40. package/dist/capacitor/capacitor.d.ts +0 -45
  41. package/dist/capacitor/capacitor.d.ts.map +1 -1
  42. package/dist/capacitor/capacitor.js +15 -354
  43. package/dist/capacitor/capacitor.js.map +1 -1
  44. package/dist/commands/check.js +2 -2
  45. package/dist/commands/check.js.map +1 -1
  46. package/dist/commands/dev.d.ts +3 -3
  47. package/dist/commands/dev.d.ts.map +1 -1
  48. package/dist/commands/dev.js +3 -3
  49. package/dist/commands/dev.js.map +1 -1
  50. package/dist/commands/lint.d.ts +1 -1
  51. package/dist/commands/lint.d.ts.map +1 -1
  52. package/dist/commands/lint.js +1 -1
  53. package/dist/commands/lint.js.map +1 -1
  54. package/dist/commands/publish/deployment-phase.d.ts +12 -0
  55. package/dist/commands/publish/deployment-phase.d.ts.map +1 -0
  56. package/dist/commands/publish/deployment-phase.js +94 -0
  57. package/dist/commands/publish/deployment-phase.js.map +1 -0
  58. package/dist/commands/publish/env-utils.d.ts +10 -0
  59. package/dist/commands/publish/env-utils.d.ts.map +1 -0
  60. package/dist/commands/publish/env-utils.js +41 -0
  61. package/dist/commands/publish/env-utils.js.map +1 -0
  62. package/dist/commands/publish/git-phase.d.ts +12 -0
  63. package/dist/commands/publish/git-phase.d.ts.map +1 -0
  64. package/dist/commands/publish/git-phase.js +79 -0
  65. package/dist/commands/publish/git-phase.js.map +1 -0
  66. package/dist/commands/{publish.d.ts → publish/index.d.ts} +1 -1
  67. package/dist/commands/publish/index.d.ts.map +1 -0
  68. package/dist/commands/publish/index.js +211 -0
  69. package/dist/commands/publish/index.js.map +1 -0
  70. package/dist/commands/publish/local-publisher.d.ts +6 -0
  71. package/dist/commands/publish/local-publisher.d.ts.map +1 -0
  72. package/dist/commands/publish/local-publisher.js +16 -0
  73. package/dist/commands/publish/local-publisher.js.map +1 -0
  74. package/dist/commands/publish/npm-publisher.d.ts +6 -0
  75. package/dist/commands/publish/npm-publisher.d.ts.map +1 -0
  76. package/dist/commands/publish/npm-publisher.js +21 -0
  77. package/dist/commands/publish/npm-publisher.js.map +1 -0
  78. package/dist/commands/publish/post-publish-phase.d.ts +8 -0
  79. package/dist/commands/publish/post-publish-phase.d.ts.map +1 -0
  80. package/dist/commands/publish/post-publish-phase.js +34 -0
  81. package/dist/commands/publish/post-publish-phase.js.map +1 -0
  82. package/dist/commands/publish/storage-publisher.d.ts +18 -0
  83. package/dist/commands/publish/storage-publisher.d.ts.map +1 -0
  84. package/dist/commands/publish/storage-publisher.js +173 -0
  85. package/dist/commands/publish/storage-publisher.js.map +1 -0
  86. package/dist/commands/publish/version-upgrade.d.ts +28 -0
  87. package/dist/commands/publish/version-upgrade.d.ts.map +1 -0
  88. package/dist/commands/publish/version-upgrade.js +96 -0
  89. package/dist/commands/publish/version-upgrade.js.map +1 -0
  90. package/dist/commands/replace-deps.js +1 -1
  91. package/dist/commands/replace-deps.js.map +1 -1
  92. package/dist/commands/watch.d.ts +3 -4
  93. package/dist/commands/watch.d.ts.map +1 -1
  94. package/dist/commands/watch.js +3 -4
  95. package/dist/commands/watch.js.map +1 -1
  96. package/dist/deps/replace-deps/collect-deps.d.ts +6 -0
  97. package/dist/deps/replace-deps/collect-deps.d.ts.map +1 -0
  98. package/dist/deps/replace-deps/collect-deps.js +71 -0
  99. package/dist/deps/replace-deps/collect-deps.js.map +1 -0
  100. package/dist/{utils/replace-deps.d.ts → deps/replace-deps/replace-deps-resolve.d.ts} +7 -24
  101. package/dist/deps/replace-deps/replace-deps-resolve.d.ts.map +1 -0
  102. package/dist/{utils/replace-deps.js → deps/replace-deps/replace-deps-resolve.js} +4 -152
  103. package/dist/deps/replace-deps/replace-deps-resolve.js.map +1 -0
  104. package/dist/deps/replace-deps/replace-deps.d.ts +36 -0
  105. package/dist/deps/replace-deps/replace-deps.d.ts.map +1 -0
  106. package/dist/deps/replace-deps/replace-deps.js +155 -0
  107. package/dist/deps/replace-deps/replace-deps.js.map +1 -0
  108. package/dist/{utils → deps/server-externals}/server-production-files.d.ts +1 -1
  109. package/dist/deps/server-externals/server-production-files.d.ts.map +1 -0
  110. package/dist/{utils → deps/server-externals}/server-production-files.js +1 -1
  111. package/dist/deps/server-externals/server-production-files.js.map +1 -0
  112. package/dist/dev-server/dev-http-server.d.ts +23 -0
  113. package/dist/dev-server/dev-http-server.d.ts.map +1 -0
  114. package/dist/dev-server/dev-http-server.js +116 -0
  115. package/dist/dev-server/dev-http-server.js.map +1 -0
  116. package/dist/dev-server/hmr-client-script.d.ts +13 -0
  117. package/dist/dev-server/hmr-client-script.d.ts.map +1 -0
  118. package/dist/dev-server/hmr-client-script.js +73 -0
  119. package/dist/dev-server/hmr-client-script.js.map +1 -0
  120. package/dist/dev-server/hmr-service.d.ts +23 -0
  121. package/dist/dev-server/hmr-service.d.ts.map +1 -0
  122. package/dist/dev-server/hmr-service.js +139 -0
  123. package/dist/dev-server/hmr-service.js.map +1 -0
  124. package/dist/electron/electron.d.ts +5 -0
  125. package/dist/electron/electron.d.ts.map +1 -1
  126. package/dist/electron/electron.js +17 -24
  127. package/dist/electron/electron.js.map +1 -1
  128. package/dist/engines/BaseEngine.d.ts +18 -4
  129. package/dist/engines/BaseEngine.d.ts.map +1 -1
  130. package/dist/engines/BaseEngine.js +45 -66
  131. package/dist/engines/BaseEngine.js.map +1 -1
  132. package/dist/engines/{ViteEngine.d.ts → EsbuildClientEngine.d.ts} +11 -18
  133. package/dist/engines/EsbuildClientEngine.d.ts.map +1 -0
  134. package/dist/engines/{ViteEngine.js → EsbuildClientEngine.js} +28 -55
  135. package/dist/engines/EsbuildClientEngine.js.map +1 -0
  136. package/dist/engines/NgtscEngine.d.ts +2 -2
  137. package/dist/engines/NgtscEngine.d.ts.map +1 -1
  138. package/dist/engines/NgtscEngine.js +1 -9
  139. package/dist/engines/NgtscEngine.js.map +1 -1
  140. package/dist/engines/ServerEsbuildEngine.d.ts +2 -2
  141. package/dist/engines/ServerEsbuildEngine.d.ts.map +1 -1
  142. package/dist/engines/ServerEsbuildEngine.js +1 -9
  143. package/dist/engines/ServerEsbuildEngine.js.map +1 -1
  144. package/dist/engines/TscEngine.d.ts +2 -2
  145. package/dist/engines/TscEngine.d.ts.map +1 -1
  146. package/dist/engines/TscEngine.js +1 -9
  147. package/dist/engines/TscEngine.js.map +1 -1
  148. package/dist/engines/index.d.ts +15 -5
  149. package/dist/engines/index.d.ts.map +1 -1
  150. package/dist/engines/index.js +21 -5
  151. package/dist/engines/index.js.map +1 -1
  152. package/dist/engines/types.d.ts +3 -3
  153. package/dist/engines/types.d.ts.map +1 -1
  154. package/dist/esbuild/esbuild-client-config.d.ts +38 -0
  155. package/dist/esbuild/esbuild-client-config.d.ts.map +1 -0
  156. package/dist/esbuild/esbuild-client-config.js +171 -0
  157. package/dist/esbuild/esbuild-client-config.js.map +1 -0
  158. package/dist/esbuild/esbuild-config.d.ts.map +1 -0
  159. package/dist/{utils → esbuild}/esbuild-config.js +1 -0
  160. package/dist/esbuild/esbuild-config.js.map +1 -0
  161. package/dist/esbuild/esbuild-index-html.d.ts +39 -0
  162. package/dist/esbuild/esbuild-index-html.d.ts.map +1 -0
  163. package/dist/esbuild/esbuild-index-html.js +68 -0
  164. package/dist/esbuild/esbuild-index-html.js.map +1 -0
  165. package/dist/esbuild/esbuild-pwa.d.ts +21 -0
  166. package/dist/esbuild/esbuild-pwa.d.ts.map +1 -0
  167. package/dist/esbuild/esbuild-pwa.js +105 -0
  168. package/dist/esbuild/esbuild-pwa.js.map +1 -0
  169. package/dist/esbuild/esbuild-scss-plugin.d.ts +6 -0
  170. package/dist/esbuild/esbuild-scss-plugin.d.ts.map +1 -0
  171. package/dist/esbuild/esbuild-scss-plugin.js +41 -0
  172. package/dist/esbuild/esbuild-scss-plugin.js.map +1 -0
  173. package/dist/lint/lint-core.d.ts.map +1 -0
  174. package/dist/lint/lint-core.js.map +1 -0
  175. package/dist/lint/lint-utils.d.ts.map +1 -0
  176. package/dist/lint/lint-utils.js.map +1 -0
  177. package/dist/lint/lint-with-program.d.ts.map +1 -0
  178. package/dist/lint/lint-with-program.js.map +1 -0
  179. package/dist/orchestrators/BaseOrchestrator.d.ts +44 -0
  180. package/dist/orchestrators/BaseOrchestrator.d.ts.map +1 -0
  181. package/dist/orchestrators/BaseOrchestrator.js +92 -0
  182. package/dist/orchestrators/BaseOrchestrator.js.map +1 -0
  183. package/dist/orchestrators/BuildOrchestrator.d.ts +45 -3
  184. package/dist/orchestrators/BuildOrchestrator.d.ts.map +1 -1
  185. package/dist/orchestrators/BuildOrchestrator.js +170 -143
  186. package/dist/orchestrators/BuildOrchestrator.js.map +1 -1
  187. package/dist/orchestrators/DevOrchestrator.d.ts +39 -0
  188. package/dist/orchestrators/DevOrchestrator.d.ts.map +1 -0
  189. package/dist/orchestrators/DevOrchestrator.js +249 -0
  190. package/dist/orchestrators/DevOrchestrator.js.map +1 -0
  191. package/dist/orchestrators/ServerRuntimeManager.d.ts +22 -0
  192. package/dist/orchestrators/ServerRuntimeManager.d.ts.map +1 -0
  193. package/dist/orchestrators/ServerRuntimeManager.js +66 -0
  194. package/dist/orchestrators/ServerRuntimeManager.js.map +1 -0
  195. package/dist/orchestrators/TypecheckOrchestrator.d.ts +17 -2
  196. package/dist/orchestrators/TypecheckOrchestrator.d.ts.map +1 -1
  197. package/dist/orchestrators/TypecheckOrchestrator.js +122 -108
  198. package/dist/orchestrators/TypecheckOrchestrator.js.map +1 -1
  199. package/dist/orchestrators/WatchOrchestrator.d.ts +33 -0
  200. package/dist/orchestrators/WatchOrchestrator.d.ts.map +1 -0
  201. package/dist/orchestrators/WatchOrchestrator.js +158 -0
  202. package/dist/orchestrators/WatchOrchestrator.js.map +1 -0
  203. package/dist/orchestrators/types.d.ts +17 -0
  204. package/dist/orchestrators/types.d.ts.map +1 -0
  205. package/dist/orchestrators/types.js +2 -0
  206. package/dist/orchestrators/types.js.map +1 -0
  207. package/dist/runtime/ResultCollector.d.ts.map +1 -0
  208. package/dist/runtime/ResultCollector.js.map +1 -0
  209. package/dist/runtime/SignalHandler.d.ts.map +1 -0
  210. package/dist/runtime/SignalHandler.js.map +1 -0
  211. package/dist/{utils → runtime}/engine-stop.d.ts +1 -1
  212. package/dist/runtime/engine-stop.d.ts.map +1 -0
  213. package/dist/{utils → runtime}/engine-stop.js +1 -1
  214. package/dist/runtime/engine-stop.js.map +1 -0
  215. package/dist/runtime/engine-watch-events.d.ts +43 -0
  216. package/dist/runtime/engine-watch-events.d.ts.map +1 -0
  217. package/dist/runtime/engine-watch-events.js +72 -0
  218. package/dist/runtime/engine-watch-events.js.map +1 -0
  219. package/dist/{utils → runtime}/rebuild-manager.d.ts +1 -0
  220. package/dist/runtime/rebuild-manager.d.ts.map +1 -0
  221. package/dist/{utils → runtime}/rebuild-manager.js +8 -1
  222. package/dist/runtime/rebuild-manager.js.map +1 -0
  223. package/dist/runtime/worker-events.d.ts +22 -0
  224. package/dist/runtime/worker-events.d.ts.map +1 -0
  225. package/dist/runtime/worker-events.js +2 -0
  226. package/dist/runtime/worker-events.js.map +1 -0
  227. package/dist/runtime/worker-utils.d.ts.map +1 -0
  228. package/dist/runtime/worker-utils.js.map +1 -0
  229. package/dist/sd-cli-entry.d.ts.map +1 -1
  230. package/dist/sd-cli-entry.js +61 -54
  231. package/dist/sd-cli-entry.js.map +1 -1
  232. package/dist/sd-cli.js +1 -1
  233. package/dist/sd-cli.js.map +1 -1
  234. package/dist/sd-config.types.d.ts +6 -15
  235. package/dist/sd-config.types.d.ts.map +1 -1
  236. package/dist/typecheck/typecheck-non-package.d.ts.map +1 -0
  237. package/dist/{utils → typecheck}/typecheck-non-package.js +1 -1
  238. package/dist/typecheck/typecheck-non-package.js.map +1 -0
  239. package/dist/typecheck/typecheck-serialization.d.ts.map +1 -0
  240. package/dist/typecheck/typecheck-serialization.js.map +1 -0
  241. package/dist/utils/diagnostic-utils.d.ts +5 -0
  242. package/dist/utils/diagnostic-utils.d.ts.map +1 -1
  243. package/dist/utils/diagnostic-utils.js +15 -0
  244. package/dist/utils/diagnostic-utils.js.map +1 -1
  245. package/dist/utils/orchestrator-utils.d.ts +1 -5
  246. package/dist/utils/orchestrator-utils.d.ts.map +1 -1
  247. package/dist/utils/orchestrator-utils.js +2 -5
  248. package/dist/utils/orchestrator-utils.js.map +1 -1
  249. package/dist/utils/output-utils.d.ts +1 -1
  250. package/dist/utils/output-utils.d.ts.map +1 -1
  251. package/dist/utils/package-classify.d.ts +54 -0
  252. package/dist/utils/package-classify.d.ts.map +1 -0
  253. package/dist/utils/package-classify.js +134 -0
  254. package/dist/utils/package-classify.js.map +1 -0
  255. package/dist/utils/package-utils.d.ts +1 -58
  256. package/dist/utils/package-utils.d.ts.map +1 -1
  257. package/dist/utils/package-utils.js +0 -193
  258. package/dist/utils/package-utils.js.map +1 -1
  259. package/dist/utils/tsc-build.d.ts +1 -1
  260. package/dist/utils/tsc-build.d.ts.map +1 -1
  261. package/dist/utils/tsc-build.js +1 -1
  262. package/dist/utils/tsc-build.js.map +1 -1
  263. package/dist/workers/build-change-filter.d.ts +8 -0
  264. package/dist/workers/build-change-filter.d.ts.map +1 -0
  265. package/dist/workers/build-change-filter.js +16 -0
  266. package/dist/workers/build-change-filter.js.map +1 -0
  267. package/dist/workers/build-watch-paths.d.ts +20 -0
  268. package/dist/workers/build-watch-paths.d.ts.map +1 -0
  269. package/dist/workers/build-watch-paths.js +29 -0
  270. package/dist/workers/build-watch-paths.js.map +1 -0
  271. package/dist/workers/client.worker.d.ts +11 -18
  272. package/dist/workers/client.worker.d.ts.map +1 -1
  273. package/dist/workers/client.worker.js +218 -289
  274. package/dist/workers/client.worker.js.map +1 -1
  275. package/dist/workers/library-build.worker.d.ts +2 -2
  276. package/dist/workers/library-build.worker.d.ts.map +1 -1
  277. package/dist/workers/library-build.worker.js +13 -24
  278. package/dist/workers/library-build.worker.js.map +1 -1
  279. package/dist/workers/lint.worker.d.ts +1 -1
  280. package/dist/workers/lint.worker.d.ts.map +1 -1
  281. package/dist/workers/lint.worker.js +1 -1
  282. package/dist/workers/lint.worker.js.map +1 -1
  283. package/dist/workers/ngtsc-build.worker.d.ts +1 -1
  284. package/dist/workers/ngtsc-build.worker.d.ts.map +1 -1
  285. package/dist/workers/ngtsc-build.worker.js +19 -35
  286. package/dist/workers/ngtsc-build.worker.js.map +1 -1
  287. package/dist/workers/server-build.worker.d.ts +2 -2
  288. package/dist/workers/server-build.worker.d.ts.map +1 -1
  289. package/dist/workers/server-build.worker.js +36 -137
  290. package/dist/workers/server-build.worker.js.map +1 -1
  291. package/dist/workers/server-esbuild-context.d.ts +47 -0
  292. package/dist/workers/server-esbuild-context.d.ts.map +1 -0
  293. package/dist/workers/server-esbuild-context.js +92 -0
  294. package/dist/workers/server-esbuild-context.js.map +1 -0
  295. package/dist/workers/server-runtime.worker.d.ts.map +1 -1
  296. package/dist/workers/server-runtime.worker.js +3 -1
  297. package/dist/workers/server-runtime.worker.js.map +1 -1
  298. package/dist/workers/server-watch-manager.d.ts +44 -0
  299. package/dist/workers/server-watch-manager.d.ts.map +1 -0
  300. package/dist/workers/server-watch-manager.js +87 -0
  301. package/dist/workers/server-watch-manager.js.map +1 -0
  302. package/dist/workers/shared-worker-lifecycle.d.ts +14 -0
  303. package/dist/workers/shared-worker-lifecycle.d.ts.map +1 -0
  304. package/dist/workers/shared-worker-lifecycle.js +17 -0
  305. package/dist/workers/shared-worker-lifecycle.js.map +1 -0
  306. package/package.json +9 -9
  307. package/src/{utils → angular}/angular-build-pipeline.ts +3 -8
  308. package/src/{utils → angular}/angular-build.ts +1 -1
  309. package/src/{utils → angular}/angular-compiler.ts +1 -64
  310. package/src/angular/client-transform-stylesheet.ts +1 -1
  311. package/src/{utils → angular}/ngtsc-build-core.ts +3 -3
  312. package/src/angular/vite-angular-plugin.ts +22 -355
  313. package/src/capacitor/capacitor-build.ts +142 -0
  314. package/src/capacitor/capacitor-config-writer.ts +66 -0
  315. package/src/capacitor/capacitor-icon.ts +75 -0
  316. package/src/capacitor/capacitor-npm-config.ts +192 -0
  317. package/src/capacitor/capacitor.ts +32 -441
  318. package/src/commands/check.ts +2 -2
  319. package/src/commands/dev.ts +6 -6
  320. package/src/commands/lint.ts +1 -1
  321. package/src/commands/publish/deployment-phase.ts +125 -0
  322. package/src/commands/publish/env-utils.ts +44 -0
  323. package/src/commands/publish/git-phase.ts +99 -0
  324. package/src/commands/publish/index.ts +266 -0
  325. package/src/commands/publish/local-publisher.ts +23 -0
  326. package/src/commands/publish/npm-publisher.ts +30 -0
  327. package/src/commands/publish/post-publish-phase.ts +43 -0
  328. package/src/commands/publish/storage-publisher.ts +208 -0
  329. package/src/commands/publish/version-upgrade.ts +132 -0
  330. package/src/commands/replace-deps.ts +1 -1
  331. package/src/commands/watch.ts +6 -7
  332. package/src/deps/replace-deps/collect-deps.ts +92 -0
  333. package/src/{utils/replace-deps.ts → deps/replace-deps/replace-deps-resolve.ts} +4 -188
  334. package/src/deps/replace-deps/replace-deps.ts +193 -0
  335. package/src/{utils → deps/server-externals}/server-production-files.ts +2 -2
  336. package/src/dev-server/dev-http-server.ts +149 -0
  337. package/src/dev-server/hmr-client-script.ts +74 -0
  338. package/src/dev-server/hmr-service.ts +178 -0
  339. package/src/electron/electron.ts +21 -28
  340. package/src/engines/BaseEngine.ts +64 -83
  341. package/src/engines/{ViteEngine.ts → EsbuildClientEngine.ts} +33 -72
  342. package/src/engines/NgtscEngine.ts +3 -11
  343. package/src/engines/ServerEsbuildEngine.ts +3 -11
  344. package/src/engines/TscEngine.ts +3 -11
  345. package/src/engines/index.ts +29 -9
  346. package/src/engines/types.ts +3 -3
  347. package/src/esbuild/esbuild-client-config.ts +230 -0
  348. package/src/{utils → esbuild}/esbuild-config.ts +1 -0
  349. package/src/esbuild/esbuild-index-html.ts +119 -0
  350. package/src/esbuild/esbuild-pwa.ts +139 -0
  351. package/src/esbuild/esbuild-scss-plugin.ts +48 -0
  352. package/src/orchestrators/BaseOrchestrator.ts +118 -0
  353. package/src/orchestrators/BuildOrchestrator.ts +234 -171
  354. package/src/orchestrators/DevOrchestrator.ts +315 -0
  355. package/src/orchestrators/ServerRuntimeManager.ts +85 -0
  356. package/src/orchestrators/TypecheckOrchestrator.ts +166 -117
  357. package/src/orchestrators/WatchOrchestrator.ts +203 -0
  358. package/src/orchestrators/types.ts +18 -0
  359. package/src/{utils → runtime}/engine-stop.ts +1 -1
  360. package/src/runtime/engine-watch-events.ts +121 -0
  361. package/src/{utils → runtime}/rebuild-manager.ts +8 -1
  362. package/src/runtime/worker-events.ts +25 -0
  363. package/src/sd-cli-entry.ts +69 -54
  364. package/src/sd-cli.ts +1 -1
  365. package/src/sd-config.types.ts +6 -16
  366. package/src/{utils → typecheck}/typecheck-non-package.ts +1 -1
  367. package/src/utils/diagnostic-utils.ts +15 -0
  368. package/src/utils/orchestrator-utils.ts +2 -6
  369. package/src/utils/output-utils.ts +1 -1
  370. package/src/utils/package-classify.ts +182 -0
  371. package/src/utils/package-utils.ts +0 -257
  372. package/src/utils/tsc-build.ts +1 -1
  373. package/src/workers/build-change-filter.ts +27 -0
  374. package/src/workers/build-watch-paths.ts +54 -0
  375. package/src/workers/client.worker.ts +258 -328
  376. package/src/workers/library-build.worker.ts +15 -34
  377. package/src/workers/lint.worker.ts +1 -1
  378. package/src/workers/ngtsc-build.worker.ts +19 -46
  379. package/src/workers/server-build.worker.ts +38 -168
  380. package/src/workers/server-esbuild-context.ts +122 -0
  381. package/src/workers/server-runtime.worker.ts +4 -1
  382. package/src/workers/server-watch-manager.ts +124 -0
  383. package/src/workers/shared-worker-lifecycle.ts +24 -0
  384. package/tests/angular/angular-build-pipeline.spec.ts +2 -2
  385. package/tests/angular/angular-compiler-aot.acc.spec.ts +68 -0
  386. package/tests/angular/angular-compiler-aot.spec.ts +80 -0
  387. package/tests/angular/angular-compiler-hmr-removal.verify.md +16 -0
  388. package/tests/angular/vite-angular-plugin-legacy-watch.spec.ts +0 -17
  389. package/tests/angular/vite-angular-plugin-vitest.spec.ts +1 -6
  390. package/tests/angular/vite-angular-plugin-vitest.verify.md +20 -0
  391. package/tests/angular/vite-angular-plugin.spec.ts +4 -178
  392. package/tests/capacitor/capacitor-android.spec.ts +1 -0
  393. package/tests/capacitor/capacitor-build.spec.ts +1 -0
  394. package/tests/capacitor/capacitor-config-writer.acc.spec.ts +108 -0
  395. package/tests/capacitor/capacitor-config-writer.spec.ts +95 -0
  396. package/tests/capacitor/capacitor-icon.spec.ts +1 -0
  397. package/tests/capacitor/capacitor-init.spec.ts +1 -0
  398. package/tests/capacitor/capacitor-npm-config.acc.spec.ts +236 -0
  399. package/tests/capacitor/capacitor-npm-config.spec.ts +132 -0
  400. package/tests/capacitor/capacitor-run.spec.ts +1 -0
  401. package/tests/capacitor/capacitor-workspace.spec.ts +1 -0
  402. package/tests/commands/check.spec.ts +2 -2
  403. package/tests/commands/deployment-phase.acc.spec.ts +142 -0
  404. package/tests/commands/git-phase.acc.spec.ts +158 -0
  405. package/tests/commands/lint.spec.ts +1 -1
  406. package/tests/commands/post-publish-phase.acc.spec.ts +82 -0
  407. package/tests/commands/publish-npm-local-split.verify.md +9 -0
  408. package/tests/commands/publish-responsibility-split.verify.md +13 -0
  409. package/tests/commands/publish-storage-split.verify.md +8 -0
  410. package/tests/commands/publish.spec.ts +1 -1
  411. package/tests/commands/typecheck.spec.ts +18 -18
  412. package/tests/deps/deps-directory-separation.verify.md +15 -0
  413. package/tests/engines/base-engine.spec.ts +65 -6
  414. package/tests/engines/engine-adapter-isolation.spec.ts +11 -18
  415. package/tests/engines/engine-selection.spec.ts +38 -5
  416. package/tests/engines/engine-typecheck-selection.acc.spec.ts +85 -0
  417. package/tests/engines/engine-typecheck-selection.verify.md +8 -0
  418. package/tests/engines/esbuild-client-engine.acc.spec.ts +161 -0
  419. package/tests/engines/esbuild-client-engine.spec.ts +320 -0
  420. package/tests/engines/esbuild-client-engine.verify.md +15 -0
  421. package/tests/engines/normalize-result.verify.md +9 -0
  422. package/tests/engines/vite-dependency-cleanup.verify.md +24 -0
  423. package/tests/orchestrators/build-orchestrator.spec.ts +3 -3
  424. package/tests/orchestrators/dev-orchestrator.spec.ts +799 -0
  425. package/tests/orchestrators/orchestrator-baseenv.verify.md +10 -0
  426. package/tests/orchestrators/orchestrator-diagnostic-formatting.verify.md +10 -0
  427. package/tests/orchestrators/orchestrator-initializemode-signature.verify.md +9 -0
  428. package/tests/orchestrators/typecheck-orchestrator.spec.ts +11 -11
  429. package/tests/orchestrators/watch-orchestrator.spec.ts +511 -0
  430. package/tests/{infra → runtime}/result-collector.spec.ts +1 -1
  431. package/tests/{infra → runtime}/signal-handler.spec.ts +1 -1
  432. package/tests/sd-cli-entry.spec.ts +9 -0
  433. package/tests/utils/angular-build.spec.ts +15 -20
  434. package/tests/utils/angular-compiler-emit.spec.ts +2 -2
  435. package/tests/utils/angular-compiler.spec.ts +2 -2
  436. package/tests/utils/angular-source-file-cache.spec.ts +2 -2
  437. package/tests/utils/concurrency.spec.ts +2 -10
  438. package/tests/utils/dev-http-server.acc.spec.ts +206 -0
  439. package/tests/utils/dev-http-server.spec.ts +181 -0
  440. package/tests/utils/dev-http-server.verify.md +8 -0
  441. package/tests/utils/diagnostic-utils.spec.ts +42 -1
  442. package/tests/utils/engine-stop.spec.ts +1 -1
  443. package/tests/utils/engine-watch-events.acc.spec.ts +217 -0
  444. package/tests/utils/engine-watch-events.spec.ts +141 -0
  445. package/tests/utils/engine-watch-events.verify.md +17 -0
  446. package/tests/utils/esbuild-client-config.acc.spec.ts +443 -0
  447. package/tests/utils/esbuild-client-config.spec.ts +590 -0
  448. package/tests/utils/esbuild-client-config.verify.md +26 -0
  449. package/tests/utils/esbuild-config.spec.ts +11 -1
  450. package/tests/utils/esbuild-index-html.acc.spec.ts +166 -0
  451. package/tests/utils/esbuild-index-html.spec.ts +194 -0
  452. package/tests/utils/esbuild-index-html.verify.md +10 -0
  453. package/tests/utils/esbuild-pwa.acc.spec.ts +203 -0
  454. package/tests/utils/esbuild-pwa.spec.ts +189 -0
  455. package/tests/utils/esbuild-pwa.verify.md +9 -0
  456. package/tests/utils/esbuild-scss-plugin.acc.spec.ts +111 -0
  457. package/tests/utils/esbuild-scss-plugin.spec.ts +150 -0
  458. package/tests/utils/esbuild-scss-plugin.verify.md +8 -0
  459. package/tests/utils/external-modules.spec.ts +1 -1
  460. package/tests/utils/hmr-client-script.acc.spec.ts +128 -0
  461. package/tests/utils/hmr-client-script.spec.ts +44 -0
  462. package/tests/utils/hmr-service-dispatcher.acc.spec.ts +217 -0
  463. package/tests/utils/hmr-service-dispatcher.spec.ts +143 -0
  464. package/tests/utils/hmr-service.acc.spec.ts +139 -0
  465. package/tests/utils/hmr-service.spec.ts +131 -0
  466. package/tests/utils/hmr-service.verify.md +17 -0
  467. package/tests/utils/lint-core.spec.ts +2 -1
  468. package/tests/utils/lint-utils.spec.ts +1 -1
  469. package/tests/utils/lint-with-program.spec.ts +1 -1
  470. package/tests/utils/ngtsc-build-core-write-emit.spec.ts +19 -19
  471. package/tests/utils/ngtsc-build-core.spec.ts +4 -4
  472. package/tests/utils/orchestrator-utils.spec.ts +2 -2
  473. package/tests/utils/output-utils.spec.ts +1 -1
  474. package/tests/utils/package-utils.spec.ts +1 -1
  475. package/tests/utils/rebuild-manager.spec.ts +20 -7
  476. package/tests/utils/replace-deps-split.verify.md +15 -0
  477. package/tests/utils/replace-deps-watch.acc.spec.ts +131 -0
  478. package/tests/utils/replace-deps-watch.spec.ts +91 -0
  479. package/tests/utils/replace-deps-watch.verify.md +9 -0
  480. package/tests/utils/replace-deps.spec.ts +1 -1
  481. package/tests/utils/scss-compiler.spec.ts +1 -1
  482. package/tests/utils/tsc-build.spec.ts +1 -1
  483. package/tests/utils/typecheck-non-package.spec.ts +2 -2
  484. package/tests/utils/worker-utils.spec.ts +2 -1
  485. package/tests/workers/build-change-filter.acc.spec.ts +78 -0
  486. package/tests/workers/build-change-filter.spec.ts +39 -0
  487. package/tests/workers/build-watch-paths-library.verify.md +10 -0
  488. package/tests/workers/build-watch-paths-ngtsc-server.verify.md +12 -0
  489. package/tests/workers/build-watch-paths.acc.spec.ts +101 -0
  490. package/tests/workers/build-watch-paths.spec.ts +121 -0
  491. package/tests/workers/client-worker-browser-support.verify.md +7 -0
  492. package/tests/workers/client-worker-onend-sync.verify.md +7 -0
  493. package/tests/workers/client-worker.acc.spec.ts +185 -0
  494. package/tests/workers/client-worker.spec.ts +91 -178
  495. package/tests/workers/library-build-lint.spec.ts +3 -3
  496. package/tests/workers/library-build-worker.spec.ts +10 -11
  497. package/tests/workers/ngtsc-build-lint.spec.ts +4 -4
  498. package/tests/workers/ngtsc-build-worker.spec.ts +2 -2
  499. package/tests/workers/server-build-lint.spec.ts +4 -4
  500. package/tests/workers/server-build-worker.spec.ts +14 -15
  501. package/tests/workers/server-esbuild-context-integration.verify.md +10 -0
  502. package/tests/workers/server-esbuild-context.acc.spec.ts +98 -0
  503. package/tests/workers/server-esbuild-context.spec.ts +198 -0
  504. package/tests/workers/server-runtime-worker.spec.ts +4 -3
  505. package/tests/workers/server-watch-manager.acc.spec.ts +162 -0
  506. package/tests/workers/server-watch-manager.spec.ts +199 -0
  507. package/tests/workers/shared-worker-lifecycle.acc.spec.ts +27 -0
  508. package/tests/workers/shared-worker-lifecycle.spec.ts +47 -0
  509. package/dist/angular/vite-postcss-inline-plugin.d.ts +0 -18
  510. package/dist/angular/vite-postcss-inline-plugin.d.ts.map +0 -1
  511. package/dist/angular/vite-postcss-inline-plugin.js +0 -108
  512. package/dist/angular/vite-postcss-inline-plugin.js.map +0 -1
  513. package/dist/commands/publish.d.ts.map +0 -1
  514. package/dist/commands/publish.js +0 -689
  515. package/dist/commands/publish.js.map +0 -1
  516. package/dist/engines/ViteEngine.d.ts.map +0 -1
  517. package/dist/engines/ViteEngine.js.map +0 -1
  518. package/dist/infra/ResultCollector.d.ts.map +0 -1
  519. package/dist/infra/ResultCollector.js.map +0 -1
  520. package/dist/infra/SignalHandler.d.ts.map +0 -1
  521. package/dist/infra/SignalHandler.js.map +0 -1
  522. package/dist/orchestrators/DevWatchOrchestrator.d.ts +0 -63
  523. package/dist/orchestrators/DevWatchOrchestrator.d.ts.map +0 -1
  524. package/dist/orchestrators/DevWatchOrchestrator.js +0 -478
  525. package/dist/orchestrators/DevWatchOrchestrator.js.map +0 -1
  526. package/dist/utils/angular-build-pipeline.d.ts.map +0 -1
  527. package/dist/utils/angular-build-pipeline.js.map +0 -1
  528. package/dist/utils/angular-build.d.ts.map +0 -1
  529. package/dist/utils/angular-build.js.map +0 -1
  530. package/dist/utils/angular-compiler.d.ts.map +0 -1
  531. package/dist/utils/angular-compiler.js.map +0 -1
  532. package/dist/utils/engine-stop.d.ts.map +0 -1
  533. package/dist/utils/engine-stop.js.map +0 -1
  534. package/dist/utils/esbuild-config.d.ts.map +0 -1
  535. package/dist/utils/esbuild-config.js.map +0 -1
  536. package/dist/utils/hmr-candidates.d.ts +0 -15
  537. package/dist/utils/hmr-candidates.d.ts.map +0 -1
  538. package/dist/utils/hmr-candidates.js +0 -234
  539. package/dist/utils/hmr-candidates.js.map +0 -1
  540. package/dist/utils/lint-core.d.ts.map +0 -1
  541. package/dist/utils/lint-core.js.map +0 -1
  542. package/dist/utils/lint-utils.d.ts.map +0 -1
  543. package/dist/utils/lint-utils.js.map +0 -1
  544. package/dist/utils/lint-with-program.d.ts.map +0 -1
  545. package/dist/utils/lint-with-program.js.map +0 -1
  546. package/dist/utils/ngtsc-build-core.d.ts.map +0 -1
  547. package/dist/utils/ngtsc-build-core.js.map +0 -1
  548. package/dist/utils/rebuild-manager.d.ts.map +0 -1
  549. package/dist/utils/rebuild-manager.js.map +0 -1
  550. package/dist/utils/replace-deps.d.ts.map +0 -1
  551. package/dist/utils/replace-deps.js.map +0 -1
  552. package/dist/utils/scss-compiler.d.ts.map +0 -1
  553. package/dist/utils/scss-compiler.js.map +0 -1
  554. package/dist/utils/server-production-files.d.ts.map +0 -1
  555. package/dist/utils/server-production-files.js.map +0 -1
  556. package/dist/utils/typecheck-non-package.d.ts.map +0 -1
  557. package/dist/utils/typecheck-non-package.js.map +0 -1
  558. package/dist/utils/typecheck-serialization.d.ts.map +0 -1
  559. package/dist/utils/typecheck-serialization.js.map +0 -1
  560. package/dist/utils/vite-config.d.ts +0 -50
  561. package/dist/utils/vite-config.d.ts.map +0 -1
  562. package/dist/utils/vite-config.js +0 -242
  563. package/dist/utils/vite-config.js.map +0 -1
  564. package/dist/utils/vite-pwa-plugin.d.ts +0 -9
  565. package/dist/utils/vite-pwa-plugin.d.ts.map +0 -1
  566. package/dist/utils/vite-pwa-plugin.js +0 -139
  567. package/dist/utils/vite-pwa-plugin.js.map +0 -1
  568. package/dist/utils/vite-scope-watch-plugin.d.ts +0 -24
  569. package/dist/utils/vite-scope-watch-plugin.d.ts.map +0 -1
  570. package/dist/utils/vite-scope-watch-plugin.js +0 -51
  571. package/dist/utils/vite-scope-watch-plugin.js.map +0 -1
  572. package/dist/utils/worker-events.d.ts +0 -66
  573. package/dist/utils/worker-events.d.ts.map +0 -1
  574. package/dist/utils/worker-events.js +0 -55
  575. package/dist/utils/worker-events.js.map +0 -1
  576. package/dist/utils/worker-utils.d.ts.map +0 -1
  577. package/dist/utils/worker-utils.js.map +0 -1
  578. package/src/angular/vite-postcss-inline-plugin.ts +0 -139
  579. package/src/commands/publish.ts +0 -850
  580. package/src/orchestrators/DevWatchOrchestrator.ts +0 -594
  581. package/src/utils/hmr-candidates.ts +0 -327
  582. package/src/utils/vite-config.ts +0 -318
  583. package/src/utils/vite-pwa-plugin.ts +0 -168
  584. package/src/utils/vite-scope-watch-plugin.ts +0 -77
  585. package/src/utils/worker-events.ts +0 -128
  586. package/tests/angular/angular-compiler-hmr.spec.ts +0 -152
  587. package/tests/angular/hmr-candidates.spec.ts +0 -158
  588. package/tests/angular/linker-disk-cache.spec.ts +0 -171
  589. package/tests/angular/vite-angular-plugin-hmr-fallback.spec.ts +0 -333
  590. package/tests/angular/vite-angular-plugin-hmr.spec.ts +0 -320
  591. package/tests/angular/vite-angular-plugin-scss-hmr.spec.ts +0 -95
  592. package/tests/angular/vite-postcss-inline-plugin.spec.ts +0 -60
  593. package/tests/engines/vite-engine.spec.ts +0 -409
  594. package/tests/orchestrators/dev-watch-orchestrator.spec.ts +0 -1542
  595. package/tests/utils/vite-config.spec.ts +0 -780
  596. package/tests/utils/vite-pwa-plugin.spec.ts +0 -401
  597. package/tests/utils/vite-scope-watch-plugin.spec.ts +0 -218
  598. package/tests/utils/worker-events.spec.ts +0 -147
  599. package/tests/workers/client-worker-legacy.spec.ts +0 -659
  600. /package/dist/{utils → angular}/ngtsc-build-core.js +0 -0
  601. /package/dist/{utils → angular}/scss-compiler.d.ts +0 -0
  602. /package/dist/{utils → angular}/scss-compiler.js +0 -0
  603. /package/dist/{utils → esbuild}/esbuild-config.d.ts +0 -0
  604. /package/dist/{utils → lint}/lint-core.d.ts +0 -0
  605. /package/dist/{utils → lint}/lint-core.js +0 -0
  606. /package/dist/{utils → lint}/lint-utils.d.ts +0 -0
  607. /package/dist/{utils → lint}/lint-utils.js +0 -0
  608. /package/dist/{utils → lint}/lint-with-program.d.ts +0 -0
  609. /package/dist/{utils → lint}/lint-with-program.js +0 -0
  610. /package/dist/{infra → runtime}/ResultCollector.d.ts +0 -0
  611. /package/dist/{infra → runtime}/ResultCollector.js +0 -0
  612. /package/dist/{infra → runtime}/SignalHandler.d.ts +0 -0
  613. /package/dist/{infra → runtime}/SignalHandler.js +0 -0
  614. /package/dist/{utils → runtime}/worker-utils.d.ts +0 -0
  615. /package/dist/{utils → runtime}/worker-utils.js +0 -0
  616. /package/dist/{utils → typecheck}/typecheck-non-package.d.ts +0 -0
  617. /package/dist/{utils → typecheck}/typecheck-serialization.d.ts +0 -0
  618. /package/dist/{utils → typecheck}/typecheck-serialization.js +0 -0
  619. /package/src/{utils → angular}/scss-compiler.ts +0 -0
  620. /package/src/{utils → lint}/lint-core.ts +0 -0
  621. /package/src/{utils → lint}/lint-utils.ts +0 -0
  622. /package/src/{utils → lint}/lint-with-program.ts +0 -0
  623. /package/src/{infra → runtime}/ResultCollector.ts +0 -0
  624. /package/src/{infra → runtime}/SignalHandler.ts +0 -0
  625. /package/src/{utils → runtime}/worker-utils.ts +0 -0
  626. /package/src/{utils → typecheck}/typecheck-serialization.ts +0 -0
@@ -0,0 +1,124 @@
1
+ import fs from "fs";
2
+ import type { ConsolaInstance } from "consola";
3
+ import { FsWatcher, pathx } from "@simplysm/core-node";
4
+ import { err as errNs } from "@simplysm/core-common";
5
+ import type { ServerWatchInfo } from "./server-build.worker";
6
+ import {
7
+ parseTsconfig,
8
+ getPackageSourceFiles,
9
+ } from "../utils/tsconfig";
10
+ import { collectAllExternals } from "../deps/server-externals/server-production-files";
11
+ import { hasFileAddOrRemove } from "./build-change-filter";
12
+ import * as esbuildCtx from "./server-esbuild-context";
13
+
14
+ /**
15
+ * server-build watch 루프 설정
16
+ */
17
+ export interface ServerWatchLoopConfig {
18
+ info: ServerWatchInfo;
19
+ watchPaths: string[];
20
+ logger: ConsolaInstance;
21
+ /** watch 시작 시 수집된 초기 외부 모듈 */
22
+ initialExternals: string[];
23
+ /** 빌드 시작 이벤트 콜백 */
24
+ onBuildStart: () => void;
25
+ /** 빌드 완료 이벤트 콜백 */
26
+ onBuild: (result: { build: { success: boolean; errors?: string[]; warnings?: string[] }; mainJsPath: string }) => void;
27
+ /** 에러 이벤트 콜백 */
28
+ onError: (message: string) => void;
29
+ /** 리빌드 실행 콜백 */
30
+ rebuild: () => Promise<{ build: { success: boolean; errors?: string[]; warnings?: string[] }; mainJsPath: string }>;
31
+ }
32
+
33
+ /**
34
+ * server-build 전용 FsWatcher 감시 루프를 시작한다.
35
+ *
36
+ * onChange 핸들러:
37
+ * - 파일 추가/삭제: tsconfig 재파싱, esbuild context 재생성, 리빌드
38
+ * - 파일 변경: metafile 기반 필터링 → 관련 파일이면 리빌드, 아니면 건너뜀
39
+ */
40
+ export async function startServerWatchLoop(config: ServerWatchLoopConfig): Promise<FsWatcher> {
41
+ const { info, watchPaths, logger } = config;
42
+ let cachedExternal = [...config.initialExternals];
43
+
44
+ const watcher = await FsWatcher.watch(watchPaths);
45
+
46
+ watcher.onChange({ delay: 300 }, async (changes) => {
47
+ try {
48
+ const addOrRemove = hasFileAddOrRemove(changes);
49
+
50
+ if (addOrRemove) {
51
+ config.onBuildStart();
52
+
53
+ // 파일 추가/삭제 시 컨텍스트 재생성
54
+ const newParsedConfig = parseTsconfig(info.pkgDir);
55
+ const newEntryPoints = getPackageSourceFiles(info.pkgDir, newParsedConfig);
56
+
57
+ // package.json이 변경된 경우에만 외부 모듈 재수집
58
+ const hasPackageJsonChange = changes.some((c) =>
59
+ c.path.endsWith("package.json"),
60
+ );
61
+ if (hasPackageJsonChange) {
62
+ cachedExternal = collectAllExternals(info.pkgDir, info.externals);
63
+ }
64
+
65
+ if (info.output.js) {
66
+ await esbuildCtx.recreateContext({
67
+ pkgDir: info.pkgDir,
68
+ entryPoints: newEntryPoints,
69
+ env: info.env,
70
+ external: cachedExternal,
71
+ });
72
+ }
73
+
74
+ const result = await config.rebuild();
75
+ config.onBuild(result);
76
+ return;
77
+ }
78
+
79
+ // 파일 변경만 있는 경우: metafile로 필터링
80
+ if (!esbuildCtx.hasContext()) {
81
+ config.onBuildStart();
82
+ const result = await config.rebuild();
83
+ config.onBuild(result);
84
+ return;
85
+ }
86
+
87
+ const currentMetafile = esbuildCtx.getMetafile();
88
+ if (currentMetafile == null) {
89
+ config.onBuildStart();
90
+ const result = await config.rebuild();
91
+ config.onBuild(result);
92
+ return;
93
+ }
94
+
95
+ // metafile 입력 기반 필터링
96
+ const metafileAbsPaths = new Set(
97
+ Object.keys(currentMetafile.inputs).map((key) => pathx.posixResolve(info.cwd, key)),
98
+ );
99
+
100
+ const hasRelevantChange = changes.some((c) => {
101
+ if (metafileAbsPaths.has(c.path)) return true;
102
+ // pnpm symlink 경로와 esbuild resolved 경로 불일치 대응
103
+ try {
104
+ const realPath = pathx.posix(fs.realpathSync(c.path));
105
+ return metafileAbsPaths.has(realPath);
106
+ } catch {
107
+ return false;
108
+ }
109
+ });
110
+
111
+ if (hasRelevantChange) {
112
+ config.onBuildStart();
113
+ const result = await config.rebuild();
114
+ config.onBuild(result);
115
+ } else {
116
+ logger.debug("변경된 파일이 빌드에 포함되지 않아 리빌드 건너뜀");
117
+ }
118
+ } catch (err) {
119
+ config.onError(errNs.message(err));
120
+ }
121
+ });
122
+
123
+ return watcher;
124
+ }
@@ -0,0 +1,24 @@
1
+ import { type ConsolaInstance, consola } from "consola";
2
+ import {
3
+ setupWorkerConsola,
4
+ registerCleanupHandlers,
5
+ createOnceGuard,
6
+ } from "../runtime/worker-utils";
7
+
8
+ /**
9
+ * Worker Thread의 공통 초기화를 단일 호출로 수행한다.
10
+ *
11
+ * 1. setupWorkerConsola() — consola CLI 모드 설정
12
+ * 2. consola.withTag() — 워커별 태그 로거 생성
13
+ * 3. registerCleanupHandlers() — SIGTERM/SIGINT 정리 핸들러 등록
14
+ * 4. createOnceGuard("startWatch") — startWatch 중복 호출 방지 가드 생성
15
+ */
16
+ export function setupWorkerLifecycle(
17
+ workerName: string,
18
+ cleanupFn: () => void | Promise<void>,
19
+ ): { logger: ConsolaInstance; guardStartWatch: () => void } {
20
+ setupWorkerConsola();
21
+ const logger = consola.withTag(`sd:cli:${workerName}:worker`);
22
+ registerCleanupHandlers(cleanupFn, logger);
23
+ return { logger, guardStartWatch: createOnceGuard("startWatch") };
24
+ }
@@ -1,8 +1,8 @@
1
1
  import { describe, it, expect } from "vitest";
2
2
  import path from "path";
3
3
  import ts from "typescript";
4
- import { AngularBuildPipeline } from "../../src/utils/angular-build-pipeline.js";
5
- import { AngularSourceFileCache } from "../../src/utils/angular-compiler.js";
4
+ import { AngularBuildPipeline } from "../../src/angular/angular-build-pipeline.js";
5
+ import { AngularSourceFileCache } from "../../src/angular/angular-compiler.js";
6
6
  import { getPackageSourceFiles } from "../../src/utils/tsconfig.js";
7
7
 
8
8
  const FIXTURE_DIR = path.resolve(import.meta.dirname, "fixtures/packages/basic-app");
@@ -0,0 +1,68 @@
1
+ import { describe, it, expect, afterEach } from "vitest";
2
+ import path from "path";
3
+ import ts from "typescript";
4
+ import { AngularCompiler, AngularSourceFileCache } from "../../src/angular/angular-compiler.js";
5
+
6
+ const FIXTURE_DIR = path.resolve(import.meta.dirname, "fixtures/packages/basic-app");
7
+ const TSCONFIG_PATH = path.join(FIXTURE_DIR, "tsconfig.json");
8
+ const APP_COMPONENT_PATH = path.join(FIXTURE_DIR, "src/app.component.ts").replace(/\\/g, "/");
9
+
10
+ function loadTsConfig(): { rootNames: string[]; compilerOptions: ts.CompilerOptions } {
11
+ const configFile = ts.readConfigFile(TSCONFIG_PATH, ts.sys.readFile);
12
+ const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, FIXTURE_DIR);
13
+ return { rootNames: parsed.fileNames, compilerOptions: parsed.options };
14
+ }
15
+
16
+ describe("AngularCompiler AOT (HMR dead code 제거 후)", () => {
17
+ let compiler: AngularCompiler | undefined;
18
+
19
+ afterEach(() => {
20
+ compiler = undefined;
21
+ });
22
+
23
+ // Scenario: initialize() 반환에 templateUpdates가 없음
24
+ // Scenario: enableHmr 없이 pipeline.initialize()를 호출하면 AOT 컴파일이 정상 완료된다
25
+ it("initialize returns affectedFiles without templateUpdates", async () => {
26
+ const { rootNames, compilerOptions } = loadTsConfig();
27
+
28
+ compiler = new AngularCompiler({
29
+ rootNames,
30
+ compilerOptions,
31
+ compilerOptionsTransformer: (opts) => ({ ...opts, noEmit: false, declaration: false }),
32
+ });
33
+
34
+ const result = await compiler.initialize();
35
+
36
+ // affectedFiles가 반환된다
37
+ expect(result.affectedFiles).toBeDefined();
38
+ expect(result.affectedFiles.size).toBeGreaterThan(0);
39
+
40
+ // templateUpdates가 반환 객체에 존재하지 않는다
41
+ expect("templateUpdates" in result).toBe(false);
42
+ });
43
+
44
+ // Scenario: update() 반환에 templateUpdates가 없음
45
+ // Scenario: 증분 재컴파일 정상 동작
46
+ it("update returns affectedFiles without templateUpdates", async () => {
47
+ const { rootNames, compilerOptions } = loadTsConfig();
48
+ const sourceFileCache = new AngularSourceFileCache();
49
+
50
+ compiler = new AngularCompiler({
51
+ rootNames,
52
+ compilerOptions,
53
+ sourceFileCache,
54
+ compilerOptionsTransformer: (opts) => ({ ...opts, noEmit: false, declaration: false }),
55
+ });
56
+
57
+ await compiler.initialize();
58
+
59
+ // 파일 변경 후 update() 호출
60
+ const updateResult = await compiler.update([APP_COMPONENT_PATH]);
61
+
62
+ // affectedFiles가 반환된다
63
+ expect(updateResult.affectedFiles).toBeDefined();
64
+
65
+ // templateUpdates가 반환 객체에 존재하지 않는다
66
+ expect("templateUpdates" in updateResult).toBe(false);
67
+ });
68
+ });
@@ -0,0 +1,80 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import path from "path";
3
+ import ts from "typescript";
4
+ import { AngularCompiler, AngularSourceFileCache } from "../../src/angular/angular-compiler.js";
5
+ import { AngularBuildPipeline } from "../../src/angular/angular-build-pipeline.js";
6
+ import { getPackageSourceFiles } from "../../src/utils/tsconfig.js";
7
+
8
+ const FIXTURE_DIR = path.resolve(import.meta.dirname, "fixtures/packages/basic-app");
9
+ const TSCONFIG_PATH = path.join(FIXTURE_DIR, "tsconfig.json");
10
+
11
+ function loadTsConfig(): { rootNames: string[]; compilerOptions: ts.CompilerOptions } {
12
+ const configFile = ts.readConfigFile(TSCONFIG_PATH, ts.sys.readFile);
13
+ const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, FIXTURE_DIR);
14
+ return { rootNames: parsed.fileNames, compilerOptions: parsed.options };
15
+ }
16
+
17
+ describe("AngularCompiler — HMR 코드 제거", () => {
18
+ // initialize() 반환 객체에 templateUpdates 키가 없다
19
+ it("initialize result has no templateUpdates property", async () => {
20
+ const { rootNames, compilerOptions } = loadTsConfig();
21
+ const compiler = new AngularCompiler({
22
+ rootNames,
23
+ compilerOptions,
24
+ compilerOptionsTransformer: (opts) => ({ ...opts, noEmit: false, declaration: false }),
25
+ });
26
+
27
+ const result = await compiler.initialize();
28
+ expect(Object.keys(result)).toEqual(["affectedFiles"]);
29
+ });
30
+
31
+ });
32
+
33
+ describe("AngularBuildPipeline — HMR 전파 제거", () => {
34
+ function createPipelineOptions() {
35
+ const configFile = ts.readConfigFile(TSCONFIG_PATH, ts.sys.readFile);
36
+ const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, FIXTURE_DIR);
37
+ const rootNames = getPackageSourceFiles(FIXTURE_DIR, parsed);
38
+ return {
39
+ mode: "library" as const,
40
+ pkgDir: FIXTURE_DIR,
41
+ cwd: FIXTURE_DIR,
42
+ rootNames,
43
+ compilerOptions: {
44
+ ...parsed.options,
45
+ noEmit: false,
46
+ declaration: false,
47
+ declarationMap: false,
48
+ },
49
+ angularCompilerOptions: parsed.raw?.angularCompilerOptions as
50
+ | Record<string, unknown>
51
+ | undefined,
52
+ };
53
+ }
54
+
55
+ // PipelineResult에 templateUpdates가 없다
56
+ it("pipeline result has no templateUpdates property", async () => {
57
+ const pipeline = new AngularBuildPipeline(createPipelineOptions());
58
+ const result = await pipeline.initialize();
59
+
60
+ expect("templateUpdates" in result).toBe(false);
61
+ expect(result.affectedFiles).toBeDefined();
62
+ expect(result.diagnostics).toBeDefined();
63
+ expect(result.scssErrors).toBeDefined();
64
+ });
65
+
66
+ // pipeline update 결과에도 templateUpdates가 없다
67
+ it("pipeline update result has no templateUpdates property", async () => {
68
+ const pipeline = new AngularBuildPipeline({
69
+ ...createPipelineOptions(),
70
+ sourceFileCache: new AngularSourceFileCache(),
71
+ });
72
+ await pipeline.initialize();
73
+
74
+ const appPath = path.join(FIXTURE_DIR, "src/app.component.ts").replace(/\\/g, "/");
75
+ const updateResult = await pipeline.update([appPath]);
76
+
77
+ expect("templateUpdates" in updateResult).toBe(false);
78
+ expect(updateResult.affectedFiles).toBeDefined();
79
+ });
80
+ });
@@ -0,0 +1,16 @@
1
+ # AngularCompiler HMR dead code 제거 — LLM 검증
2
+
3
+ ## 검증 항목
4
+
5
+ - [x] enableHmr 프로퍼티가 AngularCompilerOptions에서 제거됨: `angular-compiler.ts` 인터페이스에 `enableHmr` 없음 확인
6
+ - [x] HMR_MODIFIED_FILE_LIMIT 상수가 제거됨: `angular-compiler.ts`에서 해당 상수 없음 확인
7
+ - [x] collectHmrCandidates import가 제거됨: `angular-compiler.ts`에서 `hmr-candidates` import 없음 확인
8
+ - [x] stale source file 수집 로직이 제거됨: `angular-compiler.ts`에서 `staleSourceFiles`, `useHmr` 변수 없음 확인
9
+ - [x] enableHmr 프로퍼티가 AngularBuildPipelineOptions에서 제거됨: `angular-build-pipeline.ts` 인터페이스에 `enableHmr` 없음 확인
10
+ - [x] templateUpdates 프로퍼티가 PipelineResult에서 제거됨: `angular-build-pipeline.ts` 인터페이스에 `templateUpdates` 없음 확인
11
+ - [x] vite-angular-plugin.ts의 `enableHmr: false` 제거됨: Pipeline 생성 시 `enableHmr` 옵션 없음 확인
12
+ - [x] hmr-candidates.ts 파일 삭제됨: `src/utils/hmr-candidates.ts` 파일 존재하지 않음
13
+ - [x] angular-compiler-hmr.spec.ts 삭제됨: `tests/angular/angular-compiler-hmr.spec.ts` 파일 존재하지 않음
14
+ - [x] hmr-candidates.spec.ts 삭제됨: `tests/angular/hmr-candidates.spec.ts` 파일 존재하지 않음
15
+ - [x] client.worker.ts 변경 없음: `client.worker.ts`는 `createCompilerPlugin` 경로를 사용하며 AngularCompiler를 직접 참조하지 않음
16
+ - [x] hmr-service.ts, hmr-client-script.ts, esbuild-client-config.ts 변경 없음: client.worker.ts 경로의 HMR 인프라는 그대로 유지됨
@@ -27,10 +27,8 @@ describe("sdAngularPlugin legacy watch rebuild", () => {
27
27
 
28
28
  // Acceptance: 재빌드 시 변경 파일의 캐시가 무효화되고 증분 컴파일된다
29
29
  it("invalidates cache and produces updated output on watch rebuild", async () => {
30
- const onBuild = vi.fn();
31
30
  const plugin = sdAngularPlugin({
32
31
  pkg: "basic-app",
33
- onBuild,
34
32
  });
35
33
 
36
34
  // 초기 빌드
@@ -58,21 +56,13 @@ describe("sdAngularPlugin legacy watch rebuild", () => {
58
56
  expect(rebuiltResult.code).toBeDefined();
59
57
  expect(rebuiltResult.code.length).toBeGreaterThan(0);
60
58
 
61
- // onBuild이 초기 빌드와 재빌드 모두에서 호출되어야 한다
62
- expect(onBuild).toHaveBeenCalledTimes(2);
63
- expect(onBuild).toHaveBeenCalledWith(
64
- expect.objectContaining({ success: true }),
65
- );
66
-
67
59
  await (plugin as any).buildEnd?.call({});
68
60
  });
69
61
 
70
62
  // Acceptance: 첫 buildStart는 기존 로직으로 전체 컴파일한다
71
63
  it("performs full compilation on first buildStart", async () => {
72
- const onBuild = vi.fn();
73
64
  const plugin = sdAngularPlugin({
74
65
  pkg: "basic-app",
75
- onBuild,
76
66
  });
77
67
 
78
68
  // watchChange 없이 첫 buildStart
@@ -86,20 +76,13 @@ describe("sdAngularPlugin legacy watch rebuild", () => {
86
76
  expect(result).toBeDefined();
87
77
  expect(result.code.length).toBeGreaterThan(0);
88
78
 
89
- // onBuild 정상 호출
90
- expect(onBuild).toHaveBeenCalledWith(
91
- expect.objectContaining({ success: true }),
92
- );
93
-
94
79
  await (plugin as any).buildEnd?.call({});
95
80
  });
96
81
 
97
82
  // Acceptance: watchChange 없이 buildStart 재호출 시에도 정상 동작
98
83
  it("handles buildStart re-invocation without watchChange gracefully", async () => {
99
- const onBuild = vi.fn();
100
84
  const plugin = sdAngularPlugin({
101
85
  pkg: "basic-app",
102
- onBuild,
103
86
  });
104
87
 
105
88
  // 초기 빌드
@@ -55,17 +55,12 @@ describe("sdAngularPlugin Vitest 지원", () => {
55
55
  createTestSdConfig({ target: "browser" } as any),
56
56
  );
57
57
 
58
- const onBuild = vi.fn();
59
- const browserPlugin = sdAngularPlugin({ pkg: "basic-app", onBuild });
58
+ const browserPlugin = sdAngularPlugin({ pkg: "basic-app" });
60
59
 
61
60
  await (browserPlugin as any).config?.({}, { mode: "development", command: "serve" });
62
61
  (browserPlugin as any).configResolved?.({ build: { sourcemap: false } });
63
62
  await (browserPlugin as any).buildStart?.call({});
64
63
 
65
- expect(onBuild).toHaveBeenCalledWith(
66
- expect.objectContaining({ success: expect.any(Boolean) }),
67
- );
68
-
69
64
  const appComponentPath = resolve(PKG_DIR, "src/app.component.ts");
70
65
  const result = await (browserPlugin as any).transform?.call({}, "", appComponentPath);
71
66
  expect(result).toBeDefined();
@@ -0,0 +1,20 @@
1
+ # Slice 2: Vite 제거 + vite-angular-plugin 축소 — LLM 검증
2
+
3
+ ## 검증 항목
4
+
5
+ - [x] vite-config.ts 삭제됨: `ls packages/sd-cli/src/utils/vite-config.ts` → 파일 없음 확인
6
+ - [x] vite-scope-watch-plugin.ts 삭제됨: `ls packages/sd-cli/src/utils/vite-scope-watch-plugin.ts` → 파일 없음 확인
7
+ - [x] vite-postcss-inline-plugin.ts 삭제됨: `ls packages/sd-cli/src/angular/vite-postcss-inline-plugin.ts` → 파일 없음 확인
8
+ - [x] vite-pwa-plugin.ts 삭제됨: `ls packages/sd-cli/src/utils/vite-pwa-plugin.ts` → 파일 없음 확인
9
+ - [x] vite-angular-plugin.ts에서 config() 훅 유지: config()는 isDev, pkgConfig, resolvedPkgDir 초기화에 필수. Vitest가 Vite plugin lifecycle을 호출하므로 유지. 단, optimizeDeps/define 반환값 제거됨
10
+ - [x] vite-angular-plugin.ts에서 configResolved() 훅 유지: enableSourcemap 설정에 필요. 단, prebundleTransformer 생성 제거됨
11
+ - [x] handleHotUpdate() 제거됨: HMR 배칭(pendingHmrFiles, hmrBatchTimer, processHmrBatch) 모두 제거됨
12
+ - [x] configureServer() 제거됨: devServer, isDevServer, angularComponentMiddleware 모두 제거됨
13
+ - [x] onBuildStart/onBuild 콜백 제거됨: SdAngularPluginOptions에서 onBuildStart, onBuild 필드 삭제됨. buildStart()에서 options.onBuild 호출 제거됨
14
+ - [x] resolveReplaceDeps() 제거됨: scope watch 관련 replaceDepDistPaths, resolveReplaceDepEntries import 모두 제거됨
15
+ - [x] watchChange(id) 유지됨: pendingWatchChanges에 파일 경로 수집. Vitest watch 모드에서 캐시 무효화에 사용
16
+ - [x] buildStart() 유지됨: tsconfig 파싱, AngularSourceFileCache 생성/재사용, AngularBuildPipeline 초기화, 전체/증분 컴파일 수행. enableHmr: false로 고정 (Vitest에서 HMR 불필요)
17
+ - [x] transform() 유지됨: .ts 파일에 대해 Pipeline emit JS 반환 + JavaScriptTransformer 적용. query param 제거 및 인라인 소스맵 분리 로직 유지
18
+ - [x] buildEnd() 간소화됨: isDev 분기 제거. 항상 jsTransformer.close() + pipeline 해제. prebundleTransformer 제거
19
+ - [x] Vite 타입 import 축소: `ModuleNode`, `ViteDevServer` import 제거됨. `Plugin` 타입만 유지
20
+ - [x] 미사용 import 제거: `createHash`, `fsp`, `fs`, `IncomingMessage`, `ServerResponse`, `SdConfig`, `resolveReplaceDepEntries` 제거됨
@@ -23,20 +23,7 @@ beforeEach(() => {
23
23
  });
24
24
 
25
25
  describe("sdAngularPlugin", () => {
26
- // Scenario: Angular define 설정
27
- it("sets ngDevMode and ngJitMode defines", async () => {
28
- const devPlugin = sdAngularPlugin({ pkg: "basic-app"});
29
- const prodPlugin = sdAngularPlugin({ pkg: "basic-app"});
30
-
31
- const devConfig = await (devPlugin as any).config?.({}, { mode: "development", command: "serve" });
32
- const prodConfig = await (prodPlugin as any).config?.({}, { mode: "production", command: "build" });
33
-
34
- expect(devConfig?.define?.ngJitMode).toBe("false");
35
- expect(devConfig?.define?.ngDevMode).toBeUndefined();
36
-
37
- expect(prodConfig?.define?.ngJitMode).toBe("false");
38
- expect(prodConfig?.define?.ngDevMode).toBe("false");
39
- });
26
+ // config() define 반환은 Vitest 축소로 제거됨 (esbuild-client-config에서 처리)
40
27
 
41
28
  // Scenario: non-Angular .ts 파일은 기본 처리
42
29
  it("returns undefined for non-emitted .ts files", async () => {
@@ -60,159 +47,8 @@ describe("sdAngularPlugin", () => {
60
47
  await (plugin as any).buildEnd?.call({});
61
48
  });
62
49
 
63
- // Scenario: Angular 컴포넌트 .ts 파일 수정 시 컴포넌트 HMR
64
- it("updates emit cache and returns affected modules when handleHotUpdate is called", async () => {
65
- const onBuildStart = vi.fn();
66
- const onBuild = vi.fn();
67
-
68
- const plugin = sdAngularPlugin({
69
- pkg: "basic-app",
70
-
71
- onBuildStart,
72
- onBuild,
73
- });
74
- await initPlugin(plugin);
75
-
76
- const appComponentPath = path
77
- .join(PKG_DIR, "src/app.component.ts")
78
- .replace(/\\/g, "/");
79
-
80
- const initialResult = await (plugin as any).transform?.call({}, "", appComponentPath);
81
- expect(initialResult).toBeDefined();
82
- expect(initialResult.code.length).toBeGreaterThan(0);
83
-
84
- expect((plugin as any).handleHotUpdate).toBeDefined();
85
-
86
- const mockModule = { file: appComponentPath, id: appComponentPath };
87
- const hmrResult = await (plugin as any).handleHotUpdate?.({
88
- file: appComponentPath,
89
- modules: [mockModule],
90
- server: { watcher: { emit: vi.fn() } },
91
- timestamp: Date.now(),
92
- read: () => Promise.resolve(""),
93
- });
94
-
95
- expect(onBuildStart).toHaveBeenCalled();
96
- expect(onBuild).toHaveBeenCalledWith(
97
- expect.objectContaining({ success: expect.any(Boolean) }),
98
- );
99
- expect(Array.isArray(hmrResult)).toBe(true);
100
-
101
- const afterResult = await (plugin as any).transform?.call({}, "", appComponentPath);
102
- expect(afterResult).toBeDefined();
103
- expect(afterResult.code.length).toBeGreaterThan(0);
104
-
105
- await (plugin as any).buildEnd?.call({});
106
- });
107
-
108
- // Scenario: ngHmrMode define 설정
109
- it("sets ngHmrMode in dev mode and disables in prod mode", async () => {
110
- const devPlugin = sdAngularPlugin({ pkg: "basic-app"});
111
- const prodPlugin = sdAngularPlugin({ pkg: "basic-app"});
112
-
113
- const devConfig = await (devPlugin as any).config?.({}, { mode: "development", command: "serve" });
114
- const prodConfig = await (prodPlugin as any).config?.({}, { mode: "production", command: "build" });
115
-
116
- expect(devConfig?.define?.ngHmrMode).toBeUndefined();
117
- expect(prodConfig?.define?.ngHmrMode).toBe("false");
118
- });
119
-
120
- // Scenario: 컴파일 에러 발생 및 복구
121
- it("calls onBuild with success=false when handleHotUpdate encounters compile error", async () => {
122
- const onBuild = vi.fn();
123
- const plugin = sdAngularPlugin({
124
- pkg: "basic-app",
125
-
126
- onBuild,
127
- });
128
- await initPlugin(plugin);
129
-
130
- const _hmrResult = await (plugin as any).handleHotUpdate?.({
131
- file: path.join(PKG_DIR, "src/nonexistent-file.ts").replace(/\\/g, "/"),
132
- modules: [],
133
- server: { watcher: { emit: vi.fn() } },
134
- timestamp: Date.now(),
135
- read: () => Promise.resolve(""),
136
- });
137
-
138
- expect(onBuild).toHaveBeenCalled();
139
- await (plugin as any).buildEnd?.call({});
140
- });
141
-
142
- // Scenario: non-Angular .ts 파일 수정 — handleHotUpdate passes through
143
- it("handleHotUpdate skips non-ts/html/scss files", async () => {
144
- const onBuildStart = vi.fn();
145
- const plugin = sdAngularPlugin({
146
- pkg: "basic-app",
147
-
148
- onBuildStart,
149
- });
150
- await initPlugin(plugin);
151
-
152
- const result = await (plugin as any).handleHotUpdate?.({
153
- file: "/some/file.json",
154
- modules: [],
155
- server: {},
156
- timestamp: Date.now(),
157
- read: () => Promise.resolve(""),
158
- });
159
-
160
- expect(result).toBeUndefined();
161
- expect(onBuildStart).not.toHaveBeenCalled();
162
- await (plugin as any).buildEnd?.call({});
163
- });
164
-
165
- // Scenario: dev 모드에서 buildEnd 후 facade 유지
166
- it("keeps facade alive after buildEnd in dev mode", async () => {
167
- const plugin = sdAngularPlugin({ pkg: "basic-app"});
168
- await initPlugin(plugin);
169
- await (plugin as any).buildEnd?.call({});
170
-
171
- const appComponentPath = path
172
- .join(PKG_DIR, "src/app.component.ts")
173
- .replace(/\\/g, "/");
174
- const result = await (plugin as any).transform?.call({}, "", appComponentPath);
175
- expect(result).toBeDefined();
176
- expect(result.code.length).toBeGreaterThan(0);
177
- });
178
-
179
- // Scenario: optimizeDeps에 Angular Linker esbuild 플러그인이 등록된다
180
- it("registers angular-vite-optimize-deps esbuild plugin in optimizeDeps config", async () => {
181
- const plugin = sdAngularPlugin({ pkg: "basic-app"});
182
- const config = await (plugin as any).config?.({}, { mode: "development", command: "serve" });
183
-
184
- const esbuildPlugins = config?.optimizeDeps?.esbuildOptions?.plugins as
185
- | { name: string }[]
186
- | undefined;
187
- expect(esbuildPlugins).toBeDefined();
188
- expect(esbuildPlugins!.some((p) => p.name === "angular-vite-optimize-deps")).toBe(true);
189
- });
190
-
191
- // Scenario: replaceDeps 없을 때 .js 변경은 무시
192
- it("handleHotUpdate ignores .js files when no replaceDeps configured", async () => {
193
- const plugin = sdAngularPlugin({ pkg: "basic-app"});
194
- await initPlugin(plugin);
195
-
196
- const mockHotSend = vi.fn();
197
- const mockServer = {
198
- middlewares: { use: vi.fn() },
199
- httpServer: { on: vi.fn() },
200
- config: { base: "/" },
201
- hot: { send: mockHotSend },
202
- };
203
- (plugin as any).configureServer?.(mockServer);
204
-
205
- const hmrResult = await (plugin as any).handleHotUpdate?.({
206
- file: "/some/external/lib.js",
207
- modules: [],
208
- server: mockServer,
209
- timestamp: Date.now(),
210
- read: () => Promise.resolve(""),
211
- });
212
-
213
- expect(hmrResult).toBeUndefined();
214
- await (plugin as any).buildEnd?.call({});
215
- });
50
+ // handleHotUpdate, configureServer, optimizeDeps는 Vitest 축소로 제거됨
51
+ // Feature 3.3에서 esbuild 기반 테스트로 교체 예정
216
52
 
217
53
  // Scenario: .mjs 파일이 JavaScriptTransformer를 통과한다
218
54
  it("transforms .mjs files through JavaScriptTransformer", async () => {
@@ -283,17 +119,7 @@ describe("sdAngularPlugin", () => {
283
119
  await (plugin as any).buildEnd?.call({});
284
120
  });
285
121
 
286
- // Scenario: legacyModule이 sd.config.ts에서 resolve되어 HMR 비활성화
287
- it("resolves legacyModule from sd.config.ts and disables HMR", async () => {
288
- mockLoadSdConfig.mockResolvedValue(
289
- createTestSdConfig({ browserSupport: { legacyModule: true } }),
290
- );
291
-
292
- const plugin = sdAngularPlugin({ pkg: "basic-app" });
293
- const config = await (plugin as any).config?.({}, { mode: "development", command: "serve" });
294
-
295
- expect(config?.define?.ngHmrMode).toBe("false");
296
- });
122
+ // config() define 반환값은 Vitest 축소로 제거됨 (Feature 3.3에서 별도 테스트)
297
123
 
298
124
  // Scenario: browserSupport 미설정 시 기본값 동작
299
125
  it("works when browserSupport is not set in sd.config.ts", async () => {
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-restricted-properties -- 테스트 환경변수 조작 필요 */
1
2
  import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
3
 
3
4
  //#region Mocks
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-restricted-properties -- 테스트 환경변수 조작 필요 */
1
2
  import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
3
  import { consola } from "consola";
3
4