fix: somewhat fix sw emu

This commit is contained in:
Percs 2024-10-13 13:19:49 -05:00
parent 0906dd78a9
commit 06c5144d3b
2 changed files with 12 additions and 8 deletions

View file

@ -7,9 +7,14 @@ import { getOwnPropertyDescriptorHandler } from "../helpers";
export const order = 2; export const order = 2;
export const enabled = () => config.flags.serviceworkers; export const enabled = () => config.flags.serviceworkers;
export function disabled(_client: ScramjetClient, _self: Self) { export function disabled(_client: ScramjetClient, _self: Self) {
Reflect.deleteProperty(Navigator.prototype, "serviceWorker"); Reflect.deleteProperty(Navigator.prototype, "serviceWorker");
} }
let realPostMessage;
if (self.ServiceWorker) {
realPostMessage = ServiceWorker.prototype.postMessage;
}
export default function (client: ScramjetClient, _self: Self) { export default function (client: ScramjetClient, _self: Self) {
let registration; let registration;
@ -52,12 +57,6 @@ export default function (client: ScramjetClient, _self: Self) {
}, },
}); });
client.Trap("navigator.serviceWorker.controller", {
get(_ctx) {
return registration?.active;
},
});
client.Proxy("navigator.serviceWorker.register", { client.Proxy("navigator.serviceWorker.register", {
apply(ctx) { apply(ctx) {
if (ctx.args[0] instanceof URL) ctx.args[0] = ctx.args[0].href; if (ctx.args[0] instanceof URL) ctx.args[0] = ctx.args[0].href;
@ -66,11 +65,13 @@ export default function (client: ScramjetClient, _self: Self) {
url += "&type=module"; url += "&type=module";
} }
const worker = new SharedWorker(url); const nativeSharedWorker = client.natives["SharedWorker"];
const worker = new nativeSharedWorker(url);
const handle = worker.port; const handle = worker.port;
client.serviceWorker.controller.postMessage( realPostMessage.call(
client.serviceWorker.controller,
{ {
scramjet$type: "registerServiceWorker", scramjet$type: "registerServiceWorker",
port: handle, port: handle,

View file

@ -6,6 +6,9 @@ const scramjet = new ScramjetController({
shared: "/scram/scramjet.shared.js", shared: "/scram/scramjet.shared.js",
sync: "/scram/scramjet.sync.js", sync: "/scram/scramjet.sync.js",
}, },
flags: {
serviceworkers: true,
},
}); });
scramjet.init("./sw.js"); scramjet.init("./sw.js");