vinext 0.0.54 → 0.1.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 (977) hide show
  1. package/README.md +52 -15
  2. package/dist/build/clean-output.d.ts +1 -2
  3. package/dist/build/clean-output.js +0 -2
  4. package/dist/build/client-build-config.d.ts +16 -3
  5. package/dist/build/client-build-config.js +29 -4
  6. package/dist/build/css-url-assets.d.ts +29 -0
  7. package/dist/build/css-url-assets.js +211 -0
  8. package/dist/build/google-fonts/build-url.d.ts +1 -2
  9. package/dist/build/google-fonts/build-url.js +0 -2
  10. package/dist/build/google-fonts/fallback-metrics-data.js +0 -2
  11. package/dist/build/google-fonts/fallback-metrics.d.ts +1 -2
  12. package/dist/build/google-fonts/fallback-metrics.js +0 -2
  13. package/dist/build/google-fonts/font-data.js +0 -2
  14. package/dist/build/google-fonts/font-metadata.d.ts +1 -2
  15. package/dist/build/google-fonts/font-metadata.js +0 -2
  16. package/dist/build/google-fonts/get-axes.d.ts +1 -2
  17. package/dist/build/google-fonts/get-axes.js +0 -2
  18. package/dist/build/google-fonts/sort-variants.d.ts +1 -2
  19. package/dist/build/google-fonts/sort-variants.js +0 -2
  20. package/dist/build/google-fonts/validate.d.ts +1 -2
  21. package/dist/build/google-fonts/validate.js +0 -2
  22. package/dist/build/inline-css.d.ts +1 -2
  23. package/dist/build/inline-css.js +0 -2
  24. package/dist/build/layout-classification-types.d.ts +1 -2
  25. package/dist/build/layout-classification.d.ts +2 -3
  26. package/dist/build/layout-classification.js +1 -3
  27. package/dist/build/next-client-runtime-manifests.d.ts +14 -0
  28. package/dist/build/next-client-runtime-manifests.js +39 -0
  29. package/dist/build/nitro-route-rules.d.ts +1 -2
  30. package/dist/build/nitro-route-rules.js +0 -2
  31. package/dist/build/precompress.d.ts +1 -2
  32. package/dist/build/precompress.js +0 -2
  33. package/dist/build/prerender.d.ts +2 -3
  34. package/dist/build/prerender.js +14 -2
  35. package/dist/build/report.d.ts +1 -2
  36. package/dist/build/report.js +0 -2
  37. package/dist/build/route-classification-injector.d.ts +1 -2
  38. package/dist/build/route-classification-injector.js +4 -6
  39. package/dist/build/route-classification-manifest.d.ts +5 -6
  40. package/dist/build/route-classification-manifest.js +5 -7
  41. package/dist/build/run-prerender.d.ts +1 -2
  42. package/dist/build/run-prerender.js +15 -7
  43. package/dist/build/server-manifest.d.ts +1 -2
  44. package/dist/build/server-manifest.js +0 -2
  45. package/dist/build/ssr-manifest.d.ts +1 -2
  46. package/dist/build/ssr-manifest.js +2 -4
  47. package/dist/build/standalone.d.ts +1 -2
  48. package/dist/build/standalone.js +0 -2
  49. package/dist/build/static-export.d.ts +2 -3
  50. package/dist/build/static-export.js +0 -2
  51. package/dist/cache/cache-adapters-virtual.d.ts +50 -0
  52. package/dist/cache/cache-adapters-virtual.js +45 -0
  53. package/dist/check.d.ts +33 -2
  54. package/dist/check.js +321 -27
  55. package/dist/cli-args.d.ts +1 -2
  56. package/dist/cli-args.js +0 -2
  57. package/dist/cli.js +7 -13
  58. package/dist/client/instrumentation-client-inject.d.ts +1 -2
  59. package/dist/client/instrumentation-client-inject.js +0 -2
  60. package/dist/client/instrumentation-client-state.d.ts +1 -2
  61. package/dist/client/instrumentation-client-state.js +0 -2
  62. package/dist/client/instrumentation-client.d.ts +1 -2
  63. package/dist/client/instrumentation-client.js +0 -2
  64. package/dist/client/navigation-runtime.d.ts +2 -2
  65. package/dist/client/navigation-runtime.js +1 -3
  66. package/dist/client/pages-router-link-navigation.d.ts +1 -2
  67. package/dist/client/pages-router-link-navigation.js +0 -2
  68. package/dist/client/validate-module-path.d.ts +1 -2
  69. package/dist/client/validate-module-path.js +0 -2
  70. package/dist/client/vinext-next-data.d.ts +1 -2
  71. package/dist/client/vinext-next-data.js +0 -2
  72. package/dist/client/window-next.d.ts +1 -2
  73. package/dist/client/window-next.js +0 -2
  74. package/dist/cloudflare/index.d.ts +1 -1
  75. package/dist/cloudflare/index.js +1 -1
  76. package/dist/cloudflare/src/cache/cdn-adapter.runtime.js +97 -0
  77. package/dist/cloudflare/{kv-cache-handler.d.ts → src/cache/kv-data-adapter.runtime.d.ts} +25 -6
  78. package/dist/cloudflare/{kv-cache-handler.js → src/cache/kv-data-adapter.runtime.js} +36 -28
  79. package/dist/cloudflare/src/utils/cache-control-metadata.js +20 -0
  80. package/dist/cloudflare/tpr.d.ts +2 -3
  81. package/dist/cloudflare/tpr.js +8 -8
  82. package/dist/config/config-matchers.d.ts +1 -2
  83. package/dist/config/config-matchers.js +0 -2
  84. package/dist/config/dotenv.d.ts +1 -2
  85. package/dist/config/dotenv.js +0 -2
  86. package/dist/config/next-config.d.ts +30 -3
  87. package/dist/config/next-config.js +47 -8
  88. package/dist/config/tsconfig-paths.d.ts +12 -4
  89. package/dist/config/tsconfig-paths.js +58 -31
  90. package/dist/deploy.d.ts +48 -3
  91. package/dist/deploy.js +141 -112
  92. package/dist/entries/app-browser-entry.d.ts +1 -2
  93. package/dist/entries/app-browser-entry.js +0 -2
  94. package/dist/entries/app-rsc-entry.d.ts +6 -5
  95. package/dist/entries/app-rsc-entry.js +62 -61
  96. package/dist/entries/app-rsc-manifest.d.ts +1 -2
  97. package/dist/entries/app-rsc-manifest.js +42 -12
  98. package/dist/entries/app-ssr-entry.d.ts +1 -2
  99. package/dist/entries/app-ssr-entry.js +0 -2
  100. package/dist/entries/pages-client-entry.d.ts +3 -3
  101. package/dist/entries/pages-client-entry.js +16 -5
  102. package/dist/entries/pages-entry-helpers.d.ts +2 -11
  103. package/dist/entries/pages-entry-helpers.js +1 -20
  104. package/dist/entries/pages-server-entry.d.ts +2 -3
  105. package/dist/entries/pages-server-entry.js +94 -670
  106. package/dist/entries/runtime-entry-module.d.ts +1 -2
  107. package/dist/entries/runtime-entry-module.js +0 -2
  108. package/dist/index.d.ts +22 -2
  109. package/dist/index.js +297 -140
  110. package/dist/init.d.ts +1 -2
  111. package/dist/init.js +1 -3
  112. package/dist/plugins/ast-utils.d.ts +20 -0
  113. package/dist/plugins/ast-utils.js +78 -0
  114. package/dist/plugins/async-hooks-stub.d.ts +1 -2
  115. package/dist/plugins/async-hooks-stub.js +0 -2
  116. package/dist/plugins/client-reference-dedup.d.ts +1 -2
  117. package/dist/plugins/client-reference-dedup.js +4 -8
  118. package/dist/plugins/css-data-url.d.ts +1 -2
  119. package/dist/plugins/css-data-url.js +0 -2
  120. package/dist/plugins/fonts.d.ts +13 -3
  121. package/dist/plugins/fonts.js +19 -13
  122. package/dist/plugins/import-meta-url.d.ts +16 -0
  123. package/dist/plugins/import-meta-url.js +347 -0
  124. package/dist/plugins/instrumentation-client.d.ts +1 -2
  125. package/dist/plugins/instrumentation-client.js +0 -2
  126. package/dist/plugins/middleware-server-only.d.ts +1 -2
  127. package/dist/plugins/middleware-server-only.js +0 -2
  128. package/dist/plugins/og-assets.d.ts +32 -8
  129. package/dist/plugins/og-assets.js +126 -34
  130. package/dist/plugins/optimize-imports.d.ts +1 -2
  131. package/dist/plugins/optimize-imports.js +9 -17
  132. package/dist/plugins/postcss.d.ts +1 -2
  133. package/dist/plugins/postcss.js +0 -2
  134. package/dist/plugins/remove-console.d.ts +1 -2
  135. package/dist/plugins/remove-console.js +0 -2
  136. package/dist/plugins/rsc-client-reference-loaders.d.ts +1 -2
  137. package/dist/plugins/rsc-client-reference-loaders.js +0 -2
  138. package/dist/plugins/rsc-client-shim-excludes.d.ts +1 -2
  139. package/dist/plugins/rsc-client-shim-excludes.js +0 -2
  140. package/dist/plugins/sass.d.ts +1 -2
  141. package/dist/plugins/sass.js +0 -2
  142. package/dist/plugins/server-externals-manifest.d.ts +1 -2
  143. package/dist/plugins/server-externals-manifest.js +0 -2
  144. package/dist/plugins/strip-server-exports.d.ts +1 -2
  145. package/dist/plugins/strip-server-exports.js +0 -2
  146. package/dist/routing/app-route-graph.d.ts +2 -9
  147. package/dist/routing/app-route-graph.js +9 -30
  148. package/dist/routing/app-router.d.ts +1 -2
  149. package/dist/routing/app-router.js +0 -2
  150. package/dist/routing/file-matcher.d.ts +6 -2
  151. package/dist/routing/file-matcher.js +15 -7
  152. package/dist/routing/pages-router.d.ts +1 -2
  153. package/dist/routing/pages-router.js +0 -2
  154. package/dist/routing/route-matching.d.ts +1 -2
  155. package/dist/routing/route-matching.js +0 -2
  156. package/dist/routing/route-pattern.d.ts +1 -2
  157. package/dist/routing/route-pattern.js +0 -2
  158. package/dist/routing/route-trie.d.ts +1 -2
  159. package/dist/routing/route-trie.js +0 -2
  160. package/dist/routing/route-validation.d.ts +1 -2
  161. package/dist/routing/route-validation.js +0 -2
  162. package/dist/routing/utils.d.ts +44 -2
  163. package/dist/routing/utils.js +62 -3
  164. package/dist/server/api-handler.d.ts +1 -2
  165. package/dist/server/api-handler.js +0 -2
  166. package/dist/server/app-bfcache-id.d.ts +5 -0
  167. package/dist/server/app-bfcache-id.js +5 -0
  168. package/dist/server/app-browser-action-result.d.ts +9 -17
  169. package/dist/server/app-browser-action-result.js +25 -16
  170. package/dist/server/app-browser-client-reuse-manifest.d.ts +12 -0
  171. package/dist/server/app-browser-client-reuse-manifest.js +101 -0
  172. package/dist/server/app-browser-entry.js +352 -115
  173. package/dist/server/app-browser-error.d.ts +1 -2
  174. package/dist/server/app-browser-error.js +0 -2
  175. package/dist/server/app-browser-hydration.d.ts +1 -2
  176. package/dist/server/app-browser-hydration.js +0 -2
  177. package/dist/server/app-browser-interception-context.d.ts +1 -2
  178. package/dist/server/app-browser-interception-context.js +0 -2
  179. package/dist/server/app-browser-mpa-navigation.d.ts +16 -0
  180. package/dist/server/app-browser-mpa-navigation.js +42 -0
  181. package/dist/server/app-browser-navigation-controller.d.ts +5 -4
  182. package/dist/server/app-browser-navigation-controller.js +3 -3
  183. package/dist/server/app-browser-popstate.d.ts +4 -3
  184. package/dist/server/app-browser-popstate.js +15 -3
  185. package/dist/server/app-browser-rsc-redirect.d.ts +1 -2
  186. package/dist/server/app-browser-rsc-redirect.js +0 -2
  187. package/dist/server/app-browser-state.d.ts +28 -4
  188. package/dist/server/app-browser-state.js +195 -11
  189. package/dist/server/app-browser-stream.d.ts +1 -2
  190. package/dist/server/app-browser-stream.js +0 -2
  191. package/dist/server/app-browser-visible-commit.d.ts +2 -3
  192. package/dist/server/app-browser-visible-commit.js +24 -17
  193. package/dist/server/app-client-reference-preloader.d.ts +1 -2
  194. package/dist/server/app-client-reference-preloader.js +0 -2
  195. package/dist/server/app-elements-wire.d.ts +14 -8
  196. package/dist/server/app-elements-wire.js +45 -24
  197. package/dist/server/app-elements.d.ts +2 -3
  198. package/dist/server/app-elements.js +2 -4
  199. package/dist/server/app-fallback-renderer.d.ts +5 -5
  200. package/dist/server/app-fallback-renderer.js +4 -3
  201. package/dist/server/app-history-state.d.ts +18 -2
  202. package/dist/server/app-history-state.js +68 -10
  203. package/dist/server/app-hook-warning-suppression.d.ts +1 -2
  204. package/dist/server/app-hook-warning-suppression.js +0 -2
  205. package/dist/server/app-inline-css-client.d.ts +1 -2
  206. package/dist/server/app-inline-css-client.js +0 -2
  207. package/dist/server/app-interception-context-header.d.ts +1 -2
  208. package/dist/server/app-interception-context-header.js +0 -2
  209. package/dist/server/app-layout-param-observation.d.ts +43 -0
  210. package/dist/server/app-layout-param-observation.js +168 -0
  211. package/dist/server/app-middleware.d.ts +1 -2
  212. package/dist/server/app-middleware.js +0 -2
  213. package/dist/server/app-mounted-slots-header.d.ts +1 -2
  214. package/dist/server/app-mounted-slots-header.js +0 -2
  215. package/dist/server/app-optimistic-routing.d.ts +1 -2
  216. package/dist/server/app-optimistic-routing.js +0 -2
  217. package/dist/server/app-page-boundary-render.d.ts +4 -3
  218. package/dist/server/app-page-boundary-render.js +20 -11
  219. package/dist/server/app-page-boundary.d.ts +11 -2
  220. package/dist/server/app-page-boundary.js +13 -4
  221. package/dist/server/app-page-cache.d.ts +3 -3
  222. package/dist/server/app-page-cache.js +36 -11
  223. package/dist/server/app-page-dispatch.d.ts +19 -5
  224. package/dist/server/app-page-dispatch.js +119 -24
  225. package/dist/server/app-page-element-builder.d.ts +3 -2
  226. package/dist/server/app-page-element-builder.js +9 -11
  227. package/dist/server/app-page-execution.d.ts +8 -3
  228. package/dist/server/app-page-execution.js +55 -24
  229. package/dist/server/app-page-head.d.ts +1 -2
  230. package/dist/server/app-page-head.js +6 -6
  231. package/dist/server/app-page-method.d.ts +1 -2
  232. package/dist/server/app-page-method.js +0 -2
  233. package/dist/server/app-page-params.d.ts +2 -2
  234. package/dist/server/app-page-params.js +14 -3
  235. package/dist/server/app-page-probe.d.ts +90 -2
  236. package/dist/server/app-page-probe.js +201 -6
  237. package/dist/server/app-page-render-identity.d.ts +1 -2
  238. package/dist/server/app-page-render-identity.js +0 -2
  239. package/dist/server/app-page-render-observation.d.ts +1 -2
  240. package/dist/server/app-page-render-observation.js +0 -2
  241. package/dist/server/app-page-render.d.ts +9 -3
  242. package/dist/server/app-page-render.js +167 -10
  243. package/dist/server/app-page-request.d.ts +4 -3
  244. package/dist/server/app-page-request.js +1 -3
  245. package/dist/server/app-page-response.d.ts +2 -2
  246. package/dist/server/app-page-response.js +5 -3
  247. package/dist/server/app-page-route-wiring.d.ts +14 -3
  248. package/dist/server/app-page-route-wiring.js +63 -11
  249. package/dist/server/app-page-search-params-observation.d.ts +10 -0
  250. package/dist/server/app-page-search-params-observation.js +20 -0
  251. package/dist/server/app-page-segment-state.d.ts +1 -2
  252. package/dist/server/app-page-segment-state.js +1 -8
  253. package/dist/server/app-page-stream.d.ts +19 -9
  254. package/dist/server/app-page-stream.js +28 -10
  255. package/dist/server/app-pages-bridge.d.ts +25 -0
  256. package/dist/server/app-pages-bridge.js +34 -0
  257. package/dist/server/app-post-middleware-context.d.ts +1 -2
  258. package/dist/server/app-post-middleware-context.js +0 -2
  259. package/dist/server/app-ppr-fallback-shell.d.ts +21 -0
  260. package/dist/server/app-ppr-fallback-shell.js +82 -0
  261. package/dist/server/app-prerender-endpoints.d.ts +1 -2
  262. package/dist/server/app-prerender-endpoints.js +0 -2
  263. package/dist/server/app-prerender-static-params.d.ts +15 -2
  264. package/dist/server/app-prerender-static-params.js +44 -13
  265. package/dist/server/app-render-dependency.d.ts +3 -2
  266. package/dist/server/app-render-dependency.js +9 -3
  267. package/dist/server/app-request-context.d.ts +1 -2
  268. package/dist/server/app-request-context.js +0 -2
  269. package/dist/server/app-route-handler-cache.d.ts +1 -2
  270. package/dist/server/app-route-handler-cache.js +0 -2
  271. package/dist/server/app-route-handler-dispatch.d.ts +1 -2
  272. package/dist/server/app-route-handler-dispatch.js +0 -2
  273. package/dist/server/app-route-handler-execution.d.ts +1 -2
  274. package/dist/server/app-route-handler-execution.js +2 -4
  275. package/dist/server/app-route-handler-policy.d.ts +1 -2
  276. package/dist/server/app-route-handler-policy.js +0 -2
  277. package/dist/server/app-route-handler-response.d.ts +2 -3
  278. package/dist/server/app-route-handler-response.js +8 -7
  279. package/dist/server/app-route-handler-runtime.d.ts +1 -2
  280. package/dist/server/app-route-handler-runtime.js +0 -2
  281. package/dist/server/app-route-module-loader.d.ts +43 -0
  282. package/dist/server/app-route-module-loader.js +32 -0
  283. package/dist/server/app-router-entry.d.ts +1 -2
  284. package/dist/server/app-router-entry.js +2 -2
  285. package/dist/server/app-rsc-cache-busting.d.ts +12 -3
  286. package/dist/server/app-rsc-cache-busting.js +21 -10
  287. package/dist/server/app-rsc-embedded-chunks.d.ts +1 -2
  288. package/dist/server/app-rsc-embedded-chunks.js +0 -2
  289. package/dist/server/app-rsc-error-handler.d.ts +1 -2
  290. package/dist/server/app-rsc-error-handler.js +0 -2
  291. package/dist/server/app-rsc-errors.d.ts +1 -2
  292. package/dist/server/app-rsc-errors.js +0 -2
  293. package/dist/server/app-rsc-handler.d.ts +16 -2
  294. package/dist/server/app-rsc-handler.js +32 -14
  295. package/dist/server/app-rsc-render-mode.d.ts +1 -2
  296. package/dist/server/app-rsc-render-mode.js +0 -2
  297. package/dist/server/app-rsc-request-normalization.d.ts +4 -5
  298. package/dist/server/app-rsc-request-normalization.js +2 -4
  299. package/dist/server/app-rsc-response-finalizer.d.ts +1 -2
  300. package/dist/server/app-rsc-response-finalizer.js +2 -2
  301. package/dist/server/app-rsc-route-matching.d.ts +1 -2
  302. package/dist/server/app-rsc-route-matching.js +0 -2
  303. package/dist/server/app-segment-config.d.ts +5 -3
  304. package/dist/server/app-segment-config.js +12 -3
  305. package/dist/server/app-server-action-execution.d.ts +12 -2
  306. package/dist/server/app-server-action-execution.js +200 -25
  307. package/dist/server/app-ssr-entry.d.ts +5 -4
  308. package/dist/server/app-ssr-entry.js +31 -15
  309. package/dist/server/app-ssr-error-meta.d.ts +1 -2
  310. package/dist/server/app-ssr-error-meta.js +0 -2
  311. package/dist/server/app-ssr-stream.d.ts +1 -2
  312. package/dist/server/app-ssr-stream.js +31 -3
  313. package/dist/server/app-static-generation.d.ts +1 -2
  314. package/dist/server/app-static-generation.js +0 -2
  315. package/dist/server/app-visited-response-cache.d.ts +23 -0
  316. package/dist/server/app-visited-response-cache.js +19 -0
  317. package/dist/server/artifact-compatibility.d.ts +2 -2
  318. package/dist/server/artifact-compatibility.js +12 -7
  319. package/dist/server/cache-control.d.ts +15 -2
  320. package/dist/server/cache-control.js +21 -3
  321. package/dist/server/cache-headers.d.ts +1 -2
  322. package/dist/server/cache-headers.js +0 -2
  323. package/dist/server/cache-proof.d.ts +1 -2
  324. package/dist/server/cache-proof.js +0 -2
  325. package/dist/server/client-reuse-manifest.d.ts +10 -5
  326. package/dist/server/client-reuse-manifest.js +7 -10
  327. package/dist/server/client-trace-metadata.d.ts +1 -2
  328. package/dist/server/client-trace-metadata.js +0 -2
  329. package/dist/server/cookie-utils.d.ts +1 -2
  330. package/dist/server/cookie-utils.js +0 -2
  331. package/dist/server/csp.d.ts +1 -2
  332. package/dist/server/csp.js +0 -2
  333. package/dist/server/default-global-error-module.d.ts +1 -2
  334. package/dist/server/default-global-error-module.js +0 -2
  335. package/dist/server/default-not-found-module.d.ts +1 -2
  336. package/dist/server/default-not-found-module.js +0 -2
  337. package/dist/server/dev-error-overlay-store.d.ts +20 -4
  338. package/dist/server/dev-error-overlay-store.js +23 -4
  339. package/dist/server/dev-error-overlay.d.ts +39 -3
  340. package/dist/server/dev-error-overlay.js +952 -164
  341. package/dist/server/dev-initial-server-error.d.ts +9 -0
  342. package/dist/server/dev-initial-server-error.js +26 -0
  343. package/dist/server/dev-lockfile.d.ts +1 -2
  344. package/dist/server/dev-lockfile.js +0 -2
  345. package/dist/server/dev-module-runner.d.ts +1 -2
  346. package/dist/server/dev-module-runner.js +0 -2
  347. package/dist/server/dev-origin-check.d.ts +1 -2
  348. package/dist/server/dev-origin-check.js +0 -2
  349. package/dist/server/dev-route-files.d.ts +1 -2
  350. package/dist/server/dev-route-files.js +0 -2
  351. package/dist/server/dev-server.d.ts +2 -3
  352. package/dist/server/dev-server.js +127 -28
  353. package/dist/server/dev-stack-sourcemap-endpoint.d.ts +4 -0
  354. package/dist/server/dev-stack-sourcemap-endpoint.js +4 -0
  355. package/dist/server/dev-stack-sourcemap.d.ts +43 -0
  356. package/dist/server/dev-stack-sourcemap.js +443 -0
  357. package/dist/server/document-initial-head.d.ts +6 -0
  358. package/dist/server/document-initial-head.js +33 -0
  359. package/dist/server/edge-api-runtime.d.ts +1 -2
  360. package/dist/server/edge-api-runtime.js +0 -2
  361. package/dist/server/file-based-metadata.d.ts +1 -2
  362. package/dist/server/file-based-metadata.js +0 -2
  363. package/dist/server/headers.d.ts +3 -2
  364. package/dist/server/headers.js +3 -3
  365. package/dist/server/html.d.ts +1 -2
  366. package/dist/server/html.js +0 -2
  367. package/dist/server/http-error-responses.d.ts +1 -2
  368. package/dist/server/http-error-responses.js +0 -2
  369. package/dist/server/image-optimization.d.ts +1 -2
  370. package/dist/server/image-optimization.js +0 -2
  371. package/dist/server/implicit-tags.d.ts +1 -2
  372. package/dist/server/implicit-tags.js +0 -2
  373. package/dist/server/instrumentation-runtime.d.ts +1 -2
  374. package/dist/server/instrumentation-runtime.js +0 -2
  375. package/dist/server/instrumentation.d.ts +1 -2
  376. package/dist/server/instrumentation.js +0 -2
  377. package/dist/server/isr-cache.d.ts +10 -3
  378. package/dist/server/isr-cache.js +13 -28
  379. package/dist/server/metadata-route-build-data.d.ts +1 -2
  380. package/dist/server/metadata-route-build-data.js +0 -2
  381. package/dist/server/metadata-route-response.d.ts +1 -2
  382. package/dist/server/metadata-route-response.js +0 -2
  383. package/dist/server/metadata-routes.d.ts +1 -2
  384. package/dist/server/metadata-routes.js +0 -2
  385. package/dist/server/middleware-matcher.d.ts +1 -2
  386. package/dist/server/middleware-matcher.js +0 -2
  387. package/dist/server/middleware-request-headers.d.ts +1 -2
  388. package/dist/server/middleware-request-headers.js +0 -2
  389. package/dist/server/middleware-response-headers.d.ts +1 -2
  390. package/dist/server/middleware-response-headers.js +0 -2
  391. package/dist/server/middleware-runtime.d.ts +1 -2
  392. package/dist/server/middleware-runtime.js +14 -5
  393. package/dist/server/middleware.d.ts +2 -3
  394. package/dist/server/middleware.js +0 -2
  395. package/dist/server/navigation-planner.d.ts +16 -2
  396. package/dist/server/navigation-planner.js +1 -3
  397. package/dist/server/navigation-trace.d.ts +1 -2
  398. package/dist/server/navigation-trace.js +0 -2
  399. package/dist/server/next-error-digest.d.ts +1 -2
  400. package/dist/server/next-error-digest.js +0 -2
  401. package/dist/server/normalize-path.d.ts +1 -2
  402. package/dist/server/normalize-path.js +0 -2
  403. package/dist/server/pages-api-route.d.ts +1 -2
  404. package/dist/server/pages-api-route.js +1 -3
  405. package/dist/server/pages-asset-tags.d.ts +66 -0
  406. package/dist/server/pages-asset-tags.js +116 -0
  407. package/dist/server/pages-body-parser-config.d.ts +1 -2
  408. package/dist/server/pages-body-parser-config.js +0 -2
  409. package/dist/server/pages-data-route.d.ts +39 -2
  410. package/dist/server/pages-data-route.js +46 -3
  411. package/dist/server/pages-default-404.d.ts +1 -2
  412. package/dist/server/pages-default-404.js +0 -2
  413. package/dist/server/pages-document-initial-props.d.ts +84 -3
  414. package/dist/server/pages-document-initial-props.js +127 -3
  415. package/dist/server/pages-get-initial-props.d.ts +17 -0
  416. package/dist/server/pages-get-initial-props.js +50 -0
  417. package/dist/server/pages-i18n.d.ts +1 -2
  418. package/dist/server/pages-i18n.js +0 -2
  419. package/dist/server/pages-media-type.d.ts +1 -2
  420. package/dist/server/pages-media-type.js +1 -2
  421. package/dist/server/pages-node-compat.d.ts +9 -2
  422. package/dist/server/pages-node-compat.js +35 -4
  423. package/dist/server/pages-page-data.d.ts +7 -3
  424. package/dist/server/pages-page-data.js +75 -33
  425. package/dist/server/pages-page-handler.d.ts +90 -0
  426. package/dist/server/pages-page-handler.js +335 -0
  427. package/dist/server/pages-page-method.d.ts +1 -2
  428. package/dist/server/pages-page-method.js +0 -2
  429. package/dist/server/pages-page-response.d.ts +15 -2
  430. package/dist/server/pages-page-response.js +39 -12
  431. package/dist/server/pages-serializable-props.d.ts +1 -2
  432. package/dist/server/pages-serializable-props.js +0 -2
  433. package/dist/server/pregenerated-concrete-paths.d.ts +32 -0
  434. package/dist/server/pregenerated-concrete-paths.js +78 -0
  435. package/dist/server/prerender-route-params.d.ts +13 -3
  436. package/dist/server/prerender-route-params.js +30 -11
  437. package/dist/server/prerender-work-unit-setup.d.ts +1 -2
  438. package/dist/server/prerender-work-unit-setup.js +0 -2
  439. package/dist/server/prod-server.d.ts +2 -4
  440. package/dist/server/prod-server.js +13 -8
  441. package/dist/server/proxy-trust.d.ts +1 -2
  442. package/dist/server/proxy-trust.js +0 -2
  443. package/dist/server/request-log.d.ts +1 -2
  444. package/dist/server/request-log.js +0 -2
  445. package/dist/server/request-pipeline.d.ts +14 -2
  446. package/dist/server/request-pipeline.js +42 -3
  447. package/dist/server/rsc-stream-hints.d.ts +1 -2
  448. package/dist/server/rsc-stream-hints.js +0 -2
  449. package/dist/server/seed-cache.d.ts +6 -2
  450. package/dist/server/seed-cache.js +10 -8
  451. package/dist/server/server-action-not-found.d.ts +1 -2
  452. package/dist/server/server-action-not-found.js +0 -2
  453. package/dist/server/server-globals.d.ts +1 -2
  454. package/dist/server/server-globals.js +0 -2
  455. package/dist/server/skip-cache-proof.d.ts +23 -3
  456. package/dist/server/skip-cache-proof.js +81 -14
  457. package/dist/server/socket-error-backstop.d.ts +1 -2
  458. package/dist/server/socket-error-backstop.js +0 -2
  459. package/dist/server/static-file-cache.d.ts +1 -2
  460. package/dist/server/static-file-cache.js +0 -2
  461. package/dist/server/static-layout-client-reuse-proof.d.ts +15 -0
  462. package/dist/server/static-layout-client-reuse-proof.js +33 -0
  463. package/dist/server/streaming-metadata.d.ts +1 -2
  464. package/dist/server/streaming-metadata.js +0 -2
  465. package/dist/server/worker-utils.d.ts +1 -2
  466. package/dist/server/worker-utils.js +3 -6
  467. package/dist/shims/amp.d.ts +1 -2
  468. package/dist/shims/amp.js +0 -2
  469. package/dist/shims/app-router-scroll-state.d.ts +1 -2
  470. package/dist/shims/app-router-scroll-state.js +0 -2
  471. package/dist/shims/app-router-scroll.d.ts +3 -5
  472. package/dist/shims/app-router-scroll.js +0 -2
  473. package/dist/shims/app.d.ts +1 -2
  474. package/dist/shims/app.js +0 -2
  475. package/dist/shims/before-interactive-context.d.ts +1 -2
  476. package/dist/shims/before-interactive-context.js +0 -2
  477. package/dist/shims/cache-for-request.d.ts +1 -2
  478. package/dist/shims/cache-for-request.js +0 -2
  479. package/dist/shims/cache-runtime.d.ts +20 -5
  480. package/dist/shims/cache-runtime.js +35 -30
  481. package/dist/shims/cache.d.ts +68 -7
  482. package/dist/shims/cache.js +179 -25
  483. package/dist/shims/cdn-cache.d.ts +125 -0
  484. package/dist/shims/cdn-cache.js +100 -0
  485. package/dist/shims/client-hook-error.d.ts +1 -2
  486. package/dist/shims/client-hook-error.js +0 -2
  487. package/dist/shims/client-locale.d.ts +1 -2
  488. package/dist/shims/client-locale.js +1 -3
  489. package/dist/shims/compat-router.d.ts +1 -2
  490. package/dist/shims/compat-router.js +0 -2
  491. package/dist/shims/config.d.ts +1 -2
  492. package/dist/shims/config.js +0 -2
  493. package/dist/shims/constants.d.ts +1 -2
  494. package/dist/shims/constants.js +0 -2
  495. package/dist/shims/default-global-error.d.ts +3 -4
  496. package/dist/shims/default-global-error.js +0 -2
  497. package/dist/shims/default-not-found.d.ts +1 -2
  498. package/dist/shims/default-not-found.js +0 -2
  499. package/dist/shims/document.d.ts +11 -7
  500. package/dist/shims/document.js +7 -10
  501. package/dist/shims/dynamic.d.ts +1 -2
  502. package/dist/shims/dynamic.js +0 -2
  503. package/dist/shims/error-boundary.d.ts +16 -12
  504. package/dist/shims/error-boundary.js +60 -28
  505. package/dist/shims/error.d.ts +1 -2
  506. package/dist/shims/error.js +0 -2
  507. package/dist/shims/fetch-cache.d.ts +3 -2
  508. package/dist/shims/fetch-cache.js +18 -9
  509. package/dist/shims/font-google-base.d.ts +1 -2
  510. package/dist/shims/font-google-base.js +1 -13
  511. package/dist/shims/font-local.d.ts +1 -2
  512. package/dist/shims/font-local.js +1 -15
  513. package/dist/shims/font-utils.d.ts +7 -2
  514. package/dist/shims/font-utils.js +13 -3
  515. package/dist/shims/form.d.ts +12 -5
  516. package/dist/shims/form.js +98 -21
  517. package/dist/shims/hash-scroll.d.ts +4 -2
  518. package/dist/shims/hash-scroll.js +13 -3
  519. package/dist/shims/head-state.d.ts +2 -2
  520. package/dist/shims/head-state.js +18 -5
  521. package/dist/shims/head.d.ts +35 -2
  522. package/dist/shims/head.js +113 -16
  523. package/dist/shims/headers.d.ts +9 -2
  524. package/dist/shims/headers.js +13 -3
  525. package/dist/shims/i18n-context.d.ts +1 -2
  526. package/dist/shims/i18n-context.js +0 -2
  527. package/dist/shims/i18n-state.d.ts +1 -2
  528. package/dist/shims/i18n-state.js +0 -2
  529. package/dist/shims/image-config.d.ts +1 -2
  530. package/dist/shims/image-config.js +0 -2
  531. package/dist/shims/image.d.ts +1 -2
  532. package/dist/shims/image.js +1 -3
  533. package/dist/shims/internal/als-registry.d.ts +1 -2
  534. package/dist/shims/internal/als-registry.js +0 -2
  535. package/dist/shims/internal/api-utils.d.ts +1 -2
  536. package/dist/shims/internal/app-route-detection.d.ts +1 -2
  537. package/dist/shims/internal/app-route-detection.js +0 -2
  538. package/dist/shims/internal/app-router-context.d.ts +1 -2
  539. package/dist/shims/internal/app-router-context.js +0 -2
  540. package/dist/shims/internal/cookie-serialize.d.ts +1 -2
  541. package/dist/shims/internal/cookie-serialize.js +0 -2
  542. package/dist/shims/internal/make-hanging-promise.d.ts +1 -2
  543. package/dist/shims/internal/make-hanging-promise.js +0 -2
  544. package/dist/shims/internal/pages-data-fetch-dedup.d.ts +55 -0
  545. package/dist/shims/internal/pages-data-fetch-dedup.js +68 -0
  546. package/dist/shims/internal/pages-data-target.d.ts +1 -2
  547. package/dist/shims/internal/pages-data-target.js +0 -2
  548. package/dist/shims/internal/pages-data-url.d.ts +1 -2
  549. package/dist/shims/internal/pages-data-url.js +0 -2
  550. package/dist/shims/internal/parse-cookie-header.d.ts +1 -2
  551. package/dist/shims/internal/parse-cookie-header.js +0 -2
  552. package/dist/shims/internal/router-context.d.ts +2 -4
  553. package/dist/shims/internal/router-context.js +0 -2
  554. package/dist/shims/internal/utils.d.ts +1 -2
  555. package/dist/shims/internal/utils.js +0 -2
  556. package/dist/shims/internal/work-unit-async-storage.d.ts +1 -2
  557. package/dist/shims/internal/work-unit-async-storage.js +0 -2
  558. package/dist/shims/layout-segment-context.d.ts +2 -4
  559. package/dist/shims/layout-segment-context.js +0 -2
  560. package/dist/shims/legacy-image.d.ts +1 -2
  561. package/dist/shims/legacy-image.js +0 -2
  562. package/dist/shims/link-prefetch.d.ts +1 -2
  563. package/dist/shims/link-prefetch.js +0 -2
  564. package/dist/shims/link.d.ts +2 -2
  565. package/dist/shims/link.js +47 -15
  566. package/dist/shims/metadata.d.ts +4 -5
  567. package/dist/shims/metadata.js +1 -3
  568. package/dist/shims/navigation-state.d.ts +1 -2
  569. package/dist/shims/navigation-state.js +0 -2
  570. package/dist/shims/navigation.d.ts +61 -7
  571. package/dist/shims/navigation.js +244 -47
  572. package/dist/shims/navigation.react-server.d.ts +1 -2
  573. package/dist/shims/navigation.react-server.js +0 -2
  574. package/dist/shims/offline.d.ts +1 -2
  575. package/dist/shims/offline.js +0 -2
  576. package/dist/shims/og.d.ts +1 -2
  577. package/dist/shims/og.js +2 -4
  578. package/dist/shims/pages-router-runtime.d.ts +7 -2
  579. package/dist/shims/pages-router-runtime.js +11 -3
  580. package/dist/shims/ppr-fallback-shell.d.ts +29 -0
  581. package/dist/shims/ppr-fallback-shell.js +149 -0
  582. package/dist/shims/readonly-url-search-params.d.ts +1 -2
  583. package/dist/shims/readonly-url-search-params.js +0 -2
  584. package/dist/shims/request-context.d.ts +9 -5
  585. package/dist/shims/request-context.js +0 -2
  586. package/dist/shims/request-state-types.d.ts +1 -1
  587. package/dist/shims/root-params.d.ts +1 -2
  588. package/dist/shims/root-params.js +0 -2
  589. package/dist/shims/router-state.d.ts +1 -2
  590. package/dist/shims/router-state.js +0 -2
  591. package/dist/shims/router.d.ts +1 -2
  592. package/dist/shims/router.js +172 -37
  593. package/dist/shims/script-nonce-context.d.ts +1 -2
  594. package/dist/shims/script-nonce-context.js +0 -2
  595. package/dist/shims/script.d.ts +1 -2
  596. package/dist/shims/script.js +0 -2
  597. package/dist/shims/server.d.ts +1 -2
  598. package/dist/shims/server.js +0 -2
  599. package/dist/shims/slot.d.ts +11 -4
  600. package/dist/shims/slot.js +121 -9
  601. package/dist/shims/thenable-params.d.ts +6 -3
  602. package/dist/shims/thenable-params.js +131 -12
  603. package/dist/shims/unified-request-context.d.ts +1 -2
  604. package/dist/shims/unified-request-context.js +3 -2
  605. package/dist/shims/unrecognized-action-error.d.ts +1 -2
  606. package/dist/shims/unrecognized-action-error.js +0 -2
  607. package/dist/shims/url-safety.d.ts +1 -2
  608. package/dist/shims/url-safety.js +0 -2
  609. package/dist/shims/url-utils.d.ts +1 -2
  610. package/dist/shims/url-utils.js +0 -2
  611. package/dist/shims/use-merged-ref.d.ts +1 -2
  612. package/dist/shims/use-merged-ref.js +0 -2
  613. package/dist/shims/web-vitals.d.ts +1 -2
  614. package/dist/shims/web-vitals.js +0 -2
  615. package/dist/typegen.d.ts +1 -2
  616. package/dist/typegen.js +2 -9
  617. package/dist/utils/asset-prefix.d.ts +1 -2
  618. package/dist/utils/asset-prefix.js +0 -2
  619. package/dist/utils/base-path.d.ts +1 -2
  620. package/dist/utils/base-path.js +0 -2
  621. package/dist/utils/cache-control-metadata.d.ts +1 -4
  622. package/dist/utils/cache-control-metadata.js +1 -3
  623. package/dist/utils/client-build-manifest.d.ts +14 -0
  624. package/dist/utils/client-build-manifest.js +52 -0
  625. package/dist/utils/compare.d.ts +4 -0
  626. package/dist/utils/compare.js +8 -0
  627. package/dist/utils/dev-error-recovery-event.d.ts +4 -0
  628. package/dist/utils/dev-error-recovery-event.js +4 -0
  629. package/dist/utils/domain-locale.d.ts +1 -2
  630. package/dist/utils/domain-locale.js +2 -4
  631. package/dist/utils/encode-cache-tag.d.ts +1 -2
  632. package/dist/utils/encode-cache-tag.js +0 -2
  633. package/dist/utils/error-cause.d.ts +1 -2
  634. package/dist/utils/error-cause.js +0 -2
  635. package/dist/utils/hash.d.ts +1 -2
  636. package/dist/utils/hash.js +1 -3
  637. package/dist/utils/html-limited-bots.d.ts +1 -2
  638. package/dist/utils/html-limited-bots.js +0 -2
  639. package/dist/utils/lazy-chunks.d.ts +1 -2
  640. package/dist/utils/lazy-chunks.js +0 -2
  641. package/dist/utils/manifest-paths.d.ts +8 -3
  642. package/dist/utils/manifest-paths.js +15 -3
  643. package/dist/utils/mdx-scan.d.ts +1 -2
  644. package/dist/utils/mdx-scan.js +0 -2
  645. package/dist/utils/navigation-signal.d.ts +1 -2
  646. package/dist/utils/navigation-signal.js +0 -2
  647. package/dist/utils/number.d.ts +4 -0
  648. package/dist/utils/number.js +6 -0
  649. package/dist/utils/path.d.ts +4 -2
  650. package/dist/utils/path.js +5 -3
  651. package/dist/utils/prerender-output-paths.d.ts +1 -2
  652. package/dist/utils/prerender-output-paths.js +0 -2
  653. package/dist/utils/project.d.ts +1 -2
  654. package/dist/utils/project.js +0 -2
  655. package/dist/utils/promise.d.ts +4 -0
  656. package/dist/utils/promise.js +6 -0
  657. package/dist/utils/public-routes.d.ts +1 -2
  658. package/dist/utils/public-routes.js +0 -2
  659. package/dist/utils/query.d.ts +1 -2
  660. package/dist/utils/query.js +0 -2
  661. package/dist/utils/record.d.ts +1 -2
  662. package/dist/utils/record.js +0 -2
  663. package/dist/utils/regex.d.ts +4 -0
  664. package/dist/utils/regex.js +6 -0
  665. package/dist/utils/safe-json-file.d.ts +1 -2
  666. package/dist/utils/safe-json-file.js +0 -2
  667. package/dist/utils/sorted-array.d.ts +1 -2
  668. package/dist/utils/sorted-array.js +0 -2
  669. package/dist/utils/text-stream.d.ts +1 -2
  670. package/dist/utils/text-stream.js +0 -2
  671. package/dist/utils/vinext-root.d.ts +1 -2
  672. package/dist/utils/vinext-root.js +0 -2
  673. package/dist/utils/vite-version.d.ts +10 -0
  674. package/dist/utils/vite-version.js +34 -0
  675. package/package.json +20 -7
  676. package/dist/build/clean-output.js.map +0 -1
  677. package/dist/build/client-build-config.js.map +0 -1
  678. package/dist/build/google-fonts/build-url.js.map +0 -1
  679. package/dist/build/google-fonts/fallback-metrics-data.js.map +0 -1
  680. package/dist/build/google-fonts/fallback-metrics.js.map +0 -1
  681. package/dist/build/google-fonts/font-data.js.map +0 -1
  682. package/dist/build/google-fonts/font-metadata.js.map +0 -1
  683. package/dist/build/google-fonts/get-axes.js.map +0 -1
  684. package/dist/build/google-fonts/sort-variants.js.map +0 -1
  685. package/dist/build/google-fonts/validate.js.map +0 -1
  686. package/dist/build/inline-css.js.map +0 -1
  687. package/dist/build/layout-classification.js.map +0 -1
  688. package/dist/build/nitro-route-rules.js.map +0 -1
  689. package/dist/build/precompress.js.map +0 -1
  690. package/dist/build/prerender.js.map +0 -1
  691. package/dist/build/report.js.map +0 -1
  692. package/dist/build/route-classification-injector.js.map +0 -1
  693. package/dist/build/route-classification-manifest.js.map +0 -1
  694. package/dist/build/run-prerender.js.map +0 -1
  695. package/dist/build/server-manifest.js.map +0 -1
  696. package/dist/build/ssr-manifest.js.map +0 -1
  697. package/dist/build/standalone.js.map +0 -1
  698. package/dist/build/static-export.js.map +0 -1
  699. package/dist/check.js.map +0 -1
  700. package/dist/cli-args.js.map +0 -1
  701. package/dist/cli.js.map +0 -1
  702. package/dist/client/instrumentation-client-inject.js.map +0 -1
  703. package/dist/client/instrumentation-client-state.js.map +0 -1
  704. package/dist/client/instrumentation-client.js.map +0 -1
  705. package/dist/client/navigation-runtime.js.map +0 -1
  706. package/dist/client/pages-router-link-navigation.js.map +0 -1
  707. package/dist/client/validate-module-path.js.map +0 -1
  708. package/dist/client/vinext-next-data.js.map +0 -1
  709. package/dist/client/window-next.js.map +0 -1
  710. package/dist/cloudflare/kv-cache-handler.js.map +0 -1
  711. package/dist/cloudflare/tpr.js.map +0 -1
  712. package/dist/config/config-matchers.js.map +0 -1
  713. package/dist/config/dotenv.js.map +0 -1
  714. package/dist/config/next-config.js.map +0 -1
  715. package/dist/config/tsconfig-paths.js.map +0 -1
  716. package/dist/deploy.js.map +0 -1
  717. package/dist/entries/app-browser-entry.js.map +0 -1
  718. package/dist/entries/app-rsc-entry.js.map +0 -1
  719. package/dist/entries/app-rsc-manifest.js.map +0 -1
  720. package/dist/entries/app-ssr-entry.js.map +0 -1
  721. package/dist/entries/pages-client-entry.js.map +0 -1
  722. package/dist/entries/pages-entry-helpers.js.map +0 -1
  723. package/dist/entries/pages-server-entry.js.map +0 -1
  724. package/dist/entries/runtime-entry-module.js.map +0 -1
  725. package/dist/index.js.map +0 -1
  726. package/dist/init.js.map +0 -1
  727. package/dist/plugins/async-hooks-stub.js.map +0 -1
  728. package/dist/plugins/client-reference-dedup.js.map +0 -1
  729. package/dist/plugins/css-data-url.js.map +0 -1
  730. package/dist/plugins/fonts.js.map +0 -1
  731. package/dist/plugins/instrumentation-client.js.map +0 -1
  732. package/dist/plugins/middleware-server-only.js.map +0 -1
  733. package/dist/plugins/og-assets.js.map +0 -1
  734. package/dist/plugins/optimize-imports.js.map +0 -1
  735. package/dist/plugins/postcss.js.map +0 -1
  736. package/dist/plugins/remove-console.js.map +0 -1
  737. package/dist/plugins/rsc-client-reference-loaders.js.map +0 -1
  738. package/dist/plugins/rsc-client-shim-excludes.js.map +0 -1
  739. package/dist/plugins/sass.js.map +0 -1
  740. package/dist/plugins/server-externals-manifest.js.map +0 -1
  741. package/dist/plugins/strip-server-exports.js.map +0 -1
  742. package/dist/routing/app-route-graph.js.map +0 -1
  743. package/dist/routing/app-router.js.map +0 -1
  744. package/dist/routing/file-matcher.js.map +0 -1
  745. package/dist/routing/pages-router.js.map +0 -1
  746. package/dist/routing/route-matching.js.map +0 -1
  747. package/dist/routing/route-pattern.js.map +0 -1
  748. package/dist/routing/route-trie.js.map +0 -1
  749. package/dist/routing/route-validation.js.map +0 -1
  750. package/dist/routing/utils.js.map +0 -1
  751. package/dist/server/api-handler.js.map +0 -1
  752. package/dist/server/app-browser-action-result.js.map +0 -1
  753. package/dist/server/app-browser-entry.js.map +0 -1
  754. package/dist/server/app-browser-error.js.map +0 -1
  755. package/dist/server/app-browser-hydration.js.map +0 -1
  756. package/dist/server/app-browser-interception-context.js.map +0 -1
  757. package/dist/server/app-browser-navigation-controller.js.map +0 -1
  758. package/dist/server/app-browser-popstate.js.map +0 -1
  759. package/dist/server/app-browser-rsc-redirect.js.map +0 -1
  760. package/dist/server/app-browser-state.js.map +0 -1
  761. package/dist/server/app-browser-stream.js.map +0 -1
  762. package/dist/server/app-browser-visible-commit.js.map +0 -1
  763. package/dist/server/app-client-reference-preloader.js.map +0 -1
  764. package/dist/server/app-elements-wire.js.map +0 -1
  765. package/dist/server/app-elements.js.map +0 -1
  766. package/dist/server/app-fallback-renderer.js.map +0 -1
  767. package/dist/server/app-history-state.js.map +0 -1
  768. package/dist/server/app-hook-warning-suppression.js.map +0 -1
  769. package/dist/server/app-inline-css-client.js.map +0 -1
  770. package/dist/server/app-interception-context-header.js.map +0 -1
  771. package/dist/server/app-middleware.js.map +0 -1
  772. package/dist/server/app-mounted-slots-header.js.map +0 -1
  773. package/dist/server/app-optimistic-routing.js.map +0 -1
  774. package/dist/server/app-page-boundary-render.js.map +0 -1
  775. package/dist/server/app-page-boundary.js.map +0 -1
  776. package/dist/server/app-page-cache.js.map +0 -1
  777. package/dist/server/app-page-dispatch.js.map +0 -1
  778. package/dist/server/app-page-element-builder.js.map +0 -1
  779. package/dist/server/app-page-execution.js.map +0 -1
  780. package/dist/server/app-page-head.js.map +0 -1
  781. package/dist/server/app-page-method.js.map +0 -1
  782. package/dist/server/app-page-params.js.map +0 -1
  783. package/dist/server/app-page-probe.js.map +0 -1
  784. package/dist/server/app-page-render-identity.js.map +0 -1
  785. package/dist/server/app-page-render-observation.js.map +0 -1
  786. package/dist/server/app-page-render.js.map +0 -1
  787. package/dist/server/app-page-request.js.map +0 -1
  788. package/dist/server/app-page-response.js.map +0 -1
  789. package/dist/server/app-page-route-wiring.js.map +0 -1
  790. package/dist/server/app-page-segment-state.js.map +0 -1
  791. package/dist/server/app-page-stream.js.map +0 -1
  792. package/dist/server/app-post-middleware-context.js.map +0 -1
  793. package/dist/server/app-prerender-endpoints.js.map +0 -1
  794. package/dist/server/app-prerender-static-params.js.map +0 -1
  795. package/dist/server/app-render-dependency.js.map +0 -1
  796. package/dist/server/app-request-context.js.map +0 -1
  797. package/dist/server/app-route-handler-cache.js.map +0 -1
  798. package/dist/server/app-route-handler-dispatch.js.map +0 -1
  799. package/dist/server/app-route-handler-execution.js.map +0 -1
  800. package/dist/server/app-route-handler-policy.js.map +0 -1
  801. package/dist/server/app-route-handler-response.js.map +0 -1
  802. package/dist/server/app-route-handler-runtime.js.map +0 -1
  803. package/dist/server/app-router-entry.js.map +0 -1
  804. package/dist/server/app-rsc-cache-busting.js.map +0 -1
  805. package/dist/server/app-rsc-embedded-chunks.js.map +0 -1
  806. package/dist/server/app-rsc-error-handler.js.map +0 -1
  807. package/dist/server/app-rsc-errors.js.map +0 -1
  808. package/dist/server/app-rsc-handler.js.map +0 -1
  809. package/dist/server/app-rsc-render-mode.js.map +0 -1
  810. package/dist/server/app-rsc-request-normalization.js.map +0 -1
  811. package/dist/server/app-rsc-response-finalizer.js.map +0 -1
  812. package/dist/server/app-rsc-route-matching.js.map +0 -1
  813. package/dist/server/app-segment-config.js.map +0 -1
  814. package/dist/server/app-server-action-execution.js.map +0 -1
  815. package/dist/server/app-ssr-entry.js.map +0 -1
  816. package/dist/server/app-ssr-error-meta.js.map +0 -1
  817. package/dist/server/app-ssr-stream.js.map +0 -1
  818. package/dist/server/app-static-generation.js.map +0 -1
  819. package/dist/server/artifact-compatibility.js.map +0 -1
  820. package/dist/server/cache-control.js.map +0 -1
  821. package/dist/server/cache-headers.js.map +0 -1
  822. package/dist/server/cache-proof.js.map +0 -1
  823. package/dist/server/client-reuse-manifest.js.map +0 -1
  824. package/dist/server/client-trace-metadata.js.map +0 -1
  825. package/dist/server/cookie-utils.js.map +0 -1
  826. package/dist/server/csp.js.map +0 -1
  827. package/dist/server/default-global-error-module.js.map +0 -1
  828. package/dist/server/default-not-found-module.js.map +0 -1
  829. package/dist/server/dev-error-overlay-store.js.map +0 -1
  830. package/dist/server/dev-error-overlay.js.map +0 -1
  831. package/dist/server/dev-lockfile.js.map +0 -1
  832. package/dist/server/dev-module-runner.js.map +0 -1
  833. package/dist/server/dev-origin-check.js.map +0 -1
  834. package/dist/server/dev-route-files.js.map +0 -1
  835. package/dist/server/dev-server.js.map +0 -1
  836. package/dist/server/edge-api-runtime.js.map +0 -1
  837. package/dist/server/file-based-metadata.js.map +0 -1
  838. package/dist/server/headers.js.map +0 -1
  839. package/dist/server/html.js.map +0 -1
  840. package/dist/server/http-error-responses.js.map +0 -1
  841. package/dist/server/image-optimization.js.map +0 -1
  842. package/dist/server/implicit-tags.js.map +0 -1
  843. package/dist/server/instrumentation-runtime.js.map +0 -1
  844. package/dist/server/instrumentation.js.map +0 -1
  845. package/dist/server/isr-cache.js.map +0 -1
  846. package/dist/server/metadata-route-build-data.js.map +0 -1
  847. package/dist/server/metadata-route-response.js.map +0 -1
  848. package/dist/server/metadata-routes.js.map +0 -1
  849. package/dist/server/middleware-matcher.js.map +0 -1
  850. package/dist/server/middleware-request-headers.js.map +0 -1
  851. package/dist/server/middleware-response-headers.js.map +0 -1
  852. package/dist/server/middleware-runtime.js.map +0 -1
  853. package/dist/server/middleware.js.map +0 -1
  854. package/dist/server/navigation-planner.js.map +0 -1
  855. package/dist/server/navigation-trace.js.map +0 -1
  856. package/dist/server/next-error-digest.js.map +0 -1
  857. package/dist/server/normalize-path.js.map +0 -1
  858. package/dist/server/pages-api-route.js.map +0 -1
  859. package/dist/server/pages-body-parser-config.js.map +0 -1
  860. package/dist/server/pages-data-route.js.map +0 -1
  861. package/dist/server/pages-default-404.js.map +0 -1
  862. package/dist/server/pages-document-initial-props.js.map +0 -1
  863. package/dist/server/pages-i18n.js.map +0 -1
  864. package/dist/server/pages-media-type.js.map +0 -1
  865. package/dist/server/pages-node-compat.js.map +0 -1
  866. package/dist/server/pages-page-data.js.map +0 -1
  867. package/dist/server/pages-page-method.js.map +0 -1
  868. package/dist/server/pages-page-response.js.map +0 -1
  869. package/dist/server/pages-serializable-props.js.map +0 -1
  870. package/dist/server/prerender-route-params.js.map +0 -1
  871. package/dist/server/prerender-work-unit-setup.js.map +0 -1
  872. package/dist/server/prod-server.js.map +0 -1
  873. package/dist/server/proxy-trust.js.map +0 -1
  874. package/dist/server/request-log.js.map +0 -1
  875. package/dist/server/request-pipeline.js.map +0 -1
  876. package/dist/server/rsc-stream-hints.js.map +0 -1
  877. package/dist/server/seed-cache.js.map +0 -1
  878. package/dist/server/server-action-not-found.js.map +0 -1
  879. package/dist/server/server-globals.js.map +0 -1
  880. package/dist/server/skip-cache-proof.js.map +0 -1
  881. package/dist/server/socket-error-backstop.js.map +0 -1
  882. package/dist/server/static-file-cache.js.map +0 -1
  883. package/dist/server/streaming-metadata.js.map +0 -1
  884. package/dist/server/worker-utils.js.map +0 -1
  885. package/dist/shims/amp.js.map +0 -1
  886. package/dist/shims/app-router-scroll-state.js.map +0 -1
  887. package/dist/shims/app-router-scroll.js.map +0 -1
  888. package/dist/shims/app.js.map +0 -1
  889. package/dist/shims/before-interactive-context.js.map +0 -1
  890. package/dist/shims/cache-for-request.js.map +0 -1
  891. package/dist/shims/cache-runtime.js.map +0 -1
  892. package/dist/shims/cache.js.map +0 -1
  893. package/dist/shims/client-hook-error.js.map +0 -1
  894. package/dist/shims/client-locale.js.map +0 -1
  895. package/dist/shims/compat-router.js.map +0 -1
  896. package/dist/shims/config.js.map +0 -1
  897. package/dist/shims/constants.js.map +0 -1
  898. package/dist/shims/default-global-error.js.map +0 -1
  899. package/dist/shims/default-not-found.js.map +0 -1
  900. package/dist/shims/document.js.map +0 -1
  901. package/dist/shims/dynamic.js.map +0 -1
  902. package/dist/shims/error-boundary.js.map +0 -1
  903. package/dist/shims/error.js.map +0 -1
  904. package/dist/shims/fetch-cache.js.map +0 -1
  905. package/dist/shims/font-google-base.js.map +0 -1
  906. package/dist/shims/font-local.js.map +0 -1
  907. package/dist/shims/font-utils.js.map +0 -1
  908. package/dist/shims/form.js.map +0 -1
  909. package/dist/shims/hash-scroll.js.map +0 -1
  910. package/dist/shims/head-state.js.map +0 -1
  911. package/dist/shims/head.js.map +0 -1
  912. package/dist/shims/headers.js.map +0 -1
  913. package/dist/shims/i18n-context.js.map +0 -1
  914. package/dist/shims/i18n-state.js.map +0 -1
  915. package/dist/shims/image-config.js.map +0 -1
  916. package/dist/shims/image.js.map +0 -1
  917. package/dist/shims/internal/als-registry.js.map +0 -1
  918. package/dist/shims/internal/app-route-detection.js.map +0 -1
  919. package/dist/shims/internal/app-router-context.js.map +0 -1
  920. package/dist/shims/internal/cookie-serialize.js.map +0 -1
  921. package/dist/shims/internal/make-hanging-promise.js.map +0 -1
  922. package/dist/shims/internal/pages-data-target.js.map +0 -1
  923. package/dist/shims/internal/pages-data-url.js.map +0 -1
  924. package/dist/shims/internal/parse-cookie-header.js.map +0 -1
  925. package/dist/shims/internal/router-context.js.map +0 -1
  926. package/dist/shims/internal/utils.js.map +0 -1
  927. package/dist/shims/internal/work-unit-async-storage.js.map +0 -1
  928. package/dist/shims/layout-segment-context.js.map +0 -1
  929. package/dist/shims/legacy-image.js.map +0 -1
  930. package/dist/shims/link-prefetch.js.map +0 -1
  931. package/dist/shims/link.js.map +0 -1
  932. package/dist/shims/metadata.js.map +0 -1
  933. package/dist/shims/navigation-state.js.map +0 -1
  934. package/dist/shims/navigation.js.map +0 -1
  935. package/dist/shims/navigation.react-server.js.map +0 -1
  936. package/dist/shims/offline.js.map +0 -1
  937. package/dist/shims/og.js.map +0 -1
  938. package/dist/shims/pages-router-runtime.js.map +0 -1
  939. package/dist/shims/readonly-url-search-params.js.map +0 -1
  940. package/dist/shims/request-context.js.map +0 -1
  941. package/dist/shims/root-params.js.map +0 -1
  942. package/dist/shims/router-state.js.map +0 -1
  943. package/dist/shims/router.js.map +0 -1
  944. package/dist/shims/script-nonce-context.js.map +0 -1
  945. package/dist/shims/script.js.map +0 -1
  946. package/dist/shims/server.js.map +0 -1
  947. package/dist/shims/slot.js.map +0 -1
  948. package/dist/shims/thenable-params.js.map +0 -1
  949. package/dist/shims/unified-request-context.js.map +0 -1
  950. package/dist/shims/unrecognized-action-error.js.map +0 -1
  951. package/dist/shims/url-safety.js.map +0 -1
  952. package/dist/shims/url-utils.js.map +0 -1
  953. package/dist/shims/use-merged-ref.js.map +0 -1
  954. package/dist/shims/web-vitals.js.map +0 -1
  955. package/dist/typegen.js.map +0 -1
  956. package/dist/utils/asset-prefix.js.map +0 -1
  957. package/dist/utils/base-path.js.map +0 -1
  958. package/dist/utils/cache-control-metadata.js.map +0 -1
  959. package/dist/utils/domain-locale.js.map +0 -1
  960. package/dist/utils/encode-cache-tag.js.map +0 -1
  961. package/dist/utils/error-cause.js.map +0 -1
  962. package/dist/utils/hash.js.map +0 -1
  963. package/dist/utils/html-limited-bots.js.map +0 -1
  964. package/dist/utils/lazy-chunks.js.map +0 -1
  965. package/dist/utils/manifest-paths.js.map +0 -1
  966. package/dist/utils/mdx-scan.js.map +0 -1
  967. package/dist/utils/navigation-signal.js.map +0 -1
  968. package/dist/utils/path.js.map +0 -1
  969. package/dist/utils/prerender-output-paths.js.map +0 -1
  970. package/dist/utils/project.js.map +0 -1
  971. package/dist/utils/public-routes.js.map +0 -1
  972. package/dist/utils/query.js.map +0 -1
  973. package/dist/utils/record.js.map +0 -1
  974. package/dist/utils/safe-json-file.js.map +0 -1
  975. package/dist/utils/sorted-array.js.map +0 -1
  976. package/dist/utils/text-stream.js.map +0 -1
  977. package/dist/utils/vinext-root.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"link.js","names":[],"sources":["../../src/shims/link.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * next/link shim\n *\n * Renders an <a> tag with client-side navigation support.\n * On click, prevents full page reload and triggers client-side\n * page swap via the router's navigation system.\n */\nimport React, {\n forwardRef,\n useRef,\n useEffect,\n useCallback,\n useContext,\n createContext,\n useState,\n type AnchorHTMLAttributes,\n type MouseEvent,\n type TouchEvent,\n} from \"react\";\nimport {\n getNavigationRuntime,\n hasAppNavigationRuntime,\n registerNavigationRuntimeFunctions,\n} from \"../client/navigation-runtime.js\";\n// Import shared RSC prefetch utilities from navigation shim (relative path\n// so this resolves both via the Vite plugin and in direct vitest imports)\nimport {\n getPrefetchInterceptionContext,\n getPrefetchCache,\n getPrefetchedUrls,\n getMountedSlotsHeader,\n navigateClientSide,\n prefetchRscResponse,\n} from \"./navigation.js\";\nimport { AppElementsWire } from \"../server/app-elements.js\";\nimport {\n createRscRequestHeaders,\n createRscRequestUrl,\n stripRscCacheBustingSearchParam,\n stripRscSuffix,\n} from \"../server/app-rsc-cache-busting.js\";\nimport { APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL } from \"../server/app-rsc-render-mode.js\";\nimport { VINEXT_MOUNTED_SLOTS_HEADER } from \"../server/headers.js\";\nimport { isDangerousScheme, reportBlockedDangerousNavigation } from \"./url-safety.js\";\nimport {\n canLinkIntentPrefetch,\n canLinkPrefetch,\n getLinkPrefetchHref,\n type LinkPrefetchRouterMode,\n} from \"./link-prefetch.js\";\nimport {\n isAbsoluteOrProtocolRelativeUrl,\n normalizePathTrailingSlash,\n resolveRelativeHref,\n toBrowserNavigationHref,\n toSameOriginAppPath,\n withBasePath,\n} from \"./url-utils.js\";\nimport { appendSearchParamsToUrl, type UrlQuery, urlQueryToSearchParams } from \"../utils/query.js\";\nimport { addLocalePrefix, getDomainLocaleUrl, type DomainLocale } from \"../utils/domain-locale.js\";\nimport { getI18nContext } from \"./i18n-context.js\";\nimport type { VinextLinkPrefetchRoute, VinextNextData } from \"../client/vinext-next-data.js\";\nimport { navigatePagesRouterLink } from \"../client/pages-router-link-navigation.js\";\nimport { createRouteTrieCache, matchRouteWithTrie } from \"../routing/route-matching.js\";\nimport { stripBasePath } from \"../utils/base-path.js\";\nimport {\n prefetchPagesData,\n resolvePagesDataNavigationTarget,\n} from \"./internal/pages-data-target.js\";\nimport { markAppRouteDetectedOnPrefetch } from \"./internal/app-route-detection.js\";\nimport { getCurrentBrowserLocale } from \"./client-locale.js\";\n\ntype NavigateEvent = {\n url: URL;\n /** Call to prevent the Link's default navigation (e.g. for View Transitions). */\n preventDefault(): void;\n /** Whether preventDefault() has been called. */\n defaultPrevented: boolean;\n};\n\ntype LinkProps = {\n href: string | { pathname?: string; query?: UrlQuery };\n /** URL displayed in the browser (when href is a route pattern like /user/[id]) */\n as?: string;\n /** Replace the current history entry instead of pushing */\n replace?: boolean;\n /** Prefetch the page in the background (App Router default: auto, Pages Router default: true) */\n prefetch?: boolean | \"auto\" | null;\n /**\n * Unstable App Router option matching Next.js canary: an automatic prefetch\n * is upgraded to a full prefetch when the user shows navigation intent.\n */\n unstable_dynamicOnHover?: boolean;\n /** Whether to pass the href to the child element */\n passHref?: boolean;\n /**\n * Pre-Next.js-13 link behaviour. When true, <Link> expects its child to be\n * an `<a>` (or a component that renders one) and forwards `href`, click,\n * and prefetch handlers to the child via `React.cloneElement` instead of\n * rendering its own wrapping `<a>`. Required when the user wants to\n * style/instrument the anchor themselves.\n */\n legacyBehavior?: boolean;\n /** Scroll to top on navigation (default: true) */\n scroll?: boolean;\n /**\n * Pages Router: update the URL without re-running data fetching methods\n * (getServerSideProps / getStaticProps / getInitialProps). The shallow change\n * still triggers the route change events and updates `router.query`. Only\n * applies to navigations within the same page. No-op on the App Router.\n */\n shallow?: boolean;\n /** Locale for i18n (used for locale-prefixed URLs) */\n locale?: string | false;\n /** Called before navigation happens (Next.js 16). Return value is ignored. */\n onNavigate?: (event: NavigateEvent) => void;\n children?: React.ReactNode;\n} & Omit<AnchorHTMLAttributes<HTMLAnchorElement>, \"href\">;\n\ntype LinkPrefetchMode = \"disabled\" | \"auto\" | \"full\";\n\ndeclare global {\n // Window is an ambient interface from lib.dom; interface merging is required\n // for this global browser hook.\n // oxlint-disable-next-line typescript-eslint/consistent-type-definitions\n interface Window {\n __VINEXT_LINK_PREFETCH_ROUTES__?: VinextLinkPrefetchRoute[];\n }\n}\n\n// ---------------------------------------------------------------------------\n// useLinkStatus — reports the pending state of a parent <Link> navigation\n// ---------------------------------------------------------------------------\n\ntype LinkStatusContextValue = {\n pending: boolean;\n};\n\nconst LinkStatusContext = createContext<LinkStatusContextValue>({ pending: false });\n\n/**\n * useLinkStatus returns the pending state of the enclosing <Link>.\n * In Next.js, this is used to show loading indicators while a\n * prefetch-triggered navigation is in progress.\n */\nexport function useLinkStatus(): LinkStatusContextValue {\n return useContext(LinkStatusContext);\n}\n\n/** basePath from next.config.js, injected by the plugin at build time */\nconst __basePath: string = process.env.__NEXT_ROUTER_BASEPATH ?? \"\";\n/** trailingSlash from next.config.js, injected by the plugin at build time */\nconst __trailingSlash: boolean = process.env.__VINEXT_TRAILING_SLASH === \"true\";\nconst linkPrefetchRouteTrieCache = createRouteTrieCache<VinextLinkPrefetchRoute>();\n\nfunction resolveHref(href: LinkProps[\"href\"]): string {\n if (typeof href === \"string\") return href;\n let url = href.pathname ?? \"/\";\n if (href.query) {\n const params = urlQueryToSearchParams(href.query);\n url = appendSearchParamsToUrl(url, params);\n }\n return url;\n}\n\n/**\n * Collapse repeated forward-slashes (and convert backslashes to forward-slashes)\n * in the path portion of a URL, preserving any query string.\n *\n * Ported from Next.js: packages/next/src/shared/lib/utils/normalize-repeated-slashes.ts\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/shared/lib/utils/normalize-repeated-slashes.ts\n */\nfunction normalizeRepeatedSlashes(url: string): string {\n const urlParts = url.split(\"?\");\n const urlNoQueryString = urlParts.shift() ?? \"\";\n const queryString = urlParts.join(\"?\");\n return (\n urlNoQueryString.replace(/\\\\/g, \"/\").replace(/\\/\\/+/g, \"/\") +\n (queryString ? `?${queryString}` : \"\")\n );\n}\n\n/**\n * Emit Next.js's \"Invalid href\" `console.error` when `href` contains repeated\n * forward slashes or backslashes in its path portion, and return the\n * normalized URL (with `\\\\` converted to `/` and runs of `/` collapsed). If\n * the href is already well-formed, the original string is returned unchanged.\n *\n * Ported from Next.js: packages/next/src/client/resolve-href.ts\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/client/resolve-href.ts\n *\n * Matches the message asserted by:\n * test/e2e/repeated-forward-slashes-error/repeated-forward-slashes-error.test.ts\n *\n * Note: Next.js fires this warning unconditionally on every call to\n * `resolveHref`. We mirror that behaviour (no dedup) for exact parity.\n *\n * Note: Next.js uses `router.pathname` (the route pattern, e.g.\n * `/posts/[id]`) for the \"in page\" segment of the message. We do not have\n * cheap access to the route pattern from inside the Link shim, so we\n * fall back to `window.location.pathname` (or `\"/\"` during SSR). The text\n * is cosmetic and is not asserted by the Next.js compat test.\n */\nfunction warnAndNormalizeRepeatedSlashesInHref(urlAsString: string): string {\n // Protocol-relative URLs (e.g. \"//example.com/path\") are treated by vinext\n // as external — see `isAbsoluteOrProtocolRelativeUrl` in url-utils. We\n // intentionally skip the repeated-slash warning and normalization for them\n // so that locale prefixing and same-origin detection elsewhere in this\n // shim continue to receive the original href. (Next.js itself does flag\n // these, but our external-URL handling supersedes that behaviour.)\n if (urlAsString.startsWith(\"//\")) return urlAsString;\n\n // Strip any protocol prefix (e.g. \"https://\") so we do not flag the\n // legitimate `//` that separates the scheme from the authority.\n const urlProtoMatch = urlAsString.match(/^[a-z][a-z0-9+.-]*:\\/\\//i);\n const urlAsStringNoProto = urlProtoMatch\n ? urlAsString.slice(urlProtoMatch[0].length)\n : urlAsString;\n const urlParts = urlAsStringNoProto.split(\"?\", 1);\n if (!(urlParts[0] || \"\").match(/(\\/\\/|\\\\)/)) return urlAsString;\n\n const pathname =\n typeof window !== \"undefined\" && window.location ? window.location.pathname : \"/\";\n console.error(\n `Invalid href '${urlAsString}' passed to next/router in page: '${pathname}'. Repeated forward-slashes (//) or backslashes \\\\ are not valid in the href.`,\n );\n\n const normalizedNoProto = normalizeRepeatedSlashes(urlAsStringNoProto);\n return (urlProtoMatch ? urlProtoMatch[0] : \"\") + normalizedNoProto;\n}\n\nexport function resolveLinkPrefetchMode(\n prefetchProp: LinkProps[\"prefetch\"],\n isDangerous: boolean,\n): LinkPrefetchMode {\n if (isDangerous || prefetchProp === false) return \"disabled\";\n if (prefetchProp === true) return \"full\";\n return \"auto\";\n}\n\nfunction toSameOriginRouteHref(href: string): string | null {\n if (typeof window === \"undefined\") return null;\n\n let url: URL;\n try {\n url = new URL(href, window.location.href);\n } catch {\n return null;\n }\n\n if (url.origin !== window.location.origin) return null;\n\n return `${stripBasePath(url.pathname, __basePath)}${url.search}`;\n}\n\nfunction getLinkPrefetchRouterMode(): LinkPrefetchRouterMode {\n return hasAppNavigationRuntime() ? \"app\" : \"pages\";\n}\n\nexport function canAutoPrefetchFullAppRoute(href: string): boolean {\n if (typeof window === \"undefined\") return false;\n\n const routes = window.__VINEXT_LINK_PREFETCH_ROUTES__;\n if (!routes) return false;\n\n const routeHref = toSameOriginRouteHref(href);\n if (routeHref === null) return false;\n\n const match = matchRouteWithTrie(routeHref, routes, linkPrefetchRouteTrieCache);\n if (!match) return false;\n\n return !match.route.isDynamic;\n}\n\nexport function resolveAutoAppRoutePrefetch(href: string): {\n cacheForNavigation: boolean;\n shouldPrefetch: boolean;\n} {\n if (typeof window === \"undefined\") {\n return { cacheForNavigation: false, shouldPrefetch: false };\n }\n\n const routes = window.__VINEXT_LINK_PREFETCH_ROUTES__;\n if (!routes) {\n return { cacheForNavigation: false, shouldPrefetch: false };\n }\n\n const routeHref = toSameOriginRouteHref(href);\n if (routeHref === null) {\n return { cacheForNavigation: false, shouldPrefetch: false };\n }\n\n const match = matchRouteWithTrie(routeHref, routes, linkPrefetchRouteTrieCache);\n if (!match) {\n return { cacheForNavigation: false, shouldPrefetch: false };\n }\n\n return {\n cacheForNavigation: !match.route.isDynamic,\n shouldPrefetch: !match.route.isDynamic || match.route.canPrefetchLoadingShell,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Prefetching infrastructure\n// ---------------------------------------------------------------------------\n\n/**\n * Prefetch a URL for faster navigation.\n *\n * For App Router (RSC): fetches the .rsc payload in the background and\n * stores it in an in-memory cache for instant use during navigation.\n * For Pages Router: injects a <link rel=\"prefetch\"> for the page module.\n *\n * Uses `requestIdleCallback` (or `setTimeout` fallback) to avoid blocking\n * the main thread during initial page load.\n */\nfunction prefetchUrl(href: string, mode: LinkPrefetchMode, priority: \"low\" | \"high\" = \"low\"): void {\n if (typeof window === \"undefined\") return;\n\n const prefetchHref = getLinkPrefetchHref({\n href,\n basePath: __basePath,\n currentOrigin: window.location.origin,\n });\n if (prefetchHref == null) return;\n\n const fullHref = toBrowserNavigationHref(prefetchHref, window.location.href, __basePath);\n\n const schedule = window.requestIdleCallback ?? ((fn: () => void) => setTimeout(fn, 100));\n\n schedule(() => {\n void (async () => {\n if (hasAppNavigationRuntime()) {\n const autoPrefetch =\n mode === \"auto\"\n ? resolveAutoAppRoutePrefetch(prefetchHref)\n : { cacheForNavigation: true, shouldPrefetch: true };\n if (!autoPrefetch.shouldPrefetch) return;\n\n const interceptionContext = getPrefetchInterceptionContext(fullHref);\n const mountedSlotsHeader = getMountedSlotsHeader();\n const isOptimisticRouteShellPrefetch = !autoPrefetch.cacheForNavigation;\n if (isOptimisticRouteShellPrefetch && interceptionContext !== null) return;\n const headers = createRscRequestHeaders({\n interceptionContext,\n renderMode: isOptimisticRouteShellPrefetch\n ? APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL\n : undefined,\n });\n if (mountedSlotsHeader) {\n headers.set(VINEXT_MOUNTED_SLOTS_HEADER, mountedSlotsHeader);\n }\n // Distinguish the same visible URL when it is prefetched from different\n // request contexts such as /feed vs /gallery or different mounted slots.\n const rscUrl = await createRscRequestUrl(fullHref, headers);\n const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);\n const prefetched = getPrefetchedUrls();\n if (prefetched.has(cacheKey)) {\n if (autoPrefetch.cacheForNavigation) {\n const existing = getPrefetchCache().get(cacheKey);\n if (existing?.cacheForNavigation === false) {\n existing.cacheForNavigation = true;\n }\n }\n return;\n }\n prefetched.add(cacheKey);\n prefetchRscResponse(\n rscUrl,\n fetch(rscUrl, {\n headers,\n credentials: \"include\",\n priority,\n // @ts-expect-error — purpose is a valid fetch option in some browsers\n purpose: \"prefetch\",\n }),\n interceptionContext,\n mountedSlotsHeader,\n undefined,\n {\n cacheForNavigation: autoPrefetch.cacheForNavigation,\n optimisticRouteShell: isOptimisticRouteShellPrefetch,\n },\n );\n } else if (window.__NEXT_DATA__) {\n // Pages Router prefetch. When a code-split loader is registered for\n // the target route (prod builds expose them on window via the\n // generated client entry), prefetch the data JSON + warm the page\n // chunk in parallel — matching the actual navigation, so the click\n // is a double cache hit. Otherwise (dev, or unmapped route) fall\n // back to the legacy `<link rel=\"prefetch\" as=\"document\">` so the\n // browser still preloads the HTML.\n //\n // The decision helper + prefetch action live in shims/internal/ so\n // this file does not pull in the router shim at module init time,\n // which would create a circular import and grow the SSR module graph.\n const dataTarget = resolvePagesDataNavigationTarget(fullHref, __basePath);\n if (dataTarget) {\n prefetchPagesData(dataTarget);\n } else {\n // The target is not a Pages Router route — mark it on the Pages\n // Router `components` map if it matches an App Router route in the\n // shared prefetch manifest. Mirrors Next.js's `_bfl` marker write at\n // `packages/next/src/shared/lib/router/router.ts:2525`; the Next.js\n // deploy test reads `window.next.router.components[<path>]` to\n // assert prefetch detection. See issue #1526.\n markAppRouteDetectedOnPrefetch(fullHref, __basePath);\n\n // Legacy fallback: hint the browser to preload the HTML document.\n // Used in dev (no loader map populated) and for routes not in the\n // client loader map.\n const link = document.createElement(\"link\");\n link.rel = \"prefetch\";\n link.href = fullHref;\n link.as = \"document\";\n document.head.appendChild(link);\n }\n }\n })().catch((error) => {\n console.error(\"[vinext] RSC prefetch setup error:\", error);\n });\n });\n}\n\nfunction promotePrefetchEntriesForNavigation(href: string): void {\n if (typeof window === \"undefined\") return;\n\n let target: URL;\n try {\n target = new URL(\n toBrowserNavigationHref(href, window.location.href, __basePath),\n window.location.href,\n );\n } catch {\n return;\n }\n\n for (const [cacheKey, entry] of getPrefetchCache()) {\n if (entry.optimisticRouteShell === true) continue;\n\n const [rscUrl] = cacheKey.split(\"\\0\", 1);\n let cached: URL;\n try {\n cached = new URL(rscUrl, window.location.href);\n } catch {\n continue;\n }\n stripRscCacheBustingSearchParam(cached);\n if (stripRscSuffix(cached.pathname) === target.pathname && cached.search === target.search) {\n entry.cacheForNavigation = true;\n }\n }\n}\n\n/**\n * Shared IntersectionObserver for viewport-based prefetching.\n * All Link elements use the same observer to minimize resource usage.\n */\nlet sharedObserver: IntersectionObserver | null = null;\ntype LinkPrefetchInstance = {\n href: string;\n isVisible: boolean;\n mode: LinkPrefetchMode;\n routerMode: LinkPrefetchRouterMode;\n viewportPrefetched: boolean;\n};\n\nconst observedLinkPrefetches = new WeakMap<Element, LinkPrefetchInstance>();\nconst visibleLinkPrefetches = new Set<LinkPrefetchInstance>();\n\nfunction setVisibleLinkPrefetch(instance: LinkPrefetchInstance, isVisible: boolean): void {\n instance.isVisible = isVisible;\n if (isVisible) {\n visibleLinkPrefetches.add(instance);\n if (instance.routerMode === \"pages\" && instance.viewportPrefetched) return;\n prefetchUrl(instance.href, instance.mode, \"low\");\n instance.viewportPrefetched = true;\n } else {\n visibleLinkPrefetches.delete(instance);\n }\n}\n\nfunction registerVisibleLinkPing(): void {\n if (typeof window === \"undefined\") return;\n registerNavigationRuntimeFunctions({ pingVisibleLinks: pingVisibleLinkPrefetches });\n}\n\nfunction pingVisibleLinkPrefetches(): void {\n for (const instance of visibleLinkPrefetches) {\n if (instance.isVisible && instance.routerMode === \"app\") {\n prefetchUrl(instance.href, instance.mode, \"low\");\n }\n }\n}\n\nfunction getSharedObserver(): IntersectionObserver | null {\n if (typeof window === \"undefined\" || typeof IntersectionObserver === \"undefined\") return null;\n if (sharedObserver) return sharedObserver;\n\n sharedObserver = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n const instance = observedLinkPrefetches.get(entry.target);\n if (!instance) continue;\n setVisibleLinkPrefetch(instance, entry.isIntersecting || entry.intersectionRatio > 0);\n }\n },\n {\n // Start prefetching when the link is within 250px of the viewport.\n // This gives the browser a head start before the user scrolls to it.\n rootMargin: \"250px\",\n },\n );\n\n return sharedObserver;\n}\n\nfunction getDefaultLocale(): string | undefined {\n if (typeof window !== \"undefined\") {\n return window.__VINEXT_DEFAULT_LOCALE__;\n }\n return getI18nContext()?.defaultLocale;\n}\n\nfunction getCurrentLocale(): string | undefined {\n if (typeof window !== \"undefined\") {\n return getCurrentBrowserLocale({\n basePath: __basePath,\n domainLocales: getDomainLocales(),\n hostname: getCurrentHostname(),\n });\n }\n return getI18nContext()?.locale;\n}\n\nfunction getDomainLocales(): readonly DomainLocale[] | undefined {\n if (typeof window !== \"undefined\") {\n return (window.__NEXT_DATA__ as VinextNextData | undefined)?.domainLocales;\n }\n return getI18nContext()?.domainLocales;\n}\n\nfunction getCurrentHostname(): string | undefined {\n if (typeof window !== \"undefined\") return window.location.hostname;\n return getI18nContext()?.hostname;\n}\n\nfunction getDomainLocaleHref(href: string, locale: string): string | undefined {\n // Only cross-domain locale switches need a special absolute URL here.\n // Same-domain cases fall back to the standard locale-prefix logic below.\n return getDomainLocaleUrl(href, locale, {\n basePath: __basePath,\n currentHostname: getCurrentHostname(),\n domainItems: getDomainLocales(),\n });\n}\n\nfunction addLocalePrefixForRoot(href: string, locale: string): string | undefined {\n if (href !== \"/\" && !href.startsWith(\"/?\") && !href.startsWith(\"/#\")) {\n return undefined;\n }\n\n let parsed: URL;\n try {\n parsed = new URL(href, \"http://vinext.local\");\n } catch {\n return undefined;\n }\n\n if (parsed.origin !== \"http://vinext.local\" || parsed.pathname !== \"/\") {\n return undefined;\n }\n\n return `/${locale}${parsed.search}${parsed.hash}`;\n}\n\n/**\n * Apply locale prefix to a URL path based on the locale prop.\n * - locale=\"fr\" → prepend /fr (unless it already has a locale prefix)\n * - locale={false} → use the href as-is (no locale prefix, link to default)\n * - locale=undefined → use current locale (href as-is in most cases)\n */\nfunction applyLocaleToHref(href: string, locale: string | false | undefined): string {\n if (locale === false) {\n // Explicit false: no locale prefix\n return href;\n }\n\n const resolvedLocale = locale ?? getCurrentLocale();\n if (resolvedLocale === undefined) {\n return href;\n }\n\n // Absolute and protocol-relative URLs must not be prefixed — locale\n // only applies to local paths.\n if (isAbsoluteOrProtocolRelativeUrl(href)) {\n return href;\n }\n\n const domainLocaleHref = getDomainLocaleHref(href, resolvedLocale);\n if (domainLocaleHref) {\n return domainLocaleHref;\n }\n\n const defaultLocale = getDefaultLocale() ?? \"\";\n if (resolvedLocale.toLowerCase() === defaultLocale.toLowerCase()) {\n const localeRootHref = addLocalePrefixForRoot(href, resolvedLocale);\n if (localeRootHref) return localeRootHref;\n }\n\n return addLocalePrefix(href, resolvedLocale, defaultLocale);\n}\n\nconst Link = forwardRef<HTMLAnchorElement, LinkProps>(function Link(\n {\n href,\n as,\n replace = false,\n prefetch: prefetchProp,\n scroll = true,\n shallow = false,\n children: childrenProp,\n onClick,\n onMouseEnter,\n onTouchStart,\n onNavigate,\n unstable_dynamicOnHover = false,\n legacyBehavior = false,\n passHref = false,\n ...rest\n },\n forwardedRef,\n) {\n // Extract locale from rest props\n const { locale, ...restWithoutLocale } = rest;\n\n // Next.js parity: in legacyBehavior, a string or number child is wrapped in\n // a plain <a> so the cloneElement path below has an element to clone. The\n // wrapper anchor receives the forwarded href + handlers from Link.\n // Ported from Next.js: packages/next/src/client/link.tsx (around line 334)\n // https://github.com/vercel/next.js/blob/canary/packages/next/src/client/link.tsx\n let children: React.ReactNode = childrenProp;\n if (legacyBehavior && (typeof childrenProp === \"string\" || typeof childrenProp === \"number\")) {\n children = React.createElement(\"a\", null, childrenProp);\n }\n\n // If `as` is provided, use it as the actual URL (legacy Next.js pattern\n // where href is a route pattern like \"/user/[id]\" and as is \"/user/1\")\n const rawResolvedHref = as ?? resolveHref(href);\n\n // Mirror Next.js: emit a console.error when the href contains repeated\n // forward-slashes (e.g. \"/foo//bar\") or backslashes, and then normalize the\n // href so navigation targets the collapsed path rather than the raw one.\n // See packages/next/src/client/resolve-href.ts.\n const resolvedHref =\n typeof rawResolvedHref === \"string\"\n ? warnAndNormalizeRepeatedSlashesInHref(rawResolvedHref)\n : rawResolvedHref;\n\n const isDangerous = typeof resolvedHref === \"string\" && isDangerousScheme(resolvedHref);\n\n // Apply locale prefix if specified (safe even for dangerous hrefs since we\n // won't use the result when isDangerous is true)\n const localizedHref = applyLocaleToHref(isDangerous ? \"/\" : resolvedHref, locale);\n // Normalise trailing slash to match `trailingSlash` config so that rendered\n // hrefs avoid the redirect bounce. Mirrors Next.js's `addLocale`/`addBasePath`,\n // both of which run `normalizePathTrailingSlash` after prefixing — we apply\n // it once after locale prefixing (for prefetch/navigation paths that bypass\n // basePath) and again after `withBasePath` for the rendered `href` attribute.\n const normalizedHref = normalizePathTrailingSlash(localizedHref, __trailingSlash);\n // Full href with basePath for browser URLs and fetches, normalised again so\n // that combining a non-empty basePath with the bare root (`/`) still\n // produces a canonical href under `trailingSlash: false` (e.g. `/foo`\n // rather than `/foo/`).\n const fullHref = normalizePathTrailingSlash(\n withBasePath(normalizedHref, __basePath),\n __trailingSlash,\n );\n\n // Track pending state for useLinkStatus()\n const [pending, setPending] = useState(false);\n const mountedRef = useRef(true);\n useEffect(() => {\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n };\n }, []);\n\n // Prefetching: observe the element when it enters the viewport.\n // In App Router, null/undefined/\"auto\" is automatic prefetch and true opts\n // into a full RSC prefetch, matching Next.js's public prefetch contract.\n const internalRef = useRef<HTMLAnchorElement | null>(null);\n const prefetchMode = resolveLinkPrefetchMode(prefetchProp, isDangerous);\n const shouldViewportPrefetch = canLinkPrefetch({\n nodeEnv: process.env.NODE_ENV,\n prefetch: prefetchProp,\n isDangerous,\n });\n\n const setRefs = useCallback(\n (node: HTMLAnchorElement | null) => {\n internalRef.current = node;\n if (typeof forwardedRef === \"function\") forwardedRef(node);\n else if (forwardedRef)\n (forwardedRef as React.MutableRefObject<HTMLAnchorElement | null>).current = node;\n },\n [forwardedRef],\n );\n\n useEffect(() => {\n if (!shouldViewportPrefetch || typeof window === \"undefined\") return;\n const node = internalRef.current;\n if (!node) return;\n\n const hrefToPrefetch = getLinkPrefetchHref({\n href: normalizedHref,\n basePath: __basePath,\n currentOrigin: window.location.origin,\n });\n if (hrefToPrefetch == null) return;\n\n const observer = getSharedObserver();\n if (!observer) return;\n\n registerVisibleLinkPing();\n const instance: LinkPrefetchInstance = {\n href: hrefToPrefetch,\n isVisible: false,\n mode: prefetchMode,\n routerMode: getLinkPrefetchRouterMode(),\n viewportPrefetched: false,\n };\n observedLinkPrefetches.set(node, instance);\n observer.observe(node);\n\n return () => {\n observer.unobserve(node);\n observedLinkPrefetches.delete(node);\n visibleLinkPrefetches.delete(instance);\n };\n }, [shouldViewportPrefetch, prefetchMode, normalizedHref]);\n\n const prefetchOnIntent = useCallback(() => {\n if (\n !canLinkIntentPrefetch({\n nodeEnv: process.env.NODE_ENV,\n prefetch: prefetchProp,\n isDangerous,\n routerMode: getLinkPrefetchRouterMode(),\n })\n ) {\n return;\n }\n const intentMode = unstable_dynamicOnHover ? \"full\" : prefetchMode;\n if (unstable_dynamicOnHover && internalRef.current) {\n const instance = observedLinkPrefetches.get(internalRef.current);\n if (instance) {\n instance.mode = \"full\";\n }\n promotePrefetchEntriesForNavigation(normalizedHref);\n }\n prefetchUrl(normalizedHref, intentMode, \"high\");\n }, [prefetchProp, isDangerous, prefetchMode, normalizedHref, unstable_dynamicOnHover]);\n\n const handleMouseEnter = useCallback(\n (e: MouseEvent<HTMLAnchorElement>) => {\n onMouseEnter?.(e);\n prefetchOnIntent();\n },\n [onMouseEnter, prefetchOnIntent],\n );\n\n const handleTouchStart = useCallback(\n (e: TouchEvent<HTMLAnchorElement>) => {\n onTouchStart?.(e);\n prefetchOnIntent();\n },\n [onTouchStart, prefetchOnIntent],\n );\n\n const handleClick = async (\n e: MouseEvent<HTMLAnchorElement>,\n options: { skipLinkOnClick?: boolean } = {},\n ) => {\n // In legacyBehavior, the onClick prop on <Link> itself is ignored — the\n // child's onClick is the one that runs (and Next.js even warns when\n // `onClick` is passed to <Link> alongside `legacyBehavior`). Skip the\n // preamble that calls Link's own onClick when invoked from that path.\n // See: .nextjs-ref/packages/next/src/client/link.tsx (legacyBehavior branch).\n if (!options.skipLinkOnClick && onClick) onClick(e);\n if (e.defaultPrevented) return;\n\n // Native download links must keep the browser's default behavior.\n if (e.currentTarget.hasAttribute(\"download\")) {\n return;\n }\n\n // Only intercept left clicks without modifiers (standard link behavior)\n if (e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) {\n return;\n }\n\n // Don't intercept links with target (e.g. target=\"_blank\")\n if (e.currentTarget.target && e.currentTarget.target !== \"_self\") {\n return;\n }\n\n // External links: let the browser handle it.\n // Same-origin absolute URLs (e.g. http://localhost:3000/about) are\n // normalized to local paths so they get client-side navigation.\n let navigateHref = normalizedHref;\n if (isAbsoluteOrProtocolRelativeUrl(resolvedHref)) {\n const localPath = toSameOriginAppPath(resolvedHref, __basePath);\n if (localPath == null) {\n // Truly external. Mirror Next.js `linkClicked`: when `replace` is set\n // we have to take over because the browser's default click navigation\n // pushes to history rather than replacing the current entry.\n // See `.nextjs-ref/packages/next/src/client/link.tsx` `linkClicked`.\n if (replace) {\n e.preventDefault();\n window.location.replace(resolvedHref);\n }\n return;\n }\n navigateHref = localPath;\n }\n\n e.preventDefault();\n\n // Resolve relative hrefs (#hash, ?query) against the current URL once so\n // onNavigate and the actual navigation target stay in sync.\n const absoluteHref = resolveRelativeHref(navigateHref, window.location.href, __basePath);\n const absoluteFullHref = toBrowserNavigationHref(\n navigateHref,\n window.location.href,\n __basePath,\n );\n\n // Call onNavigate callback if provided (Next.js 16 View Transitions support)\n if (onNavigate) {\n try {\n const navUrl = new URL(absoluteFullHref, window.location.origin);\n let prevented = false;\n const navEvent: NavigateEvent = {\n url: navUrl,\n preventDefault() {\n prevented = true;\n },\n get defaultPrevented() {\n return prevented;\n },\n };\n onNavigate(navEvent);\n // If the callback called preventDefault(), skip Link's default navigation.\n // The callback is responsible for its own navigation (e.g. via View Transitions API).\n if (navEvent.defaultPrevented) {\n return;\n }\n } catch {\n // Ignore URL parsing errors for relative/hash hrefs\n }\n }\n\n // App Router: delegate to navigateClientSide which handles scroll save,\n // hash-only changes, RSC fetch, and two-phase URL commit.\n if (getNavigationRuntime()?.functions.navigate) {\n setPending(true);\n React.startTransition(() => {\n void navigateClientSide(navigateHref, replace ? \"replace\" : \"push\", scroll, true).finally(\n () => {\n if (mountedRef.current) setPending(false);\n },\n );\n });\n return;\n } else {\n // Next.js only consumes onRouterTransitionStart in the App Router.\n // Pages Router still executes instrumentation-client side effects\n // during startup, but it does not invoke the named export on navigation.\n // Pages Router: use the Router singleton\n try {\n const routerModule = await import(\"next/router\");\n const Router = routerModule.default;\n await navigatePagesRouterLink(Router, {\n href: absoluteHref,\n replace,\n scroll,\n shallow,\n locale,\n });\n } catch {\n // Fallback to hard navigation if router fails\n if (replace) {\n window.history.replaceState({}, \"\", absoluteFullHref);\n } else {\n window.history.pushState({}, \"\", absoluteFullHref);\n }\n window.dispatchEvent(new PopStateEvent(\"popstate\"));\n }\n }\n };\n\n const anchorProps = restWithoutLocale;\n\n const linkStatusValue = React.useMemo(() => ({ pending }), [pending]);\n\n // Block dangerous URI schemes (javascript:, data:, vbscript:).\n // Render an inert <a> without href to prevent XSS while preserving\n // styling, refs, and developer event handlers like onClick.\n // This check is placed after all hooks to satisfy the Rules of Hooks.\n if (isDangerous) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`<Link> blocked dangerous href: ${resolvedHref}`);\n }\n // Match Next.js parity: when a user clicks a Link whose href has a\n // dangerous scheme, emit the same `console.error` that Next.js surfaces\n // via React's event-handler runtime when `router.push` throws.\n // Ported from Next.js: test/e2e/app-dir/javascript-urls/javascript-urls.test.ts\n // https://github.com/vercel/next.js/blob/canary/test/e2e/app-dir/javascript-urls/javascript-urls.test.ts\n const handleDangerousClick = (event: MouseEvent<HTMLAnchorElement>): void => {\n if (onClick) onClick(event);\n reportBlockedDangerousNavigation();\n };\n // In legacyBehavior, clone the child instead of wrapping it in our own\n // <a>. Otherwise the dangerous-href branch would still produce nested\n // anchors. We do not forward the dangerous href to the child — Next.js's\n // safety guarantee is that the navigation never happens; the child can\n // keep its own (sanitized) href if it wants.\n if (legacyBehavior) {\n const child = React.Children.only(children) as React.ReactElement<{\n onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;\n ref?: React.Ref<HTMLAnchorElement>;\n }>;\n const childOnClick = child.props.onClick;\n const childRef = child.props.ref;\n const setDangerousRefs = (node: HTMLAnchorElement | null): void => {\n internalRef.current = node;\n if (typeof childRef === \"function\") {\n childRef(node);\n } else if (childRef) {\n (childRef as React.MutableRefObject<HTMLAnchorElement | null>).current = node;\n }\n };\n return (\n <LinkStatusContext.Provider value={linkStatusValue}>\n {React.cloneElement(child, {\n ref: setDangerousRefs,\n onClick: (event: MouseEvent<HTMLAnchorElement>) => {\n if (childOnClick) childOnClick(event);\n reportBlockedDangerousNavigation();\n },\n })}\n </LinkStatusContext.Provider>\n );\n }\n return (\n <LinkStatusContext.Provider value={linkStatusValue}>\n <a\n ref={setRefs}\n onClick={handleDangerousClick}\n onMouseEnter={handleMouseEnter}\n onTouchStart={handleTouchStart}\n {...anchorProps}\n >\n {children}\n </a>\n </LinkStatusContext.Provider>\n );\n }\n\n // Next.js parity: in legacyBehavior, forward href/handlers to the single\n // child via React.cloneElement instead of wrapping in our own <a>. This\n // avoids the nested-anchor markup that broke onClick propagation and\n // produced duplicated/hidden child content (issue #1469).\n //\n // Ported from Next.js: packages/next/src/client/link.tsx (around line 499)\n // https://github.com/vercel/next.js/blob/canary/packages/next/src/client/link.tsx\n if (legacyBehavior) {\n const child = React.Children.only(children) as React.ReactElement<{\n href?: string;\n ref?: React.Ref<HTMLAnchorElement>;\n onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;\n onMouseEnter?: (event: MouseEvent<HTMLAnchorElement>) => void;\n onTouchStart?: (event: TouchEvent<HTMLAnchorElement>) => void;\n }>;\n if (process.env.NODE_ENV !== \"production\") {\n if (onClick) {\n console.warn(\n `\"onClick\" was passed to <Link> with \\`href\\` of \\`${resolveHref(href)}\\` but \"legacyBehavior\" was set. The legacy behavior requires onClick be set on the child of next/link`,\n );\n }\n if (onMouseEnter) {\n console.warn(\n `\"onMouseEnter\" was passed to <Link> with \\`href\\` of \\`${resolveHref(href)}\\` but \"legacyBehavior\" was set. The legacy behavior requires onMouseEnter be set on the child of next/link`,\n );\n }\n }\n const childPropsExisting = child.props;\n // Use `'href' in props` (matches Next.js) so `href={undefined}` on the\n // child is treated as \"the child owns its href\" — we won't overwrite it.\n const childHasOwnHref = child.type === \"a\" ? \"href\" in childPropsExisting : false;\n // Match Next.js: forward href when `passHref` is set OR the child is a\n // plain <a> that does not already have an href. Otherwise, leave the\n // child's href alone.\n const shouldForwardHref = passHref || (child.type === \"a\" && !childHasOwnHref);\n const childOnClick = childPropsExisting.onClick;\n const childOnMouseEnter = childPropsExisting.onMouseEnter;\n const childOnTouchStart = childPropsExisting.onTouchStart;\n // Mirror Next.js: in legacy mode, the ref source is the child's own\n // ref (e.g. `<a ref={myRef}>`), not Link's `forwardedRef`. In React 19\n // `ref` is a regular prop on the element. Merge with our intersection\n // observer ref via `setRefs` so prefetching still works.\n const childRef = childPropsExisting.ref;\n const setLegacyRefs = (node: HTMLAnchorElement | null): void => {\n internalRef.current = node;\n if (typeof childRef === \"function\") {\n childRef(node);\n } else if (childRef) {\n (childRef as React.MutableRefObject<HTMLAnchorElement | null>).current = node;\n }\n };\n const clonedProps: Record<string, unknown> = {\n ref: setLegacyRefs,\n onClick: (event: MouseEvent<HTMLAnchorElement>) => {\n // Next.js parity: only the child's onClick runs in legacy mode. The\n // onClick prop on <Link> is intentionally ignored (and a dev warning\n // surfaces it above).\n if (childOnClick) childOnClick(event);\n if (event.defaultPrevented) return;\n void handleClick(event, { skipLinkOnClick: true });\n },\n onMouseEnter: (event: MouseEvent<HTMLAnchorElement>) => {\n if (childOnMouseEnter) childOnMouseEnter(event);\n prefetchOnIntent();\n },\n onTouchStart: (event: TouchEvent<HTMLAnchorElement>) => {\n if (childOnTouchStart) childOnTouchStart(event);\n prefetchOnIntent();\n },\n };\n if (shouldForwardHref) {\n clonedProps.href = fullHref;\n }\n return (\n <LinkStatusContext.Provider value={linkStatusValue}>\n {React.cloneElement(child, clonedProps)}\n </LinkStatusContext.Provider>\n );\n }\n\n return (\n <LinkStatusContext.Provider value={linkStatusValue}>\n <a\n ref={setRefs}\n href={fullHref}\n onClick={(event) => {\n void handleClick(event);\n }}\n onMouseEnter={handleMouseEnter}\n onTouchStart={handleTouchStart}\n {...anchorProps}\n >\n {children}\n </a>\n </LinkStatusContext.Provider>\n );\n});\n\nexport default Link;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"metadata.js","names":[],"sources":["../../src/shims/metadata.tsx"],"sourcesContent":["/**\n * Metadata support for App Router.\n *\n * Handles `export const metadata` and `export async function generateMetadata()`.\n * Resolves metadata from layouts and pages (pages override layouts).\n */\nimport React from \"react\";\nimport { makeThenableParams } from \"./thenable-params.js\";\nimport { isAbsoluteOrProtocolRelativeUrl } from \"./url-utils.js\";\n\n// ---------------------------------------------------------------------------\n// Viewport types and resolution\n// ---------------------------------------------------------------------------\n\nexport type Viewport = {\n /** Viewport width (default: \"device-width\") */\n width?: string | number;\n /** Viewport height */\n height?: string | number;\n /** Initial scale */\n initialScale?: number;\n /** Minimum scale */\n minimumScale?: number;\n /** Maximum scale */\n maximumScale?: number;\n /** Whether user can scale */\n userScalable?: boolean;\n /** Theme color — single color or array of { media, color } */\n themeColor?: string | Array<{ media?: string; color: string }>;\n /** Color scheme: 'light' | 'dark' | 'light dark' | 'normal' */\n colorScheme?: string;\n};\n\n/**\n * Resolve viewport config from a module. Handles both static `viewport` export\n * and async `generateViewport()` function.\n */\nexport async function resolveModuleViewport(\n mod: Record<string, unknown>,\n params: Record<string, string | string[]>,\n): Promise<Viewport | null> {\n if (typeof mod.generateViewport === \"function\") {\n const asyncParams = makeThenableParams(params);\n return await mod.generateViewport({ params: asyncParams });\n }\n if (mod.viewport && typeof mod.viewport === \"object\") {\n return mod.viewport as Viewport;\n }\n return null;\n}\n\n/**\n * Merge viewport configs from multiple sources (layouts + page).\n * Later entries override earlier ones.\n */\nexport const DEFAULT_VIEWPORT: Viewport = {\n width: \"device-width\",\n initialScale: 1,\n};\n\nexport function mergeViewport(viewportList: Viewport[]): Viewport {\n const merged: Viewport = { ...DEFAULT_VIEWPORT };\n for (const vp of viewportList) {\n Object.assign(merged, vp);\n }\n return merged;\n}\n\n/**\n * React component that renders viewport meta tags into <head>.\n */\nexport function ViewportHead({ viewport }: { viewport: Viewport }) {\n const elements: React.ReactElement[] = [];\n let key = 0;\n\n // Build viewport content string\n const parts: string[] = [];\n if (viewport.width !== undefined) parts.push(`width=${viewport.width}`);\n if (viewport.height !== undefined) parts.push(`height=${viewport.height}`);\n if (viewport.initialScale !== undefined) parts.push(`initial-scale=${viewport.initialScale}`);\n if (viewport.minimumScale !== undefined) parts.push(`minimum-scale=${viewport.minimumScale}`);\n if (viewport.maximumScale !== undefined) parts.push(`maximum-scale=${viewport.maximumScale}`);\n if (viewport.userScalable !== undefined)\n parts.push(`user-scalable=${viewport.userScalable ? \"yes\" : \"no\"}`);\n\n if (parts.length > 0) {\n elements.push(<meta key={key++} name=\"viewport\" content={parts.join(\", \")} />);\n }\n\n // Theme color\n if (viewport.themeColor) {\n if (typeof viewport.themeColor === \"string\") {\n elements.push(<meta key={key++} name=\"theme-color\" content={viewport.themeColor} />);\n } else if (Array.isArray(viewport.themeColor)) {\n for (const entry of viewport.themeColor) {\n elements.push(\n <meta\n key={key++}\n name=\"theme-color\"\n content={entry.color}\n {...(entry.media ? { media: entry.media } : {})}\n />,\n );\n }\n }\n }\n\n // Color scheme\n if (viewport.colorScheme) {\n elements.push(<meta key={key++} name=\"color-scheme\" content={viewport.colorScheme} />);\n }\n\n return <>{elements}</>;\n}\n\n// ---------------------------------------------------------------------------\n// Metadata types and resolution\n// ---------------------------------------------------------------------------\n\nexport type Metadata = {\n title?: string | { default?: string; template?: string; absolute?: string };\n description?: string;\n generator?: string;\n applicationName?: string;\n referrer?: string;\n keywords?: string | string[];\n authors?: Array<{ name?: string; url?: string }> | { name?: string; url?: string };\n creator?: string;\n publisher?: string;\n robots?:\n | string\n | {\n index?: boolean;\n follow?: boolean;\n googleBot?: string | { index?: boolean; follow?: boolean; [key: string]: unknown };\n [key: string]: unknown;\n };\n openGraph?: {\n title?: string;\n description?: string;\n url?: string | URL;\n siteName?: string;\n images?: string | URL | SocialImageDescriptor | Array<string | URL | SocialImageDescriptor>;\n videos?: Array<{ url: string | URL; width?: number; height?: number }>;\n audio?: Array<{ url: string | URL }>;\n locale?: string;\n type?: string;\n publishedTime?: string;\n modifiedTime?: string;\n authors?: string[];\n };\n twitter?: {\n card?: string;\n site?: string;\n siteId?: string;\n title?: string;\n description?: string;\n images?: string | URL | SocialImageDescriptor | Array<string | URL | SocialImageDescriptor>;\n creator?: string;\n creatorId?: string;\n players?: TwitterPlayerDescriptor | TwitterPlayerDescriptor[];\n app?: TwitterAppDescriptor;\n };\n icons?: IconsMetadata;\n manifest?: string | URL;\n alternates?: {\n canonical?: string | URL;\n languages?: Record<string, string | URL>;\n media?: Record<string, string | URL>;\n types?: Record<string, string | URL>;\n };\n verification?: {\n google?: string;\n yahoo?: string;\n yandex?: string;\n other?: Record<string, string | string[]>;\n };\n metadataBase?: URL | null;\n appleWebApp?: {\n capable?: boolean;\n title?: string;\n statusBarStyle?: string;\n startupImage?: string | Array<{ url: string; media?: string }>;\n };\n formatDetection?: {\n email?: boolean;\n address?: boolean;\n telephone?: boolean;\n };\n category?: string;\n itunes?: {\n appId: string;\n appArgument?: string;\n };\n appLinks?: {\n ios?: AppLinksApple | AppLinksApple[];\n iphone?: AppLinksApple | AppLinksApple[];\n ipad?: AppLinksApple | AppLinksApple[];\n android?: AppLinksAndroid | AppLinksAndroid[];\n windows_phone?: AppLinksWindows | AppLinksWindows[];\n windows?: AppLinksWindows | AppLinksWindows[];\n windows_universal?: AppLinksWindows | AppLinksWindows[];\n web?: AppLinksWeb | AppLinksWeb[];\n };\n other?: Record<string, string | string[]>;\n [key: string]: unknown;\n};\n\ntype AppLinksApple = {\n url: string | URL;\n app_store_id?: string | number;\n app_name?: string;\n};\n\ntype AppLinksAndroid = {\n package: string;\n url?: string | URL;\n class?: string;\n app_name?: string;\n};\n\ntype AppLinksWindows = {\n url: string | URL;\n app_id?: string;\n app_name?: string;\n};\n\ntype AppLinksWeb = {\n url: string | URL;\n should_fallback?: boolean;\n};\n\ntype TwitterPlayerDescriptor = {\n playerUrl: string | URL;\n streamUrl: string | URL;\n width: number;\n height: number;\n};\n\ntype TwitterAppDescriptor = {\n id: {\n iphone?: string | number;\n ipad?: string | number;\n googleplay?: string;\n };\n url?: {\n iphone?: string | URL;\n ipad?: string | URL;\n googleplay?: string | URL;\n };\n name?: string;\n};\n\ntype SocialImageDescriptor = {\n url: string | URL;\n alt?: string;\n width?: number;\n height?: number;\n type?: string;\n};\n\ntype IconDescriptor = {\n url: string | URL;\n sizes?: string;\n type?: string;\n media?: string;\n};\n\ntype AppleIconDescriptor = {\n url: string | URL;\n sizes?: string;\n type?: string;\n};\n\ntype IconInput = string | URL | IconDescriptor;\ntype AppleIconInput = string | URL | AppleIconDescriptor;\n\ntype OtherIconDescriptor = { rel: string; url: string | URL; sizes?: string; type?: string };\n\ntype IconsMap = {\n icon?: IconInput | IconInput[];\n shortcut?: string | URL | Array<string | URL>;\n apple?: AppleIconInput | AppleIconInput[];\n // Next.js accepts a single descriptor or an array (see resolveIcons in\n // .nextjs-ref/packages/next/src/lib/metadata/resolvers/resolve-icons.ts —\n // values pass through resolveAsArrayOrUndefined before iteration).\n other?: OtherIconDescriptor | OtherIconDescriptor[];\n};\n\ntype IconsMetadata = IconInput | IconInput[] | IconsMap;\n\nexport type MetadataMergeEntry = {\n contributesTitle?: boolean;\n isPage?: boolean;\n metadata: Metadata;\n};\n\n/**\n * Merge metadata from multiple sources (layouts + page).\n *\n * The list is ordered [rootLayout, nestedLayout, ..., page].\n * Title template from layouts applies to the page title but NOT to\n * the segment that defines the template itself. `title.absolute`\n * skips all templates. `title.default` is the fallback when no\n * child provides a title.\n *\n * Shallow merge: later entries override earlier ones (per Next.js docs).\n */\nexport function mergeMetadata(metadataList: Metadata[]): Metadata {\n const merged = mergeMetadataEntries(\n metadataList.map((metadata, index) => ({\n isPage: index === metadataList.length - 1,\n metadata,\n })),\n );\n return postProcessMetadata(merged);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === \"object\" && value !== null && !Array.isArray(value) && !(value instanceof URL)\n );\n}\n\nfunction isOtherMetadata(value: unknown): value is NonNullable<Metadata[\"other\"]> {\n if (!isPlainObject(value)) return false;\n return Object.values(value).every((item) => {\n if (typeof item === \"string\") return true;\n return Array.isArray(item) && item.every((nestedItem) => typeof nestedItem === \"string\");\n });\n}\n\n/**\n * Extract a plain string title from a metadata title value.\n */\nfunction resolveStringTitle(title: Metadata[\"title\"]): string | undefined {\n if (typeof title === \"string\") return title;\n if (title && typeof title === \"object\") {\n return title.absolute ?? title.default ?? undefined;\n }\n return undefined;\n}\n\nfunction applyTitleTemplate(template: string | undefined, title: string): string {\n return template ? template.replace(/%s/g, title) : title;\n}\n\nfunction resolveTitle(title: Metadata[\"title\"], stashedTemplate: string | undefined) {\n if (typeof title === \"string\") {\n return applyTitleTemplate(stashedTemplate, title);\n }\n\n if (title && typeof title === \"object\") {\n let resolved =\n title.default === undefined ? undefined : applyTitleTemplate(stashedTemplate, title.default);\n\n if (title.absolute) {\n resolved = title.absolute;\n }\n\n return resolved;\n }\n\n return undefined;\n}\n\n/**\n * Post-process merged metadata to cross-fill openGraph and Twitter fields.\n *\n * Next.js runs this once after all layouts/pages and file-based metadata\n * have been resolved. When openGraph exists, it auto-fills missing\n * twitter:title/description/images from openGraph (falling back to root\n * metadata title/description). Existing openGraph/twitter objects also inherit\n * missing title/description from root metadata.\n *\n * Ported from Next.js:\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/lib/metadata/resolve-metadata.ts\n */\nexport function postProcessMetadata(merged: Metadata): Metadata {\n // Shallow-clone to avoid mutating the caller's object.\n // Both current call sites (mergeMetadata, resolveAppPageHead) pass\n // freshly-constructed objects, but this guards against future misuse.\n const result = { ...merged };\n\n const resolvedTitle = resolveStringTitle(result.title);\n\n // openGraph inherits title/description from root metadata when absent\n if (result.openGraph) {\n const og = { ...result.openGraph };\n if (!og.title && resolvedTitle) {\n og.title = resolvedTitle;\n }\n if (!og.description && result.description) {\n og.description = result.description;\n }\n result.openGraph = og;\n }\n\n if (result.openGraph) {\n const autoFill: {\n title?: string;\n description?: string;\n images?: NonNullable<Metadata[\"twitter\"]>[\"images\"];\n } = {};\n\n const existingTwitter = result.twitter;\n const hasTwTitle = existingTwitter ? Boolean(existingTwitter.title) : false;\n const hasTwDescription = existingTwitter ? Boolean(existingTwitter.description) : false;\n const hasTwImages = existingTwitter\n ? Object.prototype.hasOwnProperty.call(existingTwitter, \"images\") &&\n Boolean(existingTwitter.images)\n : false;\n\n if (!hasTwTitle) {\n if (result.openGraph.title) {\n autoFill.title = result.openGraph.title;\n } else if (resolvedTitle) {\n autoFill.title = resolvedTitle;\n }\n }\n if (!hasTwDescription) {\n autoFill.description = result.openGraph.description || result.description || undefined;\n }\n if (!hasTwImages && result.openGraph.images !== undefined) {\n autoFill.images = result.openGraph.images;\n }\n\n if (Object.keys(autoFill).length > 0) {\n if (existingTwitter) {\n result.twitter = { ...existingTwitter, ...autoFill };\n } else {\n result.twitter = autoFill;\n }\n }\n }\n\n if (result.twitter) {\n const tw = { ...result.twitter };\n if (!tw.title && resolvedTitle) {\n tw.title = resolvedTitle;\n }\n if (!tw.description && result.description) {\n tw.description = result.description;\n }\n result.twitter = tw;\n }\n\n // If twitter exists (either originally or via auto-fill), ensure card type is set.\n // Next.js resolveTwitter defaults: summary_large_image when images present, else summary.\n if (result.twitter) {\n const tw = { ...result.twitter };\n if (!tw.card) {\n const images = tw.images;\n const hasImages = Array.isArray(images) ? images.length > 0 : Boolean(images);\n tw.card = hasImages ? \"summary_large_image\" : \"summary\";\n }\n result.twitter = tw;\n }\n\n return result;\n}\n\n/**\n * Merge metadata from multiple sources (layouts + page).\n *\n * The list is ordered [rootLayout, nestedLayout, ..., page].\n * Title template from layouts applies to the page title but NOT to\n * the segment that defines the template itself. `title.absolute`\n * skips all templates. `title.default` is the fallback when no\n * child provides a title.\n *\n * For top-level keys, later entries override earlier ones. `other` custom meta\n * tags are the exception: Next.js merges those across segments.\n */\nexport function mergeMetadataEntries(entries: readonly MetadataMergeEntry[]): Metadata {\n if (entries.length === 0) return {};\n\n const merged: Metadata = {};\n\n // Track the most recent ancestor title template from layouts (not from page).\n let parentTemplate: string | undefined;\n\n for (const entry of entries) {\n const meta = entry.metadata;\n const isPage = Boolean(entry.isPage);\n const contributesTitle = entry.contributesTitle !== false;\n\n // Merge non-title keys\n for (const key of Object.keys(meta)) {\n if (key === \"title\") continue; // Handle title separately below\n\n const incoming = meta[key];\n const existing = merged[key];\n\n if (key === \"other\" && isOtherMetadata(existing) && isOtherMetadata(incoming)) {\n merged.other = { ...existing, ...incoming };\n } else {\n // Plain replacement for everything else\n merged[key] = incoming;\n }\n }\n\n // Title resolution\n if (contributesTitle && meta.title !== undefined) {\n merged.title = resolveTitle(meta.title, parentTemplate);\n }\n\n // Collect the current layout template after resolving its own title so\n // title.default is wrapped by the ancestor template, not by its own template.\n if (\n contributesTitle &&\n !isPage &&\n meta.title &&\n typeof meta.title === \"object\" &&\n meta.title.template\n ) {\n parentTemplate = meta.title.template;\n }\n }\n\n return merged;\n}\n\n/**\n * Resolve metadata from a module. Handles both static `metadata` export\n * and async `generateMetadata()` function.\n *\n * @param parent - A Promise that resolves to the accumulated (merged) metadata\n * from all ancestor segments. Passed as the second argument to\n * `generateMetadata()`, matching Next.js's eager-execution-with-serial-\n * resolution approach. If not provided, defaults to a promise that resolves\n * to an empty object (so `await parent` never throws).\n */\nexport async function resolveModuleMetadata(\n mod: Record<string, unknown>,\n params: Record<string, string | string[]> = {},\n searchParams?: Record<string, string | string[]>,\n parent: Promise<Metadata> = Promise.resolve({}),\n): Promise<Metadata | null> {\n if (typeof mod.generateMetadata === \"function\") {\n // Next.js 16 passes params/searchParams as Promises (async pattern).\n // makeThenableParams() normalises null-prototype + preserves sync access.\n const asyncParams = makeThenableParams(params);\n const props =\n searchParams === undefined\n ? { params: asyncParams }\n : { params: asyncParams, searchParams: makeThenableParams(searchParams) };\n return await mod.generateMetadata(props, parent);\n }\n if (mod.metadata && typeof mod.metadata === \"object\") {\n return mod.metadata as Metadata;\n }\n return null;\n}\n\n/**\n * React component that renders metadata as HTML head elements.\n * Used by the RSC entry to inject into the <head>.\n */\nfunction isIconDescriptor(value: unknown): value is IconDescriptor {\n if (typeof value !== \"object\" || value === null || value instanceof URL || Array.isArray(value)) {\n return false;\n }\n const urlValue = Reflect.get(value, \"url\");\n return typeof urlValue === \"string\" || urlValue instanceof URL;\n}\n\nfunction isIconsMap(value: IconsMetadata): value is IconsMap {\n return (\n typeof value === \"object\" &&\n !(value instanceof URL) &&\n !Array.isArray(value) &&\n !isIconDescriptor(value)\n );\n}\n\nfunction normalizeUrlDescriptor<T extends { url: string | URL }>(\n value: string | URL | T,\n createDescriptor: (url: string | URL) => T,\n): T {\n if (typeof value === \"string\" || value instanceof URL) {\n return createDescriptor(value);\n }\n return value;\n}\n\nfunction normalizeUrlDescriptorEntries<T extends { url: string | URL }>(\n value: string | URL | T | Array<string | URL | T> | undefined,\n createDescriptor: (url: string | URL) => T,\n): T[] {\n if (!value) {\n return [];\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeUrlDescriptor(entry, createDescriptor));\n }\n\n return [normalizeUrlDescriptor(value, createDescriptor)];\n}\n\nfunction stringifyUrl(url: string | URL): string {\n return typeof url === \"string\" ? url : url.toString();\n}\n\nfunction createLocalMetadataBase(): URL {\n const protocol = process.env.__NEXT_EXPERIMENTAL_HTTPS ? \"https\" : \"http\";\n return new URL(`${protocol}://localhost:${process.env.PORT || 3000}`);\n}\n\nfunction getPreviewDeploymentUrl(): URL | null {\n const origin = process.env.VERCEL_BRANCH_URL || process.env.VERCEL_URL;\n return origin ? new URL(`https://${origin}`) : null;\n}\n\nfunction getProductionDeploymentUrl(): URL | null {\n const origin = process.env.VERCEL_PROJECT_PRODUCTION_URL;\n return origin ? new URL(`https://${origin}`) : null;\n}\n\nfunction getSocialImageMetadataBaseFallback(metadataBase: URL | null | undefined): URL {\n const defaultMetadataBase = createLocalMetadataBase();\n const previewDeploymentUrl = getPreviewDeploymentUrl();\n const productionDeploymentUrl = getProductionDeploymentUrl();\n\n if (process.env.NODE_ENV === \"development\") {\n return defaultMetadataBase;\n }\n\n if (\n process.env.NODE_ENV === \"production\" &&\n process.env.VERCEL_ENV === \"preview\" &&\n previewDeploymentUrl\n ) {\n return previewDeploymentUrl;\n }\n\n return metadataBase || productionDeploymentUrl || defaultMetadataBase;\n}\n\nfunction trimSlashes(value: string): string {\n return value.replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction joinMetadataPath(basePathname: string, pathname: string): string {\n if (!basePathname || basePathname === \"/\") {\n return pathname;\n }\n\n const base = trimSlashes(basePathname);\n const path = trimSlashes(pathname);\n return path ? `/${base}/${path}` : `/${base}`;\n}\n\nfunction resolveRelativeMetadataUrl(url: string, pathname: string): string {\n if (url === \".\" || url === \"./\") {\n return pathname || \"/\";\n }\n if (!url.startsWith(\"./\")) {\n return url;\n }\n\n const base = pathname === \"/\" ? \"\" : pathname.replace(/\\/+$/g, \"\");\n return `${base}/${url.slice(2)}`;\n}\n\nfunction formatResolvedMetadataUrl(url: URL): string {\n if (url.pathname === \"/\" && url.search === \"\" && url.hash === \"\") {\n return url.origin;\n }\n return url.href;\n}\n\nfunction resolveMetadataUrl(url: string | URL, metadataBase: URL | null | undefined): string {\n const value = stringifyUrl(url);\n if (isAbsoluteOrProtocolRelativeUrl(value) || !metadataBase) {\n return value;\n }\n\n try {\n return formatResolvedMetadataUrl(\n new URL(joinMetadataPath(metadataBase.pathname, value), metadataBase),\n );\n } catch {\n return value;\n }\n}\n\nfunction resolveCanonicalUrl(\n url: string | URL,\n metadataBase: URL | null | undefined,\n pathname: string,\n): string {\n if (url instanceof URL) {\n return resolveMetadataUrl(url, metadataBase);\n }\n return resolveMetadataUrl(resolveRelativeMetadataUrl(url, pathname), metadataBase);\n}\n\nfunction isSocialImageDescriptor(\n value: string | URL | SocialImageDescriptor,\n): value is SocialImageDescriptor {\n return typeof value === \"object\" && !(value instanceof URL);\n}\n\nfunction isMetadataRouteSocialImage(value: SocialImageDescriptor): boolean {\n return Reflect.get(value, \"metadataRoute\") === true;\n}\n\nfunction resolveSocialImageUrl(\n image: string | URL | SocialImageDescriptor,\n metadataBase: URL | null | undefined,\n): string {\n const imageUrl = isSocialImageDescriptor(image) ? image.url : image;\n const metadataRoute = isSocialImageDescriptor(image) && isMetadataRouteSocialImage(image);\n if (\n typeof imageUrl === \"string\" &&\n !isAbsoluteOrProtocolRelativeUrl(imageUrl) &&\n (!metadataBase || metadataRoute)\n ) {\n return resolveMetadataUrl(imageUrl, getSocialImageMetadataBaseFallback(metadataBase));\n }\n return resolveMetadataUrl(imageUrl, metadataBase);\n}\n\ntype MetadataHeadProps = {\n metadata: Metadata;\n pathname?: string;\n};\n\nfunction escapeHtmlText(value: string): string {\n return value.replaceAll(\"&\", \"&amp;\").replaceAll(\"<\", \"&lt;\").replaceAll(\">\", \"&gt;\");\n}\n\nfunction escapeHtmlAttribute(value: string): string {\n return escapeHtmlText(value).replaceAll('\"', \"&quot;\");\n}\n\nfunction renderMetadataText(node: unknown): string {\n if (node === null || node === undefined || typeof node === \"boolean\") return \"\";\n if (Array.isArray(node)) return node.map(renderMetadataText).join(\"\");\n if (typeof node === \"string\" || typeof node === \"number\" || typeof node === \"bigint\") {\n return escapeHtmlText(String(node));\n }\n return \"\";\n}\n\nfunction renderMetadataAttributes(props: object, names: readonly string[]): string {\n const attributes: string[] = [];\n for (const name of names) {\n const value = Reflect.get(props, name);\n if (value === null || value === undefined || typeof value === \"boolean\") continue;\n const htmlName = name === \"hrefLang\" ? \"hreflang\" : name;\n attributes.push(`${htmlName}=\"${escapeHtmlAttribute(String(value))}\"`);\n }\n return attributes.length > 0 ? ` ${attributes.join(\" \")}` : \"\";\n}\n\nfunction renderMetadataElementToHtml(node: unknown): string {\n if (node === null || node === undefined || typeof node === \"boolean\") return \"\";\n if (Array.isArray(node)) return node.map(renderMetadataElementToHtml).join(\"\");\n if (!React.isValidElement(node)) return renderMetadataText(node);\n\n const props = typeof node.props === \"object\" && node.props !== null ? node.props : {};\n if (node.type === React.Fragment) {\n return renderMetadataElementToHtml(Reflect.get(props, \"children\"));\n }\n if (typeof node.type !== \"string\") return \"\";\n\n switch (node.type) {\n case \"title\":\n return `<title>${renderMetadataText(Reflect.get(props, \"children\"))}</title>`;\n case \"meta\":\n return `<meta${renderMetadataAttributes(props, [\"name\", \"property\", \"content\"])}>`;\n case \"link\":\n return `<link${renderMetadataAttributes(props, [\n \"rel\",\n \"href\",\n \"hrefLang\",\n \"media\",\n \"type\",\n \"sizes\",\n ])}>`;\n default:\n return \"\";\n }\n}\n\nexport function renderMetadataToHtml(metadata: Metadata, pathname = \"/\"): string {\n return renderMetadataElementToHtml(MetadataHead({ metadata, pathname }));\n}\n\nexport function MetadataHead({ metadata, pathname = \"/\" }: MetadataHeadProps) {\n const elements: React.ReactElement[] = [];\n let key = 0;\n\n // Resolve metadataBase for URL composition\n const base = metadata.metadataBase;\n function resolveUrl(url: string | URL): string;\n function resolveUrl(url: string | URL | undefined): string | undefined;\n function resolveUrl(url: string | URL | undefined): string | undefined {\n if (!url) return undefined;\n return resolveMetadataUrl(url, base);\n }\n\n // Title\n const title =\n typeof metadata.title === \"string\"\n ? metadata.title\n : typeof metadata.title === \"object\"\n ? metadata.title.absolute || metadata.title.default\n : undefined;\n if (title) {\n elements.push(<title key={key++}>{title}</title>);\n }\n\n // Description\n if (metadata.description) {\n elements.push(<meta key={key++} name=\"description\" content={metadata.description} />);\n }\n\n // Generator\n if (metadata.generator) {\n elements.push(<meta key={key++} name=\"generator\" content={metadata.generator} />);\n }\n\n // Application name\n if (metadata.applicationName) {\n elements.push(<meta key={key++} name=\"application-name\" content={metadata.applicationName} />);\n }\n\n // Referrer\n if (metadata.referrer) {\n elements.push(<meta key={key++} name=\"referrer\" content={metadata.referrer} />);\n }\n\n // Keywords\n if (metadata.keywords) {\n const kw = Array.isArray(metadata.keywords) ? metadata.keywords.join(\",\") : metadata.keywords;\n elements.push(<meta key={key++} name=\"keywords\" content={kw} />);\n }\n\n // Authors\n if (metadata.authors) {\n const authorList = Array.isArray(metadata.authors) ? metadata.authors : [metadata.authors];\n for (const author of authorList) {\n if (author.name) {\n elements.push(<meta key={key++} name=\"author\" content={author.name} />);\n }\n if (author.url) {\n elements.push(<link key={key++} rel=\"author\" href={author.url} />);\n }\n }\n }\n\n // Creator\n if (metadata.creator) {\n elements.push(<meta key={key++} name=\"creator\" content={metadata.creator} />);\n }\n\n // Publisher\n if (metadata.publisher) {\n elements.push(<meta key={key++} name=\"publisher\" content={metadata.publisher} />);\n }\n\n // Format detection\n if (metadata.formatDetection) {\n const parts: string[] = [];\n if (metadata.formatDetection.telephone === false) parts.push(\"telephone=no\");\n if (metadata.formatDetection.address === false) parts.push(\"address=no\");\n if (metadata.formatDetection.email === false) parts.push(\"email=no\");\n if (parts.length > 0) {\n elements.push(<meta key={key++} name=\"format-detection\" content={parts.join(\", \")} />);\n }\n }\n\n // Category\n if (metadata.category) {\n elements.push(<meta key={key++} name=\"category\" content={metadata.category} />);\n }\n\n // Robots\n if (metadata.robots) {\n if (typeof metadata.robots === \"string\") {\n elements.push(<meta key={key++} name=\"robots\" content={metadata.robots} />);\n } else {\n const { googleBot, ...robotsRest } = metadata.robots;\n const robotParts: string[] = [];\n for (const [k, v] of Object.entries(robotsRest)) {\n if (v === true) robotParts.push(k);\n else if (v === false) robotParts.push(`no${k}`);\n else if (typeof v === \"string\" || typeof v === \"number\") robotParts.push(`${k}:${v}`);\n }\n if (robotParts.length > 0) {\n elements.push(<meta key={key++} name=\"robots\" content={robotParts.join(\", \")} />);\n }\n // googlebot\n if (googleBot) {\n if (typeof googleBot === \"string\") {\n elements.push(<meta key={key++} name=\"googlebot\" content={googleBot} />);\n } else {\n const gbParts: string[] = [];\n for (const [k, v] of Object.entries(googleBot)) {\n if (v === true) gbParts.push(k);\n else if (v === false) gbParts.push(`no${k}`);\n else if (typeof v === \"string\" || typeof v === \"number\") gbParts.push(`${k}:${v}`);\n }\n if (gbParts.length > 0) {\n elements.push(<meta key={key++} name=\"googlebot\" content={gbParts.join(\", \")} />);\n }\n }\n }\n }\n }\n\n // Open Graph\n if (metadata.openGraph) {\n const og = metadata.openGraph;\n if (og.title) elements.push(<meta key={key++} property=\"og:title\" content={og.title} />);\n if (og.description)\n elements.push(<meta key={key++} property=\"og:description\" content={og.description} />);\n if (og.url) elements.push(<meta key={key++} property=\"og:url\" content={resolveUrl(og.url)} />);\n if (og.siteName)\n elements.push(<meta key={key++} property=\"og:site_name\" content={og.siteName} />);\n if (og.type) elements.push(<meta key={key++} property=\"og:type\" content={og.type} />);\n if (og.locale) elements.push(<meta key={key++} property=\"og:locale\" content={og.locale} />);\n if (og.publishedTime)\n elements.push(\n <meta key={key++} property=\"article:published_time\" content={og.publishedTime} />,\n );\n if (og.modifiedTime)\n elements.push(\n <meta key={key++} property=\"article:modified_time\" content={og.modifiedTime} />,\n );\n if (og.authors) {\n for (const author of og.authors) {\n elements.push(<meta key={key++} property=\"article:author\" content={author} />);\n }\n }\n if (og.images) {\n const imgList =\n typeof og.images === \"string\" || og.images instanceof URL\n ? [{ url: og.images }]\n : Array.isArray(og.images)\n ? og.images\n : [og.images];\n for (const img of imgList) {\n elements.push(\n <meta key={key++} property=\"og:image\" content={resolveSocialImageUrl(img, base)} />,\n );\n if (typeof img !== \"string\" && !(img instanceof URL)) {\n if (img.width)\n elements.push(\n <meta key={key++} property=\"og:image:width\" content={String(img.width)} />,\n );\n if (img.height)\n elements.push(\n <meta key={key++} property=\"og:image:height\" content={String(img.height)} />,\n );\n if (img.type)\n elements.push(<meta key={key++} property=\"og:image:type\" content={img.type} />);\n if (img.alt)\n elements.push(<meta key={key++} property=\"og:image:alt\" content={img.alt} />);\n }\n }\n }\n if (og.videos) {\n for (const video of og.videos) {\n elements.push(<meta key={key++} property=\"og:video\" content={resolveUrl(video.url)} />);\n if (video.width)\n elements.push(\n <meta key={key++} property=\"og:video:width\" content={String(video.width)} />,\n );\n if (video.height)\n elements.push(\n <meta key={key++} property=\"og:video:height\" content={String(video.height)} />,\n );\n }\n }\n if (og.audio) {\n for (const audio of og.audio) {\n elements.push(<meta key={key++} property=\"og:audio\" content={resolveUrl(audio.url)} />);\n }\n }\n }\n\n // Twitter\n if (metadata.twitter) {\n const tw = metadata.twitter;\n if (tw.card) elements.push(<meta key={key++} name=\"twitter:card\" content={tw.card} />);\n if (tw.site) elements.push(<meta key={key++} name=\"twitter:site\" content={tw.site} />);\n if (tw.siteId) elements.push(<meta key={key++} name=\"twitter:site:id\" content={tw.siteId} />);\n if (tw.title) elements.push(<meta key={key++} name=\"twitter:title\" content={tw.title} />);\n if (tw.description)\n elements.push(<meta key={key++} name=\"twitter:description\" content={tw.description} />);\n if (tw.creator) elements.push(<meta key={key++} name=\"twitter:creator\" content={tw.creator} />);\n if (tw.creatorId)\n elements.push(<meta key={key++} name=\"twitter:creator:id\" content={tw.creatorId} />);\n if (tw.images) {\n const imgList =\n typeof tw.images === \"string\" || tw.images instanceof URL\n ? [tw.images]\n : Array.isArray(tw.images)\n ? tw.images\n : [tw.images];\n for (const img of imgList) {\n elements.push(\n <meta key={key++} name=\"twitter:image\" content={resolveSocialImageUrl(img, base)} />,\n );\n if (typeof img !== \"string\" && !(img instanceof URL)) {\n if (img.type) {\n elements.push(<meta key={key++} name=\"twitter:image:type\" content={img.type} />);\n }\n if (img.width) {\n elements.push(\n <meta key={key++} name=\"twitter:image:width\" content={String(img.width)} />,\n );\n }\n if (img.height) {\n elements.push(\n <meta key={key++} name=\"twitter:image:height\" content={String(img.height)} />,\n );\n }\n if (img.alt) {\n elements.push(<meta key={key++} name=\"twitter:image:alt\" content={img.alt} />);\n }\n }\n }\n }\n // Twitter player cards\n if (tw.players) {\n const players = Array.isArray(tw.players) ? tw.players : [tw.players];\n for (const player of players) {\n const playerUrl = player.playerUrl.toString();\n const streamUrl = player.streamUrl.toString();\n elements.push(<meta key={key++} name=\"twitter:player\" content={resolveUrl(playerUrl)} />);\n elements.push(\n <meta key={key++} name=\"twitter:player:stream\" content={resolveUrl(streamUrl)} />,\n );\n elements.push(\n <meta key={key++} name=\"twitter:player:width\" content={String(player.width)} />,\n );\n elements.push(\n <meta key={key++} name=\"twitter:player:height\" content={String(player.height)} />,\n );\n }\n }\n // Twitter app cards\n if (tw.app) {\n const { app } = tw;\n for (const platform of [\"iphone\", \"ipad\", \"googleplay\"] as const) {\n if (app.name) {\n elements.push(\n <meta key={key++} name={`twitter:app:name:${platform}`} content={app.name} />,\n );\n }\n if (app.id[platform] !== undefined) {\n elements.push(\n <meta\n key={key++}\n name={`twitter:app:id:${platform}`}\n content={String(app.id[platform])}\n />,\n );\n }\n if (app.url?.[platform] !== undefined) {\n const appUrl = app.url[platform]!.toString();\n elements.push(\n <meta key={key++} name={`twitter:app:url:${platform}`} content={resolveUrl(appUrl)} />,\n );\n }\n }\n }\n }\n\n // Icons\n if (metadata.icons) {\n const iconEntries = isIconsMap(metadata.icons)\n ? normalizeUrlDescriptorEntries(metadata.icons.icon, (url): IconDescriptor => ({ url }))\n : normalizeUrlDescriptorEntries(metadata.icons, (url): IconDescriptor => ({ url }));\n\n // Shortcut icon\n if (isIconsMap(metadata.icons) && metadata.icons.shortcut) {\n const shortcuts = Array.isArray(metadata.icons.shortcut)\n ? metadata.icons.shortcut\n : [metadata.icons.shortcut];\n for (const s of shortcuts) {\n elements.push(<link key={key++} rel=\"shortcut icon\" href={stringifyUrl(s)} />);\n }\n }\n // Icon\n if (iconEntries.length > 0) {\n for (const i of iconEntries) {\n elements.push(\n <link\n key={key++}\n rel=\"icon\"\n href={stringifyUrl(i.url)}\n {...(i.sizes ? { sizes: i.sizes } : {})}\n {...(i.type ? { type: i.type } : {})}\n {...(i.media ? { media: i.media } : {})}\n />,\n );\n }\n }\n // Apple touch icon\n if (isIconsMap(metadata.icons) && metadata.icons.apple) {\n for (const a of normalizeUrlDescriptorEntries(\n metadata.icons.apple,\n (url): AppleIconDescriptor => ({ url }),\n )) {\n elements.push(\n <link\n key={key++}\n rel=\"apple-touch-icon\"\n href={stringifyUrl(a.url)}\n {...(a.sizes ? { sizes: a.sizes } : {})}\n {...(a.type ? { type: a.type } : {})}\n />,\n );\n }\n }\n // Other custom icon relations. Next.js accepts a single descriptor or an\n // array; normalize before iterating.\n if (isIconsMap(metadata.icons) && metadata.icons.other) {\n const others = Array.isArray(metadata.icons.other)\n ? metadata.icons.other\n : [metadata.icons.other];\n for (const o of others) {\n elements.push(\n <link\n key={key++}\n rel={o.rel}\n href={stringifyUrl(o.url)}\n {...(o.sizes ? { sizes: o.sizes } : {})}\n {...(o.type ? { type: o.type } : {})}\n />,\n );\n }\n }\n }\n\n // Manifest\n if (metadata.manifest) {\n elements.push(<link key={key++} rel=\"manifest\" href={stringifyUrl(metadata.manifest)} />);\n }\n\n // Alternates\n if (metadata.alternates) {\n const alt = metadata.alternates;\n if (alt.canonical) {\n elements.push(\n <link\n key={key++}\n rel=\"canonical\"\n href={resolveCanonicalUrl(alt.canonical, base, pathname)}\n />,\n );\n }\n if (alt.languages) {\n for (const [lang, href] of Object.entries(alt.languages)) {\n elements.push(<link key={key++} rel=\"alternate\" hrefLang={lang} href={resolveUrl(href)} />);\n }\n }\n if (alt.media) {\n for (const [media, href] of Object.entries(alt.media)) {\n elements.push(<link key={key++} rel=\"alternate\" media={media} href={resolveUrl(href)} />);\n }\n }\n if (alt.types) {\n for (const [type, href] of Object.entries(alt.types)) {\n elements.push(<link key={key++} rel=\"alternate\" type={type} href={resolveUrl(href)} />);\n }\n }\n }\n\n // Verification\n if (metadata.verification) {\n const v = metadata.verification;\n if (v.google)\n elements.push(<meta key={key++} name=\"google-site-verification\" content={v.google} />);\n if (v.yahoo) elements.push(<meta key={key++} name=\"y_key\" content={v.yahoo} />);\n if (v.yandex) elements.push(<meta key={key++} name=\"yandex-verification\" content={v.yandex} />);\n if (v.other) {\n for (const [name, content] of Object.entries(v.other)) {\n const values = Array.isArray(content) ? content : [content];\n for (const val of values) {\n elements.push(<meta key={key++} name={name} content={val} />);\n }\n }\n }\n }\n\n // Apple Web App\n if (metadata.appleWebApp) {\n const awa = metadata.appleWebApp;\n if (awa.capable !== false) {\n elements.push(<meta key={key++} name=\"mobile-web-app-capable\" content=\"yes\" />);\n }\n if (awa.title) {\n elements.push(<meta key={key++} name=\"apple-mobile-web-app-title\" content={awa.title} />);\n }\n if (awa.statusBarStyle) {\n elements.push(\n <meta\n key={key++}\n name=\"apple-mobile-web-app-status-bar-style\"\n content={awa.statusBarStyle}\n />,\n );\n }\n if (awa.startupImage) {\n const imgs =\n typeof awa.startupImage === \"string\" ? [{ url: awa.startupImage }] : awa.startupImage;\n for (const img of imgs) {\n elements.push(\n <link\n key={key++}\n rel=\"apple-touch-startup-image\"\n href={resolveUrl(img.url)}\n {...(img.media ? { media: img.media } : {})}\n />,\n );\n }\n }\n }\n\n // iTunes\n if (metadata.itunes) {\n const { appId, appArgument } = metadata.itunes;\n let content = `app-id=${appId}`;\n if (appArgument) {\n content += `, app-argument=${appArgument}`;\n }\n elements.push(<meta key={key++} name=\"apple-itunes-app\" content={content} />);\n }\n\n // App Links\n if (metadata.appLinks) {\n const al = metadata.appLinks;\n const platforms = [\n \"ios\",\n \"iphone\",\n \"ipad\",\n \"android\",\n \"windows_phone\",\n \"windows\",\n \"windows_universal\",\n \"web\",\n ] as const;\n for (const platform of platforms) {\n const entries = al[platform];\n if (!entries) continue;\n const list = Array.isArray(entries) ? entries : [entries];\n for (const entry of list) {\n for (const [k, v] of Object.entries(entry)) {\n if (v === undefined || v === null) continue;\n const str = String(v);\n const content = k === \"url\" ? resolveUrl(str) : str;\n elements.push(<meta key={key++} property={`al:${platform}:${k}`} content={content} />);\n }\n }\n }\n }\n\n // Other custom meta tags\n if (metadata.other) {\n for (const [name, content] of Object.entries(metadata.other)) {\n const values = Array.isArray(content) ? content : [content];\n for (const val of values) {\n elements.push(<meta key={key++} name={name} content={val} />);\n }\n }\n }\n\n return <>{elements}</>;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigation-state.js","names":[],"sources":["../../src/shims/navigation-state.ts"],"sourcesContent":["/**\n * Server-only navigation state backed by AsyncLocalStorage.\n *\n * This module provides request-scoped isolation for navigation context\n * and useServerInsertedHTML callbacks. Without ALS, concurrent requests\n * on Cloudflare Workers would share module-level state and leak data\n * (pathnames, params, CSS-in-JS styles) between requests.\n *\n * This module is server-only — it imports node:async_hooks and must NOT\n * be bundled for the browser. The dual-environment navigation.ts shim\n * uses a registration pattern so it works in both environments.\n */\n\nimport { getOrCreateAls } from \"./internal/als-registry.js\";\nimport {\n _registerStateAccessors,\n type NavigationContext,\n GLOBAL_ACCESSORS_KEY,\n} from \"./navigation.js\";\nimport {\n isInsideUnifiedScope,\n getRequestContext,\n runWithUnifiedStateMutation,\n} from \"./unified-request-context.js\";\n\n// ---------------------------------------------------------------------------\n// ALS setup — same pattern as headers.ts\n// ---------------------------------------------------------------------------\n\nexport type NavigationState = {\n serverContext: NavigationContext | null;\n serverInsertedHTMLCallbacks: Array<() => unknown>;\n};\n\nconst _FALLBACK_KEY = Symbol.for(\"vinext.navigation.fallback\");\nconst _g = globalThis as unknown as Record<PropertyKey, unknown>;\nconst _als = getOrCreateAls<NavigationState>(\"vinext.navigation.als\");\n\nconst _fallbackState = (_g[_FALLBACK_KEY] ??= {\n serverContext: null,\n serverInsertedHTMLCallbacks: [],\n} satisfies NavigationState) as NavigationState;\n\nfunction _getState(): NavigationState {\n if (isInsideUnifiedScope()) {\n return getRequestContext();\n }\n return _als.getStore() ?? _fallbackState;\n}\n\n/**\n * Run a function within a navigation ALS scope.\n * Ensures per-request isolation for navigation context and\n * useServerInsertedHTML callbacks on concurrent runtimes.\n */\nexport function runWithNavigationContext<T>(fn: () => Promise<T>): Promise<T>;\nexport function runWithNavigationContext<T>(fn: () => T | Promise<T>): T | Promise<T>;\nexport function runWithNavigationContext<T>(fn: () => T | Promise<T>): T | Promise<T> {\n if (isInsideUnifiedScope()) {\n return runWithUnifiedStateMutation((uCtx) => {\n uCtx.serverContext = null;\n uCtx.serverInsertedHTMLCallbacks = [];\n }, fn);\n }\n const state: NavigationState = {\n serverContext: null,\n serverInsertedHTMLCallbacks: [],\n };\n return _als.run(state, fn);\n}\n\n/**\n * Run a function with a fresh useServerInsertedHTML callback list while\n * preserving the current navigation context.\n *\n * Used by the Pages Router ISR cache-fill pass: it is the same request/path,\n * but it needs a fresh callback collection so CSS-in-JS insertions from the\n * streamed render cannot accumulate into the cache-fill render.\n */\nexport function runWithServerInsertedHTMLState<T>(fn: () => Promise<T>): Promise<T>;\nexport function runWithServerInsertedHTMLState<T>(fn: () => T | Promise<T>): T | Promise<T>;\nexport function runWithServerInsertedHTMLState<T>(fn: () => T | Promise<T>): T | Promise<T> {\n if (isInsideUnifiedScope()) {\n return runWithUnifiedStateMutation((uCtx) => {\n uCtx.serverInsertedHTMLCallbacks = [];\n }, fn);\n }\n\n const parentState = _als.getStore() ?? _fallbackState;\n const state: NavigationState = {\n serverContext: parentState.serverContext,\n serverInsertedHTMLCallbacks: [],\n };\n return _als.run(state, fn);\n}\n\n// ---------------------------------------------------------------------------\n// Register ALS-backed accessors into navigation.ts\n//\n// Two registration paths (issue #688):\n// 1. _registerStateAccessors — updates the module-level function pointers\n// in the same module instance that imported us (the SSR entry's copy).\n// 2. globalThis[Symbol.for(...)] — makes the accessors discoverable by ANY\n// module instance of navigation.ts, even if Vite created a separate one\n// for \"use client\" components due to pre-bundling or env separation.\n// ---------------------------------------------------------------------------\n\nconst _accessors = {\n getServerContext(): NavigationContext | null {\n return _getState().serverContext;\n },\n\n setServerContext(ctx: NavigationContext | null): void {\n _getState().serverContext = ctx;\n },\n\n getInsertedHTMLCallbacks(): Array<() => unknown> {\n return _getState().serverInsertedHTMLCallbacks;\n },\n\n clearInsertedHTMLCallbacks(): void {\n _getState().serverInsertedHTMLCallbacks = [];\n },\n} satisfies Parameters<typeof _registerStateAccessors>[0];\n\n_registerStateAccessors(_accessors);\n(globalThis as unknown as Record<PropertyKey, unknown>)[GLOBAL_ACCESSORS_KEY] = _accessors;\n"],"mappings":";;;;;;;;;;;;;;;;AAkCA,MAAM,gBAAgB,OAAO,IAAI,6BAA6B;AAC9D,MAAM,KAAK;AACX,MAAM,OAAO,eAAgC,wBAAwB;AAErE,MAAM,iBAAkB,GAAG,mBAAmB;CAC5C,eAAe;CACf,6BAA6B,EAAE;CAChC;AAED,SAAS,YAA6B;CACpC,IAAI,sBAAsB,EACxB,OAAO,mBAAmB;CAE5B,OAAO,KAAK,UAAU,IAAI;;AAU5B,SAAgB,yBAA4B,IAA0C;CACpF,IAAI,sBAAsB,EACxB,OAAO,6BAA6B,SAAS;EAC3C,KAAK,gBAAgB;EACrB,KAAK,8BAA8B,EAAE;IACpC,GAAG;CAMR,OAAO,KAAK,IAAI;EAHd,eAAe;EACf,6BAA6B,EAAE;EAEZ,EAAE,GAAG;;AAa5B,SAAgB,+BAAkC,IAA0C;CAC1F,IAAI,sBAAsB,EACxB,OAAO,6BAA6B,SAAS;EAC3C,KAAK,8BAA8B,EAAE;IACpC,GAAG;CAIR,MAAM,QAAyB;EAC7B,gBAFkB,KAAK,UAAU,IAAI,gBAEV;EAC3B,6BAA6B,EAAE;EAChC;CACD,OAAO,KAAK,IAAI,OAAO,GAAG;;AAc5B,MAAM,aAAa;CACjB,mBAA6C;EAC3C,OAAO,WAAW,CAAC;;CAGrB,iBAAiB,KAAqC;EACpD,WAAW,CAAC,gBAAgB;;CAG9B,2BAAiD;EAC/C,OAAO,WAAW,CAAC;;CAGrB,6BAAmC;EACjC,WAAW,CAAC,8BAA8B,EAAE;;CAE/C;AAED,wBAAwB,WAAW;AACnC,WAAwD,wBAAwB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigation.js","names":["React","globalState"],"sources":["../../src/shims/navigation.ts"],"sourcesContent":["/**\n * next/navigation shim\n *\n * App Router navigation hooks. These work on both server (RSC) and client.\n * Server-side: reads from a request context set by the RSC handler.\n * Client-side: reads from browser Location API and provides navigation.\n */\n\n// Use namespace import for RSC safety: the react-server condition doesn't export\n// createContext/useContext/useSyncExternalStore as named exports, and strict ESM\n// would throw at link time for missing bindings. With `import * as React`, the\n// bindings are just `undefined` on the namespace object and we can guard at runtime.\nimport * as React from \"react\";\nimport { getNavigationRuntime, hasAppNavigationRuntime } from \"../client/navigation-runtime.js\";\nimport { notifyAppRouterTransitionStart } from \"../client/instrumentation-client-state.js\";\nimport { AppElementsWire } from \"../server/app-elements.js\";\nimport { resolveManifestNavigationInterceptionContext } from \"../server/app-browser-interception-context.js\";\nimport { createExternalHistoryStatePreservingMetadata } from \"../server/app-history-state.js\";\nimport {\n createRscRequestHeaders,\n createRscRequestUrl,\n VINEXT_RSC_COMPATIBILITY_ID_HEADER,\n VINEXT_RSC_CONTENT_TYPE,\n} from \"../server/app-rsc-cache-busting.js\";\nimport { VINEXT_MOUNTED_SLOTS_HEADER, VINEXT_PARAMS_HEADER } from \"../server/headers.js\";\nimport {\n isAbsoluteOrProtocolRelativeUrl,\n isHashOnlyBrowserUrlChange,\n toBrowserNavigationHref,\n toSameOriginAppPath,\n withBasePath,\n} from \"./url-utils.js\";\nimport { stripBasePath } from \"../utils/base-path.js\";\nimport { ReadonlyURLSearchParams } from \"./readonly-url-search-params.js\";\nimport { assertSafeNavigationUrl } from \"./url-safety.js\";\nimport { AppRouterContext } from \"./internal/app-router-context.js\";\nimport { scrollToHashTarget } from \"./hash-scroll.js\";\nimport {\n beginAppRouterScrollIntent,\n clearAppRouterScrollIntent,\n consumeAppRouterScrollIntent,\n type AppRouterScrollIntent,\n} from \"./app-router-scroll-state.js\";\n\n// ─── Layout segment context ───────────────────────────────────────────────────\n// Stores the child segments below the current layout. Each layout wraps its\n// children with a provider whose value is the remaining route tree segments\n// (including route groups, with dynamic params resolved to actual values).\n// Created lazily because `React.createContext` is NOT available in the\n// react-server condition of React. In the RSC environment, this remains null.\n// The shared context lives behind a global singleton so provider/hook pairs\n// still line up if Vite loads this shim through multiple resolved module IDs.\nconst _LAYOUT_SEGMENT_CTX_KEY = Symbol.for(\"vinext.layoutSegmentContext\");\nconst _SERVER_INSERTED_HTML_CTX_KEY = Symbol.for(\"vinext.serverInsertedHTMLContext\");\n\n/**\n * Map of parallel route key → child segments below the current layout.\n * The \"children\" key is always present (the default parallel route).\n * Named parallel routes add their own keys (e.g., \"team\", \"analytics\").\n *\n * Arrays are mutable (`string[]`) to match Next.js's public API return type\n * without requiring `as` casts. The map itself is Readonly — no key addition.\n */\nexport type SegmentMap = Readonly<Record<string, string[]>> & { readonly children: string[] };\n\ntype _LayoutSegmentGlobal = typeof globalThis & {\n [_LAYOUT_SEGMENT_CTX_KEY]?: React.Context<SegmentMap> | null;\n [_SERVER_INSERTED_HTML_CTX_KEY]?: React.Context<\n ((callback: () => unknown) => void) | null\n > | null;\n};\n\n// ─── ServerInsertedHTML context ────────────────────────────────────────────────\n// Used by CSS-in-JS libraries (Apollo Client, styled-components, emotion) to\n// register HTML injection callbacks during SSR via useContext().\n// The SSR entry wraps the rendered tree with a Provider whose value is a\n// callback registration function (useServerInsertedHTML).\n//\n// In Next.js, ServerInsertedHTMLContext holds a function:\n// (callback: () => React.ReactNode) => void\n// Libraries call useContext(ServerInsertedHTMLContext) to get this function,\n// then call it to register callbacks that inject HTML during SSR.\n//\n// Created eagerly at module load time. In the RSC environment (react-server\n// condition), createContext isn't available so this will be null.\n\nfunction getServerInsertedHTMLContext(): React.Context<\n ((callback: () => unknown) => void) | null\n> | null {\n if (typeof React.createContext !== \"function\") return null;\n\n const globalState = globalThis as _LayoutSegmentGlobal;\n if (!globalState[_SERVER_INSERTED_HTML_CTX_KEY]) {\n globalState[_SERVER_INSERTED_HTML_CTX_KEY] = React.createContext<\n ((callback: () => unknown) => void) | null\n >(null);\n }\n\n return globalState[_SERVER_INSERTED_HTML_CTX_KEY] ?? null;\n}\n\nexport const ServerInsertedHTMLContext: React.Context<\n ((callback: () => unknown) => void) | null\n> | null = getServerInsertedHTMLContext();\n\n/**\n * Get or create the layout segment context.\n * Returns null in the RSC environment (createContext unavailable).\n */\nexport function getLayoutSegmentContext(): React.Context<SegmentMap> | null {\n if (typeof React.createContext !== \"function\") return null;\n\n const globalState = globalThis as _LayoutSegmentGlobal;\n if (!globalState[_LAYOUT_SEGMENT_CTX_KEY]) {\n globalState[_LAYOUT_SEGMENT_CTX_KEY] = React.createContext<SegmentMap>({ children: [] });\n }\n\n return globalState[_LAYOUT_SEGMENT_CTX_KEY] ?? null;\n}\n\n/**\n * Read the child segments for a parallel route below the current layout.\n * Returns [] if no context is available (RSC environment, outside React tree)\n * or if the requested key is not present in the segment map.\n */\n/* oxlint-disable eslint-plugin-react-hooks/rules-of-hooks */\nfunction useChildSegments(parallelRoutesKey: string = \"children\"): string[] {\n const ctx = getLayoutSegmentContext();\n if (!ctx) return [];\n // useContext is safe here because if createContext exists, useContext does too.\n // This branch is only taken in SSR/Browser, never in RSC.\n // Try/catch for unit tests that call this hook outside a React render tree.\n try {\n const segmentMap = React.useContext(ctx);\n return segmentMap[parallelRoutesKey] ?? [];\n } catch {\n return [];\n }\n}\n/* oxlint-enable eslint-plugin-react-hooks/rules-of-hooks */\n\n// ---------------------------------------------------------------------------\n// Server-side request context (set by the RSC entry before rendering)\n// ---------------------------------------------------------------------------\n\nexport type NavigationContext = {\n pathname: string;\n searchParams: URLSearchParams;\n params: Record<string, string | string[]>;\n};\n\nconst _READONLY_SEARCH_PARAMS = Symbol(\"vinext.navigation.readonlySearchParams\");\nconst _READONLY_SEARCH_PARAMS_SOURCE = Symbol(\"vinext.navigation.readonlySearchParamsSource\");\n\ntype NavigationContextWithReadonlyCache = NavigationContext & {\n [_READONLY_SEARCH_PARAMS]?: ReadonlyURLSearchParams;\n [_READONLY_SEARCH_PARAMS_SOURCE]?: URLSearchParams;\n};\n\n// ---------------------------------------------------------------------------\n// Server-side navigation state lives in a separate server-only module\n// (navigation-state.ts) that uses AsyncLocalStorage for request isolation.\n// This module is bundled for the browser, so it can't import node:async_hooks.\n//\n// On the server: state functions are set by navigation-state.ts at import time.\n// On the client: _serverContext falls back to null (hooks use window instead).\n//\n// Global accessor pattern (issue #688):\n// Vite's multi-environment dev mode can create separate module instances of\n// this file for the SSR entry vs \"use client\" components. When that happens,\n// _registerStateAccessors only updates the SSR entry's instance, leaving the\n// \"use client\" instance with the default (null) fallbacks.\n//\n// To fix this, navigation-state.ts also stores the accessors on globalThis\n// via Symbol.for, and the defaults here check for that global before falling\n// back to module-level state. This ensures all module instances can reach the\n// ALS-backed state regardless of which instance was registered.\n// ---------------------------------------------------------------------------\n\ntype _StateAccessors = {\n getServerContext: () => NavigationContext | null;\n setServerContext: (ctx: NavigationContext | null) => void;\n getInsertedHTMLCallbacks: () => Array<() => unknown>;\n clearInsertedHTMLCallbacks: () => void;\n};\n\nexport const GLOBAL_ACCESSORS_KEY = Symbol.for(\"vinext.navigation.globalAccessors\");\nconst _GLOBAL_ACCESSORS_KEY = GLOBAL_ACCESSORS_KEY;\ntype _GlobalWithAccessors = typeof globalThis & { [_GLOBAL_ACCESSORS_KEY]?: _StateAccessors };\n\n// Browser hydration has the same module-split shape as SSR in Vite dev:\n// the browser entry seeds the snapshot before hydrateRoot(), but client\n// components can import a different module instance of this shim.\nconst GLOBAL_HYDRATION_CONTEXT_KEY = Symbol.for(\"vinext.navigation.clientHydrationContext\");\nconst _GLOBAL_HYDRATION_CONTEXT_KEY = GLOBAL_HYDRATION_CONTEXT_KEY;\ntype _GlobalWithHydrationContext = typeof globalThis & {\n [_GLOBAL_HYDRATION_CONTEXT_KEY]?: NavigationContext | null;\n};\n\nfunction _getGlobalAccessors(): _StateAccessors | undefined {\n return (globalThis as _GlobalWithAccessors)[_GLOBAL_ACCESSORS_KEY];\n}\n\nfunction _getClientHydrationContext(): NavigationContext | null | undefined {\n const globalState = globalThis as _GlobalWithHydrationContext;\n if (Object.prototype.hasOwnProperty.call(globalState, _GLOBAL_HYDRATION_CONTEXT_KEY)) {\n return globalState[_GLOBAL_HYDRATION_CONTEXT_KEY] ?? null;\n }\n return undefined;\n}\n\nfunction _setClientHydrationContext(ctx: NavigationContext | null): void {\n (globalThis as _GlobalWithHydrationContext)[_GLOBAL_HYDRATION_CONTEXT_KEY] = ctx;\n}\n\nlet _serverContext: NavigationContext | null = null;\nlet _serverInsertedHTMLCallbacks: Array<() => unknown> = [];\n\n// These are overridden by navigation-state.ts on the server to use ALS.\n// The defaults check globalThis for cross-module-instance access (issue #688).\nlet _getServerContext = (): NavigationContext | null => {\n if (typeof window !== \"undefined\") {\n const hydrationContext = _getClientHydrationContext();\n return hydrationContext !== undefined ? hydrationContext : _serverContext;\n }\n const g = _getGlobalAccessors();\n return g ? g.getServerContext() : _serverContext;\n};\nlet _setServerContext = (ctx: NavigationContext | null): void => {\n if (typeof window !== \"undefined\") {\n _serverContext = ctx;\n _setClientHydrationContext(ctx);\n return;\n }\n const g = _getGlobalAccessors();\n if (g) {\n g.setServerContext(ctx);\n } else {\n _serverContext = ctx;\n }\n};\nlet _getInsertedHTMLCallbacks = (): Array<() => unknown> => {\n const g = _getGlobalAccessors();\n return g ? g.getInsertedHTMLCallbacks() : _serverInsertedHTMLCallbacks;\n};\nlet _clearInsertedHTMLCallbacks = (): void => {\n const g = _getGlobalAccessors();\n if (g) {\n g.clearInsertedHTMLCallbacks();\n } else {\n _serverInsertedHTMLCallbacks = [];\n }\n};\n\n/**\n * Register ALS-backed state accessors. Called by navigation-state.ts on import.\n * @internal\n */\nexport function _registerStateAccessors(accessors: _StateAccessors): void {\n _getServerContext = accessors.getServerContext;\n _setServerContext = accessors.setServerContext;\n _getInsertedHTMLCallbacks = accessors.getInsertedHTMLCallbacks;\n _clearInsertedHTMLCallbacks = accessors.clearInsertedHTMLCallbacks;\n}\n\n// ---------------------------------------------------------------------------\n// Pages Router compat source.\n//\n// `next/navigation` is the App Router API surface, but Next.js exposes the\n// same hook names to Pages Router pages as a compat shim. In Next.js this is\n// done by wrapping pages with SearchParamsContext / PathParamsContext /\n// PathnameContext providers populated from the Pages Router's state — see:\n// .nextjs-ref/packages/next/src/server/render.tsx\n// .nextjs-ref/packages/next/src/client/index.tsx\n// .nextjs-ref/packages/next/src/shared/lib/router/adapters.tsx\n//\n// vinext drives these hooks from a module-level navigation context instead of\n// React Context, so we fall back to a Pages Router accessor when no App\n// Router context is set. The accessor is published by next/router via a\n// global Symbol.for handle (see packages/vinext/src/shims/router.ts); we do\n// NOT import router.ts here because doing so would force navigation.ts to be\n// loaded for every consumer of next/router, triggering window.history\n// patches in unit tests that only want the router shim.\n// ---------------------------------------------------------------------------\n\ntype PagesNavigationContext = {\n pathname: string;\n searchParams: URLSearchParams;\n params: Record<string, string | string[]>;\n};\n\nconst PAGES_NAVIGATION_ACCESSOR_KEY = Symbol.for(\n \"vinext.navigation.pagesNavigationContextAccessor\",\n);\ntype _GlobalWithPagesAccessor = typeof globalThis & {\n [PAGES_NAVIGATION_ACCESSOR_KEY]?: () => PagesNavigationContext | null;\n};\n\nfunction _getPagesNavigationContext(): PagesNavigationContext | null {\n const accessor = (globalThis as _GlobalWithPagesAccessor)[PAGES_NAVIGATION_ACCESSOR_KEY];\n if (!accessor) return null;\n try {\n return accessor();\n } catch {\n return null;\n }\n}\n\n/**\n * Get the navigation context for the current SSR/RSC render.\n * Reads from AsyncLocalStorage when available (concurrent-safe),\n * otherwise falls back to module-level state.\n */\nexport function getNavigationContext(): NavigationContext | null {\n return _getServerContext();\n}\n\n/**\n * Set the navigation context for the current SSR/RSC render.\n * Called by the framework entry before rendering each request.\n */\nexport function setNavigationContext(ctx: NavigationContext | null): void {\n _setServerContext(ctx);\n}\n\n// ---------------------------------------------------------------------------\n// Client-side state\n// ---------------------------------------------------------------------------\n\nconst isServer = typeof window === \"undefined\";\n\n/** basePath from next.config.js, injected by the plugin at build time */\nexport const __basePath: string = process.env.__NEXT_ROUTER_BASEPATH ?? \"\";\n\n// ---------------------------------------------------------------------------\n// RSC prefetch cache utilities (shared between link.tsx and browser entry)\n// ---------------------------------------------------------------------------\n\n/** Maximum number of entries in the RSC prefetch cache. */\nexport const MAX_PREFETCH_CACHE_SIZE = 50;\n\n/**\n * TTL for prefetch cache entries in ms.\n *\n * Mirrors Next.js' `STATIC_STALETIME_MS` derivation. The plugin injects\n * `process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME` from\n * `experimental.staleTimes.static` (in seconds) at build time; we convert\n * to ms here.\n *\n * Falls back to vinext's historical default of 30s when the env var is\n * absent (e.g. unit tests that import this module without going through\n * the plugin's `define` pipeline). When the plugin is active and the user\n * has not set `experimental.staleTimes`, Next.js' 300s default applies\n * (see `resolveStaleTimes` in `config/next-config.ts`).\n */\nfunction resolvePrefetchCacheTtl(): number {\n const raw = process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME;\n if (raw === undefined || raw === \"\") return 30_000;\n const seconds = Number(raw);\n if (!Number.isFinite(seconds) || seconds < 0) return 30_000;\n return seconds * 1000;\n}\n\nexport const PREFETCH_CACHE_TTL = resolvePrefetchCacheTtl();\n\n/** A buffered RSC response stored as an ArrayBuffer for replay. */\nexport type CachedRscResponse = {\n compatibilityIdHeader?: string | null;\n buffer: ArrayBuffer;\n contentType: string;\n mountedSlotsHeader?: string | null;\n paramsHeader: string | null;\n url: string;\n};\n\nexport type PrefetchOptions = {\n kind?: unknown;\n onInvalidate?: () => void;\n};\n\nexport type PrefetchCacheEntry = {\n cacheForNavigation?: boolean;\n invalidationTimer?: ReturnType<typeof setTimeout>;\n onInvalidateCallbacks?: Set<() => void>;\n optimisticRouteShell?: boolean;\n outcome: \"pending\" | \"cache-seeded\";\n snapshot?: CachedRscResponse;\n pending?: Promise<void>;\n timestamp: number;\n};\n\nexport function getCurrentInterceptionContext(): string | null {\n if (isServer) {\n return null;\n }\n\n return stripBasePath(window.location.pathname, __basePath);\n}\n\nexport function getPrefetchInterceptionContext(targetHref: string): string | null {\n if (isServer) {\n return null;\n }\n\n let targetUrl: URL;\n try {\n targetUrl = new URL(targetHref, window.location.href);\n } catch {\n return null;\n }\n\n return resolveManifestNavigationInterceptionContext({\n basePath: __basePath,\n currentPathname: window.location.pathname,\n routeManifest: getNavigationRuntime()?.bootstrap.routeManifest ?? null,\n targetPathname: targetUrl.pathname,\n });\n}\n\nexport function getCurrentNextUrl(): string {\n if (isServer) {\n return \"/\";\n }\n\n return window.location.pathname + window.location.search;\n}\n\n/** Get or create the shared in-memory RSC prefetch cache on window. */\nexport function getPrefetchCache(): Map<string, PrefetchCacheEntry> {\n if (isServer) return new Map();\n if (!window.__VINEXT_RSC_PREFETCH_CACHE__) {\n window.__VINEXT_RSC_PREFETCH_CACHE__ = new Map<string, PrefetchCacheEntry>();\n }\n return window.__VINEXT_RSC_PREFETCH_CACHE__;\n}\n\n/**\n * Get or create the shared set of already-prefetched RSC URLs on window.\n * Keyed by interception-aware cache key so distinct source routes do not alias.\n */\nexport function getPrefetchedUrls(): Set<string> {\n if (isServer) return new Set();\n if (!window.__VINEXT_RSC_PREFETCHED_URLS__) {\n window.__VINEXT_RSC_PREFETCHED_URLS__ = new Set<string>();\n }\n return window.__VINEXT_RSC_PREFETCHED_URLS__;\n}\n\n/**\n * Evict prefetch cache entries if at capacity.\n * First sweeps expired entries, then falls back to FIFO eviction.\n */\nfunction evictPrefetchCacheIfNeeded(): void {\n const cache = getPrefetchCache();\n if (cache.size < MAX_PREFETCH_CACHE_SIZE) return;\n\n const now = Date.now();\n const prefetched = getPrefetchedUrls();\n\n for (const [key, entry] of cache) {\n if (now - entry.timestamp >= PREFETCH_CACHE_TTL) {\n deletePrefetchCacheEntry(cache, prefetched, key, entry, true);\n }\n }\n\n while (cache.size >= MAX_PREFETCH_CACHE_SIZE) {\n const oldest = cache.keys().next().value;\n if (oldest !== undefined) {\n const entry = cache.get(oldest);\n if (entry) {\n deletePrefetchCacheEntry(cache, prefetched, oldest, entry, true);\n } else {\n cache.delete(oldest);\n prefetched.delete(oldest);\n }\n } else {\n break;\n }\n }\n}\n\nfunction clearPrefetchInvalidation(entry: PrefetchCacheEntry): void {\n if (entry.invalidationTimer !== undefined) {\n clearTimeout(entry.invalidationTimer);\n entry.invalidationTimer = undefined;\n }\n}\n\nfunction notifyPrefetchInvalidated(entry: PrefetchCacheEntry): void {\n clearPrefetchInvalidation(entry);\n const callbacks = entry.onInvalidateCallbacks;\n entry.onInvalidateCallbacks = undefined;\n if (callbacks === undefined) return;\n\n for (const onInvalidate of callbacks) {\n try {\n onInvalidate();\n } catch (error) {\n if (typeof reportError === \"function\") {\n reportError(error);\n } else {\n console.error(error);\n }\n }\n }\n}\n\nfunction deletePrefetchCacheEntry(\n cache: Map<string, PrefetchCacheEntry>,\n prefetched: Set<string>,\n cacheKey: string,\n entry: PrefetchCacheEntry,\n notify: boolean,\n): void {\n cache.delete(cacheKey);\n prefetched.delete(cacheKey);\n if (notify) {\n notifyPrefetchInvalidated(entry);\n } else {\n clearPrefetchInvalidation(entry);\n entry.onInvalidateCallbacks = undefined;\n }\n}\n\nfunction invalidatePrefetchCacheEntry(cacheKey: string): void {\n const cache = getPrefetchCache();\n const entry = cache.get(cacheKey);\n if (!entry) return;\n deletePrefetchCacheEntry(cache, getPrefetchedUrls(), cacheKey, entry, true);\n}\n\nfunction schedulePrefetchInvalidation(cacheKey: string, entry: PrefetchCacheEntry): void {\n if (entry.onInvalidateCallbacks === undefined || entry.onInvalidateCallbacks.size === 0) return;\n\n clearPrefetchInvalidation(entry);\n const elapsed = Date.now() - entry.timestamp;\n const delay = Math.max(0, PREFETCH_CACHE_TTL - elapsed);\n entry.invalidationTimer = setTimeout(() => {\n invalidatePrefetchCacheEntry(cacheKey);\n }, delay);\n}\n\nfunction addPrefetchInvalidationCallback(\n entry: PrefetchCacheEntry,\n onInvalidate: (() => void) | undefined,\n): void {\n if (onInvalidate === undefined) return;\n if (entry.onInvalidateCallbacks === undefined) {\n entry.onInvalidateCallbacks = new Set();\n }\n entry.onInvalidateCallbacks.add(onInvalidate);\n}\n\nfunction attachPrefetchInvalidationCallback(\n cacheKey: string,\n onInvalidate: (() => void) | undefined,\n): void {\n if (onInvalidate === undefined) return;\n const entry = getPrefetchCache().get(cacheKey);\n if (!entry) return;\n addPrefetchInvalidationCallback(entry, onInvalidate);\n if (entry.outcome === \"cache-seeded\") {\n schedulePrefetchInvalidation(cacheKey, entry);\n }\n}\n\nexport function invalidatePrefetchCache(): void {\n const cache = getPrefetchCache();\n const prefetched = getPrefetchedUrls();\n for (const [cacheKey, entry] of cache) {\n deletePrefetchCacheEntry(cache, prefetched, cacheKey, entry, true);\n }\n prefetched.clear();\n if (!isServer) {\n getNavigationRuntime()?.functions.pingVisibleLinks?.();\n }\n}\n\n/**\n * Store a prefetched RSC response in the cache by snapshotting it to an\n * ArrayBuffer. The snapshot completes asynchronously; during that window\n * the entry is marked `pending` so consumePrefetchResponse() will skip it\n * (the caller falls back to a fresh fetch, which is acceptable).\n *\n * Prefer prefetchRscResponse() for new call-sites — it handles the full\n * prefetch lifecycle including dedup and explicit slot context.\n * storePrefetchResponse() is kept for backward compatibility and test\n * helpers. It is slot-unaware: the snapshot's mountedSlotsHeader comes\n * from the response headers, not the caller, so consumePrefetchResponse\n * may reject the entry if the caller's slot context differs.\n *\n * NB: Caller is responsible for managing getPrefetchedUrls() — this\n * function only stores the response in the prefetch cache.\n */\nexport function storePrefetchResponse(\n rscUrl: string,\n response: Response,\n interceptionContext: string | null = null,\n options?: PrefetchOptions,\n): void {\n const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);\n evictPrefetchCacheIfNeeded();\n const entry: PrefetchCacheEntry = {\n outcome: \"pending\",\n timestamp: Date.now(),\n };\n addPrefetchInvalidationCallback(entry, options?.onInvalidate);\n entry.pending = snapshotRscResponse(response)\n .then((snapshot) => {\n entry.snapshot = snapshot;\n })\n .catch(() => {\n deletePrefetchCacheEntry(getPrefetchCache(), getPrefetchedUrls(), cacheKey, entry, false);\n })\n .finally(() => {\n entry.pending = undefined;\n if (entry.snapshot) {\n entry.outcome = \"cache-seeded\";\n schedulePrefetchInvalidation(cacheKey, entry);\n }\n });\n getPrefetchCache().set(cacheKey, entry);\n}\n\nexport function createCachedRscResponseSnapshot(\n response: Response,\n buffer: ArrayBuffer,\n responseUrl: string | null = null,\n): CachedRscResponse {\n return {\n compatibilityIdHeader: response.headers.get(VINEXT_RSC_COMPATIBILITY_ID_HEADER),\n buffer,\n contentType: response.headers.get(\"content-type\") ?? VINEXT_RSC_CONTENT_TYPE,\n mountedSlotsHeader: response.headers.get(VINEXT_MOUNTED_SLOTS_HEADER),\n paramsHeader: response.headers.get(VINEXT_PARAMS_HEADER),\n url: responseUrl ?? response.url,\n };\n}\n\n/**\n * Snapshot an RSC response to an ArrayBuffer for caching and replay.\n * Consumes the response body and stores it with content-type and URL metadata.\n */\nexport async function snapshotRscResponse(response: Response): Promise<CachedRscResponse> {\n return createCachedRscResponseSnapshot(response, await response.arrayBuffer());\n}\n\n/**\n * Reconstruct a Response from a cached RSC snapshot.\n * Creates a new Response with the original ArrayBuffer so createFromFetch\n * can consume the stream from scratch.\n *\n * NOTE: The reconstructed Response always has `url === \"\"` — the Response\n * constructor does not accept a `url` option, and `response.url` is read-only\n * set by the fetch infrastructure. Callers that need the original URL should\n * read it from `cached.url` directly rather than from the restored Response.\n *\n * @param copy - When true (default), copies the ArrayBuffer so the cached\n * snapshot remains replayable (needed for the visited-response cache).\n * Pass false for single-consumption paths (e.g. prefetch cache entries\n * that are deleted after consumption) to avoid the extra allocation.\n */\nexport function restoreRscResponse(cached: CachedRscResponse, copy = true): Response {\n const headers = new Headers({ \"content-type\": cached.contentType });\n if (cached.mountedSlotsHeader != null) {\n headers.set(VINEXT_MOUNTED_SLOTS_HEADER, cached.mountedSlotsHeader);\n }\n if (cached.compatibilityIdHeader != null) {\n headers.set(VINEXT_RSC_COMPATIBILITY_ID_HEADER, cached.compatibilityIdHeader);\n }\n if (cached.paramsHeader != null) {\n headers.set(VINEXT_PARAMS_HEADER, cached.paramsHeader);\n }\n\n return new Response(copy ? cached.buffer.slice(0) : cached.buffer, {\n status: 200,\n headers,\n });\n}\n\n/**\n * Prefetch an RSC response and snapshot it for later consumption.\n * Stores the in-flight promise so immediate clicks can await it instead\n * of firing a duplicate fetch.\n * Enforces a maximum cache size to prevent unbounded memory growth on\n * link-heavy pages.\n */\nexport function prefetchRscResponse(\n rscUrl: string,\n fetchPromise: Promise<Response>,\n interceptionContext: string | null = null,\n mountedSlotsHeader: string | null = null,\n options?: PrefetchOptions,\n behavior: { cacheForNavigation?: boolean; optimisticRouteShell?: boolean } = {},\n): void {\n const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);\n const cache = getPrefetchCache();\n const prefetched = getPrefetchedUrls();\n const now = Date.now();\n\n const entry: PrefetchCacheEntry = {\n cacheForNavigation: behavior.cacheForNavigation ?? true,\n optimisticRouteShell: behavior.optimisticRouteShell === true,\n outcome: \"pending\",\n timestamp: now,\n };\n addPrefetchInvalidationCallback(entry, options?.onInvalidate);\n\n entry.pending = fetchPromise\n .then(async (response) => {\n if (response.ok) {\n entry.snapshot = {\n ...(await snapshotRscResponse(response)),\n // Prefetch compatibility is defined by the slot context at fetch\n // time, not by whatever header a reused response happens to carry.\n mountedSlotsHeader,\n };\n } else {\n deletePrefetchCacheEntry(cache, prefetched, cacheKey, entry, false);\n }\n })\n .catch(() => {\n deletePrefetchCacheEntry(cache, prefetched, cacheKey, entry, false);\n })\n .finally(() => {\n entry.pending = undefined;\n if (entry.snapshot) {\n entry.outcome = \"cache-seeded\";\n schedulePrefetchInvalidation(cacheKey, entry);\n }\n });\n\n // Insert the new entry before evicting. FIFO evicts from the front of the\n // Map (oldest insertion order), so the just-appended entry is safe — only\n // entries inserted before it are candidates for removal.\n cache.set(cacheKey, entry);\n evictPrefetchCacheIfNeeded();\n}\n\n/**\n * Consume a prefetched response for a given rscUrl.\n * Only returns settled (non-pending) snapshots synchronously.\n * Returns null if the entry is still in flight or doesn't exist.\n */\nexport function consumePrefetchResponse(\n rscUrl: string,\n interceptionContext: string | null = null,\n mountedSlotsHeader: string | null = null,\n): CachedRscResponse | null {\n const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);\n const cache = getPrefetchCache();\n const entry = cache.get(cacheKey);\n if (!entry) return null;\n\n // Skip in-flight snapshots and error-path residue where pending cleared\n // without a successful transition to a cache-seeded entry.\n if (entry.pending || entry.outcome !== \"cache-seeded\") return null;\n if (entry.cacheForNavigation === false) return null;\n\n deletePrefetchCacheEntry(cache, getPrefetchedUrls(), cacheKey, entry, false);\n\n if (entry.snapshot) {\n if ((entry.snapshot.mountedSlotsHeader ?? null) !== mountedSlotsHeader) {\n // Entry was already removed above. Slot mismatch means the prefetch\n // used stale slot context and cannot be safely reused.\n return null;\n }\n if (Date.now() - entry.timestamp >= PREFETCH_CACHE_TTL) {\n return null;\n }\n return entry.snapshot;\n }\n\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Client navigation state — stored on a Symbol.for global to survive\n// multiple Vite module instances loading this file through different IDs.\n// ---------------------------------------------------------------------------\n\ntype NavigationListener = () => void;\nconst _CLIENT_NAV_STATE_KEY = Symbol.for(\"vinext.clientNavigationState\");\nconst _MOUNTED_SLOTS_HEADER_KEY = Symbol.for(\"vinext.mountedSlotsHeader\");\n\ntype ClientNavigationState = {\n listeners: Set<NavigationListener>;\n cachedSearch: string;\n cachedReadonlySearchParams: ReadonlyURLSearchParams;\n cachedPathname: string;\n clientParams: Record<string, string | string[]>;\n clientParamsJson: string;\n pendingClientParams: Record<string, string | string[]> | null;\n pendingClientParamsJson: string | null;\n pendingPathname: string | null;\n pendingPathnameNavId: number | null;\n originalPushState: typeof window.history.pushState;\n originalReplaceState: typeof window.history.replaceState;\n patchInstalled: boolean;\n hasPendingNavigationUpdate: boolean;\n suppressUrlNotifyCount: number;\n navigationSnapshotActiveCount: number;\n};\n\ntype CommitClientNavigationStateOptions = {\n releaseSnapshot?: boolean;\n};\n\ntype ClientNavigationGlobal = typeof globalThis & {\n [_CLIENT_NAV_STATE_KEY]?: ClientNavigationState;\n [_MOUNTED_SLOTS_HEADER_KEY]?: string | null;\n};\n\nexport function setMountedSlotsHeader(header: string | null): void {\n if (isServer) return;\n const globalState = window as ClientNavigationGlobal;\n globalState[_MOUNTED_SLOTS_HEADER_KEY] = header;\n}\n\nexport function getMountedSlotsHeader(): string | null {\n if (isServer) return null;\n const globalState = window as ClientNavigationGlobal;\n return globalState[_MOUNTED_SLOTS_HEADER_KEY] ?? null;\n}\n\nexport function getClientNavigationState(): ClientNavigationState | null {\n if (isServer) return null;\n\n const globalState = window as ClientNavigationGlobal;\n globalState[_CLIENT_NAV_STATE_KEY] ??= {\n listeners: new Set<NavigationListener>(),\n cachedSearch: window.location.search,\n cachedReadonlySearchParams: new ReadonlyURLSearchParams(window.location.search),\n cachedPathname: stripBasePath(window.location.pathname, __basePath),\n clientParams: {},\n clientParamsJson: \"{}\",\n pendingClientParams: null,\n pendingClientParamsJson: null,\n pendingPathname: null,\n pendingPathnameNavId: null,\n // NB: These capture the currently installed history methods, not guaranteed\n // native ones. If a third-party library (analytics, router) has already patched\n // history methods before this module loads, we intentionally preserve that\n // wrapper. With Symbol.for global state, the first module instance to load wins.\n originalPushState: window.history.pushState.bind(window.history),\n originalReplaceState: window.history.replaceState.bind(window.history),\n patchInstalled: false,\n hasPendingNavigationUpdate: false,\n suppressUrlNotifyCount: 0,\n navigationSnapshotActiveCount: 0,\n };\n\n return globalState[_CLIENT_NAV_STATE_KEY]!;\n}\n\nfunction notifyNavigationListeners(): void {\n const state = getClientNavigationState();\n if (!state) return;\n for (const fn of state.listeners) fn();\n}\n\n// Cached URLSearchParams, pathname, etc. for referential stability\n// useSyncExternalStore compares snapshots with Object.is — avoid creating\n// new instances on every render (infinite re-renders).\nlet _cachedEmptyServerSearchParams: ReadonlyURLSearchParams | null = null;\n\n/**\n * Get cached pathname snapshot for useSyncExternalStore.\n * Note: Returns cached value from ClientNavigationState, not live window.location.\n * The cache is updated by syncCommittedUrlStateFromLocation() after navigation commits.\n * This ensures referential stability and prevents infinite re-renders.\n * External pushState/replaceState while URL notifications are suppressed won't\n * be visible until the next commit.\n */\nfunction getPathnameSnapshot(): string {\n return getClientNavigationState()?.cachedPathname ?? \"/\";\n}\n\nlet _cachedEmptyClientSearchParams: ReadonlyURLSearchParams | null = null;\n\n/**\n * Get cached search params snapshot for useSyncExternalStore.\n * Note: Returns cached value from ClientNavigationState, not live window.location.search.\n * The cache is updated by syncCommittedUrlStateFromLocation() after navigation commits.\n * This ensures referential stability and prevents infinite re-renders.\n * External pushState/replaceState while URL notifications are suppressed won't\n * be visible until the next commit.\n */\nfunction getSearchParamsSnapshot(): ReadonlyURLSearchParams {\n const cached = getClientNavigationState()?.cachedReadonlySearchParams;\n if (cached) return cached;\n if (_cachedEmptyClientSearchParams === null) {\n _cachedEmptyClientSearchParams = new ReadonlyURLSearchParams();\n }\n return _cachedEmptyClientSearchParams;\n}\n\nfunction syncCommittedUrlStateFromLocation(): boolean {\n const state = getClientNavigationState();\n if (!state) return false;\n\n let changed = false;\n\n const pathname = stripBasePath(window.location.pathname, __basePath);\n if (pathname !== state.cachedPathname) {\n state.cachedPathname = pathname;\n changed = true;\n }\n\n const search = window.location.search;\n if (search !== state.cachedSearch) {\n state.cachedSearch = search;\n state.cachedReadonlySearchParams = new ReadonlyURLSearchParams(search);\n changed = true;\n }\n\n return changed;\n}\n\nfunction getServerSearchParamsSnapshot(): ReadonlyURLSearchParams {\n const ctx = _getServerContext() as NavigationContextWithReadonlyCache | null;\n\n if (!ctx) {\n // No App Router server context - try Pages Router compat shim.\n // See `adaptForSearchParams` in Next.js's adapters:\n // .nextjs-ref/packages/next/src/shared/lib/router/adapters.tsx\n const pagesCtx = _getPagesNavigationContext();\n if (pagesCtx) {\n return new ReadonlyURLSearchParams(pagesCtx.searchParams);\n }\n if (_cachedEmptyServerSearchParams === null) {\n _cachedEmptyServerSearchParams = new ReadonlyURLSearchParams();\n }\n return _cachedEmptyServerSearchParams;\n }\n\n const source = ctx.searchParams;\n const cached = ctx[_READONLY_SEARCH_PARAMS];\n const cachedSource = ctx[_READONLY_SEARCH_PARAMS_SOURCE];\n\n // Return cached wrapper if source hasn't changed\n if (cached && cachedSource === source) {\n return cached;\n }\n\n // Create and cache new wrapper\n const readonly = new ReadonlyURLSearchParams(source);\n ctx[_READONLY_SEARCH_PARAMS] = readonly;\n ctx[_READONLY_SEARCH_PARAMS_SOURCE] = source;\n\n return readonly;\n}\n\n// ---------------------------------------------------------------------------\n// Navigation snapshot activation flag\n//\n// The render snapshot context provides pending URL values during transitions.\n// After the transition commits, the snapshot becomes stale and must NOT shadow\n// subsequent external URL changes (user pushState/replaceState). This flag\n// tracks whether a navigation transition is in progress — hooks only prefer\n// the snapshot while it's active.\n// ---------------------------------------------------------------------------\n\n/**\n * Mark a navigation snapshot as active. Called before startTransition\n * in renderNavigationPayload. While active, hooks prefer the snapshot\n * context value over useSyncExternalStore. Uses a counter (not boolean)\n * to handle overlapping navigations — rapid clicks can interleave\n * activate/deactivate if multiple transitions are in flight.\n */\nexport function activateNavigationSnapshot(): void {\n const state = getClientNavigationState();\n if (state) state.navigationSnapshotActiveCount++;\n}\n\n// Track client-side params (set during RSC hydration/navigation)\n// We cache the params object for referential stability — only create a new\n// object when the params actually change (shallow key/value comparison).\nconst _EMPTY_PARAMS: Record<string, string | string[]> = {};\n\n// ---------------------------------------------------------------------------\n// Client navigation render snapshot — provides pending URL values to hooks\n// during a startTransition so they see the destination, not the stale URL.\n// ---------------------------------------------------------------------------\n\nexport type ClientNavigationRenderSnapshot = {\n pathname: string;\n searchParams: ReadonlyURLSearchParams;\n params: Record<string, string | string[]>;\n};\n\nconst _CLIENT_NAV_RENDER_CTX_KEY = Symbol.for(\"vinext.clientNavigationRenderContext\");\ntype _ClientNavRenderGlobal = typeof globalThis & {\n [_CLIENT_NAV_RENDER_CTX_KEY]?: React.Context<ClientNavigationRenderSnapshot | null> | null;\n};\n\nexport function getClientNavigationRenderContext(): React.Context<ClientNavigationRenderSnapshot | null> | null {\n if (typeof React.createContext !== \"function\") return null;\n\n const globalState = globalThis as _ClientNavRenderGlobal;\n if (!globalState[_CLIENT_NAV_RENDER_CTX_KEY]) {\n globalState[_CLIENT_NAV_RENDER_CTX_KEY] =\n React.createContext<ClientNavigationRenderSnapshot | null>(null);\n }\n\n return globalState[_CLIENT_NAV_RENDER_CTX_KEY] ?? null;\n}\n\n/* oxlint-disable eslint-plugin-react-hooks/rules-of-hooks */\nfunction useClientNavigationRenderSnapshot(): ClientNavigationRenderSnapshot | null {\n const ctx = getClientNavigationRenderContext();\n if (!ctx || typeof React.useContext !== \"function\") return null;\n try {\n return React.useContext(ctx);\n } catch {\n return null;\n }\n}\n/* oxlint-enable eslint-plugin-react-hooks/rules-of-hooks */\n\nexport function createClientNavigationRenderSnapshot(\n href: string,\n params: Record<string, string | string[]>,\n): ClientNavigationRenderSnapshot {\n const origin = typeof window !== \"undefined\" ? window.location.origin : \"http://localhost\";\n const url = new URL(href, origin);\n\n return {\n pathname: stripBasePath(url.pathname, __basePath),\n searchParams: new ReadonlyURLSearchParams(url.search),\n params,\n };\n}\n\n// Module-level fallback for environments without window (tests, SSR).\nlet _fallbackClientParams: Record<string, string | string[]> = _EMPTY_PARAMS;\nlet _fallbackClientParamsJson = \"{}\";\n\nexport function setClientParams(params: Record<string, string | string[]>): void {\n const state = getClientNavigationState();\n if (!state) {\n const json = JSON.stringify(params);\n if (json !== _fallbackClientParamsJson) {\n _fallbackClientParams = params;\n _fallbackClientParamsJson = json;\n }\n return;\n }\n\n const json = JSON.stringify(params);\n if (json !== state.clientParamsJson) {\n state.clientParams = params;\n state.clientParamsJson = json;\n state.pendingClientParams = null;\n state.pendingClientParamsJson = null;\n notifyNavigationListeners();\n }\n}\n\nexport function replaceClientParamsWithoutNotify(params: Record<string, string | string[]>): void {\n const state = getClientNavigationState();\n if (!state) return;\n\n const json = JSON.stringify(params);\n if (json !== state.clientParamsJson && json !== state.pendingClientParamsJson) {\n state.pendingClientParams = params;\n state.pendingClientParamsJson = json;\n state.hasPendingNavigationUpdate = true;\n }\n}\n\n/** Get the current client params (for testing referential stability). */\nexport function getClientParams(): Record<string, string | string[]> {\n return getClientNavigationState()?.clientParams ?? _fallbackClientParams;\n}\n\n/**\n * Set the pending pathname for client-side navigation.\n * Strips the base path before storing. Associates the pathname with the given navId\n * so only that navigation (or a newer one) can clear it.\n */\nexport function setPendingPathname(pathname: string, navId: number): void {\n const state = getClientNavigationState();\n if (!state) return;\n state.pendingPathname = stripBasePath(pathname, __basePath);\n state.pendingPathnameNavId = navId;\n}\n\n/**\n * Clear the pending pathname, but only if the given navId matches the one\n * that set it, or if pendingPathnameNavId is null (no active owner).\n * This prevents superseded navigations from clearing state belonging to newer navigations.\n */\nexport function clearPendingPathname(navId: number): void {\n const state = getClientNavigationState();\n if (!state) return;\n // Only clear if this navId is the one that set the pendingPathname,\n // or if pendingPathnameNavId is null (no owner)\n if (state.pendingPathnameNavId === null || state.pendingPathnameNavId === navId) {\n state.pendingPathname = null;\n state.pendingPathnameNavId = null;\n }\n}\n\nfunction getClientParamsSnapshot(): Record<string, string | string[]> {\n const state = getClientNavigationState();\n if (state && Object.keys(state.clientParams).length > 0) {\n return state.clientParams;\n }\n // Fall back to the Pages Router compat shim if nothing has populated the\n // App Router client params (Pages Router pages never call setClientParams).\n const pagesCtx = _getPagesNavigationContext();\n if (pagesCtx) return pagesCtx.params;\n return state?.clientParams ?? _EMPTY_PARAMS;\n}\n\nfunction getServerParamsSnapshot(): Record<string, string | string[]> {\n const ctx = _getServerContext();\n if (ctx) return ctx.params;\n // No App Router navigation context — fall back to Pages Router state.\n // See `adaptForPathParams` in Next.js's pages-router adapter:\n // .nextjs-ref/packages/next/src/shared/lib/router/adapters.tsx\n const pagesCtx = _getPagesNavigationContext();\n return pagesCtx?.params ?? _EMPTY_PARAMS;\n}\n\nfunction subscribeToNavigation(cb: () => void): () => void {\n const state = getClientNavigationState();\n if (!state) return () => {};\n\n state.listeners.add(cb);\n return () => {\n state.listeners.delete(cb);\n };\n}\n\n/* oxlint-disable eslint-plugin-react-hooks/rules-of-hooks */\n/**\n * Returns the current pathname.\n * Server: from request context. Client: from window.location.\n */\nexport function usePathname(): string {\n if (isServer) {\n // During SSR of \"use client\" components, the navigation context may not be set.\n // Return a safe fallback — the client will hydrate with the real value.\n const ctx = _getServerContext();\n if (ctx) return ctx.pathname;\n // Pages Router compat shim: derive pathname from the Pages Router state.\n return _getPagesNavigationContext()?.pathname ?? \"/\";\n }\n const renderSnapshot = useClientNavigationRenderSnapshot();\n // Client-side: use the hook system for reactivity\n const pathname = React.useSyncExternalStore(\n subscribeToNavigation,\n getPathnameSnapshot,\n () => _getServerContext()?.pathname ?? _getPagesNavigationContext()?.pathname ?? \"/\",\n );\n // Prefer the render snapshot during an active navigation transition so\n // hooks return the pending URL, not the stale committed one. After commit,\n // fall through to useSyncExternalStore so user pushState/replaceState\n // calls are immediately reflected.\n if (renderSnapshot && (getClientNavigationState()?.navigationSnapshotActiveCount ?? 0) > 0) {\n return renderSnapshot.pathname;\n }\n return pathname;\n}\n/* oxlint-enable eslint-plugin-react-hooks/rules-of-hooks */\n\n/* oxlint-disable eslint-plugin-react-hooks/rules-of-hooks */\n/**\n * Returns the current search params as a read-only URLSearchParams.\n */\nexport function useSearchParams(): ReadonlyURLSearchParams {\n if (isServer) {\n // During SSR for \"use client\" components, the navigation context may not be set.\n // getServerSearchParamsSnapshot also covers the Pages Router compat shim.\n return getServerSearchParamsSnapshot();\n }\n const renderSnapshot = useClientNavigationRenderSnapshot();\n const searchParams = React.useSyncExternalStore(\n subscribeToNavigation,\n getSearchParamsSnapshot,\n getServerSearchParamsSnapshot,\n );\n if (renderSnapshot && (getClientNavigationState()?.navigationSnapshotActiveCount ?? 0) > 0) {\n return renderSnapshot.searchParams;\n }\n return searchParams;\n}\n/* oxlint-enable eslint-plugin-react-hooks/rules-of-hooks */\n\n/* oxlint-disable eslint-plugin-react-hooks/rules-of-hooks */\n/**\n * Returns the dynamic params for the current route.\n */\nexport function useParams<\n T extends Record<string, string | string[]> = Record<string, string | string[]>,\n>(): T {\n if (isServer) {\n // During SSR for \"use client\" components, the navigation context may not be set.\n // getServerParamsSnapshot covers both App Router and Pages Router compat.\n return getServerParamsSnapshot() as T;\n }\n const renderSnapshot = useClientNavigationRenderSnapshot();\n const params = React.useSyncExternalStore(\n subscribeToNavigation,\n getClientParamsSnapshot as () => T,\n getServerParamsSnapshot as () => T,\n );\n if (renderSnapshot && (getClientNavigationState()?.navigationSnapshotActiveCount ?? 0) > 0) {\n return renderSnapshot.params as T;\n }\n return params;\n}\n/* oxlint-enable eslint-plugin-react-hooks/rules-of-hooks */\n\n/**\n * Check if a href is an external URL (any URL scheme per RFC 3986, or protocol-relative).\n */\nfunction isExternalUrl(href: string): boolean {\n return isAbsoluteOrProtocolRelativeUrl(href);\n}\n\n/**\n * Check if a href is only a hash change relative to the current URL.\n */\nfunction isHashOnlyChange(href: string): boolean {\n if (typeof window === \"undefined\") return false;\n if (href.startsWith(\"#\")) return true;\n return isHashOnlyBrowserUrlChange(href, window.location.href, __basePath);\n}\n\n// ---------------------------------------------------------------------------\n// History method wrappers — suppress notifications for internal updates\n// ---------------------------------------------------------------------------\n\nfunction withSuppressedUrlNotifications<T>(fn: () => T): T {\n const state = getClientNavigationState();\n if (!state) {\n return fn();\n }\n\n state.suppressUrlNotifyCount += 1;\n try {\n return fn();\n } finally {\n state.suppressUrlNotifyCount -= 1;\n }\n}\n\n/**\n * Commit pending client navigation state to committed snapshots.\n *\n * navId is optional: callers that don't own pendingPathname (for example,\n * superseded pre-paint cleanup) may pass undefined to flush URL/params state\n * without clearing pendingPathname owned by the active navigation. Such callers\n * must opt in explicitly if they also own an activated render snapshot.\n */\nexport function commitClientNavigationState(\n navId?: number,\n options?: CommitClientNavigationStateOptions,\n): void {\n if (isServer) return;\n const state = getClientNavigationState();\n if (!state) return;\n\n // Only navigation-owned commits may release a render snapshot. Ownerless URL\n // syncs still update committed pathname/search state, but must not consume\n // the active snapshot for an in-flight App Router transition.\n const shouldReleaseSnapshot = navId !== undefined || options?.releaseSnapshot === true;\n if (shouldReleaseSnapshot && state.navigationSnapshotActiveCount > 0) {\n state.navigationSnapshotActiveCount -= 1;\n }\n\n const urlChanged = syncCommittedUrlStateFromLocation();\n if (state.pendingClientParams !== null && state.pendingClientParamsJson !== null) {\n state.clientParams = state.pendingClientParams;\n state.clientParamsJson = state.pendingClientParamsJson;\n state.pendingClientParams = null;\n state.pendingClientParamsJson = null;\n }\n // Clear pending pathname when navigation commits, but only if:\n // - The navId matches the one that set pendingPathname\n // - No newer navigation has overwritten pendingPathname (pendingPathnameNavId === null or matches)\n // - navId is undefined only for non-owning callers, which must not clear\n // pendingPathname for an active navigation.\n const canClearPendingPathname =\n state.pendingPathnameNavId === null ||\n (navId !== undefined && state.pendingPathnameNavId === navId);\n if (canClearPendingPathname) {\n state.pendingPathname = null;\n state.pendingPathnameNavId = null;\n }\n const shouldNotify = urlChanged || state.hasPendingNavigationUpdate;\n state.hasPendingNavigationUpdate = false;\n\n if (shouldNotify) {\n notifyNavigationListeners();\n getNavigationRuntime()?.functions.pingVisibleLinks?.();\n }\n}\n\nexport function pushHistoryStateWithoutNotify(\n data: unknown,\n unused: string,\n url?: string | URL | null,\n): void {\n withSuppressedUrlNotifications(() => {\n const state = getClientNavigationState();\n state?.originalPushState.call(window.history, data, unused, url);\n });\n}\n\nexport function replaceHistoryStateWithoutNotify(\n data: unknown,\n unused: string,\n url?: string | URL | null,\n): void {\n withSuppressedUrlNotifications(() => {\n const state = getClientNavigationState();\n state?.originalReplaceState.call(window.history, data, unused, url);\n });\n}\n\n/**\n * Save the current scroll position into the current history state.\n * Called before every navigation to enable scroll restoration on back/forward.\n *\n * Uses replaceHistoryStateWithoutNotify to avoid triggering the patched\n * history.replaceState interception (which would cause spurious re-renders).\n */\nfunction saveScrollPosition(): void {\n const state = window.history.state ?? {};\n replaceHistoryStateWithoutNotify(\n { ...state, __vinext_scrollX: window.scrollX, __vinext_scrollY: window.scrollY },\n \"\",\n );\n}\n\nfunction commitHashOnlyHistoryState(href: string, mode: \"push\" | \"replace\", scroll: boolean): void {\n const commitAppRouterHashNavigation = getNavigationRuntime()?.functions.commitHashNavigation;\n if (commitAppRouterHashNavigation) {\n commitAppRouterHashNavigation(href, mode, scroll);\n return;\n }\n\n if (mode === \"replace\") {\n replaceHistoryStateWithoutNotify(null, \"\", href);\n } else {\n pushHistoryStateWithoutNotify(null, \"\", href);\n }\n}\n\nfunction applyAppRouterScrollFallback(intent: AppRouterScrollIntent): void {\n if (typeof document === \"undefined\" || typeof window === \"undefined\") {\n return;\n }\n\n if (intent.hash !== null) {\n scrollToHashTarget(intent.hash);\n return;\n }\n\n document.documentElement.scrollTop = 0;\n}\n\n/**\n * Restore scroll position from a history state object (used on popstate).\n *\n * When an RSC navigation is in flight (back/forward triggers both this\n * handler and the browser entry's popstate handler which calls the registered\n * navigation runtime), we must wait for the new content to render\n * before scrolling. Otherwise the user sees old content flash at the\n * restored scroll position.\n *\n * This handler fires before the browser entry's popstate handler (because\n * navigation.ts is loaded before hydration completes), so we defer via a\n * microtask to give the browser entry handler a chance to set\n * __VINEXT_RSC_PENDING__. Promise.resolve() schedules a microtask\n * that runs after all synchronous event listeners have completed.\n */\nfunction restoreScrollPosition(state: unknown): void {\n if (state && typeof state === \"object\" && \"__vinext_scrollY\" in state) {\n const { __vinext_scrollX: x, __vinext_scrollY: y } = state as {\n __vinext_scrollX: number;\n __vinext_scrollY: number;\n };\n\n // Defer to allow other popstate listeners (browser entry) to run first\n // and set __VINEXT_RSC_PENDING__. Promise.resolve() schedules a microtask\n // that runs after all synchronous event listeners have completed.\n void Promise.resolve().then(() => {\n const pending: Promise<void> | null = window.__VINEXT_RSC_PENDING__ ?? null;\n\n if (pending) {\n // Wait for the RSC navigation to finish rendering, then scroll.\n void pending.then(() => {\n requestAnimationFrame(() => {\n window.scrollTo(x, y);\n });\n });\n } else {\n // No RSC navigation in flight (Pages Router or already settled).\n requestAnimationFrame(() => {\n window.scrollTo(x, y);\n });\n }\n });\n }\n}\n\n/**\n * Navigate to a URL, handling external URLs, hash-only changes, and RSC navigation.\n */\nexport async function navigateClientSide(\n href: string,\n mode: \"push\" | \"replace\",\n scroll: boolean,\n programmaticTransition = false,\n): Promise<void> {\n // Normalize same-origin absolute URLs to local paths for SPA navigation\n let normalizedHref = href;\n if (isExternalUrl(href)) {\n const localPath = toSameOriginAppPath(href, __basePath);\n if (localPath == null) {\n // Truly external: use full page navigation\n if (mode === \"replace\") {\n window.location.replace(href);\n } else {\n window.location.assign(href);\n }\n return;\n }\n normalizedHref = localPath;\n }\n\n const fullHref = toBrowserNavigationHref(normalizedHref, window.location.href, __basePath);\n // Match Next.js: App Router reports navigation start before dispatching,\n // including hash-only navigations that short-circuit after URL update.\n notifyAppRouterTransitionStart(fullHref, mode);\n\n // Save scroll position before navigating (for back/forward restoration)\n if (mode === \"push\") {\n saveScrollPosition();\n }\n\n // Hash-only change: update URL and scroll to target, skip RSC fetch\n if (isHashOnlyChange(fullHref)) {\n const hash = fullHref.includes(\"#\") ? fullHref.slice(fullHref.indexOf(\"#\")) : \"\";\n commitHashOnlyHistoryState(fullHref, mode, scroll);\n commitClientNavigationState();\n if (scroll) {\n scrollToHashTarget(hash);\n }\n return;\n }\n\n // Extract hash for post-navigation scrolling\n const hashIdx = fullHref.indexOf(\"#\");\n const hash = hashIdx !== -1 ? fullHref.slice(hashIdx) : \"\";\n const scrollIntent = scroll ? beginAppRouterScrollIntent(hash || null) : null;\n if (!scroll) {\n clearAppRouterScrollIntent();\n }\n\n // Trigger RSC re-fetch if available, and wait for the new content to render\n // before scrolling. This prevents the old page from visibly jumping to the\n // top before the new content paints.\n //\n // History is NOT pushed here for RSC navigations — the commit effect inside\n // navigateRsc owns the push/replace exclusively. This avoids a fragile\n // double-push and ensures window.location still reflects the *current* URL\n // when navigateRsc publishes the committed URL.\n const appNavigate = getNavigationRuntime()?.functions.navigate;\n try {\n if (appNavigate) {\n await appNavigate(\n fullHref,\n 0,\n \"navigate\",\n mode,\n undefined,\n programmaticTransition,\n undefined,\n scrollIntent,\n );\n } else {\n if (mode === \"replace\") {\n replaceHistoryStateWithoutNotify(null, \"\", fullHref);\n } else {\n pushHistoryStateWithoutNotify(null, \"\", fullHref);\n }\n commitClientNavigationState();\n }\n } catch (error) {\n if (scrollIntent) {\n consumeAppRouterScrollIntent(scrollIntent);\n }\n throw error;\n }\n\n if (scrollIntent) {\n const fallbackIntent = consumeAppRouterScrollIntent(scrollIntent);\n if (fallbackIntent) {\n applyAppRouterScrollFallback(fallbackIntent);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// App Router router singleton\n//\n// All methods close over module-level state (navigateClientSide, withBasePath, etc.)\n// and carry no per-render data, so the object can be created once and reused.\n// Next.js returns the same router reference on every call to useRouter(), which\n// matters for components that rely on referential equality (e.g. useMemo /\n// useEffect dependency arrays, React.memo bailouts).\n// ---------------------------------------------------------------------------\n\n// `router.refresh()` can run in the same outer transition after push/replace\n// while the nested navigation transition is still being scheduled.\nlet scheduledAppRouterNavigationCount = 0;\n\nfunction trackScheduledAppRouterNavigation(): () => void {\n scheduledAppRouterNavigationCount += 1;\n let released = false;\n\n return () => {\n if (released) return;\n released = true;\n scheduledAppRouterNavigationCount = Math.max(0, scheduledAppRouterNavigationCount - 1);\n };\n}\n\nfunction hasScheduledAppRouterNavigation(): boolean {\n return scheduledAppRouterNavigationCount > 0;\n}\n\nfunction releaseScheduledAppRouterNavigationAfterCurrentTask(release: () => void): void {\n queueMicrotask(release);\n}\n\n/**\n * App Router public router instance. Mirrors Next.js's\n * `publicAppRouterInstance` from\n * `packages/next/src/client/components/app-router-instance.ts`.\n *\n * Exported so the App Router browser entry can install it on\n * `window.next.router` for Next.js parity (see `client/window-next.ts`).\n * Internal callers in this file continue to use `_appRouter` for brevity.\n */\nconst _appRouter = {\n bfcacheId: \"0\",\n push(href: string, options?: { scroll?: boolean }): void {\n assertSafeNavigationUrl(href);\n if (isServer) return;\n const releaseNavigation = trackScheduledAppRouterNavigation();\n try {\n React.startTransition(() => {\n void navigateClientSide(href, \"push\", options?.scroll !== false, true);\n });\n } catch (error) {\n releaseNavigation();\n throw error;\n }\n releaseScheduledAppRouterNavigationAfterCurrentTask(releaseNavigation);\n },\n replace(href: string, options?: { scroll?: boolean }): void {\n assertSafeNavigationUrl(href);\n if (isServer) return;\n const releaseNavigation = trackScheduledAppRouterNavigation();\n try {\n React.startTransition(() => {\n void navigateClientSide(href, \"replace\", options?.scroll !== false, true);\n });\n } catch (error) {\n releaseNavigation();\n throw error;\n }\n releaseScheduledAppRouterNavigationAfterCurrentTask(releaseNavigation);\n },\n back(): void {\n if (isServer) return;\n window.history.back();\n },\n forward(): void {\n if (isServer) return;\n window.history.forward();\n },\n refresh(): void {\n if (isServer) return;\n // Drop cached RSC payloads for every previously-visited / prefetched route\n // before re-fetching. Next.js's refresh-reducer invalidates the entire\n // segment cache (refresh-reducer.ts → invalidateSegmentCacheEntries), so\n // without this, a stale cached payload for a sibling route (e.g. a page\n // gated by a session that has since been cleared) would still satisfy a\n // subsequent client navigation and bypass the server's redirect logic.\n getNavigationRuntime()?.functions.clearNavigationCaches?.();\n if (hasScheduledAppRouterNavigation()) return;\n // Re-fetch the current page's RSC stream\n const rscNavigate = getNavigationRuntime()?.functions.navigate;\n if (rscNavigate) {\n const navigate = () => {\n void rscNavigate(window.location.href, 0, \"refresh\", undefined, undefined, true);\n };\n React.startTransition(navigate);\n }\n },\n prefetch(href: string, options?: PrefetchOptions): void {\n assertSafeNavigationUrl(href);\n if (isServer) return;\n // Validate the URL is parseable. Mirrors Next.js's createPrefetchURL:\n // `packages/next/src/client/components/app-router-utils.ts` — when the URL\n // cannot be converted, Next.js throws so the call site (and its surrounding\n // error boundary, in the App Router) surfaces the failure. Without this\n // guard, vinext silently swallows unparseable hrefs and the test app's\n // error boundary never renders. basePath is applied before parsing to match\n // Next.js exactly: a non-empty basePath can make an otherwise broken-looking\n // href parseable (e.g. `new URL(\"/app///\", origin)` succeeds while\n // `new URL(\"///\", origin)` throws).\n try {\n new URL(withBasePath(href, __basePath), window.location.href);\n } catch {\n throw new Error(`Cannot prefetch '${href}' because it cannot be converted to a URL.`);\n }\n void (async () => {\n // Normalize same-origin absolute URLs to local paths; no-op for external\n // origins so we don't pollute the prefetch cache with a same-path .rsc on\n // the current origin. Mirrors Link's prefetchUrl and navigateClientSide.\n let prefetchHref = href;\n if (isAbsoluteOrProtocolRelativeUrl(href)) {\n const localPath = toSameOriginAppPath(href, __basePath);\n if (localPath == null) return;\n prefetchHref = localPath;\n }\n\n // Prefetch the RSC payload for the target route and store in cache.\n // We must add to prefetchedUrls manually for deduplication.\n // prefetchRscResponse only manages the cache Map, not the URL set.\n const fullHref = toBrowserNavigationHref(prefetchHref, window.location.href, __basePath);\n const interceptionContext = getPrefetchInterceptionContext(fullHref);\n const mountedSlotsHeader = getMountedSlotsHeader();\n const headers = createRscRequestHeaders({ interceptionContext });\n if (mountedSlotsHeader) {\n headers.set(VINEXT_MOUNTED_SLOTS_HEADER, mountedSlotsHeader);\n }\n const rscUrl = await createRscRequestUrl(fullHref, headers);\n const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);\n const prefetched = getPrefetchedUrls();\n if (prefetched.has(cacheKey)) {\n attachPrefetchInvalidationCallback(cacheKey, options?.onInvalidate);\n return;\n }\n prefetched.add(cacheKey);\n prefetchRscResponse(\n rscUrl,\n fetch(rscUrl, {\n headers,\n credentials: \"include\",\n priority: \"low\" as RequestInit[\"priority\"],\n }),\n interceptionContext,\n mountedSlotsHeader,\n options,\n );\n })().catch((error) => {\n console.error(\"[vinext] RSC prefetch setup error:\", error);\n });\n },\n};\n\n/**\n * Public App Router instance, exposed for the browser entry so it can wire\n * `window.next.router` to the same singleton returned from `useRouter()`.\n *\n * Mirrors `publicAppRouterInstance` from Next.js's\n * `packages/next/src/client/components/app-router-instance.ts` (line 392).\n */\nexport const appRouterInstance = _appRouter;\n\n/**\n * App Router's useRouter — returns push/replace/back/forward/refresh.\n * Different from Pages Router's useRouter (next/router).\n *\n * Returns a stable singleton: the same object reference on every call,\n * matching Next.js behavior so components using referential equality\n * (e.g. useMemo / useEffect deps, React.memo) don't re-render unnecessarily.\n */\nexport function useRouter() {\n if (!AppRouterContext || typeof React.useContext !== \"function\") {\n throw new Error(\"invariant expected app router to be mounted\");\n }\n const router = React.useContext(AppRouterContext);\n if (router === null) {\n throw new Error(\"invariant expected app router to be mounted\");\n }\n return router;\n}\n\n/**\n * Returns the active child segment one level below the layout where it's called.\n *\n * Returns the first segment from the route tree below this layout, including\n * route groups (e.g., \"(marketing)\") and resolved dynamic params. Returns null\n * if at the leaf (no child segments).\n *\n * @param parallelRoutesKey - Which parallel route to read (default: \"children\")\n */\nexport function useSelectedLayoutSegment(parallelRoutesKey?: string): string | null {\n const segments = useSelectedLayoutSegments(parallelRoutesKey);\n if (segments.length === 0) return null;\n\n return parallelRoutesKey === undefined || parallelRoutesKey === \"children\"\n ? segments[0]\n : segments[segments.length - 1];\n}\n\n/**\n * Returns all active segments below the layout where it's called.\n *\n * Each layout in the App Router tree wraps its children with a\n * LayoutSegmentProvider whose value is a map of parallel route key to\n * segment arrays. The \"children\" key is the default parallel route.\n *\n * @param parallelRoutesKey - Which parallel route to read (default: \"children\")\n */\nexport function useSelectedLayoutSegments(parallelRoutesKey?: string): string[] {\n return useChildSegments(parallelRoutesKey);\n}\n\nexport { ReadonlyURLSearchParams };\n\n/**\n * useServerInsertedHTML — inject HTML during SSR from client components.\n *\n * Used by CSS-in-JS libraries (styled-components, emotion, StyleX) to inject\n * <style> tags during SSR so styles appear in the initial HTML (no FOUC).\n *\n * The callback is called once after each SSR render pass. The returned JSX/HTML\n * is serialized and injected into the HTML stream.\n *\n * Usage (in a \"use client\" component wrapping children):\n * useServerInsertedHTML(() => {\n * const styles = sheet.getStyleElement();\n * sheet.instance.clearTag();\n * return <>{styles}</>;\n * });\n */\n\nexport function useServerInsertedHTML(callback: () => unknown): void {\n if (typeof document !== \"undefined\") {\n // Client-side: no-op (styles are already in the DOM)\n return;\n }\n _getInsertedHTMLCallbacks().push(callback);\n}\n\n/**\n * Flush all collected useServerInsertedHTML callbacks.\n * Returns an array of results (React elements or strings).\n * Clears the callback list so the next render starts fresh.\n *\n * Called by the SSR entry after renderToReadableStream completes.\n */\nexport function flushServerInsertedHTML(): unknown[] {\n const callbacks = _getInsertedHTMLCallbacks();\n const results: unknown[] = [];\n for (const cb of callbacks) {\n try {\n const result = cb();\n if (result != null) results.push(result);\n } catch {\n // Ignore errors from individual callbacks\n }\n }\n callbacks.length = 0;\n return results;\n}\n\n/**\n * Render collected useServerInsertedHTML callbacks without unregistering them.\n *\n * Streaming SSR needs to invoke the same style-registry callbacks after each\n * Fizz flush. Libraries such as styled-components and Emotion clear their own\n * per-flush buffers inside the callback; the registration itself must survive\n * until the request stream is closed.\n */\nexport function renderServerInsertedHTML(): unknown[] {\n const callbacks = _getInsertedHTMLCallbacks();\n const results: unknown[] = [];\n for (const cb of callbacks) {\n try {\n const result = cb();\n if (result != null) results.push(result);\n } catch {\n // Ignore errors from individual callbacks\n }\n }\n return results;\n}\n\n/**\n * Clear all collected useServerInsertedHTML callbacks without flushing.\n * Used for cleanup between requests.\n */\nexport function clearServerInsertedHTML(): void {\n _clearInsertedHTMLCallbacks();\n}\n\n// ---------------------------------------------------------------------------\n// Non-hook utilities (can be called from Server Components)\n// ---------------------------------------------------------------------------\n\n/**\n * HTTP Access Fallback error code — shared prefix for notFound/forbidden/unauthorized.\n * Matches Next.js 16's unified error handling approach.\n */\nexport const HTTP_ERROR_FALLBACK_ERROR_CODE = \"NEXT_HTTP_ERROR_FALLBACK\";\n\n/**\n * Check if an error is an HTTP Access Fallback error (notFound, forbidden, unauthorized).\n */\nexport function isHTTPAccessFallbackError(error: unknown): boolean {\n if (error && typeof error === \"object\" && \"digest\" in error) {\n const digest = String((error as { digest: unknown }).digest);\n return (\n digest === \"NEXT_NOT_FOUND\" || // legacy compat\n digest.startsWith(`${HTTP_ERROR_FALLBACK_ERROR_CODE};`)\n );\n }\n return false;\n}\n\n/**\n * Extract the HTTP status code from an HTTP Access Fallback error.\n * Returns 404 for legacy NEXT_NOT_FOUND errors.\n */\nexport function getAccessFallbackHTTPStatus(error: unknown): number {\n if (error && typeof error === \"object\" && \"digest\" in error) {\n const digest = String((error as { digest: unknown }).digest);\n if (digest === \"NEXT_NOT_FOUND\") return 404;\n if (digest.startsWith(`${HTTP_ERROR_FALLBACK_ERROR_CODE};`)) {\n return parseInt(digest.split(\";\")[1], 10);\n }\n }\n return 404;\n}\n\n/**\n * Enum matching Next.js RedirectType for type-safe redirect calls.\n */\nexport enum RedirectType {\n push = \"push\",\n replace = \"replace\",\n}\n\n/**\n * Internal error class used by redirect/notFound/forbidden/unauthorized.\n * The `digest` field is the serialised control-flow signal read by the\n * framework's error boundary and server-side request handlers.\n */\nclass VinextNavigationError extends Error {\n readonly digest: string;\n constructor(message: string, digest: string) {\n super(message);\n this.digest = digest;\n }\n}\n\n/**\n * Throw a redirect. Caught by the framework to send a redirect response.\n *\n * When `type` is omitted, the digest carries an empty sentinel so the\n * catch site can resolve the default based on context:\n * - Server Action context → \"push\" (Back button works after form submission)\n * - SSR render context → \"replace\"\n *\n * This matches Next.js behavior where `redirect()` checks\n * `actionAsyncStorage.getStore()?.isAction` at call time.\n *\n * @see https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/redirect.ts\n */\nexport function redirect(url: string, type?: \"replace\" | \"push\" | RedirectType): never {\n throw new VinextNavigationError(\n `NEXT_REDIRECT:${url}`,\n `NEXT_REDIRECT;${type ?? \"\"};${encodeURIComponent(url)}`,\n );\n}\n\n/**\n * Trigger a permanent redirect (308).\n *\n * Accepts an optional `type` parameter matching Next.js's signature.\n * Defaults to \"replace\" (not context-dependent like `redirect()`).\n *\n * @see https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/redirect.ts\n */\nexport function permanentRedirect(\n url: string,\n type: \"replace\" | \"push\" | RedirectType = \"replace\",\n): never {\n throw new VinextNavigationError(\n `NEXT_REDIRECT:${url}`,\n `NEXT_REDIRECT;${type};${encodeURIComponent(url)};308`,\n );\n}\n\n/**\n * Trigger a not-found response (404). Caught by the framework.\n */\nexport function notFound(): never {\n throw new VinextNavigationError(\"NEXT_NOT_FOUND\", `${HTTP_ERROR_FALLBACK_ERROR_CODE};404`);\n}\n\n/**\n * Trigger a forbidden response (403). Caught by the framework.\n * In Next.js, this is gated behind experimental.authInterrupts — we\n * support it unconditionally for maximum compatibility.\n */\nexport function forbidden(): never {\n throw new VinextNavigationError(\"NEXT_FORBIDDEN\", `${HTTP_ERROR_FALLBACK_ERROR_CODE};403`);\n}\n\n/**\n * Trigger an unauthorized response (401). Caught by the framework.\n * In Next.js, this is gated behind experimental.authInterrupts — we\n * support it unconditionally for maximum compatibility.\n */\nexport function unauthorized(): never {\n throw new VinextNavigationError(\"NEXT_UNAUTHORIZED\", `${HTTP_ERROR_FALLBACK_ERROR_CODE};401`);\n}\n\n// ---------------------------------------------------------------------------\n// Internal-error predicates and rethrow\n//\n// `unstable_rethrow` is part of Next.js's public API. User code in try/catch\n// wrappers calls it to let Next.js's control-flow signals (redirect, notFound,\n// forbidden, unauthorized, dynamic-server-usage, bailout-to-CSR, …)\n// propagate up to the framework instead of being swallowed. The canonical\n// use case is a `fetch()` retry helper that needs to bail out the moment\n// fetch throws a framework signal — see Next.js's\n// test/e2e/app-dir/app-static/lib/fetch-retry.js.\n//\n// Ported from Next.js:\n// - packages/next/src/client/components/unstable-rethrow.ts (dispatcher)\n// - packages/next/src/client/components/unstable-rethrow.browser.ts\n// - packages/next/src/client/components/unstable-rethrow.server.ts\n// - packages/next/src/client/components/is-next-router-error.ts\n// - packages/next/src/client/components/redirect-error.ts\n// - packages/next/src/shared/lib/lazy-dynamic/bailout-to-csr.ts\n// - packages/next/src/client/components/hooks-server-context.ts\n//\n// Coverage of Next.js's 7 server-side categories (server build):\n// ✓ isNextRouterError (#1) — redirect + HTTP access fallback\n// ✓ isBailoutToCSRError (#2) — digest === \"BAILOUT_TO_CLIENT_SIDE_RENDERING\"\n// ✓ isDynamicServerError (#3) — digest === \"DYNAMIC_SERVER_USAGE\"\n// ✗ isDynamicPostpone (#4) — PPR-internal message check; vinext has no PPR\n// ✗ isPostpone (#5) — React.unstable_postpone signal; vinext has no PPR\n// ✗ isHangingPromiseRejectionError (#6) — prerender abort signal\n// ✗ isPrerenderInterruptedError (#7) — prerender controller interrupt\n//\n// The four uncovered categories are server-only Next.js internals tied to\n// prerender-machinery vinext does not implement; user code cannot construct\n// them in normal use. They will be added if/when vinext grows PPR support.\n// ---------------------------------------------------------------------------\n\ntype _RedirectErrorShape = Error & { digest: string };\n\n/**\n * Check whether an error was produced by `redirect()` or `permanentRedirect()`.\n *\n * **Note on vinext public surface:** Next.js does NOT expose `isRedirectError`\n * from `next/navigation` — it's an internal predicate. vinext exposes it for\n * symmetry with the already-public `isHTTPAccessFallbackError` and because\n * `unstable_rethrow` consumers benefit from being able to narrow types.\n * Treat it as a vinext-only extension.\n *\n * **Divergence from Next.js:** Next.js's internal `isRedirectError` performs\n * full 4-segment validation — it splits the digest on `;`, checks `type` ∈\n * {push, replace}, requires a non-empty destination, and validates the\n * status code (303, 307, 308). See:\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/redirect-error.ts\n *\n * vinext instead uses a simple prefix check (`startsWith(\"NEXT_REDIRECT;\")`).\n * Reasons:\n * 1. vinext emits two digest shapes — 3-part for `redirect()`\n * (`NEXT_REDIRECT;{type};{encoded-url}`) and 4-part for\n * `permanentRedirect()` (`NEXT_REDIRECT;{type};{encoded-url};308`).\n * Strict validation would have to special-case both, and Next.js's\n * validator (tuned to its 5-part canary digests) rejects them.\n * 2. The `type` field is sometimes empty in vinext's redirect digests\n * (context-dependent resolution; see `redirect()` above), which the\n * strict check disallows.\n *\n * **Consequence:** A malformed digest such as `\"NEXT_REDIRECT;garbage\"`\n * returns `true` here, whereas Next.js would return `false`. In practice,\n * the only callers of this predicate are vinext-internal code paths\n * (`unstable_rethrow`, `unstable_catchError`, the redirect error boundary)\n * that see digests vinext itself emits — so the divergence does not surface\n * in normal use. Maintainers extending the prefix logic should keep this\n * predicate in lockstep with the corresponding `decode*` helpers in\n * `shims/error-boundary.tsx`.\n */\nexport function isRedirectError(error: unknown): error is _RedirectErrorShape {\n if (\n !error ||\n typeof error !== \"object\" ||\n !(\"digest\" in error) ||\n typeof (error as { digest: unknown }).digest !== \"string\"\n ) {\n return false;\n }\n return (error as { digest: string }).digest.startsWith(\"NEXT_REDIRECT;\");\n}\n\n/**\n * Returns true if the error is a Next.js navigation signal — either a redirect\n * or an HTTP access fallback (notFound / forbidden / unauthorized).\n *\n * **Note on vinext public surface:** Like `isRedirectError`, Next.js does NOT\n * expose this from `next/navigation`. vinext exposes it for symmetry — treat\n * it as a vinext-only extension.\n *\n * Ported from Next.js:\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/is-next-router-error.ts\n */\nexport function isNextRouterError(error: unknown): boolean {\n return isRedirectError(error) || isHTTPAccessFallbackError(error);\n}\n\n// ---------------------------------------------------------------------------\n// BailoutToCSRError — `next/dynamic` with `ssr: false` throws this during\n// server render to signal that the dynamic component must be rendered on\n// the client. Lives in shared (non-server) code so it can flow through both\n// the SSR pipeline and userland; third-party libraries that emulate\n// `next/dynamic` also construct it.\n//\n// Ported from Next.js:\n// https://github.com/vercel/next.js/blob/canary/packages/next/src/shared/lib/lazy-dynamic/bailout-to-csr.ts\n// ---------------------------------------------------------------------------\n\nconst _BAILOUT_TO_CSR_DIGEST = \"BAILOUT_TO_CLIENT_SIDE_RENDERING\";\n\n/**\n * Error thrown to bail out of server rendering and fall back to client-side\n * rendering. Used by `next/dynamic` with `ssr: false`.\n *\n * vinext does not yet emit this error itself — it's exposed so user code and\n * third-party libraries that mimic `next/dynamic`'s bailout semantics can\n * construct an error with the canonical digest that `unstable_rethrow`\n * recognises.\n *\n * Ported 1:1 from Next.js:\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/shared/lib/lazy-dynamic/bailout-to-csr.ts\n */\nexport class BailoutToCSRError extends Error {\n public readonly digest: typeof _BAILOUT_TO_CSR_DIGEST = _BAILOUT_TO_CSR_DIGEST;\n public readonly reason: string;\n\n constructor(reason: string) {\n super(`Bail out to client-side rendering: ${reason}`);\n this.reason = reason;\n }\n}\n\n/**\n * Returns true if the error is a `BailoutToCSRError`. Matches Next.js's\n * digest-based predicate, so any error from a foreign module instance of\n * the class (or constructed manually with the canonical digest) is also\n * detected.\n *\n * **Note on vinext public surface:** Next.js does NOT expose this from\n * `next/navigation`. vinext exposes it for symmetry with `isRedirectError`\n * — treat it as a vinext-only extension. The matching producer\n * (`BailoutToCSRError`) is the public detection contract; Next.js exposes\n * neither.\n *\n * Ported from Next.js:\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/shared/lib/lazy-dynamic/bailout-to-csr.ts\n */\nexport function isBailoutToCSRError(error: unknown): error is BailoutToCSRError {\n if (!error || typeof error !== \"object\" || !(\"digest\" in error)) {\n return false;\n }\n return (error as { digest: unknown }).digest === _BAILOUT_TO_CSR_DIGEST;\n}\n\n// ---------------------------------------------------------------------------\n// DynamicServerError — thrown by Next.js's internal `cookies()`/`headers()`\n// shims when called inside a static render context that cannot resolve\n// request-scoped data. vinext's own `next/headers` shim has its own throw\n// semantics, so vinext never constructs this error itself, but third-party\n// code or accidentally-bundled Next.js internals can.\n//\n// Ported from Next.js:\n// https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/hooks-server-context.ts\n// ---------------------------------------------------------------------------\n\nconst _DYNAMIC_SERVER_USAGE_DIGEST = \"DYNAMIC_SERVER_USAGE\";\n\n/**\n * Error thrown when dynamic server APIs (`cookies()`, `headers()`, etc.) are\n * used inside a static/prerender context. Carries the `DYNAMIC_SERVER_USAGE`\n * digest so `unstable_rethrow` can recognise and propagate it.\n *\n * vinext does not construct this error itself — exposed for the same\n * \"stable detection contract\" reason as `BailoutToCSRError` above.\n *\n * Ported 1:1 from Next.js:\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/hooks-server-context.ts\n */\nexport class DynamicServerError extends Error {\n public readonly digest: typeof _DYNAMIC_SERVER_USAGE_DIGEST = _DYNAMIC_SERVER_USAGE_DIGEST;\n public readonly description: string;\n\n constructor(description: string) {\n super(`Dynamic server usage: ${description}`);\n this.description = description;\n }\n}\n\n/**\n * Returns true if the error is a `DynamicServerError` (or any error with the\n * canonical `DYNAMIC_SERVER_USAGE` digest).\n *\n * **Note on vinext public surface:** Next.js does NOT expose this from\n * `next/navigation`. vinext exposes it for symmetry — treat it as a\n * vinext-only extension.\n *\n * Ported from Next.js:\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/hooks-server-context.ts\n */\nexport function isDynamicServerError(error: unknown): error is DynamicServerError {\n if (!error || typeof error !== \"object\" || !(\"digest\" in error)) {\n return false;\n }\n // `===` against a string literal already requires the operand to be a\n // string, so no separate `typeof digest === \"string\"` check is needed.\n // Matches `isBailoutToCSRError` above for stylistic consistency.\n return (error as { digest: unknown }).digest === _DYNAMIC_SERVER_USAGE_DIGEST;\n}\n\n/**\n * Rethrow internal Next.js errors so they're handled by the framework.\n *\n * When wrapping an API that uses errors for control flow (redirect, notFound,\n * cookies in static render, `next/dynamic` SSR bailout, etc.), call this\n * inside `catch` blocks before doing your own error handling. If the error\n * is a Next.js internal error, it's rethrown; otherwise this is a no-op\n * (apart from recursing through `error.cause`).\n *\n * Recognises (matches Next.js's browser build + the subset of the server\n * build that vinext can realistically encounter):\n * - `isNextRouterError`: redirect / notFound / forbidden / unauthorized\n * - `isBailoutToCSRError`: `next/dynamic` `ssr: false` bailout\n * - `isDynamicServerError`: dynamic API used in static render\n *\n * vinext does not yet recognise four additional server-only Next.js\n * categories — `isDynamicPostpone`, `isPostpone`,\n * `isHangingPromiseRejectionError`, `isPrerenderInterruptedError` — because\n * they signal PPR / prerender-controller events that vinext's render\n * pipeline does not generate. User code cannot construct these in normal\n * use; they will be added if/when vinext grows PPR support.\n *\n * Ported from Next.js:\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/unstable-rethrow.ts\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/unstable-rethrow.server.ts\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/unstable-rethrow.browser.ts\n */\nexport function unstable_rethrow(error: unknown): void {\n if (isNextRouterError(error) || isBailoutToCSRError(error) || isDynamicServerError(error)) {\n throw error;\n }\n\n if (error instanceof Error && \"cause\" in error) {\n unstable_rethrow((error as Error & { cause: unknown }).cause);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Unrecognized server-action errors\n//\n// `UnrecognizedActionError` / `unstable_isUnrecognizedActionError` live in a\n// dedicated zero-dependency module so this `next/navigation` shim and vinext's\n// client server-action dispatcher (`server/server-action-not-found.ts`) share\n// one class. `instanceof` is identity-based per module instance, so the\n// dispatcher and user code must resolve the same class for the predicate to\n// work. Re-exported here to keep the public `next/navigation` surface intact.\n// ---------------------------------------------------------------------------\n\nexport {\n UnrecognizedActionError,\n unstable_isUnrecognizedActionError,\n} from \"./unrecognized-action-error.js\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// Listen for popstate on the client\nif (!isServer) {\n const state = getClientNavigationState();\n if (state && !state.patchInstalled) {\n state.patchInstalled = true;\n\n // Listen for popstate on the client.\n // Note: This handler runs for Pages Router only (when App Router navigation\n // runtime is not available). It restores scroll position with microtask-based deferral.\n // App Router scroll restoration is handled in server/app-browser-entry.ts:697\n // with RSC navigation coordination (waits for pending navigation to settle).\n window.addEventListener(\"popstate\", (event) => {\n if (!hasAppNavigationRuntime()) {\n commitClientNavigationState();\n restoreScrollPosition(event.state);\n }\n });\n\n window.history.pushState = function patchedPushState(\n data: unknown,\n unused: string,\n url?: string | URL | null,\n ): void {\n state.originalPushState.call(\n window.history,\n createExternalHistoryStatePreservingMetadata(data, window.history.state),\n unused,\n url,\n );\n if (state.suppressUrlNotifyCount === 0) {\n commitClientNavigationState();\n }\n };\n\n window.history.replaceState = function patchedReplaceState(\n data: unknown,\n unused: string,\n url?: string | URL | null,\n ): void {\n state.originalReplaceState.call(\n window.history,\n createExternalHistoryStatePreservingMetadata(data, window.history.state),\n unused,\n url,\n );\n if (state.suppressUrlNotifyCount === 0) {\n commitClientNavigationState();\n }\n };\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigation.react-server.js","names":[],"sources":["../../src/shims/navigation.react-server.ts"],"sourcesContent":["import { throwClientHookError } from \"./client-hook-error.js\";\n\n// Re-export server-safe APIs from the canonical navigation module.\n// This import uses a relative path to the source file, which does NOT\n// go through the `next/navigation` resolveId hook — so it always\n// resolves to the full module, avoiding a circular redirect.\nexport {\n // Types\n type NavigationContext,\n type SegmentMap,\n\n // Server-side navigation state\n GLOBAL_ACCESSORS_KEY,\n _registerStateAccessors,\n getNavigationContext,\n setNavigationContext,\n\n // Layout segment context (returns null in RSC — createContext unavailable)\n getLayoutSegmentContext,\n ServerInsertedHTMLContext,\n\n // Server-inserted HTML\n flushServerInsertedHTML,\n renderServerInsertedHTML,\n clearServerInsertedHTML,\n\n // Control-flow errors\n HTTP_ERROR_FALLBACK_ERROR_CODE,\n isHTTPAccessFallbackError,\n getAccessFallbackHTTPStatus,\n RedirectType,\n redirect,\n permanentRedirect,\n notFound,\n forbidden,\n unauthorized,\n\n // Internal-error predicates and rethrow.\n //\n // These are environment-agnostic (no React hooks, no browser globals), so\n // we re-export the canonical implementation from `./navigation.js` to keep\n // a single source of truth across the react-server and client conditions.\n //\n // Ported from Next.js:\n // https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/navigation.react-server.ts\n // where `unstable_rethrow` is also re-exported in the react-server build.\n isRedirectError,\n isNextRouterError,\n isBailoutToCSRError,\n isDynamicServerError,\n BailoutToCSRError,\n DynamicServerError,\n unstable_rethrow,\n\n // Utilities\n ReadonlyURLSearchParams,\n} from \"./navigation.js\";\n\n// These hooks are client-only. Exporting error-throwing stubs (rather than\n// omitting them entirely) gives developers a clear, actionable error message\n// instead of the cryptic \"is not a function\" that Vite's runtime module\n// system produces for missing exports.\n\nexport function usePathname(): never {\n throwClientHookError(\"usePathname()\");\n}\n\nexport function useSearchParams(): never {\n throwClientHookError(\"useSearchParams()\");\n}\n\nexport function useParams(): never {\n throwClientHookError(\"useParams()\");\n}\n\nexport function useRouter(): never {\n throwClientHookError(\"useRouter()\");\n}\n\nexport function useSelectedLayoutSegment(): never {\n throwClientHookError(\"useSelectedLayoutSegment()\");\n}\n\nexport function useSelectedLayoutSegments(): never {\n throwClientHookError(\"useSelectedLayoutSegments()\");\n}\n\nexport function useServerInsertedHTML(): never {\n throwClientHookError(\"useServerInsertedHTML()\");\n}\n\n// `unstable_isUnrecognizedActionError` is client-only: server actions cannot\n// fail with \"unrecognized action\" inside the React-server render path because\n// they execute synchronously against the action manifest. Calling this from a\n// Server Component is always a programming error.\n//\n// Ported from Next.js:\n// https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/navigation.react-server.ts\n// which throws the same diagnostic message from the react-server condition.\nexport function unstable_isUnrecognizedActionError(): boolean {\n throw new Error(\"`unstable_isUnrecognizedActionError` can only be used on the client.\");\n}\n"],"mappings":";;;;AA+DA,SAAgB,cAAqB;CACnC,qBAAqB,gBAAgB;;AAGvC,SAAgB,kBAAyB;CACvC,qBAAqB,oBAAoB;;AAG3C,SAAgB,YAAmB;CACjC,qBAAqB,cAAc;;AAGrC,SAAgB,YAAmB;CACjC,qBAAqB,cAAc;;AAGrC,SAAgB,2BAAkC;CAChD,qBAAqB,6BAA6B;;AAGpD,SAAgB,4BAAmC;CACjD,qBAAqB,8BAA8B;;AAGrD,SAAgB,wBAA+B;CAC7C,qBAAqB,0BAA0B;;AAWjD,SAAgB,qCAA8C;CAC5D,MAAM,IAAI,MAAM,uEAAuE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"offline.js","names":[],"sources":["../../src/shims/offline.ts"],"sourcesContent":["/**\n * next/offline shim\n *\n * Stub for the experimental `useOffline()` hook added in Next.js\n * (vercel/next.js#92012). Returns `false` (online) unconditionally.\n * Full offline retry behavior (navigation retry, prefetch pause/resume,\n * OfflineProvider) will be implemented once the feature stabilizes upstream.\n */\n\"use client\";\n\nexport function useOffline(): boolean {\n return false;\n}\n"],"mappings":";;;;;;;;;;AAUA,SAAgB,aAAsB;CACpC,OAAO"}