fix(runtime-vapor): improve fallback handling support chaining
ci / test (push) Has been cancelled Details
ci / continuous-release (push) Has been cancelled Details

This commit is contained in:
daiwei 2025-08-22 15:39:15 +08:00
parent 5b4673fccd
commit d7a767290a
2 changed files with 125 additions and 948 deletions

File diff suppressed because it is too large Load Diff

View File

@ -102,12 +102,23 @@ export function setFragmentFallback(
fragment: VaporFragment, fragment: VaporFragment,
fallback: BlockFn, fallback: BlockFn,
): void { ): void {
// stop recursion if fragment has its own fallback if (fragment.fallback) {
if (fragment.fallback) return 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)) { if (isFragment(fragment.nodes)) {
setFragmentFallback(fragment.nodes, fallback) setFragmentFallback(fragment.nodes, fragment.fallback)
} }
} }