UNPKG

@signaldb/indexeddb

Version:

This is the `IndexedDB` persistence adapter for [SignalDB](https://github.com/maxnowack/signaldb). SignalDB is a local-first JavaScript database with real-time sync, enabling optimistic UI with signal-based reactivity across multiple frameworks.

47 lines (46 loc) 1.69 kB
import { createPersistenceAdapter as w } from "@signaldb/core"; function v(u, m) { const { prefix: E = "signaldb-" } = m || {}, l = `${E}${u}`, s = "items"; function i() { return new Promise((o, c) => { const e = indexedDB.open(l, 1); e.addEventListener("upgradeneeded", () => { const r = e.result; r.objectStoreNames.contains(s) || r.createObjectStore(s, { keyPath: "id" }); }), e.addEventListener("success", () => o(e.result)), e.addEventListener("error", () => { var r; return c(new Error(((r = e.error) == null ? void 0 : r.message) || "Database error")); }); }); } async function b() { const o = await i(); return new Promise((c, e) => { const t = o.transaction(s, "readonly").objectStore(s).getAll(); t.addEventListener("success", () => c(t.result)), t.addEventListener("error", () => { var n; return e(new Error(((n = t.error) == null ? void 0 : n.message) || "Error fetching items")); }); }); } return w({ async load() { return { items: await b() }; }, async save(o, { added: c, modified: e, removed: r }) { const t = (await i()).transaction(s, "readwrite"), n = t.objectStore(s); return c.forEach((a) => n.add(a)), e.forEach((a) => n.put(a)), r.forEach((a) => n.delete(a.id)), new Promise((a, p) => { t.addEventListener("complete", () => a()), t.addEventListener("error", () => { var d; return p(new Error(((d = t.error) == null ? void 0 : d.message) || "Transaction error")); }); }); }, async register() { } }); } export { v as default }; //# sourceMappingURL=index.mjs.map