UNPKG

cache-kit

Version:

A simple caching layer for fetch requests — supports memory, browser (localStorage), and Node.js (filesystem) adapters with smart strategies.

80 lines (76 loc) 2.82 kB
import { _ as __awaiter } from './index-2gRjNNLr.js'; import { g as getExpiryTimeCacheKey } from './common.util-CWC4ins0.js'; const Memory = new Map(); const cacheMemory = { set: function (key, data) { Memory.set(key, data); }, get: function (key) { return Memory.get(key) || null; }, has: function (key) { return Memory.has(key); }, delete: function (key) { Memory.delete(key); }, clear: function () { Memory.clear(); } }; const memoryCachedFetch = (normalizedUrl, options, cacheOptions) => __awaiter(void 0, void 0, void 0, function* () { const cacheKey = normalizedUrl; let response; if (cacheOptions.strategy === 'cache-first') { if (cacheMemory.has(cacheKey) && cacheMemory.get(cacheKey).expiredAt > Date.now()) { response = cacheMemory.get(cacheKey).response.clone(); } else { const res = yield fetch(normalizedUrl, options); const cacheData = { response: res.clone(), expiredAt: getExpiryTimeCacheKey(cacheOptions === null || cacheOptions === void 0 ? void 0 : cacheOptions.revalidate) }; cacheMemory.set(cacheKey, cacheData); response = res; } } else if (cacheOptions.strategy === 'network-first') { let res; try { res = yield fetch(normalizedUrl, options); const cacheData = { response: res.clone(), expiredAt: getExpiryTimeCacheKey(cacheOptions === null || cacheOptions === void 0 ? void 0 : cacheOptions.revalidate) }; cacheMemory.set(cacheKey, cacheData); response = res; } catch (err) { if (cacheMemory.has(cacheKey) && cacheMemory.get(cacheKey).expiredAt > Date.now()) { response = cacheMemory.get(cacheKey).response.clone(); } else { throw new Error(`Network fetch failed and no cache available: ${err}`); } } } else if (cacheOptions.strategy === 'stale-while-revalidate') { if (cacheMemory.has(cacheKey)) { response = cacheMemory.get(cacheKey).response.clone(); } fetch(normalizedUrl, options). then(res => cacheMemory.set(cacheKey, { response: res, expiredAt: getExpiryTimeCacheKey(cacheOptions === null || cacheOptions === void 0 ? void 0 : cacheOptions.revalidate) })).catch(err => { console.warn('Background revalidation failed:', err); }); } if (!response) { throw new Error('No valid response available.'); } return response; }); export { memoryCachedFetch as default }; //# sourceMappingURL=memory-BUmhYjW2.js.map