1import { browser } from '$app/environment';
 2
 3type PersistedValue<T> = {
 4	get value(): T;
 5	set value(newValue: T);
 6};
 7
 8export function persisted<T>(key: string, initialValue: T): PersistedValue<T> {
 9	let value = initialValue;
10
11	if (browser) {
12		try {
13			const stored = localStorage.getItem(key);
14
15			if (stored !== null) {
16				value = JSON.parse(stored) as T;
17			}
18		} catch (error) {
19			console.warn(`Failed to load ${key}:`, error);
20		}
21	}
22
23	const persist = (next: T) => {
24		if (!browser) {
25			return;
26		}
27
28		try {
29			if (next === null || next === undefined) {
30				localStorage.removeItem(key);
31				return;
32			}
33
34			localStorage.setItem(key, JSON.stringify(next));
35		} catch (error) {
36			console.warn(`Failed to persist ${key}:`, error);
37		}
38	};
39
40	return {
41		get value() {
42			return value;
43		},
44
45		set value(newValue: T) {
46			value = newValue;
47			persist(newValue);
48		}
49	};
50}