vinext 0.0.49 → 0.0.51

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 (506) hide show
  1. package/dist/build/client-build-config.js.map +1 -1
  2. package/dist/build/google-fonts/build-url.js.map +1 -1
  3. package/dist/build/google-fonts/fallback-metrics-data.js +14031 -0
  4. package/dist/build/google-fonts/fallback-metrics-data.js.map +1 -0
  5. package/dist/build/google-fonts/fallback-metrics.d.ts +13 -0
  6. package/dist/build/google-fonts/fallback-metrics.js +46 -0
  7. package/dist/build/google-fonts/fallback-metrics.js.map +1 -0
  8. package/dist/build/google-fonts/get-axes.js.map +1 -1
  9. package/dist/build/google-fonts/sort-variants.js.map +1 -1
  10. package/dist/build/google-fonts/validate.js.map +1 -1
  11. package/dist/build/layout-classification.js.map +1 -1
  12. package/dist/build/nitro-route-rules.js.map +1 -1
  13. package/dist/build/precompress.d.ts +13 -2
  14. package/dist/build/precompress.js +12 -3
  15. package/dist/build/precompress.js.map +1 -1
  16. package/dist/build/prerender.d.ts +17 -1
  17. package/dist/build/prerender.js +114 -23
  18. package/dist/build/prerender.js.map +1 -1
  19. package/dist/build/report.d.ts +5 -4
  20. package/dist/build/report.js +196 -348
  21. package/dist/build/report.js.map +1 -1
  22. package/dist/build/route-classification-injector.js.map +1 -1
  23. package/dist/build/route-classification-manifest.js.map +1 -1
  24. package/dist/build/run-prerender.js.map +1 -1
  25. package/dist/build/server-manifest.js.map +1 -1
  26. package/dist/build/ssr-manifest.js.map +1 -1
  27. package/dist/build/standalone.js.map +1 -1
  28. package/dist/build/static-export.js.map +1 -1
  29. package/dist/check.js +2 -1
  30. package/dist/check.js.map +1 -1
  31. package/dist/cli-args.js.map +1 -1
  32. package/dist/cli.js +68 -7
  33. package/dist/cli.js.map +1 -1
  34. package/dist/client/instrumentation-client-state.js.map +1 -1
  35. package/dist/client/validate-module-path.js.map +1 -1
  36. package/dist/client/vinext-next-data.d.ts +5 -1
  37. package/dist/client/window-next.d.ts +151 -0
  38. package/dist/client/window-next.js +48 -0
  39. package/dist/client/window-next.js.map +1 -0
  40. package/dist/cloudflare/kv-cache-handler.js.map +1 -1
  41. package/dist/cloudflare/tpr.js +2 -1
  42. package/dist/cloudflare/tpr.js.map +1 -1
  43. package/dist/config/config-matchers.d.ts +3 -1
  44. package/dist/config/config-matchers.js +5 -4
  45. package/dist/config/config-matchers.js.map +1 -1
  46. package/dist/config/dotenv.d.ts +11 -1
  47. package/dist/config/dotenv.js.map +1 -1
  48. package/dist/config/next-config.d.ts +93 -6
  49. package/dist/config/next-config.js +233 -6
  50. package/dist/config/next-config.js.map +1 -1
  51. package/dist/config/tsconfig-paths.d.ts +13 -0
  52. package/dist/config/tsconfig-paths.js +117 -0
  53. package/dist/config/tsconfig-paths.js.map +1 -0
  54. package/dist/deploy.js +16 -7
  55. package/dist/deploy.js.map +1 -1
  56. package/dist/entries/app-browser-entry.d.ts +3 -1
  57. package/dist/entries/app-browser-entry.js +36 -2
  58. package/dist/entries/app-browser-entry.js.map +1 -1
  59. package/dist/entries/app-rsc-entry.d.ts +19 -1
  60. package/dist/entries/app-rsc-entry.js +49 -12
  61. package/dist/entries/app-rsc-entry.js.map +1 -1
  62. package/dist/entries/app-rsc-manifest.d.ts +9 -0
  63. package/dist/entries/app-rsc-manifest.js +8 -1
  64. package/dist/entries/app-rsc-manifest.js.map +1 -1
  65. package/dist/entries/app-ssr-entry.js.map +1 -1
  66. package/dist/entries/pages-client-entry.js +3 -5
  67. package/dist/entries/pages-client-entry.js.map +1 -1
  68. package/dist/entries/pages-entry-helpers.js.map +1 -1
  69. package/dist/entries/pages-server-entry.js +34 -1
  70. package/dist/entries/pages-server-entry.js.map +1 -1
  71. package/dist/entries/runtime-entry-module.js.map +1 -1
  72. package/dist/index.js +204 -53
  73. package/dist/index.js.map +1 -1
  74. package/dist/init.js.map +1 -1
  75. package/dist/plugins/async-hooks-stub.js.map +1 -1
  76. package/dist/plugins/client-reference-dedup.d.ts +15 -2
  77. package/dist/plugins/client-reference-dedup.js +138 -16
  78. package/dist/plugins/client-reference-dedup.js.map +1 -1
  79. package/dist/plugins/fonts.d.ts +2 -2
  80. package/dist/plugins/fonts.js +15 -6
  81. package/dist/plugins/fonts.js.map +1 -1
  82. package/dist/plugins/instrumentation-client.js.map +1 -1
  83. package/dist/plugins/og-assets.js.map +1 -1
  84. package/dist/plugins/optimize-imports.js.map +1 -1
  85. package/dist/plugins/postcss.js.map +1 -1
  86. package/dist/plugins/rsc-client-reference-loaders.d.ts +7 -0
  87. package/dist/plugins/rsc-client-reference-loaders.js +48 -0
  88. package/dist/plugins/rsc-client-reference-loaders.js.map +1 -0
  89. package/dist/plugins/rsc-client-shim-excludes.js.map +1 -1
  90. package/dist/plugins/sass.d.ts +34 -0
  91. package/dist/plugins/sass.js +22 -0
  92. package/dist/plugins/sass.js.map +1 -0
  93. package/dist/plugins/server-externals-manifest.js.map +1 -1
  94. package/dist/plugins/strip-server-exports.js.map +1 -1
  95. package/dist/routing/app-route-graph.d.ts +78 -6
  96. package/dist/routing/app-route-graph.js +241 -25
  97. package/dist/routing/app-route-graph.js.map +1 -1
  98. package/dist/routing/app-router.js.map +1 -1
  99. package/dist/routing/file-matcher.js.map +1 -1
  100. package/dist/routing/pages-router.js.map +1 -1
  101. package/dist/routing/route-matching.js.map +1 -1
  102. package/dist/routing/route-pattern.d.ts +56 -1
  103. package/dist/routing/route-pattern.js +60 -1
  104. package/dist/routing/route-pattern.js.map +1 -1
  105. package/dist/routing/route-trie.js.map +1 -1
  106. package/dist/routing/route-validation.js.map +1 -1
  107. package/dist/routing/utils.js.map +1 -1
  108. package/dist/server/api-handler.js.map +1 -1
  109. package/dist/server/app-browser-action-result.d.ts +44 -0
  110. package/dist/server/app-browser-action-result.js +79 -0
  111. package/dist/server/app-browser-action-result.js.map +1 -0
  112. package/dist/server/app-browser-entry.js +330 -133
  113. package/dist/server/app-browser-entry.js.map +1 -1
  114. package/dist/server/app-browser-error.js.map +1 -1
  115. package/dist/server/app-browser-hydration.d.ts +31 -0
  116. package/dist/server/app-browser-hydration.js +30 -0
  117. package/dist/server/app-browser-hydration.js.map +1 -0
  118. package/dist/server/app-browser-navigation-controller.d.ts +20 -4
  119. package/dist/server/app-browser-navigation-controller.js +90 -23
  120. package/dist/server/app-browser-navigation-controller.js.map +1 -1
  121. package/dist/server/app-browser-popstate.d.ts +16 -0
  122. package/dist/server/app-browser-popstate.js +17 -0
  123. package/dist/server/app-browser-popstate.js.map +1 -0
  124. package/dist/server/app-browser-rsc-redirect.d.ts +28 -0
  125. package/dist/server/app-browser-rsc-redirect.js +37 -0
  126. package/dist/server/app-browser-rsc-redirect.js.map +1 -0
  127. package/dist/server/app-browser-state.d.ts +27 -23
  128. package/dist/server/app-browser-state.js +158 -54
  129. package/dist/server/app-browser-state.js.map +1 -1
  130. package/dist/server/app-browser-stream.d.ts +9 -4
  131. package/dist/server/app-browser-stream.js +29 -8
  132. package/dist/server/app-browser-stream.js.map +1 -1
  133. package/dist/server/app-browser-visible-commit.d.ts +11 -1
  134. package/dist/server/app-browser-visible-commit.js +69 -21
  135. package/dist/server/app-browser-visible-commit.js.map +1 -1
  136. package/dist/server/app-client-reference-preloader.js.map +1 -1
  137. package/dist/server/app-elements-wire.d.ts +43 -6
  138. package/dist/server/app-elements-wire.js +121 -5
  139. package/dist/server/app-elements-wire.js.map +1 -1
  140. package/dist/server/app-elements.d.ts +2 -2
  141. package/dist/server/app-elements.js +2 -2
  142. package/dist/server/app-elements.js.map +1 -1
  143. package/dist/server/app-fallback-renderer.d.ts +10 -1
  144. package/dist/server/app-fallback-renderer.js +37 -1
  145. package/dist/server/app-fallback-renderer.js.map +1 -1
  146. package/dist/server/app-history-state.d.ts +26 -0
  147. package/dist/server/app-history-state.js +53 -0
  148. package/dist/server/app-history-state.js.map +1 -0
  149. package/dist/server/app-hook-warning-suppression.js.map +1 -1
  150. package/dist/server/app-middleware.d.ts +1 -1
  151. package/dist/server/app-middleware.js +4 -9
  152. package/dist/server/app-middleware.js.map +1 -1
  153. package/dist/server/app-mounted-slots-header.js.map +1 -1
  154. package/dist/server/app-page-boundary-render.d.ts +11 -1
  155. package/dist/server/app-page-boundary-render.js +27 -19
  156. package/dist/server/app-page-boundary-render.js.map +1 -1
  157. package/dist/server/app-page-boundary.d.ts +1 -0
  158. package/dist/server/app-page-boundary.js +10 -7
  159. package/dist/server/app-page-boundary.js.map +1 -1
  160. package/dist/server/app-page-cache.d.ts +23 -3
  161. package/dist/server/app-page-cache.js +63 -27
  162. package/dist/server/app-page-cache.js.map +1 -1
  163. package/dist/server/app-page-dispatch.d.ts +11 -1
  164. package/dist/server/app-page-dispatch.js +85 -14
  165. package/dist/server/app-page-dispatch.js.map +1 -1
  166. package/dist/server/app-page-element-builder.d.ts +10 -1
  167. package/dist/server/app-page-element-builder.js +38 -6
  168. package/dist/server/app-page-element-builder.js.map +1 -1
  169. package/dist/server/app-page-execution.js +2 -3
  170. package/dist/server/app-page-execution.js.map +1 -1
  171. package/dist/server/app-page-head.d.ts +7 -0
  172. package/dist/server/app-page-head.js +6 -1
  173. package/dist/server/app-page-head.js.map +1 -1
  174. package/dist/server/app-page-method.js.map +1 -1
  175. package/dist/server/app-page-params.js.map +1 -1
  176. package/dist/server/app-page-probe.d.ts +23 -1
  177. package/dist/server/app-page-probe.js +29 -1
  178. package/dist/server/app-page-probe.js.map +1 -1
  179. package/dist/server/app-page-render-observation.d.ts +35 -0
  180. package/dist/server/app-page-render-observation.js +68 -0
  181. package/dist/server/app-page-render-observation.js.map +1 -0
  182. package/dist/server/app-page-render.d.ts +12 -2
  183. package/dist/server/app-page-render.js +90 -7
  184. package/dist/server/app-page-render.js.map +1 -1
  185. package/dist/server/app-page-request.d.ts +1 -0
  186. package/dist/server/app-page-request.js +2 -1
  187. package/dist/server/app-page-request.js.map +1 -1
  188. package/dist/server/app-page-response.d.ts +2 -0
  189. package/dist/server/app-page-response.js +18 -7
  190. package/dist/server/app-page-response.js.map +1 -1
  191. package/dist/server/app-page-route-wiring.d.ts +9 -3
  192. package/dist/server/app-page-route-wiring.js +91 -62
  193. package/dist/server/app-page-route-wiring.js.map +1 -1
  194. package/dist/server/app-page-segment-state.d.ts +10 -0
  195. package/dist/server/app-page-segment-state.js +87 -0
  196. package/dist/server/app-page-segment-state.js.map +1 -0
  197. package/dist/server/app-page-stream.d.ts +9 -2
  198. package/dist/server/app-page-stream.js +4 -1
  199. package/dist/server/app-page-stream.js.map +1 -1
  200. package/dist/server/app-post-middleware-context.js.map +1 -1
  201. package/dist/server/app-prerender-endpoints.js.map +1 -1
  202. package/dist/server/app-prerender-static-params.js.map +1 -1
  203. package/dist/server/app-render-dependency.js.map +1 -1
  204. package/dist/server/app-request-context.js.map +1 -1
  205. package/dist/server/app-route-handler-cache.js.map +1 -1
  206. package/dist/server/app-route-handler-dispatch.js +3 -1
  207. package/dist/server/app-route-handler-dispatch.js.map +1 -1
  208. package/dist/server/app-route-handler-execution.js.map +1 -1
  209. package/dist/server/app-route-handler-policy.js +1 -0
  210. package/dist/server/app-route-handler-policy.js.map +1 -1
  211. package/dist/server/app-route-handler-response.js +4 -3
  212. package/dist/server/app-route-handler-response.js.map +1 -1
  213. package/dist/server/app-route-handler-runtime.js.map +1 -1
  214. package/dist/server/app-router-entry.js +7 -15
  215. package/dist/server/app-router-entry.js.map +1 -1
  216. package/dist/server/app-rsc-cache-busting.d.ts +23 -2
  217. package/dist/server/app-rsc-cache-busting.js +75 -19
  218. package/dist/server/app-rsc-cache-busting.js.map +1 -1
  219. package/dist/server/app-rsc-embedded-chunks.d.ts +9 -0
  220. package/dist/server/app-rsc-embedded-chunks.js +34 -0
  221. package/dist/server/app-rsc-embedded-chunks.js.map +1 -0
  222. package/dist/server/app-rsc-error-handler.js.map +1 -1
  223. package/dist/server/app-rsc-errors.d.ts +4 -1
  224. package/dist/server/app-rsc-errors.js +1 -1
  225. package/dist/server/app-rsc-errors.js.map +1 -1
  226. package/dist/server/app-rsc-handler.d.ts +18 -1
  227. package/dist/server/app-rsc-handler.js +55 -16
  228. package/dist/server/app-rsc-handler.js.map +1 -1
  229. package/dist/server/app-rsc-render-mode.d.ts +11 -0
  230. package/dist/server/app-rsc-render-mode.js +21 -0
  231. package/dist/server/app-rsc-render-mode.js.map +1 -0
  232. package/dist/server/app-rsc-request-normalization.d.ts +4 -1
  233. package/dist/server/app-rsc-request-normalization.js +7 -2
  234. package/dist/server/app-rsc-request-normalization.js.map +1 -1
  235. package/dist/server/app-rsc-response-finalizer.d.ts +2 -1
  236. package/dist/server/app-rsc-response-finalizer.js +6 -1
  237. package/dist/server/app-rsc-response-finalizer.js.map +1 -1
  238. package/dist/server/app-rsc-route-matching.d.ts +23 -0
  239. package/dist/server/app-rsc-route-matching.js +45 -23
  240. package/dist/server/app-rsc-route-matching.js.map +1 -1
  241. package/dist/server/app-segment-config.js.map +1 -1
  242. package/dist/server/app-server-action-execution.d.ts +51 -5
  243. package/dist/server/app-server-action-execution.js +161 -51
  244. package/dist/server/app-server-action-execution.js.map +1 -1
  245. package/dist/server/app-ssr-entry.d.ts +7 -0
  246. package/dist/server/app-ssr-entry.js +44 -14
  247. package/dist/server/app-ssr-entry.js.map +1 -1
  248. package/dist/server/app-ssr-error-meta.d.ts +14 -0
  249. package/dist/server/app-ssr-error-meta.js +50 -0
  250. package/dist/server/app-ssr-error-meta.js.map +1 -0
  251. package/dist/server/app-ssr-stream.d.ts +1 -1
  252. package/dist/server/app-ssr-stream.js +9 -12
  253. package/dist/server/app-ssr-stream.js.map +1 -1
  254. package/dist/server/app-static-generation.js.map +1 -1
  255. package/dist/server/artifact-compatibility.d.ts +12 -2
  256. package/dist/server/artifact-compatibility.js +12 -8
  257. package/dist/server/artifact-compatibility.js.map +1 -1
  258. package/dist/server/cache-control.js +1 -0
  259. package/dist/server/cache-control.js.map +1 -1
  260. package/dist/server/cache-proof.d.ts +124 -5
  261. package/dist/server/cache-proof.js +416 -18
  262. package/dist/server/cache-proof.js.map +1 -1
  263. package/dist/server/csp.js.map +1 -1
  264. package/dist/server/dev-error-overlay-store.js.map +1 -1
  265. package/dist/server/dev-error-overlay.js +5 -0
  266. package/dist/server/dev-error-overlay.js.map +1 -1
  267. package/dist/server/dev-lockfile.d.ts +110 -0
  268. package/dist/server/dev-lockfile.js +180 -0
  269. package/dist/server/dev-lockfile.js.map +1 -0
  270. package/dist/server/dev-module-runner.js.map +1 -1
  271. package/dist/server/dev-origin-check.js.map +1 -1
  272. package/dist/server/dev-route-files.js.map +1 -1
  273. package/dist/server/dev-server.js +23 -10
  274. package/dist/server/dev-server.js.map +1 -1
  275. package/dist/server/file-based-metadata.d.ts +13 -0
  276. package/dist/server/file-based-metadata.js +49 -2
  277. package/dist/server/file-based-metadata.js.map +1 -1
  278. package/dist/server/headers.d.ts +81 -0
  279. package/dist/server/headers.js +104 -0
  280. package/dist/server/headers.js.map +1 -0
  281. package/dist/server/html.js +1 -1
  282. package/dist/server/html.js.map +1 -1
  283. package/dist/server/http-error-responses.d.ts +10 -0
  284. package/dist/server/http-error-responses.js +11 -1
  285. package/dist/server/http-error-responses.js.map +1 -1
  286. package/dist/server/image-optimization.d.ts +11 -1
  287. package/dist/server/image-optimization.js.map +1 -1
  288. package/dist/server/implicit-tags.js +2 -1
  289. package/dist/server/implicit-tags.js.map +1 -1
  290. package/dist/server/instrumentation-runtime.js.map +1 -1
  291. package/dist/server/instrumentation.js.map +1 -1
  292. package/dist/server/isr-cache.d.ts +12 -2
  293. package/dist/server/isr-cache.js +16 -5
  294. package/dist/server/isr-cache.js.map +1 -1
  295. package/dist/server/metadata-route-build-data.js.map +1 -1
  296. package/dist/server/metadata-route-response.js +22 -5
  297. package/dist/server/metadata-route-response.js.map +1 -1
  298. package/dist/server/metadata-routes.js +27 -8
  299. package/dist/server/metadata-routes.js.map +1 -1
  300. package/dist/server/middleware-matcher.js.map +1 -1
  301. package/dist/server/middleware-request-headers.d.ts +4 -1
  302. package/dist/server/middleware-request-headers.js +15 -8
  303. package/dist/server/middleware-request-headers.js.map +1 -1
  304. package/dist/server/middleware-response-headers.d.ts +2 -1
  305. package/dist/server/middleware-response-headers.js +1 -1
  306. package/dist/server/middleware-response-headers.js.map +1 -1
  307. package/dist/server/middleware-runtime.d.ts +1 -0
  308. package/dist/server/middleware-runtime.js +7 -3
  309. package/dist/server/middleware-runtime.js.map +1 -1
  310. package/dist/server/middleware.d.ts +12 -0
  311. package/dist/server/middleware.js +12 -0
  312. package/dist/server/middleware.js.map +1 -1
  313. package/dist/server/navigation-planner.d.ts +133 -0
  314. package/dist/server/navigation-planner.js +432 -0
  315. package/dist/server/navigation-planner.js.map +1 -0
  316. package/dist/server/navigation-trace.d.ts +19 -2
  317. package/dist/server/navigation-trace.js +20 -1
  318. package/dist/server/navigation-trace.js.map +1 -1
  319. package/dist/server/next-error-digest.d.ts +3 -2
  320. package/dist/server/next-error-digest.js +4 -2
  321. package/dist/server/next-error-digest.js.map +1 -1
  322. package/dist/server/normalize-path.d.ts +2 -1
  323. package/dist/server/normalize-path.js +4 -1
  324. package/dist/server/normalize-path.js.map +1 -1
  325. package/dist/server/pages-api-route.js +1 -0
  326. package/dist/server/pages-api-route.js.map +1 -1
  327. package/dist/server/pages-i18n.js.map +1 -1
  328. package/dist/server/pages-media-type.js.map +1 -1
  329. package/dist/server/pages-node-compat.js.map +1 -1
  330. package/dist/server/pages-page-data.d.ts +3 -2
  331. package/dist/server/pages-page-data.js +27 -5
  332. package/dist/server/pages-page-data.js.map +1 -1
  333. package/dist/server/pages-page-response.js +2 -1
  334. package/dist/server/pages-page-response.js.map +1 -1
  335. package/dist/server/prerender-work-unit-setup.js +1 -1
  336. package/dist/server/prerender-work-unit-setup.js.map +1 -1
  337. package/dist/server/prod-server.d.ts +28 -1
  338. package/dist/server/prod-server.js +97 -22
  339. package/dist/server/prod-server.js.map +1 -1
  340. package/dist/server/request-log.js.map +1 -1
  341. package/dist/server/request-pipeline.d.ts +1 -13
  342. package/dist/server/request-pipeline.js +3 -25
  343. package/dist/server/request-pipeline.js.map +1 -1
  344. package/dist/server/rsc-stream-hints.js.map +1 -1
  345. package/dist/server/seed-cache.js.map +1 -1
  346. package/dist/server/server-action-not-found.d.ts +16 -3
  347. package/dist/server/server-action-not-found.js +22 -4
  348. package/dist/server/server-action-not-found.js.map +1 -1
  349. package/dist/server/server-globals.d.ts +5 -0
  350. package/dist/server/server-globals.js +37 -0
  351. package/dist/server/server-globals.js.map +1 -0
  352. package/dist/server/socket-error-backstop.js.map +1 -1
  353. package/dist/server/static-file-cache.js +1 -1
  354. package/dist/server/static-file-cache.js.map +1 -1
  355. package/dist/server/worker-utils.d.ts +0 -7
  356. package/dist/server/worker-utils.js +3 -2
  357. package/dist/server/worker-utils.js.map +1 -1
  358. package/dist/shims/amp.js.map +1 -1
  359. package/dist/shims/app.d.ts +37 -4
  360. package/dist/shims/app.js +50 -1
  361. package/dist/shims/app.js.map +1 -0
  362. package/dist/shims/cache-for-request.js.map +1 -1
  363. package/dist/shims/cache-runtime.d.ts +19 -2
  364. package/dist/shims/cache-runtime.js +87 -19
  365. package/dist/shims/cache-runtime.js.map +1 -1
  366. package/dist/shims/cache.d.ts +20 -21
  367. package/dist/shims/cache.js +101 -15
  368. package/dist/shims/cache.js.map +1 -1
  369. package/dist/shims/client-hook-error.js.map +1 -1
  370. package/dist/shims/compat-router.js.map +1 -1
  371. package/dist/shims/config.js.map +1 -1
  372. package/dist/shims/constants.js.map +1 -1
  373. package/dist/shims/document.js.map +1 -1
  374. package/dist/shims/dynamic.d.ts +18 -10
  375. package/dist/shims/dynamic.js +107 -51
  376. package/dist/shims/dynamic.js.map +1 -1
  377. package/dist/shims/error-boundary.d.ts +35 -6
  378. package/dist/shims/error-boundary.js +116 -33
  379. package/dist/shims/error-boundary.js.map +1 -1
  380. package/dist/shims/error.d.ts +18 -1
  381. package/dist/shims/error.js +56 -1
  382. package/dist/shims/error.js.map +1 -1
  383. package/dist/shims/fetch-cache.d.ts +25 -1
  384. package/dist/shims/fetch-cache.js +159 -13
  385. package/dist/shims/fetch-cache.js.map +1 -1
  386. package/dist/shims/font-google-base.d.ts +22 -8
  387. package/dist/shims/font-google-base.js +41 -71
  388. package/dist/shims/font-google-base.js.map +1 -1
  389. package/dist/shims/font-local.d.ts +3 -20
  390. package/dist/shims/font-local.js +23 -75
  391. package/dist/shims/font-local.js.map +1 -1
  392. package/dist/shims/font-utils.d.ts +51 -0
  393. package/dist/shims/font-utils.js +97 -0
  394. package/dist/shims/font-utils.js.map +1 -0
  395. package/dist/shims/form.js +3 -1
  396. package/dist/shims/form.js.map +1 -1
  397. package/dist/shims/hash-scroll.d.ts +7 -0
  398. package/dist/shims/hash-scroll.js +30 -0
  399. package/dist/shims/hash-scroll.js.map +1 -0
  400. package/dist/shims/head-state.js.map +1 -1
  401. package/dist/shims/head.d.ts +3 -1
  402. package/dist/shims/head.js +28 -16
  403. package/dist/shims/head.js.map +1 -1
  404. package/dist/shims/headers.d.ts +11 -12
  405. package/dist/shims/headers.js +45 -8
  406. package/dist/shims/headers.js.map +1 -1
  407. package/dist/shims/i18n-context.js.map +1 -1
  408. package/dist/shims/i18n-state.js.map +1 -1
  409. package/dist/shims/image-config.d.ts +14 -1
  410. package/dist/shims/image-config.js +24 -1
  411. package/dist/shims/image-config.js.map +1 -1
  412. package/dist/shims/image.d.ts +1 -0
  413. package/dist/shims/image.js +159 -80
  414. package/dist/shims/image.js.map +1 -1
  415. package/dist/shims/internal/als-registry.js.map +1 -1
  416. package/dist/shims/internal/app-router-context.d.ts +7 -6
  417. package/dist/shims/internal/app-router-context.js +17 -6
  418. package/dist/shims/internal/app-router-context.js.map +1 -1
  419. package/dist/shims/internal/cookie-serialize.js.map +1 -1
  420. package/dist/shims/internal/make-hanging-promise.d.ts +1 -1
  421. package/dist/shims/internal/make-hanging-promise.js +1 -1
  422. package/dist/shims/internal/make-hanging-promise.js.map +1 -1
  423. package/dist/shims/internal/parse-cookie-header.js.map +1 -1
  424. package/dist/shims/internal/utils.js.map +1 -1
  425. package/dist/shims/internal/work-unit-async-storage.js +2 -2
  426. package/dist/shims/internal/work-unit-async-storage.js.map +1 -1
  427. package/dist/shims/layout-segment-context.js.map +1 -1
  428. package/dist/shims/legacy-image.js.map +1 -1
  429. package/dist/shims/link-prefetch.d.ts +42 -0
  430. package/dist/shims/link-prefetch.js +45 -0
  431. package/dist/shims/link-prefetch.js.map +1 -0
  432. package/dist/shims/link.d.ts +37 -4
  433. package/dist/shims/link.js +156 -46
  434. package/dist/shims/link.js.map +1 -1
  435. package/dist/shims/metadata.d.ts +16 -30
  436. package/dist/shims/metadata.js +87 -28
  437. package/dist/shims/metadata.js.map +1 -1
  438. package/dist/shims/navigation-state.js.map +1 -1
  439. package/dist/shims/navigation.d.ts +172 -10
  440. package/dist/shims/navigation.js +335 -70
  441. package/dist/shims/navigation.js.map +1 -1
  442. package/dist/shims/navigation.react-server.d.ts +3 -2
  443. package/dist/shims/navigation.react-server.js +5 -2
  444. package/dist/shims/navigation.react-server.js.map +1 -1
  445. package/dist/shims/offline.js.map +1 -1
  446. package/dist/shims/pages-router-runtime.d.ts +7 -0
  447. package/dist/shims/pages-router-runtime.js +16 -0
  448. package/dist/shims/pages-router-runtime.js.map +1 -0
  449. package/dist/shims/readonly-url-search-params.js.map +1 -1
  450. package/dist/shims/request-context.js.map +1 -1
  451. package/dist/shims/root-params.js.map +1 -1
  452. package/dist/shims/router-state.js.map +1 -1
  453. package/dist/shims/router.d.ts +69 -7
  454. package/dist/shims/router.js +232 -249
  455. package/dist/shims/router.js.map +1 -1
  456. package/dist/shims/script-nonce-context.js.map +1 -1
  457. package/dist/shims/script.js +110 -32
  458. package/dist/shims/script.js.map +1 -1
  459. package/dist/shims/server.js +12 -15
  460. package/dist/shims/server.js.map +1 -1
  461. package/dist/shims/slot.d.ts +7 -1
  462. package/dist/shims/slot.js +60 -7
  463. package/dist/shims/slot.js.map +1 -1
  464. package/dist/shims/thenable-params.js.map +1 -1
  465. package/dist/shims/unified-request-context.js +5 -0
  466. package/dist/shims/unified-request-context.js.map +1 -1
  467. package/dist/shims/unrecognized-action-error.d.ts +35 -0
  468. package/dist/shims/unrecognized-action-error.js +41 -0
  469. package/dist/shims/unrecognized-action-error.js.map +1 -0
  470. package/dist/shims/url-safety.js.map +1 -1
  471. package/dist/shims/url-utils.d.ts +22 -1
  472. package/dist/shims/url-utils.js +76 -3
  473. package/dist/shims/url-utils.js.map +1 -1
  474. package/dist/shims/use-merged-ref.js.map +1 -1
  475. package/dist/shims/web-vitals.d.ts +4 -21
  476. package/dist/shims/web-vitals.js +19 -6
  477. package/dist/shims/web-vitals.js.map +1 -1
  478. package/dist/utils/asset-prefix.d.ts +69 -0
  479. package/dist/utils/asset-prefix.js +91 -0
  480. package/dist/utils/asset-prefix.js.map +1 -0
  481. package/dist/utils/base-path.d.ts +7 -1
  482. package/dist/utils/base-path.js +10 -1
  483. package/dist/utils/base-path.js.map +1 -1
  484. package/dist/utils/cache-control-metadata.js.map +1 -1
  485. package/dist/utils/domain-locale.js.map +1 -1
  486. package/dist/utils/encode-cache-tag.d.ts +31 -0
  487. package/dist/utils/encode-cache-tag.js +38 -0
  488. package/dist/utils/encode-cache-tag.js.map +1 -0
  489. package/dist/utils/error-cause.js.map +1 -1
  490. package/dist/utils/hash.js.map +1 -1
  491. package/dist/utils/lazy-chunks.js.map +1 -1
  492. package/dist/utils/manifest-paths.js.map +1 -1
  493. package/dist/utils/mdx-scan.js.map +1 -1
  494. package/dist/utils/navigation-signal.d.ts +5 -0
  495. package/dist/utils/navigation-signal.js +14 -0
  496. package/dist/utils/navigation-signal.js.map +1 -0
  497. package/dist/utils/project.js.map +1 -1
  498. package/dist/utils/public-routes.js.map +1 -1
  499. package/dist/utils/query.js.map +1 -1
  500. package/dist/utils/safe-json-file.js.map +1 -1
  501. package/dist/utils/sorted-array.d.ts +9 -0
  502. package/dist/utils/sorted-array.js +22 -0
  503. package/dist/utils/sorted-array.js.map +1 -0
  504. package/dist/utils/text-stream.js.map +1 -1
  505. package/dist/utils/vinext-root.js.map +1 -1
  506. package/package.json +8 -6
@@ -1,10 +1,14 @@
1
1
  import { stripBasePath } from "../utils/base-path.js";
2
+ import { matchRoutePattern, routePatternParts } from "../routing/route-pattern.js";
2
3
  import { RouterContext } from "./internal/router-context.js";
3
4
  import { isValidModulePath } from "../client/validate-module-path.js";
4
- import { toBrowserNavigationHref, toSameOriginAppPath } from "./url-utils.js";
5
+ import { installWindowNext } from "../client/window-next.js";
6
+ import { isAbsoluteOrProtocolRelativeUrl, isHashOnlyBrowserUrlChange, toBrowserNavigationHref, toSameOriginAppPath } from "./url-utils.js";
5
7
  import { addLocalePrefix, getDomainLocaleUrl } from "../utils/domain-locale.js";
6
8
  import { addQueryParam, appendSearchParamsToUrl, urlQueryToSearchParams } from "../utils/query.js";
7
- import { createElement, useCallback, useEffect, useMemo, useState } from "react";
9
+ import { scrollToHashTarget } from "./hash-scroll.js";
10
+ import { setPagesRouterPopStateHandler } from "./pages-router-runtime.js";
11
+ import { createElement, useContext, useEffect, useMemo, useState } from "react";
8
12
  //#region src/shims/router.ts
9
13
  /**
10
14
  * next/router shim
@@ -69,14 +73,14 @@ function getDomainLocalePath(url, locale) {
69
73
  */
70
74
  function applyNavigationLocale(url, locale) {
71
75
  if (!locale || typeof window === "undefined") return url;
72
- if (url.startsWith("http://") || url.startsWith("https://") || url.startsWith("//")) return url;
76
+ if (isAbsoluteOrProtocolRelativeUrl(url)) return url;
73
77
  const domainLocalePath = getDomainLocalePath(url, locale);
74
78
  if (domainLocalePath) return domainLocalePath;
75
79
  return addLocalePrefix(url, locale, window.__VINEXT_DEFAULT_LOCALE__ ?? "");
76
80
  }
77
81
  /** Check if a URL is external (any URL scheme per RFC 3986, or protocol-relative) */
78
82
  function isExternalUrl(url) {
79
- return /^[a-z][a-z0-9+.-]*:/i.test(url) || url.startsWith("//");
83
+ return isAbsoluteOrProtocolRelativeUrl(url);
80
84
  }
81
85
  /** Resolve a hash URL to a basePath-stripped app URL for event payloads */
82
86
  function resolveHashUrl(url) {
@@ -93,22 +97,7 @@ function resolveHashUrl(url) {
93
97
  function isHashOnlyChange(href) {
94
98
  if (href.startsWith("#")) return true;
95
99
  if (typeof window === "undefined") return false;
96
- try {
97
- const current = new URL(window.location.href);
98
- const next = new URL(href, window.location.href);
99
- return current.pathname === next.pathname && current.search === next.search && next.hash !== "";
100
- } catch {
101
- return false;
102
- }
103
- }
104
- /** Scroll to hash target element, or top if no hash */
105
- function scrollToHash(hash) {
106
- if (!hash || hash === "#") {
107
- window.scrollTo(0, 0);
108
- return;
109
- }
110
- const el = document.getElementById(hash.slice(1));
111
- if (el) el.scrollIntoView({ behavior: "auto" });
100
+ return isHashOnlyBrowserUrlChange(href, window.location.href, __basePath);
112
101
  }
113
102
  /** Save current scroll position into history state for back/forward restoration */
114
103
  function saveScrollPosition() {
@@ -142,6 +131,60 @@ function _registerRouterStateAccessors(accessors) {
142
131
  function setSSRContext(ctx) {
143
132
  _setSSRContextImpl(ctx);
144
133
  }
134
+ let _cachedClientPagesNavCtx = null;
135
+ let _cachedClientPagesNavCtxKey = null;
136
+ function _buildClientPagesNavigationContext(routePattern, resolvedPath, searchString) {
137
+ const cacheKey = `${routePattern}|${resolvedPath}|${searchString}`;
138
+ if (_cachedClientPagesNavCtxKey === cacheKey && _cachedClientPagesNavCtx) return _cachedClientPagesNavCtx;
139
+ const ctx = {
140
+ pathname: resolvedPath,
141
+ searchParams: new URLSearchParams(searchString),
142
+ params: routePattern ? extractRouteParamsFromPath(routePattern, resolvedPath) ?? {} : {}
143
+ };
144
+ _cachedClientPagesNavCtx = ctx;
145
+ _cachedClientPagesNavCtxKey = cacheKey;
146
+ return ctx;
147
+ }
148
+ /**
149
+ * Cross-router compat shim source for `next/navigation` hooks.
150
+ *
151
+ * Returns the current Pages Router state shaped as a navigation context so
152
+ * the App Router hooks (useParams/useSearchParams/usePathname) can act as
153
+ * compat shims when invoked inside a Pages Router render. Mirrors Next.js's
154
+ * `adaptForPathParams` and `adaptForSearchParams` in
155
+ * .nextjs-ref/packages/next/src/shared/lib/router/adapters.tsx, which Next.js
156
+ * uses to populate SearchParamsContext / PathParamsContext for the Pages
157
+ * Router (see packages/next/src/server/render.tsx and
158
+ * packages/next/src/client/index.tsx).
159
+ *
160
+ * Returns `null` when there is no Pages Router state available — e.g. App
161
+ * Router pages, RSC-only renders, or pre-router renders. Callers should
162
+ * treat null as "App Router context, use normal app-router state".
163
+ */
164
+ function getPagesNavigationContext() {
165
+ if (typeof window === "undefined") {
166
+ const ssrCtx = _getSSRContext();
167
+ if (!ssrCtx) return null;
168
+ let searchParams;
169
+ let resolvedPath;
170
+ try {
171
+ const url = new URL(ssrCtx.asPath, "http://_");
172
+ searchParams = url.searchParams;
173
+ resolvedPath = url.pathname;
174
+ } catch {
175
+ searchParams = new URLSearchParams();
176
+ resolvedPath = ssrCtx.pathname;
177
+ }
178
+ const params = extractRouteParamsFromPath(ssrCtx.pathname, resolvedPath) ?? {};
179
+ return {
180
+ pathname: resolvedPath,
181
+ searchParams,
182
+ params
183
+ };
184
+ }
185
+ const resolvedPath = stripBasePath(window.location.pathname, __basePath);
186
+ return _buildClientPagesNavigationContext(window.__NEXT_DATA__?.page ?? "", resolvedPath, window.location.search);
187
+ }
145
188
  /**
146
189
  * Extract param names from a Next.js route pattern.
147
190
  * E.g., "/posts/[id]" → ["id"], "/docs/[...slug]" → ["slug"],
@@ -157,6 +200,26 @@ function extractRouteParamNames(pattern) {
157
200
  for (const m of colonMatches) names.push(m[1]);
158
201
  return names;
159
202
  }
203
+ function splitPathSegments(pathname) {
204
+ return pathname.split("/").filter(Boolean);
205
+ }
206
+ function extractRouteParamsFromPath(pattern, pathname) {
207
+ return matchRoutePattern(splitPathSegments(pathname), routePatternParts(pattern));
208
+ }
209
+ function getRouteQueryFromNextData(nextData, resolvedPath) {
210
+ const routeQuery = {};
211
+ if (!nextData?.query || !nextData.page) return routeQuery;
212
+ const routeParamNames = extractRouteParamNames(nextData.page);
213
+ if (routeParamNames.length === 0) return routeQuery;
214
+ const currentRouteParams = extractRouteParamsFromPath(nextData.page, resolvedPath);
215
+ if (currentRouteParams) return currentRouteParams;
216
+ for (const key of routeParamNames) {
217
+ const value = nextData.query[key];
218
+ if (typeof value === "string") routeQuery[key] = value;
219
+ else if (Array.isArray(value)) routeQuery[key] = [...value];
220
+ }
221
+ return routeQuery;
222
+ }
160
223
  function getPathnameAndQuery() {
161
224
  if (typeof window === "undefined") {
162
225
  const _ssrCtx = _getSSRContext();
@@ -177,16 +240,8 @@ function getPathnameAndQuery() {
177
240
  }
178
241
  const resolvedPath = stripBasePath(window.location.pathname, __basePath);
179
242
  const pathname = window.__NEXT_DATA__?.page ?? resolvedPath;
180
- const routeQuery = {};
181
243
  const nextData = window.__NEXT_DATA__;
182
- if (nextData && nextData.query && nextData.page) {
183
- const routeParamNames = extractRouteParamNames(nextData.page);
184
- for (const key of routeParamNames) {
185
- const value = nextData.query[key];
186
- if (typeof value === "string") routeQuery[key] = value;
187
- else if (Array.isArray(value)) routeQuery[key] = [...value];
188
- }
189
- }
244
+ const routeQuery = getRouteQueryFromNextData(nextData, resolvedPath);
190
245
  const searchQuery = {};
191
246
  const params = new URLSearchParams(window.location.search);
192
247
  for (const [key, value] of params) addQueryParam(searchQuery, key, value);
@@ -351,9 +406,8 @@ async function runNavigateClient(fullUrl, resolvedUrl) {
351
406
  }
352
407
  /**
353
408
  * Build the full router value object from the current pathname, query, asPath,
354
- * and a set of navigation methods. Shared by useRouter() (which passes
355
- * hook-derived callbacks) and wrapWithRouterContext() (which passes the Router
356
- * singleton methods) so the shape stays in sync.
409
+ * and a set of navigation methods. Shared by the Pages Router context provider
410
+ * and tests so the public router shape stays in sync.
357
411
  */
358
412
  function buildRouterValue(pathname, query, asPath, methods) {
359
413
  const _ssrState = _getSSRContext();
@@ -379,10 +433,98 @@ function buildRouterValue(pathname, query, asPath, methods) {
379
433
  events: routerEvents
380
434
  };
381
435
  }
436
+ /** Extract the hash fragment from a URL, including the leading `#`. */
437
+ function extractHash(url) {
438
+ const i = url.indexOf("#");
439
+ return i === -1 ? "" : url.slice(i);
440
+ }
441
+ /** Notify in-page listeners (e.g. useRouter hooks) that navigation occurred. */
442
+ function dispatchNavigateEvent() {
443
+ window.dispatchEvent(new CustomEvent("vinext:navigate"));
444
+ }
445
+ /**
446
+ * Update history with the new URL and refresh the hash-only-detection tracker.
447
+ * Centralises the `pushState`/`replaceState` branch so callers don't repeat it.
448
+ */
449
+ function updateHistory(mode, url) {
450
+ if (mode === "push") window.history.pushState({}, "", url);
451
+ else window.history.replaceState({}, "", url);
452
+ _lastPathnameAndSearch = window.location.pathname + window.location.search;
453
+ }
454
+ /**
455
+ * Shared client-side navigation flow used by both `useRouter()` and the
456
+ * `Router` singleton. The only differences between push/replace are the
457
+ * history method (`pushState` vs `replaceState`), the external-URL fallback
458
+ * (`assign` vs `replace`), and the fact that push saves scroll position for
459
+ * back/forward restoration while replace does not.
460
+ *
461
+ * `onStateUpdate` lets the hook trigger a `setState` re-render at the same
462
+ * point that hashChangeComplete/routeChangeComplete fires; the singleton
463
+ * passes no callback.
464
+ */
465
+ async function performNavigation(url, as, options, mode, onStateUpdate) {
466
+ let resolved = resolveNavigationTarget(url, as, options?.locale);
467
+ if (isExternalUrl(resolved)) {
468
+ const localPath = toSameOriginAppPath(resolved, __basePath);
469
+ if (localPath == null) {
470
+ if (mode === "push") window.location.assign(resolved);
471
+ else window.location.replace(resolved);
472
+ return true;
473
+ }
474
+ resolved = localPath;
475
+ }
476
+ const full = toBrowserNavigationHref(resolved, window.location.href, __basePath);
477
+ const shallow = options?.shallow ?? false;
478
+ const doScroll = options?.scroll !== false;
479
+ if (isHashOnlyChange(full)) {
480
+ const eventUrl = resolveHashUrl(full);
481
+ routerEvents.emit("hashChangeStart", eventUrl, { shallow });
482
+ updateHistory(mode, resolved.startsWith("#") ? resolved : full);
483
+ if (doScroll) scrollToHashTarget(extractHash(resolved));
484
+ onStateUpdate?.();
485
+ routerEvents.emit("hashChangeComplete", eventUrl, { shallow });
486
+ dispatchNavigateEvent();
487
+ return true;
488
+ }
489
+ if (mode === "push") saveScrollPosition();
490
+ routerEvents.emit("routeChangeStart", resolved, { shallow });
491
+ routerEvents.emit("beforeHistoryChange", resolved, { shallow });
492
+ updateHistory(mode, full);
493
+ if (!shallow) {
494
+ const result = await runNavigateClient(full, resolved);
495
+ if (result === "cancelled") return true;
496
+ if (result === "failed") return false;
497
+ }
498
+ onStateUpdate?.();
499
+ routerEvents.emit("routeChangeComplete", resolved, { shallow });
500
+ const hash = extractHash(resolved);
501
+ if (doScroll) if (hash) scrollToHashTarget(hash);
502
+ else window.scrollTo(0, 0);
503
+ dispatchNavigateEvent();
504
+ return true;
505
+ }
506
+ /** Inject a `<link rel="prefetch">` for the target page. */
507
+ async function prefetchUrl(url) {
508
+ if (typeof document !== "undefined") {
509
+ const link = document.createElement("link");
510
+ link.rel = "prefetch";
511
+ link.href = url;
512
+ link.as = "document";
513
+ document.head.appendChild(link);
514
+ }
515
+ }
382
516
  /**
383
517
  * useRouter hook - Pages Router compatible.
518
+ *
519
+ * Ported from Next.js: packages/next/src/client/router.ts
520
+ * https://github.com/vercel/next.js/blob/canary/packages/next/src/client/router.ts
384
521
  */
385
522
  function useRouter() {
523
+ const router = useContext(RouterContext);
524
+ if (!router) throw new Error("NextRouter was not mounted. https://nextjs.org/docs/messages/next-router-not-mounted");
525
+ return router;
526
+ }
527
+ function PagesRouterProvider({ children }) {
386
528
  const [{ pathname, query, asPath }, setState] = useState(getPathnameAndQuery);
387
529
  useEffect(() => {
388
530
  const onNavigate = ((_e) => {
@@ -391,125 +533,23 @@ function useRouter() {
391
533
  window.addEventListener("vinext:navigate", onNavigate);
392
534
  return () => window.removeEventListener("vinext:navigate", onNavigate);
393
535
  }, []);
394
- const push = useCallback(async (url, as, options) => {
395
- let resolved = resolveNavigationTarget(url, as, options?.locale);
396
- if (isExternalUrl(resolved)) {
397
- const localPath = toSameOriginAppPath(resolved, __basePath);
398
- if (localPath == null) {
399
- window.location.assign(resolved);
400
- return true;
401
- }
402
- resolved = localPath;
403
- }
404
- const full = toBrowserNavigationHref(resolved, window.location.href, __basePath);
405
- if (isHashOnlyChange(resolved)) {
406
- const eventUrl = resolveHashUrl(resolved);
407
- routerEvents.emit("hashChangeStart", eventUrl, { shallow: options?.shallow ?? false });
408
- const hash = resolved.includes("#") ? resolved.slice(resolved.indexOf("#")) : "";
409
- window.history.pushState({}, "", resolved.startsWith("#") ? resolved : full);
410
- _lastPathnameAndSearch = window.location.pathname + window.location.search;
411
- scrollToHash(hash);
412
- setState(getPathnameAndQuery());
413
- routerEvents.emit("hashChangeComplete", eventUrl, { shallow: options?.shallow ?? false });
414
- window.dispatchEvent(new CustomEvent("vinext:navigate"));
415
- return true;
416
- }
417
- saveScrollPosition();
418
- routerEvents.emit("routeChangeStart", resolved, { shallow: options?.shallow ?? false });
419
- routerEvents.emit("beforeHistoryChange", resolved, { shallow: options?.shallow ?? false });
420
- window.history.pushState({}, "", full);
421
- _lastPathnameAndSearch = window.location.pathname + window.location.search;
422
- if (!options?.shallow) {
423
- const result = await runNavigateClient(full, resolved);
424
- if (result === "cancelled") return true;
425
- if (result === "failed") return false;
426
- }
427
- setState(getPathnameAndQuery());
428
- routerEvents.emit("routeChangeComplete", resolved, { shallow: options?.shallow ?? false });
429
- const hash = resolved.includes("#") ? resolved.slice(resolved.indexOf("#")) : "";
430
- if (hash) scrollToHash(hash);
431
- else if (options?.scroll !== false) window.scrollTo(0, 0);
432
- window.dispatchEvent(new CustomEvent("vinext:navigate"));
433
- return true;
434
- }, []);
435
- const replace = useCallback(async (url, as, options) => {
436
- let resolved = resolveNavigationTarget(url, as, options?.locale);
437
- if (isExternalUrl(resolved)) {
438
- const localPath = toSameOriginAppPath(resolved, __basePath);
439
- if (localPath == null) {
440
- window.location.replace(resolved);
441
- return true;
442
- }
443
- resolved = localPath;
444
- }
445
- const full = toBrowserNavigationHref(resolved, window.location.href, __basePath);
446
- if (isHashOnlyChange(resolved)) {
447
- const eventUrl = resolveHashUrl(resolved);
448
- routerEvents.emit("hashChangeStart", eventUrl, { shallow: options?.shallow ?? false });
449
- const hash = resolved.includes("#") ? resolved.slice(resolved.indexOf("#")) : "";
450
- window.history.replaceState({}, "", resolved.startsWith("#") ? resolved : full);
451
- _lastPathnameAndSearch = window.location.pathname + window.location.search;
452
- scrollToHash(hash);
453
- setState(getPathnameAndQuery());
454
- routerEvents.emit("hashChangeComplete", eventUrl, { shallow: options?.shallow ?? false });
455
- window.dispatchEvent(new CustomEvent("vinext:navigate"));
456
- return true;
457
- }
458
- routerEvents.emit("routeChangeStart", resolved, { shallow: options?.shallow ?? false });
459
- routerEvents.emit("beforeHistoryChange", resolved, { shallow: options?.shallow ?? false });
460
- window.history.replaceState({}, "", full);
461
- _lastPathnameAndSearch = window.location.pathname + window.location.search;
462
- if (!options?.shallow) {
463
- const result = await runNavigateClient(full, resolved);
464
- if (result === "cancelled") return true;
465
- if (result === "failed") return false;
466
- }
467
- setState(getPathnameAndQuery());
468
- routerEvents.emit("routeChangeComplete", resolved, { shallow: options?.shallow ?? false });
469
- const hash = resolved.includes("#") ? resolved.slice(resolved.indexOf("#")) : "";
470
- if (hash) scrollToHash(hash);
471
- else if (options?.scroll !== false) window.scrollTo(0, 0);
472
- window.dispatchEvent(new CustomEvent("vinext:navigate"));
473
- return true;
474
- }, []);
475
- const back = useCallback(() => {
476
- window.history.back();
477
- }, []);
478
- const reload = useCallback(() => {
479
- window.location.reload();
480
- }, []);
481
- const prefetch = useCallback(async (url) => {
482
- if (typeof document !== "undefined") {
483
- const link = document.createElement("link");
484
- link.rel = "prefetch";
485
- link.href = url;
486
- link.as = "document";
487
- document.head.appendChild(link);
488
- }
489
- }, []);
490
- return useMemo(() => buildRouterValue(pathname, query, asPath, {
491
- push,
492
- replace,
493
- back,
494
- reload,
495
- prefetch,
496
- beforePopState: (cb) => {
497
- _beforePopStateCb = cb;
498
- }
536
+ const router = useMemo(() => buildRouterValue(pathname, query, asPath, {
537
+ push: Router.push,
538
+ replace: Router.replace,
539
+ back: Router.back,
540
+ reload: Router.reload,
541
+ prefetch: Router.prefetch,
542
+ beforePopState: Router.beforePopState
499
543
  }), [
500
544
  pathname,
501
545
  query,
502
- asPath,
503
- push,
504
- replace,
505
- back,
506
- reload,
507
- prefetch
546
+ asPath
508
547
  ]);
548
+ return createElement(RouterContext.Provider, { value: router }, children);
509
549
  }
510
550
  let _beforePopStateCb;
511
551
  let _lastPathnameAndSearch = typeof window !== "undefined" ? window.location.pathname + window.location.search : "";
512
- if (typeof window !== "undefined") window.addEventListener("popstate", (e) => {
552
+ function handlePagesRouterPopState(e) {
513
553
  const browserUrl = window.location.pathname + window.location.search;
514
554
  const appUrl = stripBasePath(window.location.pathname, __basePath) + window.location.search;
515
555
  const isHashOnly = browserUrl === _lastPathnameAndSearch;
@@ -524,9 +564,9 @@ if (typeof window !== "undefined") window.addEventListener("popstate", (e) => {
524
564
  if (isHashOnly) {
525
565
  const hashUrl = appUrl + window.location.hash;
526
566
  routerEvents.emit("hashChangeStart", hashUrl, { shallow: false });
527
- scrollToHash(window.location.hash);
567
+ scrollToHashTarget(window.location.hash);
528
568
  routerEvents.emit("hashChangeComplete", hashUrl, { shallow: false });
529
- window.dispatchEvent(new CustomEvent("vinext:navigate"));
569
+ dispatchNavigateEvent();
530
570
  return;
531
571
  }
532
572
  const fullAppUrl = appUrl + window.location.hash;
@@ -536,126 +576,69 @@ if (typeof window !== "undefined") window.addEventListener("popstate", (e) => {
536
576
  if (await runNavigateClient(browserUrl, fullAppUrl) === "completed") {
537
577
  routerEvents.emit("routeChangeComplete", fullAppUrl, { shallow: false });
538
578
  restoreScrollPosition(e.state);
539
- window.dispatchEvent(new CustomEvent("vinext:navigate"));
579
+ dispatchNavigateEvent();
540
580
  }
541
581
  })();
542
- });
582
+ }
583
+ setPagesRouterPopStateHandler(handlePagesRouterPopState);
543
584
  /**
544
585
  * Wrap a React element in a RouterContext.Provider so that
545
586
  * next/compat/router's useRouter() returns the real Pages Router value.
546
587
  *
547
- * This is a plain function, NOT a React component it builds the router
548
- * value object directly from the current SSR context (server) or
549
- * window.location + Router singleton (client), avoiding duplicate state
550
- * that a hook-based component would create.
588
+ * The provider owns the reactive Pages Router snapshot so next/router and
589
+ * next/compat/router consumers share one context value instead of each hook
590
+ * installing its own global URL-change listener.
551
591
  */
552
592
  function wrapWithRouterContext(element) {
553
- const { pathname, query, asPath } = getPathnameAndQuery();
554
- const routerValue = buildRouterValue(pathname, query, asPath, {
555
- push: Router.push,
556
- replace: Router.replace,
557
- back: Router.back,
558
- reload: Router.reload,
559
- prefetch: Router.prefetch,
560
- beforePopState: Router.beforePopState
561
- });
562
- return createElement(RouterContext.Provider, { value: routerValue }, element);
593
+ return createElement(PagesRouterProvider, null, element);
594
+ }
595
+ /**
596
+ * Higher-order component that injects the Pages Router `router` instance as
597
+ * a `router` prop into a wrapped component. Primarily used by class
598
+ * components (which cannot call hooks) to access the router. The wrapped
599
+ * component receives the same props as the original, minus `router`, which
600
+ * is filled in by the HOC.
601
+ *
602
+ * Ported from Next.js: packages/next/src/client/with-router.tsx
603
+ * https://github.com/vercel/next.js/blob/canary/packages/next/src/client/with-router.tsx
604
+ *
605
+ * Differences from Next.js:
606
+ * - We type the composed component as `ComponentType<P>` instead of
607
+ * `NextComponentType<C, any, P>` because vinext does not expose
608
+ * `NextComponentType` from this shim. The runtime shape (and the props
609
+ * the wrapper forwards) is identical.
610
+ * - We forward `getInitialProps` and `origGetInitialProps` from the
611
+ * composed component so `_app` parity holds for class components that
612
+ * define `getInitialProps`.
613
+ */
614
+ function withRouter(ComposedComponent) {
615
+ function WithRouterWrapper(props) {
616
+ return createElement(ComposedComponent, {
617
+ router: useRouter(),
618
+ ...props
619
+ });
620
+ }
621
+ const composed = ComposedComponent;
622
+ WithRouterWrapper.getInitialProps = composed.getInitialProps;
623
+ WithRouterWrapper.origGetInitialProps = composed.origGetInitialProps;
624
+ if (process.env.NODE_ENV !== "production") WithRouterWrapper.displayName = `withRouter(${composed.displayName || composed.name || "Unknown"})`;
625
+ return WithRouterWrapper;
563
626
  }
564
627
  const Router = {
565
- push: async (url, as, options) => {
566
- let resolved = resolveNavigationTarget(url, as, options?.locale);
567
- if (isExternalUrl(resolved)) {
568
- const localPath = toSameOriginAppPath(resolved, __basePath);
569
- if (localPath == null) {
570
- window.location.assign(resolved);
571
- return true;
572
- }
573
- resolved = localPath;
574
- }
575
- const full = toBrowserNavigationHref(resolved, window.location.href, __basePath);
576
- if (isHashOnlyChange(resolved)) {
577
- const eventUrl = resolveHashUrl(resolved);
578
- routerEvents.emit("hashChangeStart", eventUrl, { shallow: options?.shallow ?? false });
579
- const hash = resolved.includes("#") ? resolved.slice(resolved.indexOf("#")) : "";
580
- window.history.pushState({}, "", resolved.startsWith("#") ? resolved : full);
581
- _lastPathnameAndSearch = window.location.pathname + window.location.search;
582
- scrollToHash(hash);
583
- routerEvents.emit("hashChangeComplete", eventUrl, { shallow: options?.shallow ?? false });
584
- window.dispatchEvent(new CustomEvent("vinext:navigate"));
585
- return true;
586
- }
587
- saveScrollPosition();
588
- routerEvents.emit("routeChangeStart", resolved, { shallow: options?.shallow ?? false });
589
- routerEvents.emit("beforeHistoryChange", resolved, { shallow: options?.shallow ?? false });
590
- window.history.pushState({}, "", full);
591
- _lastPathnameAndSearch = window.location.pathname + window.location.search;
592
- if (!options?.shallow) {
593
- const result = await runNavigateClient(full, resolved);
594
- if (result === "cancelled") return true;
595
- if (result === "failed") return false;
596
- }
597
- routerEvents.emit("routeChangeComplete", resolved, { shallow: options?.shallow ?? false });
598
- const hash = resolved.includes("#") ? resolved.slice(resolved.indexOf("#")) : "";
599
- if (hash) scrollToHash(hash);
600
- else if (options?.scroll !== false) window.scrollTo(0, 0);
601
- window.dispatchEvent(new CustomEvent("vinext:navigate"));
602
- return true;
603
- },
604
- replace: async (url, as, options) => {
605
- let resolved = resolveNavigationTarget(url, as, options?.locale);
606
- if (isExternalUrl(resolved)) {
607
- const localPath = toSameOriginAppPath(resolved, __basePath);
608
- if (localPath == null) {
609
- window.location.replace(resolved);
610
- return true;
611
- }
612
- resolved = localPath;
613
- }
614
- const full = toBrowserNavigationHref(resolved, window.location.href, __basePath);
615
- if (isHashOnlyChange(resolved)) {
616
- const eventUrl = resolveHashUrl(resolved);
617
- routerEvents.emit("hashChangeStart", eventUrl, { shallow: options?.shallow ?? false });
618
- const hash = resolved.includes("#") ? resolved.slice(resolved.indexOf("#")) : "";
619
- window.history.replaceState({}, "", resolved.startsWith("#") ? resolved : full);
620
- _lastPathnameAndSearch = window.location.pathname + window.location.search;
621
- scrollToHash(hash);
622
- routerEvents.emit("hashChangeComplete", eventUrl, { shallow: options?.shallow ?? false });
623
- window.dispatchEvent(new CustomEvent("vinext:navigate"));
624
- return true;
625
- }
626
- routerEvents.emit("routeChangeStart", resolved, { shallow: options?.shallow ?? false });
627
- routerEvents.emit("beforeHistoryChange", resolved, { shallow: options?.shallow ?? false });
628
- window.history.replaceState({}, "", full);
629
- _lastPathnameAndSearch = window.location.pathname + window.location.search;
630
- if (!options?.shallow) {
631
- const result = await runNavigateClient(full, resolved);
632
- if (result === "cancelled") return true;
633
- if (result === "failed") return false;
634
- }
635
- routerEvents.emit("routeChangeComplete", resolved, { shallow: options?.shallow ?? false });
636
- const hash = resolved.includes("#") ? resolved.slice(resolved.indexOf("#")) : "";
637
- if (hash) scrollToHash(hash);
638
- else if (options?.scroll !== false) window.scrollTo(0, 0);
639
- window.dispatchEvent(new CustomEvent("vinext:navigate"));
640
- return true;
641
- },
628
+ push: (url, as, options) => performNavigation(url, as, options, "push"),
629
+ replace: (url, as, options) => performNavigation(url, as, options, "replace"),
642
630
  back: () => window.history.back(),
643
631
  reload: () => window.location.reload(),
644
- prefetch: async (url) => {
645
- if (typeof document !== "undefined") {
646
- const link = document.createElement("link");
647
- link.rel = "prefetch";
648
- link.href = url;
649
- link.as = "document";
650
- document.head.appendChild(link);
651
- }
652
- },
632
+ prefetch: prefetchUrl,
653
633
  beforePopState: (cb) => {
654
634
  _beforePopStateCb = cb;
655
635
  },
656
636
  events: routerEvents
657
637
  };
638
+ if (typeof window !== "undefined") installWindowNext({ router: Router });
639
+ const _PAGES_NAVIGATION_ACCESSOR_KEY = Symbol.for("vinext.navigation.pagesNavigationContextAccessor");
640
+ globalThis[_PAGES_NAVIGATION_ACCESSOR_KEY] = getPagesNavigationContext;
658
641
  //#endregion
659
- export { _registerRouterStateAccessors, applyNavigationLocale, Router as default, isExternalUrl, isHashOnlyChange, setSSRContext, useRouter, wrapWithRouterContext };
642
+ export { _registerRouterStateAccessors, applyNavigationLocale, Router as default, getPagesNavigationContext, isExternalUrl, isHashOnlyChange, setSSRContext, useRouter, withRouter, wrapWithRouterContext };
660
643
 
661
644
  //# sourceMappingURL=router.js.map