diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock index d18985578d..a52c79160e 100644 --- a/packages/next-swc/Cargo.lock +++ b/packages/next-swc/Cargo.lock @@ -1853,9 +1853,9 @@ dependencies = [ [[package]] name = "swc" -version = "0.170.0" +version = "0.172.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e120b0149cfe12d21c2d7142618d8c2820ede1432878c835fd0eef33dc523f0b" +checksum = "d4e29e879868284573c7d2edb014a6dde86a4a5b0dc060648c77ac2ac9ffccf0" dependencies = [ "ahash", "anyhow", @@ -1909,9 +1909,9 @@ dependencies = [ [[package]] name = "swc_bundler" -version = "0.138.0" +version = "0.140.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b3b0223d2afc80679fc8ae4a1e1e5ed4b68b090f451aa3d4ae0d7b9779055a8" +checksum = "c49ab92926ec1b1a354e54146cc58d12e624127aa4df06ddad74b1146124ddb6" dependencies = [ "ahash", "anyhow", @@ -1958,9 +1958,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.17.24" +version = "0.17.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc46c0dc9baf12a82ccba5d21209d3f5318e6dddc5440fdab4bbf71e2529d72d" +checksum = "766ad22c1cb8586c038ccba7371a4903a6074b53ee4ba8980a52f502413f120e" dependencies = [ "ahash", "ast_node", @@ -2094,9 +2094,9 @@ dependencies = [ [[package]] name = "swc_ecma_ast" -version = "0.76.1" +version = "0.76.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82617d5fbf5698e7955a84dca76838c2d70b31b5a0f42049ffa052c6de45e67e" +checksum = "87eb325cc3e9bcf93dd9fcf14586e56fc502a5c7a9cc80e36c00bfd7c833b189" dependencies = [ "is-macro", "num-bigint", @@ -2155,9 +2155,9 @@ dependencies = [ [[package]] name = "swc_ecma_lints" -version = "0.35.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afda60b9c68a5f53c9c6e7f0e1e4b0ed8a1ad1b3665c01229346ed9d3c55659f" +checksum = "255f8894576ab4c228f995be2a70d98f8f10cc374763ea7cedcc57917b87c646" dependencies = [ "ahash", "auto_impl", @@ -2197,9 +2197,9 @@ dependencies = [ [[package]] name = "swc_ecma_minifier" -version = "0.105.1" +version = "0.107.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae9538f315b203d837850929770286600fc543800a0fee66d27a02f478b8d299" +checksum = "ee95fc1f92a21048d05ad6072dee0bdba3eb1dc35dbf487b13f2565633a889a7" dependencies = [ "ahash", "arrayvec", @@ -2229,9 +2229,9 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.102.4" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af84da2e786dbc410c2cd15678f87809112b330870457ad9fcd31d316220a65e" +checksum = "d82e92a57b370b3d59c1d613b3f68cf37d7f6960c36b349484b9ccd09b881d43" dependencies = [ "either", "enum_kind", @@ -2249,9 +2249,9 @@ dependencies = [ [[package]] name = "swc_ecma_preset_env" -version = "0.121.0" +version = "0.123.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0768300d16387be269e3492f3464332acb42ed1028a0f26b5a8ab7dfdb032c" +checksum = "44db6900807c2792c07169dcc174b089c3b2c58efca6df9e1b80b927da60e3fd" dependencies = [ "ahash", "anyhow", @@ -2274,9 +2274,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms" -version = "0.146.0" +version = "0.148.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e586f9922cd3e94e1d73d53c64d07ecc648f9ca525f4361b11c2aa182e7ba13" +checksum = "92bb59bb6ec5fcb6fc186b6037a8165be6686cd48974c1f2527e0d567401e924" dependencies = [ "swc_atoms", "swc_common", @@ -2294,9 +2294,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.79.0" +version = "0.80.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816390dd5525d64c00d520b998ed31509f5545bc184296955d2790832dcc6cc9" +checksum = "ba127853a1cf7e0b0411de93e67265934445f693c7420c67195fdab3e5d5335f" dependencies = [ "better_scoped_tls", "once_cell", @@ -2314,9 +2314,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "0.67.0" +version = "0.68.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325a73f310dd72cc3c9fd7acc78274b6439df7d805a92a6b7e3018be2e801177" +checksum = "ec137c540f3a9b74338ba5ff895cd3330a3d093503b3f0a4a6cbfc4cd7b83216" dependencies = [ "swc_atoms", "swc_common", @@ -2328,9 +2328,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_compat" -version = "0.93.0" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca1735c5e3d5f4bad130bfb626e316e57307fea615fe3b9de5f99b2258004566" +checksum = "24ac08ad78a45a5e41d2f6fa1f1085ed4500b56346ce4cbedac08528a779bdd9" dependencies = [ "ahash", "arrayvec", @@ -2367,9 +2367,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_module" -version = "0.106.0" +version = "0.107.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb29226d93328731c776db0b954ee35a10527a75b25313c1efc855a5550885b" +checksum = "c4e69346f9341d63b942d699ab9f4bbfd5be431ac00f314cbbc967de0f6777bb" dependencies = [ "Inflector", "ahash", @@ -2391,9 +2391,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "0.116.0" +version = "0.118.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f3bdaaea83274cffde5ed316df40d1a0aff34d47c8fb2fae51a4bcb7139396" +checksum = "adbef528d0642b07670c193ba2af50ec0da1635e02d9e03aa3004b7793981d41" dependencies = [ "ahash", "dashmap 5.1.0", @@ -2413,9 +2413,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "0.101.0" +version = "0.102.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8bf447bb9e37042ec8a143fa54b3d7d1bf280d69e92515e2019ec5a5e2fcb05" +checksum = "ccc254c4c98d88e39f2669e73d6d7add46ff5d26ea65a83cc43d418fbd7b3b47" dependencies = [ "either", "serde", @@ -2432,9 +2432,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.108.0" +version = "0.109.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "892a018ba5ad3b1aac8ac1acb4d571de8fcd9033875c0d1ef954b8af117002ac" +checksum = "27fe20ec2cb77b66708a85a0ac5dba7686ef1fefc635c6488f8a67f53c962f87" dependencies = [ "ahash", "base64 0.13.0", @@ -2457,9 +2457,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_testing" -version = "0.81.0" +version = "0.82.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab247e156a844f82c39daba4c24b46c63305e859ab6c762af6334b8597a331a0" +checksum = "e1e3344a5db9122d33c5b926e6e80587af2d55460c361c18c2fd76fd55552822" dependencies = [ "ansi_term", "anyhow", @@ -2480,9 +2480,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "0.111.0" +version = "0.112.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71bcdb9f7ccf54cd97ecdf36719c64177d25f52c3509ca6a1152b20ab744ae3" +checksum = "3546be985a8733f7687e0a95ec65f2254cda00eb7f1eb66d0442262054a80735" dependencies = [ "serde", "swc_atoms", @@ -2525,9 +2525,9 @@ dependencies = [ [[package]] name = "swc_ecmascript" -version = "0.148.0" +version = "0.150.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73e20917a294714127057d5072c8a864b84c3c41e49bc1d7b35b23e30a3d6518" +checksum = "6b856c5eec703e78576bd1c7d39886be932bb1c2cec0deb54781455bd6abd4fd" dependencies = [ "swc_ecma_ast", "swc_ecma_codegen", @@ -2571,11 +2571,14 @@ dependencies = [ [[package]] name = "swc_error_reporters" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28653b7f324886314bffd4bd3e756c367ec3adde80758543f39db503537a4fd" +checksum = "9465ed499a1343831a516c1b3614f0962edd6ed18c86a4f28dc04edffca35345" dependencies = [ + "anyhow", "miette", + "once_cell", + "parking_lot", "swc_common", ] diff --git a/packages/next-swc/crates/core/Cargo.toml b/packages/next-swc/crates/core/Cargo.toml index 0fe8e1fc15..f232865547 100644 --- a/packages/next-swc/crates/core/Cargo.toml +++ b/packages/next-swc/crates/core/Cargo.toml @@ -21,16 +21,16 @@ swc_emotion = {path="../emotion"} styled_components = {path="../styled_components"} styled_jsx = {path="../styled_jsx"} modularize_imports = {path="../modularize_imports"} -swc = "0.170.0" +swc = "0.172.1" swc_atoms = "0.2.11" -swc_common = { version = "0.17.24", features = ["concurrent", "sourcemap"] } +swc_common = { version = "0.17.25", features = ["concurrent", "sourcemap"] } swc_ecma_loader = { version = "0.29.1", features = ["node", "lru"] } -swc_ecmascript = { version = "0.148.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } +swc_ecmascript = { version = "0.150.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } swc_cached = "0.1.1" tracing = { version = "0.1.32", features = ["release_max_level_off"] } [dev-dependencies] -swc_ecma_transforms_testing = "0.81.0" +swc_ecma_transforms_testing = "0.82.0" testing = "0.19.1" walkdir = "2.3.2" diff --git a/packages/next-swc/crates/emotion/Cargo.toml b/packages/next-swc/crates/emotion/Cargo.toml index 04a1b34c8b..d8b8fcc8c7 100644 --- a/packages/next-swc/crates/emotion/Cargo.toml +++ b/packages/next-swc/crates/emotion/Cargo.toml @@ -19,9 +19,9 @@ regex = "1.5" serde = "1" sourcemap = "6.0.1" swc_atoms = "0.2.11" -swc_common = { version = "0.17.24", features = ["concurrent", "sourcemap"] } -swc_ecmascript = { version = "0.148.0", features = ["codegen", "utils", "visit"] } +swc_common = { version = "0.17.25", features = ["concurrent", "sourcemap"] } +swc_ecmascript = { version = "0.150.0", features = ["codegen", "utils", "visit"] } [dev-dependencies] -swc_ecma_transforms_testing = "0.81.0" +swc_ecma_transforms_testing = "0.82.0" testing = "0.19.1" diff --git a/packages/next-swc/crates/modularize_imports/Cargo.toml b/packages/next-swc/crates/modularize_imports/Cargo.toml index 4e3b82ddb3..2514b94c7e 100644 --- a/packages/next-swc/crates/modularize_imports/Cargo.toml +++ b/packages/next-swc/crates/modularize_imports/Cargo.toml @@ -15,8 +15,8 @@ once_cell = "1.8.0" regex = "1.5" serde = "1" swc_cached = "0.1.1" -swc_ecmascript = { version = "0.148.0", features = ["visit"] } +swc_ecmascript = { version = "0.150.0", features = ["visit"] } [dev-dependencies] -swc_ecma_transforms_testing = "0.81.0" +swc_ecma_transforms_testing = "0.82.0" testing = "0.19.1" diff --git a/packages/next-swc/crates/napi/Cargo.toml b/packages/next-swc/crates/napi/Cargo.toml index d8b99933fa..36113153c3 100644 --- a/packages/next-swc/crates/napi/Cargo.toml +++ b/packages/next-swc/crates/napi/Cargo.toml @@ -17,12 +17,12 @@ next-swc = {version = "0.0.0", path = "../core"} once_cell = "1.8.0" serde = "1" serde_json = "1" -swc = "0.170.0" +swc = "0.172.1" swc_atoms = "0.2.11" -swc_bundler = { version = "0.138.0", features = ["concurrent"] } -swc_common = { version = "0.17.24", features = ["concurrent", "sourcemap"] } +swc_bundler = { version = "0.140.0", features = ["concurrent"] } +swc_common = { version = "0.17.25", features = ["concurrent", "sourcemap"] } swc_ecma_loader = { version = "0.29.1", features = ["node", "lru"] } -swc_ecmascript = { version = "0.148.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } +swc_ecmascript = { version = "0.150.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } swc_node_base = "0.5.2" [build-dependencies] diff --git a/packages/next-swc/crates/styled_components/Cargo.toml b/packages/next-swc/crates/styled_components/Cargo.toml index bd7bc3c334..77e7464c5c 100644 --- a/packages/next-swc/crates/styled_components/Cargo.toml +++ b/packages/next-swc/crates/styled_components/Cargo.toml @@ -15,12 +15,12 @@ once_cell = "1.10.0" regex = {version = "1.5.4", features = ["std", "perf"], default-features = false} serde = {version = "1.0.130", features = ["derive"]} swc_atoms = "0.2.11" -swc_common = { version = "0.17.24", features = ["concurrent"] } -swc_ecmascript = { version = "0.148.0", features = ["utils", "visit"] } +swc_common = { version = "0.17.25", features = ["concurrent"] } +swc_ecmascript = { version = "0.150.0", features = ["utils", "visit"] } tracing = "0.1.32" [dev-dependencies] serde_json = "1" -swc_ecma_transforms_testing = "0.81.0" -swc_ecmascript = { version = "0.148.0", features = ["parser", "transforms"] } +swc_ecma_transforms_testing = "0.82.0" +swc_ecmascript = { version = "0.150.0", features = ["parser", "transforms"] } testing = "0.19.1" diff --git a/packages/next-swc/crates/styled_components/src/utils/analyzer.rs b/packages/next-swc/crates/styled_components/src/utils/analyzer.rs index 7b1e4bd652..13ec0b3967 100644 --- a/packages/next-swc/crates/styled_components/src/utils/analyzer.rs +++ b/packages/next-swc/crates/styled_components/src/utils/analyzer.rs @@ -3,7 +3,7 @@ use crate::Config; use std::{cell::RefCell, rc::Rc}; use swc_ecmascript::{ ast::*, - utils::{ident::IdentLike, ExprExt}, + utils::ident::IdentLike, visit::{as_folder, noop_visit_mut_type, noop_visit_type, Fold, Visit, VisitMut, VisitWith}, }; @@ -69,20 +69,20 @@ impl Visit for Analyzer<'_> { .. })) = v.init.as_deref() { - if callee.is_ident_ref_to("require".into()) - && args.len() == 1 - && args[0].spread.is_none() - { - if let Expr::Lit(Lit::Str(v)) = &*args[0].expr { - let is_styled = if self.config.top_level_import_paths.is_empty() { - &*v.value == "styled-components" - || v.value.starts_with("styled-components/") - } else { - self.config.top_level_import_paths.contains(&v.value) - }; + if let Expr::Ident(callee) = &**callee { + if &*callee.sym == "require" && args.len() == 1 && args[0].spread.is_none() { + if let Expr::Lit(Lit::Str(v)) = &*args[0].expr { + let is_styled = if self.config.top_level_import_paths.is_empty() { + &*v.value == "styled-components" + || v.value.starts_with("styled-components/") + } else { + self.config.top_level_import_paths.contains(&v.value) + }; - if is_styled { - self.state.styled_required = Some(name.id.to_id()); + if is_styled { + self.state.styled_required = Some(name.id.to_id()); + self.state.unresolved_ctxt = Some(callee.span.ctxt); + } } } } diff --git a/packages/next-swc/crates/styled_components/src/utils/mod.rs b/packages/next-swc/crates/styled_components/src/utils/mod.rs index 5326c144cf..99de8fe8ba 100644 --- a/packages/next-swc/crates/styled_components/src/utils/mod.rs +++ b/packages/next-swc/crates/styled_components/src/utils/mod.rs @@ -3,7 +3,7 @@ use once_cell::sync::Lazy; use regex::{Captures, Regex}; use std::{borrow::Cow, cell::RefCell}; use swc_atoms::js_word; -use swc_common::collections::AHashMap; +use swc_common::{collections::AHashMap, SyntaxContext}; use swc_ecmascript::{ ast::*, utils::{ident::IdentLike, Id}, @@ -59,6 +59,8 @@ pub(crate) fn get_prop_name2(p: &Prop) -> PropName { pub struct State { pub(crate) styled_required: Option, + unresolved_ctxt: Option, + imported_local_name: Option, /// Namespace imports imported_local_ns: Option, @@ -227,11 +229,7 @@ impl State { let cache_key = cache_identifier.map(|i| i.to_id()).unwrap_or_default(); - let ctxt = self - .styled_required - .as_ref() - .map(|v| v.1) - .unwrap_or_default(); + let ctxt = self.unresolved_ctxt.unwrap_or_default(); let local_name = if self.styled_required.is_some() { Some(if name == "default" { diff --git a/packages/next-swc/crates/styled_components/src/visitors/display_name_and_id.rs b/packages/next-swc/crates/styled_components/src/visitors/display_name_and_id.rs index b5050259a7..7621bddc54 100644 --- a/packages/next-swc/crates/styled_components/src/visitors/display_name_and_id.rs +++ b/packages/next-swc/crates/styled_components/src/visitors/display_name_and_id.rs @@ -12,7 +12,7 @@ use swc_ecmascript::{ utils::{quote_ident, ExprFactory}, visit::{as_folder, noop_visit_mut_type, Fold, VisitMut, VisitMutWith}, }; -use tracing::{span, trace, Level}; +use tracing::{debug, span, trace, Level}; pub fn display_name_and_id( file: Arc, @@ -325,6 +325,7 @@ impl VisitMut for DisplayNameAndId { if !is_styled { return; } + debug!("Found styled component"); let _tracing = if cfg!(debug_assertions) { Some(span!(Level::ERROR, "display_name_and_id").entered()) diff --git a/packages/next-swc/crates/styled_components/tests/fixture.rs b/packages/next-swc/crates/styled_components/tests/fixture.rs index 97f98f173a..b3a048a4ca 100644 --- a/packages/next-swc/crates/styled_components/tests/fixture.rs +++ b/packages/next-swc/crates/styled_components/tests/fixture.rs @@ -2,7 +2,7 @@ use std::{fs::read_to_string, path::PathBuf}; use styled_components::{styled_components, Config}; -use swc_common::chain; +use swc_common::{chain, Mark}; use swc_ecma_transforms_testing::test_fixture; use swc_ecmascript::{ parser::{EsConfig, Syntax}, @@ -25,7 +25,10 @@ fn fixture(input: PathBuf) { // let fm = t.cm.load_file(&input).unwrap(); - chain!(resolver(), styled_components(fm, config.clone())) + chain!( + resolver(Mark::new(), Mark::new(), false), + styled_components(fm, config.clone()) + ) }, &input, &dir.join("output.js"), diff --git a/packages/next-swc/crates/styled_jsx/Cargo.toml b/packages/next-swc/crates/styled_jsx/Cargo.toml index 9974bf5ae1..b40d973311 100644 --- a/packages/next-swc/crates/styled_jsx/Cargo.toml +++ b/packages/next-swc/crates/styled_jsx/Cargo.toml @@ -11,12 +11,12 @@ version = "0.1.1" [dependencies] easy-error = "1.0.0" -swc_common = { version = "0.17.24", features = ["concurrent", "sourcemap"] } +swc_common = { version = "0.17.25", features = ["concurrent", "sourcemap"] } swc_css = "0.104.1" swc_css_prefixer = "0.100.4" -swc_ecmascript = { version = "0.148.0", features = ["parser", "minifier", "utils", "visit"] } +swc_ecmascript = { version = "0.150.0", features = ["parser", "minifier", "utils", "visit"] } tracing = "0.1.32" [dev-dependencies] -swc_ecma_transforms_testing = "0.81.0" +swc_ecma_transforms_testing = "0.82.0" testing = "0.19.1" diff --git a/packages/next-swc/crates/styled_jsx/tests/fixture.rs b/packages/next-swc/crates/styled_jsx/tests/fixture.rs index 23a805b2c4..476f22ebf0 100644 --- a/packages/next-swc/crates/styled_jsx/tests/fixture.rs +++ b/packages/next-swc/crates/styled_jsx/tests/fixture.rs @@ -23,7 +23,7 @@ fn styled_jsx_fixture(input: PathBuf) { syntax(), &|t| { chain!( - resolver(), + resolver(Mark::new(), Mark::new(), false), styled_jsx( t.cm.clone(), FileName::Real(PathBuf::from("/some-project/src/some-file.js")) @@ -47,7 +47,7 @@ fn styled_jsx_fixture(input: PathBuf) { } chain!( - resolver(), + resolver(Mark::new(), Mark::new(), false), styled_jsx( t.cm.clone(), FileName::Real(PathBuf::from("/some-project/src/some-file.js")) diff --git a/packages/next-swc/crates/wasm/Cargo.toml b/packages/next-swc/crates/wasm/Cargo.toml index 453e6e6656..357c7c7752 100644 --- a/packages/next-swc/crates/wasm/Cargo.toml +++ b/packages/next-swc/crates/wasm/Cargo.toml @@ -16,9 +16,9 @@ parking_lot_core = "=0.8.0" path-clean = "0.1" serde = {version = "1", features = ["derive"]} serde_json = "1" -swc = "0.170.0" -swc_common = { version = "0.17.24", features = ["concurrent", "sourcemap"] } -swc_ecmascript = { version = "0.148.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } +swc = "0.172.1" +swc_common = { version = "0.17.25", features = ["concurrent", "sourcemap"] } +swc_ecmascript = { version = "0.150.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } tracing = { version = "0.1.32", features = ["release_max_level_off"] } wasm-bindgen = {version = "0.2", features = ["serde-serialize"]} wasm-bindgen-futures = "0.4.8"