You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.2 KiB
64 lines
2.2 KiB
4 months ago
|
import { WeakCache, StrongCache } from "@wry/caches";
|
||
|
var scheduledCleanup = new WeakSet();
|
||
|
function schedule(cache) {
|
||
|
if (!scheduledCleanup.has(cache)) {
|
||
|
scheduledCleanup.add(cache);
|
||
|
setTimeout(function () {
|
||
|
cache.clean();
|
||
|
scheduledCleanup.delete(cache);
|
||
|
}, 100);
|
||
|
}
|
||
|
}
|
||
|
/**
|
||
|
* @internal
|
||
|
* A version of WeakCache that will auto-schedule a cleanup of the cache when
|
||
|
* a new item is added.
|
||
|
* Throttled to once per 100ms.
|
||
|
*
|
||
|
* @privateRemarks
|
||
|
* Should be used throughout the rest of the codebase instead of WeakCache,
|
||
|
* with the notable exception of usage in `wrap` from `optimism` - that one
|
||
|
* already handles cleanup and should remain a `WeakCache`.
|
||
|
*/
|
||
|
export var AutoCleanedWeakCache = function (max, dispose) {
|
||
|
/*
|
||
|
Some builds of `WeakCache` are function prototypes, some are classes.
|
||
|
This library still builds with an ES5 target, so we can't extend the
|
||
|
real classes.
|
||
|
Instead, we have to use this workaround until we switch to a newer build
|
||
|
target.
|
||
|
*/
|
||
|
var cache = new WeakCache(max, dispose);
|
||
|
cache.set = function (key, value) {
|
||
|
schedule(this);
|
||
|
return WeakCache.prototype.set.call(this, key, value);
|
||
|
};
|
||
|
return cache;
|
||
|
};
|
||
|
/**
|
||
|
* @internal
|
||
|
* A version of StrongCache that will auto-schedule a cleanup of the cache when
|
||
|
* a new item is added.
|
||
|
* Throttled to once per 100ms.
|
||
|
*
|
||
|
* @privateRemarks
|
||
|
* Should be used throughout the rest of the codebase instead of StrongCache,
|
||
|
* with the notable exception of usage in `wrap` from `optimism` - that one
|
||
|
* already handles cleanup and should remain a `StrongCache`.
|
||
|
*/
|
||
|
export var AutoCleanedStrongCache = function (max, dispose) {
|
||
|
/*
|
||
|
Some builds of `StrongCache` are function prototypes, some are classes.
|
||
|
This library still builds with an ES5 target, so we can't extend the
|
||
|
real classes.
|
||
|
Instead, we have to use this workaround until we switch to a newer build
|
||
|
target.
|
||
|
*/
|
||
|
var cache = new StrongCache(max, dispose);
|
||
|
cache.set = function (key, value) {
|
||
|
schedule(this);
|
||
|
return StrongCache.prototype.set.call(this, key, value);
|
||
|
};
|
||
|
return cache;
|
||
|
};
|
||
|
//# sourceMappingURL=caches.js.map
|