vinext 1.3.0 → 1.4.0

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 (529) hide show
  1. package/README.md +5 -2
  2. package/THIRD_PARTY_LICENSES.md +47 -0
  3. package/dist/_virtual/_rolldown/runtime.js +4 -3
  4. package/dist/build/action-owner-manifest.d.ts +3 -2
  5. package/dist/build/action-owner-manifest.js +18 -2
  6. package/dist/build/app-page-static-eligibility.d.ts +17 -1
  7. package/dist/build/app-page-static-eligibility.js +80 -13
  8. package/dist/build/clean-output.d.ts +2 -1
  9. package/dist/build/client-build-config.d.ts +13 -3
  10. package/dist/build/client-build-config.js +46 -9
  11. package/dist/build/client-reference-async.d.ts +48 -0
  12. package/dist/build/client-reference-async.js +123 -0
  13. package/dist/build/client-reference-chunks.d.ts +32 -0
  14. package/dist/build/client-reference-chunks.js +111 -0
  15. package/dist/build/client-reference-groups.d.ts +9 -1
  16. package/dist/build/client-reference-groups.js +40 -2
  17. package/dist/build/css-url-assets.d.ts +2 -1
  18. package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
  19. package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
  20. package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
  21. package/dist/build/google-fonts/font-metadata.d.ts +2 -1
  22. package/dist/build/google-fonts/validate.d.ts +2 -1
  23. package/dist/build/inline-css.d.ts +2 -1
  24. package/dist/build/module-dependency-cache.d.ts +2 -1
  25. package/dist/build/next-client-runtime-manifests.d.ts +2 -1
  26. package/dist/build/precompress.d.ts +2 -1
  27. package/dist/build/precompress.js +1 -1
  28. package/dist/build/prerender-paths.d.ts +2 -1
  29. package/dist/build/prerender-phase.d.ts +2 -1
  30. package/dist/build/prerender-server-pool.js +1 -1
  31. package/dist/build/prerender.d.ts +3 -2
  32. package/dist/build/prerender.js +6 -5
  33. package/dist/build/report.d.ts +2 -15
  34. package/dist/build/report.js +1 -51
  35. package/dist/build/run-prerender.d.ts +2 -1
  36. package/dist/build/server-actions-encryption-key.d.ts +2 -1
  37. package/dist/build/ssr-manifest.js +25 -2
  38. package/dist/build/standalone.d.ts +2 -1
  39. package/dist/cache/cache-adapters-virtual.d.ts +2 -1
  40. package/dist/cache.js +1 -2
  41. package/dist/check.d.ts +2 -1
  42. package/dist/check.js +5 -1
  43. package/dist/cli-args.d.ts +2 -1
  44. package/dist/cli.js +5 -0
  45. package/dist/client/client-redirect-matcher.js +2 -1
  46. package/dist/client/client-redirects.d.ts +4 -3
  47. package/dist/client/client-redirects.js +2 -1
  48. package/dist/client/client-rewrites.d.ts +2 -1
  49. package/dist/client/dev-error-overlay-store.d.ts +2 -1
  50. package/dist/client/dev-error-overlay.js +1 -1
  51. package/dist/client/index.js +1 -2
  52. package/dist/client/instrumentation-client-state.js +5 -5
  53. package/dist/client/navigation-runtime.d.ts +16 -2
  54. package/dist/client/navigation-runtime.js +2 -2
  55. package/dist/client/pages-router-link-navigation.d.ts +2 -1
  56. package/dist/client/vinext-next-data.d.ts +25 -1
  57. package/dist/client/window-next.d.ts +2 -1
  58. package/dist/config/config-matchers.d.ts +12 -1
  59. package/dist/config/config-matchers.js +111 -16
  60. package/dist/config/dotenv.d.ts +2 -1
  61. package/dist/config/next-config.d.ts +32 -1
  62. package/dist/config/next-config.js +93 -5
  63. package/dist/config/tsconfig-paths.d.ts +2 -1
  64. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-codec.js +327 -0
  65. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-data.js +123 -0
  66. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/index.js +29 -0
  67. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/internal.js +134 -0
  68. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-codec.js +50 -0
  69. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data-generated.js +455 -0
  70. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data.js +147 -0
  71. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/big5-added.json.js +169 -0
  72. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp936.json.js +2584 -0
  73. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp949.json.js +2220 -0
  74. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp950.json.js +227 -0
  75. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/eucjp.json.js +425 -0
  76. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gb18030-ranges.json.js +427 -0
  77. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gbk-added.json.js +229 -0
  78. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/shiftjis.json.js +292 -0
  79. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf16.js +106 -0
  80. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf7.js +182 -0
  81. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/bom-handling.js +42 -0
  82. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/extend-node.js +147 -0
  83. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/index.js +94 -0
  84. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/streams.js +95 -0
  85. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
  86. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
  87. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
  88. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
  89. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
  90. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
  91. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
  92. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
  93. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
  94. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
  95. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
  96. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
  97. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
  98. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
  99. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
  100. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
  101. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
  102. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
  103. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
  104. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
  105. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
  106. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
  107. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
  108. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
  109. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
  110. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
  111. package/dist/deps/.pnpm/safer-buffer@2.1.2/deps/safer-buffer/safer.js +45 -0
  112. package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
  113. package/dist/entries/app-browser-entry.d.ts +20 -5
  114. package/dist/entries/app-browser-entry.js +79 -6
  115. package/dist/entries/app-rsc-entry.d.ts +2 -1
  116. package/dist/entries/app-rsc-entry.js +59 -60
  117. package/dist/entries/app-rsc-manifest.d.ts +2 -1
  118. package/dist/entries/app-rsc-manifest.js +56 -4
  119. package/dist/entries/app-ssr-entry.js +1 -0
  120. package/dist/entries/pages-entry-helpers.js +1 -2
  121. package/dist/entries/pages-server-entry.d.ts +2 -1
  122. package/dist/entries/pages-server-entry.js +34 -9
  123. package/dist/entries/runtime-entry-module.d.ts +1 -0
  124. package/dist/entries/runtime-entry-module.js +4 -1
  125. package/dist/image/image-adapters-virtual.d.ts +2 -1
  126. package/dist/index.js +184 -103
  127. package/dist/init-cloudflare.d.ts +1 -3
  128. package/dist/init-cloudflare.js +10 -48
  129. package/dist/init-platform.d.ts +2 -0
  130. package/dist/init-platform.js +4 -0
  131. package/dist/plugins/client-compile-hints.d.ts +30 -0
  132. package/dist/plugins/client-compile-hints.js +88 -0
  133. package/dist/plugins/client-reference-dedup.d.ts +2 -1
  134. package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
  135. package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
  136. package/dist/plugins/dynamic-preload-metadata.js +1 -1
  137. package/dist/plugins/environment.d.ts +2 -1
  138. package/dist/plugins/extensionless-dynamic-import.js +6 -2
  139. package/dist/plugins/fonts.js +9 -12
  140. package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
  141. package/dist/plugins/import-meta-url.d.ts +2 -1
  142. package/dist/plugins/next-intl-catalog.d.ts +12 -0
  143. package/dist/plugins/next-intl-catalog.js +85 -0
  144. package/dist/plugins/og-assets.d.ts +2 -1
  145. package/dist/plugins/og-assets.js +2 -3
  146. package/dist/plugins/optimize-imports.d.ts +2 -1
  147. package/dist/plugins/pages-node-externals.d.ts +3 -1
  148. package/dist/plugins/pages-node-externals.js +1 -1
  149. package/dist/plugins/remove-console.d.ts +2 -1
  150. package/dist/plugins/require-condition-resolution.d.ts +2 -1
  151. package/dist/plugins/rsc-client-reference-loaders.d.ts +8 -0
  152. package/dist/plugins/rsc-client-reference-loaders.js +170 -68
  153. package/dist/plugins/rsc-client-shim-excludes.js +2 -0
  154. package/dist/plugins/sass.d.ts +2 -1
  155. package/dist/plugins/strip-server-exports.d.ts +2 -1
  156. package/dist/plugins/styled-jsx.d.ts +2 -1
  157. package/dist/plugins/transform-result.d.ts +2 -1
  158. package/dist/plugins/typeof-window.d.ts +2 -1
  159. package/dist/plugins/use-cache-callable.d.ts +1 -1
  160. package/dist/plugins/use-cache-callable.js +136 -94
  161. package/dist/plugins/worker-image-imports.js +1 -1
  162. package/dist/plugins/worker-use-server.d.ts +2 -1
  163. package/dist/routing/app-route-graph.d.ts +46 -0
  164. package/dist/routing/app-route-graph.js +131 -51
  165. package/dist/routing/browser-route-manifest.d.ts +2 -1
  166. package/dist/routing/optimistic-route-trie.d.ts +2 -1
  167. package/dist/routing/route-matching.d.ts +2 -1
  168. package/dist/routing/route-pattern.d.ts +2 -1
  169. package/dist/server/accept-encoding.d.ts +2 -1
  170. package/dist/server/api-handler.js +19 -4
  171. package/dist/server/app-action-forwarding.d.ts +2 -1
  172. package/dist/server/app-bfcache-identity.d.ts +2 -1
  173. package/dist/server/app-bfcache-identity.js +1 -1
  174. package/dist/server/app-browser-action-result.d.ts +2 -1
  175. package/dist/server/app-browser-entry.js +106 -66
  176. package/dist/server/app-browser-error.d.ts +2 -1
  177. package/dist/server/app-browser-history-controller.d.ts +7 -5
  178. package/dist/server/app-browser-history-controller.js +93 -15
  179. package/dist/server/app-browser-hydration.d.ts +2 -1
  180. package/dist/server/app-browser-interception-context.d.ts +2 -1
  181. package/dist/server/app-browser-navigation-controller.d.ts +2 -2
  182. package/dist/server/app-browser-navigation-controller.js +16 -12
  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-rsc-redirect.js +4 -4
  186. package/dist/server/app-browser-server-action-client.d.ts +4 -1
  187. package/dist/server/app-browser-server-action-client.js +4 -3
  188. package/dist/server/app-browser-state.d.ts +2 -4
  189. package/dist/server/app-browser-state.js +9 -4
  190. package/dist/server/app-browser-stream.d.ts +2 -1
  191. package/dist/server/app-browser-supplemental-refresh.js +16 -1
  192. package/dist/server/app-browser-visible-commit.d.ts +3 -2
  193. package/dist/server/app-browser-visible-commit.js +2 -12
  194. package/dist/server/app-client-reference-manifest.d.ts +31 -0
  195. package/dist/server/app-client-reference-manifest.js +46 -0
  196. package/dist/server/app-client-reference-preloader.d.ts +25 -5
  197. package/dist/server/app-client-reference-preloader.js +22 -7
  198. package/dist/server/app-elements-wire.d.ts +8 -39
  199. package/dist/server/app-elements-wire.js +4 -41
  200. package/dist/server/app-elements.d.ts +4 -2
  201. package/dist/server/app-elements.js +4 -2
  202. package/dist/server/app-fallback-renderer.d.ts +9 -2
  203. package/dist/server/app-fallback-renderer.js +4 -1
  204. package/dist/server/app-history-state.d.ts +4 -3
  205. package/dist/server/app-history-state.js +5 -2
  206. package/dist/server/app-inline-css-client.d.ts +2 -1
  207. package/dist/server/app-metadata-tracing.d.ts +2 -1
  208. package/dist/server/app-mounted-layouts.d.ts +21 -0
  209. package/dist/server/app-mounted-layouts.js +67 -0
  210. package/dist/server/app-optimistic-routing.d.ts +37 -2
  211. package/dist/server/app-optimistic-routing.js +75 -2
  212. package/dist/server/app-page-boundary-render.d.ts +20 -2
  213. package/dist/server/app-page-boundary-render.js +224 -40
  214. package/dist/server/app-page-boundary.d.ts +34 -5
  215. package/dist/server/app-page-boundary.js +41 -8
  216. package/dist/server/app-page-cache-finalizer.d.ts +14 -2
  217. package/dist/server/app-page-cache-finalizer.js +71 -30
  218. package/dist/server/app-page-cache-render.d.ts +10 -2
  219. package/dist/server/app-page-cache-render.js +14 -2
  220. package/dist/server/app-page-cache.d.ts +13 -1
  221. package/dist/server/app-page-cache.js +33 -11
  222. package/dist/server/app-page-dispatch.d.ts +39 -11
  223. package/dist/server/app-page-dispatch.js +236 -177
  224. package/dist/server/app-page-element-builder.d.ts +19 -3
  225. package/dist/server/app-page-element-builder.js +193 -71
  226. package/dist/server/app-page-execution.d.ts +43 -51
  227. package/dist/server/app-page-execution.js +205 -92
  228. package/dist/server/app-page-head.d.ts +108 -3
  229. package/dist/server/app-page-head.js +337 -154
  230. package/dist/server/app-page-http-access-fallback-metadata.d.ts +49 -2
  231. package/dist/server/app-page-http-access-fallback-metadata.js +77 -2
  232. package/dist/server/app-page-layout-gate.d.ts +35 -0
  233. package/dist/server/app-page-layout-gate.js +50 -0
  234. package/dist/server/app-page-method.d.ts +2 -1
  235. package/dist/server/app-page-params.d.ts +0 -1
  236. package/dist/server/app-page-params.js +1 -14
  237. package/dist/server/app-page-probe.d.ts +5 -22
  238. package/dist/server/app-page-probe.js +4 -37
  239. package/dist/server/app-page-render-identity.d.ts +2 -1
  240. package/dist/server/app-page-render.d.ts +9 -13
  241. package/dist/server/app-page-render.js +108 -214
  242. package/dist/server/app-page-request.d.ts +15 -4
  243. package/dist/server/app-page-request.js +2 -2
  244. package/dist/server/app-page-response.js +3 -3
  245. package/dist/server/app-page-route-wiring.d.ts +65 -8
  246. package/dist/server/app-page-route-wiring.js +259 -103
  247. package/dist/server/app-page-rsc-render-status.d.ts +29 -2
  248. package/dist/server/app-page-rsc-render-status.js +121 -13
  249. package/dist/server/app-page-search-params-observation.d.ts +7 -2
  250. package/dist/server/app-page-search-params-observation.js +8 -1
  251. package/dist/server/app-page-segment-plan.d.ts +2 -1
  252. package/dist/server/app-page-stream.d.ts +33 -1
  253. package/dist/server/app-page-stream.js +25 -6
  254. package/dist/server/app-pages-bridge.d.ts +6 -1
  255. package/dist/server/app-pages-bridge.js +7 -3
  256. package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
  257. package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
  258. package/dist/server/app-prerender-endpoints.d.ts +2 -1
  259. package/dist/server/app-prerender-static-params.d.ts +2 -1
  260. package/dist/server/app-render-dependency.d.ts +21 -4
  261. package/dist/server/app-render-dependency.js +100 -33
  262. package/dist/server/app-request-stage-dispatch.js +1 -1
  263. package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
  264. package/dist/server/app-response-stage-entry.d.ts +2 -1
  265. package/dist/server/app-route-handler-cache.d.ts +2 -1
  266. package/dist/server/app-route-handler-cache.js +2 -2
  267. package/dist/server/app-route-handler-dispatch.d.ts +2 -1
  268. package/dist/server/app-route-handler-dispatch.js +15 -10
  269. package/dist/server/app-route-handler-execution.d.ts +2 -1
  270. package/dist/server/app-route-handler-execution.js +8 -3
  271. package/dist/server/app-route-handler-policy.d.ts +1 -1
  272. package/dist/server/app-route-handler-policy.js +3 -3
  273. package/dist/server/app-route-handler-response.d.ts +2 -1
  274. package/dist/server/app-route-handler-response.js +1 -1
  275. package/dist/server/app-route-handler-runtime.d.ts +2 -1
  276. package/dist/server/app-route-handler-runtime.js +17 -4
  277. package/dist/server/app-route-module-loader.d.ts +18 -1
  278. package/dist/server/app-route-module-loader.js +8 -0
  279. package/dist/server/app-route-tree-prefetch.d.ts +2 -1
  280. package/dist/server/app-rsc-cache-busting.d.ts +2 -2
  281. package/dist/server/app-rsc-cache-busting.js +4 -4
  282. package/dist/server/app-rsc-error-handler.d.ts +4 -2
  283. package/dist/server/app-rsc-error-handler.js +9 -1
  284. package/dist/server/app-rsc-errors.d.ts +10 -1
  285. package/dist/server/app-rsc-errors.js +8 -1
  286. package/dist/server/app-rsc-handler.d.ts +7 -6
  287. package/dist/server/app-rsc-handler.js +36 -34
  288. package/dist/server/app-rsc-request-normalization.d.ts +0 -4
  289. package/dist/server/app-rsc-request-normalization.js +1 -4
  290. package/dist/server/app-rsc-response-finalizer.d.ts +2 -1
  291. package/dist/server/app-rsc-response-finalizer.js +2 -2
  292. package/dist/server/app-rsc-response-stage.js +5 -3
  293. package/dist/server/app-rsc-route-matching.d.ts +38 -1
  294. package/dist/server/app-rsc-route-matching.js +24 -0
  295. package/dist/server/app-segment-config.d.ts +2 -1
  296. package/dist/server/app-segment-config.js +1 -14
  297. package/dist/server/app-server-action-execution.d.ts +5 -2
  298. package/dist/server/app-server-action-execution.js +10 -7
  299. package/dist/server/app-ssr-entry.d.ts +8 -0
  300. package/dist/server/app-ssr-entry.js +98 -50
  301. package/dist/server/app-ssr-error-meta.d.ts +2 -1
  302. package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
  303. package/dist/server/app-ssr-stream.d.ts +22 -10
  304. package/dist/server/app-ssr-stream.js +300 -68
  305. package/dist/server/app-static-generation.d.ts +2 -1
  306. package/dist/server/app-streamed-client-references.d.ts +39 -0
  307. package/dist/server/app-streamed-client-references.js +156 -0
  308. package/dist/server/app-visited-response-cache.d.ts +38 -2
  309. package/dist/server/app-visited-response-cache.js +46 -5
  310. package/dist/server/app-worker-stages.d.ts +27 -4
  311. package/dist/server/app-worker-stages.js +45 -6
  312. package/dist/server/artifact-compatibility.d.ts +2 -2
  313. package/dist/server/artifact-compatibility.js +1 -10
  314. package/dist/server/bfcache-identity.d.ts +2 -1
  315. package/dist/server/cache-headers.d.ts +2 -1
  316. package/dist/server/cache-proof.d.ts +1 -115
  317. package/dist/server/cache-proof.js +1 -544
  318. package/dist/server/cacheability-request.d.ts +2 -1
  319. package/dist/server/cacheability-request.js +13 -8
  320. package/dist/server/config-headers.d.ts +2 -1
  321. package/dist/server/csp.d.ts +2 -1
  322. package/dist/server/default-global-not-found-module.d.ts +2 -1
  323. package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
  324. package/dist/server/default-http-access-fallback-modules.js +31 -0
  325. package/dist/server/defer-until-stream-consumed.d.ts +34 -0
  326. package/dist/server/defer-until-stream-consumed.js +154 -21
  327. package/dist/server/dev-lockfile.d.ts +32 -2
  328. package/dist/server/dev-lockfile.js +46 -2
  329. package/dist/server/dev-module-runner.d.ts +2 -1
  330. package/dist/server/dev-server.js +14 -6
  331. package/dist/server/fetch-handler.js +1 -2
  332. package/dist/server/file-based-metadata.d.ts +2 -1
  333. package/dist/server/framework-tracer.d.ts +2 -1
  334. package/dist/server/headers.d.ts +6 -3
  335. package/dist/server/headers.js +9 -5
  336. package/dist/server/html.d.ts +1 -0
  337. package/dist/server/html.js +19 -1
  338. package/dist/server/http-conditional.d.ts +2 -1
  339. package/dist/server/http-error-responses.d.ts +2 -1
  340. package/dist/server/implicit-tags.d.ts +2 -1
  341. package/dist/server/isr-cache.d.ts +8 -2
  342. package/dist/server/isr-cache.js +26 -1
  343. package/dist/server/metadata-route-build-data.d.ts +2 -1
  344. package/dist/server/metadata-route-build-data.js +1 -1
  345. package/dist/server/metadata-route-response.d.ts +2 -1
  346. package/dist/server/metadata-route-response.js +32 -15
  347. package/dist/server/metadata-routes.d.ts +2 -1
  348. package/dist/server/middleware-runtime.d.ts +2 -1
  349. package/dist/server/multi-stage.d.ts +52 -11
  350. package/dist/server/multi-stage.js +13 -1
  351. package/dist/server/navigation-planner.js +1 -1
  352. package/dist/server/navigation-trace.d.ts +2 -1
  353. package/dist/server/next-error-digest.d.ts +2 -1
  354. package/dist/server/nitro-public-files-plugin.d.ts +2 -1
  355. package/dist/server/nitro-public-files.d.ts +2 -1
  356. package/dist/server/opentelemetry-api.d.ts +2 -1
  357. package/dist/server/operation-token.d.ts +2 -1
  358. package/dist/server/pages-api-route.d.ts +2 -1
  359. package/dist/server/pages-api-route.js +28 -19
  360. package/dist/server/pages-asset-tags.d.ts +2 -1
  361. package/dist/server/pages-body-parser-config.d.ts +2 -1
  362. package/dist/server/pages-client-assets.d.ts +4 -0
  363. package/dist/server/pages-data-route.d.ts +2 -1
  364. package/dist/server/pages-document-asset-props.d.ts +2 -1
  365. package/dist/server/pages-document-initial-props.d.ts +2 -1
  366. package/dist/server/pages-execution-tracing.d.ts +2 -1
  367. package/dist/server/pages-execution-tracing.js +1 -1
  368. package/dist/server/pages-get-initial-props.d.ts +2 -1
  369. package/dist/server/pages-media-type.d.ts +21 -1
  370. package/dist/server/pages-media-type.js +69 -5
  371. package/dist/server/pages-node-compat.js +52 -27
  372. package/dist/server/pages-page-data.d.ts +7 -1
  373. package/dist/server/pages-page-data.js +35 -12
  374. package/dist/server/pages-page-handler.d.ts +3 -2
  375. package/dist/server/pages-page-handler.js +27 -27
  376. package/dist/server/pages-page-method.d.ts +2 -1
  377. package/dist/server/pages-page-response.d.ts +2 -1
  378. package/dist/server/pages-preview.d.ts +2 -1
  379. package/dist/server/pages-readiness.d.ts +2 -1
  380. package/dist/server/pages-request-pipeline.d.ts +10 -1
  381. package/dist/server/pages-request-pipeline.js +6 -7
  382. package/dist/server/pages-request-stage-entry.d.ts +2 -1
  383. package/dist/server/pages-request-stage-entry.js +14 -12
  384. package/dist/server/pages-response-stage-entry.d.ts +2 -1
  385. package/dist/server/pages-response-stage-entry.js +9 -3
  386. package/dist/server/pages-route-data-kind.d.ts +2 -1
  387. package/dist/server/prerender-cache-life-header.d.ts +2 -1
  388. package/dist/server/prerender-route-params.d.ts +2 -1
  389. package/dist/server/prod-server.js +14 -4
  390. package/dist/server/request-log.d.ts +2 -1
  391. package/dist/server/request-pipeline.d.ts +6 -0
  392. package/dist/server/request-pipeline.js +21 -1
  393. package/dist/server/request-tracing.d.ts +2 -1
  394. package/dist/server/request-tracing.js +1 -1
  395. package/dist/server/response-start-tracing.js +7 -29
  396. package/dist/server/rsc-render-stream.d.ts +4 -0
  397. package/dist/server/rsc-render-stream.js +25 -0
  398. package/dist/server/seed-cache.d.ts +2 -1
  399. package/dist/server/seed-cache.js +1 -1
  400. package/dist/server/shared-cache-identity.d.ts +23 -0
  401. package/dist/server/shared-cache-identity.js +36 -0
  402. package/dist/server/static-file-cache.d.ts +2 -1
  403. package/dist/server/static-file-cache.js +1 -0
  404. package/dist/server/worker-revalidation-context.d.ts +2 -1
  405. package/dist/server/worker-stages.d.ts +18 -4
  406. package/dist/server/worker-stages.js +23 -4
  407. package/dist/shims/app.d.ts +2 -1
  408. package/dist/shims/cache-callable-runtime.d.ts +2 -1
  409. package/dist/shims/cache-handler.d.ts +8 -3
  410. package/dist/shims/cache-handler.js +31 -11
  411. package/dist/shims/cache-request-state.d.ts +17 -20
  412. package/dist/shims/cache-request-state.js +16 -21
  413. package/dist/shims/cache-runtime.js +27 -11
  414. package/dist/shims/cache.d.ts +8 -7
  415. package/dist/shims/cache.js +17 -19
  416. package/dist/shims/cacheability-classification.d.ts +2 -0
  417. package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
  418. package/dist/shims/caught-not-found-boundaries.js +48 -0
  419. package/dist/shims/cdn-cache.d.ts +22 -5
  420. package/dist/shims/cdn-purge-routes.d.ts +2 -1
  421. package/dist/shims/client-locale.js +2 -1
  422. package/dist/shims/client-page-root.d.ts +2 -1
  423. package/dist/shims/client-page-root.js +2 -2
  424. package/dist/shims/config.d.ts +2 -1
  425. package/dist/shims/default-forbidden.d.ts +4 -0
  426. package/dist/shims/default-forbidden.js +18 -0
  427. package/dist/shims/default-not-found.d.ts +0 -5
  428. package/dist/shims/default-not-found.js +5 -41
  429. package/dist/shims/default-unauthorized.d.ts +4 -0
  430. package/dist/shims/default-unauthorized.js +18 -0
  431. package/dist/shims/dynamic.js +9 -6
  432. package/dist/shims/error-boundary.d.ts +39 -3
  433. package/dist/shims/error-boundary.js +33 -18
  434. package/dist/shims/fetch-cache-state.d.ts +5 -1
  435. package/dist/shims/fetch-cache-state.js +1 -3
  436. package/dist/shims/fetch-cache.d.ts +2 -1
  437. package/dist/shims/fetch-cache.js +34 -24
  438. package/dist/shims/font-google.js +1 -2
  439. package/dist/shims/font-utils.d.ts +3 -2
  440. package/dist/shims/font-utils.js +5 -3
  441. package/dist/shims/form.js +3 -3
  442. package/dist/shims/headers.d.ts +8 -23
  443. package/dist/shims/headers.js +17 -67
  444. package/dist/shims/http-access-error-fallback.d.ts +7 -0
  445. package/dist/shims/http-access-error-fallback.js +47 -0
  446. package/dist/shims/image.d.ts +1 -22
  447. package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
  448. package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
  449. package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
  450. package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
  451. package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
  452. package/dist/shims/internal/client-reference-loader.d.ts +7 -0
  453. package/dist/shims/internal/client-reference-loader.js +91 -0
  454. package/dist/shims/internal/cookie-serialize.d.ts +2 -1
  455. package/dist/shims/internal/cookies.js +1 -2
  456. package/dist/shims/internal/headers-state.d.ts +2 -0
  457. package/dist/shims/internal/headers-state.js +6 -1
  458. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +2 -1
  459. package/dist/shims/internal/interpolate-as.d.ts +2 -1
  460. package/dist/shims/internal/navigation-untracked.js +1 -1
  461. package/dist/shims/internal/pages-data-target.d.ts +2 -1
  462. package/dist/shims/internal/pages-data-url.d.ts +2 -1
  463. package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
  464. package/dist/shims/link.js +197 -52
  465. package/dist/shims/metadata.d.ts +52 -29
  466. package/dist/shims/metadata.js +142 -42
  467. package/dist/shims/navigation-errors.d.ts +2 -1
  468. package/dist/shims/navigation-server.js +1 -1
  469. package/dist/shims/navigation.d.ts +95 -8
  470. package/dist/shims/navigation.js +255 -47
  471. package/dist/shims/navigation.react-server.js +2 -2
  472. package/dist/shims/pages-router-runtime.d.ts +2 -1
  473. package/dist/shims/ppr-fallback-shell.d.ts +2 -1
  474. package/dist/shims/request-state-types.d.ts +2 -2
  475. package/dist/shims/router.js +14 -3
  476. package/dist/shims/slot.d.ts +12 -0
  477. package/dist/shims/slot.js +37 -9
  478. package/dist/shims/unified-request-context.d.ts +1 -1
  479. package/dist/shims/unified-request-context.js +5 -6
  480. package/dist/typegen.d.ts +2 -1
  481. package/dist/utils/cache-control-metadata.d.ts +5 -0
  482. package/dist/utils/cache-control-metadata.js +9 -1
  483. package/dist/utils/client-build-manifest.d.ts +4 -1
  484. package/dist/utils/client-build-manifest.js +9 -2
  485. package/dist/utils/client-entry-manifest.d.ts +13 -0
  486. package/dist/utils/client-entry-manifest.js +20 -1
  487. package/dist/utils/client-reference-chunks.d.ts +45 -0
  488. package/dist/utils/client-reference-chunks.js +30 -0
  489. package/dist/utils/client-runtime-metadata.d.ts +9 -1
  490. package/dist/utils/client-runtime-metadata.js +40 -9
  491. package/dist/utils/compare.d.ts +9 -0
  492. package/dist/utils/compare.js +15 -1
  493. package/dist/utils/lazy-chunks.d.ts +14 -0
  494. package/dist/utils/lazy-chunks.js +27 -1
  495. package/dist/utils/middleware-request-headers.d.ts +2 -1
  496. package/dist/utils/project.d.ts +4 -3
  497. package/dist/utils/project.js +12 -17
  498. package/dist/utils/query.d.ts +2 -1
  499. package/dist/utils/regex.d.ts +5 -0
  500. package/dist/utils/regex.js +11 -1
  501. package/dist/utils/text-stream.d.ts +10 -5
  502. package/dist/utils/text-stream.js +6 -6
  503. package/dist/utils/vite-cli-invocation.d.ts +2 -1
  504. package/package.json +6 -5
  505. package/dist/build/layout-classification-types.d.ts +0 -60
  506. package/dist/build/layout-classification-types.js +0 -1
  507. package/dist/build/layout-classification.d.ts +0 -61
  508. package/dist/build/layout-classification.js +0 -98
  509. package/dist/build/route-classification-injector.d.ts +0 -32
  510. package/dist/build/route-classification-injector.js +0 -59
  511. package/dist/build/route-classification-manifest.d.ts +0 -53
  512. package/dist/build/route-classification-manifest.js +0 -143
  513. package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
  514. package/dist/server/app-browser-client-reuse-manifest.d.ts +0 -10
  515. package/dist/server/app-browser-client-reuse-manifest.js +0 -101
  516. package/dist/server/app-layout-param-observation.d.ts +0 -41
  517. package/dist/server/app-layout-param-observation.js +0 -168
  518. package/dist/server/client-reuse-manifest.d.ts +0 -102
  519. package/dist/server/client-reuse-manifest.js +0 -209
  520. package/dist/server/default-not-found-module.d.ts +0 -19
  521. package/dist/server/default-not-found-module.js +0 -18
  522. package/dist/server/rsc-stream-hints.d.ts +0 -21
  523. package/dist/server/rsc-stream-hints.js +0 -227
  524. package/dist/server/skip-cache-proof.d.ts +0 -60
  525. package/dist/server/skip-cache-proof.js +0 -168
  526. package/dist/server/static-layout-client-reuse-proof.d.ts +0 -13
  527. package/dist/server/static-layout-client-reuse-proof.js +0 -33
  528. package/dist/utils/sorted-array.d.ts +0 -7
  529. package/dist/utils/sorted-array.js +0 -20
@@ -1,35 +1,33 @@
1
1
  import { addBasePathToPathname, stripBasePath } from "../utils/base-path.js";
2
- import { VINEXT_CLIENT_REUSE_MANIFEST_HEADER, VINEXT_PARAMS_HEADER, VINEXT_RENDERED_PATH_AND_SEARCH_HEADER, VINEXT_RSC_REDIRECT_HEADER, VINEXT_RSC_REDIRECT_TYPE_HEADER } from "./headers.js";
2
+ import { VINEXT_MOUNTED_LAYOUTS_HEADER, VINEXT_PARAMS_HEADER, VINEXT_RENDERED_PATH_AND_SEARCH_HEADER, VINEXT_RSC_REDIRECT_HEADER, VINEXT_RSC_REDIRECT_TYPE_HEADER } from "./headers.js";
3
3
  import { splitPathnameForRouteMatch } from "../routing/utils.js";
4
4
  import { AppRouterContext } from "../shims/internal/app-router-context.js";
5
5
  import { matchRoutePattern } from "../routing/route-pattern.js";
6
6
  import { installWindowNext, setWindowNextInternalSourcePage } from "../client/window-next.js";
7
7
  import { retryScrollTo, scrollToHashTargetOnNextFrame } from "../shims/hash-scroll.js";
8
- import { AppElementsWire } from "./app-elements-wire.js";
9
- import { getMountedSlotIdsHeader, resolveVisitedResponseInterceptionContext } from "./app-elements.js";
10
- import { getBfcacheIdMapContext, getNavigationContext, setNavigationContext } from "../shims/navigation-context-state.js";
11
- import { decodeRedirectError, isRedirectError } from "../shims/navigation-errors.js";
12
- import DefaultGlobalError from "../shims/default-global-error.js";
8
+ import { VINEXT_RSC_COMPATIBILITY_ID_HEADER, VINEXT_RSC_CONTENT_TYPE, createRscRequestHeaders, createRscRequestUrl, formatRscRequestPath, isRscCompatibilityIdCompatible } from "./app-rsc-cache-busting.js";
13
9
  import { clearAppNavigationFailureTarget, installAppNavigationFailureListeners } from "../client/app-nav-failure-handler.js";
14
- import { DevRecoveryBoundary, GlobalErrorBoundary, RedirectBoundary } from "../shims/error-boundary.js";
15
- import { beginAppRouterScrollIntent, consumeAppRouterScrollIntent } from "../shims/app-router-scroll-state.js";
16
- import { AppRouterScrollCommitProvider } from "../shims/app-router-scroll.js";
17
- import { BfcacheIdentityMapContext, bindAppElementsRenderedSearch, setAppElementsRenderedSearch } from "../shims/slot.js";
18
- import { VINEXT_RSC_COMPATIBILITY_ID_HEADER, VINEXT_RSC_CONTENT_TYPE, createRscRequestHeaders, createRscRequestUrl, formatRscRequestPath } from "./app-rsc-cache-busting.js";
19
10
  import { notifyAppRouterTransitionStart } from "../client/instrumentation-client-state.js";
20
11
  import "../client/instrumentation-client.js";
21
12
  import { createNavigationRuntimeRouteManifestLoader, getNavigationRuntime, loadNavigationRuntimeRouteManifest, registerNavigationRuntimeBootstrap, registerNavigationRuntimeFunctions } from "../client/navigation-runtime.js";
13
+ import { AppElementsWire } from "./app-elements-wire.js";
14
+ import { getMountedSlotIdsHeader, resolveVisitedResponseInterceptionContext } from "./app-elements.js";
22
15
  import { createBfcacheSegmentIdentityMap, createInitialBfcacheIdMap } from "./app-bfcache-identity.js";
23
16
  import { createDiscardedServerActionRefreshScheduler, createServerActionInitiationSnapshot, resolveServerActionOperationLane } from "./app-browser-action-result.js";
24
- import { createClientReuseManifestHeaderFromVisibleAppState } from "./app-browser-client-reuse-manifest.js";
25
17
  import { resolveManifestNavigationInterceptionContext, resolveMiddlewareRewriteNavigationInterceptionContext } from "./app-browser-interception-context.js";
26
18
  import { isExternalHistoryState, readHistoryStateActiveRoutePaths, readHistoryStatePreviousNextUrl, resolveActiveRoutePaths } from "./app-history-state.js";
27
19
  import { AppBrowserMpaNavigationScheduler } from "./app-browser-mpa-navigation.js";
28
20
  import { stripRscCompletionMetadataResponse } from "./rsc-completion-metadata.js";
29
21
  import { blockDangerousStreamedRscRedirect } from "./app-browser-rsc-redirect.js";
30
22
  import { navigationPlanner } from "./navigation-planner.js";
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";
23
+ import { decodeRedirectError, isRedirectError } from "../shims/navigation-errors.js";
24
+ import { beginAppRouterScrollIntent, consumeAppRouterScrollIntent } from "../shims/app-router-scroll-state.js";
25
+ import { getBfcacheIdMapContext, getNavigationContext, setNavigationContext } from "../shims/navigation-context-state.js";
26
+ import { DYNAMIC_NAVIGATION_CACHE_TTL, PREFETCH_CACHE_TTL, __basePath, appRouterInstance, commitClientNavigationState, consumePrefetchResponse, consumePrefetchResponseForNavigation, createCachedRscResponseSnapshot, createClientNavigationRenderSnapshot, createSnapshotPathAndSearch, deletePrefetchResponseSnapshot, disableNavigationResponsePrefetchCacheReuse, getClientNavigationRenderContext, getMountedSlotsHeader, getPrefetchCache, hasPrefetchCacheEntryForNavigation, invalidateDynamicPrefetchCache, invalidatePrefetchCache, invalidateVisitedResponsePrefetches, parseRenderedPathAndSearchHeader, preloadHybridClientRouteOwner, pushHistoryStateWithoutNotify, replaceClientParamsWithoutNotify, replaceHistoryStateWithoutNotify, resolveLoadedHybridClientRewriteHref, resolvePrefetchCacheEntryMountedSlotsHeader, restoreRscResponse, saveScrollPosition, seedPrefetchResponseSnapshot, setClientParams, setMountedSlotsHeader, setPendingPathname, trackAppRouterNavigationInFlight, useRouter } from "../shims/navigation.js";
27
+ import { AppRouterScrollCommitProvider } from "../shims/app-router-scroll.js";
32
28
  import { chunksToReadableStream, createProgressiveRscStream, getVinextBrowserGlobal } from "./app-browser-stream.js";
29
+ import { createMountedLayoutsHeader, holdsSkippedLayouts } from "./app-mounted-layouts.js";
30
+ import { BfcacheIdentityMapContext, bindAppElementsRenderedSearch, setAppElementsRenderedSearch } from "../shims/slot.js";
33
31
  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
32
  import { clearHardNavigationLoopGuard, createAppBrowserNavigationController, createBasePathStrippedPathAndSearch, navigateDocumentDirectly } from "./app-browser-navigation-controller.js";
35
33
  import { createAppRouteTree } from "./app-route-tree.js";
@@ -38,17 +36,19 @@ import { createSupplementalRefreshCoordinator, mergeRefreshedParallelSlot, requi
38
36
  import { createAppBrowserNavigationAbortCoordinator } from "./app-browser-navigation-abort.js";
39
37
  import { consumeInitialFormState, createVinextHydrateRootOptions, hydrateRootInTransition, resolveFetchedHydrationLocation } from "./app-browser-hydration.js";
40
38
  import { AppBrowserHistoryController } from "./app-browser-history-controller.js";
41
- import { createVisitedResponseCacheEntry, deleteAllVisitedResponseCacheEntries, deleteInvalidatedHistoryRestoreEntries, deleteVisitedResponseCacheEntry, findVisitedResponseCacheEntry, hasNavigationResponseHistoryLifetime, isVisitedResponseCacheEntryFresh } from "./app-visited-response-cache.js";
39
+ import { createVisitedResponseCacheEntry, deleteAllVisitedResponseCacheEntries, deleteVisitedResponseCacheEntry, findVisitedResponseCacheEntry, findVisitedResponseForFullPrefetch, hasNavigationResponseHistoryLifetime, isVisitedResponseCacheEntryFresh, revokeHistoryRestoreNavigationReuse } from "./app-visited-response-cache.js";
42
40
  import { createPopstateRestoreHandler, restoreSynchronousPopstateScrollPosition, shouldCommitPopstateUrlWithoutNavigation } from "./app-browser-popstate.js";
41
+ import DefaultGlobalError from "../shims/default-global-error.js";
42
+ import { DevRecoveryBoundary, GlobalErrorBoundary, RedirectBoundary } from "../shims/error-boundary.js";
43
43
  import { createDevOnCaughtError, createOnUncaughtError, createProdOnCaughtError, createProdOnRecoverableError } from "./app-browser-error.js";
44
44
  import { createHydrationCachePublication } from "./app-hydration-cache-publication.js";
45
45
  import { peekSettledPrefetchResponseForNavigation, prepareConsumedPrefetchResponseForPublication, preserveCommittedPrefetchExpiry, resolvePrefetchNavigationResponseUrl } from "./app-browser-prefetch-response.js";
46
- import { canCommitOptimisticRouteTemplate, createOptimisticRouteTemplate, getOptimisticPrefetchSourceKey, getOptimisticRouteTemplateKey, resolveOptimisticNavigationParamsForHref, resolveOptimisticNavigationPayload } from "./app-optimistic-routing.js";
46
+ import { canCommitOptimisticRouteTemplate, createOptimisticRouteTemplate, createOptimisticRouteTemplateStore, getOptimisticPrefetchSourceKey, getOptimisticRouteTemplateKey, keepOptimisticStreamingMetadata, resolveOptimisticNavigationParamsForHref, resolveOptimisticNavigationPayload } from "./app-optimistic-routing.js";
47
47
  import { removeStylesheetLinksCoveredByInlineCss } from "./app-inline-css-client.js";
48
48
  import { createElement, startTransition, use, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
49
- import { flushSync } from "react-dom";
50
49
  import { createRoot, hydrateRoot } from "react-dom/client";
51
50
  import { createFromFetch, createFromReadableStream, setServerCallback } from "@vitejs/plugin-rsc/browser";
51
+ import { flushSync } from "react-dom";
52
52
  import { hasServerActions, loadServerActionClient } from "virtual:vinext-app-capabilities";
53
53
  //#region src/server/app-browser-entry.ts
54
54
  const HAS_CLIENT_REWRITES = process.env.__VINEXT_HAS_CLIENT_REWRITES !== "false";
@@ -67,13 +67,20 @@ const MAX_VISITED_RESPONSE_CACHE_SIZE = 50;
67
67
  const IS_STATIC_EXPORT = process.env.NODE_ENV === "production" && process.env.__NEXT_CONFIG_OUTPUT === "export";
68
68
  let clientDeploymentVersion = null;
69
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
+ }
70
79
  function setClientRscCompatibilityId(compatibilityId) {
71
80
  if (IS_STATIC_EXPORT || !compatibilityId) return;
72
81
  clientRscCompatibilityId = compatibilityId;
73
82
  }
74
- const optimisticRouteTemplates = /* @__PURE__ */ new Map();
75
- const optimisticRouteTemplateSources = /* @__PURE__ */ new Set();
76
- const optimisticRouteTemplateLearning = /* @__PURE__ */ new Map();
83
+ const optimisticRouteTemplates = createOptimisticRouteTemplateStore();
77
84
  function claimInitialAppRouterBootstrap() {
78
85
  if (window.__VINEXT_RSC_ROOT__ || window.__VINEXT_RSC_BOOTSTRAP_STATE__) return false;
79
86
  window.__VINEXT_RSC_BOOTSTRAP_STATE__ = "starting";
@@ -105,8 +112,8 @@ const historyController = new AppBrowserHistoryController({
105
112
  maxHistoryStateSnapshots: 50,
106
113
  readHistoryState: () => window.history.state,
107
114
  readCurrentHref: () => window.location.href,
108
- pushHistoryState: (state, href) => pushHistoryStateWithoutNotify(state, "", href),
109
- replaceHistoryState: (state, href) => replaceHistoryStateWithoutNotify(state, "", href),
115
+ pushHistoryState: (state, href, land) => pushHistoryStateWithoutNotify(state, "", href, land),
116
+ replaceHistoryState: (state, href, land) => replaceHistoryStateWithoutNotify(state, "", href, land),
110
117
  readVisibleNavigationMetadata: () => {
111
118
  if (!hasBrowserRouterState()) return null;
112
119
  const routerState = getBrowserRouterState();
@@ -214,7 +221,7 @@ function restoreHistoryStateSnapshot(historyState, navId, onApprovedBeforeCommit
214
221
  });
215
222
  if (!restored) return false;
216
223
  clientNavigationCacheGeneration += 1;
217
- deleteInvalidatedHistoryRestoreEntries(visitedResponseCache);
224
+ revokeHistoryRestoreNavigationReuse(visitedResponseCache);
218
225
  disableNavigationResponsePrefetchCacheReuse();
219
226
  commitClientNavigationState(navId, { releaseSnapshot: false });
220
227
  return true;
@@ -241,17 +248,23 @@ function stageClientParams(params) {
241
248
  }
242
249
  function clearVisitedResponseCache() {
243
250
  visitedResponseCache.clear();
251
+ invalidateVisitedResponsePrefetches();
244
252
  }
245
- function clearPrefetchState() {
246
- invalidatePrefetchCache();
253
+ function clearPrefetchState(options) {
254
+ invalidatePrefetchCache(options);
247
255
  optimisticRouteTemplates.clear();
248
- optimisticRouteTemplateSources.clear();
249
- optimisticRouteTemplateLearning.clear();
250
256
  }
251
- function clearClientNavigationCaches() {
257
+ function clearClientNavigationCaches(options) {
258
+ clientNavigationCacheGeneration += 1;
259
+ clearVisitedResponseCache();
260
+ clearPrefetchState(options);
261
+ historyController.invalidateRestorableClientState();
262
+ }
263
+ function clearDynamicClientNavigationCaches() {
252
264
  clientNavigationCacheGeneration += 1;
253
265
  clearVisitedResponseCache();
254
- clearPrefetchState();
266
+ invalidateDynamicPrefetchCache();
267
+ optimisticRouteTemplates.clear();
255
268
  historyController.invalidateRestorableClientState();
256
269
  }
257
270
  function getMatchedUrlPathname(matchedUrl) {
@@ -309,6 +322,10 @@ async function fetchPersistedSourcePageRefresh(options) {
309
322
  * read the query the server rendered it with, not the navigation's.
310
323
  */
311
324
  async function decodeSupplementalRefresh(response, targetPathname) {
325
+ if (!isRscResponseCompatible(response.headers.get("X-Vinext-RSC-Compatibility-Id"))) {
326
+ response.body?.cancel().catch(() => {});
327
+ throw new Error("[vinext] Refreshed another deployment's payload");
328
+ }
312
329
  const elements = await decodeAppElementsPromise(createFromFetch(Promise.resolve(response)));
313
330
  const renderedPathAndSearch = parseRenderedPathAndSearchHeader(response.headers.get(VINEXT_RENDERED_PATH_AND_SEARCH_HEADER));
314
331
  setAppElementsRenderedSearch(elements, new URL(renderedPathAndSearch ?? targetPathname, window.location.origin).search);
@@ -330,9 +347,10 @@ function parsePrefetchCacheKey(cacheKey) {
330
347
  }
331
348
  async function learnOptimisticRouteTemplateFromPrefetch(options) {
332
349
  const source = parsePrefetchCacheKey(options.cacheKey);
333
- if (source.interceptionContext !== options.interceptionContext) return false;
334
- if (resolvePrefetchCacheEntryMountedSlotsHeader(options.entry) !== options.mountedSlotsHeader) return false;
335
- if (options.interceptionContext !== null) return false;
350
+ if (source.interceptionContext !== options.interceptionContext) return null;
351
+ if (resolvePrefetchCacheEntryMountedSlotsHeader(options.entry) !== options.mountedSlotsHeader) return null;
352
+ if (options.interceptionContext !== null) return null;
353
+ if (!isRscResponseCompatible(options.entry.snapshot.compatibilityIdHeader)) return null;
336
354
  const elements = await decodeAppElementsPromise(createFromFetch(Promise.resolve(restoreRscResponse(options.entry.snapshot))));
337
355
  const template = createOptimisticRouteTemplate({
338
356
  allowLoadingShell: options.entry.optimisticRouteShell === true,
@@ -343,40 +361,36 @@ async function learnOptimisticRouteTemplateFromPrefetch(options) {
343
361
  mountedSlotsHeader: options.mountedSlotsHeader,
344
362
  routeManifest: options.routeManifest
345
363
  });
346
- if (template === null) return false;
347
- optimisticRouteTemplates.set(getOptimisticRouteTemplateKey({
348
- interceptionContext: options.interceptionContext,
349
- mountedSlotsHeader: options.mountedSlotsHeader,
350
- routeId: template.routeId
351
- }), template);
352
- return true;
364
+ if (template === null) return null;
365
+ return {
366
+ key: getOptimisticRouteTemplateKey({
367
+ interceptionContext: options.interceptionContext,
368
+ mountedSlotsHeader: options.mountedSlotsHeader,
369
+ routeId: template.routeId
370
+ }),
371
+ template
372
+ };
353
373
  }
354
374
  async function learnOptimisticRouteTemplatesFromPrefetchCache(options) {
355
- if (options.routeManifest === null) return;
356
- const learning = [...optimisticRouteTemplateLearning.values()];
375
+ const { routeManifest } = options;
376
+ if (routeManifest === null) return;
377
+ const learning = optimisticRouteTemplates.pendingLearning();
357
378
  for (const [cacheKey, entry] of getPrefetchCache()) {
358
379
  const sourceKey = getOptimisticPrefetchSourceKey({
359
380
  cacheKey,
360
381
  interceptionContext: options.interceptionContext,
361
382
  mountedSlotsHeader: options.mountedSlotsHeader
362
383
  });
363
- if (optimisticRouteTemplateSources.has(sourceKey)) continue;
364
- if (optimisticRouteTemplateLearning.has(sourceKey)) continue;
384
+ if (optimisticRouteTemplates.hasSource(sourceKey)) continue;
365
385
  if (!isSettledPrefetchCacheEntry(entry)) continue;
366
386
  if (entry.prefetchKind === "route-tree") continue;
367
- const promise = learnOptimisticRouteTemplateFromPrefetch({
387
+ learning.push(optimisticRouteTemplates.learn(sourceKey, () => learnOptimisticRouteTemplateFromPrefetch({
368
388
  cacheKey,
369
389
  entry,
370
390
  interceptionContext: options.interceptionContext,
371
391
  mountedSlotsHeader: options.mountedSlotsHeader,
372
- routeManifest: options.routeManifest
373
- }).then((learned) => {
374
- if (learned) optimisticRouteTemplateSources.add(sourceKey);
375
- }).finally(() => {
376
- optimisticRouteTemplateLearning.delete(sourceKey);
377
- });
378
- optimisticRouteTemplateLearning.set(sourceKey, promise);
379
- learning.push(promise);
392
+ routeManifest
393
+ })));
380
394
  }
381
395
  if (learning.length === 0) return;
382
396
  await Promise.allSettled(learning);
@@ -519,7 +533,7 @@ function evictVisitedResponseCacheIfNeeded() {
519
533
  function readVisitedResponseCacheCandidate(rscUrl, interceptionContext, mountedSlotsHeader, navigationKind) {
520
534
  const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
521
535
  const match = findVisitedResponseCacheEntry(visitedResponseCache, rscUrl, interceptionContext);
522
- if (!match) return {
536
+ if (!match || match.entry.navigationReuseRevoked) return {
523
537
  cacheKey,
524
538
  entry: null,
525
539
  facts: {
@@ -554,13 +568,14 @@ function applyVisitedResponseCacheCandidateDecision(candidate, decision) {
554
568
  function deleteVisitedResponse(rscUrl, interceptionContext) {
555
569
  deleteVisitedResponseCacheEntry(visitedResponseCache, rscUrl, interceptionContext);
556
570
  }
557
- function storeVisitedResponseSnapshot(rscUrl, interceptionContext, snapshot, params, prefetchFallbackTtlMs = DYNAMIC_NAVIGATION_CACHE_TTL, requestMountedSlotsHeader = snapshot.mountedSlotsHeader ?? null, elements, seedPrefetchCache = true, prefetchSnapshot = snapshot, reuseAfterHistoryRestore = false) {
571
+ function storeVisitedResponseSnapshot(rscUrl, interceptionContext, snapshot, params, prefetchFallbackTtlMs = DYNAMIC_NAVIGATION_CACHE_TTL, requestMountedSlotsHeader = snapshot.mountedSlotsHeader ?? null, elements, seedPrefetchCache = true, prefetchSnapshot = snapshot, reuseAfterHistoryRestore = false, fromHydration = false) {
558
572
  const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
559
573
  deleteAllVisitedResponseCacheEntries(visitedResponseCache, rscUrl, interceptionContext);
560
574
  evictVisitedResponseCacheIfNeeded();
561
575
  const entry = createVisitedResponseCacheEntry({
562
576
  fallbackTtlMs: prefetchFallbackTtlMs,
563
577
  elements,
578
+ fromHydration,
564
579
  now: Date.now(),
565
580
  mountedSlotsHeader: requestMountedSlotsHeader,
566
581
  params,
@@ -685,7 +700,6 @@ function BrowserRoot({ hydrationCachePublication, initialElements, initialNaviga
685
700
  interception: initialMetadata.interception,
686
701
  interceptionContext: initialMetadata.interceptionContext,
687
702
  layoutIds: initialMetadata.layoutIds,
688
- layoutFlags: initialMetadata.layoutFlags,
689
703
  navigationSnapshot: initialNavigationSnapshot,
690
704
  previousNextUrl: null,
691
705
  renderId: 0,
@@ -952,6 +966,7 @@ function registerServerActionCallback() {
952
966
  return loadServerActionClient().then(({ invokeClientServerAction }) => invokeClientServerAction(id, args, actionInitiation, {
953
967
  basePath: __basePath,
954
968
  clearClientNavigationCaches,
969
+ clearDynamicClientNavigationCaches,
955
970
  clientRscCompatibilityId,
956
971
  commitSameUrlNavigatePayload,
957
972
  navigationPlanner,
@@ -1045,7 +1060,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1045
1060
  const fallbackTtlMs = initialRscBootstrap?.initialCacheKind === "static" ? PREFETCH_CACHE_TTL : DYNAMIC_NAVIGATION_CACHE_TTL;
1046
1061
  hydrationCachePublication.publish(() => {
1047
1062
  if (cacheGeneration !== clientNavigationCacheGeneration) return () => {};
1048
- return storeVisitedResponseSnapshot(rscUrl, metadata.interceptionContext, snapshot, initialParams, fallbackTtlMs, mountedSlotsHeader, elements, false, snapshot, initialRscBootstrap?.initialCacheKind === "static" || metadata.interceptionContext !== null);
1063
+ return storeVisitedResponseSnapshot(rscUrl, metadata.interceptionContext, snapshot, initialParams, fallbackTtlMs, mountedSlotsHeader, elements, false, snapshot, initialRscBootstrap?.initialCacheKind === "static" || metadata.interceptionContext !== null, true);
1049
1064
  });
1050
1065
  }).catch(() => {});
1051
1066
  historyController.writeBootstrapHistoryMetadata();
@@ -1118,6 +1133,12 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1118
1133
  let currentPrevNextUrl = previousNextUrlOverride;
1119
1134
  let redirectCount = redirectDepth;
1120
1135
  let detachedNavigationCommits = false;
1136
+ let optimisticShellElements = null;
1137
+ const keepOptimisticShellMetadata = (payload) => {
1138
+ const shellElements = optimisticShellElements;
1139
+ if (shellElements === null) return payload;
1140
+ return payload instanceof Promise ? payload.then((elements) => keepOptimisticStreamingMetadata(elements, shellElements, String(navId))) : keepOptimisticStreamingMetadata(payload, shellElements, String(navId));
1141
+ };
1121
1142
  const activeTraversalIntent = navigationKind === "traverse" ? traversalIntent ?? historyController.resolveTraversalIntent(window.history.state) : null;
1122
1143
  let startedHardNavigation = false;
1123
1144
  const performHardNavigationForScrollIntent = (targetHref, mode) => {
@@ -1131,6 +1152,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1131
1152
  };
1132
1153
  let restoredBfcacheIds = navigationKind === "traverse" ? historyController.readCurrentBfcacheVersionHistoryIds(activeTraversalIntent?.historyState ?? window.history.state) : null;
1133
1154
  const reuseCurrentBfcacheIds = navigationKind !== "traverse" || !historyController.isCacheInvalidationGuarded() && historyController.isCurrentBfcacheVersion(activeTraversalIntent?.historyState ?? window.history.state);
1155
+ const releaseNavigationInFlight = trackAppRouterNavigationInFlight();
1134
1156
  try {
1135
1157
  const shouldUsePendingRouterState = programmaticTransition;
1136
1158
  if (hasBrowserRouterState()) {
@@ -1151,6 +1173,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1151
1173
  }
1152
1174
  const navigationInitiationState = getBrowserRouterState();
1153
1175
  const mountedSlotsHeader = getMountedSlotIdsHeader(navigationInitiationState.elements);
1176
+ let mountedLayoutsHeader = navigationKind === "navigate" ? createMountedLayoutsHeader(navigationInitiationState.elements, navigationInitiationState.layoutIds) : null;
1154
1177
  while (true) {
1155
1178
  const url = new URL(currentHref, window.location.origin);
1156
1179
  const requestState = getRequestState(navigationKind, url.pathname, currentPrevNextUrl, activeTraversalIntent?.historyState);
@@ -1284,7 +1307,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1284
1307
  navId,
1285
1308
  operationLane: toOperationLane(navigationKind),
1286
1309
  params: cachedParams,
1287
- payload: cachedPayload,
1310
+ payload: keepOptimisticShellMetadata(cachedPayload),
1288
1311
  payloadOrigin: cachedRoute.elements ? COMMITTED_CACHE_APP_NAVIGATION_PAYLOAD_ORIGIN : VISITED_CACHE_APP_NAVIGATION_PAYLOAD_ORIGIN,
1289
1312
  pendingRouterState: detachedNavigationCommits ? null : pendingRouterState,
1290
1313
  previousNextUrl: requestPreviousNextUrl,
@@ -1360,7 +1383,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1360
1383
  interceptionContext: requestInterceptionContext,
1361
1384
  mountedSlotsHeader,
1362
1385
  routeManifest,
1363
- templates: optimisticRouteTemplates
1386
+ templates: optimisticRouteTemplates.templates
1364
1387
  });
1365
1388
  if (optimisticPayload !== null && canCommitOptimisticRouteTemplate({
1366
1389
  currentElements: navigationInitiationState.elements,
@@ -1372,6 +1395,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1372
1395
  template: optimisticPayload.template
1373
1396
  })) {
1374
1397
  detachedNavigationCommits = true;
1398
+ optimisticShellElements = optimisticPayload.elements;
1375
1399
  const optimisticNavigationSnapshot = createClientNavigationRenderSnapshot(currentHref, optimisticPayload.params);
1376
1400
  renderNavigationPayload({
1377
1401
  actionType: toActionType(navigationKind),
@@ -1398,13 +1422,16 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1398
1422
  }
1399
1423
  }
1400
1424
  }
1425
+ let sentMountedLayouts = false;
1401
1426
  if (!navResponse) {
1402
- if (navigationKind === "navigate") {
1403
- const clientReuseManifestHeader = createClientReuseManifestHeaderFromVisibleAppState(navigationInitiationState);
1404
- if (clientReuseManifestHeader !== null) requestHeaders.set(VINEXT_CLIENT_REUSE_MANIFEST_HEADER, clientReuseManifestHeader);
1427
+ let liveRequestHeaders = requestHeaders;
1428
+ if (mountedLayoutsHeader !== null && requestInterceptionContext === null) {
1429
+ liveRequestHeaders = new Headers(requestHeaders);
1430
+ liveRequestHeaders.set(VINEXT_MOUNTED_LAYOUTS_HEADER, mountedLayoutsHeader);
1431
+ sentMountedLayouts = true;
1405
1432
  }
1406
1433
  navResponse = await fetch(rscUrl, {
1407
- headers: requestHeaders,
1434
+ headers: liveRequestHeaders,
1408
1435
  credentials: "include",
1409
1436
  priority: "auto",
1410
1437
  signal: navigationAbortHandle.signal
@@ -1487,6 +1514,15 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1487
1514
  navigationAbortHandle.release();
1488
1515
  }).then(requireCompleteSupplementalRefresh);
1489
1516
  }
1517
+ if (sentMountedLayouts) {
1518
+ const elements = await rscPayload;
1519
+ if (!browserNavigationController.isCurrentNavigation(navId)) return;
1520
+ if (!holdsSkippedLayouts(navigationInitiationState, elements) || !holdsSkippedLayouts(getBrowserRouterState(), elements)) {
1521
+ mountedLayoutsHeader = null;
1522
+ continue;
1523
+ }
1524
+ rscPayload = Promise.resolve(elements);
1525
+ }
1490
1526
  if (IS_STATIC_EXPORT) {
1491
1527
  const staticExportElements = await rscPayload;
1492
1528
  if (!browserNavigationController.isCurrentNavigation(navId)) return;
@@ -1518,7 +1554,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1518
1554
  },
1519
1555
  operationLane: toOperationLane(navigationKind),
1520
1556
  params: navParams,
1521
- payload: rscPayload,
1557
+ payload: keepOptimisticShellMetadata(rscPayload),
1522
1558
  payloadOrigin: FRESH_APP_NAVIGATION_PAYLOAD_ORIGIN,
1523
1559
  pendingRouterState: detachedNavigationCommits ? null : pendingRouterState,
1524
1560
  previousNextUrl: requestPreviousNextUrl,
@@ -1527,7 +1563,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1527
1563
  scrollIntent,
1528
1564
  targetHref: currentHref,
1529
1565
  traversalIntent: activeTraversalIntent,
1530
- visibleCommitMode: prefetchedElements ? "synchronous" : visibleCommitMode
1566
+ visibleCommitMode
1531
1567
  });
1532
1568
  if (renderOutcome === "hard-navigate") {
1533
1569
  startedHardNavigation = true;
@@ -1563,13 +1599,12 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1563
1599
  const state = committedState;
1564
1600
  const committedElements = {
1565
1601
  ...state.elements,
1566
- [AppElementsWire.keys.layoutFlags]: state.layoutFlags,
1567
1602
  [AppElementsWire.keys.layoutIds]: state.layoutIds,
1568
1603
  [AppElementsWire.keys.skippedLayoutIds]: [],
1569
1604
  [AppElementsWire.keys.slotBindings]: state.slotBindings
1570
1605
  };
1571
1606
  if (navigationCacheGeneration !== clientNavigationCacheGeneration) return;
1572
- storeVisitedResponseSnapshot(rscUrl, interceptionContext, snapshot, navParams, DYNAMIC_NAVIGATION_CACHE_TTL, mountedSlotsHeader, committedElements, true, prefetchSnapshot, interceptionContext !== null || hasNavigationResponseHistoryLifetime(snapshot));
1607
+ storeVisitedResponseSnapshot(rscUrl, interceptionContext, snapshot, navParams, DYNAMIC_NAVIGATION_CACHE_TTL, mountedSlotsHeader, committedElements, isCompleteAppPayloadMetadata(metadata), prefetchSnapshot, interceptionContext !== null || hasNavigationResponseHistoryLifetime(snapshot));
1573
1608
  }
1574
1609
  } catch {}
1575
1610
  return;
@@ -1582,10 +1617,15 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
1582
1617
  navigationAbortHandle.release();
1583
1618
  browserNavigationController.finalizeNavigation(navId, pendingRouterState);
1584
1619
  discardedServerActionRefreshScheduler.markNavigationSettled();
1620
+ releaseNavigationInFlight();
1585
1621
  if (startedHardNavigation) await waitForMpaNavigationRestore();
1586
1622
  }
1587
1623
  },
1588
- preparePrefetchResponse: (response) => decodeAppElementsPromise(createFromFetch(Promise.resolve(response))),
1624
+ readVisitedResponseForFullPrefetch: (rscUrls, interceptionContext, mountedSlotsHeader) => findVisitedResponseForFullPrefetch(visitedResponseCache, rscUrls, interceptionContext, mountedSlotsHeader),
1625
+ preparePrefetchResponse: (response) => {
1626
+ if (!isRscResponseCompatible(response.headers.get("X-Vinext-RSC-Compatibility-Id"))) return Promise.reject(/* @__PURE__ */ new Error("[vinext] Prefetched another deployment's payload"));
1627
+ return decodeAppElementsPromise(createFromFetch(Promise.resolve(response)));
1628
+ },
1589
1629
  claimCurrentHistoryTreeSnapshot: (historyUpdateMode, previousHistoryState) => historyController.claimCurrentHistoryTreeSnapshot(historyUpdateMode, previousHistoryState),
1590
1630
  commitAppOwnedHistoryStateWrite: (historyUpdateMode, previousHistoryState) => historyController.commitAppOwnedHistoryStateWrite(historyUpdateMode, previousHistoryState),
1591
1631
  discardPendingNavigation: () => {
@@ -10,4 +10,5 @@ export declare function createOnUncaughtError(options?: {
10
10
  export declare function createProdOnCaughtError(onImplicitRootError: HydrateRootErrorHandler): HydrateRootErrorHandler;
11
11
  export declare function createDevOnCaughtError(onCaughtError: HydrateRootErrorHandler, onImplicitRootError: HydrateRootErrorHandler): HydrateRootErrorHandler;
12
12
  export declare function createProdOnRecoverableError(onReportedError: () => void): (error: unknown) => void;
13
- //#endregion
13
+ //#endregion
14
+ export {};
@@ -1,3 +1,4 @@
1
+ import { RouterHistoryWriteLanding } from "../shims/navigation.js";
1
2
  import { BfcacheIdMap, HistoryTraversalIntent } from "./app-history-state.js";
2
3
  import { AppRouterState } from "./app-browser-state.js";
3
4
  import { HistoryUpdateMode } from "./app-browser-navigation-controller.js";
@@ -19,10 +20,10 @@ type AppBrowserHistoryControllerDeps = {
19
20
  readHistoryState: () => unknown;
20
21
  /** Reads `window.location.href`. Injected so the controller stays unit-testable. */
21
22
  readCurrentHref: () => string;
22
- /** Wraps `pushHistoryStateWithoutNotify(state, "", href)`. */
23
- pushHistoryState: (state: unknown, href: string) => void;
24
- /** Wraps `replaceHistoryStateWithoutNotify(state, "", href)`. */
25
- replaceHistoryState: (state: unknown, href?: string) => void;
23
+ /** Wraps `pushHistoryStateWithoutNotify(state, "", href, land)`. */
24
+ pushHistoryState: (state: unknown, href: string, land?: RouterHistoryWriteLanding) => void;
25
+ /** Wraps `replaceHistoryStateWithoutNotify(state, "", href, land)`. */
26
+ replaceHistoryState: (state: unknown, href?: string, land?: RouterHistoryWriteLanding) => void;
26
27
  readVisibleNavigationMetadata: () => VisibleNavigationMetadata | null;
27
28
  };
28
29
  /**
@@ -121,4 +122,5 @@ export declare class AppBrowserHistoryController {
121
122
  */
122
123
  restoreHistorySnapshot(options: RestoreHistorySnapshotOptions): boolean;
123
124
  }
124
- //#endregion
125
+ //#endregion
126
+ export {};
@@ -31,6 +31,7 @@ var AppBrowserHistoryController = class {
31
31
  #treeSnapshots = /* @__PURE__ */ new Map();
32
32
  #treeSnapshotClaimCounts = /* @__PURE__ */ new Map();
33
33
  #treeSnapshotClaimByHistoryIndex = /* @__PURE__ */ new Map();
34
+ #treeSnapshotIdPrefix = createDocumentTreeSnapshotIdPrefix();
34
35
  #readHistoryState;
35
36
  #readCurrentHref;
36
37
  #pushHistoryState;
@@ -41,6 +42,9 @@ var AppBrowserHistoryController = class {
41
42
  #currentTreeSnapshotId = null;
42
43
  #nextTreeSnapshotId = 0;
43
44
  #treeSnapshotIdPendingFreshState = null;
45
+ #historyIndicesAwaitingTreeSnapshot = /* @__PURE__ */ new Set();
46
+ #treeSnapshotPending = true;
47
+ #historyIndexAwaitingTreeClaim = null;
44
48
  constructor(deps) {
45
49
  this.#readHistoryState = deps.readHistoryState;
46
50
  this.#readCurrentHref = deps.readCurrentHref;
@@ -99,18 +103,29 @@ var AppBrowserHistoryController = class {
99
103
  const previousState = this.readCurrentTreeSnapshot();
100
104
  const previousOperation = previousState?.activeOperation;
101
105
  if (previousState && previousOperation?.navigationCommitKind === "detached" && state.activeOperation?.navigationCommitKind === "authoritative" && state.activeOperation.navigationId === previousOperation.navigationId) this.#restorableClientState.replaceHistoryStateSnapshots(previousState, state);
106
+ for (const historyIndex of this.#historyIndicesAwaitingTreeSnapshot) this.#restorableClientState.rememberHistoryStateSnapshot({
107
+ historyIndex,
108
+ state
109
+ });
110
+ this.#historyIndicesAwaitingTreeSnapshot.clear();
102
111
  this.#restorableClientState.rememberHistoryStateSnapshot({
103
112
  historyIndex: this.#currentHistoryTraversalIndex,
104
113
  state
105
114
  });
115
+ this.#treeSnapshotPending = false;
106
116
  const historyTreeSnapshotId = readHistoryStateTreeSnapshotId(this.#readHistoryState());
107
- const treeSnapshotId = historyTreeSnapshotId !== null && this.#treeSnapshots.has(historyTreeSnapshotId) && (historyTreeSnapshotId === this.#treeSnapshotIdPendingFreshState || this.#treeSnapshotClaimCounts.has(historyTreeSnapshotId)) ? historyTreeSnapshotId : this.#nextTreeSnapshotId++;
117
+ const treeSnapshotId = historyTreeSnapshotId !== null && this.#treeSnapshots.has(historyTreeSnapshotId) && (historyTreeSnapshotId === this.#treeSnapshotIdPendingFreshState || this.#treeSnapshotClaimCounts.has(historyTreeSnapshotId)) ? historyTreeSnapshotId : `${this.#treeSnapshotIdPrefix}:${this.#nextTreeSnapshotId++}`;
108
118
  this.#treeSnapshotIdPendingFreshState = null;
109
119
  const previousTreeSnapshotId = this.#currentTreeSnapshotId;
110
120
  this.#currentTreeSnapshotId = treeSnapshotId;
111
121
  this.#treeSnapshots.set(treeSnapshotId, state);
122
+ const claimingHistoryIndex = this.#historyIndexAwaitingTreeClaim;
123
+ this.#historyIndexAwaitingTreeClaim = null;
124
+ const claimsTree = claimingHistoryIndex !== null && claimingHistoryIndex === this.#currentHistoryTraversalIndex && claimingHistoryIndex === readHistoryStateTraversalIndex(this.#readHistoryState());
125
+ if (claimsTree) this.#claimTreeSnapshotAtHistoryIndex(claimingHistoryIndex, treeSnapshotId);
112
126
  if (previousTreeSnapshotId !== null && previousTreeSnapshotId !== treeSnapshotId && !this.#treeSnapshotClaimCounts.has(previousTreeSnapshotId)) this.#treeSnapshots.delete(previousTreeSnapshotId);
113
- if (historyTreeSnapshotId !== treeSnapshotId) this.#replaceHistoryState(createHistoryStateWithTreeSnapshotId(this.#readHistoryState(), treeSnapshotId));
127
+ if (claimsTree) this.#replaceHistoryState(createHistoryStateWithTreeSnapshotClaim(createHistoryStateWithTreeSnapshotId(this.#readHistoryState(), treeSnapshotId), true));
128
+ else if (historyTreeSnapshotId !== treeSnapshotId) this.#replaceHistoryState(createHistoryStateWithTreeSnapshotId(this.#readHistoryState(), treeSnapshotId));
114
129
  }
115
130
  /** The router state of the most recently committed render, if any. */
116
131
  readCurrentTreeSnapshot() {
@@ -125,7 +140,21 @@ var AppBrowserHistoryController = class {
125
140
  claimCurrentHistoryTreeSnapshot(historyUpdateMode, previousHistoryState) {
126
141
  let historyState = this.#readHistoryState();
127
142
  const treeSnapshotId = readHistoryStateTreeSnapshotId(historyState);
128
- if (treeSnapshotId === null || !this.#treeSnapshots.has(treeSnapshotId)) return;
143
+ if (treeSnapshotId === null || !this.#treeSnapshots.has(treeSnapshotId)) {
144
+ if (historyUpdateMode === "push") {
145
+ const previousHistoryIndex = readHistoryStateTraversalIndex(previousHistoryState);
146
+ if (previousHistoryIndex !== null && this.#treeSnapshotPending) this.#historyIndicesAwaitingTreeSnapshot.add(previousHistoryIndex);
147
+ this.#releaseForwardTreeSnapshotClaims();
148
+ const historyIndex = this.#nextHistoryTraversalIndex + 1;
149
+ this.#replaceHistoryState(createHistoryStateWithNavigationMetadata(historyState, {
150
+ previousNextUrl: readHistoryStatePreviousNextUrl(historyState),
151
+ traversalIndex: historyIndex
152
+ }));
153
+ this.commitHistoryTraversalIndex(historyIndex);
154
+ this.#historyIndexAwaitingTreeClaim = this.#treeSnapshotPending ? historyIndex : null;
155
+ }
156
+ return;
157
+ }
129
158
  let historyIndex;
130
159
  if (historyUpdateMode === "push") {
131
160
  this.#releaseForwardTreeSnapshotClaims();
@@ -185,7 +214,6 @@ var AppBrowserHistoryController = class {
185
214
  if (treeSnapshotId !== this.#currentTreeSnapshotId) this.#treeSnapshots.delete(treeSnapshotId);
186
215
  }
187
216
  commitHashOnlyNavigation(href, historyUpdateMode, scroll) {
188
- if (historyUpdateMode === "push") this.#releaseForwardTreeSnapshotClaims();
189
217
  const navigationHistoryIndex = this.allocateNavigationHistoryTraversalIndex(historyUpdateMode);
190
218
  const historyState = this.#readHistoryState();
191
219
  const visible = this.#readVisibleNavigationMetadata();
@@ -199,11 +227,59 @@ var AppBrowserHistoryController = class {
199
227
  previousNextUrl,
200
228
  traversalIndex: navigationHistoryIndex
201
229
  }), true);
202
- if (historyUpdateMode === "replace") this.#replaceHistoryState(nextHistoryState, href);
203
- else this.#pushHistoryState(nextHistoryState, href);
230
+ const historyIndex = this.#writeNavigationHistoryState(historyUpdateMode, nextHistoryState, href, navigationHistoryIndex, false);
204
231
  const treeSnapshotId = readHistoryStateTreeSnapshotId(nextHistoryState);
205
- if (navigationHistoryIndex !== null && treeSnapshotId !== null) this.#claimTreeSnapshotAtHistoryIndex(navigationHistoryIndex, treeSnapshotId);
206
- this.commitHistoryTraversalIndex(navigationHistoryIndex);
232
+ if (historyIndex !== null && treeSnapshotId !== null) this.#claimTreeSnapshotAtHistoryIndex(historyIndex, treeSnapshotId);
233
+ }
234
+ /**
235
+ * Writes an app-owned push or replace entry and returns the traversal index
236
+ * it landed at. A history wrapper installed after boot can make its own
237
+ * writes before forwarding this one. When those moved the indices, the index
238
+ * is assigned as the write lands: a push goes after them, and a replace takes
239
+ * the index of the entry it actually overwrites. The index is committed as
240
+ * soon as the write succeeds, so a push the wrapper makes after forwarding
241
+ * goes after it.
242
+ */
243
+ #writeNavigationHistoryState(historyUpdateMode, state, href, allocatedIndex, rendersTree) {
244
+ const allocatedCurrentIndex = this.#currentHistoryTraversalIndex;
245
+ const allocatedNextIndex = this.#nextHistoryTraversalIndex;
246
+ const releaseClaims = (overwrittenHistoryState) => {
247
+ if (historyUpdateMode === "push") {
248
+ this.#releaseForwardTreeSnapshotClaims();
249
+ return;
250
+ }
251
+ if (!rendersTree) return;
252
+ const overwrittenIndex = readHistoryStateTraversalIndex(overwrittenHistoryState) ?? this.#currentHistoryTraversalIndex;
253
+ if (overwrittenIndex !== null) this.#releaseTreeSnapshotClaimAtHistoryIndex(overwrittenIndex);
254
+ };
255
+ let landedIndex;
256
+ let landingStarted = false;
257
+ const land = (data) => {
258
+ landingStarted = true;
259
+ const index = this.#currentHistoryTraversalIndex !== allocatedCurrentIndex || this.#nextHistoryTraversalIndex !== allocatedNextIndex ? this.allocateNavigationHistoryTraversalIndex(historyUpdateMode) : allocatedIndex;
260
+ const overwrittenHistoryState = this.#readHistoryState();
261
+ return {
262
+ data: index === allocatedIndex ? data : createHistoryStateWithNavigationMetadata(data, {
263
+ previousNextUrl: readHistoryStatePreviousNextUrl(data),
264
+ traversalIndex: index
265
+ }),
266
+ commit: () => {
267
+ releaseClaims(overwrittenHistoryState);
268
+ if (rendersTree) this.#treeSnapshotPending = true;
269
+ landedIndex = index;
270
+ this.commitHistoryTraversalIndex(index);
271
+ }
272
+ };
273
+ };
274
+ const historyStateBeforeWrite = this.#readHistoryState();
275
+ if (historyUpdateMode === "push") this.#pushHistoryState(state, href, land);
276
+ else this.#replaceHistoryState(state, href, land);
277
+ if (landedIndex !== void 0) return landedIndex;
278
+ if (landingStarted) return null;
279
+ releaseClaims(historyStateBeforeWrite);
280
+ if (rendersTree) this.#treeSnapshotPending = true;
281
+ this.commitHistoryTraversalIndex(allocatedIndex);
282
+ return allocatedIndex;
207
283
  }
208
284
  #createHashOnlyNavigationBaseHistoryState(historyUpdateMode, scroll) {
209
285
  const historyState = this.#readHistoryState();
@@ -238,19 +314,15 @@ var AppBrowserHistoryController = class {
238
314
  let wroteHistoryState = false;
239
315
  if (options.historyUpdateMode === "replace" && (currentHref !== targetHref || replacesClaimedOrExternalTree)) {
240
316
  options.stageClientParams();
241
- const currentHistoryIndex = readHistoryStateTraversalIndex(currentHistoryState) ?? this.#currentHistoryTraversalIndex;
242
- if (currentHistoryIndex !== null) this.#releaseTreeSnapshotClaimAtHistoryIndex(currentHistoryIndex);
243
- this.#replaceHistoryState(historyState, options.href);
317
+ this.#writeNavigationHistoryState("replace", historyState, options.href, navigationHistoryIndex, true);
244
318
  wroteHistoryState = true;
245
- this.commitHistoryTraversalIndex(navigationHistoryIndex);
246
319
  } else if (options.historyUpdateMode === "push" && currentHref !== targetHref) {
247
320
  options.stageClientParams();
248
- this.#releaseForwardTreeSnapshotClaims();
249
- this.#pushHistoryState(historyState, options.href);
321
+ this.#writeNavigationHistoryState("push", historyState, options.href, navigationHistoryIndex, true);
250
322
  wroteHistoryState = true;
251
- this.commitHistoryTraversalIndex(navigationHistoryIndex);
252
323
  }
253
324
  if (!wroteHistoryState) {
325
+ this.#treeSnapshotPending = true;
254
326
  this.syncCurrentHistoryStatePreviousNextUrl(options.previousNextUrl, options.bfcacheIds, options.activeRoutePaths);
255
327
  options.stageClientParams();
256
328
  if (options.targetHistoryIndex !== void 0) this.commitHistoryTraversalIndex(options.targetHistoryIndex);
@@ -306,6 +378,7 @@ var AppBrowserHistoryController = class {
306
378
  state,
307
379
  beforeCommit: () => {
308
380
  this.commitTraversalIndexFromHistoryState(options.historyState);
381
+ this.#treeSnapshotPending = true;
309
382
  options.stageClientParams(state.navigationSnapshot.params);
310
383
  }
311
384
  });
@@ -317,11 +390,16 @@ var AppBrowserHistoryController = class {
317
390
  state: decision.state,
318
391
  beforeCommit: () => {
319
392
  this.commitHistoryTraversalIndex(decision.targetHistoryIndex);
393
+ this.#treeSnapshotPending = true;
320
394
  options.stageClientParams(decision.state.navigationSnapshot.params);
321
395
  }
322
396
  });
323
397
  }
324
398
  };
399
+ function createDocumentTreeSnapshotIdPrefix() {
400
+ const bytes = crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(8));
401
+ return Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
402
+ }
325
403
  function areStringArraysEqual(a, b) {
326
404
  if (a === b) return true;
327
405
  if (a === null || b === null || a.length !== b.length) return false;