33 lines
1.1 KiB
JavaScript
33 lines
1.1 KiB
JavaScript
/* eslint-disable no-restricted-globals */
|
|
|
|
import { clientsClaim } from 'workbox-core';
|
|
import { ExpirationPlugin } from 'workbox-expiration';
|
|
import { precacheAndRoute } from 'workbox-precaching';
|
|
import { registerRoute } from 'workbox-routing';
|
|
import { StaleWhileRevalidate, CacheFirst } from 'workbox-strategies';
|
|
|
|
clientsClaim();
|
|
precacheAndRoute(self.__WB_MANIFEST);
|
|
|
|
const staticTypes = ["image", "video", "audio"]
|
|
registerRoute(({ request, url }) => url.origin === self.location.origin && staticTypes.includes(request.destination),
|
|
new StaleWhileRevalidate({
|
|
cacheName: 'static-content',
|
|
plugins: [
|
|
new ExpirationPlugin({ maxEntries: 50 }),
|
|
],
|
|
})
|
|
);
|
|
|
|
// External media domains which have unique urls (never changing content) and can be cached forever
|
|
const externalMediaHosts = ["void.cat", "nostr.build", "imgur.com", "i.imgur.com", "pbs.twimg.com", "i.ibb.co"];
|
|
registerRoute(({ url }) => externalMediaHosts.includes(url.host),
|
|
new CacheFirst({
|
|
cacheName: "ext-content-hosts"
|
|
}));
|
|
|
|
self.addEventListener('message', (event) => {
|
|
if (event.data && event.data.type === 'SKIP_WAITING') {
|
|
self.skipWaiting();
|
|
}
|
|
}); |