From d74bc1d8e82ef536bd447eeaf673795b4dc0bfb4 Mon Sep 17 00:00:00 2001
From: Paul <paulmakles@gmail.com>
Date: Tue, 22 Jun 2021 14:22:35 +0100
Subject: [PATCH] Use custom service worker.

---
 package.json   |  3 ++-
 src/main.tsx   |  9 ++++-----
 src/sw.ts      | 11 +++++++++++
 tsconfig.json  |  2 +-
 vite.config.ts | 10 ++++++----
 5 files changed, 24 insertions(+), 11 deletions(-)
 create mode 100644 src/sw.ts

diff --git a/package.json b/package.json
index 86474dc..085cb0e 100644
--- a/package.json
+++ b/package.json
@@ -83,6 +83,7 @@
     "ulid": "^2.3.0",
     "use-resize-observer": "^7.0.0",
     "vite": "^2.3.7",
-    "vite-plugin-pwa": "^0.8.1"
+    "vite-plugin-pwa": "^0.8.1",
+    "workbox-precaching": "^6.1.5"
   }
 }
diff --git a/src/main.tsx b/src/main.tsx
index 5415f66..99a9414 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -1,9 +1,4 @@
-import { render } from "preact";
-import "./styles/index.scss";
-import { App } from "./pages/app";
-
 import { registerSW } from 'virtual:pwa-register'
-
 const updateSW = registerSW({
     onNeedRefresh() {
         // ! FIXME: temp
@@ -16,5 +11,9 @@ const updateSW = registerSW({
     },
 })
 
+import { render } from "preact";
+import "./styles/index.scss";
+import { App } from "./pages/app";
+
 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
 render(<App />, document.getElementById("app")!);
diff --git a/src/sw.ts b/src/sw.ts
new file mode 100644
index 0000000..f0f2238
--- /dev/null
+++ b/src/sw.ts
@@ -0,0 +1,11 @@
+/// <reference lib="webworker" />
+import { precacheAndRoute } from 'workbox-precaching'
+
+declare let self: ServiceWorkerGlobalScope
+
+self.addEventListener('message', (event) => {
+  if (event.data && event.data.type === 'SKIP_WAITING')
+    self.skipWaiting()
+})
+
+precacheAndRoute(self.__WB_MANIFEST)
diff --git a/tsconfig.json b/tsconfig.json
index cdda19f..8a7df58 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,7 +1,7 @@
 {
   "compilerOptions": {
     "target": "ESNext",
-    "lib": ["DOM", "DOM.Iterable", "ESNext"],
+    "lib": ["DOM", "DOM.Iterable", "ESNext", "WebWorker"],
     "allowJs": false,
     "skipLibCheck": true,
     "esModuleInterop": false,
diff --git a/vite.config.ts b/vite.config.ts
index dca7470..8da8448 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -23,9 +23,12 @@ export default defineConfig({
   plugins: [
     preact(),
     VitePWA({
+      srcDir: 'src',
+      filename: 'sw.ts',
+      strategies: 'injectManifest',
       manifest: {
-        name: "Revolt",
-        short_name: "Revolt",
+        name: "REVOLT",
+        short_name: "REVOLT",
         description: "User-first, privacy-focused chat platform.",
         categories: ["messaging"],
         start_url: "/",
@@ -44,8 +47,7 @@ export default defineConfig({
                 "sizes": "512x512"
             }
         ]
-      },
-      workbox: { }
+      }
     }),
     replace({
       __GIT_REVISION__: getGitRevision(),
-- 
GitLab