Cache values in your Web Extension and clear them on expiration. Also includes a memoize-like API to cache any function results automatically
MIT License
Cache values in your Web Extension and clear them on expiration. Also includes a memoize-like API to cache any function results automatically.
chrome.storage
APIsstorage
: "The extension caches some values into the local storage"alarms
: "The extension automatically clears its expired storage at certain intervals"You can download the standalone bundle and include it in your manifest.json
.
Or use npm
:
npm install webext-storage-cache
This module requires the storage
permission and it’s suggested to also use alarms
to safely schedule cache purging:
/* manifest.json */
{
"permissions": [
"storage",
"alarms"
],
"background": {
"scripts": [
/* Remember to include/import it in the background to enable expired cache purging */
"webext-storage-cache.js"
]
}
}
import {CachedValue} from 'webext-storage-cache';
const item = new CachedValue('unique', {
maxAge: {
days: 3,
},
});
(async () => {
if (!(await item.isCached())) {
const cachableItem = await someFunction();
await item.set(cachableItem);
}
console.log(await item.get());
})();
The same code could also be written more effectively with CachedFunction
:
import {CachedFunction} from 'webext-storage-cache';
const cachedFunction = new CachedFunction('unique', {
updater: someFunction,
maxAge: {
days: 3,
},
});
(async () => {
console.log(await cachedFunction());
})();
isCached
/get
/set
globalCache
- Global helpers, documented belowlegacy
- The previous Map-like API, documented below, deprecatedClears the cache. This is a special method that acts on the entire cache of the extension.
import {globalCache} from 'webext-storage-cache';
document.querySelector('.options .clear-cache').addEventListener('click', async () => {
await globalCache.clear()
})
The API used until v5 has been deprecated and you should migrate to:
CachedValue
for simple cache.get
/cache.set
calls. This API makes more sense in a typed context because the type is preserved/enforced across calls.CachedFunction
for cache.function
. It behaves in a similar fashion, but it also has extra methods like getCached
and getFresh
You can:
cache.function
) by importing webext-storage-cache/legacy.js
(until v7 is published)import cache from "webext-storage-cache/legacy.js";
await cache.get('my-url');
await cache.set('my-url', 'https://example.com');
The documentation for the legacy API can be found on the v5 version of this readme.
MIT © Federico Brigante