From a5d4c421f1bf5846d88d4563189da38f5013f3b1 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 16 Feb 2024 17:19:51 -0500 Subject: [PATCH] shrink --- .../phases/2-analyze/css/css-prune.js | 39 +++++++++---------- 1 file changed, 19 insertions(+), 20 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 36a85767cf..c299612fd1 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 @@ -216,6 +216,10 @@ function mark(relative_selector, element) { } /** + * Returns `true` if the relative selector is global, meaning + * it's a `:global(...)` or `:host` or `:root` selector, or + * is an `:is(...)` or `:where(...)` selector that contains + * a global selector * @param {import('#compiler').Css.RelativeSelector} selector * @param {import('#compiler').Css.Rule} rule */ @@ -225,35 +229,30 @@ function is_global(selector, rule) { } for (const s of selector.selectors) { + /** @type {import('#compiler').Css.SelectorList | null} */ + let selector_list = null; + let owner = rule; + if (s.type === 'PseudoClassSelector') { if ((s.name === 'is' || s.name === 'where') && s.args) { - const has_global_selectors = s.args.children.some((complex_selector) => { - return complex_selector.children.every((relative_selector) => - is_global(relative_selector, rule) - ); - }); - - if (has_global_selectors) { - continue; - } + selector_list = s.args; } } if (s.type === 'NestingSelector') { - const parent_rule = /** @type {import('#compiler').Css.Rule} */ (rule.metadata.parent_rule); + owner = /** @type {import('#compiler').Css.Rule} */ (rule.metadata.parent_rule); + selector_list = owner.prelude; + } - const has_global_selectors = parent_rule.prelude.children.some((complex_selector) => { - return complex_selector.children.every((relative_selector) => - is_global(relative_selector, parent_rule) - ); - }); + const has_global_selectors = selector_list?.children.some((complex_selector) => { + return complex_selector.children.every((relative_selector) => + is_global(relative_selector, owner) + ); + }); - if (has_global_selectors) { - continue; - } + if (!has_global_selectors) { + return false; } - - return false; } return true;