@simplysm/sd-cli 14.0.7 → 14.0.9

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 (265) hide show
  1. package/dist/angular/client-transform-stylesheet.d.ts.map +1 -1
  2. package/dist/angular/client-transform-stylesheet.js.map +1 -1
  3. package/dist/angular/vite-angular-plugin.d.ts.map +1 -1
  4. package/dist/angular/vite-angular-plugin.js +15 -8
  5. package/dist/angular/vite-angular-plugin.js.map +1 -1
  6. package/dist/angular/vite-postcss-inline-plugin.d.ts.map +1 -1
  7. package/dist/angular/vite-postcss-inline-plugin.js.map +1 -1
  8. package/dist/capacitor/capacitor.d.ts +1 -1
  9. package/dist/capacitor/capacitor.d.ts.map +1 -1
  10. package/dist/capacitor/capacitor.js +43 -44
  11. package/dist/capacitor/capacitor.js.map +1 -1
  12. package/dist/commands/build.d.ts.map +1 -1
  13. package/dist/commands/build.js.map +1 -1
  14. package/dist/commands/check.d.ts.map +1 -1
  15. package/dist/commands/check.js +2 -2
  16. package/dist/commands/check.js.map +1 -1
  17. package/dist/commands/dev.d.ts.map +1 -1
  18. package/dist/commands/dev.js.map +1 -1
  19. package/dist/commands/lint.d.ts.map +1 -1
  20. package/dist/commands/lint.js.map +1 -1
  21. package/dist/commands/publish.d.ts.map +1 -1
  22. package/dist/commands/publish.js +12 -13
  23. package/dist/commands/publish.js.map +1 -1
  24. package/dist/commands/replace-deps.d.ts.map +1 -1
  25. package/dist/commands/replace-deps.js.map +1 -1
  26. package/dist/commands/typecheck.d.ts.map +1 -1
  27. package/dist/commands/typecheck.js +12 -12
  28. package/dist/commands/typecheck.js.map +1 -1
  29. package/dist/commands/watch.d.ts.map +1 -1
  30. package/dist/commands/watch.js.map +1 -1
  31. package/dist/electron/electron.d.ts.map +1 -1
  32. package/dist/electron/electron.js +42 -37
  33. package/dist/electron/electron.js.map +1 -1
  34. package/dist/engines/BaseEngine.d.ts +1 -5
  35. package/dist/engines/BaseEngine.d.ts.map +1 -1
  36. package/dist/engines/BaseEngine.js +7 -16
  37. package/dist/engines/BaseEngine.js.map +1 -1
  38. package/dist/engines/NgtscEngine.d.ts.map +1 -1
  39. package/dist/engines/NgtscEngine.js +10 -11
  40. package/dist/engines/NgtscEngine.js.map +1 -1
  41. package/dist/engines/ServerEsbuildEngine.d.ts.map +1 -1
  42. package/dist/engines/ServerEsbuildEngine.js +10 -11
  43. package/dist/engines/ServerEsbuildEngine.js.map +1 -1
  44. package/dist/engines/TscEngine.d.ts.map +1 -1
  45. package/dist/engines/TscEngine.js +10 -11
  46. package/dist/engines/TscEngine.js.map +1 -1
  47. package/dist/engines/ViteEngine.d.ts.map +1 -1
  48. package/dist/engines/ViteEngine.js +3 -13
  49. package/dist/engines/ViteEngine.js.map +1 -1
  50. package/dist/engines/index.d.ts.map +1 -1
  51. package/dist/engines/index.js.map +1 -1
  52. package/dist/engines/types.d.ts +3 -6
  53. package/dist/engines/types.d.ts.map +1 -1
  54. package/dist/engines/types.js.map +1 -1
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js.map +1 -1
  57. package/dist/infra/ResultCollector.d.ts +1 -1
  58. package/dist/infra/ResultCollector.d.ts.map +1 -1
  59. package/dist/infra/ResultCollector.js.map +1 -1
  60. package/dist/infra/SignalHandler.d.ts.map +1 -1
  61. package/dist/infra/SignalHandler.js.map +1 -1
  62. package/dist/infra/WorkerManager.d.ts.map +1 -1
  63. package/dist/infra/WorkerManager.js.map +1 -1
  64. package/dist/orchestrators/BuildOrchestrator.d.ts.map +1 -1
  65. package/dist/orchestrators/BuildOrchestrator.js +30 -61
  66. package/dist/orchestrators/BuildOrchestrator.js.map +1 -1
  67. package/dist/orchestrators/DevWatchOrchestrator.d.ts +2 -0
  68. package/dist/orchestrators/DevWatchOrchestrator.d.ts.map +1 -1
  69. package/dist/orchestrators/DevWatchOrchestrator.js +40 -44
  70. package/dist/orchestrators/DevWatchOrchestrator.js.map +1 -1
  71. package/dist/sd-cli-entry.d.ts.map +1 -1
  72. package/dist/sd-cli-entry.js +2 -13
  73. package/dist/sd-cli-entry.js.map +1 -1
  74. package/dist/sd-cli.d.ts.map +1 -1
  75. package/dist/sd-cli.js +5 -5
  76. package/dist/sd-cli.js.map +1 -1
  77. package/dist/sd-config.types.d.ts.map +1 -1
  78. package/dist/sd-config.types.js.map +1 -1
  79. package/dist/utils/SdCliReporter.d.ts +18 -0
  80. package/dist/utils/SdCliReporter.d.ts.map +1 -0
  81. package/dist/utils/SdCliReporter.js +144 -0
  82. package/dist/utils/SdCliReporter.js.map +1 -0
  83. package/dist/utils/angular-build.d.ts.map +1 -1
  84. package/dist/utils/angular-build.js.map +1 -1
  85. package/dist/utils/angular-compiler.d.ts.map +1 -1
  86. package/dist/utils/angular-compiler.js +11 -4
  87. package/dist/utils/angular-compiler.js.map +1 -1
  88. package/dist/utils/build-env.d.ts.map +1 -1
  89. package/dist/utils/build-env.js +2 -1
  90. package/dist/utils/build-env.js.map +1 -1
  91. package/dist/utils/concurrency.d.ts.map +1 -1
  92. package/dist/utils/concurrency.js.map +1 -1
  93. package/dist/utils/copy-public.d.ts.map +1 -1
  94. package/dist/utils/copy-public.js +21 -21
  95. package/dist/utils/copy-public.js.map +1 -1
  96. package/dist/utils/copy-src.d.ts.map +1 -1
  97. package/dist/utils/copy-src.js +12 -12
  98. package/dist/utils/copy-src.js.map +1 -1
  99. package/dist/utils/diagnostic-utils.d.ts.map +1 -1
  100. package/dist/utils/diagnostic-utils.js +3 -2
  101. package/dist/utils/diagnostic-utils.js.map +1 -1
  102. package/dist/utils/engine-stop.d.ts.map +1 -1
  103. package/dist/utils/engine-stop.js.map +1 -1
  104. package/dist/utils/esbuild-config.d.ts.map +1 -1
  105. package/dist/utils/esbuild-config.js +2 -0
  106. package/dist/utils/esbuild-config.js.map +1 -1
  107. package/dist/utils/generate-pwa-icons.d.ts.map +1 -1
  108. package/dist/utils/generate-pwa-icons.js.map +1 -1
  109. package/dist/utils/hmr-candidates.d.ts.map +1 -1
  110. package/dist/utils/hmr-candidates.js.map +1 -1
  111. package/dist/utils/lint-utils.d.ts.map +1 -1
  112. package/dist/utils/lint-utils.js.map +1 -1
  113. package/dist/utils/lint-with-program.d.ts.map +1 -1
  114. package/dist/utils/lint-with-program.js +7 -3
  115. package/dist/utils/lint-with-program.js.map +1 -1
  116. package/dist/utils/ngtsc-build-core.d.ts +2 -10
  117. package/dist/utils/ngtsc-build-core.d.ts.map +1 -1
  118. package/dist/utils/ngtsc-build-core.js +16 -15
  119. package/dist/utils/ngtsc-build-core.js.map +1 -1
  120. package/dist/utils/orchestrator-utils.d.ts.map +1 -1
  121. package/dist/utils/orchestrator-utils.js.map +1 -1
  122. package/dist/utils/output-path-rewriter.d.ts.map +1 -1
  123. package/dist/utils/output-path-rewriter.js +7 -7
  124. package/dist/utils/output-path-rewriter.js.map +1 -1
  125. package/dist/utils/output-utils.d.ts.map +1 -1
  126. package/dist/utils/output-utils.js +1 -1
  127. package/dist/utils/output-utils.js.map +1 -1
  128. package/dist/utils/package-utils.d.ts +4 -0
  129. package/dist/utils/package-utils.d.ts.map +1 -1
  130. package/dist/utils/package-utils.js +34 -13
  131. package/dist/utils/package-utils.js.map +1 -1
  132. package/dist/utils/rebuild-manager.d.ts +1 -1
  133. package/dist/utils/rebuild-manager.d.ts.map +1 -1
  134. package/dist/utils/rebuild-manager.js +3 -1
  135. package/dist/utils/rebuild-manager.js.map +1 -1
  136. package/dist/utils/replace-deps.d.ts.map +1 -1
  137. package/dist/utils/replace-deps.js +10 -10
  138. package/dist/utils/replace-deps.js.map +1 -1
  139. package/dist/utils/scss-compiler.d.ts.map +1 -1
  140. package/dist/utils/scss-compiler.js.map +1 -1
  141. package/dist/utils/sd-config.d.ts.map +1 -1
  142. package/dist/utils/sd-config.js +2 -3
  143. package/dist/utils/sd-config.js.map +1 -1
  144. package/dist/utils/tsc-build.d.ts +3 -1
  145. package/dist/utils/tsc-build.d.ts.map +1 -1
  146. package/dist/utils/tsc-build.js +7 -4
  147. package/dist/utils/tsc-build.js.map +1 -1
  148. package/dist/utils/tsconfig.d.ts.map +1 -1
  149. package/dist/utils/tsconfig.js.map +1 -1
  150. package/dist/utils/typecheck-non-package.d.ts.map +1 -1
  151. package/dist/utils/typecheck-non-package.js +10 -5
  152. package/dist/utils/typecheck-non-package.js.map +1 -1
  153. package/dist/utils/typecheck-serialization.d.ts.map +1 -1
  154. package/dist/utils/typecheck-serialization.js.map +1 -1
  155. package/dist/utils/vite-config.d.ts.map +1 -1
  156. package/dist/utils/vite-config.js +2 -1
  157. package/dist/utils/vite-config.js.map +1 -1
  158. package/dist/utils/vite-scope-watch-plugin.d.ts.map +1 -1
  159. package/dist/utils/vite-scope-watch-plugin.js.map +1 -1
  160. package/dist/utils/worker-events.d.ts +1 -1
  161. package/dist/utils/worker-events.d.ts.map +1 -1
  162. package/dist/utils/worker-events.js +1 -0
  163. package/dist/utils/worker-events.js.map +1 -1
  164. package/dist/utils/worker-utils.d.ts +1 -1
  165. package/dist/utils/worker-utils.d.ts.map +1 -1
  166. package/dist/utils/worker-utils.js +3 -1
  167. package/dist/utils/worker-utils.js.map +1 -1
  168. package/dist/vitest-plugin.d.ts.map +1 -1
  169. package/dist/vitest-plugin.js +2 -0
  170. package/dist/vitest-plugin.js.map +1 -1
  171. package/dist/workers/client.worker.d.ts.map +1 -1
  172. package/dist/workers/client.worker.js +4 -0
  173. package/dist/workers/client.worker.js.map +1 -1
  174. package/dist/workers/library-build.worker.d.ts +2 -10
  175. package/dist/workers/library-build.worker.d.ts.map +1 -1
  176. package/dist/workers/library-build.worker.js +38 -14
  177. package/dist/workers/library-build.worker.js.map +1 -1
  178. package/dist/workers/lint.worker.d.ts.map +1 -1
  179. package/dist/workers/lint.worker.js.map +1 -1
  180. package/dist/workers/ngtsc-build.worker.d.ts.map +1 -1
  181. package/dist/workers/ngtsc-build.worker.js +40 -14
  182. package/dist/workers/ngtsc-build.worker.js.map +1 -1
  183. package/dist/workers/server-build.worker.d.ts +2 -10
  184. package/dist/workers/server-build.worker.d.ts.map +1 -1
  185. package/dist/workers/server-build.worker.js +30 -22
  186. package/dist/workers/server-build.worker.js.map +1 -1
  187. package/dist/workers/server-runtime.worker.d.ts.map +1 -1
  188. package/dist/workers/server-runtime.worker.js.map +1 -1
  189. package/package.json +4 -5
  190. package/src/angular/vite-angular-plugin.ts +18 -9
  191. package/src/capacitor/capacitor.ts +43 -44
  192. package/src/commands/check.ts +2 -2
  193. package/src/commands/publish.ts +12 -13
  194. package/src/commands/typecheck.ts +12 -12
  195. package/src/electron/electron.ts +44 -38
  196. package/src/engines/BaseEngine.ts +8 -19
  197. package/src/engines/NgtscEngine.ts +11 -11
  198. package/src/engines/ServerEsbuildEngine.ts +11 -11
  199. package/src/engines/TscEngine.ts +11 -11
  200. package/src/engines/ViteEngine.ts +3 -14
  201. package/src/engines/types.ts +3 -6
  202. package/src/infra/ResultCollector.ts +1 -1
  203. package/src/orchestrators/BuildOrchestrator.ts +31 -62
  204. package/src/orchestrators/DevWatchOrchestrator.ts +41 -44
  205. package/src/sd-cli-entry.ts +2 -12
  206. package/src/sd-cli.ts +8 -5
  207. package/src/utils/SdCliReporter.ts +177 -0
  208. package/src/utils/angular-compiler.ts +11 -4
  209. package/src/utils/build-env.ts +2 -1
  210. package/src/utils/copy-public.ts +21 -21
  211. package/src/utils/copy-src.ts +12 -12
  212. package/src/utils/diagnostic-utils.ts +3 -2
  213. package/src/utils/esbuild-config.ts +2 -0
  214. package/src/utils/lint-with-program.ts +7 -3
  215. package/src/utils/ngtsc-build-core.ts +18 -18
  216. package/src/utils/output-path-rewriter.ts +7 -7
  217. package/src/utils/output-utils.ts +1 -1
  218. package/src/utils/package-utils.ts +37 -13
  219. package/src/utils/rebuild-manager.ts +4 -2
  220. package/src/utils/replace-deps.ts +10 -10
  221. package/src/utils/sd-config.ts +2 -3
  222. package/src/utils/tsc-build.ts +9 -4
  223. package/src/utils/typecheck-non-package.ts +10 -5
  224. package/src/utils/vite-config.ts +2 -1
  225. package/src/utils/worker-events.ts +2 -1
  226. package/src/utils/worker-utils.ts +3 -1
  227. package/src/vitest-plugin.ts +5 -0
  228. package/src/workers/client.worker.ts +4 -0
  229. package/src/workers/library-build.worker.ts +48 -18
  230. package/src/workers/ngtsc-build.worker.ts +48 -13
  231. package/src/workers/server-build.worker.ts +32 -26
  232. package/tests/angular/vite-angular-plugin-hmr-fallback.spec.ts +11 -7
  233. package/tests/angular/vite-angular-plugin-lint.spec.ts +6 -1
  234. package/tests/capacitor/capacitor-build.spec.ts +14 -7
  235. package/tests/capacitor/capacitor-icon.spec.ts +14 -7
  236. package/tests/capacitor/capacitor-init.spec.ts +13 -6
  237. package/tests/capacitor/capacitor-run.spec.ts +18 -11
  238. package/tests/capacitor/capacitor-workspace.spec.ts +13 -6
  239. package/tests/commands/check.spec.ts +5 -2
  240. package/tests/commands/publish.spec.ts +4 -4
  241. package/tests/commands/typecheck.spec.ts +20 -31
  242. package/tests/electron/electron.spec.ts +32 -23
  243. package/tests/engines/base-engine.spec.ts +15 -21
  244. package/tests/engines/engine-lint-integration.spec.ts +5 -10
  245. package/tests/engines/ngtsc-engine.spec.ts +27 -41
  246. package/tests/engines/server-esbuild-engine.spec.ts +18 -29
  247. package/tests/engines/tsc-engine.spec.ts +14 -23
  248. package/tests/engines/vite-engine.spec.ts +10 -15
  249. package/tests/infra/result-collector.spec.ts +2 -2
  250. package/tests/orchestrators/build-orchestrator.spec.ts +19 -29
  251. package/tests/orchestrators/dev-watch-orchestrator.spec.ts +110 -95
  252. package/tests/utils/copy-src.spec.ts +25 -19
  253. package/tests/utils/diagnostic-utils.spec.ts +72 -0
  254. package/tests/utils/ngtsc-build-core-angular-compiler.spec.ts +2 -3
  255. package/tests/utils/output-path-rewriter.spec.ts +7 -6
  256. package/tests/utils/output-utils.spec.ts +5 -5
  257. package/tests/utils/rebuild-manager.spec.ts +1 -1
  258. package/tests/utils/sd-config.spec.ts +4 -0
  259. package/tests/utils/tsc-build.spec.ts +23 -5
  260. package/tests/workers/library-build-worker.spec.ts +113 -20
  261. package/tests/workers/ngtsc-build-lint.spec.ts +3 -6
  262. package/tests/workers/ngtsc-build-worker.spec.ts +11 -13
  263. package/tests/workers/server-build-lint.spec.ts +4 -1
  264. package/tests/workers/server-build-worker.spec.ts +25 -25
  265. package/tests/angular/migration-cleanup.spec.ts +0 -59
@@ -63,8 +63,7 @@ describe("NgtscEngine", () => {
63
63
  // Acceptance: Scenario "run()으로 one-time 빌드를 수행한다"
64
64
  it("creates worker, calls build, and returns EngineResult with js/dts", async () => {
65
65
  mockWorker.build.mockResolvedValue({
66
- js: { success: true, errors: undefined, warnings: undefined },
67
- dts: { success: true, errors: undefined, diagnostics: [] },
66
+ build: { success: true, errors: undefined, warnings: undefined, diagnostics: [] },
68
67
  });
69
68
 
70
69
  const engine = new NgtscEngine({ cwd: "/root", pkg: createMockPkg() });
@@ -80,17 +79,15 @@ describe("NgtscEngine", () => {
80
79
  }),
81
80
  );
82
81
  expect(result.success).toBe(true);
83
- expect(result.js.success).toBe(true);
84
- expect(result.dts.success).toBe(true);
85
- expect(result.dts.diagnostics).toEqual([]);
82
+ expect(result.build.success).toBe(true);
83
+ expect(result.build.diagnostics).toEqual([]);
86
84
  await engine.stop();
87
85
  });
88
86
 
89
87
  // Acceptance: Scenario "run()에서 dts: false면 .d.ts를 생략한다"
90
88
  it("passes dts:false output flag to worker", async () => {
91
89
  mockWorker.build.mockResolvedValue({
92
- js: { success: true, errors: undefined, warnings: undefined },
93
- dts: { success: true, errors: undefined, diagnostics: [] },
90
+ build: { success: true, errors: undefined, warnings: undefined, diagnostics: [] },
94
91
  });
95
92
 
96
93
  const engine = new NgtscEngine({ cwd: "/root", pkg: createMockPkg() });
@@ -105,10 +102,10 @@ describe("NgtscEngine", () => {
105
102
  // Acceptance: Scenario "TypeScript + Angular diagnostics를 통합 수집한다"
106
103
  it("includes diagnostics in result from worker", async () => {
107
104
  mockWorker.build.mockResolvedValue({
108
- js: { success: true, errors: undefined, warnings: undefined },
109
- dts: {
105
+ build: {
110
106
  success: false,
111
107
  errors: ["type error"],
108
+ warnings: undefined,
112
109
  diagnostics: [{ code: 2322, category: 1, messageText: "Type error" }],
113
110
  },
114
111
  });
@@ -116,19 +113,19 @@ describe("NgtscEngine", () => {
116
113
  const engine = new NgtscEngine({ cwd: "/root", pkg: createMockPkg() });
117
114
  const result = await engine.run({ js: true, dts: true });
118
115
 
119
- expect(result.dts.success).toBe(false);
120
- expect(result.dts.diagnostics).toHaveLength(1);
121
- expect(result.dts.diagnostics[0].code).toBe(2322);
116
+ expect(result.build.success).toBe(false);
117
+ expect(result.build.diagnostics).toHaveLength(1);
118
+ expect(result.build.diagnostics[0].code).toBe(2322);
122
119
  await engine.stop();
123
120
  });
124
121
 
125
122
  // Acceptance: Scenario "타입 에러가 있어도 빌드 결과를 반환한다"
126
- it("returns result even when dts has errors", async () => {
123
+ it("returns result even when build has errors", async () => {
127
124
  mockWorker.build.mockResolvedValue({
128
- js: { success: true, errors: undefined, warnings: undefined },
129
- dts: {
125
+ build: {
130
126
  success: false,
131
127
  errors: ["TS2322: Type error"],
128
+ warnings: undefined,
132
129
  diagnostics: [{ code: 2322, category: 1, messageText: "Type error" }],
133
130
  },
134
131
  });
@@ -137,40 +134,36 @@ describe("NgtscEngine", () => {
137
134
  const result = await engine.run({ js: true, dts: true });
138
135
 
139
136
  expect(result.success).toBe(false);
140
- expect(result.js.success).toBe(true);
141
- expect(result.dts.success).toBe(false);
142
- expect(result.dts.errors).toContain("TS2322: Type error");
137
+ expect(result.build.success).toBe(false);
138
+ expect(result.build.errors).toContain("TS2322: Type error");
143
139
  await engine.stop();
144
140
  });
145
141
 
146
- // Unit: JS-only failure reflects in overall success
147
- it("reflects JS build failure in result", async () => {
142
+ // Unit: build failure reflects in overall success
143
+ it("reflects build failure in result", async () => {
148
144
  mockWorker.build.mockResolvedValue({
149
- js: { success: false, errors: ["ngtsc compilation error"], warnings: undefined },
150
- dts: { success: true, errors: undefined, diagnostics: [] },
145
+ build: { success: false, errors: ["ngtsc compilation error"], warnings: undefined, diagnostics: [] },
151
146
  });
152
147
 
153
148
  const engine = new NgtscEngine({ cwd: "/root", pkg: createMockPkg() });
154
149
  const result = await engine.run({ js: true, dts: true });
155
150
 
156
151
  expect(result.success).toBe(false);
157
- expect(result.js.success).toBe(false);
158
- expect(result.js.errors).toEqual(["ngtsc compilation error"]);
159
- expect(result.dts.success).toBe(true);
152
+ expect(result.build.success).toBe(false);
153
+ expect(result.build.errors).toEqual(["ngtsc compilation error"]);
160
154
  await engine.stop();
161
155
  });
162
156
 
163
157
  // Unit: warnings are mapped through
164
158
  it("maps worker warnings to EngineResult", async () => {
165
159
  mockWorker.build.mockResolvedValue({
166
- js: { success: true, errors: undefined, warnings: ["deprecation warning"] },
167
- dts: { success: true, errors: undefined, diagnostics: [] },
160
+ build: { success: true, errors: undefined, warnings: ["deprecation warning"], diagnostics: [] },
168
161
  });
169
162
 
170
163
  const engine = new NgtscEngine({ cwd: "/root", pkg: createMockPkg() });
171
164
  const result = await engine.run({ js: true, dts: true });
172
165
 
173
- expect(result.js.warnings).toEqual(["deprecation warning"]);
166
+ expect(result.build.warnings).toEqual(["deprecation warning"]);
174
167
  await engine.stop();
175
168
  });
176
169
  });
@@ -179,8 +172,7 @@ describe("NgtscEngine", () => {
179
172
  // Acceptance: Scenario "stop()으로 리소스를 정리한다"
180
173
  it("terminates worker on stop", async () => {
181
174
  mockWorker.build.mockResolvedValue({
182
- js: { success: true, errors: undefined, warnings: undefined },
183
- dts: { success: true, errors: undefined, diagnostics: [] },
175
+ build: { success: true, errors: undefined, warnings: undefined, diagnostics: [] },
184
176
  });
185
177
 
186
178
  const engine = new NgtscEngine({ cwd: "/root", pkg: createMockPkg() });
@@ -198,8 +190,7 @@ describe("NgtscEngine", () => {
198
190
  // Unit: run mode doesn't call stopWatch
199
191
  it("skips stopWatch in run mode", async () => {
200
192
  mockWorker.build.mockResolvedValue({
201
- js: { success: true, errors: undefined, warnings: undefined },
202
- dts: { success: true, errors: undefined, diagnostics: [] },
193
+ build: { success: true, errors: undefined, warnings: undefined, diagnostics: [] },
203
194
  });
204
195
 
205
196
  const engine = new NgtscEngine({ cwd: "/root", pkg: createMockPkg() });
@@ -219,8 +210,7 @@ describe("NgtscEngine", () => {
219
210
  (call: any[]) => call[0] === "build",
220
211
  )?.[1];
221
212
  buildHandler?.({
222
- js: { success: true },
223
- dts: { success: true },
213
+ build: { success: true },
224
214
  });
225
215
  });
226
216
 
@@ -238,7 +228,7 @@ describe("NgtscEngine", () => {
238
228
  });
239
229
 
240
230
  // Unit: watch mode results reported to ResultCollector
241
- it("reports build and dts results separately to ResultCollector", async () => {
231
+ it("reports build result to ResultCollector", async () => {
242
232
  const mockResultCollector = { add: vi.fn() };
243
233
 
244
234
  mockWorker.startWatch.mockImplementation(() => {
@@ -246,8 +236,7 @@ describe("NgtscEngine", () => {
246
236
  (call: any[]) => call[0] === "build",
247
237
  )?.[1];
248
238
  buildHandler?.({
249
- js: { success: true, errors: undefined },
250
- dts: { success: false, errors: ["type error"] },
239
+ build: { success: false, errors: ["type error"] },
251
240
  });
252
241
  });
253
242
 
@@ -261,12 +250,9 @@ describe("NgtscEngine", () => {
261
250
 
262
251
  const addCalls = mockResultCollector.add.mock.calls;
263
252
  const buildResult = addCalls.find((c: any[]) => c[0].type === "build");
264
- const dtsResult = addCalls.find((c: any[]) => c[0].type === "dts");
265
253
 
266
254
  expect(buildResult).toBeDefined();
267
- expect(buildResult![0].status).toBe("success");
268
- expect(dtsResult).toBeDefined();
269
- expect(dtsResult![0].status).toBe("error");
255
+ expect(buildResult![0].status).toBe("error");
270
256
 
271
257
  await engine.stop();
272
258
  });
@@ -52,8 +52,7 @@ function createMockPkg(overrides: Partial<ServerPackageInfo> = {}): ServerPackag
52
52
 
53
53
  function setupDefaultBuildResult(): void {
54
54
  mockWorker.build.mockResolvedValue({
55
- js: { success: true, errors: undefined, warnings: undefined },
56
- dts: { success: true, errors: undefined, diagnostics: [] },
55
+ build: { success: true, errors: undefined, warnings: undefined, diagnostics: [] },
57
56
  mainJsPath: "/packages/test-server/dist/main.js",
58
57
  });
59
58
  mockWorker.terminate.mockResolvedValue(undefined);
@@ -91,16 +90,14 @@ describe("ServerEsbuildEngine", () => {
91
90
  }),
92
91
  );
93
92
  expect(result.success).toBe(true);
94
- expect(result.js.success).toBe(true);
95
- expect(result.dts.success).toBe(true);
93
+ expect(result.build.success).toBe(true);
96
94
  await engine.stop();
97
95
  });
98
96
 
99
97
  // Acceptance: maps ServerBuildResult to EngineResult
100
- it("maps worker result to EngineResult with js/dts separation", async () => {
98
+ it("maps worker result to EngineResult with build field", async () => {
101
99
  mockWorker.build.mockResolvedValue({
102
- js: { success: true, errors: undefined, warnings: ["warn1"] },
103
- dts: { success: false, errors: ["type error"], diagnostics: [{ code: 2345, category: 1 }] },
100
+ build: { success: false, errors: ["type error"], warnings: ["warn1"], diagnostics: [{ code: 2345, category: 1 }] },
104
101
  mainJsPath: "/packages/test-server/dist/main.js",
105
102
  });
106
103
 
@@ -108,17 +105,16 @@ describe("ServerEsbuildEngine", () => {
108
105
  const result = await engine.run({ js: true, dts: false });
109
106
 
110
107
  expect(result.success).toBe(false);
111
- expect(result.js.warnings).toEqual(["warn1"]);
112
- expect(result.dts.success).toBe(false);
113
- expect(result.dts.diagnostics).toEqual([{ code: 2345, category: 1 }]);
108
+ expect(result.build.warnings).toEqual(["warn1"]);
109
+ expect(result.build.success).toBe(false);
110
+ expect(result.build.diagnostics).toEqual([{ code: 2345, category: 1 }]);
114
111
  await engine.stop();
115
112
  });
116
113
 
117
- // Unit: JS failure
118
- it("reflects JS build failure in result", async () => {
114
+ // Unit: build failure
115
+ it("reflects build failure in result", async () => {
119
116
  mockWorker.build.mockResolvedValue({
120
- js: { success: false, errors: ["esbuild error"], warnings: undefined },
121
- dts: { success: true, errors: undefined, diagnostics: [] },
117
+ build: { success: false, errors: ["esbuild error"], warnings: undefined, diagnostics: [] },
122
118
  mainJsPath: "/packages/test-server/dist/main.js",
123
119
  });
124
120
 
@@ -126,9 +122,8 @@ describe("ServerEsbuildEngine", () => {
126
122
  const result = await engine.run({ js: true, dts: false });
127
123
 
128
124
  expect(result.success).toBe(false);
129
- expect(result.js.success).toBe(false);
130
- expect(result.js.errors).toEqual(["esbuild error"]);
131
- expect(result.dts.success).toBe(true);
125
+ expect(result.build.success).toBe(false);
126
+ expect(result.build.errors).toEqual(["esbuild error"]);
132
127
  await engine.stop();
133
128
  });
134
129
  });
@@ -141,8 +136,7 @@ describe("ServerEsbuildEngine", () => {
141
136
  (call: any[]) => call[0] === "build",
142
137
  )?.[1];
143
138
  buildHandler?.({
144
- js: { success: true },
145
- dts: { success: true },
139
+ build: { success: true },
146
140
  mainJsPath: "/packages/test-server/dist/main.js",
147
141
  });
148
142
  });
@@ -158,7 +152,7 @@ describe("ServerEsbuildEngine", () => {
158
152
  });
159
153
 
160
154
  // Acceptance: reports to ResultCollector
161
- it("reports build and dts results separately to ResultCollector", async () => {
155
+ it("reports build result to ResultCollector", async () => {
162
156
  const mockResultCollector = { add: vi.fn() };
163
157
 
164
158
  mockWorker.startWatch.mockImplementation(() => {
@@ -166,8 +160,7 @@ describe("ServerEsbuildEngine", () => {
166
160
  (call: any[]) => call[0] === "build",
167
161
  )?.[1];
168
162
  buildHandler?.({
169
- js: { success: true, errors: undefined },
170
- dts: { success: false, errors: ["type error"] },
163
+ build: { success: false, errors: ["type error"] },
171
164
  mainJsPath: "/packages/test-server/dist/main.js",
172
165
  });
173
166
  });
@@ -182,12 +175,9 @@ describe("ServerEsbuildEngine", () => {
182
175
 
183
176
  const addCalls = mockResultCollector.add.mock.calls;
184
177
  const buildResult = addCalls.find((c: any[]) => c[0].type === "build");
185
- const dtsResult = addCalls.find((c: any[]) => c[0].type === "dts");
186
178
 
187
179
  expect(buildResult).toBeDefined();
188
- expect(buildResult![0].status).toBe("success");
189
- expect(dtsResult).toBeDefined();
190
- expect(dtsResult![0].status).toBe("error");
180
+ expect(buildResult![0].status).toBe("error");
191
181
 
192
182
  await engine.stop();
193
183
  });
@@ -199,8 +189,7 @@ describe("ServerEsbuildEngine", () => {
199
189
  (call: any[]) => call[0] === "build",
200
190
  )?.[1];
201
191
  buildHandler?.({
202
- js: { success: true },
203
- dts: { success: true },
192
+ build: { success: true },
204
193
  mainJsPath: "/packages/test-server/dist/main.js",
205
194
  });
206
195
  });
@@ -228,7 +217,7 @@ describe("ServerEsbuildEngine", () => {
228
217
  const buildHandler = mockWorker.on.mock.calls.find(
229
218
  (call: any[]) => call[0] === "build",
230
219
  )?.[1];
231
- buildHandler?.({ js: { success: true }, dts: { success: true }, mainJsPath: "x" });
220
+ buildHandler?.({ build: { success: true }, mainJsPath: "x" });
232
221
  });
233
222
 
234
223
  const engine = new ServerEsbuildEngine({ cwd: "/root", pkg: createMockPkg() });
@@ -45,8 +45,7 @@ function createMockPkg(overrides: Partial<BuildPackageInfo> = {}): BuildPackageI
45
45
 
46
46
  function setupDefaultBuildResult(): void {
47
47
  mockWorker.build.mockResolvedValue({
48
- js: { success: true, errors: undefined, warnings: undefined },
49
- dts: { success: true, errors: undefined, diagnostics: [] },
48
+ build: { success: true, errors: undefined, warnings: undefined, diagnostics: [] },
50
49
  });
51
50
  mockWorker.terminate.mockResolvedValue(undefined);
52
51
  mockWorker.stopWatch.mockResolvedValue(undefined);
@@ -77,37 +76,34 @@ describe("TscEngine", () => {
77
76
  }),
78
77
  );
79
78
  expect(result.success).toBe(true);
80
- expect(result.js.success).toBe(true);
81
- expect(result.dts.success).toBe(true);
79
+ expect(result.build.success).toBe(true);
82
80
  await engine.stop();
83
81
  });
84
82
 
85
- it("maps worker result to EngineResult with js/dts separation", async () => {
83
+ it("maps worker result to EngineResult with build field", async () => {
86
84
  mockWorker.build.mockResolvedValue({
87
- js: { success: true, errors: undefined, warnings: ["warn1"] },
88
- dts: { success: true, errors: undefined, diagnostics: [{ code: 1, category: 0 }] },
85
+ build: { success: true, errors: undefined, warnings: ["warn1"], diagnostics: [{ code: 1, category: 0 }] },
89
86
  });
90
87
 
91
88
  const engine = new TscEngine({ cwd: "/root", pkg: createMockPkg() });
92
89
  const result = await engine.run({ js: true, dts: true });
93
90
 
94
- expect(result.js.warnings).toEqual(["warn1"]);
95
- expect(result.dts.diagnostics).toEqual([{ code: 1, category: 0 }]);
91
+ expect(result.build.warnings).toEqual(["warn1"]);
92
+ expect(result.build.diagnostics).toEqual([{ code: 1, category: 0 }]);
96
93
  await engine.stop();
97
94
  });
98
95
 
99
96
  it("reflects failure when tsc reports errors", async () => {
100
97
  mockWorker.build.mockResolvedValue({
101
- js: { success: false, errors: ["type error"], warnings: undefined },
102
- dts: { success: false, errors: ["type error"], diagnostics: [{ code: 2322, category: 1 }] },
98
+ build: { success: false, errors: ["type error"], warnings: undefined, diagnostics: [{ code: 2322, category: 1 }] },
103
99
  });
104
100
 
105
101
  const engine = new TscEngine({ cwd: "/root", pkg: createMockPkg() });
106
102
  const result = await engine.run({ js: true, dts: true });
107
103
 
108
104
  expect(result.success).toBe(false);
109
- expect(result.js.errors).toEqual(["type error"]);
110
- expect(result.dts.diagnostics).toHaveLength(1);
105
+ expect(result.build.errors).toEqual(["type error"]);
106
+ expect(result.build.diagnostics).toHaveLength(1);
111
107
  await engine.stop();
112
108
  });
113
109
 
@@ -129,8 +125,7 @@ describe("TscEngine", () => {
129
125
  (call: any[]) => call[0] === "build",
130
126
  )?.[1];
131
127
  buildHandler?.({
132
- js: { success: true },
133
- dts: { success: true },
128
+ build: { success: true },
134
129
  });
135
130
  });
136
131
 
@@ -144,7 +139,7 @@ describe("TscEngine", () => {
144
139
  await engine.stop();
145
140
  });
146
141
 
147
- it("reports build and dts results separately to ResultCollector", async () => {
142
+ it("reports build result to ResultCollector", async () => {
148
143
  const mockResultCollector = { add: vi.fn() };
149
144
 
150
145
  mockWorker.startWatch.mockImplementation(() => {
@@ -152,8 +147,7 @@ describe("TscEngine", () => {
152
147
  (call: any[]) => call[0] === "build",
153
148
  )?.[1];
154
149
  buildHandler?.({
155
- js: { success: true, errors: undefined },
156
- dts: { success: false, errors: ["type error"] },
150
+ build: { success: false, errors: ["type error"] },
157
151
  });
158
152
  });
159
153
 
@@ -167,12 +161,9 @@ describe("TscEngine", () => {
167
161
 
168
162
  const addCalls = mockResultCollector.add.mock.calls;
169
163
  const buildResult = addCalls.find((c: any[]) => c[0].type === "build");
170
- const dtsResult = addCalls.find((c: any[]) => c[0].type === "dts");
171
164
 
172
165
  expect(buildResult).toBeDefined();
173
- expect(buildResult![0].status).toBe("success");
174
- expect(dtsResult).toBeDefined();
175
- expect(dtsResult![0].status).toBe("error");
166
+ expect(buildResult![0].status).toBe("error");
176
167
 
177
168
  await engine.stop();
178
169
  });
@@ -185,7 +176,7 @@ describe("TscEngine", () => {
185
176
  const buildHandler = mockWorker.on.mock.calls.find(
186
177
  (call: any[]) => call[0] === "build",
187
178
  )?.[1];
188
- buildHandler?.({ js: { success: true }, dts: { success: true } });
179
+ buildHandler?.({ build: { success: true } });
189
180
  });
190
181
 
191
182
  const engine = new TscEngine({ cwd: "/root", pkg: createMockPkg() });
@@ -75,10 +75,9 @@ describe("ViteEngine", () => {
75
75
  }),
76
76
  );
77
77
  expect(result.success).toBe(true);
78
- expect(result.js.success).toBe(true);
79
- expect(result.js.errors).toEqual([]);
80
- expect(result.dts.success).toBe(true);
81
- expect(result.dts.diagnostics).toEqual([]);
78
+ expect(result.build.success).toBe(true);
79
+ expect(result.build.errors).toEqual([]);
80
+ expect(result.build.diagnostics).toEqual([]);
82
81
  await engine.stop();
83
82
  });
84
83
 
@@ -93,8 +92,8 @@ describe("ViteEngine", () => {
93
92
  const result = await engine.run({ js: true, dts: false });
94
93
 
95
94
  expect(result.success).toBe(false);
96
- expect(result.js.success).toBe(false);
97
- expect(result.js.errors).toContain("TS2345: Argument of type...");
95
+ expect(result.build.success).toBe(false);
96
+ expect(result.build.errors).toContain("TS2345: Argument of type...");
98
97
  await engine.stop();
99
98
  });
100
99
 
@@ -108,7 +107,7 @@ describe("ViteEngine", () => {
108
107
  const engine = new ViteEngine({ cwd: "/root", pkg: createMockPkg() });
109
108
  const result = await engine.run({ js: true, dts: false });
110
109
 
111
- expect(result.js.warnings).toEqual(["deprecation warning"]);
110
+ expect(result.build.warnings).toEqual(["deprecation warning"]);
112
111
  await engine.stop();
113
112
  });
114
113
 
@@ -192,8 +191,8 @@ describe("ViteEngine", () => {
192
191
  await engine.stop();
193
192
  });
194
193
 
195
- // Unit: dts is always success for client packages
196
- it("always returns dts success regardless of build outcome", async () => {
194
+ // Unit: build failure reflects in result
195
+ it("reflects build failure in result", async () => {
197
196
  mockWorker.build.mockResolvedValue({
198
197
  success: false,
199
198
  errors: ["error"],
@@ -202,8 +201,7 @@ describe("ViteEngine", () => {
202
201
  const engine = new ViteEngine({ cwd: "/root", pkg: createMockPkg() });
203
202
  const result = await engine.run({ js: true, dts: false });
204
203
 
205
- expect(result.dts.success).toBe(true);
206
- expect(result.dts.diagnostics).toEqual([]);
204
+ expect(result.build.success).toBe(false);
207
205
  await engine.stop();
208
206
  });
209
207
  });
@@ -268,7 +266,7 @@ describe("ViteEngine", () => {
268
266
  });
269
267
 
270
268
  // Acceptance: Scenario "ResultCollector에 결과 보고"
271
- it("reports build and dts results to ResultCollector", async () => {
269
+ it("reports build result to ResultCollector", async () => {
272
270
  const mockResultCollector = { add: vi.fn() };
273
271
 
274
272
  mockWorker.startWatch.mockResolvedValue({ success: true });
@@ -283,12 +281,9 @@ describe("ViteEngine", () => {
283
281
 
284
282
  const addCalls = mockResultCollector.add.mock.calls;
285
283
  const buildResult = addCalls.find((c: any[]) => c[0].type === "build");
286
- const dtsResult = addCalls.find((c: any[]) => c[0].type === "dts");
287
284
 
288
285
  expect(buildResult).toBeDefined();
289
286
  expect(buildResult![0].status).toBe("success");
290
- expect(dtsResult).toBeDefined();
291
- expect(dtsResult![0].status).toBe("success");
292
287
 
293
288
  await engine.stop();
294
289
  });
@@ -23,12 +23,12 @@ describe("ResultCollector", () => {
23
23
  it("returns all results via toMap", () => {
24
24
  const collector = new ResultCollector();
25
25
  collector.add({ name: "core", target: "node", type: "build", status: "success" });
26
- collector.add({ name: "core", target: "node", type: "dts", status: "building" });
26
+ collector.add({ name: "core", target: "node", type: "lint", status: "building" });
27
27
 
28
28
  const map = collector.toMap();
29
29
  expect(map.size).toBe(2);
30
30
  expect(map.has("core:build")).toBe(true);
31
- expect(map.has("core:dts")).toBe(true);
31
+ expect(map.has("core:lint")).toBe(true);
32
32
  });
33
33
 
34
34
  it("returns undefined for non-existent key", () => {
@@ -51,6 +51,9 @@ vi.mock("@simplysm/core-node", () => ({
51
51
  fsx: {
52
52
  rm: vi.fn().mockResolvedValue(undefined),
53
53
  },
54
+ pathx: {
55
+ posixResolve: vi.fn((...args: string[]) => args.join("/").replace(/\\/g, "/")),
56
+ },
54
57
  }));
55
58
 
56
59
  const mockEngines: Array<{
@@ -64,8 +67,7 @@ vi.mock("../../src/engines/index", () => ({
64
67
  const engine = {
65
68
  run: vi.fn().mockResolvedValue({
66
69
  success: true,
67
- js: { success: true, errors: [], warnings: [] },
68
- dts: { success: true, errors: [], warnings: [], diagnostics: [] },
70
+ build: { success: true, errors: [], warnings: [], diagnostics: [] },
69
71
  }),
70
72
  startWatch: vi.fn().mockResolvedValue(undefined),
71
73
  stop: vi.fn().mockResolvedValue(undefined),
@@ -158,8 +160,7 @@ beforeEach(() => {
158
160
  const engine = {
159
161
  run: vi.fn().mockResolvedValue({
160
162
  success: true,
161
- js: { success: true, errors: [], warnings: [] },
162
- dts: { success: true, errors: [], warnings: [], diagnostics: [] },
163
+ build: { success: true, errors: [], warnings: [], diagnostics: [] },
163
164
 
164
165
  }),
165
166
  startWatch: vi.fn().mockResolvedValue(undefined),
@@ -413,8 +414,7 @@ describe("BuildOrchestrator.start", () => {
413
414
  vi.mocked(createBuildEngine).mockReturnValue({
414
415
  run: vi.fn().mockResolvedValue({
415
416
  success: false,
416
- js: { success: false, errors: ["Module not found"], warnings: [] },
417
- dts: { success: true, errors: [], warnings: [], diagnostics: [] },
417
+ build: { success: false, errors: ["Module not found"], warnings: [], diagnostics: [] },
418
418
  }),
419
419
  startWatch: vi.fn(),
420
420
  stop: vi.fn().mockResolvedValue(undefined),
@@ -464,8 +464,7 @@ describe("BuildOrchestrator.start", () => {
464
464
  active--;
465
465
  return {
466
466
  success: true,
467
- js: { success: true, errors: [], warnings: [] },
468
- dts: { success: true, errors: [], warnings: [], diagnostics: [] },
467
+ build: { success: true, errors: [], warnings: [], diagnostics: [] },
469
468
  };
470
469
  }),
471
470
  startWatch: vi.fn(),
@@ -498,8 +497,7 @@ describe("BuildOrchestrator.start", () => {
498
497
  vi.mocked(createBuildEngine).mockReturnValue({
499
498
  run: vi.fn().mockResolvedValue({
500
499
  success: true,
501
- js: { success: true, errors: [], warnings: ["Unused variable"] },
502
- dts: { success: true, errors: [], warnings: [], diagnostics: [] },
500
+ build: { success: true, errors: [], warnings: ["Unused variable"], diagnostics: [] },
503
501
  }),
504
502
  startWatch: vi.fn(),
505
503
  stop: vi.fn().mockResolvedValue(undefined),
@@ -606,8 +604,7 @@ describe("BuildOrchestrator client build", () => {
606
604
  vi.mocked(createBuildEngine).mockReturnValue({
607
605
  run: vi.fn().mockResolvedValue({
608
606
  success: true,
609
- js: { success: true, errors: [], warnings: [] },
610
- dts: { success: true, errors: [], warnings: [], diagnostics: [] },
607
+ build: { success: true, errors: [], warnings: [], diagnostics: [] },
611
608
  }),
612
609
  startWatch: vi.fn(),
613
610
  stop: vi.fn().mockResolvedValue(undefined),
@@ -641,8 +638,7 @@ describe("BuildOrchestrator client build", () => {
641
638
  vi.mocked(createBuildEngine).mockReturnValue({
642
639
  run: vi.fn().mockResolvedValue({
643
640
  success: false,
644
- js: { success: false, errors: ["Template error"], warnings: [] },
645
- dts: { success: true, errors: [], warnings: [], diagnostics: [] },
641
+ build: { success: false, errors: ["Template error"], warnings: [], diagnostics: [] },
646
642
  }),
647
643
  startWatch: vi.fn(),
648
644
  stop: vi.fn().mockResolvedValue(undefined),
@@ -962,8 +958,7 @@ describe("BuildOrchestrator native build integration (Slice 1)", () => {
962
958
  vi.mocked(createBuildEngine).mockReturnValue({
963
959
  run: vi.fn().mockResolvedValue({
964
960
  success: false,
965
- js: { success: false, errors: ["Build error"], warnings: [] },
966
- dts: { success: true, errors: [], warnings: [], diagnostics: [] },
961
+ build: { success: false, errors: ["Build error"], warnings: [], diagnostics: [] },
967
962
  }),
968
963
  startWatch: vi.fn(),
969
964
  stop: vi.fn().mockResolvedValue(undefined),
@@ -1032,8 +1027,7 @@ describe("BuildOrchestrator lint integration", () => {
1032
1027
  vi.mocked(createBuildEngine).mockReturnValue({
1033
1028
  run: vi.fn().mockResolvedValue({
1034
1029
  success: true,
1035
- js: { success: true, errors: [], warnings: [] },
1036
- dts: { success: true, errors: [], warnings: [], diagnostics: [] },
1030
+ build: { success: true, errors: [], warnings: [], diagnostics: [] },
1037
1031
  lint: { success: false, errorCount: 3, warningCount: 0, formattedOutput: "lint errors here" },
1038
1032
  }),
1039
1033
  startWatch: vi.fn(),
@@ -1080,8 +1074,7 @@ describe("Feature 2.1: build에서 lint 에러가 'lint' 라벨로 출력", () =
1080
1074
  vi.mocked(createBuildEngine).mockReturnValue({
1081
1075
  run: vi.fn().mockResolvedValue({
1082
1076
  success: true,
1083
- js: { success: true, errors: [], warnings: [] },
1084
- dts: { success: true, errors: [], warnings: [], diagnostics: [] },
1077
+ build: { success: true, errors: [], warnings: [], diagnostics: [] },
1085
1078
  lint: { success: false, errorCount: 1, warningCount: 0, formattedOutput: "no-unused-vars" },
1086
1079
  }),
1087
1080
  startWatch: vi.fn(),
@@ -1109,8 +1102,7 @@ describe("Feature 2.1: build에서 lint 에러가 'lint' 라벨로 출력", () =
1109
1102
  vi.mocked(createBuildEngine).mockReturnValue({
1110
1103
  run: vi.fn().mockResolvedValue({
1111
1104
  success: false,
1112
- js: { success: false, errors: ["Module not found"], warnings: [] },
1113
- dts: { success: true, errors: [], warnings: [], diagnostics: [] },
1105
+ build: { success: false, errors: ["Module not found"], warnings: [], diagnostics: [] },
1114
1106
  }),
1115
1107
  startWatch: vi.fn(),
1116
1108
  stop: vi.fn().mockResolvedValue(undefined),
@@ -1126,7 +1118,7 @@ describe("Feature 2.1: build에서 lint 에러가 'lint' 라벨로 출력", () =
1126
1118
  expect(jsCall).toBeDefined();
1127
1119
  });
1128
1120
 
1129
- it("build에서 DTS 에러는 'dts' 라벨 유지", async () => {
1121
+ it("build에서 빌드 에러는 target 라벨 유지", async () => {
1130
1122
  setupDefaults({
1131
1123
  packages: {
1132
1124
  "core-common": { target: "neutral", publish: { type: "npm" } },
@@ -1135,8 +1127,7 @@ describe("Feature 2.1: build에서 lint 에러가 'lint' 라벨로 출력", () =
1135
1127
  vi.mocked(createBuildEngine).mockReturnValue({
1136
1128
  run: vi.fn().mockResolvedValue({
1137
1129
  success: false,
1138
- js: { success: true, errors: [], warnings: [] },
1139
- dts: { success: false, errors: ["Type error"], warnings: [], diagnostics: [] },
1130
+ build: { success: false, errors: ["Type error"], warnings: [], diagnostics: [] },
1140
1131
  }),
1141
1132
  startWatch: vi.fn(),
1142
1133
  stop: vi.fn().mockResolvedValue(undefined),
@@ -1148,8 +1139,8 @@ describe("Feature 2.1: build에서 lint 에러가 'lint' 라벨로 출력", () =
1148
1139
 
1149
1140
  const { formatBuildMessages } = await import("../../src/utils/output-utils");
1150
1141
  const fmtCalls = vi.mocked(formatBuildMessages).mock.calls;
1151
- const dtsCall = fmtCalls.find((c) => c[1] === "dts");
1152
- expect(dtsCall).toBeDefined();
1142
+ const buildCall = fmtCalls.find((c) => c[1] === "neutral");
1143
+ expect(buildCall).toBeDefined();
1153
1144
  });
1154
1145
 
1155
1146
  it("build에서 lint 성공 시 에러 출력 없음", async () => {
@@ -1161,8 +1152,7 @@ describe("Feature 2.1: build에서 lint 에러가 'lint' 라벨로 출력", () =
1161
1152
  vi.mocked(createBuildEngine).mockReturnValue({
1162
1153
  run: vi.fn().mockResolvedValue({
1163
1154
  success: true,
1164
- js: { success: true, errors: [], warnings: [] },
1165
- dts: { success: true, errors: [], warnings: [], diagnostics: [] },
1155
+ build: { success: true, errors: [], warnings: [], diagnostics: [] },
1166
1156
  lint: { success: true, errorCount: 0, warningCount: 0, formattedOutput: "" },
1167
1157
  }),
1168
1158
  startWatch: vi.fn(),