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