import { resolve as resolveEntry } from "@/utils/entry" import type { Lang } from "@/constants/languages" const entryResponseCache: Map< string, { contentType: string | null uid: string | null expiresAt: number } > = new Map() let size: number = 0 export const fetchAndCacheEntry = async (path: string, lang: Lang) => { const cacheKey = `${path + lang}` const cachedResponse = entryResponseCache.get(cacheKey) if (cachedResponse && cachedResponse.expiresAt > Date.now() / 1000) { console.log("[CMS MIDDLEWARE]: CACHE HIT") return cachedResponse } if (cachedResponse && cachedResponse.expiresAt < Date.now() / 1000) { console.log("[CMS MIDDLEWARE]: CACHE STALE") size -= JSON.stringify(cachedResponse).length entryResponseCache.delete(cacheKey) } else { console.log("[CMS MIDDLEWARE]: CACHE MISS") } const { contentType, uid } = await resolveEntry(path, lang) let expiresAt = Date.now() / 1000 if (!contentType || !uid) { expiresAt += 600 } else { expiresAt += 3600 * 12 } const entryCache = { contentType, uid, expiresAt } size += JSON.stringify(entryCache).length console.log("[CMS MIDDLEWARE] Adding to cache", entryCache) console.log("[CMS MIDDLEWARE] Cache size (total)", size) entryResponseCache.set(cacheKey, entryCache) return { contentType, uid, } }