@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
@@ -1,23 +1,18 @@
1
- import type { Plugin, ModuleNode, ViteDevServer } from "vite";
2
- import type { IncomingMessage, ServerResponse } from "http";
1
+ import type { Plugin } from "vite";
3
2
  import { JavaScriptTransformer } from "@angular/build/private";
4
- import { createHash } from "crypto";
5
- import fsp from "fs/promises";
6
- import fs from "fs";
7
3
  import os from "os";
8
4
  import path from "path";
9
5
  import ts from "typescript";
10
6
  import { consola } from "consola";
11
7
  import { pathx } from "@simplysm/core-node";
12
- import { AngularSourceFileCache } from "../utils/angular-compiler.js";
8
+ import { AngularSourceFileCache } from "./angular-compiler.js";
13
9
  import { getPackageSourceFiles } from "../utils/tsconfig.js";
14
10
  import {
15
11
  AngularBuildPipeline,
16
12
  type PipelineDiagnosticResult,
17
- } from "../utils/angular-build-pipeline.js";
13
+ } from "./angular-build-pipeline.js";
18
14
  import { loadSdConfig } from "../utils/sd-config.js";
19
- import type { SdConfig, SdPackageConfig } from "../sd-config.types.js";
20
- import { resolveReplaceDepEntries } from "../utils/replace-deps.js";
15
+ import type { SdPackageConfig } from "../sd-config.types.js";
21
16
 
22
17
  const logger = consola.withTag("sd:cli:angular");
23
18
 
@@ -25,46 +20,30 @@ const logger = consola.withTag("sd:cli:angular");
25
20
  export interface SdAngularPluginOptions {
26
21
  /** sd.config.ts packages 키 (패키지 디렉토리명) */
27
22
  pkg: string;
28
- /** rebuild 시작 콜백 (CLI 상태 보고용) */
29
- onBuildStart?: () => void;
30
- /** rebuild 완료 콜백 (CLI 상태 보고용) */
31
- onBuild?: (result: {
32
- success: boolean;
33
- errors?: string[];
34
- warnings?: string[];
35
- }) => void;
36
23
  }
37
24
 
38
25
  /**
39
- * Angular AOT 컴파일을 수행하는 Vite 플러그인.
26
+ * Angular AOT 컴파일을 수행하는 Vite 플러그인 (Vitest 전용).
40
27
  *
41
28
  * AngularBuildPipeline + JavaScriptTransformer를 관리한다.
29
+ * - watchChange: 변경 파일 수집 (Vitest watch 모드용)
42
30
  * - buildStart: Pipeline 초기화 + 컴파일 + emit
43
31
  * - transform: .ts 파일에 대해 컴파일된 JS 반환 + JavaScriptTransformer 적용
44
- * - handleHotUpdate: incremental rebuild + HMR
45
32
  * - buildEnd: 리소스 정리
46
33
  */
47
34
  export function sdAngularPlugin(options: SdAngularPluginOptions): Plugin {
48
35
  let pipeline: AngularBuildPipeline | undefined;
49
36
  let sourceFileCache: AngularSourceFileCache | undefined;
50
37
  let jsTransformer: JavaScriptTransformer | undefined;
51
- let prebundleTransformer: JavaScriptTransformer | undefined;
52
38
 
53
- const templateUpdates = new Map<string, string>();
54
- let hmrLock: Promise<void> = Promise.resolve();
55
- let devServer: ViteDevServer | undefined;
56
-
57
- /** Rolldown watch 모드에서 변경된 파일 경로를 수집한다. buildStart 재호출 시 캐시 무효화에 사용. */
39
+ /** Vitest watch 모드에서 변경된 파일 경로를 수집한다. buildStart 재호출 시 캐시 무효화에 사용. */
58
40
  const pendingWatchChanges = new Set<string>();
59
41
 
60
- // sd.config.ts에서 로딩된 설정 (config() 훅에서 초기화)
42
+ // config() 훅에서 초기화
61
43
  let isDev = false;
62
- let enableSourcemap = false;
63
- let isDevServer = false;
64
- let sdConfig: SdConfig | undefined;
44
+ let enableSourcemap = true;
65
45
  let pkgConfig: SdPackageConfig | undefined;
66
46
  let resolvedPkgDir: string | undefined;
67
- let replaceDepDistPaths: string[] | undefined;
68
47
 
69
48
  function createJsTransformer(): JavaScriptTransformer {
70
49
  const maxThreads = Math.max(1, Math.floor((os.cpus().length * 2) / 3));
@@ -79,48 +58,6 @@ export function sdAngularPlugin(options: SdAngularPluginOptions): Plugin {
79
58
  );
80
59
  }
81
60
 
82
- /**
83
- * sd.config.ts의 replaceDeps glob에서 node_modules 패키지의 dist 경로를 계산한다.
84
- */
85
- function resolveReplaceDeps(pkgDir: string, config: SdConfig): string[] | undefined {
86
- if (config.replaceDeps == null) return undefined;
87
-
88
- // node_modules 하위 패키지명 수집
89
- const nodeModulesDir = path.join(pkgDir, "node_modules");
90
- const targetNames: string[] = [];
91
- try {
92
- for (const entry of fs.readdirSync(nodeModulesDir)) {
93
- if (entry.startsWith(".")) continue;
94
- if (entry.startsWith("@")) {
95
- // scoped package
96
- const scopeDir = path.join(nodeModulesDir, entry);
97
- for (const subEntry of fs.readdirSync(scopeDir)) {
98
- targetNames.push(`${entry}/${subEntry}`);
99
- }
100
- } else {
101
- targetNames.push(entry);
102
- }
103
- }
104
- } catch {
105
- // node_modules 없으면 빈 배열
106
- return undefined;
107
- }
108
-
109
- const matched = resolveReplaceDepEntries(config.replaceDeps, targetNames);
110
- if (matched.length === 0) return undefined;
111
-
112
- const distPaths: string[] = [];
113
- for (const dep of matched) {
114
- const distDir = path.join(nodeModulesDir, ...dep.targetName.split("/"), "dist");
115
- try {
116
- distPaths.push(pathx.posix(fs.realpathSync(distDir)));
117
- } catch {
118
- distPaths.push(pathx.posix(distDir));
119
- }
120
- }
121
- return distPaths;
122
- }
123
-
124
61
  return {
125
62
  name: "sd-angular",
126
63
  enforce: "pre",
@@ -134,7 +71,7 @@ export function sdAngularPlugin(options: SdAngularPluginOptions): Plugin {
134
71
  isDev = env.mode === "development";
135
72
 
136
73
  // sd.config.ts 로딩
137
- sdConfig = await loadSdConfig({ cwd, dev: isDev, opt: [] });
74
+ const sdConfig = await loadSdConfig({ cwd, dev: isDev, opt: [] });
138
75
  const rawPkgConfig = sdConfig.packages[options.pkg];
139
76
  if (rawPkgConfig == null) {
140
77
  throw new Error(`sd.config.ts에 패키지 "${options.pkg}"가 정의되어 있지 않습니다.`);
@@ -143,94 +80,10 @@ export function sdAngularPlugin(options: SdAngularPluginOptions): Plugin {
143
80
 
144
81
  // 패키지 디렉토리 resolve
145
82
  resolvedPkgDir = path.resolve(cwd, "packages", options.pkg);
146
-
147
- // browserSupport (client 패키지에만 존재)
148
- const browserSupport = pkgConfig.target === "client"
149
- ? (pkgConfig).browserSupport
150
- : undefined;
151
-
152
- // legacyModule
153
- const legacyModule = browserSupport?.legacyModule === true;
154
-
155
- // replaceDepDistPaths 계산
156
- replaceDepDistPaths = resolveReplaceDeps(resolvedPkgDir, sdConfig);
157
-
158
- // Linker 캐시 디렉토리 (기본값)
159
- // enableSourcemap은 아직 확정되지 않으므로 isDev로 임시 결정
160
- const linkerCacheDir = path.join(cwd, ".cache", "linker", isDev ? "sm" : "nosm");
161
-
162
- return {
163
- define: {
164
- ngDevMode: isDev ? undefined : "false",
165
- ngJitMode: "false",
166
- ngHmrMode: isDev && !legacyModule ? undefined : "false",
167
- },
168
- optimizeDeps: {
169
- esbuildOptions: {
170
- plugins: [
171
- {
172
- name: "angular-vite-optimize-deps",
173
- setup(build: { onLoad: Function }) {
174
- build.onLoad(
175
- { filter: /\.[cm]?js$/ },
176
- async (args: { path: string }) => {
177
- if (!/\.[cm]?js$/.test(args.path)) return null;
178
-
179
- // replaceDeps 파일은 Linker 캐시를 건너뛴다 (항상 fresh 처리)
180
- if (
181
- replaceDepDistPaths != null &&
182
- replaceDepDistPaths.some((p) =>
183
- pathx.posix(args.path).startsWith(p),
184
- )
185
- ) {
186
- return null;
187
- }
188
-
189
- if (prebundleTransformer == null) return null;
190
-
191
- const content = await fsp.readFile(args.path, "utf-8");
192
- const hash = createHash("sha256").update(content).digest("hex");
193
- const cachePath = path.join(linkerCacheDir, `${hash}.js`);
194
-
195
- try {
196
- const cached = await fsp.readFile(cachePath, "utf-8");
197
- return { contents: cached, loader: "js" as const };
198
- } catch {
199
- // cache miss
200
- }
201
-
202
- const result = await prebundleTransformer.transformFile(args.path);
203
- const resultStr =
204
- typeof result === "string"
205
- ? result
206
- : new TextDecoder().decode(result);
207
-
208
- try {
209
- await fsp.mkdir(linkerCacheDir, { recursive: true });
210
- await fsp.writeFile(cachePath, resultStr);
211
- } catch {
212
- // cache write failure — non-fatal
213
- }
214
-
215
- return { contents: resultStr, loader: "js" as const };
216
- },
217
- );
218
- },
219
- },
220
- ],
221
- },
222
- },
223
- };
224
83
  },
225
84
 
226
85
  configResolved(resolved: { build: { sourcemap: unknown } }) {
227
86
  enableSourcemap = resolved.build.sourcemap !== false || isDev;
228
-
229
- // Transformer 생성 (sourcemap 확정 후)
230
- prebundleTransformer = new JavaScriptTransformer(
231
- { sourcemap: enableSourcemap, jit: false, thirdPartySourcemaps: enableSourcemap },
232
- 1,
233
- );
234
87
  },
235
88
 
236
89
  async buildStart() {
@@ -248,7 +101,7 @@ export function sdAngularPlugin(options: SdAngularPluginOptions): Plugin {
248
101
  // AngularSourceFileCache 생성 (또는 재사용)
249
102
  sourceFileCache ??= new AngularSourceFileCache();
250
103
 
251
- // Rolldown watch 재빌드: 변경된 파일의 캐시 무효화
104
+ // Vitest watch 재빌드: 변경된 파일의 캐시 무효화
252
105
  let hadPendingChanges = false;
253
106
  if (pendingWatchChanges.size > 0) {
254
107
  hadPendingChanges = true;
@@ -257,11 +110,10 @@ export function sdAngularPlugin(options: SdAngularPluginOptions): Plugin {
257
110
  pendingWatchChanges.clear();
258
111
  }
259
112
 
260
- // legacyModule, postCssPlugins from sd.config.ts (client 패키지에만 존재)
113
+ // postCssPlugins from sd.config.ts (client 패키지에만 존재)
261
114
  const browserSupport = pkgConfig?.target === "client"
262
115
  ? (pkgConfig).browserSupport
263
116
  : undefined;
264
- const legacyModule = browserSupport?.legacyModule === true;
265
117
  const postCssPlugins = browserSupport?.postCss?.plugins;
266
118
 
267
119
  // Pipeline 생성 (최초) 또는 재사용
@@ -275,7 +127,6 @@ export function sdAngularPlugin(options: SdAngularPluginOptions): Plugin {
275
127
  | Record<string, unknown>
276
128
  | undefined,
277
129
  sourceFileCache,
278
- enableHmr: isDevServer && !legacyModule,
279
130
  compilerOptionsTransformer: (opts) => ({
280
131
  ...opts,
281
132
  noEmit: false,
@@ -298,14 +149,6 @@ export function sdAngularPlugin(options: SdAngularPluginOptions): Plugin {
298
149
  }
299
150
  const pipelineResult = await pipeline.initialize();
300
151
 
301
- // templateUpdates 수집
302
- templateUpdates.clear();
303
- if (pipelineResult.templateUpdates != null) {
304
- for (const [key, value] of pipelineResult.templateUpdates) {
305
- templateUpdates.set(key, value);
306
- }
307
- }
308
-
309
152
  // 진단 보고
310
153
  reportDiagnostics(pipelineResult.diagnostics);
311
154
 
@@ -313,144 +156,27 @@ export function sdAngularPlugin(options: SdAngularPluginOptions): Plugin {
313
156
  for (const err of pipelineResult.scssErrors) {
314
157
  logger.error(err);
315
158
  }
316
-
317
- // 초기 빌드 결과 보고 (dev, prod 공통)
318
- options.onBuild?.({
319
- success: pipelineResult.diagnostics.errors.length === 0,
320
- errors: pipelineResult.diagnostics.errors.map((e) => e.message),
321
- warnings: pipelineResult.diagnostics.warnings.map((w) => w.message),
322
- });
323
- },
324
-
325
- async handleHotUpdate({
326
- file,
327
- modules,
328
- server,
329
- }: {
330
- file: string;
331
- modules: ModuleNode[];
332
- server: ViteDevServer;
333
- timestamp: number;
334
- read: () => string | Promise<string>;
335
- }): Promise<ModuleNode[] | void> {
336
- if (pipeline == null || !isDev) return;
337
- if (
338
- !file.endsWith(".ts") &&
339
- !file.endsWith(".html") &&
340
- !file.endsWith(".scss")
341
- ) {
342
- // replaceDeps .js 파일 변경 시 full-reload 강제
343
- if (
344
- file.endsWith(".js") &&
345
- devServer != null &&
346
- replaceDepDistPaths != null &&
347
- replaceDepDistPaths.some((p) =>
348
- pathx.posix(file).startsWith(p),
349
- )
350
- ) {
351
- devServer.hot.send({ type: "full-reload" });
352
- return [];
353
- }
354
- return;
355
- }
356
-
357
- const normalizedFile = pathx.posix(file);
358
- let filesToUpdate: string[];
359
-
360
- if (file.endsWith(".scss")) {
361
- // SCSS @use 의존성 역방향 탐색: 변경된 SCSS를 @use하는 파일을 찾아 재컴파일
362
- const affectedOwnerFiles = pipeline.findAffectedByScss(normalizedFile);
363
- if (affectedOwnerFiles.length === 0) return;
364
- filesToUpdate = affectedOwnerFiles;
365
- } else {
366
- // 의존성 필터: TypeScript program에 포함되지 않은 파일은 건너뜀
367
- const programFiles = pipeline.getTsProgram().getSourceFiles();
368
- const isInProgram = programFiles.some(
369
- (sf) => pathx.posix(sf.fileName) === normalizedFile,
370
- );
371
- if (!isInProgram) {
372
- logger.debug(`변경된 파일이 빌드에 포함되지 않아 리빌드 건너뜀: ${normalizedFile}`);
373
- return;
374
- }
375
- filesToUpdate = [file];
376
- }
377
-
378
- // 경쟁 조건 방지: 이전 HMR 처리 완료 대기
379
- const prevLock = hmrLock;
380
- let releaseLock!: () => void;
381
- hmrLock = new Promise<void>((resolve) => {
382
- releaseLock = resolve;
383
- });
384
- await prevLock;
385
-
386
- options.onBuildStart?.();
387
-
388
- try {
389
- // rebuild 시작 시 이전 templateUpdates 정리
390
- templateUpdates.clear();
391
-
392
- const pipelineResult = await pipeline.update(filesToUpdate);
393
-
394
- // templateUpdates 수집
395
- if (pipelineResult.templateUpdates != null) {
396
- for (const [key, value] of pipelineResult.templateUpdates) {
397
- templateUpdates.set(key, value);
398
- }
399
- }
400
-
401
- // Pipeline.update() 후 실제 re-emit된 소스 경로 수집
402
- const affectedPaths = pipeline.getLatestEmittedSourcePaths();
403
-
404
- reportDiagnostics(pipelineResult.diagnostics);
405
-
406
- options.onBuild?.({
407
- success: pipelineResult.diagnostics.errors.length === 0,
408
- errors: pipelineResult.diagnostics.errors.map((e) => e.message),
409
- warnings: pipelineResult.diagnostics.warnings.map((w) => w.message),
410
- });
411
-
412
- if (file.endsWith(".scss")) {
413
- // SCSS: moduleGraph에서 영향받은 TS 모듈 조회
414
- const result: ModuleNode[] = [];
415
- for (const p of affectedPaths) {
416
- const mods = server.moduleGraph.getModulesByFile(p);
417
- if (mods) result.push(...mods);
418
- }
419
- return result;
420
- } else {
421
- // TS/HTML: 전달받은 modules에서 영향받은 모듈 필터
422
- const affectedSet = new Set(affectedPaths);
423
- return modules.filter(
424
- (m) => m.file != null && affectedSet.has(pathx.posix(m.file)),
425
- );
426
- }
427
- } catch (err) {
428
- const message = err instanceof Error ? err.message : String(err);
429
- logger.error(`HMR recompile failed: ${message}`);
430
- options.onBuild?.({ success: false, errors: [message] });
431
- return;
432
- } finally {
433
- releaseLock();
434
- }
435
159
  },
436
160
 
437
161
  async transform(_code, id) {
438
162
  if (jsTransformer == null) return;
439
163
 
164
+ // query param 제거
165
+ const cleanId = id.split("?")[0];
440
166
  let code = _code;
441
167
 
442
168
  // Phase 1: TS 컴파일 — .ts 파일은 Pipeline이 emit한 JS로 교체
443
- if (id.endsWith(".ts")) {
444
- const normalizedId = pathx.posix(id);
169
+ if (cleanId.endsWith(".ts")) {
170
+ const normalizedId = pathx.posix(cleanId);
445
171
  const emittedContent = pipeline?.getEmittedFile(normalizedId);
446
172
  if (emittedContent == null) return;
447
173
  code = emittedContent;
448
- } else if (!id.endsWith(".mjs") && !id.endsWith(".js")) {
174
+ } else if (!cleanId.endsWith(".mjs") && !cleanId.endsWith(".js")) {
449
175
  return;
450
176
  }
451
177
 
452
178
  // Phase 2: JS 변환 — Angular Linker로 partial → full AOT 링킹 + 최적화
453
- const transformed = await jsTransformer.transformData(pathx.posix(id), code, false);
179
+ const transformed = await jsTransformer.transformData(pathx.posix(cleanId), code, false);
454
180
  const transformedCode = new TextDecoder().decode(transformed);
455
181
 
456
182
  // 인라인 소스맵 분리 (Rollup 경고 방지)
@@ -468,71 +194,12 @@ export function sdAngularPlugin(options: SdAngularPluginOptions): Plugin {
468
194
  },
469
195
 
470
196
  async buildEnd() {
471
- // dev 모드에서는 pipeline/jsTransformer 유지 (HMR용 incremental compilation)
472
- if (!isDev) {
473
- if (jsTransformer != null) {
474
- await jsTransformer.close();
475
- jsTransformer = undefined;
476
- }
477
- if (prebundleTransformer != null) {
478
- await prebundleTransformer.close();
479
- }
480
- pipeline = undefined;
197
+ if (jsTransformer != null) {
198
+ await jsTransformer.close();
199
+ jsTransformer = undefined;
481
200
  }
201
+ pipeline = undefined;
482
202
  },
483
-
484
- configureServer(server: ViteDevServer) {
485
- devServer = server;
486
- isDevServer = true;
487
-
488
- // component-middleware 등록 (HMR template updates 서빙)
489
- server.middlewares.use(angularComponentMiddleware(templateUpdates, server.config.base));
490
-
491
- // dev server 종료 시 리소스 정리
492
- server.httpServer?.on("close", () => {
493
- void Promise.all([
494
- jsTransformer?.close(),
495
- prebundleTransformer?.close(),
496
- ])
497
- .catch((err: unknown) => {
498
- logger.error(
499
- `Resource dispose failed: ${err instanceof Error ? err.message : String(err)}`,
500
- );
501
- })
502
- .finally(() => {
503
- jsTransformer = undefined;
504
- pipeline = undefined;
505
- });
506
- });
507
- },
508
- };
509
- }
510
-
511
- function angularComponentMiddleware(
512
- templateUpdates: Map<string, string>,
513
- basePath: string,
514
- ): (req: IncomingMessage, res: ServerResponse, next: () => void) => void {
515
- return (req, res, next) => {
516
- const rawUrl = req.url ?? "";
517
- const parsedUrl = new URL(rawUrl, "http://localhost");
518
- const pathname = decodeURIComponent(parsedUrl.pathname);
519
- const strippedPathname =
520
- basePath !== "/" && pathname.startsWith(basePath)
521
- ? pathname.slice(basePath.length - 1)
522
- : pathname;
523
- if (!strippedPathname.includes("/@ng/component")) {
524
- next();
525
- return;
526
- }
527
-
528
- const componentId = parsedUrl.searchParams.get("c") ?? "";
529
- const body = templateUpdates.get(encodeURIComponent(componentId)) ?? "";
530
-
531
- res.writeHead(200, {
532
- "Content-Type": "text/javascript",
533
- "Cache-Control": "no-cache",
534
- });
535
- res.end(body);
536
203
  };
537
204
  }
538
205
 
@@ -0,0 +1,142 @@
1
+ import { cpx, fsx, pathx } from "@simplysm/core-node";
2
+ import { consola, LogLevels } from "consola";
3
+ import type { SdCapacitorSignConfig } from "../sd-config.types.js";
4
+
5
+ const _logger = consola.withTag("sd:cli:capacitor");
6
+
7
+ /**
8
+ * 서명 설정을 build.gradle에 추가하고 keystore 파일을 복사
9
+ */
10
+ export async function configureSigningConfig(
11
+ pkgPath: string,
12
+ androidPath: string,
13
+ sign: SdCapacitorSignConfig,
14
+ ): Promise<void> {
15
+ // keystore 파일 확인 및 복사
16
+ const keystoreSrc = pathx.posixResolve(pkgPath, sign.keystore);
17
+ if (!(await fsx.exists(keystoreSrc))) {
18
+ throw new Error(`keystore 파일을 찾을 수 없습니다: ${keystoreSrc}`);
19
+ }
20
+
21
+ const keystoreDest = pathx.posixResolve(androidPath, "app", "android.keystore");
22
+ await fsx.copy(keystoreSrc, keystoreDest);
23
+
24
+ // build.gradle에 signingConfigs 추가
25
+ const buildGradlePath = pathx.posixResolve(androidPath, "app/build.gradle");
26
+ let content = await fsx.read(buildGradlePath);
27
+
28
+ // 이미 signingConfigs가 있으면 스킵
29
+ if (content.includes("signingConfigs")) return;
30
+
31
+ const storeType = sign.keystoreType ?? "jks";
32
+ const escapeGroovy = (s: string) => s.replace(/\\/g, "\\\\").replace(/'/g, "\\'");
33
+ const escapedStorePassword = escapeGroovy(sign.storePassword);
34
+ const escapedKeyPassword = escapeGroovy(sign.password);
35
+
36
+ const signingBlock = ` signingConfigs {
37
+ release {
38
+ storeFile file("android.keystore")
39
+ storePassword '${escapedStorePassword}'
40
+ keyAlias '${sign.alias}'
41
+ keyPassword '${escapedKeyPassword}'
42
+ storeType "${storeType}"
43
+ }
44
+ }
45
+ `;
46
+
47
+ // signingConfigs 블록을 buildTypes 앞에 삽입
48
+ content = content.replace(/(\s*buildTypes\s*\{)/, (match) => `\n${signingBlock}${match}`);
49
+
50
+ // buildTypes.release에 signingConfig 추가
51
+ content = content.replace(
52
+ /(buildTypes\s*\{[\s\S]*?release\s*\{)/,
53
+ "$1\n signingConfig signingConfigs.release",
54
+ );
55
+
56
+ await fsx.write(buildGradlePath, content);
57
+ }
58
+
59
+ /**
60
+ * Gradle 빌드 실행 (cross-platform)
61
+ */
62
+ export async function buildAndroid(
63
+ capPath: string,
64
+ buildType: string,
65
+ isBundle: boolean,
66
+ ): Promise<void> {
67
+ let gradleTask: string;
68
+ if (buildType === "debug") {
69
+ gradleTask = "assembleDebug";
70
+ } else if (isBundle) {
71
+ gradleTask = "bundleRelease";
72
+ } else {
73
+ gradleTask = "assembleRelease";
74
+ }
75
+
76
+ const androidPath = pathx.posixResolve(capPath, "android");
77
+ const isWindows = process.platform === "win32";
78
+ const isDebug = consola.level >= LogLevels.debug;
79
+
80
+ if (isWindows) {
81
+ _logger.debug(`Gradle 실행: cmd /c gradlew.bat ${gradleTask}`);
82
+ const { stdout } = await cpx.spawn("cmd", ["/c", "gradlew.bat", gradleTask, "--no-daemon"], {
83
+ cwd: androidPath,
84
+ ...(isDebug ? { stdio: ["ignore", "inherit", "inherit"] } : {}),
85
+ });
86
+ _logger.debug(`실행 결과: ${stdout}`);
87
+ } else {
88
+ const gradlew = pathx.posixResolve(androidPath, "gradlew");
89
+ _logger.debug(`Gradle 실행: ${gradlew} ${gradleTask}`);
90
+ const { stdout } = await cpx.spawn(gradlew, [gradleTask, "--no-daemon"], {
91
+ cwd: androidPath,
92
+ ...(isDebug ? { stdio: ["ignore", "inherit", "inherit"] } : {}),
93
+ });
94
+ _logger.debug(`실행 결과: ${stdout}`);
95
+ }
96
+ }
97
+
98
+ /**
99
+ * 빌드 산출물을 출력 경로에 복사
100
+ */
101
+ export async function copyBuildOutput(
102
+ capPath: string,
103
+ outPath: string,
104
+ buildType: string,
105
+ isBundle: boolean,
106
+ appName: string,
107
+ version: string,
108
+ ): Promise<void> {
109
+ const ext = isBundle ? "aab" : "apk";
110
+ const outputType = isBundle ? "bundle" : "apk";
111
+ const androidBuildPath = pathx.posixResolve(
112
+ capPath,
113
+ "android/app/build/outputs",
114
+ outputType,
115
+ buildType,
116
+ );
117
+
118
+ // 빌드 산출물 찾기
119
+ _logger.debug(`빌드 산출물 탐색: ${androidBuildPath}`);
120
+ const candidates = await fsx.glob(pathx.posixResolve(androidBuildPath, `app-*.${ext}`));
121
+ if (candidates.length === 0) {
122
+ throw new Error(`빌드 산출물을 찾을 수 없습니다: ${androidBuildPath}`);
123
+ }
124
+ const builtFile = candidates[0];
125
+ _logger.debug(`빌드 산출물: ${builtFile}`);
126
+ const isUnsigned = builtFile.includes("unsigned");
127
+
128
+ // 출력 디렉토리 생성
129
+ const androidOutPath = pathx.posixResolve(outPath, "android");
130
+ const updatesPath = pathx.posixResolve(androidOutPath, "updates");
131
+ await fsx.mkdir(androidOutPath);
132
+ await fsx.mkdir(updatesPath);
133
+
134
+ // latest 파일명 결정
135
+ const unsignedSuffix = isUnsigned ? "-unsigned" : "";
136
+ const latestName = `${appName}${unsignedSuffix}-latest.${ext}`;
137
+ const versionedName = `${version}.${ext}`;
138
+
139
+ // 복사
140
+ await fsx.copy(builtFile, pathx.posixResolve(androidOutPath, latestName));
141
+ await fsx.copy(builtFile, pathx.posixResolve(updatesPath, versionedName));
142
+ }