cached
fn's answer for key, kept for five minutes; the least lately used are forgotten past REGISTRY_LIMITS.rememberedVisitors.
import { REGISTRY_LIMITS, visitorCache } from "#codebase/tcmts/registry"; export async function cached(key: string, fn: () => Promise<Set<string>>): Promise<Set<string>> { const kept = visitorCache.get(key); if (kept && Date.now() - kept.at < 300_000) { // (used: last to go) visitorCache.delete(key); visitorCache.set(key, kept); return kept.value; } const value = await fn(); visitorCache.delete(key); visitorCache.set(key, { at: Date.now(), value }); for (const old of visitorCache.keys()) { if (visitorCache.size <= REGISTRY_LIMITS.rememberedVisitors) break; visitorCache.delete(old); } return value; }