@@ -33,6 +33,91 @@ export function removeImport(name, root, j) {
33
33
} ,
34
34
} ) ;
35
35
36
+ // Require statements with call expressions like `var globalThis = require('globalthis')()`
37
+ const requireCallExpression = root . find ( j . VariableDeclarator , {
38
+ init : {
39
+ callee : {
40
+ type : 'CallExpression' ,
41
+ callee : {
42
+ name : 'require' ,
43
+ } ,
44
+ arguments : [
45
+ {
46
+ value : name ,
47
+ } ,
48
+ ] ,
49
+ } ,
50
+ } ,
51
+ } ) ;
52
+
53
+ // Same as above without variable declaration like `require('globalthis')()`
54
+ const sideEffectRequireCallExpression = root . find ( j . ExpressionStatement , {
55
+ expression : {
56
+ callee : {
57
+ type : 'CallExpression' ,
58
+ callee : {
59
+ name : 'require' ,
60
+ } ,
61
+ arguments : [
62
+ {
63
+ value : name ,
64
+ } ,
65
+ ] ,
66
+ } ,
67
+ } ,
68
+ } ) ;
69
+
70
+ // Require chained call expressions like `var globalThis = require('globalthis').shim()`
71
+ const requireMethodCallExpression = root . find ( j . VariableDeclarator , {
72
+ init : {
73
+ type : 'CallExpression' ,
74
+ callee : {
75
+ type : 'MemberExpression' ,
76
+ object : {
77
+ type : 'CallExpression' ,
78
+ callee : {
79
+ name : 'require' ,
80
+ } ,
81
+ arguments : [
82
+ {
83
+ value : name ,
84
+ } ,
85
+ ] ,
86
+ } ,
87
+ property : {
88
+ type : 'Identifier' ,
89
+ } ,
90
+ } ,
91
+ } ,
92
+ } ) ;
93
+
94
+ // Same as above without variable declaration like `require('globalthis').shim()`
95
+ const sideEffectRequireMethodCallExpression = root . find (
96
+ j . ExpressionStatement ,
97
+ {
98
+ expression : {
99
+ type : 'CallExpression' ,
100
+ callee : {
101
+ type : 'MemberExpression' ,
102
+ object : {
103
+ type : 'CallExpression' ,
104
+ callee : {
105
+ name : 'require' ,
106
+ } ,
107
+ arguments : [
108
+ {
109
+ value : name ,
110
+ } ,
111
+ ] ,
112
+ } ,
113
+ property : {
114
+ type : 'Identifier' ,
115
+ } ,
116
+ } ,
117
+ } ,
118
+ } ,
119
+ ) ;
120
+
36
121
// Require statements without declarations like `Object.is = require("object-is");`
37
122
const requireAssignment = root . find ( j . AssignmentExpression , {
38
123
operator : '=' ,
@@ -64,17 +149,25 @@ export function removeImport(name, root, j) {
64
149
65
150
// Return the identifier name, e.g. 'fn' in `import { fn } from 'is-boolean-object'`
66
151
// or `var fn = require('is-boolean-object')`
67
- const identifier =
68
- importDeclaration . paths ( ) . length > 0
69
- ? importDeclaration . get ( ) . node . specifiers [ 0 ] . local . name
70
- : requireDeclaration . paths ( ) . length > 0
71
- ? requireDeclaration . find ( j . Identifier ) . get ( ) . node . name
72
- : requireAssignment . paths ( ) . length > 0
73
- ? requireAssignment . find ( j . Identifier ) . get ( ) . node . name
74
- : null ;
152
+ let identifier = null ;
153
+ if ( importDeclaration . paths ( ) . length > 0 ) {
154
+ identifier = importDeclaration . get ( ) . node . specifiers [ 0 ] . local . name ;
155
+ } else if ( requireDeclaration . paths ( ) . length > 0 ) {
156
+ identifier = requireDeclaration . find ( j . Identifier ) . get ( ) . node . name ;
157
+ } else if ( requireCallExpression . paths ( ) . length > 0 ) {
158
+ identifier = requireCallExpression . find ( j . Identifier ) . get ( ) . node . name ;
159
+ } else if ( requireMethodCallExpression . paths ( ) . length > 0 ) {
160
+ identifier = requireMethodCallExpression . find ( j . Identifier ) . get ( ) . node . name ;
161
+ } else if ( requireAssignment . paths ( ) . length > 0 ) {
162
+ identifier = requireAssignment . find ( j . Identifier ) . get ( ) . node . name ;
163
+ }
75
164
76
165
importDeclaration . remove ( ) ;
77
166
requireDeclaration . remove ( ) ;
167
+ requireCallExpression . remove ( ) ;
168
+ sideEffectRequireCallExpression . remove ( ) ;
169
+ requireMethodCallExpression . remove ( ) ;
170
+ sideEffectRequireMethodCallExpression . remove ( ) ;
78
171
requireAssignment . remove ( ) ;
79
172
sideEffectRequireExpression . remove ( ) ;
80
173
0 commit comments