// A fun fact about $derive: if the deriving expression throws an error, then Svelte (at least as of // 5.20.2) _permanently_ stops evaluating it, even if the inputs change. To prevent this, you need // to ensure that derive expressions never raise an exception. function tryDerive(args, func, fallback) { try { return func(...args); } catch (e) { console.debug('deriver threw exception', e, func, args); return fallback; } } // A "deriver" is a function that never raises; if the underlying function would raise, the // corresponding deriver instead returns a fallback value (or `undefined`). export function makeDeriver(func, fallback) { return (...args) => tryDerive(args, func, fallback); } // Some widely-used derivers, for convenience. export const json = makeDeriver(JSON.parse);