From 20b520aa40d811dfd297b63fd66276d371b85b90 Mon Sep 17 00:00:00 2001 From: David Ortner Date: Sat, 31 Aug 2024 15:50:06 +0200 Subject: [PATCH] fix: [#1527] Fixes problem where it is not possible to observe again after disconnecting in MutationObserver (#1525) --- .../src/mutation-observer/MutationObserver.ts | 10 ++++++++-- packages/happy-dom/src/window/BrowserWindow.ts | 4 +++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/happy-dom/src/mutation-observer/MutationObserver.ts b/packages/happy-dom/src/mutation-observer/MutationObserver.ts index ffb4a7f91..0a3adafbd 100644 --- a/packages/happy-dom/src/mutation-observer/MutationObserver.ts +++ b/packages/happy-dom/src/mutation-observer/MutationObserver.ts @@ -133,8 +133,6 @@ export default class MutationObserver { * Disconnects. */ public disconnect(): void { - this.#destroyed = true; - if (this.#listeners.length === 0) { return; } @@ -166,4 +164,12 @@ export default class MutationObserver { } return records; } + + /** + * + */ + public [PropertySymbol.destroy](): void { + this.#destroyed = true; + this.disconnect(); + } } diff --git a/packages/happy-dom/src/window/BrowserWindow.ts b/packages/happy-dom/src/window/BrowserWindow.ts index be454175d..1d1964d8c 100644 --- a/packages/happy-dom/src/window/BrowserWindow.ts +++ b/packages/happy-dom/src/window/BrowserWindow.ts @@ -1462,7 +1462,9 @@ export default class BrowserWindow extends EventTarget implements INodeJSGlobal const mutationObservers = this[PropertySymbol.mutationObservers]; for (const mutationObserver of mutationObservers) { - mutationObserver.disconnect(); + if (mutationObserver[PropertySymbol.destroy]) { + mutationObserver[PropertySymbol.destroy](); + } } this[PropertySymbol.mutationObservers] = [];