diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..039d8ef
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,5 @@
+# minify-html changelog
+
+## 0.6.9
+
+- Intrepret `type=module` on `", b"");
+ eval_with_js_min(b"", b"");
+ eval_with_js_min(b"", b"");
eval_with_js_min(
br#"
diff --git a/rust/main/src/minify/attr.rs b/rust/main/src/minify/attr.rs
index 2348ee1..977292c 100644
--- a/rust/main/src/minify/attr.rs
+++ b/rust/main/src/minify/attr.rs
@@ -344,7 +344,8 @@ pub fn minify_attr(
|| default_value.filter(|dv| dv == &value_raw).is_some()
|| (tag == b"script"
&& name == b"type"
- && JAVASCRIPT_MIME_TYPES.contains(value_raw.as_slice()))
+ && JAVASCRIPT_MIME_TYPES.contains(value_raw.as_slice())
+ && value_raw.as_slice() != b"module")
{
return AttrMinified::Redundant;
};
diff --git a/rust/onepass/src/unit/tag.rs b/rust/onepass/src/unit/tag.rs
index 5a0982b..b61655b 100644
--- a/rust/onepass/src/unit/tag.rs
+++ b/rust/onepass/src/unit/tag.rs
@@ -1,6 +1,7 @@
use crate::cfg::Cfg;
use crate::common::gen::attrs::{AttributeMinification, ATTRS};
use crate::common::gen::codepoints::{TAG_NAME_CHAR, WHITESPACE};
+use crate::common::spec::script::JAVASCRIPT_MIME_TYPES;
use crate::common::spec::tag::ns::Namespace;
use crate::common::spec::tag::omission::{can_omit_as_before, can_omit_as_last_node};
use crate::common::spec::tag::void::VOID_TAGS;
@@ -14,31 +15,6 @@ use crate::unit::attr::{process_attr, AttrType, ProcessedAttr};
use crate::unit::content::process_content;
use crate::unit::script::process_script;
use crate::unit::style::process_style;
-use lazy_static::lazy_static;
-use std::collections::HashSet;
-
-lazy_static! {
- pub static ref JAVASCRIPT_MIME_TYPES: HashSet<&'static [u8]> = {
- let mut s = HashSet::<&'static [u8]>::new();
- s.insert(b"application/ecmascript");
- s.insert(b"application/javascript");
- s.insert(b"application/x-ecmascript");
- s.insert(b"application/x-javascript");
- s.insert(b"text/ecmascript");
- s.insert(b"text/javascript");
- s.insert(b"text/javascript1.0");
- s.insert(b"text/javascript1.1");
- s.insert(b"text/javascript1.2");
- s.insert(b"text/javascript1.3");
- s.insert(b"text/javascript1.4");
- s.insert(b"text/javascript1.5");
- s.insert(b"text/jscript");
- s.insert(b"text/livescript");
- s.insert(b"text/x-ecmascript");
- s.insert(b"text/x-javascript");
- s
- };
-}
#[derive(Copy, Clone)]
enum TagType {
@@ -167,7 +143,9 @@ pub fn process_tag(
.filter(|v| !JAVASCRIPT_MIME_TYPES.contains(&proc[*v]))
.is_none();
if script_tag_type_is_js {
- erase_attr = true;
+ if &proc[value.unwrap()] != b"module" {
+ erase_attr = true;
+ };
} else {
// Tag does not contain JS, don't minify JS.
tag_type = TagType::ScriptData;