diff --git a/src/client/worker.ts b/src/client/worker.ts index ccd5c39..79efb29 100644 --- a/src/client/worker.ts +++ b/src/client/worker.ts @@ -10,4 +10,22 @@ Worker = new Proxy(Worker, { return Reflect.construct(target, argArray); } -}) \ No newline at end of file +}) + +Worklet.prototype.addModule = new Proxy(Worklet.prototype.addModule, { + apply(target, thisArg, argArray) { + argArray[0] = encodeUrl(argArray[0]) + + return Reflect.apply(target, thisArg, argArray); + }, +}); + +window.importScripts = new Proxy(window.importScripts, { + apply(target, thisArg, argArray) { + for (const i in argArray) { + argArray[i] = encodeUrl(argArray[i]); + } + + return Reflect.apply(target, thisArg, argArray); + }, +}); \ No newline at end of file diff --git a/src/shared/index.ts b/src/shared/index.ts index dc110fd..6b0bb76 100644 --- a/src/shared/index.ts +++ b/src/shared/index.ts @@ -3,6 +3,7 @@ export { rewriteCss } from "./rewriters/css"; export { rewriteHtml, rewriteSrcset } from "./rewriters/html"; export { rewriteJs } from "./rewriters/js"; export { rewriteHeaders } from "./rewriters/headers"; +export { rewriteWorkers } from "./rewriters/worker" export { BareClient } from "@mercuryworkshop/bare-mux" export function isScramjetFile(src: string) { diff --git a/src/shared/rewriters/worker.ts b/src/shared/rewriters/worker.ts new file mode 100644 index 0000000..d1d0148 --- /dev/null +++ b/src/shared/rewriters/worker.ts @@ -0,0 +1,11 @@ +import { rewriteJs } from "./js"; +export function rewriteWorkers(js: string, origin?: URL) { + let str = new String().toString() + //@ts-expect-error + ["codecs", "config", "shared", "client"].forEach((script) => { + str += `import "${self.__scramjet$config[script]}"\n` + }) + str += rewriteJs(js, origin); + + return str; +} \ No newline at end of file diff --git a/src/worker/index.ts b/src/worker/index.ts index 78ad946..4ca9499 100644 --- a/src/worker/index.ts +++ b/src/worker/index.ts @@ -1,6 +1,6 @@ import { BareClient } from "@mercuryworkshop/bare-mux"; import { BareResponseFetch } from "@mercuryworkshop/bare-mux"; -import { encodeUrl, decodeUrl, rewriteCss, rewriteHeaders, rewriteHtml, rewriteJs } from "../shared"; +import { encodeUrl, decodeUrl, rewriteCss, rewriteHeaders, rewriteHtml, rewriteJs, rewriteWorkers } from "../shared"; declare global { interface Window { @@ -62,6 +62,7 @@ export default class ScramjetServiceWorker { break; case "sharedworker": case "worker": + responseBody = rewriteWorkers(await response.text(), url); break; default: responseBody = response.body;