]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(compiler-vapor): handle boolean as constant node (#13994)
authorzhiyuanzmj <260480378@qq.com>
Thu, 6 Nov 2025 05:58:48 +0000 (13:58 +0800)
committerGitHub <noreply@github.com>
Thu, 6 Nov 2025 05:58:48 +0000 (13:58 +0800)
packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap
packages/compiler-vapor/__tests__/transforms/__snapshots__/transformTemplateRef.spec.ts.snap
packages/compiler-vapor/__tests__/transforms/__snapshots__/vIf.spec.ts.snap
packages/compiler-vapor/__tests__/transforms/__snapshots__/vSlot.spec.ts.snap
packages/compiler-vapor/__tests__/transforms/vIf.spec.ts
packages/compiler-vapor/src/transforms/vIf.ts
packages/compiler-vapor/src/utils.ts

index 62465315737daccbfa9705228622f0ebf062eba4..c681811dd93747930f47eea3b717d1212597ccf4 100644 (file)
@@ -42,7 +42,7 @@ export function render(_ctx) {
         const n2 = _createComponentWithFallback(_component_Bar)
         _withVaporDirectives(n2, [[_directive_hello, void 0, void 0, { world: true }]])
         return n3
-      })
+      }, null, true)
       return n0
     })
   }, true)
@@ -230,7 +230,7 @@ export function render(_ctx) {
   const n1 = _createIf(() => (true), () => {
     const n3 = t0()
     return n3
-  })
+  }, null, true)
   _renderEffect(() => _setProp(n4, "disabled", _ctx.foo))
   return n6
 }"
index 15db96b6aceff32f51fb33ade523820cd4f2154a..851c529bd0632bb112d79ea020dc9aa40eca1688 100644 (file)
@@ -58,7 +58,7 @@ export function render(_ctx) {
     const n2 = t0()
     _setTemplateRef(n2, "foo")
     return n2
-  })
+  }, null, true)
   return n0
 }"
 `;
index a8dc5aa459006a79826e40d3f3895537bfd3ff46..0d6e13301c841787dfcc697e3847923c1dc6778e 100644 (file)
@@ -110,10 +110,13 @@ export function render(_ctx) {
   }, () => _createIf(() => (_ctx.orNot), () => {
     const n4 = t1()
     return n4
-  }, () => {
-    const n7 = t2()
+  }, () => _createIf(() => (false), () => {
+    const n7 = t1()
     return n7
-  }))
+  }, () => {
+    const n10 = t2()
+    return n10
+  }, true)))
   return n0
 }"
 `;
index 1cca9e6bb2a9033cdea3d8a3b6276126edfaee80..9b66bb6c8693eeaec5bca9e1b607f7d41d7b7536 100644 (file)
@@ -356,7 +356,7 @@ export function render(_ctx) {
   }, () => {
     const n5 = _createComponentWithFallback(_component_Bar)
     return n5
-  })
+  }, true)
   return n6
 }"
 `;
index e5fd61add2e6fb86bba3a35d1255ce787c03822a..6a8148b7c187c058253e61f3e7ce51194c969021 100644 (file)
@@ -182,7 +182,7 @@ describe('compiler: v-if', () => {
 
   test('v-if + v-else-if + v-else', () => {
     const { code, ir } = compileWithVIf(
-      `<div v-if="ok"/><p v-else-if="orNot"/><template v-else>fine</template>`,
+      `<div v-if="ok"/><p v-else-if="orNot"/><p v-else-if="false"/><template v-else>fine</template>`,
     )
     expect(code).matchSnapshot()
     expect(ir.template).toEqual(['<div></div>', '<p></p>', 'fine'])
@@ -206,9 +206,12 @@ describe('compiler: v-if', () => {
           },
         },
         negative: {
-          type: IRNodeTypes.BLOCK,
-          dynamic: {
-            children: [{ template: 2 }],
+          type: IRNodeTypes.IF,
+          negative: {
+            type: IRNodeTypes.BLOCK,
+            dynamic: {
+              children: [{ template: 2 }],
+            },
           },
         },
       },
index 531d29b055cebbc449de0d40f037179c09426d37..f6fed605f3a35ef49679600dc77aa3b7f65031bf 100644 (file)
@@ -119,7 +119,9 @@ export function processIf(
         id: -1,
         condition: dir.exp!,
         positive: branch,
-        once: context.inVOnce,
+        once:
+          context.inVOnce ||
+          isStaticExpression(dir.exp!, context.options.bindingMetadata),
       }
     }
 
index 5914471371fdc443d49e1b90f3b72d7ec239c2f4..9335df3c6d1101d488693e09a87191247a6895a1 100644 (file)
@@ -55,6 +55,12 @@ export function isStaticExpression(
   if (node.ast) {
     return isConstantNode(node.ast, bindings)
   } else if (node.ast === null) {
+    if (
+      !node.isStatic &&
+      (node.content === 'true' || node.content === 'false')
+    ) {
+      return true
+    }
     const type = bindings[node.content]
     return type === BindingTypes.LITERAL_CONST
   }