aboutsummaryrefslogtreecommitdiff
path: root/llama.cpp/tools/server/webui/src/lib/stores/persisted.svelte.ts
diff options
context:
space:
mode:
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.ts50
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 @@
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}