Files
2026-10-29 11:57:29 +01:00

88 lines
3.0 KiB
JavaScript

// Generated, do not edit. sha256:f8b7d4cfde53f5e36967f7e1ae667dea2e048f4cbedb5088c2d2e8af98709896
import { CONFIG } from '../../shared/config.js';
import { t } from '../i18n/index.js';
const DOORLATEN = new Set(['then', 'toJSON', 'constructor', 'hasOwnProperty', 'nodeType', 'length',
'inspect', 'valueOf', 'toString']);
function bewaakteRij(rij) {
return new Proxy(rij, {
get(doel, naam) {
if (typeof naam === 'symbol' || naam in doel || DOORLATEN.has(naam)) return Reflect.get(doel, naam);
throw new Error(
`Onbekende kolom '${String(naam)}' op een rij met: ${Object.keys(doel).join(', ')}. ` +
`Waarschijnlijk een naam van vóór de baseline.`);
},
});
}
function bewaak(waarde) {
if (waarde instanceof Map) return new Map([...waarde].map(([k, v]) => [k, bewaak(v)]));
if (Array.isArray(waarde)) return waarde.map(bewaak);
if (waarde && typeof waarde === 'object') return bewaakteRij(waarde);
return waarde;
}
export function decodeer(waarde) {
if (Array.isArray(waarde)) return waarde.map(decodeer);
if (waarde && typeof waarde === 'object') {
if (waarde.__t === 'Map') return new Map(waarde.v.map(([k, v]) => [k, decodeer(v)]));
if (waarde.__t === 'Set') return new Set(waarde.v.map(decodeer));
return Object.fromEntries(Object.entries(waarde).map(([k, v]) => [k, decodeer(v)]));
}
return waarde;
}
let guardAan = CONFIG.ROW_GUARD;
export function setRowGuard(aan) { guardAan = !!aan; }
export function rowGuardAan() { return guardAan; }
const DISPATCH_VENSTER_MS = 500;
const laatstGedispatcht = new Map();
export function dispatchChanges(namen) {
if (!Array.isArray(namen) || !namen.length) return [];
const nu = Date.now();
const uit = [];
for (const naam of namen) {
if (typeof naam !== 'string' || !naam) continue;
const vorige = laatstGedispatcht.get(naam);
if (vorige != null && nu - vorige < DISPATCH_VENSTER_MS) continue;
laatstGedispatcht.set(naam, nu);
uit.push(naam);
document.dispatchEvent(new CustomEvent(naam));
}
return uit;
}
export function serverFoutTekst(json) {
if (!json) return '';
if (json.key) {
try { return t(json.key, json.params); } catch { }
}
return json.error || '';
}
export async function rpc(module, functie, ...args) {
let res;
try {
res = await fetch(`/api/data/${module}/${functie}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ args }),
});
} catch (e) {
throw new Error(`No connection to the server (${module}/${functie}): ${e.message}`);
}
if (res.status === 401) {
location.replace(CONFIG.AUTH.LOGIN_PATH);
throw new Error(t('common.sessionExpired'));
}
const json = await res.json().catch(() => null);
if (!res.ok) throw Object.assign(new Error(serverFoutTekst(json) || `HTTP ${res.status} bij ${module}/${functie}`), { key: json?.key ?? null });
if (json && json.changes) dispatchChanges(json.changes);
const result = decodeer(json ? json.result : null);
return guardAan ? bewaak(result) : result;
}