clear reactive resume service worker cache
This commit is contained in:
94
scripts/patch-reactive-resume-service-worker-cache.sh
Executable file
94
scripts/patch-reactive-resume-service-worker-cache.sh
Executable file
@@ -0,0 +1,94 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
CONTAINER="${1:-reactive-resume-reactive-resume-1}"
|
||||||
|
|
||||||
|
docker exec -u root -i "$CONTAINER" sh <<'SH'
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
SSR_FILE="/app/apps/web/.output/server/_ssr/pdf-document-COfeOLVC.mjs"
|
||||||
|
SW_FILE="/app/apps/web/.output/public/sw.js"
|
||||||
|
|
||||||
|
cp "$SSR_FILE" "$SSR_FILE.bak-sw-cache" 2>/dev/null || true
|
||||||
|
cp "$SW_FILE" "$SW_FILE.bak-sw-cache" 2>/dev/null || true
|
||||||
|
|
||||||
|
node - <<'NODE'
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const ssrFile = "/app/apps/web/.output/server/_ssr/pdf-document-COfeOLVC.mjs";
|
||||||
|
const swFile = "/app/apps/web/.output/public/sw.js";
|
||||||
|
|
||||||
|
const registrationScript = `
|
||||||
|
\tif ("serviceWorker" in navigator) {
|
||||||
|
\t\twindow.addEventListener("load", () => {
|
||||||
|
\t\t\tconst clearReactiveResumeCaches = async () => {
|
||||||
|
\t\t\t\tif ("caches" in window) {
|
||||||
|
\t\t\t\t\tconst keys = await caches.keys();
|
||||||
|
\t\t\t\t\tawait Promise.all(keys.map((key) => caches.delete(key)));
|
||||||
|
\t\t\t\t}
|
||||||
|
|
||||||
|
\t\t\t\tif (navigator.serviceWorker.getRegistrations) {
|
||||||
|
\t\t\t\t\tconst registrations = await navigator.serviceWorker.getRegistrations();
|
||||||
|
\t\t\t\t\tawait Promise.all(registrations.map((registration) => registration.unregister()));
|
||||||
|
\t\t\t\t}
|
||||||
|
\t\t\t};
|
||||||
|
|
||||||
|
\t\t\tclearReactiveResumeCaches().then(() => {
|
||||||
|
\t\t\t\tif (navigator.serviceWorker.controller && !sessionStorage.getItem("rr-sw-cache-cleared-v1")) {
|
||||||
|
\t\t\t\t\tsessionStorage.setItem("rr-sw-cache-cleared-v1", "1");
|
||||||
|
\t\t\t\t\twindow.location.reload();
|
||||||
|
\t\t\t\t}
|
||||||
|
\t\t\t}).catch(console.error);
|
||||||
|
\t\t});
|
||||||
|
\t}
|
||||||
|
`;
|
||||||
|
|
||||||
|
let ssr = fs.readFileSync(ssrFile, "utf8");
|
||||||
|
const start = "var pwaServiceWorkerRegistrationScript = `";
|
||||||
|
const end = "`;\nvar src_default =";
|
||||||
|
const startIndex = ssr.indexOf(start);
|
||||||
|
if (startIndex === -1) {
|
||||||
|
throw new Error("Service worker registration script start marker not found");
|
||||||
|
}
|
||||||
|
const endIndex = ssr.indexOf(end, startIndex + start.length);
|
||||||
|
if (endIndex === -1) {
|
||||||
|
throw new Error("Service worker registration script end marker not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
ssr =
|
||||||
|
ssr.slice(0, startIndex) +
|
||||||
|
start +
|
||||||
|
registrationScript +
|
||||||
|
ssr.slice(endIndex);
|
||||||
|
fs.writeFileSync(ssrFile, ssr);
|
||||||
|
|
||||||
|
const sw = `self.addEventListener("install", () => {
|
||||||
|
self.skipWaiting();
|
||||||
|
});
|
||||||
|
|
||||||
|
self.addEventListener("activate", (event) => {
|
||||||
|
event.waitUntil((async () => {
|
||||||
|
const keys = await caches.keys();
|
||||||
|
await Promise.all(keys.map((key) => caches.delete(key)));
|
||||||
|
await self.registration.unregister();
|
||||||
|
await self.clients.claim();
|
||||||
|
|
||||||
|
const clients = await self.clients.matchAll({
|
||||||
|
type: "window",
|
||||||
|
includeUncontrolled: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
for (const client of clients) {
|
||||||
|
client.postMessage({ type: "RR_SW_CACHE_CLEARED" });
|
||||||
|
}
|
||||||
|
})());
|
||||||
|
});
|
||||||
|
|
||||||
|
self.addEventListener("fetch", () => {});
|
||||||
|
`;
|
||||||
|
fs.writeFileSync(swFile, sw);
|
||||||
|
NODE
|
||||||
|
|
||||||
|
node --check "$SSR_FILE" >/dev/null
|
||||||
|
node --check "$SW_FILE" >/dev/null
|
||||||
|
SH
|
||||||
Reference in New Issue
Block a user