23 lines
1.0 KiB
JavaScript
23 lines
1.0 KiB
JavaScript
/* Gemeinsame Hilfen der Funktions-Module (funktionen.js, analyse.js): Escaping fuer Kundentexte, URL-Pruefung, API-Aufruf. */
|
|
|
|
export const esc = (value) => String(value ?? '')
|
|
.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''')
|
|
export const safeUrl = (url) => (/^https?:\/\//i.test(url || '') ? url : '')
|
|
|
|
export async function request(path, { method = 'GET', body, raw } = {}) {
|
|
const response = await fetch(path, {
|
|
method,
|
|
credentials: 'same-origin',
|
|
headers: raw ? { 'Content-Type': 'application/octet-stream' } : body ? { 'Content-Type': 'application/json' } : {},
|
|
body: raw || (body ? JSON.stringify(body) : undefined),
|
|
})
|
|
const data = await response.json().catch(() => ({}))
|
|
if (!response.ok) {
|
|
const err = new Error(data.error || (response.status === 502 ? 'Server nicht erreichbar. Bitte kurz warten und noch einmal versuchen.' : `Fehler ${response.status}`))
|
|
err.status = response.status
|
|
if (data.field) err.field = data.field
|
|
throw err
|
|
}
|
|
return data
|
|
}
|