UNPKG

cache-kit

Version:

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

81 lines (78 loc) 2.45 kB
import { getExpiryTimeCacheKey } from "./chunk-IDUKVVV3.mjs"; import { __async } from "./chunk-VM2JCVBB.mjs"; // src/utils/memory.util.ts var Memory = /* @__PURE__ */ new Map(); var 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(); } }; // src/adapters/memory.ts var memoryCachedFetch = (normalizedUrl, options, cacheOptions) => __async(null, null, 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 ? 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 ? 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 ? void 0 : cacheOptions.revalidate) })).catch((err) => { console.warn("Background revalidation failed:", err); }); } if (!response) { throw new Error("No valid response available."); } return response; }); var memory_default = memoryCachedFetch; export { memory_default as default };