From 6e4c4d8464c2cdd4fd4e86b58ff995c13794fe8c Mon Sep 17 00:00:00 2001 From: daiwei Date: Fri, 22 Aug 2025 15:41:10 +0800 Subject: [PATCH] fix(runtime-vapor): improve fallback handling support chaining --- packages/runtime-vapor/src/block.ts | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/runtime-vapor/src/block.ts b/packages/runtime-vapor/src/block.ts index d0fa32855c..9bd47e87f3 100644 --- a/packages/runtime-vapor/src/block.ts +++ b/packages/runtime-vapor/src/block.ts @@ -99,13 +99,27 @@ export class DynamicFragment extends VaporFragment { } } -function setFragmentFallback(fragment: VaporFragment, fallback: BlockFn): void { - // stop recursion if fragment has its own fallback - if (fragment.fallback) return +export function setFragmentFallback( + fragment: VaporFragment, + fallback: BlockFn, +): void { + if (fragment.fallback) { + const originalFallback = fragment.fallback + // if the original fallback also renders invalid blocks, + // this ensures proper fallback chaining + fragment.fallback = () => { + const fallbackNodes = originalFallback() + if (isValidBlock(fallbackNodes)) { + return fallbackNodes + } + return fallback() + } + } else { + fragment.fallback = fallback + } - fragment.fallback = fallback if (isFragment(fragment.nodes)) { - setFragmentFallback(fragment.nodes, fallback) + setFragmentFallback(fragment.nodes, fragment.fallback) } } -- 2.47.3