- add
cache.info(key)
to get value as well as ttl and size information.
cache.fetch()
return type is nowPromise<V | undefined>
instead ofPromise<V | void>
. This is an irrelevant change practically speaking, but can require changes for TypeScript users.
cache.set(key, undefined)
is now an alias forcache.delete(key)
- Use named export only, no default export.
- Bring back minimal polyfill. If this polyfill ends up being used, then a warning is printed, as it is not safe for use outside of LRUCache.
- The
fetchContext
option was renamed tocontext
, and may no longer be set on the cache instance itself. - Rewritten in TypeScript, so pretty much all the types moved around a lot.
- The AbortController/AbortSignal polyfill is removed. For this reason, Node version 16.14.0 or higher is now required.
- Internal properties were moved to actual private class properties.
- Keys and values must not be
null
orundefined
. - Minified export available at
'lru-cache/min'
, for both CJS and MJS builds.
- Add support for internal state investigation through the use of
a
status
option tohas()
,set()
,get()
, andfetch()
.
- Add
signal
option forfetch
to pass a user-supplied AbortSignal - Add
ignoreFetchAbort
andallowStaleOnFetchAbort
options
- Fail fetch() promises when they are aborted
- Add
allowStaleOnFetchRejection
option
- Provide both ESM and CommonJS exports
- Add
maxEntrySize
option to prevent caching items above a given calculated size.
- Add
forceRefresh
option to trigger a call to thefetchMethod
even if the item is found in cache, and not older than itsttl
.
- Add
fetchContext
option to provide additional information to thefetchMethod
- 7.12.1: Fix bug where adding an item with size greater than
maxSize
would cause bizarre behavior.
- Add 'noDeleteOnStaleGet' option, to suppress behavior where a
get()
of a stale item would remove it from the cache.
- Add
noDeleteOnFetchRejection
option, to suppress behavior where a failedfetch
will delete a previous stale value. - Ship types along with the package, rather than relying on out of date types coming from DefinitelyTyped.
- Better AbortController polyfill, supporting
signal.addEventListener('abort')
andsignal.onabort
. - (7.9.1) Drop item from cache instead of crashing with an
unhandledRejection
when thefetchMethod
throws an error or returns a rejected Promise.
- add
updateAgeOnHas
option - warnings sent to
console.error
ifprocess.emitWarning
unavailable
- fetch: provide options and abort signal
- add cache.getRemainingTTL(key)
- Add async cache.fetch() method, fetchMethod option
- Allow unbounded storage if maxSize or ttl set
- defend against mutation while iterating
- Add rentries, rkeys, rvalues
- remove bundler and unnecessary package.json fields
- Add browser optimized webpack bundle, exposed as
'lru-cache/browser'
- Track size of compiled bundle in CI (@SuperOleg39)
- Add
noUpdateTTL
option forset()
- Add
disposeAfter()
set()
returns the cache objectdelete()
returns boolean indicating whether anything was deleted
- Add reason to dispose() calls.
- Add
ttlResolution
option - Add
ttlAutopurge
option
This library changed to a different algorithm and internal data structure in version 7, yielding significantly better performance, albeit with some subtle changes as a result.
If you were relying on the internals of LRUCache in version 6 or before, it probably will not work in version 7 and above.
For the most part, the feature set has been maintained as much as possible.
However, some other cleanup and refactoring changes were made in v7 as well.
- The
set()
,get()
, andhas()
functions take options objects instead of positional booleans/integers for optional parameters. size
can be set explicitly onset()
.cache.length
was renamed to the more fittingcache.size
.- Deprecations:
stale
option ->allowStale
maxAge
option ->ttl
length
option ->sizeCalculation
length
property ->size
del()
method ->delete()
prune()
method ->purgeStale()
reset()
method ->clear()
- The objects used by
cache.load()
andcache.dump()
are incompatible with previous versions. max
andmaxSize
are now two separate options. (Previously, they were a singlemax
option, which would be based on either count or computed size.)- The function assigned to the
dispose
option is now expected to have signature(value, key, reason)
rather than(key, value)
, reversing the order ofvalue
andkey
.
- Drop support for node v8 and earlier
- Add updateAgeOnGet option
- Guards around setting max/maxAge to non-numbers
- Use classes, drop support for old nodes
- Improve performance
- add noDisposeOnSet option
- feat(prune): allow users to proactively prune old entries
- Use Symbols for private members
- Add maxAge setter/getter
- Add cache.rforEach
- Allow non-string keys
- add cache.pop()
- add cache.peek()
- add cache.keys()
- add cache.values()
- fix memory leak
- add
stale
option to return stale values before deleting - use null-prototype object to avoid hazards
- make options argument an object
- initial implementation