UNPKG

iconify-browser-cache

Version:

```html <script src="https://cdn.jsdelivr.net/npm/iconify-browser-cache@0.4.0/dist/iconify-browser-cache.umd.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/iconify-icon@3.0.0/dist/iconify-icon.min.js"></script> ```

41 lines (38 loc) 1.4 kB
import { createStorage } from 'unstorage'; import indexedDbDriver from 'unstorage/drivers/indexedb'; import { createStore, entries } from 'idb-keyval'; import { l as localStore } from '../shared/iconify-browser-cache.e29JxXC1.mjs'; const useStorage = (config) => { if (config.storage === "indexedDB") { const idb = { dbName: config.prefix, storeName: "key-val" }; const storage = createStorage({ driver: indexedDbDriver(idb) }); const expirationStore = createStore(idb.dbName, idb.storeName); const removeExpired = async (prefix) => { const keys = await entries(expirationStore); let collectionsForDelete = []; for (const [key, value] of keys) { const keyString = String(key); if (keyString.startsWith(prefix) && keyString.endsWith(".metadata")) { const metadata = value; if (Date.now() >= metadata.expires) { await storage.remove(keyString); const collectionKey = keyString.replace(/\.metadata$/, ""); collectionsForDelete.push(collectionKey); } } collectionsForDelete.map(async (collection) => { if (keyString.startsWith(collection)) { await storage.remove(keyString); } }); } }; storage.removeExpired = removeExpired; return storage; } return localStore; }; export { useStorage };