blob: a3837a5b73b4fdd19b3abac26804948a77e33fca (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import { writable, type Writable } from "svelte/store";
import { browser } from "$app/environment";
export const persistentStore = <T>(key: string, initial: T): Writable<T> => {
const store = writable<T>(initial);
if (browser)
import("localforage").then(async (localforage) => {
let hydrated = false;
let pendingValue = initial;
store.subscribe((value) => {
pendingValue = value;
if (hydrated) localforage.default.setItem(key, value);
});
const value = await localforage.default.getItem<T>(key);
if (value !== null) store.set(value);
hydrated = true;
await localforage.default.setItem(key, pendingValue);
});
return store;
};
|