Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | class FetchError extends Error { constructor(readonly code: string) { super(); } } function handleJSON(response: Response) { if (!response.ok) { throw new FetchError("REQUEST_FAILED"); } return response.json(); } function paramsToQueryString(params: Record<string, string | null>) { const urlParams = new URLSearchParams(); Object.entries(params).forEach(([key, value]) => { if (value !== null) { urlParams.set(key, value); } }); return urlParams.toString(); } /** * Load data from the JSON API. * @param url - The API endpoint to fetch * @param params - URL params to set. * @param options - Additional fetch options, like the HTTP method. * If this contains a `json` key, that will be encoded to JSON * and sent as a request with the appropriate content type. */ export function loadData( url: string, params: Record<string, string | null> | null, options?: any ) { const apiUrl = `${$LEKTOR_CONFIG.admin_root}/api${url}`; const fetchUrl = params ? `${apiUrl}?${paramsToQueryString(params)}` : apiUrl; if (options && options.json !== undefined) { options.body = JSON.stringify(options.json); options.headers = { "Content-Type": "application/json" }; delete options.json; } return fetch(fetchUrl, { credentials: "same-origin", method: "GET", ...options, }).then(handleJSON); } |