@0k/cache
v0.2.0
Published
Kids cache implementation
Readme
This packages holds a cache decorator implementation. It draws its inspiration on kids.cache a python simple yet powerful cache decorator.
This implementation leverage decorator in typescript to reach same goals:
- no dependencies
- cache clearing support
Its still in infancy and lacks:
- support for normal function (only methods and properties are cachable)
- cache stats
- 100% coverage
- doc
Adding @0k/cache to your project
From the root of your project:
npm install --save @0k/cacheOr better, as @0k/cache is still in early release,
npm install --save @0k/cache#masterTo be sure to get the latest version, relaunch this last command whenever you want to update.
Contributing to @0k/cache
This package is using npm to track dependendies, so you can install them
with:
npm installAs this package is written in typescript. You can transpile to
javascript and transpile on file change with:
## Compile and watch
npx tspc -wTests are managed through vitest
## Run test once
npm run testNote that you can also use npx vitest command to launch tests in
watch mode.
Changelog
0.2.0 (2026-04-17)
New
Export
unwrapObjectfunction andCacheDecoratedMethodtype. [Valentin Lab]CacheDecoratedMethod<F>types the return of thecachedecorator, giving typed access to.clearCache()and.feedCache()without casting.unwrapObjectextracts the proxy-unwrap loop previously duplicated inline, and exports it so callers can resolve the underlying object the same way the cache does.Overload signatures added to
cachefor accurate TypeScript inference on the various call forms.
0.1.4 (2026-04-08)
New
Add
feedCacheto programmatically inject values into the cache. [Valentin Lab]Allows pre-populating or overriding cached entries for specific argument keys without triggering the underlying computation. Exposed as a per-instance property alongside
clearCacheon both methods and getters. Also addssetto theCacheStoretype.Add
cancelOnClearoption to abort in-flight cached promises. [Valentin Lab]When enabled, cached promises that settle after their cache entry has been cleared throw a
CancelledCacheerror instead of returning stale results. This prevents consumers from acting on values whose cache was invalidated mid-flight.
Changes
Ensure same object promise returned even with
cancelOnClear[Valentin Lab]Move the
cancelOnClearwrapper from the sharedwrappedfunction into the per-instanceownMethod/getter in the initializer. Usesasync/awaitinstead of.then(). The wrapper is memoized per source promise so concurrent callers get the same object, preserving promise identity.
Fix
Scope
clearCacheper instance instead of shared prototype. [Valentin Lab]clearCachewas attached to the prototype-levelwrappedfunction, so when multiple instances initialized, the last closure would overwrite all previous ones. Shadow the prototype method/getter with per-instance own properties carrying their ownclearCache.
0.1.3 (2026-04-08)
New
Add
feedCacheto programmatically inject values into the cache. [Valentin Lab]Allows pre-populating or overriding cached entries for specific argument keys without triggering the underlying computation. Exposed as a per-instance property alongside
clearCacheon both methods and getters. Also addssetto theCacheStoretype.
Fix
Scope
clearCacheper instance instead of shared prototype. [Valentin Lab]clearCachewas attached to the prototype-levelwrappedfunction, so when multiple instances initialized, the last closure would overwrite all previous ones. Shadow the prototype method/getter with per-instance own properties carrying their ownclearCache.
0.1.2 (2026-04-08)
New
Add
cancelOnClearoption to abort in-flight cached promises. [Valentin Lab]When enabled, cached promises that settle after their cache entry has been cleared throw a
CancelledCacheerror instead of returning stale results. This prevents consumers from acting on values whose cache was invalidated mid-flight.
0.1.1 (2026-04-07)
Fix
Correct
noCacheOnRejectto return scalar value instead of tuple. [Valentin Lab]The rejection recovery path was returning the full [result, argsKey, isHit] tuple instead of just the value at index 0. This caused callers awaiting a cached async method to receive corrupted data when the rejection-retry path triggered.
0.1.0 (2026-03-23)
Fix
Unwrap
thisinclearCachesbefore cache map deletion. [Valentin Lab]When
clearCaches()was called on a proxied instance,thisreferred to the proxy, but cache maps are keyed by the unwrapped raw instance.map.delete(this)silently missed, leaving caches uncleared.Apply the same unwrap loop used in the cached method wrapper so
clearCachesresolves to the correct identity before deletion.
0.0.7 (2025-10-18)
Fix
- Prevent possible loss of prior
unWrapFnregistration. [Valentin Lab]
0.0.6 (2025-08-20)
New
Make most of the test try each cache store implementation. [Valentin Lab]
Add a
setTimeoutimplementation of theJsonKeyTTLCacheStore[Valentin Lab]Memory footprint is less in most cases
Fix
- Make
noCacheOnRejectcompatible with non-promise values. [Valentin Lab]
0.0.5 (2025-08-19)
New
Add option
cacheOnSettledfor async cached object. [Valentin Lab]Add option
noCacheOnRejectfor async cached objects. [Valentin Lab]Add tests for not caching upon exception. [Valentin Lab]
0.0.4 (2025-08-15)
New
Add option
noCacheOnRejectfor async cached objects. [Valentin Lab]Add tests for not caching upon exception. [Valentin Lab]
0.0.2 (2025-08-04)
New
- Add support of decorating getters. [Valentin Lab]
Fix
- Support proxying
this[Valentin Lab]
