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.

3 lines (2 loc) 1.51 kB
(function(s,i){typeof exports=="object"&&typeof module<"u"?module.exports=i(require("@signaldb/core")):typeof define=="function"&&define.amd?define(["@signaldb/core"],i):(s=typeof globalThis<"u"?globalThis:s||self,s.SignalDB=i(s.core))})(this,function(s){"use strict";function i(m,l){const{prefix:b="signaldb-"}=l||{},p=`${b}${m}`,a="items";function u(){return new Promise((c,d)=>{const e=indexedDB.open(p,1);e.addEventListener("upgradeneeded",()=>{const r=e.result;r.objectStoreNames.contains(a)||r.createObjectStore(a,{keyPath:"id"})}),e.addEventListener("success",()=>c(e.result)),e.addEventListener("error",()=>{var r;return d(new Error(((r=e.error)==null?void 0:r.message)||"Database error"))})})}async function E(){const c=await u();return new Promise((d,e)=>{const t=c.transaction(a,"readonly").objectStore(a).getAll();t.addEventListener("success",()=>d(t.result)),t.addEventListener("error",()=>{var o;return e(new Error(((o=t.error)==null?void 0:o.message)||"Error fetching items"))})})}return s.createPersistenceAdapter({async load(){return{items:await E()}},async save(c,{added:d,modified:e,removed:r}){const t=(await u()).transaction(a,"readwrite"),o=t.objectStore(a);return d.forEach(n=>o.add(n)),e.forEach(n=>o.put(n)),r.forEach(n=>o.delete(n.id)),new Promise((n,w)=>{t.addEventListener("complete",()=>n()),t.addEventListener("error",()=>{var f;return w(new Error(((f=t.error)==null?void 0:f.message)||"Transaction error"))})})},async register(){}})}return i}); //# sourceMappingURL=index.umd.js.map