mirror of
https://github.com/MercuryWorkshop/scramjet.git
synced 2025-05-13 06:20:02 -04:00
72 lines
1.7 KiB
JavaScript
72 lines
1.7 KiB
JavaScript
// dumb hack to allow firefox to work (please dont do this in prod)
|
|
if (navigator.userAgent.includes("Firefox")) {
|
|
Object.defineProperty(globalThis, "crossOriginIsolated", {
|
|
value: true,
|
|
writable: false,
|
|
});
|
|
}
|
|
|
|
importScripts(
|
|
"/scram/scramjet.wasm.js",
|
|
"/scram/scramjet.shared.js",
|
|
"/scram/scramjet.worker.js"
|
|
);
|
|
|
|
const scramjet = new ScramjetServiceWorker();
|
|
|
|
async function handleRequest(event) {
|
|
await scramjet.loadConfig();
|
|
if (scramjet.route(event)) {
|
|
return scramjet.fetch(event);
|
|
}
|
|
|
|
return fetch(event.request);
|
|
}
|
|
|
|
self.addEventListener("fetch", (event) => {
|
|
event.respondWith(handleRequest(event));
|
|
});
|
|
|
|
let playgroundData;
|
|
self.addEventListener("message", ({ data }) => {
|
|
if (data.type === "playgroundData") {
|
|
playgroundData = data;
|
|
}
|
|
});
|
|
|
|
scramjet.addEventListener("request", (e) => {
|
|
if (playgroundData && e.url.href.startsWith(playgroundData.origin)) {
|
|
const headers = {};
|
|
const origin = playgroundData.origin;
|
|
if (e.url.href === origin + "/") {
|
|
headers["content-type"] = "text/html";
|
|
e.response = new Response(playgroundData.html, {
|
|
headers,
|
|
});
|
|
} else if (e.url.href === origin + "/style.css") {
|
|
headers["content-type"] = "text/css";
|
|
e.response = new Response(playgroundData.css, {
|
|
headers,
|
|
});
|
|
} else if (e.url.href === origin + "/script.js") {
|
|
headers["content-type"] = "application/javascript";
|
|
e.response = new Response(playgroundData.js, {
|
|
headers,
|
|
});
|
|
} else {
|
|
e.response = new Response("empty response", {
|
|
headers,
|
|
});
|
|
}
|
|
e.response.rawHeaders = headers;
|
|
e.response.rawResponse = {
|
|
body: e.response.body,
|
|
headers: headers,
|
|
status: e.response.status,
|
|
statusText: e.response.statusText,
|
|
};
|
|
e.response.finalURL = e.url.toString();
|
|
} else {
|
|
return;
|
|
}
|
|
});
|