blob: 85547e8d39939bf168a5c58ebe7b0178b00f9b73 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
// 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);
|