This commit is contained in:
Rizky 2023-10-15 13:14:33 +07:00
parent 5f1855780b
commit 6418e5b879
5 changed files with 51 additions and 14 deletions

View File

@ -136,6 +136,11 @@ export default page({
const Editor = local.Editor; const Editor = local.Editor;
if (local.loading || !Editor) return <Loading note="base-page" />; if (local.loading || !Editor) return <Loading note="base-page" />;
navigator.serviceWorker.controller?.postMessage({
type: "add-cache",
url: location.href,
});
return ( return (
<Editor session={local.session} site_id={site_id} page_id={page_id} /> <Editor session={local.session} site_id={site_id} page_id={page_id} />
); );

View File

@ -11,6 +11,11 @@ export default page({
params.page_id = params._; params.page_id = params._;
} }
navigator.serviceWorker.controller?.postMessage({
type: "add-cache",
url: location.href,
});
return ( return (
<Live <Live
mode={"dev"} mode={"dev"}

View File

@ -25,7 +25,7 @@ const registerServiceWorker = async () => {
if ("serviceWorker" in navigator) { if ("serviceWorker" in navigator) {
try { try {
await navigator.serviceWorker.register( await navigator.serviceWorker.register(
new URL("./sworker.js", import.meta.url), new URL("./sworker.ts", import.meta.url),
{ {
type: "module", type: "module",
scope: "/", scope: "/",

View File

@ -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()));

40
app/web/src/sworker.ts Normal file
View File

@ -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;
}
});