src/normalization/jsonExtraction.ts

export function extractJsonObjectFromText(rawText) { const raw = String(rawText || "").trim(); if (!raw) return null;

const attempts = [ raw, raw.match(/(?:json)?\s*([\s\S]*?)/i)?.[1], (() => { const start = raw.indexOf("{"); const end = raw.lastIndexOf("}"); return start >= 0 && end > start ? raw.slice(start, end + 1) : ""; })() ] .map((item) => String(item || "").trim()) .filter(Boolean);

for (const candidate of attempts) { try { const parsed = JSON.parse(candidate); if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) { return parsed; } } catch { // try next candidate } }

return null; }