/** * CMS Label Definition Types * * 라이브러리 코드 - 향후 @spfn/cms로 분리 예정 */ /** * 라벨 타입 */ type LabelType = 'text' | 'image' | 'video' | 'file' | 'object'; /** * 개별 라벨 정의 */ interface LabelDefinition { key: string; type?: LabelType; defaultValue: string | Record; description?: string; } /** * 중첩된 라벨 구조 * LabelDefinition과 구분하기 위해 key, defaultValue 속성을 명시적으로 제외 */ type NestedLabels = { [key: string]: LabelDefinition | NestedLabels; } & { key?: never; defaultValue?: never; }; /** * 섹션 정의 */ interface SectionDefinition { section: string; labels: NestedLabels; } /** * Sync 옵션 */ interface SyncOptions { /** * Dry run - 실제로 적용하지 않고 변경사항만 출력 */ dryRun?: boolean; /** * 기존 라벨의 defaultValue 업데이트 여부 */ updateExisting?: boolean; /** * 사용되지 않는 라벨 삭제 여부 */ removeUnused?: boolean; /** * Verbose 출력 */ verbose?: boolean; } /** * Sync 결과 */ interface SyncResult { section: string; created: number; updated: number; deleted: number; unchanged: number; errors: Array<{ key: string; error: string; }>; } /** * 라벨 정의 플랫화된 형태 */ interface FlatLabel { key: string; type?: LabelType; defaultValue: string | Record; description?: string; } /** * CMS Label Helpers * * Utilities for processing label definitions from JSON files */ /** * 중첩된 라벨을 플랫화 * * @param labels - 중첩된 라벨 객체 * @returns 플랫화된 라벨 배열 * * @example * ```ts * flattenLabels({ * nav: { * home: { key: 'layout.nav.home', defaultValue: 'Home' }, * }, * }); * // => [{ key: 'layout.nav.home', defaultValue: 'Home' }] * ``` */ declare function flattenLabels(labels: NestedLabels): FlatLabel[]; /** * 섹션 정의에서 모든 라벨 추출 * * @param definition - 섹션 정의 * @returns 플랫화된 라벨 배열 */ declare function extractLabels(definition: SectionDefinition): FlatLabel[]; export { type FlatLabel as F, type LabelType as L, type NestedLabels as N, type SectionDefinition as S, type LabelDefinition as a, type SyncOptions as b, type SyncResult as c, extractLabels as e, flattenLabels as f };