소스 검색

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

daiwei 1 년 전
부모
커밋
afbda369a1
2개의 변경된 파일7개의 추가작업 그리고 1개의 파일을 삭제
  1. 6 0
      packages/compiler-sfc/__tests__/compileStyle.spec.ts
  2. 1 1
      packages/compiler-sfc/src/style/pluginScoped.ts

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