Skip to content

Commit

Permalink
feat(styled-components): Implement minification (swc-project#235)
Browse files Browse the repository at this point in the history
This implements `minify` option in styled-components plugin. The
minification algorithm and unit tests are ported from
`babel-plugin-styled-components`.

Note that CSS code in helper functions (`keyframes`, `css`, etc.) are
currently not always processed. I think there is a bug in `is_helper`
function, so I'll fix it in another pull request later.

fixes swc-project#143
cf. vercel/next.js#30802
  • Loading branch information
ciffelia committed Nov 23, 2023
1 parent a29a162 commit 0538650
Show file tree
Hide file tree
Showing 44 changed files with 518 additions and 162 deletions.
16 changes: 8 additions & 8 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
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-constify",
"version": "0.1.29",
"version": "0.1.30",
"description": "SWC plugin for optimization",
"main": "swc_plugin_constify.wasm",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion packages/constify/transform/Cargo.toml
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.24.0"
version = "0.25.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
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-emotion",
"version": "2.5.99",
"version": "2.5.100",
"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
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.60.0"
version = "0.61.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
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-jest",
"version": "1.5.99",
"version": "1.5.100",
"description": "SWC plugin for jest",
"main": "swc_plugin_jest.wasm",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion packages/loadable-components/package.json
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-loadable-components",
"version": "0.3.99",
"version": "0.3.100",
"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
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-noop",
"version": "1.5.97",
"version": "1.5.98",
"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
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-react-remove-properties",
"version": "1.5.99",
"version": "1.5.100",
"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
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.12.0"
version = "0.13.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
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-relay",
"version": "1.5.99",
"version": "1.5.100",
"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
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.32.0"
version = "0.33.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
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-remove-console",
"version": "1.5.99",
"version": "1.5.100",
"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
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.13.0"
version = "0.14.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
@@ -1,6 +1,6 @@
{
"name": "@swc/plugin-styled-components",
"version": "1.5.99",
"version": "1.5.100",
"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
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.84.0"
version = "0.85.0"

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

Expand Down
10 changes: 8 additions & 2 deletions packages/styled-components/transform/src/lib.rs
Expand Up @@ -10,7 +10,8 @@ use swc_ecma_visit::{Fold, VisitMut};
pub use crate::{
utils::{analyze, analyzer, State},
visitors::{
display_name_and_id::display_name_and_id, transpile_css_prop::transpile::transpile_css_prop,
display_name_and_id::display_name_and_id, minify::visitor::minify,
transpile_css_prop::transpile::transpile_css_prop,
},
};

Expand Down Expand Up @@ -71,7 +72,8 @@ impl Config {

/// NOTE: **This is not complete**.
///
/// Only [analyzer] and [display_name_and_id] is implemented.
/// Only [transpile_css_prop], [minify] and [display_name_and_id] is
/// implemented.
pub fn styled_components(
file_name: FileName,
src_file_hash: u128,
Expand All @@ -86,6 +88,10 @@ pub fn styled_components(
enabled: config.css_prop,
visitor: transpile_css_prop(state.clone())
},
Optional {
enabled: config.minify,
visitor: minify(state.clone())
},
display_name_and_id(file_name, src_file_hash, config.clone(), state)
)
}
2 changes: 1 addition & 1 deletion packages/styled-components/transform/src/utils/mod.rs
Expand Up @@ -259,7 +259,7 @@ impl State {
self.imported_local_name = Some(id);
}

fn is_helper(&self, e: &Expr) -> bool {
pub(crate) 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)
Expand Down

This file was deleted.

0 comments on commit 0538650

Please sign in to comment.