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 53b456dfa3..4e2d5d3ea9 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 @@ -205,57 +205,53 @@ function relative_selector_might_apply_to_node(relative_selector, node, styleshe const name = selector.name.replace(regex_backslash_and_following_character, '$1'); - if (selector.type === 'PseudoClassSelector' && (name === 'host' || name === 'root')) { - return NO_MATCH; - } + switch (selector.type) { + case 'PseudoClassSelector': + if (name === 'host' || name === 'root') { + return NO_MATCH; + } - if ( - relative_selector.selectors.length === 1 && - selector.type === 'PseudoClassSelector' && - name === 'global' - ) { - return NO_MATCH; - } + if (name === 'global' && relative_selector.selectors.length === 1) { + return NO_MATCH; + } - if (selector.type === 'PseudoClassSelector') { - if ((name === 'is' || name === 'where') && selector.args) { - let matched = false; + if ((name === 'is' || name === 'where') && selector.args) { + let matched = false; - for (const complex_selector of selector.args.children) { - if (apply_selector(truncate(complex_selector), node, stylesheet)) { - complex_selector.metadata.used = true; - matched = true; + for (const complex_selector of selector.args.children) { + if (apply_selector(truncate(complex_selector), node, stylesheet)) { + complex_selector.metadata.used = true; + matched = true; + } } - } - if (!matched) { - return NO_MATCH; + if (!matched) { + return NO_MATCH; + } } - } - continue; - } + break; - if (selector.type === 'PseudoElementSelector') { - continue; - } + case 'PseudoElementSelector': + break; - if (selector.type === 'AttributeSelector') { - const whitelisted = whitelist_attribute_selector.get(node.name.toLowerCase()); - if ( - !whitelisted?.includes(selector.name.toLowerCase()) && - !attribute_matches( - node, - selector.name, - selector.value && unquote(selector.value), - selector.matcher, - selector.flags?.includes('i') ?? false - ) - ) { - return NO_MATCH; - } - } else { - if (selector.type === 'ClassSelector') { + case 'AttributeSelector': + const whitelisted = whitelist_attribute_selector.get(node.name.toLowerCase()); + if ( + !whitelisted?.includes(selector.name.toLowerCase()) && + !attribute_matches( + node, + selector.name, + selector.value && unquote(selector.value), + selector.matcher, + selector.flags?.includes('i') ?? false + ) + ) { + return NO_MATCH; + } + break; + + case 'ClassSelector': if ( !attribute_matches(node, 'class', name, '~=', false) && !node.attributes.some( @@ -264,9 +260,17 @@ function relative_selector_might_apply_to_node(relative_selector, node, styleshe ) { return NO_MATCH; } - } else if (selector.type === 'IdSelector') { - if (!attribute_matches(node, 'id', name, '=', false)) return NO_MATCH; - } else if (selector.type === 'TypeSelector') { + + break; + + case 'IdSelector': + if (!attribute_matches(node, 'id', name, '=', false)) { + return NO_MATCH; + } + + break; + + case 'TypeSelector': if ( node.name.toLowerCase() !== name.toLowerCase() && name !== '*' && @@ -274,9 +278,11 @@ function relative_selector_might_apply_to_node(relative_selector, node, styleshe ) { return NO_MATCH; } - } else { + + break; + + default: return UNKNOWN_SELECTOR; - } } }