@simplysm/sd-cli 14.0.39 → 14.0.41
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.
- package/dist/angular/angular-build-pipeline.d.ts +1 -0
- package/dist/angular/angular-build-pipeline.d.ts.map +1 -1
- package/dist/angular/angular-build-pipeline.js +4 -0
- package/dist/angular/angular-build-pipeline.js.map +1 -1
- package/dist/angular/angular-compiler.d.ts +1 -0
- package/dist/angular/angular-compiler.d.ts.map +1 -1
- package/dist/angular/angular-compiler.js +3 -0
- package/dist/angular/angular-compiler.js.map +1 -1
- package/dist/dev-server/hmr-client-script.d.ts +2 -2
- package/dist/dev-server/hmr-client-script.d.ts.map +1 -1
- package/dist/dev-server/hmr-client-script.js +4 -4
- package/dist/dev-server/hmr-client-script.js.map +1 -1
- package/dist/esbuild/esbuild-client-config.js +1 -1
- package/dist/esbuild/esbuild-client-config.js.map +1 -1
- package/dist/lint/lint-core.d.ts +0 -1
- package/dist/lint/lint-core.d.ts.map +1 -1
- package/dist/lint/lint-core.js +0 -3
- package/dist/lint/lint-core.js.map +1 -1
- package/dist/lint/lint-with-program.d.ts +0 -1
- package/dist/lint/lint-with-program.d.ts.map +1 -1
- package/dist/lint/lint-with-program.js +3 -13
- package/dist/lint/lint-with-program.js.map +1 -1
- package/dist/workers/build-watch-paths.js +2 -2
- package/dist/workers/build-watch-paths.js.map +1 -1
- package/dist/workers/client.worker.d.ts.map +1 -1
- package/dist/workers/client.worker.js +65 -27
- package/dist/workers/client.worker.js.map +1 -1
- package/dist/workers/ngtsc-build.worker.d.ts.map +1 -1
- package/dist/workers/ngtsc-build.worker.js +8 -0
- package/dist/workers/ngtsc-build.worker.js.map +1 -1
- package/dist/workers/server-esbuild-context.d.ts.map +1 -1
- package/dist/workers/server-esbuild-context.js +14 -1
- package/dist/workers/server-esbuild-context.js.map +1 -1
- package/package.json +4 -4
- package/src/angular/angular-build-pipeline.ts +5 -0
- package/src/angular/angular-compiler.ts +4 -0
- package/src/dev-server/hmr-client-script.ts +4 -4
- package/src/esbuild/esbuild-client-config.ts +1 -1
- package/src/lint/lint-core.ts +0 -3
- package/src/lint/lint-with-program.ts +3 -14
- package/src/workers/build-watch-paths.ts +2 -2
- package/src/workers/client.worker.ts +67 -30
- package/src/workers/ngtsc-build.worker.ts +9 -0
- package/src/workers/server-esbuild-context.ts +13 -1
- package/tests/angular/angular-build-pipeline.spec.ts +66 -0
- package/tests/utils/angular-compiler.spec.ts +35 -0
- package/tests/utils/esbuild-client-config.acc.spec.ts +8 -6
- package/tests/utils/esbuild-client-config.spec.ts +6 -5
- package/tests/utils/hmr-client-script.acc.spec.ts +8 -8
- package/tests/utils/hmr-client-script.spec.ts +5 -5
- package/tests/utils/lint-core.spec.ts +2 -3
- package/tests/utils/lint-with-program.spec.ts +6 -29
- package/tests/workers/build-watch-paths.acc.spec.ts +2 -2
- package/tests/workers/build-watch-paths.spec.ts +23 -2
- package/tests/workers/ngtsc-build-rootnames-refresh.verify.md +8 -0
- package/tests/workers/server-esbuild-context.acc.spec.ts +32 -0
- package/tests/workers/server-esbuild-context.spec.ts +81 -0
|
@@ -236,6 +236,38 @@ describe("server-esbuild-context tsc integration lifecycle", () => {
|
|
|
236
236
|
});
|
|
237
237
|
});
|
|
238
238
|
|
|
239
|
+
// Acceptance: rebuild() reject 시 tsc 에러와 병합하여 정상 결과 반환
|
|
240
|
+
it("merges tsc errors when context.rebuild() rejects instead of propagating throw", async () => {
|
|
241
|
+
mockRebuild.mockResolvedValueOnce({
|
|
242
|
+
errors: [],
|
|
243
|
+
warnings: [],
|
|
244
|
+
outputFiles: [],
|
|
245
|
+
metafile: { inputs: { "src/main.ts": {} }, outputs: {} },
|
|
246
|
+
});
|
|
247
|
+
mockTscPlugin.getErrors.mockReturnValue(["TS2322: type mismatch"]);
|
|
248
|
+
|
|
249
|
+
await createContext({ ...baseOptions, tsc: baseTscOptions });
|
|
250
|
+
|
|
251
|
+
// 첫 빌드 성공 (metafile 설정)
|
|
252
|
+
await rebuild();
|
|
253
|
+
const savedMetafile = getMetafile();
|
|
254
|
+
expect(savedMetafile).toBeDefined();
|
|
255
|
+
|
|
256
|
+
// 두 번째 빌드 실패 — reject
|
|
257
|
+
mockRebuild.mockRejectedValueOnce(new Error("Build failed with 1 error"));
|
|
258
|
+
|
|
259
|
+
const result = await rebuild();
|
|
260
|
+
|
|
261
|
+
// throw 전파 대신 정상 결과 반환 — esbuild + tsc 에러 병합
|
|
262
|
+
expect(result).toEqual({
|
|
263
|
+
success: false,
|
|
264
|
+
errors: ["Build failed with 1 error", "TS2322: type mismatch"],
|
|
265
|
+
warnings: undefined,
|
|
266
|
+
});
|
|
267
|
+
// 이전 metafile 유지
|
|
268
|
+
expect(getMetafile()).toBe(savedMetafile);
|
|
269
|
+
});
|
|
270
|
+
|
|
239
271
|
// Acceptance: LOGIC-001 — recreateContext failure preserves tsc plugin reset
|
|
240
272
|
it("resets tsc and disposes old context even when recreateContext fails (LOGIC-001)", async () => {
|
|
241
273
|
await createContext({ ...baseOptions, tsc: baseTscOptions });
|
|
@@ -152,6 +152,87 @@ describe("rebuild", () => {
|
|
|
152
152
|
});
|
|
153
153
|
});
|
|
154
154
|
|
|
155
|
+
describe("rebuild — error handling on reject", () => {
|
|
156
|
+
afterEach(async () => {
|
|
157
|
+
mockRebuild.mockReset();
|
|
158
|
+
mockDispose.mockReset();
|
|
159
|
+
mockTscPlugin.getProgram.mockReset();
|
|
160
|
+
mockTscPlugin.getAffectedFiles.mockReset();
|
|
161
|
+
mockTscPlugin.getDiagnostics.mockReset().mockReturnValue([]);
|
|
162
|
+
mockTscPlugin.getErrors.mockReset();
|
|
163
|
+
mockTscPlugin.resetBuilderProgram.mockReset();
|
|
164
|
+
vi.mocked(esbuild.context).mockClear();
|
|
165
|
+
vi.mocked(writeChangedOutputFiles).mockClear();
|
|
166
|
+
vi.mocked(createTscPlugin).mockClear();
|
|
167
|
+
await dispose();
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
it("catches reject and returns merged esbuild + tsc errors", async () => {
|
|
171
|
+
mockRebuild.mockRejectedValue(new Error("Build failed"));
|
|
172
|
+
mockTscPlugin.getErrors.mockReturnValue(["type error"]);
|
|
173
|
+
|
|
174
|
+
await createContext({ ...baseOptions, tsc: { cwd: "/workspace", output: { dts: true } } });
|
|
175
|
+
const result = await rebuild();
|
|
176
|
+
|
|
177
|
+
expect(result).toEqual({
|
|
178
|
+
success: false,
|
|
179
|
+
errors: ["Build failed", "type error"],
|
|
180
|
+
warnings: undefined,
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
it("returns esbuild error only when tsc has no errors", async () => {
|
|
185
|
+
mockRebuild.mockRejectedValue(new Error("Build failed"));
|
|
186
|
+
mockTscPlugin.getErrors.mockReturnValue(undefined);
|
|
187
|
+
|
|
188
|
+
await createContext({ ...baseOptions, tsc: { cwd: "/workspace", output: { dts: true } } });
|
|
189
|
+
const result = await rebuild();
|
|
190
|
+
|
|
191
|
+
expect(result).toEqual({
|
|
192
|
+
success: false,
|
|
193
|
+
errors: ["Build failed"],
|
|
194
|
+
warnings: undefined,
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
it("returns esbuild error when no tsc plugin exists", async () => {
|
|
199
|
+
mockRebuild.mockRejectedValue(new Error("Build failed"));
|
|
200
|
+
|
|
201
|
+
await createContext(baseOptions);
|
|
202
|
+
const result = await rebuild();
|
|
203
|
+
|
|
204
|
+
expect(result).toEqual({
|
|
205
|
+
success: false,
|
|
206
|
+
errors: ["Build failed"],
|
|
207
|
+
warnings: undefined,
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
it("preserves previous metafile when rebuild rejects", async () => {
|
|
212
|
+
const mockMetafile = { inputs: { "src/main.ts": {} }, outputs: {} };
|
|
213
|
+
mockRebuild.mockResolvedValueOnce({
|
|
214
|
+
errors: [],
|
|
215
|
+
warnings: [],
|
|
216
|
+
outputFiles: [],
|
|
217
|
+
metafile: mockMetafile,
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
await createContext(baseOptions);
|
|
221
|
+
await rebuild();
|
|
222
|
+
expect(getMetafile()).toBe(mockMetafile);
|
|
223
|
+
|
|
224
|
+
mockRebuild.mockRejectedValueOnce(new Error("Build failed"));
|
|
225
|
+
const result = await rebuild();
|
|
226
|
+
|
|
227
|
+
expect(result).toEqual({
|
|
228
|
+
success: false,
|
|
229
|
+
errors: ["Build failed"],
|
|
230
|
+
warnings: undefined,
|
|
231
|
+
});
|
|
232
|
+
expect(getMetafile()).toBe(mockMetafile);
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
|
|
155
236
|
describe("recreateContext", () => {
|
|
156
237
|
afterEach(async () => {
|
|
157
238
|
mockRebuild.mockReset();
|