aboutsummaryrefslogtreecommitdiffstats
path: root/src/assets/sw.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'src/assets/sw.mjs')
-rw-r--r--src/assets/sw.mjs59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/assets/sw.mjs b/src/assets/sw.mjs
new file mode 100644
index 0000000..78d659a
--- /dev/null
+++ b/src/assets/sw.mjs
@@ -0,0 +1,59 @@
+const sw_cache = {
+ offline: "/offline.html",
+ default: [
+ "/index.css",
+ "/prism.css",
+ "/index.js",
+ "/favicon/icon.svg",
+ "/offline.html",
+ "/"
+ ],
+ // eslint-disable-next-line no-undef
+ store: VERSION,
+}
+
+self.addEventListener('install', event => {
+ self.skipWaiting()
+ event.waitUntil((async() => {
+ const cache = await self.caches.open(sw_cache.store)
+ return cache.addAll(sw_cache.default)
+ })())
+})
+
+self.addEventListener('activate', event => {
+ event.waitUntil((async() => {
+ const keys = await self.caches.keys()
+ Promise.all(keys.map(key => {
+ if (key !== sw_cache.store) {
+ return self.caches.delete(key)
+ }
+ }))
+ })())
+})
+
+self.addEventListener('fetch', event => {
+ event.respondWith((async() => {
+ if (event.request.method != 'GET') {
+ return fetch(event.request)
+ }
+
+ const req_url = new URL(event.request.url)
+ if (req_url.origin != self.location.origin) {
+ return fetch(event.request)
+ }
+
+ const cacheres = await self.caches.match(event.request)
+ return cacheres || (async() => {
+ try {
+ const response = await self.fetch(event.request)
+ const cache = await self.caches.open(sw_cache.store)
+ cache.put(event.request, response.clone())
+ return response
+ } catch {
+ return self.caches.match(sw_cache.offline)
+ }
+ })()
+ })())
+
+
+}) \ No newline at end of file