@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
@@ -8,20 +8,42 @@ import type { ReplaceDepEntry } from "./replace-deps-resolve";
8
8
  import { resolveAllReplaceDepEntries } from "./replace-deps-resolve";
9
9
 
10
10
  /**
11
- * 복사제외할 이름 목록
11
+ * npm publish files 필드와 무관하게 항상 포함되는 파일 패턴 (대소문자 무시)
12
12
  */
13
- const EXCLUDED_NAMES = new Set(["node_modules", "package.json", ".cache", "tests"]);
13
+ export const NPM_DEFAULT_FILE_PATTERN = /^(readme|license|licence|changelog|history)/i;
14
14
 
15
15
  /**
16
- * replaceDeps 복사용 필터 함수
17
- * node_modules, package.json, .cache, tests제외한다.
18
- *
19
- * @param itemPath - 복사할 항목의 절대 경로
20
- * @returns 복사 대상이면 true, 제외 대상이면 false
16
+ * 소스 패키지의 package.json에서 files 필드를 읽어 반환한다.
17
+ * files 필드가 없으면 undefined반환한다.
18
+ */
19
+ export async function loadFilesField(sourcePath: string): Promise<string[] | undefined> {
20
+ const pkgJsonPath = pathx.posix(path.join(sourcePath, "package.json"));
21
+ const pkgJson = JSON.parse(await fs.promises.readFile(pkgJsonPath, "utf-8"));
22
+ return pkgJson.files as string[] | undefined;
23
+ }
24
+
25
+ /**
26
+ * files 필드 기반 화이트리스트 복사 필터를 생성한다.
27
+ * 소스 루트 기준 상대경로의 첫 번째 세그먼트로 판단한다.
28
+ * - files에 포함 → 허용
29
+ * - npm 기본 파일 패턴 매칭 → 허용
30
+ * - package.json → 제외
31
+ * - 그 외 → 제외
21
32
  */
22
- function replaceDepsCopyFilter(itemPath: string): boolean {
23
- const basename = path.basename(itemPath);
24
- return !EXCLUDED_NAMES.has(basename);
33
+ export function createCopyFilter(
34
+ sourcePath: string,
35
+ allowedNames: Set<string>,
36
+ ): (itemPath: string) => boolean {
37
+ return (itemPath: string) => {
38
+ const relativePath = path.relative(sourcePath, itemPath);
39
+ const firstSegment = relativePath.split(path.sep)[0];
40
+
41
+ if (firstSegment === "package.json") return false;
42
+ if (allowedNames.has(firstSegment)) return true;
43
+ if (NPM_DEFAULT_FILE_PATTERN.test(firstSegment)) return true;
44
+
45
+ return false;
46
+ };
25
47
  }
26
48
 
27
49
  /**
@@ -37,7 +59,7 @@ export interface WatchReplaceDepResult {
37
59
  *
38
60
  * 1. pnpm-workspace.yaml 파싱 → 워크스페이스 패키지 경로
39
61
  * 2. [루트, ...워크스페이스 패키지] node_modules에서 매칭 패키지 탐색
40
- * 3. 기존 symlink/디렉토리 제거 소스 경로 복사 (node_modules, package.json, .cache, tests 제외)
62
+ * 3. 소스 package.json의 files 필드 + npm 기본 파일만 대상 경로에 복사 (package.json 제외)
41
63
  *
42
64
  * @param projectRoot - 프로젝트 루트 경로
43
65
  * @param replaceDeps - sd.config.ts의 replaceDeps 설정
@@ -52,22 +74,31 @@ export async function setupReplaceDeps(
52
74
  logger.start("replace-deps 설정 중...");
53
75
 
54
76
  const entries = await resolveAllReplaceDepEntries(projectRoot, replaceDeps, logger);
77
+ const copiedEntries: ReplaceDepEntry[] = [];
55
78
 
56
- for (const { targetName, resolvedSourcePath, actualTargetPath } of entries) {
79
+ for (const entry of entries) {
57
80
  try {
58
- // 소스 파일을 actualTargetPath에 덮어쓰기 복사 (기존 디렉토리 유지, symlink 보존)
59
- await fsx.copy(resolvedSourcePath, actualTargetPath, replaceDepsCopyFilter);
81
+ // 소스 패키지의 files 필드를 읽어 화이트리스트 구성
82
+ const files = await loadFilesField(entry.resolvedSourcePath);
83
+ if (files == null) {
84
+ logger.warn(`[${entry.targetName}] package.json에 files 필드가 없어 건너뜀`);
85
+ continue;
86
+ }
87
+
88
+ const filter = createCopyFilter(entry.resolvedSourcePath, new Set(files));
89
+ await fsx.copy(entry.resolvedSourcePath, entry.actualTargetPath, filter);
60
90
 
91
+ copiedEntries.push(entry);
61
92
  setupCount += 1;
62
93
  } catch (err) {
63
- logger.error(`[${targetName}] 복사 실패: ${err instanceof Error ? err.message : err}`);
94
+ logger.error(`[${entry.targetName}] 복사 실패: ${err instanceof Error ? err.message : err}`);
64
95
  }
65
96
  }
66
97
 
67
98
  logger.success(`replace-deps 설정 완료 (${setupCount}개 의존성 교체)`);
68
99
 
69
100
  // 교체된 패키지의 postinstall 스크립트 실행
70
- for (const { targetName, resolvedSourcePath, actualTargetPath } of entries) {
101
+ for (const { targetName, resolvedSourcePath, actualTargetPath } of copiedEntries) {
71
102
  const sourcePkgJsonPath = pathx.posix(path.join(resolvedSourcePath, "package.json"));
72
103
  try {
73
104
  const pkgJson = JSON.parse(await fs.promises.readFile(sourcePkgJsonPath, "utf-8"));
@@ -91,8 +122,8 @@ export async function setupReplaceDeps(
91
122
  *
92
123
  * 1. pnpm-workspace.yaml 파싱 → 워크스페이스 패키지 경로
93
124
  * 2. [루트, ...워크스페이스 패키지] node_modules에서 매칭 패키지 탐색
94
- * 3. FsWatcher로 소스 디렉토리 감시 (300ms 딜레이)
95
- * 4. 변경사항을 대상 경로에 복사 (node_modules, package.json, .cache, tests 제외)
125
+ * 3. FsWatcher로 files 항목 경로만 감시 (300ms 딜레이)
126
+ * 4. 변경사항을 대상 경로에 복사
96
127
  *
97
128
  * @param projectRoot - 프로젝트 루트 경로
98
129
  * @param replaceDeps - sd.config.ts의 replaceDeps 설정
@@ -118,66 +149,83 @@ export async function watchReplaceDeps(
118
149
  if (watchedSources.has(entry.resolvedSourcePath)) continue;
119
150
  watchedSources.add(entry.resolvedSourcePath);
120
151
 
121
- const excludedPaths = [...EXCLUDED_NAMES].map((name) =>
122
- pathx.posix(path.join(entry.resolvedSourcePath, name)),
123
- );
124
-
125
- const watcher = await FsWatcher.watch([entry.resolvedSourcePath], {
126
- followSymlinks: false,
127
- ignored: [...EXCLUDED_NAMES].map((name) => `**/${name}`),
128
- });
129
- watcher.onChange({ delay: 300 }, async (changeInfos) => {
130
- for (const { path: changedPath } of changeInfos) {
131
- // 제외 항목 필터: basename 매칭 또는 제외 디렉토리 내 경로
132
- if (
133
- EXCLUDED_NAMES.has(path.basename(changedPath)) ||
134
- excludedPaths.some((ep) => pathx.isChildPath(changedPath, ep))
135
- ) {
136
- continue;
152
+ try {
153
+ // 소스 패키지의 files 필드를 읽어 감시 대상 경로 구성
154
+ const files = await loadFilesField(entry.resolvedSourcePath);
155
+ if (files == null) {
156
+ logger.warn(`[${entry.targetName}] package.json에 files 필드가 없어 감시 건너뜀`);
157
+ continue;
158
+ }
159
+
160
+ // files 항목 경로 + npm 기본 파일 경로
161
+ const watchPaths = files.map((f) =>
162
+ pathx.posix(path.join(entry.resolvedSourcePath, f)),
163
+ );
164
+
165
+ // 소스 루트에서 npm 기본 파일 패턴에 매칭되는 파일 추가
166
+ try {
167
+ const rootEntries = await fs.promises.readdir(entry.resolvedSourcePath);
168
+ for (const name of rootEntries) {
169
+ if (NPM_DEFAULT_FILE_PATTERN.test(name)) {
170
+ watchPaths.push(pathx.posix(path.join(entry.resolvedSourcePath, name)));
171
+ }
137
172
  }
173
+ } catch {
174
+ // readdir 실패 시 npm 기본 파일 감시 생략
175
+ }
138
176
 
139
- // 소스 경로를 사용하는 모든 항목에 대해 복사
140
- for (const e of entries) {
141
- if (e.resolvedSourcePath !== entry.resolvedSourcePath) continue;
177
+ const watcher = await FsWatcher.watch(watchPaths, {
178
+ followSymlinks: false,
179
+ });
180
+ watcher.onChange({ delay: 300 }, async (changeInfos) => {
181
+ for (const { path: changedPath } of changeInfos) {
182
+ // 이 소스 경로를 사용하는 모든 항목에 대해 복사
183
+ for (const e of entries) {
184
+ if (e.resolvedSourcePath !== entry.resolvedSourcePath) continue;
142
185
 
143
- // 소스로부터의 상대 경로 계산
144
- const relativePath = pathx.posix(path.relative(e.resolvedSourcePath, changedPath));
145
- const destPath = pathx.posix(path.join(e.actualTargetPath, relativePath));
186
+ // 소스로부터의 상대 경로 계산
187
+ const relativePath = pathx.posix(path.relative(e.resolvedSourcePath, changedPath));
188
+ const destPath = pathx.posix(path.join(e.actualTargetPath, relativePath));
146
189
 
147
- try {
148
- // 소스 존재 여부 확인
149
- let sourceExists = false;
150
190
  try {
151
- await fs.promises.access(changedPath);
152
- sourceExists = true;
153
- } catch {
154
- // 소스가 삭제됨
155
- }
191
+ // 소스 존재 여부 확인
192
+ let sourceExists = false;
193
+ try {
194
+ await fs.promises.access(changedPath);
195
+ sourceExists = true;
196
+ } catch {
197
+ // 소스가 삭제됨
198
+ }
156
199
 
157
- if (sourceExists) {
158
- // 소스가 디렉토리인지 파일인지 확인
159
- const stat = await fs.promises.stat(changedPath);
160
- if (stat.isDirectory()) {
161
- await fsx.mkdir(destPath);
200
+ if (sourceExists) {
201
+ // 소스가 디렉토리인지 파일인지 확인
202
+ const stat = await fs.promises.stat(changedPath);
203
+ if (stat.isDirectory()) {
204
+ await fsx.mkdir(destPath);
205
+ } else {
206
+ await fsx.mkdir(pathx.posix(path.dirname(destPath)));
207
+ await fsx.copy(changedPath, destPath);
208
+ }
162
209
  } else {
163
- await fsx.mkdir(pathx.posix(path.dirname(destPath)));
164
- await fsx.copy(changedPath, destPath, replaceDepsCopyFilter);
210
+ // 소스가 삭제됨 → 대상도 삭제
211
+ await fsx.rm(destPath);
165
212
  }
166
- } else {
167
- // 소스가 삭제됨 → 대상도 삭제
168
- await fsx.rm(destPath);
213
+ } catch (err) {
214
+ logger.error(
215
+ `[${e.targetName}] 복사 실패 (${relativePath}): ${err instanceof Error ? err.message : err}`,
216
+ );
169
217
  }
170
- } catch (err) {
171
- logger.error(
172
- `[${e.targetName}] 복사 실패 (${relativePath}): ${err instanceof Error ? err.message : err}`,
173
- );
174
218
  }
175
219
  }
176
- }
177
- options?.onChanged?.();
178
- });
220
+ options?.onChanged?.();
221
+ });
179
222
 
180
- watchers.push(watcher);
223
+ watchers.push(watcher);
224
+ } catch (err) {
225
+ logger.error(
226
+ `[${entry.targetName}] 감시 설정 실패: ${err instanceof Error ? err.message : err}`,
227
+ );
228
+ }
181
229
  }
182
230
 
183
231
  logger.success("replace-deps 워치 준비 완료");
@@ -60,7 +60,7 @@ export class Electron {
60
60
  //#region Public Methods
61
61
 
62
62
  async initialize(): Promise<void> {
63
- Electron._logger.debug("initialize 시작");
63
+ Electron._logger.start("initialize 중...");
64
64
 
65
65
  Electron._logger.debug("package.json 설정 시작");
66
66
  await this._setupNpmConf();
@@ -83,11 +83,11 @@ export class Electron {
83
83
  await this._exec("pnpm", ["exec", "electron-rebuild"], this._srcPath);
84
84
  Electron._logger.debug("electron-rebuild 완료");
85
85
  }
86
- Electron._logger.debug("initialize 완료");
86
+ Electron._logger.success("initialize 완료");
87
87
  }
88
88
 
89
89
  async run(url: string): Promise<void> {
90
- Electron._logger.debug(`run 시작 (url: ${url})`);
90
+ Electron._logger.start(`run 중... (url: ${url})`);
91
91
 
92
92
  await this.initialize();
93
93
  await this._copyPublicAssets();
@@ -126,7 +126,7 @@ export class Electron {
126
126
  setup: (build) => {
127
127
  build.onEnd(async (result) => {
128
128
  if (result.errors.length > 0) {
129
- Electron._logger.warn("번들링 실패. Electron을 재시작하지 않습니다.");
129
+ Electron._logger.error("번들링 실패. Electron을 재시작하지 않습니다.");
130
130
  return;
131
131
  }
132
132
 
@@ -181,11 +181,11 @@ export class Electron {
181
181
  process.once("SIGINT", signalHandler);
182
182
  process.once("SIGTERM", signalHandler);
183
183
  });
184
- Electron._logger.debug("run 완료");
184
+ Electron._logger.success("run 완료");
185
185
  }
186
186
 
187
187
  async build(outPath: string): Promise<void> {
188
- Electron._logger.debug("build 시작");
188
+ Electron._logger.start("build 중...");
189
189
 
190
190
  await this.initialize();
191
191
 
@@ -205,7 +205,7 @@ export class Electron {
205
205
  await this._copyBuildOutput(outPath);
206
206
  Electron._logger.debug("빌드 산출물 복사 완료");
207
207
 
208
- Electron._logger.debug("build 완료");
208
+ Electron._logger.success("build 완료");
209
209
  }
210
210
 
211
211
  //#endregion
@@ -163,14 +163,10 @@ export abstract class BaseEngine<
163
163
  (data as CommonBuildWorkerEvents["build"]).build,
164
164
  });
165
165
 
166
- // BaseEngine 전용: 경고 로깅 + 린트 결과 보고
166
+ // BaseEngine 전용: 린트 결과 보고
167
167
  this._worker!.on("build", (data) => {
168
168
  const event = data;
169
169
 
170
- if (event.build.warnings != null && event.build.warnings.length > 0) {
171
- logger.warn(`${this._pkg.name}: ${event.build.warnings.join(", ")}`);
172
- }
173
-
174
170
  if (event.lint != null) {
175
171
  const lintResult: BuildResult = {
176
172
  name: this._pkg.name,
@@ -184,7 +180,7 @@ export abstract class BaseEngine<
184
180
  });
185
181
 
186
182
  this._callStartWatch(output).catch((err: unknown) => {
187
- logger.error(`[${this._pkg.name}] startWatch 실패:`, errNs.message(err));
183
+ logger.debug(`[${this._pkg.name}] startWatch 실패:`, errNs.message(err));
188
184
  this._resultCollector?.add({
189
185
  name: this._pkg.name,
190
186
  target: this._getTarget(),
@@ -101,20 +101,14 @@ export class EsbuildClientEngine implements BuildEngine {
101
101
  });
102
102
 
103
103
  // 공통 이벤트 처리 (buildStart/build/error)
104
- setupWatchEvents(this._worker!, {
104
+ const { resolveInitialBuild } = setupWatchEvents(this._worker!, {
105
105
  name: this._pkg.name,
106
106
  target: "client",
107
107
  resultCollector: this._resultCollector,
108
108
  rebuildManager: this._rebuildManager,
109
109
  normalizeBuild: (data) => data as NormalizedBuildInfo,
110
110
  });
111
- // waitForInitialBuild 미사용 — worker.startWatch() await로 완료 감지
112
-
113
- // EsbuildClientEngine 전용: error 로깅
114
- this._worker!.on("error", (data) => {
115
- const event = data as { message: string };
116
- logger.error(`${this._pkg.name}: ${event.message}`);
117
- });
111
+ resolveInitialBuild(); // EsbuildClientEngine은 worker.startWatch() await로 초기 빌드 완료를 감지하므로 즉시 정리
118
112
 
119
113
  const port =
120
114
  typeof this._pkg.config.server === "number"
@@ -132,15 +126,27 @@ export class EsbuildClientEngine implements BuildEngine {
132
126
  browserSupport: this._pkg.config.browserSupport,
133
127
  });
134
128
 
129
+ const warningsText = result.warnings != null && result.warnings.length > 0
130
+ ? result.warnings.join("\n")
131
+ : undefined;
132
+
135
133
  if (!result.success) {
136
- const errorDetail = result.errors?.join("; ") ?? "unknown error";
137
- logger.error(`[${this._pkg.name}] 초기 빌드 실패: ${errorDetail}`);
134
+ const errorDetail = result.errors?.join("\n") ?? "unknown error";
138
135
  this._resultCollector?.add({
139
136
  name: this._pkg.name,
140
137
  target: "client",
141
138
  type: "build",
142
139
  status: "error",
143
140
  message: errorDetail,
141
+ warnings: warningsText,
142
+ });
143
+ } else if (warningsText != null) {
144
+ this._resultCollector?.add({
145
+ name: this._pkg.name,
146
+ target: "client",
147
+ type: "build",
148
+ status: "success",
149
+ warnings: warningsText,
144
150
  });
145
151
  }
146
152
  }
@@ -1,4 +1,4 @@
1
- import type * as NgtscBuildWorkerModule from "../workers/ngtsc-build.worker";
1
+ import type * as LibraryBuildWorkerModule from "../workers/library-build.worker";
2
2
  import type { ResultCollector } from "../runtime/ResultCollector";
3
3
  import type { RebuildManager } from "../runtime/rebuild-manager";
4
4
  import type { BuildOutput, BuildPackageInfo, EngineResult } from "./types";
@@ -24,19 +24,19 @@ export interface NgtscEngineOptions {
24
24
  /**
25
25
  * NgtscProgram 기반 Angular 라이브러리 패키지용 빌드 엔진
26
26
  *
27
- * NgtscProgram을 사용하여 AOT 컴파일을 수행하는 ngtsc-build.worker를 래핑한다.
28
- * package.json에 @angular/core 의존성이 있는 Angular 패키지용.
27
+ * 통합된 library-build.worker를 사용하며, globalScss: true를 전달하여
28
+ * Angular AOT 컴파일 + SCSS 빌드를 활성화한다.
29
29
  */
30
30
  export class NgtscEngine extends BaseEngine<
31
31
  BuildPackageInfo,
32
- typeof NgtscBuildWorkerModule & CommonBuildWorkerModule
32
+ typeof LibraryBuildWorkerModule & CommonBuildWorkerModule
33
33
  > {
34
34
  constructor(options: NgtscEngineOptions) {
35
35
  super(options);
36
36
  }
37
37
 
38
38
  protected _getWorkerPath(): string {
39
- return import.meta.resolve("../workers/ngtsc-build.worker");
39
+ return import.meta.resolve("../workers/library-build.worker");
40
40
  }
41
41
 
42
42
  protected _getTarget(): string {
@@ -49,7 +49,7 @@ export class NgtscEngine extends BaseEngine<
49
49
  name: this._pkg.name,
50
50
  cwd: this._cwd,
51
51
  pkgDir: this._pkg.dir,
52
- output,
52
+ output: { ...output, globalScss: true },
53
53
  });
54
54
 
55
55
  return this._normalizeResult(result);
@@ -61,7 +61,7 @@ export class NgtscEngine extends BaseEngine<
61
61
  name: this._pkg.name,
62
62
  cwd: this._cwd,
63
63
  pkgDir: this._pkg.dir,
64
- output,
64
+ output: { ...output, globalScss: true },
65
65
  replaceDeps: this._replaceDeps,
66
66
  });
67
67
  }
@@ -47,7 +47,6 @@ export class TscEngine extends BaseEngine<
47
47
  logger.debug(`[${this._pkg.name}] worker.build 호출`);
48
48
  const result = await this._worker!.build({
49
49
  name: this._pkg.name,
50
- config: this._pkg.config,
51
50
  cwd: this._cwd,
52
51
  pkgDir: this._pkg.dir,
53
52
  output,
@@ -60,7 +59,6 @@ export class TscEngine extends BaseEngine<
60
59
  logger.debug(`[${this._pkg.name}] worker.startWatch 호출`);
61
60
  await this._worker!.startWatch({
62
61
  name: this._pkg.name,
63
- config: this._pkg.config,
64
62
  cwd: this._cwd,
65
63
  pkgDir: this._pkg.dir,
66
64
  output,
@@ -39,6 +39,8 @@ export interface BuildOutput {
39
39
  env?: TypecheckEnv;
40
40
  /** 타입체크 범위에 tests/ 파일을 포함한다. check 커맨드에서만 사용된다. */
41
41
  includeTests?: boolean;
42
+ /** Angular 라이브러리의 글로벌 SCSS 컴파일 여부 */
43
+ globalScss?: boolean;
42
44
  }
43
45
 
44
46
  /**