diff --git a/crates/oxc_transformer/src/react/jsx_source.rs b/crates/oxc_transformer/src/react/jsx_source.rs
index 5ba0a8f0f..29a64d3d5 100644
--- a/crates/oxc_transformer/src/react/jsx_source.rs
+++ b/crates/oxc_transformer/src/react/jsx_source.rs
@@ -59,6 +59,12 @@ impl<'a> ReactJsxSource<'a> {
}
impl<'a> Traverse<'a> for ReactJsxSource<'a> {
+ fn exit_program(&mut self, program: &mut Program<'a>, _ctx: &mut TraverseCtx<'a>) {
+ if let Some(stmt) = self.get_var_file_name_statement() {
+ program.body.insert(0, stmt);
+ }
+ }
+
fn enter_jsx_opening_element(
&mut self,
elem: &mut JSXOpeningElement<'a>,
diff --git a/crates/oxc_transformer/src/react/mod.rs b/crates/oxc_transformer/src/react/mod.rs
index c9523b6ad..9984c5525 100644
--- a/crates/oxc_transformer/src/react/mod.rs
+++ b/crates/oxc_transformer/src/react/mod.rs
@@ -84,6 +84,8 @@ impl<'a> Traverse<'a> for React<'a> {
}
if self.jsx_plugin {
self.jsx.exit_program(program, ctx);
+ } else if self.jsx_source_plugin {
+ self.jsx.jsx_source.exit_program(program, ctx);
}
}
diff --git a/tasks/transform_conformance/oxc.snap.md b/tasks/transform_conformance/oxc.snap.md
index 373fd2467..8b6c759e1 100644
--- a/tasks/transform_conformance/oxc.snap.md
+++ b/tasks/transform_conformance/oxc.snap.md
@@ -1,12 +1,13 @@
commit: 3bcfee23
-Passed: 46/56
+Passed: 47/57
# All Passed:
* babel-plugin-transform-nullish-coalescing-operator
* babel-plugin-transform-optional-catch-binding
* babel-plugin-transform-arrow-functions
* babel-preset-typescript
+* babel-plugin-transform-react-jsx-source
* regexp
diff --git a/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/input.jsx b/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/input.jsx
new file mode 100644
index 000000000..51fee284e
--- /dev/null
+++ b/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/input.jsx
@@ -0,0 +1 @@
+var x = ;
diff --git a/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/output.jsx b/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/output.jsx
new file mode 100644
index 000000000..9b04721c9
--- /dev/null
+++ b/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/output.jsx
@@ -0,0 +1,6 @@
+var _jsxFileName = "/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/input.jsx";
+var x = ;
diff --git a/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/options.json b/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/options.json
new file mode 100644
index 000000000..7c7160027
--- /dev/null
+++ b/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/options.json
@@ -0,0 +1,3 @@
+{
+ "plugins": ["syntax-jsx", "transform-react-jsx-source"]
+}