## Description Added ESLint rule to force blank lines between statements. Fixes #`Issue Number` _or_ Fixes `Issue URL` > [!WARNING] > _If no issue exists, please create an issue first, and check with the maintainers if the issue is valid._ ## Automation /ok-to-test tags="@tag.All" ### 🔍 Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!CAUTION] > 🔴 🔴 🔴 Some tests have failed. > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/10924926728> > Commit: 34f57714a1575ee04e94e03cbcaf95e57a96c86c > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=10924926728&attempt=1&selectiontype=test&testsstatus=failed&specsstatus=fail" target="_blank">Cypress dashboard</a>. > Tags: @tag.All > Spec: > The following are new failures, please fix them before merging the PR: <ol> > <li>cypress/e2e/Regression/ClientSide/Anvil/AnvilModal_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilButtonWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilCheckboxGroupWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilCurrencyInputWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilIconButtonWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilInlineButtonWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilInputWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilParagraphWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilPhoneInputWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilStatsWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilSwitchGroupWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilSwitchWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilTableWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilToolbarButtonWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilZoneSectionWidgetSnapshot_spec.ts</ol> > <a href="https://internal.appsmith.com/app/cypress-dashboard/identified-flaky-tests-65890b3c81d7400d08fa9ee3?branch=master" target="_blank">List of identified flaky tests</a>. > <hr>Wed, 18 Sep 2024 16:33:36 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No --------- Co-authored-by: Valera Melnikov <valera@appsmith.com>
121 lines
3.4 KiB
TypeScript
121 lines
3.4 KiB
TypeScript
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 {
|
|
cachedApiUrlRegex,
|
|
getApplicationParamsFromUrl,
|
|
getPrefetchRequests,
|
|
PrefetchApiService,
|
|
} from "ee/utils/serviceWorkerUtils";
|
|
import type { RouteHandlerCallback } from "workbox-core/types";
|
|
|
|
setCacheNameDetails({
|
|
prefix: "appsmith",
|
|
suffix: "",
|
|
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)/),
|
|
};
|
|
|
|
/* 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
|
|
// TODO: Fix this the next time the file is edited
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
const toPrecache = (self as any).__WB_MANIFEST;
|
|
|
|
precacheAndRoute(toPrecache);
|
|
|
|
self.__WB_DISABLE_DEV_LOGS = true;
|
|
skipWaiting();
|
|
clientsClaim();
|
|
|
|
const prefetchApiService = new PrefetchApiService();
|
|
|
|
/**
|
|
* Route handler callback for HTML pages.
|
|
* This callback is responsible for prefetching the API requests for the application page.
|
|
*/
|
|
const htmlRouteHandlerCallback: RouteHandlerCallback = async ({
|
|
event,
|
|
request,
|
|
url,
|
|
}) => {
|
|
// Extract application params from the URL
|
|
const applicationParams = getApplicationParamsFromUrl(url);
|
|
|
|
// If application params are present, prefetch the API requests for the application
|
|
if (applicationParams) {
|
|
const prefetchRequests = getPrefetchRequests(applicationParams);
|
|
|
|
prefetchRequests.forEach((prefetchRequest) => {
|
|
prefetchApiService.cacheApi(prefetchRequest).catch(() => {
|
|
// Silently fail
|
|
});
|
|
});
|
|
}
|
|
|
|
const networkHandler = new NetworkOnly();
|
|
|
|
return networkHandler.handle({ event, request });
|
|
};
|
|
|
|
// 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";
|
|
}, htmlRouteHandlerCallback),
|
|
);
|
|
|
|
// Route for fetching the API directly
|
|
registerRoute(
|
|
// Intercept requests to the consolidated API and module instances API
|
|
cachedApiUrlRegex,
|
|
async ({ event, request }) => {
|
|
// Check for cached response
|
|
const cachedResponse = await prefetchApiService.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",
|
|
);
|