This commit is contained in:
velzie 2024-07-16 13:20:57 -04:00
commit cbf932b817
No known key found for this signature in database
GPG key ID: 048413F95F0DDE1F
7 changed files with 40 additions and 19 deletions

View file

@ -10,6 +10,7 @@
}, },
"scripts": { "scripts": {
"build": "rspack build", "build": "rspack build",
"rewriter:build": "cd rewriter && sh build.sh && cd ..",
"dev": "node server.js", "dev": "node server.js",
"prepublish": "pnpm build", "prepublish": "pnpm build",
"pub": "pnpm publish --no-git-checks --access public", "pub": "pnpm publish --no-git-checks --access public",

14
rewriter/build.ps1 Normal file
View file

@ -0,0 +1,14 @@
set RUSTFLAGS="-C target-feature=+atomics,+bulk-memory,+simd128"
cargo build --lib --target wasm32-unknown-unknown -Z build-std=panic_abort,std --release
wasm-bindgen --weak-refs --target web --out-dir out/ target/wasm32-unknown-unknown/release/rewriter.wasm
cd ..
$WASM = "rewriter/out/rewriter_bg.wasm"
Measure-Command -Expression { wasm-opt -Oz --vacuum --dce --enable-threads --enable-bulk-memory --enable-simd "$WASM" -o rewriter/out/optimized.wasm }
Write-Output -n "self.WASM = '" > static/wasm.js
[System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes("rewriter/out/optimized.wasm")) >> static/wasm.js
Write-Output -n "';" >> static/wasm.js
Write-Output "Rewriter Build Complete!"

View file

@ -12,3 +12,4 @@ time wasm-opt -Oz --vacuum --dce --enable-threads --enable-bulk-memory --enable-
echo -n "self.WASM = '" > static/wasm.js echo -n "self.WASM = '" > static/wasm.js
base64 -w0 < "rewriter/out/optimized.wasm" >> static/wasm.js base64 -w0 < "rewriter/out/optimized.wasm" >> static/wasm.js
echo -n "';">> static/wasm.js echo -n "';">> static/wasm.js
echo "Rewriter Build Complete!"

View file

@ -8,9 +8,11 @@ export const windowProxy = new Proxy(window, {
return locationProxy; return locationProxy;
} else if ( } else if (
propIsString && propIsString &&
["window", "top", "parent", "self", "globalThis"].includes(prop) ["window", "top", "self", "globalThis"].includes(prop)
) { ) {
return windowProxy; return windowProxy;
} else if (propIsString && prop == "parent") {
return window.parent
} else if (propIsString && prop === "$scramjet") { } else if (propIsString && prop === "$scramjet") {
return; return;
} else if (propIsString && prop === "addEventListener") { } else if (propIsString && prop === "addEventListener") {

View file

@ -23,7 +23,8 @@ initSync(new WebAssembly.Module(
Uint8Array.from(atob(self.WASM), c => c.charCodeAt(0)) Uint8Array.from(atob(self.WASM), c => c.charCodeAt(0))
)) ))
export function rewriteJs(js: string | ArrayBuffer) { global.rws = rewriteJs;
export function rewriteJs(js: string | ArrayBuffer, origin?: URL) {
let rewrites; let rewrites;
let before = performance.now(); let before = performance.now();
@ -36,22 +37,23 @@ export function rewriteJs(js: string | ArrayBuffer) {
let after = performance.now(); let after = performance.now();
console.log("Rewrite took", Math.floor((after - before) * 10) / 10, "ms"); console.log("Rewrite took", Math.floor((after - before) * 10) / 10, "ms");
//
let offset = 0; // let offset = 0;
//
for (const rewrite of rewrites) { // for (const rewrite of rewrites) {
if (rewrite.genericchange) { // if (rewrite.genericchange) {
let change = rewrite.genericchange; // let change = rewrite.genericchange;
let start = change.span.start + offset; // let start = change.span.start + offset;
let end = change.span.end + offset; // let end = change.span.end + offset;
let len = end - start; // let len = end - start;
//
js = js.slice(0, start) + change.text + js.slice(end); // js = js.slice(0, start) + change.text + js.slice(end);
//
offset += change.text.length - len; // offset += change.text.length - len;
} // }
} // }
// console.log(js)
//
return js; return js;
// console.log(f) // console.log(f)

View file

@ -10,3 +10,4 @@ export function rewriteWorkers(js: string, origin?: URL) {
return str; return str;
} }

View file

@ -47,7 +47,7 @@ function App() {
} }
iframe { iframe {
border: 4px solid #313131; border: 4px solid #313131;
background-color: #121212; background-color: #fff;
border-radius: 1rem; border-radius: 1rem;
margin: 2em; margin: 2em;
margin-top: 0.5em; margin-top: 0.5em;