Skip to content

Commit

Permalink
fix(styled-components): Handle default import with named import syntax (
Browse files Browse the repository at this point in the history
swc-project#239)

This fixes styled-components plugin doesn't work when styled-components is imported using `import { default as a }` syntax.

```javascript
import { default as s } from 'styled-components'

const Foo = s.div`
  color: red;
`
```
  • Loading branch information
ciffelia committed Nov 26, 2023
1 parent 1fd7c3d commit 1e5e738
Show file tree
Hide file tree
Showing 28 changed files with 50 additions and 52 deletions.
18 changes: 9 additions & 9 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/constify/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-constify",
"version": "0.1.32",
"version": "0.1.33",
"description": "SWC plugin for optimization",
"main": "swc_plugin_constify.wasm",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion packages/constify/transform/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ edition = "2021"
license = "Apache-2.0"
name = "swc_constify"
repository = "https://github.com/swc-project/plugins.git"
version = "0.27.0"
version = "0.28.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

Expand Down
2 changes: 1 addition & 1 deletion packages/emotion/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-emotion",
"version": "2.5.102",
"version": "2.5.103",
"description": "SWC plugin for emotion css-in-js library",
"main": "swc_plugin_emotion.wasm",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion packages/emotion/transform/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ edition = "2021"
license = "Apache-2.0"
name = "swc_emotion"
repository = "https://github.com/swc-project/plugins.git"
version = "0.63.0"
version = "0.64.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

Expand Down
2 changes: 1 addition & 1 deletion packages/jest/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-jest",
"version": "1.5.102",
"version": "1.5.103",
"description": "SWC plugin for jest",
"main": "swc_plugin_jest.wasm",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion packages/loadable-components/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-loadable-components",
"version": "0.3.102",
"version": "0.3.103",
"description": "SWC plugin for `@loadable/components`",
"main": "swc_plugin_loadable_components.wasm",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion packages/noop/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-noop",
"version": "1.5.100",
"version": "1.5.101",
"description": "Noop SWC plugin, for debugging",
"main": "swc_plugin_noop.wasm",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion packages/react-remove-properties/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-react-remove-properties",
"version": "1.5.102",
"version": "1.5.103",
"description": "SWC plugin for https://www.npmjs.com/package/babel-plugin-react-remove-properties",
"main": "swc_plugin_react_remove_properties.wasm",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion packages/react-remove-properties/transform/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ edition = "2021"
license = "Apache-2.0"
name = "react_remove_properties"
repository = "https://github.com/swc-project/plugins.git"
version = "0.15.0"
version = "0.16.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

Expand Down
2 changes: 1 addition & 1 deletion packages/relay/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-relay",
"version": "1.5.102",
"version": "1.5.103",
"description": "SWC plugin for relay",
"main": "swc_plugin_relay.wasm",
"types": "./types.d.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/relay/transform/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ edition = "2021"
license = "Apache-2.0"
name = "swc_relay"
repository = "https://github.com/swc-project/plugins.git"
version = "0.35.0"
version = "0.36.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

Expand Down
2 changes: 1 addition & 1 deletion packages/remove-console/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-remove-console",
"version": "1.5.102",
"version": "1.5.103",
"description": "SWC plugin for https://www.npmjs.com/package/babel-plugin-remove-console",
"main": "swc_plugin_remove_console.wasm",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion packages/remove-console/transform/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ edition = "2021"
license = "Apache-2.0"
name = "remove_console"
repository = "https://github.com/swc-project/plugins.git"
version = "0.16.0"
version = "0.17.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

Expand Down
2 changes: 1 addition & 1 deletion packages/styled-components/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-styled-components",
"version": "1.5.102",
"version": "1.5.103",
"description": "SWC plugin for styled-components",
"main": "swc_plugin_styled_components.wasm",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion packages/styled-components/transform/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ include = ["Cargo.toml", "src/**/*.rs"]
license = "Apache-2.0"
name = "styled_components"
repository = "https://github.com/swc-project/plugins.git"
version = "0.87.0"
version = "0.88.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

Expand Down
10 changes: 3 additions & 7 deletions packages/styled-components/transform/src/utils/analyzer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,13 +111,9 @@ impl Visit for Analyzer<'_> {
ModuleExportName::Str(v) => &*v.value,
})
.unwrap_or(&*s.local.sym);
if imported == "styled" {
self.state.imported_local_name = Some(s.local.to_id());
} else {
self.state
.imported_local_named
.insert(imported.to_string(), s.local.to_id());
}
self.state
.imported_local_named
.insert(imported.to_string(), s.local.to_id());
}
ImportSpecifier::Default(s) => {
self.state.imported_local_name = Some(s.local.to_id());
Expand Down
13 changes: 11 additions & 2 deletions packages/styled-components/transform/src/utils/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -219,19 +219,28 @@ impl State {
) -> Option<Id> {
if name == "default" {
if self.imported_local_name.is_some() {
// import styled from 'styled-components'
self.imported_local_name.clone()
} else if let Some(id) = self.imported_local_named.get("default") {
// import { default as styled } from 'styled-components'
Some(id.clone())
} else if let Some(id) = self.imported_local_named.get("styled") {
// import { styled } from 'styled-components'
Some(id.clone())
} else if self.imported_local_ns.is_some() {
// import * as styled from 'styled-components'
self.imported_local_ns.clone()
} else if self.styled_required.is_some() {
// const styled = require('styled-components')
Some(("styled".into(), self.unresolved_ctxt.unwrap_or_default()))
} else {
None
}
} else {
if self.imported_local_ns.is_some() {
Some((name.into(), Default::default()))
} else if self.imported_local_named.contains_key(name) {
self.imported_local_named.get(name).cloned()
} else if let Some(id) = self.imported_local_named.get(name) {
Some(id.clone())
} else if self.styled_required.is_some() {
Some((name.into(), self.unresolved_ctxt.unwrap_or_default()))
} else {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"transpileTemplateLiterals": false,
"minify": true
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const Test = s.div.withConfig({
displayName: "code__Test",
componentId: "sc-1dds9bl-0"
displayName: "code__Test",
componentId: "sc-cbecc97b-0"
})`width:100%;`;
import { default as s, css } from 'styled-components';
2 changes: 1 addition & 1 deletion packages/styled-jsx/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-styled-jsx",
"version": "1.5.102",
"version": "1.5.103",
"description": "SWC plugin for styled-jsx",
"main": "swc_plugin_styled_jsx.wasm",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion packages/styled-jsx/transform/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ description = "AST transforms visitor for styled-jsx"
edition = "2021"
license = "Apache-2.0"
name = "styled_jsx"
version = "0.64.0"
version = "0.65.0"

[features]
custom_transform = ["swc_common/concurrent"]
Expand Down
2 changes: 1 addition & 1 deletion packages/swc-magic/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-swc-magic",
"version": "1.5.102",
"version": "1.5.103",
"description": "SWC plugin for swc-magic",
"main": "swc_plugin_swc_magic.wasm",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion packages/swc-magic/transform/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ description = "AST transforms visitor for swc-magic"
edition = "2021"
license = "Apache-2.0"
name = "swc_magic"
version = "0.10.0"
version = "0.11.0"

[dependencies]
serde = { version = "1.0.189", features = ["derive"] }
Expand Down
2 changes: 1 addition & 1 deletion packages/transform-imports/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-transform-imports",
"version": "1.5.102",
"version": "1.5.103",
"description": "SWC plugin for https://www.npmjs.com/package/babel-plugin-transform-imports",
"main": "swc_plugin_transform_imports.wasm",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion packages/transform-imports/transform/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ edition = "2021"
license = "Apache-2.0"
name = "modularize_imports"
repository = "https://github.com/swc-project/plugins.git"
version = "0.59.0"
version = "0.60.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

Expand Down

0 comments on commit 1e5e738

Please sign in to comment.