vinext 0.0.51 → 0.0.53

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 (423) hide show
  1. package/README.md +1 -1
  2. package/dist/build/clean-output.d.ts +14 -0
  3. package/dist/build/clean-output.js +36 -0
  4. package/dist/build/clean-output.js.map +1 -0
  5. package/dist/build/precompress.d.ts +7 -7
  6. package/dist/build/precompress.js +18 -17
  7. package/dist/build/precompress.js.map +1 -1
  8. package/dist/build/prerender.d.ts +9 -16
  9. package/dist/build/prerender.js +88 -50
  10. package/dist/build/prerender.js.map +1 -1
  11. package/dist/build/run-prerender.js +10 -1
  12. package/dist/build/run-prerender.js.map +1 -1
  13. package/dist/build/static-export.d.ts +5 -0
  14. package/dist/build/static-export.js +8 -3
  15. package/dist/build/static-export.js.map +1 -1
  16. package/dist/check.js +4 -0
  17. package/dist/check.js.map +1 -1
  18. package/dist/cli-args.d.ts +1 -0
  19. package/dist/cli-args.js +5 -0
  20. package/dist/cli-args.js.map +1 -1
  21. package/dist/cli.js +58 -4
  22. package/dist/cli.js.map +1 -1
  23. package/dist/client/instrumentation-client-inject.d.ts +34 -0
  24. package/dist/client/instrumentation-client-inject.js +57 -0
  25. package/dist/client/instrumentation-client-inject.js.map +1 -0
  26. package/dist/client/navigation-runtime.d.ts +60 -0
  27. package/dist/client/navigation-runtime.js +171 -0
  28. package/dist/client/navigation-runtime.js.map +1 -0
  29. package/dist/client/pages-router-link-navigation.d.ts +26 -0
  30. package/dist/client/pages-router-link-navigation.js +14 -0
  31. package/dist/client/pages-router-link-navigation.js.map +1 -0
  32. package/dist/client/vinext-next-data.d.ts +14 -3
  33. package/dist/client/vinext-next-data.js +50 -1
  34. package/dist/client/vinext-next-data.js.map +1 -0
  35. package/dist/client/window-next.d.ts +10 -2
  36. package/dist/client/window-next.js.map +1 -1
  37. package/dist/cloudflare/kv-cache-handler.js +2 -1
  38. package/dist/cloudflare/kv-cache-handler.js.map +1 -1
  39. package/dist/cloudflare/tpr.js +1 -1
  40. package/dist/cloudflare/tpr.js.map +1 -1
  41. package/dist/config/config-matchers.d.ts +63 -16
  42. package/dist/config/config-matchers.js +145 -9
  43. package/dist/config/config-matchers.js.map +1 -1
  44. package/dist/config/next-config.d.ts +32 -5
  45. package/dist/config/next-config.js +55 -15
  46. package/dist/config/next-config.js.map +1 -1
  47. package/dist/deploy.js +130 -46
  48. package/dist/deploy.js.map +1 -1
  49. package/dist/entries/app-browser-entry.js +9 -3
  50. package/dist/entries/app-browser-entry.js.map +1 -1
  51. package/dist/entries/app-rsc-entry.d.ts +4 -2
  52. package/dist/entries/app-rsc-entry.js +76 -16
  53. package/dist/entries/app-rsc-entry.js.map +1 -1
  54. package/dist/entries/app-rsc-manifest.d.ts +1 -0
  55. package/dist/entries/app-rsc-manifest.js +53 -6
  56. package/dist/entries/app-rsc-manifest.js.map +1 -1
  57. package/dist/entries/app-ssr-entry.d.ts +3 -3
  58. package/dist/entries/app-ssr-entry.js +4 -4
  59. package/dist/entries/app-ssr-entry.js.map +1 -1
  60. package/dist/entries/pages-client-entry.js +40 -3
  61. package/dist/entries/pages-client-entry.js.map +1 -1
  62. package/dist/entries/pages-server-entry.js +261 -31
  63. package/dist/entries/pages-server-entry.js.map +1 -1
  64. package/dist/entries/runtime-entry-module.d.ts +2 -1
  65. package/dist/entries/runtime-entry-module.js +9 -3
  66. package/dist/entries/runtime-entry-module.js.map +1 -1
  67. package/dist/index.js +161 -46
  68. package/dist/index.js.map +1 -1
  69. package/dist/plugins/css-data-url.d.ts +7 -0
  70. package/dist/plugins/css-data-url.js +81 -0
  71. package/dist/plugins/css-data-url.js.map +1 -0
  72. package/dist/plugins/fonts.js +30 -5
  73. package/dist/plugins/fonts.js.map +1 -1
  74. package/dist/plugins/middleware-server-only.d.ts +54 -0
  75. package/dist/plugins/middleware-server-only.js +91 -0
  76. package/dist/plugins/middleware-server-only.js.map +1 -0
  77. package/dist/plugins/optimize-imports.js +4 -4
  78. package/dist/plugins/optimize-imports.js.map +1 -1
  79. package/dist/plugins/strip-server-exports.js +5 -8
  80. package/dist/plugins/strip-server-exports.js.map +1 -1
  81. package/dist/routing/app-route-graph.d.ts +20 -1
  82. package/dist/routing/app-route-graph.js +58 -6
  83. package/dist/routing/app-route-graph.js.map +1 -1
  84. package/dist/routing/app-router.d.ts +2 -2
  85. package/dist/routing/app-router.js +2 -2
  86. package/dist/routing/app-router.js.map +1 -1
  87. package/dist/routing/route-trie.js +13 -18
  88. package/dist/routing/route-trie.js.map +1 -1
  89. package/dist/routing/utils.d.ts +12 -1
  90. package/dist/routing/utils.js +18 -1
  91. package/dist/routing/utils.js.map +1 -1
  92. package/dist/server/api-handler.js +153 -42
  93. package/dist/server/api-handler.js.map +1 -1
  94. package/dist/server/app-browser-action-result.d.ts +16 -1
  95. package/dist/server/app-browser-action-result.js +15 -1
  96. package/dist/server/app-browser-action-result.js.map +1 -1
  97. package/dist/server/app-browser-entry.js +309 -155
  98. package/dist/server/app-browser-entry.js.map +1 -1
  99. package/dist/server/app-browser-interception-context.d.ts +24 -0
  100. package/dist/server/app-browser-interception-context.js +32 -0
  101. package/dist/server/app-browser-interception-context.js.map +1 -0
  102. package/dist/server/app-browser-navigation-controller.d.ts +3 -1
  103. package/dist/server/app-browser-navigation-controller.js +5 -1
  104. package/dist/server/app-browser-navigation-controller.js.map +1 -1
  105. package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
  106. package/dist/server/app-browser-rsc-redirect.js +2 -2
  107. package/dist/server/app-browser-rsc-redirect.js.map +1 -1
  108. package/dist/server/app-browser-state.d.ts +18 -1
  109. package/dist/server/app-browser-state.js +19 -1
  110. package/dist/server/app-browser-state.js.map +1 -1
  111. package/dist/server/app-browser-stream.d.ts +5 -14
  112. package/dist/server/app-browser-stream.js +13 -7
  113. package/dist/server/app-browser-stream.js.map +1 -1
  114. package/dist/server/app-browser-visible-commit.d.ts +2 -1
  115. package/dist/server/app-browser-visible-commit.js +1 -0
  116. package/dist/server/app-browser-visible-commit.js.map +1 -1
  117. package/dist/server/app-elements-wire.d.ts +10 -5
  118. package/dist/server/app-elements-wire.js +84 -2
  119. package/dist/server/app-elements-wire.js.map +1 -1
  120. package/dist/server/app-elements.d.ts +3 -2
  121. package/dist/server/app-elements.js +3 -2
  122. package/dist/server/app-elements.js.map +1 -1
  123. package/dist/server/app-fallback-renderer.d.ts +12 -3
  124. package/dist/server/app-fallback-renderer.js +15 -8
  125. package/dist/server/app-fallback-renderer.js.map +1 -1
  126. package/dist/server/app-history-state.js +6 -2
  127. package/dist/server/app-history-state.js.map +1 -1
  128. package/dist/server/app-interception-context-header.d.ts +33 -0
  129. package/dist/server/app-interception-context-header.js +44 -0
  130. package/dist/server/app-interception-context-header.js.map +1 -0
  131. package/dist/server/app-middleware.d.ts +13 -0
  132. package/dist/server/app-middleware.js +3 -1
  133. package/dist/server/app-middleware.js.map +1 -1
  134. package/dist/server/app-mounted-slots-header.d.ts +19 -0
  135. package/dist/server/app-mounted-slots-header.js +40 -1
  136. package/dist/server/app-mounted-slots-header.js.map +1 -1
  137. package/dist/server/app-optimistic-routing.d.ts +54 -0
  138. package/dist/server/app-optimistic-routing.js +208 -0
  139. package/dist/server/app-optimistic-routing.js.map +1 -0
  140. package/dist/server/app-page-boundary-render.d.ts +1 -0
  141. package/dist/server/app-page-boundary-render.js +2 -0
  142. package/dist/server/app-page-boundary-render.js.map +1 -1
  143. package/dist/server/app-page-boundary.d.ts +1 -0
  144. package/dist/server/app-page-boundary.js +2 -0
  145. package/dist/server/app-page-boundary.js.map +1 -1
  146. package/dist/server/app-page-cache.d.ts +15 -1
  147. package/dist/server/app-page-cache.js +68 -7
  148. package/dist/server/app-page-cache.js.map +1 -1
  149. package/dist/server/app-page-dispatch.d.ts +5 -0
  150. package/dist/server/app-page-dispatch.js +39 -5
  151. package/dist/server/app-page-dispatch.js.map +1 -1
  152. package/dist/server/app-page-element-builder.d.ts +2 -1
  153. package/dist/server/app-page-element-builder.js +7 -3
  154. package/dist/server/app-page-element-builder.js.map +1 -1
  155. package/dist/server/app-page-execution.d.ts +29 -1
  156. package/dist/server/app-page-execution.js +91 -4
  157. package/dist/server/app-page-execution.js.map +1 -1
  158. package/dist/server/app-page-head.d.ts +1 -0
  159. package/dist/server/app-page-head.js +29 -2
  160. package/dist/server/app-page-head.js.map +1 -1
  161. package/dist/server/app-page-probe.js +1 -1
  162. package/dist/server/app-page-render-observation.js +1 -1
  163. package/dist/server/app-page-render.d.ts +3 -0
  164. package/dist/server/app-page-render.js +7 -3
  165. package/dist/server/app-page-render.js.map +1 -1
  166. package/dist/server/app-page-response.d.ts +11 -1
  167. package/dist/server/app-page-response.js +18 -5
  168. package/dist/server/app-page-response.js.map +1 -1
  169. package/dist/server/app-page-route-wiring.d.ts +1 -0
  170. package/dist/server/app-page-route-wiring.js +35 -15
  171. package/dist/server/app-page-route-wiring.js.map +1 -1
  172. package/dist/server/app-page-stream.d.ts +4 -0
  173. package/dist/server/app-page-stream.js +3 -0
  174. package/dist/server/app-page-stream.js.map +1 -1
  175. package/dist/server/app-prerender-static-params.d.ts +2 -1
  176. package/dist/server/app-prerender-static-params.js +44 -8
  177. package/dist/server/app-prerender-static-params.js.map +1 -1
  178. package/dist/server/app-route-handler-cache.d.ts +2 -2
  179. package/dist/server/app-route-handler-cache.js +3 -2
  180. package/dist/server/app-route-handler-cache.js.map +1 -1
  181. package/dist/server/app-route-handler-dispatch.d.ts +7 -1
  182. package/dist/server/app-route-handler-dispatch.js +4 -1
  183. package/dist/server/app-route-handler-dispatch.js.map +1 -1
  184. package/dist/server/app-route-handler-execution.d.ts +18 -2
  185. package/dist/server/app-route-handler-execution.js +1 -0
  186. package/dist/server/app-route-handler-execution.js.map +1 -1
  187. package/dist/server/app-route-handler-response.js +6 -5
  188. package/dist/server/app-route-handler-response.js.map +1 -1
  189. package/dist/server/app-router-entry.js +6 -2
  190. package/dist/server/app-router-entry.js.map +1 -1
  191. package/dist/server/app-rsc-handler.d.ts +11 -1
  192. package/dist/server/app-rsc-handler.js +48 -21
  193. package/dist/server/app-rsc-handler.js.map +1 -1
  194. package/dist/server/app-rsc-render-mode.d.ts +4 -3
  195. package/dist/server/app-rsc-render-mode.js +7 -1
  196. package/dist/server/app-rsc-render-mode.js.map +1 -1
  197. package/dist/server/app-rsc-request-normalization.d.ts +4 -1
  198. package/dist/server/app-rsc-request-normalization.js +6 -2
  199. package/dist/server/app-rsc-request-normalization.js.map +1 -1
  200. package/dist/server/app-rsc-response-finalizer.d.ts +8 -1
  201. package/dist/server/app-rsc-response-finalizer.js +10 -3
  202. package/dist/server/app-rsc-response-finalizer.js.map +1 -1
  203. package/dist/server/app-rsc-route-matching.js +2 -2
  204. package/dist/server/app-rsc-route-matching.js.map +1 -1
  205. package/dist/server/app-segment-config.d.ts +4 -1
  206. package/dist/server/app-segment-config.js +6 -1
  207. package/dist/server/app-segment-config.js.map +1 -1
  208. package/dist/server/app-server-action-execution.d.ts +1 -0
  209. package/dist/server/app-server-action-execution.js +5 -1
  210. package/dist/server/app-server-action-execution.js.map +1 -1
  211. package/dist/server/app-ssr-entry.d.ts +2 -0
  212. package/dist/server/app-ssr-entry.js +92 -55
  213. package/dist/server/app-ssr-entry.js.map +1 -1
  214. package/dist/server/app-ssr-stream.d.ts +30 -2
  215. package/dist/server/app-ssr-stream.js +95 -8
  216. package/dist/server/app-ssr-stream.js.map +1 -1
  217. package/dist/server/app-static-generation.d.ts +1 -0
  218. package/dist/server/app-static-generation.js +2 -1
  219. package/dist/server/app-static-generation.js.map +1 -1
  220. package/dist/server/artifact-compatibility.d.ts +1 -1
  221. package/dist/server/artifact-compatibility.js.map +1 -1
  222. package/dist/server/cache-headers.d.ts +7 -0
  223. package/dist/server/cache-headers.js +19 -0
  224. package/dist/server/cache-headers.js.map +1 -0
  225. package/dist/server/cache-proof.d.ts +49 -3
  226. package/dist/server/cache-proof.js +78 -22
  227. package/dist/server/cache-proof.js.map +1 -1
  228. package/dist/server/client-reuse-manifest.d.ts +99 -0
  229. package/dist/server/client-reuse-manifest.js +212 -0
  230. package/dist/server/client-reuse-manifest.js.map +1 -0
  231. package/dist/server/default-global-error-module.d.ts +20 -0
  232. package/dist/server/default-global-error-module.js +20 -0
  233. package/dist/server/default-global-error-module.js.map +1 -0
  234. package/dist/server/default-not-found-module.d.ts +20 -0
  235. package/dist/server/default-not-found-module.js +20 -0
  236. package/dist/server/default-not-found-module.js.map +1 -0
  237. package/dist/server/dev-server.d.ts +10 -2
  238. package/dist/server/dev-server.js +99 -36
  239. package/dist/server/dev-server.js.map +1 -1
  240. package/dist/server/edge-api-runtime.d.ts +5 -0
  241. package/dist/server/edge-api-runtime.js +8 -0
  242. package/dist/server/edge-api-runtime.js.map +1 -0
  243. package/dist/server/headers.d.ts +22 -1
  244. package/dist/server/headers.js +22 -1
  245. package/dist/server/headers.js.map +1 -1
  246. package/dist/server/http-error-responses.d.ts +16 -1
  247. package/dist/server/http-error-responses.js +21 -1
  248. package/dist/server/http-error-responses.js.map +1 -1
  249. package/dist/server/image-optimization.d.ts +13 -4
  250. package/dist/server/image-optimization.js +15 -4
  251. package/dist/server/image-optimization.js.map +1 -1
  252. package/dist/server/isr-cache.d.ts +6 -2
  253. package/dist/server/isr-cache.js +20 -4
  254. package/dist/server/isr-cache.js.map +1 -1
  255. package/dist/server/middleware-runtime.d.ts +15 -0
  256. package/dist/server/middleware-runtime.js +59 -7
  257. package/dist/server/middleware-runtime.js.map +1 -1
  258. package/dist/server/middleware.d.ts +1 -1
  259. package/dist/server/middleware.js +5 -3
  260. package/dist/server/middleware.js.map +1 -1
  261. package/dist/server/navigation-planner.d.ts +9 -3
  262. package/dist/server/navigation-planner.js +98 -25
  263. package/dist/server/navigation-planner.js.map +1 -1
  264. package/dist/server/navigation-trace.d.ts +2 -1
  265. package/dist/server/navigation-trace.js +1 -0
  266. package/dist/server/navigation-trace.js.map +1 -1
  267. package/dist/server/pages-api-route.d.ts +45 -1
  268. package/dist/server/pages-api-route.js +27 -4
  269. package/dist/server/pages-api-route.js.map +1 -1
  270. package/dist/server/pages-body-parser-config.d.ts +60 -0
  271. package/dist/server/pages-body-parser-config.js +79 -0
  272. package/dist/server/pages-body-parser-config.js.map +1 -0
  273. package/dist/server/pages-data-route.d.ts +77 -0
  274. package/dist/server/pages-data-route.js +98 -0
  275. package/dist/server/pages-data-route.js.map +1 -0
  276. package/dist/server/pages-default-404.d.ts +31 -0
  277. package/dist/server/pages-default-404.js +40 -0
  278. package/dist/server/pages-default-404.js.map +1 -0
  279. package/dist/server/pages-i18n.d.ts +51 -1
  280. package/dist/server/pages-i18n.js +61 -1
  281. package/dist/server/pages-i18n.js.map +1 -1
  282. package/dist/server/pages-node-compat.d.ts +10 -0
  283. package/dist/server/pages-node-compat.js +12 -1
  284. package/dist/server/pages-node-compat.js.map +1 -1
  285. package/dist/server/pages-page-data.d.ts +69 -2
  286. package/dist/server/pages-page-data.js +47 -31
  287. package/dist/server/pages-page-data.js.map +1 -1
  288. package/dist/server/pages-page-response.d.ts +13 -1
  289. package/dist/server/pages-page-response.js +16 -11
  290. package/dist/server/pages-page-response.js.map +1 -1
  291. package/dist/server/prerender-route-params.d.ts +14 -0
  292. package/dist/server/prerender-route-params.js +94 -0
  293. package/dist/server/prerender-route-params.js.map +1 -0
  294. package/dist/server/prod-server.d.ts +15 -37
  295. package/dist/server/prod-server.js +143 -107
  296. package/dist/server/prod-server.js.map +1 -1
  297. package/dist/server/proxy-trust.d.ts +41 -0
  298. package/dist/server/proxy-trust.js +70 -0
  299. package/dist/server/proxy-trust.js.map +1 -0
  300. package/dist/server/request-pipeline.d.ts +13 -4
  301. package/dist/server/request-pipeline.js +32 -14
  302. package/dist/server/request-pipeline.js.map +1 -1
  303. package/dist/server/seed-cache.d.ts +12 -31
  304. package/dist/server/seed-cache.js +30 -37
  305. package/dist/server/seed-cache.js.map +1 -1
  306. package/dist/server/server-action-not-found.js +8 -3
  307. package/dist/server/server-action-not-found.js.map +1 -1
  308. package/dist/server/skip-cache-proof.d.ts +41 -0
  309. package/dist/server/skip-cache-proof.js +101 -0
  310. package/dist/server/skip-cache-proof.js.map +1 -0
  311. package/dist/server/static-file-cache.d.ts +1 -1
  312. package/dist/server/static-file-cache.js +8 -7
  313. package/dist/server/static-file-cache.js.map +1 -1
  314. package/dist/server/streaming-metadata.d.ts +5 -0
  315. package/dist/server/streaming-metadata.js +10 -0
  316. package/dist/server/streaming-metadata.js.map +1 -0
  317. package/dist/shims/app-router-scroll-state.d.ts +12 -0
  318. package/dist/shims/app-router-scroll-state.js +38 -0
  319. package/dist/shims/app-router-scroll-state.js.map +1 -0
  320. package/dist/shims/app-router-scroll.d.ts +14 -0
  321. package/dist/shims/app-router-scroll.js +100 -0
  322. package/dist/shims/app-router-scroll.js.map +1 -0
  323. package/dist/shims/before-interactive-context.d.ts +30 -0
  324. package/dist/shims/before-interactive-context.js +10 -0
  325. package/dist/shims/before-interactive-context.js.map +1 -0
  326. package/dist/shims/cache-runtime.d.ts +1 -1
  327. package/dist/shims/cache-runtime.js +14 -1
  328. package/dist/shims/cache-runtime.js.map +1 -1
  329. package/dist/shims/client-locale.d.ts +15 -0
  330. package/dist/shims/client-locale.js +13 -0
  331. package/dist/shims/client-locale.js.map +1 -0
  332. package/dist/shims/default-global-error.d.ts +32 -0
  333. package/dist/shims/default-global-error.js +181 -0
  334. package/dist/shims/default-global-error.js.map +1 -0
  335. package/dist/shims/default-not-found.d.ts +12 -0
  336. package/dist/shims/default-not-found.js +61 -0
  337. package/dist/shims/default-not-found.js.map +1 -0
  338. package/dist/shims/document.d.ts +59 -3
  339. package/dist/shims/document.js +36 -5
  340. package/dist/shims/document.js.map +1 -1
  341. package/dist/shims/error-boundary.d.ts +2 -2
  342. package/dist/shims/font-local.d.ts +5 -0
  343. package/dist/shims/font-local.js +6 -2
  344. package/dist/shims/font-local.js.map +1 -1
  345. package/dist/shims/form.js +13 -6
  346. package/dist/shims/form.js.map +1 -1
  347. package/dist/shims/head.js +4 -4
  348. package/dist/shims/head.js.map +1 -1
  349. package/dist/shims/headers.d.ts +6 -2
  350. package/dist/shims/headers.js +64 -21
  351. package/dist/shims/headers.js.map +1 -1
  352. package/dist/shims/image.d.ts +1 -1
  353. package/dist/shims/image.js +4 -4
  354. package/dist/shims/image.js.map +1 -1
  355. package/dist/shims/internal/pages-data-target.d.ts +58 -0
  356. package/dist/shims/internal/pages-data-target.js +91 -0
  357. package/dist/shims/internal/pages-data-target.js.map +1 -0
  358. package/dist/shims/internal/pages-data-url.d.ts +42 -0
  359. package/dist/shims/internal/pages-data-url.js +73 -0
  360. package/dist/shims/internal/pages-data-url.js.map +1 -0
  361. package/dist/shims/link.d.ts +21 -3
  362. package/dist/shims/link.js +189 -30
  363. package/dist/shims/link.js.map +1 -1
  364. package/dist/shims/metadata.d.ts +2 -1
  365. package/dist/shims/metadata.js +65 -6
  366. package/dist/shims/metadata.js.map +1 -1
  367. package/dist/shims/navigation.d.ts +8 -2
  368. package/dist/shims/navigation.js +67 -23
  369. package/dist/shims/navigation.js.map +1 -1
  370. package/dist/shims/og.d.ts +18 -2
  371. package/dist/shims/og.js +49 -1
  372. package/dist/shims/og.js.map +1 -0
  373. package/dist/shims/request-state-types.d.ts +1 -1
  374. package/dist/shims/root-params.d.ts +3 -1
  375. package/dist/shims/root-params.js +11 -3
  376. package/dist/shims/root-params.js.map +1 -1
  377. package/dist/shims/router-state.d.ts +1 -0
  378. package/dist/shims/router-state.js.map +1 -1
  379. package/dist/shims/router.d.ts +12 -5
  380. package/dist/shims/router.js +535 -86
  381. package/dist/shims/router.js.map +1 -1
  382. package/dist/shims/script.js +86 -12
  383. package/dist/shims/script.js.map +1 -1
  384. package/dist/shims/server.d.ts +21 -4
  385. package/dist/shims/server.js +30 -9
  386. package/dist/shims/server.js.map +1 -1
  387. package/dist/shims/slot.js +5 -1
  388. package/dist/shims/slot.js.map +1 -1
  389. package/dist/shims/unified-request-context.d.ts +1 -1
  390. package/dist/shims/url-safety.d.ts +23 -1
  391. package/dist/shims/url-safety.js +29 -2
  392. package/dist/shims/url-safety.js.map +1 -1
  393. package/dist/shims/url-utils.d.ts +2 -1
  394. package/dist/shims/url-utils.js +15 -4
  395. package/dist/shims/url-utils.js.map +1 -1
  396. package/dist/typegen.d.ts +10 -0
  397. package/dist/typegen.js +242 -0
  398. package/dist/typegen.js.map +1 -0
  399. package/dist/utils/asset-prefix.d.ts +33 -5
  400. package/dist/utils/asset-prefix.js +39 -6
  401. package/dist/utils/asset-prefix.js.map +1 -1
  402. package/dist/utils/cache-control-metadata.d.ts +2 -1
  403. package/dist/utils/cache-control-metadata.js +1 -3
  404. package/dist/utils/cache-control-metadata.js.map +1 -1
  405. package/dist/utils/domain-locale.d.ts +2 -1
  406. package/dist/utils/domain-locale.js +9 -1
  407. package/dist/utils/domain-locale.js.map +1 -1
  408. package/dist/utils/html-limited-bots.d.ts +5 -0
  409. package/dist/utils/html-limited-bots.js +15 -0
  410. package/dist/utils/html-limited-bots.js.map +1 -0
  411. package/dist/utils/lazy-chunks.d.ts +1 -1
  412. package/dist/utils/lazy-chunks.js +1 -1
  413. package/dist/utils/lazy-chunks.js.map +1 -1
  414. package/dist/utils/prerender-output-paths.d.ts +15 -0
  415. package/dist/utils/prerender-output-paths.js +24 -0
  416. package/dist/utils/prerender-output-paths.js.map +1 -0
  417. package/dist/utils/query.d.ts +23 -1
  418. package/dist/utils/query.js +46 -2
  419. package/dist/utils/query.js.map +1 -1
  420. package/dist/utils/record.d.ts +5 -0
  421. package/dist/utils/record.js +8 -0
  422. package/dist/utils/record.js.map +1 -0
  423. package/package.json +11 -3
@@ -1,21 +1,26 @@
1
1
  import { normalizePathnameForRouteMatchStrict } from "../routing/utils.js";
2
- import { hasBasePath, removeTrailingSlash, stripBasePath } from "../utils/base-path.js";
3
- import { VINEXT_PRERENDER_SECRET_HEADER, VINEXT_STATIC_FILE_HEADER } from "./headers.js";
2
+ import { hasBasePath, stripBasePath } from "../utils/base-path.js";
3
+ import { VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER, VINEXT_STATIC_FILE_HEADER } from "./headers.js";
4
4
  import { normalizePath } from "./normalize-path.js";
5
5
  import { applyMiddlewareRequestHeaders, isExternalUrl, matchRedirect, matchRewrite, proxyExternalRequest, requestContextFromRequest, sanitizeDestination } from "../config/config-matchers.js";
6
6
  import { notFoundResponse } from "./http-error-responses.js";
7
- import { applyConfigHeadersToHeaderRecord, filterInternalHeaders, isOpenRedirectShaped } from "./request-pipeline.js";
7
+ import { applyConfigHeadersToHeaderRecord, filterInternalHeaders, isOpenRedirectShaped, normalizeTrailingSlash } from "./request-pipeline.js";
8
+ import { mergeRewriteQuery } from "../utils/query.js";
9
+ import { normalizeDefaultLocalePathname, stripI18nLocaleForApiRoute } from "./pages-i18n.js";
10
+ import { resolveRequestHost, resolveRequestProtocol, trustProxy, trustedHosts } from "./proxy-trust.js";
11
+ import { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES, isImageOptimizationPath, isSafeImageContentType, parseImageParams } from "./image-optimization.js";
8
12
  import { installSocketErrorBackstop } from "./socket-error-backstop.js";
13
+ import { ASSET_PREFIX_URL_DIR, assetPrefixPathname, isAbsoluteAssetPrefix } from "../utils/asset-prefix.js";
9
14
  import { CONTENT_TYPES, StaticFileCache, etagFromFilenameHash } from "./static-file-cache.js";
15
+ import { buildNextDataNotFoundResponse, isNextDataPathname, parseNextDataPathname } from "./pages-data-route.js";
10
16
  import { manifestFileWithBase } from "../utils/manifest-paths.js";
11
- import { ASSET_PREFIX_URL_DIR, assetPrefixPathname, isAbsoluteAssetPrefix } from "../utils/asset-prefix.js";
12
- import { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES, isSafeImageContentType, parseImageParams } from "./image-optimization.js";
17
+ import { readTrustedPrerenderRouteParamsFromHeaders, serializePrerenderRouteParamsHeader } from "./prerender-route-params.js";
13
18
  import { computeLazyChunks } from "../utils/lazy-chunks.js";
14
19
  import { readPrerenderSecret } from "../build/server-manifest.js";
15
20
  import { seedMemoryCacheFromPrerender } from "./seed-cache.js";
16
21
  import fs from "node:fs";
17
22
  import path from "node:path";
18
- import fsp from "node:fs/promises";
23
+ import fs$1 from "node:fs/promises";
19
24
  import { pathToFileURL } from "node:url";
20
25
  import zlib from "node:zlib";
21
26
  import { createServer } from "node:http";
@@ -129,8 +134,20 @@ function mergeResponseHeaders(middlewareHeaders, response) {
129
134
  }
130
135
  function toWebHeaders(headersRecord) {
131
136
  const headers = new Headers();
132
- for (const [key, value] of Object.entries(headersRecord)) if (Array.isArray(value)) for (const item of value) headers.append(key, item);
133
- else headers.set(key, value);
137
+ for (const [key, value] of Object.entries(headersRecord)) appendWebHeader(headers, key, value);
138
+ return headers;
139
+ }
140
+ function appendWebHeader(headers, key, value) {
141
+ if (value === void 0) return;
142
+ if (Array.isArray(value)) {
143
+ for (const item of value) headers.append(key, item);
144
+ return;
145
+ }
146
+ headers.set(key, value);
147
+ }
148
+ function nodeHeadersToWebHeaders(headersRecord) {
149
+ const headers = new Headers();
150
+ for (const [key, value] of Object.entries(headersRecord)) appendWebHeader(headers, key, value);
134
151
  return headers;
135
152
  }
136
153
  const NO_BODY_RESPONSE_STATUSES = new Set([
@@ -325,7 +342,7 @@ async function tryServeStatic(req, res, clientDir, pathname, compress, cache, ex
325
342
  if (!resolved) return false;
326
343
  const ext = path.extname(resolved.path);
327
344
  const ct = CONTENT_TYPES[ext] ?? "application/octet-stream";
328
- const isHashed = pathname.startsWith("/assets/") || pathname.includes("/_next/static/");
345
+ const isHashed = pathname.includes(`/${ASSET_PREFIX_URL_DIR}/`);
329
346
  const cacheControl = isHashed ? "public, max-age=31536000, immutable" : "public, max-age=3600";
330
347
  const etag = isHashed && etagFromFilenameHash(resolved.path, ext) || `W/"${resolved.size}-${Math.floor(resolved.mtimeMs / 1e3)}"`;
331
348
  const baseType = ct.split(";")[0].trim();
@@ -415,7 +432,7 @@ async function resolveStaticFile(staticFile) {
415
432
  }
416
433
  async function statIfFile(filePath) {
417
434
  try {
418
- const stat = await fsp.stat(filePath);
435
+ const stat = await fs$1.stat(filePath);
419
436
  return stat.isFile() ? {
420
437
  size: stat.size,
421
438
  mtimeMs: stat.mtimeMs
@@ -425,35 +442,6 @@ async function statIfFile(filePath) {
425
442
  }
426
443
  }
427
444
  /**
428
- * Resolve the host for a request, ignoring X-Forwarded-Host to prevent
429
- * host header poisoning attacks (open redirects, cache poisoning).
430
- *
431
- * X-Forwarded-Host is only trusted when the VINEXT_TRUSTED_HOSTS env var
432
- * lists the forwarded host value. Without this, an attacker can send
433
- * X-Forwarded-Host: evil.com and poison any redirect that resolves
434
- * against request.url.
435
- *
436
- * On Cloudflare Workers, X-Forwarded-Host is always set by Cloudflare
437
- * itself, so this is only a concern for the Node.js prod-server.
438
- */
439
- function resolveHost(req, fallback) {
440
- const rawForwarded = req.headers["x-forwarded-host"];
441
- const hostHeader = req.headers.host;
442
- if (rawForwarded) {
443
- const forwardedHost = rawForwarded.split(",")[0].trim().toLowerCase();
444
- if (forwardedHost && trustedHosts.has(forwardedHost)) return forwardedHost;
445
- }
446
- return hostHeader || fallback;
447
- }
448
- /** Hosts that are allowed as X-Forwarded-Host values (stored lowercase). */
449
- const trustedHosts = new Set((process.env.VINEXT_TRUSTED_HOSTS ?? "").split(",").map((h) => h.trim().toLowerCase()).filter(Boolean));
450
- /**
451
- * Whether to trust X-Forwarded-Proto from upstream proxies.
452
- * Enabled when VINEXT_TRUST_PROXY=1 or when VINEXT_TRUSTED_HOSTS is set
453
- * (having trusted hosts implies a trusted proxy).
454
- */
455
- const trustProxy = process.env.VINEXT_TRUST_PROXY === "1" || trustedHosts.size > 0;
456
- /**
457
445
  * Convert a Node.js IncomingMessage to a Web Request object.
458
446
  *
459
447
  * When `urlOverride` is provided, it is used as the path + query string
@@ -462,17 +450,14 @@ const trustProxy = process.env.VINEXT_TRUST_PROXY === "1" || trustedHosts.size >
462
450
  * Router prod server normalizes before static-asset lookup, and can pass
463
451
  * the result here so the downstream RSC handler doesn't re-normalize).
464
452
  */
465
- function nodeToWebRequest(req, urlOverride) {
466
- const rawProto = trustProxy ? req.headers["x-forwarded-proto"]?.split(",")[0]?.trim() : void 0;
467
- const origin = `${rawProto === "https" || rawProto === "http" ? rawProto : "http"}://${resolveHost(req, "localhost")}`;
453
+ function nodeToWebRequest(req, urlOverride, prerenderSecret) {
454
+ const origin = `${resolveRequestProtocol(req)}://${resolveRequestHost(req, "localhost")}`;
468
455
  const url = new URL(urlOverride ?? req.url ?? "/", origin);
469
- const rawHeaders = new Headers();
470
- for (const [key, value] of Object.entries(req.headers)) {
471
- if (value === void 0) continue;
472
- if (Array.isArray(value)) for (const v of value) rawHeaders.append(key, v);
473
- else rawHeaders.set(key, value);
474
- }
456
+ const rawHeaders = nodeHeadersToWebHeaders(req.headers);
457
+ const prerenderRouteParamsPayload = readTrustedPrerenderRouteParamsFromHeaders(rawHeaders, prerenderSecret);
475
458
  const headers = filterInternalHeaders(rawHeaders);
459
+ const prerenderRouteParamsHeader = serializePrerenderRouteParamsHeader(prerenderRouteParamsPayload);
460
+ if (prerenderRouteParamsHeader !== null) headers.set(VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, prerenderRouteParamsHeader);
476
461
  const method = req.method ?? "GET";
477
462
  const hasBody = method !== "GET" && method !== "HEAD";
478
463
  const init = {
@@ -584,6 +569,22 @@ function resolveAppRouterHandler(entry) {
584
569
  console.error("[vinext] App Router entry must export either a default handler function or a Worker-style default export with fetch()");
585
570
  process.exit(1);
586
571
  }
572
+ function isAppRouterPrerenderSeederExport(value) {
573
+ return typeof value === "function";
574
+ }
575
+ function resolveAppRouterPrerenderSeeder(entryModule) {
576
+ if (typeof entryModule !== "object" || entryModule === null) return seedMemoryCacheFromPrerender;
577
+ const seedExport = Object.getOwnPropertyDescriptor(entryModule, "seedMemoryCacheFromPrerender")?.value;
578
+ if (!isAppRouterPrerenderSeederExport(seedExport)) {
579
+ if (process.env.NEXT_PRIVATE_DEBUG_CACHE) console.debug("[vinext] ISR: using fallback prerender cache seeder");
580
+ return seedMemoryCacheFromPrerender;
581
+ }
582
+ if (process.env.NEXT_PRIVATE_DEBUG_CACHE) console.debug("[vinext] ISR: using App Router entry prerender cache seeder");
583
+ return async (serverDir) => {
584
+ const result = await Promise.resolve(seedExport(serverDir));
585
+ return typeof result === "number" ? result : 0;
586
+ };
587
+ }
587
588
  /**
588
589
  * Resolve a request pathname to a static-asset lookup path inside `clientDir`.
589
590
  *
@@ -592,27 +593,21 @@ function resolveAppRouterHandler(entry) {
592
593
  *
593
594
  * Three URL shapes are recognised:
594
595
  *
595
- * - `/assets/...` — the historical Vite default, used when `assetPrefix` is
596
- * unset. Returns the pathname verbatim.
596
+ * - `/_next/static/...` — the default layout. Files land on disk at
597
+ * `dist/client/_next/static/...`, so the pathname maps 1:1. Also covers
598
+ * absolute-URL `assetPrefix` with no path component (same on-disk and
599
+ * URL shape).
597
600
  * - `<assetPathPrefix>/_next/static/...` — when `assetPrefix` is a path
598
601
  * prefix (e.g. `/custom-asset-prefix`). The on-disk layout is
599
602
  * `dist/client/<prefix>/_next/static/...`, so the pathname maps 1:1.
600
- * - `/_next/static/...` — when `assetPrefix` is an absolute URL with no
601
- * path component (e.g. `https://cdn.example.com`). Files land on disk
602
- * at `dist/client/_next/static/...`. This branch is mostly a fallback
603
- * for setups that don't actually route asset requests to the CDN.
604
- *
605
- * When `assetPrefix` is an absolute URL with a non-empty pathname
606
- * (e.g. `https://cdn.example.com/sub`), files are written to
607
- * `dist/client/_next/static/...` but emitted URLs prepend the full URL
608
- * (`https://cdn.example.com/sub/_next/static/...`). Requests for those
609
- * URLs do not normally arrive at this server — they go to the CDN. We
610
- * still accept `<pathname>/_next/static/...` so a same-origin reverse
611
- * proxy can route through.
603
+ * - `<absoluteURLPathname>/_next/static/...` — when `assetPrefix` is an
604
+ * absolute URL with a non-empty pathname (e.g. `https://cdn/sub`).
605
+ * Files are written to `dist/client/_next/static/...` but emitted URLs
606
+ * prepend the full URL. Requests do not normally arrive here — they go
607
+ * to the CDN — but we accept them so a same-origin reverse proxy can
608
+ * route through; the on-disk path is just `_next/static/...`.
612
609
  */
613
610
  function resolveAppRouterAssetPath(pathname, assetPathPrefix, assetPrefix) {
614
- if (pathname.startsWith("/assets/")) return pathname;
615
- if (!assetPrefix) return null;
616
611
  const nextStaticDir = `/${ASSET_PREFIX_URL_DIR}/`;
617
612
  if (assetPathPrefix) {
618
613
  if (pathname === assetPathPrefix || pathname.startsWith(assetPathPrefix + "/")) {
@@ -657,7 +652,7 @@ async function startAppRouterServer(options) {
657
652
  const rscHandler = resolveAppRouterHandler(rscModule.default);
658
653
  const appRouterAssetPrefix = typeof rscModule.__assetPrefix === "string" ? rscModule.__assetPrefix : "";
659
654
  const appAssetPathPrefix = assetPrefixPathname(appRouterAssetPrefix);
660
- const seededRoutes = await seedMemoryCacheFromPrerender(path.dirname(rscEntryPath));
655
+ const seededRoutes = await resolveAppRouterPrerenderSeeder(rscModule)(path.dirname(rscEntryPath));
661
656
  if (seededRoutes > 0) console.log(`[vinext] Seeded ${seededRoutes} pre-rendered route${seededRoutes !== 1 ? "s" : ""} into memory cache`);
662
657
  const staticCache = await StaticFileCache.create(clientDir);
663
658
  const handleRequest = async (req, res) => {
@@ -687,9 +682,14 @@ async function startAppRouterServer(options) {
687
682
  }
688
683
  {
689
684
  const assetLookupPath = resolveAppRouterAssetPath(pathname, appAssetPathPrefix, appRouterAssetPrefix);
690
- if (assetLookupPath && await tryServeStatic(req, res, clientDir, assetLookupPath, compress, staticCache)) return;
685
+ if (assetLookupPath) {
686
+ if (await tryServeStatic(req, res, clientDir, assetLookupPath, compress, staticCache)) return;
687
+ res.writeHead(404, { "Content-Type": "text/plain; charset=utf-8" });
688
+ res.end("Not Found");
689
+ return;
690
+ }
691
691
  }
692
- if (pathname === "/_vinext/image") {
692
+ if (isImageOptimizationPath(pathname)) {
693
693
  const params = parseImageParams(new URL(rawUrl, "http://localhost"), [...DEFAULT_DEVICE_SIZES, ...DEFAULT_IMAGE_SIZES]);
694
694
  if (!params) {
695
695
  res.writeHead(400);
@@ -713,7 +713,7 @@ async function startAppRouterServer(options) {
713
713
  }
714
714
  try {
715
715
  const qs = rawUrl.includes("?") ? rawUrl.slice(rawUrl.indexOf("?")) : "";
716
- const response = await rscHandler(nodeToWebRequest(req, pathname + qs));
716
+ const response = await rscHandler(nodeToWebRequest(req, pathname + qs, prerenderSecret));
717
717
  const staticFileSignal = response.headers.get(VINEXT_STATIC_FILE_HEADER);
718
718
  if (staticFileSignal) {
719
719
  let staticFilePath = "/";
@@ -775,7 +775,7 @@ function readPagesServerEntryPageRoutes(value) {
775
775
  *
776
776
  * Uses the server entry (dist/server/entry.js) which exports:
777
777
  * - renderPage(request, url, manifest, ctx?, middlewareHeaders?) — SSR rendering (Web Request → Response)
778
- * - handleApiRoute(request, url) — API route handling (Web Request Response)
778
+ * - handleApiRoute(request, url, ctx?) — API route handling (ctx optional; pass for ctx.waitUntil() on Workers)
779
779
  * - runMiddleware(request, ctx?) — middleware execution (ctx optional; pass for ctx.waitUntil() on Workers)
780
780
  * - vinextConfig — embedded next.config.js settings
781
781
  */
@@ -783,7 +783,7 @@ async function startPagesRouterServer(options) {
783
783
  const { port, host, clientDir, serverEntryPath, compress, purpose } = options;
784
784
  const serverMtime = fs.statSync(serverEntryPath).mtimeMs;
785
785
  const serverEntry = await import(`${pathToFileURL(serverEntryPath).href}?t=${serverMtime}`);
786
- const { renderPage, handleApiRoute: handleApi, runMiddleware, vinextConfig } = serverEntry;
786
+ const { renderPage, handleApiRoute: handleApi, runMiddleware, vinextConfig, buildId: pagesBuildId } = serverEntry;
787
787
  const matchPageRoute = typeof serverEntry.matchPageRoute === "function" ? serverEntry.matchPageRoute : void 0;
788
788
  const pageRoutes = readPagesServerEntryPageRoutes(serverEntry.pageRoutes);
789
789
  const prerenderSecret = readPrerenderSecret(path.dirname(serverEntryPath));
@@ -792,6 +792,7 @@ async function startPagesRouterServer(options) {
792
792
  const pagesAssetPathPrefix = assetPrefixPathname(assetPrefix);
793
793
  const assetBase = basePath ? `${basePath}/` : "/";
794
794
  const trailingSlash = vinextConfig?.trailingSlash ?? false;
795
+ const i18nConfig = vinextConfig?.i18n ?? null;
795
796
  const configRedirects = vinextConfig?.redirects ?? [];
796
797
  const configRewrites = vinextConfig?.rewrites ?? {
797
798
  beforeFiles: [],
@@ -867,8 +868,13 @@ async function startPagesRouterServer(options) {
867
868
  }
868
869
  const staticLookupPath = stripBasePath(pathname, basePath);
869
870
  const pagesAssetLookup = resolveAppRouterAssetPath(pathname, pagesAssetPathPrefix, assetPrefix);
870
- if (pagesAssetLookup && await tryServeStatic(req, res, clientDir, pagesAssetLookup, compress, staticCache)) return;
871
- if (pathname === "/_vinext/image" || staticLookupPath === "/_vinext/image") {
871
+ if (pagesAssetLookup) {
872
+ if (await tryServeStatic(req, res, clientDir, pagesAssetLookup, compress, staticCache)) return;
873
+ res.writeHead(404, { "Content-Type": "text/plain; charset=utf-8" });
874
+ res.end("Not Found");
875
+ return;
876
+ }
877
+ if (isImageOptimizationPath(pathname) || isImageOptimizationPath(staticLookupPath)) {
872
878
  const params = parseImageParams(new URL(rawUrl, "http://localhost"), allowedImageWidths);
873
879
  if (!params) {
874
880
  res.writeHead(400);
@@ -891,6 +897,7 @@ async function startPagesRouterServer(options) {
891
897
  return;
892
898
  }
893
899
  try {
900
+ const hadBasePath = !basePath || hasBasePath(pathname, basePath);
894
901
  {
895
902
  const stripped = stripBasePath(pathname, basePath);
896
903
  if (stripped !== pathname) {
@@ -898,27 +905,37 @@ async function startPagesRouterServer(options) {
898
905
  pathname = stripped;
899
906
  }
900
907
  }
901
- if (pathname !== "/" && pathname !== "/api" && !pathname.startsWith("/api/")) {
902
- const hasTrailing = pathname.endsWith("/");
903
- if (trailingSlash && !hasTrailing) {
904
- const qs = url.includes("?") ? url.slice(url.indexOf("?")) : "";
905
- res.writeHead(308, { Location: basePath + pathname + "/" + qs });
908
+ const basePathState = {
909
+ basePath,
910
+ hadBasePath
911
+ };
912
+ {
913
+ const qs = url.includes("?") ? url.slice(url.indexOf("?")) : "";
914
+ const trailingSlashRedirect = normalizeTrailingSlash(pathname, basePath, trailingSlash, qs);
915
+ if (trailingSlashRedirect) {
916
+ const location = trailingSlashRedirect.headers.get("Location");
917
+ res.writeHead(trailingSlashRedirect.status, location ? { Location: location } : void 0);
906
918
  res.end();
907
919
  return;
908
- } else if (!trailingSlash && hasTrailing) {
909
- const qs = url.includes("?") ? url.slice(url.indexOf("?")) : "";
910
- res.writeHead(308, { Location: basePath + removeTrailingSlash(pathname) + qs });
911
- res.end();
920
+ }
921
+ }
922
+ let isDataReq = false;
923
+ if (isNextDataPathname(pathname)) {
924
+ const dataMatch = pagesBuildId ? parseNextDataPathname(pathname, pagesBuildId) : null;
925
+ if (!dataMatch) {
926
+ await sendWebResponse(buildNextDataNotFoundResponse(), req, res, compress);
912
927
  return;
913
928
  }
929
+ isDataReq = true;
930
+ const qs = url.includes("?") ? url.slice(url.indexOf("?")) : "";
931
+ url = dataMatch.pagePathname + qs;
932
+ pathname = dataMatch.pagePathname;
914
933
  }
915
- const rawProtocol = trustProxy ? req.headers["x-forwarded-proto"]?.split(",")[0]?.trim() : void 0;
916
- const protocol = rawProtocol === "https" || rawProtocol === "http" ? rawProtocol : "http";
917
- const hostHeader = resolveHost(req, `${host}:${port}`);
918
- const reqHeaders = filterInternalHeaders(Object.entries(req.headers).reduce((h, [k, v]) => {
919
- if (v) h.set(k, Array.isArray(v) ? v.join(", ") : v);
920
- return h;
921
- }, new Headers()));
934
+ const protocol = resolveRequestProtocol(req);
935
+ const hostHeader = resolveRequestHost(req, `${host}:${port}`);
936
+ const rawReqHeaders = nodeHeadersToWebHeaders(req.headers);
937
+ const isDataRequest = rawReqHeaders.get("x-nextjs-data") === "1";
938
+ const reqHeaders = filterInternalHeaders(rawReqHeaders);
922
939
  const method = req.method ?? "GET";
923
940
  const hasBody = method !== "GET" && method !== "HEAD";
924
941
  let webRequest = new Request(`${protocol}://${hostHeader}${url}`, {
@@ -928,10 +945,12 @@ async function startPagesRouterServer(options) {
928
945
  duplex: hasBody ? "half" : void 0
929
946
  });
930
947
  const reqCtx = requestContextFromRequest(webRequest);
948
+ const requestHostname = i18nConfig ? new URL(webRequest.url).hostname : "";
949
+ const matchPathname = i18nConfig ? normalizeDefaultLocalePathname(pathname, i18nConfig, { hostname: requestHostname }) : pathname;
931
950
  if (configRedirects.length) {
932
- const redirect = matchRedirect(pathname, configRedirects, reqCtx);
951
+ const redirect = matchRedirect(matchPathname, configRedirects, reqCtx, basePathState);
933
952
  if (redirect) {
934
- const dest = sanitizeDestination(basePath && !isExternalUrl(redirect.destination) && !hasBasePath(redirect.destination, basePath) ? basePath + redirect.destination : redirect.destination);
953
+ const dest = sanitizeDestination(basePath && hadBasePath && !isExternalUrl(redirect.destination) && !hasBasePath(redirect.destination, basePath) ? basePath + redirect.destination : redirect.destination);
935
954
  res.writeHead(redirect.permanent ? 308 : 307, { Location: dest });
936
955
  res.end();
937
956
  return;
@@ -941,7 +960,7 @@ async function startPagesRouterServer(options) {
941
960
  const middlewareHeaders = {};
942
961
  let middlewareStatus;
943
962
  if (typeof runMiddleware === "function") {
944
- const result = await runMiddleware(webRequest, void 0);
963
+ const result = await runMiddleware(webRequest, void 0, { isDataRequest });
945
964
  if (result.waitUntilPromises && result.waitUntilPromises.length > 0) Promise.allSettled(result.waitUntilPromises);
946
965
  if (!result.continue) {
947
966
  if (result.redirectUrl) {
@@ -983,30 +1002,41 @@ async function startPagesRouterServer(options) {
983
1002
  const { postMwReqCtx, request: postMwReq } = applyMiddlewareRequestHeaders(middlewareHeaders, webRequest, { preserveCredentialHeaders: isExternalUrl(resolvedUrl) });
984
1003
  webRequest = postMwReq;
985
1004
  let resolvedPathname = resolvedUrl.split("?")[0];
1005
+ const matchResolvedPathname = (p) => i18nConfig ? normalizeDefaultLocalePathname(p, i18nConfig, { hostname: requestHostname }) : p;
986
1006
  if (configHeaders.length) applyConfigHeadersToHeaderRecord(middlewareHeaders, {
987
1007
  configHeaders,
988
- pathname,
989
- requestContext: reqCtx
1008
+ pathname: matchPathname,
1009
+ requestContext: reqCtx,
1010
+ basePathState
990
1011
  });
991
1012
  if (isExternalUrl(resolvedUrl)) {
992
1013
  await sendWebResponse(mergeWebResponse(middlewareHeaders, await proxyExternalRequest(webRequest, resolvedUrl), void 0), req, res, compress);
993
1014
  return;
994
1015
  }
995
- if (staticLookupPath !== "/" && !staticLookupPath.startsWith("/api/") && !staticLookupPath.startsWith("/assets/") && await tryServeStatic(req, res, clientDir, staticLookupPath, compress, staticCache, middlewareHeaders)) return;
1016
+ if (staticLookupPath !== "/" && !staticLookupPath.startsWith("/api/") && !staticLookupPath.startsWith(`/_next/static/`) && await tryServeStatic(req, res, clientDir, staticLookupPath, compress, staticCache, middlewareHeaders)) return;
1017
+ let configRewriteFired = false;
996
1018
  if (configRewrites.beforeFiles?.length) {
997
- const rewritten = matchRewrite(resolvedPathname, configRewrites.beforeFiles, postMwReqCtx);
1019
+ const rewritten = matchRewrite(matchResolvedPathname(resolvedPathname), configRewrites.beforeFiles, postMwReqCtx, basePathState);
998
1020
  if (rewritten) {
999
1021
  if (isExternalUrl(rewritten)) {
1000
1022
  await sendWebResponse(await proxyExternalRequest(webRequest, rewritten), req, res, compress);
1001
1023
  return;
1002
1024
  }
1003
- resolvedUrl = rewritten;
1004
- resolvedPathname = rewritten.split("?")[0];
1025
+ resolvedUrl = mergeRewriteQuery(resolvedUrl, rewritten);
1026
+ resolvedPathname = resolvedUrl.split("?")[0];
1027
+ configRewriteFired = true;
1005
1028
  }
1006
1029
  }
1007
- if (resolvedPathname.startsWith("/api/") || resolvedPathname === "/api") {
1030
+ if (basePath && !hadBasePath && !configRewriteFired) {
1031
+ res.writeHead(404, { "Content-Type": "text/html; charset=utf-8" });
1032
+ res.end("This page could not be found");
1033
+ return;
1034
+ }
1035
+ const apiLookupUrl = stripI18nLocaleForApiRoute(resolvedUrl, vinextConfig?.i18n ?? null);
1036
+ const apiLookupPathname = apiLookupUrl.split("?")[0];
1037
+ if (apiLookupPathname.startsWith("/api/") || apiLookupPathname === "/api") {
1008
1038
  let response;
1009
- if (typeof handleApi === "function") response = await handleApi(webRequest, resolvedUrl);
1039
+ if (typeof handleApi === "function") response = await handleApi(webRequest, apiLookupUrl, createNodeExecutionContext());
1010
1040
  else response = new Response("404 - API route not found", { status: 404 });
1011
1041
  const mergedResponse = mergeWebResponse(middlewareHeaders, response, middlewareStatus);
1012
1042
  if (!mergedResponse.body) {
@@ -1022,30 +1052,36 @@ async function startPagesRouterServer(options) {
1022
1052
  }
1023
1053
  const pageMatch = matchPageRoute ? matchPageRoute(resolvedPathname, webRequest) : null;
1024
1054
  if ((!pageMatch || pageMatch.route.isDynamic) && configRewrites.afterFiles?.length) {
1025
- const rewritten = matchRewrite(resolvedPathname, configRewrites.afterFiles, postMwReqCtx);
1055
+ const rewritten = matchRewrite(matchResolvedPathname(resolvedPathname), configRewrites.afterFiles, postMwReqCtx, basePathState);
1026
1056
  if (rewritten) {
1027
1057
  if (isExternalUrl(rewritten)) {
1028
1058
  await sendWebResponse(await proxyExternalRequest(webRequest, rewritten), req, res, compress);
1029
1059
  return;
1030
1060
  }
1031
- resolvedUrl = rewritten;
1032
- resolvedPathname = rewritten.split("?")[0];
1061
+ resolvedUrl = mergeRewriteQuery(resolvedUrl, rewritten);
1062
+ resolvedPathname = resolvedUrl.split("?")[0];
1033
1063
  }
1034
1064
  }
1035
1065
  let response;
1036
1066
  if (typeof renderPage === "function") {
1037
1067
  const middlewareResponseHeaders = toWebHeaders(middlewareHeaders);
1038
- response = await renderPage(webRequest, resolvedUrl, ssrManifest, void 0, middlewareResponseHeaders);
1039
- if (response && response.status === 404 && configRewrites.fallback?.length) {
1040
- const fallbackRewrite = matchRewrite(resolvedPathname, configRewrites.fallback, postMwReqCtx);
1068
+ const renderPageMatch = matchPageRoute ? matchPageRoute(resolvedPathname, webRequest) : null;
1069
+ const shouldDeferErrorPageOnMiss = !isDataReq && !!matchPageRoute && !renderPageMatch;
1070
+ const dataRenderOptions = isDataReq ? { isDataReq: true } : void 0;
1071
+ response = await renderPage(webRequest, resolvedUrl, ssrManifest, void 0, middlewareResponseHeaders, shouldDeferErrorPageOnMiss ? { renderErrorPageOnMiss: false } : dataRenderOptions);
1072
+ let matchedFallbackRewrite = false;
1073
+ if (response && response.status === 404 && shouldDeferErrorPageOnMiss && configRewrites.fallback?.length) {
1074
+ const fallbackRewrite = matchRewrite(matchResolvedPathname(resolvedPathname), configRewrites.fallback, postMwReqCtx, basePathState);
1041
1075
  if (fallbackRewrite) {
1042
1076
  if (isExternalUrl(fallbackRewrite)) {
1043
1077
  await sendWebResponse(await proxyExternalRequest(webRequest, fallbackRewrite), req, res, compress);
1044
1078
  return;
1045
1079
  }
1046
- response = await renderPage(webRequest, fallbackRewrite, ssrManifest, void 0, middlewareResponseHeaders);
1080
+ matchedFallbackRewrite = true;
1081
+ response = await renderPage(webRequest, mergeRewriteQuery(resolvedUrl, fallbackRewrite), ssrManifest, void 0, middlewareResponseHeaders, dataRenderOptions);
1047
1082
  }
1048
1083
  }
1084
+ if (response && response.status === 404 && shouldDeferErrorPageOnMiss && !matchedFallbackRewrite) response = await renderPage(webRequest, resolvedUrl, ssrManifest, void 0, middlewareResponseHeaders);
1049
1085
  }
1050
1086
  if (!response) {
1051
1087
  res.writeHead(404);
@@ -1088,6 +1124,6 @@ async function startPagesRouterServer(options) {
1088
1124
  };
1089
1125
  }
1090
1126
  //#endregion
1091
- export { COMPRESSIBLE_TYPES, COMPRESS_THRESHOLD, mergeResponseHeaders, mergeWebResponse, negotiateEncoding, nodeToWebRequest, resolveAppRouterAssetPath, resolveHost, sendCompressed, sendWebResponse, startProdServer, trustProxy, trustedHosts, tryServeStatic };
1127
+ export { COMPRESSIBLE_TYPES, COMPRESS_THRESHOLD, mergeResponseHeaders, mergeWebResponse, negotiateEncoding, nodeToWebRequest, resolveAppRouterAssetPath, resolveAppRouterPrerenderSeeder, resolveRequestHost as resolveHost, sendCompressed, sendWebResponse, startProdServer, trustProxy, trustedHosts, tryServeStatic };
1092
1128
 
1093
1129
  //# sourceMappingURL=prod-server.js.map