import { LangCode, LogicalModel } from './types'; import { MergeDiagramSource } from './mergeDiagram'; export interface ParseSqlDdlResult { logical: LogicalModel; /** best-effort 파싱에서 건너뛴 statement·해석 못한 부분(부분 성공 가시화). */ warnings: string[]; } /** * 판독 옵션 — 지금은 «주석 로케일» 하나다. * * ★**우선순위는 호스트 방출 산식의 거울**이다(`server/utils/ddl.ts`: `opts.locale ?? 프로젝트 기본 언어`): * 여기서도 **명시 지정이 마커를 이긴다**. 마커는 *「이 텍스트가 어느 로케일로 방출됐다」* 는 사실이고 * 지정은 *「이 텍스트를 어느 슬롯으로 읽어라」* 는 지시여서, 사람이 아는 것을 도구가 덮지 않는다. * * ⚠️**둘 다 없으면 주석을 «읽지 않는다»** — 프로젝트 설정으로 채우지 않는다(「모르는 값 규약」: 텍스트의 * 언어는 우리가 정하는 값이 아니라 이미 정해져 있는 사실이고, 굳히면 ko 문자열이 ja 슬롯에 들어가 * 「번역 완료」로 **오독**된다). 대신 warnings 로 *「N건을 유보했다」* 를 남긴다(닫힌 오답 대신 열린 신호). */ export interface ParseSqlDdlOptions { commentLocale?: LangCode; } /** SQL DDL을 논리 모델로 파싱(순수·best-effort). warnings에 건너뛴 부분 보고. */ export declare function parseSqlDdl(text: string, opts?: ParseSqlDdlOptions): ParseSqlDdlResult; /** * 붙여넣은 DDL 의 주석 «증거» — 로케일을 **고르지 않고** 판단 근거만 낸다. * * ★★**어포던스 설계의 핵심이 이것이다.** 마커 없는 외부 DDL 에서 임포트는 사람에게 로케일을 한 번 묻는데, * COMMENT 수천 건을 붙여넣은 사람에게 *「로케일?」* 만 물으면 **그 사람도 추측**이다(수신자가 행동할 수 * 없는 물음 = 반쪽 설계). 문자 계열 분포를 함께 보여 주면 답할 수 있다. * * ⚠️★**이름은 «문자 체계»이고 UI 라벨은 «언어»다 — 의도적으로 갈라 둔 자리**(2026-09-11 사용자 지적): * 여기서 재는 것은 문자(가나·한글)이고 그것이 `undecidable` 버킷이 존재하는 이유다(한자는 ja↔zh, * 라틴은 en↔fr 공유 = 언어로 환원되지 않는다). 반면 **사용자가 답하는 단위는 언어**이므로 모달 라벨은 * `한국어(한글) 3` 처럼 «언어(문자 근거)» 로 적는다 — 가나⇒일본어·한글⇒한국어는 1:1 안전 매핑이라 * 도구가 아는 변환을 사용자에게 미루지 않는다. ⇒ **필드명을 언어로 바꾸지 말고, 라벨을 문자로 되돌리지도 * 말 것**(한쪽만 맞추면 다른 쪽이 틀린다). * * ★**판정은 «확정되는 것»만 말한다** — 가나가 있으면 ja, 한글이 있으면 ko 는 유니코드 범위로 확정이지만 * **한자 단독(ja↔zh)·라틴(en↔fr)은 갈리지 않는다** ⇒ `unknown` 이라고 적는다. 둘이 함께 있으면 `mixed` 다 * (실물은 파일 «간» 혼재가 실재한다 — ko 74.5% / ja 14.4% ⇒ 한 임포트 한 로케일로는 한쪽이 오적재이므로 * 그 사실을 표기해 사람이 나눠 임포트할 수 있게 한다). */ export interface SqlDdlCommentEvidence { /** 읽을 수 있는 `COMMENT ON TABLE/COLUMN` 문 수. */ comments: number; /** 텍스트가 스스로 밝힌 로케일(우리 산출물) — 있으면 묻지 않는다. */ markerLocale?: LangCode; /** 가나 포함 건수(= ja 확정 근거). */ kana: number; /** 한글 포함 건수(= ko 확정 근거). */ hangul: number; /** 한자 단독·라틴·그 외 — **갈리지 않는** 건수. */ undecidable: number; verdict: 'ko' | 'ja' | 'mixed' | 'unknown'; } /** 위 인터페이스 주석이 근거 정본. */ export declare function inspectSqlDdlComments(text: string): SqlDdlCommentEvidence; /** SQL DDL → 임포트 소스(논리 + auto-layout). controller.importEntities가 그대로 소비. */ export declare function sqlDdlToImportSource(text: string, opts?: ParseSqlDdlOptions): MergeDiagramSource;