콘텐츠로 이동

Build Error Analysis

✘ [ERROR] No matching export in "src/lib/domain.ts" for import "validateDomainId"
src/lib/queue/seed-queue-handlers.ts:11:46:
11 │ ...in, deduplicateDomains, validateDomainId, generateDomainHash } ...

위치: src/lib/queue/seed-queue-handlers.ts:11

에러 내용:

  • validateDomainIdsrc/lib/domain.ts에서 import하려고 시도
  • 하지만 src/lib/domain.tsvalidateDomainId를 export하지 않음

현재 코드:

src/lib/queue/seed-queue-handlers.ts
import {
normalizeDomain,
deduplicateDomains,
validateDomainId, // ❌ domain.ts에 없음
generateDomainHash
} from '../domain';

validateDomainId는 다음 위치에 존재:

  • src/schemas/common.ts (line 174)
  • src/schemas/domain.ts (line 64)

src/lib/domain.ts는:

  • validateDomainIdsrc/schemas/common.ts에서 import하여 사용
  • validateDomainIdexport하지 않음
src/lib/domain.ts
import { validateDomainId, CountryCode } from '../schemas/common'; // import만 함
// validateDomainId를 사용하지만 export하지 않음
export function createSeedIdentity(domainId: string, contentType: string) {
if (!validateDomainId(domainId)) { // 사용만 함
throw new Error(`Invalid domain ID format: ${domainId}`);
}
// ...
}

현재 구조:

src/lib/domain.ts
├─ import validateDomainId from schemas/common (사용만)
└─ export normalizeDomain, deduplicateDomains, generateDomainHash
src/lib/queue/seed-queue-handlers.ts
└─ import validateDomainId from lib/domain ❌ (존재하지 않음)

올바른 구조:

src/schemas/domain.ts
└─ export validateDomainId ✅
src/lib/queue/seed-queue-handlers.ts
└─ import validateDomainId from schemas/domain ✅

방안 1: 스키마에서 직접 import (권장)

섹션 제목: “방안 1: 스키마에서 직접 import (권장)”

이유:

  • validateDomainId는 스키마 검증 함수이므로 스키마 모듈에 있는 것이 적절
  • 모듈 책임 분리: lib/domain.ts는 정규화 로직, schemas/domain.ts는 검증 로직
  • 기존 코드와의 일관성 유지

수정 내용:

src/lib/queue/seed-queue-handlers.ts
// Before
import {
normalizeDomain,
deduplicateDomains,
validateDomainId, // ❌
generateDomainHash
} from '../domain';
// After
import {
normalizeDomain,
deduplicateDomains,
generateDomainHash
} from '../domain';
import { validateDomainId } from '../../schemas/domain'; // ✅

이유:

  • 모든 domain 관련 함수를 한 곳에서 import 가능
  • 편의성 향상

단점:

  • 모듈 책임이 모호해짐 (정규화 + 검증)
  • 스키마 검증 함수가 lib에 있는 것처럼 보임

수정 내용:

src/lib/domain.ts
// 기존 import
import { validateDomainId, CountryCode } from '../schemas/common';
// re-export 추가
export { validateDomainId }; // ✅

이유:

  • validateDomainIdcommon.ts에도 존재
  • 공통 스키마이므로 적절

단점:

  • domain.ts에도 동일 함수가 있어 중복
  • 일관성 문제
  1. 모듈 책임 분리

    • schemas/domain.ts: 도메인 스키마 및 검증 함수
    • lib/domain.ts: 도메인 정규화 및 변환 로직
  2. 기존 패턴과 일관성

    • 다른 스키마 검증 함수들도 schemas/에서 import
    • 예: EnhancedResearchDataset.safeParse()
  3. 명확한 의존성

    • 검증 함수는 스키마 모듈에 속함
    • 정규화 함수는 lib 모듈에 속함

파일: src/lib/queue/seed-queue-handlers.ts

변경 내용:

// Import 섹션 수정
import type { Bindings } from '../../index';
import type { SeedQueueMessage } from '../../schemas/seed-engine';
import { EnhancedResearchDataset } from '../../schemas/research';
import { normalizeDomain, deduplicateDomains, generateDomainHash } from '../domain';
import { validateDomainId } from '../../schemas/domain'; // ✅ 추가
import type { NormalizedDomain } from '../../schemas/domain';
import { buildRawDatasetSuccessPath } from '../r2-seed-engine';
import { logError, logger } from '../logger';
import { ValidationError } from '../errors';

generateDomainHashsrc/lib/domain.ts에 export되어 있는지 확인:

  • ✅ 확인됨 (line 160)

src/lib/queue/domain-queue-handlers.ts도 동일한 문제가 있는지 확인:

  • domain-queue-handlers.tsvalidateDomainId를 사용하지 않음
  • 문제 없음

다른 파일들에서 validateDomainId를 어떻게 import하는지:

src/lib/domain.ts
import { validateDomainId } from '../schemas/common'; // ✅
// 다른 파일들도 schemas에서 import하는 패턴

src/lib/domain.ts에서 node:crypto 사용:

import { createHash } from 'node:crypto';

확인 필요:

  • wrangler.jsoncnodejs_compat 플래그가 있는지
  • Cloudflare Workers에서 node:crypto 지원 여부

해결 방안 (필요 시):

  • crypto.subtle 사용 (Web Crypto API)
  • 또는 nodejs_compat 플래그 확인
  • src/lib/queue/seed-queue-handlers.ts의 import 수정
  • 빌드 에러 재확인
  • 다른 파일에서 동일한 문제 확인
  • node:crypto 호환성 확인 (필요 시)

수정 후:

Terminal window
pnpm dev:local
# ✅ 빌드 성공
# ✅ 모든 import 정상
# ✅ 로컬 개발 서버 시작

분석 일시: 2026-01-28
에러 타입: Import/Export 불일치
심각도: 중간 (빌드 실패)
해결 난이도: 낮음 (import 경로 수정)