@@ -214,7 +214,7 @@ impl<C: Comments> ServerActions<C> {
214214 ) ;
215215
216216 let register_action_expr = bind_args_to_ref_expr (
217- annotate_ident_as_server_reference ( action_ident. clone ( ) , action_id. clone ( ) ) ,
217+ annotate_ident_as_server_reference ( action_ident. clone ( ) , action_id. clone ( ) , arrow . span ) ,
218218 ids_from_closure
219219 . iter ( )
220220 . cloned ( )
@@ -377,7 +377,11 @@ impl<C: Comments> ServerActions<C> {
377377 let action_id = generate_action_id ( & self . config . hash_salt , & self . file_name , & action_name) ;
378378
379379 let register_action_expr = bind_args_to_ref_expr (
380- annotate_ident_as_server_reference ( action_ident. clone ( ) , action_id. clone ( ) ) ,
380+ annotate_ident_as_server_reference (
381+ action_ident. clone ( ) ,
382+ action_id. clone ( ) ,
383+ function. span ,
384+ ) ,
381385 ids_from_closure
382386 . iter ( )
383387 . cloned ( )
@@ -652,14 +656,21 @@ impl<C: Comments> ServerActions<C> {
652656 . into ( ) ,
653657 } ) ) ) ;
654658
659+ if let Some ( Ident { sym, .. } ) = & self . arrow_or_fn_expr_ident {
660+ assign_name_to_ident ( & cache_ident, sym. as_str ( ) , & mut self . hoisted_extra_items ) ;
661+ }
662+
655663 let bound_args: Vec < _ > = ids_from_closure
656664 . iter ( )
657665 . cloned ( )
658666 . map ( |id| Some ( id. as_arg ( ) ) )
659667 . collect ( ) ;
660668
661- let register_action_expr =
662- annotate_ident_as_server_reference ( cache_ident. clone ( ) , reference_id. clone ( ) ) ;
669+ let register_action_expr = annotate_ident_as_server_reference (
670+ cache_ident. clone ( ) ,
671+ reference_id. clone ( ) ,
672+ arrow. span ,
673+ ) ;
663674
664675 // If there're any bound args from the closure, we need to hoist the
665676 // register action expression to the top-level, and return the bind
@@ -709,8 +720,11 @@ impl<C: Comments> ServerActions<C> {
709720
710721 let reference_id = generate_action_id ( & self . config . hash_salt , & self . file_name , & cache_name) ;
711722
712- let register_action_expr =
713- annotate_ident_as_server_reference ( cache_ident. clone ( ) , reference_id. clone ( ) ) ;
723+ let register_action_expr = annotate_ident_as_server_reference (
724+ cache_ident. clone ( ) ,
725+ reference_id. clone ( ) ,
726+ function. span ,
727+ ) ;
714728
715729 function. body . visit_mut_with ( & mut ClosureReplacer {
716730 used_ids : & ids_from_closure,
@@ -805,7 +819,7 @@ impl<C: Comments> ServerActions<C> {
805819 name: Pat :: Ident ( cache_ident. clone( ) . into( ) ) ,
806820 init: Some ( wrap_cache_expr(
807821 Box :: new( Expr :: Fn ( FnExpr {
808- ident: fn_name,
822+ ident: fn_name. clone ( ) ,
809823 function: Box :: new( Function {
810824 params: new_params,
811825 body: new_body,
@@ -822,6 +836,12 @@ impl<C: Comments> ServerActions<C> {
822836 . into ( ) ,
823837 } ) ) ) ;
824838
839+ if let Some ( Ident { sym, .. } ) = fn_name {
840+ assign_name_to_ident ( & cache_ident, sym. as_str ( ) , & mut self . hoisted_extra_items ) ;
841+ } else if self . in_default_export_decl {
842+ assign_name_to_ident ( & cache_ident, "default" , & mut self . hoisted_extra_items ) ;
843+ }
844+
825845 let bound_args: Vec < _ > = ids_from_closure
826846 . iter ( )
827847 . cloned ( )
@@ -947,16 +967,6 @@ impl<C: Comments> VisitMut for ServerActions<C> {
947967 }
948968
949969 if let Some ( cache_type_str) = cache_type {
950- // It's a cache function. If it doesn't have a name, give it one.
951- match f. ident . as_mut ( ) {
952- None => {
953- let action_name = gen_cache_ident ( & mut self . reference_index ) ;
954- let ident = Ident :: new ( action_name, DUMMY_SP , Default :: default ( ) ) ;
955- f. ident . insert ( ident)
956- }
957- Some ( i) => i,
958- } ;
959-
960970 // Collect all the identifiers defined inside the closure and used
961971 // in the cache function. With deduplication.
962972 retain_names_from_declared_idents (
@@ -966,7 +976,7 @@ impl<C: Comments> VisitMut for ServerActions<C> {
966976
967977 let new_expr = self . maybe_hoist_and_create_proxy_for_cache_function (
968978 child_names. clone ( ) ,
969- f. ident . clone ( ) ,
979+ f. ident . clone ( ) . or ( self . arrow_or_fn_expr_ident . clone ( ) ) ,
970980 cache_type_str. as_str ( ) ,
971981 & mut f. function ,
972982 ) ;
@@ -1489,7 +1499,7 @@ impl<C: Comments> VisitMut for ServerActions<C> {
14891499 self . exported_idents
14901500 . push ( ( new_ident. clone ( ) , "default" . into ( ) ) ) ;
14911501
1492- attach_name_to_default_expr ( & new_ident, & mut self . extra_items ) ;
1502+ assign_name_to_ident ( & new_ident, "default" , & mut self . extra_items ) ;
14931503 }
14941504 }
14951505 _ => {
@@ -1514,7 +1524,7 @@ impl<C: Comments> VisitMut for ServerActions<C> {
15141524 . push ( ( new_ident. clone ( ) , "default" . into ( ) ) ) ;
15151525
15161526 create_var_declarator ( & new_ident, & mut self . extra_items ) ;
1517- attach_name_to_default_expr ( & new_ident, & mut self . extra_items ) ;
1527+ assign_name_to_ident ( & new_ident, "default" , & mut self . extra_items ) ;
15181528
15191529 * default_expr. expr =
15201530 assign_arrow_expr ( & new_ident, Expr :: Arrow ( arrow. clone ( ) ) ) ;
@@ -1538,7 +1548,7 @@ impl<C: Comments> VisitMut for ServerActions<C> {
15381548 . push ( ( new_ident. clone ( ) , "default" . into ( ) ) ) ;
15391549
15401550 create_var_declarator ( & new_ident, & mut self . extra_items ) ;
1541- attach_name_to_default_expr ( & new_ident, & mut self . extra_items ) ;
1551+ assign_name_to_ident ( & new_ident, "default" , & mut self . extra_items ) ;
15421552
15431553 * default_expr. expr =
15441554 assign_arrow_expr ( & new_ident, Expr :: Call ( call. clone ( ) ) ) ;
@@ -1726,6 +1736,7 @@ impl<C: Comments> VisitMut for ServerActions<C> {
17261736 expr : Box :: new ( annotate_ident_as_server_reference (
17271737 ident. clone ( ) ,
17281738 action_id,
1739+ ident. span ,
17291740 ) ) ,
17301741 } ) ) ;
17311742 }
@@ -2079,7 +2090,7 @@ fn create_var_declarator(ident: &Ident, extra_items: &mut Vec<ModuleItem>) {
20792090 } ) ) ) ) ) ;
20802091}
20812092
2082- fn attach_name_to_default_expr ( ident : & Ident , extra_items : & mut Vec < ModuleItem > ) {
2093+ fn assign_name_to_ident ( ident : & Ident , name : & str , extra_items : & mut Vec < ModuleItem > ) {
20832094 // Assign a name with `Object.defineProperty($$ACTION_0, 'name', {value: 'default'})`
20842095 extra_items. push ( ModuleItem :: Stmt ( Stmt :: Expr ( ExprStmt {
20852096 span : DUMMY_SP ,
@@ -2110,7 +2121,7 @@ fn attach_name_to_default_expr(ident: &Ident, extra_items: &mut Vec<ModuleItem>)
21102121 props: vec![
21112122 PropOrSpread :: Prop ( Box :: new( Prop :: KeyValue ( KeyValueProp {
21122123 key: PropName :: Str ( "value" . into( ) ) ,
2113- value: Box :: new( "default" . into( ) ) ,
2124+ value: Box :: new( name . into( ) ) ,
21142125 } ) ) ) ,
21152126 PropOrSpread :: Prop ( Box :: new( Prop :: KeyValue ( KeyValueProp {
21162127 key: PropName :: Str ( "writable" . into( ) ) ,
@@ -2155,10 +2166,14 @@ fn generate_action_id(hash_salt: &str, file_name: &str, export_name: &str) -> St
21552166 hex_encode ( result)
21562167}
21572168
2158- fn annotate_ident_as_server_reference ( ident : Ident , action_id : String ) -> Expr {
2169+ fn annotate_ident_as_server_reference (
2170+ ident : Ident ,
2171+ action_id : String ,
2172+ original_span : Span ,
2173+ ) -> Expr {
21592174 // registerServerReference(reference, id, null)
21602175 Expr :: Call ( CallExpr {
2161- span : ident . span ,
2176+ span : original_span ,
21622177 callee : quote_ident ! ( "registerServerReference" ) . as_callee ( ) ,
21632178 args : vec ! [
21642179 ExprOrSpread {
0 commit comments