Commit Graph

1420 Commits

Author SHA1 Message Date
github-actions[bot] 373cc8b946 chore: version packages (#2259)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
vinext@0.1.8
2026-06-23 12:53:49 +00:00
James Anderson 2cbd2a0356 fix(build): apply default server externals (#2257)
* fix(build): externalize Next.js default server packages

* test(node): cover externalized shiki in standalone output
2026-06-23 10:20:55 +00:00
ponharu 66a7b4e6e8 fix(app-router): exclude dev overlay from production client bundle (#2284)
* fix(app-router): exclude dev overlay from production client bundle

* fix(app-router): reuse loaded dev overlay during HMR

---------

Co-authored-by: James <james@eli.cx>
2026-06-23 11:09:56 +01:00
James Anderson 92884eef42 feat(web): add Vite configuration examples (#2289) 2026-06-23 09:01:24 +00:00
James Anderson 0d5a9e5e1b fix(ssr): ignore runtime renderer import in Vite (#2288) 2026-06-23 10:01:01 +01:00
Jerry Zhao 516107cf7c refactor(deploy): build detectProject paths on a forward-slash root (#2283) 2026-06-23 09:41:40 +01:00
Jerry Zhao c9a16852e8 refactor(typegen): pass the findDir candidate as a forward-slash literal (#2281) 2026-06-23 09:41:26 +01:00
Jerry Zhao 6f7b37d77f refactor(check): build check scanner paths with path.posix (#2280) 2026-06-23 09:41:16 +01:00
Jerry Zhao 767c79afbc refactor(cli): normalize the check/init root to forward slashes at the CLI entry (#2278) 2026-06-23 00:04:22 +01:00
Jerry Zhao 9857bcf53c refactor(check): compute scanImports relative paths with path.posix.relative (#2277) 2026-06-23 00:04:10 +01:00
Jerry Zhao 06fc2b7dd0 refactor(check): join findSourceFiles paths with path.posix.join (#2276) 2026-06-23 00:04:00 +01:00
Jerry Zhao d7ce03dfbe refactor(check): match findDir's forward-slash contract in checkConventions (#2275) 2026-06-23 00:03:28 +01:00
Jerry Zhao cde1c45d77 docs(app-router): document the forward-slash appDir contract on appRouter/appRouteGraph (#2274) 2026-06-23 00:03:02 +01:00
Jerry Zhao 59f892c6b6 refactor(app-router): build typegen route paths on forward slashes (#2273) 2026-06-23 00:02:52 +01:00
ponharu 68547961ee test(deploy): stabilize Wrangler fallback resolution test (#2272) 2026-06-23 00:02:32 +01:00
James Anderson a34c083e88 fix(app-router): match interception route precedence (#2231)
* fix(app-router): prioritize specific interception routes

* fix(app-router): match interception route precedence

* Reviewed PR #2231: LGTM, minor notes

Co-authored-by: james-elicx <james-elicx@users.noreply.github.com>

* fix(app-router): align interception route tiebreaks

---------

Co-authored-by: ask-bonk[bot] <ask-bonk[bot]@users.noreply.github.com>
Co-authored-by: james-elicx <james-elicx@users.noreply.github.com>
2026-06-22 23:37:34 +01:00
James Anderson d65dd4c601 fix(router): ignore stale initial popstate with i18n (#2230)
* fix(router): ignore stale initial popstate with i18n

* Review done: no issues found

Co-authored-by: james-elicx <james-elicx@users.noreply.github.com>

* test(router): run i18n popstate coverage in existing project

---------

Co-authored-by: ask-bonk[bot] <ask-bonk[bot]@users.noreply.github.com>
Co-authored-by: james-elicx <james-elicx@users.noreply.github.com>
2026-06-22 22:36:52 +00:00
James Anderson 6e998ec114 fix(middleware): run on missing build assets (#2242)
* fix(middleware): run on missing build assets

* fix(middleware): preserve missing asset rewrites on workers
2026-06-22 23:36:49 +01:00
James Anderson 7b21c429c0 fix(app-router): preserve global error details (#2249)
* fix(app-router): preserve global error details

* fix(app-router): preserve default global error semantics
2026-06-22 23:29:40 +01:00
ponharu 7c932f39cd fix(headers): strip internal dev request ID headers (#2260) 2026-06-22 23:25:08 +01:00
dependabot[bot] 0fa7c8046f chore(deps): bump zizmorcore/zizmor-action from 0.5.6 to 0.5.7 (#2263)
Bumps [zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action) from 0.5.6 to 0.5.7.
- [Release notes](https://github.com/zizmorcore/zizmor-action/releases)
- [Commits](https://github.com/zizmorcore/zizmor-action/compare/5f14fd08f7cf1cb1609c1e344975f152c7ee938d...192e21d79ab29983730a13d1382995c2307fbcaa)

---
updated-dependencies:
- dependency-name: zizmorcore/zizmor-action
  dependency-version: 0.5.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: James Anderson <james@eli.cx>
2026-06-22 22:22:03 +00:00
Jerry Zhao ad7fe15d9d refactor(app-router): consume directoryToAppRoute paths with path.posix (#2270) 2026-06-22 23:21:10 +01:00
Jerry Zhao 465c00f336 refactor(app-router): yield forward-slash ids from scanWithExtensions (#2271) 2026-06-22 23:20:56 +01:00
Jerry Zhao a532a03a26 refactor(config): normalize the resolveId id once and drop the Windows backslash branches (#2264) 2026-06-22 23:20:17 +01:00
Jerry Zhao 14549e323f test(shims): expect forward-slash shim ids in the next/error and subpath resolution fixtures (#2265) 2026-06-22 23:19:51 +01:00
Jerry Zhao ecfc68874f test(pages-router): wrap the client-navigation page module URL as a Vite /@fs/ id on Windows (#2266) 2026-06-22 23:19:37 +01:00
Jerry Zhao d89fcb5070 test(og-inline): use a forward-slash scoped package name in the linked-workspace fixture (#2267) 2026-06-22 23:19:17 +01:00
Jerry Zhao bc19327853 refactor(app-router): descend findSlotRootPage with path.posix.join to preserve forward-slash ids (#2268) 2026-06-22 23:18:59 +01:00
Jerry Zhao 13f30dd18b refactor(app-router): build parallel-slot dirs with path.posix.join (#2269) 2026-06-22 23:18:51 +01:00
James Anderson fbf68d588e fix(app-router): restore cache and parallel route parity (#2261)
* fix(app-router): preserve searchParams cache variants

* test(app-router): cover RSC metadata cache variants

* fix(app-router): isolate metadata searchParams observation

* fix(app-router): preserve static ISR cache proofs

* fix(app-router): limit queryless cache probes

* fix(app-router): skip redundant cache proof probes

* fix(app-router): harden incomplete cache proofs

* fix(app-router): observe loading page execution

* fix(app-router): preserve exotic page exports

* fix(app-router): preserve client page ISR

* fix(app-router): avoid duplicate queryless page execution

* fix(app-router): observe viewport search params

* fix(app-router): clear force-static search params

* fix(app-router): isolate intercept static context

* fix(app-router): preserve intercept request context

* fix(app-router): isolate action static context

* fix(app-router): match static request API semantics

* fix(app-router): preserve dynamic segment constraints

* fix(app-router): apply slot-only segment config

* fix(app-router): preserve draft mode reads in static errors

* fix(app-router): include nested slot constraints

* fix(app-router): refresh slot layout constraints

* fix(app-router): render nested slot layouts

* fix(app-router): preserve nested slot params

* fix(app-router): preserve intercepted slot head

* fix(app-router): scope parallel layout params

* fix(app-router): preserve intercept layout parity

* fix(app-router): preserve intercept ancestor params

* fix(app-router): scope intercept source params

* fix(app-router): preserve intercept source route params

* test(app-router): stabilize parity validation
2026-06-22 23:17:41 +01:00
Steve Faulkner 826ae4cc7c perf(app-router): skip speculative page probes for HTML renders (#2226) 2026-06-22 08:53:17 -05:00
James Anderson 65f9531d00 fix(app-router): canonicalize initial history URL (#2250) 2026-06-22 14:50:06 +01:00
James Anderson 1908494d4d fix(pages-router): allow server-only in API routes (#2234) 2026-06-22 14:46:49 +01:00
Stephen Zhou 6b55874ee0 fix(config): make vite-tsconfig-paths an optional peer (#2258) 2026-06-22 14:39:36 +01:00
Alexander Lichter d6afa2e874 perf(link): omit Pages runtime in app-only builds (#2225)
* perf(link): omit Pages runtime in app-only builds

* fix(link): use document fallback in app-only builds
2026-06-22 14:28:10 +01:00
Alexander Lichter 573997382e perf(client): omit unused server action client (#2222)
* perf(client): omit unused server action client

* fix(client): capture server action state before lazy load

---------

Co-authored-by: James <james@eli.cx>
2026-06-22 14:27:38 +01:00
Alexander Lichter 95b320f79f perf(app): omit unused PPR runtime (#2223)
Co-authored-by: James <james@eli.cx>
2026-06-22 13:06:27 +00:00
Alexander Lichter eb18704318 perf(app): omit unused file metadata runtime (#2224) 2026-06-22 13:54:45 +01:00
Alexander Lichter bd7562ac74 feat(web): compare benchmarks with recent median (#2221) 2026-06-22 13:46:25 +01:00
github-actions[bot] cceb1988dd chore: version packages (#2203)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
vinext@0.1.7
2026-06-22 09:26:20 +00:00
James Anderson cf9d601162 fix lockfile (#2233) 2026-06-21 18:18:31 +00:00
James Anderson 82d5f7691c fix(perf): resolve Vite from benchmark target (#2212) 2026-06-20 14:05:33 +00:00
Divanshu Chauhan e7a4e9b08b fix(image): emit hoisted var for local image import binding to avoid TDZ (#2067)
The vinext:image-imports transform rewrote `import X from './a.png'` into
two imports plus `const X = {...}`. The original import is a module-scoped
binding initialized before module-body execution, but the `const` is
block-scoped and TDZ-bound until its textual line, so any reference to `X`
that runs earlier — a hoisted function called above the import, or a
circular-import re-entry — flipped from working to a runtime
`Cannot access 'X' before initialization`.

Emit `var X = {...}` instead: it hoists like the import it replaces, so the
forward reference no longer throws (it reads `undefined` before the line,
strictly better than crashing). Matches Next.js, which leaves the consumer's
`import X` untouched and rewrites the image module itself.

Closes #1975
2026-06-20 14:49:17 +01:00
Divanshu Chauhan ad2fcfb16f fix(dynamic): render ssr:false loading with pastDelay:true to match client (#1967) (#2064)
next/dynamic's ssr:false server branch rendered the loading component with
pastDelay:false, while the client's first (pre-mount) render and Suspense
fallback default pastDelay to true. For a loading component that branches on
pastDelay (the documented `if (!pastDelay) return null` pattern), the server
emitted nothing but the client rendered the spinner, causing a React hydration
mismatch and a visible content jump.

Drop the hardcoded pastDelay:false override on the server so it defaults to
true, matching both the client render and Next.js App Router, which always
renders the loading fallback with pastDelay=true on server and client. Loading
components that ignore pastDelay are unaffected.

Update the three tests that asserted the buggy server-side pastDelay:false, and
add a server-equals-client-first-render parity assertion.

Fixes #1967
2026-06-20 14:47:02 +01:00
Divanshu Chauhan 05038707e2 fix(actions): dedupe Set-Cookie on no-JS non-redirect action responses (#1976) (#2063)
The progressive (form-state) non-redirect server-action path returned the
raw `getAndClearPendingCookies()` array, so calling `cookies().set(name, ...)`
twice for the same name emitted two `Set-Cookie` headers for that name on
no-JS form submissions. Next.js stores mutable cookies in a name-keyed
`ResponseCookies` map (last value wins) and collapses to one header, as do the
redirect and RSC action paths in vinext via `dedupePendingCookies()`.

Wrap the non-redirect branch's cookie collection in `dedupePendingCookies()`
to match the sibling paths, so same-name sets collapse to a single Set-Cookie
(last value wins). The single binding feeds both the action-failed and success
returns, covering both non-redirect sub-cases.

Follow-up to the #1481 dedup fix, which landed on the redirect and RSC paths
but missed the progressive non-redirect branch.

Adds a regression test mirroring the existing redirect-dedup test for the
non-redirect form-state path.
2026-06-20 14:45:36 +01:00
Alexander Lichter e7225b92cc fix(benchmarks): measure eager RSC entry closure (#2208) 2026-06-20 14:43:49 +01:00
Divanshu Chauhan 32973e9ddf fix(rsc): only short-circuit well-known signal digests so real errors reach onRequestError (#2066)
createRscOnErrorHandler treated ANY error carrying a digest field as a
control-flow signal: it returned String(error.digest) and skipped
reportRequestError, so a genuine server-render error that merely carried a
digest (e.g. a hashed digest from sanitizeErrorForClient, or one transported
from a nested boundary) was silently swallowed with no instrumentation and
its digest shipped to the client as if it were a signal.

Mirror Next.js getDigestForWellKnownError: add a helper that recognizes only
genuine signals (redirect / notFound+http-fallback / bailout-to-CSR /
dynamic-server) and gate the short-circuit on it. Non-signal digest errors now
fall through to reportRequestError and keep their existing digest as-is.

Fix the same conflation in createAppPageRscErrorTracker.onRenderError, which
routed any digest-bearing error to the special 307/404-swap slot; gate it on
isNavigationSignalError so real errors reach the error boundary and a later
real signal can still win the slot.

Closes #1978
2026-06-20 14:43:17 +01:00
Nathan Nguyen 46b8fe8ccd perf(server): skip duplicate App RSC vary merge (#2177)
App Router page responses commonly already carry the internal RSC Vary header before response finalization runs. Re-running the generic Vary merge in that case splits and deduplicates the known header value on every SSR response without changing the result.

Read the current Vary value first, set the internal header directly when missing, and only fall back to the generic merge path for custom Vary values that still need preservation and deduplication.
2026-06-20 14:29:46 +01:00
Nathan Nguyen 3e83ab24b4 perf(server): reuse App SSR bfcache metadata (#2182)
* perf(server): reuse App SSR bfcache metadata

* refactor(server): clarify bfcache segment parsing
2026-06-20 14:17:07 +01:00
Alexander Lichter 7c5f4c592a perf(app): omit unused server action runtime (#2206) 2026-06-20 13:51:01 +01:00