diff --git a/rewriter/Cargo.lock b/rewriter/Cargo.lock index a6c8bd3..12c2c8e 100644 --- a/rewriter/Cargo.lock +++ b/rewriter/Cargo.lock @@ -196,9 +196,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" +checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" dependencies = [ "bytemuck_derive", ] @@ -1001,6 +1001,7 @@ dependencies = [ "serde-wasm-bindgen", "url", "wasm-bindgen", + "web-sys", ] [[package]] @@ -1011,9 +1012,9 @@ checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "ryu" diff --git a/rewriter/Cargo.toml b/rewriter/Cargo.toml index b8c8840..31e81ec 100644 --- a/rewriter/Cargo.toml +++ b/rewriter/Cargo.toml @@ -37,6 +37,7 @@ serde = "1.0.204" serde-wasm-bindgen = "0.6.5" url = "2.5.2" wasm-bindgen = "0.2.92" +web-sys = { version = "0.3.72", features = ["Url"] } [dev-dependencies] boa_engine = "0.19.0" diff --git a/rewriter/build.sh b/rewriter/build.sh index 9021eb6..b55dd7d 100755 --- a/rewriter/build.sh +++ b/rewriter/build.sh @@ -29,7 +29,7 @@ else WASMOPTFLAGS="" fi -time wasm-opt $WASMOPTFLAGS -O4 --vacuum --dce --enable-threads --enable-bulk-memory --enable-simd "$WASM" -o rewriter/out/optimized.wasm +time wasm-opt $WASMOPTFLAGS -tnh -O4 --vacuum --dce --enable-threads --enable-bulk-memory --enable-simd "$WASM" -o rewriter/out/optimized.wasm mkdir dist/ || true diff --git a/rewriter/src/lib.rs b/rewriter/src/lib.rs index 73d2ab8..5d2663f 100644 --- a/rewriter/src/lib.rs +++ b/rewriter/src/lib.rs @@ -2,13 +2,10 @@ pub mod rewrite; use std::{panic, str::FromStr}; -use js_sys::{ - global, Array, Function, Object, - Reflect::{self, construct}, -}; +use js_sys::{Function, Object, Reflect}; use rewrite::{rewrite, Config, EncodeFn}; -use url::Url; use wasm_bindgen::{prelude::*, throw_str}; +use url::Url; #[wasm_bindgen] extern "C" { @@ -40,27 +37,23 @@ fn get_obj(obj: &JsValue, k: &str) -> JsValue { Reflect::get(obj, &k.into()).unwrap() } -fn get_bool(obj: &JsValue, k: &str) -> bool { - Reflect::get(obj, &k.into()).unwrap().as_bool().unwrap() -} - fn get_str(obj: &JsValue, k: &str) -> String { Reflect::get(obj, &k.into()).unwrap().as_string().unwrap() } fn get_flag(scramjet: &Object, url: &str, flag: &str) -> bool { - let urlconstructor = get_obj(&global(), "URL"); - let args = Array::new(); - args.push(&JsValue::from_str(url)); - let url = construct(&urlconstructor.dyn_into::().unwrap(), &args).unwrap(); let fenabled = get_obj(scramjet, "flagEnabled") .dyn_into::() .unwrap(); - return fenabled - .call2(&JsValue::NULL, &JsValue::from_str(flag), &url) - .unwrap() + fenabled + .call2( + &JsValue::NULL, + &flag.into(), + &web_sys::Url::new(url).expect("invalid url").into(), + ) + .expect("error in flagEnabled") .as_bool() - .unwrap(); + .expect("not bool returned from flagEnabled") } fn get_config(scramjet: &Object, url: &str) -> Config { diff --git a/rewriter/src/rewrite.rs b/rewriter/src/rewrite.rs index ea233d3..83e14ab 100644 --- a/rewriter/src/rewrite.rs +++ b/rewriter/src/rewrite.rs @@ -22,7 +22,6 @@ enum JsChange { }, SourceTag { tagstart: u32, - tagend: usize, }, Assignment { name: String, @@ -288,7 +287,6 @@ impl<'a> Visit<'a> for Rewriter { if self.config.do_sourcemaps { self.jschanges.push(JsChange::SourceTag { tagstart: it.span.start, - tagend: it.span.end as usize, }); } walk::walk_function_body(self, it); @@ -480,7 +478,7 @@ pub fn rewrite(js: &str, url: Url, config: Config) -> Vec { rhsspan: _, op: _, } => entirespan.start, - JsChange::SourceTag { tagstart, tagend } => *tagstart, + JsChange::SourceTag { tagstart } => *tagstart, }; let b = match b { JsChange::GenericChange { span, text: _ } => span.start, @@ -490,7 +488,7 @@ pub fn rewrite(js: &str, url: Url, config: Config) -> Vec { rhsspan: _, op: _, } => entirespan.start, - JsChange::SourceTag { tagstart, tagend } => *tagstart, + JsChange::SourceTag { tagstart } => *tagstart, }; a.cmp(&b) }); @@ -519,7 +517,7 @@ pub fn rewrite(js: &str, url: Url, config: Config) -> Vec { let mut sourcemap: Vec = Vec::new(); if ast_pass.config.do_sourcemaps { sourcemap.reserve(size_estimate * 2); - sourcemap.extend_from_slice(&format!("{}([", ast_pass.config.pushsourcemapfn).as_bytes()); + sourcemap.extend_from_slice(format!("{}([", ast_pass.config.pushsourcemapfn).as_bytes()); } let mut offset = 0; @@ -570,11 +568,10 @@ pub fn rewrite(js: &str, url: Url, config: Config) -> Vec { offset = entirespan.end as usize; } - JsChange::SourceTag { tagstart, tagend } => { + JsChange::SourceTag { tagstart } => { let start = *tagstart as usize; buffer.extend_from_slice(unsafe { js.get_unchecked(offset..start) }.as_bytes()); - // let inject = format!("/*scramtag {} */", &js[start..*tagend]); let inject = format!("/*scramtag {} {}*/", start, sourcetag); buffer.extend_from_slice(inject.as_bytes()); @@ -587,7 +584,7 @@ pub fn rewrite(js: &str, url: Url, config: Config) -> Vec { if ast_pass.config.do_sourcemaps { sourcemap.extend_from_slice(b"],"); sourcemap.extend_from_slice(b"\""); - sourcemap.extend_from_slice(&sourcetag.as_bytes()); + sourcemap.extend_from_slice(sourcetag.as_bytes()); sourcemap.extend_from_slice(b"\");\n"); sourcemap.extend_from_slice(&buffer);