Browse Source

fix(compiler-sfc): properly rewrite :is with non-pseudo selector

daiwei 1 year ago
parent
commit
afbda369a1

+ 6 - 0
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', () => {

+ 1 - 1
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
     }