/**
 * JSON.parse 글로벌 패치 - macOS 26 파일시스템 손상 대응
 *
 * macOS 26에서 atomic write(tmp + rename)가 실패하면
 * .next/prerender-manifest.json 등의 파일에 데이터가 중복 기록됨.
 * 이로 인해 "Unexpected non-whitespace character after JSON at position N" 발생.
 *
 * 이 패치는 JSON.parse 실패 시 유효한 JSON 부분만 추출하여 자동 복구.
 * NODE_OPTIONS='--require ./scripts/patch-json-parse.cjs' 로 로드.
 */
'use strict';

const originalParse = JSON.parse;

JSON.parse = function patchedJsonParse(text, reviver) {
  try {
    return originalParse.call(this, text, reviver);
  } catch (e) {
    if (e instanceof SyntaxError && typeof text === 'string') {
      // "Unexpected non-whitespace character after JSON at position N"
      // → position N까지가 유효한 JSON
      const match = e.message.match(/after JSON at position\s+(\d+)/);
      if (match) {
        const pos = parseInt(match[1], 10);
        if (pos > 0) {
          try {
            const result = originalParse.call(this, text.substring(0, pos), reviver);
            // 한 번만 경고 (같은 position이면 반복 출력 방지)
            if (!patchedJsonParse._warned) patchedJsonParse._warned = new Set();
            const key = pos + ':' + text.length;
            if (!patchedJsonParse._warned.has(key)) {
              patchedJsonParse._warned.add(key);
              console.warn(
                `[patch-json-parse] macOS 파일 손상 자동 복구 (position ${pos}, total ${text.length} bytes)`
              );
            }
            return result;
          } catch {
            // truncation으로도 실패하면 원래 에러 throw
          }
        }
      }
    }
    throw e;
  }
};
