kentico-kontent-nuxt-module
Version:
Add Kentico Kontent super power to your nuxt app
51 lines (50 loc) • 1.56 kB
JavaScript
export class CacheService {
constructor(client) {
this.cacheEntries = [];
this.deliveryClient = client;
}
viaCache(query, seconds, cacheKey, isServerProcess) {
if (this.cacheEntries && query && isServerProcess) {
return query.toPromise();
}
;
if (!seconds) {
seconds = 30;
}
if (query && !process.server) {
const key = cacheKey && cacheKey !== "" ? cacheKey : query.getUrl();
const cacheEntry = getCacheEntry(this.cacheEntries, key);
if (cacheEntry && getDiffInSeconds(new Date(), cacheEntry.timestamp) < seconds) {
return new Promise((resolve, reject) => {
console.log("viaCache: response taken from cache");
resolve(cacheEntry.object);
});
} else {
return query.toPromise().then((response) => {
console.log("viaCache: response taken from server");
if (cacheEntry) {
cacheEntry.timestamp = new Date();
} else {
this.cacheEntries.push({ key, object: response, seconds, timestamp: new Date() });
}
return response;
});
}
}
return new Promise((resolve, reject) => {
resolve(null);
});
}
}
function getCacheEntry(cacheEntries, key) {
if (cacheEntries) {
return cacheEntries.find((s) => s.key === key);
}
return null;
}
function getDiffInSeconds(t1, t2) {
const dif = t1.getTime() - t2.getTime();
const secondsFromT1ToT2 = dif / 1e3;
const secondsBetweenDates = Math.abs(secondsFromT1ToT2);
return secondsBetweenDates;
}