Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save FranckFreiburger/a61fc738094ed9132f2da86dd69e2ba5 to your computer and use it in GitHub Desktop.
Save FranckFreiburger/a61fc738094ed9132f2da86dd69e2ba5 to your computer and use it in GitHub Desktop.
basic indexedDB wrapper
// indexedDB doc: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB#basic_pattern
const pdb = new Promise((resolve, reject) => {
const request = indexedDB.open("compiledCache", 1);
request.onerror = (event) => reject(event);
request.onsuccess = (event) => resolve(event.target.result);
request.onupgradeneeded = (event) => {
request.onsuccess = null;
const db = event.target.result;
const objectStore = db.createObjectStore("main", { keyPath: "key" });
objectStore.transaction.oncomplete = event => resolve(db);
objectStore.transaction.onerror = event => reject(event);
}
});
async function withObjectStore(pdb, name, cb) {
const transaction = (await pdb).transaction([name], "readwrite");
const objectStore = transaction.objectStore(name);
const request = cb(objectStore);
return await new Promise((resolve, reject) => {
request.onerror = event => reject(event);
request.onsuccess = event => resolve(event.target.result);
});
}
////
const compiledCache = {
async get(key) {
return await withObjectStore(pdb, 'main', objectStore => objectStore.get(key)).then(result => result?.value);
//return window.localStorage.getItem(key);
},
async set(key, value) {
return await withObjectStore(pdb, 'main', objectStore => objectStore.add({ key, value }));
//window.localStorage.setItem(key, value);
},
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment