Project Files
src / json-utils.ts
// Parser JSON tolérant : tolère les fences ```json … ``` et le texte
// autour, retourne le premier objet équilibré trouvé. Partagé entre
// sujets.ts et corpus-builder.ts qui en avaient chacun une copie.
export function extractJson(raw: string): Record<string, unknown> | null {
const cleaned = raw.replace(/```json\s*/gi, "").replace(/```\s*/g, "").trim();
const start = cleaned.indexOf("{");
if (start < 0) return null;
let depth = 0;
for (let i = start; i < cleaned.length; i++) {
if (cleaned[i] === "{") depth++;
else if (cleaned[i] === "}") {
depth--;
if (depth === 0) {
try { return JSON.parse(cleaned.slice(start, i + 1)) as Record<string, unknown>; }
catch { return null; }
}
}
}
return null;
}