@@ -33,7 +33,10 @@ use turbopack_core::compile_time_info::{
33
33
34
34
use self :: imports:: ImportAnnotations ;
35
35
pub ( crate ) use self :: imports:: ImportMap ;
36
- use crate :: { references:: require_context:: RequireContextMap , utils:: StringifyJs } ;
36
+ use crate :: {
37
+ analyzer:: graph:: EvalContext , references:: require_context:: RequireContextMap ,
38
+ utils:: StringifyJs ,
39
+ } ;
37
40
38
41
pub mod builtin;
39
42
pub mod graph;
@@ -581,38 +584,73 @@ impl From<ConstantValue> for JsValue {
581
584
}
582
585
}
583
586
584
- impl From < & CompileTimeDefineValue > for JsValue {
585
- fn from ( v : & CompileTimeDefineValue ) -> Self {
586
- match v {
587
- CompileTimeDefineValue :: String ( s) => JsValue :: Constant ( s. as_str ( ) . into ( ) ) ,
588
- CompileTimeDefineValue :: Bool ( b) => JsValue :: Constant ( ( * b) . into ( ) ) ,
589
- CompileTimeDefineValue :: JSON ( _) => {
590
- JsValue :: unknown_empty ( false , "compile time injected JSON" )
587
+ impl TryFrom < & CompileTimeDefineValue > for JsValue {
588
+ type Error = anyhow:: Error ;
589
+
590
+ fn try_from ( value : & CompileTimeDefineValue ) -> Result < Self > {
591
+ match value {
592
+ CompileTimeDefineValue :: Null => Ok ( JsValue :: Constant ( ConstantValue :: Null ) ) ,
593
+ CompileTimeDefineValue :: Bool ( b) => Ok ( JsValue :: Constant ( ( * b) . into ( ) ) ) ,
594
+ CompileTimeDefineValue :: Number ( n) => Ok ( JsValue :: Constant ( ConstantValue :: Num (
595
+ ConstantNumber ( n. as_str ( ) . parse :: < f64 > ( ) ?) ,
596
+ ) ) ) ,
597
+ CompileTimeDefineValue :: String ( s) => Ok ( JsValue :: Constant ( s. as_str ( ) . into ( ) ) ) ,
598
+ CompileTimeDefineValue :: Array ( a) => {
599
+ let mut js_value = JsValue :: Array {
600
+ total_nodes : a. len ( ) as u32 ,
601
+ items : a. iter ( ) . map ( |i| i. try_into ( ) ) . collect :: < Result < Vec < _ > > > ( ) ?,
602
+ mutable : false ,
603
+ } ;
604
+ js_value. update_total_nodes ( ) ;
605
+ Ok ( js_value)
591
606
}
592
- CompileTimeDefineValue :: Undefined => JsValue :: Constant ( ConstantValue :: Undefined ) ,
607
+ CompileTimeDefineValue :: Object ( m) => {
608
+ let mut js_value = JsValue :: Object {
609
+ total_nodes : m. len ( ) as u32 ,
610
+ parts : m
611
+ . iter ( )
612
+ . map ( |( k, v) | {
613
+ Ok :: < ObjectPart , anyhow:: Error > ( ObjectPart :: KeyValue (
614
+ k. clone ( ) . into ( ) ,
615
+ v. try_into ( ) ?,
616
+ ) )
617
+ } )
618
+ . collect :: < Result < Vec < _ > > > ( ) ?,
619
+ mutable : false ,
620
+ } ;
621
+ js_value. update_total_nodes ( ) ;
622
+ Ok ( js_value)
623
+ }
624
+ CompileTimeDefineValue :: Undefined => Ok ( JsValue :: Constant ( ConstantValue :: Undefined ) ) ,
625
+ CompileTimeDefineValue :: Evaluate ( s) => EvalContext :: eval_single_expr_lit ( s. clone ( ) ) ,
593
626
}
594
627
}
595
628
}
596
629
597
- impl From < & FreeVarReference > for JsValue {
598
- fn from ( v : & FreeVarReference ) -> Self {
599
- match v {
600
- FreeVarReference :: Value ( v) => v. into ( ) ,
630
+ impl TryFrom < & FreeVarReference > for JsValue {
631
+ type Error = anyhow:: Error ;
632
+
633
+ fn try_from ( value : & FreeVarReference ) -> Result < Self > {
634
+ match value {
635
+ FreeVarReference :: Value ( v) => v. try_into ( ) ,
601
636
FreeVarReference :: Ident ( _) => {
602
- JsValue :: unknown_empty ( false , "compile time injected ident" )
603
- }
604
- FreeVarReference :: Member ( _, _) => {
605
- JsValue :: unknown_empty ( false , "compile time injected member" )
606
- }
607
- FreeVarReference :: EcmaScriptModule { .. } => {
608
- JsValue :: unknown_empty ( false , "compile time injected free var module" )
609
- }
610
- FreeVarReference :: Error ( _) => {
611
- JsValue :: unknown_empty ( false , "compile time injected free var error" )
637
+ Ok ( JsValue :: unknown_empty ( false , "compile time injected ident" ) )
612
638
}
639
+ FreeVarReference :: Member ( _, _) => Ok ( JsValue :: unknown_empty (
640
+ false ,
641
+ "compile time injected member" ,
642
+ ) ) ,
643
+ FreeVarReference :: EcmaScriptModule { .. } => Ok ( JsValue :: unknown_empty (
644
+ false ,
645
+ "compile time injected free var module" ,
646
+ ) ) ,
647
+ FreeVarReference :: Error ( _) => Ok ( JsValue :: unknown_empty (
648
+ false ,
649
+ "compile time injected free var error" ,
650
+ ) ) ,
613
651
FreeVarReference :: InputRelative ( kind) => {
614
652
use turbopack_core:: compile_time_info:: InputRelativeConstant ;
615
- JsValue :: unknown_empty (
653
+ Ok ( JsValue :: unknown_empty (
616
654
false ,
617
655
match kind {
618
656
InputRelativeConstant :: DirName => {
@@ -622,7 +660,7 @@ impl From<&FreeVarReference> for JsValue {
622
660
"compile time injected free var referencing the file name"
623
661
}
624
662
} ,
625
- )
663
+ ) )
626
664
}
627
665
}
628
666
}
@@ -4069,7 +4107,7 @@ mod tests {
4069
4107
m. visit_mut_with ( & mut resolver ( unresolved_mark, top_level_mark, false ) ) ;
4070
4108
4071
4109
let eval_context = EvalContext :: new (
4072
- & m ,
4110
+ Some ( & m ) ,
4073
4111
unresolved_mark,
4074
4112
top_level_mark,
4075
4113
Default :: default ( ) ,
0 commit comments