@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,142 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import path from "path";
3
+
4
+ const mocks = vi.hoisted(() => ({
5
+ execa: vi.fn(),
6
+ fsx: {
7
+ readJson: vi.fn(),
8
+ copy: vi.fn(),
9
+ },
10
+ storageConnect: vi.fn(),
11
+ }));
12
+
13
+ vi.mock("@simplysm/core-node", () => ({
14
+ cpx: {
15
+ spawn: mocks.execa,
16
+ },
17
+ fsx: mocks.fsx,
18
+ }));
19
+
20
+ vi.mock("@simplysm/storage", () => ({
21
+ StorageFactory: { connect: mocks.storageConnect },
22
+ }));
23
+
24
+ const { runDeployment } = await import("../../src/commands/publish/deployment-phase");
25
+
26
+ const CWD = process.cwd();
27
+
28
+ function pkgPath(name: string): string {
29
+ return path.resolve(CWD, `packages/${name}`);
30
+ }
31
+
32
+ function createLogger() {
33
+ return {
34
+ info: vi.fn(),
35
+ debug: vi.fn(),
36
+ error: vi.fn(),
37
+ warn: vi.fn(),
38
+ start: vi.fn(),
39
+ success: vi.fn(),
40
+ fail: vi.fn(),
41
+ } as unknown as ReturnType<typeof import("consola").consola.withTag>;
42
+ }
43
+
44
+ describe("runDeployment", () => {
45
+ beforeEach(() => {
46
+ vi.clearAllMocks();
47
+ });
48
+
49
+ it("deploys packages in dependency level order", async () => {
50
+ const publishOrder: string[] = [];
51
+ mocks.execa.mockImplementation(
52
+ (_cmd: string, _args?: string[], opts?: { cwd?: string }) => {
53
+ publishOrder.push(path.basename(opts?.cwd ?? ""));
54
+ return { stdout: "", stderr: "", exitCode: 0 };
55
+ },
56
+ );
57
+ mocks.fsx.readJson.mockImplementation((p: string) => {
58
+ if (p.includes("pkg-b")) {
59
+ return { name: "@simplysm/pkg-b", version: "14.0.1", dependencies: { "@simplysm/pkg-a": "~14.0.0" } };
60
+ }
61
+ return { name: "@simplysm/pkg-a", version: "14.0.1", dependencies: {} };
62
+ });
63
+
64
+ const logger = createLogger();
65
+ await runDeployment(
66
+ [
67
+ { name: "pkg-a", path: pkgPath("pkg-a"), config: { type: "npm" } },
68
+ { name: "pkg-b", path: pkgPath("pkg-b"), config: { type: "npm" } },
69
+ ],
70
+ "14.0.1",
71
+ CWD,
72
+ logger,
73
+ false,
74
+ );
75
+
76
+ const aIdx = publishOrder.indexOf("pkg-a");
77
+ const bIdx = publishOrder.indexOf("pkg-b");
78
+ expect(aIdx).toBeLessThan(bIdx);
79
+ });
80
+
81
+ it("retries failed publish up to 3 times then sets exitCode", async () => {
82
+ let publishAttempts = 0;
83
+ mocks.execa.mockImplementation(() => {
84
+ publishAttempts++;
85
+ throw new Error("publish failed");
86
+ });
87
+ mocks.fsx.readJson.mockResolvedValue({
88
+ name: "@simplysm/pkg-a",
89
+ version: "14.0.1",
90
+ dependencies: {},
91
+ });
92
+
93
+ const logger = createLogger();
94
+ await runDeployment(
95
+ [{ name: "pkg-a", path: pkgPath("pkg-a"), config: { type: "npm" } }],
96
+ "14.0.1",
97
+ CWD,
98
+ logger,
99
+ false,
100
+ );
101
+
102
+ expect(publishAttempts).toBe(3);
103
+ expect(process.exitCode).toBe(1);
104
+ });
105
+
106
+ it("reports partially deployed packages on failure", async () => {
107
+ mocks.fsx.readJson.mockImplementation((p: string) => {
108
+ const name = path.basename(path.dirname(p));
109
+ return { name: `@simplysm/${name}`, version: "14.0.1", dependencies: {} };
110
+ });
111
+
112
+ // pkg-a succeeds, pkg-b fails
113
+ mocks.execa.mockImplementation(
114
+ (_cmd: string, _args?: string[], opts?: { cwd?: string }) => {
115
+ if (opts?.cwd?.includes("pkg-b")) {
116
+ throw new Error("publish failed");
117
+ }
118
+ return { stdout: "", stderr: "", exitCode: 0 };
119
+ },
120
+ );
121
+
122
+ const logger = createLogger();
123
+ await runDeployment(
124
+ [
125
+ { name: "pkg-a", path: pkgPath("pkg-a"), config: { type: "npm" } },
126
+ { name: "pkg-b", path: pkgPath("pkg-b"), config: { type: "npm" } },
127
+ ],
128
+ "14.0.1",
129
+ CWD,
130
+ logger,
131
+ false,
132
+ );
133
+
134
+ expect(process.exitCode).toBe(1);
135
+ // Should have logged error about partially deployed
136
+ const errorCalls = (logger.error as unknown as ReturnType<typeof vi.fn>).mock.calls;
137
+ const hasPartialMsg = errorCalls.some((c: unknown[]) =>
138
+ String(c[0]).includes("이미 배포된 패키지"),
139
+ );
140
+ expect(hasPartialMsg).toBe(true);
141
+ });
142
+ });
@@ -0,0 +1,158 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+
3
+ const mocks = vi.hoisted(() => ({
4
+ execa: vi.fn(),
5
+ }));
6
+
7
+ vi.mock("@simplysm/core-node", () => ({
8
+ cpx: {
9
+ spawn: mocks.execa,
10
+ },
11
+ }));
12
+
13
+ const { ensureCleanWorkingTree, commitTagAndPush } = await import(
14
+ "../../src/commands/publish/git-phase"
15
+ );
16
+
17
+ function createLogger() {
18
+ return {
19
+ info: vi.fn(),
20
+ debug: vi.fn(),
21
+ error: vi.fn(),
22
+ warn: vi.fn(),
23
+ withTag: vi.fn(),
24
+ } as unknown as ReturnType<typeof import("consola").consola.withTag>;
25
+ }
26
+
27
+ describe("ensureCleanWorkingTree", () => {
28
+ beforeEach(() => {
29
+ vi.clearAllMocks();
30
+ });
31
+
32
+ it("auto-commits with claude when uncommitted changes detected", async () => {
33
+ const logger = createLogger();
34
+ mocks.execa.mockImplementation((cmd: string, args?: string[]) => {
35
+ if (cmd === "git" && args?.[0] === "diff") {
36
+ return { stdout: "file.txt", stderr: "", exitCode: 0 };
37
+ }
38
+ return { stdout: "", stderr: "", exitCode: 0 };
39
+ });
40
+
41
+ await ensureCleanWorkingTree(true, logger);
42
+
43
+ const claudeCalls = mocks.execa.mock.calls.filter(
44
+ (c: unknown[]) => c[0] === "claude",
45
+ );
46
+ expect(claudeCalls).toHaveLength(1);
47
+ expect((claudeCalls[0][1] as string[])).toContain("/sd-commit");
48
+ });
49
+
50
+ it("skips auto-commit when no uncommitted changes", async () => {
51
+ const logger = createLogger();
52
+ mocks.execa.mockImplementation(() => {
53
+ return { stdout: "", stderr: "", exitCode: 0 };
54
+ });
55
+
56
+ await ensureCleanWorkingTree(true, logger);
57
+
58
+ const claudeCalls = mocks.execa.mock.calls.filter(
59
+ (c: unknown[]) => c[0] === "claude",
60
+ );
61
+ expect(claudeCalls).toHaveLength(0);
62
+ });
63
+
64
+ it("throws when claude auto-commit fails", async () => {
65
+ const logger = createLogger();
66
+ mocks.execa.mockImplementation((cmd: string, args?: string[]) => {
67
+ if (cmd === "git" && args?.[0] === "diff") {
68
+ return { stdout: "file.txt", stderr: "", exitCode: 0 };
69
+ }
70
+ if (cmd === "claude") {
71
+ throw new Error("claude commit failed");
72
+ }
73
+ return { stdout: "", stderr: "", exitCode: 0 };
74
+ });
75
+
76
+ await expect(ensureCleanWorkingTree(true, logger)).rejects.toThrow(
77
+ "자동 커밋에 실패했습니다",
78
+ );
79
+ });
80
+
81
+ it("does nothing when hasGit is false", async () => {
82
+ const logger = createLogger();
83
+
84
+ await ensureCleanWorkingTree(false, logger);
85
+
86
+ expect(mocks.execa).not.toHaveBeenCalled();
87
+ });
88
+ });
89
+
90
+ describe("commitTagAndPush", () => {
91
+ beforeEach(() => {
92
+ vi.clearAllMocks();
93
+ });
94
+
95
+ it("commits, tags, and pushes version changes", async () => {
96
+ const logger = createLogger();
97
+ mocks.execa.mockResolvedValue({ stdout: "", stderr: "", exitCode: 0 });
98
+
99
+ await commitTagAndPush(true, "14.0.1", ["package.json"], logger, false);
100
+
101
+ const gitCalls = mocks.execa.mock.calls.filter(
102
+ (c: unknown[]) => c[0] === "git",
103
+ );
104
+
105
+ // git add
106
+ const addCall = gitCalls.find((c: unknown[]) => (c[1] as string[])[0] === "add");
107
+ expect(addCall).toBeDefined();
108
+ expect((addCall![1] as string[])).toContain("package.json");
109
+
110
+ // git commit
111
+ const commitCall = gitCalls.find((c: unknown[]) => (c[1] as string[])[0] === "commit");
112
+ expect(commitCall).toBeDefined();
113
+ expect((commitCall![1] as string[])).toContain("v14.0.1");
114
+
115
+ // git tag
116
+ const tagCall = gitCalls.find((c: unknown[]) => (c[1] as string[])[0] === "tag");
117
+ expect(tagCall).toBeDefined();
118
+ expect((tagCall![1] as string[])).toContain("-a");
119
+ expect((tagCall![1] as string[])).toContain("v14.0.1");
120
+
121
+ // git push (2 calls: push + push --tags)
122
+ const pushCalls = gitCalls.filter((c: unknown[]) => (c[1] as string[])[0] === "push");
123
+ expect(pushCalls).toHaveLength(2);
124
+ });
125
+
126
+ it("outputs simulation logs in dry-run mode without executing git", async () => {
127
+ const logger = createLogger();
128
+
129
+ await commitTagAndPush(true, "14.0.1", ["package.json"], logger, true);
130
+
131
+ // No actual git commands
132
+ expect(mocks.execa).not.toHaveBeenCalled();
133
+ // Simulation logs
134
+ expect(logger.info).toHaveBeenCalled();
135
+ });
136
+
137
+ it("throws with recovery guide when git commit fails", async () => {
138
+ const logger = createLogger();
139
+ mocks.execa.mockImplementation((_cmd: string, args?: string[]) => {
140
+ if (args?.[0] === "commit") {
141
+ throw new Error("git commit failed");
142
+ }
143
+ return { stdout: "", stderr: "", exitCode: 0 };
144
+ });
145
+
146
+ await expect(
147
+ commitTagAndPush(true, "14.0.1", ["package.json"], logger, false),
148
+ ).rejects.toThrow("Git 작업 실패");
149
+ });
150
+
151
+ it("does nothing when hasGit is false", async () => {
152
+ const logger = createLogger();
153
+
154
+ await commitTagAndPush(false, "14.0.1", ["package.json"], logger, false);
155
+
156
+ expect(mocks.execa).not.toHaveBeenCalled();
157
+ });
158
+ });
@@ -6,7 +6,7 @@ const mocks = vi.hoisted(() => ({
6
6
  executeLint: vi.fn(),
7
7
  }));
8
8
 
9
- vi.mock("../../src/utils/lint-core", () => ({
9
+ vi.mock("../../src/lint/lint-core", () => ({
10
10
  executeLint: mocks.executeLint,
11
11
  }));
12
12
 
@@ -0,0 +1,82 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+
3
+ const mocks = vi.hoisted(() => ({
4
+ execa: vi.fn(),
5
+ }));
6
+
7
+ vi.mock("@simplysm/core-node", () => ({
8
+ cpx: {
9
+ spawn: mocks.execa,
10
+ },
11
+ }));
12
+
13
+ const { runPostPublish } = await import("../../src/commands/publish/post-publish-phase");
14
+
15
+ function createLogger() {
16
+ return {
17
+ info: vi.fn(),
18
+ debug: vi.fn(),
19
+ error: vi.fn(),
20
+ warn: vi.fn(),
21
+ } as unknown as ReturnType<typeof import("consola").consola.withTag>;
22
+ }
23
+
24
+ describe("runPostPublish", () => {
25
+ beforeEach(() => {
26
+ vi.clearAllMocks();
27
+ });
28
+
29
+ it("executes scripts with environment variable substitution", async () => {
30
+ const logger = createLogger();
31
+ mocks.execa.mockResolvedValue({ stdout: "", stderr: "", exitCode: 0 });
32
+
33
+ await runPostPublish(
34
+ [{ type: "script", cmd: "echo", args: ["v%VER%"] }],
35
+ "14.0.1",
36
+ "/project",
37
+ logger,
38
+ false,
39
+ );
40
+
41
+ expect(mocks.execa).toHaveBeenCalledWith("echo", ["v14.0.1"], { cwd: "/project" });
42
+ });
43
+
44
+ it("warns but does not throw when script fails", async () => {
45
+ const logger = createLogger();
46
+ mocks.execa.mockRejectedValue(new Error("script failed"));
47
+
48
+ await runPostPublish(
49
+ [{ type: "script", cmd: "failing-cmd", args: [] }],
50
+ "14.0.1",
51
+ "/project",
52
+ logger,
53
+ false,
54
+ );
55
+
56
+ expect(logger.warn).toHaveBeenCalled();
57
+ // Should not throw
58
+ });
59
+
60
+ it("logs but does not execute scripts in dry-run mode", async () => {
61
+ const logger = createLogger();
62
+
63
+ await runPostPublish(
64
+ [{ type: "script", cmd: "echo", args: ["v%VER%"] }],
65
+ "14.0.1",
66
+ "/project",
67
+ logger,
68
+ true,
69
+ );
70
+
71
+ expect(mocks.execa).not.toHaveBeenCalled();
72
+ expect(logger.info).toHaveBeenCalled();
73
+ });
74
+
75
+ it("does nothing when scripts array is empty", async () => {
76
+ const logger = createLogger();
77
+
78
+ await runPostPublish([], "14.0.1", "/project", logger, false);
79
+
80
+ expect(mocks.execa).not.toHaveBeenCalled();
81
+ });
82
+ });
@@ -0,0 +1,9 @@
1
+ # npm-publisher + local-publisher 분리 -- LLM 검증
2
+
3
+ ## 검증 항목
4
+
5
+ - [x] npm 배포 로직(publishNpm)이 npm-publisher.ts에 위치: `src/commands/publish/npm-publisher.ts:9`
6
+ - [x] 로컬 복사 로직(publishToLocal)이 local-publisher.ts에 위치: `src/commands/publish/local-publisher.ts:9`
7
+ - [x] index.ts의 publishPackage가 각 publisher 호출로 교체됨: `src/commands/publish/index.ts:163-171` — type별 분기가 publishNpm, publishToLocal, publishToStorage 호출
8
+ - [x] export 경로 불변: `import { runPublish } from "./commands/publish"` — sd-cli-entry.ts에서 동일 경로로 resolve됨 (commands/publish/index.ts)
9
+ - [x] 버전 업그레이드, Git, 빌드 로직은 index.ts에 유지: upgradeVersion(:99), Git commit/tag/push(:487-499), runBuild 호출(:459)
@@ -0,0 +1,13 @@
1
+ # publish/index.ts 책임 분리 -- LLM 검증
2
+
3
+ ## 검증 항목
4
+
5
+ - [x] version-upgrade.ts에 upgradeVersion, computePublishLevels, PackageJson이 export됨: `src/commands/publish/version-upgrade.ts` 확인 완료
6
+ - [x] env-utils.ts에 replaceEnvVariables, waitWithCountdown이 export됨: `src/commands/publish/env-utils.ts` 확인 완료
7
+ - [x] index.ts에서 추출 함수가 제거되고 import로 대체됨: `index.ts:14-15`에서 version-upgrade, env-utils import 확인
8
+ - [x] index.ts export 불변 — runPublish, PublishOptions만 export: `index.ts:22` PublishOptions, `index.ts:76` runPublish 확인
9
+ - [x] sd-cli-entry.ts의 import 경로 불변: `sd-cli-entry.ts:12` `import { runPublish } from "./commands/publish"` 유지
10
+ - [x] 함수 시그니처 불변: upgradeVersion(cwd, allPkgPaths, dryRun), computePublishLevels(publishPkgs), replaceEnvVariables(str, version, projectPath), waitWithCountdown(message, seconds) 모두 원본과 동일
11
+ - [x] index.ts LOC 축소: 639 → 455 LOC (목표 ~300 이하는 미달이나, 오케스트레이션 자체가 ~280 LOC이므로 적정)
12
+ - [x] 총 LOC 보존: 631 total ≈ 639 original (import/export 차이)
13
+ - [x] 기존 테스트 40개 전량 통과: vitest run 결과 40 passed
@@ -0,0 +1,8 @@
1
+ # storage-publisher 분리 + 디렉토리 구조 변환 -- LLM 검증
2
+
3
+ ## 검증 항목
4
+
5
+ - [x] SSH 인증 로직(ensureSshAuth, testSshKeyAuth, registerSshPublicKey)이 storage-publisher.ts에 위치: `src/commands/publish/storage-publisher.ts:55` (ensureSshAuth), `:128` (testSshKeyAuth), `:157` (registerSshPublicKey)
6
+ - [x] 스토리지 배포 로직(publishToStorage)이 storage-publisher.ts에 위치: `src/commands/publish/storage-publisher.ts:17`
7
+ - [x] index.ts에서 ensureSshAuth와 publishToStorage를 import하여 사용: `src/commands/publish/index.ts:13`
8
+ - [x] import 경로 "./commands/publish"가 디렉토리 구조 변환 후에도 동일하게 resolve: `publish/index.ts`가 Node.js 모듈 resolution에 의해 `commands/publish`로 resolve됨
@@ -42,7 +42,7 @@ vi.mock("../../src/commands/build", () => ({
42
42
  runBuild: mocks.runBuild,
43
43
  }));
44
44
 
45
- vi.mock("../../src/utils/replace-deps", () => ({
45
+ vi.mock("../../src/deps/replace-deps/replace-deps", () => ({
46
46
  parseWorkspaceGlobs: mocks.parseWorkspaceGlobs,
47
47
  }));
48
48
 
@@ -5,7 +5,7 @@ const mocks = vi.hoisted(() => ({
5
5
  loadSdConfig: vi.fn(),
6
6
  deserializeDiagnostic: vi.fn((d: any) => d),
7
7
  typecheckNonPackageFiles: vi.fn(),
8
- createBuildEngine: vi.fn(),
8
+ createTypecheckEngine: vi.fn(),
9
9
  discoverWorkspacePackages: vi.fn(),
10
10
  mergeTestsPackagesIntoConfig: vi.fn(),
11
11
  }));
@@ -19,16 +19,16 @@ vi.mock("../../src/utils/sd-config", () => ({
19
19
  loadSdConfig: mocks.loadSdConfig,
20
20
  }));
21
21
 
22
- vi.mock("../../src/utils/typecheck-serialization", () => ({
22
+ vi.mock("../../src/typecheck/typecheck-serialization", () => ({
23
23
  deserializeDiagnostic: mocks.deserializeDiagnostic,
24
24
  }));
25
25
 
26
- vi.mock("../../src/utils/typecheck-non-package", () => ({
26
+ vi.mock("../../src/typecheck/typecheck-non-package", () => ({
27
27
  typecheckNonPackageFiles: mocks.typecheckNonPackageFiles,
28
28
  }));
29
29
 
30
30
  vi.mock("../../src/engines/index", () => ({
31
- createBuildEngine: mocks.createBuildEngine,
31
+ createTypecheckEngine: mocks.createTypecheckEngine,
32
32
  }));
33
33
 
34
34
  vi.mock("../../src/utils/package-utils", async (importOriginal) => {
@@ -97,7 +97,7 @@ function createMockEngine() {
97
97
 
98
98
  function setupDefaults(packages: Record<string, any> = {}) {
99
99
  mocks.loadSdConfig.mockResolvedValue({ packages });
100
- mocks.createBuildEngine.mockImplementation(() => createMockEngine() as any);
100
+ mocks.createTypecheckEngine.mockImplementation(() => createMockEngine() as any);
101
101
  mocks.typecheckNonPackageFiles.mockReturnValue({
102
102
  success: true,
103
103
  errorCount: 0,
@@ -186,7 +186,7 @@ describe("executeTypecheck", () => {
186
186
  setupDefaults({ "core-node": { target: "node" } });
187
187
 
188
188
  const engineDiag = { category: 1, code: 2322, messageText: "engine err" };
189
- mocks.createBuildEngine.mockImplementation(() => {
189
+ mocks.createTypecheckEngine.mockImplementation(() => {
190
190
  const engine = {
191
191
  run: vi.fn().mockResolvedValue({
192
192
  success: false,
@@ -222,7 +222,7 @@ describe("executeTypecheck", () => {
222
222
 
223
223
  let active = 0;
224
224
  let maxActive = 0;
225
- mocks.createBuildEngine.mockImplementation(() => {
225
+ mocks.createTypecheckEngine.mockImplementation(() => {
226
226
  const engine = {
227
227
  run: vi.fn(async () => {
228
228
  active++;
@@ -249,7 +249,7 @@ describe("executeTypecheck", () => {
249
249
 
250
250
  it("reports failure when engine run fails", async () => {
251
251
  setupDefaults({ "core-node": { target: "node" } });
252
- mocks.createBuildEngine.mockImplementation(() => {
252
+ mocks.createTypecheckEngine.mockImplementation(() => {
253
253
  const engine = {
254
254
  run: vi.fn().mockRejectedValue(new Error("build error")),
255
255
  startWatch: vi.fn(),
@@ -318,7 +318,7 @@ describe("executeTypecheck", () => {
318
318
  merged: mergedPackages,
319
319
  pathMap,
320
320
  });
321
- mocks.createBuildEngine.mockImplementation(() => createMockEngine() as any);
321
+ mocks.createTypecheckEngine.mockImplementation(() => createMockEngine() as any);
322
322
 
323
323
  const result = await executeTypecheck({ targets: [], options: [] });
324
324
 
@@ -335,7 +335,7 @@ describe("executeTypecheck", () => {
335
335
  });
336
336
 
337
337
  const diag = { category: 1, code: 2322, messageText: "type error in test" };
338
- mocks.createBuildEngine.mockImplementation(() => {
338
+ mocks.createTypecheckEngine.mockImplementation(() => {
339
339
  const engine = {
340
340
  run: vi.fn().mockResolvedValue({
341
341
  success: false,
@@ -370,7 +370,7 @@ describe("executeTypecheck", () => {
370
370
  ["orm", "tests/orm"],
371
371
  ]),
372
372
  });
373
- mocks.createBuildEngine.mockImplementation(() => createMockEngine() as any);
373
+ mocks.createTypecheckEngine.mockImplementation(() => createMockEngine() as any);
374
374
 
375
375
  const result = await executeTypecheck({ targets: ["tests/orm"], options: [] });
376
376
 
@@ -396,7 +396,7 @@ describe("executeTypecheck", () => {
396
396
  });
397
397
 
398
398
  // Configure engines to return lint results
399
- mocks.createBuildEngine.mockImplementation(() => {
399
+ mocks.createTypecheckEngine.mockImplementation(() => {
400
400
  const engine = {
401
401
  run: vi.fn().mockResolvedValue({
402
402
  success: true,
@@ -448,7 +448,7 @@ describe("executeTypecheck", () => {
448
448
  it("merges lint results correctly when all succeed", async () => {
449
449
  setupDefaults({ "core-node": { target: "node" } });
450
450
 
451
- mocks.createBuildEngine.mockImplementation(() => {
451
+ mocks.createTypecheckEngine.mockImplementation(() => {
452
452
  const engine = {
453
453
  run: vi.fn().mockResolvedValue({
454
454
  success: true,
@@ -538,7 +538,7 @@ describe("executeTypecheck", () => {
538
538
  it("typecheck+lint 결과 로그에 lintErrorCount, lintWarningCount가 포함된다", async () => {
539
539
  setupDefaults({ "core-node": { target: "node" } });
540
540
 
541
- mocks.createBuildEngine.mockImplementation(() => {
541
+ mocks.createTypecheckEngine.mockImplementation(() => {
542
542
  const engine = {
543
543
  run: vi.fn().mockResolvedValue({
544
544
  success: true,
@@ -588,7 +588,7 @@ describe("executeTypecheck", () => {
588
588
  it("엔진이 dts.errors에 문자열 에러만 반환하면 formattedOutput에 해당 메시지가 포함되고 errorCount가 일치한다", async () => {
589
589
  setupDefaults({ "core-node": { target: "node" } });
590
590
 
591
- mocks.createBuildEngine.mockImplementation(() => {
591
+ mocks.createTypecheckEngine.mockImplementation(() => {
592
592
  const engine = {
593
593
  run: vi.fn().mockResolvedValue({
594
594
  success: false,
@@ -623,7 +623,7 @@ describe("executeTypecheck", () => {
623
623
  let callIdx = 0;
624
624
  const errorMessages = ["[pkg-a:node] Error in package A", "[pkg-b:node] Error in package B"];
625
625
 
626
- mocks.createBuildEngine.mockImplementation(() => {
626
+ mocks.createTypecheckEngine.mockImplementation(() => {
627
627
  const idx = callIdx++;
628
628
  const engine = {
629
629
  run: vi.fn().mockResolvedValue({
@@ -653,7 +653,7 @@ describe("executeTypecheck", () => {
653
653
  it("단일 엔진이 build.errors에 복수 메시지를 담으면 errorCount가 메시지 수와 일치한다", async () => {
654
654
  setupDefaults({ "core-node": { target: "node" } });
655
655
 
656
- mocks.createBuildEngine.mockImplementation(() => {
656
+ mocks.createTypecheckEngine.mockImplementation(() => {
657
657
  const engine = {
658
658
  run: vi.fn().mockResolvedValue({
659
659
  success: false,
@@ -685,7 +685,7 @@ describe("executeTypecheck", () => {
685
685
  setupDefaults({ "core-node": { target: "node" } });
686
686
 
687
687
  const diag = { category: 1, code: 2322, messageText: "Type error in source" };
688
- mocks.createBuildEngine.mockImplementation(() => {
688
+ mocks.createTypecheckEngine.mockImplementation(() => {
689
689
  const engine = {
690
690
  run: vi.fn().mockResolvedValue({
691
691
  success: false,
@@ -0,0 +1,15 @@
1
+ # deps/ 디렉토리 관심사 분리 — LLM 검증
2
+
3
+ ## 검증 항목
4
+
5
+ - [x] replace-deps/ 서브디렉토리에 3개 파일 존재: `collect-deps.ts`, `replace-deps.ts`, `replace-deps-resolve.ts` — glob으로 확인
6
+ - [x] server-externals/ 서브디렉토리에 1개 파일 존재: `server-production-files.ts` — glob으로 확인
7
+ - [x] deps/ 루트에 이전 파일 없음: `replace-deps/`, `server-externals/` 서브디렉토리만 존재
8
+ - [x] collect-deps.ts 내부 import 수정: `../../utils/package-utils` — 코드 확인
9
+ - [x] server-production-files.ts 내부 import 수정: `../../workers/server-build.worker`, `../../esbuild/esbuild-config` — 코드 확인
10
+ - [x] replace-deps.ts → replace-deps-resolve.ts 상대 import 변경 없음: 같은 디렉토리 이동으로 `./replace-deps-resolve` 유지 — 코드 확인
11
+ - [x] src/ 소비자 7건 import 경로 업데이트: grep으로 이전 경로 참조 0건 확인
12
+ - [x] tests/ 소비자 전체 import 경로 업데이트: grep으로 이전 경로 참조 0건 확인
13
+ - [x] typecheck 통과 (기존 에러 4건 제외): `pnpm typecheck` 실행 확인
14
+ - [x] lint 통과: `pnpm lint sd-cli` 0 에러 확인
15
+ - [x] 관련 테스트 통과: replace-deps-watch 2개 파일 5개 테스트 전체 통과 확인