From 8b1f4e2096a1c0b443a7e97fa87950b7f688c4f9 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 26 Nov 2024 13:08:20 -0500 Subject: [PATCH] simplify --- .../phases/2-analyze/css/css-prune.js | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js b/packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js index de0eec9aa4..dec85c0361 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js +++ b/packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js @@ -888,17 +888,20 @@ function get_element_parent(node) { function get_possible_element_siblings(element, adjacent_only) { /** @type {Map} */ const result = new Map(); + const path = element.metadata.path; /** @type {Compiler.SvelteNode} */ - let node = element; - let path = element.metadata.path; + let current = element; + let i = path.length; while (i--) { - let fragment = /** @type {Compiler.AST.Fragment} */ (path[i--]); + const fragment = /** @type {Compiler.AST.Fragment} */ (path[i--]); + let j = fragment.nodes.indexOf(current); + + while (j--) { + const node = fragment.nodes[j]; - // @ts-expect-error - while ((node = node.prev)) { if (node.type === 'RegularElement') { const has_slot_attribute = node.attributes.some( (attr) => attr.type === 'Attribute' && attr.name.toLowerCase() === 'slot' @@ -928,13 +931,13 @@ function get_possible_element_siblings(element, adjacent_only) { } } - node = path[i]; + current = path[i]; - if (!node || !is_block(node)) break; + if (!current || !is_block(current)) break; - if (node.type === 'EachBlock' && fragment === node.body) { + if (current.type === 'EachBlock' && fragment === current.body) { // `{#each ...}{/each}` — `` can be previous sibling of `` - add_to_map(get_possible_last_child(node, adjacent_only), result); + add_to_map(get_possible_last_child(current, adjacent_only), result); } }