@simplysm/sd-cli 14.0.41 → 14.0.43

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 (321) hide show
  1. package/dist/angular/angular-compiler.d.ts +0 -35
  2. package/dist/angular/angular-compiler.d.ts.map +1 -1
  3. package/dist/angular/angular-compiler.js +0 -374
  4. package/dist/angular/angular-compiler.js.map +1 -1
  5. package/dist/angular/hmr-candidates.d.ts +13 -0
  6. package/dist/angular/hmr-candidates.d.ts.map +1 -0
  7. package/dist/angular/hmr-candidates.js +230 -0
  8. package/dist/angular/hmr-candidates.js.map +1 -0
  9. package/dist/angular/ngtsc-build-core.d.ts +29 -34
  10. package/dist/angular/ngtsc-build-core.d.ts.map +1 -1
  11. package/dist/angular/ngtsc-build-core.js +90 -51
  12. package/dist/angular/ngtsc-build-core.js.map +1 -1
  13. package/dist/angular/vite-angular-plugin.d.ts +1 -1
  14. package/dist/angular/vite-angular-plugin.d.ts.map +1 -1
  15. package/dist/angular/vite-angular-plugin.js +63 -56
  16. package/dist/angular/vite-angular-plugin.js.map +1 -1
  17. package/dist/angular/web-worker-transformer.d.ts +9 -0
  18. package/dist/angular/web-worker-transformer.d.ts.map +1 -0
  19. package/dist/angular/web-worker-transformer.js +73 -0
  20. package/dist/angular/web-worker-transformer.js.map +1 -0
  21. package/dist/capacitor/capacitor.d.ts.map +1 -1
  22. package/dist/capacitor/capacitor.js +6 -4
  23. package/dist/capacitor/capacitor.js.map +1 -1
  24. package/dist/commands/check.d.ts +1 -1
  25. package/dist/commands/check.d.ts.map +1 -1
  26. package/dist/commands/check.js +15 -65
  27. package/dist/commands/check.js.map +1 -1
  28. package/dist/commands/publish/deployment-phase.d.ts.map +1 -1
  29. package/dist/commands/publish/deployment-phase.js +13 -5
  30. package/dist/commands/publish/deployment-phase.js.map +1 -1
  31. package/dist/commands/publish/npm-publisher.js +1 -1
  32. package/dist/commands/publish/npm-publisher.js.map +1 -1
  33. package/dist/commands/publish/publish-command.js +1 -1
  34. package/dist/commands/publish/publish-command.js.map +1 -1
  35. package/dist/commands/publish/version-upgrade.js +1 -1
  36. package/dist/commands/publish/version-upgrade.js.map +1 -1
  37. package/dist/commands/replace-deps.d.ts.map +1 -1
  38. package/dist/commands/replace-deps.js +2 -1
  39. package/dist/commands/replace-deps.js.map +1 -1
  40. package/dist/deps/replace-deps/collect-deps.d.ts.map +1 -1
  41. package/dist/deps/replace-deps/collect-deps.js +5 -2
  42. package/dist/deps/replace-deps/collect-deps.js.map +1 -1
  43. package/dist/deps/replace-deps/replace-deps.d.ts +21 -3
  44. package/dist/deps/replace-deps/replace-deps.d.ts.map +1 -1
  45. package/dist/deps/replace-deps/replace-deps.js +107 -62
  46. package/dist/deps/replace-deps/replace-deps.js.map +1 -1
  47. package/dist/electron/electron.js +7 -7
  48. package/dist/electron/electron.js.map +1 -1
  49. package/dist/engines/BaseEngine.d.ts.map +1 -1
  50. package/dist/engines/BaseEngine.js +2 -5
  51. package/dist/engines/BaseEngine.js.map +1 -1
  52. package/dist/engines/EsbuildClientEngine.d.ts.map +1 -1
  53. package/dist/engines/EsbuildClientEngine.js +16 -9
  54. package/dist/engines/EsbuildClientEngine.js.map +1 -1
  55. package/dist/engines/NgtscEngine.d.ts +4 -4
  56. package/dist/engines/NgtscEngine.d.ts.map +1 -1
  57. package/dist/engines/NgtscEngine.js +5 -5
  58. package/dist/engines/NgtscEngine.js.map +1 -1
  59. package/dist/engines/TscEngine.d.ts.map +1 -1
  60. package/dist/engines/TscEngine.js +0 -2
  61. package/dist/engines/TscEngine.js.map +1 -1
  62. package/dist/engines/types.d.ts +2 -0
  63. package/dist/engines/types.d.ts.map +1 -1
  64. package/dist/esbuild/esbuild-angular-compiler-plugin.d.ts +36 -0
  65. package/dist/esbuild/esbuild-angular-compiler-plugin.d.ts.map +1 -0
  66. package/dist/esbuild/esbuild-angular-compiler-plugin.js +464 -0
  67. package/dist/esbuild/esbuild-angular-compiler-plugin.js.map +1 -0
  68. package/dist/esbuild/esbuild-client-config.d.ts +8 -2
  69. package/dist/esbuild/esbuild-client-config.d.ts.map +1 -1
  70. package/dist/esbuild/esbuild-client-config.js +48 -33
  71. package/dist/esbuild/esbuild-client-config.js.map +1 -1
  72. package/dist/esbuild/esbuild-tsc-plugin.d.ts +4 -1
  73. package/dist/esbuild/esbuild-tsc-plugin.d.ts.map +1 -1
  74. package/dist/esbuild/esbuild-tsc-plugin.js +27 -23
  75. package/dist/esbuild/esbuild-tsc-plugin.js.map +1 -1
  76. package/dist/esbuild/file-reference-tracker.d.ts +24 -0
  77. package/dist/esbuild/file-reference-tracker.d.ts.map +1 -0
  78. package/dist/esbuild/file-reference-tracker.js +57 -0
  79. package/dist/esbuild/file-reference-tracker.js.map +1 -0
  80. package/dist/esbuild/lmdb-cache-store.d.ts +18 -0
  81. package/dist/esbuild/lmdb-cache-store.d.ts.map +1 -0
  82. package/dist/esbuild/lmdb-cache-store.js +41 -0
  83. package/dist/esbuild/lmdb-cache-store.js.map +1 -0
  84. package/dist/esbuild/load-result-cache.d.ts +17 -0
  85. package/dist/esbuild/load-result-cache.d.ts.map +1 -0
  86. package/dist/esbuild/load-result-cache.js +61 -0
  87. package/dist/esbuild/load-result-cache.js.map +1 -0
  88. package/dist/index.d.ts +3 -0
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +2 -0
  91. package/dist/index.js.map +1 -1
  92. package/dist/lint/lint-core.js +7 -7
  93. package/dist/lint/lint-core.js.map +1 -1
  94. package/dist/orchestrators/BaseOrchestrator.js +2 -2
  95. package/dist/orchestrators/BaseOrchestrator.js.map +1 -1
  96. package/dist/orchestrators/BuildOrchestrator.d.ts.map +1 -1
  97. package/dist/orchestrators/BuildOrchestrator.js +5 -19
  98. package/dist/orchestrators/BuildOrchestrator.js.map +1 -1
  99. package/dist/orchestrators/DevOrchestrator.js +5 -5
  100. package/dist/orchestrators/DevOrchestrator.js.map +1 -1
  101. package/dist/orchestrators/WatchOrchestrator.js +6 -6
  102. package/dist/orchestrators/WatchOrchestrator.js.map +1 -1
  103. package/dist/runtime/ResultCollector.d.ts +1 -0
  104. package/dist/runtime/ResultCollector.d.ts.map +1 -1
  105. package/dist/runtime/ResultCollector.js.map +1 -1
  106. package/dist/runtime/engine-watch-events.d.ts.map +1 -1
  107. package/dist/runtime/engine-watch-events.js +3 -0
  108. package/dist/runtime/engine-watch-events.js.map +1 -1
  109. package/dist/runtime/rebuild-manager.js +1 -1
  110. package/dist/runtime/rebuild-manager.js.map +1 -1
  111. package/dist/runtime/worker-utils.js +1 -1
  112. package/dist/runtime/worker-utils.js.map +1 -1
  113. package/dist/sd-cli-entry.d.ts.map +1 -1
  114. package/dist/sd-cli-entry.js +4 -3
  115. package/dist/sd-cli-entry.js.map +1 -1
  116. package/dist/sd-cli.js +3 -3
  117. package/dist/sd-cli.js.map +1 -1
  118. package/dist/ts-compiler/SdTsCompiler.d.ts +39 -0
  119. package/dist/ts-compiler/SdTsCompiler.d.ts.map +1 -0
  120. package/dist/ts-compiler/SdTsCompiler.js +593 -0
  121. package/dist/ts-compiler/SdTsCompiler.js.map +1 -0
  122. package/dist/ts-compiler/sd-ts-compiler-options.d.ts +40 -0
  123. package/dist/ts-compiler/sd-ts-compiler-options.d.ts.map +1 -0
  124. package/dist/ts-compiler/sd-ts-compiler-options.js +2 -0
  125. package/dist/ts-compiler/sd-ts-compiler-options.js.map +1 -0
  126. package/dist/ts-compiler/sd-ts-compiler-result.d.ts +34 -0
  127. package/dist/ts-compiler/sd-ts-compiler-result.d.ts.map +1 -0
  128. package/dist/ts-compiler/sd-ts-compiler-result.js +2 -0
  129. package/dist/ts-compiler/sd-ts-compiler-result.js.map +1 -0
  130. package/dist/utils/copy-public.d.ts +6 -4
  131. package/dist/utils/copy-public.d.ts.map +1 -1
  132. package/dist/utils/copy-public.js +9 -7
  133. package/dist/utils/copy-public.js.map +1 -1
  134. package/dist/utils/diagnostic-utils.d.ts +2 -3
  135. package/dist/utils/diagnostic-utils.d.ts.map +1 -1
  136. package/dist/utils/diagnostic-utils.js +8 -9
  137. package/dist/utils/diagnostic-utils.js.map +1 -1
  138. package/dist/utils/output-utils.d.ts +8 -2
  139. package/dist/utils/output-utils.d.ts.map +1 -1
  140. package/dist/utils/output-utils.js +32 -8
  141. package/dist/utils/output-utils.js.map +1 -1
  142. package/dist/workers/client.worker.d.ts +1 -1
  143. package/dist/workers/client.worker.d.ts.map +1 -1
  144. package/dist/workers/client.worker.js +136 -110
  145. package/dist/workers/client.worker.js.map +1 -1
  146. package/dist/workers/library-build.worker.d.ts +0 -2
  147. package/dist/workers/library-build.worker.d.ts.map +1 -1
  148. package/dist/workers/library-build.worker.js +147 -70
  149. package/dist/workers/library-build.worker.js.map +1 -1
  150. package/dist/workers/server-build.worker.d.ts.map +1 -1
  151. package/dist/workers/server-build.worker.js +30 -57
  152. package/dist/workers/server-build.worker.js.map +1 -1
  153. package/dist/workers/server-esbuild-context.d.ts +7 -0
  154. package/dist/workers/server-esbuild-context.d.ts.map +1 -1
  155. package/dist/workers/server-esbuild-context.js +11 -2
  156. package/dist/workers/server-esbuild-context.js.map +1 -1
  157. package/package.json +7 -6
  158. package/src/angular/angular-compiler.ts +0 -502
  159. package/src/angular/hmr-candidates.ts +295 -0
  160. package/src/angular/ngtsc-build-core.ts +125 -92
  161. package/src/angular/vite-angular-plugin.ts +71 -65
  162. package/src/angular/web-worker-transformer.ts +117 -0
  163. package/src/capacitor/capacitor.ts +6 -4
  164. package/src/commands/check.ts +17 -76
  165. package/src/commands/publish/deployment-phase.ts +11 -7
  166. package/src/commands/publish/npm-publisher.ts +1 -1
  167. package/src/commands/publish/publish-command.ts +1 -1
  168. package/src/commands/publish/version-upgrade.ts +1 -1
  169. package/src/commands/replace-deps.ts +3 -1
  170. package/src/deps/replace-deps/collect-deps.ts +4 -2
  171. package/src/deps/replace-deps/replace-deps.ts +114 -66
  172. package/src/electron/electron.ts +7 -7
  173. package/src/engines/BaseEngine.ts +2 -6
  174. package/src/engines/EsbuildClientEngine.ts +16 -10
  175. package/src/engines/NgtscEngine.ts +7 -7
  176. package/src/engines/TscEngine.ts +0 -2
  177. package/src/engines/types.ts +2 -0
  178. package/src/esbuild/esbuild-angular-compiler-plugin.ts +647 -0
  179. package/src/esbuild/esbuild-client-config.ts +57 -41
  180. package/src/esbuild/esbuild-tsc-plugin.ts +33 -23
  181. package/src/esbuild/file-reference-tracker.ts +61 -0
  182. package/src/esbuild/lmdb-cache-store.ts +46 -0
  183. package/src/esbuild/load-result-cache.ts +85 -0
  184. package/src/index.ts +5 -0
  185. package/src/lint/lint-core.ts +7 -7
  186. package/src/orchestrators/BaseOrchestrator.ts +2 -2
  187. package/src/orchestrators/BuildOrchestrator.ts +5 -24
  188. package/src/orchestrators/DevOrchestrator.ts +5 -5
  189. package/src/orchestrators/WatchOrchestrator.ts +6 -6
  190. package/src/runtime/ResultCollector.ts +1 -0
  191. package/src/runtime/engine-watch-events.ts +3 -0
  192. package/src/runtime/rebuild-manager.ts +1 -1
  193. package/src/runtime/worker-utils.ts +1 -1
  194. package/src/sd-cli-entry.ts +5 -3
  195. package/src/sd-cli.ts +4 -4
  196. package/src/ts-compiler/SdTsCompiler.ts +815 -0
  197. package/src/ts-compiler/sd-ts-compiler-options.ts +46 -0
  198. package/src/ts-compiler/sd-ts-compiler-result.ts +34 -0
  199. package/src/utils/copy-public.ts +9 -6
  200. package/src/utils/diagnostic-utils.ts +8 -9
  201. package/src/utils/output-utils.ts +38 -8
  202. package/src/workers/client.worker.ts +160 -126
  203. package/src/workers/library-build.worker.ts +187 -75
  204. package/src/workers/server-build.worker.ts +31 -61
  205. package/src/workers/server-esbuild-context.ts +14 -2
  206. package/tests/angular/fixtures/packages/basic-app/dist/styles.css +3 -0
  207. package/tests/angular/fixtures/packages/basic-app/scss/styles.scss +5 -0
  208. package/tests/angular/vite-angular-plugin-sdtscompiler.verify.md +13 -0
  209. package/tests/angular/web-worker-transformer.spec.ts +154 -0
  210. package/tests/capacitor/capacitor-build.spec.ts +1 -1
  211. package/tests/capacitor/capacitor-icon.spec.ts +1 -1
  212. package/tests/capacitor/capacitor-init.spec.ts +1 -1
  213. package/tests/commands/check.spec.ts +90 -104
  214. package/tests/commands/publish.spec.ts +12 -4
  215. package/tests/commands/slice3-severity-cleanup.verify.md +12 -0
  216. package/tests/deps/replace-deps/collect-deps.acc.spec.ts +62 -0
  217. package/tests/deps/replace-deps/collect-deps.spec.ts +49 -0
  218. package/tests/deps/replace-deps/replace-deps-filter.spec.ts +103 -0
  219. package/tests/deps/replace-deps/replace-deps-setup.acc.spec.ts +156 -0
  220. package/tests/electron/electron.spec.ts +4 -1
  221. package/tests/engines/engine-adapter-isolation.spec.ts +5 -6
  222. package/tests/engines/engine-duplicate-output-removal.verify.md +10 -0
  223. package/tests/engines/esbuild-client-engine.acc.spec.ts +79 -0
  224. package/tests/engines/esbuild-client-engine.spec.ts +73 -3
  225. package/tests/esbuild/esbuild-angular-compiler-plugin-hmr.verify.md +23 -0
  226. package/tests/esbuild/esbuild-angular-compiler-plugin-onload.verify.md +21 -0
  227. package/tests/esbuild/esbuild-angular-compiler-plugin-onstart-extraction.verify.md +16 -0
  228. package/tests/esbuild/esbuild-angular-compiler-plugin-sdtscompiler.verify.md +15 -0
  229. package/tests/esbuild/esbuild-angular-compiler-plugin-stylesheet.verify.md +31 -0
  230. package/tests/esbuild/esbuild-angular-compiler-plugin-worker.verify.md +31 -0
  231. package/tests/esbuild/esbuild-angular-compiler-plugin.spec.ts +397 -0
  232. package/tests/esbuild/esbuild-angular-compiler-plugin.verify.md +21 -0
  233. package/tests/esbuild/esbuild-tsc-plugin-imports.verify.md +13 -0
  234. package/tests/esbuild/esbuild-tsc-plugin.acc.spec.ts +56 -111
  235. package/tests/esbuild/esbuild-tsc-plugin.spec.ts +116 -52
  236. package/tests/esbuild/file-reference-tracker.spec.ts +99 -0
  237. package/tests/esbuild/lmdb-cache-store.spec.ts +58 -0
  238. package/tests/esbuild/load-result-cache.acc.spec.ts +55 -0
  239. package/tests/esbuild/load-result-cache.spec.ts +133 -0
  240. package/tests/orchestrators/build-orchestrator.spec.ts +4 -3
  241. package/tests/orchestrators/dev-orchestrator.spec.ts +5 -5
  242. package/tests/orchestrators/slice1-stdout-to-consola.verify.md +10 -0
  243. package/tests/orchestrators/typecheck-orchestrator.spec.ts +1 -1
  244. package/tests/orchestrators/watch-orchestrator.spec.ts +7 -7
  245. package/tests/runtime/result-collector.spec.ts +64 -0
  246. package/tests/sd-cli-entry.spec.ts +3 -4
  247. package/tests/sd-cli-log-tag.verify.md +11 -0
  248. package/tests/ts-compiler/SdTsCompiler-affected-files.verify.md +8 -0
  249. package/tests/ts-compiler/SdTsCompiler-diagnostics.verify.md +12 -0
  250. package/tests/ts-compiler/SdTsCompiler-emit.verify.md +9 -0
  251. package/tests/ts-compiler/SdTsCompiler.acc.spec.ts +603 -0
  252. package/tests/ts-compiler/SdTsCompiler.spec.ts +265 -0
  253. package/tests/ts-compiler/SdTsCompiler.verify.md +41 -0
  254. package/tests/ts-compiler/fixtures/non-angular-pkg/.cache/typecheck-browser.tsbuildinfo +1 -0
  255. package/tests/ts-compiler/fixtures/non-angular-pkg/.cache/typecheck-node.tsbuildinfo +1 -0
  256. package/tests/ts-compiler/fixtures/non-angular-pkg/.cache/typecheck.tsbuildinfo +1 -0
  257. package/tests/ts-compiler/fixtures/non-angular-pkg/dist/index.d.ts +2 -0
  258. package/tests/ts-compiler/fixtures/non-angular-pkg/dist/index.d.ts.map +1 -0
  259. package/tests/ts-compiler/fixtures/non-angular-pkg/dist/index.js +4 -0
  260. package/tests/ts-compiler/fixtures/non-angular-pkg/dist/index.js.map +1 -0
  261. package/tests/ts-compiler/fixtures/non-angular-pkg/dist/util.d.ts +2 -0
  262. package/tests/ts-compiler/fixtures/non-angular-pkg/dist/util.d.ts.map +1 -0
  263. package/tests/ts-compiler/fixtures/non-angular-pkg/dist/util.js +4 -0
  264. package/tests/ts-compiler/fixtures/non-angular-pkg/dist/util.js.map +1 -0
  265. package/tests/ts-compiler/fixtures/non-angular-pkg/src/index.ts +3 -0
  266. package/tests/ts-compiler/fixtures/non-angular-pkg/src/util.ts +3 -0
  267. package/tests/ts-compiler/fixtures/non-angular-pkg/tests/sample.test-file.ts +3 -0
  268. package/tests/ts-compiler/fixtures/non-angular-pkg/tsconfig.json +12 -0
  269. package/tests/ts-compiler/scss-lint-integration.verify.md +14 -0
  270. package/tests/utils/angular-build.spec.ts +1 -1
  271. package/tests/utils/copy-public-outdir.verify.md +8 -0
  272. package/tests/utils/copy-public.acc.spec.ts +52 -0
  273. package/tests/utils/copy-public.spec.ts +56 -0
  274. package/tests/utils/diagnostic-utils.spec.ts +24 -15
  275. package/tests/utils/engine-watch-events.acc.spec.ts +59 -0
  276. package/tests/utils/engine-watch-events.spec.ts +58 -0
  277. package/tests/utils/esbuild-client-config-integration.verify.md +9 -0
  278. package/tests/utils/esbuild-client-config.acc.spec.ts +45 -61
  279. package/tests/utils/esbuild-client-config.spec.ts +70 -52
  280. package/tests/utils/ngtsc-build-core-write-emit.spec.ts +12 -12
  281. package/tests/utils/ngtsc-build-core.spec.ts +1 -44
  282. package/tests/utils/output-utils.spec.ts +133 -13
  283. package/tests/utils/replace-deps-watch.acc.spec.ts +7 -1
  284. package/tests/utils/replace-deps-watch.spec.ts +57 -1
  285. package/tests/utils/worker-utils.spec.ts +8 -2
  286. package/tests/workers/client-worker-initial-build-error.verify.md +2 -3
  287. package/tests/workers/client-worker-initial-build-warnings.verify.md +7 -0
  288. package/tests/workers/client-worker-refactor.verify.md +22 -0
  289. package/tests/workers/client-worker-ts-cache-invalidation.verify.md +12 -0
  290. package/tests/workers/client-worker.acc.spec.ts +6 -3
  291. package/tests/workers/library-build-lint.spec.ts +40 -45
  292. package/tests/workers/library-build-worker.spec.ts +294 -40
  293. package/tests/workers/server-build-lint.spec.ts +59 -45
  294. package/tests/workers/server-build-worker.spec.ts +63 -24
  295. package/tests/workers/server-esbuild-context.acc.spec.ts +2 -0
  296. package/tests/workers/server-esbuild-context.spec.ts +2 -0
  297. package/tests/workers/server-runtime-worker.spec.ts +1 -1
  298. package/tests/workers/shared-worker-lifecycle.acc.spec.ts +1 -1
  299. package/dist/angular/angular-build-pipeline.d.ts +0 -97
  300. package/dist/angular/angular-build-pipeline.d.ts.map +0 -1
  301. package/dist/angular/angular-build-pipeline.js +0 -285
  302. package/dist/angular/angular-build-pipeline.js.map +0 -1
  303. package/dist/utils/tsc-build.d.ts +0 -51
  304. package/dist/utils/tsc-build.d.ts.map +0 -1
  305. package/dist/utils/tsc-build.js +0 -156
  306. package/dist/utils/tsc-build.js.map +0 -1
  307. package/dist/workers/ngtsc-build.worker.d.ts +0 -23
  308. package/dist/workers/ngtsc-build.worker.d.ts.map +0 -1
  309. package/dist/workers/ngtsc-build.worker.js +0 -267
  310. package/dist/workers/ngtsc-build.worker.js.map +0 -1
  311. package/src/angular/angular-build-pipeline.ts +0 -406
  312. package/src/utils/tsc-build.ts +0 -226
  313. package/src/workers/ngtsc-build.worker.ts +0 -351
  314. package/tests/angular/angular-build-pipeline.spec.ts +0 -247
  315. package/tests/angular/angular-compiler-aot.acc.spec.ts +0 -68
  316. package/tests/angular/angular-compiler-aot.spec.ts +0 -80
  317. package/tests/utils/angular-compiler-emit.spec.ts +0 -666
  318. package/tests/utils/angular-compiler.spec.ts +0 -707
  319. package/tests/utils/tsc-build.spec.ts +0 -527
  320. package/tests/workers/ngtsc-build-lint.spec.ts +0 -141
  321. package/tests/workers/ngtsc-build-worker.spec.ts +0 -199
@@ -0,0 +1,464 @@
1
+ import path from "path";
2
+ import fs from "fs";
3
+ import os from "os";
4
+ import ts from "typescript";
5
+ import { consola } from "consola";
6
+ import { JavaScriptTransformer, Cache as AngularCache } from "@angular/build/private";
7
+ import { SdTsCompiler } from "../ts-compiler/SdTsCompiler.js";
8
+ import { FileReferenceTracker } from "./file-reference-tracker.js";
9
+ import { LmdbCacheStore } from "./lmdb-cache-store.js";
10
+ import { createCachedLoad } from "./load-result-cache.js";
11
+ import { collectHmrCandidates, HMR_MODIFIED_FILE_LIMIT } from "../angular/hmr-candidates.js";
12
+ import { createWorkerTransformer } from "../angular/web-worker-transformer.js";
13
+ const logger = consola.withTag("sd:cli:angular-plugin");
14
+ //#endregion
15
+ //#region compilerOptions 변환
16
+ export function createCompilerOptionsTransformer(options, preserveSymlinks) {
17
+ return (compilerOptions) => {
18
+ // target < ES2022이면 강제 ES2022
19
+ if (compilerOptions.target == null || compilerOptions.target < ts.ScriptTarget.ES2022) {
20
+ compilerOptions.target = ts.ScriptTarget.ES2022;
21
+ compilerOptions.useDefineForClassFields ??= false;
22
+ }
23
+ // module < ES2015이면 강제 ES2022
24
+ if (compilerOptions.module == null || compilerOptions.module < ts.ModuleKind.ES2015) {
25
+ compilerOptions.module = ts.ModuleKind.ES2022;
26
+ }
27
+ // compilationMode: partial → full
28
+ if (compilerOptions["compilationMode"] === "partial") {
29
+ compilerOptions["compilationMode"] = "full";
30
+ }
31
+ return {
32
+ ...compilerOptions,
33
+ noEmitOnError: false,
34
+ composite: false,
35
+ declaration: false,
36
+ declarationMap: false,
37
+ inlineSources: !!options.sourcemap,
38
+ inlineSourceMap: !!options.sourcemap,
39
+ sourceMap: undefined,
40
+ mapRoot: undefined,
41
+ sourceRoot: undefined,
42
+ preserveSymlinks,
43
+ incremental: options.persistentCachePath != null,
44
+ tsBuildInfoFile: options.persistentCachePath != null
45
+ ? path.join(options.persistentCachePath, ".tsbuildinfo")
46
+ : undefined,
47
+ _enableHmr: !!options.templateUpdates,
48
+ supportTestBed: !!options.includeTestMetadata,
49
+ supportJitMode: !!options.includeTestMetadata,
50
+ };
51
+ };
52
+ }
53
+ //#endregion
54
+ //#region diagnostics 변환
55
+ export function convertDiagnostic(diagnostic, cwd) {
56
+ const text = ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n");
57
+ let location = null;
58
+ if (diagnostic.file != null && diagnostic.start != null) {
59
+ const pos = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
60
+ const lineStart = diagnostic.file.getLineStarts()[pos.line];
61
+ const lineEnd = diagnostic.file.getLineStarts()[pos.line + 1] ?? diagnostic.file.text.length;
62
+ const lineText = diagnostic.file.text.slice(lineStart, lineEnd).replace(/\r?\n$/, "");
63
+ location = {
64
+ file: path.relative(cwd, diagnostic.file.fileName),
65
+ line: pos.line + 1,
66
+ column: pos.character,
67
+ lineText,
68
+ length: diagnostic.length ?? 0,
69
+ };
70
+ }
71
+ return { text, location };
72
+ }
73
+ export function convertSerializedDiagnosticToEsbuild(d, program, cwd) {
74
+ let location = null;
75
+ if (d.file != null && d.start != null) {
76
+ const sf = program.getSourceFile(d.file.fileName);
77
+ if (sf != null) {
78
+ const pos = sf.getLineAndCharacterOfPosition(d.start);
79
+ const lineStart = sf.getLineStarts()[pos.line];
80
+ const lineEnd = sf.getLineStarts()[pos.line + 1] ?? sf.text.length;
81
+ const lineText = sf.text.slice(lineStart, lineEnd).replace(/\r?\n$/, "");
82
+ location = {
83
+ file: path.relative(cwd, d.file.fileName),
84
+ line: pos.line + 1,
85
+ column: pos.character,
86
+ lineText,
87
+ length: d.length ?? 0,
88
+ };
89
+ }
90
+ }
91
+ return { text: d.messageText, location };
92
+ }
93
+ //#endregion
94
+ //#region bundleWebWorker
95
+ /**
96
+ * Worker 파일을 esbuild.buildSync()로 별도 ESM 번들로 빌드한다.
97
+ * TypeScript transformer 내에서 동기적으로 호출되므로 sync API를 사용한다.
98
+ */
99
+ export function bundleWebWorker(build, sourcemap, workerFile) {
100
+ try {
101
+ return build.esbuild.buildSync({
102
+ ...build.initialOptions,
103
+ platform: "browser",
104
+ write: false,
105
+ bundle: true,
106
+ metafile: true,
107
+ format: "esm",
108
+ entryNames: "worker-[hash]",
109
+ entryPoints: [workerFile],
110
+ sourcemap,
111
+ supported: undefined,
112
+ plugins: undefined,
113
+ });
114
+ }
115
+ catch (error) {
116
+ if (error != null &&
117
+ typeof error === "object" &&
118
+ "errors" in error &&
119
+ "warnings" in error) {
120
+ return error;
121
+ }
122
+ throw error;
123
+ }
124
+ }
125
+ //#endregion
126
+ //#region onLoad 헬퍼
127
+ const POTENTIAL_METADATA_REGEX = /@angular\/core|@Component|@Directive|@Injectable|@Pipe|@NgModule/;
128
+ export function requiresAngularCompiler(contents) {
129
+ return POTENTIAL_METADATA_REGEX.test(contents);
130
+ }
131
+ export function createMissingFileDiagnostic(request, original, root, angular) {
132
+ const relativeRequest = path.relative(root, request);
133
+ const notes = [];
134
+ if (angular) {
135
+ notes.push({
136
+ text: "Files containing Angular metadata ('@Component'/'@Directive'/etc.) must be part of the TypeScript compilation." +
137
+ " You can ensure the file is part of the TypeScript program via the 'files' or 'include' property.",
138
+ });
139
+ }
140
+ else {
141
+ notes.push({
142
+ text: "The file will be bundled and included in the output but will not be type-checked at build time." +
143
+ " To remove this message you can add the file to the TypeScript program via the 'files' or 'include' property.",
144
+ });
145
+ }
146
+ const relativeOriginal = path.relative(root, original);
147
+ if (relativeRequest !== relativeOriginal) {
148
+ notes.push({
149
+ text: `File is requested from a file replacement of '${relativeOriginal}'.`,
150
+ });
151
+ }
152
+ return {
153
+ text: `File '${relativeRequest}' not found in TypeScript compilation.`,
154
+ notes,
155
+ };
156
+ }
157
+ //#endregion
158
+ //#region Plugin 팩토리
159
+ export function createAngularCompilerPlugin(pluginOptions) {
160
+ return {
161
+ name: "sd-angular-compiler",
162
+ setup(build) {
163
+ const preserveSymlinks = build.initialOptions.preserveSymlinks;
164
+ const cwd = build.initialOptions.absWorkingDir ?? process.cwd();
165
+ // ── define 주입 ──
166
+ build.initialOptions.define ??= {};
167
+ build.initialOptions.define["ngI18nClosureMode"] ??= "false";
168
+ // ── LMDB 캐시 초기화 ──
169
+ let cacheStore;
170
+ if (pluginOptions.persistentCachePath != null) {
171
+ try {
172
+ cacheStore = new LmdbCacheStore(path.join(pluginOptions.persistentCachePath, "angular-compiler.db"));
173
+ }
174
+ catch (e) {
175
+ logger.warn("LMDB 캐시 초기화 실패:", e instanceof Error ? e.message : String(e));
176
+ }
177
+ }
178
+ // ── JavaScriptTransformer 초기화 ──
179
+ const maxWorkers = Math.max(Math.floor((os.cpus().length * 7) / 8), 1);
180
+ const javascriptTransformer = new JavaScriptTransformer({
181
+ sourcemap: !!pluginOptions.sourcemap,
182
+ thirdPartySourcemaps: pluginOptions.thirdPartySourcemaps,
183
+ advancedOptimizations: pluginOptions.advancedOptimizations,
184
+ jit: pluginOptions.includeTestMetadata === true,
185
+ }, maxWorkers, cacheStore != null ? new AngularCache(cacheStore, "jstransformer") : undefined);
186
+ // ── 내부 상태 ──
187
+ const typeScriptFileCache = pluginOptions.typeScriptFileCache ?? new Map();
188
+ const additionalResults = new Map();
189
+ const referencedFileTracker = new FileReferenceTracker();
190
+ let sdTsCompiler;
191
+ let lastResult;
192
+ let hasCompilationErrors = true;
193
+ // TS/JS onLoad에서 참조할 플래그 (onStart에서 compilerOptions 기반으로 결정)
194
+ let shouldTsIgnoreJs = true;
195
+ let useTypeScriptTranspilation = true;
196
+ async function hasSideEffects(filePath) {
197
+ if (!pluginOptions.advancedOptimizations) {
198
+ return undefined;
199
+ }
200
+ const { sideEffects } = await build.resolve(filePath, {
201
+ kind: "import-statement",
202
+ resolveDir: cwd,
203
+ });
204
+ return sideEffects;
205
+ }
206
+ // ── 서브함수: WebWorker 프로세서 생성 ──
207
+ function createWebWorkerProcessor(errors, warnings) {
208
+ return (workerFile, containingFile) => {
209
+ const fullWorkerPath = path.join(path.dirname(containingFile), workerFile);
210
+ const workerResult = bundleWebWorker(build, pluginOptions.sourcemap, fullWorkerPath);
211
+ warnings.push(...workerResult.warnings);
212
+ if (workerResult.errors.length > 0) {
213
+ errors.push(...workerResult.errors);
214
+ // 에러 파일 경로 추적 (rebuild 허용)
215
+ referencedFileTracker.add(containingFile, workerResult.errors
216
+ .map((e) => e.location?.file)
217
+ .filter((f) => f != null)
218
+ .map((f) => path.join(cwd, f)));
219
+ additionalResults.set(fullWorkerPath, { errors: workerResult.errors });
220
+ return workerFile;
221
+ }
222
+ additionalResults.set(fullWorkerPath, {
223
+ outputFiles: workerResult.outputFiles,
224
+ metafile: workerResult.metafile,
225
+ });
226
+ // metafile.inputs → FileReferenceTracker
227
+ if (workerResult.metafile != null) {
228
+ referencedFileTracker.add(containingFile, Object.keys(workerResult.metafile.inputs).map((input) => path.join(cwd, input)));
229
+ }
230
+ // worker-[HASH].js 파일 찾기
231
+ const workerCodeFile = workerResult.outputFiles?.find((file) => /^worker-[A-Z0-9]{8}\.[cm]?js$/.test(path.basename(file.path)));
232
+ if (workerCodeFile == null) {
233
+ errors.push({ text: `Web Worker bundled code file not found: ${fullWorkerPath}`, location: null });
234
+ return workerFile;
235
+ }
236
+ const outdir = build.initialOptions.outdir ?? "";
237
+ const workerCodePath = path.relative(outdir, workerCodeFile.path);
238
+ return workerCodePath.replaceAll("\\", "/");
239
+ };
240
+ }
241
+ // ── onStart ──
242
+ build.onStart(async () => {
243
+ const result = {};
244
+ const errors = [];
245
+ const warnings = [];
246
+ // ── stylesheetErrors 리셋 (stale 에러 방지) ──
247
+ if (pluginOptions.stylesheetErrors != null) {
248
+ pluginOptions.stylesheetErrors.length = 0;
249
+ }
250
+ try {
251
+ const sourceFileCache = pluginOptions.sourceFileCache;
252
+ const isIncremental = sdTsCompiler != null &&
253
+ sourceFileCache != null &&
254
+ sourceFileCache.modifiedFiles.size > 0;
255
+ // ── HMR: staleSourceFiles 캡처 (compileAsync 전에 수행) ──
256
+ let staleSourceFiles;
257
+ let expandedModifiedFiles;
258
+ if (isIncremental) {
259
+ const useHmr = pluginOptions.templateUpdates != null &&
260
+ sourceFileCache.modifiedFiles.size <= HMR_MODIFIED_FILE_LIMIT;
261
+ if (useHmr && lastResult != null) {
262
+ for (const modifiedFile of sourceFileCache.modifiedFiles) {
263
+ const sf = lastResult.program.getSourceFile(modifiedFile);
264
+ if (sf != null) {
265
+ staleSourceFiles ??= new Map();
266
+ staleSourceFiles.set(modifiedFile, sf);
267
+ }
268
+ }
269
+ }
270
+ // referencedFileTracker 확장
271
+ expandedModifiedFiles = referencedFileTracker.update(sourceFileCache.modifiedFiles);
272
+ // stale additionalResults 제거
273
+ for (const file of expandedModifiedFiles) {
274
+ additionalResults.delete(file);
275
+ }
276
+ }
277
+ // ── SdTsCompiler 인스턴스 생성 (첫 빌드 시) ──
278
+ if (sdTsCompiler == null) {
279
+ sdTsCompiler = new SdTsCompiler({
280
+ pkgDir: path.dirname(pluginOptions.tsconfig),
281
+ cwd,
282
+ output: { js: true, dts: false },
283
+ sourceFileCache: pluginOptions.sourceFileCache,
284
+ transformStylesheet: pluginOptions.transformStylesheet,
285
+ externalStylesheets: pluginOptions.externalStylesheets,
286
+ compilerOptionsTransformer: createCompilerOptionsTransformer(pluginOptions, preserveSymlinks),
287
+ });
288
+ }
289
+ // ── processWebWorker + workerTransformer ──
290
+ const processWebWorker = createWebWorkerProcessor(errors, warnings);
291
+ const workerTransformer = createWorkerTransformer(processWebWorker);
292
+ // ── compileAsync ──
293
+ const compileResult = await sdTsCompiler.compileAsync(isIncremental ? expandedModifiedFiles : undefined, { additionalTransformers: { before: [workerTransformer] } });
294
+ // ── emitResults → typeScriptFileCache ──
295
+ for (const { contents, sourceFileName } of compileResult.emitResults ?? []) {
296
+ typeScriptFileCache.set(path.normalize(sourceFileName), contents);
297
+ }
298
+ // ── onLoad 플래그 결정 (첫 빌드에서만) ──
299
+ if (lastResult == null) {
300
+ const co = compileResult.program.getCompilerOptions();
301
+ shouldTsIgnoreJs = !co.allowJs;
302
+ useTypeScriptTranspilation =
303
+ !co.isolatedModules || !!co.sourceMap || !!co.inlineSourceMap;
304
+ }
305
+ // ── diagnostics → esbuild errors/warnings ──
306
+ for (const d of compileResult.diagnostics) {
307
+ const msg = convertSerializedDiagnosticToEsbuild(d, compileResult.program, cwd);
308
+ if (d.category === ts.DiagnosticCategory.Error) {
309
+ errors.push(msg);
310
+ }
311
+ else if (d.category === ts.DiagnosticCategory.Warning) {
312
+ warnings.push(msg);
313
+ }
314
+ }
315
+ // ── stylesheetDependencies → FileReferenceTracker 브릿징 ──
316
+ if (pluginOptions.stylesheetDependencies != null) {
317
+ for (const [containingFile, deps] of pluginOptions.stylesheetDependencies) {
318
+ referencedFileTracker.add(containingFile, deps);
319
+ }
320
+ }
321
+ // ── stylesheetErrors → esbuild errors 변환 ──
322
+ if (pluginOptions.stylesheetErrors != null) {
323
+ for (const errText of pluginOptions.stylesheetErrors) {
324
+ errors.push({ text: errText, location: null });
325
+ }
326
+ }
327
+ // ── HMR templateUpdates 수집 (증분 빌드 시) ──
328
+ if (isIncremental &&
329
+ staleSourceFiles != null &&
330
+ compileResult.ngtscProgram != null &&
331
+ pluginOptions.templateUpdates != null) {
332
+ const hmrCandidates = collectHmrCandidates(sourceFileCache.modifiedFiles, compileResult.ngtscProgram, staleSourceFiles);
333
+ if (hmrCandidates.size > 0) {
334
+ const ngCompiler = compileResult.ngtscProgram.compiler;
335
+ for (const node of hmrCandidates) {
336
+ if (!ts.isClassDeclaration(node))
337
+ continue;
338
+ const componentFilename = node.getSourceFile().fileName;
339
+ let relativePath = path.relative(cwd, componentFilename);
340
+ if (relativePath.startsWith("..")) {
341
+ relativePath = componentFilename;
342
+ }
343
+ relativePath = relativePath.replaceAll("\\", "/");
344
+ const updateId = encodeURIComponent(`${relativePath}@${node.name?.text}`);
345
+ const updateText = ngCompiler
346
+ .emitHmrUpdateModule?.(node);
347
+ if (updateText == null) {
348
+ pluginOptions.templateUpdates.clear();
349
+ break;
350
+ }
351
+ pluginOptions.templateUpdates.set(updateId, updateText);
352
+ }
353
+ }
354
+ }
355
+ hasCompilationErrors = errors.length > 0;
356
+ lastResult = compileResult;
357
+ }
358
+ catch (error) {
359
+ hasCompilationErrors = true;
360
+ errors.push({
361
+ text: "Angular compilation failed.",
362
+ location: null,
363
+ notes: [
364
+ {
365
+ text: error instanceof Error ? (error.stack ?? error.message) : `${error}`,
366
+ location: null,
367
+ },
368
+ ],
369
+ });
370
+ }
371
+ if (errors.length > 0)
372
+ result.errors = errors;
373
+ if (warnings.length > 0)
374
+ result.warnings = warnings;
375
+ return result;
376
+ });
377
+ // ── TS onLoad ── (filter: .ts, .tsx, .mts, .cts, .js, .mjs, .cjs, .jsx)
378
+ build.onLoad({ filter: /\.[cm]?[jt]sx?$/ }, async (args) => {
379
+ const request = path.normalize(args.path);
380
+ const isJS = /\.[cm]?js$/.test(request);
381
+ // allowJs 미설정 시 JS 파일은 다음 핸들러에 위임
382
+ if (shouldTsIgnoreJs && isJS) {
383
+ return undefined;
384
+ }
385
+ let contents = typeScriptFileCache.get(request);
386
+ if (contents == null) {
387
+ // 컴파일 에러가 있으면 빈 contents 반환 (연쇄 에러 방지)
388
+ if (hasCompilationErrors) {
389
+ return { contents: "", loader: "js" };
390
+ }
391
+ // allowJs이고 JS 파일이면 다음 핸들러에 위임
392
+ if (!shouldTsIgnoreJs && isJS) {
393
+ return undefined;
394
+ }
395
+ // Angular 데코레이터 여부 검사
396
+ const directContents = await fs.promises.readFile(request, "utf-8");
397
+ if (!requiresAngularCompiler(directContents)) {
398
+ return {
399
+ warnings: [createMissingFileDiagnostic(request, args.path, cwd, false)],
400
+ contents: undefined,
401
+ loader: "ts",
402
+ resolveDir: path.dirname(request),
403
+ };
404
+ }
405
+ return {
406
+ errors: [createMissingFileDiagnostic(request, args.path, cwd, true)],
407
+ };
408
+ }
409
+ // string 타입이면 JavaScriptTransformer로 추가 변환
410
+ if (typeof contents === "string" && (useTypeScriptTranspilation || isJS)) {
411
+ const sideEffects = await hasSideEffects(request);
412
+ contents = await javascriptTransformer.transformData(request, contents, true, // skipLinker
413
+ sideEffects);
414
+ // Uint8Array로 재캐싱
415
+ typeScriptFileCache.set(request, contents);
416
+ }
417
+ // loader 결정
418
+ const loader = useTypeScriptTranspilation || isJS
419
+ ? "js"
420
+ : request.at(-1) === "x"
421
+ ? "tsx"
422
+ : "ts";
423
+ return {
424
+ contents,
425
+ loader,
426
+ resolveDir: path.dirname(request),
427
+ };
428
+ });
429
+ // ── JS onLoad ── (filter: .js, .mjs, .cjs)
430
+ build.onLoad({ filter: /\.[cm]?js$/ }, createCachedLoad(pluginOptions.loadResultCache, async (args) => {
431
+ const request = path.normalize(args.path);
432
+ const sideEffects = await hasSideEffects(request);
433
+ const contents = await javascriptTransformer.transformFile(request, false, // skipLinker
434
+ sideEffects);
435
+ return {
436
+ contents,
437
+ loader: "js",
438
+ resolveDir: path.dirname(request),
439
+ };
440
+ }));
441
+ // ── onEnd ──
442
+ build.onEnd((result) => {
443
+ for (const { outputFiles, metafile } of additionalResults.values()) {
444
+ if (outputFiles != null && outputFiles.length > 0) {
445
+ result.outputFiles?.push(...outputFiles);
446
+ }
447
+ if (result.metafile != null && metafile != null) {
448
+ Object.assign(result.metafile.inputs, metafile.inputs);
449
+ Object.assign(result.metafile.outputs, metafile.outputs);
450
+ }
451
+ }
452
+ });
453
+ // ── onDispose ──
454
+ build.onDispose(() => {
455
+ sdTsCompiler = undefined;
456
+ lastResult = undefined;
457
+ void javascriptTransformer.close();
458
+ void cacheStore?.close();
459
+ });
460
+ },
461
+ };
462
+ }
463
+ //#endregion
464
+ //# sourceMappingURL=esbuild-angular-compiler-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"esbuild-angular-compiler-plugin.js","sourceRoot":"","sources":["../../src/esbuild/esbuild-angular-compiler-plugin.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import esbuild from "esbuild";
2
- import { SourceFileCache } from "@angular/build/private";
2
+ import { AngularSourceFileCache } from "../angular/angular-compiler.js";
3
+ import { MemoryLoadResultCache } from "./load-result-cache.js";
3
4
  export interface CreateClientEsbuildOptions {
4
5
  /** 패키지 디렉토리 경로 */
5
6
  pkgDir: string;
@@ -28,9 +29,14 @@ export interface CreateClientEsbuildOptions {
28
29
  /** 레거시 모듈 지원 (코드 분할 비활성화 + import.meta 치환 + 잔여 import() 제거) */
29
30
  legacyModule?: boolean;
30
31
  }
32
+ export declare class ClientSourceFileCache extends AngularSourceFileCache {
33
+ readonly typeScriptFileCache: Map<string, string | Uint8Array<ArrayBufferLike>>;
34
+ readonly loadResultCache: MemoryLoadResultCache;
35
+ invalidate(files: Iterable<string>): void;
36
+ }
31
37
  export interface ClientEsbuildResult {
32
38
  context: esbuild.BuildContext;
33
- sourceFileCache: InstanceType<typeof SourceFileCache>;
39
+ sourceFileCache: ClientSourceFileCache;
34
40
  }
35
41
  export declare function createClientEsbuildContext(options: CreateClientEsbuildOptions): Promise<ClientEsbuildResult>;
36
42
  //# sourceMappingURL=esbuild-client-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"esbuild-client-config.d.ts","sourceRoot":"","sources":["../../src/esbuild/esbuild-client-config.ts"],"names":[],"mappings":"AAGA,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,EAEL,eAAe,EAGhB,MAAM,wBAAwB,CAAC;AAIhC,MAAM,WAAW,0BAA0B;IACzC,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY;IACZ,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;IACtB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,0CAA0C;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IAC3B,kDAAkD;IAClD,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,wBAAwB;IACxB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,2CAA2C;IAC3C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC;IAC9B,eAAe,EAAE,YAAY,CAAC,OAAO,eAAe,CAAC,CAAC;CACvD;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,mBAAmB,CAAC,CA2L9B"}
1
+ {"version":3,"file":"esbuild-client-config.d.ts","sourceRoot":"","sources":["../../src/esbuild/esbuild-client-config.ts"],"names":[],"mappings":"AAGA,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAMxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,MAAM,WAAW,0BAA0B;IACzC,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY;IACZ,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;IACtB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,0CAA0C;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IAC3B,kDAAkD;IAClD,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,wBAAwB;IACxB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,2CAA2C;IAC3C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,qBAAsB,SAAQ,sBAAsB;IAC/D,QAAQ,CAAC,mBAAmB,oDAA0C;IACtE,QAAQ,CAAC,eAAe,wBAA+B;IAE9C,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI;CAMnD;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC;IAC9B,eAAe,EAAE,qBAAqB,CAAC;CACxC;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,mBAAmB,CAAC,CA8L9B"}
@@ -3,9 +3,22 @@ import fs from "fs";
3
3
  import { createRequire } from "module";
4
4
  import esbuild from "esbuild";
5
5
  import browserslistToEsbuild from "browserslist-to-esbuild";
6
- import { createCompilerPlugin, SourceFileCache, } from "@angular/build/private";
6
+ import { AngularSourceFileCache } from "../angular/angular-compiler.js";
7
+ import { createClientTransformStylesheet } from "../angular/client-transform-stylesheet.js";
8
+ import { createAngularCompilerPlugin, } from "./esbuild-angular-compiler-plugin.js";
9
+ import { MemoryLoadResultCache } from "./load-result-cache.js";
7
10
  import { createScssPlugin } from "./esbuild-scss-plugin.js";
8
11
  import { createPostcssPlugin } from "./esbuild-postcss-plugin.js";
12
+ export class ClientSourceFileCache extends AngularSourceFileCache {
13
+ typeScriptFileCache = new Map();
14
+ loadResultCache = new MemoryLoadResultCache();
15
+ invalidate(files) {
16
+ for (const file of files) {
17
+ this.loadResultCache.invalidate(file);
18
+ }
19
+ super.invalidate(files);
20
+ }
21
+ }
9
22
  export async function createClientEsbuildContext(options) {
10
23
  const isDev = options.mode === "dev";
11
24
  // browserslist → esbuild target 변환
@@ -16,10 +29,34 @@ export async function createClientEsbuildContext(options) {
16
29
  : [options.browserslist];
17
30
  esbuildTarget = browserslistToEsbuild(queries);
18
31
  }
19
- // SourceFileCache 생성 (LMDB 디스크 캐시)
32
+ // ClientSourceFileCache 생성
33
+ const sourceFileCache = new ClientSourceFileCache();
34
+ // SCSS 스타일시트 변환용 공유 상태
35
+ const stylesheetDependencies = new Map();
36
+ const stylesheetErrors = [];
37
+ // PostCSS 플러그인 로딩 (튜플 → 인스턴스) — transformStylesheet와 createPostcssPlugin 양쪽에 사용
38
+ let loadedPostcssPlugins;
39
+ if (options.postcssPlugins != null && options.postcssPlugins.length > 0) {
40
+ const req = createRequire(path.join(options.pkgDir, "package.json"));
41
+ loadedPostcssPlugins = options.postcssPlugins.map(([name, pluginOpts]) => {
42
+ const pluginFn = req(name);
43
+ const fn = pluginFn.default ?? pluginFn;
44
+ return pluginOpts != null ? fn(pluginOpts) : fn;
45
+ });
46
+ }
47
+ // transformStylesheet 콜백 생성
20
48
  const cachePath = path.join(options.pkgDir, ".angular", "cache");
21
- const sourceFileCache = new SourceFileCache(cachePath);
22
- // CompilerPluginOptions
49
+ const transformStylesheet = createClientTransformStylesheet({
50
+ loadPaths: [
51
+ path.join(options.pkgDir, "node_modules"),
52
+ path.join(options.cwd, "node_modules"),
53
+ ],
54
+ postcssPlugins: loadedPostcssPlugins,
55
+ scssErrors: stylesheetErrors,
56
+ scssDependencies: stylesheetDependencies,
57
+ cacheDir: path.join(cachePath, "scss"),
58
+ });
59
+ // AngularCompilerPluginOptions
23
60
  const pluginOptions = {
24
61
  tsconfig: options.tsconfig ?? path.join(options.pkgDir, "tsconfig.json"),
25
62
  sourcemap: isDev,
@@ -27,38 +64,16 @@ export async function createClientEsbuildContext(options) {
27
64
  thirdPartySourcemaps: isDev,
28
65
  incremental: isDev,
29
66
  sourceFileCache,
67
+ typeScriptFileCache: sourceFileCache.typeScriptFileCache,
30
68
  loadResultCache: sourceFileCache.loadResultCache,
31
69
  templateUpdates: options.templateUpdates,
32
70
  includeTestMetadata: isDev,
71
+ persistentCachePath: cachePath,
72
+ transformStylesheet,
73
+ stylesheetDependencies,
74
+ stylesheetErrors,
33
75
  };
34
- // BundleStylesheetOptions
35
- const styleOptions = {
36
- workspaceRoot: options.cwd,
37
- optimization: !isDev,
38
- inlineFonts: false,
39
- sourcemap: isDev ? "linked" : false,
40
- outputNames: { bundles: "[name]", media: "media/[name]" },
41
- includePaths: [],
42
- target: esbuildTarget,
43
- cacheOptions: {
44
- enabled: true,
45
- path: cachePath,
46
- basePath: cachePath,
47
- },
48
- postcssConfiguration: undefined,
49
- inlineStyleLanguage: "scss",
50
- };
51
- const angularPlugin = createCompilerPlugin(pluginOptions, styleOptions);
52
- // PostCSS 플러그인 로딩 (튜플 → 인스턴스)
53
- let loadedPostcssPlugins;
54
- if (options.postcssPlugins != null && options.postcssPlugins.length > 0) {
55
- const req = createRequire(path.join(options.pkgDir, "package.json"));
56
- loadedPostcssPlugins = options.postcssPlugins.map(([name, pluginOpts]) => {
57
- const pluginFn = req(name);
58
- const fn = pluginFn.default ?? pluginFn;
59
- return pluginOpts != null ? fn(pluginOpts) : fn;
60
- });
61
- }
76
+ const angularPlugin = createAngularCompilerPlugin(pluginOptions);
62
77
  // SCSS side-effect import 처리 플러그인
63
78
  const scssPlugin = createScssPlugin({
64
79
  loadPaths: [
@@ -117,7 +132,7 @@ export async function createClientEsbuildContext(options) {
117
132
  metafile: true,
118
133
  write: true,
119
134
  sourcemap: isDev ? "linked" : false,
120
- logLevel: isDev ? "warning" : "silent",
135
+ logLevel: "silent",
121
136
  tsconfig: options.tsconfig ?? path.join(options.pkgDir, "tsconfig.json"),
122
137
  define,
123
138
  banner: hmrBanner != null ? { js: hmrBanner } : undefined,