@sv-use/core
Version:
A collection of Svelte 5 utilities.
33 lines (32 loc) • 1.19 kB
JavaScript
/**
* A reactive state that falls back to `defaultValue` if set to `null` or `undefined`.
* @param defaultValue The fallback value when the value is set to `null` or `undefined`.
* @param initialValue The initial value of the state. Defaults to `defaultValue` if omitted.
* @see https://svelte-librarian.github.io/sv-use/docs/core/default-state
*/
export function defaultState(defaultValue, initialValue) {
const _default = $state({ current: initialValue ?? defaultValue });
const handler = {
get(target, key) {
if (target &&
typeof target === 'object' &&
typeof target[key] === 'object' &&
target[key] !== null) {
return new Proxy(target[key], handler);
}
else {
return target[key];
}
},
set(target, key, value) {
if (value || JSON.stringify(target) !== JSON.stringify($state.snapshot(_default))) {
target[key] = value;
}
else {
target[key] = defaultValue;
}
return true;
}
};
return new Proxy(_default, handler);
}