UNPKG

ghost-cache

Version:

A lightweight auto-caching wrapper for fetch() and Axios with multi-storage support (localStorage, sessionStorage, IndexedDB, Redis)

68 lines (67 loc) 2.4 kB
const DB_NAME = "GhostCacheDB"; const STORE_NAME = "CacheStore"; const DB_VERSION = 1; function openDB() { return new Promise((resolve, reject) => { const request = indexedDB.open(DB_NAME, DB_VERSION); request.onupgradeneeded = function () { const db = request.result; if (!db.objectStoreNames.contains(STORE_NAME)) { db.createObjectStore(STORE_NAME); } }; request.onsuccess = function () { resolve(request.result); }; request.onerror = function () { reject(request.error); }; }); } export class IndexedDBAdapter { constructor() { this.dbPromise = openDB(); } async getItem(key) { const db = await this.dbPromise; return new Promise((resolve, reject) => { const tx = db.transaction(STORE_NAME, "readonly"); const store = tx.objectStore(STORE_NAME); const request = store.get(key); request.onsuccess = () => { resolve(request.result || null); }; request.onerror = () => reject(request.error); }); } async setItem(key, value) { const db = await this.dbPromise; return new Promise((resolve, reject) => { const tx = db.transaction(STORE_NAME, "readwrite"); const store = tx.objectStore(STORE_NAME); const request = store.put(value, key); request.onsuccess = () => resolve(); request.onerror = () => reject(request.error); }); } async removeItem(key) { const db = await this.dbPromise; return new Promise((resolve, reject) => { const tx = db.transaction(STORE_NAME, "readwrite"); const store = tx.objectStore(STORE_NAME); const request = store.delete(key); request.onsuccess = () => resolve(); request.onerror = () => reject(request.error); }); } async clear() { const db = await this.dbPromise; return new Promise((resolve, reject) => { const tx = db.transaction(STORE_NAME, "readwrite"); const store = tx.objectStore(STORE_NAME); const request = store.clear(); request.onsuccess = () => resolve(); request.onerror = () => reject(request.error); }); } }