UNPKG

urbi-exhibitions

Version:
92 lines (85 loc) 3.5 kB
function r(e) { const s = (e == null ? void 0 : e.cacheName) ?? "map-cache", t = (e == null ? void 0 : e.requiredRequestUrl) ?? "2gis.com", n = (e == null ? void 0 : e.ttl) ?? 864e5; return ` const CACHE_NAME = '${s}'; const REQUIRED_REQUEST_URL = '${t}'; const TTL = ${n}; function addTimestamp(response) { if (!response) return response; const clonedResponse = response.clone(); const newHeaders = new Headers(clonedResponse.headers); newHeaders.set('x-sw-cache-timestamp', Date.now().toString()); if ([204, 205, 304].includes(clonedResponse.status)) { return Promise.resolve(new Response(null, { status: clonedResponse.status, statusText: clonedResponse.statusText, headers: newHeaders })); } return clonedResponse.blob().then(blob => new Response(blob, { status: clonedResponse.status, statusText: clonedResponse.statusText, headers: newHeaders, }) ); } self.addEventListener("install", (event) => { console.log("[SW]: установлен"); }); self.addEventListener("activate", (event) => { console.log("[SW]: активирован"); }); self.addEventListener("fetch", (event) => { const requestUrl = event.request.url; const isGetMethod = event.request.method === "GET"; if (requestUrl.includes(REQUIRED_REQUEST_URL) && isGetMethod) { event.respondWith( caches.open(CACHE_NAME).then((cache) => { return cache.match(event.request).then((response) => { if (response) { const timestamp = response.headers.get('x-sw-cache-timestamp'); if (!timestamp || Date.now() - parseInt(timestamp, 10) <= TTL) { console.log('[SW]: Используется кэш'); return response; } else { console.log("[SW]: Кэш просрочен"); } } return fetch(event.request) .then((networkResponse) => { addTimestamp(networkResponse).then((responseWithTimestamp) => { // Кэшируем версию с timestamp cache.put(event.request, responseWithTimestamp) .catch((error) => { console.error("[SW]: Не удалось закэшировать ответ запроса", error); }); }); console.log('[SW]: Используется сеть'); return networkResponse; }) .catch((error) => { console.error("[SW]: Ответ не удалось найти в кэше и сфетчить из сети", error); // Возвращаем пустой Response return new Response('', { status: 503, statusText: 'Tile not available (offline, no cache)', headers: { 'Content-Type': 'text/plain' } }); }); }) }).catch((error) => { return new Response('', { status: 503, statusText: 'Tile not available (cache error)', headers: { 'Content-Type': 'text/plain' } }); }) ); } }); `.trim(); } export { r as g };