Skip to content

Commit f9580d8

Browse files
committed
fix(transformer/module_runner): handle re-export as deps (#9696)
There wasn't a test case for this on Vite, but missing re-export deps is spotted as a test case on Vitest vitest-dev/vitest#7646. I'll add a test case on Vite vitejs/rolldown-vite#85 and the same one is added here.
1 parent ab594f1 commit f9580d8

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

crates/oxc_transformer/src/plugins/module_runner_transform.rs

+23-4
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)