@@ -39,6 +39,13 @@ pub enum ModuleLoadResponse {
3939 Async ( Pin < Box < ModuleSourceFuture > > ) ,
4040}
4141
42+ pub struct ModuleLoadOptions {
43+ pub is_dynamic_import : bool ,
44+ /// If this is a synchronous ES module load.
45+ pub is_synchronous : bool ,
46+ pub requested_module_type : RequestedModuleType ,
47+ }
48+
4249#[ derive( Debug , Clone ) ]
4350pub struct ModuleLoadReferrer {
4451 pub specifier : ModuleSpecifier ,
@@ -83,8 +90,7 @@ pub trait ModuleLoader {
8390 & self ,
8491 module_specifier : & ModuleSpecifier ,
8592 maybe_referrer : Option < & ModuleLoadReferrer > ,
86- is_dyn_import : bool ,
87- requested_module_type : RequestedModuleType ,
93+ options : ModuleLoadOptions ,
8894 ) -> ModuleLoadResponse ;
8995
9096 /// This hook can be used by implementors to do some preparation
@@ -99,8 +105,7 @@ pub trait ModuleLoader {
99105 & self ,
100106 _module_specifier : & ModuleSpecifier ,
101107 _maybe_referrer : Option < String > ,
102- _is_dyn_import : bool ,
103- _requested_module_type : RequestedModuleType ,
108+ _options : ModuleLoadOptions ,
104109 ) -> Pin < Box < dyn Future < Output = Result < ( ) , ModuleLoaderError > > > > {
105110 async { Ok ( ( ) ) } . boxed_local ( )
106111 }
@@ -181,8 +186,7 @@ impl ModuleLoader for NoopModuleLoader {
181186 & self ,
182187 _module_specifier : & ModuleSpecifier ,
183188 _maybe_referrer : Option < & ModuleLoadReferrer > ,
184- _is_dyn_import : bool ,
185- _requested_module_type : RequestedModuleType ,
189+ _options : ModuleLoadOptions ,
186190 ) -> ModuleLoadResponse {
187191 ModuleLoadResponse :: Sync ( Err ( JsErrorBox :: generic (
188192 "Module loading is not supported." ,
@@ -280,8 +284,7 @@ impl ModuleLoader for ExtModuleLoader {
280284 & self ,
281285 specifier : & ModuleSpecifier ,
282286 _maybe_referrer : Option < & ModuleLoadReferrer > ,
283- _is_dyn_import : bool ,
284- _requested_module_type : RequestedModuleType ,
287+ _options : ModuleLoadOptions ,
285288 ) -> ModuleLoadResponse {
286289 let mut sources = self . sources . borrow_mut ( ) ;
287290 let source = match sources. remove ( specifier. as_str ( ) ) {
@@ -310,8 +313,7 @@ impl ModuleLoader for ExtModuleLoader {
310313 & self ,
311314 _specifier : & ModuleSpecifier ,
312315 _maybe_referrer : Option < String > ,
313- _is_dyn_import : bool ,
314- _requested_module_type : RequestedModuleType ,
316+ _options : ModuleLoadOptions ,
315317 ) -> Pin < Box < dyn Future < Output = Result < ( ) , ModuleLoaderError > > > > {
316318 async { Ok ( ( ) ) } . boxed_local ( )
317319 }
@@ -358,8 +360,7 @@ impl ModuleLoader for LazyEsmModuleLoader {
358360 & self ,
359361 specifier : & ModuleSpecifier ,
360362 _maybe_referrer : Option < & ModuleLoadReferrer > ,
361- _is_dyn_import : bool ,
362- _requested_module_type : RequestedModuleType ,
363+ _options : ModuleLoadOptions ,
363364 ) -> ModuleLoadResponse {
364365 let mut sources = self . sources . borrow_mut ( ) ;
365366 let source = match sources. remove ( specifier. as_str ( ) ) {
@@ -383,8 +384,7 @@ impl ModuleLoader for LazyEsmModuleLoader {
383384 & self ,
384385 _specifier : & ModuleSpecifier ,
385386 _maybe_referrer : Option < String > ,
386- _is_dyn_import : bool ,
387- _requested_module_type : RequestedModuleType ,
387+ _options : ModuleLoadOptions ,
388388 ) -> Pin < Box < dyn Future < Output = Result < ( ) , ModuleLoaderError > > > > {
389389 async { Ok ( ( ) ) } . boxed_local ( )
390390 }
@@ -421,8 +421,7 @@ impl ModuleLoader for FsModuleLoader {
421421 & self ,
422422 module_specifier : & ModuleSpecifier ,
423423 _maybe_referrer : Option < & ModuleLoadReferrer > ,
424- _is_dynamic : bool ,
425- requested_module_type : RequestedModuleType ,
424+ options : ModuleLoadOptions ,
426425 ) -> ModuleLoadResponse {
427426 let module_specifier = module_specifier. clone ( ) ;
428427 let fut = async move {
@@ -441,7 +440,7 @@ impl ModuleLoader for FsModuleLoader {
441440 } else if ext == "wasm" {
442441 ModuleType :: Wasm
443442 } else {
444- match & requested_module_type {
443+ match & options . requested_module_type {
445444 RequestedModuleType :: Other ( ty) => ModuleType :: Other ( ty. clone ( ) ) ,
446445 RequestedModuleType :: Text => ModuleType :: Text ,
447446 RequestedModuleType :: Bytes => ModuleType :: Bytes ,
@@ -455,7 +454,7 @@ impl ModuleLoader for FsModuleLoader {
455454 // If we loaded a JSON file, but the "requested_module_type" (that is computed from
456455 // import attributes) is not JSON we need to fail.
457456 if module_type == ModuleType :: Json
458- && requested_module_type != RequestedModuleType :: Json
457+ && options . requested_module_type != RequestedModuleType :: Json
459458 {
460459 return Err ( JsErrorBox :: generic ( "Attempted to load JSON module without specifying \" type\" : \" json\" attribute in the import statement." ) ) ;
461460 }
@@ -524,8 +523,7 @@ impl ModuleLoader for StaticModuleLoader {
524523 & self ,
525524 module_specifier : & ModuleSpecifier ,
526525 _maybe_referrer : Option < & ModuleLoadReferrer > ,
527- _is_dyn_import : bool ,
528- _requested_module_type : RequestedModuleType ,
526+ _options : ModuleLoadOptions ,
529527 ) -> ModuleLoadResponse {
530528 let res = if let Some ( code) = self . map . get ( module_specifier) {
531529 Ok ( ModuleSource :: new (
@@ -593,16 +591,12 @@ impl<L: ModuleLoader> ModuleLoader for TestingModuleLoader<L> {
593591 & self ,
594592 module_specifier : & ModuleSpecifier ,
595593 maybe_referrer : Option < String > ,
596- is_dyn_import : bool ,
597- requested_module_type : RequestedModuleType ,
594+ options : ModuleLoadOptions ,
598595 ) -> Pin < Box < dyn Future < Output = Result < ( ) , ModuleLoaderError > > > > {
599596 self . prepare_count . set ( self . prepare_count . get ( ) + 1 ) ;
600- self . loader . prepare_load (
601- module_specifier,
602- maybe_referrer,
603- is_dyn_import,
604- requested_module_type,
605- )
597+ self
598+ . loader
599+ . prepare_load ( module_specifier, maybe_referrer, options)
606600 }
607601
608602 fn finish_load ( & self ) {
@@ -614,17 +608,11 @@ impl<L: ModuleLoader> ModuleLoader for TestingModuleLoader<L> {
614608 & self ,
615609 module_specifier : & ModuleSpecifier ,
616610 maybe_referrer : Option < & ModuleLoadReferrer > ,
617- is_dyn_import : bool ,
618- requested_module_type : RequestedModuleType ,
611+ options : ModuleLoadOptions ,
619612 ) -> ModuleLoadResponse {
620613 self . load_count . set ( self . load_count . get ( ) + 1 ) ;
621614 self . log . borrow_mut ( ) . push ( module_specifier. clone ( ) ) ;
622- self . loader . load (
623- module_specifier,
624- maybe_referrer,
625- is_dyn_import,
626- requested_module_type,
627- )
615+ self . loader . load ( module_specifier, maybe_referrer, options)
628616 }
629617}
630618
0 commit comments