blob: 22ceb1387ef2cd2fd8271d268b8dedddb29257f7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// 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) {
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 = undefined) {
return (...args) => tryDerive(args, func, fallback);
}
|