From db3b05b253f27be634a44ecf5bf9d2029e77bc30 Mon Sep 17 00:00:00 2001 From: Eoghan Murray Date: Mon, 10 Feb 2025 17:17:58 +0000 Subject: [PATCH 01/25] Iterate over the added nodes in 'one pass' so that we don't need to backtrack; pushAdd requires that each new node has a parentId and a nextId --- packages/rrweb/src/record/mutation.ts | 29 +++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/packages/rrweb/src/record/mutation.ts b/packages/rrweb/src/record/mutation.ts index 08e927a98f..199608fa97 100644 --- a/packages/rrweb/src/record/mutation.ts +++ b/packages/rrweb/src/record/mutation.ts @@ -291,23 +291,24 @@ export default class MutationBuffer { if (!parent || !inDom(n)) { return; } + + const parentId = isShadowRoot(parent) + ? this.mirror.getId(getShadowHost(n)) + : this.mirror.getId(parent); + let cssCaptured = false; if (n.nodeType === Node.TEXT_NODE) { const parentTag = (parent as Element).tagName; if (parentTag === 'TEXTAREA') { // genTextAreaValueMutation already called via parent return; - } else if (parentTag === 'STYLE' && this.addedSet.has(parent)) { + } else if (parentTag === 'STYLE' && (this.addedSet.has(parent) || addedIds.has(parentId))) { // css content will be recorded via parent's _cssText attribute when // mutation adds entire