diff options
Diffstat (limited to 'llama.cpp/tools/server/webui/src/lib/stores/persisted.svelte.ts')
| -rw-r--r-- | llama.cpp/tools/server/webui/src/lib/stores/persisted.svelte.ts | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/llama.cpp/tools/server/webui/src/lib/stores/persisted.svelte.ts b/llama.cpp/tools/server/webui/src/lib/stores/persisted.svelte.ts new file mode 100644 index 0000000..1e07f80 --- /dev/null +++ b/llama.cpp/tools/server/webui/src/lib/stores/persisted.svelte.ts | |||
| @@ -0,0 +1,50 @@ | |||
| 1 | import { browser } from '$app/environment'; | ||
| 2 | |||
| 3 | type PersistedValue<T> = { | ||
| 4 | get value(): T; | ||
| 5 | set value(newValue: T); | ||
| 6 | }; | ||
| 7 | |||
| 8 | export 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 | } | ||
