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
package/dist/index.js CHANGED
@@ -1,21 +1,24 @@
1
1
  import { detectPackageManager } from "./utils/project.js";
2
2
  import { normalizePathnameForRouteMatchStrict } from "./routing/utils.js";
3
3
  import { createValidFileMatcher } from "./routing/file-matcher.js";
4
- import { hasBasePath, removeTrailingSlash } from "./utils/base-path.js";
4
+ import { hasBasePath } from "./utils/base-path.js";
5
5
  import { apiRouter, invalidateRouteCache, matchRoute, pagesRouter } from "./routing/pages-router.js";
6
- import { INTERNAL_HEADERS, VINEXT_MW_CTX_HEADER, VINEXT_TIMING_HEADER } from "./server/headers.js";
6
+ import { INTERNAL_HEADERS, VINEXT_INTERNAL_HEADERS, VINEXT_MW_CTX_HEADER, VINEXT_TIMING_HEADER } from "./server/headers.js";
7
7
  import { buildRequestHeadersFromMiddlewareResponse } from "./server/middleware-request-headers.js";
8
8
  import { normalizePath as normalizePath$1 } from "./server/normalize-path.js";
9
9
  import { isExternalUrl, matchHeaders, matchRedirect, matchRewrite, proxyExternalRequest, requestContextFromRequest, sanitizeDestination } from "./config/config-matchers.js";
10
- import { filterInternalHeaders, isOpenRedirectShaped } from "./server/request-pipeline.js";
10
+ import { filterInternalHeaders, isOpenRedirectShaped, normalizeTrailingSlash } from "./server/request-pipeline.js";
11
+ import { mergeRewriteQuery } from "./utils/query.js";
11
12
  import { findMiddlewareFile, runMiddleware } from "./server/middleware.js";
12
13
  import { generateServerEntry } from "./entries/pages-server-entry.js";
13
14
  import { generateClientEntry } from "./entries/pages-client-entry.js";
14
15
  import { appRouteGraph, appRouter, invalidateAppRouteCache } from "./routing/app-router.js";
15
16
  import { findInstrumentationClientFile, findInstrumentationFile, runInstrumentation } from "./server/instrumentation.js";
16
17
  import { logRequest, now } from "./server/request-log.js";
18
+ import { normalizeDefaultLocalePathname, stripI18nLocaleForApiRoute } from "./server/pages-i18n.js";
17
19
  import { createSSRHandler } from "./server/dev-server.js";
18
20
  import { handleApiRoute } from "./server/api-handler.js";
21
+ import { isImageOptimizationPath } from "./server/image-optimization.js";
19
22
  import { installSocketErrorBackstop } from "./server/socket-error-backstop.js";
20
23
  import { scanMetadataFiles } from "./server/metadata-routes.js";
21
24
  import { shouldInvalidateAppRouteFile } from "./server/dev-route-files.js";
@@ -27,17 +30,22 @@ import { generateBrowserEntry } from "./entries/app-browser-entry.js";
27
30
  import { collectRouteClassificationManifest } from "./build/route-classification-manifest.js";
28
31
  import { planRouteClassificationInjection } from "./build/route-classification-injector.js";
29
32
  import { PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_BUILD } from "./shims/constants.js";
33
+ import { ASSET_PREFIX_URL_DIR, resolveAssetUrlPrefix, resolveAssetsDir } from "./utils/asset-prefix.js";
30
34
  import { RESOLVED_VIRTUAL_GOOGLE_FONTS, VIRTUAL_GOOGLE_FONTS, createGoogleFontsPlugin, createLocalFontsPlugin, generateGoogleFontsVirtualModule, parseStaticObjectLiteral } from "./plugins/fonts.js";
31
35
  import { findNextConfigPath, loadNextConfig, resolveNextConfig, resolveNextConfigInput } from "./config/next-config.js";
36
+ import { isNextDataPathname, parseNextDataPathname } from "./server/pages-data-route.js";
32
37
  import { precompressAssets } from "./build/precompress.js";
33
38
  import { manifestFileWithBase, manifestFilesWithBase } from "./utils/manifest-paths.js";
34
- import { ASSET_PREFIX_URL_DIR, resolveAssetUrlPrefix, resolveAssetsDir } from "./utils/asset-prefix.js";
35
39
  import { asyncHooksStubPlugin } from "./plugins/async-hooks-stub.js";
36
40
  import { clientReferenceDedupPlugin } from "./plugins/client-reference-dedup.js";
41
+ import { dataUrlCssPlugin } from "./plugins/css-data-url.js";
37
42
  import { createRscClientReferenceLoadersPlugin } from "./plugins/rsc-client-reference-loaders.js";
38
43
  import { createInstrumentationClientTransformPlugin } from "./plugins/instrumentation-client.js";
44
+ import { INSTRUMENTATION_CLIENT_EMPTY_MODULE, generateInstrumentationClientInjectModule } from "./client/instrumentation-client-inject.js";
45
+ import { createMiddlewareServerOnlyPlugin } from "./plugins/middleware-server-only.js";
39
46
  import { createOptimizeImportsPlugin } from "./plugins/optimize-imports.js";
40
47
  import { createOgInlineFetchAssetsPlugin, ogAssetsPlugin } from "./plugins/og-assets.js";
48
+ import { generateRouteTypes } from "./typegen.js";
41
49
  import { SSR_EXTERNAL_REACT_ENTRIES, VINEXT_OPTIMIZE_DEPS_EXCLUDE, mergeOptimizeDepsExclude } from "./plugins/rsc-client-shim-excludes.js";
42
50
  import { createServerExternalsManifestPlugin } from "./plugins/server-externals-manifest.js";
43
51
  import { computeLazyChunks } from "./utils/lazy-chunks.js";
@@ -76,12 +84,24 @@ function resolveOptionalDependency(projectRoot, specifier) {
76
84
  return null;
77
85
  }
78
86
  function resolveShimModulePath(shimsDir, moduleName) {
79
- for (const ext of [".ts", ".js"]) {
87
+ for (const ext of [
88
+ ".ts",
89
+ ".tsx",
90
+ ".js"
91
+ ]) {
80
92
  const candidate = path.join(shimsDir, `${moduleName}${ext}`);
81
93
  if (fs.existsSync(candidate)) return candidate;
82
94
  }
83
95
  return path.join(shimsDir, `${moduleName}.js`);
84
96
  }
97
+ function isVercelOgImport(id) {
98
+ return id === "@vercel/og" || id === "@vercel/og.js";
99
+ }
100
+ function isVinextOgShimImporter(importer) {
101
+ if (!importer) return false;
102
+ const normalizedImporter = (importer.startsWith("\0") ? importer.slice(1) : importer).split("?")[0].replace(/\\/g, "/");
103
+ return normalizedImporter.endsWith("/shims/og.tsx") || normalizedImporter.endsWith("/shims/og.js") || normalizedImporter.endsWith("/dist/shims/og.js");
104
+ }
85
105
  function toRelativeFileEntry(root, absPath) {
86
106
  return path.relative(root, absPath).split(path.sep).join("/");
87
107
  }
@@ -237,6 +257,9 @@ const RESOLVED_APP_SSR_ENTRY = "\0" + VIRTUAL_APP_SSR_ENTRY;
237
257
  const VIRTUAL_APP_BROWSER_ENTRY = "virtual:vinext-app-browser-entry";
238
258
  const RESOLVED_APP_BROWSER_ENTRY = "\0" + VIRTUAL_APP_BROWSER_ENTRY;
239
259
  const RESOLVED_ROOT_PARAMS = "\0virtual:vinext-root-params";
260
+ /** Virtual module for composed instrumentation-client bootstrap. */
261
+ const VIRTUAL_INSTRUMENTATION_CLIENT = "private-next-instrumentation-client";
262
+ const RESOLVED_INSTRUMENTATION_CLIENT = `\0${VIRTUAL_INSTRUMENTATION_CLIENT}.mjs`;
240
263
  /** Image file extensions handled by the vinext:image-imports plugin.
241
264
  * Shared between the Rolldown hook filter and the transform handler regex. */
242
265
  const IMAGE_EXTS = "png|jpe?g|gif|webp|avif|svg|ico|bmp|tiff?";
@@ -335,10 +358,12 @@ function vinext(options = {}) {
335
358
  let middlewarePath = null;
336
359
  let instrumentationPath = null;
337
360
  let instrumentationClientPath = null;
361
+ let clientInjectModule = null;
338
362
  let hasCloudflarePlugin = false;
339
363
  let warnedInlineNextConfigOverride = false;
340
364
  let hasNitroPlugin = false;
341
365
  let rscCompatibilityId;
366
+ const draftModeSecret = randomUUID();
342
367
  let rscClassificationManifest = null;
343
368
  const shimsDir = path.resolve(__dirname, "shims");
344
369
  const canonicalize = (p) => tryRealpathSync(p) ?? p;
@@ -366,6 +391,14 @@ function vinext(options = {}) {
366
391
  async function generateClientEntry$1() {
367
392
  return generateClientEntry(pagesDir, nextConfig, fileMatcher);
368
393
  }
394
+ async function writeRouteTypes() {
395
+ if (!hasAppDir) return;
396
+ await generateRouteTypes({
397
+ root,
398
+ appDir,
399
+ pageExtensions: nextConfig.pageExtensions
400
+ });
401
+ }
369
402
  const autoRsc = options.rsc !== false;
370
403
  const earlyBaseDir = options.appDir ?? process.cwd();
371
404
  const earlyAppDirExists = !options.disableAppRouter && (fs.existsSync(path.join(earlyBaseDir, "app")) || fs.existsSync(path.join(earlyBaseDir, "src", "app")));
@@ -455,6 +488,12 @@ function vinext(options = {}) {
455
488
  };
456
489
  }
457
490
  }] : [],
491
+ createMiddlewareServerOnlyPlugin({
492
+ getMiddlewarePath: () => middlewarePath,
493
+ getCanonicalMiddlewarePath: () => middlewarePath ? tryRealpathSync(middlewarePath) ?? middlewarePath : null,
494
+ serverOnlyShimPath: resolveShimModulePath(shimsDir, "server-only")
495
+ }),
496
+ dataUrlCssPlugin(),
458
497
  {
459
498
  name: "vinext:config",
460
499
  enforce: "pre",
@@ -504,6 +543,9 @@ function vinext(options = {}) {
504
543
  instrumentationPath = findInstrumentationFile(root, fileMatcher);
505
544
  instrumentationClientPath = findInstrumentationClientFile(root, fileMatcher);
506
545
  middlewarePath = findMiddlewareFile(root, fileMatcher);
546
+ const instrumentationClientInjects = nextConfig.instrumentationClientInject.map((spec) => spec.startsWith("./") || spec.startsWith("../") ? path.resolve(root, spec) : spec);
547
+ clientInjectModule = instrumentationClientInjects.length ? generateInstrumentationClientInjectModule(instrumentationClientInjects, instrumentationClientPath, INSTRUMENTATION_CLIENT_EMPTY_MODULE) : null;
548
+ if (env?.command === "build") await writeRouteTypes();
507
549
  const defines = getNextPublicEnvDefines();
508
550
  if (!config.define || typeof config.define !== "object" || !("process.env.NODE_ENV" in config.define)) defines["process.env.NODE_ENV"] = JSON.stringify(resolvedNodeEnv);
509
551
  for (const [key, value] of Object.entries(nextConfig.env)) {
@@ -540,11 +582,11 @@ function vinext(options = {}) {
540
582
  }
541
583
  defines["process.env.__VINEXT_IMAGE_DANGEROUSLY_ALLOW_SVG"] = JSON.stringify(String(nextConfig.images?.dangerouslyAllowSVG ?? false));
542
584
  defines["process.env.__VINEXT_IMAGE_DANGEROUSLY_ALLOW_LOCAL_IP"] = JSON.stringify(String(nextConfig.images?.dangerouslyAllowLocalIP ?? false));
543
- defines["process.env.__VINEXT_DRAFT_SECRET"] = JSON.stringify(crypto.randomUUID());
544
585
  defines["process.env.__VINEXT_BUILD_ID"] = JSON.stringify(nextConfig.buildId);
545
586
  defines["process.env.__VINEXT_RSC_COMPATIBILITY_ID"] = JSON.stringify(rscCompatibilityId);
546
587
  defines["process.env.__VINEXT_DEPLOYMENT_ID"] = JSON.stringify(nextConfig.deploymentId ?? "");
547
588
  defines["process.env.__NEXT_VERSION"] = JSON.stringify(getVinextVersion());
589
+ defines["process.env.__NEXT_APP_SHELLS"] = JSON.stringify(false);
548
590
  nextShimMap = Object.fromEntries(Object.entries({
549
591
  "next/link": path.join(shimsDir, "link"),
550
592
  "next/head": path.join(shimsDir, "head"),
@@ -600,7 +642,7 @@ function vinext(options = {}) {
600
642
  "vinext/instrumentation": path.resolve(__dirname, "server", "instrumentation"),
601
643
  "vinext/instrumentation-client": path.resolve(__dirname, "client", "instrumentation-client"),
602
644
  "vinext/html": path.resolve(__dirname, "server", "html"),
603
- "private-next-instrumentation-client": instrumentationClientPath ?? path.resolve(__dirname, "client", "empty-module")
645
+ ...clientInjectModule === null ? { "private-next-instrumentation-client": instrumentationClientPath ?? INSTRUMENTATION_CLIENT_EMPTY_MODULE } : {}
604
646
  }).flatMap(([k, v]) => k.startsWith("next/") ? [[k, v], [`${k}.js`, v]] : [[k, v]]));
605
647
  const pluginsFlat = [];
606
648
  function flattenPlugins(arr) {
@@ -627,7 +669,7 @@ function vinext(options = {}) {
627
669
  "firefox114",
628
670
  "safari15"
629
671
  ],
630
- ...nextConfig.assetPrefix ? { assetsDir: resolveAssetsDir(nextConfig.assetPrefix) } : {},
672
+ assetsDir: resolveAssetsDir(nextConfig.assetPrefix ?? ""),
631
673
  ...withBuildBundlerOptions(viteMajorVersion, {
632
674
  onwarn: (() => {
633
675
  const userOnwarn = getBuildBundlerOptions(config.build)?.onwarn;
@@ -841,9 +883,10 @@ function vinext(options = {}) {
841
883
  }));
842
884
  },
843
885
  resolveId: {
844
- filter: { id: /(?:next\/|virtual:vinext-)/ },
845
- handler(id) {
886
+ filter: { id: /(?:next\/|virtual:vinext-|^@vercel\/og(?:\.js)?$)/ },
887
+ handler(id, importer) {
846
888
  const cleanId = id.startsWith("\0") ? id.slice(1) : id;
889
+ if (isVercelOgImport(cleanId) && !isVinextOgShimImporter(importer)) return resolveShimModulePath(_shimsDir, "og");
847
890
  if (cleanId === VIRTUAL_SERVER_ENTRY) return RESOLVED_SERVER_ENTRY;
848
891
  if (cleanId === VIRTUAL_CLIENT_ENTRY) return RESOLVED_CLIENT_ENTRY;
849
892
  if (cleanId.endsWith("/" + VIRTUAL_SERVER_ENTRY) || cleanId.endsWith("\\" + VIRTUAL_SERVER_ENTRY)) return RESOLVED_SERVER_ENTRY;
@@ -880,12 +923,14 @@ function vinext(options = {}) {
880
923
  allowedOrigins: nextConfig?.serverActionsAllowedOrigins,
881
924
  allowedDevOrigins: nextConfig?.allowedDevOrigins,
882
925
  bodySizeLimit: nextConfig?.serverActionsBodySizeLimit,
926
+ htmlLimitedBots: nextConfig?.htmlLimitedBots,
883
927
  assetPrefix: nextConfig?.assetPrefix,
884
928
  expireTime: nextConfig?.expireTime,
885
929
  i18n: nextConfig?.i18n,
886
930
  hasPagesDir,
887
931
  publicFiles: scanPublicFileRoutes(root),
888
- globalNotFoundPath
932
+ globalNotFoundPath,
933
+ draftModeSecret
889
934
  }, instrumentationPath);
890
935
  }
891
936
  if (id === RESOLVED_ROOT_PARAMS) return generateRootParamsModule((hasAppDir ? await appRouter(appDir, nextConfig?.pageExtensions, fileMatcher) : []).flatMap((route) => route.rootParamNames ?? []));
@@ -936,6 +981,18 @@ function vinext(options = {}) {
936
981
  },
937
982
  asyncHooksStubPlugin,
938
983
  createInstrumentationClientTransformPlugin(() => instrumentationClientPath),
984
+ {
985
+ name: "vinext:instrumentation-client-inject",
986
+ enforce: "pre",
987
+ resolveId(id) {
988
+ if (id !== VIRTUAL_INSTRUMENTATION_CLIENT) return null;
989
+ return clientInjectModule !== null ? RESOLVED_INSTRUMENTATION_CLIENT : null;
990
+ },
991
+ load(id) {
992
+ if (id !== RESOLVED_INSTRUMENTATION_CLIENT) return null;
993
+ return clientInjectModule;
994
+ }
995
+ },
939
996
  ...options.experimental?.clientReferenceDedup ? [clientReferenceDedupPlugin()] : [],
940
997
  {
941
998
  name: "vinext:mdx",
@@ -1030,16 +1087,46 @@ function vinext(options = {}) {
1030
1087
  invalidateRscEntryModule();
1031
1088
  invalidateRootParamsModule();
1032
1089
  }
1090
+ let appRouteTypeGeneration = null;
1091
+ let appRouteTypeGenerationPending = false;
1092
+ function warnRouteTypeGenerationFailure(error) {
1093
+ server.config.logger.warn(`[vinext] Failed to regenerate route types: ${error instanceof Error ? error.message : String(error)}`);
1094
+ }
1095
+ async function drainAppRouteTypeGeneration() {
1096
+ while (appRouteTypeGenerationPending) {
1097
+ appRouteTypeGenerationPending = false;
1098
+ try {
1099
+ await writeRouteTypes();
1100
+ } catch (error) {
1101
+ warnRouteTypeGenerationFailure(error);
1102
+ }
1103
+ }
1104
+ }
1105
+ function regenerateAppRouteTypes() {
1106
+ appRouteTypeGenerationPending = true;
1107
+ if (appRouteTypeGeneration) return;
1108
+ appRouteTypeGeneration = drainAppRouteTypeGeneration().finally(() => {
1109
+ appRouteTypeGeneration = null;
1110
+ if (appRouteTypeGenerationPending) regenerateAppRouteTypes();
1111
+ });
1112
+ }
1113
+ regenerateAppRouteTypes();
1033
1114
  server.httpServer?.on("connection", (socket) => {
1034
1115
  socket.on("error", () => {});
1035
1116
  });
1036
1117
  server.watcher.on("add", (filePath) => {
1037
1118
  if (hasPagesDir && filePath.startsWith(pagesDir) && pageExtensions.test(filePath)) invalidateRouteCache(pagesDir);
1038
- if (hasAppDir && shouldInvalidateAppRouteFile(appDir, filePath, fileMatcher)) invalidateAppRoutingModules();
1119
+ if (hasAppDir && shouldInvalidateAppRouteFile(appDir, filePath, fileMatcher)) {
1120
+ invalidateAppRoutingModules();
1121
+ regenerateAppRouteTypes();
1122
+ }
1039
1123
  });
1040
1124
  server.watcher.on("unlink", (filePath) => {
1041
1125
  if (hasPagesDir && filePath.startsWith(pagesDir) && pageExtensions.test(filePath)) invalidateRouteCache(pagesDir);
1042
- if (hasAppDir && shouldInvalidateAppRouteFile(appDir, filePath, fileMatcher)) invalidateAppRoutingModules();
1126
+ if (hasAppDir && shouldInvalidateAppRouteFile(appDir, filePath, fileMatcher)) {
1127
+ invalidateAppRoutingModules();
1128
+ regenerateAppRouteTypes();
1129
+ }
1043
1130
  });
1044
1131
  server.middlewares.use((req, res, next) => {
1045
1132
  const blockReason = validateDevRequest({
@@ -1130,7 +1217,7 @@ function vinext(options = {}) {
1130
1217
  res.end("Forbidden");
1131
1218
  return;
1132
1219
  }
1133
- if (url.split("?")[0] === "/_vinext/image") {
1220
+ if (isImageOptimizationPath(url.split("?")[0])) {
1134
1221
  const rawImgUrl = new URLSearchParams(url.split("?")[1] ?? "").get("url");
1135
1222
  const imgUrl = rawImgUrl?.replaceAll("\\", "/") ?? null;
1136
1223
  if (!imgUrl || !imgUrl.startsWith("/") || imgUrl.startsWith("//") || imgUrl.startsWith("/@") || imgUrl.startsWith("/__vite") || imgUrl.startsWith("/node_modules")) {
@@ -1153,7 +1240,6 @@ function vinext(options = {}) {
1153
1240
  if (rawPathname.endsWith("/index.html")) url = url.replace("/index.html", "/");
1154
1241
  else if (rawPathname.endsWith(".html")) url = url.replace(/\.html(?=\?|$)/, "");
1155
1242
  let pathname = url.split("?")[0];
1156
- if (pathname.includes(".") && !pathname.endsWith(".html")) return next();
1157
1243
  if (isOpenRedirectShaped(pathname)) {
1158
1244
  res.writeHead(404);
1159
1245
  res.end("This page could not be found");
@@ -1173,30 +1259,46 @@ function vinext(options = {}) {
1173
1259
  url = stripped + (url.includes("?") ? url.slice(url.indexOf("?")) : "");
1174
1260
  pathname = stripped;
1175
1261
  }
1176
- if (nextConfig && pathname !== "/" && pathname !== "/api" && !pathname.startsWith("/api/")) {
1177
- const hasTrailing = pathname.endsWith("/");
1178
- if (nextConfig.trailingSlash && !hasTrailing) {
1179
- const qs = url.includes("?") ? url.slice(url.indexOf("?")) : "";
1180
- const dest = bp + pathname + "/" + qs;
1181
- res.writeHead(308, { Location: dest });
1262
+ if (nextConfig) {
1263
+ const qs = url.includes("?") ? url.slice(url.indexOf("?")) : "";
1264
+ const trailingSlashRedirect = normalizeTrailingSlash(pathname, bp, nextConfig.trailingSlash, qs);
1265
+ if (trailingSlashRedirect) {
1266
+ const location = trailingSlashRedirect.headers.get("Location");
1267
+ res.writeHead(trailingSlashRedirect.status, location ? { Location: location } : void 0);
1182
1268
  res.end();
1183
1269
  return;
1184
- } else if (!nextConfig.trailingSlash && hasTrailing) {
1270
+ }
1271
+ }
1272
+ let isDataReq = false;
1273
+ if (isNextDataPathname(pathname)) {
1274
+ const devBuildId = nextConfig?.buildId ?? process.env.__VINEXT_BUILD_ID ?? "development";
1275
+ const dataMatch = parseNextDataPathname(pathname, devBuildId);
1276
+ if (dataMatch) {
1277
+ isDataReq = true;
1185
1278
  const qs = url.includes("?") ? url.slice(url.indexOf("?")) : "";
1186
- const dest = bp + removeTrailingSlash(pathname) + qs;
1187
- res.writeHead(308, { Location: dest });
1188
- res.end();
1279
+ url = dataMatch.pagePathname + qs;
1280
+ pathname = dataMatch.pagePathname;
1281
+ req.url = url;
1282
+ } else {
1283
+ res.writeHead(404, { "Content-Type": "application/json" });
1284
+ res.end("{}");
1189
1285
  return;
1190
1286
  }
1191
1287
  }
1288
+ if (pathname.includes(".") && !pathname.endsWith(".html")) return next();
1192
1289
  if (hasCloudflarePlugin) return next();
1193
- const nodeRequestHeaders = filterInternalHeaders(new Headers(Object.fromEntries(Object.entries(req.headers).filter(([, v]) => v !== void 0).map(([k, v]) => [k, Array.isArray(v) ? v.join(", ") : String(v)]))));
1290
+ const rawHeaders = new Headers(Object.fromEntries(Object.entries(req.headers).filter(([, v]) => v !== void 0).map(([k, v]) => [k, Array.isArray(v) ? v.join(", ") : String(v)])));
1291
+ const isDataRequest = rawHeaders.get("x-nextjs-data") === "1";
1292
+ const nodeRequestHeaders = filterInternalHeaders(rawHeaders);
1194
1293
  for (const header of INTERNAL_HEADERS) delete req.headers[header];
1294
+ for (const header of VINEXT_INTERNAL_HEADERS) delete req.headers[header];
1195
1295
  const requestOrigin = `http://${req.headers.host || "localhost"}`;
1196
1296
  const preMiddlewareReqUrl = new URL(url, requestOrigin);
1197
1297
  const preMiddlewareReqCtx = requestContextFromRequest(new Request(preMiddlewareReqUrl, { headers: nodeRequestHeaders }));
1298
+ const matchPathname = nextConfig?.i18n ? normalizeDefaultLocalePathname(pathname, nextConfig.i18n, { hostname: preMiddlewareReqUrl.hostname }) : pathname;
1299
+ const matchResolvedPathname = (p) => nextConfig?.i18n ? normalizeDefaultLocalePathname(p, nextConfig.i18n, { hostname: preMiddlewareReqUrl.hostname }) : p;
1198
1300
  if (nextConfig?.redirects.length) {
1199
- if (applyRedirects(pathname, res, nextConfig.redirects, preMiddlewareReqCtx, nextConfig.basePath ?? "")) return;
1301
+ if (applyRedirects(matchPathname, res, nextConfig.redirects, preMiddlewareReqCtx, nextConfig.basePath ?? "")) return;
1200
1302
  }
1201
1303
  const applyRequestHeadersToNodeRequest = (nextRequestHeaders) => {
1202
1304
  for (const key of Object.keys(req.headers)) delete req.headers[key];
@@ -1218,7 +1320,7 @@ function vinext(options = {}) {
1218
1320
  method: req.method,
1219
1321
  headers: nodeRequestHeaders
1220
1322
  });
1221
- const result = await runMiddleware(getPagesRunner(), middlewarePath, middlewareRequest, nextConfig?.i18n, nextConfig?.basePath);
1323
+ const result = await runMiddleware(getPagesRunner(), middlewarePath, middlewareRequest, nextConfig?.i18n, nextConfig?.basePath, nextConfig?.trailingSlash, isDataRequest);
1222
1324
  if (result.waitUntilPromises?.length) Promise.allSettled(result.waitUntilPromises);
1223
1325
  if (!result.continue) {
1224
1326
  if (result.redirectUrl) {
@@ -1272,23 +1374,27 @@ function vinext(options = {}) {
1272
1374
  }
1273
1375
  const reqUrl = new URL(url, requestOrigin);
1274
1376
  const reqCtx = requestContextFromRequest(new Request(reqUrl, { headers: middlewareRequestHeaders ?? nodeRequestHeaders }));
1275
- if (nextConfig?.headers.length) applyHeaders(pathname, res, nextConfig.headers, preMiddlewareReqCtx);
1377
+ if (nextConfig?.headers.length) applyHeaders(matchPathname, res, nextConfig.headers, preMiddlewareReqCtx, bp);
1276
1378
  let resolvedUrl = url;
1277
- if (nextConfig?.rewrites.beforeFiles.length) resolvedUrl = applyRewrites(pathname, nextConfig.rewrites.beforeFiles, reqCtx) ?? url;
1379
+ if (nextConfig?.rewrites.beforeFiles.length) {
1380
+ const rewritten = applyRewrites(matchPathname, nextConfig.rewrites.beforeFiles, reqCtx, bp);
1381
+ if (rewritten) resolvedUrl = mergeRewriteQuery(url, rewritten);
1382
+ }
1278
1383
  if (isExternalUrl(resolvedUrl)) {
1279
1384
  applyDeferredMwHeaders();
1280
1385
  applyMwRequestHeadersForExternalProxy();
1281
1386
  await proxyExternalRewriteNode(req, res, resolvedUrl);
1282
1387
  return;
1283
1388
  }
1284
- const resolvedPathname = resolvedUrl.split("?")[0];
1389
+ const apiLookupUrl = stripI18nLocaleForApiRoute(resolvedUrl, nextConfig?.i18n);
1390
+ const resolvedPathname = apiLookupUrl.split("?")[0];
1285
1391
  if (resolvedPathname.startsWith("/api/") || resolvedPathname === "/api") {
1286
1392
  const apiRoutes = await apiRouter(pagesDir, nextConfig?.pageExtensions, fileMatcher);
1287
- if (matchRoute(resolvedUrl, apiRoutes)) {
1393
+ if (matchRoute(apiLookupUrl, apiRoutes)) {
1288
1394
  applyDeferredMwHeaders();
1289
1395
  if (middlewareRequestHeaders) applyRequestHeadersToNodeRequest(middlewareRequestHeaders);
1290
1396
  }
1291
- if (await handleApiRoute(getPagesRunner(), req, res, resolvedUrl, apiRoutes)) return;
1397
+ if (await handleApiRoute(getPagesRunner(), req, res, apiLookupUrl, apiRoutes)) return;
1292
1398
  if (hasAppDir) return next();
1293
1399
  res.statusCode = 404;
1294
1400
  res.end("404 - API route not found");
@@ -1297,9 +1403,9 @@ function vinext(options = {}) {
1297
1403
  const routes = await pagesRouter(pagesDir, nextConfig?.pageExtensions, fileMatcher);
1298
1404
  let match = matchRoute(resolvedUrl.split("?")[0], routes);
1299
1405
  if ((!match || match.route.isDynamic) && nextConfig?.rewrites.afterFiles.length) {
1300
- const afterRewrite = applyRewrites(resolvedUrl.split("?")[0], nextConfig.rewrites.afterFiles, reqCtx);
1406
+ const afterRewrite = applyRewrites(matchResolvedPathname(resolvedUrl.split("?")[0]), nextConfig.rewrites.afterFiles, reqCtx, bp);
1301
1407
  if (afterRewrite) {
1302
- resolvedUrl = afterRewrite;
1408
+ resolvedUrl = mergeRewriteQuery(resolvedUrl, afterRewrite);
1303
1409
  match = matchRoute(resolvedUrl.split("?")[0], routes);
1304
1410
  }
1305
1411
  }
@@ -1309,16 +1415,16 @@ function vinext(options = {}) {
1309
1415
  await proxyExternalRewriteNode(req, res, resolvedUrl);
1310
1416
  return;
1311
1417
  }
1312
- const handler = createSSRHandler(server, getPagesRunner(), routes, pagesDir, nextConfig?.i18n, fileMatcher, nextConfig?.basePath ?? "", nextConfig?.trailingSlash ?? false);
1418
+ const handler = createSSRHandler(server, getPagesRunner(), routes, pagesDir, nextConfig?.i18n, fileMatcher, nextConfig?.basePath ?? "", nextConfig?.trailingSlash ?? false, middlewarePath !== null);
1313
1419
  const mwStatus = req.__vinextMiddlewareStatus;
1314
1420
  if (match) {
1315
1421
  applyDeferredMwHeaders();
1316
1422
  if (middlewareRequestHeaders) applyRequestHeadersToNodeRequest(middlewareRequestHeaders);
1317
- await handler(req, res, resolvedUrl, mwStatus);
1423
+ await handler(req, res, resolvedUrl, mwStatus, isDataReq);
1318
1424
  return;
1319
1425
  }
1320
1426
  if (nextConfig?.rewrites.fallback.length) {
1321
- const fallbackRewrite = applyRewrites(resolvedUrl.split("?")[0], nextConfig.rewrites.fallback, reqCtx);
1427
+ const fallbackRewrite = applyRewrites(matchResolvedPathname(resolvedUrl.split("?")[0]), nextConfig.rewrites.fallback, reqCtx, bp);
1322
1428
  if (fallbackRewrite) {
1323
1429
  if (isExternalUrl(fallbackRewrite)) {
1324
1430
  applyDeferredMwHeaders();
@@ -1329,12 +1435,12 @@ function vinext(options = {}) {
1329
1435
  if (!matchRoute(fallbackRewrite.split("?")[0], routes) && hasAppDir) return next();
1330
1436
  applyDeferredMwHeaders();
1331
1437
  if (middlewareRequestHeaders) applyRequestHeadersToNodeRequest(middlewareRequestHeaders);
1332
- await handler(req, res, fallbackRewrite, mwStatus);
1438
+ await handler(req, res, fallbackRewrite, mwStatus, isDataReq);
1333
1439
  return;
1334
1440
  }
1335
1441
  }
1336
1442
  if (hasAppDir) return next();
1337
- await handler(req, res, resolvedUrl, mwStatus);
1443
+ await handler(req, res, resolvedUrl, mwStatus, isDataReq);
1338
1444
  } catch (e) {
1339
1445
  next(e);
1340
1446
  }
@@ -1792,7 +1898,7 @@ function vinext(options = {}) {
1792
1898
  if (!fs.existsSync(headersPath)) {
1793
1899
  const headersContent = [
1794
1900
  "# Cache content-hashed assets immutably (generated by vinext)",
1795
- `/${envConfig.build?.assetsDir ?? "assets"}/*`,
1901
+ `/${envConfig.build?.assetsDir ?? "_next/static"}/*`,
1796
1902
  " Cache-Control: public, max-age=31536000, immutable",
1797
1903
  ""
1798
1904
  ].join("\n");
@@ -1872,7 +1978,10 @@ function getNextPublicEnvDefines() {
1872
1978
  * Returns true if a redirect was applied.
1873
1979
  */
1874
1980
  function applyRedirects(pathname, res, redirects, ctx, basePath = "") {
1875
- const result = matchRedirect(pathname, redirects, ctx);
1981
+ const result = matchRedirect(pathname, redirects, ctx, {
1982
+ basePath,
1983
+ hadBasePath: true
1984
+ });
1876
1985
  if (result) {
1877
1986
  const dest = sanitizeDestination(basePath && !isExternalUrl(result.destination) && !hasBasePath(result.destination, basePath) ? basePath + result.destination : result.destination);
1878
1987
  res.writeHead(result.permanent ? 308 : 307, { Location: dest });
@@ -1919,8 +2028,11 @@ async function proxyExternalRewriteNode(req, res, externalUrl) {
1919
2028
  * Apply rewrite rules from next.config.js.
1920
2029
  * Returns the rewritten URL or null if no rewrite matched.
1921
2030
  */
1922
- function applyRewrites(pathname, rewrites, ctx) {
1923
- const dest = matchRewrite(pathname, rewrites, ctx);
2031
+ function applyRewrites(pathname, rewrites, ctx, basePath = "") {
2032
+ const dest = matchRewrite(pathname, rewrites, ctx, {
2033
+ basePath,
2034
+ hadBasePath: true
2035
+ });
1924
2036
  if (dest) return sanitizeDestination(dest);
1925
2037
  return null;
1926
2038
  }
@@ -1929,8 +2041,11 @@ function applyRewrites(pathname, rewrites, ctx) {
1929
2041
  * Middleware headers take precedence: if a header key was already set on the
1930
2042
  * response (by middleware), the config value is skipped for that key.
1931
2043
  */
1932
- function applyHeaders(pathname, res, headers, ctx) {
1933
- const matched = matchHeaders(pathname, headers, ctx);
2044
+ function applyHeaders(pathname, res, headers, ctx, basePath = "") {
2045
+ const matched = matchHeaders(pathname, headers, ctx, {
2046
+ basePath,
2047
+ hadBasePath: true
2048
+ });
1934
2049
  for (const header of matched) {
1935
2050
  const lk = header.key.toLowerCase();
1936
2051
  if (lk === "set-cookie") {