export interface InterpolationSegment { expression: string; start: number; end: number; } /** Extract top-level `{...}` expressions while preserving nested object/array literals. */ export function extractInterpolations(value: string): InterpolationSegment[] { const segments: InterpolationSegment[] = []; let index = 0; while (index < value.length) { if (value[index] !== "{") { index++; continue; } const start = index++; let depth = 1; let quote: string | null = null; while (index < value.length && depth > 0) { const char = value[index]!; if (quote) { if (char === "\\" && index + 1 < value.length) index += 2; else { if (char === quote) quote = null; index++; } continue; } if (char === '"' || char === "'" || char === "`") quote = char; else if (char === "{") depth++; else if (char === "}") depth--; index++; } if (depth === 0) { segments.push({ expression: value.slice(start + 1, index - 1).trim(), start, end: index }); } } return segments; }