start adding module rewriting support

This commit is contained in:
Percs 2025-02-03 09:23:51 -06:00
parent 8b97751692
commit 2dc6a47c41
2 changed files with 14 additions and 7 deletions

View file

@ -248,13 +248,18 @@ function traverseParsedHtml(
node.children[0] !== undefined node.children[0] !== undefined
) { ) {
let js = node.children[0].data; let js = node.children[0].data;
// node.attribs[`scramjet-attr-script-source-src`] = btoa(js); const module = node.attribs.type === "module" ? true : false;
node.attribs["scramjet-attr-script-source-src"] = bytesToBase64( node.attribs["scramjet-attr-script-source-src"] = bytesToBase64(
encoder.encode(js) encoder.encode(js)
); );
const htmlcomment = /<!--[\s\S]*?-->/g; const htmlcomment = /<!--[\s\S]*?-->/g;
js = js.replace(htmlcomment, ""); js = js.replace(htmlcomment, "");
node.children[0].data = rewriteJs(js, "(inline script element)", meta); node.children[0].data = rewriteJs(
js,
"(inline script element)",
meta,
module
);
} }
if (node.name === "meta" && node.attribs["http-equiv"] !== undefined) { if (node.name === "meta" && node.attribs["http-equiv"] !== undefined) {

View file

@ -22,7 +22,8 @@ const decoder = new TextDecoder();
function rewriteJsWrapper( function rewriteJsWrapper(
input: string | ArrayBuffer, input: string | ArrayBuffer,
source: string | null, source: string | null,
meta: URLMeta meta: URLMeta,
module: boolean
): string | ArrayBuffer { ): string | ArrayBuffer {
let out: RewriterOutput; let out: RewriterOutput;
const before = performance.now(); const before = performance.now();
@ -31,7 +32,7 @@ function rewriteJsWrapper(
out = rewrite_js( out = rewrite_js(
input, input,
meta.base.href, meta.base.href,
false, module,
source || "(unknown)", source || "(unknown)",
$scramjet $scramjet
); );
@ -39,7 +40,7 @@ function rewriteJsWrapper(
out = rewrite_js_from_arraybuffer( out = rewrite_js_from_arraybuffer(
new Uint8Array(input), new Uint8Array(input),
meta.base.href, meta.base.href,
false, module,
source || "(unknown)", source || "(unknown)",
$scramjet $scramjet
); );
@ -80,7 +81,8 @@ function rewriteJsWrapper(
export function rewriteJs( export function rewriteJs(
js: string | ArrayBuffer, js: string | ArrayBuffer,
url: string | null, url: string | null,
meta: URLMeta meta: URLMeta,
module = false
) { ) {
if (flagEnabled("naiiveRewriter", meta.origin)) { if (flagEnabled("naiiveRewriter", meta.origin)) {
const text = typeof js === "string" ? js : new TextDecoder().decode(js); const text = typeof js === "string" ? js : new TextDecoder().decode(js);
@ -88,7 +90,7 @@ export function rewriteJs(
return rewriteJsNaiive(text); return rewriteJsNaiive(text);
} }
return rewriteJsWrapper(js, url, meta); return rewriteJsWrapper(js, url, meta, module);
} }
// 1. does not work with modules // 1. does not work with modules