@@ -29,7 +29,8 @@ use turbopack_binding::{
29
29
virtual_source:: VirtualSource ,
30
30
} ,
31
31
ecmascript:: {
32
- chunk:: EcmascriptChunkPlaceable , parse:: ParseResult , EcmascriptModuleAsset ,
32
+ chunk:: EcmascriptChunkPlaceable , parse:: ParseResult ,
33
+ tree_shake:: asset:: EcmascriptModulePartAsset , EcmascriptModuleAsset ,
33
34
EcmascriptModuleAssetType ,
34
35
} ,
35
36
} ,
@@ -246,6 +247,14 @@ async fn to_rsc_context(
246
247
} else {
247
248
ReferenceType :: TypeScript ( TypeScriptReferenceSubType :: Undefined )
248
249
}
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
+ }
249
258
} else {
250
259
ReferenceType :: TypeScript ( TypeScriptReferenceSubType :: Undefined )
251
260
} ;
@@ -294,14 +303,21 @@ pub fn parse_server_actions<C: Comments>(
294
303
/// the exported action function. If not, we return a None.
295
304
#[ turbo_tasks:: function]
296
305
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) =
298
307
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 {
300
315
return Ok ( OptionActionMap :: none ( ) ) ;
301
316
} ;
317
+
302
318
let ParseResult :: Ok {
303
319
comments, program, ..
304
- } = & * ecmascript_asset . failsafe_parse ( ) . await ?
320
+ } = & * parsed . await ?
305
321
else {
306
322
// The file might be be parse-able, but this is reported separately.
307
323
return Ok ( OptionActionMap :: none ( ) ) ;
0 commit comments