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' }
Create a free account and build your private vault. Share publicly whenever you want.