a2dbf7b3db
* Prep for in-process plug loading (e.g. for CF workers, Deno Deploy) * Prototype of fixed in-process loading plugs * Fix: buttons not to scroll with content * Better positioning of modal especially on mobile * Move query caching outside query * Fix annoying mouse behavior when filter box appears * Page navigator search tweaks
22 lines
480 B
TypeScript
22 lines
480 B
TypeScript
import { LimitedMap } from "$sb/lib/limited_map.ts";
|
|
|
|
const cache = new LimitedMap<any>(50);
|
|
|
|
export async function ttlCache<K, V>(
|
|
key: K,
|
|
fn: (key: K) => Promise<V>,
|
|
ttlSecs?: number,
|
|
): Promise<V> {
|
|
if (!ttlSecs) {
|
|
return fn(key);
|
|
}
|
|
const serializedKey = JSON.stringify(key);
|
|
const cached = cache.get(serializedKey);
|
|
if (cached) {
|
|
return cached;
|
|
}
|
|
const result = await fn(key);
|
|
cache.set(serializedKey, result, ttlSecs * 1000);
|
|
return result;
|
|
}
|