From: daiwei Date: Wed, 28 May 2025 02:53:17 +0000 (+0800) Subject: fix(compiler-vapor): properly locate last if node X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8a6382c9a35fb4fa31f1d7760ff857107d98fdb8;p=thirdparty%2Fvuejs%2Fcore.git fix(compiler-vapor): properly locate last if node --- diff --git a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vSlot.spec.ts.snap b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vSlot.spec.ts.snap index 4ecd8c76a7..5d31be656a 100644 --- a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vSlot.spec.ts.snap +++ b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vSlot.spec.ts.snap @@ -252,3 +252,25 @@ export function render(_ctx) { return n1 }" `; + +exports[`compiler: transform slot > slot + v-if / v-else[-if] should not cause error 1`] = ` +"import { resolveComponent as _resolveComponent, setInsertionState as _setInsertionState, createSlot as _createSlot, createComponentWithFallback as _createComponentWithFallback, createIf as _createIf, template as _template } from 'vue'; +const t0 = _template("
", true) + +export function render(_ctx) { + const _component_Foo = _resolveComponent("Foo") + const _component_Bar = _resolveComponent("Bar") + const n6 = t0() + _setInsertionState(n6) + const n0 = _createSlot("foo", null) + _setInsertionState(n6) + const n1 = _createIf(() => (true), () => { + const n3 = _createComponentWithFallback(_component_Foo) + return n3 + }, () => { + const n5 = _createComponentWithFallback(_component_Bar) + return n5 + }) + return n6 +}" +`; diff --git a/packages/compiler-vapor/__tests__/transforms/vSlot.spec.ts b/packages/compiler-vapor/__tests__/transforms/vSlot.spec.ts index 84ddb2e5d0..978f988d58 100644 --- a/packages/compiler-vapor/__tests__/transforms/vSlot.spec.ts +++ b/packages/compiler-vapor/__tests__/transforms/vSlot.spec.ts @@ -371,6 +371,17 @@ describe('compiler: transform slot', () => { }) }) + test('slot + v-if / v-else[-if] should not cause error', () => { + const { code } = compileWithSlots( + `
+ + + +
`, + ) + expect(code).toMatchSnapshot() + }) + test('quote slot name', () => { const { code } = compileWithSlots( ``, diff --git a/packages/compiler-vapor/src/transforms/vIf.ts b/packages/compiler-vapor/src/transforms/vIf.ts index 088af62e19..e69d1901b4 100644 --- a/packages/compiler-vapor/src/transforms/vIf.ts +++ b/packages/compiler-vapor/src/transforms/vIf.ts @@ -65,7 +65,11 @@ export function processIf( if (siblings) { let i = siblings.length while (i--) { - if (siblings[i].operation) lastIfNode = siblings[i].operation + if ( + siblings[i].operation && + siblings[i].operation!.type === IRNodeTypes.IF + ) + lastIfNode = siblings[i].operation } }