import {writable} from "svelte/store" import {assoc, batch} from "@welshman/lib" import {withGetter} from "@welshman/store" export type FreshnessUpdate = { ns: string key: string ts: number } export const freshness = withGetter(writable>({})) export const getFreshnessKey = (ns: string, key: string) => `${ns}:${key}` export const getFreshness = (ns: string, key: string) => freshness.get()[getFreshnessKey(ns, key)] || 0 export const setFreshnessImmediate = ({ns, key, ts}: FreshnessUpdate) => freshness.update(assoc(getFreshnessKey(ns, key), ts)) export const setFreshnessThrottled = batch(100, (updates: FreshnessUpdate[]) => freshness.update($freshness => { for (const {ns, key, ts} of updates) { $freshness[getFreshnessKey(ns, key)] = ts } return $freshness }), )