Skip to content

Commit d7f60da

Browse files
committed
deploy: 7a074bb
1 parent 8532b1f commit d7f60da

273 files changed

Lines changed: 42380 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

pr-previews/pr-240/.nojekyll

Whitespace-only changes.
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/*! coi-serviceworker v0.1.7 - Guido Zuidhof, licensed under MIT */
2+
/*
3+
* This service worker intercepts all fetch requests and adds the
4+
* Cross-Origin-Embedder-Policy and Cross-Origin-Opener-Policy headers
5+
* required for SharedArrayBuffer to work. This is needed for Emscripten
6+
* pthreads / AudioWorklet on hosts like GitHub Pages that don't allow
7+
* setting custom HTTP headers.
8+
*
9+
* Source: https://github.com/nicbarker/clay/blob/main/examples/shared/coi-serviceworker.js
10+
*/
11+
if (typeof window === 'undefined') {
12+
// Service Worker context
13+
self.addEventListener("install", () => self.skipWaiting());
14+
self.addEventListener("activate", (e) => e.waitUntil(self.clients.claim()));
15+
16+
self.addEventListener("message", (ev) => {
17+
if (ev.data && ev.data.type === "deregister") {
18+
self.registration
19+
.unregister()
20+
.then(() => {
21+
return self.clients.matchAll();
22+
})
23+
.then((clients) => {
24+
clients.forEach((client) => client.navigate(client.url));
25+
});
26+
}
27+
});
28+
29+
self.addEventListener("fetch", function (event) {
30+
if (
31+
event.request.cache === "only-if-cached" &&
32+
event.request.mode !== "same-origin"
33+
) {
34+
return;
35+
}
36+
37+
event.respondWith(
38+
fetch(event.request)
39+
.then(function (response) {
40+
if (response.status === 0) {
41+
return response;
42+
}
43+
44+
const newHeaders = new Headers(response.headers);
45+
newHeaders.set("Cross-Origin-Embedder-Policy", "require-corp");
46+
newHeaders.set("Cross-Origin-Opener-Policy", "same-origin");
47+
48+
return new Response(response.body, {
49+
status: response.status,
50+
statusText: response.statusText,
51+
headers: newHeaders,
52+
});
53+
})
54+
.catch(function (e) {
55+
console.error(e);
56+
})
57+
);
58+
});
59+
} else {
60+
// Window context — register the service worker
61+
(async function () {
62+
if (window.crossOriginIsolated !== false) return;
63+
64+
const registration = await navigator.serviceWorker
65+
.register(window.document.currentScript.src)
66+
.catch((e) =>
67+
console.error("COOP/COEP Service Worker failed to register:", e)
68+
);
69+
if (registration) {
70+
console.log("COOP/COEP Service Worker registered. Reloading page...");
71+
// Wait for the SW to be active, then reload
72+
if (registration.installing) {
73+
const sw = registration.installing || registration.waiting;
74+
await new Promise((resolve) => {
75+
sw.addEventListener("statechange", (e) => {
76+
if (e.target.state === "activated") {
77+
resolve();
78+
}
79+
});
80+
});
81+
}
82+
window.location.reload();
83+
}
84+
})();
85+
}

0 commit comments

Comments
 (0)