PromucFlow_constructor/app/client/src/serviceWorker.js
Ivan Akulov 03c42b80eb
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 12:50:26 +05:30

72 lines
1.9 KiB
JavaScript

import { precacheAndRoute } from "workbox-precaching";
import { clientsClaim, setCacheNameDetails, skipWaiting } from "workbox-core";
import { registerRoute, Route } 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 */
// 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);
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(
new Route(({ request, sameOrigin }) => {
return sameOrigin && request.destination === "document";
}, new NetworkOnly()),
);