aboutsummaryrefslogtreecommitdiff
path: root/static/service-worker
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2025-11-23 16:41:43 +0100
committerNathan Reiner <nathan@nathanreiner.xyz>2025-11-23 16:41:43 +0100
commit1e31b71afd1ead4644e99df6838a55481176e09a (patch)
treef1107a55f2b2f6ed838190ac259cd5b698bcc56f /static/service-worker
parent2e8f59aaeb731dd726f8d49d120ae4cc8a7cf512 (diff)
add fonts and create-user endpoint
Diffstat (limited to 'static/service-worker')
-rw-r--r--static/service-worker/index.js21
-rw-r--r--static/service-worker/worker.js18
2 files changed, 39 insertions, 0 deletions
diff --git a/static/service-worker/index.js b/static/service-worker/index.js
new file mode 100644
index 0000000..cff4b95
--- /dev/null
+++ b/static/service-worker/index.js
@@ -0,0 +1,21 @@
+export const register = async () => {
+ if (!'serviceWorker' in navigator) {
+ console.warn('service worker not supported by browser');
+ return;
+ }
+
+ try {
+ const registration = await navigator.serviceWorker.register("/service-worker/worker.js", {
+ scope: "/",
+ });
+ if (registration.installing) {
+ console.log("Service worker installing");
+ } else if (registration.waiting) {
+ console.log("Service worker installed");
+ } else if (registration.active) {
+ console.log("Service worker active");
+ }
+ } catch (error) {
+ console.error(`Registration failed with ${error}`);
+ }
+}
diff --git a/static/service-worker/worker.js b/static/service-worker/worker.js
new file mode 100644
index 0000000..ad5a374
--- /dev/null
+++ b/static/service-worker/worker.js
@@ -0,0 +1,18 @@
+const putInCache = async (request, response) => {
+ const cache = await caches.open("v1");
+ await cache.put(request, response);
+};
+
+const cacheFirst = async (request, event) => {
+ const responseFromCache = await caches.match(request);
+ if (responseFromCache) {
+ return responseFromCache;
+ }
+ const responseFromNetwork = await fetch(request);
+ event.waitUntil(putInCache(request, responseFromNetwork.clone()));
+ return responseFromNetwork;
+};
+
+self.addEventListener("fetch", (event) => {
+ event.respondWith(cacheFirst(event.request, event));
+});