Skip to content

Commit 6c54731

Browse files
committed
Add remove-cache-storage-item scriptlet
Usage: ...##+js(remove-cache-storage-item, cacheNamePattern[, urlPattern]) `cacheNamePattern`: the name of the cache to target. Plain string or regex. `urlPattern`: the URL of the resource to remove. Plain string or regex. If no pattern is provided, the whole cache is removed. Reference: https://developer.mozilla.org/en-US/docs/Web/API/CacheStorage
1 parent fa162e2 commit 6c54731

File tree

1 file changed

+53
-1
lines changed

1 file changed

+53
-1
lines changed

assets/resources/scriptlets.js

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1678,7 +1678,7 @@ function jsonPrune(
16781678
if ( objAfter === undefined ) { return objBefore; }
16791679
safe.uboLog(logPrefix, 'Pruned');
16801680
if ( safe.logLevel > 1 ) {
1681-
safe.uboLog(logPrefix, JSON.stringify(objAfter, null, 1));
1681+
safe.uboLog(logPrefix, `After pruning:\n${JSON.stringify(objAfter, null, 1)}`);
16821682
}
16831683
return objAfter;
16841684
},
@@ -3941,6 +3941,58 @@ function multiup() {
39413941
document.addEventListener('click', handler, { capture: true });
39423942
}
39433943

3944+
/******************************************************************************/
3945+
3946+
builtinScriptlets.push({
3947+
name: 'remove-cache-storage-item.js',
3948+
fn: removeCacheStorageItem,
3949+
world: 'ISOLATED',
3950+
dependencies: [
3951+
'safe-self.fn',
3952+
],
3953+
});
3954+
function removeCacheStorageItem(
3955+
cacheNamePattern = '',
3956+
requestPattern = ''
3957+
) {
3958+
if ( cacheNamePattern === '' ) { return; }
3959+
const safe = safeSelf();
3960+
const logPrefix = safe.makeLogPrefix('remove-cache-storage-item', cacheNamePattern, requestPattern);
3961+
const cacheStorage = self.caches;
3962+
if ( cacheStorage instanceof Object === false ) { return; }
3963+
const reCache = safe.patternToRegex(cacheNamePattern, undefined, true);
3964+
const reRequest = safe.patternToRegex(requestPattern, undefined, true);
3965+
cacheStorage.keys().then(cacheNames => {
3966+
for ( const cacheName of cacheNames ) {
3967+
if ( reCache.test(cacheName) === false ) { continue; }
3968+
if ( requestPattern === '' ) {
3969+
cacheStorage.delete(cacheName).then(result => {
3970+
if ( safe.logLevel > 1 ) {
3971+
safe.uboLog(logPrefix, `Deleting ${cacheName}`);
3972+
}
3973+
if ( result !== true ) { return; }
3974+
safe.uboLog(logPrefix, `Deleted ${cacheName}: ${result}`);
3975+
});
3976+
continue;
3977+
}
3978+
cacheStorage.open(cacheName).then(cache => {
3979+
cache.keys().then(requests => {
3980+
for ( const request of requests ) {
3981+
if ( reRequest.test(request.url) === false ) { continue; }
3982+
if ( safe.logLevel > 1 ) {
3983+
safe.uboLog(logPrefix, `Deleting ${cacheName}/${request.url}`);
3984+
}
3985+
cache.delete(request).then(result => {
3986+
if ( result !== true ) { return; }
3987+
safe.uboLog(logPrefix, `Deleted ${cacheName}/${request.url}: ${result}`);
3988+
});
3989+
}
3990+
});
3991+
});
3992+
}
3993+
});
3994+
}
3995+
39443996

39453997
/*******************************************************************************
39463998
*

0 commit comments

Comments
 (0)