Skip to content

Commit 22c8e2e

Browse files
authoredFeb 19, 2024··
fix(es/typescript): Handle exported JSX members (#8642)
**Related issue:** - Closes #8640
1 parent 90f7a29 commit 22c8e2e

File tree

4 files changed

+45
-0
lines changed

4 files changed

+45
-0
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"jsc": {
3+
"parser": {
4+
"syntax": "typescript",
5+
"tsx": true
6+
},
7+
"target": "es2020",
8+
"loose": false,
9+
"minify": {
10+
"compress": false,
11+
"mangle": false
12+
},
13+
},
14+
"module": {
15+
"type": "es6"
16+
},
17+
"minify": false,
18+
"isModule": true
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import * as React from 'react';
2+
3+
export namespace Ns {
4+
export const Context = React.createContext()
5+
export const Component = () => <Context.Provider />;
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import * as React from 'react';
2+
export var Ns;
3+
(function(Ns) {
4+
Ns.Context = React.createContext();
5+
Ns.Component = ()=>React.createElement(Ns.Context.Provider, null);
6+
})(Ns || (Ns = {}));

‎crates/swc_ecma_utils/src/lib.rs

+14
Original file line numberDiff line numberDiff line change
@@ -3212,6 +3212,20 @@ where
32123212
}
32133213
}
32143214
}
3215+
3216+
fn visit_mut_jsx_object(&mut self, n: &mut JSXObject) {
3217+
n.visit_mut_children_with(self);
3218+
3219+
if let JSXObject::Ident(ident) = n {
3220+
if let Some(expr) = self.query.query_jsx(ident) {
3221+
*n = match expr {
3222+
JSXElementName::Ident(ident) => ident.into(),
3223+
JSXElementName::JSXMemberExpr(expr) => Box::new(expr).into(),
3224+
JSXElementName::JSXNamespacedName(..) => unimplemented!(),
3225+
}
3226+
}
3227+
}
3228+
}
32153229
}
32163230

32173231
#[cfg(test)]

0 commit comments

Comments
 (0)
Please sign in to comment.