{"version":3,"sources":["../../src/util/json-extraction.ts"],"names":[],"mappings":";AAsBO,SAAS,kBAAkB,IAAA,EAA6B;AAC3D,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACnC,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAG1B,EAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,KAAA,CAAM,iCAAiC,CAAA;AACtE,EAAA,IAAI,cAAA,GAAiB,CAAC,CAAA,EAAG;AACrB,IAAA,OAAO,cAAA,CAAe,CAAC,CAAA,CAAE,IAAA,EAAK;AAAA,EAClC;AAGA,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,KAAA,CAAM,eAAe,CAAA;AACjD,EAAA,IAAI,WAAA,GAAc,CAAC,CAAA,EAAG;AAClB,IAAA,OAAO,WAAA,CAAY,CAAC,CAAA,CAAE,IAAA,EAAK;AAAA,EAC/B;AAGA,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,KAAA,CAAM,eAAe,CAAA;AAChD,EAAA,IAAI,UAAA,GAAa,CAAC,CAAA,EAAG;AACjB,IAAA,OAAO,UAAA,CAAW,CAAC,CAAA,CAAE,IAAA,EAAK;AAAA,EAC9B;AAEA,EAAA,OAAO,IAAA;AACX;AAQO,SAAS,YAAyB,IAAA,EAAwB;AAC7D,EAAA,MAAM,UAAA,GAAa,kBAAkB,IAAI,CAAA;AACzC,EAAA,IAAI,CAAC,UAAA,EAAY;AACb,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,IAAI;AACA,IAAA,OAAO,IAAA,CAAK,MAAM,UAAU,CAAA;AAAA,EAChC,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,IAAA;AAAA,EACX;AACJ;AASO,SAAS,oBAAA,CAAwB,MAAc,QAAA,EAAgB;AAClE,EAAA,MAAM,MAAA,GAAS,YAAe,IAAI,CAAA;AAClC,EAAA,OAAO,MAAA,KAAW,OAAO,MAAA,GAAS,QAAA;AACtC","file":"json-extraction.mjs","sourcesContent":["/**\n * JSON Extraction Utilities\n *\n * Utilities for extracting JSON from text that may be wrapped in markdown\n * code blocks or contain other surrounding content. Useful for parsing\n * LLM responses that include JSON.\n *\n * @since 0.18.0\n */\n\n/**\n * Extract JSON string from text that may be wrapped in markdown code blocks.\n *\n * Handles:\n * - ```json ... ```\n * - ``` ... ```\n * - Raw JSON objects { ... }\n * - Raw JSON arrays [ ... ]\n *\n * @param text - The text containing JSON\n * @returns The extracted JSON string, or null if no JSON found\n */\nexport function extractJsonString(text: string): string | null {\n    if (!text || typeof text !== 'string') {\n        return null;\n    }\n\n    const trimmed = text.trim();\n\n    // Try markdown code block first (```json ... ``` or ``` ... ```)\n    const codeBlockMatch = trimmed.match(/```(?:json)?\\s*([\\s\\S]*?)\\s*```/);\n    if (codeBlockMatch?.[1]) {\n        return codeBlockMatch[1].trim();\n    }\n\n    // Try to find a JSON object\n    const objectMatch = trimmed.match(/(\\{[\\s\\S]*\\})/);\n    if (objectMatch?.[1]) {\n        return objectMatch[1].trim();\n    }\n\n    // Try to find a JSON array\n    const arrayMatch = trimmed.match(/(\\[[\\s\\S]*\\])/);\n    if (arrayMatch?.[1]) {\n        return arrayMatch[1].trim();\n    }\n\n    return null;\n}\n\n/**\n * Extract and parse JSON from text that may be wrapped in markdown code blocks.\n *\n * @param text - The text containing JSON\n * @returns The parsed JSON object, or null if extraction or parsing failed\n */\nexport function extractJson<T = unknown>(text: string): T | null {\n    const jsonString = extractJsonString(text);\n    if (!jsonString) {\n        return null;\n    }\n\n    try {\n        return JSON.parse(jsonString) as T;\n    } catch {\n        return null;\n    }\n}\n\n/**\n * Extract and parse JSON from text, with a fallback value if extraction fails.\n *\n * @param text - The text containing JSON\n * @param fallback - Value to return if extraction or parsing fails\n * @returns The parsed JSON object or the fallback value\n */\nexport function extractJsonOrDefault<T>(text: string, fallback: T): T {\n    const result = extractJson<T>(text);\n    return result !== null ? result : fallback;\n}\n"]}