Add configurable WeakCache
implementation based on FinalizationRegistry
#599
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This would be an alternative approach to #132 - and adds a second implementation of
Cache
that only allows object keys and is based onWeakMap
, with automatic cleanup.I tried integrating it with the original
Cache
at first, but itCache
(there cannot be a guarantee thatdispose
is called with akey
!)The new
WeakCache
would be incredibly useful in Apollo Client in multiple places, and could also be plugged in quite a lot of ourwrap
usages.This implementation polyfills
WeakMap
withMap
andFinalizationRegistry
andWeakRef
with dummy functions, so it will work in e.g. React Native, but it won't collect weak values.I haven't finished tests on cleanup behaviour yet, as I wanted to wait for feedback if this is interesting at all first.
For review purposes, it can make sense to look at commit 1e26a2c independently - the first commit in this PR only copies over the existing
Cache
, so it adds a lot of clutter.