/** * 예산 한계 직렬화 — 콘솔 훅의 핫패스다. 경로 선택은 전부 실브라우저 실측으로 정했다. * * - **네이티브 `JSON.stringify` + 예산 replacer**가 기본이다. C++ 구현이라 예산 안에 * 들어오는 값에서 가장 빠르다(일반적인 로그 0.4~0.8µs). 손으로 쓴 순회 구현으로 * 바꿔봤더니 같은 입력에서 **3배 느렸다** — 네이티브를 이기려 하지 말 것. * - **큰 배열은 앞쪽만** 잘라 넘긴다. 배열은 `length`가 O(1)이라 감지가 공짜인데 * 효과는 크다: 1만 항목 497→64µs, 10만 항목 6074→24µs(**250배**). * API 응답을 통째로 로그하는 흔한 패턴이 정확히 이 경우다. * - **순환 참조는 재시도로** 처리한다. 첫 패스가 TypeError로 죽으면 방문 집합을 든 * replacer로 한 번 더 돈다. 예전에는 `String(arg)`("[object Object]")로 떨어져 * 객체 내용을 통째로 잃었다. * * 넓은 평범한 객체(키 5만)는 어떤 구현으로도 ~7ms가 바닥이다 — `Object.keys` 자체가 * 4.6ms고 `JSON.stringify`도 내부에서 같은 열거를 한다. 여기에 더 최적화를 시도하지 말 것. */ export interface SerializeResult { text: string; /** 예산 때문에 무언가 생략됐는지 — 호출부가 사용자에게 밝히는 데 쓴다 */ truncated: boolean; } export declare function serializeValue(value: unknown, budget: number): SerializeResult; /** 콘솔 인자 목록 → 로그 한 줄. 잘렸으면 잘렸음을 남긴다(조용히 버리면 오도한다) */ export declare function serializeArgs(args: unknown[], budget: number): string; //# sourceMappingURL=serialize.d.ts.map