import { __publicField } from "./chunk-V6TY7KAL.js"; // ../../node_modules/.pnpm/@kevisual+cache@0.0.1_rollup@4.36.0_tslib@2.8.1_typescript@5.8.2/node_modules/@kevisual/cache/dist/cache.js function promisifyRequest(request) { return new Promise((resolve, reject) => { request.oncomplete = request.onsuccess = () => resolve(request.result); request.onabort = request.onerror = () => reject(request.error); }); } function createStore(dbName, storeName) { const request = indexedDB.open(dbName); request.onupgradeneeded = () => request.result.createObjectStore(storeName); const dbp = promisifyRequest(request); return (txMode, callback) => dbp.then((db) => callback(db.transaction(storeName, txMode).objectStore(storeName))); } var defaultGetStoreFunc; function defaultGetStore() { if (!defaultGetStoreFunc) { defaultGetStoreFunc = createStore("keyval-store", "keyval"); } return defaultGetStoreFunc; } function get(key, customStore = defaultGetStore()) { return customStore("readonly", (store) => promisifyRequest(store.get(key))); } function set(key, value, customStore = defaultGetStore()) { return customStore("readwrite", (store) => { store.put(value, key); return promisifyRequest(store.transaction); }); } function setMany(entries2, customStore = defaultGetStore()) { return customStore("readwrite", (store) => { entries2.forEach((entry) => store.put(entry[1], entry[0])); return promisifyRequest(store.transaction); }); } function getMany(keys2, customStore = defaultGetStore()) { return customStore("readonly", (store) => Promise.all(keys2.map((key) => promisifyRequest(store.get(key))))); } function update(key, updater, customStore = defaultGetStore()) { return customStore("readwrite", (store) => ( // Need to create the promise manually. // If I try to chain promises, the transaction closes in browsers // that use a promise polyfill (IE10/11). new Promise((resolve, reject) => { store.get(key).onsuccess = function() { try { store.put(updater(this.result), key); resolve(promisifyRequest(store.transaction)); } catch (err) { reject(err); } }; }) )); } function del(key, customStore = defaultGetStore()) { return customStore("readwrite", (store) => { store.delete(key); return promisifyRequest(store.transaction); }); } function delMany(keys2, customStore = defaultGetStore()) { return customStore("readwrite", (store) => { keys2.forEach((key) => store.delete(key)); return promisifyRequest(store.transaction); }); } function clear(customStore = defaultGetStore()) { return customStore("readwrite", (store) => { store.clear(); return promisifyRequest(store.transaction); }); } function eachCursor(store, callback) { store.openCursor().onsuccess = function() { if (!this.result) return; callback(this.result); this.result.continue(); }; return promisifyRequest(store.transaction); } function keys(customStore = defaultGetStore()) { return customStore("readonly", (store) => { if (store.getAllKeys) { return promisifyRequest(store.getAllKeys()); } const items = []; return eachCursor(store, (cursor) => items.push(cursor.key)).then(() => items); }); } function values(customStore = defaultGetStore()) { return customStore("readonly", (store) => { if (store.getAll) { return promisifyRequest(store.getAll()); } const items = []; return eachCursor(store, (cursor) => items.push(cursor.value)).then(() => items); }); } function entries(customStore = defaultGetStore()) { return customStore("readonly", (store) => { if (store.getAll && store.getAllKeys) { return Promise.all([ promisifyRequest(store.getAllKeys()), promisifyRequest(store.getAll()) ]).then(([keys2, values2]) => keys2.map((key, i) => [key, values2[i]])); } const items = []; return customStore("readonly", (store2) => eachCursor(store2, (cursor) => items.push([cursor.key, cursor.value])).then(() => items)); }); } var idb = Object.freeze({ __proto__: null, clear, createStore, del, delMany, entries, get, getMany, keys, promisifyRequest, set, setMany, update, values }); var CacheWorkspace = class { constructor() { __publicField(this, "storage"); __publicField(this, "data", null); this.storage = idb; } async get(name) { const data = await get(name); this.data = data; return data; } async set(name, data) { this.data = data; await set(name, data); } async del(name) { this.data = null; await del(name); } /** * Clear all values in the store. */ async clear() { await clear(); } }; var MyCache = class extends CacheWorkspace { constructor(name) { super(); __publicField(this, "name"); __publicField(this, "updatedAt"); this.name = name || "my-cache"; } async getData() { const cache = await super.get(this.name); this.updatedAt = cache.updatedAt; if (cache.expireTime && cache.expireTime < Date.now()) { await super.del(this.name); return {}; } return cache.data; } /** * 设置缓存数据,默认过期时间为10天 * @param data * @param opts */ async setData(data, opts) { const now = Date.now(); const expireTime = now + ((opts == null ? void 0 : opts.expireTime) || 1e3 * 60 * 60 * 24 * 10); const newData = { data, updatedAt: Date.now(), expireTime }; await super.set(this.name, newData); this.updatedAt = newData.updatedAt; } async del() { await super.del(this.name); } }; export { CacheWorkspace, MyCache }; //# sourceMappingURL=@kevisual_cache.js.map