@simplysm/sd-cli 14.0.49 → 14.0.52

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 (60) hide show
  1. package/dist/angular/angular-compiler.d.ts +3 -0
  2. package/dist/angular/angular-compiler.d.ts.map +1 -1
  3. package/dist/angular/angular-compiler.js +3 -0
  4. package/dist/angular/angular-compiler.js.map +1 -1
  5. package/dist/dev-server/hmr-service.d.ts.map +1 -1
  6. package/dist/dev-server/hmr-service.js +10 -5
  7. package/dist/dev-server/hmr-service.js.map +1 -1
  8. package/dist/engines/EsbuildClientEngine.d.ts.map +1 -1
  9. package/dist/engines/EsbuildClientEngine.js +1 -2
  10. package/dist/engines/EsbuildClientEngine.js.map +1 -1
  11. package/dist/esbuild/esbuild-angular-compiler-plugin.js +5 -5
  12. package/dist/esbuild/esbuild-angular-compiler-plugin.js.map +1 -1
  13. package/dist/esbuild/esbuild-client-config.d.ts.map +1 -1
  14. package/dist/esbuild/esbuild-client-config.js +10 -5
  15. package/dist/esbuild/esbuild-client-config.js.map +1 -1
  16. package/dist/lint/lint-core.js.map +1 -1
  17. package/dist/orchestrators/DevOrchestrator.js.map +1 -1
  18. package/dist/orchestrators/ServerRuntimeManager.d.ts.map +1 -1
  19. package/dist/orchestrators/ServerRuntimeManager.js +2 -4
  20. package/dist/orchestrators/ServerRuntimeManager.js.map +1 -1
  21. package/dist/ts-compiler/SdTsCompiler.d.ts +1 -7
  22. package/dist/ts-compiler/SdTsCompiler.d.ts.map +1 -1
  23. package/dist/ts-compiler/SdTsCompiler.js +109 -116
  24. package/dist/ts-compiler/SdTsCompiler.js.map +1 -1
  25. package/dist/utils/package-utils.d.ts.map +1 -1
  26. package/dist/utils/package-utils.js.map +1 -1
  27. package/dist/workers/client.worker.d.ts.map +1 -1
  28. package/dist/workers/client.worker.js +6 -1
  29. package/dist/workers/client.worker.js.map +1 -1
  30. package/package.json +5 -5
  31. package/src/angular/angular-compiler.ts +3 -0
  32. package/src/dev-server/hmr-service.ts +10 -5
  33. package/src/engines/EsbuildClientEngine.ts +1 -2
  34. package/src/esbuild/esbuild-angular-compiler-plugin.ts +6 -6
  35. package/src/esbuild/esbuild-client-config.ts +17 -12
  36. package/src/lint/lint-core.ts +1 -1
  37. package/src/orchestrators/DevOrchestrator.ts +3 -3
  38. package/src/orchestrators/ServerRuntimeManager.ts +2 -5
  39. package/src/ts-compiler/SdTsCompiler.ts +136 -154
  40. package/src/utils/package-utils.ts +1 -2
  41. package/src/workers/client.worker.ts +6 -1
  42. package/tests/esbuild/esbuild-angular-compiler-plugin.spec.ts +1 -1
  43. package/tests/esbuild/esbuild-postcss-plugin.acc.spec.ts +1 -1
  44. package/tests/esbuild/esbuild-tsc-plugin.acc.spec.ts +2 -2
  45. package/tests/esbuild/esbuild-tsc-plugin.spec.ts +3 -3
  46. package/tests/esbuild/esbuild-worker-plugin.spec.ts +1 -1
  47. package/tests/orchestrators/build-orchestrator.spec.ts +9 -9
  48. package/tests/orchestrators/dev-orchestrator.spec.ts +4 -4
  49. package/tests/orchestrators/watch-orchestrator.spec.ts +2 -2
  50. package/tests/ts-compiler/SdTsCompiler-crash-handling.verify.md +24 -0
  51. package/tests/utils/copy-src.spec.ts +5 -5
  52. package/tests/utils/esbuild-client-config.acc.spec.ts +1 -1
  53. package/tests/utils/esbuild-client-config.spec.ts +4 -4
  54. package/tests/utils/esbuild-config.spec.ts +3 -3
  55. package/tests/utils/esbuild-postcss-plugin.spec.ts +1 -1
  56. package/tests/utils/hmr-client-script.acc.spec.ts +1 -1
  57. package/tests/utils/ngtsc-build-core.spec.ts +1 -1
  58. package/tests/utils/package-utils.spec.ts +6 -6
  59. package/tests/workers/server-build-worker.spec.ts +1 -1
  60. package/README.md +0 -782
@@ -41,7 +41,7 @@ function setupPlugin(plugin: esbuild.Plugin) {
41
41
  outputFiles: [],
42
42
  metafile: { inputs: {}, outputs: {} },
43
43
  ...result,
44
- } as esbuild.BuildResult)) ?? null;
44
+ })) ?? null;
45
45
  },
46
46
  };
47
47
  }
@@ -73,7 +73,7 @@ function createErrorCompileResult(): ISdTsCompilerResult {
73
73
  return {
74
74
  ...createSuccessCompileResult(),
75
75
  errors: ["TS2322: Type 'string' is not assignable to type 'number'"],
76
- diagnostics: [{ category: 1, code: 2322, messageText: "Type mismatch" }] as any,
76
+ diagnostics: [{ category: 1, code: 2322, messageText: "Type mismatch" }],
77
77
  errorCount: 1,
78
78
  };
79
79
  }
@@ -41,7 +41,7 @@ function setupPlugin(plugin: esbuild.Plugin) {
41
41
  outputFiles: [],
42
42
  metafile: { inputs: {}, outputs: {} },
43
43
  ...result,
44
- } as esbuild.BuildResult)) ?? null;
44
+ })) ?? null;
45
45
  },
46
46
  };
47
47
  }
@@ -147,7 +147,7 @@ describe("createTscPlugin — Unit Tests", () => {
147
147
  it("env, includeTests 옵션을 SdTsCompiler에 전달한다", async () => {
148
148
  const result = createTscPlugin({
149
149
  ...baseOptions,
150
- env: "node" as any,
150
+ env: "node",
151
151
  includeTests: true,
152
152
  });
153
153
  const lifecycle = setupPlugin(result.plugin);
@@ -172,7 +172,7 @@ describe("createTscPlugin — Unit Tests", () => {
172
172
  ];
173
173
  mockCompileAsync.mockResolvedValue({
174
174
  ...createSuccessCompileResult(),
175
- diagnostics: diagnostics as any,
175
+ diagnostics: diagnostics,
176
176
  });
177
177
 
178
178
  const result = createTscPlugin(baseOptions);
@@ -44,7 +44,7 @@ function createTrackedBuild(overrides?: Partial<esbuild.BuildOptions>): {
44
44
  transformSyncCalls.push(args);
45
45
  return esbuild.transformSync(...args);
46
46
  },
47
- } as typeof esbuild;
47
+ };
48
48
 
49
49
  const build = {
50
50
  esbuild: trackedEsbuild,
@@ -129,7 +129,7 @@ function createMockWorkerProxy(overrides: Partial<MockWorkerProxy> = {}): MockWo
129
129
  }
130
130
 
131
131
  function setupDefaults(config: Partial<SdConfig> = {}): void {
132
- vi.mocked(loadSdConfig).mockResolvedValue({ packages: {}, ...config } as SdConfig);
132
+ vi.mocked(loadSdConfig).mockResolvedValue({ packages: {}, ...config });
133
133
  vi.mocked(getVersion).mockResolvedValue("1.0.0");
134
134
  }
135
135
 
@@ -372,7 +372,7 @@ describe("BuildOrchestrator.start", () => {
372
372
  run: vi.fn().mockRejectedValue(new Error("build failed")),
373
373
  startWatch: vi.fn(),
374
374
  stop: vi.fn().mockResolvedValue(undefined),
375
- } as any);
375
+ });
376
376
  const mockProxy = createMockWorkerProxy();
377
377
  vi.mocked(Worker.create).mockReturnValue(mockProxy as any);
378
378
 
@@ -413,7 +413,7 @@ describe("BuildOrchestrator.start", () => {
413
413
  }),
414
414
  startWatch: vi.fn(),
415
415
  stop: vi.fn().mockResolvedValue(undefined),
416
- } as any);
416
+ });
417
417
  const mockProxy = createMockWorkerProxy();
418
418
  vi.mocked(Worker.create).mockReturnValue(mockProxy as any);
419
419
 
@@ -466,7 +466,7 @@ describe("BuildOrchestrator.start", () => {
466
466
  stop: vi.fn().mockResolvedValue(undefined),
467
467
  };
468
468
  mockEngines.push(engine);
469
- return engine as any;
469
+ return engine;
470
470
  });
471
471
  const mockProxy = createMockWorkerProxy();
472
472
  vi.mocked(Worker.create).mockReturnValue(mockProxy as any);
@@ -496,7 +496,7 @@ describe("BuildOrchestrator.start", () => {
496
496
  }),
497
497
  startWatch: vi.fn(),
498
498
  stop: vi.fn().mockResolvedValue(undefined),
499
- } as any);
499
+ });
500
500
  const mockProxy = createMockWorkerProxy();
501
501
  vi.mocked(Worker.create).mockReturnValue(mockProxy as any);
502
502
 
@@ -602,7 +602,7 @@ describe("BuildOrchestrator client build", () => {
602
602
  }),
603
603
  startWatch: vi.fn(),
604
604
  stop: vi.fn().mockResolvedValue(undefined),
605
- } as any);
605
+ });
606
606
  const mockProxy = createMockWorkerProxy();
607
607
  vi.mocked(Worker.create).mockReturnValue(mockProxy as any);
608
608
 
@@ -635,7 +635,7 @@ describe("BuildOrchestrator client build", () => {
635
635
  }),
636
636
  startWatch: vi.fn(),
637
637
  stop: vi.fn().mockResolvedValue(undefined),
638
- } as any);
638
+ });
639
639
  const mockProxy = createMockWorkerProxy();
640
640
  vi.mocked(Worker.create).mockReturnValue(mockProxy as any);
641
641
 
@@ -720,7 +720,7 @@ describe("BuildOrchestrator client build", () => {
720
720
  run: vi.fn().mockRejectedValue(new Error("build crashed")),
721
721
  startWatch: vi.fn(),
722
722
  stop: vi.fn().mockResolvedValue(undefined),
723
- } as any);
723
+ });
724
724
  const mockProxy = createMockWorkerProxy();
725
725
  vi.mocked(Worker.create).mockReturnValue(mockProxy as any);
726
726
 
@@ -954,7 +954,7 @@ describe("BuildOrchestrator native build integration (Slice 1)", () => {
954
954
  }),
955
955
  startWatch: vi.fn(),
956
956
  stop: vi.fn().mockResolvedValue(undefined),
957
- } as any);
957
+ });
958
958
  const mockProxy = createMockWorkerProxy();
959
959
  vi.mocked(Worker.create).mockReturnValue(mockProxy as any);
960
960
 
@@ -187,7 +187,7 @@ function setupEngineWithResult(status: "success" | "error" = "success"): void {
187
187
  _pkgName: pkg.name,
188
188
  };
189
189
  mockBuildEngines.push(engine);
190
- return engine as any;
190
+ return engine;
191
191
  });
192
192
  }
193
193
 
@@ -275,7 +275,7 @@ describe("DevOrchestrator", () => {
275
275
  _pkgName: pkg.name,
276
276
  };
277
277
  mockBuildEngines.push(engine);
278
- return engine as any;
278
+ return engine;
279
279
  });
280
280
  });
281
281
 
@@ -471,13 +471,13 @@ describe("DevOrchestrator", () => {
471
471
  // --- Unit: disposes replaceDeps on shutdown ---
472
472
  it("disposes replaceDeps watcher on dev shutdown", async () => {
473
473
  const mockDispose = vi.fn();
474
- vi.mocked(watchReplaceDeps).mockResolvedValue({ entries: [], dispose: mockDispose } as any);
474
+ vi.mocked(watchReplaceDeps).mockResolvedValue({ entries: [], dispose: mockDispose });
475
475
 
476
476
  setupDefaults(createConfig({
477
477
  packages: { "service-server": { target: "server" } },
478
478
  replaceDeps: { "@simplysm/*": "packages/*/src" },
479
479
  }));
480
- vi.mocked(watchReplaceDeps).mockResolvedValue({ entries: [], dispose: mockDispose } as any);
480
+ vi.mocked(watchReplaceDeps).mockResolvedValue({ entries: [], dispose: mockDispose });
481
481
  setupEngineWithResult("success");
482
482
 
483
483
  const orchestrator = new DevOrchestrator({ targets: [], options: [] });
@@ -156,7 +156,7 @@ describe("WatchOrchestrator", () => {
156
156
  _pkgName: pkg.name,
157
157
  };
158
158
  mockBuildEngines.push(engine);
159
- return engine as any;
159
+ return engine;
160
160
  });
161
161
  });
162
162
 
@@ -494,7 +494,7 @@ describe("WatchOrchestrator", () => {
494
494
 
495
495
  it("disposes replaceDepWatcher even when initialize fails after watchReplaceDeps", async () => {
496
496
  const mockDispose = vi.fn();
497
- vi.mocked(watchReplaceDeps).mockResolvedValue({ entries: [], dispose: mockDispose } as any);
497
+ vi.mocked(watchReplaceDeps).mockResolvedValue({ entries: [], dispose: mockDispose });
498
498
 
499
499
  // loadSdConfig succeeds but we'll make classifyWatchPackages fail
500
500
  // by having watchReplaceDeps succeed first, then causing a later failure
@@ -0,0 +1,24 @@
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으로 원본 에러 메시지+스택이 보존되는지 확인
@@ -35,8 +35,8 @@ const distDir = toPosix(path.join(pkgDir, "dist"));
35
35
  describe("copySrcFiles", () => {
36
36
  beforeEach(() => {
37
37
  vi.clearAllMocks();
38
- vi.mocked(fsx.mkdir).mockResolvedValue(undefined as any);
39
- vi.mocked(fsx.copy).mockResolvedValue(undefined as any);
38
+ vi.mocked(fsx.mkdir).mockResolvedValue(undefined);
39
+ vi.mocked(fsx.copy).mockResolvedValue(undefined);
40
40
  });
41
41
 
42
42
  it("copies files matching glob patterns preserving relative paths", async () => {
@@ -84,9 +84,9 @@ describe("watchCopySrcFiles", () => {
84
84
  beforeEach(() => {
85
85
  vi.clearAllMocks();
86
86
  vi.mocked(fsx.glob).mockResolvedValue([]);
87
- vi.mocked(fsx.mkdir).mockResolvedValue(undefined as any);
88
- vi.mocked(fsx.copy).mockResolvedValue(undefined as any);
89
- vi.mocked(fsx.rm).mockResolvedValue(undefined as any);
87
+ vi.mocked(fsx.mkdir).mockResolvedValue(undefined);
88
+ vi.mocked(fsx.copy).mockResolvedValue(undefined);
89
+ vi.mocked(fsx.rm).mockResolvedValue(undefined);
90
90
  });
91
91
 
92
92
  it("performs initial copy then starts watch", async () => {
@@ -423,7 +423,7 @@ describe("createClientEsbuildContext — Acceptance", () => {
423
423
  pkgDir: "/workspace/packages/my-app",
424
424
  cwd: "/workspace",
425
425
  mode: "dev",
426
- plugins: [customPlugin as any],
426
+ plugins: [customPlugin],
427
427
  onEnd: vi.fn(),
428
428
  });
429
429
 
@@ -215,7 +215,7 @@ describe("createClientEsbuildContext — PostCSS 플러그인 통합", () => {
215
215
  await createClientEsbuildContext({
216
216
  ...baseBuild,
217
217
  postcssPlugins: [["autoprefixer"]],
218
- plugins: [customPlugin as any],
218
+ plugins: [customPlugin],
219
219
  legacyModule: true,
220
220
  onEnd: vi.fn(),
221
221
  });
@@ -294,7 +294,7 @@ describe("createClientEsbuildContext — 추가 옵션", () => {
294
294
  const customPlugin = { name: "custom", setup: vi.fn() };
295
295
  await createClientEsbuildContext({
296
296
  ...baseDev,
297
- plugins: [customPlugin as any],
297
+ plugins: [customPlugin],
298
298
  });
299
299
  const opts = vi.mocked(esbuild.context).mock.calls[0][0];
300
300
  expect(opts.plugins).toContainEqual(customPlugin);
@@ -460,7 +460,7 @@ describe("createClientEsbuildContext — onEnd 플러그인", () => {
460
460
  it("customPlugins가 angularPlugin 이전에 위치 (onStart에서 sourceFileCache 무효화 선행)", async () => {
461
461
  await createClientEsbuildContext({
462
462
  ...baseDev,
463
- plugins: [{ name: "custom", setup: vi.fn() } as any],
463
+ plugins: [{ name: "custom", setup: vi.fn() }],
464
464
  onEnd: vi.fn(),
465
465
  });
466
466
  const opts = vi.mocked(esbuild.context).mock.calls[0][0];
@@ -506,7 +506,7 @@ describe("createClientEsbuildContext — SCSS 플러그인 통합", () => {
506
506
  const customPlugin = { name: "custom", setup: vi.fn() };
507
507
  await createClientEsbuildContext({
508
508
  ...baseDev,
509
- plugins: [customPlugin as any],
509
+ plugins: [customPlugin],
510
510
  });
511
511
  const opts = vi.mocked(esbuild.context).mock.calls[0][0];
512
512
  const pluginNames = opts.plugins!.map((p: any) => p.name);
@@ -123,7 +123,7 @@ describe("createEnvBanner", () => {
123
123
  describe("writeChangedOutputFiles", () => {
124
124
  beforeEach(() => {
125
125
  vi.clearAllMocks();
126
- vi.mocked(mockFs.mkdir).mockResolvedValue(undefined as any);
126
+ vi.mocked(mockFs.mkdir).mockResolvedValue(undefined);
127
127
  vi.mocked(mockFs.writeFile).mockResolvedValue();
128
128
  });
129
129
 
@@ -160,7 +160,7 @@ describe("writeChangedOutputFiles", () => {
160
160
  });
161
161
 
162
162
  it("skips writing when transformed content matches existing file", async () => {
163
- vi.mocked(mockFs.readFile).mockResolvedValue('import { bar } from "./bar.js";' as any);
163
+ vi.mocked(mockFs.readFile).mockResolvedValue('import { bar } from "./bar.js";');
164
164
 
165
165
  await writeChangedOutputFiles([
166
166
  {
@@ -173,7 +173,7 @@ describe("writeChangedOutputFiles", () => {
173
173
  });
174
174
 
175
175
  it("writes file when content changed", async () => {
176
- vi.mocked(mockFs.readFile).mockResolvedValue('import { old } from "./old.js";' as any);
176
+ vi.mocked(mockFs.readFile).mockResolvedValue('import { old } from "./old.js";');
177
177
 
178
178
  await writeChangedOutputFiles([
179
179
  {
@@ -86,7 +86,7 @@ describe("createPostcssPlugin — metafile 가드", () => {
86
86
  metafile: undefined,
87
87
  outputFiles: [],
88
88
  mangleCache: {},
89
- } as unknown as esbuild.BuildResult);
89
+ });
90
90
 
91
91
  expect(fs.readFileSync(cssFile, "utf-8")).toBe(original);
92
92
  });
@@ -64,7 +64,7 @@ describe("HMR 클라이언트 스크립트 통합", () => {
64
64
  globalThis: {} as Record<string, unknown>,
65
65
  JSON,
66
66
  };
67
- sandbox.globalThis = sandbox as Record<string, unknown>;
67
+ sandbox.globalThis = sandbox;
68
68
 
69
69
  return {
70
70
  sandbox,
@@ -8,7 +8,7 @@ const mockCollectDiagnostics = vi.fn().mockReturnValue([]);
8
8
  const mockEmitAffectedFiles = vi.fn().mockReturnValue([]);
9
9
  const mockGetTsProgram = vi.fn().mockReturnValue({
10
10
  getSourceFiles: () => [],
11
- } as unknown as ts.Program);
11
+ });
12
12
 
13
13
  const angularCompilerConstructorSpy = vi.fn();
14
14
 
@@ -97,8 +97,8 @@ describe("mergeTestsPackagesIntoConfig", () => {
97
97
  // Acceptance: targets 없이 watch 실행 시 tests 패키지가 포함된다
98
98
  it("merges tests packages into config packages with target node", () => {
99
99
  const configPackages: Record<string, SdPackageConfig | undefined> = {
100
- "core-common": { target: "neutral" } as SdBuildPackageConfig,
101
- "core-node": { target: "node" } as SdBuildPackageConfig,
100
+ "core-common": { target: "neutral" },
101
+ "core-node": { target: "node" },
102
102
  };
103
103
  const workspacePackages = new Map([
104
104
  ["core-common", "packages/core-common"],
@@ -124,7 +124,7 @@ describe("mergeTestsPackagesIntoConfig", () => {
124
124
  // Acceptance: tests 패키지를 target으로 지정하여 watch 실행 (validateTargets에서 통합 맵 사용)
125
125
  it("makes tests packages available for validateTargets", () => {
126
126
  const configPackages: Record<string, SdPackageConfig | undefined> = {
127
- "core-common": { target: "neutral" } as SdBuildPackageConfig,
127
+ "core-common": { target: "neutral" },
128
128
  };
129
129
  const workspacePackages = new Map([
130
130
  ["core-common", "packages/core-common"],
@@ -140,7 +140,7 @@ describe("mergeTestsPackagesIntoConfig", () => {
140
140
  // Unit: packages/ entries in workspacePackages are not added to merged (already in config)
141
141
  it("does not duplicate packages/ entries from workspacePackages", () => {
142
142
  const configPackages: Record<string, SdPackageConfig | undefined> = {
143
- "core-common": { target: "neutral" } as SdBuildPackageConfig,
143
+ "core-common": { target: "neutral" },
144
144
  };
145
145
  const workspacePackages = new Map([
146
146
  ["core-common", "packages/core-common"],
@@ -156,7 +156,7 @@ describe("mergeTestsPackagesIntoConfig", () => {
156
156
  // Unit: empty workspacePackages returns config as-is
157
157
  it("returns config unchanged when no workspace packages", () => {
158
158
  const configPackages: Record<string, SdPackageConfig | undefined> = {
159
- "core-common": { target: "neutral" } as SdBuildPackageConfig,
159
+ "core-common": { target: "neutral" },
160
160
  };
161
161
  const workspacePackages = new Map<string, string>();
162
162
 
@@ -169,7 +169,7 @@ describe("mergeTestsPackagesIntoConfig", () => {
169
169
  // Acceptance: 이름 충돌 시 에러 발생
170
170
  it("throws when config package name collides with tests package name", () => {
171
171
  const configPackages: Record<string, SdPackageConfig | undefined> = {
172
- "orm": { target: "node" } as SdBuildPackageConfig,
172
+ "orm": { target: "node" },
173
173
  };
174
174
  const workspacePackages = new Map([
175
175
  ["orm", "tests/orm"],
@@ -317,7 +317,7 @@ describe("server-build.worker build()", () => {
317
317
  builderProgram: {},
318
318
  isForAngular: false,
319
319
  affectedFiles: undefined,
320
- diagnostics: [{ code: 2345, category: 1 }] as any,
320
+ diagnostics: [{ code: 2345, category: 1 }],
321
321
  errorCount: 1,
322
322
  warningCount: 0,
323
323
  errors: ["TS2345: type error"],