@@ -343,26 +343,12 @@ fn js_value_to_json(value: &JsValue, context: &mut Context) -> String {
343343 }
344344
345345 // Fallback: simple conversion using boa_engine 0.21 API
346- match value. get_type ( ) {
347- boa_engine:: value:: Type :: String => {
348- format ! (
349- "\" {}\" " ,
350- value
351- . to_string( context)
352- . unwrap_or_default( )
353- . to_std_string_escaped( )
354- )
355- }
356- boa_engine:: value:: Type :: Boolean => value. to_boolean ( ) . to_string ( ) ,
357- boa_engine:: value:: Type :: Null => "null" . to_string ( ) ,
358- boa_engine:: value:: Type :: Undefined => "undefined" . to_string ( ) ,
359- boa_engine:: value:: Type :: Number => {
360- if let Ok ( n) = value. to_number ( context) {
361- n. to_string ( )
362- } else {
363- "NaN" . to_string ( )
364- }
346+ match value. variant ( ) {
347+ boa_engine:: value:: JsVariant :: String ( str) => {
348+ format ! ( "\" {}\" " , str . to_std_string_escaped( ) )
365349 }
350+ boa_engine:: value:: JsVariant :: Null => "null" . to_string ( ) ,
351+ boa_engine:: value:: JsVariant :: Undefined => "undefined" . to_string ( ) ,
366352 _ => "{}" . to_string ( ) ,
367353 }
368354}
@@ -855,44 +841,41 @@ fn register_vanilla_extract_apis(
855841
856842 // Check if argument is an array (composition syntax)
857843 let ( json, bases) = if let Some ( obj) = style_obj. as_object ( ) {
858- if let Ok ( length_val) = obj. get ( js_string ! ( "length" ) , ctx) {
859- if let Some ( len) = length_val. as_number ( ) {
860- // It's an array - handle composition
861- let len = len as u32 ;
862- let mut base_classes = Vec :: new ( ) ;
863- let mut merged_styles = String :: from ( "{" ) ;
864- let mut first_style = true ;
865-
866- for i in 0 ..len {
867- if let Ok ( elem) = obj. get ( i, ctx) {
868- if let Some ( base_str) = elem. as_string ( ) {
869- // It's a base class reference (string)
870- base_classes. push ( base_str. to_std_string_escaped ( ) ) ;
871- } else if elem. is_object ( ) {
872- // It's a style object - merge it
873- let elem_json = js_value_to_json ( & elem, ctx) ;
874- // Strip outer braces and merge
875- let inner = elem_json
876- . trim ( )
877- . trim_start_matches ( '{' )
878- . trim_end_matches ( '}' )
879- . trim ( ) ;
880- if !inner. is_empty ( ) {
881- if !first_style {
882- merged_styles. push ( ',' ) ;
883- }
884- merged_styles. push_str ( inner) ;
885- first_style = false ;
844+ if let Ok ( length_val) = obj. get ( js_string ! ( "length" ) , ctx)
845+ && let Some ( len) = length_val. as_number ( )
846+ {
847+ // It's an array - handle composition
848+ let len = len as u32 ;
849+ let mut base_classes = Vec :: new ( ) ;
850+ let mut merged_styles = String :: from ( "{" ) ;
851+ let mut first_style = true ;
852+
853+ for i in 0 ..len {
854+ if let Ok ( elem) = obj. get ( i, ctx) {
855+ if let Some ( base_str) = elem. as_string ( ) {
856+ // It's a base class reference (string)
857+ base_classes. push ( base_str. to_std_string_escaped ( ) ) ;
858+ } else if elem. is_object ( ) {
859+ // It's a style object - merge it
860+ let elem_json = js_value_to_json ( & elem, ctx) ;
861+ // Strip outer braces and merge
862+ let inner = elem_json
863+ . trim ( )
864+ . trim_start_matches ( '{' )
865+ . trim_end_matches ( '}' )
866+ . trim ( ) ;
867+ if !inner. is_empty ( ) {
868+ if !first_style {
869+ merged_styles. push ( ',' ) ;
886870 }
871+ merged_styles. push_str ( inner) ;
872+ first_style = false ;
887873 }
888874 }
889875 }
890- merged_styles. push ( '}' ) ;
891- ( merged_styles, base_classes)
892- } else {
893- // Not an array, just a style object
894- ( js_value_to_json ( style_obj, ctx) , Vec :: new ( ) )
895876 }
877+ merged_styles. push ( '}' ) ;
878+ ( merged_styles, base_classes)
896879 } else {
897880 // No length property, just a style object
898881 ( js_value_to_json ( style_obj, ctx) , Vec :: new ( ) )
0 commit comments