@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
@@ -26,14 +26,24 @@ const mockRebuild = vi.fn();
26
26
  const mockDispose = vi.fn();
27
27
  let mockMetafileInputs: Record<string, unknown> = {};
28
28
 
29
- // tsc build mock
30
- const mockRunTscPackageBuild = vi.fn(() => ({
31
- success: true,
32
- errors: undefined as string[] | undefined,
29
+ // SdTsCompiler mock (js=false path)
30
+ const mockCompileAsync = vi.fn(() => Promise.resolve({
31
+ program: { getSourceFiles: () => [] },
32
+ builderProgram: {},
33
+ isForAngular: false,
34
+ affectedFiles: undefined,
33
35
  diagnostics: [] as unknown[],
34
36
  errorCount: 0,
35
37
  warningCount: 0,
38
+ errors: undefined as string[] | undefined,
39
+ emitResults: undefined,
40
+ lint: undefined,
41
+ scssErrors: [],
42
+ scssDependencies: new Map(),
36
43
  }));
44
+ const MockSdTsCompiler = vi.fn().mockImplementation(function () {
45
+ return { compileAsync: mockCompileAsync };
46
+ });
37
47
 
38
48
  const mockCpxSpawnSync = vi.fn().mockReturnValue({ stdout: "v20.11.0", stderr: "", exitCode: 0 });
39
49
 
@@ -76,6 +86,8 @@ vi.mock("esbuild", () => ({
76
86
  outputFiles: [{ path: "/workspace/packages/my-server/dist/main.js", text: "export {}" }],
77
87
  })),
78
88
  },
89
+ formatMessagesSync: (messages: Array<{ text: string }>, _opts: unknown) =>
90
+ messages.map((m) => m.text),
79
91
  }));
80
92
 
81
93
  vi.mock("fs", () => ({
@@ -112,8 +124,8 @@ vi.mock("../../src/esbuild/esbuild-config", async (importOriginal) => {
112
124
  };
113
125
  });
114
126
 
115
- vi.mock("../../src/utils/tsc-build", () => ({
116
- runTscPackageBuild: mockRunTscPackageBuild,
127
+ vi.mock("../../src/ts-compiler/SdTsCompiler", () => ({
128
+ SdTsCompiler: MockSdTsCompiler,
117
129
  }));
118
130
 
119
131
  // tsc plugin mock (build() js=true path uses createTscPlugin)
@@ -123,6 +135,7 @@ const mockTscPlugin = {
123
135
  getAffectedFiles: vi.fn(),
124
136
  getDiagnostics: vi.fn((): unknown[] => []),
125
137
  getErrors: vi.fn((): string[] | undefined => undefined),
138
+ getLintResult: vi.fn((): unknown => undefined),
126
139
  resetBuilderProgram: vi.fn(),
127
140
  };
128
141
 
@@ -183,12 +196,19 @@ describe("server-build.worker build()", () => {
183
196
  optionalPeerDeps: [],
184
197
  nativeModules: [],
185
198
  });
186
- mockRunTscPackageBuild.mockReturnValue({
187
- success: true,
188
- errors: undefined,
199
+ mockCompileAsync.mockResolvedValue({
200
+ program: { getSourceFiles: () => [] },
201
+ builderProgram: {},
202
+ isForAngular: false,
203
+ affectedFiles: undefined,
189
204
  diagnostics: [],
190
205
  errorCount: 0,
191
206
  warningCount: 0,
207
+ errors: undefined,
208
+ emitResults: undefined,
209
+ lint: undefined,
210
+ scssErrors: [],
211
+ scssDependencies: new Map(),
192
212
  });
193
213
 
194
214
  // Reset tsc plugin mock (used for js=true path)
@@ -196,6 +216,7 @@ describe("server-build.worker build()", () => {
196
216
  mockTscPlugin.getAffectedFiles.mockReset();
197
217
  mockTscPlugin.getDiagnostics.mockReset().mockReturnValue([]);
198
218
  mockTscPlugin.getErrors.mockReset().mockReturnValue(undefined);
219
+ mockTscPlugin.getLintResult.mockReset().mockReturnValue(undefined);
199
220
  mockTscPlugin.resetBuilderProgram.mockReset();
200
221
 
201
222
  // Reset lockfile content and cache
@@ -275,14 +296,21 @@ describe("server-build.worker build()", () => {
275
296
  );
276
297
  });
277
298
 
278
- // Acceptance: js=false uses runTscPackageBuild directly
279
- it("uses runTscPackageBuild directly when output.js=false", async () => {
280
- mockRunTscPackageBuild.mockReturnValueOnce({
281
- success: false,
282
- errors: ["TS2345: type error"],
299
+ // Acceptance: js=false uses SdTsCompiler directly
300
+ it("uses SdTsCompiler directly when output.js=false", async () => {
301
+ mockCompileAsync.mockResolvedValueOnce({
302
+ program: { getSourceFiles: () => [] },
303
+ builderProgram: {},
304
+ isForAngular: false,
305
+ affectedFiles: undefined,
283
306
  diagnostics: [{ code: 2345, category: 1 }] as any,
284
307
  errorCount: 1,
285
308
  warningCount: 0,
309
+ errors: ["TS2345: type error"],
310
+ emitResults: undefined,
311
+ lint: undefined,
312
+ scssErrors: [],
313
+ scssDependencies: new Map(),
286
314
  });
287
315
 
288
316
  const result = await workerFns["build"]({
@@ -525,12 +553,19 @@ describe("server-build.worker startWatch()", () => {
525
553
  vi.mocked(esbuild.context).mockClear();
526
554
  vi.mocked(FsWatcher.watch).mockClear();
527
555
  vi.mocked(watchPublicFiles).mockClear();
528
- mockRunTscPackageBuild.mockReturnValue({
529
- success: true,
530
- errors: undefined,
556
+ mockCompileAsync.mockResolvedValue({
557
+ program: { getSourceFiles: () => [] },
558
+ builderProgram: {},
559
+ isForAngular: false,
560
+ affectedFiles: undefined,
531
561
  diagnostics: [],
532
562
  errorCount: 0,
533
563
  warningCount: 0,
564
+ errors: undefined,
565
+ emitResults: undefined,
566
+ lint: undefined,
567
+ scssErrors: [],
568
+ scssDependencies: new Map(),
534
569
  });
535
570
 
536
571
  // Reset tsc plugin mock (used for watch mode rebuild)
@@ -651,7 +686,6 @@ describe("server-build.worker startWatch()", () => {
651
686
  ) => Promise<void>;
652
687
 
653
688
  mockRebuild.mockClear();
654
- mockRunTscPackageBuild.mockClear();
655
689
  mockSend.mockClear();
656
690
 
657
691
  const absPath = path.resolve("/workspace", "packages/my-server/src/main.ts").replace(/\\/g, "/");
@@ -659,8 +693,6 @@ describe("server-build.worker startWatch()", () => {
659
693
 
660
694
  // esbuild rebuild should have been called (tsc triggered by plugin inside)
661
695
  expect(mockRebuild).toHaveBeenCalled();
662
- // runTscPackageBuild should NOT be called directly for js=true
663
- expect(mockRunTscPackageBuild).not.toHaveBeenCalled();
664
696
  // Build event should be sent
665
697
  expect(mockSend).toHaveBeenCalledWith("build", expect.objectContaining({
666
698
  build: expect.objectContaining({ success: true }),
@@ -687,13 +719,20 @@ describe("server-build.worker stopWatch()", () => {
687
719
  resetGuard();
688
720
  mockDispose.mockClear();
689
721
  mockWatcherClose.mockClear();
690
- mockRunTscPackageBuild.mockReturnValue({
691
- success: true,
692
- errors: undefined,
722
+ mockCompileAsync.mockResolvedValue({
723
+ program: { getSourceFiles: () => [] },
724
+ builderProgram: {},
725
+ isForAngular: false,
726
+ affectedFiles: undefined,
693
727
  diagnostics: [],
694
728
  errorCount: 0,
695
729
  warningCount: 0,
696
- });
730
+ errors: undefined,
731
+ emitResults: undefined,
732
+ lint: undefined,
733
+ scssErrors: [],
734
+ scssDependencies: new Map(),
735
+ });
697
736
  mockReadFileSync.mockImplementation(() => JSON.stringify({ name: "x", version: "1.0.0", type: "module" }));
698
737
  });
699
738
 
@@ -20,6 +20,8 @@ vi.mock("esbuild", () => ({
20
20
  Promise.resolve({ rebuild: mockRebuild, dispose: mockDispose }),
21
21
  ),
22
22
  },
23
+ formatMessagesSync: (messages: Array<{ text: string }>, _opts: unknown) =>
24
+ messages.map((m) => m.text),
23
25
  }));
24
26
 
25
27
  vi.mock("../../src/esbuild/esbuild-config", async (importOriginal) => {
@@ -20,6 +20,8 @@ vi.mock("esbuild", () => ({
20
20
  Promise.resolve({ rebuild: mockRebuild, dispose: mockDispose }),
21
21
  ),
22
22
  },
23
+ formatMessagesSync: (messages: Array<{ text: string }>, _opts: unknown) =>
24
+ messages.map((m) => m.text),
23
25
  }));
24
26
 
25
27
  vi.mock("../../src/esbuild/esbuild-config", async (importOriginal) => {
@@ -137,7 +137,7 @@ describe("server-runtime.worker start", () => {
137
137
  afterEach(async () => {
138
138
  // Restore modified env vars
139
139
  for (const [key, value] of Object.entries(savedEnv)) {
140
- if (value === undefined) {
140
+ if (value == null) {
141
141
  delete process.env[key];
142
142
  } else {
143
143
  process.env[key] = value;
@@ -22,6 +22,6 @@ describe("setupWorkerLifecycle", () => {
22
22
  expect(() => guardStartWatch()).not.toThrow();
23
23
 
24
24
  // guardStartWatch: 두 번째 호출은 에러
25
- expect(() => guardStartWatch()).toThrow("startWatch can only be called once per Worker");
25
+ expect(() => guardStartWatch()).toThrow("Worker당 번만 호출할 있습니다: startWatch");
26
26
  });
27
27
  });
@@ -1,97 +0,0 @@
1
- import ts from "typescript";
2
- import { type AngularSourceFileCache } from "./angular-compiler.js";
3
- import { type SideEffectScssOptions } from "./ngtsc-build-core.js";
4
- export interface PipelineDiagnosticMessage {
5
- file?: string;
6
- line?: number;
7
- message: string;
8
- }
9
- export interface PipelineDiagnosticResult {
10
- errors: PipelineDiagnosticMessage[];
11
- warnings: PipelineDiagnosticMessage[];
12
- }
13
- export interface PipelineResult {
14
- affectedFiles: ReadonlySet<ts.SourceFile>;
15
- diagnostics: PipelineDiagnosticResult;
16
- scssErrors: string[];
17
- }
18
- export interface WriteEmitResultsOptions {
19
- /** 출력 대상 패키지 디렉토리 */
20
- pkgDir: string;
21
- /** emit 결과 필터 (src/ 하위만 등) */
22
- sourceFilter?: (fileName: string) => boolean;
23
- /** side-effect SCSS 옵션 */
24
- scss?: SideEffectScssOptions;
25
- }
26
- export interface AngularBuildPipelineOptions {
27
- /** Pipeline 모드. SCSS 콜백 동작을 결정한다. */
28
- mode: "client" | "library";
29
- /** 패키지 디렉토리 */
30
- pkgDir: string;
31
- /** workspace 루트 */
32
- cwd: string;
33
- /** 소스 파일 목록 */
34
- rootNames: string[];
35
- /** TypeScript 컴파일러 옵션 */
36
- compilerOptions: ts.CompilerOptions;
37
- /** Angular 컴파일러 옵션 */
38
- angularCompilerOptions?: Record<string, unknown>;
39
- sourceFileCache?: AngularSourceFileCache;
40
- externalStylesheets?: Map<string, string>;
41
- compilerOptionsTransformer?: (opts: ts.CompilerOptions) => ts.CompilerOptions;
42
- postcssPlugins?: unknown[];
43
- scssCacheDir?: string;
44
- }
45
- /**
46
- * Library용 transformStylesheet 콜백 팩토리.
47
- * AngularCompiler의 transformStylesheet 옵션에 주입된다.
48
- *
49
- * - 외부 .scss 파일: compileScssFile로 CSS 반환 + 의존성 기록
50
- * - 외부 비-SCSS 파일 (.css 등): null 반환 (readResource가 처리)
51
- * - 인라인 스타일: compileScssString으로 CSS 반환 + 의존성 기록
52
- * - 에러 시: scssErrors에 추가, SCSS error comment 반환
53
- */
54
- export declare function createLibraryTransformStylesheet(loadPaths: string[], scssErrors: string[], scssDependencies: Map<string, Set<string>>): (data: string, containingFile: string, stylesheetFile?: string) => Promise<string | null>;
55
- /**
56
- * emitAffectedFiles 결과를 output-path-rewriting 적용 후 파일로 쓴다.
57
- * scss 옵션이 제공되면 .js 파일 내 .scss side-effect import를 처리한다:
58
- * 1. import 경로를 .scss → .css로 변환
59
- * 2. 참조된 SCSS 파일을 CSS로 컴파일하여 dist에 출력
60
- */
61
- export declare function writeEmitResults(emitResults: Iterable<{
62
- filename: string;
63
- contents: string;
64
- sourceFileName?: string;
65
- }>, pkgDir: string, scss?: SideEffectScssOptions): void;
66
- export declare class AngularBuildPipeline {
67
- private readonly _options;
68
- private _compiler;
69
- private readonly _scssDependencies;
70
- private readonly _scssErrors;
71
- private readonly _emittedFilesBySource;
72
- private _latestEmitResults;
73
- private _lastDiagnostics;
74
- constructor(_options: AngularBuildPipelineOptions);
75
- initialize(): Promise<PipelineResult>;
76
- update(modifiedFiles: Iterable<string>): Promise<PipelineResult>;
77
- getEmittedFile(sourcePath: string): string | undefined;
78
- getEmittedFiles(): ReadonlyMap<string, string>;
79
- /** 직전 initialize()/update()에서 실제로 emit된 소스 파일 경로 목록을 반환한다. */
80
- getLatestEmittedSourcePaths(): string[];
81
- writeEmitResults(options?: WriteEmitResultsOptions): void;
82
- findAffectedByScss(scssPath: string): string[];
83
- getDiagnostics(): PipelineDiagnosticResult;
84
- getScssErrors(): readonly string[];
85
- collectRawDiagnostics(): ts.Diagnostic[];
86
- getTsProgram(): ts.Program;
87
- /**
88
- * 내부 SCSS 의존성 맵을 반환한다.
89
- * 호출자가 side-effect SCSS 의존성을 같은 맵에 기록하여
90
- * findAffectedByScss()에서 통합 역방향 탐색이 가능하게 한다.
91
- */
92
- getScssDependencies(): Map<string, Set<string>>;
93
- clearScssDependencies(): void;
94
- updateRootNames(rootNames: string[]): void;
95
- private _collectDiagnostics;
96
- }
97
- //# sourceMappingURL=angular-build-pipeline.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"angular-build-pipeline.d.ts","sourceRoot":"","sources":["../../src/angular/angular-build-pipeline.ts"],"names":[],"mappings":"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"}
@@ -1,285 +0,0 @@
1
- import path from "path";
2
- import fs from "fs";
3
- import ts from "typescript";
4
- import { pathx } from "@simplysm/core-node";
5
- import { consola } from "consola";
6
- import { AngularCompiler } from "./angular-compiler.js";
7
- import { trackDeps, formatScssError, } from "./ngtsc-build-core.js";
8
- import { createClientTransformStylesheet } from "./client-transform-stylesheet.js";
9
- import { isWorkspaceDiagnostic } from "../utils/diagnostic-utils.js";
10
- import { compileScssString, compileScssFile } from "./scss-compiler.js";
11
- import { createOutputPathRewriter, rewriteScssImports } from "../utils/output-path-rewriter.js";
12
- const logger = consola.withTag("sd:cli:build-pipeline");
13
- //#endregion
14
- //#region Library SCSS transform
15
- /**
16
- * Library용 transformStylesheet 콜백 팩토리.
17
- * AngularCompiler의 transformStylesheet 옵션에 주입된다.
18
- *
19
- * - 외부 .scss 파일: compileScssFile로 CSS 반환 + 의존성 기록
20
- * - 외부 비-SCSS 파일 (.css 등): null 반환 (readResource가 처리)
21
- * - 인라인 스타일: compileScssString으로 CSS 반환 + 의존성 기록
22
- * - 에러 시: scssErrors에 추가, SCSS error comment 반환
23
- */
24
- export function createLibraryTransformStylesheet(loadPaths, scssErrors, scssDependencies) {
25
- return (data, containingFile, stylesheetFile) => {
26
- try {
27
- if (stylesheetFile != null && stylesheetFile.endsWith(".scss")) {
28
- const result = compileScssFile(stylesheetFile, loadPaths);
29
- trackDeps(scssDependencies, containingFile, result.dependencies);
30
- return Promise.resolve(result.css);
31
- }
32
- if (stylesheetFile != null) {
33
- // .css 등 비-SCSS 파일 → null 반환 (readResource가 처리)
34
- return Promise.resolve(null);
35
- }
36
- // 인라인 스타일 — SCSS로 컴파일
37
- const result = compileScssString(data, containingFile, loadPaths);
38
- trackDeps(scssDependencies, containingFile, result.dependencies);
39
- return Promise.resolve(result.css);
40
- }
41
- catch (err) {
42
- scssErrors.push(formatScssError(err, containingFile));
43
- return Promise.resolve("/* SCSS compilation error */");
44
- }
45
- };
46
- }
47
- //#endregion
48
- //#region writeEmitResults
49
- /**
50
- * emitAffectedFiles 결과를 output-path-rewriting 적용 후 파일로 쓴다.
51
- * scss 옵션이 제공되면 .js 파일 내 .scss side-effect import를 처리한다:
52
- * 1. import 경로를 .scss → .css로 변환
53
- * 2. 참조된 SCSS 파일을 CSS로 컴파일하여 dist에 출력
54
- */
55
- export function writeEmitResults(emitResults, pkgDir, scss) {
56
- logger.debug("emit 결과 파일 쓰기 시작");
57
- const rewritePath = createOutputPathRewriter(pkgDir);
58
- for (const { filename, contents, sourceFileName } of emitResults) {
59
- const rewrite = rewritePath(filename, contents);
60
- if (rewrite == null)
61
- continue;
62
- let [newPath, newContent] = rewrite;
63
- // .js 파일 내 side-effect SCSS import 처리
64
- if (scss != null && newPath.endsWith(".js")) {
65
- const { text, scssImports } = rewriteScssImports(newContent);
66
- newContent = text;
67
- // 새 항목 등록 전에 이 소스 파일의 기존 레지스트리 항목 제거
68
- if (scss.registry != null && sourceFileName != null) {
69
- for (const [key, entry] of scss.registry) {
70
- if (entry.sourceFileName === sourceFileName) {
71
- scss.registry.delete(key);
72
- }
73
- }
74
- }
75
- if (scssImports.length > 0 && sourceFileName != null) {
76
- const sourceDir = path.dirname(sourceFileName);
77
- const outputDir = path.dirname(newPath);
78
- for (const scssImport of scssImports) {
79
- const scssAbsPath = path.resolve(sourceDir, scssImport);
80
- const cssFileName = scssImport.replace(/\.scss$/, ".css");
81
- const cssAbsPath = path.resolve(outputDir, cssFileName);
82
- // 레지스트리가 제공된 경우 등록 (scssAbsPath를 키로 사용하여 중복 방지)
83
- if (scss.registry != null) {
84
- scss.registry.set(scssAbsPath, { scssAbsPath, cssAbsPath, sourceFileName });
85
- }
86
- try {
87
- const result = compileScssFile(scssAbsPath, scss.loadPaths);
88
- fs.mkdirSync(path.dirname(cssAbsPath), { recursive: true });
89
- fs.writeFileSync(cssAbsPath, result.css, "utf-8");
90
- trackDeps(scss.scssDependencies, sourceFileName, result.dependencies);
91
- }
92
- catch (err) {
93
- scss.scssErrors.push(formatScssError(err, scssAbsPath));
94
- }
95
- }
96
- }
97
- }
98
- fs.mkdirSync(path.dirname(newPath), { recursive: true });
99
- fs.writeFileSync(newPath, newContent, "utf-8");
100
- }
101
- logger.debug("emit 결과 파일 쓰기 완료");
102
- }
103
- //#endregion
104
- export class AngularBuildPipeline {
105
- _options;
106
- _compiler;
107
- _scssDependencies = new Map();
108
- _scssErrors = [];
109
- _emittedFilesBySource = new Map();
110
- _latestEmitResults = [];
111
- _lastDiagnostics = { errors: [], warnings: [] };
112
- constructor(_options) {
113
- this._options = _options;
114
- }
115
- async initialize() {
116
- // 1. scssErrors 리셋 (in-place, 콜백 클로저 유지)
117
- this._scssErrors.length = 0;
118
- // 2. SCSS 콜백 + AngularCompiler 생성 (최초 1회)
119
- if (this._compiler == null) {
120
- const loadPaths = [
121
- path.join(this._options.pkgDir, "scss"),
122
- path.join(this._options.cwd, "node_modules"),
123
- ];
124
- const transformStylesheet = this._options.mode === "client"
125
- ? createClientTransformStylesheet({
126
- loadPaths,
127
- postcssPlugins: this._options.postcssPlugins,
128
- scssErrors: this._scssErrors,
129
- scssDependencies: this._scssDependencies,
130
- cacheDir: this._options.scssCacheDir,
131
- })
132
- : createLibraryTransformStylesheet(loadPaths, this._scssErrors, this._scssDependencies);
133
- this._compiler = new AngularCompiler({
134
- rootNames: this._options.rootNames,
135
- compilerOptions: this._options.compilerOptions,
136
- angularCompilerOptions: this._options.angularCompilerOptions,
137
- sourceFileCache: this._options.sourceFileCache,
138
- transformStylesheet,
139
- externalStylesheets: this._options.externalStylesheets,
140
- compilerOptionsTransformer: this._options.compilerOptionsTransformer,
141
- });
142
- }
143
- // 3. 초기화
144
- logger.debug("Pipeline initialize 시작");
145
- const initResult = await this._compiler.initialize();
146
- // 4. emit 결과 수집
147
- this._emittedFilesBySource.clear();
148
- this._latestEmitResults = [];
149
- for (const result of this._compiler.emitAffectedFiles()) {
150
- const normalizedSource = pathx.posix(result.sourceFileName);
151
- this._emittedFilesBySource.set(normalizedSource, result.contents);
152
- this._latestEmitResults.push(result);
153
- }
154
- logger.debug(`Pipeline emit 완료: ${this._latestEmitResults.length}개 파일`);
155
- // 5. 진단 수집
156
- this._lastDiagnostics = this._collectDiagnostics();
157
- const pipelineResult = {
158
- affectedFiles: initResult.affectedFiles,
159
- diagnostics: this._lastDiagnostics,
160
- scssErrors: [...this._scssErrors],
161
- };
162
- logger.debug(`Pipeline initialize 완료 (errors: ${this._lastDiagnostics.errors.length})`);
163
- return pipelineResult;
164
- }
165
- async update(modifiedFiles) {
166
- if (this._compiler == null) {
167
- throw new Error("initialize()를 먼저 호출해야 합니다");
168
- }
169
- // scssErrors 리셋
170
- this._scssErrors.length = 0;
171
- // compiler.update() — 내부적으로 sourceFileCache 무효화 + 재초기화
172
- const updateResult = await this._compiler.update(modifiedFiles);
173
- // emit 재수집 (기존 Map은 클리어하지 않음 — 추가/갱신만)
174
- this._latestEmitResults = [];
175
- for (const result of this._compiler.emitAffectedFiles()) {
176
- const normalizedSource = pathx.posix(result.sourceFileName);
177
- this._emittedFilesBySource.set(normalizedSource, result.contents);
178
- this._latestEmitResults.push(result);
179
- }
180
- // 진단 재수집
181
- this._lastDiagnostics = this._collectDiagnostics();
182
- return {
183
- affectedFiles: updateResult.affectedFiles,
184
- diagnostics: this._lastDiagnostics,
185
- scssErrors: [...this._scssErrors],
186
- };
187
- }
188
- getEmittedFile(sourcePath) {
189
- const normalized = pathx.posix(sourcePath);
190
- return this._emittedFilesBySource.get(normalized);
191
- }
192
- getEmittedFiles() {
193
- return this._emittedFilesBySource;
194
- }
195
- /** 직전 initialize()/update()에서 실제로 emit된 소스 파일 경로 목록을 반환한다. */
196
- getLatestEmittedSourcePaths() {
197
- return this._latestEmitResults.map((r) => pathx.posix(r.sourceFileName));
198
- }
199
- writeEmitResults(options) {
200
- const pkgDir = options?.pkgDir ?? this._options.pkgDir;
201
- const filteredResults = options?.sourceFilter != null
202
- ? this._latestEmitResults.filter((r) => options.sourceFilter(r.sourceFileName))
203
- : this._latestEmitResults;
204
- writeEmitResults(filteredResults, pkgDir, options?.scss);
205
- }
206
- findAffectedByScss(scssPath) {
207
- const normalizedPath = pathx.posix(scssPath);
208
- const affected = [];
209
- for (const [ownerFile, deps] of this._scssDependencies) {
210
- if (deps.has(normalizedPath)) {
211
- affected.push(ownerFile);
212
- }
213
- }
214
- return affected;
215
- }
216
- getDiagnostics() {
217
- return this._lastDiagnostics;
218
- }
219
- getScssErrors() {
220
- return this._scssErrors;
221
- }
222
- collectRawDiagnostics() {
223
- if (this._compiler == null) {
224
- throw new Error("initialize()를 먼저 호출해야 합니다");
225
- }
226
- return [...this._compiler.collectDiagnostics()].filter((d) => isWorkspaceDiagnostic(d, this._options.cwd));
227
- }
228
- getTsProgram() {
229
- if (this._compiler == null) {
230
- throw new Error("initialize()를 먼저 호출해야 합니다");
231
- }
232
- return this._compiler.getTsProgram();
233
- }
234
- /**
235
- * 내부 SCSS 의존성 맵을 반환한다.
236
- * 호출자가 side-effect SCSS 의존성을 같은 맵에 기록하여
237
- * findAffectedByScss()에서 통합 역방향 탐색이 가능하게 한다.
238
- */
239
- getScssDependencies() {
240
- return this._scssDependencies;
241
- }
242
- clearScssDependencies() {
243
- this._scssDependencies.clear();
244
- }
245
- updateRootNames(rootNames) {
246
- this._options.rootNames = rootNames;
247
- this._compiler?.updateRootNames(rootNames);
248
- }
249
- _collectDiagnostics() {
250
- if (this._compiler == null) {
251
- return { errors: [], warnings: [] };
252
- }
253
- const errors = [];
254
- const warnings = [];
255
- try {
256
- for (const diagnostic of this._compiler.collectDiagnostics()) {
257
- if (!isWorkspaceDiagnostic(diagnostic, this._options.cwd))
258
- continue;
259
- const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n");
260
- const formatted = { message };
261
- if (diagnostic.file != null) {
262
- formatted.file = diagnostic.file.fileName;
263
- if (diagnostic.start != null) {
264
- const pos = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
265
- formatted.line = pos.line + 1;
266
- }
267
- }
268
- if (diagnostic.category === ts.DiagnosticCategory.Error) {
269
- errors.push(formatted);
270
- }
271
- else if (diagnostic.category === ts.DiagnosticCategory.Warning) {
272
- warnings.push(formatted);
273
- }
274
- }
275
- }
276
- catch {
277
- // TypeScript 5.9 + NgtscProgram: getSemanticDiagnostics 내부에서
278
- // referencedFiles 인덱스 불일치로 크래시할 수 있음.
279
- // 수집된 진단 결과까지만 반환한다.
280
- logger.warn("진단 수집 중 TypeScript 내부 에러 발생 — 부분 진단 결과 반환");
281
- }
282
- return { errors, warnings };
283
- }
284
- }
285
- //# sourceMappingURL=angular-build-pipeline.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"angular-build-pipeline.js","sourceRoot":"","sources":["../../src/angular/angular-build-pipeline.ts"],"names":[],"mappings":"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"}