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
@@ -14,11 +14,11 @@ import { clearAppNavigationFailureTarget, installAppNavigationFailureListeners }
14
14
  import { DevRecoveryBoundary, GlobalErrorBoundary, RedirectBoundary } from "../shims/error-boundary.js";
15
15
  import { beginAppRouterScrollIntent, consumeAppRouterScrollIntent } from "../shims/app-router-scroll-state.js";
16
16
  import { AppRouterScrollCommitProvider } from "../shims/app-router-scroll.js";
17
- import { BfcacheIdentityMapContext, ElementsContext, Slot, bindAppElementsRenderedSearch, setAppElementsRenderedSearch } from "../shims/slot.js";
18
- import { VINEXT_RSC_COMPATIBILITY_ID_HEADER, VINEXT_RSC_CONTENT_TYPE, createRscRequestHeaders, createRscRequestUrl, formatRscRequestPath, getVinextRscCompatibilityId } from "./app-rsc-cache-busting.js";
17
+ import { BfcacheIdentityMapContext, bindAppElementsRenderedSearch, setAppElementsRenderedSearch } from "../shims/slot.js";
18
+ import { VINEXT_RSC_COMPATIBILITY_ID_HEADER, VINEXT_RSC_CONTENT_TYPE, createRscRequestHeaders, createRscRequestUrl, formatRscRequestPath, isRscCompatibilityIdCompatible } from "./app-rsc-cache-busting.js";
19
19
  import { notifyAppRouterTransitionStart } from "../client/instrumentation-client-state.js";
20
20
  import "../client/instrumentation-client.js";
21
- import { getNavigationRuntime, registerNavigationRuntimeBootstrap, registerNavigationRuntimeFunctions } from "../client/navigation-runtime.js";
21
+ import { createNavigationRuntimeRouteManifestLoader, getNavigationRuntime, loadNavigationRuntimeRouteManifest, registerNavigationRuntimeBootstrap, registerNavigationRuntimeFunctions } from "../client/navigation-runtime.js";
22
22
  import { createBfcacheSegmentIdentityMap, createInitialBfcacheIdMap } from "./app-bfcache-identity.js";
23
23
  import { createDiscardedServerActionRefreshScheduler, createServerActionInitiationSnapshot, resolveServerActionOperationLane } from "./app-browser-action-result.js";
24
24
  import { createClientReuseManifestHeaderFromVisibleAppState } from "./app-browser-client-reuse-manifest.js";
@@ -31,7 +31,8 @@ import { navigationPlanner } from "./navigation-planner.js";
31
31
  import { DYNAMIC_NAVIGATION_CACHE_TTL, PREFETCH_CACHE_TTL, __basePath, appRouterInstance, commitClientNavigationState, consumePrefetchResponse, consumePrefetchResponseForNavigation, createCachedRscResponseSnapshot, createClientNavigationRenderSnapshot, createSnapshotPathAndSearch, deletePrefetchResponseSnapshot, disableNavigationResponsePrefetchCacheReuse, getClientNavigationRenderContext, getMountedSlotsHeader, getPrefetchCache, hasPrefetchCacheEntryForNavigation, invalidatePrefetchCache, parseRenderedPathAndSearchHeader, preloadHybridClientRouteOwner, pushHistoryStateWithoutNotify, replaceClientParamsWithoutNotify, replaceHistoryStateWithoutNotify, resolveLoadedHybridClientRewriteHref, resolvePrefetchCacheEntryMountedSlotsHeader, restoreRscResponse, saveScrollPosition, seedPrefetchResponseSnapshot, setClientParams, setMountedSlotsHeader, setPendingPathname, useRouter } from "../shims/navigation.js";
32
32
  import { chunksToReadableStream, createProgressiveRscStream, getVinextBrowserGlobal } from "./app-browser-stream.js";
33
33
  import { COMMITTED_CACHE_APP_NAVIGATION_PAYLOAD_ORIGIN, FRESH_APP_NAVIGATION_PAYLOAD_ORIGIN, VISITED_CACHE_APP_NAVIGATION_PAYLOAD_ORIGIN, isCacheRestorableAppPayloadMetadata, isCompleteAppPayloadMetadata, resolveInterceptionContextFromPreviousNextUrl } from "./app-browser-state.js";
34
- import { clearHardNavigationLoopGuard, createAppBrowserNavigationController, createBasePathStrippedPathAndSearch } from "./app-browser-navigation-controller.js";
34
+ import { clearHardNavigationLoopGuard, createAppBrowserNavigationController, createBasePathStrippedPathAndSearch, navigateDocumentDirectly } from "./app-browser-navigation-controller.js";
35
+ import { createAppRouteTree } from "./app-route-tree.js";
35
36
  import { shouldRecoverSamePathSearchCommitOnResponseCompletion } from "./app-browser-navigation-response.js";
36
37
  import { createSupplementalRefreshCoordinator, mergeRefreshedParallelSlot, requireCompleteSupplementalRefresh, resolvePersistedSourcePageRefreshes, resolveServerActionSupplementalRefresh, resolveSupplementalRefreshes } from "./app-browser-supplemental-refresh.js";
37
38
  import { createAppBrowserNavigationAbortCoordinator } from "./app-browser-navigation-abort.js";
@@ -42,7 +43,7 @@ import { createPopstateRestoreHandler, restoreSynchronousPopstateScrollPosition,
42
43
  import { createDevOnCaughtError, createOnUncaughtError, createProdOnCaughtError, createProdOnRecoverableError } from "./app-browser-error.js";
43
44
  import { createHydrationCachePublication } from "./app-hydration-cache-publication.js";
44
45
  import { peekSettledPrefetchResponseForNavigation, prepareConsumedPrefetchResponseForPublication, preserveCommittedPrefetchExpiry, resolvePrefetchNavigationResponseUrl } from "./app-browser-prefetch-response.js";
45
- import { canCommitOptimisticRouteTemplate, createOptimisticRouteTemplate, getOptimisticPrefetchSourceKey, getOptimisticRouteTemplateKey, matchOptimisticRouteManifestRoute, resolveOptimisticNavigationParamsForHref, resolveOptimisticNavigationPayload } from "./app-optimistic-routing.js";
46
+ import { canCommitOptimisticRouteTemplate, createOptimisticRouteTemplate, getOptimisticPrefetchSourceKey, getOptimisticRouteTemplateKey, keepOptimisticStreamingMetadata, resolveOptimisticNavigationParamsForHref, resolveOptimisticNavigationPayload } from "./app-optimistic-routing.js";
46
47
  import { removeStylesheetLinksCoveredByInlineCss } from "./app-inline-css-client.js";
47
48
  import { createElement, startTransition, use, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
48
49
  import { flushSync } from "react-dom";
@@ -64,8 +65,21 @@ function toOperationLane(kind) {
64
65
  }
65
66
  const MAX_VISITED_RESPONSE_CACHE_SIZE = 50;
66
67
  const IS_STATIC_EXPORT = process.env.NODE_ENV === "production" && process.env.__NEXT_CONFIG_OUTPUT === "export";
67
- const CLIENT_DEPLOYMENT_VERSION = process.env.__VINEXT_BUILD_ID ?? null;
68
- const CLIENT_RSC_COMPATIBILITY_ID = IS_STATIC_EXPORT ? null : getVinextRscCompatibilityId();
68
+ let clientDeploymentVersion = null;
69
+ let clientRscCompatibilityId = IS_STATIC_EXPORT ? null : "vinext:missing";
70
+ /**
71
+ * Decoding a payload loads the chunks its client references name, so a
72
+ * payload this page can't navigate to is only decoded by the navigation that
73
+ * hard-navigates. Otherwise a prefetch after a deploy would load the new
74
+ * deployment's code and stylesheets into this page.
75
+ */
76
+ function isRscResponseCompatible(compatibilityIdHeader) {
77
+ return isRscCompatibilityIdCompatible(compatibilityIdHeader, clientRscCompatibilityId);
78
+ }
79
+ function setClientRscCompatibilityId(compatibilityId) {
80
+ if (IS_STATIC_EXPORT || !compatibilityId) return;
81
+ clientRscCompatibilityId = compatibilityId;
82
+ }
69
83
  const optimisticRouteTemplates = /* @__PURE__ */ new Map();
70
84
  const optimisticRouteTemplateSources = /* @__PURE__ */ new Set();
71
85
  const optimisticRouteTemplateLearning = /* @__PURE__ */ new Map();
@@ -77,6 +91,7 @@ function claimInitialAppRouterBootstrap() {
77
91
  function markInitialAppRouterBootstrapHydrated() {
78
92
  window.__VINEXT_RSC_BOOTSTRAP_STATE__ = "hydrated";
79
93
  }
94
+ registerNavigationRuntimeFunctions({ loadRouteManifest: createNavigationRuntimeRouteManifestLoader(() => import("virtual:vinext-app-route-manifest")) });
80
95
  function getBrowserRouteManifest() {
81
96
  return getNavigationRuntime()?.bootstrap.routeManifest ?? null;
82
97
  }
@@ -92,7 +107,7 @@ function resolveStaticExportRouteParams(href) {
92
107
  function isStaticExportPayloadDeploymentCompatible(elements) {
93
108
  if (!IS_STATIC_EXPORT) return true;
94
109
  const deploymentVersion = AppElementsWire.readMetadata(elements).artifactCompatibility.deploymentVersion;
95
- return CLIENT_DEPLOYMENT_VERSION !== null && deploymentVersion === CLIENT_DEPLOYMENT_VERSION;
110
+ return clientDeploymentVersion !== null && deploymentVersion === clientDeploymentVersion;
96
111
  }
97
112
  const historyController = new AppBrowserHistoryController({
98
113
  initialHistoryState: window.history.state,
@@ -114,6 +129,14 @@ const historyController = new AppBrowserHistoryController({
114
129
  const browserNavigationController = createAppBrowserNavigationController({
115
130
  basePath: __basePath,
116
131
  getRouteManifest: getBrowserRouteManifest,
132
+ loadRouteManifest: loadNavigationRuntimeRouteManifest,
133
+ navigateDocument: (href, mode) => {
134
+ if (mpaNavigationTree) {
135
+ mpaNavigationTree.enter(href, mode === "replace" ? "replace" : "push");
136
+ return;
137
+ }
138
+ navigateDocumentDirectly(href, mode);
139
+ },
117
140
  syncHistoryStatePreviousNextUrl: (previousNextUrl, bfcacheIds) => historyController.syncCurrentHistoryStatePreviousNextUrl(previousNextUrl, bfcacheIds)
118
141
  });
119
142
  const discardedServerActionRefreshScheduler = hasServerActions ? createDiscardedServerActionRefreshScheduler({ runRefresh() {
@@ -126,6 +149,7 @@ const discardedServerActionRefreshScheduler = hasServerActions ? createDiscarded
126
149
  };
127
150
  const serverActionSupplementalRefreshCoordinator = createSupplementalRefreshCoordinator();
128
151
  const NavigationCommitSignal = browserNavigationController.NavigationCommitSignal;
152
+ const NavigationHistoryCommit = browserNavigationController.NavigationHistoryCommit;
129
153
  const ACTION_HTTP_FALLBACK_ROBOTS_META_ATTR = "data-vinext-action-http-fallback";
130
154
  function syncServerActionHttpFallbackHead(status) {
131
155
  document.head.querySelectorAll(`meta[${ACTION_HTTP_FALLBACK_ROBOTS_META_ATTR}="robots"]`).forEach((node) => node.remove());
@@ -155,6 +179,20 @@ let browserRouterStateHasEverCommitted = false;
155
179
  let initialPrefetchRouterState = null;
156
180
  const mpaNavigationScheduler = new AppBrowserMpaNavigationScheduler();
157
181
  const unresolvedMpaNavigation = new Promise(() => {});
182
+ let mpaNavigationTree = null;
183
+ let mpaNavigationRestore = null;
184
+ function waitForMpaNavigationRestore() {
185
+ if (!mpaNavigationRestore) {
186
+ let resolve = () => {};
187
+ mpaNavigationRestore = {
188
+ promise: new Promise((resolvePromise) => {
189
+ resolve = resolvePromise;
190
+ }),
191
+ resolve
192
+ };
193
+ }
194
+ return mpaNavigationRestore.promise;
195
+ }
158
196
  const RSC_HMR_SETTLE_DELAY_MS = 150;
159
197
  const DEFAULT_GLOBAL_ERROR_COMPONENT = DefaultGlobalError;
160
198
  let latestRscHmrUpdateId = 0;
@@ -280,6 +318,10 @@ async function fetchPersistedSourcePageRefresh(options) {
280
318
  * read the query the server rendered it with, not the navigation's.
281
319
  */
282
320
  async function decodeSupplementalRefresh(response, targetPathname) {
321
+ if (!isRscResponseCompatible(response.headers.get("X-Vinext-RSC-Compatibility-Id"))) {
322
+ response.body?.cancel().catch(() => {});
323
+ throw new Error("[vinext] Refreshed another deployment's payload");
324
+ }
283
325
  const elements = await decodeAppElementsPromise(createFromFetch(Promise.resolve(response)));
284
326
  const renderedPathAndSearch = parseRenderedPathAndSearchHeader(response.headers.get(VINEXT_RENDERED_PATH_AND_SEARCH_HEADER));
285
327
  setAppElementsRenderedSearch(elements, new URL(renderedPathAndSearch ?? targetPathname, window.location.origin).search);
@@ -304,6 +346,7 @@ async function learnOptimisticRouteTemplateFromPrefetch(options) {
304
346
  if (source.interceptionContext !== options.interceptionContext) return false;
305
347
  if (resolvePrefetchCacheEntryMountedSlotsHeader(options.entry) !== options.mountedSlotsHeader) return false;
306
348
  if (options.interceptionContext !== null) return false;
349
+ if (!isRscResponseCompatible(options.entry.snapshot.compatibilityIdHeader)) return false;
307
350
  const elements = await decodeAppElementsPromise(createFromFetch(Promise.resolve(restoreRscResponse(options.entry.snapshot))));
308
351
  const template = createOptimisticRouteTemplate({
309
352
  allowLoadingShell: options.entry.optimisticRouteShell === true,
@@ -362,22 +405,29 @@ function createActionInitiationSnapshot() {
362
405
  }
363
406
  function createNavigationCommitEffect(options) {
364
407
  const { activeRoutePaths, bfcacheIds, href, historyUpdateMode, navId, params, previousNextUrl, targetHistoryIndex } = options;
365
- return ({ keepCurrentUrl, releaseSnapshot }) => {
366
- if (!browserNavigationController.isCurrentNavigation(navId)) {
367
- commitClientNavigationState(void 0, { releaseSnapshot });
368
- return;
408
+ let wroteHistory = false;
409
+ return {
410
+ writeHistory({ keepCurrentUrl }) {
411
+ if (!browserNavigationController.isCurrentNavigation(navId)) return;
412
+ historyController.commitNavigationHistory({
413
+ activeRoutePaths,
414
+ bfcacheIds,
415
+ href,
416
+ historyUpdateMode: keepCurrentUrl ? void 0 : historyUpdateMode,
417
+ previousNextUrl,
418
+ stageClientParams: () => stageClientParams(params),
419
+ targetHistoryIndex
420
+ });
421
+ wroteHistory = true;
422
+ },
423
+ publish({ releaseSnapshot }) {
424
+ if (!wroteHistory) {
425
+ commitClientNavigationState(void 0, { releaseSnapshot });
426
+ return;
427
+ }
428
+ clearAppNavigationFailureTarget(href);
429
+ commitClientNavigationState(navId, { releaseSnapshot });
369
430
  }
370
- historyController.commitNavigationHistory({
371
- activeRoutePaths,
372
- bfcacheIds,
373
- href,
374
- historyUpdateMode: keepCurrentUrl ? void 0 : historyUpdateMode,
375
- previousNextUrl,
376
- stageClientParams: () => stageClientParams(params),
377
- targetHistoryIndex
378
- });
379
- clearAppNavigationFailureTarget(href);
380
- commitClientNavigationState(navId, { releaseSnapshot });
381
431
  };
382
432
  }
383
433
  async function renderNavigationPayload(options) {
@@ -409,7 +459,16 @@ async function renderNavigationPayload(options) {
409
459
  async function commitSameUrlNavigatePayload(nextElements, actionInitiation, returnValue, revalidation = "none", renderedPathAndSearch = null) {
410
460
  let shouldRetrySupplementalRefresh = false;
411
461
  let supplementalHandle = null;
462
+ let routeManifestLoaded = true;
412
463
  if (revalidation !== "none") {
464
+ const routeManifestLoad = loadNavigationRuntimeRouteManifest();
465
+ if (routeManifestLoad !== null) routeManifestLoaded = await routeManifestLoad;
466
+ if (!routeManifestLoaded && browserNavigationController.isCurrentNavigation(actionInitiation.navigationId)) {
467
+ browserNavigationController.performHardNavigation(actionInitiation.href);
468
+ return;
469
+ }
470
+ }
471
+ if (revalidation !== "none" && routeManifestLoaded) {
413
472
  const refreshUrl = new URL(actionInitiation.href);
414
473
  const requestInterceptionContext = resolveInterceptionContextFromPreviousNextUrl(actionInitiation.routerState.previousNextUrl, __basePath);
415
474
  const persistedInterceptions = resolvePersistedRefreshInterceptions(actionInitiation.routerState, getBrowserRouteManifest(), refreshUrl, requestInterceptionContext);
@@ -656,23 +715,40 @@ function BrowserRoot({ hydrationCachePublication, initialElements, initialNaviga
656
715
  const treeState = isRouterStatePromise(treeStateValue) ? use(treeStateValue) : treeStateValue;
657
716
  const stateRef = useRef(treeState);
658
717
  stateRef.current = treeState;
718
+ const committedStateRef = useRef(treeState);
719
+ useLayoutEffect(() => {
720
+ committedStateRef.current = treeState;
721
+ }, [treeState]);
659
722
  useLayoutEffect(() => {
660
723
  const setAppRouterStateValue = (value) => {
661
724
  setTreeStateValue(value);
662
725
  };
663
726
  const detach = browserNavigationController.attachBrowserRouterState(setAppRouterStateValue, stateRef);
664
- registerNavigationRuntimeFunctions({ navigateExternal: (href, historyUpdateMode) => {
665
- setTreeStateValue({
666
- href,
667
- historyUpdateMode,
668
- kind: "mpa-navigation"
727
+ const setMpaNavigationState = (href, historyUpdateMode) => {
728
+ startTransition(() => {
729
+ setTreeStateValue({
730
+ href,
731
+ historyUpdateMode,
732
+ kind: "mpa-navigation"
733
+ });
669
734
  });
670
- return new Promise(() => {});
735
+ };
736
+ const currentMpaNavigationTree = {
737
+ enter: setMpaNavigationState,
738
+ restore() {
739
+ setTreeStateValue((current) => isMpaNavigationState(current) ? committedStateRef.current : current);
740
+ }
741
+ };
742
+ mpaNavigationTree = currentMpaNavigationTree;
743
+ registerNavigationRuntimeFunctions({ navigateExternal: (href, historyUpdateMode) => {
744
+ setMpaNavigationState(href, historyUpdateMode);
745
+ return waitForMpaNavigationRestore();
671
746
  } });
672
747
  browserRouterStateHasEverCommitted = true;
673
748
  hydrationCachePublication.commit();
674
749
  return () => {
675
750
  hydrationCachePublication.invalidate();
751
+ if (mpaNavigationTree === currentMpaNavigationTree) mpaNavigationTree = null;
676
752
  registerNavigationRuntimeFunctions({ navigateExternal: void 0 });
677
753
  detach();
678
754
  setMountedSlotsHeader(null);
@@ -718,7 +794,11 @@ function BrowserRoot({ hydrationCachePublication, initialElements, initialNaviga
718
794
  treeState.renderId,
719
795
  treeState.slotBindings
720
796
  ]);
721
- const routeTree = createElement(RedirectBoundary, null, createElement(NavigationCommitSignal, { renderId: treeState.renderId }, createElement(ElementsContext.Provider, { value: treeState.elements }, createElement(Slot, { id: treeState.routeId }))));
797
+ const routeTree = createElement(RedirectBoundary, null, createElement(NavigationCommitSignal, { renderId: treeState.renderId }, createAppRouteTree({
798
+ elements: treeState.elements,
799
+ historyCommit: createElement(NavigationHistoryCommit, { renderId: treeState.renderId }),
800
+ routeId: treeState.routeId
801
+ })));
722
802
  const bfcacheSegmentIdentities = useMemo(() => createBfcacheSegmentIdentityMap({ elements: treeState.elements }), [treeState.elements]);
723
803
  const identityMapTree = createElement(BfcacheIdentityMapContext.Provider, { value: bfcacheSegmentIdentities }, routeTree);
724
804
  const bfcacheTree = BfcacheIdMapContext ? createElement(BfcacheIdMapContext.Provider, { value: treeState.bfcacheIds }, identityMapTree) : identityMapTree;
@@ -863,6 +943,7 @@ async function readInitialRscStream() {
863
943
  if (!rscResponse.body) return recoverFromBadInitialRscResponse("returned empty body");
864
944
  clearReloadFlag();
865
945
  clearHardNavigationLoopGuard();
946
+ setClientRscCompatibilityId(rscResponse.headers.get(VINEXT_RSC_COMPATIBILITY_ID_HEADER));
866
947
  const parsedParams = parseEncodedJsonHeader(rscResponse.headers.get(VINEXT_PARAMS_HEADER));
867
948
  const params = parsedParams ?? {};
868
949
  if (parsedParams) try {
@@ -873,6 +954,7 @@ async function readInitialRscStream() {
873
954
  return rscResponse.body;
874
955
  }
875
956
  function applyRuntimeRscBootstrap(rsc) {
957
+ setClientRscCompatibilityId(rsc.compatibilityId);
876
958
  const params = rsc.params ?? {};
877
959
  if (rsc.params) applyClientParams(rsc.params);
878
960
  if (rsc.nav) restoreEmbeddedHydrationNavigationContext(rsc.nav.pathname, rsc.nav.searchParams, params, rsc.searchParamsFromBrowser === true);
@@ -884,7 +966,7 @@ function registerServerActionCallback() {
884
966
  return loadServerActionClient().then(({ invokeClientServerAction }) => invokeClientServerAction(id, args, actionInitiation, {
885
967
  basePath: __basePath,
886
968
  clearClientNavigationCaches,
887
- clientRscCompatibilityId: CLIENT_RSC_COMPATIBILITY_ID,
969
+ clientRscCompatibilityId,
888
970
  commitSameUrlNavigatePayload,
889
971
  navigationPlanner,
890
972
  performHardNavigation: (url, historyMode) => browserNavigationController.performHardNavigation(url, historyMode),
@@ -919,6 +1001,7 @@ function registerServerActionCallback() {
919
1001
  }
920
1002
  async function main() {
921
1003
  if (!claimInitialAppRouterBootstrap()) return;
1004
+ loadNavigationRuntimeRouteManifest();
922
1005
  if (hasServerActions) registerServerActionCallback();
923
1006
  installAppNavigationFailureListeners();
924
1007
  if (HAS_CLIENT_REWRITES) await preloadHybridClientRouteOwner();
@@ -939,27 +1022,28 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
939
1022
  const cacheGeneration = clientNavigationCacheGeneration;
940
1023
  const [reactBranch, cacheBranch] = rscStream.tee();
941
1024
  const initialNavigationSnapshot = withLateRenderedSearch(createClientNavigationRenderSnapshot(window.location.href, latestClientParams, getHydrationRenderedPathAndSearch()), initialRscBootstrap);
1025
+ const initialPathAndSearch = createSnapshotPathAndSearch(initialNavigationSnapshot);
942
1026
  const root = decodeAppElementsPromise(createFromReadableStream(reactBranch)).then((elements) => {
1027
+ if (IS_STATIC_EXPORT) clientDeploymentVersion = AppElementsWire.readMetadata(elements).artifactCompatibility.deploymentVersion;
943
1028
  bindAppElementsRenderedSearch(elements, initialNavigationSnapshot);
1029
+ initialPrefetchRouterState = {
1030
+ pathAndSearch: initialPathAndSearch,
1031
+ routeId: AppElementsWire.readMetadata(elements).routeId
1032
+ };
944
1033
  return elements;
945
1034
  });
946
1035
  const initialParams = initialNavigationSnapshot.params;
947
- const initialPathAndSearch = createSnapshotPathAndSearch(initialNavigationSnapshot);
948
1036
  const initialCacheBuffer = new Response(cacheBranch).arrayBuffer();
949
1037
  Promise.all([root, initialCacheBuffer]).then(async ([elements, buffer]) => {
950
1038
  if (cacheGeneration !== clientNavigationCacheGeneration) return;
951
1039
  const metadata = AppElementsWire.readMetadata(elements);
952
- initialPrefetchRouterState = {
953
- pathAndSearch: initialPathAndSearch,
954
- routeId: metadata.routeId
955
- };
956
1040
  if (!isCompleteAppPayloadMetadata(metadata)) return;
957
1041
  const mountedSlotsHeader = getMountedSlotIdsHeader(elements);
958
1042
  const headers = createRscRequestHeaders({ mountedSlotsHeader });
959
1043
  const rscUrl = await createRscRequestUrl(initialPathAndSearch, headers);
960
1044
  if (cacheGeneration !== clientNavigationCacheGeneration) return;
961
1045
  const snapshot = {
962
- compatibilityIdHeader: CLIENT_RSC_COMPATIBILITY_ID,
1046
+ compatibilityIdHeader: clientRscCompatibilityId,
963
1047
  buffer,
964
1048
  contentType: VINEXT_RSC_CONTENT_TYPE,
965
1049
  ...initialRscBootstrap?.dynamicStaleTimeSeconds !== void 0 ? { dynamicStaleTimeSeconds: initialRscBootstrap.dynamicStaleTimeSeconds } : {},
@@ -979,7 +1063,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
979
1063
  });
980
1064
  }).catch(() => {});
981
1065
  historyController.writeBootstrapHistoryMetadata();
982
- const reportUncaughtError = createOnUncaughtError();
1066
+ const reportUncaughtError = createOnUncaughtError({ coerceToError: import.meta.env.DEV });
983
1067
  const onUncaughtError = (...args) => {
984
1068
  hydrationCachePublication.fail();
985
1069
  reportUncaughtError(...args);
@@ -1029,19 +1113,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1029
1113
  clearNavigationCaches: clearClientNavigationCaches,
1030
1114
  commitHashNavigation: (href, historyUpdateMode, scroll) => historyController.commitHashOnlyNavigation(href, historyUpdateMode, scroll),
1031
1115
  getPrefetchRouterState: () => {
1032
- if (!browserNavigationController.hasBrowserRouterState()) {
1033
- if (initialPrefetchRouterState) return initialPrefetchRouterState;
1034
- const routeManifest = getNavigationRuntime()?.bootstrap.routeManifest ?? null;
1035
- const match = routeManifest ? matchOptimisticRouteManifestRoute({
1036
- basePath: __basePath,
1037
- href: window.location.href,
1038
- routeManifest
1039
- }) : null;
1040
- return match ? {
1041
- pathAndSearch: createBasePathStrippedPathAndSearch(new URL(window.location.href), __basePath),
1042
- routeId: match.route.id
1043
- } : null;
1044
- }
1116
+ if (!browserNavigationController.hasBrowserRouterState()) return initialPrefetchRouterState;
1045
1117
  const state = browserNavigationController.getBrowserRouterState();
1046
1118
  return {
1047
1119
  pathAndSearch: createSnapshotPathAndSearch(state.navigationSnapshot),
@@ -1060,11 +1132,21 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1060
1132
  let currentPrevNextUrl = previousNextUrlOverride;
1061
1133
  let redirectCount = redirectDepth;
1062
1134
  let detachedNavigationCommits = false;
1135
+ let optimisticShellElements = null;
1136
+ const keepOptimisticShellMetadata = (payload) => {
1137
+ const shellElements = optimisticShellElements;
1138
+ if (shellElements === null) return payload;
1139
+ return payload instanceof Promise ? payload.then((elements) => keepOptimisticStreamingMetadata(elements, shellElements, String(navId))) : keepOptimisticStreamingMetadata(payload, shellElements, String(navId));
1140
+ };
1063
1141
  const activeTraversalIntent = navigationKind === "traverse" ? traversalIntent ?? historyController.resolveTraversalIntent(window.history.state) : null;
1142
+ let startedHardNavigation = false;
1064
1143
  const performHardNavigationForScrollIntent = (targetHref, mode) => {
1065
1144
  consumeAppRouterScrollIntent(scrollIntent ?? null);
1066
- const didNavigate = browserNavigationController.performHardNavigation(targetHref, mode);
1067
- if (!didNavigate) clearAppNavigationFailureTarget(targetHref);
1145
+ const didNavigate = browserNavigationController.performHardNavigation(targetHref, mode ?? (currentHistoryMode === "push" ? "assign" : "replace"));
1146
+ if (didNavigate) {
1147
+ startedHardNavigation = true;
1148
+ browserNavigationController.abandonPendingBrowserRouterState(pendingRouterState);
1149
+ } else clearAppNavigationFailureTarget(targetHref);
1068
1150
  return didNavigate;
1069
1151
  };
1070
1152
  let restoredBfcacheIds = navigationKind === "traverse" ? historyController.readCurrentBfcacheVersionHistoryIds(activeTraversalIntent?.historyState ?? window.history.state) : null;
@@ -1078,6 +1160,15 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1078
1160
  if (!browserNavigationController.isCurrentNavigation(navId)) return;
1079
1161
  if (shouldUsePendingRouterState) pendingRouterState = beginPendingBrowserRouterState();
1080
1162
  }
1163
+ const routeManifestLoad = loadNavigationRuntimeRouteManifest();
1164
+ if (routeManifestLoad !== null) {
1165
+ const routeManifestLoaded = await routeManifestLoad;
1166
+ if (!browserNavigationController.isCurrentNavigation(navId)) return;
1167
+ if (!routeManifestLoaded) {
1168
+ performHardNavigationForScrollIntent(currentHref);
1169
+ return;
1170
+ }
1171
+ }
1081
1172
  const navigationInitiationState = getBrowserRouterState();
1082
1173
  const mountedSlotsHeader = getMountedSlotIdsHeader(navigationInitiationState.elements);
1083
1174
  while (true) {
@@ -1172,7 +1263,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1172
1263
  });
1173
1264
  if (reuseDecision.kind === "reuseVisitedResponse" && cachedRoute) {
1174
1265
  const cachedFetchDecision = navigationPlanner.classifyRscFetchResult({
1175
- clientCompatibilityId: CLIENT_RSC_COMPATIBILITY_ID,
1266
+ clientCompatibilityId: clientRscCompatibilityId,
1176
1267
  compatibilityIdHeader: cachedRoute.response.compatibilityIdHeader ?? null,
1177
1268
  currentHref,
1178
1269
  effectiveHistoryUpdateMode: currentHistoryMode ?? "replace",
@@ -1204,7 +1295,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1204
1295
  const cachedNavigationSnapshot = createClientNavigationRenderSnapshot(currentHref, cachedParams, cachedRoute.response.renderedPathAndSearch);
1205
1296
  const cachedPayload = cachedRoute.elements ? Promise.resolve(cachedRoute.elements) : decodeAppElementsPromise(createFromFetch(Promise.resolve(restoreRscResponse(cachedRoute.response))));
1206
1297
  if (!browserNavigationController.isCurrentNavigation(navId)) return;
1207
- if (await renderNavigationPayload({
1298
+ const cachedRenderOutcome = await renderNavigationPayload({
1208
1299
  actionType: toActionType(navigationKind),
1209
1300
  historyUpdateMode: currentHistoryMode,
1210
1301
  navigationCommitKind: detachedNavigationCommits ? "authoritative" : void 0,
@@ -1213,7 +1304,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1213
1304
  navId,
1214
1305
  operationLane: toOperationLane(navigationKind),
1215
1306
  params: cachedParams,
1216
- payload: cachedPayload,
1307
+ payload: keepOptimisticShellMetadata(cachedPayload),
1217
1308
  payloadOrigin: cachedRoute.elements ? COMMITTED_CACHE_APP_NAVIGATION_PAYLOAD_ORIGIN : VISITED_CACHE_APP_NAVIGATION_PAYLOAD_ORIGIN,
1218
1309
  pendingRouterState: detachedNavigationCommits ? null : pendingRouterState,
1219
1310
  previousNextUrl: requestPreviousNextUrl,
@@ -1223,7 +1314,12 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1223
1314
  targetHref: currentHref,
1224
1315
  traversalIntent: activeTraversalIntent,
1225
1316
  visibleCommitMode
1226
- }) === "no-commit") {
1317
+ });
1318
+ if (cachedRenderOutcome === "hard-navigate") {
1319
+ startedHardNavigation = true;
1320
+ browserNavigationController.abandonPendingBrowserRouterState(pendingRouterState);
1321
+ }
1322
+ if (cachedRenderOutcome === "no-commit") {
1227
1323
  if (!browserNavigationController.isCurrentNavigation(navId)) return;
1228
1324
  deleteVisitedResponse(rscUrl, requestInterceptionContext);
1229
1325
  continue;
@@ -1296,6 +1392,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1296
1392
  template: optimisticPayload.template
1297
1393
  })) {
1298
1394
  detachedNavigationCommits = true;
1395
+ optimisticShellElements = optimisticPayload.elements;
1299
1396
  const optimisticNavigationSnapshot = createClientNavigationRenderSnapshot(currentHref, optimisticPayload.params);
1300
1397
  renderNavigationPayload({
1301
1398
  actionType: toActionType(navigationKind),
@@ -1343,7 +1440,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1343
1440
  const streamedRedirectType = streamedRedirectTypeHeader === "push" || streamedRedirectTypeHeader === "replace" ? streamedRedirectTypeHeader : null;
1344
1441
  if (blockDangerousStreamedRscRedirect(navResponse, streamedRedirectTarget)) return;
1345
1442
  const liveFetchDecision = navigationPlanner.classifyRscFetchResult({
1346
- clientCompatibilityId: CLIENT_RSC_COMPATIBILITY_ID,
1443
+ clientCompatibilityId: clientRscCompatibilityId,
1347
1444
  compatibilityIdHeader: navResponse.headers.get(VINEXT_RSC_COMPATIBILITY_ID_HEADER),
1348
1445
  currentHref,
1349
1446
  effectiveHistoryUpdateMode: currentHistoryMode ?? "replace",
@@ -1422,7 +1519,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1422
1519
  }
1423
1520
  if (!browserNavigationController.isCurrentNavigation(navId)) return;
1424
1521
  let committedState = null;
1425
- if (await renderNavigationPayload({
1522
+ const renderOutcome = await renderNavigationPayload({
1426
1523
  actionType: toActionType(navigationKind),
1427
1524
  historyUpdateMode: currentHistoryMode,
1428
1525
  navigationCommitKind: detachedNavigationCommits ? "authoritative" : void 0,
@@ -1442,7 +1539,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1442
1539
  },
1443
1540
  operationLane: toOperationLane(navigationKind),
1444
1541
  params: navParams,
1445
- payload: rscPayload,
1542
+ payload: keepOptimisticShellMetadata(rscPayload),
1446
1543
  payloadOrigin: FRESH_APP_NAVIGATION_PAYLOAD_ORIGIN,
1447
1544
  pendingRouterState: detachedNavigationCommits ? null : pendingRouterState,
1448
1545
  previousNextUrl: requestPreviousNextUrl,
@@ -1451,8 +1548,13 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1451
1548
  scrollIntent,
1452
1549
  targetHref: currentHref,
1453
1550
  traversalIntent: activeTraversalIntent,
1454
- visibleCommitMode: prefetchedElements ? "synchronous" : visibleCommitMode
1455
- }) !== "committed") return;
1551
+ visibleCommitMode
1552
+ });
1553
+ if (renderOutcome === "hard-navigate") {
1554
+ startedHardNavigation = true;
1555
+ browserNavigationController.abandonPendingBrowserRouterState(pendingRouterState);
1556
+ }
1557
+ if (renderOutcome !== "committed") return;
1456
1558
  if (hasSupplementalRefresh) {
1457
1559
  clearVisitedResponseCache();
1458
1560
  return;
@@ -1501,9 +1603,13 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1501
1603
  navigationAbortHandle.release();
1502
1604
  browserNavigationController.finalizeNavigation(navId, pendingRouterState);
1503
1605
  discardedServerActionRefreshScheduler.markNavigationSettled();
1606
+ if (startedHardNavigation) await waitForMpaNavigationRestore();
1504
1607
  }
1505
1608
  },
1506
- preparePrefetchResponse: (response) => decodeAppElementsPromise(createFromFetch(Promise.resolve(response))),
1609
+ preparePrefetchResponse: (response) => {
1610
+ if (!isRscResponseCompatible(response.headers.get("X-Vinext-RSC-Compatibility-Id"))) return Promise.reject(/* @__PURE__ */ new Error("[vinext] Prefetched another deployment's payload"));
1611
+ return decodeAppElementsPromise(createFromFetch(Promise.resolve(response)));
1612
+ },
1507
1613
  claimCurrentHistoryTreeSnapshot: (historyUpdateMode, previousHistoryState) => historyController.claimCurrentHistoryTreeSnapshot(historyUpdateMode, previousHistoryState),
1508
1614
  commitAppOwnedHistoryStateWrite: (historyUpdateMode, previousHistoryState) => historyController.commitAppOwnedHistoryStateWrite(historyUpdateMode, previousHistoryState),
1509
1615
  discardPendingNavigation: () => {
@@ -1609,7 +1715,12 @@ if (typeof document !== "undefined") {
1609
1715
  });
1610
1716
  window.addEventListener("pageshow", (event) => {
1611
1717
  isPageUnloading = false;
1612
- if (event.persisted) mpaNavigationScheduler.reset();
1718
+ if (event.persisted) {
1719
+ mpaNavigationScheduler.reset();
1720
+ mpaNavigationTree?.restore();
1721
+ mpaNavigationRestore?.resolve();
1722
+ mpaNavigationRestore = null;
1723
+ }
1613
1724
  });
1614
1725
  main();
1615
1726
  }
@@ -4,8 +4,11 @@ type VinextHydrateRootErrorInfo = {
4
4
  errorBoundary?: unknown;
5
5
  };
6
6
  type HydrateRootErrorHandler = (error: unknown, errorInfo: VinextHydrateRootErrorInfo) => void;
7
- export declare function createOnUncaughtError(): HydrateRootErrorHandler;
7
+ export declare function createOnUncaughtError(options?: {
8
+ coerceToError?: boolean;
9
+ }): HydrateRootErrorHandler;
8
10
  export declare function createProdOnCaughtError(onImplicitRootError: HydrateRootErrorHandler): HydrateRootErrorHandler;
9
11
  export declare function createDevOnCaughtError(onCaughtError: HydrateRootErrorHandler, onImplicitRootError: HydrateRootErrorHandler): HydrateRootErrorHandler;
10
12
  export declare function createProdOnRecoverableError(onReportedError: () => void): (error: unknown) => void;
11
- //#endregion
13
+ //#endregion
14
+ export {};
@@ -18,9 +18,14 @@ function reportGlobalError(error) {
18
18
  }
19
19
  console.error(error);
20
20
  }
21
- function createOnUncaughtError() {
21
+ function coerceError(value) {
22
+ if (isNavigationSignalError(value)) return value;
23
+ if (typeof value === "object" && value !== null && "name" in value && "message" in value) return value;
24
+ return new Error(String(value));
25
+ }
26
+ function createOnUncaughtError(options = {}) {
22
27
  return (error) => {
23
- reportGlobalError(error);
28
+ reportGlobalError(options.coerceToError ? coerceError(error) : error);
24
29
  };
25
30
  }
26
31
  function createProdOnCaughtError(onImplicitRootError) {
@@ -121,4 +121,5 @@ export declare class AppBrowserHistoryController {
121
121
  */
122
122
  restoreHistorySnapshot(options: RestoreHistorySnapshotOptions): boolean;
123
123
  }
124
- //#endregion
124
+ //#endregion
125
+ export {};
@@ -38,4 +38,5 @@ export declare function resolveFetchedHydrationLocation(renderedPathAndSearch: s
38
38
  pathname: string;
39
39
  search: string;
40
40
  };
41
- //#endregion
41
+ //#endregion
42
+ export {};
@@ -1,10 +1,10 @@
1
- import { RouteManifest } from "../routing/app-route-graph.js";
1
+ import { BrowserRouteManifest } from "../routing/browser-route-manifest.js";
2
2
  //#region src/server/app-browser-interception-context.d.ts
3
3
  type ResolveManifestNavigationInterceptionContextOptions = {
4
4
  basePath: string;
5
5
  currentMatchedPathname?: string | null;
6
6
  currentPathname: string;
7
- routeManifest: RouteManifest | null;
7
+ routeManifest: BrowserRouteManifest | null;
8
8
  targetPathname: string;
9
9
  };
10
10
  /**
@@ -20,4 +20,5 @@ type ResolveManifestNavigationInterceptionContextOptions = {
20
20
  */
21
21
  export declare function resolveManifestNavigationInterceptionContext(options: ResolveManifestNavigationInterceptionContextOptions): string | null;
22
22
  export declare function resolveMiddlewareRewriteNavigationInterceptionContext(options: ResolveManifestNavigationInterceptionContextOptions): string | null;
23
- //#endregion
23
+ //#endregion
24
+ export {};
@@ -1,6 +1,7 @@
1
1
  import { HistoryUpdateMode } from "./app-browser-navigation-controller.js";
2
2
  //#region src/server/app-browser-mpa-navigation.d.ts
3
3
  export type AppBrowserMpaNavigationWindow = {
4
+ document?: Pick<Document, "visibilityState">;
4
5
  location: Pick<Location, "assign" | "replace">;
5
6
  requestAnimationFrame?: (callback: FrameRequestCallback) => unknown;
6
7
  setTimeout(callback: () => void, timeout: number): unknown;
@@ -14,21 +14,22 @@ var AppBrowserMpaNavigationScheduler = class {
14
14
  this.#pendingNavigation = null;
15
15
  }
16
16
  navigate(targetWindow, href, historyUpdateMode) {
17
- const pendingNavigation = this.#pendingNavigation;
18
- if (pendingNavigation?.href === href && pendingNavigation.historyUpdateMode === historyUpdateMode) return;
17
+ if (this.#pendingNavigation?.href === href) return;
19
18
  const token = this.#nextToken + 1;
20
19
  this.#nextToken = token;
21
20
  this.#pendingNavigation = {
22
21
  href,
23
- historyUpdateMode,
24
22
  token
25
23
  };
26
24
  const navigate = () => {
27
- const currentNavigation = this.#pendingNavigation;
28
- if (currentNavigation?.href !== href || currentNavigation.historyUpdateMode !== historyUpdateMode || currentNavigation.token !== token) return;
25
+ if (this.#pendingNavigation?.token !== token) return;
29
26
  if (historyUpdateMode === "replace") targetWindow.location.replace(href);
30
27
  else targetWindow.location.assign(href);
31
28
  };
29
+ if (targetWindow.document?.visibilityState === "hidden") {
30
+ navigate();
31
+ return;
32
+ }
32
33
  if (typeof targetWindow.requestAnimationFrame === "function") {
33
34
  targetWindow.requestAnimationFrame(() => {
34
35
  targetWindow.setTimeout(navigate, 0);