From 089eabb80606abd6f8e961c12310f0c055cd83b0 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Thu, 12 Mar 2026 23:23:19 +0800 Subject: [PATCH] clear legacy runtime cache when clearing the application code cache --- src/lib/cache.ts | 66 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 22 deletions(-) diff --git a/src/lib/cache.ts b/src/lib/cache.ts index 54f52321..191a2c5a 100644 --- a/src/lib/cache.ts +++ b/src/lib/cache.ts @@ -212,38 +212,60 @@ export function updateMapCacheExpiration(expireSeconds: number): void { } } -export function clearApplicationCodeCache(): Promise { +export function clearCaches(cacheNames: string[], cacheNamePrefixes?: string[]): Promise { if (!window.caches) { logger.error('caches API is not supported in this browser'); return Promise.reject(); } - return window.caches.delete(SW_CODE_CACHE_NAME).then(success => { - if (success) { - logger.info(`cache "${SW_CODE_CACHE_NAME}" cleared successfully`); - } else { - logger.warn(`failed to clear cache "${SW_CODE_CACHE_NAME}"`); + return new Promise((resolve, reject) => { + const promises = []; + + for (const cacheName of cacheNames) { + promises.push(window.caches.delete(cacheName).then(success => { + if (success) { + logger.info(`cache "${cacheName}" cleared successfully`); + return Promise.resolve(cacheName); + } else { + logger.warn(`failed to clear cache "${cacheName}"`); + return Promise.reject(cacheName); + } + })); } - }).catch(error => { - logger.error(`failed to clear cache "${SW_CODE_CACHE_NAME}"`, error); + + if (cacheNamePrefixes) { + for (const prefix of cacheNamePrefixes) { + promises.push(findFirstCacheName(prefix).then(cacheName => { + return window.caches.delete(cacheName).then(success => { + if (success) { + logger.info(`cache "${cacheName}" cleared successfully`); + return Promise.resolve(cacheName); + } else { + logger.warn(`failed to clear cache "${cacheName}"`); + return Promise.reject(cacheName); + } + }); + }).catch(error => { + logger.warn(`cache with prefix "${prefix}" not found`, error); + return Promise.resolve(); + })); + } + } + + Promise.all(promises).then(() => { + resolve(); + }).catch(() => { + resolve(); + }); }); } -export function clearMapDataCache(): Promise { - if (!window.caches) { - logger.error('caches API is not supported in this browser'); - return Promise.reject(); - } +export function clearApplicationCodeCache(): Promise { + return clearCaches([SW_CODE_CACHE_NAME], [SW_RUNTIME_CACHE_NAME_PREFIX]); +} - return window.caches.delete(SW_MAP_CACHE_NAME).then(success => { - if (success) { - logger.info(`cache "${SW_MAP_CACHE_NAME}" cleared successfully`); - } else { - logger.warn(`failed to clear cache "${SW_MAP_CACHE_NAME}"`); - } - }).catch(error => { - logger.error(`failed to clear cache "${SW_MAP_CACHE_NAME}"`, error); - }); +export function clearMapDataCache(): Promise { + return clearCaches([SW_MAP_CACHE_NAME]); } export function clearAllBrowserCaches(): Promise {