@@ -241,18 +241,30 @@ const extractJestObjExprIfHoistable = <T extends Node>(
241
241
} ;
242
242
243
243
/* eslint-disable sort-keys,@typescript-eslint/explicit-module-boundary-types */
244
- export default ( ) : PluginObj < { jestObjGetterIdentifier : Identifier } > => ( {
244
+ export default ( ) : PluginObj < {
245
+ declareJestObjGetterIdentifier : ( ) => Identifier ;
246
+ jestObjGetterIdentifier ?: Identifier ;
247
+ } > => ( {
245
248
pre ( { path : program } : { path : NodePath < Program > } ) {
246
- this . jestObjGetterIdentifier = program . scope . generateUidIdentifier (
247
- 'getJestObj' ,
248
- ) ;
249
- program . unshiftContainer ( 'body' , [
250
- createJestObjectGetter ( {
251
- GETTER_NAME : this . jestObjGetterIdentifier . name ,
252
- JEST_GLOBALS_MODULE_JEST_EXPORT_NAME ,
253
- JEST_GLOBALS_MODULE_NAME ,
254
- } ) ,
255
- ] ) ;
249
+ this . declareJestObjGetterIdentifier = ( ) => {
250
+ if ( this . jestObjGetterIdentifier ) {
251
+ return this . jestObjGetterIdentifier ;
252
+ }
253
+
254
+ this . jestObjGetterIdentifier = program . scope . generateUidIdentifier (
255
+ 'getJestObj' ,
256
+ ) ;
257
+
258
+ program . unshiftContainer ( 'body' , [
259
+ createJestObjectGetter ( {
260
+ GETTER_NAME : this . jestObjGetterIdentifier . name ,
261
+ JEST_GLOBALS_MODULE_JEST_EXPORT_NAME ,
262
+ JEST_GLOBALS_MODULE_NAME ,
263
+ } ) ,
264
+ ] ) ;
265
+
266
+ return this . jestObjGetterIdentifier ;
267
+ } ;
256
268
} ,
257
269
visitor : {
258
270
ExpressionStatement ( exprStmt ) {
@@ -261,7 +273,7 @@ export default (): PluginObj<{jestObjGetterIdentifier: Identifier}> => ({
261
273
) ;
262
274
if ( jestObjExpr ) {
263
275
jestObjExpr . replaceWith (
264
- callExpression ( this . jestObjGetterIdentifier , [ ] ) ,
276
+ callExpression ( this . declareJestObjGetterIdentifier ( ) , [ ] ) ,
265
277
) ;
266
278
}
267
279
} ,
@@ -275,7 +287,7 @@ export default (): PluginObj<{jestObjGetterIdentifier: Identifier}> => ({
275
287
} = callExpr ;
276
288
if (
277
289
isIdentifier ( callee ) &&
278
- callee . name === this . jestObjGetterIdentifier . name
290
+ callee . name === this . jestObjGetterIdentifier ? .name
279
291
) {
280
292
const mockStmt = callExpr . getStatementParent ( ) ;
281
293
const mockStmtNode = mockStmt . node ;
0 commit comments