import { cleanupOutdatedCaches, precacheAndRoute } from "workbox-precaching"; import { clientsClaim } from "workbox-core"; import { dispatchCall, isJSONRPCCall, type Call } from "./workerrpc"; function isServiceWorker( self: WorkerGlobalScope, ): self is ServiceWorkerGlobalScope { return !!(self as unknown as ServiceWorkerGlobalScope).registration; } if (isServiceWorker(self)) { cleanupOutdatedCaches(); precacheAndRoute(self.__WB_MANIFEST, { cleanURLs: false, }); // auto update self.skipWaiting(); clientsClaim(); } else { throw new TypeError("This entry point must be run in a service worker"); } export const Service = { ping() {}, }; self.addEventListener("message", (event: MessageEvent) => { const payload = event.data; if (typeof payload !== "object") return; if (isJSONRPCCall(payload as Record)) { dispatchCall(Service, event as MessageEvent>); } });