UNPKG

webapp-astro-pwa

Version:

A ready-to-use Astro component library for adding Progressive Web App (PWA) support to your Astro projects. This package provides drop-in components and utilities for manifest injection, service worker registration, install prompts, and more. Fully suppor

55 lines (47 loc) 1.45 kB
import pwaOptions from "../../../pwa.config.json"; import type { Config } from "../../types"; const config: Config = pwaOptions; /** * @description Service Worker utils * @class SWUtils */ export default class SWUtils { private checkSupport = () => { if (!("serviceWorker" in navigator)) { console.error("No support for service worker!"); return false; } if (!("Notification" in window)) { console.error("No support for notification API"); return false; } if (!("PushManager" in window)) { console.error("No support for Push API"); return false; } return true; }; private requestNotificationPermission = async () => { const permission = await Notification.requestPermission(); if (permission !== "granted") { throw new Error("Notification permission not granted"); } }; notificationPermissions = async () => { if (!config?.notification) return; const isNotificationsSupported = this.checkSupport(); if (isNotificationsSupported) await this.requestNotificationPermission(); }; forceUpdate() { if (!config?.forceUpdate) return; if ("serviceWorker" in navigator) { window.addEventListener("load", () => { navigator.serviceWorker.getRegistrations().then((registrations) => { registrations.forEach(function (registration) { registration.update(); }); }); }); } } }