Skip to content

Commit 0bd2c42

Browse files
committed
Support TsAsExpression
1 parent e355fa5 commit 0bd2c42

6 files changed

+110
-0
lines changed

.changeset/some-adults-build.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@devup-ui/wasm": patch
3+
---
4+
5+
Support TsAsExpression

libs/extractor/src/lib.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,49 @@ mod tests {
540540
.unwrap());
541541
}
542542

543+
#[test]
544+
#[serial]
545+
fn extract_dynamic_style_props_with_type() {
546+
reset_class_map();
547+
assert_debug_snapshot!(extract(
548+
"test.tsx",
549+
r#"import { Box } from "@devup-ui/core";
550+
<Box padding={a as A} />;
551+
"#,
552+
ExtractOption {
553+
package: "@devup-ui/core".to_string(),
554+
css_file: None
555+
}
556+
)
557+
.unwrap());
558+
559+
reset_class_map();
560+
assert_debug_snapshot!(extract(
561+
"test.tsx",
562+
r#"import { Box } from "@devup-ui/core";
563+
<Box padding={data[d as A] as B} />;
564+
"#,
565+
ExtractOption {
566+
package: "@devup-ui/core".to_string(),
567+
css_file: None
568+
}
569+
)
570+
.unwrap());
571+
572+
reset_class_map();
573+
assert_debug_snapshot!(extract(
574+
"test.tsx",
575+
r#"import { Box } from "@devup-ui/core";
576+
<Box padding={"10px" as B} />;
577+
"#,
578+
ExtractOption {
579+
package: "@devup-ui/core".to_string(),
580+
css_file: None
581+
}
582+
)
583+
.unwrap());
584+
}
585+
543586
#[test]
544587
#[serial]
545588
fn extract_dynamic_responsive_style_props() {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
source: libs/extractor/src/lib.rs
3+
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()"
4+
---
5+
ExtractOutput {
6+
styles: [
7+
Dynamic(
8+
ExtractDynamicStyle {
9+
property: "padding",
10+
level: 0,
11+
identifier: "data[d as A]",
12+
selector: None,
13+
style_order: None,
14+
},
15+
),
16+
],
17+
code: "import \"@devup-ui/core/devup-ui.css\";\n<div className=\"d0\" style={{ \"--d1\": data[d as A] }} />;\n",
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
source: libs/extractor/src/lib.rs
3+
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()"
4+
---
5+
ExtractOutput {
6+
styles: [
7+
Static(
8+
ExtractStaticStyle {
9+
property: "padding",
10+
value: "10px",
11+
level: 0,
12+
selector: None,
13+
style_order: None,
14+
},
15+
),
16+
],
17+
code: "import \"@devup-ui/core/devup-ui.css\";\n<div className=\"d0\" />;\n",
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
source: libs/extractor/src/lib.rs
3+
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()"
4+
---
5+
ExtractOutput {
6+
styles: [
7+
Dynamic(
8+
ExtractDynamicStyle {
9+
property: "padding",
10+
level: 0,
11+
identifier: "a",
12+
selector: None,
13+
style_order: None,
14+
},
15+
),
16+
],
17+
code: "import \"@devup-ui/core/devup-ui.css\";\n<div className=\"d0\" style={{ \"--d1\": a }} />;\n",
18+
}

libs/extractor/src/style_extractor.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ pub fn extract_style_from_expression<'a>(
7272
level: u8,
7373
selector: Option<&StyleSelector>,
7474
) -> ExtractResult<'a> {
75+
println!("extract_style_from_expression: {:?}", expression);
7576
let mut typo = false;
7677

7778
if name.is_none() && selector.is_none() {
@@ -342,6 +343,13 @@ pub fn extract_style_from_expression<'a>(
342343
tag: None,
343344
style_order: None,
344345
},
346+
Expression::TSAsExpression(exp) => extract_style_from_expression(
347+
ast_builder,
348+
name,
349+
&mut exp.expression,
350+
level,
351+
selector,
352+
),
345353
Expression::ComputedMemberExpression(mem) => {
346354
extract_style_from_member_expression(ast_builder, name, mem, level, selector)
347355
}

0 commit comments

Comments
 (0)