From: daiwei Date: Wed, 23 Oct 2024 10:01:30 +0000 (+0800) Subject: fix(compiler-sfc): properly rewrite :is with non-pseudo selector X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=afbda369a15970fd6c282d860800a946d0ca10ae;p=thirdparty%2Fvuejs%2Fcore.git fix(compiler-sfc): properly rewrite :is with non-pseudo selector --- diff --git a/packages/compiler-sfc/__tests__/compileStyle.spec.ts b/packages/compiler-sfc/__tests__/compileStyle.spec.ts index b76414364d..d6687a6b4d 100644 --- a/packages/compiler-sfc/__tests__/compileStyle.spec.ts +++ b/packages/compiler-sfc/__tests__/compileStyle.spec.ts @@ -243,6 +243,12 @@ color: red } .div[data-v-test]:is(.foo:hover) { color: blue; }"`) + + expect(compileScoped(`#app :is(.foo) { color: red; }`)) + .toMatchInlineSnapshot(` + "#app :is(.foo[data-v-test]) { color: red; + }" + `) }) test('media query', () => { diff --git a/packages/compiler-sfc/src/style/pluginScoped.ts b/packages/compiler-sfc/src/style/pluginScoped.ts index b0224cf20d..130ea1e3c7 100644 --- a/packages/compiler-sfc/src/style/pluginScoped.ts +++ b/packages/compiler-sfc/src/style/pluginScoped.ts @@ -225,7 +225,7 @@ function rewriteSelector( (n.type !== 'pseudo' && n.type !== 'combinator') || (n.type === 'pseudo' && (n.value === ':is' || n.value === ':where') && - !node) + (!node || !n.nodes.some(n => n.nodes.some(x => x.type === 'pseudo')))) ) { node = n }