import { precacheAndRoute } from "workbox-precaching"; import { clientsClaim, setCacheNameDetails, skipWaiting } from "workbox-core"; import { registerRoute } from "workbox-routing"; import { CacheFirst, NetworkOnly, StaleWhileRevalidate, } from "workbox-strategies"; import { ExpirationPlugin } from "workbox-expiration"; setCacheNameDetails({ prefix: "appsmith", suffix: undefined, precache: "precache-v1", runtime: "runtime", googleAnalytics: "appsmith-ga", }); const regexMap = { appViewPage: new RegExp(/api\/v1\/pages\/\w+\/view$/), static3PAssets: new RegExp( /(tiny.cloud|googleapis|gstatic|cloudfront).*.(js|css|woff2)/, ), shims: new RegExp(/shims\/.*.js/), profile: new RegExp(/v1\/(users\/profile|workspaces)/), providers: new RegExp(/v1\/marketplace\/(providers|templates)/), }; /* eslint-disable no-restricted-globals */ const toPrecache = self.__WB_MANIFEST.filter( (file) => !file.url.includes("index.html"), ); precacheAndRoute(toPrecache); self.__WB_DISABLE_DEV_DEBUG_LOGS = false; skipWaiting(); clientsClaim(); // This route's caching seems too aggressive. // TODO(abhinav): Figure out if this is really necessary. // Maybe add the assets locally? registerRoute(({ url }) => { return ( regexMap.shims.test(url.pathname) || regexMap.static3PAssets.test(url.href) ); }, new CacheFirst()); registerRoute(({ url }) => { return regexMap.profile.test(url.pathname); }, new NetworkOnly()); registerRoute(({ url }) => { return regexMap.appViewPage.test(url.pathname); }, new StaleWhileRevalidate()); registerRoute( ({ url }) => regexMap.providers.test(url.pathname), new CacheFirst({ plugins: [ new ExpirationPlugin({ maxAgeSeconds: 1 * 60 * 60, }), ], }), ); registerRoute(({ url }) => { return url.pathname.includes("index.html"); }, new NetworkOnly()); self.addEventListener("install", (event) => { event.waitUntil( caches.keys().then(function(cacheNames) { return Promise.all( cacheNames.map(function(cacheName) { return caches.delete(cacheName); }), ); }), ); });