implement direct and indirect eval

This commit is contained in:
velzie 2024-07-28 21:45:41 -04:00
parent e6b237c525
commit ec8421be8f
No known key found for this signature in database
GPG key ID: 048413F95F0DDE1F
12 changed files with 171 additions and 101 deletions

View file

@ -24,25 +24,21 @@ export function rewriteJs(js: string | ArrayBuffer, origin?: URL) {
if ("window" in globalThis) origin ??= new URL(decodeUrl(location.href));
const before = performance.now();
const cfg = {
prefix: self.$scramjet.config.prefix,
codec: self.$scramjet.config.codec.encode,
wrapfn: self.$scramjet.config.wrapfn,
trysetfn: self.$scramjet.config.trysetfn,
importfn: self.$scramjet.config.importfn,
rewritefn: self.$scramjet.config.rewritefn,
};
if (typeof js === "string") {
js = new TextDecoder().decode(
rewrite_js(
js,
origin.toString(),
self.$scramjet.config.prefix,
self.$scramjet.config.codec.encode as any,
"$scramjet$wrap",
"$scramjet$import"
)
);
js = new TextDecoder().decode(rewrite_js(js, origin.toString(), cfg));
} else {
js = rewrite_js_from_arraybuffer(
new Uint8Array(js),
origin.toString(),
self.$scramjet.config.prefix,
self.$scramjet.config.codec.encode as any,
"$scramjet$wrap",
"$scramjet$import"
cfg
);
}
const after = performance.now();