@@ -307,10 +307,22 @@ function createCompatUtils(window: DOMWindow): CompatUtils {
307307}
308308
309309function patchAddEventListener ( window : DOMWindow ) {
310+ const abortControllers = new WeakMap < AbortSignal , AbortController > ( )
310311 const JSDOMAbortSignal = window . AbortSignal
311312 const JSDOMAbortController = window . AbortController
312313 const originalAddEventListener = window . EventTarget . prototype . addEventListener
313314
315+ function getJsdomAbortController ( signal : AbortSignal ) {
316+ if ( ! abortControllers . has ( signal ) ) {
317+ const jsdomAbortController = new JSDOMAbortController ( )
318+ signal . addEventListener ( 'abort' , ( ) => {
319+ jsdomAbortController . abort ( signal . reason )
320+ } )
321+ abortControllers . set ( signal , jsdomAbortController )
322+ }
323+ return abortControllers . get ( signal ) !
324+ }
325+
314326 window . EventTarget . prototype . addEventListener = function addEventListener (
315327 type : string ,
316328 callback : EventListenerOrEventListenerObject | null ,
@@ -328,10 +340,7 @@ function patchAddEventListener(window: DOMWindow) {
328340
329341 // use jsdom-native abort controller instead and forward the
330342 // previous one with `addEventListener`
331- const jsdomAbortController = new JSDOMAbortController ( )
332- signal . addEventListener ( 'abort' , ( ) => {
333- jsdomAbortController . abort ( signal . reason )
334- } )
343+ const jsdomAbortController = getJsdomAbortController ( signal )
335344
336345 jsdomCompatOptions . signal = jsdomAbortController . signal
337346 return originalAddEventListener . call ( this , type , callback , jsdomCompatOptions )
0 commit comments