diff --git a/src/sandbox/patchers/windowListener.ts b/src/sandbox/patchers/windowListener.ts index 58da3b4..677ddde 100644 --- a/src/sandbox/patchers/windowListener.ts +++ b/src/sandbox/patchers/windowListener.ts @@ -6,69 +6,40 @@ import { noop } from 'lodash'; -const rawWindowAddEventListener = window.addEventListener; -const rawWindowRemoveEventListener = window.removeEventListener; -const rawDocAddEventListener = document.addEventListener; -const rawDocRemoveEventListener = document.removeEventListener; +const rawAddEventListener = window.addEventListener; +const rawRemoveEventListener = window.removeEventListener; export default function patch(global: WindowProxy) { - const windowListenerMap = new Map(); - const docListenerMap = new Map(); + const listenerMap = new Map(); global.addEventListener = ( type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions, ) => { - const listeners = windowListenerMap.get(type) || []; - windowListenerMap.set(type, [...listeners, listener]); - return rawWindowAddEventListener.call(window, type, listener, options); + const listeners = listenerMap.get(type) || []; + listenerMap.set(type, [...listeners, listener]); + return rawAddEventListener.call(window, type, listener, options); }; + global.removeEventListener = ( type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions, ) => { - const storedTypeListeners = windowListenerMap.get(type); + const storedTypeListeners = listenerMap.get(type); if (storedTypeListeners && storedTypeListeners.length && storedTypeListeners.indexOf(listener) !== -1) { storedTypeListeners.splice(storedTypeListeners.indexOf(listener), 1); } - return rawWindowRemoveEventListener.call(window, type, listener, options); - }; - - document.addEventListener = ( - type: string, - listener: EventListenerOrEventListenerObject, - options?: boolean | AddEventListenerOptions, - ) => { - const listeners = docListenerMap.get(type) || []; - docListenerMap.set(type, [...listeners, listener]); - return rawDocAddEventListener.call(document, type, listener, options); - }; - document.removeEventListener = ( - type: string, - listener: EventListenerOrEventListenerObject, - options?: boolean | AddEventListenerOptions, - ) => { - const storedTypeListeners = docListenerMap.get(type); - if (storedTypeListeners && storedTypeListeners.length && storedTypeListeners.indexOf(listener) !== -1) { - storedTypeListeners.splice(storedTypeListeners.indexOf(listener), 1); - } - return rawDocRemoveEventListener.call(document, type, listener, options); + return rawRemoveEventListener.call(window, type, listener, options); }; return function free() { - windowListenerMap.forEach((listeners, type) => + listenerMap.forEach((listeners, type) => [...listeners].forEach((listener) => global.removeEventListener(type, listener)), ); - docListenerMap.forEach((listeners, type) => - [...listeners].forEach((listener) => document.removeEventListener(type, listener)), - ); - - global.addEventListener = rawWindowAddEventListener; - global.removeEventListener = rawWindowRemoveEventListener; - document.addEventListener = rawDocAddEventListener; - document.removeEventListener = rawDocRemoveEventListener; + global.addEventListener = rawAddEventListener; + global.removeEventListener = rawRemoveEventListener; return noop; };