import { DEBUG, API_URL } from './config.js' export async function fetchSuggestion(prefix, suffix, signal, apiUrl = API_URL) { if (DEBUG) console.log('[Debug] fetchSuggestion called with prefix length:', prefix.length, 'suffix length:', suffix.length) try { const res = await fetch(apiUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ prefix, suffix, languageId: 'markdown' }), signal }) if (DEBUG) console.log('[Debug] fetchSuggestion response status:', res.status) if (!res.ok) { const errorText = await res.text() throw new Error(`HTTP ${res.status}: ${errorText}`) } const reader = res.body?.getReader() if (!reader) { if (DEBUG) console.log('[Debug] No reader available') throw new Error('No reader available') } let text = '' let buffer = '' while (true) { const { done, value } = await reader.read() if (done) break buffer += new TextDecoder().decode(value) const lines = buffer.split('\n') buffer = lines.pop() || '' for (const line of lines) { if (!line.startsWith('data: ')) continue const jsonStr = line.slice(6).trim() if (!jsonStr) continue try { const data = JSON.parse(jsonStr) if (data.content) { text += data.content if (DEBUG) console.log('[Debug] Added content:', data.content) } if (data.done || data.error) break } catch (e) { if (DEBUG) console.warn('[Debug] JSON parse error for:', jsonStr.substring(0, 50)) } } } if (DEBUG) console.log('[Debug] Final suggestion text:', text.substring(0, 100)) return text } catch (e) { if (e.name === 'AbortError') { if (DEBUG) console.log('[Debug] Request aborted') } else { if (DEBUG) console.error('[Debug] fetchSuggestion error:', e) } throw e } }