Fix live accept cleanup for mapped lists (#229)

This commit is contained in:
Paul Bakaus
2026-06-08 11:30:15 -07:00
committed by GitHub
parent cbd6d80c26
commit afb8029a50
16 changed files with 465 additions and 315 deletions
@@ -6855,7 +6855,14 @@ void main() {
function scheduleAcceptCleanup(accepted) {
setTimeout(function() {
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
if (!accepted?.isSvelteComponent && !acceptedDomAlreadyClean(accepted)) {
setTimeout(function() {
if (pendingAcceptedSession?.id !== accepted?.id) return;
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
cleanupAcceptedSession();
}, 1800);
return;
}
cleanupAcceptedSession();
}, 1200);
}
@@ -6884,39 +6891,42 @@ void main() {
function acceptedDomAlreadyClean(pending) {
if (!pending?.acceptedSelector) return false;
const matches = [...document.querySelectorAll(pending.acceptedSelector)];
return matches.some((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant]'));
return matches.length > 0
&& matches.every((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant],[data-impeccable-carbonize]'));
}
function ensureAcceptedDomClean(pending) {
if (acceptedDomAlreadyClean(pending)) return;
const sessionId = pending?.id;
const variantId = pending?.variant;
const wrapper = findAcceptedRuntimeWrapper(sessionId);
const accepted = wrapper?.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!wrapper) {
const wrappers = findAcceptedRuntimeWrappers(sessionId);
if (wrappers.length === 0) {
restoreAcceptedDomFromSnapshot(pending);
return;
}
if (acceptedDomAlreadyClean(pending)) {
for (const wrapper of wrappers) {
if (!wrapper?.isConnected) continue;
const accepted = wrapper.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!accepted) {
wrapper.remove();
continue;
}
const parent = wrapper.parentElement;
if (!parent) continue;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
return;
}
if (!accepted) {
wrapper.remove();
restoreAcceptedDomFromSnapshot(pending);
return;
}
const parent = wrapper.parentElement;
if (!parent) return;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
if (!acceptedDomAlreadyClean(pending)) restoreAcceptedDomFromSnapshot(pending);
}
function findAcceptedRuntimeWrapper(sessionId) {
if (!sessionId) return null;
return document.querySelector('[data-impeccable-variants="' + sessionId + '"]')
|| document.querySelector('[data-impeccable-carbonize="' + sessionId + '"]');
function findAcceptedRuntimeWrappers(sessionId) {
if (!sessionId) return [];
return [...new Set([
...document.querySelectorAll('[data-impeccable-variants="' + sessionId + '"]'),
...document.querySelectorAll('[data-impeccable-carbonize="' + sessionId + '"]'),
])];
}
function restoreAcceptedDomFromSnapshot(pending) {
@@ -6855,7 +6855,14 @@ void main() {
function scheduleAcceptCleanup(accepted) {
setTimeout(function() {
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
if (!accepted?.isSvelteComponent && !acceptedDomAlreadyClean(accepted)) {
setTimeout(function() {
if (pendingAcceptedSession?.id !== accepted?.id) return;
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
cleanupAcceptedSession();
}, 1800);
return;
}
cleanupAcceptedSession();
}, 1200);
}
@@ -6884,39 +6891,42 @@ void main() {
function acceptedDomAlreadyClean(pending) {
if (!pending?.acceptedSelector) return false;
const matches = [...document.querySelectorAll(pending.acceptedSelector)];
return matches.some((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant]'));
return matches.length > 0
&& matches.every((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant],[data-impeccable-carbonize]'));
}
function ensureAcceptedDomClean(pending) {
if (acceptedDomAlreadyClean(pending)) return;
const sessionId = pending?.id;
const variantId = pending?.variant;
const wrapper = findAcceptedRuntimeWrapper(sessionId);
const accepted = wrapper?.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!wrapper) {
const wrappers = findAcceptedRuntimeWrappers(sessionId);
if (wrappers.length === 0) {
restoreAcceptedDomFromSnapshot(pending);
return;
}
if (acceptedDomAlreadyClean(pending)) {
for (const wrapper of wrappers) {
if (!wrapper?.isConnected) continue;
const accepted = wrapper.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!accepted) {
wrapper.remove();
continue;
}
const parent = wrapper.parentElement;
if (!parent) continue;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
return;
}
if (!accepted) {
wrapper.remove();
restoreAcceptedDomFromSnapshot(pending);
return;
}
const parent = wrapper.parentElement;
if (!parent) return;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
if (!acceptedDomAlreadyClean(pending)) restoreAcceptedDomFromSnapshot(pending);
}
function findAcceptedRuntimeWrapper(sessionId) {
if (!sessionId) return null;
return document.querySelector('[data-impeccable-variants="' + sessionId + '"]')
|| document.querySelector('[data-impeccable-carbonize="' + sessionId + '"]');
function findAcceptedRuntimeWrappers(sessionId) {
if (!sessionId) return [];
return [...new Set([
...document.querySelectorAll('[data-impeccable-variants="' + sessionId + '"]'),
...document.querySelectorAll('[data-impeccable-carbonize="' + sessionId + '"]'),
])];
}
function restoreAcceptedDomFromSnapshot(pending) {
@@ -6855,7 +6855,14 @@ void main() {
function scheduleAcceptCleanup(accepted) {
setTimeout(function() {
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
if (!accepted?.isSvelteComponent && !acceptedDomAlreadyClean(accepted)) {
setTimeout(function() {
if (pendingAcceptedSession?.id !== accepted?.id) return;
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
cleanupAcceptedSession();
}, 1800);
return;
}
cleanupAcceptedSession();
}, 1200);
}
@@ -6884,39 +6891,42 @@ void main() {
function acceptedDomAlreadyClean(pending) {
if (!pending?.acceptedSelector) return false;
const matches = [...document.querySelectorAll(pending.acceptedSelector)];
return matches.some((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant]'));
return matches.length > 0
&& matches.every((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant],[data-impeccable-carbonize]'));
}
function ensureAcceptedDomClean(pending) {
if (acceptedDomAlreadyClean(pending)) return;
const sessionId = pending?.id;
const variantId = pending?.variant;
const wrapper = findAcceptedRuntimeWrapper(sessionId);
const accepted = wrapper?.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!wrapper) {
const wrappers = findAcceptedRuntimeWrappers(sessionId);
if (wrappers.length === 0) {
restoreAcceptedDomFromSnapshot(pending);
return;
}
if (acceptedDomAlreadyClean(pending)) {
for (const wrapper of wrappers) {
if (!wrapper?.isConnected) continue;
const accepted = wrapper.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!accepted) {
wrapper.remove();
continue;
}
const parent = wrapper.parentElement;
if (!parent) continue;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
return;
}
if (!accepted) {
wrapper.remove();
restoreAcceptedDomFromSnapshot(pending);
return;
}
const parent = wrapper.parentElement;
if (!parent) return;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
if (!acceptedDomAlreadyClean(pending)) restoreAcceptedDomFromSnapshot(pending);
}
function findAcceptedRuntimeWrapper(sessionId) {
if (!sessionId) return null;
return document.querySelector('[data-impeccable-variants="' + sessionId + '"]')
|| document.querySelector('[data-impeccable-carbonize="' + sessionId + '"]');
function findAcceptedRuntimeWrappers(sessionId) {
if (!sessionId) return [];
return [...new Set([
...document.querySelectorAll('[data-impeccable-variants="' + sessionId + '"]'),
...document.querySelectorAll('[data-impeccable-carbonize="' + sessionId + '"]'),
])];
}
function restoreAcceptedDomFromSnapshot(pending) {
@@ -6855,7 +6855,14 @@ void main() {
function scheduleAcceptCleanup(accepted) {
setTimeout(function() {
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
if (!accepted?.isSvelteComponent && !acceptedDomAlreadyClean(accepted)) {
setTimeout(function() {
if (pendingAcceptedSession?.id !== accepted?.id) return;
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
cleanupAcceptedSession();
}, 1800);
return;
}
cleanupAcceptedSession();
}, 1200);
}
@@ -6884,39 +6891,42 @@ void main() {
function acceptedDomAlreadyClean(pending) {
if (!pending?.acceptedSelector) return false;
const matches = [...document.querySelectorAll(pending.acceptedSelector)];
return matches.some((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant]'));
return matches.length > 0
&& matches.every((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant],[data-impeccable-carbonize]'));
}
function ensureAcceptedDomClean(pending) {
if (acceptedDomAlreadyClean(pending)) return;
const sessionId = pending?.id;
const variantId = pending?.variant;
const wrapper = findAcceptedRuntimeWrapper(sessionId);
const accepted = wrapper?.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!wrapper) {
const wrappers = findAcceptedRuntimeWrappers(sessionId);
if (wrappers.length === 0) {
restoreAcceptedDomFromSnapshot(pending);
return;
}
if (acceptedDomAlreadyClean(pending)) {
for (const wrapper of wrappers) {
if (!wrapper?.isConnected) continue;
const accepted = wrapper.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!accepted) {
wrapper.remove();
continue;
}
const parent = wrapper.parentElement;
if (!parent) continue;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
return;
}
if (!accepted) {
wrapper.remove();
restoreAcceptedDomFromSnapshot(pending);
return;
}
const parent = wrapper.parentElement;
if (!parent) return;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
if (!acceptedDomAlreadyClean(pending)) restoreAcceptedDomFromSnapshot(pending);
}
function findAcceptedRuntimeWrapper(sessionId) {
if (!sessionId) return null;
return document.querySelector('[data-impeccable-variants="' + sessionId + '"]')
|| document.querySelector('[data-impeccable-carbonize="' + sessionId + '"]');
function findAcceptedRuntimeWrappers(sessionId) {
if (!sessionId) return [];
return [...new Set([
...document.querySelectorAll('[data-impeccable-variants="' + sessionId + '"]'),
...document.querySelectorAll('[data-impeccable-carbonize="' + sessionId + '"]'),
])];
}
function restoreAcceptedDomFromSnapshot(pending) {
@@ -6855,7 +6855,14 @@ void main() {
function scheduleAcceptCleanup(accepted) {
setTimeout(function() {
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
if (!accepted?.isSvelteComponent && !acceptedDomAlreadyClean(accepted)) {
setTimeout(function() {
if (pendingAcceptedSession?.id !== accepted?.id) return;
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
cleanupAcceptedSession();
}, 1800);
return;
}
cleanupAcceptedSession();
}, 1200);
}
@@ -6884,39 +6891,42 @@ void main() {
function acceptedDomAlreadyClean(pending) {
if (!pending?.acceptedSelector) return false;
const matches = [...document.querySelectorAll(pending.acceptedSelector)];
return matches.some((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant]'));
return matches.length > 0
&& matches.every((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant],[data-impeccable-carbonize]'));
}
function ensureAcceptedDomClean(pending) {
if (acceptedDomAlreadyClean(pending)) return;
const sessionId = pending?.id;
const variantId = pending?.variant;
const wrapper = findAcceptedRuntimeWrapper(sessionId);
const accepted = wrapper?.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!wrapper) {
const wrappers = findAcceptedRuntimeWrappers(sessionId);
if (wrappers.length === 0) {
restoreAcceptedDomFromSnapshot(pending);
return;
}
if (acceptedDomAlreadyClean(pending)) {
for (const wrapper of wrappers) {
if (!wrapper?.isConnected) continue;
const accepted = wrapper.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!accepted) {
wrapper.remove();
continue;
}
const parent = wrapper.parentElement;
if (!parent) continue;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
return;
}
if (!accepted) {
wrapper.remove();
restoreAcceptedDomFromSnapshot(pending);
return;
}
const parent = wrapper.parentElement;
if (!parent) return;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
if (!acceptedDomAlreadyClean(pending)) restoreAcceptedDomFromSnapshot(pending);
}
function findAcceptedRuntimeWrapper(sessionId) {
if (!sessionId) return null;
return document.querySelector('[data-impeccable-variants="' + sessionId + '"]')
|| document.querySelector('[data-impeccable-carbonize="' + sessionId + '"]');
function findAcceptedRuntimeWrappers(sessionId) {
if (!sessionId) return [];
return [...new Set([
...document.querySelectorAll('[data-impeccable-variants="' + sessionId + '"]'),
...document.querySelectorAll('[data-impeccable-carbonize="' + sessionId + '"]'),
])];
}
function restoreAcceptedDomFromSnapshot(pending) {
+32 -22
View File
@@ -6855,7 +6855,14 @@ void main() {
function scheduleAcceptCleanup(accepted) {
setTimeout(function() {
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
if (!accepted?.isSvelteComponent && !acceptedDomAlreadyClean(accepted)) {
setTimeout(function() {
if (pendingAcceptedSession?.id !== accepted?.id) return;
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
cleanupAcceptedSession();
}, 1800);
return;
}
cleanupAcceptedSession();
}, 1200);
}
@@ -6884,39 +6891,42 @@ void main() {
function acceptedDomAlreadyClean(pending) {
if (!pending?.acceptedSelector) return false;
const matches = [...document.querySelectorAll(pending.acceptedSelector)];
return matches.some((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant]'));
return matches.length > 0
&& matches.every((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant],[data-impeccable-carbonize]'));
}
function ensureAcceptedDomClean(pending) {
if (acceptedDomAlreadyClean(pending)) return;
const sessionId = pending?.id;
const variantId = pending?.variant;
const wrapper = findAcceptedRuntimeWrapper(sessionId);
const accepted = wrapper?.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!wrapper) {
const wrappers = findAcceptedRuntimeWrappers(sessionId);
if (wrappers.length === 0) {
restoreAcceptedDomFromSnapshot(pending);
return;
}
if (acceptedDomAlreadyClean(pending)) {
for (const wrapper of wrappers) {
if (!wrapper?.isConnected) continue;
const accepted = wrapper.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!accepted) {
wrapper.remove();
continue;
}
const parent = wrapper.parentElement;
if (!parent) continue;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
return;
}
if (!accepted) {
wrapper.remove();
restoreAcceptedDomFromSnapshot(pending);
return;
}
const parent = wrapper.parentElement;
if (!parent) return;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
if (!acceptedDomAlreadyClean(pending)) restoreAcceptedDomFromSnapshot(pending);
}
function findAcceptedRuntimeWrapper(sessionId) {
if (!sessionId) return null;
return document.querySelector('[data-impeccable-variants="' + sessionId + '"]')
|| document.querySelector('[data-impeccable-carbonize="' + sessionId + '"]');
function findAcceptedRuntimeWrappers(sessionId) {
if (!sessionId) return [];
return [...new Set([
...document.querySelectorAll('[data-impeccable-variants="' + sessionId + '"]'),
...document.querySelectorAll('[data-impeccable-carbonize="' + sessionId + '"]'),
])];
}
function restoreAcceptedDomFromSnapshot(pending) {
@@ -6855,7 +6855,14 @@ void main() {
function scheduleAcceptCleanup(accepted) {
setTimeout(function() {
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
if (!accepted?.isSvelteComponent && !acceptedDomAlreadyClean(accepted)) {
setTimeout(function() {
if (pendingAcceptedSession?.id !== accepted?.id) return;
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
cleanupAcceptedSession();
}, 1800);
return;
}
cleanupAcceptedSession();
}, 1200);
}
@@ -6884,39 +6891,42 @@ void main() {
function acceptedDomAlreadyClean(pending) {
if (!pending?.acceptedSelector) return false;
const matches = [...document.querySelectorAll(pending.acceptedSelector)];
return matches.some((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant]'));
return matches.length > 0
&& matches.every((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant],[data-impeccable-carbonize]'));
}
function ensureAcceptedDomClean(pending) {
if (acceptedDomAlreadyClean(pending)) return;
const sessionId = pending?.id;
const variantId = pending?.variant;
const wrapper = findAcceptedRuntimeWrapper(sessionId);
const accepted = wrapper?.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!wrapper) {
const wrappers = findAcceptedRuntimeWrappers(sessionId);
if (wrappers.length === 0) {
restoreAcceptedDomFromSnapshot(pending);
return;
}
if (acceptedDomAlreadyClean(pending)) {
for (const wrapper of wrappers) {
if (!wrapper?.isConnected) continue;
const accepted = wrapper.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!accepted) {
wrapper.remove();
continue;
}
const parent = wrapper.parentElement;
if (!parent) continue;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
return;
}
if (!accepted) {
wrapper.remove();
restoreAcceptedDomFromSnapshot(pending);
return;
}
const parent = wrapper.parentElement;
if (!parent) return;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
if (!acceptedDomAlreadyClean(pending)) restoreAcceptedDomFromSnapshot(pending);
}
function findAcceptedRuntimeWrapper(sessionId) {
if (!sessionId) return null;
return document.querySelector('[data-impeccable-variants="' + sessionId + '"]')
|| document.querySelector('[data-impeccable-carbonize="' + sessionId + '"]');
function findAcceptedRuntimeWrappers(sessionId) {
if (!sessionId) return [];
return [...new Set([
...document.querySelectorAll('[data-impeccable-variants="' + sessionId + '"]'),
...document.querySelectorAll('[data-impeccable-carbonize="' + sessionId + '"]'),
])];
}
function restoreAcceptedDomFromSnapshot(pending) {
+32 -22
View File
@@ -6855,7 +6855,14 @@ void main() {
function scheduleAcceptCleanup(accepted) {
setTimeout(function() {
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
if (!accepted?.isSvelteComponent && !acceptedDomAlreadyClean(accepted)) {
setTimeout(function() {
if (pendingAcceptedSession?.id !== accepted?.id) return;
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
cleanupAcceptedSession();
}, 1800);
return;
}
cleanupAcceptedSession();
}, 1200);
}
@@ -6884,39 +6891,42 @@ void main() {
function acceptedDomAlreadyClean(pending) {
if (!pending?.acceptedSelector) return false;
const matches = [...document.querySelectorAll(pending.acceptedSelector)];
return matches.some((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant]'));
return matches.length > 0
&& matches.every((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant],[data-impeccable-carbonize]'));
}
function ensureAcceptedDomClean(pending) {
if (acceptedDomAlreadyClean(pending)) return;
const sessionId = pending?.id;
const variantId = pending?.variant;
const wrapper = findAcceptedRuntimeWrapper(sessionId);
const accepted = wrapper?.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!wrapper) {
const wrappers = findAcceptedRuntimeWrappers(sessionId);
if (wrappers.length === 0) {
restoreAcceptedDomFromSnapshot(pending);
return;
}
if (acceptedDomAlreadyClean(pending)) {
for (const wrapper of wrappers) {
if (!wrapper?.isConnected) continue;
const accepted = wrapper.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!accepted) {
wrapper.remove();
continue;
}
const parent = wrapper.parentElement;
if (!parent) continue;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
return;
}
if (!accepted) {
wrapper.remove();
restoreAcceptedDomFromSnapshot(pending);
return;
}
const parent = wrapper.parentElement;
if (!parent) return;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
if (!acceptedDomAlreadyClean(pending)) restoreAcceptedDomFromSnapshot(pending);
}
function findAcceptedRuntimeWrapper(sessionId) {
if (!sessionId) return null;
return document.querySelector('[data-impeccable-variants="' + sessionId + '"]')
|| document.querySelector('[data-impeccable-carbonize="' + sessionId + '"]');
function findAcceptedRuntimeWrappers(sessionId) {
if (!sessionId) return [];
return [...new Set([
...document.querySelectorAll('[data-impeccable-variants="' + sessionId + '"]'),
...document.querySelectorAll('[data-impeccable-carbonize="' + sessionId + '"]'),
])];
}
function restoreAcceptedDomFromSnapshot(pending) {
@@ -6855,7 +6855,14 @@ void main() {
function scheduleAcceptCleanup(accepted) {
setTimeout(function() {
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
if (!accepted?.isSvelteComponent && !acceptedDomAlreadyClean(accepted)) {
setTimeout(function() {
if (pendingAcceptedSession?.id !== accepted?.id) return;
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
cleanupAcceptedSession();
}, 1800);
return;
}
cleanupAcceptedSession();
}, 1200);
}
@@ -6884,39 +6891,42 @@ void main() {
function acceptedDomAlreadyClean(pending) {
if (!pending?.acceptedSelector) return false;
const matches = [...document.querySelectorAll(pending.acceptedSelector)];
return matches.some((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant]'));
return matches.length > 0
&& matches.every((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant],[data-impeccable-carbonize]'));
}
function ensureAcceptedDomClean(pending) {
if (acceptedDomAlreadyClean(pending)) return;
const sessionId = pending?.id;
const variantId = pending?.variant;
const wrapper = findAcceptedRuntimeWrapper(sessionId);
const accepted = wrapper?.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!wrapper) {
const wrappers = findAcceptedRuntimeWrappers(sessionId);
if (wrappers.length === 0) {
restoreAcceptedDomFromSnapshot(pending);
return;
}
if (acceptedDomAlreadyClean(pending)) {
for (const wrapper of wrappers) {
if (!wrapper?.isConnected) continue;
const accepted = wrapper.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!accepted) {
wrapper.remove();
continue;
}
const parent = wrapper.parentElement;
if (!parent) continue;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
return;
}
if (!accepted) {
wrapper.remove();
restoreAcceptedDomFromSnapshot(pending);
return;
}
const parent = wrapper.parentElement;
if (!parent) return;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
if (!acceptedDomAlreadyClean(pending)) restoreAcceptedDomFromSnapshot(pending);
}
function findAcceptedRuntimeWrapper(sessionId) {
if (!sessionId) return null;
return document.querySelector('[data-impeccable-variants="' + sessionId + '"]')
|| document.querySelector('[data-impeccable-carbonize="' + sessionId + '"]');
function findAcceptedRuntimeWrappers(sessionId) {
if (!sessionId) return [];
return [...new Set([
...document.querySelectorAll('[data-impeccable-variants="' + sessionId + '"]'),
...document.querySelectorAll('[data-impeccable-carbonize="' + sessionId + '"]'),
])];
}
function restoreAcceptedDomFromSnapshot(pending) {
@@ -6855,7 +6855,14 @@ void main() {
function scheduleAcceptCleanup(accepted) {
setTimeout(function() {
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
if (!accepted?.isSvelteComponent && !acceptedDomAlreadyClean(accepted)) {
setTimeout(function() {
if (pendingAcceptedSession?.id !== accepted?.id) return;
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
cleanupAcceptedSession();
}, 1800);
return;
}
cleanupAcceptedSession();
}, 1200);
}
@@ -6884,39 +6891,42 @@ void main() {
function acceptedDomAlreadyClean(pending) {
if (!pending?.acceptedSelector) return false;
const matches = [...document.querySelectorAll(pending.acceptedSelector)];
return matches.some((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant]'));
return matches.length > 0
&& matches.every((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant],[data-impeccable-carbonize]'));
}
function ensureAcceptedDomClean(pending) {
if (acceptedDomAlreadyClean(pending)) return;
const sessionId = pending?.id;
const variantId = pending?.variant;
const wrapper = findAcceptedRuntimeWrapper(sessionId);
const accepted = wrapper?.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!wrapper) {
const wrappers = findAcceptedRuntimeWrappers(sessionId);
if (wrappers.length === 0) {
restoreAcceptedDomFromSnapshot(pending);
return;
}
if (acceptedDomAlreadyClean(pending)) {
for (const wrapper of wrappers) {
if (!wrapper?.isConnected) continue;
const accepted = wrapper.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!accepted) {
wrapper.remove();
continue;
}
const parent = wrapper.parentElement;
if (!parent) continue;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
return;
}
if (!accepted) {
wrapper.remove();
restoreAcceptedDomFromSnapshot(pending);
return;
}
const parent = wrapper.parentElement;
if (!parent) return;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
if (!acceptedDomAlreadyClean(pending)) restoreAcceptedDomFromSnapshot(pending);
}
function findAcceptedRuntimeWrapper(sessionId) {
if (!sessionId) return null;
return document.querySelector('[data-impeccable-variants="' + sessionId + '"]')
|| document.querySelector('[data-impeccable-carbonize="' + sessionId + '"]');
function findAcceptedRuntimeWrappers(sessionId) {
if (!sessionId) return [];
return [...new Set([
...document.querySelectorAll('[data-impeccable-variants="' + sessionId + '"]'),
...document.querySelectorAll('[data-impeccable-carbonize="' + sessionId + '"]'),
])];
}
function restoreAcceptedDomFromSnapshot(pending) {
@@ -6855,7 +6855,14 @@ void main() {
function scheduleAcceptCleanup(accepted) {
setTimeout(function() {
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
if (!accepted?.isSvelteComponent && !acceptedDomAlreadyClean(accepted)) {
setTimeout(function() {
if (pendingAcceptedSession?.id !== accepted?.id) return;
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
cleanupAcceptedSession();
}, 1800);
return;
}
cleanupAcceptedSession();
}, 1200);
}
@@ -6884,39 +6891,42 @@ void main() {
function acceptedDomAlreadyClean(pending) {
if (!pending?.acceptedSelector) return false;
const matches = [...document.querySelectorAll(pending.acceptedSelector)];
return matches.some((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant]'));
return matches.length > 0
&& matches.every((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant],[data-impeccable-carbonize]'));
}
function ensureAcceptedDomClean(pending) {
if (acceptedDomAlreadyClean(pending)) return;
const sessionId = pending?.id;
const variantId = pending?.variant;
const wrapper = findAcceptedRuntimeWrapper(sessionId);
const accepted = wrapper?.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!wrapper) {
const wrappers = findAcceptedRuntimeWrappers(sessionId);
if (wrappers.length === 0) {
restoreAcceptedDomFromSnapshot(pending);
return;
}
if (acceptedDomAlreadyClean(pending)) {
for (const wrapper of wrappers) {
if (!wrapper?.isConnected) continue;
const accepted = wrapper.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!accepted) {
wrapper.remove();
continue;
}
const parent = wrapper.parentElement;
if (!parent) continue;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
return;
}
if (!accepted) {
wrapper.remove();
restoreAcceptedDomFromSnapshot(pending);
return;
}
const parent = wrapper.parentElement;
if (!parent) return;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
if (!acceptedDomAlreadyClean(pending)) restoreAcceptedDomFromSnapshot(pending);
}
function findAcceptedRuntimeWrapper(sessionId) {
if (!sessionId) return null;
return document.querySelector('[data-impeccable-variants="' + sessionId + '"]')
|| document.querySelector('[data-impeccable-carbonize="' + sessionId + '"]');
function findAcceptedRuntimeWrappers(sessionId) {
if (!sessionId) return [];
return [...new Set([
...document.querySelectorAll('[data-impeccable-variants="' + sessionId + '"]'),
...document.querySelectorAll('[data-impeccable-carbonize="' + sessionId + '"]'),
])];
}
function restoreAcceptedDomFromSnapshot(pending) {
+32 -22
View File
@@ -6855,7 +6855,14 @@ void main() {
function scheduleAcceptCleanup(accepted) {
setTimeout(function() {
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
if (!accepted?.isSvelteComponent && !acceptedDomAlreadyClean(accepted)) {
setTimeout(function() {
if (pendingAcceptedSession?.id !== accepted?.id) return;
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
cleanupAcceptedSession();
}, 1800);
return;
}
cleanupAcceptedSession();
}, 1200);
}
@@ -6884,39 +6891,42 @@ void main() {
function acceptedDomAlreadyClean(pending) {
if (!pending?.acceptedSelector) return false;
const matches = [...document.querySelectorAll(pending.acceptedSelector)];
return matches.some((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant]'));
return matches.length > 0
&& matches.every((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant],[data-impeccable-carbonize]'));
}
function ensureAcceptedDomClean(pending) {
if (acceptedDomAlreadyClean(pending)) return;
const sessionId = pending?.id;
const variantId = pending?.variant;
const wrapper = findAcceptedRuntimeWrapper(sessionId);
const accepted = wrapper?.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!wrapper) {
const wrappers = findAcceptedRuntimeWrappers(sessionId);
if (wrappers.length === 0) {
restoreAcceptedDomFromSnapshot(pending);
return;
}
if (acceptedDomAlreadyClean(pending)) {
for (const wrapper of wrappers) {
if (!wrapper?.isConnected) continue;
const accepted = wrapper.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!accepted) {
wrapper.remove();
continue;
}
const parent = wrapper.parentElement;
if (!parent) continue;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
return;
}
if (!accepted) {
wrapper.remove();
restoreAcceptedDomFromSnapshot(pending);
return;
}
const parent = wrapper.parentElement;
if (!parent) return;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
if (!acceptedDomAlreadyClean(pending)) restoreAcceptedDomFromSnapshot(pending);
}
function findAcceptedRuntimeWrapper(sessionId) {
if (!sessionId) return null;
return document.querySelector('[data-impeccable-variants="' + sessionId + '"]')
|| document.querySelector('[data-impeccable-carbonize="' + sessionId + '"]');
function findAcceptedRuntimeWrappers(sessionId) {
if (!sessionId) return [];
return [...new Set([
...document.querySelectorAll('[data-impeccable-variants="' + sessionId + '"]'),
...document.querySelectorAll('[data-impeccable-carbonize="' + sessionId + '"]'),
])];
}
function restoreAcceptedDomFromSnapshot(pending) {
@@ -6855,7 +6855,14 @@ void main() {
function scheduleAcceptCleanup(accepted) {
setTimeout(function() {
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
if (!accepted?.isSvelteComponent && !acceptedDomAlreadyClean(accepted)) {
setTimeout(function() {
if (pendingAcceptedSession?.id !== accepted?.id) return;
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
cleanupAcceptedSession();
}, 1800);
return;
}
cleanupAcceptedSession();
}, 1200);
}
@@ -6884,39 +6891,42 @@ void main() {
function acceptedDomAlreadyClean(pending) {
if (!pending?.acceptedSelector) return false;
const matches = [...document.querySelectorAll(pending.acceptedSelector)];
return matches.some((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant]'));
return matches.length > 0
&& matches.every((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant],[data-impeccable-carbonize]'));
}
function ensureAcceptedDomClean(pending) {
if (acceptedDomAlreadyClean(pending)) return;
const sessionId = pending?.id;
const variantId = pending?.variant;
const wrapper = findAcceptedRuntimeWrapper(sessionId);
const accepted = wrapper?.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!wrapper) {
const wrappers = findAcceptedRuntimeWrappers(sessionId);
if (wrappers.length === 0) {
restoreAcceptedDomFromSnapshot(pending);
return;
}
if (acceptedDomAlreadyClean(pending)) {
for (const wrapper of wrappers) {
if (!wrapper?.isConnected) continue;
const accepted = wrapper.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!accepted) {
wrapper.remove();
continue;
}
const parent = wrapper.parentElement;
if (!parent) continue;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
return;
}
if (!accepted) {
wrapper.remove();
restoreAcceptedDomFromSnapshot(pending);
return;
}
const parent = wrapper.parentElement;
if (!parent) return;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
if (!acceptedDomAlreadyClean(pending)) restoreAcceptedDomFromSnapshot(pending);
}
function findAcceptedRuntimeWrapper(sessionId) {
if (!sessionId) return null;
return document.querySelector('[data-impeccable-variants="' + sessionId + '"]')
|| document.querySelector('[data-impeccable-carbonize="' + sessionId + '"]');
function findAcceptedRuntimeWrappers(sessionId) {
if (!sessionId) return [];
return [...new Set([
...document.querySelectorAll('[data-impeccable-variants="' + sessionId + '"]'),
...document.querySelectorAll('[data-impeccable-carbonize="' + sessionId + '"]'),
])];
}
function restoreAcceptedDomFromSnapshot(pending) {
+32 -22
View File
@@ -6855,7 +6855,14 @@ void main() {
function scheduleAcceptCleanup(accepted) {
setTimeout(function() {
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
if (!accepted?.isSvelteComponent && !acceptedDomAlreadyClean(accepted)) {
setTimeout(function() {
if (pendingAcceptedSession?.id !== accepted?.id) return;
if (!accepted?.isSvelteComponent) ensureAcceptedDomClean(accepted);
cleanupAcceptedSession();
}, 1800);
return;
}
cleanupAcceptedSession();
}, 1200);
}
@@ -6884,39 +6891,42 @@ void main() {
function acceptedDomAlreadyClean(pending) {
if (!pending?.acceptedSelector) return false;
const matches = [...document.querySelectorAll(pending.acceptedSelector)];
return matches.some((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant]'));
return matches.length > 0
&& matches.every((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant],[data-impeccable-carbonize]'));
}
function ensureAcceptedDomClean(pending) {
if (acceptedDomAlreadyClean(pending)) return;
const sessionId = pending?.id;
const variantId = pending?.variant;
const wrapper = findAcceptedRuntimeWrapper(sessionId);
const accepted = wrapper?.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!wrapper) {
const wrappers = findAcceptedRuntimeWrappers(sessionId);
if (wrappers.length === 0) {
restoreAcceptedDomFromSnapshot(pending);
return;
}
if (acceptedDomAlreadyClean(pending)) {
for (const wrapper of wrappers) {
if (!wrapper?.isConnected) continue;
const accepted = wrapper.querySelector?.('[data-impeccable-variant="' + variantId + '"]');
if (!accepted) {
wrapper.remove();
continue;
}
const parent = wrapper.parentElement;
if (!parent) continue;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
return;
}
if (!accepted) {
wrapper.remove();
restoreAcceptedDomFromSnapshot(pending);
return;
}
const parent = wrapper.parentElement;
if (!parent) return;
while (accepted.firstChild) {
parent.insertBefore(accepted.firstChild, wrapper);
}
wrapper.remove();
if (!acceptedDomAlreadyClean(pending)) restoreAcceptedDomFromSnapshot(pending);
}
function findAcceptedRuntimeWrapper(sessionId) {
if (!sessionId) return null;
return document.querySelector('[data-impeccable-variants="' + sessionId + '"]')
|| document.querySelector('[data-impeccable-carbonize="' + sessionId + '"]');
function findAcceptedRuntimeWrappers(sessionId) {
if (!sessionId) return [];
return [...new Set([
...document.querySelectorAll('[data-impeccable-variants="' + sessionId + '"]'),
...document.querySelectorAll('[data-impeccable-carbonize="' + sessionId + '"]'),
])];
}
function restoreAcceptedDomFromSnapshot(pending) {
+14 -4
View File
@@ -321,17 +321,27 @@ describe('live-browser source contracts', () => {
);
assert.match(
SOURCE,
/function ensureAcceptedDomClean\(pending\)[\s\S]*?findAcceptedRuntimeWrapper\(sessionId\)[\s\S]*?acceptedDomAlreadyClean\(pending\)[\s\S]*?wrapper\.remove\(\);[\s\S]*?parent\.insertBefore\(accepted\.firstChild, wrapper\);[\s\S]*?wrapper\.remove\(\);/,
/function scheduleAcceptCleanup\(accepted\)[\s\S]*?acceptedDomAlreadyClean\(accepted\)[\s\S]*?setTimeout\(function\(\) \{[\s\S]*?ensureAcceptedDomClean\(accepted\);[\s\S]*?cleanupAcceptedSession\(\);[\s\S]*?\}, 1800\);/,
'post-cleanup fallback should give HMR a second chance before mutating React-owned DOM',
);
assert.match(
SOURCE,
/function ensureAcceptedDomClean\(pending\)[\s\S]*?acceptedDomAlreadyClean\(pending\)[\s\S]*?findAcceptedRuntimeWrappers\(sessionId\)[\s\S]*?for \(const wrapper of wrappers\)[\s\S]*?parent\.insertBefore\(accepted\.firstChild, wrapper\);[\s\S]*?wrapper\.remove\(\);[\s\S]*?acceptedDomAlreadyClean\(pending\)/,
'post-cleanup fallback should unwrap the accepted variant instead of preserving live runtime wrappers',
);
assert.match(
SOURCE,
/function findAcceptedRuntimeWrapper\(sessionId\)[\s\S]*?data-impeccable-variants[\s\S]*?data-impeccable-carbonize/,
'post-cleanup fallback should also remove stale carbonize wrappers left by React HMR after accept',
/function acceptedDomAlreadyClean\(pending\)[\s\S]*?matches\.length > 0[\s\S]*?matches\.every[\s\S]*?data-impeccable-carbonize/,
'accepted DOM should not be considered clean while any matching root is still inside a carbonize wrapper',
);
assert.match(
SOURCE,
/if \(!accepted\) \{[\s\S]{0,120}?wrapper\.remove\(\);[\s\S]{0,120}?restoreAcceptedDomFromSnapshot\(pending\);[\s\S]{0,80}?return;/,
/function findAcceptedRuntimeWrappers\(sessionId\)[\s\S]*?querySelectorAll\('\[data-impeccable-variants=[\s\S]*?querySelectorAll\('\[data-impeccable-carbonize=/,
'post-cleanup fallback should remove every stale variants/carbonize wrapper left by React HMR after accept',
);
assert.match(
SOURCE,
/if \(!accepted\) \{[\s\S]{0,80}?wrapper\.remove\(\);[\s\S]{0,80}?continue;/,
'post-cleanup fallback should not leave a variants wrapper behind when the accepted variant node is missing',
);
assert.match(
@@ -184,7 +184,7 @@ async function waitForAcceptedDomClean(page, selector, { timeoutMs, sourceFile,
(sel) => {
const matches = [...document.querySelectorAll(sel)];
return matches.length > 0
&& matches.every((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant]'));
&& matches.every((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant],[data-impeccable-carbonize]'));
},
selector,
{ timeout: timeoutMs },
@@ -204,8 +204,8 @@ async function waitForAcceptedDomClean(page, selector, { timeoutMs, sourceFile,
async function collectAcceptedDomDiagnostic(page, selector) {
return page.evaluate((sel) => {
const matches = [...document.querySelectorAll(sel)];
const clean = matches.filter((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant]'));
const stale = matches.filter((el) => el.closest('[data-impeccable-variants],[data-impeccable-variant]'));
const clean = matches.filter((el) => !el.closest('[data-impeccable-variants],[data-impeccable-variant],[data-impeccable-carbonize]'));
const stale = matches.filter((el) => el.closest('[data-impeccable-variants],[data-impeccable-variant],[data-impeccable-carbonize]'));
const local = {};
for (const key of [
'impeccable-live-session',