From 6f6ed3eea090f84c35d7f855007efe86d11bdfd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Mon, 29 Jul 2024 16:55:58 +0900 Subject: [PATCH] Fix server actino --- crates/next-api/src/server_actions.rs | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/crates/next-api/src/server_actions.rs b/crates/next-api/src/server_actions.rs index 3a16c0f52ff7b0..b9681a4caaa26c 100644 --- a/crates/next-api/src/server_actions.rs +++ b/crates/next-api/src/server_actions.rs @@ -29,7 +29,8 @@ use turbopack_binding::{ virtual_source::VirtualSource, }, ecmascript::{ - chunk::EcmascriptChunkPlaceable, parse::ParseResult, EcmascriptModuleAsset, + chunk::EcmascriptChunkPlaceable, parse::ParseResult, + tree_shake::asset::EcmascriptModulePartAsset, EcmascriptModuleAsset, EcmascriptModuleAssetType, }, }, @@ -246,6 +247,14 @@ async fn to_rsc_context( } else { ReferenceType::TypeScript(TypeScriptReferenceSubType::Undefined) } + } else if let Some(module) = + Vc::try_resolve_downcast_type::(module).await? + { + if module.await?.full_module.await?.ty == EcmascriptModuleAssetType::Ecmascript { + ReferenceType::EcmaScriptModules(EcmaScriptModulesReferenceSubType::Undefined) + } else { + ReferenceType::TypeScript(TypeScriptReferenceSubType::Undefined) + } } else { ReferenceType::TypeScript(TypeScriptReferenceSubType::Undefined) }; @@ -294,14 +303,21 @@ pub fn parse_server_actions( /// the exported action function. If not, we return a None. #[turbo_tasks::function] async fn parse_actions(module: Vc>) -> Result> { - let Some(ecmascript_asset) = + let parsed = if let Some(ecmascript_asset) = Vc::try_resolve_downcast_type::(module).await? - else { + { + ecmascript_asset.failsafe_parse() + } else if let Some(ecmascript_asset) = + Vc::try_resolve_downcast_type::(module).await? + { + ecmascript_asset.await?.full_module.failsafe_parse() + } else { return Ok(OptionActionMap::none()); }; + let ParseResult::Ok { comments, program, .. - } = &*ecmascript_asset.failsafe_parse().await? + } = &*parsed.await? else { // The file might be be parse-able, but this is reported separately. return Ok(OptionActionMap::none());