From 01ba24d99069fd0a8f02a66913d0f3c83311ffa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Tue, 5 Apr 2022 23:39:26 +0900 Subject: [PATCH 01/25] Move --- .../crates/styled_components/Cargo.toml | 24 + .../crates/styled_components/src/css.rs | 1 + .../crates/styled_components/src/lib.rs | 70 ++ .../styled_components/src/utils/analyzer.rs | 135 ++++ .../crates/styled_components/src/utils/mod.rs | 329 +++++++++ .../src/visitors/assign_style_required.rs | 1 + .../src/visitors/display_name_and_id.rs | 487 ++++++++++++++ .../styled_components/src/visitors/minify.rs | 1 + .../styled_components/src/visitors/mod.rs | 4 + .../src/visitors/transpile_css_prop/mod.rs | 2 + .../top_level_binding_collector.rs | 94 +++ .../visitors/transpile_css_prop/transpile.rs | 634 ++++++++++++++++++ .../crates/styled_components/tests/fixture.rs | 33 + .../.allow-chains-of-member-calls/.babelrc | 12 + .../.allow-chains-of-member-calls/code.js | 4 + .../.allow-chains-of-member-calls/output.js | 11 + .../.babelrc | 10 + .../code.js | 7 + .../output.js | 2 + .../.annotate-css-with-pure-comments/.babelrc | 10 + .../.annotate-css-with-pure-comments/code.js | 10 + .../output.js | 6 + .../.babelrc | 10 + .../code.js | 11 + .../output.js | 2 + .../.babelrc | 10 + .../code.js | 14 + .../output.js | 44 ++ .../.babelrc | 10 + .../code.js | 3 + .../output.js | 2 + .../.css-declared-after-component/.babelrc | 7 + .../.css-declared-after-component/code.js | 10 + .../.css-declared-after-component/output.js | 12 + .../fixtures/.minify-css-in-helpers/.babelrc | 12 + .../fixtures/.minify-css-in-helpers/code.js | 17 + .../fixtures/.minify-css-in-helpers/output.js | 4 + .../.babelrc | 15 + .../code.js | 24 + .../output.js | 23 + .../.babelrc | 12 + .../code.js | 36 + .../output.js | 7 + .../.babelrc | 10 + .../code.js | 40 ++ .../output.js | 29 + .../.babelrc | 8 + .../code.js | 11 + .../output.js | 42 ++ .../.babelrc | 14 + .../code.js | 27 + .../output.js | 32 + .../.babelrc | 16 + .../code.js | 11 + .../output.js | 13 + .../.babelrc | 11 + .../code.js | 2 + .../output.js | 5 + .../tests/fixtures/add-display-names/code.js | 15 + .../fixtures/add-display-names/config.json | 5 + .../fixtures/add-display-names/output.js | 34 + .../add-identifier-and-display-name/code.js | 30 + .../config.json | 5 + .../add-identifier-and-display-name/output.js | 71 ++ .../code.js | 10 + .../config.json | 7 + .../output.js | 29 + .../code.js | 10 + .../config.json | 12 + .../output.js | 23 + .../tests/fixtures/add-identifier/code.js | 10 + .../tests/fixtures/add-identifier/config.json | 6 + .../tests/fixtures/add-identifier/output.js | 23 + .../code.js | 7 + .../config.json | 1 + .../output.js | 7 + .../code.js | 13 + .../config.json | 1 + .../output.js | 19 + .../ignore-external-styled-import/code.js | 9 + .../ignore-external-styled-import/config.json | 1 + .../ignore-external-styled-import/output.js | 13 + .../code.js | 3 + .../config.json | 5 + .../output.js | 2 + .../track-the-imported-variable/code.js | 8 + .../track-the-imported-variable/config.json | 5 + .../track-the-imported-variable/output.js | 27 + .../transpile-css-prop-add-import/code.js | 21 + .../transpile-css-prop-add-import/config.json | 7 + .../transpile-css-prop-add-import/output.js | 28 + .../transpile-css-prop-add-require/code.js | 10 + .../config.json | 7 + .../transpile-css-prop-add-require/output.js | 8 + .../transpile-css-prop-all-options-on/code.js | 271 ++++++++ .../config.json | 7 + .../output.js | 280 ++++++++ .../tests/fixtures/transpile-css-prop/code.js | 216 ++++++ .../fixtures/transpile-css-prop/config.json | 7 + .../fixtures/transpile-css-prop/output.js | 210 ++++++ .../transpile-require-default/code.js | 13 + .../transpile-require-default/config.json | 1 + .../transpile-require-default/output.js | 19 + .../tests/fixtures/use-file-name/code.js | 6 + .../tests/fixtures/use-file-name/config.json | 4 + .../tests/fixtures/use-file-name/output.js | 17 + .../tests/fixtures/use-namespace/code.js | 23 + .../tests/fixtures/use-namespace/config.json | 3 + .../tests/fixtures/use-namespace/output.js | 29 + 109 files changed, 4041 insertions(+) create mode 100644 packages/next-swc/crates/styled_components/Cargo.toml create mode 100644 packages/next-swc/crates/styled_components/src/css.rs create mode 100644 packages/next-swc/crates/styled_components/src/lib.rs create mode 100644 packages/next-swc/crates/styled_components/src/utils/analyzer.rs create mode 100644 packages/next-swc/crates/styled_components/src/utils/mod.rs create mode 100644 packages/next-swc/crates/styled_components/src/visitors/assign_style_required.rs create mode 100644 packages/next-swc/crates/styled_components/src/visitors/display_name_and_id.rs create mode 100644 packages/next-swc/crates/styled_components/src/visitors/minify.rs create mode 100644 packages/next-swc/crates/styled_components/src/visitors/mod.rs create mode 100644 packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/mod.rs create mode 100644 packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/top_level_binding_collector.rs create mode 100644 packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/transpile.rs create mode 100644 packages/next-swc/crates/styled_components/tests/fixture.rs create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.allow-chains-of-member-calls/.babelrc create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.allow-chains-of-member-calls/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.allow-chains-of-member-calls/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.annotate-create-global-style-with-pure-comments/.babelrc create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.annotate-create-global-style-with-pure-comments/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.annotate-create-global-style-with-pure-comments/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.annotate-css-with-pure-comments/.babelrc create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.annotate-css-with-pure-comments/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.annotate-css-with-pure-comments/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.annotate-keyframes-with-pure-comments/.babelrc create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.annotate-keyframes-with-pure-comments/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.annotate-keyframes-with-pure-comments/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.annotate-styled-calls-with-pure-comments/.babelrc create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.annotate-styled-calls-with-pure-comments/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.annotate-styled-calls-with-pure-comments/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.annotate-withtheme-with-pure-comments/.babelrc create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.annotate-withtheme-with-pure-comments/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.annotate-withtheme-with-pure-comments/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.css-declared-after-component/.babelrc create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.css-declared-after-component/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.css-declared-after-component/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-in-helpers/.babelrc create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-in-helpers/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-in-helpers/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-with-transpilation/.babelrc create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-with-transpilation/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-with-transpilation/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-without-transpilation/.babelrc create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-without-transpilation/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-without-transpilation/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.minify-single-line-comments-with-interpolations/.babelrc create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.minify-single-line-comments-with-interpolations/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.minify-single-line-comments-with-interpolations/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.transformed-imports-with-jsx-member-expressions/.babelrc create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.transformed-imports-with-jsx-member-expressions/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.transformed-imports-with-jsx-member-expressions/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-with-config/.babelrc create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-with-config/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-with-config/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-without-config/.babelrc create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-without-config/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-without-config/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.work-with-hoisted-default-as-import/.babelrc create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.work-with-hoisted-default-as-import/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/.work-with-hoisted-default-as-import/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/add-display-names/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/add-display-names/config.json create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/add-display-names/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-and-display-name/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-and-display-name/config.json create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-and-display-name/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths-and-named-import/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths-and-named-import/config.json create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths-and-named-import/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths/config.json create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/add-identifier/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/add-identifier/config.json create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/add-identifier/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/does-not-desugar-styled-assignment/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/does-not-desugar-styled-assignment/config.json create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/does-not-desugar-styled-assignment/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/does-not-replace-native-with-no-tags/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/does-not-replace-native-with-no-tags/config.json create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/does-not-replace-native-with-no-tags/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/ignore-external-styled-import/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/ignore-external-styled-import/config.json create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/ignore-external-styled-import/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/not-use-private-api-if-not-required/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/not-use-private-api-if-not-required/config.json create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/not-use-private-api-if-not-required/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/track-the-imported-variable/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/track-the-imported-variable/config.json create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/track-the-imported-variable/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-import/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-import/config.json create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-import/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-require/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-require/config.json create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-require/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-all-options-on/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-all-options-on/config.json create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-all-options-on/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop/config.json create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/transpile-require-default/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/transpile-require-default/config.json create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/transpile-require-default/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/use-file-name/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/use-file-name/config.json create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/use-file-name/output.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/use-namespace/code.js create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/use-namespace/config.json create mode 100644 packages/next-swc/crates/styled_components/tests/fixtures/use-namespace/output.js diff --git a/packages/next-swc/crates/styled_components/Cargo.toml b/packages/next-swc/crates/styled_components/Cargo.toml new file mode 100644 index 000000000000000..de780de667c5be4 --- /dev/null +++ b/packages/next-swc/crates/styled_components/Cargo.toml @@ -0,0 +1,24 @@ +[package] +description = "AST Transforms for styled-components, without dependency on plugin apis" +edition = "2018" +license = "Apache-2.0" +name = "styled_components" +version = "0.25.0" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +Inflector = "0.11.4" +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.19", features = ["concurrent"] } +swc_ecmascript = { version = "0.140.0", features = ["utils", "visit"] } +tracing = "0.1" + +[dev-dependencies] +serde_json = "1" +swc_ecma_transforms_testing = "0.75.0" +swc_ecmascript = { version = "0.140.0", features = ["parser", "transforms"] } +testing = "0.19.1" diff --git a/packages/next-swc/crates/styled_components/src/css.rs b/packages/next-swc/crates/styled_components/src/css.rs new file mode 100644 index 000000000000000..8b137891791fe96 --- /dev/null +++ b/packages/next-swc/crates/styled_components/src/css.rs @@ -0,0 +1 @@ + diff --git a/packages/next-swc/crates/styled_components/src/lib.rs b/packages/next-swc/crates/styled_components/src/lib.rs new file mode 100644 index 000000000000000..66d863b6dc157ec --- /dev/null +++ b/packages/next-swc/crates/styled_components/src/lib.rs @@ -0,0 +1,70 @@ +pub use crate::{ + utils::{analyze, analyzer, State}, + visitors::{ + display_name_and_id::display_name_and_id, transpile_css_prop::transpile::transpile_css_prop, + }, +}; +use serde::Deserialize; +use std::{cell::RefCell, rc::Rc, sync::Arc}; +use swc_atoms::JsWord; +use swc_common::{chain, SourceFile}; +use swc_ecmascript::visit::{Fold, VisitMut}; + +mod css; +mod utils; +mod visitors; + +#[derive(Debug, Default, Clone, Deserialize)] +#[serde(rename_all = "camelCase", deny_unknown_fields)] +pub struct Config { + #[serde(default = "true_by_default")] + pub display_name: bool, + + #[serde(default = "true_by_default")] + pub ssr: bool, + + #[serde(default = "true_by_default")] + pub file_name: bool, + + #[serde(default)] + pub namespace: String, + + #[serde(default)] + pub top_level_import_paths: Vec, + + #[serde(default)] + pub transpile_template_literals: bool, + + #[serde(default)] + pub minify: bool, + + #[serde(default)] + pub css_prop: bool, +} + +fn true_by_default() -> bool { + true +} + +impl Config { + pub(crate) fn use_namespace(&self) -> String { + if self.namespace.is_empty() { + return String::new(); + } + format!("{}__", self.namespace) + } +} + +/// NOTE: **This is not complete**. +/// +/// Only [analyzer] and [display_name_and_id] is implemented. +pub fn styled_components(file: Arc, config: Config) -> impl Fold + VisitMut { + let state: Rc> = Default::default(); + let config = Rc::new(config); + + chain!( + analyzer(config.clone(), state.clone()), + display_name_and_id(file.clone(), config.clone(), state.clone()), + transpile_css_prop() + ) +} diff --git a/packages/next-swc/crates/styled_components/src/utils/analyzer.rs b/packages/next-swc/crates/styled_components/src/utils/analyzer.rs new file mode 100644 index 000000000000000..2be14f427488746 --- /dev/null +++ b/packages/next-swc/crates/styled_components/src/utils/analyzer.rs @@ -0,0 +1,135 @@ +use super::State; +use crate::Config; +use std::{cell::RefCell, rc::Rc}; +use swc_ecmascript::{ + ast::*, + utils::{ident::IdentLike, ExprExt}, + visit::{as_folder, noop_visit_mut_type, noop_visit_type, Fold, Visit, VisitMut, VisitWith}, +}; + +pub fn analyzer(config: Rc, state: Rc>) -> impl VisitMut + Fold { + as_folder(AsAnalyzer { config, state }) +} + +struct AsAnalyzer { + config: Rc, + state: Rc>, +} + +impl VisitMut for AsAnalyzer { + noop_visit_mut_type!(); + + fn visit_mut_module(&mut self, p: &mut Module) { + let mut v = Analyzer { + config: &self.config, + state: &mut *self.state.borrow_mut(), + }; + + p.visit_with(&mut v); + } + + fn visit_mut_script(&mut self, p: &mut Script) { + let mut v = Analyzer { + config: &self.config, + state: &mut *self.state.borrow_mut(), + }; + + p.visit_with(&mut v); + } +} + +pub fn analyze(config: &Config, program: &Program) -> State { + let mut state = State::default(); + + let mut v = Analyzer { + config, + state: &mut state, + }; + + program.visit_with(&mut v); + + state +} + +struct Analyzer<'a> { + config: &'a Config, + state: &'a mut State, +} + +impl Visit for Analyzer<'_> { + noop_visit_type!(); + + fn visit_var_declarator(&mut self, v: &VarDeclarator) { + v.visit_children_with(self); + + if let Pat::Ident(name) = &v.name { + match v.init.as_deref() { + Some(Expr::Call(CallExpr { + callee: Callee::Expr(callee), + args, + .. + })) => { + if callee.is_ident_ref_to("require".into()) + && args.len() == 1 + && args[0].spread.is_none() + { + match &*args[0].expr { + Expr::Lit(Lit::Str(v)) => { + 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()); + } + } + _ => {} + } + } + } + + _ => {} + } + } + } + + fn visit_import_decl(&mut self, i: &ImportDecl) { + let is_custom = !self.config.top_level_import_paths.is_empty(); + + let is_styled = if self.config.top_level_import_paths.is_empty() { + &*i.src.value == "styled-components" || i.src.value.starts_with("styled-components/") + } else { + self.config.top_level_import_paths.contains(&i.src.value) + }; + + if is_styled { + for s in &i.specifiers { + match s { + ImportSpecifier::Named(s) => { + if is_custom + && s.imported + .as_ref() + .map(|v| match v { + ModuleExportName::Ident(v) => &*v.sym, + ModuleExportName::Str(v) => &*v.value, + }) + .unwrap_or(&&*s.local.sym) + == "styled" + { + self.state.imported_local_name = Some(s.local.to_id()); + } + } + ImportSpecifier::Default(s) => { + self.state.imported_local_name = Some(s.local.to_id()); + } + ImportSpecifier::Namespace(s) => { + self.state.imported_local_ns = Some(s.local.to_id()); + } + } + } + } + } +} diff --git a/packages/next-swc/crates/styled_components/src/utils/mod.rs b/packages/next-swc/crates/styled_components/src/utils/mod.rs new file mode 100644 index 000000000000000..a4d454570f7c6c7 --- /dev/null +++ b/packages/next-swc/crates/styled_components/src/utils/mod.rs @@ -0,0 +1,329 @@ +pub use self::analyzer::{analyze, analyzer}; +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_ecmascript::{ + ast::*, + utils::{ident::IdentLike, Id}, +}; + +mod analyzer; + +pub(crate) fn get_prop_key_as_expr(p: &Prop) -> Cow { + match p { + Prop::Shorthand(p) => Cow::Owned(Expr::Ident(p.clone())), + Prop::KeyValue(p) => prop_name_to_expr(&p.key), + Prop::Assign(p) => Cow::Owned(Expr::Ident(p.key.clone())), + Prop::Getter(p) => prop_name_to_expr(&p.key), + Prop::Setter(p) => prop_name_to_expr(&p.key), + Prop::Method(p) => prop_name_to_expr(&p.key), + } +} + +pub(crate) fn prop_name_to_expr(p: &PropName) -> Cow { + match p { + PropName::Ident(p) => Cow::Owned(Expr::Ident(p.clone())), + PropName::Str(p) => Cow::Owned(Expr::Lit(Lit::Str(p.clone()))), + PropName::Num(p) => Cow::Owned(Expr::Lit(Lit::Num(p.clone()))), + PropName::BigInt(p) => Cow::Owned(Expr::Lit(Lit::BigInt(p.clone()))), + PropName::Computed(e) => Cow::Borrowed(&e.expr), + } +} + +pub(crate) fn get_prop_name(p: &Prop) -> Option<&PropName> { + match p { + Prop::Shorthand(..) => None, + Prop::KeyValue(p) => Some(&p.key), + Prop::Assign(..) => None, + Prop::Getter(p) => Some(&p.key), + Prop::Setter(p) => Some(&p.key), + Prop::Method(p) => Some(&p.key), + } +} + +pub(crate) fn get_prop_name2(p: &Prop) -> PropName { + match p { + Prop::Shorthand(ident) => PropName::Ident(ident.clone()), + Prop::KeyValue(p) => p.key.clone(), + Prop::Assign(x) => PropName::Ident(x.key.clone()), + Prop::Getter(p) => p.key.clone(), + Prop::Setter(p) => p.key.clone(), + Prop::Method(p) => p.key.clone(), + } +} + +/// This is created once per file. +#[derive(Debug, Default)] +pub struct State { + pub(crate) styled_required: Option, + + imported_local_name: Option, + /// Namespace imports + imported_local_ns: Option, + import_name_cache: RefCell>, +} + +impl State { + pub(crate) fn is_styled(&self, tag: &Expr) -> bool { + match tag { + Expr::Call(CallExpr { + callee: Callee::Expr(callee), + .. + }) => match &**callee { + Expr::Member(MemberExpr { + obj, + prop: MemberProp::Ident(prop), + .. + }) => { + if prop.sym != js_word!("default") { + return self.is_styled(&obj); + } + } + _ => {} + }, + + _ => {} + } + + match tag { + Expr::Member(MemberExpr { + obj, + prop: MemberProp::Ident(prop), + .. + }) => match &**obj { + Expr::Ident(obj) => { + if Some(obj.to_id()) == self.import_local_name("default", Some(obj)) + && !self.is_helper(&Expr::Ident(prop.clone())) + { + return true; + } + } + _ => {} + }, + + Expr::Call(CallExpr { + callee: Callee::Expr(callee), + .. + }) => match &**callee { + Expr::Ident(callee) => { + if Some(callee.to_id()) == self.import_local_name("default", Some(&callee)) { + return true; + } + } + _ => {} + }, + + _ => {} + } + + // styled-components might be imported using a require() + if let Some(style_required) = self.styled_required.clone() { + match tag { + Expr::Member(MemberExpr { + obj, + prop: MemberProp::Ident(..), + .. + }) => match &**obj { + Expr::Member(MemberExpr { + obj: obj_of_obj, + prop: MemberProp::Ident(prop), + .. + }) => match &**obj_of_obj { + Expr::Ident(obj_of_obj) => { + if prop.sym == js_word!("default") + && obj_of_obj.to_id() == style_required + { + return true; + } + } + _ => {} + }, + _ => {} + }, + + Expr::Call(CallExpr { + callee: Callee::Expr(callee), + .. + }) => match &**callee { + Expr::Member(MemberExpr { + obj: tag_callee_object, + prop: MemberProp::Ident(tag_callee_property), + .. + }) => match &**tag_callee_object { + Expr::Ident(tag_callee_object) => { + if tag_callee_property.sym == js_word!("default") + && tag_callee_object.to_id() == style_required + { + return true; + } + } + + _ => {} + }, + _ => {} + }, + + _ => {} + } + } + + if let Some(import_local_name) = self.import_local_name("default", None) { + match tag { + Expr::Member(MemberExpr { + obj, + prop: MemberProp::Ident(..), + .. + }) => match &**obj { + Expr::Member(MemberExpr { + obj: obj_of_obj, + prop: MemberProp::Ident(prop), + .. + }) => match &**obj_of_obj { + Expr::Ident(obj_of_obj) => { + if prop.sym == js_word!("default") + && obj_of_obj.to_id() == import_local_name + { + return true; + } + } + _ => {} + }, + _ => {} + }, + + Expr::Call(CallExpr { + callee: Callee::Expr(callee), + .. + }) => match &**callee { + Expr::Member(MemberExpr { + obj: tag_callee_object, + prop: MemberProp::Ident(tag_callee_property), + .. + }) => match &**tag_callee_object { + Expr::Ident(tag_callee_object) => { + if tag_callee_property.sym == js_word!("default") + && tag_callee_object.to_id() == import_local_name + { + return true; + } + } + + _ => {} + }, + _ => {} + }, + + _ => {} + } + } + + false + } + + fn import_local_name(&self, name: &str, cache_identifier: Option<&Ident>) -> Option { + if name == "default" { + if let Some(cached) = self.imported_local_name.clone() { + return Some(cached); + } + if let Some(cached) = self.imported_local_ns.clone() { + return Some(cached); + } + } + + if let Some(..) = self.imported_local_ns { + return Some((name.into(), Default::default())); + } + + 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 local_name = if self.styled_required.is_some() { + Some(if name == "default" { + "styled".into() + } else { + name.clone().into() + }) + } else { + None + }; + + if let Some(cached) = self.import_name_cache.borrow().get(&cache_key) { + return Some(cached.clone()); + } + + let name = local_name.map(|word| (word, ctxt)); + + if let Some(name) = name.clone() { + self.import_name_cache.borrow_mut().insert(cache_key, name); + } + + name + } + + fn is_helper(&self, e: &Expr) -> bool { + self.is_create_global_style_helper(e) + || self.is_css_helper(e) + || self.is_inject_global_helper(e) + || self.is_use_theme(e) + || self.is_keyframes_helper(e) + || self.is_with_theme_helper(e) + } + + fn is_css_helper(&self, e: &Expr) -> bool { + match e { + Expr::Ident(e) => Some(e.to_id()) == self.import_local_name("css", None), + _ => false, + } + } + + fn is_create_global_style_helper(&self, e: &Expr) -> bool { + match e { + Expr::Ident(e) => Some(e.to_id()) == self.import_local_name("createGlobalStyle", None), + _ => false, + } + } + + fn is_inject_global_helper(&self, e: &Expr) -> bool { + match e { + Expr::Ident(e) => Some(e.to_id()) == self.import_local_name("injectGlobal", None), + _ => false, + } + } + + fn is_keyframes_helper(&self, e: &Expr) -> bool { + match e { + Expr::Ident(e) => Some(e.to_id()) == self.import_local_name("keyframes", None), + _ => false, + } + } + + fn is_with_theme_helper(&self, e: &Expr) -> bool { + match e { + Expr::Ident(e) => Some(e.to_id()) == self.import_local_name("withTheme", None), + _ => false, + } + } + + fn is_use_theme(&self, e: &Expr) -> bool { + match e { + Expr::Ident(e) => Some(e.to_id()) == self.import_local_name("useTheme", None), + _ => false, + } + } +} + +pub fn prefix_leading_digit(s: &str) -> Cow { + static REGEX: Lazy = Lazy::new(|| Regex::new(r"^(\d)").unwrap()); + + REGEX.replace(&s, |s: &Captures| { + // + format!("sc-{}", s.get(0).unwrap().as_str()) + }) +} diff --git a/packages/next-swc/crates/styled_components/src/visitors/assign_style_required.rs b/packages/next-swc/crates/styled_components/src/visitors/assign_style_required.rs new file mode 100644 index 000000000000000..8b137891791fe96 --- /dev/null +++ b/packages/next-swc/crates/styled_components/src/visitors/assign_style_required.rs @@ -0,0 +1 @@ + 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 new file mode 100644 index 000000000000000..4b38c9e50bd562a --- /dev/null +++ b/packages/next-swc/crates/styled_components/src/visitors/display_name_and_id.rs @@ -0,0 +1,487 @@ +use crate::{ + utils::{get_prop_name, prefix_leading_digit, State}, + Config, +}; +use once_cell::sync::Lazy; +use regex::Regex; +use std::{cell::RefCell, convert::TryInto, path::Path, rc::Rc, sync::Arc}; +use swc_atoms::{js_word, JsWord}; +use swc_common::{util::take::Take, FileName, SourceFile, DUMMY_SP}; +use swc_ecmascript::{ + ast::*, + utils::{quote_ident, ExprFactory}, + visit::{as_folder, noop_visit_mut_type, Fold, VisitMut, VisitMutWith}, +}; +use tracing::{span, trace, Level}; + +pub fn display_name_and_id( + file: Arc, + config: Rc, + state: Rc>, +) -> impl Fold + VisitMut { + as_folder(DisplayNameAndId { + file, + config, + state, + cur_display_name: Default::default(), + component_id: 0, + }) +} + +static DISPLAY_NAME_REGEX: Lazy = + Lazy::new(|| Regex::new(r"^[a-zA-Z][a-zA-Z0-9]$").unwrap()); + +#[derive(Debug)] +struct DisplayNameAndId { + file: Arc, + config: Rc, + state: Rc>, + + cur_display_name: Option, + + component_id: usize, +} + +impl DisplayNameAndId { + fn get_block_name(&self, p: &Path) -> String { + let file_stem = p.file_stem(); + if let Some(file_stem) = file_stem { + if file_stem == "index" { + } else { + return file_stem.to_string_lossy().to_string(); + } + } else { + } + + self.get_block_name(&p.parent().expect("/index/index/index?")) + } + + fn get_display_name(&mut self, _: &Expr) -> JsWord { + let component_name = self.cur_display_name.clone().unwrap_or(js_word!("")); + + match &self.file.name { + FileName::Real(f) if self.config.file_name => { + let block_name = self.get_block_name(f); + + if block_name == &*component_name { + return component_name; + } + + if component_name.is_empty() { + return prefix_leading_digit(&block_name).into(); + } + + format!("{}__{}", prefix_leading_digit(&block_name), component_name).into() + } + + _ => component_name, + } + } + + fn next_id(&mut self) -> usize { + let ret = self.component_id; + self.component_id += 1; + ret + } + + fn get_component_id(&mut self) -> String { + // Prefix the identifier with a character because CSS classes cannot start with + // a number + + let next_id = self.next_id(); + + let hash = { + let base = self.file.src_hash; + let base = base.to_be_bytes(); + let a = u32::from_be_bytes(base[0..4].try_into().unwrap()); + let b = u32::from_be_bytes(base[4..8].try_into().unwrap()); + let c = u32::from_be_bytes(base[8..12].try_into().unwrap()); + let d = u32::from_be_bytes(base[12..16].try_into().unwrap()); + + a ^ b ^ c ^ d + }; + + format!("{}sc-{:x}-{}", self.config.use_namespace(), hash, next_id) + } + + fn add_config( + &mut self, + e: &mut Expr, + display_name: Option, + component_id: Option, + ) { + if display_name.is_none() && component_id.is_none() { + return; + } + + let mut with_config_props = vec![]; + + if let Some(display_name) = display_name { + with_config_props.push(PropOrSpread::Prop(Box::new(Prop::KeyValue(KeyValueProp { + key: PropName::Ident(quote_ident!("displayName")), + value: Box::new(Expr::Lit(Lit::Str(Str { + span: DUMMY_SP, + value: display_name, + raw: None, + }))), + })))) + } + + if let Some(component_id) = component_id { + with_config_props.push(PropOrSpread::Prop(Box::new(Prop::KeyValue(KeyValueProp { + key: PropName::Ident(quote_ident!("componentId")), + value: Box::new(Expr::Lit(Lit::Str(Str { + span: DUMMY_SP, + value: component_id, + raw: None, + }))), + })))) + } + + get_existing_config(e, |e| { + if let Expr::Call(CallExpr { args, .. }) = e { + if let Some(Expr::Object(existing_config)) = args.get_mut(0).map(|v| &mut *v.expr) { + if !already_has(&existing_config) { + existing_config.props.extend(with_config_props.take()); + return; + } + } + } + }); + + if with_config_props.is_empty() { + return; + } + + if let Expr::Call(CallExpr { + callee: Callee::Expr(callee), + args, + .. + }) = e + { + if let Expr::Member(MemberExpr { + prop: MemberProp::Ident(prop), + .. + }) = &**callee + { + if &*prop.sym == "withConfig" { + if let Some(first_arg) = args.get_mut(0) { + if first_arg.spread.is_none() && first_arg.expr.is_object() { + if let Expr::Object(obj) = &mut *first_arg.expr { + if !already_has(&*obj) { + obj.props.extend(with_config_props); + return; + } + } + } + } + } + } + } + + if let Expr::TaggedTpl(e) = e { + e.tag = Box::new(Expr::Call(CallExpr { + span: DUMMY_SP, + callee: e + .tag + .take() + .make_member(quote_ident!("withConfig")) + .as_callee(), + args: vec![ObjectLit { + span: DUMMY_SP, + props: with_config_props, + } + .as_arg()], + type_args: Default::default(), + })); + return; + } + + if let Expr::Call(CallExpr { + callee: Callee::Expr(callee), + .. + }) = e + { + *callee = Box::new(Expr::Call(CallExpr { + span: DUMMY_SP, + callee: callee + .take() + .make_member(quote_ident!("withConfig")) + .as_callee(), + args: vec![ObjectLit { + span: DUMMY_SP, + props: with_config_props, + } + .as_arg()], + type_args: Default::default(), + })); + return; + } + + unreachable!("expr should be tagged tpl or call expr"); + } +} + +impl VisitMut for DisplayNameAndId { + noop_visit_mut_type!(); + + fn visit_mut_assign_expr(&mut self, e: &mut AssignExpr) { + let old = self.cur_display_name.clone(); + + if old.is_none() { + self.cur_display_name = e.left.as_ident().map(|v| v.sym.clone()); + } + + e.visit_mut_children_with(self); + + self.cur_display_name = old; + } + + fn visit_mut_class_prop(&mut self, e: &mut ClassProp) { + let old = self.cur_display_name.take(); + + match &e.key { + PropName::Ident(i) => { + self.cur_display_name = Some(i.sym.clone()); + } + + _ => {} + } + + e.visit_mut_children_with(self); + + self.cur_display_name = old; + } + + fn visit_mut_expr(&mut self, expr: &mut Expr) { + expr.visit_mut_children_with(self); + + let is_styled = match expr { + Expr::TaggedTpl(e) => self.state.borrow().is_styled(&e.tag), + + Expr::Call(CallExpr { + callee: Callee::Expr(callee), + args, + .. + }) => { + ( + // styled() + self.state.borrow().is_styled(&*callee) + && get_property_as_ident(&callee) + .map(|v| v == "withConfig") + .unwrap_or(false) + ) || ( + // styled(x)({}) + self.state.borrow().is_styled(&*callee) + && !get_callee(&callee) + .map(|callee| callee.is_member()) + .unwrap_or(false) + ) || ( + // styled(x).attrs()({}) + self.state.borrow().is_styled(callee) + && get_callee(&callee) + .map(|callee| { + callee.is_member() + && get_property_as_ident(&callee) + .map(|v| v == "withConfig") + .unwrap_or(false) + }) + .unwrap_or(false) + ) || ( + // styled(x).withConfig({}) + self.state.borrow().is_styled(&*callee) + && get_callee(&callee) + .map(|callee| { + callee.is_member() + && get_property_as_ident(&callee) + .map(|v| v == "withConfig") + .unwrap_or(false) + && args.len() > 0 + && args[0].spread.is_none() + && match &*args[0].expr { + Expr::Object(first_arg) => { + !first_arg.props.iter().any(|prop| match prop { + PropOrSpread::Prop(prop) => { + match get_prop_name(&prop) { + Some(PropName::Ident(prop_name)) => { + match &*prop_name.sym { + "componentId" | "displayName" => { + true + } + _ => false, + } + } + _ => false, + } + } + _ => false, + }) + } + _ => false, + } + }) + .unwrap_or(false) + ) + } + + _ => false, + }; + + if !is_styled { + return; + } + + let _tracing = if cfg!(debug_assertions) { + Some(span!(Level::ERROR, "display_name_and_id").entered()) + } else { + None + }; + + let display_name = if self.config.display_name { + Some(self.get_display_name(&expr)) + } else { + None + }; + + trace!("display_name: {:?}", display_name); + + let component_id = if self.config.ssr { + Some(self.get_component_id().into()) + } else { + None + }; + + trace!("component_id: {:?}", display_name); + + self.add_config( + expr, + display_name.map(|s| DISPLAY_NAME_REGEX.replace_all(&*s, "").into()), + component_id, + ) + } + + fn visit_mut_key_value_prop(&mut self, e: &mut KeyValueProp) { + let old = self.cur_display_name.take(); + + match &e.key { + PropName::Ident(name) => { + self.cur_display_name = Some(name.sym.clone()); + } + _ => {} + } + + e.visit_mut_children_with(self); + + self.cur_display_name = old; + } + + fn visit_mut_var_declarator(&mut self, v: &mut VarDeclarator) { + let old = self.cur_display_name.take(); + + match &v.name { + Pat::Ident(name) => { + self.cur_display_name = Some(name.id.sym.clone()); + } + _ => {} + } + + v.visit_mut_children_with(self); + + self.cur_display_name = old; + } +} + +fn get_callee(e: &Expr) -> Option<&Expr> { + match e { + Expr::Call(CallExpr { + callee: Callee::Expr(callee), + .. + }) => Some(&callee), + _ => None, + } +} + +fn get_property_as_ident(e: &Expr) -> Option<&JsWord> { + match e { + Expr::Member(MemberExpr { + prop: MemberProp::Ident(p), + .. + }) => return Some(&p.sym), + _ => {} + } + + None +} + +fn already_has(obj: &ObjectLit) -> bool { + obj.props + .iter() + .filter_map(|v| match v { + PropOrSpread::Prop(p) => Some(p), + _ => None, + }) + .filter_map(|v| get_prop_name(v)) + .any(|prop| match prop { + PropName::Ident(ident) => &*ident.sym == "componentId" || &*ident.sym == "displayName", + _ => false, + }) +} + +fn get_existing_config(e: &mut Expr, op: F) +where + F: FnOnce(&mut Expr), +{ + match e { + Expr::Call(CallExpr { + callee: Callee::Expr(callee), + .. + }) => match &mut **callee { + Expr::Call(CallExpr { + callee: Callee::Expr(callee_callee), + .. + }) => { + match &**callee_callee { + Expr::Member(MemberExpr { + prop: MemberProp::Ident(prop), + .. + }) => { + if &*prop.sym == "withConfig" { + return op(callee); + } + } + _ => {} + } + + match &mut **callee_callee { + Expr::Member(MemberExpr { + obj, + prop: MemberProp::Ident(..), + .. + }) => match &**obj { + Expr::Call(CallExpr { + callee: Callee::Expr(callee), + .. + }) => match &**callee { + Expr::Member(MemberExpr { + prop: MemberProp::Ident(prop), + .. + }) => { + if &*prop.sym == "withConfig" { + return op(obj); + } + } + + _ => {} + }, + _ => {} + }, + + _ => {} + } + } + + _ => {} + }, + _ => {} + } +} diff --git a/packages/next-swc/crates/styled_components/src/visitors/minify.rs b/packages/next-swc/crates/styled_components/src/visitors/minify.rs new file mode 100644 index 000000000000000..8b137891791fe96 --- /dev/null +++ b/packages/next-swc/crates/styled_components/src/visitors/minify.rs @@ -0,0 +1 @@ + diff --git a/packages/next-swc/crates/styled_components/src/visitors/mod.rs b/packages/next-swc/crates/styled_components/src/visitors/mod.rs new file mode 100644 index 000000000000000..bf55f0e4cab8e73 --- /dev/null +++ b/packages/next-swc/crates/styled_components/src/visitors/mod.rs @@ -0,0 +1,4 @@ +pub mod assign_style_required; +pub mod display_name_and_id; +pub mod minify; +pub mod transpile_css_prop; diff --git a/packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/mod.rs b/packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/mod.rs new file mode 100644 index 000000000000000..740abc0a7e03ac6 --- /dev/null +++ b/packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/mod.rs @@ -0,0 +1,2 @@ +mod top_level_binding_collector; +pub mod transpile; diff --git a/packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/top_level_binding_collector.rs b/packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/top_level_binding_collector.rs new file mode 100644 index 000000000000000..f99e7f0291b41e4 --- /dev/null +++ b/packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/top_level_binding_collector.rs @@ -0,0 +1,94 @@ +use swc_common::collections::AHashSet; +use swc_ecmascript::{ + ast::{ + ArrowExpr, ClassDecl, FnDecl, Function, ImportDefaultSpecifier, ImportNamedSpecifier, + ImportStarAsSpecifier, ObjectPatProp, Pat, VarDeclarator, + }, + utils::{ident::IdentLike, Id}, + visit::{noop_visit_type, Visit, VisitWith}, +}; + +// Modified from swc_ecma_utils/src/lib.rs:BindingCollector. +pub struct TopLevelBindingCollector { + bindings: AHashSet, + in_pat_decl: bool, +} + +impl TopLevelBindingCollector { + fn add(&mut self, i: &Id) { + self.bindings.insert(i.clone()); + } +} + +impl Visit for TopLevelBindingCollector { + noop_visit_type!(); + + fn visit_class_decl(&mut self, node: &ClassDecl) { + self.add(&node.ident.to_id()); + } + + fn visit_fn_decl(&mut self, node: &FnDecl) { + self.add(&node.ident.to_id()); + } + + fn visit_pat(&mut self, node: &Pat) { + if !self.in_pat_decl { + return; + } + match node { + Pat::Ident(i) => self.add(&i.id.to_id()), + Pat::Object(o) => { + for prop in o.props.iter() { + match prop { + ObjectPatProp::Assign(a) => self.add(&a.key.to_id()), + ObjectPatProp::KeyValue(k) => k.value.visit_with(self), + ObjectPatProp::Rest(_) => {} + } + } + } + Pat::Array(a) => { + for elem in a.elems.iter() { + elem.visit_with(self); + } + } + Pat::Assign(a) => { + a.left.visit_with(self); + } + _ => {} + } + } + + fn visit_arrow_expr(&mut self, _: &ArrowExpr) {} + fn visit_function(&mut self, _: &Function) {} + + fn visit_import_default_specifier(&mut self, node: &ImportDefaultSpecifier) { + self.add(&node.local.to_id()); + } + + fn visit_import_named_specifier(&mut self, node: &ImportNamedSpecifier) { + self.add(&node.local.to_id()); + } + + fn visit_import_star_as_specifier(&mut self, node: &ImportStarAsSpecifier) { + self.add(&node.local.to_id()); + } + + fn visit_var_declarator(&mut self, node: &VarDeclarator) { + let old = self.in_pat_decl; + self.in_pat_decl = true; + node.name.visit_with(self); + self.in_pat_decl = old; + } +} + +pub fn collect_top_level_decls(n: &N) -> AHashSet +where + N: VisitWith, +{ + let mut v = TopLevelBindingCollector { + bindings: Default::default(), + in_pat_decl: false, + }; + n.visit_with(&mut v); + v.bindings +} diff --git a/packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/transpile.rs b/packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/transpile.rs new file mode 100644 index 000000000000000..dfe3eff88527c59 --- /dev/null +++ b/packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/transpile.rs @@ -0,0 +1,634 @@ +//! Port of https://github.com/styled-components/babel-plugin-styled-components/blob/a20c3033508677695953e7a434de4746168eeb4e/src/visitors/transpileCssProp.js + +use std::{borrow::Cow, collections::HashMap}; + +use inflector::Inflector; +use once_cell::sync::Lazy; +use regex::Regex; +use swc_atoms::{js_word, JsWord}; +use swc_common::{ + collections::{AHashMap, AHashSet}, + util::take::Take, + Spanned, DUMMY_SP, +}; +use swc_ecmascript::{ + ast::*, + utils::{ident::IdentLike, prepend, private_ident, quote_ident, ExprExt, ExprFactory, Id}, + visit::{as_folder, noop_visit_mut_type, Fold, VisitMut, VisitMutWith}, +}; + +use crate::utils::{get_prop_key_as_expr, get_prop_name, get_prop_name2}; + +use super::top_level_binding_collector::collect_top_level_decls; + +static TAG_NAME_REGEX: Lazy = + Lazy::new(|| Regex::new("^[a-z][a-z\\d]*(\\-[a-z][a-z\\d]*)?$").unwrap()); + +pub fn transpile_css_prop() -> impl Fold + VisitMut { + as_folder(TranspileCssProp::default()) +} + +#[derive(Default)] +struct TranspileCssProp { + import_name: Option, + injected_nodes: Vec, + interleaved_injections: AHashMap>, + + identifier_idx: usize, + styled_idx: HashMap, + top_level_decls: Option>, +} + +impl TranspileCssProp { + fn next_styled_idx(&mut self, key: JsWord) -> usize { + let idx = self.styled_idx.entry(key).or_insert(0); + *idx += 1; + *idx + } + fn is_top_level_ident(&mut self, ident: &Ident) -> bool { + self.top_level_decls + .as_ref() + .map(|decls| decls.contains(&ident.to_id())) + .unwrap_or(false) + } +} + +impl VisitMut for TranspileCssProp { + noop_visit_mut_type!(); + + fn visit_mut_jsx_element(&mut self, elem: &mut JSXElement) { + elem.visit_mut_children_with(self); + + let mut extra_attrs = vec![]; + + for attr in elem.opening.attrs.iter_mut() { + match &mut *attr { + JSXAttrOrSpread::JSXAttr(attr) => { + if !matches!(&attr.name, JSXAttrName::Ident(i) if &*i.sym == "css") { + continue; + } + + let import_name = self + .import_name + .get_or_insert_with(|| private_ident!("_styled")) + .clone(); + + let name = get_name_ident(&elem.opening.name); + let id_sym = name.sym.to_class_case(); + + // Match the original plugin's behavior. + let id_sym = id_sym.trim_end_matches(char::is_numeric); + + let id_sym = JsWord::from(id_sym); + let styled_idx = self.next_styled_idx(id_sym.clone()); + let id = quote_ident!( + elem.opening.name.span(), + append_if_gt_one(&format!("_Styled{}", id_sym), styled_idx) + ); + + let (styled, inject_after) = if TAG_NAME_REGEX.is_match(&name.sym) { + ( + (Expr::Call(CallExpr { + span: DUMMY_SP, + callee: import_name.as_callee(), + args: vec![Lit::Str(Str { + span: DUMMY_SP, + value: name.sym.into(), + raw: None, + }) + .as_arg()], + type_args: Default::default(), + })), + None::, + ) + } else { + let name_expr = get_name_expr(&elem.opening.name); + + ( + Expr::Call(CallExpr { + span: DUMMY_SP, + callee: import_name.as_callee(), + args: vec![name_expr.as_arg()], + type_args: Default::default(), + }), + if self.is_top_level_ident(&name) { + Some(name) + } else { + None + }, + ) + }; + + let mut css = match &mut attr.value { + Some(css) => { + // + + match css { + JSXAttrValue::Lit(Lit::Str(v)) => Expr::Tpl(Tpl { + span: DUMMY_SP, + exprs: Default::default(), + quasis: vec![TplElement { + span: DUMMY_SP, + tail: true, + cooked: None, + raw: v.value.clone(), + }], + }), + JSXAttrValue::JSXExprContainer(JSXExprContainer { + expr: JSXExpr::Expr(v), + .. + }) => match &mut **v { + Expr::Tpl(..) => *v.take(), + Expr::TaggedTpl(v) if v.tag.is_ident_ref_to("css".into()) => { + Expr::Tpl(v.tpl.take()) + } + Expr::Object(..) => *v.take(), + _ => Expr::Tpl(Tpl { + span: DUMMY_SP, + exprs: vec![v.take()], + quasis: vec![ + TplElement { + span: DUMMY_SP, + tail: false, + cooked: None, + raw: "".into(), + }, + TplElement { + span: DUMMY_SP, + tail: true, + cooked: None, + raw: "".into(), + }, + ], + }), + }, + + _ => continue, + } + } + None => continue, + }; + + // Remove this attribute + attr.name = JSXAttrName::Ident(Take::dummy()); + + elem.opening.name = JSXElementName::Ident(id.clone()); + + if let Some(closing) = &mut elem.closing { + closing.name = JSXElementName::Ident(id.clone()); + } + + // object syntax + if let Expr::Object(css_obj) = &mut css { + // Original plugin says + // + // + // for objects as CSS props, we have to recurse through the object and + // replace any object key/value scope references with generated props + // similar to how the template literal transform above creates dynamic + // interpolations + let p = quote_ident!("p"); + + let mut reducer = PropertyReducer { + p: p.clone(), + replace_object_with_prop_function: false, + extra_attrs: Default::default(), + identifier_idx: &mut self.identifier_idx, + }; + + css_obj.props = css_obj + .props + .take() + .into_iter() + .fold(vec![], |acc, property| { + reducer.reduce_object_properties(acc, property) + }); + + extra_attrs.extend(reducer.extra_attrs); + + if reducer.replace_object_with_prop_function { + css = Expr::Arrow(ArrowExpr { + span: DUMMY_SP, + params: vec![Pat::Ident(p.clone().into())], + body: BlockStmtOrExpr::Expr(Box::new(css.take())), + is_async: false, + is_generator: false, + type_params: Default::default(), + return_type: Default::default(), + }); + } + } else { + // tagged template literal + let mut tpl = css.expect_tpl(); + + tpl.exprs = + tpl.exprs + .take() + .into_iter() + .fold(vec![], |mut acc, mut expr| { + if expr.is_fn_expr() || expr.is_arrow() { + acc.push(expr); + return acc; + } else if let Some(root) = trace_root_value(&mut *expr) { + let direct_access = match root { + Expr::Lit(_) => true, + Expr::Ident(id) if self.is_top_level_ident(id) => true, + _ => false, + }; + if direct_access { + acc.push(expr); + return acc; + } + } + + let identifier = + get_local_identifier(&mut self.identifier_idx, &expr); + let p = quote_ident!("p"); + extra_attrs.push(JSXAttrOrSpread::JSXAttr(JSXAttr { + span: DUMMY_SP, + name: JSXAttrName::Ident(identifier.clone()), + value: Some(JSXAttrValue::JSXExprContainer( + JSXExprContainer { + span: DUMMY_SP, + expr: JSXExpr::Expr(expr.take()), + }, + )), + })); + + acc.push(Box::new(Expr::Arrow(ArrowExpr { + span: DUMMY_SP, + params: vec![Pat::Ident(p.clone().into())], + body: BlockStmtOrExpr::Expr(Box::new( + p.make_member(identifier), + )), + is_async: false, + is_generator: false, + type_params: Default::default(), + return_type: Default::default(), + }))); + + acc + }); + + css = Expr::Tpl(tpl); + } + + let var = VarDeclarator { + span: DUMMY_SP, + name: Pat::Ident(id.clone().into()), + init: Some(match css { + Expr::Object(..) | Expr::Arrow(..) => Box::new(Expr::Call(CallExpr { + span: DUMMY_SP, + callee: styled.as_callee(), + args: vec![css.as_arg()], + type_args: Default::default(), + })), + _ => Box::new(Expr::TaggedTpl(TaggedTpl { + span: DUMMY_SP, + tag: Box::new(styled), + type_params: Default::default(), + tpl: css.expect_tpl(), + })), + }), + definite: false, + }; + let stmt = Stmt::Decl(Decl::Var(VarDecl { + span: DUMMY_SP, + kind: VarDeclKind::Var, + declare: false, + decls: vec![var], + })); + match inject_after { + Some(injector) => { + let id = injector.to_id(); + self.interleaved_injections + .entry(id) + .or_default() + .push(stmt); + } + None => { + self.injected_nodes.push(stmt); + } + } + } + JSXAttrOrSpread::SpreadElement(_) => {} + } + } + + elem.opening.attrs.retain(|attr| { + match attr { + JSXAttrOrSpread::JSXAttr(attr) => { + if matches!( + attr.name, + JSXAttrName::Ident(Ident { + sym: js_word!(""), + .. + }) + ) { + return false; + } + } + JSXAttrOrSpread::SpreadElement(_) => {} + } + true + }); + + elem.opening.attrs.extend(extra_attrs); + } + + fn visit_mut_module(&mut self, n: &mut Module) { + // TODO: Skip if there are no css prop usage + self.top_level_decls = Some(collect_top_level_decls(n)); + n.visit_mut_children_with(self); + self.top_level_decls = None; + + if let Some(import_name) = self.import_name.take() { + let specifier = ImportSpecifier::Default(ImportDefaultSpecifier { + span: DUMMY_SP, + local: import_name, + }); + prepend( + &mut n.body, + ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { + span: DUMMY_SP, + specifiers: vec![specifier], + src: Str { + span: DUMMY_SP, + value: "styled-components".into(), + raw: None, + }, + type_only: Default::default(), + asserts: Default::default(), + })), + ); + } + + let mut serialized_body: Vec = vec![]; + let body = std::mem::replace(&mut n.body, vec![]); + for item in body { + serialized_body.push(item.clone()); + match &item { + ModuleItem::Stmt(Stmt::Decl(Decl::Var(vd))) => { + for decl in &vd.decls { + if let Pat::Ident(ident) = &decl.name { + let id = ident.to_id(); + let stmts = self.interleaved_injections.remove(&id); + if let Some(stmts) = stmts { + serialized_body + .extend(stmts.into_iter().rev().map(ModuleItem::Stmt)); + } + } + } + } + _ => {} + } + } + n.body = serialized_body; + + let mut remaining = std::mem::replace(&mut self.interleaved_injections, Default::default()) + .into_iter() + .collect::>(); + remaining.sort_by_key(|x| x.0.clone()); + + remaining + .into_iter() + .for_each(|(_, stmts)| n.body.extend(stmts.into_iter().map(ModuleItem::Stmt))); + + n.body + .extend(self.injected_nodes.take().into_iter().map(ModuleItem::Stmt)); + } +} + +fn get_name_expr(name: &JSXElementName) -> Box { + fn get_name_expr_jsx_object(name: &JSXObject) -> Box { + match name { + JSXObject::Ident(n) => Box::new(Expr::Ident(n.clone())), + JSXObject::JSXMemberExpr(n) => Box::new(Expr::Member(MemberExpr { + span: DUMMY_SP, + obj: get_name_expr_jsx_object(&n.obj), + prop: MemberProp::Ident(n.prop.clone()), + })), + } + } + match name { + JSXElementName::Ident(n) => Box::new(Expr::Ident(n.clone())), + JSXElementName::JSXMemberExpr(n) => Box::new(Expr::Member(MemberExpr { + span: DUMMY_SP, + obj: get_name_expr_jsx_object(&n.obj), + prop: MemberProp::Ident(n.prop.clone()), + })), + JSXElementName::JSXNamespacedName(..) => { + unimplemented!("get_name_expr for JSXNamespacedName") + } + } +} + +struct PropertyReducer<'a> { + p: Ident, + replace_object_with_prop_function: bool, + extra_attrs: Vec, + + identifier_idx: &'a mut usize, +} + +impl PropertyReducer<'_> { + fn reduce_object_properties( + &mut self, + mut acc: Vec, + mut property: PropOrSpread, + ) -> Vec { + match property { + PropOrSpread::Spread(ref mut prop) => { + // handle spread variables and such + + if let Expr::Object(arg) = &mut *prop.expr { + arg.props = arg + .props + .take() + .into_iter() + .fold(vec![], |acc, p| self.reduce_object_properties(acc, p)); + } else { + self.replace_object_with_prop_function = true; + + let identifier = get_local_identifier(&mut self.identifier_idx, &prop.expr); + + self.extra_attrs.push(JSXAttrOrSpread::JSXAttr(JSXAttr { + span: DUMMY_SP, + name: JSXAttrName::Ident(identifier.clone()), + value: Some(JSXAttrValue::JSXExprContainer(JSXExprContainer { + span: DUMMY_SP, + expr: JSXExpr::Expr(prop.expr.take()), + })), + })); + + prop.expr = Box::new(self.p.clone().make_member(identifier)); + } + + acc.push(property); + } + PropOrSpread::Prop(ref mut prop) => { + let key = get_prop_key_as_expr(&prop); + let key_pn = get_prop_name(prop); + + if key.is_member() + || key.is_call() + || (key.is_ident() + && key_pn.is_some() + && key_pn.unwrap().is_computed() + && !matches!(&**prop, Prop::Shorthand(..))) + { + self.replace_object_with_prop_function = true; + + let identifier = get_local_identifier(&mut self.identifier_idx, &key); + + self.extra_attrs.push(JSXAttrOrSpread::JSXAttr(JSXAttr { + span: DUMMY_SP, + name: identifier.clone().into(), + value: Some(JSXAttrValue::JSXExprContainer(JSXExprContainer { + span: DUMMY_SP, + // TODO: Perf + expr: JSXExpr::Expr(Box::new(key.clone().into_owned())), + })), + })); + + set_key_of_prop(prop, Box::new(self.p.clone().make_member(identifier))); + } + + let mut value = take_prop_value(prop); + + if let Expr::Object(value_obj) = &mut *value { + value_obj.props = value_obj + .props + .take() + .into_iter() + .fold(vec![], |acc, p| self.reduce_object_properties(acc, p)); + + set_value_of_prop(prop, value); + acc.push(property); + } else if !matches!(&*value, Expr::Lit(..)) { + // if a non-primitive value we have to interpolate it + + self.replace_object_with_prop_function = true; + + let identifier = get_local_identifier(&mut self.identifier_idx, &value); + + self.extra_attrs.push(JSXAttrOrSpread::JSXAttr(JSXAttr { + span: DUMMY_SP, + name: JSXAttrName::Ident(identifier.clone()), + value: Some(JSXAttrValue::JSXExprContainer(JSXExprContainer { + span: DUMMY_SP, + expr: JSXExpr::Expr(value.take()), + })), + })); + + let key = get_prop_name2(&prop); + + acc.push(PropOrSpread::Prop(Box::new(Prop::KeyValue(KeyValueProp { + key, + value: Box::new(self.p.clone().make_member(identifier)), + })))); + } else { + set_value_of_prop(prop, value); + acc.push(property); + } + } + } + + acc + } +} + +fn set_value_of_prop(prop: &mut Prop, value: Box) { + match prop { + Prop::Shorthand(p) => { + *prop = Prop::KeyValue(KeyValueProp { + key: PropName::Ident(p.clone()), + value, + }); + } + Prop::KeyValue(p) => { + p.value = value; + } + Prop::Assign(..) => unreachable!("assign property is not allowed for object literals"), + Prop::Getter(_p) => todo!(), + Prop::Setter(_p) => todo!(), + Prop::Method(_p) => todo!(), + } +} + +fn take_prop_value(prop: &mut Prop) -> Box { + match prop { + Prop::Shorthand(p) => Box::new(Expr::Ident(p.clone())), + Prop::KeyValue(p) => p.value.take(), + Prop::Assign(..) => unreachable!("assign property is not allowed for object literals"), + Prop::Getter(_p) => todo!(), + Prop::Setter(_p) => todo!(), + Prop::Method(_p) => todo!(), + } +} + +fn set_key_of_prop(prop: &mut Prop, key: Box) { + let value = take_prop_value(prop); + + *prop = Prop::KeyValue(KeyValueProp { + key: PropName::Computed(ComputedPropName { + span: DUMMY_SP, + expr: key, + }), + value, + }); +} + +fn get_local_identifier(idx: &mut usize, expr: &Expr) -> Ident { + *idx += 1; + + let identifier = quote_ident!(expr.span(), append_if_gt_one("$_css", *idx)); + + // TODO: Unique identifier + + identifier +} + +fn append_if_gt_one(s: &str, suffix: usize) -> Cow { + if suffix > 1 { + Cow::Owned(format!("{}{}", s, suffix)) + } else { + Cow::Borrowed(s) + } +} + +fn get_name_ident(el: &JSXElementName) -> Ident { + match el { + JSXElementName::Ident(v) => v.clone(), + JSXElementName::JSXMemberExpr(e) => Ident { + sym: format!("{}_{}", get_name_of_jsx_obj(&e.obj), e.prop.sym).into(), + span: e.prop.span, + optional: false, + }, + _ => { + unimplemented!("get_name_ident for namespaced jsx element") + } + } +} + +fn get_name_of_jsx_obj(el: &JSXObject) -> JsWord { + match el { + JSXObject::Ident(v) => v.sym.clone(), + JSXObject::JSXMemberExpr(e) => { + format!("{}{}", get_name_of_jsx_obj(&e.obj), e.prop.sym).into() + } + } +} + +fn trace_root_value(e: &mut Expr) -> Option<&mut Expr> { + match e { + Expr::Member(e) => trace_root_value(&mut e.obj), + Expr::Call(e) => match &mut e.callee { + Callee::Expr(e) => trace_root_value(&mut **e), + _ => None, + }, + Expr::Ident(_) => Some(e), + Expr::Lit(_) => Some(e), + _ => None, + } +} diff --git a/packages/next-swc/crates/styled_components/tests/fixture.rs b/packages/next-swc/crates/styled_components/tests/fixture.rs new file mode 100644 index 000000000000000..97f98f173a7c7c4 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixture.rs @@ -0,0 +1,33 @@ +#![deny(unused)] + +use std::{fs::read_to_string, path::PathBuf}; +use styled_components::{styled_components, Config}; +use swc_common::chain; +use swc_ecma_transforms_testing::test_fixture; +use swc_ecmascript::{ + parser::{EsConfig, Syntax}, + transforms::resolver, +}; + +#[testing::fixture("tests/fixtures/**/code.js")] +fn fixture(input: PathBuf) { + let dir = input.parent().unwrap(); + let config = read_to_string(dir.join("config.json")).expect("failed to read config.json"); + println!("---- Config -----\n{}", config); + let config: Config = serde_json::from_str(&config).unwrap(); + + test_fixture( + Syntax::Es(EsConfig { + jsx: true, + ..Default::default() + }), + &|t| { + // + let fm = t.cm.load_file(&input).unwrap(); + + chain!(resolver(), styled_components(fm, config.clone())) + }, + &input, + &dir.join("output.js"), + ) +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.allow-chains-of-member-calls/.babelrc b/packages/next-swc/crates/styled_components/tests/fixtures/.allow-chains-of-member-calls/.babelrc new file mode 100644 index 000000000000000..e9f07f78b2a0595 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.allow-chains-of-member-calls/.babelrc @@ -0,0 +1,12 @@ +{ + "plugins": [ + [ + "../../../src", + { + "ssr": false, + "fileName": false, + "transpileTemplateLiterals": false + } + ] + ] +} \ No newline at end of file diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.allow-chains-of-member-calls/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/.allow-chains-of-member-calls/code.js new file mode 100644 index 000000000000000..70afb5d1878285c --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.allow-chains-of-member-calls/code.js @@ -0,0 +1,4 @@ +import styled from 'styled-components' + +const WithAttrs = styled.div.attrs({ some: 'value' })`` +const WithAttrsWrapped = styled(Inner).attrs({ some: 'value' })`` diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.allow-chains-of-member-calls/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/.allow-chains-of-member-calls/output.js new file mode 100644 index 000000000000000..1800ec79fc3a755 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.allow-chains-of-member-calls/output.js @@ -0,0 +1,11 @@ +import styled from 'styled-components'; +const WithAttrs = styled.div.attrs({ + some: 'value' +}).withConfig({ + displayName: "WithAttrs" +})``; +const WithAttrsWrapped = styled(Inner).attrs({ + some: 'value' +}).withConfig({ + displayName: "WithAttrsWrapped" +})``; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-create-global-style-with-pure-comments/.babelrc b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-create-global-style-with-pure-comments/.babelrc new file mode 100644 index 000000000000000..8232aac0a0177be --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-create-global-style-with-pure-comments/.babelrc @@ -0,0 +1,10 @@ +{ + "plugins": [ + [ + "../../../src", + { + "pure": true + } + ] + ] +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-create-global-style-with-pure-comments/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-create-global-style-with-pure-comments/code.js new file mode 100644 index 000000000000000..d246beafe40bbbb --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-create-global-style-with-pure-comments/code.js @@ -0,0 +1,7 @@ +import { createGlobalStyle } from 'styled-components' + +const GlobalStyle = createGlobalStyle` + body { + color: red; + } +` diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-create-global-style-with-pure-comments/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-create-global-style-with-pure-comments/output.js new file mode 100644 index 000000000000000..a067223cd779aa3 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-create-global-style-with-pure-comments/output.js @@ -0,0 +1,2 @@ +import { createGlobalStyle } from 'styled-components'; +const GlobalStyle = /*#__PURE__*/createGlobalStyle(["body{color:red;}"]); diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-css-with-pure-comments/.babelrc b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-css-with-pure-comments/.babelrc new file mode 100644 index 000000000000000..8232aac0a0177be --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-css-with-pure-comments/.babelrc @@ -0,0 +1,10 @@ +{ + "plugins": [ + [ + "../../../src", + { + "pure": true + } + ] + ] +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-css-with-pure-comments/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-css-with-pure-comments/code.js new file mode 100644 index 000000000000000..b4324bd0384a1c8 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-css-with-pure-comments/code.js @@ -0,0 +1,10 @@ +import styled, { css } from 'styled-components' + +const partial = css` + color: red; +` + +const Component = styled.div` + ${partial}; + background: blue; +` diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-css-with-pure-comments/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-css-with-pure-comments/output.js new file mode 100644 index 000000000000000..a2d039574a3c9af --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-css-with-pure-comments/output.js @@ -0,0 +1,6 @@ +import styled, { css } from 'styled-components'; +const partial = /*#__PURE__*/css(["color:red;"]); +const Component = /*#__PURE__*/styled.div.withConfig({ + displayName: "code__Component", + componentId: "sc-4wpzk3-0" +})(["", ";background:blue;"], partial); diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-keyframes-with-pure-comments/.babelrc b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-keyframes-with-pure-comments/.babelrc new file mode 100644 index 000000000000000..8232aac0a0177be --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-keyframes-with-pure-comments/.babelrc @@ -0,0 +1,10 @@ +{ + "plugins": [ + [ + "../../../src", + { + "pure": true + } + ] + ] +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-keyframes-with-pure-comments/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-keyframes-with-pure-comments/code.js new file mode 100644 index 000000000000000..d22b2782e1c1088 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-keyframes-with-pure-comments/code.js @@ -0,0 +1,11 @@ +import { keyframes } from 'styled-components' + +const Animation = keyframes` + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +` diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-keyframes-with-pure-comments/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-keyframes-with-pure-comments/output.js new file mode 100644 index 000000000000000..f34babf3d526b90 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-keyframes-with-pure-comments/output.js @@ -0,0 +1,2 @@ +import { keyframes } from 'styled-components'; +const Animation = /*#__PURE__*/keyframes(["0%{opacity:0;}100%{opacity:1;}"]); diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-styled-calls-with-pure-comments/.babelrc b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-styled-calls-with-pure-comments/.babelrc new file mode 100644 index 000000000000000..8232aac0a0177be --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-styled-calls-with-pure-comments/.babelrc @@ -0,0 +1,10 @@ +{ + "plugins": [ + [ + "../../../src", + { + "pure": true + } + ] + ] +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-styled-calls-with-pure-comments/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-styled-calls-with-pure-comments/code.js new file mode 100644 index 000000000000000..740cb19edf90a5a --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-styled-calls-with-pure-comments/code.js @@ -0,0 +1,14 @@ +import styled from 'styled-components' + +const Test = styled.div` + width: 100%; +` +const Test2 = styled('div')`` +const Test3 = true ? styled.div`` : styled.div`` +const styles = { One: styled.div`` } +let Component +Component = styled.div`` +const WrappedComponent = styled(Inner)`` +const StyledObjectForm = styled.div({ color: red }) +const StyledFunctionForm = styled.div(p => ({ color: p.color || 'red' })) +const normalFunc = add(5, 3) diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-styled-calls-with-pure-comments/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-styled-calls-with-pure-comments/output.js new file mode 100644 index 000000000000000..8b81f90aa15e822 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-styled-calls-with-pure-comments/output.js @@ -0,0 +1,44 @@ +import styled from 'styled-components'; +const Test = /*#__PURE__*/styled.div.withConfig({ + displayName: "code__Test", + componentId: "sc-u20i28-0" +})(["width:100%;"]); +const Test2 = /*#__PURE__*/styled('div').withConfig({ + displayName: "code__Test2", + componentId: "sc-u20i28-1" +})([""]); +const Test3 = true ? styled.div.withConfig({ + displayName: "code__Test3", + componentId: "sc-u20i28-2" +})([""]) : styled.div.withConfig({ + displayName: "code__Test3", + componentId: "sc-u20i28-3" +})([""]); +const styles = { + One: styled.div.withConfig({ + displayName: "code__One", + componentId: "sc-u20i28-4" + })([""]) +}; +let Component; +Component = styled.div.withConfig({ + displayName: "code__Component", + componentId: "sc-u20i28-5" +})([""]); +const WrappedComponent = /*#__PURE__*/styled(Inner).withConfig({ + displayName: "code__WrappedComponent", + componentId: "sc-u20i28-6" +})([""]); +const StyledObjectForm = /*#__PURE__*/styled.div.withConfig({ + displayName: "code__StyledObjectForm", + componentId: "sc-u20i28-7" +})({ + color: red +}); +const StyledFunctionForm = /*#__PURE__*/styled.div.withConfig({ + displayName: "code__StyledFunctionForm", + componentId: "sc-u20i28-8" +})(p => ({ + color: p.color || 'red' +})); +const normalFunc = add(5, 3); diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-withtheme-with-pure-comments/.babelrc b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-withtheme-with-pure-comments/.babelrc new file mode 100644 index 000000000000000..8232aac0a0177be --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-withtheme-with-pure-comments/.babelrc @@ -0,0 +1,10 @@ +{ + "plugins": [ + [ + "../../../src", + { + "pure": true + } + ] + ] +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-withtheme-with-pure-comments/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-withtheme-with-pure-comments/code.js new file mode 100644 index 000000000000000..e57fd76c131443d --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-withtheme-with-pure-comments/code.js @@ -0,0 +1,3 @@ +import { withTheme } from 'styled-components' + +const ThemedComponent = withTheme(() => null) \ No newline at end of file diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-withtheme-with-pure-comments/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-withtheme-with-pure-comments/output.js new file mode 100644 index 000000000000000..a2cd31f026404fe --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.annotate-withtheme-with-pure-comments/output.js @@ -0,0 +1,2 @@ +import { withTheme } from 'styled-components'; +const ThemedComponent = /*#__PURE__*/withTheme(() => null); diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.css-declared-after-component/.babelrc b/packages/next-swc/crates/styled_components/tests/fixtures/.css-declared-after-component/.babelrc new file mode 100644 index 000000000000000..7a2ae60447e578b --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.css-declared-after-component/.babelrc @@ -0,0 +1,7 @@ +{ + "plugins": [ + [ + "../../../src" + ] + ] + } diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.css-declared-after-component/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/.css-declared-after-component/code.js new file mode 100644 index 000000000000000..5be1a9e9f488b86 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.css-declared-after-component/code.js @@ -0,0 +1,10 @@ +import React from "react" +import { css } from "styled-components" + +export default function Example() { + return
oops
+} + +const someCss = css` + color: red; +` diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.css-declared-after-component/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/.css-declared-after-component/output.js new file mode 100644 index 000000000000000..d5d16344cf56cda --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.css-declared-after-component/output.js @@ -0,0 +1,12 @@ +import _styled from "styled-components"; +import React from "react"; +import { css } from "styled-components"; +export default function Example() { + return <_StyledDiv>oops; +} +const someCss = css(["color:red;"]); + +var _StyledDiv = _styled("div").withConfig({ + displayName: "code___StyledDiv", + componentId: "sc-7mydya-0" +})(["", ""], someCss); diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-in-helpers/.babelrc b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-in-helpers/.babelrc new file mode 100644 index 000000000000000..e170b2be531bdfb --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-in-helpers/.babelrc @@ -0,0 +1,12 @@ +{ + "plugins": [ + [ + "../../../src", + { + "ssr": false, + "displayName": false, + "transpileTemplateLiterals": false + } + ] + ] +} \ No newline at end of file diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-in-helpers/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-in-helpers/code.js new file mode 100644 index 000000000000000..4e650896dc313a4 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-in-helpers/code.js @@ -0,0 +1,17 @@ +import { createGlobalStyle, css, keyframes } from 'styled-components' + +const key = keyframes` + to { + transform: rotate(360deg); + } +` + +const color = css` + color: ${theColor}; +` + +const GlobalStyles = createGlobalStyle` + html { + color: red; + } +` diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-in-helpers/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-in-helpers/output.js new file mode 100644 index 000000000000000..82dbc1005788107 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-in-helpers/output.js @@ -0,0 +1,4 @@ +import { createGlobalStyle, css, keyframes } from 'styled-components'; +const key = keyframes`to{transform:rotate(360deg);}`; +const color = css`color:${theColor};`; +const GlobalStyles = createGlobalStyle`html{color:red;}`; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-with-transpilation/.babelrc b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-with-transpilation/.babelrc new file mode 100644 index 000000000000000..65e9aafd4341d45 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-with-transpilation/.babelrc @@ -0,0 +1,15 @@ +{ + "presets": [ + "@babel/preset-env" + ], + "plugins": [ + [ + "../../../src", + { + "ssr": false, + "displayName": false, + "transpileTemplateLiterals": false + } + ] + ] +} \ No newline at end of file diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-with-transpilation/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-with-transpilation/code.js new file mode 100644 index 000000000000000..92c613e4733338f --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-with-transpilation/code.js @@ -0,0 +1,24 @@ +import styled from 'styled-components'; + +const Simple = styled.div` + width: 100%; +`; + +const Interpolation = styled.div` + content: " ${props => props.text} "; +`; + +const SpecialCharacters = styled.div` + content: " ${props => props.text} ";\n color: red; +`; + +const Comment = styled.div` + // comment + color: red; +` + +const Parens = styled.div` + &:hover { + color: blue; + } +`; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-with-transpilation/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-with-transpilation/output.js new file mode 100644 index 000000000000000..9e95d2f248967ea --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-with-transpilation/output.js @@ -0,0 +1,23 @@ +"use strict"; + +var _styledComponents = _interopRequireDefault(require("styled-components")); + +var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5; + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } + +var Simple = _styledComponents["default"].div(_templateObject || (_templateObject = _taggedTemplateLiteral(["width:100%;"]))); + +var Interpolation = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["content:\" ", " \";"])), function (props) { + return props.text; +}); + +var SpecialCharacters = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["content:\" ", " \";color:red;"])), function (props) { + return props.text; +}); + +var Comment = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["color:red;"]))); + +var Parens = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["&:hover{color:blue;}"]))); diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-without-transpilation/.babelrc b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-without-transpilation/.babelrc new file mode 100644 index 000000000000000..e170b2be531bdfb --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-without-transpilation/.babelrc @@ -0,0 +1,12 @@ +{ + "plugins": [ + [ + "../../../src", + { + "ssr": false, + "displayName": false, + "transpileTemplateLiterals": false + } + ] + ] +} \ No newline at end of file diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-without-transpilation/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-without-transpilation/code.js new file mode 100644 index 000000000000000..02aa35dc34a84c6 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-without-transpilation/code.js @@ -0,0 +1,36 @@ +import styled from 'styled-components'; + +const Simple = styled.div` + width: 100%; +`; + +const Interpolation = styled.div` + content: "https://test.com/${props => props.endpoint}"; +`; + +const SpecialCharacters = styled.div` + content: " ${props => props.text} ";\n color: red; +`; + +const Comment = styled.div` + width: 100%; + // comment + color: red; +`; + +const Parens = styled.div` + &:hover { + color: blue; + } + color: red; +`; + +const UrlComments = styled.div` + color: red; + /* // */ + background: red; + /* comment 1 */ + /* comment 2 */ + // comment 3 + border: 1px solid green; +`; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-without-transpilation/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-without-transpilation/output.js new file mode 100644 index 000000000000000..656e3c57f3b35cf --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-css-to-use-without-transpilation/output.js @@ -0,0 +1,7 @@ +import styled from 'styled-components'; +const Simple = styled.div`width:100%;`; +const Interpolation = styled.div`content:"https://test.com/${props => props.endpoint}";`; +const SpecialCharacters = styled.div`content:" ${props => props.text} ";color:red;`; +const Comment = styled.div`width:100%;color:red;`; +const Parens = styled.div`&:hover{color:blue;}color:red;`; +const UrlComments = styled.div`color:red;background:red;border:1px solid green;`; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.minify-single-line-comments-with-interpolations/.babelrc b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-single-line-comments-with-interpolations/.babelrc new file mode 100644 index 000000000000000..b64d0b6553ea1ca --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-single-line-comments-with-interpolations/.babelrc @@ -0,0 +1,10 @@ +{ + "plugins": [ + [ + "../../../src", + { + "minify": true + } + ] + ] +} \ No newline at end of file diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.minify-single-line-comments-with-interpolations/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-single-line-comments-with-interpolations/code.js new file mode 100644 index 000000000000000..c431ae03b1d6006 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-single-line-comments-with-interpolations/code.js @@ -0,0 +1,40 @@ +import styled from 'styled-components' + +const Test1 = styled.div` + width: 100%; + // color: ${'red'}; +` + +const Test2 = styled.div` + width: 100%; + // color: pale${'red'}; +` + +const Test3 = styled.div` + width: 100%; + // color + ${'red'}; +` + +const Test4 = styled.div` + width: 100%; + // color: ${'red'}-blue; +` + +const Test5 = styled.div` + width: 100%; + // color: ${'red'}${'blue'}; +` + +const Test6 = styled.div` + background: url("https://google.com"); + width: 100%; + ${'green'} // color: ${'red'}${'blue'}; +` + +const Test7 = styled.div` + background: url("https://google.com"); + width: ${p => p.props.width}; + ${'green'} // color: ${'red'}${'blue'}; + height: ${p => p.props.height}; +` diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.minify-single-line-comments-with-interpolations/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-single-line-comments-with-interpolations/output.js new file mode 100644 index 000000000000000..db4b692d8f7e9fb --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.minify-single-line-comments-with-interpolations/output.js @@ -0,0 +1,29 @@ +import styled from 'styled-components'; +const Test1 = styled.div.withConfig({ + displayName: "code__Test1", + componentId: "sc-kc0mjf-0" +})(["width:100%;"]); +const Test2 = styled.div.withConfig({ + displayName: "code__Test2", + componentId: "sc-kc0mjf-1" +})(["width:100%;"]); +const Test3 = styled.div.withConfig({ + displayName: "code__Test3", + componentId: "sc-kc0mjf-2" +})(["width:100%;", ";"], 'red'); +const Test4 = styled.div.withConfig({ + displayName: "code__Test4", + componentId: "sc-kc0mjf-3" +})(["width:100%;"]); +const Test5 = styled.div.withConfig({ + displayName: "code__Test5", + componentId: "sc-kc0mjf-4" +})(["width:100%;"]); +const Test6 = styled.div.withConfig({ + displayName: "code__Test6", + componentId: "sc-kc0mjf-5" +})(["background:url(\"https://google.com\");width:100%;", " "], 'green'); +const Test7 = styled.div.withConfig({ + displayName: "code__Test7", + componentId: "sc-kc0mjf-6" +})(["background:url(\"https://google.com\");width:", ";", " height:", ";"], p => p.props.width, 'green', p => p.props.height); diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.transformed-imports-with-jsx-member-expressions/.babelrc b/packages/next-swc/crates/styled_components/tests/fixtures/.transformed-imports-with-jsx-member-expressions/.babelrc new file mode 100644 index 000000000000000..75ba23a68ed5e9d --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.transformed-imports-with-jsx-member-expressions/.babelrc @@ -0,0 +1,8 @@ +{ + "plugins": [ + ["@babel/plugin-transform-modules-commonjs"], + [ + "../../../src" + ] + ] + } diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.transformed-imports-with-jsx-member-expressions/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/.transformed-imports-with-jsx-member-expressions/code.js new file mode 100644 index 000000000000000..c6e94d522e7a8cb --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.transformed-imports-with-jsx-member-expressions/code.js @@ -0,0 +1,11 @@ +import React from "react"; +import { css } from "styled-components"; +import Icons from "./icons"; + +const someCss = css` background: purple;`; + +const App1 = () => { return ; }; + +const App2 = () => { return ; }; + +const App3 = () => { return ; }; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.transformed-imports-with-jsx-member-expressions/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/.transformed-imports-with-jsx-member-expressions/output.js new file mode 100644 index 000000000000000..e741877df1efca0 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.transformed-imports-with-jsx-member-expressions/output.js @@ -0,0 +1,42 @@ +"use strict"; + +var _styledComponents = _interopRequireWildcard(require("styled-components")); + +var _react = _interopRequireDefault(require("react")); + +var _icons = _interopRequireDefault(require("./icons")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +const someCss = (0, _styledComponents.css)([" background:purple;"]); + +const App1 = () => { + return <_StyledIcons />; +}; + +const App2 = () => { + return <_StyledIconsFoo />; +}; + +const App3 = () => { + return <_StyledIconsFooBar />; +}; + +var _StyledIcons = (0, _styledComponents.default)(_icons.default).withConfig({ + displayName: "code___StyledIcons", + componentId: "sc-1wxehft-0" +})(["", ""], someCss); + +var _StyledIconsFoo = (0, _styledComponents.default)(_icons.default.Foo).withConfig({ + displayName: "code___StyledIconsFoo", + componentId: "sc-1wxehft-1" +})(["", ""], someCss); + +var _StyledIconsFooBar = (0, _styledComponents.default)(_icons.default.Foo.Bar).withConfig({ + displayName: "code___StyledIconsFooBar", + componentId: "sc-1wxehft-2" +})(["", ""], someCss); diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-with-config/.babelrc b/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-with-config/.babelrc new file mode 100644 index 000000000000000..4e78d26f1a33fe4 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-with-config/.babelrc @@ -0,0 +1,14 @@ +{ + "presets": ["@babel/preset-env"], + "plugins": [ + [ + "../../../src", + { + "ssr": false, + "displayName": true, + "transpileTemplateLiterals": true, + "minify": false + } + ] + ] +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-with-config/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-with-config/code.js new file mode 100644 index 000000000000000..c89451dee60e3a7 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-with-config/code.js @@ -0,0 +1,27 @@ +import styled, { css, createGlobalStyle } from 'styled-components' + +const Named = styled.div` + width: 100%; +` + +const NamedWithInterpolation = styled.div` + color: ${color => props.color}; +` + +const Wrapped = styled(Inner)` + color: red; +` + +const Foo = styled.div({ + color: 'green', +}) + +const style = css` + background: green; +` + +const GlobalStyle = createGlobalStyle` + html { + background: silver; + } +` diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-with-config/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-with-config/output.js new file mode 100644 index 000000000000000..2c5c07a688d864b --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-with-config/output.js @@ -0,0 +1,32 @@ +"use strict"; + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +var _styledComponents = _interopRequireWildcard(require("styled-components")); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +var Named = _styledComponents["default"].div.withConfig({ + displayName: "code__Named" +})(["\n width: 100%;\n"]); + +var NamedWithInterpolation = _styledComponents["default"].div.withConfig({ + displayName: "code__NamedWithInterpolation" +})(["\n color: ", ";\n"], function (color) { + return props.color; +}); + +var Wrapped = (0, _styledComponents["default"])(Inner).withConfig({ + displayName: "code__Wrapped" +})(["\n color: red;\n"]); + +var Foo = _styledComponents["default"].div.withConfig({ + displayName: "code__Foo" +})({ + color: 'green' +}); + +var style = (0, _styledComponents.css)(["\n background: green;\n"]); +var GlobalStyle = (0, _styledComponents.createGlobalStyle)(["\n html {\n background: silver;\n }\n"]); diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-without-config/.babelrc b/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-without-config/.babelrc new file mode 100644 index 000000000000000..b39aa73018fda64 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-without-config/.babelrc @@ -0,0 +1,16 @@ +{ + "presets": [ + "@babel/preset-env" + ], + "plugins": [ + [ + "../../../src", + { + "ssr": false, + "displayName": false, + "transpileTemplateLiterals": true, + "minify": false + } + ] + ] +} \ No newline at end of file diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-without-config/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-without-config/code.js new file mode 100644 index 000000000000000..1e9488288d0c403 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-without-config/code.js @@ -0,0 +1,11 @@ +import styled from 'styled-components'; + +const Named = styled.div` + width: 100%; +`; + +const NamedWithInterpolation = styled.div` + color: ${color => props.color}; +`; + +const Wrapped = styled(Inner)`color: red;`; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-without-config/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-without-config/output.js new file mode 100644 index 000000000000000..e14572e4908bf5c --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.transpile-template-literals-without-config/output.js @@ -0,0 +1,13 @@ +"use strict"; + +var _styledComponents = _interopRequireDefault(require("styled-components")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var Named = _styledComponents["default"].div(["\n width: 100%;\n"]); + +var NamedWithInterpolation = _styledComponents["default"].div(["\n color: ", ";\n"], function (color) { + return props.color; +}); + +var Wrapped = (0, _styledComponents["default"])(Inner)(["color: red;"]); diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.work-with-hoisted-default-as-import/.babelrc b/packages/next-swc/crates/styled_components/tests/fixtures/.work-with-hoisted-default-as-import/.babelrc new file mode 100644 index 000000000000000..158460ca158de25 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.work-with-hoisted-default-as-import/.babelrc @@ -0,0 +1,11 @@ +{ + "plugins": [ + [ + "../../../src", + { + "transpileTemplateLiterals": false, + "ssr": true + } + ] + ] +} \ No newline at end of file diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.work-with-hoisted-default-as-import/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/.work-with-hoisted-default-as-import/code.js new file mode 100644 index 000000000000000..f48662ec5119480 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.work-with-hoisted-default-as-import/code.js @@ -0,0 +1,2 @@ +const Test = s.div`width: 100%;`; +import { default as s, css } from 'styled-components'; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/.work-with-hoisted-default-as-import/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/.work-with-hoisted-default-as-import/output.js new file mode 100644 index 000000000000000..297e05c351782cc --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/.work-with-hoisted-default-as-import/output.js @@ -0,0 +1,5 @@ +const Test = s.div.withConfig({ + displayName: "code__Test", + componentId: "sc-1dds9bl-0" +})`width:100%;`; +import { default as s, css } from 'styled-components'; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/add-display-names/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/add-display-names/code.js new file mode 100644 index 000000000000000..f79c564d86ff33e --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/add-display-names/code.js @@ -0,0 +1,15 @@ +import styled from 'styled-components' + +const Test = styled.div` + width: 100%; +` +const Test2 = styled('div')`` +const Test3 = true ? styled.div`` : styled.div`` +const styles = { One: styled.div`` } +let Component +Component = styled.div`` +const WrappedComponent = styled(Inner)`` +class ClassComponent { + static Child = styled.div`` +} +var GoodName = BadName = styled.div``; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/add-display-names/config.json b/packages/next-swc/crates/styled_components/tests/fixtures/add-display-names/config.json new file mode 100644 index 000000000000000..82180b0e0f02cc1 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/add-display-names/config.json @@ -0,0 +1,5 @@ +{ + "ssr": false, + "fileName": false, + "transpileTemplateLiterals": false +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/add-display-names/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/add-display-names/output.js new file mode 100644 index 000000000000000..a07fd4eaabc9020 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/add-display-names/output.js @@ -0,0 +1,34 @@ +import styled from 'styled-components'; +const Test = styled.div.withConfig({ + displayName: "Test" +})` + width: 100%; +`; +const Test2 = styled('div').withConfig({ + displayName: "Test2" +})``; +const Test3 = true ? styled.div.withConfig({ + displayName: "Test3" +})`` : styled.div.withConfig({ + displayName: "Test3" +})``; +const styles = { + One: styled.div.withConfig({ + displayName: "One" + })`` +}; +let Component; +Component = styled.div.withConfig({ + displayName: "Component" +})``; +const WrappedComponent = styled(Inner).withConfig({ + displayName: "WrappedComponent" +})``; +class ClassComponent { + static Child = styled.div.withConfig({ + displayName: "Child" + })``; +} +var GoodName = BadName = styled.div.withConfig({ + displayName: "GoodName" +})``; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-and-display-name/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-and-display-name/code.js new file mode 100644 index 000000000000000..2d5143896cbcf69 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-and-display-name/code.js @@ -0,0 +1,30 @@ +import styled from 'styled-components' + +const Test = styled.div` + width: 100%; +` +const Test2 = true ? styled.div`` : styled.div`` +const styles = { One: styled.div`` } +let Component +Component = styled.div`` +const WrappedComponent = styled(Inner)`` +const WrappedComponent2 = styled.div({}) +const WrappedComponent3 = styled(Inner)({}) +const WrappedComponent4 = styled(Inner).attrs(() => ({ something: 'else' }))({}) +const WrappedComponent5 = styled.div.attrs(() => ({ something: 'else' }))({}) +const WrappedComponent6 = styled.div.attrs(() => ({ something: 'else' }))`` +const WrappedComponent7 = styled.div.withConfig({ + shouldForwardProp: () => {}, +})({}) + +const WrappedComponent8 = styled.div + .withConfig({ + shouldForwardProp: () => {}, + }) + .attrs(() => ({ something: 'else' }))({}) + +const WrappedComponent9 = styled.div + .attrs(() => ({ something: 'else' })) + .withConfig({ + shouldForwardProp: () => {}, + })({}) diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-and-display-name/config.json b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-and-display-name/config.json new file mode 100644 index 000000000000000..e9120a57d99c5eb --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-and-display-name/config.json @@ -0,0 +1,5 @@ +{ + "fileName": false, + "transpileTemplateLiterals": false, + "ssr": true +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-and-display-name/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-and-display-name/output.js new file mode 100644 index 000000000000000..c433af915c5b9d1 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-and-display-name/output.js @@ -0,0 +1,71 @@ +import styled from 'styled-components'; +const Test = styled.div.withConfig({ + displayName: "Test", + componentId: "sc-e0d5b7ad-0" +})` + width: 100%; +`; +const Test2 = true ? styled.div.withConfig({ + displayName: "Test2", + componentId: "sc-e0d5b7ad-1" +})`` : styled.div.withConfig({ + displayName: "Test2", + componentId: "sc-e0d5b7ad-2" +})``; +const styles = { + One: styled.div.withConfig({ + displayName: "One", + componentId: "sc-e0d5b7ad-3" + })`` +}; +let Component; +Component = styled.div.withConfig({ + displayName: "Component", + componentId: "sc-e0d5b7ad-4" +})``; +const WrappedComponent = styled(Inner).withConfig({ + displayName: "WrappedComponent", + componentId: "sc-e0d5b7ad-5" +})``; +const WrappedComponent2 = styled.div.withConfig({ + displayName: "WrappedComponent2", + componentId: "sc-e0d5b7ad-6" +})({}); +const WrappedComponent3 = styled(Inner).withConfig({ + displayName: "WrappedComponent3", + componentId: "sc-e0d5b7ad-7" +})({}); +const WrappedComponent4 = styled(Inner).attrs(()=>({ + something: 'else' + }) +)({}); +const WrappedComponent5 = styled.div.attrs(()=>({ + something: 'else' + }) +)({}); +const WrappedComponent6 = styled.div.attrs(()=>({ + something: 'else' + }) +).withConfig({ + displayName: "WrappedComponent6", + componentId: "sc-e0d5b7ad-8" +})``; +const WrappedComponent7 = styled.div.withConfig({ + shouldForwardProp: ()=>{}, + displayName: "WrappedComponent7", + componentId: "sc-e0d5b7ad-9" +})({}); +const WrappedComponent8 = styled.div.withConfig({ + shouldForwardProp: ()=>{} +}).attrs(()=>({ + something: 'else' + }) +)({}); +const WrappedComponent9 = styled.div.attrs(()=>({ + something: 'else' + }) +).withConfig({ + shouldForwardProp: ()=>{}, + displayName: "WrappedComponent9", + componentId: "sc-e0d5b7ad-10" +})({}); diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths-and-named-import/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths-and-named-import/code.js new file mode 100644 index 000000000000000..e26d3c7ce3384c9 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths-and-named-import/code.js @@ -0,0 +1,10 @@ +import { styled } from '@example/example' + +const Test = styled.div` + width: 100%; +` +const Test2 = true ? styled.div`` : styled.div`` +const styles = { One: styled.div`` } +let Component +Component = styled.div`` +const WrappedComponent = styled(Inner)`` diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths-and-named-import/config.json b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths-and-named-import/config.json new file mode 100644 index 000000000000000..ba50ffd21656cb6 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths-and-named-import/config.json @@ -0,0 +1,7 @@ +{ + "displayName": true, + "fileName": false, + "ssr": true, + "topLevelImportPaths": ["@example/example"], + "transpileTemplateLiterals": false +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths-and-named-import/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths-and-named-import/output.js new file mode 100644 index 000000000000000..3c46bbb613e1f13 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths-and-named-import/output.js @@ -0,0 +1,29 @@ +import { styled } from '@example/example'; +const Test = styled.div.withConfig({ + displayName: "Test", + componentId: "sc-bd3b1624-0" +})` + width: 100%; +`; +const Test2 = true ? styled.div.withConfig({ + displayName: "Test2", + componentId: "sc-bd3b1624-1" +})`` : styled.div.withConfig({ + displayName: "Test2", + componentId: "sc-bd3b1624-2" +})``; +const styles = { + One: styled.div.withConfig({ + displayName: "One", + componentId: "sc-bd3b1624-3" + })`` +}; +let Component; +Component = styled.div.withConfig({ + displayName: "Component", + componentId: "sc-bd3b1624-4" +})``; +const WrappedComponent = styled(Inner).withConfig({ + displayName: "WrappedComponent", + componentId: "sc-bd3b1624-5" +})``; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths/code.js new file mode 100644 index 000000000000000..b03b6c13307e0e9 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths/code.js @@ -0,0 +1,10 @@ +import styled from '@xstyled/styled-components' + +const Test = styled.div` + width: 100%; +` +const Test2 = true ? styled.div`` : styled.div`` +const styles = { One: styled.div`` } +let Component +Component = styled.div`` +const WrappedComponent = styled(Inner)`` diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths/config.json b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths/config.json new file mode 100644 index 000000000000000..370d536747b00e9 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths/config.json @@ -0,0 +1,12 @@ +{ + "displayName": false, + "fileName": false, + "ssr": true, + "topLevelImportPaths": [ + "@xstyled/styled-components", + "@xstyled/styled-components/no-tags", + "@xstyled/styled-components/native", + "@xstyled/styled-components/primitives" + ], + "transpileTemplateLiterals": false +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths/output.js new file mode 100644 index 000000000000000..55f99140dfb0456 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier-with-top-level-import-paths/output.js @@ -0,0 +1,23 @@ +import styled from '@xstyled/styled-components'; +const Test = styled.div.withConfig({ + componentId: "sc-2fd35b87-0" +})` + width: 100%; +`; +const Test2 = true ? styled.div.withConfig({ + componentId: "sc-2fd35b87-1" +})`` : styled.div.withConfig({ + componentId: "sc-2fd35b87-2" +})``; +const styles = { + One: styled.div.withConfig({ + componentId: "sc-2fd35b87-3" + })`` +}; +let Component; +Component = styled.div.withConfig({ + componentId: "sc-2fd35b87-4" +})``; +const WrappedComponent = styled(Inner).withConfig({ + componentId: "sc-2fd35b87-5" +})``; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier/code.js new file mode 100644 index 000000000000000..3261233fc59585b --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier/code.js @@ -0,0 +1,10 @@ +import styled from 'styled-components' + +const Test = styled.div` + width: 100%; +` +const Test2 = true ? styled.div`` : styled.div`` +const styles = { One: styled.div`` } +let Component +Component = styled.div`` +const WrappedComponent = styled(Inner)`` diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier/config.json b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier/config.json new file mode 100644 index 000000000000000..c525ec53c3415f7 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier/config.json @@ -0,0 +1,6 @@ +{ + "displayName": false, + "fileName": false, + "transpileTemplateLiterals": false, + "ssr": true +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier/output.js new file mode 100644 index 000000000000000..9374f5b3c965528 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/add-identifier/output.js @@ -0,0 +1,23 @@ +import styled from 'styled-components'; +const Test = styled.div.withConfig({ + componentId: "sc-bc9ba4b0-0" +})` + width: 100%; +`; +const Test2 = true ? styled.div.withConfig({ + componentId: "sc-bc9ba4b0-1" +})`` : styled.div.withConfig({ + componentId: "sc-bc9ba4b0-2" +})``; +const styles = { + One: styled.div.withConfig({ + componentId: "sc-bc9ba4b0-3" + })`` +}; +let Component; +Component = styled.div.withConfig({ + componentId: "sc-bc9ba4b0-4" +})``; +const WrappedComponent = styled(Inner).withConfig({ + componentId: "sc-bc9ba4b0-5" +})``; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/does-not-desugar-styled-assignment/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/does-not-desugar-styled-assignment/code.js new file mode 100644 index 000000000000000..108f2b49164e4ea --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/does-not-desugar-styled-assignment/code.js @@ -0,0 +1,7 @@ +const domElements = ['div'] + +const styled = () => {} + +domElements.forEach(domElement => { + styled[domElement] = styled(domElement) +}) diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/does-not-desugar-styled-assignment/config.json b/packages/next-swc/crates/styled_components/tests/fixtures/does-not-desugar-styled-assignment/config.json new file mode 100644 index 000000000000000..0967ef424bce679 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/does-not-desugar-styled-assignment/config.json @@ -0,0 +1 @@ +{} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/does-not-desugar-styled-assignment/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/does-not-desugar-styled-assignment/output.js new file mode 100644 index 000000000000000..f3c26dd0453bfa8 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/does-not-desugar-styled-assignment/output.js @@ -0,0 +1,7 @@ +const domElements = ['div']; + +const styled = () => {}; + +domElements.forEach(domElement => { + styled[domElement] = styled(domElement); +}); diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/does-not-replace-native-with-no-tags/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/does-not-replace-native-with-no-tags/code.js new file mode 100644 index 000000000000000..a277ab493126b9c --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/does-not-replace-native-with-no-tags/code.js @@ -0,0 +1,13 @@ +const styled_default = require('styled-components/native') + +const TestNormal = styled.div` + width: 100%; +` + +const Test = styled_default.default.div` + width: 100%; +` + +const TestCallExpression = styled_default.default(Test)` + height: 20px; +` diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/does-not-replace-native-with-no-tags/config.json b/packages/next-swc/crates/styled_components/tests/fixtures/does-not-replace-native-with-no-tags/config.json new file mode 100644 index 000000000000000..0967ef424bce679 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/does-not-replace-native-with-no-tags/config.json @@ -0,0 +1 @@ +{} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/does-not-replace-native-with-no-tags/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/does-not-replace-native-with-no-tags/output.js new file mode 100644 index 000000000000000..6e8728945fa38ed --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/does-not-replace-native-with-no-tags/output.js @@ -0,0 +1,19 @@ +const styled_default = require('styled-components/native'); +const TestNormal = styled.div.withConfig({ + displayName: "code__TestNormal", + componentId: "sc-1f1c6df5-0" +})` + width: 100%; +`; +const Test = styled_default.default.div.withConfig({ + displayName: "code__Test", + componentId: "sc-1f1c6df5-1" +})` + width: 100%; +`; +const TestCallExpression = styled_default.default(Test).withConfig({ + displayName: "code__TestCallExpression", + componentId: "sc-1f1c6df5-2" +})` + height: 20px; +`; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/ignore-external-styled-import/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/ignore-external-styled-import/code.js new file mode 100644 index 000000000000000..a7eeadab76d46c9 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/ignore-external-styled-import/code.js @@ -0,0 +1,9 @@ +import { styled } from '@material/ui' +import s from 'styled-components' + +const Paragraph = s.p` + color: green; +` + +const Foo = p => +const TestNormal = styled(Foo)({ color: red }) diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/ignore-external-styled-import/config.json b/packages/next-swc/crates/styled_components/tests/fixtures/ignore-external-styled-import/config.json new file mode 100644 index 000000000000000..0967ef424bce679 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/ignore-external-styled-import/config.json @@ -0,0 +1 @@ +{} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/ignore-external-styled-import/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/ignore-external-styled-import/output.js new file mode 100644 index 000000000000000..5ce96a0eae47c83 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/ignore-external-styled-import/output.js @@ -0,0 +1,13 @@ +import { styled } from '@material/ui'; +import s from 'styled-components'; +const Paragraph = s.p.withConfig({ + displayName: "code__Paragraph", + componentId: "sc-c285d12a-0" +})` + color: green; +`; +const Foo = (p)=> +; +const TestNormal = styled(Foo)({ + color: red +}); diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/not-use-private-api-if-not-required/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/not-use-private-api-if-not-required/code.js new file mode 100644 index 000000000000000..9fa94bb5973e87a --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/not-use-private-api-if-not-required/code.js @@ -0,0 +1,3 @@ +import styled from 'styled-components'; + +const Test = styled.div`width: 100%;`; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/not-use-private-api-if-not-required/config.json b/packages/next-swc/crates/styled_components/tests/fixtures/not-use-private-api-if-not-required/config.json new file mode 100644 index 000000000000000..b174f8d7b3ca213 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/not-use-private-api-if-not-required/config.json @@ -0,0 +1,5 @@ +{ + "ssr": false, + "displayName": false, + "transpileTemplateLiterals": false +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/not-use-private-api-if-not-required/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/not-use-private-api-if-not-required/output.js new file mode 100644 index 000000000000000..fe64593595381ca --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/not-use-private-api-if-not-required/output.js @@ -0,0 +1,2 @@ +import styled from 'styled-components'; +const Test = styled.div`width: 100%;`; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/track-the-imported-variable/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/track-the-imported-variable/code.js new file mode 100644 index 000000000000000..9fe7111a9d3b9e8 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/track-the-imported-variable/code.js @@ -0,0 +1,8 @@ +import s from "styled-components"; + +const Test = s.div`width: 100%;`; +const Test2 = true ? s.div`` : s.div``; +const styles = { One: s.div`` } +let Component; +Component = s.div``; +const WrappedComponent = s(Inner)``; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/track-the-imported-variable/config.json b/packages/next-swc/crates/styled_components/tests/fixtures/track-the-imported-variable/config.json new file mode 100644 index 000000000000000..e9120a57d99c5eb --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/track-the-imported-variable/config.json @@ -0,0 +1,5 @@ +{ + "fileName": false, + "transpileTemplateLiterals": false, + "ssr": true +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/track-the-imported-variable/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/track-the-imported-variable/output.js new file mode 100644 index 000000000000000..07ebdb8f42d49c6 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/track-the-imported-variable/output.js @@ -0,0 +1,27 @@ +import s from "styled-components"; +const Test = s.div.withConfig({ + displayName: "Test", + componentId: "sc-d5028521-0" +})`width: 100%;`; +const Test2 = true ? s.div.withConfig({ + displayName: "Test2", + componentId: "sc-d5028521-1" +})`` : s.div.withConfig({ + displayName: "Test2", + componentId: "sc-d5028521-2" +})``; +const styles = { + One: s.div.withConfig({ + displayName: "One", + componentId: "sc-d5028521-3" + })`` +}; +let Component; +Component = s.div.withConfig({ + displayName: "Component", + componentId: "sc-d5028521-4" +})``; +const WrappedComponent = s(Inner).withConfig({ + displayName: "WrappedComponent", + componentId: "sc-d5028521-5" +})``; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-import/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-import/code.js new file mode 100644 index 000000000000000..33cbca5a6ac832a --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-import/code.js @@ -0,0 +1,21 @@ +// @flow +import React from 'react' +import Card from '../../shared/components/Card' +import config from '../../../config' + +export default () => ( +
+ +

Login or Sign Up

+

+ + Sign up or login with Google + +

+
+
+) diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-import/config.json b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-import/config.json new file mode 100644 index 000000000000000..ca4eac71a785bb8 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-import/config.json @@ -0,0 +1,7 @@ +{ + "ssr": false, + "displayName": false, + "transpileTemplateLiterals": false, + "minify": false, + "cssProp": true +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-import/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-import/output.js new file mode 100644 index 000000000000000..306f934694e8de2 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-import/output.js @@ -0,0 +1,28 @@ +import _styled from "styled-components"; +// @flow +import React from 'react'; +import Card from '../../shared/components/Card'; +import config from '../../../config'; +export default (()=><_StyledDiv > + + + +

Login or Sign Up

+ +

+ + + + Sign up or login with Google + + + +

+ +
+ + +); +var _StyledDiv = _styled("div")` + width: 35em; + `; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-require/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-require/code.js new file mode 100644 index 000000000000000..2047fa75693ef2a --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-require/code.js @@ -0,0 +1,10 @@ +// @flow +import React from 'react' + +export default () => ( +
+) diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-require/config.json b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-require/config.json new file mode 100644 index 000000000000000..ca4eac71a785bb8 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-require/config.json @@ -0,0 +1,7 @@ +{ + "ssr": false, + "displayName": false, + "transpileTemplateLiterals": false, + "minify": false, + "cssProp": true +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-require/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-require/output.js new file mode 100644 index 000000000000000..8d35dd043cfcdc1 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-add-require/output.js @@ -0,0 +1,8 @@ +import _styled from "styled-components"; +// @flow +import React from 'react'; +export default (()=><_StyledDiv /> +); +var _StyledDiv = _styled("div")` + width: 35em; + `; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-all-options-on/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-all-options-on/code.js new file mode 100644 index 000000000000000..4351b8cf07ab2f0 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-all-options-on/code.js @@ -0,0 +1,271 @@ +import styled from 'styled-components' +import SomeComponent from '../SomeComponentPath' +const { SomeOtherComponent } = require('../SomeOtherComponentPath') + +/** + * control + */ + +const Thing = styled.div` + color: red; +` + +const Thing2 = styled(Thing)` + background: blue; +` + +/* + * Basic fixtures + */ + +const StaticString = p =>

A

+ +const StaticTemplate = p => ( +

+ A +

+) + +const ObjectProp = p =>

A

+ +const NoChildren = p =>

+ +const CssHelperProp = p => ( +

+ A +

+) + +/* + * Dynamic prop + */ + +const CustomComp = p => H + +const DynamicProp = p =>

H

+ +const LocalInterpolation = p => ( +

+ H +

+) + +const FuncInterpolation = p => ( +

props.theme.a}; + `} + > + H +

+) + +const radius = 10 +const GlobalInterpolation = p => ( +

+ H +

+) + +const LocalCssHelperProp = p => ( +

+ A +

+) + +const DynamicCssHelperProp = p => ( +

props.theme.color}; + `} + > + A +

+) + +const CustomCompWithDot = p => H + +const NestedCompWithDot = p => ( + H +) + +const CustomCompWithDotLowerCase = p => ( + H +) + +const CustomElement = p => H + +const globalVar = '"foo"' +const getAfterValue = () => '"bar"' + +const ObjectPropMixedInputs = p => { + const color = 'red' + + return ( +

+ A +

+ ) +} + +const SpreadObjectPropMixedInputs = p => { + const color = 'red' + + return ( +

+ A +

+ ) +} + +/* styled component defined after function it's used in */ + +const EarlyUsageComponent = p => + +const Thing3 = styled.div` + color: blue; +` + +const EarlyUsageComponent2 = p => + +function Thing4(props) { + return
+} + +/* insert before usage for non-local scope styled HOC targets */ + +const ImportedComponentUsage = p => +const RequiredComponentUsage = p => + +const ObjectInterpolation = p => { + const theme = useTheme() + + return ( +

+ H +

+ ) +} + +const ObjectInterpolationCustomComponent = p => { + const theme = useTheme() + + return ( + + H + + ) +} + +const ObjectInterpolationInKey = p => { + const theme = useTheme() + + return ( + + H + + ) +} + +const ObjectFnInterpolationInKey = p => { + const theme = useTheme() + + return ( + + H + + ) +} + +const ObjectFnSimpleInterpolationInKey = p => { + const foo = '@media screen and (max-width: 600px)' + + return ( + + H + + ) +} + +const ObjectPropWithSpread = () => { + const css = { color: 'red' } + const playing = true + + return ( +
+ ) +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-all-options-on/config.json b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-all-options-on/config.json new file mode 100644 index 000000000000000..ede0eaf297f32f1 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-all-options-on/config.json @@ -0,0 +1,7 @@ +{ + "ssr": true, + "displayName": true, + "transpileTemplateLiterals": true, + "minify": true, + "cssProp": true +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-all-options-on/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-all-options-on/output.js new file mode 100644 index 000000000000000..834ca36b3ec2109 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop-all-options-on/output.js @@ -0,0 +1,280 @@ +import _styled from "styled-components"; +import styled from 'styled-components'; +import SomeComponent from '../SomeComponentPath'; +const { SomeOtherComponent } = require('../SomeOtherComponentPath'); +/** + * control + */ const Thing = styled.div.withConfig({ + displayName: "code__Thing", + componentId: "sc-867225be-0" +})` + color: red; +`; +const Thing2 = styled(Thing).withConfig({ + displayName: "code__Thing2", + componentId: "sc-867225be-1" +})` + background: blue; +`; +/* + * Basic fixtures + */ const StaticString = (p)=><_StyledP >A +; +const StaticTemplate = (p)=><_StyledP2 > + + A + + +; +const ObjectProp = (p)=><_StyledP3 >A +; +const NoChildren = (p)=><_StyledP4 /> +; +const CssHelperProp = (p)=><_StyledP5 > + + A + + +; +/* + * Dynamic prop + */ const CustomComp = (p)=><_StyledParagraph >H +; +const DynamicProp = (p)=><_StyledP6 $_css={props.cssText}>H +; +const LocalInterpolation = (p)=><_StyledP7 $_css2={props.bg}> + + H + + +; +const FuncInterpolation = (p)=><_StyledP8 > + + H + + +; +const radius = 10; +const GlobalInterpolation = (p)=><_StyledP9 > + + H + + +; +const LocalCssHelperProp = (p)=><_StyledP10 $_css3={p.color}> + + A + + +; +const DynamicCssHelperProp = (p)=><_StyledP11 > + + A + + +; +const CustomCompWithDot = (p)=><_StyledButtonGhost >H +; +const NestedCompWithDot = (p)=><_StyledButtonGhostNew >H +; +const CustomCompWithDotLowerCase = (p)=><_StyledButtonGhost2 >H +; +const CustomElement = (p)=><_StyledButtonGhost3 >H +; +const globalVar = '"foo"'; +const getAfterValue = ()=>'"bar"' +; +const ObjectPropMixedInputs = (p)=>{ + const color = 'red'; + return <_StyledP12 $_css4={p.background} $_css5={color} $_css6={globalVar} $_css7={getAfterValue()}> + + A + + ; +}; +const SpreadObjectPropMixedInputs = (p)=>{ + const color = 'red'; + return <_StyledP13 $_css8={globalVar} $_css9={getAfterValue()} $_css10={globalVar} $_css11={getAfterValue()} $_css12={p.background} $_css13={globalVar} $_css14={getAfterValue()}> + + A + + ; +}; +/* styled component defined after function it's used in */ const EarlyUsageComponent = (p)=><_StyledThing /> +; +const Thing3 = styled.div.withConfig({ + displayName: "code__Thing3", + componentId: "sc-867225be-2" +})` + color: blue; +`; +var _StyledThing6 = _styled(Thing3)((p)=>({ + [p.$_css19]: { + color: 'red' + } + }) +); +var _StyledThing5 = _styled(Thing3)((p)=>({ + [p.$_css18]: { + color: 'red' + } + }) +); +var _StyledThing4 = _styled(Thing3)((p)=>({ + [p.$_css17]: { + color: 'red' + } + }) +); +var _StyledThing3 = _styled(Thing3)((p)=>({ + color: p.$_css16 + }) +); +var _StyledThing = _styled(Thing3)`color: red;`; +const EarlyUsageComponent2 = (p)=><_StyledThing2 /> +; +function Thing4(props) { + return
; +} +/* insert before usage for non-local scope styled HOC targets */ const ImportedComponentUsage = (p)=><_StyledSomeComponent /> +; +const RequiredComponentUsage = (p)=><_StyledSomeOtherComponent /> +; +const ObjectInterpolation = (p)=>{ + const theme = useTheme(); + return <_StyledP14 $_css15={theme.colors.red}> + + H + + ; +}; +const ObjectInterpolationCustomComponent = (p)=>{ + const theme = useTheme(); + return <_StyledThing3 $_css16={theme.colors.red}> + + H + + ; +}; +const ObjectInterpolationInKey = (p)=>{ + const theme = useTheme(); + return <_StyledThing4 $_css17={theme.breakpoints.md}> + + H + + ; +}; +const ObjectFnInterpolationInKey = (p)=>{ + const theme = useTheme(); + return <_StyledThing5 $_css18={theme.breakpoints.md()}> + + H + + ; +}; +const ObjectFnSimpleInterpolationInKey = (p)=>{ + const foo = '@media screen and (max-width: 600px)'; + return <_StyledThing6 $_css19={foo}> + + H + + ; +}; +const ObjectPropWithSpread = ()=>{ + const css = { + color: 'red' + }; + const playing = true; + return <_StyledDiv $_css20={css} $_css21={playing ? { + opacity: 0, + bottom: '-100px' + } : {}}/>; +}; +var _StyledSomeComponent = _styled(SomeComponent)`color: red;`; +var _StyledSomeOtherComponent = _styled(SomeOtherComponent)`color: red;`; +var _StyledThing2 = _styled(Thing4)`color: red;`; +var _StyledP = _styled("p")`flex: 1;`; +var _StyledP2 = _styled("p")` + flex: 1; + `; +var _StyledP3 = _styled("p")({ + color: 'blue' +}); +var _StyledP4 = _styled("p")`flex: 1;`; +var _StyledP5 = _styled("p")` + color: blue; + `; +var _StyledParagraph = _styled(Paragraph)`flex: 1`; +var _StyledP6 = _styled("p")`${(p)=>p.$_css +}`; +var _StyledP7 = _styled("p")` + background: ${(p)=>p.$_css2 +}; + `; +var _StyledP8 = _styled("p")` + color: ${(props)=>props.theme.a +}; + `; +var _StyledP9 = _styled("p")` + border-radius: ${radius}px; + `; +var _StyledP10 = _styled("p")` + color: ${(p)=>p.$_css3 +}; + `; +var _StyledP11 = _styled("p")` + color: ${(props)=>props.theme.color +}; + `; +var _StyledButtonGhost = _styled(Button.Ghost)`flex: 1`; +var _StyledButtonGhostNew = _styled(Button.Ghost.New)`flex: 1`; +var _StyledButtonGhost2 = _styled(button.ghost)`flex: 1`; +var _StyledButtonGhost3 = _styled("button-ghost")`flex: 1`; +var _StyledP12 = _styled("p")((p)=>({ + background: p.$_css4, + color: p.$_css5, + textAlign: 'left', + '::before': { + content: p.$_css6 + }, + '::after': { + content: p.$_css7 + } + }) +); +var _StyledP13 = _styled("p")((p)=>({ + ...{ + '::before': { + content: p.$_css8 + }, + '::after': { + content: p.$_css9 + }, + ...{ + '::before': { + content: p.$_css10 + }, + '::after': { + content: p.$_css11 + } + } + }, + background: p.$_css12, + textAlign: 'left', + '::before': { + content: p.$_css13 + }, + '::after': { + content: p.$_css14 + } + }) +); +var _StyledP14 = _styled("p")((p)=>({ + color: p.$_css15 + }) +); +var _StyledDiv = _styled("div")((p)=>({ + ...p.$_css20, + ...p.$_css21 + }) +); diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop/code.js new file mode 100644 index 000000000000000..501bab0522f7ffa --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop/code.js @@ -0,0 +1,216 @@ +/* + * Basic fixtures + */ + +const StaticString = p =>

A

+ +const StaticTemplate = p => ( +

+ A +

+) + +const ObjectProp = p =>

A

+ +const NoChildren = p =>

+ +const CssHelperProp = p => ( +

+ A +

+) + +/* + * Dynamic prop + */ + +const CustomComp = p => H + +const DynamicProp = p =>

H

+ +const LocalInterpolation = p => ( +

+ H +

+) + +const FuncInterpolation = p => ( +

props.theme.a}; + `} + > + H +

+) + +const radius = 10 +const GlobalInterpolation = p => ( +

+ H +

+) + +const LocalCssHelperProp = p => ( +

+ A +

+) + +const DynamicCssHelperProp = p => ( +

props.theme.color}; + `} + > + A +

+) + +const CustomCompWithDot = p => H + +const NestedCompWithDot = p => ( + H +) + +const CustomCompWithDotLowerCase = p => ( + H +) + +const CustomElement = p => H + +/* styled component defined after function it's used in */ + +const EarlyUsageComponent = p => + +const Thing3 = styled.div` + color: blue; +` + +const ObjectInterpolation = p => { + const theme = useTheme() + + return ( +

+ H +

+ ) +} + +const ObjectInterpolationCustomComponent = p => { + const theme = useTheme() + + return ( + + H + + ) +} + +const ObjectInterpolationInKey = p => { + const theme = useTheme() + + return ( + + H + + ) +} + +const ObjectFnInterpolationInKey = p => { + const theme = useTheme() + + return ( + + H + + ) +} + +const ObjectFnSimpleInterpolationInKey = p => { + const foo = '@media screen and (max-width: 600px)' + + return ( + + H + + ) +} + +const ObjectPropMixedInputs = p => { + const color = 'red' + + return ( +

+ A +

+ ) +} + +const ObjectPropWithSpread = () => { + const css = { color: 'red' } + const playing = true + + return ( +
+ ) +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop/config.json b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop/config.json new file mode 100644 index 000000000000000..ca4eac71a785bb8 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop/config.json @@ -0,0 +1,7 @@ +{ + "ssr": false, + "displayName": false, + "transpileTemplateLiterals": false, + "minify": false, + "cssProp": true +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop/output.js new file mode 100644 index 000000000000000..ff7f8b98adeb9fb --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-css-prop/output.js @@ -0,0 +1,210 @@ +import _styled from "styled-components"; +/* + * Basic fixtures + */ const StaticString = (p)=><_StyledP >A +; +const StaticTemplate = (p)=><_StyledP2 > + + A + + +; +const ObjectProp = (p)=><_StyledP3 >A +; +const NoChildren = (p)=><_StyledP4 /> +; +const CssHelperProp = (p)=><_StyledP5 > + + A + + +; +/* + * Dynamic prop + */ const CustomComp = (p)=><_StyledParagraph >H +; +const DynamicProp = (p)=><_StyledP6 $_css={props.cssText}>H +; +const LocalInterpolation = (p)=><_StyledP7 $_css2={props.bg}> + + H + + +; +const FuncInterpolation = (p)=><_StyledP8 > + + H + + +; +const radius = 10; +const GlobalInterpolation = (p)=><_StyledP9 > + + H + + +; +const LocalCssHelperProp = (p)=><_StyledP10 $_css3={p.color}> + + A + + +; +const DynamicCssHelperProp = (p)=><_StyledP11 > + + A + + +; +const CustomCompWithDot = (p)=><_StyledButtonGhost >H +; +const NestedCompWithDot = (p)=><_StyledButtonGhostNew >H +; +const CustomCompWithDotLowerCase = (p)=><_StyledButtonGhost2 >H +; +const CustomElement = (p)=><_StyledButtonGhost3 >H +; +/* styled component defined after function it's used in */ const EarlyUsageComponent = (p)=><_StyledThing /> +; +const Thing3 = styled.div` + color: blue; +`; +var _StyledThing5 = _styled(Thing3)((p)=>({ + [p.$_css8]: { + color: 'red' + } + }) +); +var _StyledThing4 = _styled(Thing3)((p)=>({ + [p.$_css7]: { + color: 'red' + } + }) +); +var _StyledThing3 = _styled(Thing3)((p)=>({ + [p.$_css6]: { + color: 'red' + } + }) +); +var _StyledThing2 = _styled(Thing3)((p)=>({ + color: p.$_css5 + }) +); +var _StyledThing = _styled(Thing3)`color: red;`; +const ObjectInterpolation = (p)=>{ + const theme = useTheme(); + return <_StyledP12 $_css4={theme.colors.red}> + + H + + ; +}; +const ObjectInterpolationCustomComponent = (p)=>{ + const theme = useTheme(); + return <_StyledThing2 $_css5={theme.colors.red}> + + H + + ; +}; +const ObjectInterpolationInKey = (p)=>{ + const theme = useTheme(); + return <_StyledThing3 $_css6={theme.breakpoints.md}> + + H + + ; +}; +const ObjectFnInterpolationInKey = (p)=>{ + const theme = useTheme(); + return <_StyledThing4 $_css7={theme.breakpoints.md()}> + + H + + ; +}; +const ObjectFnSimpleInterpolationInKey = (p)=>{ + const foo = '@media screen and (max-width: 600px)'; + return <_StyledThing5 $_css8={foo}> + + H + + ; +}; +const ObjectPropMixedInputs = (p)=>{ + const color = 'red'; + return <_StyledP13 $_css9={p.background} $_css10={color} $_css11={globalVar} $_css12={getAfterValue()}> + + A + + ; +}; +const ObjectPropWithSpread = ()=>{ + const css = { + color: 'red' + }; + const playing = true; + return <_StyledDiv $_css13={css} $_css14={playing ? { + opacity: 0, + bottom: '-100px' + } : {}}/>; +}; +var _StyledP = _styled("p")`flex: 1;`; +var _StyledP2 = _styled("p")` + flex: 1; + `; +var _StyledP3 = _styled("p")({ + color: 'blue' +}); +var _StyledP4 = _styled("p")`flex: 1;`; +var _StyledP5 = _styled("p")` + color: blue; + `; +var _StyledParagraph = _styled(Paragraph)`flex: 1`; +var _StyledP6 = _styled("p")`${(p)=>p.$_css +}`; +var _StyledP7 = _styled("p")` + background: ${(p)=>p.$_css2 +}; + `; +var _StyledP8 = _styled("p")` + color: ${(props)=>props.theme.a +}; + `; +var _StyledP9 = _styled("p")` + border-radius: ${radius}px; + `; +var _StyledP10 = _styled("p")` + color: ${(p)=>p.$_css3 +}; + `; +var _StyledP11 = _styled("p")` + color: ${(props)=>props.theme.color +}; + `; +var _StyledButtonGhost = _styled(Button.Ghost)`flex: 1`; +var _StyledButtonGhostNew = _styled(Button.Ghost.New)`flex: 1`; +var _StyledButtonGhost2 = _styled(button.ghost)`flex: 1`; +var _StyledButtonGhost3 = _styled("button-ghost")`flex: 1`; +var _StyledP12 = _styled("p")((p)=>({ + color: p.$_css4 + }) +); +var _StyledP13 = _styled("p")((p)=>({ + background: p.$_css9, + color: p.$_css10, + textAlign: 'left', + '::before': { + content: p.$_css11 + }, + '::after': { + content: p.$_css12 + } + }) +); +var _StyledDiv = _styled("div")((p)=>({ + ...p.$_css13, + ...p.$_css14 + }) +); diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/transpile-require-default/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-require-default/code.js new file mode 100644 index 000000000000000..87ae1495097edfe --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-require-default/code.js @@ -0,0 +1,13 @@ +const styled_default = require("styled-components"); + +const TestNormal = styled.div` + width: 100%; +` + +const Test = styled_default.default.div` + width: 100%; +` + +const TestCallExpression = styled_default.default(Test)` + height: 20px; +` \ No newline at end of file diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/transpile-require-default/config.json b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-require-default/config.json new file mode 100644 index 000000000000000..0967ef424bce679 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-require-default/config.json @@ -0,0 +1 @@ +{} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/transpile-require-default/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-require-default/output.js new file mode 100644 index 000000000000000..3089326d8ead905 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/transpile-require-default/output.js @@ -0,0 +1,19 @@ +const styled_default = require("styled-components"); +const TestNormal = styled.div.withConfig({ + displayName: "code__TestNormal", + componentId: "sc-1dd7c523-0" +})` + width: 100%; +`; +const Test = styled_default.default.div.withConfig({ + displayName: "code__Test", + componentId: "sc-1dd7c523-1" +})` + width: 100%; +`; +const TestCallExpression = styled_default.default(Test).withConfig({ + displayName: "code__TestCallExpression", + componentId: "sc-1dd7c523-2" +})` + height: 20px; +`; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/use-file-name/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/use-file-name/code.js new file mode 100644 index 000000000000000..e656c5d565db369 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/use-file-name/code.js @@ -0,0 +1,6 @@ +import styled from "styled-components"; + +const Test = styled.div`color: red;`; +const before = styled.div`color: blue;`; +styled.div``; +export default styled.button``; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/use-file-name/config.json b/packages/next-swc/crates/styled_components/tests/fixtures/use-file-name/config.json new file mode 100644 index 000000000000000..2c6790858b11d99 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/use-file-name/config.json @@ -0,0 +1,4 @@ +{ + "transpileTemplateLiterals": false, + "ssr": true +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/use-file-name/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/use-file-name/output.js new file mode 100644 index 000000000000000..b382d2770eb61a3 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/use-file-name/output.js @@ -0,0 +1,17 @@ +import styled from "styled-components"; +const Test = styled.div.withConfig({ + displayName: "code__Test", + componentId: "sc-a2611da4-0" +})`color: red;`; +const before = styled.div.withConfig({ + displayName: "code__before", + componentId: "sc-a2611da4-1" +})`color: blue;`; +styled.div.withConfig({ + displayName: "code", + componentId: "sc-a2611da4-2" +})``; +export default styled.button.withConfig({ + displayName: "code", + componentId: "sc-a2611da4-3" +})``; diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/use-namespace/code.js b/packages/next-swc/crates/styled_components/tests/fixtures/use-namespace/code.js new file mode 100644 index 000000000000000..85b62c77bf5a89a --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/use-namespace/code.js @@ -0,0 +1,23 @@ +import * as styled from 'styled-components' + +const css = styled.css` + background: black; +` + +const GlobalStyle = styled.createGlobalStyle` + html { + background: black; + } +` + +const Test = styled.default.div` + color: red; +` + +const before = styled.default.div` + color: blue; +` + +styled.default.div`` + +export default styled.default.button`` diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/use-namespace/config.json b/packages/next-swc/crates/styled_components/tests/fixtures/use-namespace/config.json new file mode 100644 index 000000000000000..0a590a53a03568f --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/use-namespace/config.json @@ -0,0 +1,3 @@ +{ + "namespace": "test-namespace" +} diff --git a/packages/next-swc/crates/styled_components/tests/fixtures/use-namespace/output.js b/packages/next-swc/crates/styled_components/tests/fixtures/use-namespace/output.js new file mode 100644 index 000000000000000..5d9ba2732bfbfa7 --- /dev/null +++ b/packages/next-swc/crates/styled_components/tests/fixtures/use-namespace/output.js @@ -0,0 +1,29 @@ +import * as styled from 'styled-components'; +const css = styled.css` + background: black; +`; +const GlobalStyle = styled.createGlobalStyle` + html { + background: black; + } +`; +const Test = styled.default.div.withConfig({ + displayName: "code__Test", + componentId: "test-namespace__sc-d9ced075-0" +})` + color: red; +`; +const before = styled.default.div.withConfig({ + displayName: "code__before", + componentId: "test-namespace__sc-d9ced075-1" +})` + color: blue; +`; +styled.default.div.withConfig({ + displayName: "code", + componentId: "test-namespace__sc-d9ced075-2" +})``; +export default styled.default.button.withConfig({ + displayName: "code", + componentId: "test-namespace__sc-d9ced075-3" +})``; From 9dfdcf3407ed827caa44321ef1f7ba8bdb9c3963 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Tue, 5 Apr 2022 23:41:51 +0900 Subject: [PATCH 02/25] Adjust --- packages/next-swc/crates/styled_components/Cargo.toml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/next-swc/crates/styled_components/Cargo.toml b/packages/next-swc/crates/styled_components/Cargo.toml index de780de667c5be4..bc69784709df022 100644 --- a/packages/next-swc/crates/styled_components/Cargo.toml +++ b/packages/next-swc/crates/styled_components/Cargo.toml @@ -1,8 +1,10 @@ [package] +authors = ["강동윤 "] description = "AST Transforms for styled-components, without dependency on plugin apis" edition = "2018" license = "Apache-2.0" name = "styled_components" +repository = "https://github.com/vercel/next.js.git" version = "0.25.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -13,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.19", features = ["concurrent"] } -swc_ecmascript = { version = "0.140.0", features = ["utils", "visit"] } +swc_common = {version = "0.17.19", features = ["concurrent"]} +swc_ecmascript = {version = "0.140.0", features = ["utils", "visit"]} tracing = "0.1" [dev-dependencies] serde_json = "1" swc_ecma_transforms_testing = "0.75.0" -swc_ecmascript = { version = "0.140.0", features = ["parser", "transforms"] } +swc_ecmascript = {version = "0.140.0", features = ["parser", "transforms"]} testing = "0.19.1" From cc43256f43b818bf63c8e80ceeded67f5b31adcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Tue, 5 Apr 2022 23:42:12 +0900 Subject: [PATCH 03/25] publish = false --- packages/next-swc/crates/core/Cargo.toml | 1 + packages/next-swc/crates/napi/Cargo.toml | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/next-swc/crates/core/Cargo.toml b/packages/next-swc/crates/core/Cargo.toml index 43ee61ad4fb0550..52f71754c60a1ee 100644 --- a/packages/next-swc/crates/core/Cargo.toml +++ b/packages/next-swc/crates/core/Cargo.toml @@ -2,6 +2,7 @@ edition = "2018" name = "next-swc" version = "0.0.0" +publish = false [lib] crate-type = ["cdylib", "rlib"] diff --git a/packages/next-swc/crates/napi/Cargo.toml b/packages/next-swc/crates/napi/Cargo.toml index cbc26b6fa6b959b..3e388f0e9424529 100644 --- a/packages/next-swc/crates/napi/Cargo.toml +++ b/packages/next-swc/crates/napi/Cargo.toml @@ -2,6 +2,7 @@ edition = "2018" name = "next-swc-napi" version = "0.0.0" +publish = false [lib] crate-type = ["cdylib", "rlib"] From 77c741442c7d800a4c3fd5946c6a26165700e518 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Tue, 5 Apr 2022 23:43:11 +0900 Subject: [PATCH 04/25] Tree --- packages/next-swc/Cargo.lock | 11 ++++++----- packages/next-swc/crates/core/Cargo.toml | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock index d4ef8f48d68b79b..5266a37d9bcd7ec 100644 --- a/packages/next-swc/Cargo.lock +++ b/packages/next-swc/Cargo.lock @@ -1785,17 +1785,18 @@ checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" [[package]] name = "styled_components" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a29f0d8eb056b9763d224462594cda0f2dc96aa613fab7ada00ade37d3f05443" +version = "0.25.0" dependencies = [ "Inflector", "once_cell", "regex", "serde", + "serde_json", "swc_atoms", "swc_common", + "swc_ecma_transforms_testing", "swc_ecmascript", + "testing", "tracing", ] @@ -1932,9 +1933,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.17.18" +version = "0.17.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "278ad1cbb3fb3b2686c86a7dd5f307ef791918d249a6da60fa6cd3388f4c6a78" +checksum = "00edee63ed3957d0842ac91f04010b04a5c240c752924fa53e6ebe72888b523a" dependencies = [ "ahash", "ast_node", diff --git a/packages/next-swc/crates/core/Cargo.toml b/packages/next-swc/crates/core/Cargo.toml index 52f71754c60a1ee..a2b5c6418edc5dd 100644 --- a/packages/next-swc/crates/core/Cargo.toml +++ b/packages/next-swc/crates/core/Cargo.toml @@ -20,7 +20,7 @@ radix_fmt = "1" regex = "1.5" serde = "1" serde_json = "1" -styled_components = "0.23.0" +styled_components = {path="../styled_components"} swc = "0.161.1" swc_atoms = "0.2.11" swc_common = { version = "0.17.18", features = ["concurrent", "sourcemap"] } From a2e2e89abd15d4cd5430fb13f728770504f1e91b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Tue, 5 Apr 2022 23:55:10 +0900 Subject: [PATCH 05/25] Move tests --- packages/next-swc/Cargo.lock | 16 +++++- packages/next-swc/crates/core/Cargo.toml | 3 +- packages/next-swc/crates/core/src/lib.rs | 3 +- .../next-swc/crates/core/tests/fixture.rs | 44 --------------- .../crates/modularize_imports/Cargo.toml | 21 +++++++ .../src/lib.rs} | 0 .../modularize_imports/tests/fixture.rs | 55 +++++++++++++++++++ .../tests/fixture}/regex/input.js | 0 .../tests/fixture}/regex/output.js | 0 .../tests/fixture}/simple/input.js | 0 .../tests/fixture}/simple/output.js | 0 11 files changed, 95 insertions(+), 47 deletions(-) create mode 100644 packages/next-swc/crates/modularize_imports/Cargo.toml rename packages/next-swc/crates/{core/src/modularize_imports.rs => modularize_imports/src/lib.rs} (100%) create mode 100644 packages/next-swc/crates/modularize_imports/tests/fixture.rs rename packages/next-swc/crates/{core/tests/fixture/modularize-imports => modularize_imports/tests/fixture}/regex/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/modularize-imports => modularize_imports/tests/fixture}/regex/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/modularize-imports => modularize_imports/tests/fixture}/simple/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/modularize-imports => modularize_imports/tests/fixture}/simple/output.js (100%) diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock index 5266a37d9bcd7ec..0f5dc3d7a85633b 100644 --- a/packages/next-swc/Cargo.lock +++ b/packages/next-swc/Cargo.lock @@ -938,6 +938,20 @@ dependencies = [ "autocfg", ] +[[package]] +name = "modularize_imports" +version = "0.1.0" +dependencies = [ + "handlebars", + "once_cell", + "regex", + "serde", + "swc_cached", + "swc_ecma_transforms_testing", + "swc_ecmascript", + "testing", +] + [[package]] name = "napi" version = "1.8.0" @@ -989,7 +1003,7 @@ dependencies = [ "easy-error", "either", "fxhash", - "handlebars", + "modularize_imports", "once_cell", "pathdiff", "radix_fmt", diff --git a/packages/next-swc/crates/core/Cargo.toml b/packages/next-swc/crates/core/Cargo.toml index a2b5c6418edc5dd..f79bcaba83ed684 100644 --- a/packages/next-swc/crates/core/Cargo.toml +++ b/packages/next-swc/crates/core/Cargo.toml @@ -21,6 +21,7 @@ regex = "1.5" serde = "1" serde_json = "1" styled_components = {path="../styled_components"} +modularize_imports = {path="../modularize_imports"} swc = "0.161.1" swc_atoms = "0.2.11" swc_common = { version = "0.17.18", features = ["concurrent", "sourcemap"] } @@ -31,7 +32,7 @@ swc_node_base = "0.5.1" swc_cached = "0.1.1" swc_css_prefixer = "0.99.3" tracing = {version = "0.1.28", features = ["release_max_level_off"]} -handlebars = "4.2.1" + [dev-dependencies] swc_ecma_transforms_testing = "0.75.0" diff --git a/packages/next-swc/crates/core/src/lib.rs b/packages/next-swc/crates/core/src/lib.rs index 781313ee3e19db0..f314630b6c29ff5 100644 --- a/packages/next-swc/crates/core/src/lib.rs +++ b/packages/next-swc/crates/core/src/lib.rs @@ -29,6 +29,8 @@ DEALINGS IN THE SOFTWARE. #![recursion_limit = "2048"] #![deny(clippy::all)] +pub extern crate modularize_imports; + use auto_cjs::contains_cjs; use either::Either; use fxhash::FxHashSet; @@ -50,7 +52,6 @@ mod auto_cjs; pub mod disallow_re_export_all_in_page; pub mod emotion; pub mod hook_optimizer; -pub mod modularize_imports; pub mod next_dynamic; pub mod next_ssg; pub mod page_config; diff --git a/packages/next-swc/crates/core/tests/fixture.rs b/packages/next-swc/crates/core/tests/fixture.rs index 8db78ec56865343..9c0b38b286318c5 100644 --- a/packages/next-swc/crates/core/tests/fixture.rs +++ b/packages/next-swc/crates/core/tests/fixture.rs @@ -1,7 +1,6 @@ use next_swc::{ amp_attributes::amp_attributes, emotion::{self, EmotionOptions}, - modularize_imports::modularize_imports, next_dynamic::next_dynamic, next_ssg::next_ssg, page_config::page_config_test, @@ -313,46 +312,3 @@ fn next_emotion_fixture(input: PathBuf) { &output, ); } - -#[fixture("tests/fixture/modularize-imports/**/input.js")] -fn modularize_imports_fixture(input: PathBuf) { - use next_swc::modularize_imports::PackageConfig; - let output = input.parent().unwrap().join("output.js"); - test_fixture( - syntax(), - &|_tr| { - modularize_imports(next_swc::modularize_imports::Config { - packages: vec![ - ( - "react-bootstrap".to_string(), - PackageConfig { - transform: "react-bootstrap/lib/{{member}}".into(), - prevent_full_import: false, - skip_default_conversion: false, - }, - ), - ( - "my-library/?(((\\w*)?/?)*)".to_string(), - PackageConfig { - transform: "my-library/{{ matches.[1] }}/{{member}}".into(), - prevent_full_import: false, - skip_default_conversion: false, - }, - ), - ( - "my-library-2".to_string(), - PackageConfig { - transform: "my-library-2/{{ camelCase member }}".into(), - prevent_full_import: false, - skip_default_conversion: true, - }, - ), - ] - .into_iter() - .collect(), - }) - }, - &input, - &output, - ); -} diff --git a/packages/next-swc/crates/modularize_imports/Cargo.toml b/packages/next-swc/crates/modularize_imports/Cargo.toml new file mode 100644 index 000000000000000..4f1077b645f4335 --- /dev/null +++ b/packages/next-swc/crates/modularize_imports/Cargo.toml @@ -0,0 +1,21 @@ +[package] +authors = ["강동윤 ", "next.js developers"] +edition = "2018" +license = "Apache-2.0" +name = "modularize_imports" +repository = "https://github.com/vercel/next.js.git" +version = "0.1.0" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +handlebars = "4.2.1" +once_cell = "1.8.0" +regex = "1.5" +serde = "1" +swc_cached = "0.1.1" +swc_ecmascript = { version = "0.140.0", features = ["visit"] } + +[dev-dependencies] +swc_ecma_transforms_testing = "0.75.0" +testing = "0.19.1" diff --git a/packages/next-swc/crates/core/src/modularize_imports.rs b/packages/next-swc/crates/modularize_imports/src/lib.rs similarity index 100% rename from packages/next-swc/crates/core/src/modularize_imports.rs rename to packages/next-swc/crates/modularize_imports/src/lib.rs diff --git a/packages/next-swc/crates/modularize_imports/tests/fixture.rs b/packages/next-swc/crates/modularize_imports/tests/fixture.rs new file mode 100644 index 000000000000000..6a139b0dd5b205f --- /dev/null +++ b/packages/next-swc/crates/modularize_imports/tests/fixture.rs @@ -0,0 +1,55 @@ +use std::path::PathBuf; + +use modularize_imports::{modularize_imports, PackageConfig}; +use swc_ecma_transforms_testing::test_fixture; +use swc_ecmascript::parser::{Syntax, EsConfig}; +use testing::fixture; + +fn syntax() -> Syntax { + Syntax::Es(EsConfig { + jsx: true, + ..Default::default() + }) +} + +#[fixture("tests/fixture/**/input.js")] +fn modularize_imports_fixture(input: PathBuf) { + let output = input.parent().unwrap().join("output.js"); + test_fixture( + syntax(), + &|_tr| { + modularize_imports(modularize_imports::Config { + packages: vec![ + ( + "react-bootstrap".to_string(), + PackageConfig { + transform: "react-bootstrap/lib/{{member}}".into(), + prevent_full_import: false, + skip_default_conversion: false, + }, + ), + ( + "my-library/?(((\\w*)?/?)*)".to_string(), + PackageConfig { + transform: "my-library/{{ matches.[1] }}/{{member}}".into(), + prevent_full_import: false, + skip_default_conversion: false, + }, + ), + ( + "my-library-2".to_string(), + PackageConfig { + transform: "my-library-2/{{ camelCase member }}".into(), + prevent_full_import: false, + skip_default_conversion: true, + }, + ), + ] + .into_iter() + .collect(), + }) + }, + &input, + &output, + ); +} diff --git a/packages/next-swc/crates/core/tests/fixture/modularize-imports/regex/input.js b/packages/next-swc/crates/modularize_imports/tests/fixture/regex/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/modularize-imports/regex/input.js rename to packages/next-swc/crates/modularize_imports/tests/fixture/regex/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/modularize-imports/regex/output.js b/packages/next-swc/crates/modularize_imports/tests/fixture/regex/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/modularize-imports/regex/output.js rename to packages/next-swc/crates/modularize_imports/tests/fixture/regex/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/modularize-imports/simple/input.js b/packages/next-swc/crates/modularize_imports/tests/fixture/simple/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/modularize-imports/simple/input.js rename to packages/next-swc/crates/modularize_imports/tests/fixture/simple/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/modularize-imports/simple/output.js b/packages/next-swc/crates/modularize_imports/tests/fixture/simple/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/modularize-imports/simple/output.js rename to packages/next-swc/crates/modularize_imports/tests/fixture/simple/output.js From e03941b5b6e6355fd6492c1cf01e819cf6c37c3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Tue, 5 Apr 2022 23:57:09 +0900 Subject: [PATCH 06/25] fixup --- packages/next-swc/crates/modularize_imports/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next-swc/crates/modularize_imports/Cargo.toml b/packages/next-swc/crates/modularize_imports/Cargo.toml index 4f1077b645f4335..193de617ec7181b 100644 --- a/packages/next-swc/crates/modularize_imports/Cargo.toml +++ b/packages/next-swc/crates/modularize_imports/Cargo.toml @@ -1,5 +1,5 @@ [package] -authors = ["강동윤 ", "next.js developers"] +authors = ["next.js developers"] edition = "2018" license = "Apache-2.0" name = "modularize_imports" From 2a29506aba12c92c213d779ca842130f61d609d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 6 Apr 2022 00:04:25 +0900 Subject: [PATCH 07/25] Split `emotion` --- packages/next-swc/Cargo.lock | 23 +++++++- packages/next-swc/crates/core/Cargo.toml | 4 +- packages/next-swc/crates/core/src/lib.rs | 3 - .../next-swc/crates/core/tests/fixture.rs | 56 +------------------ packages/next-swc/crates/emotion/Cargo.toml | 26 +++++++++ .../{core/src/emotion => emotion/src}/hash.rs | 0 .../src/emotion/mod.rs => emotion/src/lib.rs} | 8 +-- .../next-swc/crates/emotion/tests/fixture.rs | 55 ++++++++++++++++++ .../tests/fixture}/compress/input.tsx | 0 .../tests/fixture}/compress/output.ts | 0 .../tests/fixture}/css-in-callback/input.tsx | 0 .../tests/fixture}/css-in-callback/output.ts | 0 .../tests/fixture}/namespace-import/input.tsx | 0 .../tests/fixture}/namespace-import/output.ts | 0 14 files changed, 108 insertions(+), 67 deletions(-) create mode 100644 packages/next-swc/crates/emotion/Cargo.toml rename packages/next-swc/crates/{core/src/emotion => emotion/src}/hash.rs (100%) rename packages/next-swc/crates/{core/src/emotion/mod.rs => emotion/src/lib.rs} (99%) create mode 100644 packages/next-swc/crates/emotion/tests/fixture.rs rename packages/next-swc/crates/{core/tests/fixture/emotion => emotion/tests/fixture}/compress/input.tsx (100%) rename packages/next-swc/crates/{core/tests/fixture/emotion => emotion/tests/fixture}/compress/output.ts (100%) rename packages/next-swc/crates/{core/tests/fixture/emotion => emotion/tests/fixture}/css-in-callback/input.tsx (100%) rename packages/next-swc/crates/{core/tests/fixture/emotion => emotion/tests/fixture}/css-in-callback/output.ts (100%) rename packages/next-swc/crates/{core/tests/fixture/emotion => emotion/tests/fixture}/namespace-import/input.tsx (100%) rename packages/next-swc/crates/{core/tests/fixture/emotion => emotion/tests/fixture}/namespace-import/output.ts (100%) diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock index 0f5dc3d7a85633b..5879edfea009025 100644 --- a/packages/next-swc/Cargo.lock +++ b/packages/next-swc/Cargo.lock @@ -486,6 +486,25 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +[[package]] +name = "emotion" +version = "0.1.0" +dependencies = [ + "base64 0.13.0", + "byteorder", + "fxhash", + "once_cell", + "radix_fmt", + "regex", + "serde", + "sourcemap", + "swc_atoms", + "swc_common", + "swc_ecma_transforms_testing", + "swc_ecmascript", + "testing", +] + [[package]] name = "enum_kind" version = "0.2.1" @@ -997,16 +1016,14 @@ checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" name = "next-swc" version = "0.0.0" dependencies = [ - "base64 0.13.0", - "byteorder", "chrono", "easy-error", "either", + "emotion", "fxhash", "modularize_imports", "once_cell", "pathdiff", - "radix_fmt", "regex", "serde", "serde_json", diff --git a/packages/next-swc/crates/core/Cargo.toml b/packages/next-swc/crates/core/Cargo.toml index f79bcaba83ed684..3b5735c34867ca0 100644 --- a/packages/next-swc/crates/core/Cargo.toml +++ b/packages/next-swc/crates/core/Cargo.toml @@ -8,18 +8,16 @@ publish = false crate-type = ["cdylib", "rlib"] [dependencies] -base64 = "0.13" -byteorder = "1" chrono = "0.4" easy-error = "1.0.0" either = "1" fxhash = "0.2.1" once_cell = "1.8.0" pathdiff = "0.2.0" -radix_fmt = "1" regex = "1.5" serde = "1" serde_json = "1" +emotion = {path="../emotion"} styled_components = {path="../styled_components"} modularize_imports = {path="../modularize_imports"} swc = "0.161.1" diff --git a/packages/next-swc/crates/core/src/lib.rs b/packages/next-swc/crates/core/src/lib.rs index f314630b6c29ff5..158431901220852 100644 --- a/packages/next-swc/crates/core/src/lib.rs +++ b/packages/next-swc/crates/core/src/lib.rs @@ -29,8 +29,6 @@ DEALINGS IN THE SOFTWARE. #![recursion_limit = "2048"] #![deny(clippy::all)] -pub extern crate modularize_imports; - use auto_cjs::contains_cjs; use either::Either; use fxhash::FxHashSet; @@ -50,7 +48,6 @@ use swc_ecmascript::visit::Fold; pub mod amp_attributes; mod auto_cjs; pub mod disallow_re_export_all_in_page; -pub mod emotion; pub mod hook_optimizer; pub mod next_dynamic; pub mod next_ssg; diff --git a/packages/next-swc/crates/core/tests/fixture.rs b/packages/next-swc/crates/core/tests/fixture.rs index 9c0b38b286318c5..3a7b36d1720f63b 100644 --- a/packages/next-swc/crates/core/tests/fixture.rs +++ b/packages/next-swc/crates/core/tests/fixture.rs @@ -1,6 +1,5 @@ use next_swc::{ amp_attributes::amp_attributes, - emotion::{self, EmotionOptions}, next_dynamic::next_dynamic, next_ssg::next_ssg, page_config::page_config_test, @@ -14,11 +13,8 @@ use std::path::PathBuf; use swc_common::{chain, comments::SingleThreadedComments, FileName, Mark, Span, DUMMY_SP}; use swc_ecma_transforms_testing::{test, test_fixture}; use swc_ecmascript::{ - parser::{EsConfig, Syntax, TsConfig}, - transforms::{ - react::{jsx, Runtime}, - resolver, - }, + parser::{EsConfig, Syntax}, + transforms::{react::jsx, resolver}, }; use testing::fixture; @@ -29,13 +25,6 @@ fn syntax() -> Syntax { }) } -fn ts_syntax() -> Syntax { - Syntax::Typescript(TsConfig { - tsx: true, - ..Default::default() - }) -} - #[fixture("tests/fixture/amp/**/input.js")] fn amp_attributes_fixture(input: PathBuf) { let output = input.parent().unwrap().join("output.js"); @@ -271,44 +260,3 @@ fn shake_exports_fixture_default(input: PathBuf) { &output, ); } - -#[fixture("tests/fixture/emotion/*/input.tsx")] -fn next_emotion_fixture(input: PathBuf) { - let output = input.parent().unwrap().join("output.ts"); - test_fixture( - ts_syntax(), - &|tr| { - let top_level_mark = Mark::fresh(Mark::root()); - let jsx = jsx::( - tr.cm.clone(), - Some(tr.comments.as_ref().clone()), - swc_ecmascript::transforms::react::Options { - next: false, - runtime: Some(Runtime::Automatic), - throw_if_namespace: false, - development: false, - use_builtins: true, - use_spread: true, - ..Default::default() - }, - top_level_mark, - ); - chain!( - emotion::emotion( - EmotionOptions { - enabled: Some(true), - sourcemap: Some(true), - auto_label: Some(true), - ..Default::default() - }, - &PathBuf::from("input.ts"), - tr.cm.clone(), - tr.comments.as_ref().clone(), - ), - jsx - ) - }, - &input, - &output, - ); -} diff --git a/packages/next-swc/crates/emotion/Cargo.toml b/packages/next-swc/crates/emotion/Cargo.toml new file mode 100644 index 000000000000000..0e18b4ca96bca4d --- /dev/null +++ b/packages/next-swc/crates/emotion/Cargo.toml @@ -0,0 +1,26 @@ +[package] +authors = ["next.js developers"] +edition = "2018" +license = "Apache-2.0" +name = "emotion" +repository = "https://github.com/vercel/next.js.git" +version = "0.1.0" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +base64 = "0.13" +byteorder = "1" +fxhash = "0.2.1" +once_cell = "1.8.0" +radix_fmt = "1" +regex = "1.5" +serde = "1" +sourcemap = "6.0.1" +swc_atoms = "0.2.11" +swc_common = {version = "0.17.18", features = ["concurrent", "sourcemap"]} +swc_ecmascript = {version = "0.140.0", features = ["codegen", "utils", "visit"]} + +[dev-dependencies] +swc_ecma_transforms_testing = "0.75.0" +testing = "0.19.1" diff --git a/packages/next-swc/crates/core/src/emotion/hash.rs b/packages/next-swc/crates/emotion/src/hash.rs similarity index 100% rename from packages/next-swc/crates/core/src/emotion/hash.rs rename to packages/next-swc/crates/emotion/src/hash.rs diff --git a/packages/next-swc/crates/core/src/emotion/mod.rs b/packages/next-swc/crates/emotion/src/lib.rs similarity index 99% rename from packages/next-swc/crates/core/src/emotion/mod.rs rename to packages/next-swc/crates/emotion/src/lib.rs index 24c701844d50809..ff89be748a3ee6f 100644 --- a/packages/next-swc/crates/core/src/emotion/mod.rs +++ b/packages/next-swc/crates/emotion/src/lib.rs @@ -6,14 +6,14 @@ use fxhash::FxHashMap; use once_cell::sync::Lazy; use regex::Regex; use serde::{Deserialize, Serialize}; -use swc::sourcemap::{RawToken, SourceMap as RawSourcemap}; +use sourcemap::{RawToken, SourceMap as RawSourcemap}; use swc_atoms::JsWord; use swc_common::comments::Comments; use swc_common::util::take::Take; use swc_common::{BytePos, SourceMap, DUMMY_SP}; use swc_ecmascript::ast::{ - ArrayLit, JSXAttr, JSXAttrName, JSXAttrOrSpread, JSXAttrValue, JSXElementName, JSXExpr, - JSXExprContainer, JSXObject, + ArrayLit, CallExpr, JSXAttr, JSXAttrName, JSXAttrOrSpread, JSXAttrValue, JSXElementName, + JSXExpr, JSXExprContainer, JSXObject, }; use swc_ecmascript::utils::ident::IdentLike; use swc_ecmascript::utils::{ExprFactory, Id}; @@ -23,7 +23,7 @@ use swc_ecmascript::{ MemberProp, ObjectLit, Pat, Prop, PropName, PropOrSpread, Tpl, VarDeclarator, }, codegen::util::SourceMapperExt, - visit::{swc_ecma_ast::CallExpr, Fold, FoldWith}, + visit::{Fold, FoldWith}, }; mod hash; diff --git a/packages/next-swc/crates/emotion/tests/fixture.rs b/packages/next-swc/crates/emotion/tests/fixture.rs new file mode 100644 index 000000000000000..2061283cbc2285f --- /dev/null +++ b/packages/next-swc/crates/emotion/tests/fixture.rs @@ -0,0 +1,55 @@ +use std::path::PathBuf; + +use emotion::EmotionOptions; +use swc_common::{Mark, comments::SingleThreadedComments, chain}; +use swc_ecma_transforms_testing::test_fixture; +use swc_ecmascript::{transforms::react::{Runtime, jsx}, parser::{Syntax, TsConfig}}; +use testing::fixture; + +fn ts_syntax() -> Syntax { + Syntax::Typescript(TsConfig { + tsx: true, + ..Default::default() + }) +} + +#[fixture("tests/fixture/*/input.tsx")] +fn next_emotion_fixture(input: PathBuf) { + let output = input.parent().unwrap().join("output.ts"); + test_fixture( + ts_syntax(), + &|tr| { + let top_level_mark = Mark::fresh(Mark::root()); + let jsx = jsx::( + tr.cm.clone(), + Some(tr.comments.as_ref().clone()), + swc_ecmascript::transforms::react::Options { + next: false, + runtime: Some(Runtime::Automatic), + throw_if_namespace: false, + development: false, + use_builtins: true, + use_spread: true, + ..Default::default() + }, + top_level_mark, + ); + chain!( + emotion::emotion( + EmotionOptions { + enabled: Some(true), + sourcemap: Some(true), + auto_label: Some(true), + ..Default::default() + }, + &PathBuf::from("input.ts"), + tr.cm.clone(), + tr.comments.as_ref().clone(), + ), + jsx + ) + }, + &input, + &output, + ); +} diff --git a/packages/next-swc/crates/core/tests/fixture/emotion/compress/input.tsx b/packages/next-swc/crates/emotion/tests/fixture/compress/input.tsx similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/emotion/compress/input.tsx rename to packages/next-swc/crates/emotion/tests/fixture/compress/input.tsx diff --git a/packages/next-swc/crates/core/tests/fixture/emotion/compress/output.ts b/packages/next-swc/crates/emotion/tests/fixture/compress/output.ts similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/emotion/compress/output.ts rename to packages/next-swc/crates/emotion/tests/fixture/compress/output.ts diff --git a/packages/next-swc/crates/core/tests/fixture/emotion/css-in-callback/input.tsx b/packages/next-swc/crates/emotion/tests/fixture/css-in-callback/input.tsx similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/emotion/css-in-callback/input.tsx rename to packages/next-swc/crates/emotion/tests/fixture/css-in-callback/input.tsx diff --git a/packages/next-swc/crates/core/tests/fixture/emotion/css-in-callback/output.ts b/packages/next-swc/crates/emotion/tests/fixture/css-in-callback/output.ts similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/emotion/css-in-callback/output.ts rename to packages/next-swc/crates/emotion/tests/fixture/css-in-callback/output.ts diff --git a/packages/next-swc/crates/core/tests/fixture/emotion/namespace-import/input.tsx b/packages/next-swc/crates/emotion/tests/fixture/namespace-import/input.tsx similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/emotion/namespace-import/input.tsx rename to packages/next-swc/crates/emotion/tests/fixture/namespace-import/input.tsx diff --git a/packages/next-swc/crates/core/tests/fixture/emotion/namespace-import/output.ts b/packages/next-swc/crates/emotion/tests/fixture/namespace-import/output.ts similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/emotion/namespace-import/output.ts rename to packages/next-swc/crates/emotion/tests/fixture/namespace-import/output.ts From 4ae4244e5f7a04d762fc623f539750f4516a4c22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 6 Apr 2022 00:08:31 +0900 Subject: [PATCH 08/25] Split `styled_jsx` --- packages/next-swc/Cargo.lock | 18 +++++++++++++--- packages/next-swc/crates/core/Cargo.toml | 4 +--- .../next-swc/crates/styled_jsx/Cargo.toml | 21 +++++++++++++++++++ .../mod.rs => styled_jsx/src/lib.rs} | 0 .../src}/transform_css.rs | 0 .../styled_jsx => styled_jsx/src}/utils.rs | 0 6 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 packages/next-swc/crates/styled_jsx/Cargo.toml rename packages/next-swc/crates/{core/src/styled_jsx/mod.rs => styled_jsx/src/lib.rs} (100%) rename packages/next-swc/crates/{core/src/styled_jsx => styled_jsx/src}/transform_css.rs (100%) rename packages/next-swc/crates/{core/src/styled_jsx => styled_jsx/src}/utils.rs (100%) diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock index 5879edfea009025..9c27d936f136d92 100644 --- a/packages/next-swc/Cargo.lock +++ b/packages/next-swc/Cargo.lock @@ -1017,7 +1017,6 @@ name = "next-swc" version = "0.0.0" dependencies = [ "chrono", - "easy-error", "either", "emotion", "fxhash", @@ -1028,12 +1027,11 @@ dependencies = [ "serde", "serde_json", "styled_components", + "styled_jsx", "swc", "swc_atoms", "swc_cached", "swc_common", - "swc_css", - "swc_css_prefixer", "swc_ecma_loader", "swc_ecma_transforms_testing", "swc_ecmascript", @@ -1831,6 +1829,20 @@ dependencies = [ "tracing", ] +[[package]] +name = "styled_jsx" +version = "0.1.0" +dependencies = [ + "easy-error", + "swc_common", + "swc_css", + "swc_css_prefixer", + "swc_ecma_transforms_testing", + "swc_ecmascript", + "testing", + "tracing", +] + [[package]] name = "supports-color" version = "1.3.0" diff --git a/packages/next-swc/crates/core/Cargo.toml b/packages/next-swc/crates/core/Cargo.toml index 3b5735c34867ca0..7eee898ec16b1ad 100644 --- a/packages/next-swc/crates/core/Cargo.toml +++ b/packages/next-swc/crates/core/Cargo.toml @@ -9,7 +9,6 @@ crate-type = ["cdylib", "rlib"] [dependencies] chrono = "0.4" -easy-error = "1.0.0" either = "1" fxhash = "0.2.1" once_cell = "1.8.0" @@ -19,16 +18,15 @@ serde = "1" serde_json = "1" emotion = {path="../emotion"} styled_components = {path="../styled_components"} +styled_jsx = {path="../styled_jsx"} modularize_imports = {path="../modularize_imports"} swc = "0.161.1" swc_atoms = "0.2.11" swc_common = { version = "0.17.18", features = ["concurrent", "sourcemap"] } -swc_css = "0.103.0" swc_ecma_loader = { version = "0.29.0", features = ["node", "lru"] } swc_ecmascript = { version = "0.140.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } swc_node_base = "0.5.1" swc_cached = "0.1.1" -swc_css_prefixer = "0.99.3" tracing = {version = "0.1.28", features = ["release_max_level_off"]} diff --git a/packages/next-swc/crates/styled_jsx/Cargo.toml b/packages/next-swc/crates/styled_jsx/Cargo.toml new file mode 100644 index 000000000000000..3124e595eb3bd99 --- /dev/null +++ b/packages/next-swc/crates/styled_jsx/Cargo.toml @@ -0,0 +1,21 @@ +[package] +authors = ["next.js developers"] +edition = "2018" +license = "Apache-2.0" +name = "styled_jsx" +repository = "https://github.com/vercel/next.js.git" +version = "0.1.0" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +easy-error = "1.0.0" +swc_common = {version = "0.17.18", features = ["concurrent", "sourcemap"]} +swc_css = "0.103.0" +swc_css_prefixer = "0.99.3" +swc_ecmascript = {version = "0.140.0", features = ["parser", "minifier", "utils", "visit"]} +tracing = {version = "0.1.28"} + +[dev-dependencies] +swc_ecma_transforms_testing = "0.75.0" +testing = "0.19.1" diff --git a/packages/next-swc/crates/core/src/styled_jsx/mod.rs b/packages/next-swc/crates/styled_jsx/src/lib.rs similarity index 100% rename from packages/next-swc/crates/core/src/styled_jsx/mod.rs rename to packages/next-swc/crates/styled_jsx/src/lib.rs diff --git a/packages/next-swc/crates/core/src/styled_jsx/transform_css.rs b/packages/next-swc/crates/styled_jsx/src/transform_css.rs similarity index 100% rename from packages/next-swc/crates/core/src/styled_jsx/transform_css.rs rename to packages/next-swc/crates/styled_jsx/src/transform_css.rs diff --git a/packages/next-swc/crates/core/src/styled_jsx/utils.rs b/packages/next-swc/crates/styled_jsx/src/utils.rs similarity index 100% rename from packages/next-swc/crates/core/src/styled_jsx/utils.rs rename to packages/next-swc/crates/styled_jsx/src/utils.rs From ff56979c6bc2329b01c31afe51bbda377e6e7fcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 6 Apr 2022 00:12:25 +0900 Subject: [PATCH 09/25] Split `styled_jsx` --- packages/next-swc/Cargo.lock | 1 + packages/next-swc/crates/core/Cargo.toml | 1 + packages/next-swc/crates/core/src/lib.rs | 1 - packages/next-swc/crates/core/tests/errors.rs | 18 +--- .../next-swc/crates/core/tests/fixture.rs | 55 +----------- .../tests/errors}/no-child/input.js | 0 .../tests/errors}/no-child/output.js | 0 .../tests/errors}/no-child/output.stderr | 0 .../errors}/ts-with-css-resolve/input.js | 0 .../errors}/ts-with-css-resolve/output.js | 0 .../errors}/ts-with-css-resolve/output.stderr | 0 .../tests/errors}/two-children/input.js | 0 .../tests/errors}/two-children/output.js | 0 .../tests/errors}/two-children/output.stderr | 0 .../tests/errors}/wrong-child-type/input.js | 0 .../tests/errors}/wrong-child-type/output.js | 0 .../errors}/wrong-child-type/output.stderr | 0 .../wrong-jsx-expression-type/input.js | 0 .../wrong-jsx-expression-type/output.js | 0 .../wrong-jsx-expression-type/output.stderr | 0 .../crates/styled_jsx/tests/fixture.rs | 83 +++++++++++++++++++ .../tests/fixture}/absent/input.js | 0 .../tests/fixture}/absent/output.js | 0 .../input.js | 0 .../output.js | 0 .../attribute-generation-modes/input.js | 0 .../attribute-generation-modes/output.js | 0 .../tests/fixture}/class/input.js | 0 .../tests/fixture}/class/output.js | 0 .../tests/fixture}/comments/input.js | 0 .../tests/fixture}/comments/output.js | 0 .../fixture}/component-attribute/input.js | 0 .../fixture}/component-attribute/output.js | 0 .../tests/fixture}/conflicts/input.js | 0 .../tests/fixture}/conflicts/output.js | 0 .../css-selector-after-pseudo/input.js | 0 .../css-selector-after-pseudo/output.js | 0 .../tests/fixture}/css-tag-same-file/input.js | 0 .../fixture}/css-tag-same-file/output.js | 0 .../tests/fixture}/different-jsx-ids/input.js | 0 .../fixture}/different-jsx-ids/output.js | 0 .../fixture}/dynamic-element-class/input.js | 0 .../fixture}/dynamic-element-class/output.js | 0 .../dynamic-element-external/input.js | 0 .../dynamic-element-external/output.js | 0 .../tests/fixture}/dynamic-element/input.js | 0 .../tests/fixture}/dynamic-element/output.js | 0 .../fixture}/dynamic-this-in-arrow/input.js | 0 .../fixture}/dynamic-this-in-arrow/output.js | 0 .../fixture}/exported-jsx-style/input.js | 0 .../fixture}/exported-jsx-style/output.js | 0 .../fixture}/exported-non-jsx-style/input.js | 0 .../fixture}/exported-non-jsx-style/output.js | 0 .../tests/fixture}/expressions/input.js | 0 .../tests/fixture}/expressions/output.js | 0 .../fixture}/external-nested-scope/input.js | 0 .../fixture}/external-nested-scope/output.js | 0 .../external-stylesheet-global/input.js | 0 .../external-stylesheet-global/output.js | 0 .../external-stylesheet-multi-line/input.js | 0 .../external-stylesheet-multi-line/output.js | 0 .../fixture}/external-stylesheet/input.js | 0 .../fixture}/external-stylesheet/output.js | 0 .../tests/fixture}/fragment/input.js | 0 .../tests/fixture}/fragment/output.js | 0 .../fixture}/global-child-selector/input.js | 0 .../fixture}/global-child-selector/output.js | 0 .../tests/fixture}/global-redundant/input.js | 0 .../tests/fixture}/global-redundant/output.js | 0 .../tests/fixture}/global/input.js | 0 .../tests/fixture}/global/output.js | 0 .../tests/fixture}/issue-30480/input.js | 0 .../tests/fixture}/issue-30480/output.js | 0 .../tests/fixture}/issue-30570/input.js | 0 .../tests/fixture}/issue-30570/output.js | 0 .../input.js | 0 .../output.js | 0 .../fixture}/mixed-global-scoped/input.js | 0 .../fixture}/mixed-global-scoped/output.js | 0 .../tests/fixture}/multiple-jsx/input.js | 0 .../tests/fixture}/multiple-jsx/output.js | 0 .../tests/fixture}/nested-style-tags/index.js | 0 .../fixture}/nested-style-tags/output.js | 0 .../fixture}/non-styled-jsx-style/input.js | 0 .../fixture}/non-styled-jsx-style/output.js | 0 .../not-styled-jsx-tagged-templates/input.js | 0 .../not-styled-jsx-tagged-templates/output.js | 0 .../number-after-placeholder/input.js | 0 .../number-after-placeholder/output.js | 0 .../one-off-global-selectors/input.js | 0 .../one-off-global-selectors/output.js | 0 .../tests/fixture}/source-maps/input.js | 0 .../tests/fixture}/stateless/input.js | 0 .../tests/fixture}/stateless/output.js | 0 .../fixture}/styles-external-invalid/input.js | 0 .../styles-external-invalid2/input.js | 0 .../tests/fixture}/styles/input.js | 0 .../tests/fixture}/styles/output.js | 0 .../tests/fixture}/styles2/input.js | 0 .../tests/fixture}/too-many/input.js | 0 .../tests/fixture}/too-many/output.js | 0 .../tests/fixture}/tpl-escape-1/input.js | 0 .../tests/fixture}/tpl-escape-1/output.js | 0 .../tests/fixture}/tpl-escape-2/input.js | 0 .../tests/fixture}/tpl-escape-2/output.js | 0 .../tpl-placeholder-1-as-property/input.js | 0 .../tpl-placeholder-1-as-property/output.js | 0 .../input.js | 0 .../output.js | 0 .../tpl-placeholder-3-as-value/input.js | 0 .../tpl-placeholder-3-as-value/output.js | 0 .../input.js | 0 .../output.js | 0 .../input.js | 0 .../output.js | 0 .../transform-css-complex-selector/input.js | 0 .../transform-css-complex-selector/output.js | 0 .../fixture}/transform-css-global/input.js | 0 .../fixture}/transform-css-global/output.js | 0 .../transform-css-media-query/input.js | 0 .../transform-css-media-query/output.js | 0 .../fixture}/transform-css-normal/input.js | 0 .../fixture}/transform-css-normal/output.js | 0 .../fixture}/transform-css-nth-1/input.js | 0 .../fixture}/transform-css-nth-1/output.js | 0 .../tests/fixture}/transform-css/input.js | 0 .../tests/fixture}/transform-css/output.js | 0 .../tests/fixture}/whitespace/input.js | 0 .../tests/fixture}/whitespace/output.js | 0 129 files changed, 88 insertions(+), 71 deletions(-) rename packages/next-swc/crates/{core/tests/errors/styled-jsx => styled_jsx/tests/errors}/no-child/input.js (100%) rename packages/next-swc/crates/{core/tests/errors/styled-jsx => styled_jsx/tests/errors}/no-child/output.js (100%) rename packages/next-swc/crates/{core/tests/errors/styled-jsx => styled_jsx/tests/errors}/no-child/output.stderr (100%) rename packages/next-swc/crates/{core/tests/errors/styled-jsx => styled_jsx/tests/errors}/ts-with-css-resolve/input.js (100%) rename packages/next-swc/crates/{core/tests/errors/styled-jsx => styled_jsx/tests/errors}/ts-with-css-resolve/output.js (100%) rename packages/next-swc/crates/{core/tests/errors/styled-jsx => styled_jsx/tests/errors}/ts-with-css-resolve/output.stderr (100%) rename packages/next-swc/crates/{core/tests/errors/styled-jsx => styled_jsx/tests/errors}/two-children/input.js (100%) rename packages/next-swc/crates/{core/tests/errors/styled-jsx => styled_jsx/tests/errors}/two-children/output.js (100%) rename packages/next-swc/crates/{core/tests/errors/styled-jsx => styled_jsx/tests/errors}/two-children/output.stderr (100%) rename packages/next-swc/crates/{core/tests/errors/styled-jsx => styled_jsx/tests/errors}/wrong-child-type/input.js (100%) rename packages/next-swc/crates/{core/tests/errors/styled-jsx => styled_jsx/tests/errors}/wrong-child-type/output.js (100%) rename packages/next-swc/crates/{core/tests/errors/styled-jsx => styled_jsx/tests/errors}/wrong-child-type/output.stderr (100%) rename packages/next-swc/crates/{core/tests/errors/styled-jsx => styled_jsx/tests/errors}/wrong-jsx-expression-type/input.js (100%) rename packages/next-swc/crates/{core/tests/errors/styled-jsx => styled_jsx/tests/errors}/wrong-jsx-expression-type/output.js (100%) rename packages/next-swc/crates/{core/tests/errors/styled-jsx => styled_jsx/tests/errors}/wrong-jsx-expression-type/output.stderr (100%) create mode 100644 packages/next-swc/crates/styled_jsx/tests/fixture.rs rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/absent/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/absent/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/attribute-generation-classname-rewriting/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/attribute-generation-classname-rewriting/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/attribute-generation-modes/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/attribute-generation-modes/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/class/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/class/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/comments/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/comments/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/component-attribute/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/component-attribute/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/conflicts/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/conflicts/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/css-selector-after-pseudo/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/css-selector-after-pseudo/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/css-tag-same-file/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/css-tag-same-file/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/different-jsx-ids/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/different-jsx-ids/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/dynamic-element-class/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/dynamic-element-class/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/dynamic-element-external/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/dynamic-element-external/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/dynamic-element/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/dynamic-element/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/dynamic-this-in-arrow/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/dynamic-this-in-arrow/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/exported-jsx-style/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/exported-jsx-style/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/exported-non-jsx-style/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/exported-non-jsx-style/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/expressions/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/expressions/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/external-nested-scope/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/external-nested-scope/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/external-stylesheet-global/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/external-stylesheet-global/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/external-stylesheet-multi-line/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/external-stylesheet-multi-line/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/external-stylesheet/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/external-stylesheet/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/fragment/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/fragment/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/global-child-selector/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/global-child-selector/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/global-redundant/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/global-redundant/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/global/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/global/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/issue-30480/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/issue-30480/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/issue-30570/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/issue-30570/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/issue-31562-interpolation-in-mdea/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/issue-31562-interpolation-in-mdea/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/mixed-global-scoped/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/mixed-global-scoped/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/multiple-jsx/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/multiple-jsx/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/nested-style-tags/index.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/nested-style-tags/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/non-styled-jsx-style/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/non-styled-jsx-style/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/not-styled-jsx-tagged-templates/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/not-styled-jsx-tagged-templates/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/number-after-placeholder/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/number-after-placeholder/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/one-off-global-selectors/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/one-off-global-selectors/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/source-maps/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/stateless/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/stateless/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/styles-external-invalid/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/styles-external-invalid2/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/styles/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/styles/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/styles2/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/too-many/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/too-many/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/tpl-escape-1/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/tpl-escape-1/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/tpl-escape-2/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/tpl-escape-2/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/tpl-placeholder-1-as-property/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/tpl-placeholder-1-as-property/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/tpl-placeholder-2-as-part-of-value/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/tpl-placeholder-2-as-part-of-value/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/tpl-placeholder-3-as-value/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/tpl-placeholder-3-as-value/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/tpl-placeholder-4-as-part-of-value-in-multiple/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/tpl-placeholder-4-as-part-of-value-in-multiple/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/tpl-placeholder-5-values-of-multiple-properties/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/tpl-placeholder-5-values-of-multiple-properties/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/transform-css-complex-selector/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/transform-css-complex-selector/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/transform-css-global/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/transform-css-global/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/transform-css-media-query/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/transform-css-media-query/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/transform-css-normal/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/transform-css-normal/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/transform-css-nth-1/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/transform-css-nth-1/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/transform-css/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/transform-css/output.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/whitespace/input.js (100%) rename packages/next-swc/crates/{core/tests/fixture/styled-jsx => styled_jsx/tests/fixture}/whitespace/output.js (100%) diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock index 9c27d936f136d92..11582593b51732a 100644 --- a/packages/next-swc/Cargo.lock +++ b/packages/next-swc/Cargo.lock @@ -1017,6 +1017,7 @@ name = "next-swc" version = "0.0.0" dependencies = [ "chrono", + "easy-error", "either", "emotion", "fxhash", diff --git a/packages/next-swc/crates/core/Cargo.toml b/packages/next-swc/crates/core/Cargo.toml index 7eee898ec16b1ad..4a91273ae119d2b 100644 --- a/packages/next-swc/crates/core/Cargo.toml +++ b/packages/next-swc/crates/core/Cargo.toml @@ -9,6 +9,7 @@ crate-type = ["cdylib", "rlib"] [dependencies] chrono = "0.4" +easy-error = "1.0.0" either = "1" fxhash = "0.2.1" once_cell = "1.8.0" diff --git a/packages/next-swc/crates/core/src/lib.rs b/packages/next-swc/crates/core/src/lib.rs index 158431901220852..f0a8a9112292c6b 100644 --- a/packages/next-swc/crates/core/src/lib.rs +++ b/packages/next-swc/crates/core/src/lib.rs @@ -57,7 +57,6 @@ pub mod react_remove_properties; pub mod relay; pub mod remove_console; pub mod shake_exports; -pub mod styled_jsx; mod top_level_binding_collector; #[derive(Clone, Debug, Deserialize)] diff --git a/packages/next-swc/crates/core/tests/errors.rs b/packages/next-swc/crates/core/tests/errors.rs index 3176182ef27f2e8..bd73be935c66d0c 100644 --- a/packages/next-swc/crates/core/tests/errors.rs +++ b/packages/next-swc/crates/core/tests/errors.rs @@ -1,6 +1,6 @@ use next_swc::{ disallow_re_export_all_in_page::disallow_re_export_all_in_page, next_dynamic::next_dynamic, - next_ssg::next_ssg, styled_jsx::styled_jsx, + next_ssg::next_ssg, }; use std::path::PathBuf; use swc_common::FileName; @@ -44,22 +44,6 @@ fn next_dynamic_errors(input: PathBuf) { ); } -#[fixture("tests/errors/styled-jsx/**/input.js")] -fn styled_jsx_errors(input: PathBuf) { - let output = input.parent().unwrap().join("output.js"); - let file_name = match input.to_str().unwrap().contains("ts-with-css-resolve") { - true => FileName::Real(PathBuf::from("/some-project/src/some-file.ts")), - false => FileName::Real(PathBuf::from("/some-project/src/some-file.js")), - }; - - test_fixture_allowing_error( - syntax(), - &|t| styled_jsx(t.cm.clone(), file_name.clone()), - &input, - &output, - ); -} - #[fixture("tests/errors/next-ssg/**/input.js")] fn next_ssg_errors(input: PathBuf) { let output = input.parent().unwrap().join("output.js"); diff --git a/packages/next-swc/crates/core/tests/fixture.rs b/packages/next-swc/crates/core/tests/fixture.rs index 3a7b36d1720f63b..6cc8a53a74a2d30 100644 --- a/packages/next-swc/crates/core/tests/fixture.rs +++ b/packages/next-swc/crates/core/tests/fixture.rs @@ -7,14 +7,13 @@ use next_swc::{ relay::{relay, Config as RelayConfig, RelayLanguageConfig}, remove_console::remove_console, shake_exports::{shake_exports, Config as ShakeExportsConfig}, - styled_jsx::styled_jsx, }; use std::path::PathBuf; -use swc_common::{chain, comments::SingleThreadedComments, FileName, Mark, Span, DUMMY_SP}; +use swc_common::{chain, comments::SingleThreadedComments, FileName, Mark}; use swc_ecma_transforms_testing::{test, test_fixture}; use swc_ecmascript::{ parser::{EsConfig, Syntax}, - transforms::{react::jsx, resolver}, + transforms::react::jsx, }; use testing::fixture; @@ -108,56 +107,6 @@ fn next_ssg_fixture(input: PathBuf) { ); } -#[fixture("tests/fixture/styled-jsx/**/input.js")] -fn styled_jsx_fixture(input: PathBuf) { - let output = input.parent().unwrap().join("output.js"); - test_fixture( - syntax(), - &|t| { - chain!( - resolver(), - styled_jsx( - t.cm.clone(), - FileName::Real(PathBuf::from("/some-project/src/some-file.js")) - ) - ) - }, - &input, - &output, - ); - - test_fixture( - syntax(), - &|t| { - // `resolver` uses `Mark` which is stored in a thread-local storage (namely - // swc_common::GLOBALS), and this loop will make `Mark` to be different from the - // invocation above. - // - // 1000 is used because in future I (kdy1) may optimize logic of resolver. - for _ in 0..1000 { - let _mark = Mark::fresh(Mark::root()); - } - - chain!( - resolver(), - styled_jsx( - t.cm.clone(), - FileName::Real(PathBuf::from("/some-project/src/some-file.js")) - ) - ) - }, - &input, - &output, - ); -} - -pub struct DropSpan; -impl swc_ecmascript::visit::VisitMut for DropSpan { - fn visit_mut_span(&mut self, span: &mut Span) { - *span = DUMMY_SP - } -} - #[fixture("tests/fixture/page-config/**/input.js")] fn page_config_fixture(input: PathBuf) { let output = input.parent().unwrap().join("output.js"); diff --git a/packages/next-swc/crates/core/tests/errors/styled-jsx/no-child/input.js b/packages/next-swc/crates/styled_jsx/tests/errors/no-child/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/errors/styled-jsx/no-child/input.js rename to packages/next-swc/crates/styled_jsx/tests/errors/no-child/input.js diff --git a/packages/next-swc/crates/core/tests/errors/styled-jsx/no-child/output.js b/packages/next-swc/crates/styled_jsx/tests/errors/no-child/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/errors/styled-jsx/no-child/output.js rename to packages/next-swc/crates/styled_jsx/tests/errors/no-child/output.js diff --git a/packages/next-swc/crates/core/tests/errors/styled-jsx/no-child/output.stderr b/packages/next-swc/crates/styled_jsx/tests/errors/no-child/output.stderr similarity index 100% rename from packages/next-swc/crates/core/tests/errors/styled-jsx/no-child/output.stderr rename to packages/next-swc/crates/styled_jsx/tests/errors/no-child/output.stderr diff --git a/packages/next-swc/crates/core/tests/errors/styled-jsx/ts-with-css-resolve/input.js b/packages/next-swc/crates/styled_jsx/tests/errors/ts-with-css-resolve/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/errors/styled-jsx/ts-with-css-resolve/input.js rename to packages/next-swc/crates/styled_jsx/tests/errors/ts-with-css-resolve/input.js diff --git a/packages/next-swc/crates/core/tests/errors/styled-jsx/ts-with-css-resolve/output.js b/packages/next-swc/crates/styled_jsx/tests/errors/ts-with-css-resolve/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/errors/styled-jsx/ts-with-css-resolve/output.js rename to packages/next-swc/crates/styled_jsx/tests/errors/ts-with-css-resolve/output.js diff --git a/packages/next-swc/crates/core/tests/errors/styled-jsx/ts-with-css-resolve/output.stderr b/packages/next-swc/crates/styled_jsx/tests/errors/ts-with-css-resolve/output.stderr similarity index 100% rename from packages/next-swc/crates/core/tests/errors/styled-jsx/ts-with-css-resolve/output.stderr rename to packages/next-swc/crates/styled_jsx/tests/errors/ts-with-css-resolve/output.stderr diff --git a/packages/next-swc/crates/core/tests/errors/styled-jsx/two-children/input.js b/packages/next-swc/crates/styled_jsx/tests/errors/two-children/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/errors/styled-jsx/two-children/input.js rename to packages/next-swc/crates/styled_jsx/tests/errors/two-children/input.js diff --git a/packages/next-swc/crates/core/tests/errors/styled-jsx/two-children/output.js b/packages/next-swc/crates/styled_jsx/tests/errors/two-children/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/errors/styled-jsx/two-children/output.js rename to packages/next-swc/crates/styled_jsx/tests/errors/two-children/output.js diff --git a/packages/next-swc/crates/core/tests/errors/styled-jsx/two-children/output.stderr b/packages/next-swc/crates/styled_jsx/tests/errors/two-children/output.stderr similarity index 100% rename from packages/next-swc/crates/core/tests/errors/styled-jsx/two-children/output.stderr rename to packages/next-swc/crates/styled_jsx/tests/errors/two-children/output.stderr diff --git a/packages/next-swc/crates/core/tests/errors/styled-jsx/wrong-child-type/input.js b/packages/next-swc/crates/styled_jsx/tests/errors/wrong-child-type/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/errors/styled-jsx/wrong-child-type/input.js rename to packages/next-swc/crates/styled_jsx/tests/errors/wrong-child-type/input.js diff --git a/packages/next-swc/crates/core/tests/errors/styled-jsx/wrong-child-type/output.js b/packages/next-swc/crates/styled_jsx/tests/errors/wrong-child-type/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/errors/styled-jsx/wrong-child-type/output.js rename to packages/next-swc/crates/styled_jsx/tests/errors/wrong-child-type/output.js diff --git a/packages/next-swc/crates/core/tests/errors/styled-jsx/wrong-child-type/output.stderr b/packages/next-swc/crates/styled_jsx/tests/errors/wrong-child-type/output.stderr similarity index 100% rename from packages/next-swc/crates/core/tests/errors/styled-jsx/wrong-child-type/output.stderr rename to packages/next-swc/crates/styled_jsx/tests/errors/wrong-child-type/output.stderr diff --git a/packages/next-swc/crates/core/tests/errors/styled-jsx/wrong-jsx-expression-type/input.js b/packages/next-swc/crates/styled_jsx/tests/errors/wrong-jsx-expression-type/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/errors/styled-jsx/wrong-jsx-expression-type/input.js rename to packages/next-swc/crates/styled_jsx/tests/errors/wrong-jsx-expression-type/input.js diff --git a/packages/next-swc/crates/core/tests/errors/styled-jsx/wrong-jsx-expression-type/output.js b/packages/next-swc/crates/styled_jsx/tests/errors/wrong-jsx-expression-type/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/errors/styled-jsx/wrong-jsx-expression-type/output.js rename to packages/next-swc/crates/styled_jsx/tests/errors/wrong-jsx-expression-type/output.js diff --git a/packages/next-swc/crates/core/tests/errors/styled-jsx/wrong-jsx-expression-type/output.stderr b/packages/next-swc/crates/styled_jsx/tests/errors/wrong-jsx-expression-type/output.stderr similarity index 100% rename from packages/next-swc/crates/core/tests/errors/styled-jsx/wrong-jsx-expression-type/output.stderr rename to packages/next-swc/crates/styled_jsx/tests/errors/wrong-jsx-expression-type/output.stderr diff --git a/packages/next-swc/crates/styled_jsx/tests/fixture.rs b/packages/next-swc/crates/styled_jsx/tests/fixture.rs new file mode 100644 index 000000000000000..23a805b2c42fe4a --- /dev/null +++ b/packages/next-swc/crates/styled_jsx/tests/fixture.rs @@ -0,0 +1,83 @@ +use std::path::PathBuf; + +use styled_jsx::styled_jsx; +use swc_common::{chain, FileName, Mark, Span, DUMMY_SP}; +use swc_ecma_transforms_testing::{test_fixture, test_fixture_allowing_error}; +use swc_ecmascript::{ + parser::{EsConfig, Syntax}, + transforms::resolver, +}; +use testing::fixture; + +fn syntax() -> Syntax { + Syntax::Es(EsConfig { + jsx: true, + ..Default::default() + }) +} + +#[fixture("tests/fixture/**/input.js")] +fn styled_jsx_fixture(input: PathBuf) { + let output = input.parent().unwrap().join("output.js"); + test_fixture( + syntax(), + &|t| { + chain!( + resolver(), + styled_jsx( + t.cm.clone(), + FileName::Real(PathBuf::from("/some-project/src/some-file.js")) + ) + ) + }, + &input, + &output, + ); + + test_fixture( + syntax(), + &|t| { + // `resolver` uses `Mark` which is stored in a thread-local storage (namely + // swc_common::GLOBALS), and this loop will make `Mark` to be different from the + // invocation above. + // + // 1000 is used because in future I (kdy1) may optimize logic of resolver. + for _ in 0..1000 { + let _mark = Mark::fresh(Mark::root()); + } + + chain!( + resolver(), + styled_jsx( + t.cm.clone(), + FileName::Real(PathBuf::from("/some-project/src/some-file.js")) + ) + ) + }, + &input, + &output, + ); +} + +pub struct DropSpan; +impl swc_ecmascript::visit::VisitMut for DropSpan { + fn visit_mut_span(&mut self, span: &mut Span) { + *span = DUMMY_SP + } +} + +#[fixture("tests/errors/**/input.js")] +fn styled_jsx_errors(input: PathBuf) { + let output = input.parent().unwrap().join("output.js"); + let file_name = match input.to_str().unwrap().contains("ts-with-css-resolve") { + true => FileName::Real(PathBuf::from("/some-project/src/some-file.ts")), + false => FileName::Real(PathBuf::from("/some-project/src/some-file.js")), + }; + + test_fixture_allowing_error( + syntax(), + &|t| styled_jsx(t.cm.clone(), file_name.clone()), + &input, + &output, + ); +} diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/absent/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/absent/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/absent/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/absent/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/absent/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/absent/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/absent/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/absent/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/attribute-generation-classname-rewriting/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/attribute-generation-classname-rewriting/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/attribute-generation-classname-rewriting/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/attribute-generation-classname-rewriting/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/attribute-generation-classname-rewriting/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/attribute-generation-classname-rewriting/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/attribute-generation-classname-rewriting/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/attribute-generation-classname-rewriting/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/attribute-generation-modes/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/attribute-generation-modes/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/attribute-generation-modes/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/attribute-generation-modes/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/attribute-generation-modes/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/attribute-generation-modes/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/attribute-generation-modes/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/attribute-generation-modes/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/class/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/class/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/class/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/class/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/class/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/class/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/class/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/class/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/comments/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/comments/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/comments/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/comments/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/comments/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/comments/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/comments/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/comments/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/component-attribute/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/component-attribute/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/component-attribute/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/component-attribute/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/component-attribute/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/component-attribute/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/component-attribute/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/component-attribute/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/conflicts/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/conflicts/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/conflicts/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/conflicts/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/conflicts/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/conflicts/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/conflicts/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/conflicts/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/css-selector-after-pseudo/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/css-selector-after-pseudo/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/css-selector-after-pseudo/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/css-selector-after-pseudo/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/css-selector-after-pseudo/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/css-selector-after-pseudo/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/css-selector-after-pseudo/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/css-selector-after-pseudo/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/css-tag-same-file/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/css-tag-same-file/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/css-tag-same-file/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/css-tag-same-file/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/css-tag-same-file/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/css-tag-same-file/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/css-tag-same-file/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/css-tag-same-file/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/different-jsx-ids/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/different-jsx-ids/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/different-jsx-ids/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/different-jsx-ids/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/different-jsx-ids/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/different-jsx-ids/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/different-jsx-ids/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/different-jsx-ids/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/dynamic-element-class/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/dynamic-element-class/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/dynamic-element-class/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/dynamic-element-class/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/dynamic-element-class/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/dynamic-element-class/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/dynamic-element-class/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/dynamic-element-class/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/dynamic-element-external/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/dynamic-element-external/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/dynamic-element-external/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/dynamic-element-external/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/dynamic-element-external/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/dynamic-element-external/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/dynamic-element-external/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/dynamic-element-external/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/dynamic-element/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/dynamic-element/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/dynamic-element/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/dynamic-element/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/dynamic-element/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/dynamic-element/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/dynamic-element/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/dynamic-element/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/dynamic-this-in-arrow/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/dynamic-this-in-arrow/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/dynamic-this-in-arrow/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/dynamic-this-in-arrow/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/dynamic-this-in-arrow/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/dynamic-this-in-arrow/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/dynamic-this-in-arrow/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/dynamic-this-in-arrow/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/exported-jsx-style/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/exported-jsx-style/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/exported-jsx-style/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/exported-jsx-style/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/exported-jsx-style/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/exported-jsx-style/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/exported-jsx-style/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/exported-jsx-style/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/exported-non-jsx-style/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/exported-non-jsx-style/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/exported-non-jsx-style/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/exported-non-jsx-style/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/exported-non-jsx-style/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/exported-non-jsx-style/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/exported-non-jsx-style/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/exported-non-jsx-style/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/expressions/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/expressions/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/expressions/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/expressions/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/expressions/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/expressions/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/expressions/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/expressions/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/external-nested-scope/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/external-nested-scope/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/external-nested-scope/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/external-nested-scope/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/external-nested-scope/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/external-nested-scope/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/external-nested-scope/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/external-nested-scope/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/external-stylesheet-global/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/external-stylesheet-global/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/external-stylesheet-global/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/external-stylesheet-global/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/external-stylesheet-global/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/external-stylesheet-global/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/external-stylesheet-global/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/external-stylesheet-global/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/external-stylesheet-multi-line/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/external-stylesheet-multi-line/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/external-stylesheet-multi-line/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/external-stylesheet-multi-line/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/external-stylesheet-multi-line/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/external-stylesheet-multi-line/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/external-stylesheet-multi-line/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/external-stylesheet-multi-line/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/external-stylesheet/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/external-stylesheet/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/external-stylesheet/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/external-stylesheet/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/external-stylesheet/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/external-stylesheet/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/external-stylesheet/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/external-stylesheet/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/fragment/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/fragment/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/fragment/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/fragment/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/fragment/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/fragment/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/fragment/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/fragment/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/global-child-selector/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/global-child-selector/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/global-child-selector/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/global-child-selector/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/global-child-selector/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/global-child-selector/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/global-child-selector/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/global-child-selector/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/global-redundant/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/global-redundant/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/global-redundant/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/global-redundant/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/global-redundant/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/global-redundant/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/global-redundant/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/global-redundant/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/global/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/global/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/global/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/global/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/global/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/global/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/global/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/global/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-30480/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/issue-30480/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-30480/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/issue-30480/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-30480/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/issue-30480/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-30480/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/issue-30480/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-30570/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/issue-30570/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-30570/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/issue-30570/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-30570/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/issue-30570/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-30570/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/issue-30570/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-31562-interpolation-in-mdea/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/issue-31562-interpolation-in-mdea/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-31562-interpolation-in-mdea/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/issue-31562-interpolation-in-mdea/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-31562-interpolation-in-mdea/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/issue-31562-interpolation-in-mdea/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-31562-interpolation-in-mdea/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/issue-31562-interpolation-in-mdea/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/mixed-global-scoped/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/mixed-global-scoped/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/mixed-global-scoped/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/mixed-global-scoped/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/mixed-global-scoped/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/mixed-global-scoped/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/mixed-global-scoped/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/mixed-global-scoped/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/multiple-jsx/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/multiple-jsx/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/multiple-jsx/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/multiple-jsx/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/multiple-jsx/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/multiple-jsx/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/multiple-jsx/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/multiple-jsx/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/nested-style-tags/index.js b/packages/next-swc/crates/styled_jsx/tests/fixture/nested-style-tags/index.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/nested-style-tags/index.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/nested-style-tags/index.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/nested-style-tags/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/nested-style-tags/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/nested-style-tags/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/nested-style-tags/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/non-styled-jsx-style/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/non-styled-jsx-style/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/non-styled-jsx-style/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/non-styled-jsx-style/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/non-styled-jsx-style/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/non-styled-jsx-style/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/non-styled-jsx-style/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/non-styled-jsx-style/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/not-styled-jsx-tagged-templates/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/not-styled-jsx-tagged-templates/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/not-styled-jsx-tagged-templates/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/not-styled-jsx-tagged-templates/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/not-styled-jsx-tagged-templates/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/not-styled-jsx-tagged-templates/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/not-styled-jsx-tagged-templates/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/not-styled-jsx-tagged-templates/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/number-after-placeholder/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/number-after-placeholder/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/number-after-placeholder/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/number-after-placeholder/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/number-after-placeholder/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/number-after-placeholder/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/number-after-placeholder/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/number-after-placeholder/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/one-off-global-selectors/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/one-off-global-selectors/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/one-off-global-selectors/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/one-off-global-selectors/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/one-off-global-selectors/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/one-off-global-selectors/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/one-off-global-selectors/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/one-off-global-selectors/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/source-maps/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/source-maps/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/source-maps/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/source-maps/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/stateless/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/stateless/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/stateless/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/stateless/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/stateless/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/stateless/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/stateless/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/stateless/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/styles-external-invalid/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/styles-external-invalid/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/styles-external-invalid/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/styles-external-invalid/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/styles-external-invalid2/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/styles-external-invalid2/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/styles-external-invalid2/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/styles-external-invalid2/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/styles/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/styles/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/styles/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/styles/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/styles/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/styles/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/styles/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/styles/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/styles2/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/styles2/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/styles2/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/styles2/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/too-many/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/too-many/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/too-many/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/too-many/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/too-many/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/too-many/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/too-many/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/too-many/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-escape-1/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-escape-1/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-escape-1/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/tpl-escape-1/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-escape-1/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-escape-1/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-escape-1/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/tpl-escape-1/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-escape-2/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-escape-2/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-escape-2/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/tpl-escape-2/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-escape-2/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-escape-2/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-escape-2/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/tpl-escape-2/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-1-as-property/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-1-as-property/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-1-as-property/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-1-as-property/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-1-as-property/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-1-as-property/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-1-as-property/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-1-as-property/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-2-as-part-of-value/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-2-as-part-of-value/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-2-as-part-of-value/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-2-as-part-of-value/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-2-as-part-of-value/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-2-as-part-of-value/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-2-as-part-of-value/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-2-as-part-of-value/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-3-as-value/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-3-as-value/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-3-as-value/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-3-as-value/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-3-as-value/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-3-as-value/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-3-as-value/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-3-as-value/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-4-as-part-of-value-in-multiple/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-4-as-part-of-value-in-multiple/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-4-as-part-of-value-in-multiple/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-4-as-part-of-value-in-multiple/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-4-as-part-of-value-in-multiple/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-4-as-part-of-value-in-multiple/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-4-as-part-of-value-in-multiple/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-4-as-part-of-value-in-multiple/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-5-values-of-multiple-properties/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-5-values-of-multiple-properties/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-5-values-of-multiple-properties/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-5-values-of-multiple-properties/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-5-values-of-multiple-properties/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-5-values-of-multiple-properties/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-5-values-of-multiple-properties/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-5-values-of-multiple-properties/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-complex-selector/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-complex-selector/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-complex-selector/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-complex-selector/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-complex-selector/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-complex-selector/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-complex-selector/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-complex-selector/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-global/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-global/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-global/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-global/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-global/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-global/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-global/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-global/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-media-query/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-media-query/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-media-query/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-media-query/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-media-query/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-media-query/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-media-query/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-media-query/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-normal/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-normal/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-normal/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-normal/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-normal/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-normal/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-normal/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-normal/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-nth-1/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-nth-1/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-nth-1/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-nth-1/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-nth-1/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-nth-1/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css-nth-1/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/transform-css-nth-1/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/transform-css/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/transform-css/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/transform-css/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/transform-css/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/transform-css/output.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/whitespace/input.js b/packages/next-swc/crates/styled_jsx/tests/fixture/whitespace/input.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/whitespace/input.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/whitespace/input.js diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/whitespace/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/whitespace/output.js similarity index 100% rename from packages/next-swc/crates/core/tests/fixture/styled-jsx/whitespace/output.js rename to packages/next-swc/crates/styled_jsx/tests/fixture/whitespace/output.js From 9717a1b8d8ac820df3cda3aca879549e15a7e47e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 6 Apr 2022 00:35:11 +0900 Subject: [PATCH 10/25] fmt --- packages/next-swc/crates/emotion/tests/fixture.rs | 7 +++++-- .../next-swc/crates/modularize_imports/tests/fixture.rs | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/next-swc/crates/emotion/tests/fixture.rs b/packages/next-swc/crates/emotion/tests/fixture.rs index 2061283cbc2285f..3268dbc1fc53d1f 100644 --- a/packages/next-swc/crates/emotion/tests/fixture.rs +++ b/packages/next-swc/crates/emotion/tests/fixture.rs @@ -1,9 +1,12 @@ use std::path::PathBuf; use emotion::EmotionOptions; -use swc_common::{Mark, comments::SingleThreadedComments, chain}; +use swc_common::{chain, comments::SingleThreadedComments, Mark}; use swc_ecma_transforms_testing::test_fixture; -use swc_ecmascript::{transforms::react::{Runtime, jsx}, parser::{Syntax, TsConfig}}; +use swc_ecmascript::{ + parser::{Syntax, TsConfig}, + transforms::react::{jsx, Runtime}, +}; use testing::fixture; fn ts_syntax() -> Syntax { diff --git a/packages/next-swc/crates/modularize_imports/tests/fixture.rs b/packages/next-swc/crates/modularize_imports/tests/fixture.rs index 6a139b0dd5b205f..4d1c06aa5161a7f 100644 --- a/packages/next-swc/crates/modularize_imports/tests/fixture.rs +++ b/packages/next-swc/crates/modularize_imports/tests/fixture.rs @@ -2,7 +2,7 @@ use std::path::PathBuf; use modularize_imports::{modularize_imports, PackageConfig}; use swc_ecma_transforms_testing::test_fixture; -use swc_ecmascript::parser::{Syntax, EsConfig}; +use swc_ecmascript::parser::{EsConfig, Syntax}; use testing::fixture; fn syntax() -> Syntax { From 3d755e8880a96c0a7de0008db916eb4e4e7ede2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 6 Apr 2022 00:45:20 +0900 Subject: [PATCH 11/25] `--fix` --- packages/next-swc/crates/emotion/src/hash.rs | 4 +-- .../next-swc/crates/napi/src/transform.rs | 4 +-- .../crates/styled_components/src/lib.rs | 2 +- .../styled_components/src/utils/analyzer.rs | 2 +- .../crates/styled_components/src/utils/mod.rs | 8 +++--- .../src/visitors/display_name_and_id.rs | 28 +++++++++---------- .../visitors/transpile_css_prop/transpile.rs | 16 +++++------ 7 files changed, 32 insertions(+), 32 deletions(-) diff --git a/packages/next-swc/crates/emotion/src/hash.rs b/packages/next-swc/crates/emotion/src/hash.rs index 87c0621e75d875a..4965e0651c07378 100644 --- a/packages/next-swc/crates/emotion/src/hash.rs +++ b/packages/next-swc/crates/emotion/src/hash.rs @@ -46,8 +46,8 @@ mod test { let s2 = "abcdeg"; for i in 0..5 { assert_eq!( - murmurhash2(&s1[i..5].as_bytes(), 0), - murmurhash2(&s2[i..5].as_bytes(), 0) + murmurhash2(s1[i..5].as_bytes(), 0), + murmurhash2(s2[i..5].as_bytes(), 0) ); } } diff --git a/packages/next-swc/crates/napi/src/transform.rs b/packages/next-swc/crates/napi/src/transform.rs index aeb0a34756748e9..ce5a6f1327f871e 100644 --- a/packages/next-swc/crates/napi/src/transform.rs +++ b/packages/next-swc/crates/napi/src/transform.rs @@ -251,7 +251,7 @@ pub fn transform_sync(cx: CallContext) -> napi::Result { fn test_deser() { const JSON_STR: &str = r#"{"jsc":{"parser":{"syntax":"ecmascript","dynamicImport":true,"jsx":true},"transform":{"react":{"runtime":"automatic","pragma":"React.createElement","pragmaFrag":"React.Fragment","throwIfNamespace":true,"development":false,"useBuiltins":true}},"target":"es5"},"filename":"/Users/timneutkens/projects/next.js/packages/next/dist/client/next.js","sourceMaps":false,"sourceFileName":"/Users/timneutkens/projects/next.js/packages/next/dist/client/next.js"}"#; - let tr: TransformOptions = serde_json::from_str(&JSON_STR).unwrap(); + let tr: TransformOptions = serde_json::from_str(JSON_STR).unwrap(); println!("{:#?}", tr); } @@ -260,7 +260,7 @@ fn test_deser() { fn test_deserialize_transform_regenerator() { const JSON_STR: &str = r#"{"jsc":{"parser":{"syntax":"ecmascript","dynamicImport":true,"jsx":true},"transform":{ "regenerator": { "importPath": "foo" }, "react":{"runtime":"automatic","pragma":"React.createElement","pragmaFrag":"React.Fragment","throwIfNamespace":true,"development":false,"useBuiltins":true}},"target":"es5"},"filename":"/Users/timneutkens/projects/next.js/packages/next/dist/client/next.js","sourceMaps":false,"sourceFileName":"/Users/timneutkens/projects/next.js/packages/next/dist/client/next.js"}"#; - let tr: TransformOptions = serde_json::from_str(&JSON_STR).unwrap(); + let tr: TransformOptions = serde_json::from_str(JSON_STR).unwrap(); println!("{:#?}", tr); } diff --git a/packages/next-swc/crates/styled_components/src/lib.rs b/packages/next-swc/crates/styled_components/src/lib.rs index 66d863b6dc157ec..76a5677dd9c5c1f 100644 --- a/packages/next-swc/crates/styled_components/src/lib.rs +++ b/packages/next-swc/crates/styled_components/src/lib.rs @@ -64,7 +64,7 @@ pub fn styled_components(file: Arc, config: Config) -> impl Fold + V chain!( analyzer(config.clone(), state.clone()), - display_name_and_id(file.clone(), config.clone(), state.clone()), + display_name_and_id(file, config, state), transpile_css_prop() ) } 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 2be14f427488746..46fba1ce552ab4f 100644 --- a/packages/next-swc/crates/styled_components/src/utils/analyzer.rs +++ b/packages/next-swc/crates/styled_components/src/utils/analyzer.rs @@ -116,7 +116,7 @@ impl Visit for Analyzer<'_> { ModuleExportName::Ident(v) => &*v.sym, ModuleExportName::Str(v) => &*v.value, }) - .unwrap_or(&&*s.local.sym) + .unwrap_or(&*s.local.sym) == "styled" { self.state.imported_local_name = Some(s.local.to_id()); 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 a4d454570f7c6c7..22f41193472ff37 100644 --- a/packages/next-swc/crates/styled_components/src/utils/mod.rs +++ b/packages/next-swc/crates/styled_components/src/utils/mod.rs @@ -26,7 +26,7 @@ pub(crate) fn prop_name_to_expr(p: &PropName) -> Cow { match p { PropName::Ident(p) => Cow::Owned(Expr::Ident(p.clone())), PropName::Str(p) => Cow::Owned(Expr::Lit(Lit::Str(p.clone()))), - PropName::Num(p) => Cow::Owned(Expr::Lit(Lit::Num(p.clone()))), + PropName::Num(p) => Cow::Owned(Expr::Lit(Lit::Num(*p))), PropName::BigInt(p) => Cow::Owned(Expr::Lit(Lit::BigInt(p.clone()))), PropName::Computed(e) => Cow::Borrowed(&e.expr), } @@ -78,7 +78,7 @@ impl State { .. }) => { if prop.sym != js_word!("default") { - return self.is_styled(&obj); + return self.is_styled(obj); } } _ => {} @@ -108,7 +108,7 @@ impl State { .. }) => match &**callee { Expr::Ident(callee) => { - if Some(callee.to_id()) == self.import_local_name("default", Some(&callee)) { + if Some(callee.to_id()) == self.import_local_name("default", Some(callee)) { return true; } } @@ -322,7 +322,7 @@ impl State { pub fn prefix_leading_digit(s: &str) -> Cow { static REGEX: Lazy = Lazy::new(|| Regex::new(r"^(\d)").unwrap()); - REGEX.replace(&s, |s: &Captures| { + REGEX.replace(s, |s: &Captures| { // format!("sc-{}", s.get(0).unwrap().as_str()) }) 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 4b38c9e50bd562a..0fd302cc94b79fd 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 @@ -53,7 +53,7 @@ impl DisplayNameAndId { } else { } - self.get_block_name(&p.parent().expect("/index/index/index?")) + self.get_block_name(p.parent().expect("/index/index/index?")) } fn get_display_name(&mut self, _: &Expr) -> JsWord { @@ -141,9 +141,9 @@ impl DisplayNameAndId { get_existing_config(e, |e| { if let Expr::Call(CallExpr { args, .. }) = e { if let Some(Expr::Object(existing_config)) = args.get_mut(0).map(|v| &mut *v.expr) { - if !already_has(&existing_config) { + if !already_has(existing_config) { existing_config.props.extend(with_config_props.take()); - return; + } } } @@ -267,22 +267,22 @@ impl VisitMut for DisplayNameAndId { ( // styled() self.state.borrow().is_styled(&*callee) - && get_property_as_ident(&callee) + && get_property_as_ident(callee) .map(|v| v == "withConfig") .unwrap_or(false) ) || ( // styled(x)({}) self.state.borrow().is_styled(&*callee) - && !get_callee(&callee) + && !get_callee(callee) .map(|callee| callee.is_member()) .unwrap_or(false) ) || ( // styled(x).attrs()({}) self.state.borrow().is_styled(callee) - && get_callee(&callee) + && get_callee(callee) .map(|callee| { callee.is_member() - && get_property_as_ident(&callee) + && get_property_as_ident(callee) .map(|v| v == "withConfig") .unwrap_or(false) }) @@ -290,19 +290,19 @@ impl VisitMut for DisplayNameAndId { ) || ( // styled(x).withConfig({}) self.state.borrow().is_styled(&*callee) - && get_callee(&callee) + && get_callee(callee) .map(|callee| { callee.is_member() - && get_property_as_ident(&callee) + && get_property_as_ident(callee) .map(|v| v == "withConfig") .unwrap_or(false) - && args.len() > 0 + && !args.is_empty() && args[0].spread.is_none() && match &*args[0].expr { Expr::Object(first_arg) => { !first_arg.props.iter().any(|prop| match prop { PropOrSpread::Prop(prop) => { - match get_prop_name(&prop) { + match get_prop_name(prop) { Some(PropName::Ident(prop_name)) => { match &*prop_name.sym { "componentId" | "displayName" => { @@ -338,7 +338,7 @@ impl VisitMut for DisplayNameAndId { }; let display_name = if self.config.display_name { - Some(self.get_display_name(&expr)) + Some(self.get_display_name(expr)) } else { None }; @@ -396,7 +396,7 @@ fn get_callee(e: &Expr) -> Option<&Expr> { Expr::Call(CallExpr { callee: Callee::Expr(callee), .. - }) => Some(&callee), + }) => Some(callee), _ => None, } } @@ -467,7 +467,7 @@ where .. }) => { if &*prop.sym == "withConfig" { - return op(obj); + op(obj) } } diff --git a/packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/transpile.rs b/packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/transpile.rs index dfe3eff88527c59..e211959d93b2f4d 100644 --- a/packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/transpile.rs +++ b/packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/transpile.rs @@ -93,7 +93,7 @@ impl VisitMut for TranspileCssProp { callee: import_name.as_callee(), args: vec![Lit::Str(Str { span: DUMMY_SP, - value: name.sym.into(), + value: name.sym, raw: None, }) .as_arg()], @@ -364,7 +364,7 @@ impl VisitMut for TranspileCssProp { } let mut serialized_body: Vec = vec![]; - let body = std::mem::replace(&mut n.body, vec![]); + let body = std::mem::take(&mut n.body); for item in body { serialized_body.push(item.clone()); match &item { @@ -385,7 +385,7 @@ impl VisitMut for TranspileCssProp { } n.body = serialized_body; - let mut remaining = std::mem::replace(&mut self.interleaved_injections, Default::default()) + let mut remaining = std::mem::take(&mut self.interleaved_injections) .into_iter() .collect::>(); remaining.sort_by_key(|x| x.0.clone()); @@ -450,7 +450,7 @@ impl PropertyReducer<'_> { } else { self.replace_object_with_prop_function = true; - let identifier = get_local_identifier(&mut self.identifier_idx, &prop.expr); + let identifier = get_local_identifier(self.identifier_idx, &prop.expr); self.extra_attrs.push(JSXAttrOrSpread::JSXAttr(JSXAttr { span: DUMMY_SP, @@ -467,7 +467,7 @@ impl PropertyReducer<'_> { acc.push(property); } PropOrSpread::Prop(ref mut prop) => { - let key = get_prop_key_as_expr(&prop); + let key = get_prop_key_as_expr(prop); let key_pn = get_prop_name(prop); if key.is_member() @@ -479,7 +479,7 @@ impl PropertyReducer<'_> { { self.replace_object_with_prop_function = true; - let identifier = get_local_identifier(&mut self.identifier_idx, &key); + let identifier = get_local_identifier(self.identifier_idx, &key); self.extra_attrs.push(JSXAttrOrSpread::JSXAttr(JSXAttr { span: DUMMY_SP, @@ -510,7 +510,7 @@ impl PropertyReducer<'_> { self.replace_object_with_prop_function = true; - let identifier = get_local_identifier(&mut self.identifier_idx, &value); + let identifier = get_local_identifier(self.identifier_idx, &value); self.extra_attrs.push(JSXAttrOrSpread::JSXAttr(JSXAttr { span: DUMMY_SP, @@ -521,7 +521,7 @@ impl PropertyReducer<'_> { })), })); - let key = get_prop_name2(&prop); + let key = get_prop_name2(prop); acc.push(PropOrSpread::Prop(Box::new(Prop::KeyValue(KeyValueProp { key, From 3f9cd6e8c5183de8ce2560347ad1d3005e911286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 6 Apr 2022 00:47:38 +0900 Subject: [PATCH 12/25] clippy --- packages/next-swc/crates/core/tests/full.rs | 2 +- .../styled_components/src/utils/analyzer.rs | 46 +++---- .../crates/styled_components/src/utils/mod.rs | 107 ++++++++-------- .../src/visitors/display_name_and_id.rs | 114 ++++++++---------- .../visitors/transpile_css_prop/transpile.rs | 19 ++- 5 files changed, 124 insertions(+), 164 deletions(-) diff --git a/packages/next-swc/crates/core/tests/full.rs b/packages/next-swc/crates/core/tests/full.rs index 5ca7a97dc51767f..f9af7b3c9db15d0 100644 --- a/packages/next-swc/crates/core/tests/full.rs +++ b/packages/next-swc/crates/core/tests/full.rs @@ -31,7 +31,7 @@ fn test(input: &Path, minify: bool) { swc: swc::config::Options { swcrc: true, is_module: swc::config::IsModule::Bool(true), - output_path: Some(output.to_path_buf()), + output_path: Some(output.clone()), config: swc::config::Config { jsc: swc::config::JscConfig { 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 46fba1ce552ab4f..7b1e4bd6520e361 100644 --- a/packages/next-swc/crates/styled_components/src/utils/analyzer.rs +++ b/packages/next-swc/crates/styled_components/src/utils/analyzer.rs @@ -63,35 +63,29 @@ impl Visit for Analyzer<'_> { v.visit_children_with(self); if let Pat::Ident(name) = &v.name { - match v.init.as_deref() { - Some(Expr::Call(CallExpr { - callee: Callee::Expr(callee), - args, - .. - })) => { - if callee.is_ident_ref_to("require".into()) - && args.len() == 1 - && args[0].spread.is_none() - { - match &*args[0].expr { - Expr::Lit(Lit::Str(v)) => { - 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 let Some(Expr::Call(CallExpr { + callee: Callee::Expr(callee), + args, + .. + })) = 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 is_styled { + self.state.styled_required = Some(name.id.to_id()); } } } - - _ => {} } } } 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 22f41193472ff37..fab9dea14f8718a 100644 --- a/packages/next-swc/crates/styled_components/src/utils/mod.rs +++ b/packages/next-swc/crates/styled_components/src/utils/mod.rs @@ -67,24 +67,21 @@ pub struct State { impl State { pub(crate) fn is_styled(&self, tag: &Expr) -> bool { - match tag { - Expr::Call(CallExpr { - callee: Callee::Expr(callee), + if let Expr::Call(CallExpr { + callee: Callee::Expr(callee), + .. + }) = tag + { + if let Expr::Member(MemberExpr { + obj, + prop: MemberProp::Ident(prop), .. - }) => match &**callee { - Expr::Member(MemberExpr { - obj, - prop: MemberProp::Ident(prop), - .. - }) => { - if prop.sym != js_word!("default") { - return self.is_styled(obj); - } + }) = &**callee + { + if prop.sym != js_word!("default") { + return self.is_styled(obj); } - _ => {} - }, - - _ => {} + } } match tag { @@ -92,28 +89,26 @@ impl State { obj, prop: MemberProp::Ident(prop), .. - }) => match &**obj { - Expr::Ident(obj) => { + }) => { + if let Expr::Ident(obj) = &**obj { if Some(obj.to_id()) == self.import_local_name("default", Some(obj)) && !self.is_helper(&Expr::Ident(prop.clone())) { return true; } } - _ => {} - }, + } Expr::Call(CallExpr { callee: Callee::Expr(callee), .. - }) => match &**callee { - Expr::Ident(callee) => { + }) => { + if let Expr::Ident(callee) = &**callee { if Some(callee.to_id()) == self.import_local_name("default", Some(callee)) { return true; } } - _ => {} - }, + } _ => {} } @@ -125,45 +120,42 @@ impl State { obj, prop: MemberProp::Ident(..), .. - }) => match &**obj { - Expr::Member(MemberExpr { + }) => { + if let Expr::Member(MemberExpr { obj: obj_of_obj, prop: MemberProp::Ident(prop), .. - }) => match &**obj_of_obj { - Expr::Ident(obj_of_obj) => { + }) = &**obj + { + if let Expr::Ident(obj_of_obj) = &**obj_of_obj { if prop.sym == js_word!("default") && obj_of_obj.to_id() == style_required { return true; } } - _ => {} - }, - _ => {} - }, + } + } Expr::Call(CallExpr { callee: Callee::Expr(callee), .. - }) => match &**callee { - Expr::Member(MemberExpr { + }) => { + if let Expr::Member(MemberExpr { obj: tag_callee_object, prop: MemberProp::Ident(tag_callee_property), .. - }) => match &**tag_callee_object { - Expr::Ident(tag_callee_object) => { + }) = &**callee + { + if let Expr::Ident(tag_callee_object) = &**tag_callee_object { if tag_callee_property.sym == js_word!("default") && tag_callee_object.to_id() == style_required { return true; } } - - _ => {} - }, - _ => {} - }, + } + } _ => {} } @@ -175,45 +167,42 @@ impl State { obj, prop: MemberProp::Ident(..), .. - }) => match &**obj { - Expr::Member(MemberExpr { + }) => { + if let Expr::Member(MemberExpr { obj: obj_of_obj, prop: MemberProp::Ident(prop), .. - }) => match &**obj_of_obj { - Expr::Ident(obj_of_obj) => { + }) = &**obj + { + if let Expr::Ident(obj_of_obj) = &**obj_of_obj { if prop.sym == js_word!("default") && obj_of_obj.to_id() == import_local_name { return true; } } - _ => {} - }, - _ => {} - }, + } + } Expr::Call(CallExpr { callee: Callee::Expr(callee), .. - }) => match &**callee { - Expr::Member(MemberExpr { + }) => { + if let Expr::Member(MemberExpr { obj: tag_callee_object, prop: MemberProp::Ident(tag_callee_property), .. - }) => match &**tag_callee_object { - Expr::Ident(tag_callee_object) => { + }) = &**callee + { + if let Expr::Ident(tag_callee_object) = &**tag_callee_object { if tag_callee_property.sym == js_word!("default") && tag_callee_object.to_id() == import_local_name { return true; } } - - _ => {} - }, - _ => {} - }, + } + } _ => {} } @@ -248,7 +237,7 @@ impl State { Some(if name == "default" { "styled".into() } else { - name.clone().into() + name.into() }) } else { None 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 0fd302cc94b79fd..b5050259a7e7859 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 @@ -63,7 +63,7 @@ impl DisplayNameAndId { FileName::Real(f) if self.config.file_name => { let block_name = self.get_block_name(f); - if block_name == &*component_name { + if block_name == *component_name { return component_name; } @@ -143,7 +143,6 @@ impl DisplayNameAndId { if let Some(Expr::Object(existing_config)) = args.get_mut(0).map(|v| &mut *v.expr) { if !already_has(existing_config) { existing_config.props.extend(with_config_props.take()); - } } } @@ -240,12 +239,8 @@ impl VisitMut for DisplayNameAndId { fn visit_mut_class_prop(&mut self, e: &mut ClassProp) { let old = self.cur_display_name.take(); - match &e.key { - PropName::Ident(i) => { - self.cur_display_name = Some(i.sym.clone()); - } - - _ => {} + if let PropName::Ident(i) = &e.key { + self.cur_display_name = Some(i.sym.clone()); } e.visit_mut_children_with(self); @@ -363,11 +358,8 @@ impl VisitMut for DisplayNameAndId { fn visit_mut_key_value_prop(&mut self, e: &mut KeyValueProp) { let old = self.cur_display_name.take(); - match &e.key { - PropName::Ident(name) => { - self.cur_display_name = Some(name.sym.clone()); - } - _ => {} + if let PropName::Ident(name) = &e.key { + self.cur_display_name = Some(name.sym.clone()); } e.visit_mut_children_with(self); @@ -378,11 +370,8 @@ impl VisitMut for DisplayNameAndId { fn visit_mut_var_declarator(&mut self, v: &mut VarDeclarator) { let old = self.cur_display_name.take(); - match &v.name { - Pat::Ident(name) => { - self.cur_display_name = Some(name.id.sym.clone()); - } - _ => {} + if let Pat::Ident(name) = &v.name { + self.cur_display_name = Some(name.id.sym.clone()); } v.visit_mut_children_with(self); @@ -402,12 +391,12 @@ fn get_callee(e: &Expr) -> Option<&Expr> { } fn get_property_as_ident(e: &Expr) -> Option<&JsWord> { - match e { - Expr::Member(MemberExpr { - prop: MemberProp::Ident(p), - .. - }) => return Some(&p.sym), - _ => {} + if let Expr::Member(MemberExpr { + prop: MemberProp::Ident(p), + .. + }) = e + { + return Some(&p.sym); } None @@ -431,57 +420,48 @@ fn get_existing_config(e: &mut Expr, op: F) where F: FnOnce(&mut Expr), { - match e { - Expr::Call(CallExpr { - callee: Callee::Expr(callee), + if let Expr::Call(CallExpr { + callee: Callee::Expr(callee), + .. + }) = e + { + if let Expr::Call(CallExpr { + callee: Callee::Expr(callee_callee), .. - }) => match &mut **callee { - Expr::Call(CallExpr { - callee: Callee::Expr(callee_callee), + }) = &mut **callee + { + if let Expr::Member(MemberExpr { + prop: MemberProp::Ident(prop), .. - }) => { - match &**callee_callee { - Expr::Member(MemberExpr { + }) = &**callee_callee + { + if &*prop.sym == "withConfig" { + return op(callee); + } + } + + if let Expr::Member(MemberExpr { + obj, + prop: MemberProp::Ident(..), + .. + }) = &mut **callee_callee + { + if let Expr::Call(CallExpr { + callee: Callee::Expr(callee), + .. + }) = &**obj + { + if let Expr::Member(MemberExpr { prop: MemberProp::Ident(prop), .. - }) => { + }) = &**callee + { if &*prop.sym == "withConfig" { - return op(callee); + op(obj) } } - _ => {} - } - - match &mut **callee_callee { - Expr::Member(MemberExpr { - obj, - prop: MemberProp::Ident(..), - .. - }) => match &**obj { - Expr::Call(CallExpr { - callee: Callee::Expr(callee), - .. - }) => match &**callee { - Expr::Member(MemberExpr { - prop: MemberProp::Ident(prop), - .. - }) => { - if &*prop.sym == "withConfig" { - op(obj) - } - } - - _ => {} - }, - _ => {} - }, - - _ => {} } } - - _ => {} - }, - _ => {} + } } } diff --git a/packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/transpile.rs b/packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/transpile.rs index e211959d93b2f4d..9fcb801e493d598 100644 --- a/packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/transpile.rs +++ b/packages/next-swc/crates/styled_components/src/visitors/transpile_css_prop/transpile.rs @@ -45,6 +45,7 @@ impl TranspileCssProp { *idx += 1; *idx } + #[allow(clippy::wrong_self_convention)] fn is_top_level_ident(&mut self, ident: &Ident) -> bool { self.top_level_decls .as_ref() @@ -367,20 +368,16 @@ impl VisitMut for TranspileCssProp { let body = std::mem::take(&mut n.body); for item in body { serialized_body.push(item.clone()); - match &item { - ModuleItem::Stmt(Stmt::Decl(Decl::Var(vd))) => { - for decl in &vd.decls { - if let Pat::Ident(ident) = &decl.name { - let id = ident.to_id(); - let stmts = self.interleaved_injections.remove(&id); - if let Some(stmts) = stmts { - serialized_body - .extend(stmts.into_iter().rev().map(ModuleItem::Stmt)); - } + if let ModuleItem::Stmt(Stmt::Decl(Decl::Var(vd))) = &item { + for decl in &vd.decls { + if let Pat::Ident(ident) = &decl.name { + let id = ident.to_id(); + let stmts = self.interleaved_injections.remove(&id); + if let Some(stmts) = stmts { + serialized_body.extend(stmts.into_iter().rev().map(ModuleItem::Stmt)); } } } - _ => {} } } n.body = serialized_body; From 40dfc2e48ef3cfbfc4513ef6f82d20d30e212767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 7 Apr 2022 15:01:27 +0900 Subject: [PATCH 13/25] Update crates --- packages/next-swc/Cargo.lock | 135 +++++++++--------- packages/next-swc/crates/core/Cargo.toml | 10 +- packages/next-swc/crates/emotion/Cargo.toml | 6 +- .../crates/modularize_imports/Cargo.toml | 4 +- packages/next-swc/crates/napi/Cargo.toml | 10 +- .../crates/styled_components/Cargo.toml | 8 +- .../next-swc/crates/styled_jsx/Cargo.toml | 10 +- packages/next-swc/crates/wasm/Cargo.toml | 6 +- 8 files changed, 98 insertions(+), 91 deletions(-) diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock index 11582593b51732a..07eef86f2367f38 100644 --- a/packages/next-swc/Cargo.lock +++ b/packages/next-swc/Cargo.lock @@ -742,6 +742,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "json_comments" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41ee439ee368ba4a77ac70d04f14015415af8600d6c894dc1f11bd79758c57d5" + [[package]] name = "lazy_static" version = "1.4.0" @@ -923,9 +929,9 @@ dependencies = [ [[package]] name = "mimalloc-rust" -version = "0.1.1" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffcd5c93c5b59f49b89b58100fad6ea023dbec6f9344f0d0932a96d9497821a" +checksum = "bcc30df9dfdb5bb6cb2470de65ca604c3eaa3e5dc2ad02a9a98f567df5844472" dependencies = [ "cty", "mimalloc-rust-sys", @@ -933,9 +939,9 @@ dependencies = [ [[package]] name = "mimalloc-rust-sys" -version = "1.7.2" +version = "1.7.3-source" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96f7f32dcc7aeb79781116048bbd27cc819b9db55805690b3379d536d40e9590" +checksum = "3adc8731262b982f4e0860770dba118305cafe1b2e7ebe95b29b2c2f46a70666" dependencies = [ "cc", "cty", @@ -1874,9 +1880,9 @@ dependencies = [ [[package]] name = "swc" -version = "0.161.1" +version = "0.164.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21ec4e431e58f946a96690e348e5a876534a2d99ccebc0690610f5410f0ccb89" +checksum = "661eab0d653f9f4a15ed5f832c4f2cb63823cb8e0aec4bed7f07ec4b73fb2c54" dependencies = [ "ahash", "anyhow", @@ -1884,6 +1890,7 @@ dependencies = [ "dashmap 5.1.0", "either", "indexmap", + "json_comments", "lru", "once_cell", "parking_lot", @@ -1928,9 +1935,9 @@ dependencies = [ [[package]] name = "swc_bundler" -version = "0.130.0" +version = "0.133.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7019f6b663117b77c085b4bc432d13370fd7715fe1a7e63cb54070756710133a" +checksum = "052dafe1f3a9144331ee15f0a3f2c5fe0bb535e19f0bc1ada374b2d0256c314c" dependencies = [ "ahash", "anyhow", @@ -2007,9 +2014,9 @@ dependencies = [ [[package]] name = "swc_css" -version = "0.103.0" +version = "0.104.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35b5f2bb2b2845da367ce7343e8c4821849694d4294fd54cdd8663bb08d04ac0" +checksum = "9835ebfd7815b71f9b8f2ae95f65defe06692f96b26ef39acbe7d64bd33aa1c4" dependencies = [ "swc_css_ast", "swc_css_codegen", @@ -2020,9 +2027,9 @@ dependencies = [ [[package]] name = "swc_css_ast" -version = "0.91.0" +version = "0.92.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f124ebd2d7588bb68e7902485a497a7f0e7e9876f113cd3f9f366a7bbb5bf7b4" +checksum = "8ee9ad91b962d5713f41a8d2222d1f4c78ee3e1a8f7529427bb7289277e52509" dependencies = [ "is-macro", "serde", @@ -2033,9 +2040,9 @@ dependencies = [ [[package]] name = "swc_css_codegen" -version = "0.100.0" +version = "0.101.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "895cfa7ee88d809ecefb9af9da2c1c8c2f45e58e303967cfe0aaa96d319064d7" +checksum = "b2bfa5fef9aa88ad90c643d17cfab1ab88d3bf32b351b4307e96ea3feae9aa65" dependencies = [ "auto_impl", "bitflags", @@ -2060,9 +2067,9 @@ dependencies = [ [[package]] name = "swc_css_parser" -version = "0.99.0" +version = "0.100.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7b306eb9375370f47c252d4f41068e0ca9e8d3f0d365142ba44be95287db149" +checksum = "63ba20eb665492621fee54b67432c29f58a8f440541d2c68f549d212cd595dea" dependencies = [ "bitflags", "lexical", @@ -2073,9 +2080,9 @@ dependencies = [ [[package]] name = "swc_css_prefixer" -version = "0.99.3" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301926ee69de04a6643f9c4ac8dcc67c6a5de3edd9fe218c6c2cf99f8c934652" +checksum = "6d2f68f0beb6ae804149d5aed2f6e791fc0c7a03bb2c5035dd57585b5a33780b" dependencies = [ "swc_atoms", "swc_common", @@ -2086,9 +2093,9 @@ dependencies = [ [[package]] name = "swc_css_utils" -version = "0.88.2" +version = "0.89.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57af5708496f58a8777f1e23b82fcb8745404a480fb5588a9ed57baf48c5bbe" +checksum = "1590d47d3d254226c4561b31e72347b5ac75ea7a49531d032fda65415b8990f3" dependencies = [ "swc_atoms", "swc_common", @@ -2098,9 +2105,9 @@ dependencies = [ [[package]] name = "swc_css_visit" -version = "0.90.0" +version = "0.91.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c60ac83b8c5ffc8e3ff1c2fb60036f30d7a747534df55d2f05bb01c66ed83427" +checksum = "7713c4d8255be1b7d5e93580fd2f32bfbb3c832a60be2941948e62442a207b04" dependencies = [ "swc_atoms", "swc_common", @@ -2110,9 +2117,9 @@ dependencies = [ [[package]] name = "swc_ecma_ast" -version = "0.73.0" +version = "0.75.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20447f3de45ecf25ecb13d7ca039fae8ea9c2acdcde1efb020526b5f7ffbc7a" +checksum = "72961898fbe56591997e667a1ec6a268383582810351c279a15ec710b6177d33" dependencies = [ "is-macro", "num-bigint", @@ -2125,9 +2132,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "0.101.0" +version = "0.103.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55757ca4dd7bd6882beeef38352e730ea06b772c14b1c49a46aa489605794def" +checksum = "99ca430d8ea2c8791d1341c4035431c90b87330e39479b4a6dabb4fded124e30" dependencies = [ "bitflags", "memchr", @@ -2157,9 +2164,9 @@ dependencies = [ [[package]] name = "swc_ecma_ext_transforms" -version = "0.63.0" +version = "0.65.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d94b94ebbace370a5b28c9b57801e52f43580a4813e33a3f23f1f228487a1fbe" +checksum = "c6a1fa7a3c4f26cea3858f9def2ff8c06d014cb9c0c3761847fac9db48f88fe7" dependencies = [ "phf", "swc_atoms", @@ -2171,9 +2178,9 @@ dependencies = [ [[package]] name = "swc_ecma_lints" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be74227a2b1d2bb0f6060ed905c7dc1b298cba279dc99c7ad5e7886f5bff144" +checksum = "5af16f1f01c10ef7793546a7e414ad2e89f479192eeea3ceb8c6b649f8f47dde" dependencies = [ "ahash", "auto_impl", @@ -2212,9 +2219,9 @@ dependencies = [ [[package]] name = "swc_ecma_minifier" -version = "0.97.2" +version = "0.100.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8e7de2647680236508cf7ea06fdfcdf5a9c4632a9fd5a5d99764818a77188d" +checksum = "b0ebe6519e5791ff6cc0d696d93b2ec65824bab188bc573c8ba97f7bb2e70366" dependencies = [ "ahash", "indexmap", @@ -2243,9 +2250,9 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.98.1" +version = "0.100.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e45b91e7d45fca94d60e31493475647ef7be6173e56d34aacdce3579dbd8c315" +checksum = "890d967031e3e7330cd7892f27d826b7b4f37c7caa19db85c78a0862e1fe3974" dependencies = [ "either", "enum_kind", @@ -2263,9 +2270,9 @@ dependencies = [ [[package]] name = "swc_ecma_preset_env" -version = "0.114.0" +version = "0.117.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc23914b7af5f5087e8888e82a2a1835386305a5cfe0252e5fb743c0c994d567" +checksum = "77a37c95c8e7e47a1fd6bf09ff2744fe55570235e8aba2c9373200213ec2ce25" dependencies = [ "ahash", "anyhow", @@ -2288,9 +2295,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms" -version = "0.139.0" +version = "0.142.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf12cb1884d8feaad7fbeb7f3196d3a3d30df8179eadd8b1785ac0471da261" +checksum = "f20e5e2d8ab843fa0454e049f73f6d99c444a8c0e2320f77028361ab75e2d18e" dependencies = [ "swc_atoms", "swc_common", @@ -2308,9 +2315,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.73.0" +version = "0.75.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98801b04bdcdd9a4870847416f07fc7c5fd0d1c9d3cfe90afa50062562d22bfa" +checksum = "404c6ea7ca61ceb2ce1f4ed448d1436a38c31b8c572850f04541c0229c966bbf" dependencies = [ "better_scoped_tls", "once_cell", @@ -2329,9 +2336,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "0.61.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27e3c8d1a0b800da20a831cc920d9a91fba1f369af547195f1869bc8354990d3" +checksum = "503f2f6bd0f9e6363a93406753bf64675163423774256a267c85a5d9b5b44b08" dependencies = [ "swc_atoms", "swc_common", @@ -2343,9 +2350,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_compat" -version = "0.86.2" +version = "0.89.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32c7565f1c220c99fc3c713ac09e172590cd89a9e3c5052141e51ad6ac8548b" +checksum = "1d234c84cee8aeeda2ec60087f65acd420e2475bb334a64bbf988b538c21b31d" dependencies = [ "ahash", "arrayvec 0.7.2", @@ -2382,9 +2389,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_module" -version = "0.99.0" +version = "0.102.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d185c341ff825c91b10cdb755bb04b4b1afc172a0d49c82e34456bef11a2b28" +checksum = "6c340a0228a9a49240d97a4a4e99a0a61e6613b29b427cc09a60f6ad4dcbf728" dependencies = [ "Inflector", "ahash", @@ -2406,9 +2413,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "0.109.1" +version = "0.112.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3cd507ce6a037d97cb4002577aed4889172b20410f6c75aac60322dfff8fa" +checksum = "a4d892a269f4fd26f37967fd8e98d841b379c1f66f2381c84b71f986792562fb" dependencies = [ "ahash", "dashmap 5.1.0", @@ -2429,9 +2436,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "0.94.0" +version = "0.97.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2f9247a4cec018ea30c5c877babaefff255d1187f4c23b4663af2a0a6ef5948" +checksum = "93d08411e517736b0167f3c9784fe9b98cc09308ae12e6072abd2bb2c2236da2" dependencies = [ "either", "serde", @@ -2448,9 +2455,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.101.0" +version = "0.104.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4ebd2bbd902ad2e490cf89441231942e3e42cb2f5ffd7b2f982f6b813ea2d8" +checksum = "43cda44270dfcc95d61582981baddaf53d96c5233ea7384e81cd6e462816c58e" dependencies = [ "ahash", "base64 0.13.0", @@ -2473,9 +2480,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_testing" -version = "0.75.0" +version = "0.77.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e088c1f7504ce44f35d933fbaba92c6da1421f29a6609256e17c1e56627b52ab" +checksum = "4388e2875202996bcd4bbbf3513369a94bf2135d55140fd0ae6c9e90fa3d0fec" dependencies = [ "ansi_term", "anyhow", @@ -2496,9 +2503,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "0.104.0" +version = "0.107.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82fa00fa362f8346c8d7ed4a464972f43471d56d6ad418efa3fca584d842fb79" +checksum = "a09397169ed7ce0751a82cb71655f3a4a1fb00d8863aabd5cca9b46eff3dd5f2" dependencies = [ "serde", "swc_atoms", @@ -2512,9 +2519,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.77.0" +version = "0.79.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e7128690ddd0f56f79572dabb973f0b237e503e23d6dbcc2fe111dc0690202" +checksum = "80f80b0e71cca39f27c903dad76b33112fe4a8348a0f5555a7cd6801d0ed15ed" dependencies = [ "indexmap", "once_cell", @@ -2528,9 +2535,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.59.0" +version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2348e0ce526f12e74c0b700f8fec234893386bb1afe1b8c3f46ad10aad22442f" +checksum = "b5ea00a52ba2b971955c62275696d5c59f3cf0cd06db74a66dec378ec9843c78" dependencies = [ "num-bigint", "swc_atoms", @@ -2542,9 +2549,9 @@ dependencies = [ [[package]] name = "swc_ecmascript" -version = "0.140.0" +version = "0.143.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "492ee96c31b4260e32485ae638820397bb103745d04533877ce193818ccc53f9" +checksum = "ebda93aa6422956c184a9eb5fdb0f0f0ff433169fa15e55ef445e5ad0b5e0abe" dependencies = [ "swc_ecma_ast", "swc_ecma_codegen", @@ -2616,9 +2623,9 @@ dependencies = [ [[package]] name = "swc_node_base" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32ab9aa6f4abcc9a96c2c2559444919658f1c395965468a205ecff5e5f5a020" +checksum = "0efb0cc6b36a0eef28e60dd677eceb343b336fb5c425f6f7abec640f8c230293" dependencies = [ "mimalloc-rust", ] diff --git a/packages/next-swc/crates/core/Cargo.toml b/packages/next-swc/crates/core/Cargo.toml index 4a91273ae119d2b..c676cf34cb7e3a7 100644 --- a/packages/next-swc/crates/core/Cargo.toml +++ b/packages/next-swc/crates/core/Cargo.toml @@ -21,17 +21,17 @@ emotion = {path="../emotion"} styled_components = {path="../styled_components"} styled_jsx = {path="../styled_jsx"} modularize_imports = {path="../modularize_imports"} -swc = "0.161.1" +swc = "0.164.0" swc_atoms = "0.2.11" -swc_common = { version = "0.17.18", features = ["concurrent", "sourcemap"] } +swc_common = { version = "0.17.19", features = ["concurrent", "sourcemap"] } swc_ecma_loader = { version = "0.29.0", features = ["node", "lru"] } -swc_ecmascript = { version = "0.140.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } -swc_node_base = "0.5.1" +swc_ecmascript = { version = "0.143.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } +swc_node_base = "0.5.2" swc_cached = "0.1.1" tracing = {version = "0.1.28", features = ["release_max_level_off"]} [dev-dependencies] -swc_ecma_transforms_testing = "0.75.0" +swc_ecma_transforms_testing = "0.77.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 0e18b4ca96bca4d..db3a65e662003e9 100644 --- a/packages/next-swc/crates/emotion/Cargo.toml +++ b/packages/next-swc/crates/emotion/Cargo.toml @@ -18,9 +18,9 @@ regex = "1.5" serde = "1" sourcemap = "6.0.1" swc_atoms = "0.2.11" -swc_common = {version = "0.17.18", features = ["concurrent", "sourcemap"]} -swc_ecmascript = {version = "0.140.0", features = ["codegen", "utils", "visit"]} +swc_common = { version = "0.17.19", features = ["concurrent", "sourcemap"] } +swc_ecmascript = { version = "0.143.0", features = ["codegen", "utils", "visit"] } [dev-dependencies] -swc_ecma_transforms_testing = "0.75.0" +swc_ecma_transforms_testing = "0.77.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 193de617ec7181b..ee829936c0bb849 100644 --- a/packages/next-swc/crates/modularize_imports/Cargo.toml +++ b/packages/next-swc/crates/modularize_imports/Cargo.toml @@ -14,8 +14,8 @@ once_cell = "1.8.0" regex = "1.5" serde = "1" swc_cached = "0.1.1" -swc_ecmascript = { version = "0.140.0", features = ["visit"] } +swc_ecmascript = { version = "0.143.0", features = ["visit"] } [dev-dependencies] -swc_ecma_transforms_testing = "0.75.0" +swc_ecma_transforms_testing = "0.77.0" testing = "0.19.1" diff --git a/packages/next-swc/crates/napi/Cargo.toml b/packages/next-swc/crates/napi/Cargo.toml index 3e388f0e9424529..f1f97094e6e4c38 100644 --- a/packages/next-swc/crates/napi/Cargo.toml +++ b/packages/next-swc/crates/napi/Cargo.toml @@ -17,13 +17,13 @@ next-swc = {version = "0.0.0", path = "../core"} once_cell = "1.8.0" serde = "1" serde_json = "1" -swc = "0.161.1" +swc = "0.164.0" swc_atoms = "0.2.11" -swc_bundler = { version = "0.130.0", features = ["concurrent"] } -swc_common = { version = "0.17.18", features = ["concurrent", "sourcemap"] } +swc_bundler = { version = "0.133.0", features = ["concurrent"] } +swc_common = { version = "0.17.19", features = ["concurrent", "sourcemap"] } swc_ecma_loader = { version = "0.29.0", features = ["node", "lru"] } -swc_ecmascript = { version = "0.140.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } -swc_node_base = "0.5.1" +swc_ecmascript = { version = "0.143.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } +swc_node_base = "0.5.2" [build-dependencies] napi-build = "1" diff --git a/packages/next-swc/crates/styled_components/Cargo.toml b/packages/next-swc/crates/styled_components/Cargo.toml index bc69784709df022..004547e14fdc390 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.19", features = ["concurrent"]} -swc_ecmascript = {version = "0.140.0", features = ["utils", "visit"]} +swc_common = { version = "0.17.19", features = ["concurrent"] } +swc_ecmascript = { version = "0.143.0", features = ["utils", "visit"] } tracing = "0.1" [dev-dependencies] serde_json = "1" -swc_ecma_transforms_testing = "0.75.0" -swc_ecmascript = {version = "0.140.0", features = ["parser", "transforms"]} +swc_ecma_transforms_testing = "0.77.0" +swc_ecmascript = { version = "0.143.0", features = ["parser", "transforms"] } testing = "0.19.1" diff --git a/packages/next-swc/crates/styled_jsx/Cargo.toml b/packages/next-swc/crates/styled_jsx/Cargo.toml index 3124e595eb3bd99..18cd0dc79bed1c1 100644 --- a/packages/next-swc/crates/styled_jsx/Cargo.toml +++ b/packages/next-swc/crates/styled_jsx/Cargo.toml @@ -10,12 +10,12 @@ version = "0.1.0" [dependencies] easy-error = "1.0.0" -swc_common = {version = "0.17.18", features = ["concurrent", "sourcemap"]} -swc_css = "0.103.0" -swc_css_prefixer = "0.99.3" -swc_ecmascript = {version = "0.140.0", features = ["parser", "minifier", "utils", "visit"]} +swc_common = { version = "0.17.19", features = ["concurrent", "sourcemap"] } +swc_css = "0.104.1" +swc_css_prefixer = "0.100.0" +swc_ecmascript = { version = "0.143.0", features = ["parser", "minifier", "utils", "visit"] } tracing = {version = "0.1.28"} [dev-dependencies] -swc_ecma_transforms_testing = "0.75.0" +swc_ecma_transforms_testing = "0.77.0" testing = "0.19.1" diff --git a/packages/next-swc/crates/wasm/Cargo.toml b/packages/next-swc/crates/wasm/Cargo.toml index ecd35fa998df097..04473c46d0d3739 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.161.1" -swc_common = { version = "0.17.18", features = ["concurrent", "sourcemap"] } -swc_ecmascript = { version = "0.140.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } +swc = "0.164.0" +swc_common = { version = "0.17.19", features = ["concurrent", "sourcemap"] } +swc_ecmascript = { version = "0.143.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } tracing = {version = "0.1.28", features = ["release_max_level_off"]} wasm-bindgen = {version = "0.2", features = ["serde-serialize"]} wasm-bindgen-futures = "0.4.8" From bda9eb6ee261d1a8be86486ace25c85f14e975f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 7 Apr 2022 15:01:50 +0900 Subject: [PATCH 14/25] fixup --- packages/next-swc/crates/core/src/hook_optimizer.rs | 1 + packages/next-swc/crates/styled_components/src/utils/mod.rs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/next-swc/crates/core/src/hook_optimizer.rs b/packages/next-swc/crates/core/src/hook_optimizer.rs index 7b0726ca2256f13..6c95deb9740e0fc 100644 --- a/packages/next-swc/crates/core/src/hook_optimizer.rs +++ b/packages/next-swc/crates/core/src/hook_optimizer.rs @@ -104,6 +104,7 @@ fn get_object_pattern(array_pattern: &ArrayPat) -> Pat { key: PropName::Num(Number { value: i as f64, span: DUMMY_SP, + raw: None, }), value: Box::new(elem.clone()), }) 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 fab9dea14f8718a..5326c144cff6a63 100644 --- a/packages/next-swc/crates/styled_components/src/utils/mod.rs +++ b/packages/next-swc/crates/styled_components/src/utils/mod.rs @@ -26,7 +26,7 @@ pub(crate) fn prop_name_to_expr(p: &PropName) -> Cow { match p { PropName::Ident(p) => Cow::Owned(Expr::Ident(p.clone())), PropName::Str(p) => Cow::Owned(Expr::Lit(Lit::Str(p.clone()))), - PropName::Num(p) => Cow::Owned(Expr::Lit(Lit::Num(*p))), + PropName::Num(p) => Cow::Owned(Expr::Lit(Lit::Num(p.clone()))), PropName::BigInt(p) => Cow::Owned(Expr::Lit(Lit::BigInt(p.clone()))), PropName::Computed(e) => Cow::Borrowed(&e.expr), } From 92408898c338799f33c67b2846d74aeab597a985 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 7 Apr 2022 15:21:33 +0900 Subject: [PATCH 15/25] publish --- packages/next-swc/crates/emotion/Cargo.toml | 1 + packages/next-swc/crates/modularize_imports/Cargo.toml | 3 ++- packages/next-swc/crates/styled_components/Cargo.toml | 2 +- packages/next-swc/crates/styled_jsx/Cargo.toml | 5 +++-- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/next-swc/crates/emotion/Cargo.toml b/packages/next-swc/crates/emotion/Cargo.toml index db3a65e662003e9..1f35e035e426c3c 100644 --- a/packages/next-swc/crates/emotion/Cargo.toml +++ b/packages/next-swc/crates/emotion/Cargo.toml @@ -1,6 +1,7 @@ [package] authors = ["next.js developers"] edition = "2018" +description = "AST Transforms for emotion" license = "Apache-2.0" name = "emotion" repository = "https://github.com/vercel/next.js.git" diff --git a/packages/next-swc/crates/modularize_imports/Cargo.toml b/packages/next-swc/crates/modularize_imports/Cargo.toml index ee829936c0bb849..d5906df117e637a 100644 --- a/packages/next-swc/crates/modularize_imports/Cargo.toml +++ b/packages/next-swc/crates/modularize_imports/Cargo.toml @@ -1,5 +1,6 @@ [package] authors = ["next.js developers"] +description = "AST Transforms for import modularizer" edition = "2018" license = "Apache-2.0" name = "modularize_imports" @@ -14,7 +15,7 @@ once_cell = "1.8.0" regex = "1.5" serde = "1" swc_cached = "0.1.1" -swc_ecmascript = { version = "0.143.0", features = ["visit"] } +swc_ecmascript = {version = "0.143.0", features = ["visit"]} [dev-dependencies] swc_ecma_transforms_testing = "0.77.0" diff --git a/packages/next-swc/crates/styled_components/Cargo.toml b/packages/next-swc/crates/styled_components/Cargo.toml index 004547e14fdc390..e7d6e20cec3101f 100644 --- a/packages/next-swc/crates/styled_components/Cargo.toml +++ b/packages/next-swc/crates/styled_components/Cargo.toml @@ -1,6 +1,6 @@ [package] authors = ["강동윤 "] -description = "AST Transforms for styled-components, without dependency on plugin apis" +description = "AST Transforms for styled-components" edition = "2018" license = "Apache-2.0" name = "styled_components" diff --git a/packages/next-swc/crates/styled_jsx/Cargo.toml b/packages/next-swc/crates/styled_jsx/Cargo.toml index 18cd0dc79bed1c1..a79a9682283cae2 100644 --- a/packages/next-swc/crates/styled_jsx/Cargo.toml +++ b/packages/next-swc/crates/styled_jsx/Cargo.toml @@ -1,5 +1,6 @@ [package] authors = ["next.js developers"] +description = "AST transforms for styled-jsx" edition = "2018" license = "Apache-2.0" name = "styled_jsx" @@ -10,10 +11,10 @@ version = "0.1.0" [dependencies] easy-error = "1.0.0" -swc_common = { version = "0.17.19", features = ["concurrent", "sourcemap"] } +swc_common = {version = "0.17.19", features = ["concurrent", "sourcemap"]} swc_css = "0.104.1" swc_css_prefixer = "0.100.0" -swc_ecmascript = { version = "0.143.0", features = ["parser", "minifier", "utils", "visit"] } +swc_ecmascript = {version = "0.143.0", features = ["parser", "minifier", "utils", "visit"]} tracing = {version = "0.1.28"} [dev-dependencies] From ae25949d0c91330be5e13556e37030bfa5c9d5aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 7 Apr 2022 15:22:40 +0900 Subject: [PATCH 16/25] Bump --- packages/next-swc/Cargo.lock | 4 ++-- packages/next-swc/crates/emotion/Cargo.toml | 2 +- packages/next-swc/crates/styled_components/Cargo.toml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock index 07eef86f2367f38..611c09ed8e316aa 100644 --- a/packages/next-swc/Cargo.lock +++ b/packages/next-swc/Cargo.lock @@ -488,7 +488,7 @@ checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" [[package]] name = "emotion" -version = "0.1.0" +version = "0.2.0" dependencies = [ "base64 0.13.0", "byteorder", @@ -1821,7 +1821,7 @@ checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" [[package]] name = "styled_components" -version = "0.25.0" +version = "0.26.0" dependencies = [ "Inflector", "once_cell", diff --git a/packages/next-swc/crates/emotion/Cargo.toml b/packages/next-swc/crates/emotion/Cargo.toml index 1f35e035e426c3c..45c8f6dcee3ce53 100644 --- a/packages/next-swc/crates/emotion/Cargo.toml +++ b/packages/next-swc/crates/emotion/Cargo.toml @@ -5,7 +5,7 @@ description = "AST Transforms for emotion" license = "Apache-2.0" name = "emotion" repository = "https://github.com/vercel/next.js.git" -version = "0.1.0" +version = "0.2.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/packages/next-swc/crates/styled_components/Cargo.toml b/packages/next-swc/crates/styled_components/Cargo.toml index e7d6e20cec3101f..eeb252ca43264fe 100644 --- a/packages/next-swc/crates/styled_components/Cargo.toml +++ b/packages/next-swc/crates/styled_components/Cargo.toml @@ -5,7 +5,7 @@ edition = "2018" license = "Apache-2.0" name = "styled_components" repository = "https://github.com/vercel/next.js.git" -version = "0.25.0" +version = "0.26.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 4be21b868671dec1716ae423aef60c66c37feb82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 7 Apr 2022 15:25:06 +0900 Subject: [PATCH 17/25] Rename --- packages/next-swc/Cargo.lock | 40 +++++++++---------- packages/next-swc/crates/core/Cargo.toml | 2 +- packages/next-swc/crates/core/src/lib.rs | 4 +- packages/next-swc/crates/emotion/Cargo.toml | 2 +- .../next-swc/crates/emotion/tests/fixture.rs | 4 +- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock index 611c09ed8e316aa..5e4f9508f6aa62f 100644 --- a/packages/next-swc/Cargo.lock +++ b/packages/next-swc/Cargo.lock @@ -486,25 +486,6 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" -[[package]] -name = "emotion" -version = "0.2.0" -dependencies = [ - "base64 0.13.0", - "byteorder", - "fxhash", - "once_cell", - "radix_fmt", - "regex", - "serde", - "sourcemap", - "swc_atoms", - "swc_common", - "swc_ecma_transforms_testing", - "swc_ecmascript", - "testing", -] - [[package]] name = "enum_kind" version = "0.2.1" @@ -1025,7 +1006,6 @@ dependencies = [ "chrono", "easy-error", "either", - "emotion", "fxhash", "modularize_imports", "once_cell", @@ -1042,6 +1022,7 @@ dependencies = [ "swc_ecma_loader", "swc_ecma_transforms_testing", "swc_ecmascript", + "swc_emotion", "swc_node_base", "testing", "tracing", @@ -2562,6 +2543,25 @@ dependencies = [ "swc_ecma_visit", ] +[[package]] +name = "swc_emotion" +version = "0.2.0" +dependencies = [ + "base64 0.13.0", + "byteorder", + "fxhash", + "once_cell", + "radix_fmt", + "regex", + "serde", + "sourcemap", + "swc_atoms", + "swc_common", + "swc_ecma_transforms_testing", + "swc_ecmascript", + "testing", +] + [[package]] name = "swc_eq_ignore_macros" version = "0.1.0" diff --git a/packages/next-swc/crates/core/Cargo.toml b/packages/next-swc/crates/core/Cargo.toml index c676cf34cb7e3a7..84eae80346d324a 100644 --- a/packages/next-swc/crates/core/Cargo.toml +++ b/packages/next-swc/crates/core/Cargo.toml @@ -17,7 +17,7 @@ pathdiff = "0.2.0" regex = "1.5" serde = "1" serde_json = "1" -emotion = {path="../emotion"} +swc_emotion = {path="../emotion"} styled_components = {path="../styled_components"} styled_jsx = {path="../styled_jsx"} modularize_imports = {path="../modularize_imports"} diff --git a/packages/next-swc/crates/core/src/lib.rs b/packages/next-swc/crates/core/src/lib.rs index f0a8a9112292c6b..317804472aa42b6 100644 --- a/packages/next-swc/crates/core/src/lib.rs +++ b/packages/next-swc/crates/core/src/lib.rs @@ -100,7 +100,7 @@ pub struct TransformOptions { pub shake_exports: Option, #[serde(default)] - pub emotion: Option, + pub emotion: Option, #[serde(default)] pub modularize_imports: Option, @@ -185,7 +185,7 @@ pub fn custom_before_pass<'a, C: Comments + 'a>( } if let FileName::Real(path) = &file.name { path.to_str().map(|_| { - Either::Left(emotion::EmotionTransformer::new( + Either::Left(swc_emotion::EmotionTransformer::new( config.clone(), path, cm, diff --git a/packages/next-swc/crates/emotion/Cargo.toml b/packages/next-swc/crates/emotion/Cargo.toml index 45c8f6dcee3ce53..6ce704dc6cf8fe1 100644 --- a/packages/next-swc/crates/emotion/Cargo.toml +++ b/packages/next-swc/crates/emotion/Cargo.toml @@ -3,7 +3,7 @@ authors = ["next.js developers"] edition = "2018" description = "AST Transforms for emotion" license = "Apache-2.0" -name = "emotion" +name = "swc_emotion" repository = "https://github.com/vercel/next.js.git" version = "0.2.0" diff --git a/packages/next-swc/crates/emotion/tests/fixture.rs b/packages/next-swc/crates/emotion/tests/fixture.rs index 3268dbc1fc53d1f..5918b0684178cdb 100644 --- a/packages/next-swc/crates/emotion/tests/fixture.rs +++ b/packages/next-swc/crates/emotion/tests/fixture.rs @@ -1,12 +1,12 @@ use std::path::PathBuf; -use emotion::EmotionOptions; use swc_common::{chain, comments::SingleThreadedComments, Mark}; use swc_ecma_transforms_testing::test_fixture; use swc_ecmascript::{ parser::{Syntax, TsConfig}, transforms::react::{jsx, Runtime}, }; +use swc_emotion::EmotionOptions; use testing::fixture; fn ts_syntax() -> Syntax { @@ -38,7 +38,7 @@ fn next_emotion_fixture(input: PathBuf) { top_level_mark, ); chain!( - emotion::emotion( + swc_emotion::emotion( EmotionOptions { enabled: Some(true), sourcemap: Some(true), From c2a5b2e66de3fb983e932ae9fdd8a357dcb0dcdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 7 Apr 2022 17:54:02 +0900 Subject: [PATCH 18/25] authors --- packages/next-swc/Cargo.lock | 6 +++--- packages/next-swc/crates/emotion/Cargo.toml | 4 ++-- packages/next-swc/crates/modularize_imports/Cargo.toml | 4 ++-- packages/next-swc/crates/styled_jsx/Cargo.toml | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock index 5e4f9508f6aa62f..7c3b0b3cbb33bf4 100644 --- a/packages/next-swc/Cargo.lock +++ b/packages/next-swc/Cargo.lock @@ -946,7 +946,7 @@ dependencies = [ [[package]] name = "modularize_imports" -version = "0.1.0" +version = "0.1.1" dependencies = [ "handlebars", "once_cell", @@ -1819,7 +1819,7 @@ dependencies = [ [[package]] name = "styled_jsx" -version = "0.1.0" +version = "0.1.1" dependencies = [ "easy-error", "swc_common", @@ -2545,7 +2545,7 @@ dependencies = [ [[package]] name = "swc_emotion" -version = "0.2.0" +version = "0.2.1" dependencies = [ "base64 0.13.0", "byteorder", diff --git a/packages/next-swc/crates/emotion/Cargo.toml b/packages/next-swc/crates/emotion/Cargo.toml index 6ce704dc6cf8fe1..df6db10f587994a 100644 --- a/packages/next-swc/crates/emotion/Cargo.toml +++ b/packages/next-swc/crates/emotion/Cargo.toml @@ -1,11 +1,11 @@ [package] -authors = ["next.js developers"] +authors = ["강동윤 "] edition = "2018" description = "AST Transforms for emotion" license = "Apache-2.0" name = "swc_emotion" repository = "https://github.com/vercel/next.js.git" -version = "0.2.0" +version = "0.2.1" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/packages/next-swc/crates/modularize_imports/Cargo.toml b/packages/next-swc/crates/modularize_imports/Cargo.toml index d5906df117e637a..8175e8abcfaac79 100644 --- a/packages/next-swc/crates/modularize_imports/Cargo.toml +++ b/packages/next-swc/crates/modularize_imports/Cargo.toml @@ -1,11 +1,11 @@ [package] -authors = ["next.js developers"] +authors = ["강동윤 "] description = "AST Transforms for import modularizer" edition = "2018" license = "Apache-2.0" name = "modularize_imports" repository = "https://github.com/vercel/next.js.git" -version = "0.1.0" +version = "0.1.1" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/packages/next-swc/crates/styled_jsx/Cargo.toml b/packages/next-swc/crates/styled_jsx/Cargo.toml index a79a9682283cae2..a27445fefe19498 100644 --- a/packages/next-swc/crates/styled_jsx/Cargo.toml +++ b/packages/next-swc/crates/styled_jsx/Cargo.toml @@ -1,11 +1,11 @@ [package] -authors = ["next.js developers"] +authors = ["강동윤 "] description = "AST transforms for styled-jsx" edition = "2018" license = "Apache-2.0" name = "styled_jsx" repository = "https://github.com/vercel/next.js.git" -version = "0.1.0" +version = "0.1.1" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From b97b6cea4aa9a19dfaa25756505c19dd38ccf619 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 8 Apr 2022 18:41:13 +0900 Subject: [PATCH 19/25] Update --- packages/next-swc/Cargo.lock | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock index 7c3b0b3cbb33bf4..4af18f41d2b55b6 100644 --- a/packages/next-swc/Cargo.lock +++ b/packages/next-swc/Cargo.lock @@ -63,12 +63,6 @@ version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27" -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - [[package]] name = "arrayvec" version = "0.7.2" @@ -1729,19 +1723,19 @@ dependencies = [ [[package]] name = "st-map" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3caeb13a58f859600a7b75fffe66322e1fca0122ca02cfc7262344a7e30502d1" +checksum = "bc9c9f3a1df5f73b7392bd9773108fef41ad9126f0282412fd5904389f0c0c4f" dependencies = [ - "arrayvec 0.5.2", + "arrayvec", "static-map-macro", ] [[package]] name = "static-map-macro" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5503e07f148238811bbfd578684a0457c7284bab41b60d76def35431a1295fd" +checksum = "752564de9cd8937fdbc1c55d47ac391758c352ab3755607cc391b659fe87d56b" dependencies = [ "pmutil", "proc-macro2", @@ -2336,7 +2330,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d234c84cee8aeeda2ec60087f65acd420e2475bb334a64bbf988b538c21b31d" dependencies = [ "ahash", - "arrayvec 0.7.2", + "arrayvec", "indexmap", "is-macro", "num-bigint", From 5f7b7bd4ee594946d9d2cca96310dce08d8dea18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 8 Apr 2022 18:44:56 +0900 Subject: [PATCH 20/25] More update --- examples/bug-swcMinify-next-12.1.1 | 1 + packages/next-swc/Cargo.lock | 43 +++++++++---------- packages/next-swc/crates/core/Cargo.toml | 2 +- .../crates/styled_components/Cargo.toml | 2 +- .../next-swc/crates/styled_jsx/Cargo.toml | 2 +- packages/next-swc/crates/wasm/Cargo.toml | 2 +- 6 files changed, 26 insertions(+), 26 deletions(-) create mode 160000 examples/bug-swcMinify-next-12.1.1 diff --git a/examples/bug-swcMinify-next-12.1.1 b/examples/bug-swcMinify-next-12.1.1 new file mode 160000 index 000000000000000..80dc5ae8231d5bf --- /dev/null +++ b/examples/bug-swcMinify-next-12.1.1 @@ -0,0 +1 @@ +Subproject commit 80dc5ae8231d5bf5490118aa84788190a1267609 diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock index 4af18f41d2b55b6..9468a968e4303af 100644 --- a/packages/next-swc/Cargo.lock +++ b/packages/next-swc/Cargo.lock @@ -819,9 +819,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.14" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" dependencies = [ "cfg-if 1.0.0", ] @@ -1048,13 +1048,12 @@ dependencies = [ [[package]] name = "nom" -version = "7.1.0" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d11e1ef389c76fe5b81bcaf2ea32cf88b62bc494e19f493d0b30e7a930109" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" dependencies = [ "memchr", "minimal-lexical", - "version_check", ] [[package]] @@ -1336,14 +1335,14 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "preset_env_base" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e44b8d534a4ecea4519138ff80780a499691c4e948bc063651487e069966a703" +checksum = "44b10336bf81e96a223c487607acb08a1407d3e208a65e477190e3fe51fc5dea" dependencies = [ "ahash", "anyhow", "browserslist-rs", - "dashmap 4.0.2", + "dashmap 5.1.0", "from_variant", "once_cell", "semver 1.0.6", @@ -1959,9 +1958,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.17.19" +version = "0.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00edee63ed3957d0842ac91f04010b04a5c240c752924fa53e6ebe72888b523a" +checksum = "41b22848d9ad250e618289ea94a171392aea86d8d878caf0b1cad4589521b6f7" dependencies = [ "ahash", "ast_node", @@ -2055,9 +2054,9 @@ dependencies = [ [[package]] name = "swc_css_prefixer" -version = "0.100.0" +version = "0.100.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2f68f0beb6ae804149d5aed2f6e791fc0c7a03bb2c5035dd57585b5a33780b" +checksum = "18c5f217ee19b60c74fd3a26eba2d778da094c6f8c6f581142656845491f7051" dependencies = [ "swc_atoms", "swc_common", @@ -2194,9 +2193,9 @@ dependencies = [ [[package]] name = "swc_ecma_minifier" -version = "0.100.2" +version = "0.100.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0ebe6519e5791ff6cc0d696d93b2ec65824bab188bc573c8ba97f7bb2e70366" +checksum = "f0fed7b2e1039f410e1fc194783a068d09e6436fc8aad65e58e7c75e66fa0514" dependencies = [ "ahash", "indexmap", @@ -2494,9 +2493,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.79.0" +version = "0.79.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80f80b0e71cca39f27c903dad76b33112fe4a8348a0f5555a7cd6801d0ed15ed" +checksum = "44ee8d60b9977f58214af7102dc30855a6754e742afe6d6e26e5bf13883c7b91" dependencies = [ "indexmap", "once_cell", @@ -2605,9 +2604,9 @@ dependencies = [ [[package]] name = "swc_macros_common" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08ed2e930f5a1a4071fe62c90fd3a296f6030e5d94bfe13993244423caf59a78" +checksum = "033f8b6e2fc4991a8e422a20b4f52741affcac2267c29357c931508a1a500797" dependencies = [ "pmutil", "proc-macro2", @@ -2848,9 +2847,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa31669fa42c09c34d94d8165dd2012e8ff3c66aca50f3bb226b68f216f2706c" +checksum = "90442985ee2f57c9e1b548ee72ae842f4a9a20e3f417cc38dbc5dc684d9bb4ee" dependencies = [ "lazy_static", "valuable", @@ -2869,9 +2868,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e0ab7bdc962035a87fba73f3acca9b8a8d0034c2e6f60b84aeaaddddc155dce" +checksum = "b9df98b037d039d03400d9dd06b0f8ce05486b5f25e9a2d7d36196e142ebbc52" dependencies = [ "ansi_term", "lazy_static", diff --git a/packages/next-swc/crates/core/Cargo.toml b/packages/next-swc/crates/core/Cargo.toml index 84eae80346d324a..73aae3012746e71 100644 --- a/packages/next-swc/crates/core/Cargo.toml +++ b/packages/next-swc/crates/core/Cargo.toml @@ -28,7 +28,7 @@ swc_ecma_loader = { version = "0.29.0", features = ["node", "lru"] } swc_ecmascript = { version = "0.143.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } swc_node_base = "0.5.2" swc_cached = "0.1.1" -tracing = {version = "0.1.28", features = ["release_max_level_off"]} +tracing = { version = "0.1.32", features = ["release_max_level_off"] } [dev-dependencies] diff --git a/packages/next-swc/crates/styled_components/Cargo.toml b/packages/next-swc/crates/styled_components/Cargo.toml index eeb252ca43264fe..058ea0c33a73151 100644 --- a/packages/next-swc/crates/styled_components/Cargo.toml +++ b/packages/next-swc/crates/styled_components/Cargo.toml @@ -17,7 +17,7 @@ serde = {version = "1.0.130", features = ["derive"]} swc_atoms = "0.2.11" swc_common = { version = "0.17.19", features = ["concurrent"] } swc_ecmascript = { version = "0.143.0", features = ["utils", "visit"] } -tracing = "0.1" +tracing = "0.1.32" [dev-dependencies] serde_json = "1" diff --git a/packages/next-swc/crates/styled_jsx/Cargo.toml b/packages/next-swc/crates/styled_jsx/Cargo.toml index a27445fefe19498..60867e2241e299a 100644 --- a/packages/next-swc/crates/styled_jsx/Cargo.toml +++ b/packages/next-swc/crates/styled_jsx/Cargo.toml @@ -15,7 +15,7 @@ swc_common = {version = "0.17.19", features = ["concurrent", "sourcemap"]} swc_css = "0.104.1" swc_css_prefixer = "0.100.0" swc_ecmascript = {version = "0.143.0", features = ["parser", "minifier", "utils", "visit"]} -tracing = {version = "0.1.28"} +tracing = "0.1.32" [dev-dependencies] swc_ecma_transforms_testing = "0.77.0" diff --git a/packages/next-swc/crates/wasm/Cargo.toml b/packages/next-swc/crates/wasm/Cargo.toml index 04473c46d0d3739..2e8d5b542d49a09 100644 --- a/packages/next-swc/crates/wasm/Cargo.toml +++ b/packages/next-swc/crates/wasm/Cargo.toml @@ -19,6 +19,6 @@ serde_json = "1" swc = "0.164.0" swc_common = { version = "0.17.19", features = ["concurrent", "sourcemap"] } swc_ecmascript = { version = "0.143.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } -tracing = {version = "0.1.28", features = ["release_max_level_off"]} +tracing = { version = "0.1.32", features = ["release_max_level_off"] } wasm-bindgen = {version = "0.2", features = ["serde-serialize"]} wasm-bindgen-futures = "0.4.8" From bb1a0ceb84fa98d94525c5b2cedd0f99a4fd57bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 8 Apr 2022 18:47:41 +0900 Subject: [PATCH 21/25] Oh --- examples/bug-swcMinify-next-12.1.1 | 1 - 1 file changed, 1 deletion(-) delete mode 160000 examples/bug-swcMinify-next-12.1.1 diff --git a/examples/bug-swcMinify-next-12.1.1 b/examples/bug-swcMinify-next-12.1.1 deleted file mode 160000 index 80dc5ae8231d5bf..000000000000000 --- a/examples/bug-swcMinify-next-12.1.1 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 80dc5ae8231d5bf5490118aa84788190a1267609 From 1241b24a01ea83d78e4bb3b9439ffb9e49e0131f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 8 Apr 2022 18:51:07 +0900 Subject: [PATCH 22/25] Update test refs --- .../crates/styled_jsx/tests/fixture/expressions/output.js | 6 +++--- .../fixture/tpl-placeholder-2-as-part-of-value/output.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/next-swc/crates/styled_jsx/tests/fixture/expressions/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/expressions/output.js index 965396751309d26..2ece556c56cf167 100644 --- a/packages/next-swc/crates/styled_jsx/tests/fixture/expressions/output.js +++ b/packages/next-swc/crates/styled_jsx/tests/fixture/expressions/output.js @@ -17,7 +17,7 @@ export default (({ display })=>
{`p.__jsx-style-dynamic-selector{color:${darken(color)}}`} - <_JSXStyle id={"b29f0adf1035840b"} dynamic={[ + <_JSXStyle id={"f297f0e8b24d55b4"} dynamic={[ darken(color) + 2 ]}>{`p.__jsx-style-dynamic-selector{color:${darken(color) + 2}}`} diff --git a/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-2-as-part-of-value/output.js b/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-2-as-part-of-value/output.js index 0c5494d7423102a..fec6fa48cb6b035 100644 --- a/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-2-as-part-of-value/output.js +++ b/packages/next-swc/crates/styled_jsx/tests/fixture/tpl-placeholder-2-as-part-of-value/output.js @@ -3,7 +3,7 @@ export default class { render() { return
test

- <_JSXStyle id={"cdb278181c7e83cf"} dynamic={[ + <_JSXStyle id={"5fd7f2008eca3a62"} dynamic={[ a[b], -1 * (c || 0), d From 770e183b55fe5ec3741f79d59ff61a3bed6cfa54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 8 Apr 2022 20:03:48 +0900 Subject: [PATCH 23/25] Update test refs --- .../__snapshots__/ReactRefreshLogBox.test.ts.snap | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/test/development/acceptance/__snapshots__/ReactRefreshLogBox.test.ts.snap b/test/development/acceptance/__snapshots__/ReactRefreshLogBox.test.ts.snap index dc2f222b85f8348..02f775b461d12b5 100644 --- a/test/development/acceptance/__snapshots__/ReactRefreshLogBox.test.ts.snap +++ b/test/development/acceptance/__snapshots__/ReactRefreshLogBox.test.ts.snap @@ -130,29 +130,31 @@ exports[`ReactRefreshLogBox syntax > runtime error 1`] = ` exports[`ReactRefreshLogBox syntax > runtime error 2`] = ` "./index.js Error: - x Unexpected eof + x Expected '}', got '' ,---- 8 | export default function FunctionNamed() { - : ^ + : ^ \`---- Caused by: 0: failed to process input file - 1: Syntax Error" + 1: error was recoverable, but proceeding would result in wrong codegen + 2: Syntax Error" `; exports[`ReactRefreshLogBox syntax > runtime error 3`] = ` "./index.js Error: - x Unexpected eof + x Expected '}', got '' ,---- 8 | export default function FunctionNamed() { - : ^ + : ^ \`---- Caused by: 0: failed to process input file - 1: Syntax Error" + 1: error was recoverable, but proceeding would result in wrong codegen + 2: Syntax Error" `; exports[`ReactRefreshLogBox unterminated JSX 1`] = ` From 2d6cd07fb9b640a975678189c3bec1cd1b075264 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Sat, 9 Apr 2022 20:31:44 +0900 Subject: [PATCH 24/25] Update again --- packages/next-swc/Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock index 9468a968e4303af..7ff3f438118d560 100644 --- a/packages/next-swc/Cargo.lock +++ b/packages/next-swc/Cargo.lock @@ -2193,9 +2193,9 @@ dependencies = [ [[package]] name = "swc_ecma_minifier" -version = "0.100.4" +version = "0.100.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0fed7b2e1039f410e1fc194783a068d09e6436fc8aad65e58e7c75e66fa0514" +checksum = "3351240509020dcfec0442907fff87c7023dd2ff4bf42aefec01a7e38d58babf" dependencies = [ "ahash", "indexmap", From 261b1a8ad8b497e0d61d8446c8ab56ef60a69348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Sun, 10 Apr 2022 15:19:13 +0900 Subject: [PATCH 25/25] Fix --- packages/next-swc/Cargo.lock | 1 - packages/next-swc/crates/core/Cargo.toml | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock index 7ff3f438118d560..e8a620ebb9d6690 100644 --- a/packages/next-swc/Cargo.lock +++ b/packages/next-swc/Cargo.lock @@ -1017,7 +1017,6 @@ dependencies = [ "swc_ecma_transforms_testing", "swc_ecmascript", "swc_emotion", - "swc_node_base", "testing", "tracing", "walkdir", diff --git a/packages/next-swc/crates/core/Cargo.toml b/packages/next-swc/crates/core/Cargo.toml index 73aae3012746e71..057f502c92fb11c 100644 --- a/packages/next-swc/crates/core/Cargo.toml +++ b/packages/next-swc/crates/core/Cargo.toml @@ -26,7 +26,6 @@ swc_atoms = "0.2.11" swc_common = { version = "0.17.19", features = ["concurrent", "sourcemap"] } swc_ecma_loader = { version = "0.29.0", features = ["node", "lru"] } swc_ecmascript = { version = "0.143.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } -swc_node_base = "0.5.2" swc_cached = "0.1.1" tracing = { version = "0.1.32", features = ["release_max_level_off"] }