diff --git a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vIf.spec.ts.snap b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vIf.spec.ts.snap index 16ab6ae3720..c41dc9226c5 100644 --- a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vIf.spec.ts.snap +++ b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vIf.spec.ts.snap @@ -134,3 +134,29 @@ export function render(_ctx) { return n0 }" `; + +exports[`compiler: v-if > v-if + v-if / v-else[-if] 1`] = ` +"import { setInsertionState as _setInsertionState, createIf as _createIf, template as _template } from 'vue'; +const t0 = _template("foo") +const t1 = _template("bar") +const t2 = _template("baz") +const t3 = _template("
", true) + +export function render(_ctx) { + const n8 = t3() + _setInsertionState(n8) + const n0 = _createIf(() => (_ctx.foo), () => { + const n2 = t0() + return n2 + }) + _setInsertionState(n8) + const n3 = _createIf(() => (_ctx.bar), () => { + const n5 = t1() + return n5 + }, () => { + const n7 = t2() + return n7 + }) + return n8 +}" +`; 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 4ecd8c76a7e..5d31be656ab 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/vIf.spec.ts b/packages/compiler-vapor/__tests__/transforms/vIf.spec.ts index 66cdf7b9306..f51988e2e4d 100644 --- a/packages/compiler-vapor/__tests__/transforms/vIf.spec.ts +++ b/packages/compiler-vapor/__tests__/transforms/vIf.spec.ts @@ -215,6 +215,17 @@ describe('compiler: v-if', () => { }) }) + test('v-if + v-if / v-else[-if]', () => { + const { code } = compileWithVIf( + `
+ foo + bar + baz +
`, + ) + expect(code).toMatchSnapshot() + }) + test('comment between branches', () => { const { code, ir } = compileWithVIf(`
diff --git a/packages/compiler-vapor/__tests__/transforms/vSlot.spec.ts b/packages/compiler-vapor/__tests__/transforms/vSlot.spec.ts index 84ddb2e5d04..978f988d580 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 088af62e193..bae9f1aa23f 100644 --- a/packages/compiler-vapor/src/transforms/vIf.ts +++ b/packages/compiler-vapor/src/transforms/vIf.ts @@ -65,7 +65,13 @@ 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 + break + } } }