// Created on savesnippets.com ยท https://savesnippets.com/udr4QOdouvmD5Y function openDB(name, storeName, version = 1) { const req = indexedDB.open(name, version); req.onupgradeneeded = (e) => e.target.result.createObjectStore(storeName); const dbPromise = new Promise((res, rej) => { req.onsuccess = () => res(req.result); req.onerror = () => rej(req.error); }); function tx(mode, fn) { return dbPromise.then((db) => new Promise((res, rej) => { const store = db.transaction(storeName, mode).objectStore(storeName); const r = fn(store); r.onsuccess = () => res(r.result); r.onerror = () => rej(r.error); }) ); } return { get: (key) => tx('readonly', (s) => s.get(key)), set: (key, value) => tx('readwrite', (s) => s.put(value, key)), delete: (key) => tx('readwrite', (s) => s.delete(key)), getAll: () => tx('readonly', (s) => s.getAll()), }; } // Usage const db = openDB('my-app', 'cache'); await db.set('user', { name: 'Alice', role: 'admin' }); console.log(await db.get('user')); // { name: 'Alice', role: 'admin' }