Skip to content

Commit 9284e4a

Browse files
committed
handle weird cases
1 parent 9ea0340 commit 9284e4a

File tree

1 file changed

+25
-17
lines changed
  • packages/svelte/src/compiler/phases/2-analyze/css

1 file changed

+25
-17
lines changed

packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -237,31 +237,39 @@ function is_global(selector, rule) {
237237
return true;
238238
}
239239

240-
if (selector.selectors.every((s) => s.type === 'NestingSelector')) {
241-
const parent_rule = /** @type {import('#compiler').Css.Rule} */ (rule.metadata.parent_rule);
242-
for (const complex_selector of parent_rule.prelude.children) {
243-
for (const relative_selector of complex_selector.children) {
244-
if (is_global(relative_selector, parent_rule)) {
245-
return true; // we only need one for it to be considered a match
240+
for (const s of selector.selectors) {
241+
if (s.type === 'PseudoClassSelector') {
242+
if ((s.name === 'is' || s.name === 'where') && s.args) {
243+
const has_global_selectors = s.args.children.some((complex_selector) => {
244+
return complex_selector.children.every((relative_selector) =>
245+
is_global(relative_selector, rule)
246+
);
247+
});
248+
249+
if (has_global_selectors) {
250+
continue;
246251
}
247252
}
248253
}
249-
}
250254

251-
if (selector.selectors.length === 1) {
252-
const s = selector.selectors[0];
253-
if (s.type === 'PseudoClassSelector' && (s.name === 'is' || s.name === 'where') && s.args) {
254-
for (const complex_selector of s.args.children) {
255-
for (const relative_selector of complex_selector.children) {
256-
if (is_global(relative_selector, rule)) {
257-
return true; // we only need one for it to be considered a match
258-
}
259-
}
255+
if (s.type === 'NestingSelector') {
256+
const parent_rule = /** @type {import('#compiler').Css.Rule} */ (rule.metadata.parent_rule);
257+
258+
const has_global_selectors = parent_rule.prelude.children.some((complex_selector) => {
259+
return complex_selector.children.every((relative_selector) =>
260+
is_global(relative_selector, parent_rule)
261+
);
262+
});
263+
264+
if (has_global_selectors) {
265+
continue;
260266
}
261267
}
268+
269+
return false;
262270
}
263271

264-
return false;
272+
return true;
265273
}
266274

267275
const regex_backslash_and_following_character = /\\(.)/g;

0 commit comments

Comments
 (0)