@@ -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]
296305async 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