|
import { BareMuxConnection } from "@mercuryworkshop/bare-mux";
|
|
import { rewriteUrl } from "../../shared/rewriters/url";
|
|
import { ScramjetClient } from "../client";
|
|
|
|
export default function (client: ScramjetClient, _self: typeof globalThis) {
|
|
client.Proxy("Worker", {
|
|
construct(ctx) {
|
|
ctx.args[0] = rewriteUrl(ctx.args[0], client.meta) + "?dest=worker";
|
|
|
|
if (ctx.args[1] && ctx.args[1].type === "module") {
|
|
ctx.args[0] += "&type=module";
|
|
}
|
|
|
|
const worker = ctx.call();
|
|
const conn = new BareMuxConnection();
|
|
|
|
(async () => {
|
|
const port = await conn.getInnerPort();
|
|
client.natives.call(
|
|
"Worker.prototype.postMessage",
|
|
worker,
|
|
{
|
|
$scramjet$type: "baremuxinit",
|
|
port,
|
|
},
|
|
[port]
|
|
);
|
|
})();
|
|
},
|
|
});
|
|
|
|
|
|
client.Proxy("SharedWorker", {
|
|
construct(ctx) {
|
|
ctx.args[0] = rewriteUrl(ctx.args[0], client.meta) + "?dest=sharedworker";
|
|
|
|
if (ctx.args[1] && typeof ctx.args[1] === "string")
|
|
ctx.args[1] = `${client.url.origin}@${ctx.args[1]}`;
|
|
|
|
if (ctx.args[1] && typeof ctx.args[1] === "object") {
|
|
if (ctx.args[1].type === "module") {
|
|
ctx.args[0] += "&type=module";
|
|
}
|
|
|
|
if (ctx.args[1].name) {
|
|
ctx.args[1].name = `${client.url.origin}@${ctx.args[1].name}`;
|
|
}
|
|
}
|
|
|
|
const worker = ctx.call();
|
|
const conn = new BareMuxConnection();
|
|
|
|
(async () => {
|
|
const port = await conn.getInnerPort();
|
|
client.natives.call(
|
|
"MessagePort.prototype.postMessage",
|
|
worker.port,
|
|
{
|
|
$scramjet$type: "baremuxinit",
|
|
port,
|
|
},
|
|
[port]
|
|
);
|
|
})();
|
|
},
|
|
});
|
|
|
|
client.Proxy("Worklet.prototype.addModule", {
|
|
apply(ctx) {
|
|
if (ctx.args[0])
|
|
ctx.args[0] = rewriteUrl(ctx.args[0], client.meta) + "?dest=worklet";
|
|
},
|
|
});
|
|
}
|
|
|