From 6c1de0069a076a1709aec52e09128fbaad83c9eb Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 2 Dec 2025 09:02:20 -0500 Subject: [PATCH] add some logging --- .../src/internal/client/dom/blocks/each.js | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/packages/svelte/src/internal/client/dom/blocks/each.js b/packages/svelte/src/internal/client/dom/blocks/each.js index 4b18c6e97e..5be2ac9651 100644 --- a/packages/svelte/src/internal/client/dom/blocks/each.js +++ b/packages/svelte/src/internal/client/dom/blocks/each.js @@ -152,6 +152,8 @@ function destroy_items(state, to_destroy) { link(state, item.prev, item.next); destroy_effect(item.e); } + + log_state(state, 'after destroy_items'); } /** @@ -625,6 +627,56 @@ function reconcile(state, array, anchor, flags, get_key) { } }); } + + log_state(state, 'after reconcile'); +} + +/** + * @param {EachState} state + * @param {string} [message] + */ +function log_state(state, message = 'log_state') { + console.group(message); + + let item = state.first; + let effect = state.effect.first; + + if (item) { + let items = [item]; + while ((item = item.next)) { + if (items.includes(item)) { + throw new Error('items loop'); + } + + items.push(item); + } + console.log(items.map((item) => item.k)); + } else { + console.log('no items'); + } + + if (effect) { + let effects = [effect]; + while ((effect = effect.next)) { + if (effects.includes(effect)) { + throw new Error('items loop'); + } + + effects.push(effect); + } + console.log( + effects.map((effect) => { + let text = effect.nodes_start?.textContent ?? '???'; + if (effect === state.effect.first) text += ' (FIRST)'; + if (effect === state.effect.last) text += ' (LAST)'; + return text; + }) + ); + } else { + console.log('no effects'); + } + + console.groupEnd(); } /**