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
text/typescript
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();
});
});
});
}
}
}