From 89a3f0f453c12d635fd2af041884d8ece7d29573 Mon Sep 17 00:00:00 2001 From: 7nik Date: Mon, 15 Sep 2025 11:04:18 +0300 Subject: [PATCH] emit error on hydration --- packages/svelte/src/internal/client/dom/blocks/each.js | 2 ++ .../samples/keyed-each-prod-unique-3/_config.js | 8 ++++++++ .../samples/keyed-each-prod-unique-3/main.svelte | 7 +++++++ 3 files changed, 17 insertions(+) create mode 100644 packages/svelte/tests/runtime-legacy/samples/keyed-each-prod-unique-3/_config.js create mode 100644 packages/svelte/tests/runtime-legacy/samples/keyed-each-prod-unique-3/main.svelte diff --git a/packages/svelte/src/internal/client/dom/blocks/each.js b/packages/svelte/src/internal/client/dom/blocks/each.js index bdf3f717f2..c6f485c9d3 100644 --- a/packages/svelte/src/internal/client/dom/blocks/each.js +++ b/packages/svelte/src/internal/client/dom/blocks/each.js @@ -273,6 +273,8 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f if (hydrating) { if (length === 0 && fallback_fn) { fallback = branch(() => fallback_fn(anchor)); + } else if (length > state.items.size) { + each_key_duplicate('', '', ''); } } else { if (should_defer_append()) { diff --git a/packages/svelte/tests/runtime-legacy/samples/keyed-each-prod-unique-3/_config.js b/packages/svelte/tests/runtime-legacy/samples/keyed-each-prod-unique-3/_config.js new file mode 100644 index 0000000000..1f2add2a74 --- /dev/null +++ b/packages/svelte/tests/runtime-legacy/samples/keyed-each-prod-unique-3/_config.js @@ -0,0 +1,8 @@ +import { test } from '../../test'; + +export default test({ + compileOptions: { + dev: false + }, + error: 'each_key_duplicate\nKeyed each block has duplicate key at indexes and ' +}); diff --git a/packages/svelte/tests/runtime-legacy/samples/keyed-each-prod-unique-3/main.svelte b/packages/svelte/tests/runtime-legacy/samples/keyed-each-prod-unique-3/main.svelte new file mode 100644 index 0000000000..a05781bcb9 --- /dev/null +++ b/packages/svelte/tests/runtime-legacy/samples/keyed-each-prod-unique-3/main.svelte @@ -0,0 +1,7 @@ + + +{#each data as d (d)} + {d} +{/each}