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
JavaScript
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 };