Skip to content

Commit 4389cf3

Browse files
author
Aleksey Kolesnikov
committed
Revert "Revert "feat!: implement facebook/react#21104 close Jack-Works#4 (Jack-Works#5)", close Jack-Works#2"
This reverts commit 9458493.
1 parent 7d87f3d commit 4389cf3

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed

tests/hooks-support-IIFE.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// ? works with IIFE
2+
while (item) {
3+
;((item) => {
4+
useFoo()
5+
})(item)
6+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
var _a;
2+
_a = $RefreshSig$();
3+
// ? works with IIFE
4+
while (item) {
5+
;
6+
(_a((item) => {
7+
_a();
8+
useFoo();
9+
}, "useFoo{}", true))(item);
10+
}

typescript/src/core.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,7 @@ export default function (opts: Options = {}): TransformerFactory<SourceFile> {
305305
node = newFunction
306306
// if it is an inner decl, we can update it safely
307307
if (findAncestor(oldNode.parent, ts.isFunctionLike)) node = wrapped
308+
else if (isIIFEFunction(oldNode)) return wrapped
308309
}
309310
}
310311
return updateStatements(node, addSignatureReport)
@@ -646,6 +647,12 @@ export default function (opts: Options = {}): TransformerFactory<SourceFile> {
646647
if (['createElement', 'jsx', 'jsxs', 'jsxDEV'].includes(f)) return true
647648
return false
648649
}
650+
function isIIFEFunction(f: HandledFunction): boolean {
651+
let node: Node = f
652+
while (ts.isParenthesizedExpression(node.parent)) node = node.parent
653+
if (ts.isCallExpression(node.parent) && node.parent.expression === node) return true
654+
return false
655+
}
649656
}
650657

651658
function startsWithLowerCase(str: string) {

0 commit comments

Comments
 (0)