Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/some-adults-build.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@devup-ui/wasm": patch
---

Support TsAsExpression
43 changes: 43 additions & 0 deletions libs/extractor/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -540,6 +540,49 @@ mod tests {
.unwrap());
}

#[test]
#[serial]
fn extract_dynamic_style_props_with_type() {
reset_class_map();
assert_debug_snapshot!(extract(
"test.tsx",
r#"import { Box } from "@devup-ui/core";
<Box padding={a as A} />;
"#,
ExtractOption {
package: "@devup-ui/core".to_string(),
css_file: None
}
)
.unwrap());

reset_class_map();
assert_debug_snapshot!(extract(
"test.tsx",
r#"import { Box } from "@devup-ui/core";
<Box padding={data[d as A] as B} />;
"#,
ExtractOption {
package: "@devup-ui/core".to_string(),
css_file: None
}
)
.unwrap());

reset_class_map();
assert_debug_snapshot!(extract(
"test.tsx",
r#"import { Box } from "@devup-ui/core";
<Box padding={"10px" as B} />;
"#,
ExtractOption {
package: "@devup-ui/core".to_string(),
css_file: None
}
)
.unwrap());
}

#[test]
#[serial]
fn extract_dynamic_responsive_style_props() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
source: libs/extractor/src/lib.rs
expression: "extract(\"test.tsx\",\nr#\"import { Box } from \"@devup-ui/core\";\n<Box padding={data[d as A] as B} />;\n\"#,\nExtractOption\n{ package: \"@devup-ui/core\".to_string(), css_file: None }).unwrap()"
---
ExtractOutput {
styles: [
Dynamic(
ExtractDynamicStyle {
property: "padding",
level: 0,
identifier: "data[d as A]",
selector: None,
style_order: None,
},
),
],
code: "import \"@devup-ui/core/devup-ui.css\";\n<div className=\"d0\" style={{ \"--d1\": data[d as A] }} />;\n",
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
source: libs/extractor/src/lib.rs
expression: "extract(\"test.tsx\",\nr#\"import { Box } from \"@devup-ui/core\";\n<Box padding={\"10px\" as B} />;\n\"#,\nExtractOption\n{ package: \"@devup-ui/core\".to_string(), css_file: None }).unwrap()"
---
ExtractOutput {
styles: [
Static(
ExtractStaticStyle {
property: "padding",
value: "10px",
level: 0,
selector: None,
style_order: None,
},
),
],
code: "import \"@devup-ui/core/devup-ui.css\";\n<div className=\"d0\" />;\n",
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
source: libs/extractor/src/lib.rs
expression: "extract(\"test.tsx\",\nr#\"import { Box } from \"@devup-ui/core\";\n<Box padding={a as A} />;\n\"#,\nExtractOption\n{ package: \"@devup-ui/core\".to_string(), css_file: None }).unwrap()"
---
ExtractOutput {
styles: [
Dynamic(
ExtractDynamicStyle {
property: "padding",
level: 0,
identifier: "a",
selector: None,
style_order: None,
},
),
],
code: "import \"@devup-ui/core/devup-ui.css\";\n<div className=\"d0\" style={{ \"--d1\": a }} />;\n",
}
8 changes: 8 additions & 0 deletions libs/extractor/src/style_extractor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
level: u8,
selector: Option<&StyleSelector>,
) -> ExtractResult<'a> {
println!("extract_style_from_expression: {:?}", expression);
let mut typo = false;

if name.is_none() && selector.is_none() {
Expand Down Expand Up @@ -342,6 +343,13 @@
tag: None,
style_order: None,
},
Expression::TSAsExpression(exp) => extract_style_from_expression(
ast_builder,
name,

Check warning on line 348 in libs/extractor/src/style_extractor.rs

View check run for this annotation

Codecov / codecov/patch

libs/extractor/src/style_extractor.rs#L347-L348

Added lines #L347 - L348 were not covered by tests
&mut exp.expression,
level,
selector,

Check warning on line 351 in libs/extractor/src/style_extractor.rs

View check run for this annotation

Codecov / codecov/patch

libs/extractor/src/style_extractor.rs#L350-L351

Added lines #L350 - L351 were not covered by tests
),
Expression::ComputedMemberExpression(mem) => {
extract_style_from_member_expression(ast_builder, name, mem, level, selector)
}
Expand Down