Skip to content

Commit

Permalink
fix(css/modules): aggregate class names when composes is chained.
Browse files Browse the repository at this point in the history
  • Loading branch information
Thiry1 committed Sep 6, 2023
1 parent 4623b3e commit 30c919d
Show file tree
Hide file tree
Showing 7 changed files with 141 additions and 1 deletion.
22 changes: 21 additions & 1 deletion crates/swc_css_modules/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,27 @@ where
.cloned();

if let Some(key) = key {
self.result.renamed.entry(key).or_default().extend(composes);
let mut renamed = self.result.renamed.clone();
let class_names = self.result.renamed.entry(key).or_default();

class_names.extend(composes.clone());

for composed_class_name in composes.clone().iter() {
if let CssClassName::Local { name } = composed_class_name {
if let Some(original_class_name) =
self.data.renamed_to_orig.get(&name.value).cloned()
{
class_names.extend(
renamed
.entry(original_class_name.clone())
.or_default()
.split_at(1)
.1
.to_vec(),
);
}
}
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.__local__chain2 {}
.__local__chain1 {}
.__local__root-class {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
.chain2 {
composes: e from global;
composes: f from "./f.css";
}

.chain1 {
composes: chain2;
composes: c from global;
composes: d from "./d.css";
}

.root-class {
composes: chain1;
composes: a from global;
composes: b from "./b.css";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[
"./b.css",
"./d.css",
"./f.css"
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
{
"chain2": [
{
"type": "local",
"name": "__local__chain2"
},
{
"type": "global",
"name": "e"
},
{
"type": "import",
"name": "f",
"from": "./f.css"
}
],
"chain1": [
{
"type": "local",
"name": "__local__chain1"
},
{
"type": "local",
"name": "__local__chain2"
},
{
"type": "global",
"name": "c"
},
{
"type": "import",
"name": "d",
"from": "./d.css"
},
{
"type": "global",
"name": "e"
},
{
"type": "import",
"name": "f",
"from": "./f.css"
}
],
"root-class": [
{
"type": "local",
"name": "__local__root-class"
},
{
"type": "local",
"name": "__local__chain1"
},
{
"type": "global",
"name": "a"
},
{
"type": "import",
"name": "b",
"from": "./b.css"
},
{
"type": "local",
"name": "__local__chain2"
},
{
"type": "global",
"name": "c"
},
{
"type": "import",
"name": "d",
"from": "./d.css"
},
{
"type": "global",
"name": "e"
},
{
"type": "import",
"name": "f",
"from": "./f.css"
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@
{
"type": "local",
"name": "__local__c1"
},
{
"type": "import",
"name": "c2",
"from": "./file.css"
}
],
"c5": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@
{
"type": "local",
"name": "__local__c1"
},
{
"type": "import",
"name": "c-2",
"from": "./file.css"
}
],
"c5": [
Expand Down

0 comments on commit 30c919d

Please sign in to comment.