const BASE = '/api/fiddles'; async function request(url, opts = {}) { const res = await fetch(url, { headers: { 'Content-Type': 'application/json' }, ...opts, }); if (!res.ok) { const err = await res.json().catch(() => ({ error: res.statusText })); throw new Error(err.error || res.statusText); } return res.json(); } export function createFiddle(data) { return request(BASE, { method: 'POST', body: JSON.stringify(data) }); } export function loadFiddle(id) { return request(`${BASE}/${id}`); } export function updateFiddle(id, data) { return request(`${BASE}/${id}`, { method: 'PUT', body: JSON.stringify(data) }); } export function listFiddles({ q, js_type, tag, page, limit, sort } = {}) { const params = new URLSearchParams(); if (q) params.set('q', q); if (js_type) params.set('js_type', js_type); if (tag) params.set('tag', tag); if (page) params.set('page', String(page)); if (limit) params.set('limit', String(limit)); if (sort) params.set('sort', sort); const qs = params.toString(); return request(`${BASE}${qs ? '?' + qs : ''}`); } export function listTags() { return request('/api/tags'); }