Files
Randify.pro/public/sw.js
T
emil 8421441664 chore: add ESLint + Prettier, fix all lint errors
- Install eslint, typescript-eslint, eslint-plugin-astro, prettier,
  prettier-plugin-astro, globals
- Add flat eslint.config.mjs with recommended rules for JS, TS, Astro
- Add .prettierrc with astro plugin
- Add lint, lint:fix, format, format:check scripts
- Fix prefer-const, no-unused-vars, no-useless-assignment across codebase
- Fix AdBanner.astro JSX fragment for Prettier compatibility
- Add eslint-disable around Yandex/Top.Mail.Ru inline scripts
- Auto-format entire codebase with Prettier
2026-05-10 21:17:34 +03:00

57 lines
1.5 KiB
JavaScript

const CACHE_NAME = "randify-v1";
self.addEventListener("install", (event) => {
self.skipWaiting();
});
self.addEventListener("activate", (event) => {
event.waitUntil(self.clients.claim());
});
self.addEventListener("fetch", (event) => {
const { request } = event;
const isNavigate = request.mode === "navigate";
const isSameOrigin = new URL(request.url).origin === self.location.origin;
if (!isSameOrigin) {
return;
}
if (isNavigate) {
// Network-first for HTML pages: fresh content when online,
// fallback to cache when offline.
event.respondWith(
fetch(request)
.then((response) => {
if (response && response.status === 200) {
const clone = response.clone();
caches.open(CACHE_NAME).then((cache) => cache.put(request, clone));
}
return response;
})
.catch(() => caches.match(request)),
);
} else {
// Cache-first for static assets (JS, CSS, SVG, fonts, etc.)
event.respondWith(
caches.match(request).then((cached) => {
if (cached) {
return cached;
}
return fetch(request).then((response) => {
if (
!response ||
response.status !== 200 ||
response.type !== "basic"
) {
return response;
}
const clone = response.clone();
caches.open(CACHE_NAME).then((cache) => cache.put(request, clone));
return response;
});
}),
);
}
});