1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- const {UseServiceWorker, AppSubUrl, AppVer} = window.config;
- const cachePrefix = 'static-cache-v'; // actual version is set in the service worker script
-
- async function unregister() {
- const registrations = await navigator.serviceWorker.getRegistrations();
- await Promise.all(registrations.map((registration) => {
- return registration.active && registration.unregister();
- }));
- }
-
- async function invalidateCache() {
- const cacheKeys = await caches.keys();
- await Promise.all(cacheKeys.map((key) => {
- return key.startsWith(cachePrefix) && caches.delete(key);
- }));
- }
-
- async function checkCacheValidity() {
- const cacheKey = AppVer;
- const storedCacheKey = localStorage.getItem('staticCacheKey');
-
- // invalidate cache if it belongs to a different gitea version
- if (cacheKey && storedCacheKey !== cacheKey) {
- await invalidateCache();
- localStorage.setItem('staticCacheKey', cacheKey);
- }
- }
-
- export default async function initServiceWorker() {
- if (!('serviceWorker' in navigator)) return;
-
- if (UseServiceWorker) {
- try {
- // normally we'd serve the service worker as a static asset from StaticUrlPrefix but
- // the spec strictly requires it to be same-origin so it has to be AppSubUrl to work
- await Promise.all([
- checkCacheValidity(),
- navigator.serviceWorker.register(`${AppSubUrl}/serviceworker.js`),
- ]);
- } catch (err) {
- console.error(err);
- await Promise.all([
- invalidateCache(),
- unregister(),
- ]);
- }
- } else {
- await Promise.all([
- invalidateCache(),
- unregister(),
- ]);
- }
- }
|