9.4 KiB
9.4 KiB
@suaveplan/cache - Type-safe caching abstraction: LRU/LFU/FIFO/TTL MemoryCache, NamespacedCache, CacheFactory, stale-while-revalidate, multi-get/set, lifecycle events, injectable clock, OTel instrumentation, and structured CACHE.* error codes.
Summary
Type-safe caching abstraction for Suaveplan. Provides MemoryCache with LRU/LFU/FIFO/TTL eviction, NamespacedCache for shared-storage isolation, a CacheFactory with module-augmentation-based provider registry, stale-while-revalidate, multi-get/set, injectable clock and event bus, OTel instrumentation, and structured CACHE.* error codes.
Documentation tree
- abstract-cache — (no submodules)
- abstract-cache — (no submodules)
- namespaced-cache — (no submodules)
- namespaced-cache — (no submodules)
- errors — (no submodules)
- cache-error — (no submodules)
- cache — (no submodules)
- cache — (no submodules)
- registry — (no submodules)
- registry — (no submodules)
- memory-cache — (no submodules)
- memory-cache — (no submodules)
- common — Centralises all shared TypeScript types and interfaces for
@suaveplan/cache. Keeping types in one file prevents circu… - schemas — Provides Zod validation schemas for all public option types in
@suaveplan/cache. These schemas run at configuration b…
- schemas — Provides Zod validation schemas for all public option types in
@suaveplan/cache. These schemas run at configuration b… - abstract-cache — (no submodules)- namespaced-cache — (no submodules)- namespaced-cache — (no submodules)- errors — (no submodules)- cache-error — (no submodules)- cache — (no submodules)- cache — (no submodules)- registry — (no submodules)- registry — (no submodules)- memory-cache — (no submodules)- memory-cache — (no submodules)- common — Centralises all shared TypeScript types and interfaces for
@suaveplan/cache. Keeping types in one file prevents circu… - schemas — Provides Zod validation schemas for all public option types in
@suaveplan/cache. These schemas run at configuration b… - abstract-cache — (no submodules)- namespaced-cache — (no submodules)- namespaced-cache — (no submodules)- errors — (no submodules)- cache-error — (no submodules)- cache — (no submodules)- cache — (no submodules)- registry — (no submodules)- registry — (no submodules)- memory-cache — (no submodules)- memory-cache — (no submodules)- common — Centralises all shared TypeScript types and interfaces for
@suaveplan/cache. Keeping types in one file prevents circu… - schemas — Provides Zod validation schemas for all public option types in
@suaveplan/cache. These schemas run at configuration b… - abstract-cache — (no submodules)- namespaced-cache — (no submodules) - namespaced-cache — (no submodules)- errors — (no submodules) - cache-error — (no submodules)- cache — (no submodules) - cache — (no submodules)- registry — (no submodules) - registry — (no submodules)- memory-cache — (no submodules) - memory-cache — (no submodules)- common — Centralises all shared TypeScript types and interfaces for
@suaveplan/cache. Keeping types in one file prevents circu… - schemas — Provides Zod validation schemas for all public option types in
@suaveplan/cache. These schemas run at configuration b…
Packages
| Module | Description |
|---|---|
| errors/cache-error | CacheError class and CACHE_CODES registry |
| types/common | Shared TypeScript types and CacheProviderRegistry extension point |
| types/schemas | Zod validation schemas for all option types |
| abstract/abstract-cache | AbstractCache<T> base class with wrap, getMultiple, setMultiple |
| abstract/namespaced-cache | NamespacedCache<T> key-prefix wrapper |
| memory/memory-cache | MemoryCache<T> with LRU/LFU/FIFO/TTL eviction |
| factory/cache-factory | CacheFactory and free-function registry API |
| factory/registry | Built-in memory provider registration |
Quick Start
import { MemoryCache } from "@suaveplan/cache";
const cache = new MemoryCache<string>({ maxSize: 500, defaultTTL: 60_000 });
await cache.set("user:1", "Alice");
const alice = await cache.get("user:1"); // "Alice"
// wrap — get-or-compute
const data = await cache.wrap("expensive:key", async () => {
return await fetchSomeData();
}, { ttl: 30_000 });