Add signal persist

This commit is contained in:
2026-04-08 11:48:04 +02:00
parent 1e8b3ad803
commit b75d1175a5

26
sw.js
View File

@@ -50,18 +50,30 @@ const track = (subs) => {
} }
// --- Signals Core --- // --- Signals Core ---
export const signal = (value) => { export const signal = (value, key = null) => {
const subs = new Set(); const subs = new Set();
return { const storage = typeof localStorage !== 'undefined';
if (key && storage) {
const saved = localStorage.getItem(key);
if (saved !== null) try { value = JSON.parse(saved); } catch {}
}
const sig = {
_isSig: true,
get value() { track(subs); return value; }, get value() { track(subs); return value; },
set value(newValue) { set value(v) {
if (newValue === value) return; if (v === value) return;
value = newValue; value = v;
subs.forEach(fn => queue.add(fn)); subs.forEach(fn => queue.add(fn));
if (!isScheduled) { isScheduled = true; queueMicrotask(tick); } if (!isScheduled) { isScheduled = true; queueMicrotask(tick); }
} }
} };
}
if (key && storage) effect(() => localStorage.setItem(key, JSON.stringify(sig.value)));
return sig;
};
export const untrack = (fn) => { export const untrack = (fn) => {
const prev = activeEffect; const prev = activeEffect;