diff --git a/crates/swc_css_codegen/src/lib.rs b/crates/swc_css_codegen/src/lib.rs index ad29d732d4de..db2db4d50f0f 100644 --- a/crates/swc_css_codegen/src/lib.rs +++ b/crates/swc_css_codegen/src/lib.rs @@ -2763,9 +2763,9 @@ fn minify_hex_color(value: &str) -> String { if length == 6 || chars[6] == b'f' && chars[7] == b'f' { let mut minified = String::with_capacity(3); - minified.push((chars[0] as char).to_ascii_lowercase()); - minified.push((chars[2] as char).to_ascii_lowercase()); - minified.push((chars[4] as char).to_ascii_lowercase()); + minified.push(chars[0] as char); + minified.push(chars[2] as char); + minified.push(chars[4] as char); return minified; } @@ -2773,17 +2773,17 @@ fn minify_hex_color(value: &str) -> String { else if length == 8 && chars[6] == chars[7] { let mut minified = String::with_capacity(4); - minified.push((chars[0] as char).to_ascii_lowercase()); - minified.push((chars[2] as char).to_ascii_lowercase()); - minified.push((chars[4] as char).to_ascii_lowercase()); - minified.push((chars[6] as char).to_ascii_lowercase()); + minified.push(chars[0] as char); + minified.push(chars[2] as char); + minified.push(chars[4] as char); + minified.push(chars[6] as char); return minified; } } } - value.to_ascii_lowercase() + value.to_string() } fn serialize_string(value: &str) -> String { diff --git a/crates/swc_css_minifier/src/compressor/declaration.rs b/crates/swc_css_minifier/src/compressor/declaration.rs index b53b9ef34140..2f48ed995be9 100644 --- a/crates/swc_css_minifier/src/compressor/declaration.rs +++ b/crates/swc_css_minifier/src/compressor/declaration.rs @@ -6,8 +6,8 @@ use super::Compressor; impl Compressor { pub(super) fn compress_declaration(&self, declaration: &mut Declaration) { - if let DeclarationName::Ident(Ident { value, .. }) = &declaration.name { - match value.to_ascii_lowercase() { + if let DeclarationName::Ident(Ident { value: name, .. }) = &declaration.name { + match *name { js_word!("display") if declaration.value.len() > 1 => { let mut outside = None; let mut inside = None; @@ -616,12 +616,12 @@ impl Compressor { fn compress_from_initial(&self, declaration: &mut Declaration, span: Span) { let name = if let DeclarationName::Ident(Ident { value, .. }) = &declaration.name { - value.to_ascii_lowercase() + value } else { return; }; - match name { + match *name { js_word!("accent-color") | js_word!("align-self") | js_word!("animation-timeline") @@ -1282,12 +1282,12 @@ impl Compressor { fn _compress_to_initial(&self, declaration: &mut Declaration) { let name = if let DeclarationName::Ident(Ident { value, .. }) = &declaration.name { - value.to_ascii_lowercase() + value } else { return; }; - match name { + match *name { js_word!("background-clip") | js_word!("mask-clip") | js_word!("mask-origin") => { if let Some(ComponentValue::Ident(box Ident { value, span, .. })) = declaration.value.get(0) diff --git a/crates/swc_css_modules/src/lib.rs b/crates/swc_css_modules/src/lib.rs index bd69c4fd9285..443ca501c381 100644 --- a/crates/swc_css_modules/src/lib.rs +++ b/crates/swc_css_modules/src/lib.rs @@ -316,7 +316,7 @@ where } if let DeclarationName::Ident(name) = &n.name { - match name.value.to_ascii_lowercase() { + match name.value { js_word!("animation") => { let mut can_change = true; diff --git a/crates/swc_css_parser/src/parser/syntax/mod.rs b/crates/swc_css_parser/src/parser/syntax/mod.rs index 9efae7729416..9f22658e622e 100644 --- a/crates/swc_css_parser/src/parser/syntax/mod.rs +++ b/crates/swc_css_parser/src/parser/syntax/mod.rs @@ -613,7 +613,11 @@ where let name = if is_dashed_ident { DeclarationName::DashedIdent(self.parse()?) } else { - DeclarationName::Ident(self.parse()?) + let mut ident: Ident = self.parse()?; + + ident.value = ident.value.to_ascii_lowercase(); + + DeclarationName::Ident(ident) }; let mut declaration = Declaration { span: Default::default(), @@ -742,7 +746,7 @@ where }; let value = Ident { span: important_ident.span, - value: value.0, + value: value.0.to_ascii_lowercase(), raw: Some(value.1), }; diff --git a/crates/swc_css_parser/tests/fixture/at-rule/import/output.json b/crates/swc_css_parser/tests/fixture/at-rule/import/output.json index 0251ea8ee94d..4337a9fcdd16 100644 --- a/crates/swc_css_parser/tests/fixture/at-rule/import/output.json +++ b/crates/swc_css_parser/tests/fixture/at-rule/import/output.json @@ -9257,7 +9257,7 @@ "end": 4781, "ctxt": 0 }, - "value": "DISPLAY", + "value": "display", "raw": "DISPLAY" }, "value": [ diff --git a/crates/swc_css_parser/tests/fixture/important/basic/output.json b/crates/swc_css_parser/tests/fixture/important/basic/output.json index 7ffa61813383..096b388f3872 100644 --- a/crates/swc_css_parser/tests/fixture/important/basic/output.json +++ b/crates/swc_css_parser/tests/fixture/important/basic/output.json @@ -453,7 +453,7 @@ "end": 219, "ctxt": 0 }, - "value": "IMPORTANT", + "value": "important", "raw": "IMPORTANT" } } @@ -501,7 +501,7 @@ "end": 251, "ctxt": 0 }, - "value": "IMPORTANT", + "value": "important", "raw": "IMPORTANT" } } @@ -930,7 +930,7 @@ "end": 519, "ctxt": 0 }, - "value": "iMpOrTaNt", + "value": "important", "raw": "iMpOrTaNt" } } diff --git a/crates/swc_css_parser/tests/fixture/vendor/rome/at-page/output.json b/crates/swc_css_parser/tests/fixture/vendor/rome/at-page/output.json index e9825b1f0028..fed665b0414a 100644 --- a/crates/swc_css_parser/tests/fixture/vendor/rome/at-page/output.json +++ b/crates/swc_css_parser/tests/fixture/vendor/rome/at-page/output.json @@ -651,7 +651,7 @@ "end": 234, "ctxt": 0 }, - "value": "CONTENT", + "value": "content", "raw": "CONTENT" }, "value": [ @@ -685,7 +685,7 @@ "end": 255, "ctxt": 0 }, - "value": "MARGIN-LEFT", + "value": "margin-left", "raw": "MARGIN-LEFT" }, "value": [ diff --git a/crates/swc_css_parser/tests/fixture/vendor/rome/at-page/page-properties-case-insensitive/output.json b/crates/swc_css_parser/tests/fixture/vendor/rome/at-page/page-properties-case-insensitive/output.json index 3f223676c08b..4d85a7d2da6c 100644 --- a/crates/swc_css_parser/tests/fixture/vendor/rome/at-page/page-properties-case-insensitive/output.json +++ b/crates/swc_css_parser/tests/fixture/vendor/rome/at-page/page-properties-case-insensitive/output.json @@ -55,7 +55,7 @@ "end": 17, "ctxt": 0 }, - "value": "DISPLAY", + "value": "display", "raw": "DISPLAY" }, "value": [ diff --git a/crates/swc_css_prefixer/src/prefixer.rs b/crates/swc_css_prefixer/src/prefixer.rs index dc8ce0334cb1..415eb3623ec8 100644 --- a/crates/swc_css_prefixer/src/prefixer.rs +++ b/crates/swc_css_prefixer/src/prefixer.rs @@ -1594,7 +1594,7 @@ impl VisitMut for Prefixer { }}; } - let property_name = &*name.to_ascii_lowercase(); + let property_name: &str = name; match property_name { "appearance" => { diff --git a/crates/swc_css_prefixer/tests/fixture/case-insensivity/input.css b/crates/swc_css_prefixer/tests/fixture/case-insensivity/input.css index 80b91b694d31..96593ae3a428 100644 --- a/crates/swc_css_prefixer/tests/fixture/case-insensivity/input.css +++ b/crates/swc_css_prefixer/tests/fixture/case-insensivity/input.css @@ -5,3 +5,13 @@ a { b { APPEARANCE: AUTO; } + +c { + -WEBKIT-APPEARANCE: NONE; + APPEARANCE: NONE; +} + +d { + -webkit-appearance: NONE; + APPEARANCE: NONE; +} \ No newline at end of file diff --git a/crates/swc_css_prefixer/tests/fixture/case-insensivity/output.css b/crates/swc_css_prefixer/tests/fixture/case-insensivity/output.css index de15328a342e..5297ce26839c 100644 --- a/crates/swc_css_prefixer/tests/fixture/case-insensivity/output.css +++ b/crates/swc_css_prefixer/tests/fixture/case-insensivity/output.css @@ -10,3 +10,15 @@ b { -ms-appearance: AUTO; APPEARANCE: AUTO; } +c { + -WEBKIT-APPEARANCE: NONE; + -moz-appearance: NONE; + -ms-appearance: NONE; + APPEARANCE: NONE; +} +d { + -webkit-appearance: NONE; + -moz-appearance: NONE; + -ms-appearance: NONE; + APPEARANCE: NONE; +} diff --git a/crates/swc_css_prefixer/tests/fixture/case-insensivity/output.defaults-not-ie-11.css b/crates/swc_css_prefixer/tests/fixture/case-insensivity/output.defaults-not-ie-11.css index 75ea68262bf8..21d6ccb5f65c 100644 --- a/crates/swc_css_prefixer/tests/fixture/case-insensivity/output.defaults-not-ie-11.css +++ b/crates/swc_css_prefixer/tests/fixture/case-insensivity/output.defaults-not-ie-11.css @@ -6,3 +6,11 @@ b { -webkit-appearance: AUTO; APPEARANCE: AUTO; } +c { + -WEBKIT-APPEARANCE: NONE; + APPEARANCE: NONE; +} +d { + -webkit-appearance: NONE; + APPEARANCE: NONE; +}