"` on `` so the SPA
* navigation helper can detect cross-layout transitions.
*/
layoutChain?: string[];
/** Critical 데이터 (Shell과 함께 즉시 전송) - JSON-serializable object만 허용 */
criticalData?: Record;
// Note: deferredData는 renderWithDeferredData의 deferredPromises로 대체됨
/** Hydration 설정 */
hydration?: HydrationConfig;
/** 번들 매니페스트 */
bundleManifest?: BundleManifest;
/** React element already contains its own island wrapper. */
islandPreWrapped?: boolean;
/** 추가 head 태그 (SEO metadata와 병합됨) */
headTags?: string;
/**
* SEO 메타데이터 (Layout 체인 또는 단일 객체)
* - 배열: [rootLayout, ...nestedLayouts, page] 순서로 병합
* - 객체: 단일 정적 메타데이터
*/
metadata?: MetadataItem[] | Metadata;
/** 라우트 파라미터 (동적 메타데이터용) */
routeParams?: Record;
/** 쿼리 파라미터 (동적 메타데이터용) */
searchParams?: Record;
/** 개발 모드 여부 */
isDev?: boolean;
/** HMR 포트 */
hmrPort?: number;
/** Client-side Router 활성화 */
enableClientRouter?: boolean;
/** Streaming 타임아웃 (ms) - 전체 스트림 최대 시간 */
streamTimeout?: number;
/** Shell 렌더링 후 콜백 (TTFB 측정 시점) */
onShellReady?: () => void;
/** 모든 컨텐츠 렌더링 후 콜백 */
onAllReady?: () => void;
/**
* Shell 전 에러 콜백
* - React 초기 렌더링 중 에러 발생 시 호출
* - 이 시점에서는 이미 스트림이 시작됨 (500 반환 불가)
* - 로깅/모니터링 용도
*/
onShellError?: (error: StreamingError) => void;
/**
* 스트리밍 중 에러 콜백
* - Shell 전송 후 에러 발생 시 호출
* - 에러 스크립트가 HTML에 자동 삽입됨
* - 클라이언트에서 mandu:streaming-error 이벤트로 감지 가능
*/
onStreamError?: (error: StreamingError) => void;
/** 에러 콜백 (deprecated - onShellError/onStreamError 사용 권장) */
onError?: (error: Error) => void;
/** 메트릭 콜백 (observability) */
onMetrics?: (metrics: StreamingMetrics) => void;
/**
* HTML 닫기 태그 생략 여부 (내부용)
* true이면