@simplysm/sd-cli 14.1.9 → 14.1.11

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 (264) hide show
  1. package/dist/capacitor/capacitor-icon.js +2 -2
  2. package/dist/capacitor/capacitor-icon.js.map +1 -1
  3. package/dist/capacitor/capacitor-npm-config.d.ts +1 -1
  4. package/dist/capacitor/capacitor-npm-config.d.ts.map +1 -1
  5. package/dist/capacitor/capacitor-npm-config.js +11 -18
  6. package/dist/capacitor/capacitor-npm-config.js.map +1 -1
  7. package/dist/capacitor/capacitor.d.ts +1 -1
  8. package/dist/capacitor/capacitor.js +2 -2
  9. package/dist/capacitor/capacitor.js.map +1 -1
  10. package/dist/commands/check.d.ts.map +1 -1
  11. package/dist/commands/check.js +1 -0
  12. package/dist/commands/check.js.map +1 -1
  13. package/dist/commands/device.js +2 -2
  14. package/dist/commands/device.js.map +1 -1
  15. package/dist/commands/init/generators/root.d.ts.map +1 -1
  16. package/dist/commands/init/generators/root.js +0 -1
  17. package/dist/commands/init/generators/root.js.map +1 -1
  18. package/dist/commands/init/init-client.js +1 -1
  19. package/dist/commands/init/init-client.js.map +1 -1
  20. package/dist/commands/init/init.js +2 -2
  21. package/dist/commands/init/init.js.map +1 -1
  22. package/dist/commands/publish/deployment-phase.d.ts.map +1 -1
  23. package/dist/commands/publish/deployment-phase.js +1 -0
  24. package/dist/commands/publish/deployment-phase.js.map +1 -1
  25. package/dist/commands/publish/npm-publisher.js +3 -3
  26. package/dist/commands/publish/npm-publisher.js.map +1 -1
  27. package/dist/commands/publish/post-publish-phase.d.ts.map +1 -1
  28. package/dist/commands/publish/post-publish-phase.js +1 -0
  29. package/dist/commands/publish/post-publish-phase.js.map +1 -1
  30. package/dist/commands/publish/publish-command.d.ts.map +1 -1
  31. package/dist/commands/publish/publish-command.js +7 -12
  32. package/dist/commands/publish/publish-command.js.map +1 -1
  33. package/dist/commands/publish/version-upgrade.d.ts.map +1 -1
  34. package/dist/commands/publish/version-upgrade.js +50 -0
  35. package/dist/commands/publish/version-upgrade.js.map +1 -1
  36. package/dist/deps/replace-deps/collect-deps.js +4 -4
  37. package/dist/deps/replace-deps/collect-deps.js.map +1 -1
  38. package/dist/deps/replace-deps/replace-deps-resolve.d.ts +4 -12
  39. package/dist/deps/replace-deps/replace-deps-resolve.d.ts.map +1 -1
  40. package/dist/deps/replace-deps/replace-deps-resolve.js +13 -49
  41. package/dist/deps/replace-deps/replace-deps-resolve.js.map +1 -1
  42. package/dist/deps/replace-deps/replace-deps.d.ts +2 -2
  43. package/dist/deps/replace-deps/replace-deps.js +3 -3
  44. package/dist/deps/server-externals/server-production-files.d.ts +3 -3
  45. package/dist/deps/server-externals/server-production-files.d.ts.map +1 -1
  46. package/dist/deps/server-externals/server-production-files.js +24 -17
  47. package/dist/deps/server-externals/server-production-files.js.map +1 -1
  48. package/dist/electron/electron.d.ts.map +1 -1
  49. package/dist/electron/electron.js +6 -11
  50. package/dist/electron/electron.js.map +1 -1
  51. package/dist/engines/BaseEngine.d.ts +1 -0
  52. package/dist/engines/BaseEngine.d.ts.map +1 -1
  53. package/dist/engines/BaseEngine.js +2 -1
  54. package/dist/engines/BaseEngine.js.map +1 -1
  55. package/dist/esbuild/esbuild-config.d.ts +6 -2
  56. package/dist/esbuild/esbuild-config.d.ts.map +1 -1
  57. package/dist/esbuild/esbuild-config.js +4 -3
  58. package/dist/esbuild/esbuild-config.js.map +1 -1
  59. package/dist/esbuild/esbuild-tsc-plugin.d.ts.map +1 -1
  60. package/dist/esbuild/esbuild-tsc-plugin.js +3 -1
  61. package/dist/esbuild/esbuild-tsc-plugin.js.map +1 -1
  62. package/dist/orchestrators/BaseOrchestrator.d.ts.map +1 -1
  63. package/dist/orchestrators/BaseOrchestrator.js +1 -0
  64. package/dist/orchestrators/BaseOrchestrator.js.map +1 -1
  65. package/dist/orchestrators/BuildOrchestrator.d.ts.map +1 -1
  66. package/dist/orchestrators/BuildOrchestrator.js +3 -5
  67. package/dist/orchestrators/BuildOrchestrator.js.map +1 -1
  68. package/dist/orchestrators/DevOrchestrator.d.ts.map +1 -1
  69. package/dist/orchestrators/DevOrchestrator.js +1 -0
  70. package/dist/orchestrators/DevOrchestrator.js.map +1 -1
  71. package/dist/orchestrators/ServerRuntimeManager.d.ts.map +1 -1
  72. package/dist/orchestrators/ServerRuntimeManager.js +4 -0
  73. package/dist/orchestrators/ServerRuntimeManager.js.map +1 -1
  74. package/dist/orchestrators/TypecheckOrchestrator.d.ts.map +1 -1
  75. package/dist/orchestrators/TypecheckOrchestrator.js +4 -6
  76. package/dist/orchestrators/TypecheckOrchestrator.js.map +1 -1
  77. package/dist/runtime/engine-watch-events.d.ts.map +1 -1
  78. package/dist/runtime/engine-watch-events.js +5 -0
  79. package/dist/runtime/engine-watch-events.js.map +1 -1
  80. package/dist/runtime/worker-events.d.ts +1 -0
  81. package/dist/runtime/worker-events.d.ts.map +1 -1
  82. package/dist/sd-cli-entry.d.ts.map +1 -1
  83. package/dist/sd-cli-entry.js +0 -4
  84. package/dist/sd-cli-entry.js.map +1 -1
  85. package/dist/sd-cli.js +2 -0
  86. package/dist/sd-cli.js.map +1 -1
  87. package/dist/typecheck/typecheck-non-package.d.ts.map +1 -1
  88. package/dist/typecheck/typecheck-non-package.js +10 -0
  89. package/dist/typecheck/typecheck-non-package.js.map +1 -1
  90. package/dist/utils/package-utils.d.ts +8 -6
  91. package/dist/utils/package-utils.d.ts.map +1 -1
  92. package/dist/utils/package-utils.js +26 -24
  93. package/dist/utils/package-utils.js.map +1 -1
  94. package/dist/utils/workspace-utils.d.ts +17 -0
  95. package/dist/utils/workspace-utils.d.ts.map +1 -0
  96. package/dist/utils/workspace-utils.js +95 -0
  97. package/dist/utils/workspace-utils.js.map +1 -0
  98. package/dist/workers/client.worker.d.ts +1 -0
  99. package/dist/workers/client.worker.d.ts.map +1 -1
  100. package/dist/workers/client.worker.js +8 -3
  101. package/dist/workers/client.worker.js.map +1 -1
  102. package/dist/workers/library-build.worker.d.ts +1 -0
  103. package/dist/workers/library-build.worker.d.ts.map +1 -1
  104. package/dist/workers/library-build.worker.js +3 -2
  105. package/dist/workers/library-build.worker.js.map +1 -1
  106. package/dist/workers/server-build.worker.d.ts +1 -0
  107. package/dist/workers/server-build.worker.d.ts.map +1 -1
  108. package/dist/workers/server-build.worker.js +12 -12
  109. package/dist/workers/server-build.worker.js.map +1 -1
  110. package/dist/workers/server-esbuild-context.d.ts.map +1 -1
  111. package/dist/workers/server-esbuild-context.js +4 -2
  112. package/dist/workers/server-esbuild-context.js.map +1 -1
  113. package/dist/workers/server-runtime.worker.d.ts +1 -0
  114. package/dist/workers/server-runtime.worker.d.ts.map +1 -1
  115. package/dist/workers/server-runtime.worker.js +9 -3
  116. package/dist/workers/server-runtime.worker.js.map +1 -1
  117. package/dist/workers/server-watch-manager.d.ts +1 -1
  118. package/dist/workers/server-watch-manager.d.ts.map +1 -1
  119. package/dist/workers/server-watch-manager.js +2 -2
  120. package/dist/workers/server-watch-manager.js.map +1 -1
  121. package/package.json +11 -11
  122. package/src/capacitor/capacitor-icon.ts +2 -2
  123. package/src/capacitor/capacitor-npm-config.ts +10 -19
  124. package/src/capacitor/capacitor.ts +2 -2
  125. package/src/commands/check.ts +1 -0
  126. package/src/commands/device.ts +2 -2
  127. package/src/commands/init/generators/root.ts +0 -1
  128. package/src/commands/init/init-client.ts +1 -1
  129. package/src/commands/init/init.ts +2 -2
  130. package/src/commands/init/templates/workspace-root/mise.toml.hbs +1 -1
  131. package/src/commands/publish/deployment-phase.ts +1 -0
  132. package/src/commands/publish/npm-publisher.ts +3 -3
  133. package/src/commands/publish/post-publish-phase.ts +1 -0
  134. package/src/commands/publish/publish-command.ts +7 -15
  135. package/src/commands/publish/version-upgrade.ts +51 -0
  136. package/src/deps/replace-deps/collect-deps.ts +4 -4
  137. package/src/deps/replace-deps/replace-deps-resolve.ts +13 -56
  138. package/src/deps/replace-deps/replace-deps.ts +3 -3
  139. package/src/deps/server-externals/server-production-files.ts +31 -18
  140. package/src/electron/electron.ts +7 -13
  141. package/src/engines/BaseEngine.ts +3 -2
  142. package/src/esbuild/esbuild-config.ts +12 -3
  143. package/src/esbuild/esbuild-tsc-plugin.ts +4 -1
  144. package/src/orchestrators/BaseOrchestrator.ts +1 -0
  145. package/src/orchestrators/BuildOrchestrator.ts +3 -5
  146. package/src/orchestrators/DevOrchestrator.ts +1 -0
  147. package/src/orchestrators/ServerRuntimeManager.ts +4 -0
  148. package/src/orchestrators/TypecheckOrchestrator.ts +4 -6
  149. package/src/runtime/engine-watch-events.ts +7 -1
  150. package/src/runtime/worker-events.ts +1 -0
  151. package/src/sd-cli-entry.ts +0 -9
  152. package/src/sd-cli.ts +2 -0
  153. package/src/typecheck/typecheck-non-package.ts +11 -0
  154. package/src/utils/package-utils.ts +30 -23
  155. package/src/utils/workspace-utils.ts +117 -0
  156. package/src/workers/client.worker.ts +9 -4
  157. package/src/workers/library-build.worker.ts +4 -3
  158. package/src/workers/server-build.worker.ts +13 -13
  159. package/src/workers/server-esbuild-context.ts +5 -2
  160. package/src/workers/server-runtime.worker.ts +10 -3
  161. package/src/workers/server-watch-manager.ts +3 -3
  162. package/tests/capacitor/capacitor-build.spec.ts +142 -142
  163. package/tests/capacitor/capacitor-init.spec.ts +181 -181
  164. package/tests/capacitor/capacitor-npm-config.acc.spec.ts +114 -114
  165. package/tests/capacitor/capacitor-npm-config.spec.ts +94 -94
  166. package/tests/commands/publish-manifest.acc.spec.ts +67 -0
  167. package/tests/deps/replace-deps/collect-deps.acc.spec.ts +16 -1
  168. package/tests/deps/replace-deps/replace-deps-resolve.acc.spec.ts +9 -5
  169. package/tests/deps/replace-deps/replace-deps-setup.acc.spec.ts +3 -3
  170. package/tests/deps/server-externals/server-production-files.spec.ts +68 -0
  171. package/tests/electron/electron.spec.ts +608 -608
  172. package/tests/ts-compiler/fixtures/non-angular-pkg/.cache/typecheck-browser.tsbuildinfo +1 -1
  173. package/tests/ts-compiler/fixtures/non-angular-pkg/.cache/typecheck-node.tsbuildinfo +1 -1
  174. package/tests/ts-compiler/fixtures/non-angular-pkg/.cache/typecheck.tsbuildinfo +1 -1
  175. package/tests/utils/engine-watch-events.spec.ts +17 -0
  176. package/tests/utils/esbuild-config.spec.ts +15 -0
  177. package/tests/utils/package-utils.spec.ts +36 -4
  178. package/tests/utils/replace-deps-watch.acc.spec.ts +4 -4
  179. package/tests/utils/replace-deps-watch.spec.ts +3 -3
  180. package/tests/utils/replace-deps.spec.ts +1 -35
  181. package/tests/utils/workspace-utils.spec.ts +87 -0
  182. package/tests/workers/library-build-worker.spec.ts +1 -1
  183. package/tests/workers/server-esbuild-context.spec.ts +4 -3
  184. package/dist/commands/reinstall.d.ts +0 -13
  185. package/dist/commands/reinstall.d.ts.map +0 -1
  186. package/dist/commands/reinstall.js +0 -56
  187. package/dist/commands/reinstall.js.map +0 -1
  188. package/src/commands/init/templates/workspace-root/pnpm-workspace.yaml +0 -5
  189. package/src/commands/reinstall.ts +0 -63
  190. package/tests/angular/angular-compiler-hmr-removal.verify.md +0 -16
  191. package/tests/angular/onbuild-lint-removal.verify.md +0 -8
  192. package/tests/angular/vite-angular-plugin-sdtscompiler.verify.md +0 -13
  193. package/tests/angular/vite-angular-plugin-vitest.verify.md +0 -20
  194. package/tests/capacitor/capacitor-android-exports.verify.md +0 -11
  195. package/tests/commands/publish-npm-local-split.verify.md +0 -9
  196. package/tests/commands/publish-responsibility-split.verify.md +0 -13
  197. package/tests/commands/publish-set.verify.md +0 -7
  198. package/tests/commands/publish-storage-split.verify.md +0 -8
  199. package/tests/commands/slice3-severity-cleanup.verify.md +0 -12
  200. package/tests/deps/deps-directory-separation.verify.md +0 -15
  201. package/tests/deps/replace-deps/replace-deps-perf.verify.md +0 -15
  202. package/tests/deps/server-externals/mise-toml-parse-intent.verify.md +0 -16
  203. package/tests/electron/electron-symlink-cleanup.verify.md +0 -8
  204. package/tests/engines/engine-duplicate-output-removal.verify.md +0 -10
  205. package/tests/engines/engine-typecheck-selection.verify.md +0 -8
  206. package/tests/engines/esbuild-client-engine.verify.md +0 -15
  207. package/tests/engines/normalize-result.verify.md +0 -9
  208. package/tests/engines/vite-dependency-cleanup.verify.md +0 -24
  209. package/tests/esbuild/esbuild-angular-compiler-plugin-hmr.verify.md +0 -23
  210. package/tests/esbuild/esbuild-angular-compiler-plugin-onload.verify.md +0 -21
  211. package/tests/esbuild/esbuild-angular-compiler-plugin-onstart-extraction.verify.md +0 -16
  212. package/tests/esbuild/esbuild-angular-compiler-plugin-sdtscompiler.verify.md +0 -15
  213. package/tests/esbuild/esbuild-angular-compiler-plugin-stylesheet.verify.md +0 -31
  214. package/tests/esbuild/esbuild-angular-compiler-plugin-worker.verify.md +0 -59
  215. package/tests/esbuild/esbuild-angular-compiler-plugin.verify.md +0 -21
  216. package/tests/esbuild/esbuild-postcss-plugin-chunking.verify.md +0 -17
  217. package/tests/esbuild/esbuild-tsc-plugin-imports.verify.md +0 -13
  218. package/tests/esbuild/esbuild-worker-plugin-node.verify.md +0 -12
  219. package/tests/esbuild/esbuild-worker-plugin.verify.md +0 -7
  220. package/tests/orchestrators/dist-delete-watcher.verify.md +0 -10
  221. package/tests/orchestrators/orchestrator-baseenv.verify.md +0 -10
  222. package/tests/orchestrators/orchestrator-diagnostic-formatting.verify.md +0 -10
  223. package/tests/orchestrators/orchestrator-initializemode-signature.verify.md +0 -9
  224. package/tests/orchestrators/slice1-stdout-to-consola.verify.md +0 -10
  225. package/tests/sd-cli-catch-all.verify.md +0 -7
  226. package/tests/sd-cli-log-tag.verify.md +0 -11
  227. package/tests/ts-compiler/SdTsCompiler-affected-files.verify.md +0 -8
  228. package/tests/ts-compiler/SdTsCompiler-crash-handling.verify.md +0 -24
  229. package/tests/ts-compiler/SdTsCompiler-diagnostics.verify.md +0 -12
  230. package/tests/ts-compiler/SdTsCompiler-emit.verify.md +0 -9
  231. package/tests/ts-compiler/SdTsCompiler.verify.md +0 -41
  232. package/tests/ts-compiler/scss-lint-integration.verify.md +0 -14
  233. package/tests/utils/copy-public-outdir.verify.md +0 -8
  234. package/tests/utils/dev-http-server.verify.md +0 -8
  235. package/tests/utils/engine-watch-events.verify.md +0 -17
  236. package/tests/utils/esbuild-client-config-integration.verify.md +0 -9
  237. package/tests/utils/esbuild-client-config-postcss.verify.md +0 -6
  238. package/tests/utils/esbuild-client-config.verify.md +0 -26
  239. package/tests/utils/esbuild-index-html.verify.md +0 -10
  240. package/tests/utils/esbuild-pwa.verify.md +0 -9
  241. package/tests/utils/esbuild-scss-plugin.verify.md +0 -8
  242. package/tests/utils/hmr-service.verify.md +0 -17
  243. package/tests/utils/lint-core-import-paths.verify.md +0 -10
  244. package/tests/utils/replace-deps-split.verify.md +0 -15
  245. package/tests/utils/replace-deps-watch.verify.md +0 -9
  246. package/tests/utils/server-production-files-import-paths.verify.md +0 -14
  247. package/tests/utils/vite-config-cleanup.verify.md +0 -7
  248. package/tests/workers/build-watch-paths-library.verify.md +0 -10
  249. package/tests/workers/build-watch-paths-ngtsc-server.verify.md +0 -12
  250. package/tests/workers/client-worker-browser-support.verify.md +0 -7
  251. package/tests/workers/client-worker-cleanup.verify.md +0 -8
  252. package/tests/workers/client-worker-initial-build-error.verify.md +0 -7
  253. package/tests/workers/client-worker-initial-build-warnings.verify.md +0 -7
  254. package/tests/workers/client-worker-mtime-incremental.verify.md +0 -10
  255. package/tests/workers/client-worker-onend-sync.verify.md +0 -7
  256. package/tests/workers/client-worker-refactor.verify.md +0 -22
  257. package/tests/workers/client-worker-ts-cache-invalidation.verify.md +0 -12
  258. package/tests/workers/dev-port-file.verify.md +0 -6
  259. package/tests/workers/ngtsc-build-rootnames-refresh.verify.md +0 -8
  260. package/tests/workers/server-build-context-dispose.verify.md +0 -8
  261. package/tests/workers/server-build-worker-plugin.verify.md +0 -9
  262. package/tests/workers/server-build-worker-refactoring.verify.md +0 -14
  263. package/tests/workers/server-esbuild-context-integration.verify.md +0 -10
  264. package/tests/workers/server-esbuild-context-tsc.verify.md +0 -7
@@ -1,59 +0,0 @@
1
- # Web Worker 통합 (Feature 1.2) — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- ### 제거된 코드
6
-
7
- - `createWorkerTransformer` import가 제거됨: `esbuild-angular-compiler-plugin.ts`에 `web-worker-transformer.js`로부터의 import가 존재하지 않음
8
- - `AdditionalResult` 인터페이스 선언이 제거됨
9
- - `bundleWebWorker` 함수 및 `#region bundleWebWorker` 주석이 제거됨
10
- - `additionalResults` Map 선언이 제거됨
11
- - `createWebWorkerProcessor` 함수가 제거됨
12
- - onStart 내부의 `processWebWorker` + `workerTransformer` 생성 코드가 제거됨
13
- - `compileAsync` 호출에서 `additionalTransformers` 옵션이 제거됨
14
- - 증분 빌드 루프에서 `additionalResults.delete(file)` 호출이 제거됨
15
-
16
- ### 추가된 코드
17
-
18
- - `transformWorkerPatterns` import가 `./esbuild-worker-plugin`에서 추가됨 (같은 디렉토리, .js 확장자 미사용)
19
- - setup 스코프에 `workerResultsByContainingFile = new Map<string, { outputFiles?: esbuild.OutputFile[]; metafile?: esbuild.Metafile }>()` 선언이 존재함 (증분 빌드 시 변경되지 않은 Worker metafile 유지 목적)
20
-
21
- ### onStart — TS 파일 Worker 패턴 처리 (Rule 1)
22
-
23
- - 증분 빌드 시 `expandedModifiedFiles` 각 파일에 대해 `workerResultsByContainingFile.delete(file)` 호출 (선택적 제거)
24
- - `emitResults` 루프에서 각 파일에 대해 `transformWorkerPatterns(contents, normalized, build)` 호출
25
- - `workerResult != null`이면 `typeScriptFileCache.set(normalized, workerResult.contents)` 저장
26
- - `workerResult.errors`/`workerResult.warnings`를 onStart의 `errors`/`warnings` 배열에 push
27
- - `workerResult.workerMetafile != null`이면 `referencedFileTracker.add(normalized, Object.keys(workerResult.workerMetafile.inputs).map(input => path.join(cwd, input)))` 호출
28
- - `workerMetafile` 또는 `workerOutputFiles`가 있으면 `workerResultsByContainingFile.set(normalized, { outputFiles, metafile })` 저장
29
- - `workerResult == null`이면 기존처럼 `typeScriptFileCache.set(normalized, contents)` 저장
30
- - Worker 번들 에러가 errors 배열에 포함되어 onStart 결과에 반영됨 (Scenario: 에러 전파)
31
-
32
- ### JS onLoad — .js 파일 Worker 패턴 처리 (Rule 2)
33
-
34
- - `createCachedLoad` 콜백에서 `javascriptTransformer.transformFile` 호출 후 결과를 `TextDecoder`로 문자열로 변환
35
- - 변환된 문자열에 `transformWorkerPatterns(textContents, request, build)` 적용
36
- - `workerResult != null`일 때:
37
- - `workerResult.workerMetafile`이 있으면 `referencedFileTracker.add` 호출
38
- - `workerMetafile` 또는 `workerOutputFiles`가 있으면 `workerResultsByContainingFile.set(request, { outputFiles, metafile })` 저장
39
- - 반환: `{ contents, loader: "js", resolveDir, errors (>0일때), warnings (>0일때) }` — TS/JS 에러 처리 일관성 확보 (L2 리뷰 반영)
40
- - `workerResult == null`일 때 기존과 동일한 `{ contents, loader: "js", resolveDir }` 반환
41
-
42
- ### onEnd — metafile 병합 (Rule 3)
43
-
44
- - onEnd에서 `workerResultsByContainingFile.values()` 순회
45
- - 각 항목의 `outputFiles`가 있으면 `result.outputFiles?.push(...outputFiles)`
46
- - 각 항목의 `metafile`이 있으면 `Object.assign(result.metafile.inputs, wr.metafile.inputs)` + `Object.assign(result.metafile.outputs, wr.metafile.outputs)`
47
- - onEnd에서 Map 전체 리셋 없음 — 증분 빌드에서 변경되지 않은 Worker 결과가 다음 빌드에서도 병합됨
48
- - 기존 `additionalResults` 순회 루프가 제거됨
49
-
50
- ### client config 무변경 (Rule 6)
51
-
52
- - `esbuild-client-config.ts`에 Worker 플러그인 추가 코드가 존재하지 않음 (plugins 배열에 `createWorkerBundlePlugin` 또는 `sd-worker-bundle` 미포함)
53
- - `esbuild-client-config.ts` 파일 자체가 Feature 1.2로 인해 변경되지 않음 (git diff 기준)
54
-
55
- ### 회귀 방지
56
-
57
- - `pnpm test --run packages/sd-cli/tests/esbuild/esbuild-angular-compiler-plugin.spec.ts` 통과 (기존 plugin 구조 테스트)
58
- - `pnpm test --run packages/sd-cli/tests/esbuild/esbuild-worker-plugin.spec.ts` 통과 (Feature 1.1 Unit 테스트)
59
- - `pnpm test --run packages/sd-cli/tests/esbuild/esbuild-worker-plugin.acc.spec.ts` 통과 (Feature 1.1 Acceptance 테스트)
@@ -1,21 +0,0 @@
1
- # esbuild Angular Compiler Plugin — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - **JavaScriptTransformer 초기화**: `esbuild-angular-compiler-plugin.ts:170-181` — `@angular/build/private`에서 import한 `JavaScriptTransformer`를 `{ sourcemap, thirdPartySourcemaps, advancedOptimizations, jit }` 옵션과 `maxWorkers`, `cacheStore?.createCache("jstransformer")`로 초기화. jit은 `includeTestMetadata`에 매핑됨.
6
-
7
- - **AngularCompiler 생성 시 transformStylesheet 콜백 전달**: `esbuild-angular-compiler-plugin.ts:222-229` — `AngularCompiler` 생성자에 `pluginOptions.transformStylesheet`를 직접 전달. 미제공 시 undefined로 전달되어 AngularCompiler에서 무시됨.
8
-
9
- - **AngularCompiler 생성 시 externalStylesheets 전달**: `esbuild-angular-compiler-plugin.ts:228` — `pluginOptions.externalStylesheets`가 AngularCompiler 옵션에 전달됨.
10
-
11
- - **첫 빌드 시 tsconfig 파싱 → AngularCompiler 생성 → initialize()**: `esbuild-angular-compiler-plugin.ts:214-231` — `angularCompiler == null` 조건에서 `parseTsconfigFile()` → `new AngularCompiler()` → `initialize()` 순서로 호출. compilerOptionsTransformer도 전달됨.
12
-
13
- - **emitAffectedFiles → typeScriptFileCache 저장**: `esbuild-angular-compiler-plugin.ts:235-238` — emit 결과를 `path.normalize(filename)` 키로 저장. 원본 compiler-plugin.js와 동일한 패턴.
14
-
15
- - **onDispose에서 리소스 정리**: `esbuild-angular-compiler-plugin.ts:295-299` — `angularCompiler = undefined`, `javascriptTransformer.close()`, `cacheStore?.close()` 호출. void로 fire-and-forget 처리 (원본과 동일).
16
-
17
- - **LMDB 캐시 초기화 실패 시 graceful degradation**: `esbuild-angular-compiler-plugin.ts:160-168` — try-catch로 감싸고 logger.warn 후 cacheStore = undefined 유지. JavaScriptTransformer에 cache 없이 초기화됨.
18
-
19
- - **onEnd에서 additionalResults 병합**: `esbuild-angular-compiler-plugin.ts:282-292` — outputFiles push + metafile Object.assign. result.outputFiles가 undefined일 수 있으므로 optional chaining 사용.
20
-
21
- - **onStart 에러 처리**: `esbuild-angular-compiler-plugin.ts:262-274` — catch에서 "Angular compilation failed." 에러 메시지 + stack trace를 notes에 포함. hasCompilationErrors = true 설정.
@@ -1,17 +0,0 @@
1
- # PostCSS 문자열 교체 청크화 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - 정방향 청크 배열 + join이 역순 slice와 수학적으로 동일한 결과를 생성하는가:
6
- 역순 slice 방식은 `code[0..start_n] + rep_n + code[end_n..start_{n-1}] + rep_{n-1} + ... + code[end_1..]` 순서로 최종 문자열을 구성한다.
7
- 정방향 청크 방식은 `code[0..start_1] + rep_1 + code[end_1..start_2] + rep_2 + ... + code[end_n..]` 순서로 청크를 수집하고 join한다.
8
- 두 방식 모두 원본 텍스트의 비교체 구간과 PostCSS 처리된 교체 텍스트를 동일한 순서로 결합하므로, replacements가 비중첩(acorn AST 노드 보장)인 한 결과가 동일하다.
9
- 검증 결과: **동일성 보장됨**
10
-
11
- - cursor 초기값 0과 마지막 `code.slice(cursor)` 호출이 파일 전체를 커버하는가:
12
- cursor는 0에서 시작하여 각 replacement의 end로 갱신된다. 마지막 `chunks.push(code.slice(cursor))`가 마지막 replacement 이후의 원본 텍스트를 수집한다. replacements가 0건이면 `code.slice(0)` = 전체 코드가 되지만, 이 경우 `replacements.length === 0`에서 continue되므로 도달하지 않는다.
13
- 검증 결과: **전체 커버됨**
14
-
15
- - `replacements.sort()`가 원본 배열을 변경하는 것이 문제되지 않는가:
16
- `replacements`는 각 파일 처리 시 새로 생성되는 로컬 배열이므로 in-place sort가 안전하다. 기존 코드도 동일하게 in-place sort를 사용했다.
17
- 검증 결과: **문제 없음**
@@ -1,13 +0,0 @@
1
- # esbuild-tsc-plugin 전환 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - `esbuild-tsc-plugin.ts`에서 `runTscPackageBuild`/`parseTsconfig` import 제거됨: Grep 결과 0건
6
- - `esbuild-tsc-plugin.ts`에서 `SdTsCompiler` import 존재: `import { SdTsCompiler } from "../ts-compiler/SdTsCompiler"` (line 4)
7
- - `TscPluginOptions`에 `lint?: boolean` 필드 존재: `esbuild-tsc-plugin.ts` 인터페이스 확인
8
- - `TscPluginResult`에 `getLintResult()` getter 존재: `esbuild-tsc-plugin.ts` 인터페이스 확인
9
- - `server-build.worker.ts`에서 `runTscPackageBuild` import 제거됨: Grep 결과 0건
10
- - `server-build.worker.ts`에서 `LintWithProgramRunner` import 제거됨: Grep 결과 0건
11
- - `server-build.worker.ts`에서 `SdTsCompiler` import 존재: `import { SdTsCompiler } from "../ts-compiler/SdTsCompiler"` 확인
12
- - `server-esbuild-context.ts`에 `getTscLintResult()` 위임 메서드 존재: 코드 확인
13
- - `server-esbuild-context.ts`의 `EsbuildContextOptions.tsc`에 `lint?: boolean` 존재: 코드 확인
@@ -1,12 +0,0 @@
1
- # import.meta.resolve Worker 패턴 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - `NODE_WORKER_PATTERN` 정규식이 상대 경로만 감지: `esbuild-worker-plugin.ts:25` — `(\.\.?\/[^"']+)` 패턴으로 `./` 또는 `../`로 시작하는 경로만 캡처. `"some-package"` 같은 절대 모듈 경로는 매칭되지 않음.
6
- - `bundleWorker`에 platform 파라미터 추가: `esbuild-worker-plugin.ts:42` — `platform: esbuild.Platform` 파라미터 사용. 기존 `"browser"` 하드코딩 제거.
7
- - 브라우저 Worker 패턴이 `platform: "browser"`로 빌드: `esbuild-worker-plugin.ts:137` — `processWorkerBundle(fullWorkerPath, "browser")` 호출. 기존 동작 유지.
8
- - Node.js Worker 패턴(import.meta.resolve)은 메인 빌드 platform이 "browser"이면 번들하지 않고 건너뜀: `esbuild-worker-plugin.ts` node 분기 — `build.initialOptions.platform === "browser"`이면 `continue`로 매치를 스킵하여 import.meta.resolve 호출을 그대로 둔다 (node 전용 워커가 browser 번들에 끌려와 worker_threads/fs 등 node 빌트인 resolve가 실패하는 것을 방지). 호출부에서 node 가드 하에서만 실행되므로 browser 런타임에 도달하지 않음.
9
- - platform이 "node"이면 import.meta.resolve Worker 패턴을 메인 빌드 platform("node")으로 번들: 서버 빌드에서는 종전대로 번들·치환.
10
- - 경로 치환이 `new URL("path", import.meta.url).href` 형태: `esbuild-worker-plugin.ts:153` — `new URL("${workerCodePath}", import.meta.url).href` 반환. file:// URL을 반환하므로 core-node Worker 호환.
11
- - 기존 브라우저 Worker 테스트 22개 모두 통과: `pnpm test --run` 결과 32개 전체 통과 (기존 22 + 신규 10).
12
- - `external: undefined` 설정 유지: `esbuild-worker-plugin.ts:62` — 메인 빌드의 external이 Worker 번들에 상속되지 않음.
@@ -1,7 +0,0 @@
1
- # Worker 빌드 경고가 메인 빌드로 전파됨 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - `transformWorkerPatterns`에서 `workerResult.warnings`를 warnings 배열에 push: `esbuild-worker-plugin.ts:109` — `warnings.push(...workerResult.warnings)` 확인. esbuild.buildSync의 BuildResult.warnings가 그대로 전달됨.
6
- - 반환 결과의 `warnings` 필드에 수집된 경고가 포함됨: `esbuild-worker-plugin.ts:172` — `warnings` 배열이 결과 객체에 포함됨.
7
- - 플러그인의 onLoad에서 warnings를 esbuild에 전달: `esbuild-worker-plugin.ts:210` — `warnings: result.warnings.length > 0 ? result.warnings : undefined` — onLoad 결과에 warnings를 포함하여 esbuild가 빌드 경고로 처리.
@@ -1,10 +0,0 @@
1
- # dist 삭제 감지 watcher 일반화 -- LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - 디버그 하드코딩 제거: `DevWatchOrchestrator.ts:281` — `angular` 하드코딩 블록이 제거됨
6
- - 모든 라이브러리 패키지 감시: `_startWatchMode()`에서 `this._libraryPackages`를 순회하며 각 `pkg.dir/dist`를 감시
7
- - 클래스 필드 저장: `_distDeleteWatchers: FsWatcher[]` 필드에 push
8
- - shutdown() 정리: `shutdown()`에서 `this._distDeleteWatchers.map(w => w.close())` 호출 확인
9
- - 정리 후 초기화: `this._distDeleteWatchers = []`로 참조 해제 확인
10
- - 로그 형식: `[dist-delete:{패키지명}]` 형식으로 어떤 패키지의 dist가 삭제되었는지 식별 가능
@@ -1,10 +0,0 @@
1
- # Orchestrator 환경변수 설정 중앙화 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - BaseOrchestrator에 `_baseEnv` protected 필드 추가됨: `BaseOrchestrator.ts:31`에 `protected _baseEnv!: { VER: string; DEV: string }` 확인
6
- - BaseOrchestrator.initialize()에서 getVersion + dev 파라미터로 _baseEnv 설정: `BaseOrchestrator.ts:69-71`에 `getVersion(this._cwd)` → `{ VER: version, DEV: params.dev ? "true" : "false" }` 확인
7
- - DevOrchestrator._initializeMode()에서 getVersion/baseEnv 코드 제거: `_initializeMode`는 `void` 반환, `getVersion` import도 제거됨
8
- - DevOrchestrator에서 private `_baseEnv` 필드 제거: BaseOrchestrator의 protected 필드를 상속
9
- - WatchOrchestrator는 변경 없음: BaseOrchestrator에서 _baseEnv가 자동 설정되며, WatchOrchestrator는 이를 사용하지 않아도 무해
10
- - 기존 테스트 업데이트: watch-orchestrator.spec.ts에서 `_baseEnv` 미존재 assertion 제거 (이제 Base 공통 필드)
@@ -1,10 +0,0 @@
1
- # Orchestrator 진단 포맷팅 공통 함수 사용 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - BuildOrchestrator._printBuildResults()가 formatDiagnosticsOutput()을 사용: `BuildOrchestrator.ts:465-468`에서 `formatDiagnosticsOutput(allDiagnostics, this._cwd)` 호출 확인. 기존 인라인 `FormatDiagnosticsHost` 생성 + `sortAndDeduplicateDiagnostics` + `formatDiagnosticsWithColorAndContext` 패턴이 제거됨
6
- - TypecheckOrchestrator._aggregateTypecheckResults()가 formatDiagnosticsOutput()을 사용: `TypecheckOrchestrator.ts:362`에서 `formatDiagnosticsOutput(allDiagnostics, this._cwd)` 호출 확인. 기존 인라인 `FormatDiagnosticsHost` + `sortAndDeduplicateDiagnostics` + `formatDiagnosticsWithColorAndContext` 패턴이 제거됨
7
- - BuildOrchestrator의 import에 `formatDiagnosticsOutput`이 추가됨 (line 15)
8
- - TypecheckOrchestrator의 import에 `formatDiagnosticsOutput`이 추가됨 (line 11)
9
- - 기존 동작 보존: BuildOrchestrator의 per-result 경고/에러 로깅 로직(`formatBuildMessages`)은 그대로 유지됨
10
- - 기존 동작 보존: TypecheckOrchestrator의 요약 로그/lint 결과 생성 로직은 그대로 유지됨
@@ -1,9 +0,0 @@
1
- # _initializeMode 시그니처 정리 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - BaseOrchestrator._initializeMode 추상 메서드에서 `options: string[]` 파라미터 제거: `BaseOrchestrator.ts:109-111`에 `(config: SdConfig, targets: string[])` 2개 파라미터만 확인
6
- - BaseOrchestrator.initialize() 호출부에서 options 인자 제거: `BaseOrchestrator.ts:79`에 `_initializeMode(sdConfig, params.targets)` 확인
7
- - options는 BaseOrchestrator.initialize()의 loadSdConfig()에서만 사용됨: `BaseOrchestrator.ts:53`에 `opt: params.options` 확인
8
- - DevOrchestrator._initializeMode 시그니처 변경 불필요: 이미 `(config, targets)` 2개 파라미터
9
- - WatchOrchestrator._initializeMode 시그니처 변경 불필요: 이미 `(config, targets)` 2개 파라미터
@@ -1,10 +0,0 @@
1
- # Slice 1: process.stdout.write → consola 전환 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - BaseOrchestrator.ts:105 — `this._logger.start("종료 중...")` 사용 확인: `process.stdout.write("⏳ 종료 중...\n")` → `this._logger.start("종료 중...")` 변경 완료. 수동 아이콘 ⏳ 제거됨
6
- - BaseOrchestrator.ts:107 — `this._logger.success("종료 완료")` 사용 확인: `process.stdout.write("✔ 종료 완료\n")` → `this._logger.success("종료 완료")` 변경 완료. 수동 아이콘 ✔ 제거됨
7
- - BuildOrchestrator.ts:173 — `this._logger.info("빌드할 패키지가 없습니다.")` 사용 확인: `process.stdout.write("✔ 빌드할 패키지가 없습니다.\n")` → `this._logger.info(...)` 변경 완료. 자동 테스트에서도 검증됨
8
- - WatchOrchestrator.ts:69 — `this._logger.warn("워치 대상 패키지가 없습니다.")` 사용 확인: `process.stdout.write("⚠ 워치 대상 패키지가 없습니다.\n")` → `this._logger.warn(...)` 변경 완료. 수동 아이콘 ⚠ 제거됨
9
- - publish-command.ts:121 — `logger.info("배포할 패키지가 없습니다.")` 사용 확인: `process.stdout.write("✔ 배포할 패키지가 없습니다.\n")` → `logger.info(...)` 변경 완료. 수동 아이콘 ✔ 제거됨
10
- - 모든 대상 파일에서 process.stdout.write가 더 이상 사용되지 않음 확인 (output-utils.ts의 printServers 내 `"\n"` 출력은 Feature 1.2 범위 외)
@@ -1,7 +0,0 @@
1
- # replaceDeps catch-all 에러 필터링 -- LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - catch 블록이 에러 코드를 확인하여 MODULE_NOT_FOUND/ERR_MODULE_NOT_FOUND만 무시: `sd-cli.ts:37-41` 확인 완료. `code` 프로퍼티를 체크하고 해당 코드가 아닌 경우 `console.warn`으로 경고 출력
6
- - 예상 외 에러(SyntaxError 등)에 경고 로그 출력: `console.warn("[sd-cli] replaceDeps 사전 설정 실패:", ...)` 확인
7
- - Phase 2로 정상 진행: catch 후 코드 흐름이 Phase 2(line 44~)로 계속됨 확인
@@ -1,11 +0,0 @@
1
- # CLI 진입점 태그 로거 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - sd-cli.ts에 `consola.withTag("sd:cli")` 모듈-레벨 로거가 생성됨: `src/sd-cli.ts:18` — `const logger = consola.withTag("sd:cli");`
6
- - sd-cli.ts replaceDeps 경고에서 수동 `[sd-cli]` prefix가 제거됨: `src/sd-cli.ts:43` — `logger.warn("replaceDeps 사전 설정 실패:", ...)` (이전: `consola.warn("[sd-cli] replaceDeps ..."`)
7
- - sd-cli.ts CPU affinity 경고가 consola로 전환됨: `src/sd-cli.ts:104-108` — `logger.warn("CPU affinity/priority 설정 실패:", ...)` (이전: `console.warn("Failed to configure ..."`)
8
- - sd-cli.ts에서 `eslint-disable-next-line no-console` 주석이 제거됨: `src/sd-cli.ts:104` 부근에 해당 주석 없음
9
- - sd-cli-entry.ts에 `consola.withTag("sd:cli:entry")` 모듈-레벨 로거가 생성됨: `src/sd-cli-entry.ts:20` — `const logger = consola.withTag("sd:cli:entry");`
10
- - sd-cli-entry.ts .fail() 핸들러가 태그 로거를 사용함: `src/sd-cli-entry.ts:329` — `logger.error(msg);` (이전: `consola.error(msg)`)
11
- - sd-cli-entry.ts의 `/* eslint-disable no-console */`이 유지됨: `src/sd-cli-entry.ts:1` — `collectYargsHelp`의 `console.log` 사용 때문에 필요
@@ -1,8 +0,0 @@
1
- # affected files 추적 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - Non-Angular 전역 변경 시 affectedFiles=undefined: `_findAffectedFilesForTsc`에서 `result.affected`가 `ts.SourceFile`이 아닌 경우(`"fileName" in result.affected` 실패) `return undefined`를 반환. (`SdTsCompiler.ts:272-275`)
6
- - Angular TypeScript 5.9 크래시 방어: `_findAffectedFilesForAngular`에서 `getSemanticDiagnosticsOfNextAffectedFile`를 try-catch로 감싸고, catch 시 전체 소스를 affected로 처리 (`SdTsCompiler.ts:290-298`)
7
- - Angular 리소스 의존성 기반 추가 affected: `_findAffectedFilesForAngular`에서 `sourceFileCache.modifiedFiles`와 `angularCompiler.getResourceDependencies(sourceFile)`를 비교하여 매칭 시 `_diagnosticCache.delete(sourceFile)` + `affectedSourceFiles.add(sourceFile)` (`SdTsCompiler.ts:317-334`)
8
- - Angular .ngtypecheck.ts → 원본 .ts 매핑: `getSemanticDiagnosticsOfNextAffectedFile`의 두 번째 인자 콜백에서 `.ngtypecheck.ts` 파일을 원본 `.ts`로 매핑하여 affected에 추가 (`SdTsCompiler.ts:284-295`)
@@ -1,24 +0,0 @@
1
- # SdTsCompiler 크래시 핸들링 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- ### 구조적 검증
6
-
7
- - 단계별 try-catch: compileAsync 내 analyzeAsync, findAffectedFiles, emit, collectDiagnostics, lintAndGlobalScss 각각이 개별 try-catch로 감싸져 있는지 확인
8
- - 바깥 try-catch 유지: 단계별 try-catch를 감싸는 최종 안전망 try-catch가 존재하는지 확인
9
- - SdError 사용: catch 블록에서 SdError(원본에러, context)로 감싸는지 확인
10
- - crashDiagnostics 누적: 각 단계 catch에서 SerializedDiagnostic을 배열에 누적하고, 최종 결과에 합산하는지 확인
11
- - per-file 프로브 제거: _probeCrashPerFileAngular, _probeCrashPerFileTsc 메서드가 삭제되었는지 확인
12
-
13
- ### 파일 추적 검증
14
-
15
- - _findAffectedFilesForTsc: ignoreSourceFile 콜백으로 _setCrashContext("findAffectedFiles", sourceFile.fileName)를 호출하는지 확인
16
- - _findAffectedFilesForAngular: 기존 콜백에 _setCrashContext("findAffectedFiles", sourceFile.fileName) 추가, 기존 ngtypecheck 필터링 로직 유지 확인
17
- - _collectDiagnosticsForTsc: 파일 단위 루프로 분리되어 _setCrashContext("collectDiagnostics", sourceFile.fileName)를 호출하는지 확인
18
- - _collectDiagnosticsForAngular: 기존 파일 추적 유지 확인
19
-
20
- ### 단계 간 의존성 검증
21
-
22
- - analyzeAsync 크래시 시: _ngtscProgram 미설정 → Angular emit/diagnostics에서 null 체크로 스킵하는지 확인
23
- - findAffectedFiles 크래시 시: affectedFiles=undefined(전체), _affectedSourceFiles 빈 Set → emit/diagnostics가 전체 대상으로 동작하는지 확인
24
- - _createCrashDiagnostic: SdError cause chain으로 원본 에러 메시지+스택이 보존되는지 확인
@@ -1,12 +0,0 @@
1
- # 진단 수집 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - Angular TS 5.9 getSemanticDiagnostics 크래시 방어: `_collectDiagnosticsForAngular`에서 `builderProgram.getSemanticDiagnostics(sourceFile)`를 try-catch로 감싸고, catch 시 빈 배열로 처리 (`SdTsCompiler.ts` `_collectDiagnosticsForAngular` 메서드 내 per-file 루프)
6
- - Angular diagnosticCache 갱신: affected 파일이면 `getDiagnosticsForFile` 호출 후 `this._diagnosticCache.set(sourceFile, angularDiagnostics)` 수행 (`SdTsCompiler.ts` `_collectDiagnosticsForAngular` 메서드)
7
- - Angular diagnosticCache 반환: 비-affected 파일이면 `this._diagnosticCache.get(sourceFile)` 캐시 결과 반환 (`SdTsCompiler.ts` `_collectDiagnosticsForAngular` 메서드)
8
- - Angular ignoreForDiagnostics 건너뜀: per-file 루프에서 `angularCompiler.ignoreForDiagnostics.has(sourceFile)` 체크 후 continue
9
- - Non-Angular 7종 진단 수집: `_collectDiagnosticsForTsc`에서 config + syntactic + options + global + semantic + declaration 진단 수집 (declaration은 `!output.dts` 조건)
10
- - isWorkspaceDiagnostic 필터링: `_finalizeDiagnostics`에서 `rawDiagnostics.filter(d => isWorkspaceDiagnostic(d, this._options.cwd))` 적용
11
- - serializeDiagnostic 직렬화: `_finalizeDiagnostics`에서 `filtered.map(serializeDiagnostic)` 적용
12
- - formatDiagnosticError 포맷: `_finalizeDiagnostics`에서 Error 카테고리 진단을 `formatDiagnosticError`로 포맷하여 `errors` 배열 생성
@@ -1,9 +0,0 @@
1
- # emit 처리 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - Angular emit — additionalTransformers 병합: `_emitAngular`에서 `emitOptions?.additionalTransformers`의 before/after를 `angularCompiler.prepareEmit().transformers`에 push 병합 (`SdTsCompiler.ts` `_emitAngular` 메서드)
6
- - Angular emit — tsbuildinfo 영속화 크래시 방어: `builderProgram.emit(undefined, () => {})` 호출이 try-catch로 감싸져 있음 (`SdTsCompiler.ts` `_emitAngular` 메서드 하단)
7
- - Angular emit — sourceFilter 적용: emitResults를 `emitOptions.sourceFilter`로 필터링하여 반환 (`SdTsCompiler.ts` `_emitAngular` 메서드 마지막)
8
- - Angular emit — incrementalCompilation.recordSuccessfulEmit 호출: writeFileCallback에서 각 sourceFile에 대해 호출됨
9
- - Angular emit — ignoreForEmit/isDeclarationFile/safeToSkipEmit 건너뜀: per-file emit 루프에서 세 조건 모두 continue 처리
@@ -1,41 +0,0 @@
1
- # SdTsCompiler — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- ### Angular host 확장 (Slice 2)
6
-
7
- - **readResource 콜백 등록**: `SdTsCompiler.ts:268` — `hostAny["readResource"]`가 `host.readFile` 위임. `angular-compiler.ts:181-183`의 패턴과 동일 확인
8
- - **transformResource 콜백 등록**: `SdTsCompiler.ts:271-286` — `transformStylesheet` 옵션이 있을 때만 등록. context.type !== "style" 시 null 반환, 빈 데이터 시 `{ content: "" }` 반환. `angular-compiler.ts:186-203`의 패턴과 동일
9
- - **getModifiedResourceFiles 콜백**: `SdTsCompiler.ts:289-292` — `sourceFileCache`가 있을 때만 등록, `cache.modifiedFiles` 반환. `angular-compiler.ts:206-208`의 패턴과 동일
10
- - **resourceNameToFileName 콜백**: `SdTsCompiler.ts:295-312` — 경로 해석 + `externalStylesheets` 처리 + `hasTemplateExtension` 분기. `angular-compiler.ts:210-228`의 패턴과 동일
11
-
12
- ### moduleResolutionCache 재사용 (Slice 2)
13
-
14
- - **초기 생성**: `SdTsCompiler.ts:252-253` — `ts.createModuleResolutionCache(cwd, canonicalize, options, this._packageJsonCache)` 호출. 4번째 인자로 `this._packageJsonCache` 전달
15
- - **packageJsonCache 추출**: `SdTsCompiler.ts:256-258` — 첫 호출 시 `moduleResolutionCache.getPackageJsonInfoCache()`로 추출하여 `_packageJsonCache`에 저장
16
- - **후속 호출 시 재사용**: 두 번째 `compileAsync` 호출 시 `this._packageJsonCache`가 null이 아니므로 `createModuleResolutionCache`의 4번째 인자로 전달됨 → 패키지 해석 결과 재사용
17
-
18
- ### sourceFileCache 관리 (Slice 2-3)
19
-
20
- - **외부 제공 시 사용**: `SdTsCompiler.ts:117` — `this._options.sourceFileCache ?? new AngularSourceFileCache()` 패턴으로 외부 제공 시 우선 사용
21
- - **미제공 시 내부 생성**: 위 라인에서 `??` 연산자로 `AngularSourceFileCache` 내부 생성
22
- - **augmentHostWithCaching 적용**: `SdTsCompiler.ts:118` — Angular 프로그램 생성 직전에 `augmentHostWithCaching(host, this._sourceFileCache)` 호출
23
- - **증분 빌드 시 무효화**: `SdTsCompiler.ts:74-76` — `modifiedFiles != null && size > 0 && _sourceFileCache != null` 조건으로 `sourceFileCache.invalidate(modifiedFiles)` 호출
24
-
25
- ### Non-Angular writeFile 훅 (Slice 2)
26
-
27
- - **emit 모드에서만 설정**: `SdTsCompiler.ts:238` — `!isForAngular && needsEmit` 조건으로 writeFile 훅 적용
28
- - **createOutputPathRewriter 사용**: `SdTsCompiler.ts:239` — `createOutputPathRewriter(pkgDir)` 호출
29
- - **addJsExtensionToImports 적용**: `SdTsCompiler.ts:243` — `.js` 파일에만 `addJsExtensionToImports` 적용
30
- - **result null 시 쓰기 스킵**: `SdTsCompiler.ts:241` — `result != null` 체크로 다른 패키지 출력 무시
31
-
32
- ### compilerOptions 구성 순서 (Slice 1)
33
-
34
- - **순서 확인**: `SdTsCompiler.ts:170-225` — env 조정(171) → output 플래그(175-202) → angular 병합(205) → tsBuildInfoFile(210) → transformer(221) 순서 확인
35
-
36
- ### Program 생성 분기 (Slice 3)
37
-
38
- - **Non-Angular**: `SdTsCompiler.ts:138-142` — `createEmitAndSemanticDiagnosticsBuilderProgram(rootNames, options, host, oldBuilderProgram)` 4인자 오버로드
39
- - **Angular**: `SdTsCompiler.ts:120-135` — NgtscProgram → getTsProgram → ensureSourceFileVersions → createEmitAndSemanticDiagnosticsBuilderProgram(tsProgram, host, old) → analyzeAsync
40
- - **증분 빌드 상태**: `SdTsCompiler.ts:145` — `this._builderProgram = builderProgram` 저장. 다음 호출 시 `this._builderProgram`이 old로 전달됨
41
- - **Angular 증분**: `SdTsCompiler.ts:123` — `this._ngtscProgram`을 NgtscProgram 4번째 인자로 전달. `SdTsCompiler.ts:136` — `this._ngtscProgram = angularProgram` 저장
@@ -1,14 +0,0 @@
1
- # Feature 1.3 SCSS 번들링 + lint 통합 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - transformResource 콜백 연결: `SdTsCompiler.ts:_extendHostForAngular()`에서 `effectiveTransformStylesheet` 매개변수로 전달받아 `hostAny["transformResource"]`에 등록 확인 (SdTsCompiler.ts:553-579)
6
- - 라이브러리 SCSS 콜백 자동 생성 조건: `isForAngular && effectiveTransformStylesheet == null` 분기 (SdTsCompiler.ts:163-172) — transformStylesheet 제공 시 그대로 사용, 미제공 시 createLibraryTransformStylesheet 생성
7
- - SCSS 상태 리셋 위치: compileAsync 내 program 생성 전에 `_scssErrors.length = 0`, `_scssDependencies.clear()` 호출 (SdTsCompiler.ts:158-160)
8
- - createLibraryTransformStylesheet 이동: ngtsc-build-core.ts에 정의, angular-build-pipeline.ts에서 import 변경 확인 — `compileScssString` import 추가됨
9
- - sideEffectScssRegistry getter: public getter로 외부 접근 가능 (SdTsCompiler.ts:83-86)
10
- - compileSideEffectScss: 내부 _scssErrors와 _scssDependencies에 에러/의존성 기록 (SdTsCompiler.ts:89-98)
11
- - _runLint: LintWithProgramRunner 인스턴스 lazy init + 재사용 (SdTsCompiler.ts:_lintRunner 필드, _runLint 메서드)
12
- - lint + globalScss 병렬: Promise.all로 동시 실행 (SdTsCompiler.ts:271-283)
13
- - ISdTsCompilerResult 타입: lint?, scssErrors, scssDependencies 필드 추가 (sd-ts-compiler-result.ts:17-21)
14
- - ISdTsCompilerOptions 타입: lint?, globalScss? 필드 추가 (sd-ts-compiler-options.ts:41-45)
@@ -1,8 +0,0 @@
1
- # copyPublicFiles/writeConfigJson outDir 지원 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - `client.worker.ts:164`에서 `writeConfigJson(outdir, ...)` 사용 확인 — `writeConfigJson(outdir, info.configs)` (기존 `path.join(info.pkgDir, "dist")` 제거됨)
6
- - `client.worker.ts:102`에서 `copyPublicFiles(info.pkgDir, false, outdir)` 전달 확인 — `outdir` 변수는 line 99에서 `info.outDir ?? path.join(info.pkgDir, "dist")`로 계산됨
7
- - `server-build.worker.ts`의 호출이 변경되지 않음 확인 — line 225: `copyPublicFiles(info.pkgDir, false)`, line 374: `watchPublicFiles(info.pkgDir, true)` (2인자 호출 유지)
8
- - `copy-public.ts`의 `watchPublicFiles` 내부 `copyPublicFiles` 호출에 `outDir` 전달 확인 — line 67: `await copyPublicFiles(pkgDir, includeDev, outDir)`
@@ -1,8 +0,0 @@
1
- # Slice 2: 포트/설정 파일 기록 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - `.dev-port` 파일 기록 패턴 유지: 기존 `client.worker.ts:246,319`에서 `fs.writeFileSync(path.join(distDir, ".dev-port"), String(port))` 패턴을 사용 중이며, 이 패턴은 호출자(worker/engine)에서 동일하게 사용 가능. `createDevHttpServer`의 `listen()` 반환값(port)을 사용하여 기록 가능.
6
- - `.config.json` 기록 패턴 유지: 기존 `client.worker.ts:439-448`의 `writeConfigJson` 함수가 `fs.mkdirSync + fs.writeFileSync(JSON.stringify)` 패턴으로 구현되어 있으며, Feature 3.1(EsbuildClientEngine)에서 동일하게 호출 가능.
7
- - configs 미설정 시 빈 객체: 기존 `writeConfigJson`에서 `configs ?? {}`로 처리 (`client.worker.ts:445`). 이 패턴은 호출자가 그대로 유지.
8
- - 파일 기록 책임 분리: `createDevHttpServer`는 HTTP 서빙에만 집중하고, `.dev-port`/`.config.json` 기록은 호출자 책임 (설계 결정 D3 준수).
@@ -1,17 +0,0 @@
1
- # setupWatchEvents + BaseEngine/EsbuildClientEngine 적용 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- ### Slice 1: BaseEngine 적용
6
-
7
- - BaseEngine lint 결과 보고 유지: `BaseEngine.ts:148-157` — build 이벤트에서 `event.lint`가 있으면 lint BuildResult를 ResultCollector에 추가. 기존 로직 그대로 유지됨.
8
- - BaseEngine 경고 로깅 유지: `BaseEngine.ts:144-146` — `event.build.warnings`가 있으면 `logger.warn` 호출. 기존 로직 그대로 유지됨.
9
- - setupWatchEvents가 index.ts의 public export에 포함되지 않음: 내부 유틸리티이므로 패키지 외부 API 불변. `engines/index.ts`의 export 목록에 engine-watch-events 없음 확인.
10
- - resolveInitialBuild가 _callStartWatch catch에서 호출됨: `BaseEngine.ts:162-164` — `this._callStartWatch(output).catch(() => { resolveInitialBuild(); })`. 기존의 `isInitialBuild` 가드와 동등한 동작.
11
-
12
- ### Slice 2: EsbuildClientEngine 적용
13
-
14
- - EsbuildClientEngine이 waitForInitialBuild() 미사용: `EsbuildClientEngine.ts:103-111` — setupWatchEvents 호출 후 반환값 사용 안 함. 111행에 "waitForInitialBuild 미사용" 주석 확인.
15
- - serverReady 이벤트 처리 유지: `EsbuildClientEngine.ts:97-101` — serverReady 핸들러가 setupWatchEvents 전에 등록됨. `this.port = event.port` 로직 그대로.
16
- - error 로깅 유지: `EsbuildClientEngine.ts:113-117` — setupWatchEvents 이후 별도 error 핸들러에서 `logger.error` 호출. 기존 동작 보존.
17
- - worker.startWatch() await 패턴 유지: `EsbuildClientEngine.ts:119-130` — 기존과 동일하게 `await this._worker!.startWatch(...)` 로 완료 감지.
@@ -1,9 +0,0 @@
1
- # Feature 3.1 esbuild-client-config.ts 통합 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - `@angular/build/private`에서 `createCompilerPlugin`, `SourceFileCache`, `CompilerPluginOptions`, `BundleStylesheetOptions` import가 없다: grep 결과 `@angular/build/private` 매치 없음
6
- - `createAngularCompilerPlugin`이 `./esbuild-angular-compiler-plugin.js`에서 import되어 있다: line 10에서 import, line 119에서 호출 확인
7
- - `ClientSourceFileCache`가 `AngularSourceFileCache`를 확장하고 `typeScriptFileCache`, `loadResultCache` 프로퍼티를 가진다: line 46-49에서 `extends AngularSourceFileCache` + 두 프로퍼티 확인
8
- - `ClientEsbuildResult.sourceFileCache` 타입이 `ClientSourceFileCache`이다: line 53 확인
9
- - `client.worker.ts`의 `sourceFileCache.loadResultCache.watchFiles`, `sourceFileCache.typeScriptFileCache.keys()`, `sourceFileCache.invalidate()` 접근이 새 구조와 타입 호환된다: typecheck 0 에러로 타입 호환성 확인됨
@@ -1,6 +0,0 @@
1
- # Feature 1.2 client 빌드 PostCSS 설정 통합 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - postcssConfigPath가 CreateClientEsbuildOptions 인터페이스에서 제거됨: `esbuild-client-config.ts`에서 `postcssConfigPath` 검색 결과 없음 (No matches found). `client.worker.ts`에서도 2곳 모두 제거 확인.
6
- - createScssPlugin에 로딩된 PostCSS 인스턴스가 전달됨: `esbuild-client-config.ts:118`에서 `postcssPlugins: loadedPostcssPlugins`로 `createScssPlugin`에 전달 확인.
@@ -1,26 +0,0 @@
1
- # createClientEsbuildContext — LLM 검증
2
-
3
- ## Feature 1.1a 검증 항목
4
-
5
- - import 경로: `@angular/build/private`에서 `createCompilerPlugin`, `SourceFileCache`, `CompilerPluginOptions`, `BundleStylesheetOptions`를 정상 import — `private.d.ts` line 31-37에 모두 export 확인
6
- - `createCompilerPlugin`의 2-param 시그니처(private export wrapper)와 일치하는 호출 — `createCompilerPlugin(pluginOptions, styleOptions)` 2개 인자로 호출 (private.d.ts의 wrapper 시그니처와 일치)
7
- - `CompilerPluginOptions.sourcemap` 타입이 `boolean | 'external'` 범위 내 값 사용 — `isDev` (boolean)으로 전달, `true`/`false` 범위 내
8
- - `BundleStylesheetOptions.sourcemap` 타입이 `boolean | 'external' | 'inline' | 'linked'` 범위 내 값 사용 — `isDev ? "linked" : false` 범위 내
9
- - `sd-config.types.ts`의 `postCss.plugins` 타입이 Angular의 `PostcssConfiguration` 포맷과 일치 — `[string, (object | string)?][]` = Angular의 `[name: string, options?: object | string][]`
10
- - `onEnd` 플러그인이 esbuild Plugin 규격(`name` + `setup`)을 준수 — `{ name: "sd-on-end", setup(build) { build.onEnd(...) } }` 규격 충족
11
- - 패키지 루트 `index.ts`에서 신규 모듈 export 필요 여부 — 불필요. 기존 `esbuild-config.ts`도 내부 유틸로 export 안 함. `sd-config.types.ts`만 export 중
12
-
13
- ## Feature 1.1b-2 검증 항목
14
-
15
- - `browserslist-to-esbuild` import 정상 — `import browserslistToEsbuild from "browserslist-to-esbuild"` 추가. `vite-config.ts:5`와 동일한 패턴
16
- - `browserslistToEsbuild` 반환값이 esbuild target 및 BundleStylesheetOptions.target에 동시 적용 — `esbuildTarget` 변수로 통합하여 두 곳에 사용 (line 51-56, 82, 122)
17
- - 에셋 복사: `copyPublicFiles(pkgDir, false)` 시그니처가 build 모드 호출 가능 — `copy-public.ts:15` 시그니처 `(pkgDir: string, includeDev: boolean): Promise<void>` 확인. build 모드에서 `false` 전달 적합
18
- - 에셋 감시: `watchPublicFiles(pkgDir, true)` 시그니처가 dev 모드 호출 가능 — `copy-public.ts:58` 시그니처 `(pkgDir: string, includeDev: boolean): Promise<FsWatcher | undefined>` 확인. dev 모드에서 `true` 전달 적합
19
- - 에셋 복사 함수는 `createClientEsbuildContext` 외부 호출자 담당 (설계 결정 D4) — `createClientEsbuildContext` 내부에 `copyPublicFiles`/`watchPublicFiles` 호출 없음 확인. 실제 호출 통합은 Feature 3.1에서 수행
20
-
21
- ## Feature 1.1b-1 검증 항목
22
-
23
- - tsconfig 옵션이 CompilerPluginOptions와 esbuild context에 동일 기본값 사용 — 둘 다 `options.tsconfig ?? path.join(options.pkgDir, "tsconfig.json")`. CompilerPluginOptions(line 65)와 esbuild context(line 151)에서 동일 패턴
24
- - esbuild tsconfig 옵션이 서버 빌드 패턴(D1)과 일치 — `esbuild-config.ts:94` `tsconfig: path.join(options.pkgDir, "tsconfig.json")`과 동일. 클라이언트는 추가로 `options.tsconfig` 커스텀 경로 지원 (기존 인터페이스에 이미 존재)
25
- - scssPlugin loadPaths가 buildScssLoadPaths 패턴과 일치 — `ngtsc-build-core.ts:91-96`의 `[pkgDir/scss, cwd/node_modules]`와 `esbuild-client-config.ts:105-108`의 `[options.pkgDir/scss, options.cwd/node_modules]` 동일
26
- - plugins 배열 순서가 구현계획과 일치 — `[angularPlugin, scssPlugin, ...customPlugins, ...onEndPlugin]` (line 153-169)
@@ -1,10 +0,0 @@
1
- # esbuild-index-html — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - FileInfo 타입이 IndexHtmlGenerator의 FileInfo와 호환: IndexHtmlGeneratorProcessOptions.files는 `{file: string, name?: string, extension: string}` — 동일 구조 확인
6
- - entrypoints 타입이 IndexHtmlGenerator의 Entrypoint와 호환: `[string, boolean][]` — `Entrypoint = [name: string, isModule: boolean]`과 동일
7
- - SRI 옵션이 mode에 따라 정확히 설정: `sri: options.mode === "build"` — build일 때만 true
8
- - cssBundle 연결 로직의 정확성: JS entry의 `output.cssBundle` 경로를 normalize하여 CSS output의 경로와 매칭. esbuild metafile 구조상 cssBundle은 output key와 동일 형식
9
- - postTransform이 IndexHtmlGeneratorOptions에 올바르게 전달: `IndexHtmlTransform = (content: string) => Promise<string>` — GenerateIndexHtmlOptions.postTransform과 동일 타입
10
- - Windows 경로 호환성: `replace(/\\/g, "/")` 로 모든 경로를 POSIX 형식으로 정규화
@@ -1,9 +0,0 @@
1
- # esbuild-pwa — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - augmentAppWithServiceWorker 호출 인자가 정확한가: `esbuild-pwa.ts:108-113` — `(options.pkgDir, options.cwd, options.outdir, options.baseHref)` 순서로 호출 확인
6
- - 기본 ngsw-config.json에 $schema, index, assetGroups(app, assets)가 포함되는가: `esbuild-pwa.ts:83-104` — `$schema`, `index: "/index.html"`, `assetGroups: [{name: "app"}, {name: "assets"}]` 확인
7
- - 등록 스크립트에서 ngsw-worker.js를 등록하는가: `esbuild-pwa.ts:119` — `register("ngsw-worker.js")` 확인. `sw.js` 참조 없음
8
- - SdPwaConfig.workbox 필드를 참조하지 않는가: grep 결과 "workbox" 0건 확인. D4 결정 준수
9
- - generatePwaIcons 호출 결과를 dist/icons/로 복사하는 로직이 있는가: `esbuild-pwa.ts:51-58` — `srcIconsDir(public/icons/)` → `dstIconsDir(outdir/icons/)` copyFileSync 로직 확인
@@ -1,8 +0,0 @@
1
- # createScssPlugin — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - createCompilerPlugin 컴포넌트 스타일과 비충돌: `createCompilerPlugin`은 `BundleStylesheetOptions`를 받아 컴포넌트 `styleUrls`를 TypeScript 변환 과정에서 내부 처리한다. 이들은 esbuild의 일반 `onLoad` 경로를 타지 않으므로, `sd-scss` 플러그인의 `onLoad({ filter: /\.scss$/ })` 콜백은 side-effect `import "./global.scss"` 같은 일반 import만 인터셉트한다. 충돌 없음 확인.
6
- - onLoad filter 정확성: `/\.scss$/` 정규식이 `.scss` 파일만 매칭 — `.css`, `.scss.ts` 등은 매칭하지 않음. 단위 테스트(`esbuild-scss-plugin.spec.ts`)에서 검증 완료.
7
- - sass 라인 번호 변환: sass `span.start.line`은 0-based, esbuild `location.line`은 1-based. `line + 1` 변환 적용 확인 (`esbuild-scss-plugin.ts:31`).
8
- - fileURLToPath import 정상: `url` 모듈에서 import. `scss-compiler.ts`의 `pathToFileURL`과 동일 모듈.
@@ -1,17 +0,0 @@
1
- # HMR Service — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - ws 의존성이 sd-cli package.json dependencies에 추가되었는가: `"ws": "^8.20.0"` 확인 (package.json:51)
6
- - @types/ws가 sd-cli package.json devDependencies에 추가되었는가: `"@types/ws": "^8.18.1"` 확인 (package.json:57)
7
- - dev-http-server.ts의 onRequest 훅 타입 시그니처가 올바른가: `onRequest?: (req: http.IncomingMessage, res: http.ServerResponse) => boolean` — Node.js 표준 타입 사용, boolean 반환으로 처리 완료 여부 표시
8
- - hmr-service.ts의 handleRequest가 angularComponentMiddleware와 동일한 encodeURIComponent 패턴을 사용하는가: `templateUpdates.get(encodeURIComponent(componentId))` (hmr-service.ts:65) — vite-angular-plugin.ts:553과 동일 패턴
9
- - WebSocketServer가 httpServer의 upgrade 이벤트를 통해 연결되는가: `new WebSocketServer({ server: httpServer })` (hmr-service.ts:27) — ws 라이브러리가 httpServer의 upgrade 이벤트를 자동 처리
10
-
11
- ## Slice 2 검증 항목
12
-
13
- - import.meta.hot 폴리필이 esbuild banner로 주입되는가: `esbuild-client-config.ts`에서 `templateUpdates != null && legacyModule !== true` 조건으로 banner 생성. `import.meta.hot.on()`, `import.meta.hot.off()`, `globalThis.__hmr_dispatch()` 제공.
14
- - legacyModule일 때 폴리필이 주입되지 않는가: `options.legacyModule !== true` 조건으로 legacyModule에서 banner 미생성.
15
- - ngHmrMode 가드가 있어 prod에서 실행되지 않는가: banner 코드가 `if(typeof ngHmrMode!=="undefined"&&ngHmrMode)` 가드로 래핑. prod에서 `ngHmrMode="false"`로 정의되므로 실행 안됨.
16
- - sd-hmr-reset 플러그인이 onStart에서 templateUpdates.clear()를 호출하는가: `esbuild-client-config.ts`에 `sd-hmr-reset` 플러그인 추가. `build.onStart(() => { options.templateUpdates!.clear(); })` 확인.
17
- - sd-hmr-reset이 angularPlugin보다 먼저 등록되는가: plugins 배열에서 `sd-hmr-reset`이 첫 번째 위치 (angularPlugin, scssPlugin보다 앞). createCompilerPlugin이 templateUpdates에 쓰기 전에 clear됨.
@@ -1,10 +0,0 @@
1
- # lint.worker/lint-utils/check.ts import 경로 검증 -- LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - lint.worker.ts가 `../utils/lint-core`에서 import: `import { executeLint, type LintOptions, type LintResult } from "../utils/lint-core";` (line 2) 확인
6
- - lint-utils.ts가 `./lint-core`에서 import: `import type { LintOptions, LintResult } from "./lint-core";` (line 2) 확인
7
- - check.ts가 `../utils/lint-core`에서 import: `import { executeLint, type LintResult } from "../utils/lint-core";` (line 4) 확인
8
- - commands/lint.ts�� `../commands/lint` import가 없음: `import { executeLint, type LintOptions } from "../utils/lint-core";` (line 1)만 존재
9
- - lint-core.ts에 runLint가 없음: `executeLint`, `loadIgnorePatterns`, `LintOptions`, `LintResult`만 export
10
- - commands/lint.ts에 runLint만 존재: 13줄의 thin wrapper
@@ -1,15 +0,0 @@
1
- # replace-deps.ts 분할 -- LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - 파일 구조: `replace-deps-resolve.ts` 신규 생성, `replace-deps.ts` 기존 유지 확인
6
- - 해석 함수 이동: `resolveReplaceDepEntries`, `parseWorkspaceGlobs`, `collectSearchRoots`, `resolveAllReplaceDepEntries`가 `replace-deps-resolve.ts`에 위치
7
- - 타입 위치: `ReplaceDepEntry`가 `replace-deps-resolve.ts`에서 export, `replace-deps.ts`에서 `export type` re-export
8
- - `WatchReplaceDepResult`가 `replace-deps.ts`에서 export
9
- - `replace-deps.ts`에서 `resolveAllReplaceDepEntries`를 import하여 사용
10
- - `commands/publish.ts` import 경로가 `../utils/replace-deps-resolve`로 변경
11
- - `sd-cli.ts`, `BaseOrchestrator.ts`, `commands/replace-deps.ts`의 import 경로는 변경 없음 (실행 함수만 사용)
12
- - `tests/utils/replace-deps.spec.ts` import 경로가 `../../src/deps/replace-deps-resolve`로 변경
13
- - `tests/utils/replace-deps-watch.spec.ts`, `replace-deps-watch.acc.spec.ts`의 import 경로는 변경 없음
14
- - `replace-deps.ts`에서 `glob` import가 제거됨 (해석 로직 전용)
15
- - `replace-deps-resolve.ts`에서 `fsx`, `FsWatcher`, `exec` import가 없음 (실행 로직 전용)
@@ -1,9 +0,0 @@
1
- # replaceDeps 감시 통합 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - watchReplaceDeps 시그니처에 optional `options` 파라미터가 추가되었는가: `replace-deps.ts:321`에 `options?: { onChanged?: () => void }` 확인
6
- - onChanged 콜백이 파일 복사 루프 완료 후(for 루프 바깥) 호출되는가: `replace-deps.ts:393`에서 for 루프(346-392) 완료 후 `options?.onChanged?.()` 호출 확인
7
- - 기존 watchReplaceDeps 호출자가 새 시그니처와 호환되는가: `DevWatchOrchestrator.ts:121`에서 2개 인자로 호출 — 3번째 optional 파라미터 생략으로 호환
8
- - esbuild onEnd 플러그인(esbuild-client-config.ts)이 빌드 결과를 외부로 전달하는 경로가 존재하는가: `esbuild-client-config.ts:215-218`에 `sd-on-end` 플러그인이 `options.onEnd(result)` 호출
9
- - hmrService.onBuildEnd()가 metafile 기반으로 HMR 메시지를 디스패치하는 경로가 존재하는가: `hmr-service.ts:49-133`에 metafile 기반 변경 판별 → WS broadcast 로직 존재
@@ -1,14 +0,0 @@
1
- # server-build.worker 비즈니스 로직 분리 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - 4개 함수가 utils/server-production-files.ts에 export되어 있다: line 14, 27, 68, 87에 각각 export function 확인
6
- - worker에서 4개 함수 정의가 제거되었다: worker에 함수 정의 없음, import와 호출만 존재
7
- - worker에서 collectAllExternals, generateProductionFiles를 새 모듈에서 import한다: line 19 `import { collectAllExternals, generateProductionFiles } from "../utils/server-production-files"`
8
- - collectAllExternals 시그니처: `(pkgDir: string, manualExternals?: string[]) => string[]` — line 14 확인
9
- - parseLockfileVersions 시그니처: `(cwd: string) => Map<string, string>` — line 27 확인
10
- - resolveLockedVersions 시그니처: `(cwd: string, pkgNames: string[]) => Record<string, string>` — line 68 확인
11
- - generateProductionFiles 시그니처: `(info: ServerBuildInfo, externals: string[]) => void` — line 87 확인
12
- - worker에 build, rebuildAll, startWatch, stopWatch, cleanup, createEsbuildWatchContext가 존재한다: line 116, 148, 259, 336, 359, 488 확인
13
- - worker에서 cpx import가 제거되었다: grep 결과 매칭 없음
14
- - worker에서 collectAllDependencyExternals import가 제거되었다: grep 결과 매칭 없음
@@ -1,7 +0,0 @@
1
- # Feature 3.1 createClientViteConfig 옵션 정리 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - enableLint 옵션 제거: `CreateClientViteConfigOptions` 인터페이스에서 `enableLint` 필드가 완전히 제거됨. `vite-config.ts` 전체에서 `enableLint` 문자열 검색 결과 0건.
6
- - replaceDepDistPaths 계산 제거: `vite-config.ts` 전체에서 `replaceDepDistPaths` 문자열 검색 결과 0건. 기존 line 98-114의 계산 로직(fs.realpathSync, pathx.posix 사용)이 완전히 제거됨. `fs`와 `pathx` import도 함께 제거됨.
7
- - tsconfigPath, browserslist, postCssPlugins, legacyModule은 인터페이스 옵션이 아닌 함수 내부 로컬 변수로만 존재: 모두 `loadSdConfig()` 결과에서 추출하거나 `pkgDir`에서 derive됨.
@@ -1,10 +0,0 @@
1
- # library-build watchPaths 동일성 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - buildWatchPaths 호출 인자가 기존 코드와 동등: `srcGlobs: ["*.ts"]`, `replaceDeps: info.replaceDeps` — 기존 `pathx.posixResolve(info.pkgDir, "src", "**", "*.ts")` 패턴과 동일한 경로 생성 확인
6
- - workspace deps 경로 생성이 동일: 기존 `workspaceDeps.map((d) => pathx.posixResolve(info.cwd, "packages", d, "src", "**", "*.ts"))` → buildWatchPaths 내부에서 동일하게 `pathx.posixResolve(cwd, "packages", d)` + `src/**/*.ts` 생성
7
- - replaceDeps dist 경로가 cwd와 pkgDir 양쪽에서 생성됨: buildWatchPaths 내부에서 `pathx.posixResolve(cwd, "node_modules", ...pkg.split("/"), "dist", "**", "*.{js,mjs,cjs}")` 및 pkgDir 경로 동일하게 생성
8
- - collectDeps import 제거됨: library-build.worker.ts에서 collectDeps가 더 이상 직접 import되지 않음 — buildWatchPaths가 내부에서 호출
9
- - 변경 필터링 동작 동일: 기존 `hasFileAddOrRemove` 인라인 로직 + `lastSourceFilePaths` 교차가 `shouldSkipRebuild(changes.map(c => c.path), hasFileAddOrRemove(changes), lastSourceFilePaths, logger)`로 동일하게 대체됨
10
- - 기존 테스트(library-build-worker.spec.ts) 16건 모두 통과 확인
@@ -1,12 +0,0 @@
1
- # ngtsc-build, server-build watchPaths 적용 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - ngtsc-build watchPaths 동일성: `srcGlobs: ["*.{ts,scss,css}"]`, `extraDirs: [{ dir: "scss", globs: ["*.{scss,css}"] }]` — 기존 코드의 `src/**/*.{ts,scss,css}` + `scss/**/*.{scss,css}` + deps 동일 패턴과 매칭 확인
6
- - ngtsc-build SCSS 역방향 탐색 유지: `hasFileAddOrRemove` → `hasFileAddOrRemoveFn`으로 변경 후에도 `modifiedFiles` 구성 로직(pipeline.findAffectedByScss)이 그대로 유지됨
7
- - ngtsc-build `shouldSkipRebuild(modifiedFiles, addOrRemove, ...)`: SCSS 역방향 탐색 결과가 포함된 `modifiedFiles` Set을 Iterable로 전달하여 정확한 필터링 수행
8
- - server-build watchPaths 동일성: `srcGlobs: ["*"]` — 기존 `src/**/*` 패턴과 동일
9
- - server-build metafile 기반 필터링 유지: `hasFileAddOrRemoveFn(changes)` → `addOrRemove` 변수명으로 변경 외에 metafile 기반 로직(L444-470) 무변경
10
- - server-build esbuild context 재생성 로직 유지: `if (addOrRemove)` 블록 내 context 재생성 로직이 기존과 동일
11
- - collectDeps import 제거: ngtsc-build, server-build 모두에서 collectDeps 직접 import 제거됨 — buildWatchPaths가 내부에서 호출
12
- - 기존 테스트 94건 모두 통과 확인
@@ -1,7 +0,0 @@
1
- # browserSupport 전달로 이중 로딩 제거 — LLM 검증
2
-
3
- ## 검증 항목
4
-
5
- - loadSdConfig import 제거: `client.worker.ts` — `import { loadSdConfig }` 라인이 제거됨. `sd-config` 모듈 import 없음
6
- - resolvePackageInfo가 동기 함수: `client.worker.ts:73` — `function resolvePackageInfo(info: ClientBuildInfo): {` (async 제거, Promise 반환 없음)
7
- - resolvePackageInfo가 info.browserSupport 사용: `client.worker.ts:83-86` — `info.browserSupport?.legacyModule`, `info.browserSupport?.browserslist`, `info.browserSupport?.postCss?.plugins`