From 6418e5b879a4117540697330d0078aa0c61133f1 Mon Sep 17 00:00:00 2001 From: Rizky Date: Sun, 15 Oct 2023 13:14:33 +0700 Subject: [PATCH] fix --- app/web/src/base/page/editor.tsx | 5 ++++ app/web/src/base/page/live.tsx | 5 ++++ app/web/src/index.tsx | 2 +- app/web/src/sworker.js | 13 ----------- app/web/src/sworker.ts | 40 ++++++++++++++++++++++++++++++++ 5 files changed, 51 insertions(+), 14 deletions(-) delete mode 100644 app/web/src/sworker.js create mode 100644 app/web/src/sworker.ts diff --git a/app/web/src/base/page/editor.tsx b/app/web/src/base/page/editor.tsx index ecb312fe..5eb04857 100644 --- a/app/web/src/base/page/editor.tsx +++ b/app/web/src/base/page/editor.tsx @@ -136,6 +136,11 @@ export default page({ const Editor = local.Editor; if (local.loading || !Editor) return ; + navigator.serviceWorker.controller?.postMessage({ + type: "add-cache", + url: location.href, + }); + return ( ); diff --git a/app/web/src/base/page/live.tsx b/app/web/src/base/page/live.tsx index 2ffe6213..716beeb6 100644 --- a/app/web/src/base/page/live.tsx +++ b/app/web/src/base/page/live.tsx @@ -11,6 +11,11 @@ export default page({ params.page_id = params._; } + navigator.serviceWorker.controller?.postMessage({ + type: "add-cache", + url: location.href, + }); + return ( { if ("serviceWorker" in navigator) { try { await navigator.serviceWorker.register( - new URL("./sworker.js", import.meta.url), + new URL("./sworker.ts", import.meta.url), { type: "module", scope: "/", diff --git a/app/web/src/sworker.js b/app/web/src/sworker.js deleted file mode 100644 index 4400c931..00000000 --- a/app/web/src/sworker.js +++ /dev/null @@ -1,13 +0,0 @@ -import { manifest, version } from "@parcel/service-worker"; - -async function install() { - const cache = await caches.open(version); - await cache.addAll(manifest); -} -addEventListener("install", (e) => e.waitUntil(install())); - -async function activate() { - const keys = await caches.keys(); - await Promise.all(keys.map((key) => key !== version && caches.delete(key))); -} -addEventListener("activate", (e) => e.waitUntil(activate())); diff --git a/app/web/src/sworker.ts b/app/web/src/sworker.ts new file mode 100644 index 00000000..b1941aab --- /dev/null +++ b/app/web/src/sworker.ts @@ -0,0 +1,40 @@ +import { manifest, version } from "@parcel/service-worker"; + +async function install() { + const cache = await caches.open(version); + await cache.addAll(manifest); +} +addEventListener("install", (e) => (e as ExtendableEvent).waitUntil(install())); + +async function activate() { + const keys = await caches.keys(); + await Promise.all(keys.map((key) => key !== version && caches.delete(key))); +} +addEventListener("activate", (e) => + (e as ExtendableEvent).waitUntil(activate()) +); + +addEventListener("fetch", async (evt) => { + const e = evt as FetchEvent; + e.respondWith( + (async () => { + const r = await caches.match(e.request); + if (r) { + return r; + } + return await fetch(e.request); + })() + ); +}); +addEventListener("message", async (e) => { + const type = e.data.type; + const cache = await caches.open(version); + + switch (type) { + case "add-cache": + if (!(await cache.match(e.data.url))) { + await cache.add(e.data.url); + } + break; + } +});