@simplysm/sd-cli 14.0.30 → 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,78 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { consola } from "consola";
3
+ import { hasFileAddOrRemove, shouldSkipRebuild } from "../../src/workers/build-change-filter";
4
+
5
+ beforeEach(() => {
6
+ vi.restoreAllMocks();
7
+ });
8
+
9
+ describe("hasFileAddOrRemove + shouldSkipRebuild integration", () => {
10
+ const logger = consola.withTag("test");
11
+
12
+ // Scenario: 관련 없는 파일 변경은 리빌드를 건너뛴다
13
+ it("skips rebuild when changed files are not in source file paths", () => {
14
+ const changes = [{ event: "change", path: "c.ts" }];
15
+ const lastSourceFilePaths = new Set(["a.ts", "b.ts"]);
16
+
17
+ const addOrRemove = hasFileAddOrRemove(changes);
18
+ const skip = shouldSkipRebuild(
19
+ changes.map((c) => c.path),
20
+ addOrRemove,
21
+ lastSourceFilePaths,
22
+ logger,
23
+ );
24
+
25
+ expect(addOrRemove).toBe(false);
26
+ expect(skip).toBe(true);
27
+ });
28
+
29
+ // Scenario: 관련 있는 파일 변경은 리빌드를 수행한다
30
+ it("does not skip rebuild when changed files are in source file paths", () => {
31
+ const changes = [{ event: "change", path: "a.ts" }];
32
+ const lastSourceFilePaths = new Set(["a.ts", "b.ts"]);
33
+
34
+ const addOrRemove = hasFileAddOrRemove(changes);
35
+ const skip = shouldSkipRebuild(
36
+ changes.map((c) => c.path),
37
+ addOrRemove,
38
+ lastSourceFilePaths,
39
+ logger,
40
+ );
41
+
42
+ expect(addOrRemove).toBe(false);
43
+ expect(skip).toBe(false);
44
+ });
45
+
46
+ // Scenario: 파일 추가/삭제가 있으면 항상 리빌드를 수행한다
47
+ it("does not skip rebuild when files are added", () => {
48
+ const changes = [{ event: "add", path: "d.ts" }];
49
+ const lastSourceFilePaths = new Set(["a.ts", "b.ts"]);
50
+
51
+ const addOrRemove = hasFileAddOrRemove(changes);
52
+ const skip = shouldSkipRebuild(
53
+ changes.map((c) => c.path),
54
+ addOrRemove,
55
+ lastSourceFilePaths,
56
+ logger,
57
+ );
58
+
59
+ expect(addOrRemove).toBe(true);
60
+ expect(skip).toBe(false);
61
+ });
62
+
63
+ // Scenario: lastSourceFilePaths가 없으면 항상 리빌드를 수행한다
64
+ it("does not skip rebuild when lastSourceFilePaths is undefined", () => {
65
+ const changes = [{ event: "change", path: "c.ts" }];
66
+
67
+ const addOrRemove = hasFileAddOrRemove(changes);
68
+ const skip = shouldSkipRebuild(
69
+ changes.map((c) => c.path),
70
+ addOrRemove,
71
+ undefined,
72
+ logger,
73
+ );
74
+
75
+ expect(addOrRemove).toBe(false);
76
+ expect(skip).toBe(false);
77
+ });
78
+ });
@@ -0,0 +1,39 @@
1
+ import { describe, it, expect, vi } from "vitest";
2
+ import { consola } from "consola";
3
+ import { hasFileAddOrRemove, shouldSkipRebuild } from "../../src/workers/build-change-filter";
4
+
5
+ describe("hasFileAddOrRemove", () => {
6
+ it("returns false when only change events", () => {
7
+ expect(hasFileAddOrRemove([{ event: "change", path: "a.ts" }])).toBe(false);
8
+ });
9
+
10
+ it("returns true when add event exists", () => {
11
+ expect(hasFileAddOrRemove([{ event: "add", path: "a.ts" }])).toBe(true);
12
+ });
13
+
14
+ it("returns true when unlink event exists", () => {
15
+ expect(hasFileAddOrRemove([{ event: "unlink", path: "a.ts" }])).toBe(true);
16
+ });
17
+
18
+ it("returns false for empty changes", () => {
19
+ expect(hasFileAddOrRemove([])).toBe(false);
20
+ });
21
+ });
22
+
23
+ describe("shouldSkipRebuild", () => {
24
+ const logger = consola.withTag("test");
25
+
26
+ it("logs debug message when skipping rebuild", () => {
27
+ const debugSpy = vi.spyOn(logger, "debug");
28
+ shouldSkipRebuild(["x.ts"], false, new Set(["a.ts", "b.ts"]), logger);
29
+ expect(debugSpy).toHaveBeenCalledWith(
30
+ "변경된 파일이 빌드에 포함되지 않아 리빌드 건너뜀",
31
+ );
32
+ });
33
+
34
+ it("accepts Iterable<string> (Set) as filePaths", () => {
35
+ const filePaths = new Set(["c.ts"]);
36
+ const result = shouldSkipRebuild(filePaths, false, new Set(["a.ts"]), logger);
37
+ expect(result).toBe(true);
38
+ });
39
+ });
@@ -0,0 +1,10 @@
1
+ # library-build watchPaths 동일성 — LLM 검증
2
+
3
+ ## 검증 항목
4
+
5
+ - [x] buildWatchPaths 호출 인자가 기존 코드와 동등: `srcGlobs: ["*.ts"]`, `replaceDeps: info.replaceDeps` — 기존 `pathx.posixResolve(info.pkgDir, "src", "**", "*.ts")` 패턴과 동일한 경로 생성 확인
6
+ - [x] workspace deps 경로 생성이 동일: 기존 `workspaceDeps.map((d) => pathx.posixResolve(info.cwd, "packages", d, "src", "**", "*.ts"))` → buildWatchPaths 내부에서 동일하게 `pathx.posixResolve(cwd, "packages", d)` + `src/**/*.ts` 생성
7
+ - [x] replaceDeps dist 경로가 cwd와 pkgDir 양쪽에서 생성됨: buildWatchPaths 내부에서 `pathx.posixResolve(cwd, "node_modules", ...pkg.split("/"), "dist", "**", "*.{js,mjs,cjs}")` 및 pkgDir 경로 동일하게 생성
8
+ - [x] collectDeps import 제거됨: library-build.worker.ts에서 collectDeps가 더 이상 직접 import되지 않음 — buildWatchPaths가 내부에서 호출
9
+ - [x] 변경 필터링 동작 동일: 기존 `hasFileAddOrRemove` 인라인 로직 + `lastSourceFilePaths` 교차가 `shouldSkipRebuild(changes.map(c => c.path), hasFileAddOrRemove(changes), lastSourceFilePaths, logger)`로 동일하게 대체됨
10
+ - [x] 기존 테스트(library-build-worker.spec.ts) 16건 모두 통과 확인
@@ -0,0 +1,12 @@
1
+ # ngtsc-build, server-build watchPaths 적용 — LLM 검증
2
+
3
+ ## 검증 항목
4
+
5
+ - [x] ngtsc-build watchPaths 동일성: `srcGlobs: ["*.{ts,scss,css}"]`, `extraDirs: [{ dir: "scss", globs: ["*.{scss,css}"] }]` — 기존 코드의 `src/**/*.{ts,scss,css}` + `scss/**/*.{scss,css}` + deps 동일 패턴과 매칭 확인
6
+ - [x] ngtsc-build SCSS 역방향 탐색 유지: `hasFileAddOrRemove` → `hasFileAddOrRemoveFn`으로 변경 후에도 `modifiedFiles` 구성 로직(pipeline.findAffectedByScss)이 그대로 유지됨
7
+ - [x] ngtsc-build `shouldSkipRebuild(modifiedFiles, addOrRemove, ...)`: SCSS 역방향 탐색 결과가 포함된 `modifiedFiles` Set을 Iterable로 전달하여 정확한 필터링 수행
8
+ - [x] server-build watchPaths 동일성: `srcGlobs: ["*"]` — 기존 `src/**/*` 패턴과 동일
9
+ - [x] server-build metafile 기반 필터링 유지: `hasFileAddOrRemoveFn(changes)` → `addOrRemove` 변수명으로 변경 외에 metafile 기반 로직(L444-470) 무변경
10
+ - [x] server-build esbuild context 재생성 로직 유지: `if (addOrRemove)` 블록 내 context 재생성 로직이 기존과 동일
11
+ - [x] collectDeps import 제거: ngtsc-build, server-build 모두에서 collectDeps 직접 import 제거됨 — buildWatchPaths가 내부에서 호출
12
+ - [x] 기존 테스트 94건 모두 통과 확인
@@ -0,0 +1,101 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+
3
+ // collectDeps는 파일 시스템에 의존하므로 모킹
4
+ vi.mock("../../src/deps/replace-deps/collect-deps", () => ({
5
+ collectDeps: vi.fn(),
6
+ }));
7
+
8
+ const { collectDeps } = await import("../../src/deps/replace-deps/collect-deps");
9
+ const { buildWatchPaths } = await import("../../src/workers/build-watch-paths");
10
+
11
+ const mockCollectDeps = vi.mocked(collectDeps);
12
+
13
+ beforeEach(() => {
14
+ vi.restoreAllMocks();
15
+ });
16
+
17
+ describe("buildWatchPaths", () => {
18
+ // Scenario: library-build의 감시 경로가 공통 함수로 생성된다
19
+ it("generates watchPaths for library-build pattern (srcGlobs=['*.ts'])", () => {
20
+ mockCollectDeps.mockReturnValue({
21
+ workspaceDeps: ["core-common"],
22
+ replaceDeps: ["@external/lib"],
23
+ });
24
+
25
+ const result = buildWatchPaths({
26
+ pkgDir: "/workspace/packages/my-lib",
27
+ cwd: "/workspace",
28
+ srcGlobs: ["*.ts"],
29
+ replaceDeps: { "@external/*": "../external" },
30
+ });
31
+
32
+ // 자체 src
33
+ expect(result.watchPaths).toContainEqual(
34
+ expect.stringContaining("my-lib/src/**/*.ts"),
35
+ );
36
+ // workspace dep src
37
+ expect(result.watchPaths).toContainEqual(
38
+ expect.stringContaining("core-common/src/**/*.ts"),
39
+ );
40
+ // replaceDeps dist (cwd + pkgDir 두 위치)
41
+ expect(result.watchPaths).toContainEqual(
42
+ expect.stringContaining("node_modules/@external/lib/dist/**/*.{js,mjs,cjs}"),
43
+ );
44
+ // deps 결과 반환
45
+ expect(result.deps.workspaceDeps).toEqual(["core-common"]);
46
+ expect(result.deps.replaceDeps).toEqual(["@external/lib"]);
47
+ });
48
+
49
+ // Scenario: ngtsc-build의 감시 경로가 scss 디렉토리를 포함하여 생성된다
50
+ it("generates watchPaths for ngtsc-build pattern with extraDirs", () => {
51
+ mockCollectDeps.mockReturnValue({
52
+ workspaceDeps: ["core-common"],
53
+ replaceDeps: [],
54
+ });
55
+
56
+ const result = buildWatchPaths({
57
+ pkgDir: "/workspace/packages/angular-lib",
58
+ cwd: "/workspace",
59
+ srcGlobs: ["*.{ts,scss,css}"],
60
+ extraDirs: [{ dir: "scss", globs: ["*.{scss,css}"] }],
61
+ });
62
+
63
+ // 자체 src + scss
64
+ expect(result.watchPaths).toContainEqual(
65
+ expect.stringContaining("angular-lib/src/**/*.{ts,scss,css}"),
66
+ );
67
+ expect(result.watchPaths).toContainEqual(
68
+ expect.stringContaining("angular-lib/scss/**/*.{scss,css}"),
69
+ );
70
+ // workspace dep src + scss
71
+ expect(result.watchPaths).toContainEqual(
72
+ expect.stringContaining("core-common/src/**/*.{ts,scss,css}"),
73
+ );
74
+ expect(result.watchPaths).toContainEqual(
75
+ expect.stringContaining("core-common/scss/**/*.{scss,css}"),
76
+ );
77
+ });
78
+
79
+ // Scenario: server-build의 감시 경로가 모든 파일을 대상으로 생성된다
80
+ it("generates watchPaths for server-build pattern (srcGlobs=['*'])", () => {
81
+ mockCollectDeps.mockReturnValue({
82
+ workspaceDeps: ["core-node"],
83
+ replaceDeps: [],
84
+ });
85
+
86
+ const result = buildWatchPaths({
87
+ pkgDir: "/workspace/packages/server",
88
+ cwd: "/workspace",
89
+ srcGlobs: ["*"],
90
+ });
91
+
92
+ // 자체 src
93
+ expect(result.watchPaths).toContainEqual(
94
+ expect.stringContaining("server/src/**/*"),
95
+ );
96
+ // workspace dep src
97
+ expect(result.watchPaths).toContainEqual(
98
+ expect.stringContaining("core-node/src/**/*"),
99
+ );
100
+ });
101
+ });
@@ -0,0 +1,121 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+
3
+ vi.mock("../../src/deps/replace-deps/collect-deps", () => ({
4
+ collectDeps: vi.fn(),
5
+ }));
6
+
7
+ const { collectDeps } = await import("../../src/deps/replace-deps/collect-deps");
8
+ const { buildWatchPaths } = await import("../../src/workers/build-watch-paths");
9
+
10
+ const mockCollectDeps = vi.mocked(collectDeps);
11
+
12
+ beforeEach(() => {
13
+ vi.restoreAllMocks();
14
+ });
15
+
16
+ describe("buildWatchPaths", () => {
17
+ it("passes replaceDeps config to collectDeps", () => {
18
+ mockCollectDeps.mockReturnValue({ workspaceDeps: [], replaceDeps: [] });
19
+
20
+ const config = { "@ext/*": "../ext" };
21
+ buildWatchPaths({
22
+ pkgDir: "/ws/packages/lib",
23
+ cwd: "/ws",
24
+ srcGlobs: ["*.ts"],
25
+ replaceDeps: config,
26
+ });
27
+
28
+ expect(mockCollectDeps).toHaveBeenCalledWith("/ws/packages/lib", "/ws", config);
29
+ });
30
+
31
+ it("includes src globs for pkgDir and each workspace dep", () => {
32
+ mockCollectDeps.mockReturnValue({
33
+ workspaceDeps: ["dep-a", "dep-b"],
34
+ replaceDeps: [],
35
+ });
36
+
37
+ const { watchPaths } = buildWatchPaths({
38
+ pkgDir: "/ws/packages/lib",
39
+ cwd: "/ws",
40
+ srcGlobs: ["*.ts"],
41
+ });
42
+
43
+ // 자체 src
44
+ expect(watchPaths.some((p) => p.includes("lib/src/**/*.ts"))).toBe(true);
45
+ // dep-a src
46
+ expect(watchPaths.some((p) => p.includes("dep-a/src/**/*.ts"))).toBe(true);
47
+ // dep-b src
48
+ expect(watchPaths.some((p) => p.includes("dep-b/src/**/*.ts"))).toBe(true);
49
+ });
50
+
51
+ it("includes replaceDeps dist paths from both cwd and pkgDir", () => {
52
+ mockCollectDeps.mockReturnValue({
53
+ workspaceDeps: [],
54
+ replaceDeps: ["@scope/pkg"],
55
+ });
56
+
57
+ const { watchPaths } = buildWatchPaths({
58
+ pkgDir: "/ws/packages/lib",
59
+ cwd: "/ws",
60
+ srcGlobs: ["*.ts"],
61
+ });
62
+
63
+ // cwd node_modules
64
+ expect(
65
+ watchPaths.some((p) =>
66
+ p.includes("/ws/node_modules/@scope/pkg/dist/**/*.{js,mjs,cjs}"),
67
+ ),
68
+ ).toBe(true);
69
+ // pkgDir node_modules
70
+ expect(
71
+ watchPaths.some((p) =>
72
+ p.includes("lib/node_modules/@scope/pkg/dist/**/*.{js,mjs,cjs}"),
73
+ ),
74
+ ).toBe(true);
75
+ });
76
+
77
+ it("includes extraDirs globs for each directory", () => {
78
+ mockCollectDeps.mockReturnValue({
79
+ workspaceDeps: ["dep-a"],
80
+ replaceDeps: [],
81
+ });
82
+
83
+ const { watchPaths } = buildWatchPaths({
84
+ pkgDir: "/ws/packages/lib",
85
+ cwd: "/ws",
86
+ srcGlobs: ["*.{ts,scss,css}"],
87
+ extraDirs: [{ dir: "scss", globs: ["*.{scss,css}"] }],
88
+ });
89
+
90
+ // 자체 scss
91
+ expect(watchPaths.some((p) => p.includes("lib/scss/**/*.{scss,css}"))).toBe(true);
92
+ // dep-a scss
93
+ expect(watchPaths.some((p) => p.includes("dep-a/scss/**/*.{scss,css}"))).toBe(true);
94
+ });
95
+
96
+ it("returns deps result from collectDeps", () => {
97
+ const depsResult = { workspaceDeps: ["x"], replaceDeps: ["y"] };
98
+ mockCollectDeps.mockReturnValue(depsResult);
99
+
100
+ const { deps } = buildWatchPaths({
101
+ pkgDir: "/ws/packages/lib",
102
+ cwd: "/ws",
103
+ srcGlobs: ["*.ts"],
104
+ });
105
+
106
+ expect(deps).toEqual(depsResult);
107
+ });
108
+
109
+ it("works without extraDirs and replaceDeps", () => {
110
+ mockCollectDeps.mockReturnValue({ workspaceDeps: [], replaceDeps: [] });
111
+
112
+ const { watchPaths } = buildWatchPaths({
113
+ pkgDir: "/ws/packages/lib",
114
+ cwd: "/ws",
115
+ srcGlobs: ["*"],
116
+ });
117
+
118
+ expect(watchPaths).toHaveLength(1);
119
+ expect(watchPaths[0]).toContain("lib/src/**/*");
120
+ });
121
+ });
@@ -0,0 +1,7 @@
1
+ # browserSupport 전달로 이중 로딩 제거 — LLM 검증
2
+
3
+ ## 검증 항목
4
+
5
+ - [x] loadSdConfig import 제거: `client.worker.ts` — `import { loadSdConfig }` 라인이 제거됨. `sd-config` 모듈 import 없음
6
+ - [x] resolvePackageInfo가 동기 함수: `client.worker.ts:73` — `function resolvePackageInfo(info: ClientBuildInfo): {` (async 제거, Promise 반환 없음)
7
+ - [x] resolvePackageInfo가 info.browserSupport 사용: `client.worker.ts:83-86` — `info.browserSupport?.legacyModule`, `info.browserSupport?.browserslist`, `info.browserSupport?.postCss?.plugins`
@@ -0,0 +1,7 @@
1
+ # onEnd 비동기 동기화 — LLM 검증
2
+
3
+ ## 검증 항목
4
+
5
+ - [x] onEnd 타입이 `void | Promise<void>`를 허용: `esbuild-client-config.ts:29` — `onEnd?: (result: esbuild.BuildResult) => void | Promise<void>;`
6
+ - [x] sd-on-end 플러그인이 onEnd 반환값을 return: `esbuild-client-config.ts:220` — `return options.onEnd!(result);`
7
+ - [x] client.worker.ts onEnd가 async 직접 전달 (fire-and-forget 제거): `client.worker.ts:240` — `onEnd: async (result: esbuild.BuildResult) => {` (이전의 `void (async () => { ... })()` 패턴 제거됨)
@@ -0,0 +1,185 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+
3
+ //#region Mocks
4
+
5
+ let workerFns: Record<string, (...args: any[]) => any>;
6
+ let mockSend: ReturnType<typeof vi.fn>;
7
+
8
+ const mockRebuild = vi.fn();
9
+ const mockDispose = vi.fn();
10
+ const mockReadFileSync = vi.fn();
11
+ const mockExistsSync = vi.fn();
12
+
13
+ vi.mock("@simplysm/core-node", () => ({
14
+ createWorker: vi.fn((fns: Record<string, Function>) => {
15
+ workerFns = fns as any;
16
+ mockSend = vi.fn();
17
+ return { send: mockSend };
18
+ }),
19
+ }));
20
+
21
+ vi.mock("../../src/workers/shared-worker-lifecycle", () => ({
22
+ setupWorkerLifecycle: vi.fn(() => ({
23
+ logger: { debug: vi.fn(), error: vi.fn(), warn: vi.fn() },
24
+ guardStartWatch: vi.fn(),
25
+ })),
26
+ }));
27
+
28
+ vi.mock("../../src/esbuild/esbuild-client-config", () => ({
29
+ createClientEsbuildContext: vi.fn(() =>
30
+ Promise.resolve({
31
+ context: { rebuild: mockRebuild, dispose: mockDispose, watch: vi.fn() },
32
+ sourceFileCache: {},
33
+ }),
34
+ ),
35
+ }));
36
+
37
+ vi.mock("../../src/esbuild/esbuild-index-html", () => ({
38
+ generateIndexHtml: vi.fn(() =>
39
+ Promise.resolve({ content: "<html></html>", errors: [], warnings: [] }),
40
+ ),
41
+ }));
42
+
43
+ vi.mock("../../src/esbuild/esbuild-pwa", () => ({
44
+ applyPwa: vi.fn(() => Promise.resolve()),
45
+ createPwaHtmlTransform: vi.fn(),
46
+ }));
47
+
48
+ vi.mock("../../src/dev-server/dev-http-server", () => ({
49
+ createDevHttpServer: vi.fn(),
50
+ }));
51
+
52
+ vi.mock("../../src/dev-server/hmr-service", () => ({
53
+ createHmrService: vi.fn(),
54
+ }));
55
+
56
+ vi.mock("../../src/dev-server/hmr-client-script", () => ({
57
+ createHmrPostTransform: vi.fn(),
58
+ }));
59
+
60
+ vi.mock("../../src/utils/copy-public", () => ({
61
+ copyPublicFiles: vi.fn(() => Promise.resolve()),
62
+ watchPublicFiles: vi.fn(),
63
+ }));
64
+
65
+ vi.mock("../../src/utils/sd-config", () => ({
66
+ loadSdConfig: vi.fn(() =>
67
+ Promise.resolve({
68
+ packages: { "my-app": { target: "client", server: "my-server" } },
69
+ }),
70
+ ),
71
+ }));
72
+
73
+ vi.mock("node:fs", () => ({
74
+ default: {
75
+ readFileSync: (...args: any[]) => mockReadFileSync(...args),
76
+ writeFileSync: vi.fn(),
77
+ existsSync: (...args: any[]) => mockExistsSync(...args),
78
+ mkdirSync: vi.fn(),
79
+ rmSync: vi.fn(),
80
+ },
81
+ }));
82
+
83
+ //#endregion
84
+
85
+ // Import triggers createWorker, capturing the functions
86
+ await import("../../src/workers/client.worker");
87
+
88
+ const baseBuildInfo = {
89
+ name: "my-app",
90
+ cwd: "/workspace",
91
+ pkgDir: "/workspace/packages/my-app",
92
+ };
93
+
94
+ beforeEach(() => {
95
+ vi.clearAllMocks();
96
+ mockReadFileSync.mockImplementation((filePath: any) => {
97
+ if (String(filePath).endsWith("package.json")) {
98
+ return JSON.stringify({ name: "@scope/my-app" });
99
+ }
100
+ return "";
101
+ });
102
+ mockExistsSync.mockReturnValue(false);
103
+ mockRebuild.mockResolvedValue({
104
+ metafile: { outputs: {} },
105
+ errors: [],
106
+ warnings: [],
107
+ });
108
+ });
109
+
110
+ describe("client.worker build() — Acceptance", () => {
111
+ // Scenario: esbuild BuildFailure의 상세 에러가 전파된다
112
+ it("esbuild BuildFailure 발생 시 errors 배열의 text 필드가 반환 errors에 포함된다", async () => {
113
+ const buildFailure = {
114
+ message: "Build failed with 2 errors",
115
+ errors: [
116
+ { text: "Could not resolve 'missing-module'" },
117
+ { text: "Syntax error in file.ts" },
118
+ ],
119
+ };
120
+ mockRebuild.mockRejectedValueOnce(buildFailure);
121
+
122
+ const result = await workerFns["build"](baseBuildInfo);
123
+
124
+ expect(result.success).toBe(false);
125
+ expect(result.errors).toContain("Could not resolve 'missing-module'");
126
+ expect(result.errors).toContain("Syntax error in file.ts");
127
+ // 요약 메시지("Build failed with 2 errors")가 아닌 상세 에러만 포함
128
+ expect(result.errors).not.toContain("Build failed with 2 errors");
129
+ });
130
+
131
+ // Scenario: 일반 Error 발생 시 기존 폴백이 동작한다
132
+ it("일반 Error 발생 시 errNs.message()로 추출한 메시지가 errors에 포함된다", async () => {
133
+ mockRebuild.mockRejectedValueOnce(new Error("Unexpected crash"));
134
+
135
+ const result = await workerFns["build"](baseBuildInfo);
136
+
137
+ expect(result.success).toBe(false);
138
+ expect(result.errors).toContain("Unexpected crash");
139
+ });
140
+ });
141
+
142
+ describe("client.worker build() — browserSupport 전달", () => {
143
+ // Scenario: browserSupport가 ClientBuildInfo를 통해 전달된다
144
+ it("browserSupport 설정이 createClientEsbuildContext에 legacyModule/browserslist/postcssPlugins로 전달된다", async () => {
145
+ const { createClientEsbuildContext } = await import(
146
+ "../../src/esbuild/esbuild-client-config"
147
+ );
148
+
149
+ const result = await workerFns["build"]({
150
+ ...baseBuildInfo,
151
+ browserSupport: {
152
+ legacyModule: true,
153
+ browserslist: "Chrome 61",
154
+ postCss: { plugins: [["autoprefixer"]] },
155
+ },
156
+ });
157
+
158
+ expect(result.success).toBe(true);
159
+ expect(vi.mocked(createClientEsbuildContext)).toHaveBeenCalledWith(
160
+ expect.objectContaining({
161
+ legacyModule: true,
162
+ browserslist: "Chrome 61",
163
+ postcssPlugins: [["autoprefixer"]],
164
+ }),
165
+ );
166
+ });
167
+
168
+ // Scenario: browserSupport 미설정 시 기본값으로 동작한다
169
+ it("browserSupport 미설정 시 legacyModule=false, browserslist=undefined로 전달된다", async () => {
170
+ const { createClientEsbuildContext } = await import(
171
+ "../../src/esbuild/esbuild-client-config"
172
+ );
173
+
174
+ const result = await workerFns["build"](baseBuildInfo);
175
+
176
+ expect(result.success).toBe(true);
177
+ expect(vi.mocked(createClientEsbuildContext)).toHaveBeenCalledWith(
178
+ expect.objectContaining({
179
+ legacyModule: false,
180
+ browserslist: undefined,
181
+ postcssPlugins: undefined,
182
+ }),
183
+ );
184
+ });
185
+ });