vinext 1.2.1 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (509) hide show
  1. package/README.md +12 -9
  2. package/dist/_virtual/_rolldown/runtime.js +1 -1
  3. package/dist/build/action-owner-manifest.d.ts +3 -2
  4. package/dist/build/action-owner-manifest.js +18 -2
  5. package/dist/build/app-page-static-eligibility.d.ts +17 -1
  6. package/dist/build/app-page-static-eligibility.js +80 -13
  7. package/dist/build/clean-output.d.ts +2 -1
  8. package/dist/build/client-build-config.d.ts +77 -6
  9. package/dist/build/client-build-config.js +176 -12
  10. package/dist/build/client-reference-async.d.ts +48 -0
  11. package/dist/build/client-reference-async.js +123 -0
  12. package/dist/build/client-reference-chunks.d.ts +32 -0
  13. package/dist/build/client-reference-chunks.js +111 -0
  14. package/dist/build/client-reference-groups.d.ts +171 -0
  15. package/dist/build/client-reference-groups.js +572 -0
  16. package/dist/build/css-url-assets.d.ts +2 -1
  17. package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
  18. package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
  19. package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
  20. package/dist/build/google-fonts/font-metadata.d.ts +2 -1
  21. package/dist/build/google-fonts/validate.d.ts +2 -1
  22. package/dist/build/inline-css.d.ts +2 -1
  23. package/dist/build/layout-classification.d.ts +2 -1
  24. package/dist/build/module-dependency-cache.d.ts +33 -1
  25. package/dist/build/module-dependency-cache.js +51 -1
  26. package/dist/build/next-client-runtime-manifests.d.ts +12 -2
  27. package/dist/build/next-client-runtime-manifests.js +19 -4
  28. package/dist/build/nitro-public-files.d.ts +24 -0
  29. package/dist/build/nitro-public-files.js +60 -0
  30. package/dist/build/pages-client-assets-module.js +1 -1
  31. package/dist/build/precompress.d.ts +2 -1
  32. package/dist/build/precompress.js +1 -1
  33. package/dist/build/prerender-paths.d.ts +2 -1
  34. package/dist/build/prerender-paths.js +5 -2
  35. package/dist/build/prerender-phase.d.ts +2 -1
  36. package/dist/build/prerender-server-pool.js +1 -1
  37. package/dist/build/prerender.d.ts +3 -2
  38. package/dist/build/prerender.js +5 -4
  39. package/dist/build/report.d.ts +2 -1
  40. package/dist/build/route-classification-injector.d.ts +2 -1
  41. package/dist/build/route-classification-manifest.d.ts +2 -1
  42. package/dist/build/run-prerender.d.ts +2 -1
  43. package/dist/build/server-actions-encryption-key.d.ts +24 -0
  44. package/dist/build/server-actions-encryption-key.js +101 -0
  45. package/dist/build/ssr-manifest.d.ts +3 -0
  46. package/dist/build/ssr-manifest.js +34 -2
  47. package/dist/build/standalone.d.ts +2 -1
  48. package/dist/cache/cache-adapters-virtual.d.ts +2 -1
  49. package/dist/cache.js +1 -2
  50. package/dist/check.d.ts +2 -1
  51. package/dist/check.js +4 -0
  52. package/dist/cli-args.d.ts +2 -1
  53. package/dist/cli.js +2 -0
  54. package/dist/client/client-redirect-matcher.js +2 -1
  55. package/dist/client/client-redirects.d.ts +4 -3
  56. package/dist/client/client-redirects.js +2 -1
  57. package/dist/client/client-rewrite-params.d.ts +9 -0
  58. package/dist/client/client-rewrite-params.js +20 -0
  59. package/dist/client/client-rewrites.d.ts +2 -1
  60. package/dist/client/dev-error-overlay-store.d.ts +2 -1
  61. package/dist/client/dev-error-overlay.js +2 -1
  62. package/dist/client/index.js +1 -2
  63. package/dist/client/instrumentation-client-state.js +5 -5
  64. package/dist/client/navigation-runtime.d.ts +28 -3
  65. package/dist/client/navigation-runtime.js +42 -11
  66. package/dist/client/pages-router-link-navigation.d.ts +2 -1
  67. package/dist/client/vinext-next-data.d.ts +25 -2
  68. package/dist/client/window-next.d.ts +2 -1
  69. package/dist/config/config-matchers.d.ts +27 -41
  70. package/dist/config/config-matchers.js +293 -270
  71. package/dist/config/config-source.d.ts +34 -0
  72. package/dist/config/config-source.js +141 -0
  73. package/dist/config/dotenv.d.ts +2 -1
  74. package/dist/config/header-params.d.ts +29 -0
  75. package/dist/config/header-params.js +106 -0
  76. package/dist/config/next-config.d.ts +20 -6
  77. package/dist/config/next-config.js +149 -11
  78. package/dist/config/tsconfig-paths.d.ts +2 -1
  79. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
  80. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
  81. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
  82. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
  83. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
  84. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
  85. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
  86. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
  87. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
  88. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
  89. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
  90. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
  91. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
  92. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
  93. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
  94. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
  95. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
  96. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
  97. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
  98. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
  99. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
  100. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
  101. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
  102. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
  103. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
  104. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
  105. package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
  106. package/dist/entries/app-browser-entry.d.ts +34 -6
  107. package/dist/entries/app-browser-entry.js +103 -40
  108. package/dist/entries/app-rsc-entry.d.ts +4 -1
  109. package/dist/entries/app-rsc-entry.js +131 -66
  110. package/dist/entries/app-rsc-manifest.d.ts +12 -1
  111. package/dist/entries/app-rsc-manifest.js +73 -1
  112. package/dist/entries/app-ssr-entry.d.ts +4 -1
  113. package/dist/entries/app-ssr-entry.js +9 -2
  114. package/dist/entries/pages-client-entry.d.ts +1 -0
  115. package/dist/entries/pages-client-entry.js +6 -6
  116. package/dist/entries/pages-entry-helpers.js +1 -2
  117. package/dist/entries/pages-server-entry.d.ts +2 -1
  118. package/dist/entries/pages-server-entry.js +18 -15
  119. package/dist/entries/runtime-entry-module.d.ts +1 -0
  120. package/dist/entries/runtime-entry-module.js +4 -1
  121. package/dist/image/image-adapters-virtual.d.ts +2 -1
  122. package/dist/index.d.ts +11 -0
  123. package/dist/index.js +340 -116
  124. package/dist/init.js +17 -0
  125. package/dist/plugins/client-compile-hints.d.ts +30 -0
  126. package/dist/plugins/client-compile-hints.js +88 -0
  127. package/dist/plugins/client-reference-dedup.d.ts +2 -1
  128. package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
  129. package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
  130. package/dist/plugins/dynamic-preload-metadata.js +1 -1
  131. package/dist/plugins/environment.d.ts +2 -1
  132. package/dist/plugins/fonts.js +9 -12
  133. package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
  134. package/dist/plugins/import-meta-url.d.ts +2 -1
  135. package/dist/plugins/og-assets.d.ts +2 -1
  136. package/dist/plugins/og-assets.js +2 -3
  137. package/dist/plugins/optimize-imports.d.ts +27 -3
  138. package/dist/plugins/optimize-imports.js +106 -20
  139. package/dist/plugins/pages-node-externals.d.ts +2 -1
  140. package/dist/plugins/remove-console.d.ts +2 -1
  141. package/dist/plugins/require-condition-resolution.d.ts +2 -1
  142. package/dist/plugins/rsc-client-reference-loaders.d.ts +53 -1
  143. package/dist/plugins/rsc-client-reference-loaders.js +447 -27
  144. package/dist/plugins/rsc-client-shim-excludes.js +2 -0
  145. package/dist/plugins/sass.d.ts +2 -1
  146. package/dist/plugins/strip-server-exports.d.ts +2 -1
  147. package/dist/plugins/styled-jsx.d.ts +2 -1
  148. package/dist/plugins/transform-result.d.ts +2 -1
  149. package/dist/plugins/typeof-window.d.ts +2 -1
  150. package/dist/plugins/use-cache-callable.d.ts +5 -0
  151. package/dist/plugins/use-cache-callable.js +30 -8
  152. package/dist/plugins/worker-image-imports.d.ts +1 -0
  153. package/dist/plugins/worker-image-imports.js +2 -2
  154. package/dist/plugins/worker-use-server.d.ts +2 -1
  155. package/dist/routing/app-route-graph.d.ts +41 -1
  156. package/dist/routing/app-route-graph.js +122 -50
  157. package/dist/routing/browser-route-manifest.d.ts +44 -0
  158. package/dist/routing/browser-route-manifest.js +195 -0
  159. package/dist/routing/hashed-route-patterns.d.ts +4 -0
  160. package/dist/routing/hashed-route-patterns.js +22 -0
  161. package/dist/routing/optimistic-route-trie.d.ts +28 -0
  162. package/dist/routing/optimistic-route-trie.js +102 -0
  163. package/dist/routing/route-matching.d.ts +2 -1
  164. package/dist/routing/route-pattern.d.ts +2 -1
  165. package/dist/routing/route-validation.d.ts +6 -1
  166. package/dist/routing/route-validation.js +26 -10
  167. package/dist/server/accept-encoding.d.ts +2 -1
  168. package/dist/server/app-action-forwarding.d.ts +10 -1
  169. package/dist/server/app-action-forwarding.js +15 -1
  170. package/dist/server/app-bfcache-identity.d.ts +2 -1
  171. package/dist/server/app-browser-action-result.d.ts +2 -1
  172. package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -1
  173. package/dist/server/app-browser-entry.js +175 -64
  174. package/dist/server/app-browser-error.d.ts +5 -2
  175. package/dist/server/app-browser-error.js +7 -2
  176. package/dist/server/app-browser-history-controller.d.ts +2 -1
  177. package/dist/server/app-browser-hydration.d.ts +2 -1
  178. package/dist/server/app-browser-interception-context.d.ts +4 -3
  179. package/dist/server/app-browser-mpa-navigation.d.ts +1 -0
  180. package/dist/server/app-browser-mpa-navigation.js +6 -5
  181. package/dist/server/app-browser-navigation-controller.d.ts +17 -6
  182. package/dist/server/app-browser-navigation-controller.js +103 -36
  183. package/dist/server/app-browser-popstate.d.ts +2 -1
  184. package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
  185. package/dist/server/app-browser-server-action-client.d.ts +2 -1
  186. package/dist/server/app-browser-state.d.ts +2 -2
  187. package/dist/server/app-browser-state.js +1 -1
  188. package/dist/server/app-browser-stream.d.ts +2 -1
  189. package/dist/server/app-browser-visible-commit.d.ts +6 -5
  190. package/dist/server/app-client-reference-manifest.d.ts +31 -0
  191. package/dist/server/app-client-reference-manifest.js +46 -0
  192. package/dist/server/app-client-reference-preloader.d.ts +45 -2
  193. package/dist/server/app-client-reference-preloader.js +48 -10
  194. package/dist/server/app-elements-wire.d.ts +2 -1
  195. package/dist/server/app-elements.d.ts +2 -0
  196. package/dist/server/app-elements.js +3 -1
  197. package/dist/server/app-fallback-renderer.d.ts +9 -2
  198. package/dist/server/app-fallback-renderer.js +6 -2
  199. package/dist/server/app-history-state.d.ts +2 -1
  200. package/dist/server/app-inline-css-client.d.ts +2 -1
  201. package/dist/server/app-layout-param-observation.d.ts +2 -1
  202. package/dist/server/app-metadata-tracing.d.ts +2 -1
  203. package/dist/server/app-middleware.d.ts +6 -0
  204. package/dist/server/app-middleware.js +8 -10
  205. package/dist/server/app-optimistic-routing.d.ts +26 -11
  206. package/dist/server/app-optimistic-routing.js +38 -96
  207. package/dist/server/app-page-boundary-render.d.ts +20 -2
  208. package/dist/server/app-page-boundary-render.js +229 -39
  209. package/dist/server/app-page-boundary.d.ts +34 -5
  210. package/dist/server/app-page-boundary.js +40 -7
  211. package/dist/server/app-page-cache-finalizer.d.ts +2 -1
  212. package/dist/server/app-page-cache-finalizer.js +1 -1
  213. package/dist/server/app-page-cache-render.d.ts +10 -2
  214. package/dist/server/app-page-cache-render.js +15 -2
  215. package/dist/server/app-page-cache.js +2 -2
  216. package/dist/server/app-page-dispatch.d.ts +34 -1
  217. package/dist/server/app-page-dispatch.js +165 -34
  218. package/dist/server/app-page-element-builder.d.ts +17 -1
  219. package/dist/server/app-page-element-builder.js +187 -66
  220. package/dist/server/app-page-execution.d.ts +28 -1
  221. package/dist/server/app-page-execution.js +114 -5
  222. package/dist/server/app-page-head.d.ts +95 -3
  223. package/dist/server/app-page-head.js +307 -152
  224. package/dist/server/app-page-http-access-fallback-metadata.d.ts +48 -2
  225. package/dist/server/app-page-http-access-fallback-metadata.js +76 -1
  226. package/dist/server/app-page-method.d.ts +2 -1
  227. package/dist/server/app-page-probe.d.ts +2 -1
  228. package/dist/server/app-page-render-identity.d.ts +2 -1
  229. package/dist/server/app-page-render.d.ts +7 -1
  230. package/dist/server/app-page-render.js +38 -11
  231. package/dist/server/app-page-request.d.ts +14 -1
  232. package/dist/server/app-page-request.js +1 -1
  233. package/dist/server/app-page-route-wiring.d.ts +52 -2
  234. package/dist/server/app-page-route-wiring.js +197 -47
  235. package/dist/server/app-page-rsc-render-status.d.ts +3 -1
  236. package/dist/server/app-page-rsc-render-status.js +1 -0
  237. package/dist/server/app-page-search-params-observation.d.ts +8 -6
  238. package/dist/server/app-page-search-params-observation.js +16 -11
  239. package/dist/server/app-page-segment-plan.d.ts +2 -1
  240. package/dist/server/app-page-stream.d.ts +38 -1
  241. package/dist/server/app-page-stream.js +24 -4
  242. package/dist/server/app-pages-bridge.d.ts +4 -2
  243. package/dist/server/app-pages-bridge.js +11 -7
  244. package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
  245. package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
  246. package/dist/server/app-prerender-endpoints.d.ts +2 -1
  247. package/dist/server/app-prerender-static-params.d.ts +2 -1
  248. package/dist/server/app-prerender-static-params.js +3 -2
  249. package/dist/server/app-render-dependency.d.ts +11 -1
  250. package/dist/server/app-render-dependency.js +65 -6
  251. package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
  252. package/dist/server/app-request-stage-independent-entry.js +2 -2
  253. package/dist/server/app-response-stage-entry.d.ts +2 -1
  254. package/dist/server/app-response-stage-entry.js +3 -3
  255. package/dist/server/app-route-handler-cache.d.ts +2 -1
  256. package/dist/server/app-route-handler-dispatch.d.ts +2 -1
  257. package/dist/server/app-route-handler-dispatch.js +4 -2
  258. package/dist/server/app-route-handler-execution.d.ts +4 -1
  259. package/dist/server/app-route-handler-execution.js +9 -2
  260. package/dist/server/app-route-handler-middleware-context.d.ts +2 -1
  261. package/dist/server/app-route-handler-middleware-context.js +3 -3
  262. package/dist/server/app-route-handler-response.d.ts +4 -2
  263. package/dist/server/app-route-handler-response.js +2 -2
  264. package/dist/server/app-route-handler-runtime.d.ts +4 -1
  265. package/dist/server/app-route-handler-runtime.js +20 -3
  266. package/dist/server/app-route-module-loader.d.ts +18 -1
  267. package/dist/server/app-route-module-loader.js +15 -6
  268. package/dist/server/app-route-tree-prefetch.d.ts +2 -1
  269. package/dist/server/app-route-tree.d.ts +20 -0
  270. package/dist/server/app-route-tree.js +18 -0
  271. package/dist/server/app-router-entry.js +2 -2
  272. package/dist/server/app-rsc-combined-handler.js +8 -1
  273. package/dist/server/app-rsc-error-handler.d.ts +2 -1
  274. package/dist/server/app-rsc-errors.d.ts +9 -1
  275. package/dist/server/app-rsc-errors.js +9 -2
  276. package/dist/server/app-rsc-handler.d.ts +6 -2
  277. package/dist/server/app-rsc-handler.js +152 -140
  278. package/dist/server/app-rsc-response-finalizer.d.ts +7 -1
  279. package/dist/server/app-rsc-response-finalizer.js +4 -1
  280. package/dist/server/app-rsc-response-stage.js +3 -1
  281. package/dist/server/app-rsc-route-matching.d.ts +39 -1
  282. package/dist/server/app-rsc-route-matching.js +25 -1
  283. package/dist/server/app-segment-config.d.ts +2 -1
  284. package/dist/server/app-segment-config.js +1 -14
  285. package/dist/server/app-server-action-execution.d.ts +25 -7
  286. package/dist/server/app-server-action-execution.js +53 -59
  287. package/dist/server/app-ssr-entry.d.ts +12 -0
  288. package/dist/server/app-ssr-entry.js +104 -48
  289. package/dist/server/app-ssr-error-meta.d.ts +2 -1
  290. package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
  291. package/dist/server/app-ssr-stream.d.ts +29 -10
  292. package/dist/server/app-ssr-stream.js +311 -67
  293. package/dist/server/app-static-generation.d.ts +2 -1
  294. package/dist/server/app-streamed-client-references.d.ts +39 -0
  295. package/dist/server/app-streamed-client-references.js +156 -0
  296. package/dist/server/app-visited-response-cache.d.ts +2 -1
  297. package/dist/server/app-worker-stages.d.ts +2 -1
  298. package/dist/server/artifact-compatibility.d.ts +2 -1
  299. package/dist/server/bfcache-identity.d.ts +2 -1
  300. package/dist/server/cache-headers.d.ts +2 -1
  301. package/dist/server/cacheability-request.d.ts +2 -1
  302. package/dist/server/client-reuse-manifest.d.ts +2 -1
  303. package/dist/server/config-headers.d.ts +2 -1
  304. package/dist/server/config-headers.js +12 -3
  305. package/dist/server/csp.d.ts +2 -1
  306. package/dist/server/default-global-not-found-module.d.ts +2 -1
  307. package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
  308. package/dist/server/default-http-access-fallback-modules.js +31 -0
  309. package/dist/server/defer-until-stream-consumed.d.ts +34 -0
  310. package/dist/server/defer-until-stream-consumed.js +154 -21
  311. package/dist/server/dev-lockfile.d.ts +32 -2
  312. package/dist/server/dev-lockfile.js +46 -2
  313. package/dist/server/dev-module-runner.d.ts +2 -1
  314. package/dist/server/dev-server.js +10 -3
  315. package/dist/server/fetch-handler.js +1 -2
  316. package/dist/server/file-based-metadata.d.ts +2 -1
  317. package/dist/server/framework-tracer.d.ts +2 -1
  318. package/dist/server/html.d.ts +1 -0
  319. package/dist/server/html.js +19 -1
  320. package/dist/server/http-conditional.d.ts +2 -1
  321. package/dist/server/http-error-responses.d.ts +2 -1
  322. package/dist/server/implicit-tags.d.ts +2 -1
  323. package/dist/server/isolate-shared-promise.d.ts +10 -0
  324. package/dist/server/isolate-shared-promise.js +33 -0
  325. package/dist/server/isr-cache.js +3 -2
  326. package/dist/server/metadata-route-build-data.d.ts +2 -1
  327. package/dist/server/metadata-route-build-data.js +1 -1
  328. package/dist/server/metadata-route-response.d.ts +2 -1
  329. package/dist/server/metadata-route-response.js +1 -1
  330. package/dist/server/metadata-routes.d.ts +2 -1
  331. package/dist/server/middleware-matcher-pattern.d.ts +0 -1
  332. package/dist/server/middleware-matcher-pattern.js +11 -140
  333. package/dist/server/middleware-matcher.js +5 -6
  334. package/dist/server/middleware-response-headers.d.ts +31 -0
  335. package/dist/server/middleware-response-headers.js +57 -1
  336. package/dist/server/middleware-runtime.d.ts +2 -1
  337. package/dist/server/middleware-runtime.js +26 -13
  338. package/dist/server/navigation-planner.d.ts +2 -2
  339. package/dist/server/navigation-trace.d.ts +2 -1
  340. package/dist/server/next-error-digest.d.ts +2 -1
  341. package/dist/server/nitro-public-files-plugin.d.ts +39 -0
  342. package/dist/server/nitro-public-files-plugin.js +106 -0
  343. package/dist/server/nitro-public-files.d.ts +22 -0
  344. package/dist/server/nitro-public-files.js +39 -0
  345. package/dist/server/opentelemetry-api.d.ts +2 -1
  346. package/dist/server/operation-token.d.ts +2 -1
  347. package/dist/server/pages-api-route.d.ts +2 -1
  348. package/dist/server/pages-asset-tags.d.ts +7 -1
  349. package/dist/server/pages-asset-tags.js +9 -2
  350. package/dist/server/pages-body-parser-config.d.ts +2 -1
  351. package/dist/server/pages-client-assets.d.ts +8 -1
  352. package/dist/server/pages-data-route.d.ts +2 -1
  353. package/dist/server/pages-document-asset-props.d.ts +2 -1
  354. package/dist/server/pages-document-initial-props.d.ts +2 -1
  355. package/dist/server/pages-execution-tracing.d.ts +2 -1
  356. package/dist/server/pages-execution-tracing.js +1 -1
  357. package/dist/server/pages-get-initial-props.d.ts +2 -1
  358. package/dist/server/pages-i18n.d.ts +18 -0
  359. package/dist/server/pages-i18n.js +18 -2
  360. package/dist/server/pages-node-compat.d.ts +5 -3
  361. package/dist/server/pages-node-compat.js +35 -16
  362. package/dist/server/pages-page-data.d.ts +7 -1
  363. package/dist/server/pages-page-data.js +35 -12
  364. package/dist/server/pages-page-handler.d.ts +3 -2
  365. package/dist/server/pages-page-handler.js +16 -7
  366. package/dist/server/pages-page-method.d.ts +2 -1
  367. package/dist/server/pages-page-response.d.ts +2 -1
  368. package/dist/server/pages-preview.d.ts +2 -1
  369. package/dist/server/pages-readiness.d.ts +2 -1
  370. package/dist/server/pages-request-pipeline.d.ts +8 -2
  371. package/dist/server/pages-request-pipeline.js +35 -40
  372. package/dist/server/pages-request-stage-entry.d.ts +2 -1
  373. package/dist/server/pages-request-stage-entry.js +16 -6
  374. package/dist/server/pages-response-stage-entry.d.ts +2 -1
  375. package/dist/server/pages-response-stage-entry.js +1 -1
  376. package/dist/server/pages-revalidate.js +1 -0
  377. package/dist/server/pages-route-data-kind.d.ts +2 -1
  378. package/dist/server/pages-router-entry.js +1 -1
  379. package/dist/server/prerender-cache-life-header.d.ts +2 -1
  380. package/dist/server/prerender-route-params.d.ts +2 -1
  381. package/dist/server/prod-server.d.ts +2 -2
  382. package/dist/server/prod-server.js +80 -36
  383. package/dist/server/proxy-trust.d.ts +6 -0
  384. package/dist/server/proxy-trust.js +12 -6
  385. package/dist/server/request-log.d.ts +2 -1
  386. package/dist/server/request-pipeline.d.ts +5 -0
  387. package/dist/server/request-pipeline.js +12 -1
  388. package/dist/server/request-tracing.d.ts +2 -1
  389. package/dist/server/request-tracing.js +1 -1
  390. package/dist/server/response-start-tracing.js +7 -29
  391. package/dist/server/rsc-render-stream.d.ts +4 -0
  392. package/dist/server/rsc-render-stream.js +25 -0
  393. package/dist/server/seed-cache.d.ts +2 -1
  394. package/dist/server/seed-cache.js +1 -1
  395. package/dist/server/server-reference-loader.js +10 -1
  396. package/dist/server/static-file-cache.d.ts +2 -1
  397. package/dist/server/static-file-cache.js +16 -3
  398. package/dist/server/static-layout-client-reuse-proof.d.ts +2 -1
  399. package/dist/server/worker-revalidation-context.d.ts +2 -1
  400. package/dist/server/worker-stages.d.ts +2 -1
  401. package/dist/server/worker-utils.js +1 -1
  402. package/dist/shims/app.d.ts +2 -1
  403. package/dist/shims/cache-callable-runtime.d.ts +2 -1
  404. package/dist/shims/cache-handler.d.ts +8 -3
  405. package/dist/shims/cache-handler.js +32 -11
  406. package/dist/shims/cache-request-state.d.ts +40 -3
  407. package/dist/shims/cache-request-state.js +70 -5
  408. package/dist/shims/cache-runtime.js +47 -19
  409. package/dist/shims/cache.d.ts +2 -2
  410. package/dist/shims/cache.js +17 -8
  411. package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
  412. package/dist/shims/caught-not-found-boundaries.js +48 -0
  413. package/dist/shims/cdn-purge-routes.d.ts +25 -0
  414. package/dist/shims/cdn-purge-routes.js +77 -0
  415. package/dist/shims/client-locale.js +2 -1
  416. package/dist/shims/client-page-root.d.ts +2 -1
  417. package/dist/shims/config.d.ts +2 -1
  418. package/dist/shims/default-forbidden.d.ts +4 -0
  419. package/dist/shims/default-forbidden.js +18 -0
  420. package/dist/shims/default-not-found.d.ts +0 -5
  421. package/dist/shims/default-not-found.js +5 -41
  422. package/dist/shims/default-unauthorized.d.ts +4 -0
  423. package/dist/shims/default-unauthorized.js +18 -0
  424. package/dist/shims/dynamic.js +17 -4
  425. package/dist/shims/error-boundary.d.ts +39 -3
  426. package/dist/shims/error-boundary.js +31 -16
  427. package/dist/shims/font-google.js +1 -2
  428. package/dist/shims/font-utils.d.ts +3 -2
  429. package/dist/shims/font-utils.js +5 -3
  430. package/dist/shims/form.js +9 -4
  431. package/dist/shims/http-access-error-fallback.d.ts +7 -0
  432. package/dist/shims/http-access-error-fallback.js +47 -0
  433. package/dist/shims/image-props.d.ts +93 -0
  434. package/dist/shims/image-props.js +323 -0
  435. package/dist/shims/image.d.ts +4 -39
  436. package/dist/shims/image.js +4 -319
  437. package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
  438. package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
  439. package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
  440. package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
  441. package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
  442. package/dist/shims/internal/client-reference-loader.d.ts +7 -0
  443. package/dist/shims/internal/client-reference-loader.js +91 -0
  444. package/dist/shims/internal/cookie-serialize.d.ts +2 -1
  445. package/dist/shims/internal/cookies.js +1 -2
  446. package/dist/shims/internal/headers-state.d.ts +9 -0
  447. package/dist/shims/internal/headers-state.js +19 -2
  448. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +6 -2
  449. package/dist/shims/internal/hybrid-client-route-owner-direct.js +31 -14
  450. package/dist/shims/internal/hybrid-client-route-owner.js +8 -8
  451. package/dist/shims/internal/interpolate-as.d.ts +2 -1
  452. package/dist/shims/internal/pages-data-target.d.ts +2 -1
  453. package/dist/shims/internal/pages-data-url.d.ts +2 -1
  454. package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
  455. package/dist/shims/link.js +198 -53
  456. package/dist/shims/metadata.d.ts +32 -11
  457. package/dist/shims/metadata.js +88 -26
  458. package/dist/shims/navigation-errors.d.ts +2 -1
  459. package/dist/shims/navigation.d.ts +23 -3
  460. package/dist/shims/navigation.js +91 -25
  461. package/dist/shims/og.js +35 -10
  462. package/dist/shims/pages-router-runtime.d.ts +2 -1
  463. package/dist/shims/ppr-fallback-shell.d.ts +2 -1
  464. package/dist/shims/request-context.d.ts +13 -0
  465. package/dist/shims/router.js +33 -43
  466. package/dist/shims/server.d.ts +31 -4
  467. package/dist/shims/server.js +58 -10
  468. package/dist/shims/thenable-params.d.ts +6 -1
  469. package/dist/shims/thenable-params.js +11 -2
  470. package/dist/shims/unified-request-context.d.ts +5 -0
  471. package/dist/shims/unified-request-context.js +5 -3
  472. package/dist/typegen.d.ts +2 -1
  473. package/dist/utils/asset-prefix.d.ts +7 -0
  474. package/dist/utils/asset-prefix.js +10 -1
  475. package/dist/utils/client-build-manifest.d.ts +4 -1
  476. package/dist/utils/client-build-manifest.js +20 -6
  477. package/dist/utils/client-entry-manifest.d.ts +13 -0
  478. package/dist/utils/client-entry-manifest.js +20 -1
  479. package/dist/utils/client-reference-chunks.d.ts +45 -0
  480. package/dist/utils/client-reference-chunks.js +30 -0
  481. package/dist/utils/client-runtime-metadata.d.ts +10 -1
  482. package/dist/utils/client-runtime-metadata.js +53 -9
  483. package/dist/utils/compare.d.ts +9 -0
  484. package/dist/utils/compare.js +15 -1
  485. package/dist/utils/lazy-chunks.d.ts +18 -0
  486. package/dist/utils/lazy-chunks.js +27 -1
  487. package/dist/utils/manifest-paths.d.ts +14 -0
  488. package/dist/utils/manifest-paths.js +22 -1
  489. package/dist/utils/middleware-request-headers.d.ts +2 -1
  490. package/dist/utils/path-to-regexp.d.ts +21 -0
  491. package/dist/{server/middleware-path-to-regexp.js → utils/path-to-regexp.js} +14 -11
  492. package/dist/utils/plugin-react-version.d.ts +15 -0
  493. package/dist/utils/plugin-react-version.js +64 -0
  494. package/dist/utils/project.d.ts +2 -1
  495. package/dist/utils/project.js +9 -1
  496. package/dist/utils/public-routes.d.ts +2 -0
  497. package/dist/utils/public-routes.js +18 -7
  498. package/dist/utils/query.d.ts +2 -1
  499. package/dist/utils/sorted-array.d.ts +2 -1
  500. package/dist/utils/vite-cli-invocation.d.ts +2 -1
  501. package/package.json +5 -5
  502. package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
  503. package/dist/server/default-not-found-module.d.ts +0 -19
  504. package/dist/server/default-not-found-module.js +0 -18
  505. package/dist/server/middleware-path-to-regexp.d.ts +0 -13
  506. package/dist/server/rsc-stream-hints.d.ts +0 -21
  507. package/dist/server/rsc-stream-hints.js +0 -227
  508. package/dist/utils/regex-safety.d.ts +0 -17
  509. package/dist/utils/regex-safety.js +0 -789
@@ -1,4 +1,4 @@
1
- import { RouteManifest } from "../routing/app-route-graph.js";
1
+ import { BrowserRouteManifest } from "../routing/browser-route-manifest.js";
2
2
  import { AppRouterScrollIntent } from "../shims/app-router-scroll-state.js";
3
3
  import { NavigationRuntimeVisibleCommitMode } from "../client/navigation-runtime.js";
4
4
  import { AppElements } from "./app-elements-wire.js";
@@ -17,10 +17,14 @@ export type PendingBrowserRouterState = {
17
17
  };
18
18
  export type NavigationPayloadOutcome = "committed" | "no-commit" | "hard-navigate";
19
19
  type HardNavigationMode = "assign" | "replace";
20
- type BrowserNavigationCommitEffect = (options: {
21
- keepCurrentUrl: boolean;
22
- releaseSnapshot: boolean;
23
- }) => void;
20
+ type BrowserNavigationCommitEffect = {
21
+ writeHistory(options: {
22
+ keepCurrentUrl: boolean;
23
+ }): void;
24
+ publish(options: {
25
+ releaseSnapshot: boolean;
26
+ }): void;
27
+ };
24
28
  type BrowserNavigationCommitEffectFactory = (options: {
25
29
  activeRoutePaths: readonly string[];
26
30
  bfcacheIds: Readonly<Record<string, string>>;
@@ -43,8 +47,10 @@ type SameUrlServerActionLifecycleOptions = {
43
47
  type BrowserNavigationControllerDeps = {
44
48
  basePath?: string;
45
49
  commitClientNavigationState?: typeof commitClientNavigationState;
50
+ navigateDocument?: (href: string, mode: HardNavigationMode) => void;
46
51
  performHardNavigation?: (href: string, mode?: HardNavigationMode) => boolean;
47
- getRouteManifest?: () => RouteManifest | null;
52
+ getRouteManifest?: () => BrowserRouteManifest | null;
53
+ loadRouteManifest?: () => Promise<boolean> | null;
48
54
  syncHistoryStatePreviousNextUrl?: (previousNextUrl: string | null, bfcacheIds?: Readonly<Record<string, string>> | null) => void;
49
55
  };
50
56
  type BrowserNavigationPayloadOptions = {
@@ -80,6 +86,7 @@ type BrowserNavigationController = {
80
86
  waitForBrowserRouterStateReady(): Promise<void>;
81
87
  attachBrowserRouterState(setter: Dispatch<AppRouterState | Promise<AppRouterState>>, stateRef: BrowserRouterStateRef): () => void;
82
88
  beginPendingBrowserRouterState(): PendingBrowserRouterState;
89
+ abandonPendingBrowserRouterState(pending: PendingBrowserRouterState | null | undefined): void;
83
90
  finalizeNavigation(navId: number, pending: PendingBrowserRouterState | null | undefined): void;
84
91
  discardPendingNavigation(visibleState: AppRouterState | null): boolean;
85
92
  flushCommittingNavigationUrl(): void;
@@ -112,8 +119,12 @@ type BrowserNavigationController = {
112
119
  renderId: number;
113
120
  children?: ReactNode;
114
121
  }): ReactNode;
122
+ NavigationHistoryCommit(this: void, { renderId }: {
123
+ renderId: number;
124
+ }): null;
115
125
  };
116
126
  export declare function clearHardNavigationLoopGuard(): void;
127
+ export declare function navigateDocumentDirectly(href: string, mode: HardNavigationMode): void;
117
128
  export declare function createBasePathStrippedPathAndSearch(url: URL, basePath: string): string;
118
129
  export declare function createAppBrowserNavigationController(deps?: BrowserNavigationControllerDeps): BrowserNavigationController;
119
130
  //#endregion
@@ -1,4 +1,5 @@
1
1
  import { stripBasePath } from "../utils/base-path.js";
2
+ import { withBasePath } from "../shims/url-utils.js";
2
3
  import { clearAppNavigationFailureTarget, getAppNavigationFailureTarget } from "../client/app-nav-failure-handler.js";
3
4
  import { claimAppRouterScrollIntentForCommit, clearAppRouterScrollIntent, consumeAppRouterScrollIntent } from "../shims/app-router-scroll-state.js";
4
5
  import { resolveServerActionOperationLane, shouldScheduleRefreshForDiscardedServerAction } from "./app-browser-action-result.js";
@@ -37,7 +38,11 @@ function clearHardNavigationLoopGuard() {
37
38
  window.sessionStorage.removeItem(HARD_NAVIGATION_LOOP_GUARD_KEY);
38
39
  } catch {}
39
40
  }
40
- function performHardNavigationWithLoopGuard(href, mode = "assign") {
41
+ function navigateDocumentDirectly(href, mode) {
42
+ if (mode === "replace") window.location.replace(href);
43
+ else window.location.assign(href);
44
+ }
45
+ function performHardNavigationWithLoopGuard(href, mode = "assign", navigateDocument = navigateDocumentDirectly) {
41
46
  const targetHref = normalizeBrowserHref(href);
42
47
  const currentHref = normalizeBrowserHref(window.location.href);
43
48
  if (readHardNavigationLoopGuard() === targetHref && currentHref === targetHref) {
@@ -49,8 +54,7 @@ function performHardNavigationWithLoopGuard(href, mode = "assign") {
49
54
  console.error(`[vinext] Hard navigation to ${targetHref} requires a reload-loop guard, but sessionStorage is unavailable; leaving the current document in place.`);
50
55
  return false;
51
56
  }
52
- if (mode === "replace") window.location.replace(href);
53
- else window.location.assign(href);
57
+ navigateDocument(href, mode);
54
58
  return true;
55
59
  }
56
60
  function createBasePathStrippedPathAndSearch(url, basePath) {
@@ -69,8 +73,9 @@ function isSnapshotTargetHref(basePath, snapshot, targetHref) {
69
73
  function createAppBrowserNavigationController(deps = {}) {
70
74
  const basePath = deps.basePath ?? "";
71
75
  const commitClientNavigationStateImpl = deps.commitClientNavigationState ?? commitClientNavigationState;
72
- const performHardNavigation = deps.performHardNavigation ?? performHardNavigationWithLoopGuard;
76
+ const performHardNavigation = deps.performHardNavigation ?? ((href, mode) => performHardNavigationWithLoopGuard(href, mode, deps.navigateDocument));
73
77
  const getRouteManifest = deps.getRouteManifest ?? (() => null);
78
+ const loadRouteManifest = deps.loadRouteManifest ?? (() => null);
74
79
  const syncHistoryStatePreviousNextUrl = deps.syncHistoryStatePreviousNextUrl ?? (() => {});
75
80
  let nextNavigationRenderId = 0;
76
81
  let activeNavigationId = 0;
@@ -162,6 +167,11 @@ function createAppBrowserNavigationController(deps = {}) {
162
167
  pending.resolve(getBrowserRouterState());
163
168
  if (activePendingBrowserRouterState === pending) activePendingBrowserRouterState = null;
164
169
  }
170
+ function abandonPendingBrowserRouterState(pending) {
171
+ if (!pending || pending.settled) return;
172
+ pending.settled = true;
173
+ if (activePendingBrowserRouterState === pending) activePendingBrowserRouterState = null;
174
+ }
165
175
  function finalizeNavigation(navId, pending) {
166
176
  settlePendingBrowserRouterState(pending);
167
177
  if (isCurrentNavigation(navId)) {
@@ -209,11 +219,11 @@ function createAppBrowserNavigationController(deps = {}) {
209
219
  return true;
210
220
  }
211
221
  /**
212
- * Run the URL update of a navigation render React is committing right now.
213
- * It normally runs in NavigationCommitSignal's layout effect, after the
214
- * route's own layout effects. Next.js writes the URL in an insertion effect
215
- * instead, so a raw history write from a destination layout effect lands on
216
- * top of the destination entry. Called before such a write to keep that order.
222
+ * Publish the URL update of a navigation render React is committing right
223
+ * now. Its history entry is already written, but publishing normally runs in
224
+ * NavigationCommitSignal's layout effect, after the route's own layout
225
+ * effects. Called before a raw history write from such an effect, so the
226
+ * write is published on top of the destination's.
217
227
  */
218
228
  function flushCommittingNavigationUrl() {
219
229
  if (committingNavigationRenderId !== null) drainPrePaintEffects(committingNavigationRenderId);
@@ -224,9 +234,12 @@ function createAppBrowserNavigationController(deps = {}) {
224
234
  function isRetiredNavigationUrl(navId, targetHref) {
225
235
  return retiredNavigationUrl !== null && retiredNavigationUrl.navigationId === navId && retiredNavigationUrl.href === normalizeBrowserHref(targetHref);
226
236
  }
227
- function queuePrePaintNavigationEffect(renderId, effect) {
228
- if (!effect) return;
229
- pendingNavigationPrePaintEffects.set(renderId, effect);
237
+ function writeNavigationRenderHistory(renderId) {
238
+ const effect = pendingNavigationPrePaintEffects.get(renderId);
239
+ const writeHistory = effect?.writeHistory;
240
+ if (!effect || !writeHistory) return;
241
+ effect.writeHistory = null;
242
+ writeHistory();
230
243
  }
231
244
  /**
232
245
  * Run all queued pre-paint effects for renderIds up to and including the
@@ -243,8 +256,10 @@ function createAppBrowserNavigationController(deps = {}) {
243
256
  for (const [id, effect] of pendingNavigationPrePaintEffects) {
244
257
  if (id > upToRenderId) continue;
245
258
  pendingNavigationPrePaintEffects.delete(id);
246
- if (id === upToRenderId) effect();
247
- else releaseRenderSnapshot(id);
259
+ if (id === upToRenderId) {
260
+ effect.writeHistory?.();
261
+ effect.publish();
262
+ } else releaseRenderSnapshot(id);
248
263
  }
249
264
  }
250
265
  /**
@@ -261,7 +276,10 @@ function createAppBrowserNavigationController(deps = {}) {
261
276
  pendingCommit.resolve(didCommit);
262
277
  }
263
278
  }
264
- /** Runs when React starts committing a render, before any layout effect. */
279
+ /**
280
+ * Runs when React starts committing a render, before it changes the route
281
+ * tree's DOM, and writes the render's history entry.
282
+ */
265
283
  function beginNavigationRenderCommit(renderId) {
266
284
  committingNavigationRenderId = renderId;
267
285
  const committingCommit = pendingNavigationCommits.get(renderId);
@@ -269,6 +287,7 @@ function createAppBrowserNavigationController(deps = {}) {
269
287
  if (committingCommit && committingOperation?.navigationCommitKind === "detached" && committingOperation.navigationId === pendingUserNavigationId) pendingUserNavigationShellHref = normalizeBrowserHref(committingCommit.targetHref);
270
288
  else pendingUserNavigationCommitStarted = true;
271
289
  clearCommittedNavigationFailureTargets(renderId);
290
+ writeNavigationRenderHistory(renderId);
272
291
  }
273
292
  function commitNavigationRender(renderId) {
274
293
  committingNavigationRenderId = null;
@@ -288,7 +307,11 @@ function createAppBrowserNavigationController(deps = {}) {
288
307
  if (!hasBrowserRouterState()) return;
289
308
  const currentState = getBrowserRouterState();
290
309
  const renderId = allocateRenderId();
291
- const [navigationSnapshot] = await Promise.all([pendingNavigationSnapshot, nextElements]);
310
+ const [navigationSnapshot, , routeManifestLoaded] = await Promise.all([
311
+ pendingNavigationSnapshot,
312
+ nextElements,
313
+ loadRouteManifest()
314
+ ]);
292
315
  const pending = await createPendingNavigationCommit({
293
316
  currentState,
294
317
  nextElements,
@@ -300,19 +323,36 @@ function createAppBrowserNavigationController(deps = {}) {
300
323
  });
301
324
  if (hmrUpdateId !== latestHmrUpdateId || startedDuringUserNavigation) return;
302
325
  if (!hasBrowserRouterState()) return;
326
+ if (routeManifestLoaded === false) {
327
+ performHardNavigation(withBasePath(createSnapshotPathAndSearch(navigationSnapshot), basePath));
328
+ return;
329
+ }
303
330
  const approval = approveHmrVisibleCommit({
304
331
  currentState: getBrowserRouterState(),
305
332
  pending,
306
333
  routeManifest: deps.getRouteManifest?.() ?? null,
307
334
  targetHref: createSnapshotPathAndSearch(navigationSnapshot)
308
335
  });
309
- if (approval.approvedCommit) dispatchSynchronousVisibleCommit(approval.approvedCommit);
310
- else if (approval.decision.disposition === "hard-navigate") performHardNavigation(createSnapshotPathAndSearch(navigationSnapshot));
336
+ if (approval.approvedCommit) {
337
+ const approvedHmrCommit = approval.approvedCommit;
338
+ startTransition(() => {
339
+ dispatchVisibleCommit(approvedHmrCommit);
340
+ });
341
+ } else if (approval.decision.disposition === "hard-navigate") performHardNavigation(createSnapshotPathAndSearch(navigationSnapshot));
311
342
  }
312
- function NavigationCommitSignal({ renderId, children }) {
343
+ /**
344
+ * Rendered before the route tree (see createAppRouteTree). Insertion effects
345
+ * run in the mutation phase, in tree order, after each component's own
346
+ * subtree mutations, so this one runs before React changes the route tree's
347
+ * DOM. An effect on NavigationCommitSignal itself would run after them.
348
+ */
349
+ function NavigationHistoryCommit({ renderId }) {
313
350
  useInsertionEffect(() => {
314
351
  beginNavigationRenderCommit(renderId);
315
352
  }, [renderId]);
353
+ return null;
354
+ }
355
+ function NavigationCommitSignal({ renderId, children }) {
316
356
  useLayoutEffect(() => {
317
357
  commitNavigationRender(renderId);
318
358
  return () => {
@@ -321,7 +361,7 @@ function createAppBrowserNavigationController(deps = {}) {
321
361
  }, [renderId]);
322
362
  return children;
323
363
  }
324
- function dispatchApprovedVisibleCommit(renderId, commit, pendingRouterState, visibleCommitMode) {
364
+ function dispatchApprovedVisibleCommit(renderId, commit, pendingRouterState, visibleCommitMode, republishPendingRouterState) {
325
365
  const setter = getBrowserRouterStateSetter();
326
366
  const pendingCommit = pendingNavigationCommits.get(renderId);
327
367
  const captureCandidateState = (state) => {
@@ -334,7 +374,7 @@ function createAppBrowserNavigationController(deps = {}) {
334
374
  pendingRouterState.settled = true;
335
375
  pendingRouterState.resolve(committedState);
336
376
  if (activePendingBrowserRouterState === pendingRouterState) activePendingBrowserRouterState = null;
337
- if (visibleCommitMode === "synchronous") flushSync(() => {
377
+ if (republishPendingRouterState) startTransition(() => {
338
378
  setter(committedState);
339
379
  });
340
380
  return;
@@ -351,7 +391,8 @@ function createAppBrowserNavigationController(deps = {}) {
351
391
  setter(committedState);
352
392
  });
353
393
  }
354
- function dispatchSynchronousVisibleCommit(commit) {
394
+ /** Calls the setter directly; the caller chooses the update's priority. */
395
+ function dispatchVisibleCommit(commit) {
355
396
  getBrowserRouterStateSetter()(applyApprovedVisibleCommit(getBrowserRouterState(), commit));
356
397
  }
357
398
  function createRestoredHistorySnapshotCommit(options) {
@@ -408,7 +449,7 @@ function createAppBrowserNavigationController(deps = {}) {
408
449
  });
409
450
  if (approval.approvedCommit === null) return false;
410
451
  options.beforeCommit?.();
411
- dispatchSynchronousVisibleCommit(approval.approvedCommit);
452
+ dispatchVisibleCommit(approval.approvedCommit);
412
453
  return true;
413
454
  }
414
455
  function notifyDiscardedServerActionRevalidation(lifecycleOptions) {
@@ -426,13 +467,20 @@ function createAppBrowserNavigationController(deps = {}) {
426
467
  return false;
427
468
  }
428
469
  }
429
- function shouldForceSynchronousCommit(options) {
470
+ function shouldRepublishPendingRouterState(options) {
430
471
  if (options.actionType === "traverse") return false;
431
472
  if (options.historyUpdateMode === void 0) return false;
432
473
  if (options.scrollIntent?.hash == null) return false;
433
474
  return isSamePathSearchHashCommit(options.targetHref);
434
475
  }
435
476
  async function renderNavigationPayload(options) {
477
+ const routeManifestLoad = loadRouteManifest();
478
+ if (routeManifestLoad !== null && !await routeManifestLoad) {
479
+ settlePendingBrowserRouterState(options.pendingRouterState);
480
+ consumeAppRouterScrollIntent(options.scrollIntent ?? null);
481
+ if (isCurrentNavigation(options.navId)) performHardNavigation(options.targetHref, options.historyUpdateMode === "push" ? "assign" : "replace");
482
+ return "no-commit";
483
+ }
436
484
  if (options.navId === pendingUserNavigationId) pendingUserNavigationLane = options.operationLane;
437
485
  const renderId = allocateRenderId();
438
486
  const failureTarget = getAppNavigationFailureTarget(options.targetHref);
@@ -486,11 +534,14 @@ function createAppBrowserNavigationController(deps = {}) {
486
534
  return "no-commit";
487
535
  }
488
536
  if (approval.decision.disposition === "hard-navigate") {
489
- settlePendingBrowserRouterState(options.pendingRouterState);
490
537
  pendingNavigationFailureTargets.delete(renderId);
491
538
  pendingNavigationCommits.delete(renderId);
492
539
  consumeAppRouterScrollIntent(options.scrollIntent ?? null);
493
- if (performHardNavigation(options.targetHref)) return "hard-navigate";
540
+ if (performHardNavigation(options.targetHref, options.historyUpdateMode === "push" ? "assign" : "replace")) {
541
+ abandonPendingBrowserRouterState(options.pendingRouterState);
542
+ return "hard-navigate";
543
+ }
544
+ settlePendingBrowserRouterState(options.pendingRouterState);
494
545
  if (failureTarget) clearAppNavigationFailureTarget(failureTarget);
495
546
  return "no-commit";
496
547
  }
@@ -507,23 +558,25 @@ function createAppBrowserNavigationController(deps = {}) {
507
558
  previousNextUrl: approvedCommit.previousNextUrl,
508
559
  targetHistoryIndex: options.targetHistoryIndex
509
560
  });
510
- queuePrePaintNavigationEffect(renderId, () => {
511
- commitEffect({
512
- keepCurrentUrl: isRetiredNavigationUrl(options.navId, options.targetHref),
513
- releaseSnapshot: snapshotRenderIds.delete(renderId)
514
- });
561
+ pendingNavigationPrePaintEffects.set(renderId, {
562
+ writeHistory: () => {
563
+ commitEffect.writeHistory({ keepCurrentUrl: isRetiredNavigationUrl(options.navId, options.targetHref) });
564
+ },
565
+ publish: () => {
566
+ commitEffect.publish({ releaseSnapshot: snapshotRenderIds.delete(renderId) });
567
+ }
515
568
  });
516
569
  claimAppRouterScrollIntentForCommit(options.scrollIntent, renderId);
517
570
  if (!isRetiredNavigationUrl(options.navId, options.targetHref)) {
518
571
  activateNavigationSnapshot();
519
572
  snapshotRenderIds.add(renderId);
520
573
  }
521
- dispatchApprovedVisibleCommit(renderId, approvedCommit, options.pendingRouterState, shouldForceSynchronousCommit(options) ? "synchronous" : options.visibleCommitMode ?? "transition");
574
+ dispatchApprovedVisibleCommit(renderId, approvedCommit, options.pendingRouterState, options.visibleCommitMode ?? "transition", shouldRepublishPendingRouterState(options));
522
575
  if (options.navigationResponseCompletion) options.navigationResponseCompletion.then(() => {
523
576
  if (!isCurrentNavigation(options.navId) || !hasBrowserRouterState()) return;
524
577
  const committedState = pendingNavigationCommits.get(renderId)?.committedState;
525
578
  if (!committedState) return;
526
- flushSync(() => {
579
+ startTransition(() => {
527
580
  getBrowserRouterStateSetter()(committedState);
528
581
  });
529
582
  }, () => {});
@@ -542,6 +595,15 @@ function createAppBrowserNavigationController(deps = {}) {
542
595
  const currentState = actionInitiationState ?? getBrowserRouterState();
543
596
  const startedNavigationId = lifecycleOptions?.startedNavigationId ?? activeNavigationId;
544
597
  const targetHref = lifecycleOptions?.targetHref ?? window.location.href;
598
+ const routeManifestLoad = loadRouteManifest();
599
+ if (routeManifestLoad !== null && !await routeManifestLoad) {
600
+ if (isCurrentNavigation(startedNavigationId)) {
601
+ performHardNavigation(targetHref);
602
+ return;
603
+ }
604
+ notifyDiscardedServerActionRevalidation(lifecycleOptions);
605
+ return resolveSameUrlActionReturnValue(returnValue);
606
+ }
545
607
  const { approvedCommit, decision, pending, trace: _navigationTrace } = await resolveAndClassifyNavigationCommit({
546
608
  activeNavigationId,
547
609
  currentState,
@@ -577,11 +639,14 @@ function createAppBrowserNavigationController(deps = {}) {
577
639
  if (latestApproval.approvedCommit) {
578
640
  const approvedRevalidationCommit = latestApproval.approvedCommit;
579
641
  startTransition(() => {
580
- dispatchSynchronousVisibleCommit(approvedRevalidationCommit);
642
+ dispatchVisibleCommit(approvedRevalidationCommit);
581
643
  });
582
644
  syncHistoryStatePreviousNextUrl(approvedRevalidationCommit.previousNextUrl, approvedRevalidationCommit.action.bfcacheIds);
583
645
  } else notifyDiscardedServerActionRevalidation(lifecycleOptions);
584
646
  } else if (decision.disposition === "no-commit") notifyDiscardedServerActionRevalidation(lifecycleOptions);
647
+ return resolveSameUrlActionReturnValue(returnValue);
648
+ }
649
+ async function resolveSameUrlActionReturnValue(returnValue) {
585
650
  if (returnValue) {
586
651
  if (!returnValue.ok) throw await returnValue.data;
587
652
  return returnValue.data;
@@ -609,6 +674,7 @@ function createAppBrowserNavigationController(deps = {}) {
609
674
  waitForBrowserRouterStateReady,
610
675
  attachBrowserRouterState,
611
676
  beginPendingBrowserRouterState,
677
+ abandonPendingBrowserRouterState,
612
678
  finalizeNavigation,
613
679
  discardPendingNavigation,
614
680
  flushCommittingNavigationUrl,
@@ -620,8 +686,9 @@ function createAppBrowserNavigationController(deps = {}) {
620
686
  beginNavigationRenderCommit,
621
687
  commitNavigationRender,
622
688
  clearCommittedNavigationFailureTargets,
623
- NavigationCommitSignal
689
+ NavigationCommitSignal,
690
+ NavigationHistoryCommit
624
691
  };
625
692
  }
626
693
  //#endregion
627
- export { clearHardNavigationLoopGuard, createAppBrowserNavigationController, createBasePathStrippedPathAndSearch, createSnapshotPathAndSearch };
694
+ export { clearHardNavigationLoopGuard, createAppBrowserNavigationController, createBasePathStrippedPathAndSearch, createSnapshotPathAndSearch, navigateDocumentDirectly };
@@ -26,4 +26,5 @@ export declare function shouldCommitPopstateUrlWithoutNavigation(options: {
26
26
  isSameAppRouteTarget: boolean;
27
27
  }): boolean;
28
28
  export declare function createPopstateRestoreHandler(deps: BrowserPopstateRestoreDeps): (event: PopStateEvent) => void;
29
- //#endregion
29
+ //#endregion
30
+ export {};
@@ -34,4 +34,5 @@ export declare function resolveStreamedRscRedirectLifecycleHop(options: {
34
34
  requestPreviousNextUrl: string | null;
35
35
  streamedRedirectTarget: string;
36
36
  }): RscRedirectLifecycleDecision;
37
- //#endregion
37
+ //#endregion
38
+ export {};
@@ -30,4 +30,5 @@ export type ClientServerActionDeps = {
30
30
  syncServerActionHttpFallbackHead(status: number | null): void;
31
31
  };
32
32
  export declare function invokeClientServerAction(id: string, args: unknown[], actionInitiation: ClientServerActionInitiation, deps: ClientServerActionDeps): Promise<unknown>;
33
- //#endregion
33
+ //#endregion
34
+ export {};
@@ -1,4 +1,4 @@
1
- import { RouteManifest } from "../routing/app-route-graph.js";
1
+ import { BrowserRouteManifest } from "../routing/browser-route-manifest.js";
2
2
  import { CacheEntryReuseProof } from "./cache-proof.js";
3
3
  import { AppElements, AppElementsInterception, AppElementsSlotBinding, LayoutFlags } from "./app-elements-wire.js";
4
4
  import "./app-elements.js";
@@ -130,7 +130,7 @@ export declare function resolvePendingNavigationCommitDispositionDecision(option
130
130
  activeNavigationId: number;
131
131
  currentState: AppRouterState;
132
132
  pending: PendingNavigationCommit;
133
- routeManifest?: RouteManifest | null;
133
+ routeManifest?: BrowserRouteManifest | null;
134
134
  startedNavigationId: number;
135
135
  targetHref?: string;
136
136
  }): PendingNavigationCommitDispositionDecision;
@@ -7,8 +7,8 @@ import { AppElementsWire } from "./app-elements-wire.js";
7
7
  import { getMountedSlotIds, getMountedSlotIdsHeader } from "./app-elements.js";
8
8
  import { bindAppElementsRenderedSearch } from "../shims/slot.js";
9
9
  import { createRscRequestHeaders } from "./app-rsc-cache-busting.js";
10
- import { createCacheEntryReuseProof } from "./cache-proof.js";
11
10
  import { createBfcacheSegmentIdentityMap, createInitialBfcacheIdMap, createNextBfcacheIdMap, preserveBfcacheIdsForMergedElements } from "./app-bfcache-identity.js";
11
+ import { createCacheEntryReuseProof } from "./cache-proof.js";
12
12
  import { createAppOwnedHistoryState, createExternalHistoryStatePreservingMetadata, createHistoryStateWithNavigationMetadata, createHistoryStateWithPreviousNextUrl, createHistoryStateWithTreeSnapshotId, isExternalHistoryState, isHistoryStateBfcacheVersionCurrent, readHistoryStateActiveRoutePaths, readHistoryStateBfcacheIds, readHistoryStateBfcacheVersion, readHistoryStatePreviousNextUrl, readHistoryStateTraversalIndex, resolveActiveRoutePaths, resolveHistoryTraversalIntent } from "./app-history-state.js";
13
13
  import { NavigationTraceReasonCodes, createNavigationLifecycleTraceFields, createNavigationTrace } from "./navigation-trace.js";
14
14
  import { verifyOperationTokenForCommit } from "./operation-token.js";
@@ -21,4 +21,5 @@ export declare function chunksToReadableStream(chunks: readonly RscEmbeddedChunk
21
21
  * immediately instead of polling with setTimeout.
22
22
  */
23
23
  export declare function createProgressiveRscStream(): ReadableStream<Uint8Array>;
24
- //#endregion
24
+ //#endregion
25
+ export {};
@@ -1,4 +1,4 @@
1
- import { RouteManifest } from "../routing/app-route-graph.js";
1
+ import { BrowserRouteManifest } from "../routing/browser-route-manifest.js";
2
2
  import { AppElements } from "./app-elements-wire.js";
3
3
  import "./app-elements.js";
4
4
  import { NavigationTrace } from "./navigation-trace.js";
@@ -52,14 +52,14 @@ export declare function applyApprovedVisibleCommit(state: AppRouterState, commit
52
52
  export declare function approveHmrVisibleCommit(options: {
53
53
  currentState: AppRouterState;
54
54
  pending: PendingNavigationCommit;
55
- routeManifest?: RouteManifest | null;
55
+ routeManifest?: BrowserRouteManifest | null;
56
56
  targetHref: string;
57
57
  }): CommitApproval;
58
58
  export declare function approvePendingNavigationCommit(options: {
59
59
  activeNavigationId: number;
60
60
  currentState: AppRouterState;
61
61
  pending: PendingNavigationCommit;
62
- routeManifest?: RouteManifest | null;
62
+ routeManifest?: BrowserRouteManifest | null;
63
63
  startedNavigationId: number;
64
64
  targetHref: string;
65
65
  }): CommitApproval;
@@ -74,9 +74,10 @@ export declare function resolveAndClassifyNavigationCommit(options: {
74
74
  payloadOrigin: AppNavigationPayloadOrigin;
75
75
  previousNextUrl?: string | null;
76
76
  renderId: number;
77
- routeManifest?: RouteManifest | null;
77
+ routeManifest?: BrowserRouteManifest | null;
78
78
  startedNavigationId: number;
79
79
  targetHref: string;
80
80
  type: "navigate" | "replace" | "traverse";
81
81
  }): Promise<ClassifiedPendingNavigationCommit>;
82
- //#endregion
82
+ //#endregion
83
+ export {};
@@ -0,0 +1,31 @@
1
+ import { ClientReferenceChunks } from "../utils/client-reference-chunks.js";
2
+ //#region src/server/app-client-reference-manifest.d.ts
3
+ type ClientManifestEntry = {
4
+ id: string;
5
+ name: string;
6
+ chunks: string[];
7
+ async?: boolean;
8
+ };
9
+ type ClientManifest = Record<string, ClientManifestEntry>;
10
+ /**
11
+ * Names the chunks each client reference loads in its Flight row, as Next.js
12
+ * does, so the browser loads a reference without a registry of every client
13
+ * reference in the app (see shims/internal/client-reference-loader.ts). Returns a
14
+ * function that wraps @vitejs/plugin-rsc's client manifest, which leaves the
15
+ * chunks empty. Without chunk data (development, or `rsc: false`) it returns
16
+ * the manifest unchanged.
17
+ */
18
+ export declare function createClientReferenceChunksManifest(referenceChunks: ClientReferenceChunks | undefined): (manifest: ClientManifest) => ClientManifest;
19
+ /**
20
+ * The SSR Flight client's consumer manifest. React's webpack binding loads the
21
+ * chunks a client reference's row names before requiring the reference, which
22
+ * only the browser can do, so SSR resolves each reference to itself without
23
+ * them. A null `moduleLoading` keeps React from preinitializing the chunks as
24
+ * classic scripts; SSR preloads them through @vitejs/plugin-rsc instead.
25
+ */
26
+ export declare const ssrServerConsumerManifest: {
27
+ moduleMap: Record<string, Record<string, ClientManifestEntry>>;
28
+ moduleLoading: null;
29
+ };
30
+ //#endregion
31
+ export {};
@@ -0,0 +1,46 @@
1
+ import { toFlightChunks } from "../utils/client-reference-chunks.js";
2
+ //#region src/server/app-client-reference-manifest.ts
3
+ /**
4
+ * Names the chunks each client reference loads in its Flight row, as Next.js
5
+ * does, so the browser loads a reference without a registry of every client
6
+ * reference in the app (see shims/internal/client-reference-loader.ts). Returns a
7
+ * function that wraps @vitejs/plugin-rsc's client manifest, which leaves the
8
+ * chunks empty. Without chunk data (development, or `rsc: false`) it returns
9
+ * the manifest unchanged.
10
+ */
11
+ function createClientReferenceChunksManifest(referenceChunks) {
12
+ if (!referenceChunks) return (manifest) => manifest;
13
+ const flightChunks = referenceChunks.modules.map(toFlightChunks);
14
+ return (manifest) => new Proxy(manifest, { get(target, id, receiver) {
15
+ const entry = Reflect.get(target, id, receiver);
16
+ if (typeof id !== "string" || !entry || typeof entry !== "object") return entry;
17
+ const reference = entry;
18
+ const index = Object.hasOwn(referenceChunks.references, reference.id) ? referenceChunks.references[reference.id] : void 0;
19
+ return index === void 0 ? reference : {
20
+ ...reference,
21
+ chunks: flightChunks[index]
22
+ };
23
+ } });
24
+ }
25
+ /**
26
+ * The SSR Flight client's consumer manifest. React's webpack binding loads the
27
+ * chunks a client reference's row names before requiring the reference, which
28
+ * only the browser can do, so SSR resolves each reference to itself without
29
+ * them. A null `moduleLoading` keeps React from preinitializing the chunks as
30
+ * classic scripts; SSR preloads them through @vitejs/plugin-rsc instead.
31
+ */
32
+ const ssrServerConsumerManifest = {
33
+ moduleMap: new Proxy({}, { get(_target, id) {
34
+ if (typeof id !== "string") return void 0;
35
+ return new Proxy({}, { get(_exports, name) {
36
+ return typeof name === "string" ? {
37
+ id,
38
+ chunks: [],
39
+ name
40
+ } : void 0;
41
+ } });
42
+ } }),
43
+ moduleLoading: null
44
+ };
45
+ //#endregion
46
+ export { createClientReferenceChunksManifest, ssrServerConsumerManifest };
@@ -7,7 +7,50 @@ type ClientReferencePreloaderOptions = {
7
7
  onPreloadError?: (id: string, error: unknown) => void;
8
8
  };
9
9
  type ClientReferencePreloader = {
10
- preload: (referenceIds?: Iterable<string>) => Promise<void>;
10
+ /**
11
+ * Load `referenceIds` in order, or every reference without them. The
12
+ * returned promise doesn't wait for those in `streamedIds`.
13
+ */
14
+ preload: (referenceIds?: Iterable<string>, streamedIds?: ReadonlySet<string>) => Promise<void>;
11
15
  };
16
+ /**
17
+ * The client references each App Router route preloads before SSR, generated
18
+ * by plugins/rsc-client-reference-loaders.ts from the RSC build's module graph.
19
+ * Each list holds indices into `references`, or for routes into `files`.
20
+ */
21
+ export type RouteClientReferences = {
22
+ /** Client reference keys. */
23
+ references: readonly string[];
24
+ /** References any render may use, whatever its route. */
25
+ always: readonly number[];
26
+ /** The references each route file reaches. */
27
+ files: readonly (readonly number[])[];
28
+ /** Each route pattern's files. */
29
+ routes: Readonly<Record<string, readonly number[]>>;
30
+ /** The files of a render without a route, such as a route-miss 404. */
31
+ routeless: readonly number[];
32
+ /**
33
+ * References whose SSR modules evaluate asynchronously (top-level await),
34
+ * which a render streams instead of waiting for.
35
+ */
36
+ async: readonly number[];
37
+ };
38
+ /** The client references a render loads, and those it streams instead of waiting for. */
39
+ export type RouteClientReferenceSet = {
40
+ /**
41
+ * In import order: the `always` set, then each route file's references in
42
+ * the order its route files render.
43
+ */
44
+ references: string[];
45
+ streamed: string[];
46
+ };
47
+ /**
48
+ * The client references a render of `routePattern` preloads, or of no route
49
+ * when it is null, and those it streams.
50
+ * Undefined, meaning every reference, without a plan or a route to look up,
51
+ * or for a pattern the plan doesn't know.
52
+ */
53
+ export declare function resolveRouteClientReferences(plan: RouteClientReferences | null, routePattern: string | null | undefined): RouteClientReferenceSet | undefined;
12
54
  export declare function createClientReferencePreloader(options: ClientReferencePreloaderOptions): ClientReferencePreloader;
13
- //#endregion
55
+ //#endregion
56
+ export {};