mirror of
https://github.com/cloudflare/vinext.git
synced 2026-05-09 08:25:34 +02:00
[PR #961] [MERGED] fix(isr): honor route expire ceilings #985
Labels
No labels
enhancement
enhancement
good first issue
help wanted
nextjs-tracking
nextjs-tracking
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/vinext#985
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/cloudflare/vinext/pull/961
Author: @NathanDrake2406
Created: 4/29/2026
Status: ✅ Merged
Merged: 5/2/2026
Merged by: @james-elicx
Base:
main← Head:nathan/fix-isr-expire📝 Commits (10+)
04f69defix(isr): honor route expire ceilingsd0019fefix(isr): address cache life review follow-ups67b1a01chore: address latest review follow-ups7df506aci: pin vite-plus setup versionaba9632Revert "ci: pin vite-plus setup version"c9a90ebfix: avoid blocking ISR page streams on cache metadataea48bb9fix: preserve headers for speculative cacheLife probesf04bef9fix: preserve prerender cacheLife metadata1ab1802fix: preserve legacy ISR cache metadata behavior095d6dcfix: preserve prerender seed revalidate context📊 Changes
41 files changed (+1525 additions, -159 deletions)
View changed files
📝
packages/vinext/src/build/prerender.ts(+114 -11)📝
packages/vinext/src/cloudflare/kv-cache-handler.ts(+42 -10)📝
packages/vinext/src/config/next-config.ts(+7 -0)📝
packages/vinext/src/entries/app-rsc-entry.ts(+7 -0)📝
packages/vinext/src/entries/pages-server-entry.ts(+5 -2)📝
packages/vinext/src/index.ts(+1 -0)📝
packages/vinext/src/server/app-page-cache.ts(+103 -19)📝
packages/vinext/src/server/app-page-dispatch.ts(+28 -6)📝
packages/vinext/src/server/app-page-render.ts(+108 -16)📝
packages/vinext/src/server/app-page-response.ts(+8 -9)📝
packages/vinext/src/server/app-route-handler-cache.ts(+12 -1)📝
packages/vinext/src/server/app-route-handler-dispatch.ts(+3 -0)📝
packages/vinext/src/server/app-route-handler-execution.ts(+10 -2)📝
packages/vinext/src/server/app-route-handler-response.ts(+17 -12)➕
packages/vinext/src/server/cache-control.ts(+57 -0)📝
packages/vinext/src/server/isr-cache.ts(+10 -0)📝
packages/vinext/src/server/pages-page-data.ts(+30 -7)📝
packages/vinext/src/server/pages-page-response.ts(+7 -1)📝
packages/vinext/src/server/seed-cache.ts(+27 -6)📝
packages/vinext/src/shims/cache-runtime.ts(+29 -8)...and 21 more files
📄 Description
Summary
Closes https://github.com/cloudflare/vinext/issues/957.
Next.js now treats a route-level expire ceiling as the boundary between stale-while-revalidate and blocking regeneration. Vinext was only tracking revalidate, so every time-expired ISR entry stayed eligible for stale serving forever. This PR adds the missing expire dimension and wires it through App Router pages, App Route handlers, Pages Router routes, prerender seeding, and cached function writes.
Next.js references
github.com/vercel/next.js@8e4cfc5062github.com/vercel/next.js@e1bb911c14/packages/next/src/server/lib/cache-control.ts (L17-L31)github.com/vercel/next.js@e1bb911c14/packages/next/src/build/templates/app-page.ts (L1598-L1609)github.com/vercel/next.js@e1bb911c14/packages/next/src/build/templates/app-route.ts (L381-L402)github.com/vercel/next.js@e1bb911c14/packages/next/src/server/route-modules/pages/pages-handler.ts (L606-L613)What changed
Validation
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.