@@ -425,6 +425,7 @@ impl<'a> ModuleRunnerTransform<'a> {
425425 } else {
426426 // If the source is Some, then we need to import the module first and then export them.
427427 let import_binding = source. map ( |source| {
428+ self . deps . push ( source. value . to_string ( ) ) ;
428429 let binding = self . generate_import_binding ( ctx) ;
429430 let pattern = binding. create_binding_pattern ( ctx) ;
430431 let imported_names = ctx. ast . vec_from_iter ( specifiers. iter ( ) . map ( |specifier| {
@@ -487,6 +488,7 @@ impl<'a> ModuleRunnerTransform<'a> {
487488 ctx : & mut TraverseCtx < ' a > ,
488489 ) {
489490 let ExportAllDeclaration { span, source, exported, .. } = export. unbox ( ) ;
491+ self . deps . push ( source. value . to_string ( ) ) ;
490492 let binding = self . generate_import_binding ( ctx) ;
491493 let pattern = binding. create_binding_pattern ( ctx) ;
492494 let arguments =
@@ -815,7 +817,10 @@ mod test {
815817
816818 use super :: ModuleRunnerTransform ;
817819
818- fn transform ( source_text : & str , is_jsx : bool ) -> Result < String , Vec < OxcDiagnostic > > {
820+ fn transform (
821+ source_text : & str ,
822+ is_jsx : bool ,
823+ ) -> Result < ( String , Vec < String > , Vec < String > ) , Vec < OxcDiagnostic > > {
819824 let source_type = SourceType :: default ( ) . with_jsx ( is_jsx) ;
820825 let allocator = Allocator :: default ( ) ;
821826 let ret = Parser :: new ( & allocator, source_text, source_type) . parse ( ) ;
@@ -843,7 +848,7 @@ mod test {
843848 } )
844849 . build ( & program)
845850 . code ;
846- Ok ( code)
851+ Ok ( ( code, module_runner_transform . deps , module_runner_transform . dynamic_deps ) )
847852 }
848853
849854 fn format_expected_code ( source_text : & str ) -> String {
@@ -863,7 +868,7 @@ mod test {
863868
864869 fn test_same ( source_text : & str , expected : & str ) {
865870 let expected = format_expected_code ( expected) ;
866- let result = transform ( source_text, false ) . unwrap ( ) ;
871+ let result = transform ( source_text, false ) . unwrap ( ) . 0 ;
867872 if result != expected {
868873 let diff = TextDiff :: from_lines ( & expected, & result) ;
869874 print_diff_in_terminal ( & diff) ;
@@ -873,7 +878,7 @@ mod test {
873878
874879 fn test_same_jsx ( source_text : & str , expected : & str ) {
875880 let expected = format_expected_code ( expected) ;
876- let result = transform ( source_text, true ) . unwrap ( ) ;
881+ let result = transform ( source_text, true ) . unwrap ( ) . 0 ;
877882 if result != expected {
878883 let diff = TextDiff :: from_lines ( & expected, & result) ;
879884 print_diff_in_terminal ( & diff) ;
@@ -2068,4 +2073,18 @@ const c = () => {
20682073};" ,
20692074 ) ;
20702075 }
2076+
2077+ #[ test]
2078+ fn deps ( ) {
2079+ let code = r#"
2080+ import a from "a";
2081+ export { b } from "b";
2082+ export * from "c";
2083+ export * as d from "d";
2084+ import("e")
2085+ "# ;
2086+ let result = transform ( code, false ) . unwrap ( ) ;
2087+ assert_eq ! ( result. 1 , vec![ "a" , "b" , "c" , "d" ] ) ;
2088+ assert_eq ! ( result. 2 , vec![ "e" ] ) ;
2089+ }
20712090}
0 commit comments