diff options
author | crupest <crupest@outlook.com> | 2021-02-13 22:10:07 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-02-13 22:10:07 +0800 |
commit | f6552569082c6e8c43ea0769c78a1c998234f9fc (patch) | |
tree | 8ebd96d3ee07d31619e40ac0030e84c0a09a8368 /FrontEnd/src | |
parent | c7a3813b8c64152e91fdd0f99e8f0baf0fef4678 (diff) | |
download | timeline-f6552569082c6e8c43ea0769c78a1c998234f9fc.tar.gz timeline-f6552569082c6e8c43ea0769c78a1c998234f9fc.tar.bz2 timeline-f6552569082c6e8c43ea0769c78a1c998234f9fc.zip |
feat: Reconfigure service worker.
Diffstat (limited to 'FrontEnd/src')
-rw-r--r-- | FrontEnd/src/sw/sw.ts | 48 |
1 files changed, 39 insertions, 9 deletions
diff --git a/FrontEnd/src/sw/sw.ts b/FrontEnd/src/sw/sw.ts index b5225ec4..09d4715b 100644 --- a/FrontEnd/src/sw/sw.ts +++ b/FrontEnd/src/sw/sw.ts @@ -1,6 +1,12 @@ import { precacheAndRoute, matchPrecache } from "workbox-precaching"; -import { setDefaultHandler } from "workbox-routing"; -import { NetworkOnly } from "workbox-strategies"; +import { registerRoute, setDefaultHandler } from "workbox-routing"; +import { + NetworkFirst, + NetworkOnly, + StaleWhileRevalidate, +} from "workbox-strategies"; +import { CacheableResponsePlugin } from "workbox-cacheable-response"; +import { ExpirationPlugin } from "workbox-expiration"; declare let self: ServiceWorkerGlobalScope; @@ -14,15 +20,39 @@ precacheAndRoute(self.__WB_MANIFEST); const networkOnly = new NetworkOnly(); -const networkOnlyPaths = ["/api", "/swagger"]; +registerRoute("/swagger", new NetworkOnly()); + +registerRoute("/api/token", new NetworkOnly()); +registerRoute("/api/search", new NetworkOnly()); + +registerRoute( + /\/api\/users\/.+\/avatar/, + new StaleWhileRevalidate({ + cacheName: "avatars", + plugins: [ + new CacheableResponsePlugin({ + statuses: [200], + }), + new ExpirationPlugin({ + maxAgeSeconds: 60 * 60 * 24 * 30 * 3, // 3 months + }), + ], + }) +); + +registerRoute( + "/api", + new NetworkFirst({ + plugins: [ + new CacheableResponsePlugin({ + statuses: [200], + }), + ], + }) +); setDefaultHandler((options) => { - const { request, url } = options; - if (url) { - for (const p of networkOnlyPaths) { - if (url.pathname.startsWith(p)) return networkOnly.handle(options); - } - } + const { request } = options; if (request instanceof Request && request.destination === "document") return matchPrecache("/index.html").then((r) => |