@simplysm/sd-cli 14.0.29 → 14.0.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (626) hide show
  1. package/dist/{utils → angular}/angular-build-pipeline.d.ts +0 -2
  2. package/dist/angular/angular-build-pipeline.d.ts.map +1 -0
  3. package/dist/{utils → angular}/angular-build-pipeline.js +3 -6
  4. package/dist/angular/angular-build-pipeline.js.map +1 -0
  5. package/dist/{utils → angular}/angular-build.d.ts +1 -1
  6. package/dist/angular/angular-build.d.ts.map +1 -0
  7. package/dist/{utils → angular}/angular-build.js +1 -1
  8. package/dist/angular/angular-build.js.map +1 -0
  9. package/dist/{utils → angular}/angular-compiler.d.ts +0 -3
  10. package/dist/angular/angular-compiler.d.ts.map +1 -0
  11. package/dist/{utils → angular}/angular-compiler.js +1 -45
  12. package/dist/angular/angular-compiler.js.map +1 -0
  13. package/dist/angular/client-transform-stylesheet.js +1 -1
  14. package/dist/angular/client-transform-stylesheet.js.map +1 -1
  15. package/dist/{utils → angular}/ngtsc-build-core.d.ts +3 -3
  16. package/dist/angular/ngtsc-build-core.d.ts.map +1 -0
  17. package/dist/angular/ngtsc-build-core.js.map +1 -0
  18. package/dist/angular/scss-compiler.d.ts.map +1 -0
  19. package/dist/angular/scss-compiler.js.map +1 -0
  20. package/dist/angular/vite-angular-plugin.d.ts +2 -10
  21. package/dist/angular/vite-angular-plugin.d.ts.map +1 -1
  22. package/dist/angular/vite-angular-plugin.js +20 -286
  23. package/dist/angular/vite-angular-plugin.js.map +1 -1
  24. package/dist/capacitor/capacitor-build.d.ts +14 -0
  25. package/dist/capacitor/capacitor-build.d.ts.map +1 -0
  26. package/dist/capacitor/capacitor-build.js +105 -0
  27. package/dist/capacitor/capacitor-build.js.map +1 -0
  28. package/dist/capacitor/capacitor-config-writer.d.ts +11 -0
  29. package/dist/capacitor/capacitor-config-writer.d.ts.map +1 -0
  30. package/dist/capacitor/capacitor-config-writer.js +54 -0
  31. package/dist/capacitor/capacitor-config-writer.js.map +1 -0
  32. package/dist/capacitor/capacitor-icon.d.ts +5 -0
  33. package/dist/capacitor/capacitor-icon.d.ts.map +1 -0
  34. package/dist/capacitor/capacitor-icon.js +58 -0
  35. package/dist/capacitor/capacitor-icon.js.map +1 -0
  36. package/dist/capacitor/capacitor-npm-config.d.ts +11 -0
  37. package/dist/capacitor/capacitor-npm-config.d.ts.map +1 -0
  38. package/dist/capacitor/capacitor-npm-config.js +145 -0
  39. package/dist/capacitor/capacitor-npm-config.js.map +1 -0
  40. package/dist/capacitor/capacitor.d.ts +0 -45
  41. package/dist/capacitor/capacitor.d.ts.map +1 -1
  42. package/dist/capacitor/capacitor.js +15 -354
  43. package/dist/capacitor/capacitor.js.map +1 -1
  44. package/dist/commands/check.js +2 -2
  45. package/dist/commands/check.js.map +1 -1
  46. package/dist/commands/dev.d.ts +3 -3
  47. package/dist/commands/dev.d.ts.map +1 -1
  48. package/dist/commands/dev.js +3 -3
  49. package/dist/commands/dev.js.map +1 -1
  50. package/dist/commands/lint.d.ts +1 -1
  51. package/dist/commands/lint.d.ts.map +1 -1
  52. package/dist/commands/lint.js +1 -1
  53. package/dist/commands/lint.js.map +1 -1
  54. package/dist/commands/publish/deployment-phase.d.ts +12 -0
  55. package/dist/commands/publish/deployment-phase.d.ts.map +1 -0
  56. package/dist/commands/publish/deployment-phase.js +94 -0
  57. package/dist/commands/publish/deployment-phase.js.map +1 -0
  58. package/dist/commands/publish/env-utils.d.ts +10 -0
  59. package/dist/commands/publish/env-utils.d.ts.map +1 -0
  60. package/dist/commands/publish/env-utils.js +41 -0
  61. package/dist/commands/publish/env-utils.js.map +1 -0
  62. package/dist/commands/publish/git-phase.d.ts +12 -0
  63. package/dist/commands/publish/git-phase.d.ts.map +1 -0
  64. package/dist/commands/publish/git-phase.js +79 -0
  65. package/dist/commands/publish/git-phase.js.map +1 -0
  66. package/dist/commands/{publish.d.ts → publish/index.d.ts} +1 -1
  67. package/dist/commands/publish/index.d.ts.map +1 -0
  68. package/dist/commands/publish/index.js +211 -0
  69. package/dist/commands/publish/index.js.map +1 -0
  70. package/dist/commands/publish/local-publisher.d.ts +6 -0
  71. package/dist/commands/publish/local-publisher.d.ts.map +1 -0
  72. package/dist/commands/publish/local-publisher.js +16 -0
  73. package/dist/commands/publish/local-publisher.js.map +1 -0
  74. package/dist/commands/publish/npm-publisher.d.ts +6 -0
  75. package/dist/commands/publish/npm-publisher.d.ts.map +1 -0
  76. package/dist/commands/publish/npm-publisher.js +21 -0
  77. package/dist/commands/publish/npm-publisher.js.map +1 -0
  78. package/dist/commands/publish/post-publish-phase.d.ts +8 -0
  79. package/dist/commands/publish/post-publish-phase.d.ts.map +1 -0
  80. package/dist/commands/publish/post-publish-phase.js +34 -0
  81. package/dist/commands/publish/post-publish-phase.js.map +1 -0
  82. package/dist/commands/publish/storage-publisher.d.ts +18 -0
  83. package/dist/commands/publish/storage-publisher.d.ts.map +1 -0
  84. package/dist/commands/publish/storage-publisher.js +173 -0
  85. package/dist/commands/publish/storage-publisher.js.map +1 -0
  86. package/dist/commands/publish/version-upgrade.d.ts +28 -0
  87. package/dist/commands/publish/version-upgrade.d.ts.map +1 -0
  88. package/dist/commands/publish/version-upgrade.js +96 -0
  89. package/dist/commands/publish/version-upgrade.js.map +1 -0
  90. package/dist/commands/replace-deps.js +1 -1
  91. package/dist/commands/replace-deps.js.map +1 -1
  92. package/dist/commands/watch.d.ts +3 -4
  93. package/dist/commands/watch.d.ts.map +1 -1
  94. package/dist/commands/watch.js +3 -4
  95. package/dist/commands/watch.js.map +1 -1
  96. package/dist/deps/replace-deps/collect-deps.d.ts +6 -0
  97. package/dist/deps/replace-deps/collect-deps.d.ts.map +1 -0
  98. package/dist/deps/replace-deps/collect-deps.js +71 -0
  99. package/dist/deps/replace-deps/collect-deps.js.map +1 -0
  100. package/dist/{utils/replace-deps.d.ts → deps/replace-deps/replace-deps-resolve.d.ts} +7 -24
  101. package/dist/deps/replace-deps/replace-deps-resolve.d.ts.map +1 -0
  102. package/dist/{utils/replace-deps.js → deps/replace-deps/replace-deps-resolve.js} +4 -152
  103. package/dist/deps/replace-deps/replace-deps-resolve.js.map +1 -0
  104. package/dist/deps/replace-deps/replace-deps.d.ts +36 -0
  105. package/dist/deps/replace-deps/replace-deps.d.ts.map +1 -0
  106. package/dist/deps/replace-deps/replace-deps.js +155 -0
  107. package/dist/deps/replace-deps/replace-deps.js.map +1 -0
  108. package/dist/{utils → deps/server-externals}/server-production-files.d.ts +1 -1
  109. package/dist/deps/server-externals/server-production-files.d.ts.map +1 -0
  110. package/dist/{utils → deps/server-externals}/server-production-files.js +1 -1
  111. package/dist/deps/server-externals/server-production-files.js.map +1 -0
  112. package/dist/dev-server/dev-http-server.d.ts +23 -0
  113. package/dist/dev-server/dev-http-server.d.ts.map +1 -0
  114. package/dist/dev-server/dev-http-server.js +116 -0
  115. package/dist/dev-server/dev-http-server.js.map +1 -0
  116. package/dist/dev-server/hmr-client-script.d.ts +13 -0
  117. package/dist/dev-server/hmr-client-script.d.ts.map +1 -0
  118. package/dist/dev-server/hmr-client-script.js +73 -0
  119. package/dist/dev-server/hmr-client-script.js.map +1 -0
  120. package/dist/dev-server/hmr-service.d.ts +23 -0
  121. package/dist/dev-server/hmr-service.d.ts.map +1 -0
  122. package/dist/dev-server/hmr-service.js +139 -0
  123. package/dist/dev-server/hmr-service.js.map +1 -0
  124. package/dist/electron/electron.d.ts +5 -0
  125. package/dist/electron/electron.d.ts.map +1 -1
  126. package/dist/electron/electron.js +17 -24
  127. package/dist/electron/electron.js.map +1 -1
  128. package/dist/engines/BaseEngine.d.ts +18 -4
  129. package/dist/engines/BaseEngine.d.ts.map +1 -1
  130. package/dist/engines/BaseEngine.js +45 -66
  131. package/dist/engines/BaseEngine.js.map +1 -1
  132. package/dist/engines/{ViteEngine.d.ts → EsbuildClientEngine.d.ts} +11 -18
  133. package/dist/engines/EsbuildClientEngine.d.ts.map +1 -0
  134. package/dist/engines/{ViteEngine.js → EsbuildClientEngine.js} +28 -55
  135. package/dist/engines/EsbuildClientEngine.js.map +1 -0
  136. package/dist/engines/NgtscEngine.d.ts +2 -2
  137. package/dist/engines/NgtscEngine.d.ts.map +1 -1
  138. package/dist/engines/NgtscEngine.js +1 -9
  139. package/dist/engines/NgtscEngine.js.map +1 -1
  140. package/dist/engines/ServerEsbuildEngine.d.ts +2 -2
  141. package/dist/engines/ServerEsbuildEngine.d.ts.map +1 -1
  142. package/dist/engines/ServerEsbuildEngine.js +1 -9
  143. package/dist/engines/ServerEsbuildEngine.js.map +1 -1
  144. package/dist/engines/TscEngine.d.ts +2 -2
  145. package/dist/engines/TscEngine.d.ts.map +1 -1
  146. package/dist/engines/TscEngine.js +1 -9
  147. package/dist/engines/TscEngine.js.map +1 -1
  148. package/dist/engines/index.d.ts +15 -5
  149. package/dist/engines/index.d.ts.map +1 -1
  150. package/dist/engines/index.js +21 -5
  151. package/dist/engines/index.js.map +1 -1
  152. package/dist/engines/types.d.ts +3 -3
  153. package/dist/engines/types.d.ts.map +1 -1
  154. package/dist/esbuild/esbuild-client-config.d.ts +38 -0
  155. package/dist/esbuild/esbuild-client-config.d.ts.map +1 -0
  156. package/dist/esbuild/esbuild-client-config.js +171 -0
  157. package/dist/esbuild/esbuild-client-config.js.map +1 -0
  158. package/dist/esbuild/esbuild-config.d.ts.map +1 -0
  159. package/dist/{utils → esbuild}/esbuild-config.js +1 -0
  160. package/dist/esbuild/esbuild-config.js.map +1 -0
  161. package/dist/esbuild/esbuild-index-html.d.ts +39 -0
  162. package/dist/esbuild/esbuild-index-html.d.ts.map +1 -0
  163. package/dist/esbuild/esbuild-index-html.js +68 -0
  164. package/dist/esbuild/esbuild-index-html.js.map +1 -0
  165. package/dist/esbuild/esbuild-pwa.d.ts +21 -0
  166. package/dist/esbuild/esbuild-pwa.d.ts.map +1 -0
  167. package/dist/esbuild/esbuild-pwa.js +105 -0
  168. package/dist/esbuild/esbuild-pwa.js.map +1 -0
  169. package/dist/esbuild/esbuild-scss-plugin.d.ts +6 -0
  170. package/dist/esbuild/esbuild-scss-plugin.d.ts.map +1 -0
  171. package/dist/esbuild/esbuild-scss-plugin.js +41 -0
  172. package/dist/esbuild/esbuild-scss-plugin.js.map +1 -0
  173. package/dist/lint/lint-core.d.ts.map +1 -0
  174. package/dist/lint/lint-core.js.map +1 -0
  175. package/dist/lint/lint-utils.d.ts.map +1 -0
  176. package/dist/lint/lint-utils.js.map +1 -0
  177. package/dist/lint/lint-with-program.d.ts.map +1 -0
  178. package/dist/lint/lint-with-program.js.map +1 -0
  179. package/dist/orchestrators/BaseOrchestrator.d.ts +44 -0
  180. package/dist/orchestrators/BaseOrchestrator.d.ts.map +1 -0
  181. package/dist/orchestrators/BaseOrchestrator.js +92 -0
  182. package/dist/orchestrators/BaseOrchestrator.js.map +1 -0
  183. package/dist/orchestrators/BuildOrchestrator.d.ts +45 -3
  184. package/dist/orchestrators/BuildOrchestrator.d.ts.map +1 -1
  185. package/dist/orchestrators/BuildOrchestrator.js +170 -143
  186. package/dist/orchestrators/BuildOrchestrator.js.map +1 -1
  187. package/dist/orchestrators/DevOrchestrator.d.ts +39 -0
  188. package/dist/orchestrators/DevOrchestrator.d.ts.map +1 -0
  189. package/dist/orchestrators/DevOrchestrator.js +249 -0
  190. package/dist/orchestrators/DevOrchestrator.js.map +1 -0
  191. package/dist/orchestrators/ServerRuntimeManager.d.ts +22 -0
  192. package/dist/orchestrators/ServerRuntimeManager.d.ts.map +1 -0
  193. package/dist/orchestrators/ServerRuntimeManager.js +66 -0
  194. package/dist/orchestrators/ServerRuntimeManager.js.map +1 -0
  195. package/dist/orchestrators/TypecheckOrchestrator.d.ts +17 -2
  196. package/dist/orchestrators/TypecheckOrchestrator.d.ts.map +1 -1
  197. package/dist/orchestrators/TypecheckOrchestrator.js +122 -108
  198. package/dist/orchestrators/TypecheckOrchestrator.js.map +1 -1
  199. package/dist/orchestrators/WatchOrchestrator.d.ts +33 -0
  200. package/dist/orchestrators/WatchOrchestrator.d.ts.map +1 -0
  201. package/dist/orchestrators/WatchOrchestrator.js +158 -0
  202. package/dist/orchestrators/WatchOrchestrator.js.map +1 -0
  203. package/dist/orchestrators/types.d.ts +17 -0
  204. package/dist/orchestrators/types.d.ts.map +1 -0
  205. package/dist/orchestrators/types.js +2 -0
  206. package/dist/orchestrators/types.js.map +1 -0
  207. package/dist/runtime/ResultCollector.d.ts.map +1 -0
  208. package/dist/runtime/ResultCollector.js.map +1 -0
  209. package/dist/runtime/SignalHandler.d.ts.map +1 -0
  210. package/dist/runtime/SignalHandler.js.map +1 -0
  211. package/dist/{utils → runtime}/engine-stop.d.ts +1 -1
  212. package/dist/runtime/engine-stop.d.ts.map +1 -0
  213. package/dist/{utils → runtime}/engine-stop.js +1 -1
  214. package/dist/runtime/engine-stop.js.map +1 -0
  215. package/dist/runtime/engine-watch-events.d.ts +43 -0
  216. package/dist/runtime/engine-watch-events.d.ts.map +1 -0
  217. package/dist/runtime/engine-watch-events.js +72 -0
  218. package/dist/runtime/engine-watch-events.js.map +1 -0
  219. package/dist/{utils → runtime}/rebuild-manager.d.ts +1 -0
  220. package/dist/runtime/rebuild-manager.d.ts.map +1 -0
  221. package/dist/{utils → runtime}/rebuild-manager.js +8 -1
  222. package/dist/runtime/rebuild-manager.js.map +1 -0
  223. package/dist/runtime/worker-events.d.ts +22 -0
  224. package/dist/runtime/worker-events.d.ts.map +1 -0
  225. package/dist/runtime/worker-events.js +2 -0
  226. package/dist/runtime/worker-events.js.map +1 -0
  227. package/dist/runtime/worker-utils.d.ts.map +1 -0
  228. package/dist/runtime/worker-utils.js.map +1 -0
  229. package/dist/sd-cli-entry.d.ts.map +1 -1
  230. package/dist/sd-cli-entry.js +61 -54
  231. package/dist/sd-cli-entry.js.map +1 -1
  232. package/dist/sd-cli.js +1 -1
  233. package/dist/sd-cli.js.map +1 -1
  234. package/dist/sd-config.types.d.ts +6 -15
  235. package/dist/sd-config.types.d.ts.map +1 -1
  236. package/dist/typecheck/typecheck-non-package.d.ts.map +1 -0
  237. package/dist/{utils → typecheck}/typecheck-non-package.js +1 -1
  238. package/dist/typecheck/typecheck-non-package.js.map +1 -0
  239. package/dist/typecheck/typecheck-serialization.d.ts.map +1 -0
  240. package/dist/typecheck/typecheck-serialization.js.map +1 -0
  241. package/dist/utils/diagnostic-utils.d.ts +5 -0
  242. package/dist/utils/diagnostic-utils.d.ts.map +1 -1
  243. package/dist/utils/diagnostic-utils.js +15 -0
  244. package/dist/utils/diagnostic-utils.js.map +1 -1
  245. package/dist/utils/orchestrator-utils.d.ts +1 -5
  246. package/dist/utils/orchestrator-utils.d.ts.map +1 -1
  247. package/dist/utils/orchestrator-utils.js +2 -5
  248. package/dist/utils/orchestrator-utils.js.map +1 -1
  249. package/dist/utils/output-utils.d.ts +1 -1
  250. package/dist/utils/output-utils.d.ts.map +1 -1
  251. package/dist/utils/package-classify.d.ts +54 -0
  252. package/dist/utils/package-classify.d.ts.map +1 -0
  253. package/dist/utils/package-classify.js +134 -0
  254. package/dist/utils/package-classify.js.map +1 -0
  255. package/dist/utils/package-utils.d.ts +1 -58
  256. package/dist/utils/package-utils.d.ts.map +1 -1
  257. package/dist/utils/package-utils.js +0 -193
  258. package/dist/utils/package-utils.js.map +1 -1
  259. package/dist/utils/tsc-build.d.ts +1 -1
  260. package/dist/utils/tsc-build.d.ts.map +1 -1
  261. package/dist/utils/tsc-build.js +1 -1
  262. package/dist/utils/tsc-build.js.map +1 -1
  263. package/dist/workers/build-change-filter.d.ts +8 -0
  264. package/dist/workers/build-change-filter.d.ts.map +1 -0
  265. package/dist/workers/build-change-filter.js +16 -0
  266. package/dist/workers/build-change-filter.js.map +1 -0
  267. package/dist/workers/build-watch-paths.d.ts +20 -0
  268. package/dist/workers/build-watch-paths.d.ts.map +1 -0
  269. package/dist/workers/build-watch-paths.js +29 -0
  270. package/dist/workers/build-watch-paths.js.map +1 -0
  271. package/dist/workers/client.worker.d.ts +11 -18
  272. package/dist/workers/client.worker.d.ts.map +1 -1
  273. package/dist/workers/client.worker.js +218 -289
  274. package/dist/workers/client.worker.js.map +1 -1
  275. package/dist/workers/library-build.worker.d.ts +2 -2
  276. package/dist/workers/library-build.worker.d.ts.map +1 -1
  277. package/dist/workers/library-build.worker.js +13 -24
  278. package/dist/workers/library-build.worker.js.map +1 -1
  279. package/dist/workers/lint.worker.d.ts +1 -1
  280. package/dist/workers/lint.worker.d.ts.map +1 -1
  281. package/dist/workers/lint.worker.js +1 -1
  282. package/dist/workers/lint.worker.js.map +1 -1
  283. package/dist/workers/ngtsc-build.worker.d.ts +1 -1
  284. package/dist/workers/ngtsc-build.worker.d.ts.map +1 -1
  285. package/dist/workers/ngtsc-build.worker.js +19 -35
  286. package/dist/workers/ngtsc-build.worker.js.map +1 -1
  287. package/dist/workers/server-build.worker.d.ts +2 -2
  288. package/dist/workers/server-build.worker.d.ts.map +1 -1
  289. package/dist/workers/server-build.worker.js +36 -137
  290. package/dist/workers/server-build.worker.js.map +1 -1
  291. package/dist/workers/server-esbuild-context.d.ts +47 -0
  292. package/dist/workers/server-esbuild-context.d.ts.map +1 -0
  293. package/dist/workers/server-esbuild-context.js +92 -0
  294. package/dist/workers/server-esbuild-context.js.map +1 -0
  295. package/dist/workers/server-runtime.worker.d.ts.map +1 -1
  296. package/dist/workers/server-runtime.worker.js +3 -1
  297. package/dist/workers/server-runtime.worker.js.map +1 -1
  298. package/dist/workers/server-watch-manager.d.ts +44 -0
  299. package/dist/workers/server-watch-manager.d.ts.map +1 -0
  300. package/dist/workers/server-watch-manager.js +87 -0
  301. package/dist/workers/server-watch-manager.js.map +1 -0
  302. package/dist/workers/shared-worker-lifecycle.d.ts +14 -0
  303. package/dist/workers/shared-worker-lifecycle.d.ts.map +1 -0
  304. package/dist/workers/shared-worker-lifecycle.js +17 -0
  305. package/dist/workers/shared-worker-lifecycle.js.map +1 -0
  306. package/package.json +9 -9
  307. package/src/{utils → angular}/angular-build-pipeline.ts +3 -8
  308. package/src/{utils → angular}/angular-build.ts +1 -1
  309. package/src/{utils → angular}/angular-compiler.ts +1 -64
  310. package/src/angular/client-transform-stylesheet.ts +1 -1
  311. package/src/{utils → angular}/ngtsc-build-core.ts +3 -3
  312. package/src/angular/vite-angular-plugin.ts +22 -355
  313. package/src/capacitor/capacitor-build.ts +142 -0
  314. package/src/capacitor/capacitor-config-writer.ts +66 -0
  315. package/src/capacitor/capacitor-icon.ts +75 -0
  316. package/src/capacitor/capacitor-npm-config.ts +192 -0
  317. package/src/capacitor/capacitor.ts +32 -441
  318. package/src/commands/check.ts +2 -2
  319. package/src/commands/dev.ts +6 -6
  320. package/src/commands/lint.ts +1 -1
  321. package/src/commands/publish/deployment-phase.ts +125 -0
  322. package/src/commands/publish/env-utils.ts +44 -0
  323. package/src/commands/publish/git-phase.ts +99 -0
  324. package/src/commands/publish/index.ts +266 -0
  325. package/src/commands/publish/local-publisher.ts +23 -0
  326. package/src/commands/publish/npm-publisher.ts +30 -0
  327. package/src/commands/publish/post-publish-phase.ts +43 -0
  328. package/src/commands/publish/storage-publisher.ts +208 -0
  329. package/src/commands/publish/version-upgrade.ts +132 -0
  330. package/src/commands/replace-deps.ts +1 -1
  331. package/src/commands/watch.ts +6 -7
  332. package/src/deps/replace-deps/collect-deps.ts +92 -0
  333. package/src/{utils/replace-deps.ts → deps/replace-deps/replace-deps-resolve.ts} +4 -188
  334. package/src/deps/replace-deps/replace-deps.ts +193 -0
  335. package/src/{utils → deps/server-externals}/server-production-files.ts +2 -2
  336. package/src/dev-server/dev-http-server.ts +149 -0
  337. package/src/dev-server/hmr-client-script.ts +74 -0
  338. package/src/dev-server/hmr-service.ts +178 -0
  339. package/src/electron/electron.ts +21 -28
  340. package/src/engines/BaseEngine.ts +64 -83
  341. package/src/engines/{ViteEngine.ts → EsbuildClientEngine.ts} +33 -72
  342. package/src/engines/NgtscEngine.ts +3 -11
  343. package/src/engines/ServerEsbuildEngine.ts +3 -11
  344. package/src/engines/TscEngine.ts +3 -11
  345. package/src/engines/index.ts +29 -9
  346. package/src/engines/types.ts +3 -3
  347. package/src/esbuild/esbuild-client-config.ts +230 -0
  348. package/src/{utils → esbuild}/esbuild-config.ts +1 -0
  349. package/src/esbuild/esbuild-index-html.ts +119 -0
  350. package/src/esbuild/esbuild-pwa.ts +139 -0
  351. package/src/esbuild/esbuild-scss-plugin.ts +48 -0
  352. package/src/orchestrators/BaseOrchestrator.ts +118 -0
  353. package/src/orchestrators/BuildOrchestrator.ts +234 -171
  354. package/src/orchestrators/DevOrchestrator.ts +315 -0
  355. package/src/orchestrators/ServerRuntimeManager.ts +85 -0
  356. package/src/orchestrators/TypecheckOrchestrator.ts +166 -117
  357. package/src/orchestrators/WatchOrchestrator.ts +203 -0
  358. package/src/orchestrators/types.ts +18 -0
  359. package/src/{utils → runtime}/engine-stop.ts +1 -1
  360. package/src/runtime/engine-watch-events.ts +121 -0
  361. package/src/{utils → runtime}/rebuild-manager.ts +8 -1
  362. package/src/runtime/worker-events.ts +25 -0
  363. package/src/sd-cli-entry.ts +69 -54
  364. package/src/sd-cli.ts +1 -1
  365. package/src/sd-config.types.ts +6 -16
  366. package/src/{utils → typecheck}/typecheck-non-package.ts +1 -1
  367. package/src/utils/diagnostic-utils.ts +15 -0
  368. package/src/utils/orchestrator-utils.ts +2 -6
  369. package/src/utils/output-utils.ts +1 -1
  370. package/src/utils/package-classify.ts +182 -0
  371. package/src/utils/package-utils.ts +0 -257
  372. package/src/utils/tsc-build.ts +1 -1
  373. package/src/workers/build-change-filter.ts +27 -0
  374. package/src/workers/build-watch-paths.ts +54 -0
  375. package/src/workers/client.worker.ts +258 -328
  376. package/src/workers/library-build.worker.ts +15 -34
  377. package/src/workers/lint.worker.ts +1 -1
  378. package/src/workers/ngtsc-build.worker.ts +19 -46
  379. package/src/workers/server-build.worker.ts +38 -168
  380. package/src/workers/server-esbuild-context.ts +122 -0
  381. package/src/workers/server-runtime.worker.ts +4 -1
  382. package/src/workers/server-watch-manager.ts +124 -0
  383. package/src/workers/shared-worker-lifecycle.ts +24 -0
  384. package/tests/angular/angular-build-pipeline.spec.ts +2 -2
  385. package/tests/angular/angular-compiler-aot.acc.spec.ts +68 -0
  386. package/tests/angular/angular-compiler-aot.spec.ts +80 -0
  387. package/tests/angular/angular-compiler-hmr-removal.verify.md +16 -0
  388. package/tests/angular/vite-angular-plugin-legacy-watch.spec.ts +0 -17
  389. package/tests/angular/vite-angular-plugin-vitest.spec.ts +1 -6
  390. package/tests/angular/vite-angular-plugin-vitest.verify.md +20 -0
  391. package/tests/angular/vite-angular-plugin.spec.ts +4 -178
  392. package/tests/capacitor/capacitor-android.spec.ts +1 -0
  393. package/tests/capacitor/capacitor-build.spec.ts +1 -0
  394. package/tests/capacitor/capacitor-config-writer.acc.spec.ts +108 -0
  395. package/tests/capacitor/capacitor-config-writer.spec.ts +95 -0
  396. package/tests/capacitor/capacitor-icon.spec.ts +1 -0
  397. package/tests/capacitor/capacitor-init.spec.ts +1 -0
  398. package/tests/capacitor/capacitor-npm-config.acc.spec.ts +236 -0
  399. package/tests/capacitor/capacitor-npm-config.spec.ts +132 -0
  400. package/tests/capacitor/capacitor-run.spec.ts +1 -0
  401. package/tests/capacitor/capacitor-workspace.spec.ts +1 -0
  402. package/tests/commands/check.spec.ts +2 -2
  403. package/tests/commands/deployment-phase.acc.spec.ts +142 -0
  404. package/tests/commands/git-phase.acc.spec.ts +158 -0
  405. package/tests/commands/lint.spec.ts +1 -1
  406. package/tests/commands/post-publish-phase.acc.spec.ts +82 -0
  407. package/tests/commands/publish-npm-local-split.verify.md +9 -0
  408. package/tests/commands/publish-responsibility-split.verify.md +13 -0
  409. package/tests/commands/publish-storage-split.verify.md +8 -0
  410. package/tests/commands/publish.spec.ts +1 -1
  411. package/tests/commands/typecheck.spec.ts +18 -18
  412. package/tests/deps/deps-directory-separation.verify.md +15 -0
  413. package/tests/engines/base-engine.spec.ts +65 -6
  414. package/tests/engines/engine-adapter-isolation.spec.ts +11 -18
  415. package/tests/engines/engine-selection.spec.ts +38 -5
  416. package/tests/engines/engine-typecheck-selection.acc.spec.ts +85 -0
  417. package/tests/engines/engine-typecheck-selection.verify.md +8 -0
  418. package/tests/engines/esbuild-client-engine.acc.spec.ts +161 -0
  419. package/tests/engines/esbuild-client-engine.spec.ts +320 -0
  420. package/tests/engines/esbuild-client-engine.verify.md +15 -0
  421. package/tests/engines/normalize-result.verify.md +9 -0
  422. package/tests/engines/vite-dependency-cleanup.verify.md +24 -0
  423. package/tests/orchestrators/build-orchestrator.spec.ts +3 -3
  424. package/tests/orchestrators/dev-orchestrator.spec.ts +799 -0
  425. package/tests/orchestrators/orchestrator-baseenv.verify.md +10 -0
  426. package/tests/orchestrators/orchestrator-diagnostic-formatting.verify.md +10 -0
  427. package/tests/orchestrators/orchestrator-initializemode-signature.verify.md +9 -0
  428. package/tests/orchestrators/typecheck-orchestrator.spec.ts +11 -11
  429. package/tests/orchestrators/watch-orchestrator.spec.ts +511 -0
  430. package/tests/{infra → runtime}/result-collector.spec.ts +1 -1
  431. package/tests/{infra → runtime}/signal-handler.spec.ts +1 -1
  432. package/tests/sd-cli-entry.spec.ts +9 -0
  433. package/tests/utils/angular-build.spec.ts +15 -20
  434. package/tests/utils/angular-compiler-emit.spec.ts +2 -2
  435. package/tests/utils/angular-compiler.spec.ts +2 -2
  436. package/tests/utils/angular-source-file-cache.spec.ts +2 -2
  437. package/tests/utils/concurrency.spec.ts +2 -10
  438. package/tests/utils/dev-http-server.acc.spec.ts +206 -0
  439. package/tests/utils/dev-http-server.spec.ts +181 -0
  440. package/tests/utils/dev-http-server.verify.md +8 -0
  441. package/tests/utils/diagnostic-utils.spec.ts +42 -1
  442. package/tests/utils/engine-stop.spec.ts +1 -1
  443. package/tests/utils/engine-watch-events.acc.spec.ts +217 -0
  444. package/tests/utils/engine-watch-events.spec.ts +141 -0
  445. package/tests/utils/engine-watch-events.verify.md +17 -0
  446. package/tests/utils/esbuild-client-config.acc.spec.ts +443 -0
  447. package/tests/utils/esbuild-client-config.spec.ts +590 -0
  448. package/tests/utils/esbuild-client-config.verify.md +26 -0
  449. package/tests/utils/esbuild-config.spec.ts +11 -1
  450. package/tests/utils/esbuild-index-html.acc.spec.ts +166 -0
  451. package/tests/utils/esbuild-index-html.spec.ts +194 -0
  452. package/tests/utils/esbuild-index-html.verify.md +10 -0
  453. package/tests/utils/esbuild-pwa.acc.spec.ts +203 -0
  454. package/tests/utils/esbuild-pwa.spec.ts +189 -0
  455. package/tests/utils/esbuild-pwa.verify.md +9 -0
  456. package/tests/utils/esbuild-scss-plugin.acc.spec.ts +111 -0
  457. package/tests/utils/esbuild-scss-plugin.spec.ts +150 -0
  458. package/tests/utils/esbuild-scss-plugin.verify.md +8 -0
  459. package/tests/utils/external-modules.spec.ts +1 -1
  460. package/tests/utils/hmr-client-script.acc.spec.ts +128 -0
  461. package/tests/utils/hmr-client-script.spec.ts +44 -0
  462. package/tests/utils/hmr-service-dispatcher.acc.spec.ts +217 -0
  463. package/tests/utils/hmr-service-dispatcher.spec.ts +143 -0
  464. package/tests/utils/hmr-service.acc.spec.ts +139 -0
  465. package/tests/utils/hmr-service.spec.ts +131 -0
  466. package/tests/utils/hmr-service.verify.md +17 -0
  467. package/tests/utils/lint-core.spec.ts +2 -1
  468. package/tests/utils/lint-utils.spec.ts +1 -1
  469. package/tests/utils/lint-with-program.spec.ts +1 -1
  470. package/tests/utils/ngtsc-build-core-write-emit.spec.ts +19 -19
  471. package/tests/utils/ngtsc-build-core.spec.ts +4 -4
  472. package/tests/utils/orchestrator-utils.spec.ts +2 -2
  473. package/tests/utils/output-utils.spec.ts +1 -1
  474. package/tests/utils/package-utils.spec.ts +1 -1
  475. package/tests/utils/rebuild-manager.spec.ts +20 -7
  476. package/tests/utils/replace-deps-split.verify.md +15 -0
  477. package/tests/utils/replace-deps-watch.acc.spec.ts +131 -0
  478. package/tests/utils/replace-deps-watch.spec.ts +91 -0
  479. package/tests/utils/replace-deps-watch.verify.md +9 -0
  480. package/tests/utils/replace-deps.spec.ts +1 -1
  481. package/tests/utils/scss-compiler.spec.ts +1 -1
  482. package/tests/utils/tsc-build.spec.ts +1 -1
  483. package/tests/utils/typecheck-non-package.spec.ts +2 -2
  484. package/tests/utils/worker-utils.spec.ts +2 -1
  485. package/tests/workers/build-change-filter.acc.spec.ts +78 -0
  486. package/tests/workers/build-change-filter.spec.ts +39 -0
  487. package/tests/workers/build-watch-paths-library.verify.md +10 -0
  488. package/tests/workers/build-watch-paths-ngtsc-server.verify.md +12 -0
  489. package/tests/workers/build-watch-paths.acc.spec.ts +101 -0
  490. package/tests/workers/build-watch-paths.spec.ts +121 -0
  491. package/tests/workers/client-worker-browser-support.verify.md +7 -0
  492. package/tests/workers/client-worker-onend-sync.verify.md +7 -0
  493. package/tests/workers/client-worker.acc.spec.ts +185 -0
  494. package/tests/workers/client-worker.spec.ts +91 -178
  495. package/tests/workers/library-build-lint.spec.ts +3 -3
  496. package/tests/workers/library-build-worker.spec.ts +10 -11
  497. package/tests/workers/ngtsc-build-lint.spec.ts +4 -4
  498. package/tests/workers/ngtsc-build-worker.spec.ts +2 -2
  499. package/tests/workers/server-build-lint.spec.ts +4 -4
  500. package/tests/workers/server-build-worker.spec.ts +14 -15
  501. package/tests/workers/server-esbuild-context-integration.verify.md +10 -0
  502. package/tests/workers/server-esbuild-context.acc.spec.ts +98 -0
  503. package/tests/workers/server-esbuild-context.spec.ts +198 -0
  504. package/tests/workers/server-runtime-worker.spec.ts +4 -3
  505. package/tests/workers/server-watch-manager.acc.spec.ts +162 -0
  506. package/tests/workers/server-watch-manager.spec.ts +199 -0
  507. package/tests/workers/shared-worker-lifecycle.acc.spec.ts +27 -0
  508. package/tests/workers/shared-worker-lifecycle.spec.ts +47 -0
  509. package/dist/angular/vite-postcss-inline-plugin.d.ts +0 -18
  510. package/dist/angular/vite-postcss-inline-plugin.d.ts.map +0 -1
  511. package/dist/angular/vite-postcss-inline-plugin.js +0 -108
  512. package/dist/angular/vite-postcss-inline-plugin.js.map +0 -1
  513. package/dist/commands/publish.d.ts.map +0 -1
  514. package/dist/commands/publish.js +0 -689
  515. package/dist/commands/publish.js.map +0 -1
  516. package/dist/engines/ViteEngine.d.ts.map +0 -1
  517. package/dist/engines/ViteEngine.js.map +0 -1
  518. package/dist/infra/ResultCollector.d.ts.map +0 -1
  519. package/dist/infra/ResultCollector.js.map +0 -1
  520. package/dist/infra/SignalHandler.d.ts.map +0 -1
  521. package/dist/infra/SignalHandler.js.map +0 -1
  522. package/dist/orchestrators/DevWatchOrchestrator.d.ts +0 -63
  523. package/dist/orchestrators/DevWatchOrchestrator.d.ts.map +0 -1
  524. package/dist/orchestrators/DevWatchOrchestrator.js +0 -478
  525. package/dist/orchestrators/DevWatchOrchestrator.js.map +0 -1
  526. package/dist/utils/angular-build-pipeline.d.ts.map +0 -1
  527. package/dist/utils/angular-build-pipeline.js.map +0 -1
  528. package/dist/utils/angular-build.d.ts.map +0 -1
  529. package/dist/utils/angular-build.js.map +0 -1
  530. package/dist/utils/angular-compiler.d.ts.map +0 -1
  531. package/dist/utils/angular-compiler.js.map +0 -1
  532. package/dist/utils/engine-stop.d.ts.map +0 -1
  533. package/dist/utils/engine-stop.js.map +0 -1
  534. package/dist/utils/esbuild-config.d.ts.map +0 -1
  535. package/dist/utils/esbuild-config.js.map +0 -1
  536. package/dist/utils/hmr-candidates.d.ts +0 -15
  537. package/dist/utils/hmr-candidates.d.ts.map +0 -1
  538. package/dist/utils/hmr-candidates.js +0 -234
  539. package/dist/utils/hmr-candidates.js.map +0 -1
  540. package/dist/utils/lint-core.d.ts.map +0 -1
  541. package/dist/utils/lint-core.js.map +0 -1
  542. package/dist/utils/lint-utils.d.ts.map +0 -1
  543. package/dist/utils/lint-utils.js.map +0 -1
  544. package/dist/utils/lint-with-program.d.ts.map +0 -1
  545. package/dist/utils/lint-with-program.js.map +0 -1
  546. package/dist/utils/ngtsc-build-core.d.ts.map +0 -1
  547. package/dist/utils/ngtsc-build-core.js.map +0 -1
  548. package/dist/utils/rebuild-manager.d.ts.map +0 -1
  549. package/dist/utils/rebuild-manager.js.map +0 -1
  550. package/dist/utils/replace-deps.d.ts.map +0 -1
  551. package/dist/utils/replace-deps.js.map +0 -1
  552. package/dist/utils/scss-compiler.d.ts.map +0 -1
  553. package/dist/utils/scss-compiler.js.map +0 -1
  554. package/dist/utils/server-production-files.d.ts.map +0 -1
  555. package/dist/utils/server-production-files.js.map +0 -1
  556. package/dist/utils/typecheck-non-package.d.ts.map +0 -1
  557. package/dist/utils/typecheck-non-package.js.map +0 -1
  558. package/dist/utils/typecheck-serialization.d.ts.map +0 -1
  559. package/dist/utils/typecheck-serialization.js.map +0 -1
  560. package/dist/utils/vite-config.d.ts +0 -50
  561. package/dist/utils/vite-config.d.ts.map +0 -1
  562. package/dist/utils/vite-config.js +0 -242
  563. package/dist/utils/vite-config.js.map +0 -1
  564. package/dist/utils/vite-pwa-plugin.d.ts +0 -9
  565. package/dist/utils/vite-pwa-plugin.d.ts.map +0 -1
  566. package/dist/utils/vite-pwa-plugin.js +0 -139
  567. package/dist/utils/vite-pwa-plugin.js.map +0 -1
  568. package/dist/utils/vite-scope-watch-plugin.d.ts +0 -24
  569. package/dist/utils/vite-scope-watch-plugin.d.ts.map +0 -1
  570. package/dist/utils/vite-scope-watch-plugin.js +0 -51
  571. package/dist/utils/vite-scope-watch-plugin.js.map +0 -1
  572. package/dist/utils/worker-events.d.ts +0 -66
  573. package/dist/utils/worker-events.d.ts.map +0 -1
  574. package/dist/utils/worker-events.js +0 -55
  575. package/dist/utils/worker-events.js.map +0 -1
  576. package/dist/utils/worker-utils.d.ts.map +0 -1
  577. package/dist/utils/worker-utils.js.map +0 -1
  578. package/src/angular/vite-postcss-inline-plugin.ts +0 -139
  579. package/src/commands/publish.ts +0 -850
  580. package/src/orchestrators/DevWatchOrchestrator.ts +0 -594
  581. package/src/utils/hmr-candidates.ts +0 -327
  582. package/src/utils/vite-config.ts +0 -318
  583. package/src/utils/vite-pwa-plugin.ts +0 -168
  584. package/src/utils/vite-scope-watch-plugin.ts +0 -77
  585. package/src/utils/worker-events.ts +0 -128
  586. package/tests/angular/angular-compiler-hmr.spec.ts +0 -152
  587. package/tests/angular/hmr-candidates.spec.ts +0 -158
  588. package/tests/angular/linker-disk-cache.spec.ts +0 -171
  589. package/tests/angular/vite-angular-plugin-hmr-fallback.spec.ts +0 -333
  590. package/tests/angular/vite-angular-plugin-hmr.spec.ts +0 -320
  591. package/tests/angular/vite-angular-plugin-scss-hmr.spec.ts +0 -95
  592. package/tests/angular/vite-postcss-inline-plugin.spec.ts +0 -60
  593. package/tests/engines/vite-engine.spec.ts +0 -409
  594. package/tests/orchestrators/dev-watch-orchestrator.spec.ts +0 -1542
  595. package/tests/utils/vite-config.spec.ts +0 -780
  596. package/tests/utils/vite-pwa-plugin.spec.ts +0 -401
  597. package/tests/utils/vite-scope-watch-plugin.spec.ts +0 -218
  598. package/tests/utils/worker-events.spec.ts +0 -147
  599. package/tests/workers/client-worker-legacy.spec.ts +0 -659
  600. /package/dist/{utils → angular}/ngtsc-build-core.js +0 -0
  601. /package/dist/{utils → angular}/scss-compiler.d.ts +0 -0
  602. /package/dist/{utils → angular}/scss-compiler.js +0 -0
  603. /package/dist/{utils → esbuild}/esbuild-config.d.ts +0 -0
  604. /package/dist/{utils → lint}/lint-core.d.ts +0 -0
  605. /package/dist/{utils → lint}/lint-core.js +0 -0
  606. /package/dist/{utils → lint}/lint-utils.d.ts +0 -0
  607. /package/dist/{utils → lint}/lint-utils.js +0 -0
  608. /package/dist/{utils → lint}/lint-with-program.d.ts +0 -0
  609. /package/dist/{utils → lint}/lint-with-program.js +0 -0
  610. /package/dist/{infra → runtime}/ResultCollector.d.ts +0 -0
  611. /package/dist/{infra → runtime}/ResultCollector.js +0 -0
  612. /package/dist/{infra → runtime}/SignalHandler.d.ts +0 -0
  613. /package/dist/{infra → runtime}/SignalHandler.js +0 -0
  614. /package/dist/{utils → runtime}/worker-utils.d.ts +0 -0
  615. /package/dist/{utils → runtime}/worker-utils.js +0 -0
  616. /package/dist/{utils → typecheck}/typecheck-non-package.d.ts +0 -0
  617. /package/dist/{utils → typecheck}/typecheck-serialization.d.ts +0 -0
  618. /package/dist/{utils → typecheck}/typecheck-serialization.js +0 -0
  619. /package/src/{utils → angular}/scss-compiler.ts +0 -0
  620. /package/src/{utils → lint}/lint-core.ts +0 -0
  621. /package/src/{utils → lint}/lint-utils.ts +0 -0
  622. /package/src/{utils → lint}/lint-with-program.ts +0 -0
  623. /package/src/{infra → runtime}/ResultCollector.ts +0 -0
  624. /package/src/{infra → runtime}/SignalHandler.ts +0 -0
  625. /package/src/{utils → runtime}/worker-utils.ts +0 -0
  626. /package/src/{utils → typecheck}/typecheck-serialization.ts +0 -0
@@ -1,401 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
- import type { Plugin } from "vite";
3
- import fs from "node:fs";
4
-
5
- // --- Mock factories ---
6
-
7
- const mockGeneratePwaIcons = vi.fn();
8
- vi.mock("../../src/utils/generate-pwa-icons.js", () => ({
9
- generatePwaIcons: mockGeneratePwaIcons,
10
- }));
11
-
12
- const mockGlob = vi.fn();
13
- vi.mock("glob", () => ({
14
- glob: mockGlob,
15
- }));
16
-
17
- // --- Dynamic import ---
18
-
19
- const { sdPwaPlugin } = await import("../../src/utils/vite-pwa-plugin");
20
-
21
- // --- Helpers ---
22
-
23
- function createPlugin(
24
- overrides?: Partial<Parameters<typeof sdPwaPlugin>[0]>,
25
- ): Plugin {
26
- return sdPwaPlugin({
27
- pkgDir: "/packages/test-app",
28
- pkgName: "test-app",
29
- ...overrides,
30
- }) as Plugin;
31
- }
32
-
33
- function initPlugin(plugin: Plugin): void {
34
- (plugin.configResolved as Function)({
35
- base: "/test-app/",
36
- build: { outDir: "/packages/test-app/dist" },
37
- });
38
- }
39
-
40
- function getWriteCall(filename: string): [string, string] | undefined {
41
- return vi.mocked(fs.writeFileSync).mock.calls.find((c) =>
42
- String(c[0]).endsWith(filename),
43
- ) as [string, string] | undefined;
44
- }
45
-
46
- // --- Tests ---
47
-
48
- beforeEach(() => {
49
- vi.clearAllMocks();
50
- mockGeneratePwaIcons.mockResolvedValue([]);
51
- mockGlob.mockResolvedValue([]);
52
- vi.spyOn(fs, "readFileSync").mockReturnValue(
53
- JSON.stringify({ version: "1.0.0" }),
54
- );
55
- vi.spyOn(fs, "writeFileSync").mockReturnValue(undefined);
56
- });
57
-
58
- afterEach(() => {
59
- vi.restoreAllMocks();
60
- });
61
-
62
- describe("sdPwaPlugin — manifest generation", () => {
63
- // Unit: pwa undefined uses same defaults as empty object
64
- it("uses defaults when pwa is undefined", async () => {
65
- const plugin = createPlugin({ pwa: undefined });
66
- initPlugin(plugin);
67
- await (plugin.closeBundle as Function)();
68
-
69
- const call = getWriteCall("manifest.webmanifest");
70
- expect(call).toBeDefined();
71
- const manifest = JSON.parse(call![1]) as Record<string, unknown>;
72
- expect(manifest["name"]).toBe("test-app");
73
- expect(manifest["scope"]).toBe(".");
74
- });
75
-
76
- // Unit: manifest written to correct outDir path
77
- it("writes manifest to resolvedOutDir", async () => {
78
- const plugin = createPlugin();
79
- initPlugin(plugin);
80
- await (plugin.closeBundle as Function)();
81
-
82
- const call = getWriteCall("manifest.webmanifest");
83
- const writtenPath = String(call![0]).replace(/\\/g, "/");
84
- expect(writtenPath).toContain("packages/test-app/dist");
85
- });
86
-
87
- // Unit: generated icons included in manifest
88
- it("includes generated icons in manifest when no custom icons", async () => {
89
- mockGeneratePwaIcons.mockResolvedValue([
90
- { src: "icons/icon-192x192.png", sizes: "192x192", type: "image/png" },
91
- ]);
92
-
93
- const plugin = createPlugin();
94
- initPlugin(plugin);
95
- await (plugin.closeBundle as Function)();
96
-
97
- expect(mockGeneratePwaIcons).toHaveBeenCalledWith("/packages/test-app");
98
- const manifest = JSON.parse(getWriteCall("manifest.webmanifest")![1]) as Record<
99
- string,
100
- unknown
101
- >;
102
- expect(manifest["icons"]).toEqual([
103
- { src: "icons/icon-192x192.png", sizes: "192x192", type: "image/png" },
104
- ]);
105
- });
106
-
107
- // Unit: custom icons skip auto-generation
108
- it("uses custom icons and skips generatePwaIcons", async () => {
109
- const icons = [{ src: "/custom.png", sizes: "512x512", type: "image/png" }];
110
- const plugin = createPlugin({
111
- pwa: { manifest: { icons } },
112
- });
113
- initPlugin(plugin);
114
- await (plugin.closeBundle as Function)();
115
-
116
- const manifest = JSON.parse(getWriteCall("manifest.webmanifest")![1]) as Record<
117
- string,
118
- unknown
119
- >;
120
- expect(manifest["icons"]).toEqual(icons);
121
- });
122
-
123
- // Unit: no icons when generatePwaIcons returns empty
124
- it("omits icons field when generatePwaIcons returns empty array", async () => {
125
- mockGeneratePwaIcons.mockResolvedValue([]);
126
-
127
- const plugin = createPlugin();
128
- initPlugin(plugin);
129
- await (plugin.closeBundle as Function)();
130
-
131
- const manifest = JSON.parse(getWriteCall("manifest.webmanifest")![1]) as Record<
132
- string,
133
- unknown
134
- >;
135
- expect(manifest["icons"]).toBeUndefined();
136
- });
137
-
138
- // Unit: all manifest fields can be overridden
139
- it("overrides all customizable manifest fields", async () => {
140
- const plugin = createPlugin({
141
- pwa: {
142
- manifest: {
143
- name: "A",
144
- short_name: "B",
145
- display: "fullscreen",
146
- theme_color: "#111",
147
- background_color: "#222",
148
- },
149
- },
150
- });
151
- initPlugin(plugin);
152
- await (plugin.closeBundle as Function)();
153
-
154
- const manifest = JSON.parse(getWriteCall("manifest.webmanifest")![1]) as Record<
155
- string,
156
- unknown
157
- >;
158
- expect(manifest["name"]).toBe("A");
159
- expect(manifest["short_name"]).toBe("B");
160
- expect(manifest["display"]).toBe("fullscreen");
161
- expect(manifest["theme_color"]).toBe("#111");
162
- expect(manifest["background_color"]).toBe("#222");
163
- });
164
- });
165
-
166
- describe("sdPwaPlugin — precache file collection", () => {
167
- // Unit: default globPatterns
168
- it("uses default globPatterns when workbox is not configured", async () => {
169
- mockGlob.mockResolvedValue(["index.html", "assets/main.js"]);
170
-
171
- const plugin = createPlugin();
172
- initPlugin(plugin);
173
- await (plugin.closeBundle as Function)();
174
-
175
- expect(mockGlob).toHaveBeenCalledWith(
176
- "**/*.{js,css,html,ico,png,svg,woff2}",
177
- { cwd: "/packages/test-app/dist" },
178
- );
179
- });
180
-
181
- // Unit: custom globPatterns
182
- it("uses custom globPatterns from workbox config", async () => {
183
- mockGlob.mockResolvedValue(["index.html"]);
184
-
185
- const plugin = createPlugin({
186
- pwa: { workbox: { globPatterns: ["**/*.{js,html}"] } },
187
- });
188
- initPlugin(plugin);
189
- await (plugin.closeBundle as Function)();
190
-
191
- expect(mockGlob).toHaveBeenCalledWith("**/*.{js,html}", expect.anything());
192
- });
193
-
194
- // Unit: excludes sw.js and manifest.webmanifest from precache
195
- it("excludes sw.js and manifest.webmanifest from precache list", async () => {
196
- mockGlob.mockResolvedValue([
197
- "index.html",
198
- "main.js",
199
- "sw.js",
200
- "manifest.webmanifest",
201
- ]);
202
-
203
- const plugin = createPlugin();
204
- initPlugin(plugin);
205
- await (plugin.closeBundle as Function)();
206
-
207
- const swCall = getWriteCall("sw.js");
208
- const swContent = swCall![1];
209
- expect(swContent).toContain('"index.html"');
210
- expect(swContent).toContain('"main.js"');
211
- expect(swContent).not.toMatch(/"sw\.js"/);
212
- expect(swContent).not.toMatch(/"manifest\.webmanifest"/);
213
- });
214
-
215
- // Unit: deduplicates file list
216
- it("deduplicates files matched by multiple patterns", async () => {
217
- mockGlob
218
- .mockResolvedValueOnce(["index.html", "main.js"])
219
- .mockResolvedValueOnce(["index.html", "styles.css"]);
220
-
221
- const plugin = createPlugin({
222
- pwa: {
223
- workbox: { globPatterns: ["**/*.{html,js}", "**/*.{html,css}"] },
224
- },
225
- });
226
- initPlugin(plugin);
227
- await (plugin.closeBundle as Function)();
228
-
229
- const swContent = getWriteCall("sw.js")![1];
230
- // Extract only the PRECACHE_URLS array declaration
231
- const precacheMatch = swContent.match(
232
- /const PRECACHE_URLS = \[([\s\S]*?)\];/,
233
- );
234
- expect(precacheMatch).toBeDefined();
235
- const precacheBlock = precacheMatch![1];
236
- const htmlMatches = precacheBlock.match(/"index\.html"/g);
237
- expect(htmlMatches).toHaveLength(1);
238
- });
239
- });
240
-
241
- describe("sdPwaPlugin — sw.js generation", () => {
242
- // Unit: version injected from package.json
243
- it("injects APP_VERSION from package.json", async () => {
244
- vi.mocked(fs.readFileSync).mockReturnValue(
245
- JSON.stringify({ version: "14.0.16" }),
246
- );
247
-
248
- const plugin = createPlugin();
249
- initPlugin(plugin);
250
- await (plugin.closeBundle as Function)();
251
-
252
- const swContent = getWriteCall("sw.js")![1];
253
- expect(swContent).toContain('const APP_VERSION = "14.0.16"');
254
- expect(swContent).toContain('"precache-" + APP_VERSION');
255
- });
256
-
257
- // Unit: base URL injected
258
- it("injects BASE_URL from resolved config", async () => {
259
- const plugin = createPlugin();
260
- initPlugin(plugin);
261
- await (plugin.closeBundle as Function)();
262
-
263
- const swContent = getWriteCall("sw.js")![1];
264
- expect(swContent).toContain('const BASE_URL = "/test-app/"');
265
- });
266
-
267
- // Unit: sw.js contains all 4 event listeners
268
- it("contains install, activate, fetch, and message event listeners", async () => {
269
- const plugin = createPlugin();
270
- initPlugin(plugin);
271
- await (plugin.closeBundle as Function)();
272
-
273
- const swContent = getWriteCall("sw.js")![1];
274
- expect(swContent).toContain('self.addEventListener("install"');
275
- expect(swContent).toContain('self.addEventListener("activate"');
276
- expect(swContent).toContain('self.addEventListener("fetch"');
277
- expect(swContent).toContain('self.addEventListener("message"');
278
- });
279
-
280
- // Unit: install handler uses cache.addAll
281
- it("install handler caches all precache URLs", async () => {
282
- const plugin = createPlugin();
283
- initPlugin(plugin);
284
- await (plugin.closeBundle as Function)();
285
-
286
- const swContent = getWriteCall("sw.js")![1];
287
- expect(swContent).toContain("caches.open(CACHE_NAME)");
288
- expect(swContent).toContain("cache.addAll(PRECACHE_URLS)");
289
- });
290
-
291
- // Unit: activate handler deletes old caches with precache- prefix only
292
- it("activate handler filters by precache- prefix", async () => {
293
- const plugin = createPlugin();
294
- initPlugin(plugin);
295
- await (plugin.closeBundle as Function)();
296
-
297
- const swContent = getWriteCall("sw.js")![1];
298
- expect(swContent).toContain('name.startsWith("precache-")');
299
- expect(swContent).toContain("name !== CACHE_NAME");
300
- expect(swContent).toContain("self.clients.claim()");
301
- });
302
-
303
- // Unit: fetch handler has navigate fallback to index.html with network fallback
304
- it("fetch handler falls back to index.html for navigate requests with network fallback", async () => {
305
- const plugin = createPlugin();
306
- initPlugin(plugin);
307
- await (plugin.closeBundle as Function)();
308
-
309
- const swContent = getWriteCall("sw.js")![1];
310
- expect(swContent).toContain('event.request.mode === "navigate"');
311
- expect(swContent).toContain('BASE_URL + "index.html"');
312
- // Network fallback when index.html is not in cache (storage pressure)
313
- expect(swContent).toContain("resp || fetch(event.request)");
314
- });
315
-
316
- // Unit: message handler responds to SKIP_WAITING
317
- it("message handler calls self.skipWaiting on SKIP_WAITING", async () => {
318
- const plugin = createPlugin();
319
- initPlugin(plugin);
320
- await (plugin.closeBundle as Function)();
321
-
322
- const swContent = getWriteCall("sw.js")![1];
323
- expect(swContent).toContain('"SKIP_WAITING"');
324
- expect(swContent).toContain("self.skipWaiting()");
325
- });
326
-
327
- // Unit: backslash normalization in file paths
328
- it("normalizes backslashes in precache URLs", async () => {
329
- mockGlob.mockResolvedValue(["assets\\main.js"]);
330
-
331
- const plugin = createPlugin();
332
- initPlugin(plugin);
333
- await (plugin.closeBundle as Function)();
334
-
335
- const swContent = getWriteCall("sw.js")![1];
336
- expect(swContent).toContain('"assets/main.js"');
337
- expect(swContent).not.toContain("\\\\");
338
- });
339
- });
340
-
341
- describe("sdPwaPlugin — transformIndexHtml", () => {
342
- // Unit: manifest link tag
343
- it("injects manifest link tag", () => {
344
- const plugin = createPlugin();
345
- initPlugin(plugin);
346
- const tags = (plugin.transformIndexHtml as Function)() as Array<{
347
- tag: string;
348
- attrs?: Record<string, string>;
349
- injectTo?: string;
350
- }>;
351
-
352
- const linkTag = tags.find((t) => t.tag === "link");
353
- expect(linkTag).toBeDefined();
354
- expect(linkTag!.attrs!["rel"]).toBe("manifest");
355
- expect(linkTag!.attrs!["href"]).toBe("manifest.webmanifest");
356
- });
357
-
358
- // Unit: SW registration script tag
359
- it("injects SW registration script", () => {
360
- const plugin = createPlugin();
361
- initPlugin(plugin);
362
- const tags = (plugin.transformIndexHtml as Function)() as Array<{
363
- tag: string;
364
- children?: string;
365
- injectTo?: string;
366
- }>;
367
-
368
- const scriptTag = tags.find((t) => t.tag === "script");
369
- expect(scriptTag).toBeDefined();
370
- expect(scriptTag!.children).toContain("serviceWorker");
371
- expect(scriptTag!.children).toContain('register("sw.js")');
372
- });
373
-
374
- // Unit: registration script dispatches sd-pwa-update-ready event
375
- it("dispatches sd-pwa-update-ready CustomEvent", () => {
376
- const plugin = createPlugin();
377
- initPlugin(plugin);
378
- const tags = (plugin.transformIndexHtml as Function)() as Array<{
379
- tag: string;
380
- children?: string;
381
- }>;
382
-
383
- const scriptTag = tags.find((t) => t.tag === "script");
384
- expect(scriptTag!.children).toContain("sd-pwa-update-ready");
385
- expect(scriptTag!.children).toContain("SKIP_WAITING");
386
- });
387
-
388
- // Unit: registration script reloads on controllerchange
389
- it("reloads page on controllerchange", () => {
390
- const plugin = createPlugin();
391
- initPlugin(plugin);
392
- const tags = (plugin.transformIndexHtml as Function)() as Array<{
393
- tag: string;
394
- children?: string;
395
- }>;
396
-
397
- const scriptTag = tags.find((t) => t.tag === "script");
398
- expect(scriptTag!.children).toContain("controllerchange");
399
- expect(scriptTag!.children).toContain("location.reload");
400
- });
401
- });
@@ -1,218 +0,0 @@
1
- import { describe, it, expect, vi, afterEach } from "vitest";
2
-
3
- // --- Mock factories ---
4
-
5
- const mockWatcher = {
6
- onChange: vi.fn(),
7
- close: vi.fn().mockResolvedValue(undefined),
8
- };
9
-
10
- vi.mock("@simplysm/core-node", () => ({
11
- FsWatcher: {
12
- watch: vi.fn(() => Promise.resolve(mockWatcher)),
13
- },
14
- }));
15
-
16
- vi.mock("fs", () => ({
17
- default: {
18
- existsSync: vi.fn(() => true),
19
- realpathSync: vi.fn((p: string) => p.replace("/symlink/", "/real/")),
20
- },
21
- }));
22
-
23
- // --- Dynamic import after mocking ---
24
-
25
- const { sdScopeWatchPlugin } = await import(
26
- "../../src/utils/vite-scope-watch-plugin"
27
- );
28
- const { FsWatcher } = await import("@simplysm/core-node");
29
-
30
- afterEach(() => {
31
- vi.clearAllMocks();
32
- });
33
-
34
- describe("sdScopeWatchPlugin", () => {
35
- // Acceptance: Scenario "replaceDeps 패키지는 Vite pre-bundling에서 제외된다"
36
- it("adds replaceDeps packages to optimizeDeps.exclude", () => {
37
- const plugin = sdScopeWatchPlugin({
38
- pkgDir: "/packages/my-client",
39
- replaceDeps: [
40
- { packageName: "@scope/core", sourcePath: "/packages/core" },
41
- { packageName: "@scope/common", sourcePath: "/packages/common" },
42
- ],
43
- });
44
-
45
- const config = (plugin as any).config?.();
46
-
47
- expect(config?.optimizeDeps?.exclude).toContain("@scope/core");
48
- expect(config?.optimizeDeps?.exclude).toContain("@scope/common");
49
- expect(config?.optimizeDeps?.force).toBe(true);
50
- });
51
-
52
- // Acceptance: Scenario "라이브러리 재빌드로 의존성 변경"
53
- it("configureServer sets up FsWatcher on replaceDeps package root directories", async () => {
54
- const onScopeRebuild = vi.fn();
55
-
56
- const plugin = sdScopeWatchPlugin({
57
- pkgDir: "/packages/my-client",
58
- replaceDeps: [
59
- { packageName: "@scope/core", sourcePath: "/packages/core" },
60
- ],
61
- onScopeRebuild,
62
- });
63
-
64
- const mockServer = {
65
- watcher: { emit: vi.fn() },
66
- httpServer: { on: vi.fn() },
67
- };
68
-
69
- await (plugin as any).configureServer?.(mockServer);
70
-
71
- expect(FsWatcher.watch).toHaveBeenCalled();
72
- // 패키지 루트를 감시해야 한다 (dist/가 아닌)
73
- const watchedPaths = (FsWatcher.watch as ReturnType<typeof vi.fn>).mock.calls[0][0] as string[];
74
- const normalizedPaths = watchedPaths.map((p: string) => p.replace(/\\/g, "/"));
75
- expect(normalizedPaths.some((p: string) => p.endsWith("/@scope/core"))).toBe(true);
76
- expect(normalizedPaths.some((p: string) => p.endsWith("/@scope/core/dist"))).toBe(false);
77
- expect(mockWatcher.onChange).toHaveBeenCalledWith(
78
- expect.objectContaining({ delay: 300 }),
79
- expect.any(Function),
80
- );
81
- });
82
-
83
- // Acceptance: Scenario "SCSS 파일 변경 시 Vite change 이벤트 발생"
84
- it("onChange callback emits change events for scss file changes", async () => {
85
- const onScopeRebuild = vi.fn();
86
-
87
- const plugin = sdScopeWatchPlugin({
88
- pkgDir: "/packages/my-client",
89
- replaceDeps: [
90
- { packageName: "@scope/core", sourcePath: "/packages/core" },
91
- ],
92
- onScopeRebuild,
93
- });
94
-
95
- const mockServer = {
96
- watcher: { emit: vi.fn() },
97
- httpServer: { on: vi.fn() },
98
- };
99
-
100
- await (plugin as any).configureServer?.(mockServer);
101
-
102
- const onChangeCallback = mockWatcher.onChange.mock.calls[0][1];
103
-
104
- // SCSS 파일 변경 시뮬레이션
105
- onChangeCallback([
106
- { path: "/packages/core/scss/commons/_styles.scss" },
107
- ]);
108
-
109
- expect(mockServer.watcher.emit).toHaveBeenCalledWith(
110
- "change",
111
- "/packages/core/scss/commons/_styles.scss",
112
- );
113
- expect(onScopeRebuild).toHaveBeenCalled();
114
- });
115
-
116
- // Acceptance: Scenario "여러 라이브러리 파일 동시 변경 시 디바운스"
117
- it("onChange callback emits change events and calls onScopeRebuild", async () => {
118
- const onScopeRebuild = vi.fn();
119
-
120
- const plugin = sdScopeWatchPlugin({
121
- pkgDir: "/packages/my-client",
122
- replaceDeps: [
123
- { packageName: "@scope/core", sourcePath: "/packages/core" },
124
- ],
125
- onScopeRebuild,
126
- });
127
-
128
- const mockServer = {
129
- watcher: { emit: vi.fn() },
130
- httpServer: { on: vi.fn() },
131
- };
132
-
133
- await (plugin as any).configureServer?.(mockServer);
134
-
135
- // Get the onChange callback
136
- const onChangeCallback = mockWatcher.onChange.mock.calls[0][1];
137
-
138
- // Simulate file changes
139
- onChangeCallback([
140
- { path: "/packages/core/dist/index.js" },
141
- { path: "/packages/core/dist/utils.js" },
142
- ]);
143
-
144
- // Should emit change events to Vite watcher
145
- expect(mockServer.watcher.emit).toHaveBeenCalledWith(
146
- "change",
147
- "/packages/core/dist/index.js",
148
- );
149
- expect(mockServer.watcher.emit).toHaveBeenCalledWith(
150
- "change",
151
- "/packages/core/dist/utils.js",
152
- );
153
-
154
- // Should call onScopeRebuild
155
- expect(onScopeRebuild).toHaveBeenCalled();
156
- });
157
-
158
- // Acceptance: Scenario "replaceDeps가 없는 Client 패키지"
159
- it("does nothing when replaceDeps is empty", async () => {
160
- const plugin = sdScopeWatchPlugin({
161
- pkgDir: "/packages/my-client",
162
- replaceDeps: [],
163
- });
164
-
165
- const mockServer = {
166
- watcher: { emit: vi.fn() },
167
- httpServer: { on: vi.fn() },
168
- };
169
-
170
- await (plugin as any).configureServer?.(mockServer);
171
-
172
- expect(FsWatcher.watch).not.toHaveBeenCalled();
173
- });
174
-
175
- // Scenario: symlink 경로를 realpath로 해결하여 감시한다
176
- it("resolves symlink paths to realpath for watch directories", async () => {
177
- const plugin = sdScopeWatchPlugin({
178
- pkgDir: "/packages/my-client",
179
- replaceDeps: [
180
- { packageName: "@scope/core", sourcePath: "/packages/core" },
181
- ],
182
- });
183
-
184
- const mockServer = {
185
- watcher: { emit: vi.fn() },
186
- httpServer: { on: vi.fn() },
187
- };
188
-
189
- await (plugin as any).configureServer?.(mockServer);
190
-
191
- // fs.realpathSync가 패키지 루트 경로에 대해 호출되었는지 확인
192
- const fsModule = (await import("fs")).default;
193
- expect(fsModule.realpathSync).toHaveBeenCalled();
194
- });
195
-
196
- // Unit: server close cleans up watcher
197
- it("registers cleanup on server httpServer close", async () => {
198
- const plugin = sdScopeWatchPlugin({
199
- pkgDir: "/packages/my-client",
200
- replaceDeps: [
201
- { packageName: "@scope/core", sourcePath: "/packages/core" },
202
- ],
203
- });
204
-
205
- const closeHandler = vi.fn();
206
- const mockServer = {
207
- watcher: { emit: vi.fn() },
208
- httpServer: { on: vi.fn((event: string, cb: () => void) => { if (event === "close") closeHandler.mockImplementation(cb); }) },
209
- };
210
-
211
- await (plugin as any).configureServer?.(mockServer);
212
-
213
- // Trigger close
214
- closeHandler();
215
-
216
- expect(mockWatcher.close).toHaveBeenCalled();
217
- });
218
- });