From bfd11af47410359644d3528e11a4e1b38bb33fb1 Mon Sep 17 00:00:00 2001 From: daiwei Date: Sat, 5 Apr 2025 10:32:02 +0800 Subject: [PATCH] chore: update --- .../__tests__/compileStyle.spec.ts | 6 ++++++ .../compiler-sfc/src/style/pluginScoped.ts | 21 +++++++------------ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/packages/compiler-sfc/__tests__/compileStyle.spec.ts b/packages/compiler-sfc/__tests__/compileStyle.spec.ts index ff5ca2a95..48e6ea8c3 100644 --- a/packages/compiler-sfc/__tests__/compileStyle.spec.ts +++ b/packages/compiler-sfc/__tests__/compileStyle.spec.ts @@ -146,6 +146,12 @@ color: red &[data-v-test] .bar { color: red; }}" `) + expect(compileScoped(`.foo { :deep(.bar),:deep(.baz) { color: red; }}`)) + .toMatchInlineSnapshot(` + ".foo { + &[data-v-test] .bar,&[data-v-test] .baz { color: red; + }}" + `) expect(compileScoped(`.foo { & :deep(.bar) { color: red; }}`)) .toMatchInlineSnapshot(` ".foo { diff --git a/packages/compiler-sfc/src/style/pluginScoped.ts b/packages/compiler-sfc/src/style/pluginScoped.ts index b0854a22e..0c7f700e1 100644 --- a/packages/compiler-sfc/src/style/pluginScoped.ts +++ b/packages/compiler-sfc/src/style/pluginScoped.ts @@ -134,23 +134,16 @@ function rewriteSelector( last = ss }) - // if css nesting is used, we need to insert a nesting combinator - // before the ::v-deep node + // if css nesting is used, we need to insert a nesting selector + // before the ::v-deep's inner selector. // .foo { ::v-deep(.bar) } -> .foo { &[xxxxxxx] .bar } const isNestedRule = rule.parent && rule.parent.type === 'rule' if (isNestedRule && n.parent) { - let hasNestingCombinator = false - let index = n.parent.index(n) - 1 - while (index >= 0) { - const prev = n.parent.at(index) - if (!prev) break - if (prev.type === 'nesting') { - hasNestingCombinator = true - break - } - index-- - } - if (!hasNestingCombinator) { + const hasNestingSelector = n.parent.nodes + .slice(0, n.parent.index(n)) + .some(node => node.type === 'nesting') + + if (!hasNestingSelector) { node = selectorParser.nesting() selector.insertBefore(n, node) }