36 lines
936 B
TypeScript
36 lines
936 B
TypeScript
|
import { cleanupOutdatedCaches, precacheAndRoute } from "workbox-precaching";
|
||
|
import { clientsClaim } from "workbox-core";
|
||
|
import type { AnyCall } from "./services";
|
||
|
|
||
|
function checkServiceWorker(
|
||
|
self: WorkerGlobalScope,
|
||
|
): self is ServiceWorkerGlobalScope {
|
||
|
return !!(self as unknown as ServiceWorkerGlobalScope).registration;
|
||
|
}
|
||
|
|
||
|
if (checkServiceWorker(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");
|
||
|
}
|
||
|
|
||
|
self.addEventListener("message", (event: MessageEvent<AnyCall>) => {
|
||
|
if (event.data.method === "ping") {
|
||
|
event.source.postMessage({id: event.data.id, jsonrpc: "2.0", result: undefined})
|
||
|
} else {
|
||
|
event.source.postMessage({
|
||
|
error: {
|
||
|
code: -32601,
|
||
|
message: "Method not found"
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
})
|