@@ -15,6 +15,35 @@ use oxc_ast::ast::{
1515use oxc_span:: SPAN ;
1616use std:: collections:: HashMap ;
1717
18+ /// Combine two optional className expressions into a conditional expression.
19+ /// `condition ? con_expr : alt_expr`, falling back to `""` for the missing branch.
20+ /// Returns `None` only when both branches are `None`.
21+ pub ( crate ) fn combine_conditional_class_name < ' a > (
22+ ast_builder : & AstBuilder < ' a > ,
23+ condition : Expression < ' a > ,
24+ con_expr : Option < Expression < ' a > > ,
25+ alt_expr : Option < Expression < ' a > > ,
26+ ) -> Option < Expression < ' a > > {
27+ match ( con_expr, alt_expr) {
28+ ( Some ( con) , Some ( alt) ) => {
29+ Some ( ast_builder. expression_conditional ( SPAN , condition, con, alt) )
30+ }
31+ ( Some ( con) , None ) => Some ( ast_builder. expression_conditional (
32+ SPAN ,
33+ condition,
34+ con,
35+ ast_builder. expression_string_literal ( SPAN , "" , None ) ,
36+ ) ) ,
37+ ( None , Some ( alt) ) => Some ( ast_builder. expression_conditional (
38+ SPAN ,
39+ condition,
40+ ast_builder. expression_string_literal ( SPAN , "" , None ) ,
41+ alt,
42+ ) ) ,
43+ ( None , None ) => None ,
44+ }
45+ }
46+
1847/// modify object props
1948/// Returns extracted Tailwind styles from static className strings
2049/// `conditional_branch`: If Some, contains (condition, alternate_styles, alternate_style_order)
@@ -79,25 +108,8 @@ pub fn modify_prop_object<'a>(
79108 filename,
80109 ) ;
81110
82- // Combine into conditional expression: condition ? consequent_class : alternate_class
83- let combined_expr = match ( con_expr, alt_expr) {
84- ( Some ( con) , Some ( alt) ) => {
85- Some ( ast_builder. expression_conditional ( SPAN , condition, con, alt) )
86- }
87- ( Some ( con) , None ) => Some ( ast_builder. expression_conditional (
88- SPAN ,
89- condition,
90- con,
91- ast_builder. expression_string_literal ( SPAN , "" , None ) ,
92- ) ) ,
93- ( None , Some ( alt) ) => Some ( ast_builder. expression_conditional (
94- SPAN ,
95- condition,
96- ast_builder. expression_string_literal ( SPAN , "" , None ) ,
97- alt,
98- ) ) ,
99- ( None , None ) => None ,
100- } ;
111+ let combined_expr =
112+ combine_conditional_class_name ( ast_builder, condition, con_expr, alt_expr) ;
101113
102114 let mut all_tailwind = con_tailwind;
103115 all_tailwind. extend ( alt_tailwind) ;
@@ -226,25 +238,8 @@ pub fn modify_props<'a>(
226238 filename,
227239 ) ;
228240
229- // Combine into conditional expression: condition ? consequent_class : alternate_class
230- let combined_expr = match ( con_expr, alt_expr) {
231- ( Some ( con) , Some ( alt) ) => {
232- Some ( ast_builder. expression_conditional ( SPAN , condition, con, alt) )
233- }
234- ( Some ( con) , None ) => Some ( ast_builder. expression_conditional (
235- SPAN ,
236- condition,
237- con,
238- ast_builder. expression_string_literal ( SPAN , "" , None ) ,
239- ) ) ,
240- ( None , Some ( alt) ) => Some ( ast_builder. expression_conditional (
241- SPAN ,
242- condition,
243- ast_builder. expression_string_literal ( SPAN , "" , None ) ,
244- alt,
245- ) ) ,
246- ( None , None ) => None ,
247- } ;
241+ let combined_expr =
242+ combine_conditional_class_name ( ast_builder, condition, con_expr, alt_expr) ;
248243
249244 let mut all_tailwind = con_tailwind;
250245 all_tailwind. extend ( alt_tailwind) ;
0 commit comments