export interface CacheStored { v: string; ts: number; ttl: number; t: 'data' | 'markup'; data: T; meta?: Record; } export interface CacheGetResult { data?: T; meta?: Record; isExpired: boolean; isStale: boolean; ageMs: number; raw?: CacheStored; } export interface CacheEventDetail { action: 'hit' | 'miss' | 'stale' | 'set' | 'purge' | 'error' | 'evict'; key: string; namespace: string; info?: any; } interface CreateCacheOptions { namespace: string; version?: string; storage?: 'local' | 'session' | 'memory'; prefix?: string; defaultTTL?: number; staleTTL?: number; maxEntries?: number; maxValueBytes?: number; serialize?: (v: any) => string; deserialize?: (s: string) => any; dispatchEvents?: boolean; target?: HTMLElement | Window; } interface GetOrSetOptions { ttl?: number; meta?: Record; staleWhileRevalidate?: boolean; type?: 'data' | 'markup'; transform?: (fresh: any) => T; } export declare function createCache(options: CreateCacheOptions): { buildKey: (type: "data" | "markup", params: Record) => string; get: (key: string) => CacheGetResult; set: (key: string, type: "data" | "markup", data: T, cfg?: { ttl?: number; meta?: Record; }) => void; getOrSet: (key: string, type: "data" | "markup", fetcher: () => Promise, opts?: GetOrSetOptions) => Promise; refresh: (key: string, type: "data" | "markup", fetcher: () => Promise, opts?: GetOrSetOptions) => Promise; purge: (key: string) => void; purgePattern: (pattern: RegExp | ((k: string) => boolean)) => void; clearNamespace: () => void; inflight: Map>; keyForData: (params: Record) => string; getData: (params: Record) => CacheGetResult; setData: (params: Record, data: T, cfg?: { ttl?: number; meta?: Record; }) => void; getOrSetData: (params: Record, fetcher: () => Promise, opts?: GetOrSetOptions) => Promise; keyForMarkup: (params: Record) => string; getMarkup: (params: Record) => CacheGetResult; setMarkup: (params: Record, html: string, cfg?: { ttl?: number; meta?: Record; }) => void; getOrSetMarkup: (params: Record, producer: () => Promise, opts?: GetOrSetOptions) => Promise; }; export {};