diff --git a/Cargo.lock b/Cargo.lock index afdec3617..bb836f5bb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2606,7 +2606,7 @@ dependencies = [ [[package]] name = "styled_jsx" -version = "0.91.2" +version = "0.91.3" dependencies = [ "anyhow", "lightningcss", diff --git a/packages/styled-jsx/CHANGELOG.md b/packages/styled-jsx/CHANGELOG.md index 5dbc3f91a..edd3a123e 100644 --- a/packages/styled-jsx/CHANGELOG.md +++ b/packages/styled-jsx/CHANGELOG.md @@ -1,5 +1,11 @@ # @swc/plugin-styled-jsx +## 8.0.3 + +### Patch Changes + +- ae8b938: Allow specifying multiple selectors in :global + ## 8.0.2 ### Patch Changes diff --git a/packages/styled-jsx/README.md b/packages/styled-jsx/README.md index 45a070177..7fedf6486 100644 --- a/packages/styled-jsx/README.md +++ b/packages/styled-jsx/README.md @@ -2,6 +2,12 @@ # @swc/plugin-styled-jsx +## 8.0.3 + +### Patch Changes + +- ae8b938: Allow specifying multiple selectors in :global + ## 8.0.2 ### Patch Changes diff --git a/packages/styled-jsx/__tests__/__snapshots__/wasm.test.ts.snap b/packages/styled-jsx/__tests__/__snapshots__/wasm.test.ts.snap index a4b38e790..e3af8acaa 100644 --- a/packages/styled-jsx/__tests__/__snapshots__/wasm.test.ts.snap +++ b/packages/styled-jsx/__tests__/__snapshots__/wasm.test.ts.snap @@ -1016,6 +1016,30 @@ const Test = ()=>/*#__PURE__*/ React.createElement("div", { " `; +exports[`Should load swc-confidential wasm plugin correctly > Should transform global-multiple correctly 1`] = ` +"import _JSXStyle from "styled-jsx/style"; +const Test = ()=>/*#__PURE__*/ React.createElement("div", { + className: "jsx-3d9ecfaa448ef714" + }, /*#__PURE__*/ React.createElement("span", { + className: "jsx-3d9ecfaa448ef714" + }, "test"), /*#__PURE__*/ React.createElement(_JSXStyle, { + id: "3d9ecfaa448ef714" + }, ".c1{background:orange!important}")); +" +`; + +exports[`Should load swc-confidential wasm plugin correctly > Should transform global-nested correctly 1`] = ` +"import _JSXStyle from "styled-jsx/style"; +const Test = ()=>/*#__PURE__*/ React.createElement("div", { + className: "jsx-258c8cca0b71d485" + }, /*#__PURE__*/ React.createElement("span", { + className: "jsx-258c8cca0b71d485" + }, "test"), /*#__PURE__*/ React.createElement(_JSXStyle, { + id: "258c8cca0b71d485" + }, ".p1.jsx-258c8cca0b71d485{background:purple!important}.p1.jsx-258c8cca0b71d485 .c1,.p1.jsx-258c8cca0b71d485 .c2.jsx-258c8cca0b71d485{background:orange!important}")); +" +`; + exports[`Should load swc-confidential wasm plugin correctly > Should transform global-redundant correctly 1`] = ` "import _JSXStyle from "styled-jsx/style"; export default function IndexPage() { diff --git a/packages/styled-jsx/package.json b/packages/styled-jsx/package.json index b22a459bf..b6c157c4d 100644 --- a/packages/styled-jsx/package.json +++ b/packages/styled-jsx/package.json @@ -1,6 +1,6 @@ { "name": "@swc/plugin-styled-jsx", - "version": "8.0.2", + "version": "8.0.3", "description": "SWC plugin for styled-jsx", "main": "swc_plugin_styled_jsx.wasm", "scripts": { diff --git a/packages/styled-jsx/transform/Cargo.toml b/packages/styled-jsx/transform/Cargo.toml index 80662f208..1f142f41b 100644 --- a/packages/styled-jsx/transform/Cargo.toml +++ b/packages/styled-jsx/transform/Cargo.toml @@ -10,7 +10,7 @@ license = { workspace = true } name = "styled_jsx" repository = { workspace = true } rust-version = { workspace = true } -version = "0.91.2" +version = "0.91.3" [features] diff --git a/packages/styled-jsx/transform/src/transform_css_lightningcss.rs b/packages/styled-jsx/transform/src/transform_css_lightningcss.rs index c128c7333..c08b8471f 100644 --- a/packages/styled-jsx/transform/src/transform_css_lightningcss.rs +++ b/packages/styled-jsx/transform/src/transform_css_lightningcss.rs @@ -10,7 +10,7 @@ use anyhow::{bail, Context, Error}; use lightningcss::{ error::ParserError, properties::custom::{TokenList, TokenOrValue}, - selector::{Combinator, Component, PseudoClass, Selector}, + selector::{Combinator, Component, PseudoClass, Selector, SelectorList}, stylesheet::{MinifyOptions, ParserFlags, ParserOptions, PrinterOptions, StyleSheet}, targets::{Browsers, Features, Targets}, traits::{IntoOwned, ParseWithOptions, ToCss}, @@ -126,7 +126,7 @@ pub fn transform_css( let targets = Targets { browsers: Some(convert_browsers(browsers)), - include: Features::Nesting, + include: Features::Nesting | Features::IsSelector, ..Default::default() }; @@ -574,7 +574,7 @@ impl CssNamespace { /// specification), but it is popular usage, so we just add `a ` at top and /// then remove it fn parse_token_list<'i>(tokens: &TokenList<'i>) -> Vec> { - let mut buf = "a ".to_string(); + let mut buf = "".to_string(); for t in tokens.0.iter() { match t { @@ -624,6 +624,14 @@ fn parse_token_list<'i>(tokens: &TokenList<'i>) -> Vec> { debug!("Parsing: {:?}", buf) } + if let Ok(s) = SelectorList::parse_string_with_options(&buf, Default::default()) { + if s.0.len() != 1 { + return vec![Component::Is(s.0.into_owned().into_boxed_slice())]; + } + } + + buf = format!("a {buf}"); + let mut result: Vec> = vec![]; let selector = Selector::parse_string_with_options(&buf, Default::default()) diff --git a/packages/styled-jsx/transform/tests/fixture/global-multiple/input.js b/packages/styled-jsx/transform/tests/fixture/global-multiple/input.js new file mode 100644 index 000000000..83bfd07bd --- /dev/null +++ b/packages/styled-jsx/transform/tests/fixture/global-multiple/input.js @@ -0,0 +1,10 @@ +const Test = () => ( +
+ test + +
+); diff --git a/packages/styled-jsx/transform/tests/fixture/global-multiple/output.lightningcss.js b/packages/styled-jsx/transform/tests/fixture/global-multiple/output.lightningcss.js new file mode 100644 index 000000000..0b4d66350 --- /dev/null +++ b/packages/styled-jsx/transform/tests/fixture/global-multiple/output.lightningcss.js @@ -0,0 +1,5 @@ +import _JSXStyle from "styled-jsx/style"; +const Test = ()=>
+ test + <_JSXStyle id={"3d9ecfaa448ef714"}>{":is(.c1,.c2){background:orange!important}"} +
; diff --git a/packages/styled-jsx/transform/tests/fixture/global-multiple/output.swc.js b/packages/styled-jsx/transform/tests/fixture/global-multiple/output.swc.js new file mode 100644 index 000000000..8d97ad058 --- /dev/null +++ b/packages/styled-jsx/transform/tests/fixture/global-multiple/output.swc.js @@ -0,0 +1,5 @@ +import _JSXStyle from "styled-jsx/style"; +const Test = ()=>
+ test + <_JSXStyle id={"3d9ecfaa448ef714"}>{".c1{background:orange!important}"} +
; diff --git a/packages/styled-jsx/transform/tests/fixture/global-nested/input.js b/packages/styled-jsx/transform/tests/fixture/global-nested/input.js new file mode 100644 index 000000000..c42f41c39 --- /dev/null +++ b/packages/styled-jsx/transform/tests/fixture/global-nested/input.js @@ -0,0 +1,16 @@ +const Test = () => ( +
+ test + +
+); diff --git a/packages/styled-jsx/transform/tests/fixture/global-nested/output.lightningcss.js b/packages/styled-jsx/transform/tests/fixture/global-nested/output.lightningcss.js new file mode 100644 index 000000000..9c1ad3169 --- /dev/null +++ b/packages/styled-jsx/transform/tests/fixture/global-nested/output.lightningcss.js @@ -0,0 +1,5 @@ +import _JSXStyle from "styled-jsx/style"; +const Test = ()=>
+ test + <_JSXStyle id={"258c8cca0b71d485"}>{".p1.jsx-258c8cca0b71d485{background:purple!important}.p1.jsx-258c8cca0b71d485 .c1{background:orange!important}.p1.jsx-258c8cca0b71d485 .c2.jsx-258c8cca0b71d485{background:orange!important}"} +
; diff --git a/packages/styled-jsx/transform/tests/fixture/global-nested/output.swc.js b/packages/styled-jsx/transform/tests/fixture/global-nested/output.swc.js new file mode 100644 index 000000000..17225ecca --- /dev/null +++ b/packages/styled-jsx/transform/tests/fixture/global-nested/output.swc.js @@ -0,0 +1,5 @@ +import _JSXStyle from "styled-jsx/style"; +const Test = ()=>
+ test + <_JSXStyle id={"258c8cca0b71d485"}>{".p1.jsx-258c8cca0b71d485{background:purple!important}.p1.jsx-258c8cca0b71d485 .c1,.p1.jsx-258c8cca0b71d485 .c2.jsx-258c8cca0b71d485{background:orange!important}"} +
; diff --git a/packages/transform-imports/README.md b/packages/transform-imports/README.md index 96205cdd6..7b79d887c 100644 --- a/packages/transform-imports/README.md +++ b/packages/transform-imports/README.md @@ -18,6 +18,12 @@ # @swc/plugin-transform-imports +## 8.0.1 + +### Patch Changes + +- 60dfc2c: fix(transform-imports): Transform side-effect imports + ## 8.0.0 ### Major Changes