PromucFlow_constructor/app/client/src/serviceWorker.js

111 lines
3.0 KiB
JavaScript
Raw Normal View History

2020-05-05 12:16:51 +00:00
import { precacheAndRoute } from "workbox-precaching";
import { clientsClaim, setCacheNameDetails, skipWaiting } from "workbox-core";
import { registerRoute, Route } from "workbox-routing";
2020-05-05 12:16:51 +00:00
import {
CacheFirst,
NetworkOnly,
StaleWhileRevalidate,
} from "workbox-strategies";
import {
getPrefetchConsolidatedApiRequest,
ConsolidatedApiCacheStrategy,
} from "utils/serviceWorkerUtils";
2020-05-05 12:16:51 +00:00
setCacheNameDetails({
prefix: "appsmith",
suffix: "",
2020-05-05 12:16:51 +00:00
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)/),
2020-05-05 12:16:51 +00:00
};
/* eslint-disable no-restricted-globals */
fix: don’t cache icons by the service worker (#23558) ## Description This PR prevents the service worker from caching the icons. For the background on why we moved from `.filter()` to `exclude: []`, see https://github.com/appsmithorg/appsmith/pull/21996#discussion_r1156075049 (that PR was reverted later). #### Type of change - Chore (housekeeping or task changes that don't impact user perception) ## Testing > #### How Has This Been Tested? - [ ] Manual: built the app, cleared service worker caches, reloaded, ensured the service worker doesn’t preload icons anymore #### Test Plan > Add Testsmith test cases links that relate to this PR > > #### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) > > > ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Test-plan-implementation#speedbreaker-features-to-consider-for-every-change) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans/_edit#areas-of-interest) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [ ] Cypress test cases have been added and approved by SDET/manual QA - [ ] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed
2023-05-24 07:20:26 +00:00
// Note: if you need to filter out some files from precaching,
// do that in craco.build.config.js → workbox webpack plugin options
const toPrecache = self.__WB_MANIFEST;
precacheAndRoute(toPrecache);
2020-05-05 12:16:51 +00:00
self.__WB_DISABLE_DEV_DEBUG_LOGS = false;
skipWaiting();
clientsClaim();
const consolidatedApiCacheStrategy = new ConsolidatedApiCacheStrategy();
/**
*
* @param {ExtendableEvent} event
* @param {Request} request
* @param {URL} url
* @returns
*/
const handleFetchHtml = async (event, request, url) => {
// Get the prefetch consolidated api request if the url matches the builder or viewer path
const prefetchConsolidatedApiRequest = getPrefetchConsolidatedApiRequest(url);
if (prefetchConsolidatedApiRequest) {
consolidatedApiCacheStrategy
.cacheConsolidatedApi(prefetchConsolidatedApiRequest)
.catch(() => {
// Silently fail
});
}
const networkHandler = new NetworkOnly();
return networkHandler.handle({ event, request });
};
2020-05-05 12:16:51 +00:00
// 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(
new Route(
({ request, sameOrigin }) => {
return sameOrigin && request.destination === "document";
},
async ({ event, request, url }) => handleFetchHtml(event, request, url),
),
);
// Route for fetching the API directly
registerRoute(
new RegExp("/api/v1/consolidated-api/"),
async ({ event, request }) => {
// Check for cached response
const cachedResponse =
await consolidatedApiCacheStrategy.getCachedResponse(request);
// If the response is cached, return the response
if (cachedResponse) {
return cachedResponse;
}
// If the response is not cached, fetch the response
const networkHandler = new NetworkOnly();
return networkHandler.handle({ event, request });
},
"GET",
);