Skip to content

Commit ac1fc1f

Browse files
committed
Fix server actino
1 parent 41a7f7e commit ac1fc1f

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

crates/next-api/src/server_actions.rs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ use turbopack_binding::{
2929
virtual_source::VirtualSource,
3030
},
3131
ecmascript::{
32-
chunk::EcmascriptChunkPlaceable, parse::ParseResult, EcmascriptModuleAsset,
32+
chunk::EcmascriptChunkPlaceable, parse::ParseResult,
33+
tree_shake::asset::EcmascriptModulePartAsset, EcmascriptModuleAsset,
3334
EcmascriptModuleAssetType,
3435
},
3536
},
@@ -246,6 +247,14 @@ async fn to_rsc_context(
246247
} else {
247248
ReferenceType::TypeScript(TypeScriptReferenceSubType::Undefined)
248249
}
250+
} else if let Some(module) =
251+
Vc::try_resolve_downcast_type::<EcmascriptModulePartAsset>(module).await?
252+
{
253+
if module.await?.full_module.await?.ty == EcmascriptModuleAssetType::Ecmascript {
254+
ReferenceType::EcmaScriptModules(EcmaScriptModulesReferenceSubType::Undefined)
255+
} else {
256+
ReferenceType::TypeScript(TypeScriptReferenceSubType::Undefined)
257+
}
249258
} else {
250259
ReferenceType::TypeScript(TypeScriptReferenceSubType::Undefined)
251260
};
@@ -294,14 +303,21 @@ pub fn parse_server_actions<C: Comments>(
294303
/// the exported action function. If not, we return a None.
295304
#[turbo_tasks::function]
296305
async fn parse_actions(module: Vc<Box<dyn Module>>) -> Result<Vc<OptionActionMap>> {
297-
let Some(ecmascript_asset) =
306+
let parsed = if let Some(ecmascript_asset) =
298307
Vc::try_resolve_downcast_type::<EcmascriptModuleAsset>(module).await?
299-
else {
308+
{
309+
ecmascript_asset.failsafe_parse()
310+
} else if let Some(ecmascript_asset) =
311+
Vc::try_resolve_downcast_type::<EcmascriptModulePartAsset>(module).await?
312+
{
313+
ecmascript_asset.await?.full_module.failsafe_parse()
314+
} else {
300315
return Ok(OptionActionMap::none());
301316
};
317+
302318
let ParseResult::Ok {
303319
comments, program, ..
304-
} = &*ecmascript_asset.failsafe_parse().await?
320+
} = &*parsed.await?
305321
else {
306322
// The file might be be parse-able, but this is reported separately.
307323
return Ok(OptionActionMap::none());

0 commit comments

Comments
 (0)