diff --git a/fuzz/in/tags.html b/fuzz/in/tags.html
index de87686..2e76481 100644
--- a/fuzz/in/tags.html
+++ b/fuzz/in/tags.html
@@ -5,6 +5,7 @@
+ let x = 1;
<
x a b c
x ?> a > b > c
diff --git a/src/minify/attr.rs b/src/minify/attr.rs
index 1f50883..c01e23a 100644
--- a/src/minify/attr.rs
+++ b/src/minify/attr.rs
@@ -312,7 +312,6 @@ pub fn minify_attr(
&mut value_raw_wrapped_min,
&value_raw_wrapped,
&MINIFY_CSS_TRANSFORM_OPTIONS.clone(),
- None,
);
// If input was invalid, wrapper syntax may not exist anymore.
if value_raw_wrapped_min.starts_with(b"x{") {
diff --git a/src/minify/css.rs b/src/minify/css.rs
index 0ce9321..605b183 100644
--- a/src/minify/css.rs
+++ b/src/minify/css.rs
@@ -1,8 +1,7 @@
#[cfg(feature = "js-esbuild")]
use {
crate::minify::esbuild::minify_using_esbuild,
- aho_corasick::{AhoCorasick, AhoCorasickBuilder},
- esbuild_rs::{Charset, Loader, SourceMap, TransformOptions, TransformOptionsBuilder},
+ esbuild_rs::{Charset, LegalComments, Loader, SourceMap, TransformOptions, TransformOptionsBuilder},
lazy_static::lazy_static,
std::sync::Arc,
};
@@ -11,9 +10,6 @@ use crate::cfg::Cfg;
#[cfg(feature = "js-esbuild")]
lazy_static! {
- static ref STYLE_END: AhoCorasick = AhoCorasickBuilder::new()
- .ascii_case_insensitive(true)
- .build(&[" = {
let mut builder = TransformOptionsBuilder::new();
builder.charset = Charset::UTF8;
@@ -41,7 +37,6 @@ pub fn minify_css(cfg: &Cfg, out: &mut Vec, code: &[u8]) {
out,
code,
&MINIFY_CSS_TRANSFORM_OPTIONS.clone(),
- Some(&STYLE_END),
);
}
}
diff --git a/src/minify/esbuild.rs b/src/minify/esbuild.rs
index 6f7daba..343d23d 100644
--- a/src/minify/esbuild.rs
+++ b/src/minify/esbuild.rs
@@ -1,42 +1,20 @@
#[cfg(feature = "js-esbuild")]
-use {aho_corasick::AhoCorasick, crossbeam::sync::WaitGroup, esbuild_rs::TransformOptions};
+use {crossbeam::sync::WaitGroup, esbuild_rs::TransformOptions};
#[cfg(feature = "js-esbuild")]
// TODO The use of WG is ugly and we don't want to be multi-threaded; wait for Rust port esbuild-transform-rs.
-// `tag_to_escape` must be case insensitive if provided.
pub fn minify_using_esbuild(
out: &mut Vec,
code: &[u8],
transform_options: &TransformOptions,
- tag_to_escape: Option<&'static AhoCorasick>,
) {
let wg = WaitGroup::new();
unsafe {
let wg = wg.clone();
+ // esbuild now officially handles escaping ` out.extend_from_slice(min_code),
- // TODO (JS) Handle other forms:
- // 1 < /script/.exec(a).length
- // ` ${` ${a
- // /*
- // Considerations:
- // - Need to parse strings (e.g. "", '', ``) so syntax within strings aren't mistakenly interpreted as code.
- // - Need to be able to parse regex literals to determine string delimiters aren't actually characters in the regex.
- // - Determining whether a slash is division or regex requires a full-blown JS parser to handle all cases (this is a well-known JS parsing problem).
- // - `/ {
- tag_to_escape.replace_all_with_bytes(min_code, out, |_, orig, dst| {
- dst.extend(b"<\\/");
- // Keep original case.
- dst.extend(&orig[2..]);
- true
- })
- }
- }
+ out.extend_from_slice(min_code);
drop(wg);
});
};
diff --git a/src/minify/js.rs b/src/minify/js.rs
index d5fabfc..20f553d 100644
--- a/src/minify/js.rs
+++ b/src/minify/js.rs
@@ -1,7 +1,6 @@
#[cfg(feature = "js-esbuild")]
use {
crate::minify::esbuild::minify_using_esbuild,
- aho_corasick::{AhoCorasick, AhoCorasickBuilder},
esbuild_rs::{Charset, LegalComments, SourceMap, TransformOptions, TransformOptionsBuilder},
lazy_static::lazy_static,
std::sync::Arc,
@@ -11,9 +10,6 @@ use crate::Cfg;
#[cfg(feature = "js-esbuild")]
lazy_static! {
- static ref SCRIPT_END: AhoCorasick = AhoCorasickBuilder::new()
- .ascii_case_insensitive(true)
- .build(&[" = {
let mut builder = TransformOptionsBuilder::new();
builder.charset = Charset::UTF8;
@@ -36,6 +32,10 @@ pub fn minify_js(cfg: &Cfg, out: &mut Vec, code: &[u8]) {
if !cfg.minify_js {
out.extend_from_slice(&code);
} else {
- minify_using_esbuild(out, code, &TRANSFORM_OPTIONS.clone(), Some(&SCRIPT_END));
+ minify_using_esbuild(
+ out,
+ code,
+ &TRANSFORM_OPTIONS.clone(),
+ );
}
}