vinext 1.2.1 → 1.3.1

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 (509) hide show
  1. package/README.md +12 -9
  2. package/dist/_virtual/_rolldown/runtime.js +1 -1
  3. package/dist/build/action-owner-manifest.d.ts +3 -2
  4. package/dist/build/action-owner-manifest.js +18 -2
  5. package/dist/build/app-page-static-eligibility.d.ts +17 -1
  6. package/dist/build/app-page-static-eligibility.js +80 -13
  7. package/dist/build/clean-output.d.ts +2 -1
  8. package/dist/build/client-build-config.d.ts +77 -6
  9. package/dist/build/client-build-config.js +176 -12
  10. package/dist/build/client-reference-async.d.ts +48 -0
  11. package/dist/build/client-reference-async.js +123 -0
  12. package/dist/build/client-reference-chunks.d.ts +32 -0
  13. package/dist/build/client-reference-chunks.js +111 -0
  14. package/dist/build/client-reference-groups.d.ts +171 -0
  15. package/dist/build/client-reference-groups.js +572 -0
  16. package/dist/build/css-url-assets.d.ts +2 -1
  17. package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
  18. package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
  19. package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
  20. package/dist/build/google-fonts/font-metadata.d.ts +2 -1
  21. package/dist/build/google-fonts/validate.d.ts +2 -1
  22. package/dist/build/inline-css.d.ts +2 -1
  23. package/dist/build/layout-classification.d.ts +2 -1
  24. package/dist/build/module-dependency-cache.d.ts +33 -1
  25. package/dist/build/module-dependency-cache.js +51 -1
  26. package/dist/build/next-client-runtime-manifests.d.ts +12 -2
  27. package/dist/build/next-client-runtime-manifests.js +19 -4
  28. package/dist/build/nitro-public-files.d.ts +24 -0
  29. package/dist/build/nitro-public-files.js +60 -0
  30. package/dist/build/pages-client-assets-module.js +1 -1
  31. package/dist/build/precompress.d.ts +2 -1
  32. package/dist/build/precompress.js +1 -1
  33. package/dist/build/prerender-paths.d.ts +2 -1
  34. package/dist/build/prerender-paths.js +5 -2
  35. package/dist/build/prerender-phase.d.ts +2 -1
  36. package/dist/build/prerender-server-pool.js +1 -1
  37. package/dist/build/prerender.d.ts +3 -2
  38. package/dist/build/prerender.js +5 -4
  39. package/dist/build/report.d.ts +2 -1
  40. package/dist/build/route-classification-injector.d.ts +2 -1
  41. package/dist/build/route-classification-manifest.d.ts +2 -1
  42. package/dist/build/run-prerender.d.ts +2 -1
  43. package/dist/build/server-actions-encryption-key.d.ts +24 -0
  44. package/dist/build/server-actions-encryption-key.js +101 -0
  45. package/dist/build/ssr-manifest.d.ts +3 -0
  46. package/dist/build/ssr-manifest.js +34 -2
  47. package/dist/build/standalone.d.ts +2 -1
  48. package/dist/cache/cache-adapters-virtual.d.ts +2 -1
  49. package/dist/cache.js +1 -2
  50. package/dist/check.d.ts +2 -1
  51. package/dist/check.js +4 -0
  52. package/dist/cli-args.d.ts +2 -1
  53. package/dist/cli.js +2 -0
  54. package/dist/client/client-redirect-matcher.js +2 -1
  55. package/dist/client/client-redirects.d.ts +4 -3
  56. package/dist/client/client-redirects.js +2 -1
  57. package/dist/client/client-rewrite-params.d.ts +9 -0
  58. package/dist/client/client-rewrite-params.js +20 -0
  59. package/dist/client/client-rewrites.d.ts +2 -1
  60. package/dist/client/dev-error-overlay-store.d.ts +2 -1
  61. package/dist/client/dev-error-overlay.js +2 -1
  62. package/dist/client/index.js +1 -2
  63. package/dist/client/instrumentation-client-state.js +5 -5
  64. package/dist/client/navigation-runtime.d.ts +28 -3
  65. package/dist/client/navigation-runtime.js +42 -11
  66. package/dist/client/pages-router-link-navigation.d.ts +2 -1
  67. package/dist/client/vinext-next-data.d.ts +25 -2
  68. package/dist/client/window-next.d.ts +2 -1
  69. package/dist/config/config-matchers.d.ts +27 -41
  70. package/dist/config/config-matchers.js +293 -270
  71. package/dist/config/config-source.d.ts +34 -0
  72. package/dist/config/config-source.js +141 -0
  73. package/dist/config/dotenv.d.ts +2 -1
  74. package/dist/config/header-params.d.ts +29 -0
  75. package/dist/config/header-params.js +106 -0
  76. package/dist/config/next-config.d.ts +20 -6
  77. package/dist/config/next-config.js +149 -11
  78. package/dist/config/tsconfig-paths.d.ts +2 -1
  79. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
  80. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
  81. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
  82. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
  83. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
  84. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
  85. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
  86. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
  87. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
  88. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
  89. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
  90. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
  91. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
  92. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
  93. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
  94. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
  95. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
  96. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
  97. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
  98. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
  99. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
  100. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
  101. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
  102. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
  103. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
  104. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
  105. package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
  106. package/dist/entries/app-browser-entry.d.ts +34 -6
  107. package/dist/entries/app-browser-entry.js +103 -40
  108. package/dist/entries/app-rsc-entry.d.ts +4 -1
  109. package/dist/entries/app-rsc-entry.js +131 -66
  110. package/dist/entries/app-rsc-manifest.d.ts +12 -1
  111. package/dist/entries/app-rsc-manifest.js +73 -1
  112. package/dist/entries/app-ssr-entry.d.ts +4 -1
  113. package/dist/entries/app-ssr-entry.js +9 -2
  114. package/dist/entries/pages-client-entry.d.ts +1 -0
  115. package/dist/entries/pages-client-entry.js +6 -6
  116. package/dist/entries/pages-entry-helpers.js +1 -2
  117. package/dist/entries/pages-server-entry.d.ts +2 -1
  118. package/dist/entries/pages-server-entry.js +18 -15
  119. package/dist/entries/runtime-entry-module.d.ts +1 -0
  120. package/dist/entries/runtime-entry-module.js +4 -1
  121. package/dist/image/image-adapters-virtual.d.ts +2 -1
  122. package/dist/index.d.ts +11 -0
  123. package/dist/index.js +340 -116
  124. package/dist/init.js +17 -0
  125. package/dist/plugins/client-compile-hints.d.ts +30 -0
  126. package/dist/plugins/client-compile-hints.js +88 -0
  127. package/dist/plugins/client-reference-dedup.d.ts +2 -1
  128. package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
  129. package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
  130. package/dist/plugins/dynamic-preload-metadata.js +1 -1
  131. package/dist/plugins/environment.d.ts +2 -1
  132. package/dist/plugins/fonts.js +9 -12
  133. package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
  134. package/dist/plugins/import-meta-url.d.ts +2 -1
  135. package/dist/plugins/og-assets.d.ts +2 -1
  136. package/dist/plugins/og-assets.js +2 -3
  137. package/dist/plugins/optimize-imports.d.ts +27 -3
  138. package/dist/plugins/optimize-imports.js +106 -20
  139. package/dist/plugins/pages-node-externals.d.ts +2 -1
  140. package/dist/plugins/remove-console.d.ts +2 -1
  141. package/dist/plugins/require-condition-resolution.d.ts +2 -1
  142. package/dist/plugins/rsc-client-reference-loaders.d.ts +53 -1
  143. package/dist/plugins/rsc-client-reference-loaders.js +447 -27
  144. package/dist/plugins/rsc-client-shim-excludes.js +2 -0
  145. package/dist/plugins/sass.d.ts +2 -1
  146. package/dist/plugins/strip-server-exports.d.ts +2 -1
  147. package/dist/plugins/styled-jsx.d.ts +2 -1
  148. package/dist/plugins/transform-result.d.ts +2 -1
  149. package/dist/plugins/typeof-window.d.ts +2 -1
  150. package/dist/plugins/use-cache-callable.d.ts +5 -0
  151. package/dist/plugins/use-cache-callable.js +30 -8
  152. package/dist/plugins/worker-image-imports.d.ts +1 -0
  153. package/dist/plugins/worker-image-imports.js +2 -2
  154. package/dist/plugins/worker-use-server.d.ts +2 -1
  155. package/dist/routing/app-route-graph.d.ts +41 -1
  156. package/dist/routing/app-route-graph.js +122 -50
  157. package/dist/routing/browser-route-manifest.d.ts +44 -0
  158. package/dist/routing/browser-route-manifest.js +195 -0
  159. package/dist/routing/hashed-route-patterns.d.ts +4 -0
  160. package/dist/routing/hashed-route-patterns.js +22 -0
  161. package/dist/routing/optimistic-route-trie.d.ts +28 -0
  162. package/dist/routing/optimistic-route-trie.js +102 -0
  163. package/dist/routing/route-matching.d.ts +2 -1
  164. package/dist/routing/route-pattern.d.ts +2 -1
  165. package/dist/routing/route-validation.d.ts +6 -1
  166. package/dist/routing/route-validation.js +26 -10
  167. package/dist/server/accept-encoding.d.ts +2 -1
  168. package/dist/server/app-action-forwarding.d.ts +10 -1
  169. package/dist/server/app-action-forwarding.js +15 -1
  170. package/dist/server/app-bfcache-identity.d.ts +2 -1
  171. package/dist/server/app-browser-action-result.d.ts +2 -1
  172. package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -1
  173. package/dist/server/app-browser-entry.js +175 -64
  174. package/dist/server/app-browser-error.d.ts +5 -2
  175. package/dist/server/app-browser-error.js +7 -2
  176. package/dist/server/app-browser-history-controller.d.ts +2 -1
  177. package/dist/server/app-browser-hydration.d.ts +2 -1
  178. package/dist/server/app-browser-interception-context.d.ts +4 -3
  179. package/dist/server/app-browser-mpa-navigation.d.ts +1 -0
  180. package/dist/server/app-browser-mpa-navigation.js +6 -5
  181. package/dist/server/app-browser-navigation-controller.d.ts +17 -6
  182. package/dist/server/app-browser-navigation-controller.js +103 -36
  183. package/dist/server/app-browser-popstate.d.ts +2 -1
  184. package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
  185. package/dist/server/app-browser-server-action-client.d.ts +2 -1
  186. package/dist/server/app-browser-state.d.ts +2 -2
  187. package/dist/server/app-browser-state.js +1 -1
  188. package/dist/server/app-browser-stream.d.ts +2 -1
  189. package/dist/server/app-browser-visible-commit.d.ts +6 -5
  190. package/dist/server/app-client-reference-manifest.d.ts +31 -0
  191. package/dist/server/app-client-reference-manifest.js +46 -0
  192. package/dist/server/app-client-reference-preloader.d.ts +45 -2
  193. package/dist/server/app-client-reference-preloader.js +48 -10
  194. package/dist/server/app-elements-wire.d.ts +2 -1
  195. package/dist/server/app-elements.d.ts +2 -0
  196. package/dist/server/app-elements.js +3 -1
  197. package/dist/server/app-fallback-renderer.d.ts +9 -2
  198. package/dist/server/app-fallback-renderer.js +6 -2
  199. package/dist/server/app-history-state.d.ts +2 -1
  200. package/dist/server/app-inline-css-client.d.ts +2 -1
  201. package/dist/server/app-layout-param-observation.d.ts +2 -1
  202. package/dist/server/app-metadata-tracing.d.ts +2 -1
  203. package/dist/server/app-middleware.d.ts +6 -0
  204. package/dist/server/app-middleware.js +8 -10
  205. package/dist/server/app-optimistic-routing.d.ts +26 -11
  206. package/dist/server/app-optimistic-routing.js +38 -96
  207. package/dist/server/app-page-boundary-render.d.ts +20 -2
  208. package/dist/server/app-page-boundary-render.js +229 -39
  209. package/dist/server/app-page-boundary.d.ts +34 -5
  210. package/dist/server/app-page-boundary.js +40 -7
  211. package/dist/server/app-page-cache-finalizer.d.ts +2 -1
  212. package/dist/server/app-page-cache-finalizer.js +1 -1
  213. package/dist/server/app-page-cache-render.d.ts +10 -2
  214. package/dist/server/app-page-cache-render.js +15 -2
  215. package/dist/server/app-page-cache.js +2 -2
  216. package/dist/server/app-page-dispatch.d.ts +34 -1
  217. package/dist/server/app-page-dispatch.js +165 -34
  218. package/dist/server/app-page-element-builder.d.ts +17 -1
  219. package/dist/server/app-page-element-builder.js +187 -66
  220. package/dist/server/app-page-execution.d.ts +28 -1
  221. package/dist/server/app-page-execution.js +114 -5
  222. package/dist/server/app-page-head.d.ts +95 -3
  223. package/dist/server/app-page-head.js +307 -152
  224. package/dist/server/app-page-http-access-fallback-metadata.d.ts +48 -2
  225. package/dist/server/app-page-http-access-fallback-metadata.js +76 -1
  226. package/dist/server/app-page-method.d.ts +2 -1
  227. package/dist/server/app-page-probe.d.ts +2 -1
  228. package/dist/server/app-page-render-identity.d.ts +2 -1
  229. package/dist/server/app-page-render.d.ts +7 -1
  230. package/dist/server/app-page-render.js +38 -11
  231. package/dist/server/app-page-request.d.ts +14 -1
  232. package/dist/server/app-page-request.js +1 -1
  233. package/dist/server/app-page-route-wiring.d.ts +52 -2
  234. package/dist/server/app-page-route-wiring.js +197 -47
  235. package/dist/server/app-page-rsc-render-status.d.ts +3 -1
  236. package/dist/server/app-page-rsc-render-status.js +1 -0
  237. package/dist/server/app-page-search-params-observation.d.ts +8 -6
  238. package/dist/server/app-page-search-params-observation.js +16 -11
  239. package/dist/server/app-page-segment-plan.d.ts +2 -1
  240. package/dist/server/app-page-stream.d.ts +38 -1
  241. package/dist/server/app-page-stream.js +24 -4
  242. package/dist/server/app-pages-bridge.d.ts +4 -2
  243. package/dist/server/app-pages-bridge.js +11 -7
  244. package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
  245. package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
  246. package/dist/server/app-prerender-endpoints.d.ts +2 -1
  247. package/dist/server/app-prerender-static-params.d.ts +2 -1
  248. package/dist/server/app-prerender-static-params.js +3 -2
  249. package/dist/server/app-render-dependency.d.ts +11 -1
  250. package/dist/server/app-render-dependency.js +65 -6
  251. package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
  252. package/dist/server/app-request-stage-independent-entry.js +2 -2
  253. package/dist/server/app-response-stage-entry.d.ts +2 -1
  254. package/dist/server/app-response-stage-entry.js +3 -3
  255. package/dist/server/app-route-handler-cache.d.ts +2 -1
  256. package/dist/server/app-route-handler-dispatch.d.ts +2 -1
  257. package/dist/server/app-route-handler-dispatch.js +4 -2
  258. package/dist/server/app-route-handler-execution.d.ts +4 -1
  259. package/dist/server/app-route-handler-execution.js +9 -2
  260. package/dist/server/app-route-handler-middleware-context.d.ts +2 -1
  261. package/dist/server/app-route-handler-middleware-context.js +3 -3
  262. package/dist/server/app-route-handler-response.d.ts +4 -2
  263. package/dist/server/app-route-handler-response.js +2 -2
  264. package/dist/server/app-route-handler-runtime.d.ts +4 -1
  265. package/dist/server/app-route-handler-runtime.js +20 -3
  266. package/dist/server/app-route-module-loader.d.ts +18 -1
  267. package/dist/server/app-route-module-loader.js +15 -6
  268. package/dist/server/app-route-tree-prefetch.d.ts +2 -1
  269. package/dist/server/app-route-tree.d.ts +20 -0
  270. package/dist/server/app-route-tree.js +18 -0
  271. package/dist/server/app-router-entry.js +2 -2
  272. package/dist/server/app-rsc-combined-handler.js +8 -1
  273. package/dist/server/app-rsc-error-handler.d.ts +2 -1
  274. package/dist/server/app-rsc-errors.d.ts +9 -1
  275. package/dist/server/app-rsc-errors.js +9 -2
  276. package/dist/server/app-rsc-handler.d.ts +6 -2
  277. package/dist/server/app-rsc-handler.js +152 -140
  278. package/dist/server/app-rsc-response-finalizer.d.ts +7 -1
  279. package/dist/server/app-rsc-response-finalizer.js +4 -1
  280. package/dist/server/app-rsc-response-stage.js +3 -1
  281. package/dist/server/app-rsc-route-matching.d.ts +39 -1
  282. package/dist/server/app-rsc-route-matching.js +25 -1
  283. package/dist/server/app-segment-config.d.ts +2 -1
  284. package/dist/server/app-segment-config.js +1 -14
  285. package/dist/server/app-server-action-execution.d.ts +25 -7
  286. package/dist/server/app-server-action-execution.js +53 -59
  287. package/dist/server/app-ssr-entry.d.ts +12 -0
  288. package/dist/server/app-ssr-entry.js +104 -48
  289. package/dist/server/app-ssr-error-meta.d.ts +2 -1
  290. package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
  291. package/dist/server/app-ssr-stream.d.ts +29 -10
  292. package/dist/server/app-ssr-stream.js +311 -67
  293. package/dist/server/app-static-generation.d.ts +2 -1
  294. package/dist/server/app-streamed-client-references.d.ts +39 -0
  295. package/dist/server/app-streamed-client-references.js +156 -0
  296. package/dist/server/app-visited-response-cache.d.ts +2 -1
  297. package/dist/server/app-worker-stages.d.ts +2 -1
  298. package/dist/server/artifact-compatibility.d.ts +2 -1
  299. package/dist/server/bfcache-identity.d.ts +2 -1
  300. package/dist/server/cache-headers.d.ts +2 -1
  301. package/dist/server/cacheability-request.d.ts +2 -1
  302. package/dist/server/client-reuse-manifest.d.ts +2 -1
  303. package/dist/server/config-headers.d.ts +2 -1
  304. package/dist/server/config-headers.js +12 -3
  305. package/dist/server/csp.d.ts +2 -1
  306. package/dist/server/default-global-not-found-module.d.ts +2 -1
  307. package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
  308. package/dist/server/default-http-access-fallback-modules.js +31 -0
  309. package/dist/server/defer-until-stream-consumed.d.ts +34 -0
  310. package/dist/server/defer-until-stream-consumed.js +154 -21
  311. package/dist/server/dev-lockfile.d.ts +32 -2
  312. package/dist/server/dev-lockfile.js +46 -2
  313. package/dist/server/dev-module-runner.d.ts +2 -1
  314. package/dist/server/dev-server.js +10 -3
  315. package/dist/server/fetch-handler.js +1 -2
  316. package/dist/server/file-based-metadata.d.ts +2 -1
  317. package/dist/server/framework-tracer.d.ts +2 -1
  318. package/dist/server/html.d.ts +1 -0
  319. package/dist/server/html.js +19 -1
  320. package/dist/server/http-conditional.d.ts +2 -1
  321. package/dist/server/http-error-responses.d.ts +2 -1
  322. package/dist/server/implicit-tags.d.ts +2 -1
  323. package/dist/server/isolate-shared-promise.d.ts +10 -0
  324. package/dist/server/isolate-shared-promise.js +33 -0
  325. package/dist/server/isr-cache.js +3 -2
  326. package/dist/server/metadata-route-build-data.d.ts +2 -1
  327. package/dist/server/metadata-route-build-data.js +1 -1
  328. package/dist/server/metadata-route-response.d.ts +2 -1
  329. package/dist/server/metadata-route-response.js +1 -1
  330. package/dist/server/metadata-routes.d.ts +2 -1
  331. package/dist/server/middleware-matcher-pattern.d.ts +0 -1
  332. package/dist/server/middleware-matcher-pattern.js +11 -140
  333. package/dist/server/middleware-matcher.js +5 -6
  334. package/dist/server/middleware-response-headers.d.ts +31 -0
  335. package/dist/server/middleware-response-headers.js +57 -1
  336. package/dist/server/middleware-runtime.d.ts +2 -1
  337. package/dist/server/middleware-runtime.js +26 -13
  338. package/dist/server/navigation-planner.d.ts +2 -2
  339. package/dist/server/navigation-trace.d.ts +2 -1
  340. package/dist/server/next-error-digest.d.ts +2 -1
  341. package/dist/server/nitro-public-files-plugin.d.ts +39 -0
  342. package/dist/server/nitro-public-files-plugin.js +106 -0
  343. package/dist/server/nitro-public-files.d.ts +22 -0
  344. package/dist/server/nitro-public-files.js +39 -0
  345. package/dist/server/opentelemetry-api.d.ts +2 -1
  346. package/dist/server/operation-token.d.ts +2 -1
  347. package/dist/server/pages-api-route.d.ts +2 -1
  348. package/dist/server/pages-asset-tags.d.ts +7 -1
  349. package/dist/server/pages-asset-tags.js +9 -2
  350. package/dist/server/pages-body-parser-config.d.ts +2 -1
  351. package/dist/server/pages-client-assets.d.ts +8 -1
  352. package/dist/server/pages-data-route.d.ts +2 -1
  353. package/dist/server/pages-document-asset-props.d.ts +2 -1
  354. package/dist/server/pages-document-initial-props.d.ts +2 -1
  355. package/dist/server/pages-execution-tracing.d.ts +2 -1
  356. package/dist/server/pages-execution-tracing.js +1 -1
  357. package/dist/server/pages-get-initial-props.d.ts +2 -1
  358. package/dist/server/pages-i18n.d.ts +18 -0
  359. package/dist/server/pages-i18n.js +18 -2
  360. package/dist/server/pages-node-compat.d.ts +5 -3
  361. package/dist/server/pages-node-compat.js +35 -16
  362. package/dist/server/pages-page-data.d.ts +7 -1
  363. package/dist/server/pages-page-data.js +35 -12
  364. package/dist/server/pages-page-handler.d.ts +3 -2
  365. package/dist/server/pages-page-handler.js +16 -7
  366. package/dist/server/pages-page-method.d.ts +2 -1
  367. package/dist/server/pages-page-response.d.ts +2 -1
  368. package/dist/server/pages-preview.d.ts +2 -1
  369. package/dist/server/pages-readiness.d.ts +2 -1
  370. package/dist/server/pages-request-pipeline.d.ts +8 -2
  371. package/dist/server/pages-request-pipeline.js +35 -40
  372. package/dist/server/pages-request-stage-entry.d.ts +2 -1
  373. package/dist/server/pages-request-stage-entry.js +16 -6
  374. package/dist/server/pages-response-stage-entry.d.ts +2 -1
  375. package/dist/server/pages-response-stage-entry.js +1 -1
  376. package/dist/server/pages-revalidate.js +1 -0
  377. package/dist/server/pages-route-data-kind.d.ts +2 -1
  378. package/dist/server/pages-router-entry.js +1 -1
  379. package/dist/server/prerender-cache-life-header.d.ts +2 -1
  380. package/dist/server/prerender-route-params.d.ts +2 -1
  381. package/dist/server/prod-server.d.ts +2 -2
  382. package/dist/server/prod-server.js +80 -36
  383. package/dist/server/proxy-trust.d.ts +6 -0
  384. package/dist/server/proxy-trust.js +12 -6
  385. package/dist/server/request-log.d.ts +2 -1
  386. package/dist/server/request-pipeline.d.ts +5 -0
  387. package/dist/server/request-pipeline.js +12 -1
  388. package/dist/server/request-tracing.d.ts +2 -1
  389. package/dist/server/request-tracing.js +1 -1
  390. package/dist/server/response-start-tracing.js +7 -29
  391. package/dist/server/rsc-render-stream.d.ts +4 -0
  392. package/dist/server/rsc-render-stream.js +25 -0
  393. package/dist/server/seed-cache.d.ts +2 -1
  394. package/dist/server/seed-cache.js +1 -1
  395. package/dist/server/server-reference-loader.js +10 -1
  396. package/dist/server/static-file-cache.d.ts +2 -1
  397. package/dist/server/static-file-cache.js +16 -3
  398. package/dist/server/static-layout-client-reuse-proof.d.ts +2 -1
  399. package/dist/server/worker-revalidation-context.d.ts +2 -1
  400. package/dist/server/worker-stages.d.ts +2 -1
  401. package/dist/server/worker-utils.js +1 -1
  402. package/dist/shims/app.d.ts +2 -1
  403. package/dist/shims/cache-callable-runtime.d.ts +2 -1
  404. package/dist/shims/cache-handler.d.ts +8 -3
  405. package/dist/shims/cache-handler.js +32 -11
  406. package/dist/shims/cache-request-state.d.ts +40 -3
  407. package/dist/shims/cache-request-state.js +70 -5
  408. package/dist/shims/cache-runtime.js +47 -19
  409. package/dist/shims/cache.d.ts +2 -2
  410. package/dist/shims/cache.js +17 -8
  411. package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
  412. package/dist/shims/caught-not-found-boundaries.js +48 -0
  413. package/dist/shims/cdn-purge-routes.d.ts +25 -0
  414. package/dist/shims/cdn-purge-routes.js +77 -0
  415. package/dist/shims/client-locale.js +2 -1
  416. package/dist/shims/client-page-root.d.ts +2 -1
  417. package/dist/shims/config.d.ts +2 -1
  418. package/dist/shims/default-forbidden.d.ts +4 -0
  419. package/dist/shims/default-forbidden.js +18 -0
  420. package/dist/shims/default-not-found.d.ts +0 -5
  421. package/dist/shims/default-not-found.js +5 -41
  422. package/dist/shims/default-unauthorized.d.ts +4 -0
  423. package/dist/shims/default-unauthorized.js +18 -0
  424. package/dist/shims/dynamic.js +17 -4
  425. package/dist/shims/error-boundary.d.ts +39 -3
  426. package/dist/shims/error-boundary.js +31 -16
  427. package/dist/shims/font-google.js +1 -2
  428. package/dist/shims/font-utils.d.ts +3 -2
  429. package/dist/shims/font-utils.js +5 -3
  430. package/dist/shims/form.js +9 -4
  431. package/dist/shims/http-access-error-fallback.d.ts +7 -0
  432. package/dist/shims/http-access-error-fallback.js +47 -0
  433. package/dist/shims/image-props.d.ts +93 -0
  434. package/dist/shims/image-props.js +323 -0
  435. package/dist/shims/image.d.ts +4 -39
  436. package/dist/shims/image.js +4 -319
  437. package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
  438. package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
  439. package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
  440. package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
  441. package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
  442. package/dist/shims/internal/client-reference-loader.d.ts +7 -0
  443. package/dist/shims/internal/client-reference-loader.js +91 -0
  444. package/dist/shims/internal/cookie-serialize.d.ts +2 -1
  445. package/dist/shims/internal/cookies.js +1 -2
  446. package/dist/shims/internal/headers-state.d.ts +9 -0
  447. package/dist/shims/internal/headers-state.js +19 -2
  448. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +6 -2
  449. package/dist/shims/internal/hybrid-client-route-owner-direct.js +31 -14
  450. package/dist/shims/internal/hybrid-client-route-owner.js +8 -8
  451. package/dist/shims/internal/interpolate-as.d.ts +2 -1
  452. package/dist/shims/internal/pages-data-target.d.ts +2 -1
  453. package/dist/shims/internal/pages-data-url.d.ts +2 -1
  454. package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
  455. package/dist/shims/link.js +198 -53
  456. package/dist/shims/metadata.d.ts +32 -11
  457. package/dist/shims/metadata.js +88 -26
  458. package/dist/shims/navigation-errors.d.ts +2 -1
  459. package/dist/shims/navigation.d.ts +23 -3
  460. package/dist/shims/navigation.js +91 -25
  461. package/dist/shims/og.js +35 -10
  462. package/dist/shims/pages-router-runtime.d.ts +2 -1
  463. package/dist/shims/ppr-fallback-shell.d.ts +2 -1
  464. package/dist/shims/request-context.d.ts +13 -0
  465. package/dist/shims/router.js +33 -43
  466. package/dist/shims/server.d.ts +31 -4
  467. package/dist/shims/server.js +58 -10
  468. package/dist/shims/thenable-params.d.ts +6 -1
  469. package/dist/shims/thenable-params.js +11 -2
  470. package/dist/shims/unified-request-context.d.ts +5 -0
  471. package/dist/shims/unified-request-context.js +5 -3
  472. package/dist/typegen.d.ts +2 -1
  473. package/dist/utils/asset-prefix.d.ts +7 -0
  474. package/dist/utils/asset-prefix.js +10 -1
  475. package/dist/utils/client-build-manifest.d.ts +4 -1
  476. package/dist/utils/client-build-manifest.js +20 -6
  477. package/dist/utils/client-entry-manifest.d.ts +13 -0
  478. package/dist/utils/client-entry-manifest.js +20 -1
  479. package/dist/utils/client-reference-chunks.d.ts +45 -0
  480. package/dist/utils/client-reference-chunks.js +30 -0
  481. package/dist/utils/client-runtime-metadata.d.ts +10 -1
  482. package/dist/utils/client-runtime-metadata.js +53 -9
  483. package/dist/utils/compare.d.ts +9 -0
  484. package/dist/utils/compare.js +15 -1
  485. package/dist/utils/lazy-chunks.d.ts +18 -0
  486. package/dist/utils/lazy-chunks.js +27 -1
  487. package/dist/utils/manifest-paths.d.ts +14 -0
  488. package/dist/utils/manifest-paths.js +22 -1
  489. package/dist/utils/middleware-request-headers.d.ts +2 -1
  490. package/dist/utils/path-to-regexp.d.ts +21 -0
  491. package/dist/{server/middleware-path-to-regexp.js → utils/path-to-regexp.js} +14 -11
  492. package/dist/utils/plugin-react-version.d.ts +15 -0
  493. package/dist/utils/plugin-react-version.js +64 -0
  494. package/dist/utils/project.d.ts +2 -1
  495. package/dist/utils/project.js +9 -1
  496. package/dist/utils/public-routes.d.ts +2 -0
  497. package/dist/utils/public-routes.js +18 -7
  498. package/dist/utils/query.d.ts +2 -1
  499. package/dist/utils/sorted-array.d.ts +2 -1
  500. package/dist/utils/vite-cli-invocation.d.ts +2 -1
  501. package/package.json +5 -5
  502. package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
  503. package/dist/server/default-not-found-module.d.ts +0 -19
  504. package/dist/server/default-not-found-module.js +0 -18
  505. package/dist/server/middleware-path-to-regexp.d.ts +0 -13
  506. package/dist/server/rsc-stream-hints.d.ts +0 -21
  507. package/dist/server/rsc-stream-hints.js +0 -227
  508. package/dist/utils/regex-safety.d.ts +0 -17
  509. package/dist/utils/regex-safety.js +0 -789
@@ -15,7 +15,7 @@ import { patternToNextFormat } from "../routing/route-validation.js";
15
15
  import { getRequestExecutionContext } from "../shims/request-context.js";
16
16
  import { runOutsideWorkStoreScope } from "../shims/internal/work-store-scope.js";
17
17
  import { isInterceptionMatchedUrlPath, normalizePath } from "./normalize-path.js";
18
- import { normalizeDefaultLocalePathname } from "./pages-i18n.js";
18
+ import { normalizeDefaultLocalePathname, shouldRestoreLocaleRootTrailingSlash } from "./pages-i18n.js";
19
19
  import { buildNextDataNotFoundResponse, normalizePagesDataRequest } from "./pages-data-route.js";
20
20
  import { getCdnCacheAdapter } from "../shims/cdn-cache.js";
21
21
  import { markRouteCacheabilityDynamic, preserveRouteCacheabilityResponsePolicy } from "../shims/cacheability-classification.js";
@@ -29,7 +29,7 @@ import { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES, isImageOptimizationPath, mar
29
29
  import { parseCacheabilityManifest } from "./cacheability-manifest.js";
30
30
  import { getRenderedConcreteUrlPathsForRoute } from "./pregenerated-concrete-paths.js";
31
31
  import { VINEXT_RSC_CACHE_BUSTING_SEARCH_PARAM, canonicalizeLoadingShellRscRequestHeaders, canonicalizePrewarmableRscRequestHeaders, createCanonicalRscRequestUrl, createRscRedirectLocation, createRscRequestUrl, hasRscCacheBustingSearchParam, resolveInvalidRscCacheBustingRequest, stripRscCacheBustingSearchParam, stripRscSuffix } from "./app-rsc-cache-busting.js";
32
- import { mergeMiddlewareResponseHeaders } from "./middleware-response-headers.js";
32
+ import { mergeMiddlewareResponseHeaders, mergeMiddlewareResponseHeadersOntoResponse, withExternalRewriteResponseHeaders } from "./middleware-response-headers.js";
33
33
  import { consumeResponseStageLinkProvenance, copyLinkHeaderProvenance } from "./app-response-header-provenance.js";
34
34
  import "./app-page-response.js";
35
35
  import { parseNextHttpErrorDigest } from "./next-error-digest.js";
@@ -37,10 +37,11 @@ import { traceAppPageRender } from "./app-page-tracing.js";
37
37
  import { openForwardedMiddlewareContext } from "./forwarded-middleware-context.js";
38
38
  import { setFrameworkRequestRoute, traceFrameworkRequest } from "./request-tracing.js";
39
39
  import { matchPrerenderRouteParamsPayload, readTrustedPrerenderRouteParams, serializePrerenderRouteParamsHeader } from "./prerender-route-params.js";
40
- import { buildPageCacheTags } from "./implicit-tags.js";
41
40
  import { createServerActionNotFoundResponse, getServerActionNotFoundMessage } from "./server-action-not-found.js";
42
41
  import { isPossibleAppRouteActionRequest } from "./app-action-request.js";
42
+ import { isAppRouteHandlerRoute } from "./app-rsc-route-matching.js";
43
43
  import { normalizeInterceptionContextHeader } from "./app-interception-context-header.js";
44
+ import { buildPageCacheTags } from "./implicit-tags.js";
44
45
  import { buildPostMwRequestContext } from "./app-post-middleware-context.js";
45
46
  import { pickRootParams, setRootParams } from "../shims/root-params.js";
46
47
  import { createRouteTreePrefetchResponse, isRouteTreePrefetchRequest } from "./app-route-tree-prefetch.js";
@@ -145,7 +146,7 @@ function applyMiddlewareContextToResponse(response, middlewareContext, appendToP
145
146
  if (!middlewareContext.headers && middlewareContext.status == null) return response;
146
147
  const headers = new Headers(response.headers);
147
148
  const responseLink = appendToPostConfigLink ? headers.get("link") : null;
148
- mergeMiddlewareResponseHeaders(headers, middlewareContext.headers);
149
+ mergeMiddlewareResponseHeadersOntoResponse(headers, middlewareContext.headers);
149
150
  const middlewareLink = middlewareContext.headers?.get("link");
150
151
  if (responseLink && middlewareLink) headers.set("link", `${middlewareLink}, ${responseLink}`);
151
152
  return preserveFullyBufferedBodyMetadata(response, new Response(response.body, {
@@ -194,10 +195,6 @@ function createMissingServerActionResponse(options, actionId) {
194
195
  options.clearRequestContext();
195
196
  return createServerActionNotFoundResponse();
196
197
  }
197
- function redirectDestinationWithBasePath(destination, basePath, hadBasePath) {
198
- if (!basePath || !hadBasePath || isExternalUrl(destination) || hasBasePath(destination, basePath)) return destination;
199
- return basePath + destination;
200
- }
201
198
  async function applyRewrite(options, cleanPathname, recordCacheability = true) {
202
199
  if (!HAS_CONFIG_REWRITES || !options.rewrites.length) return null;
203
200
  const sourcePathname = options.paramsPathname ?? cleanPathname;
@@ -210,7 +207,7 @@ async function applyRewrite(options, cleanPathname, recordCacheability = true) {
210
207
  const { requestWithMiddlewareContextHeaders } = await import("./app-middleware.js");
211
208
  const proxyRequest = requestWithMiddlewareContextHeaders(options.request, options.middlewareContext);
212
209
  options.clearRequestContext();
213
- return configMatchers.proxyExternalRequest(proxyRequest, rewritten);
210
+ return markAppRscResponseConfigHeadersApplied(withExternalRewriteResponseHeaders(await configMatchers.proxyExternalRequest(proxyRequest, rewritten), new Headers(), options.middlewareContext.headers?.getSetCookie() ?? []));
214
211
  }
215
212
  return rewritten;
216
213
  }
@@ -245,6 +242,7 @@ async function applyConfigHeadersToMiddlewareRedirect(response, options) {
245
242
  pathname: options.pathname,
246
243
  requestContext: options.requestContext,
247
244
  basePathState: options.basePathState,
245
+ middlewareHeaders: response.headers,
248
246
  recordCacheability: options.recordCacheability
249
247
  });
250
248
  if (!headers.entries().next().done) {
@@ -369,19 +367,24 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
369
367
  });
370
368
  if (prerenderEndpointResponse) return prerenderEndpointResponse;
371
369
  }
372
- if (!options.skipTrailingSlashRedirect) {
370
+ if (!isDataRequest && !options.skipTrailingSlashRedirect) {
373
371
  const trailingSlashRedirect = options.trailingSlash && options.isMetadataRoutePath && await options.isMetadataRoutePath(cleanPathname) ? null : normalizeTrailingSlash(requestCleanPathname, hadBasePath ? options.basePath : "", options.trailingSlash, url.search);
374
372
  if (trailingSlashRedirect) return trailingSlashRedirect;
375
373
  }
376
374
  const matchPathname = (p) => normalizeDefaultLocalePathname(p, options.i18nConfig, { hostname: url.hostname });
375
+ const restoreLocaleRootTrailingSlash = !pagesDataRequest && shouldRestoreLocaleRootTrailingSlash(stripRscSuffix(url.pathname), options);
376
+ const headerMatchPathname = normalizeDefaultLocalePathname(requestCleanPathname, options.i18nConfig, {
377
+ hostname: url.hostname,
378
+ restoreRootTrailingSlash: restoreLocaleRootTrailingSlash
379
+ });
377
380
  const redirectPathname = matchPathname(requestCleanPathname);
378
381
  const configMatchers = HAS_CONFIG_REDIRECTS && options.configRedirects.length ? await import("../config/config-matchers.js") : null;
379
382
  const redirect = configMatchers ? configMatchers.matchRedirect(redirectPathname, options.configRedirects, preMiddlewareRequestContext, basePathState, dispatchResponseStage ? void 0 : markConditionalRedirectCacheability) : null;
380
383
  if (configMatchers && redirect) {
381
- const destination = configMatchers.sanitizeDestination(redirectDestinationWithBasePath(redirect.destination, options.basePath, hadBasePath));
382
- const location = isRscRequest && request.headers.get("RSC") === "1" ? await createRscRedirectLocation(destination, request) : configMatchers.preserveRedirectDestinationQuery(destination, url.search, redirect.destinationQuery);
384
+ const destination = redirect.destination;
385
+ const location = isRscRequest && request.headers.get("RSC") === "1" ? await createRscRedirectLocation(configMatchers.encodeRedirectLocation(destination), request) : configMatchers.encodeRedirectLocation(configMatchers.preserveRedirectDestinationQuery(destination, url.search, redirect.destinationQuery));
383
386
  return new Response(null, {
384
- status: redirect.permanent ? 308 : 307,
387
+ status: redirect.statusCode,
385
388
  headers: { Location: location }
386
389
  });
387
390
  }
@@ -424,10 +427,24 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
424
427
  if (!dispatchResponseStage && middlewareResult.pathnameEligible) markRouteCacheabilityDynamic(middlewareResult.matched ? "middleware matched this request" : "middleware is eligible for this pathname");
425
428
  if (middlewareResult.kind === "response") {
426
429
  if (request.body && !request.body.locked) request.body.cancel().catch(() => {});
430
+ if (middlewareResult.externalRewrite) {
431
+ const headers = new Headers();
432
+ await applyAppRscConfigHeaders(headers, request, {
433
+ basePath: options.basePath,
434
+ configHeaders: options.configHeaders,
435
+ i18nConfig: options.i18nConfig,
436
+ restoreLocaleRootTrailingSlash,
437
+ middlewareHeaders: middlewareContext.headers,
438
+ recordCacheability: dispatchResponseStage === void 0,
439
+ requestContext: preMiddlewareRequestContext
440
+ });
441
+ return markAppRscResponseConfigHeadersApplied(withExternalRewriteResponseHeaders(middlewareResult.response, headers, []));
442
+ }
443
+ middlewareContext.headers ??= new Headers(middlewareResult.response.headers);
427
444
  return applyConfigHeadersToMiddlewareRedirect(middlewareResult.response, {
428
445
  basePathState,
429
446
  configHeaders: options.configHeaders,
430
- pathname: matchPathname(requestCleanPathname),
447
+ pathname: headerMatchPathname,
431
448
  recordCacheability: dispatchResponseStage === void 0,
432
449
  requestContext: preMiddlewareRequestContext
433
450
  });
@@ -453,7 +470,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
453
470
  const loadResponseStagePolicy = () => responseStagePolicyPromise ??= options.configHeaders.length ? import("./config-headers.js").then(({ resolveResponseStageCachePolicy }) => withoutResponseStageVary(resolveResponseStageCachePolicy({
454
471
  basePathState,
455
472
  configHeaders: options.configHeaders,
456
- pathname: matchPathname(requestCleanPathname),
473
+ pathname: headerMatchPathname,
457
474
  requestContext: preMiddlewareRequestContext
458
475
  }))) : Promise.resolve(null);
459
476
  let canUseSharedWorkerResponseStage = draftModeCookie === null && !hasMiddlewareCookieOverlay && !hasMiddlewareRequestHeaderOverrides(middlewareContext.requestHeaders ?? middlewareContext.headers) && !requestOptsOutOfWorkerResponseStage(request, options, scriptNonce, allowInternalRscDocumentFallback);
@@ -463,7 +480,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
463
480
  const cache = responseStageProbeMode || isOnDemandRevalidate || (props.kind === "app-page" || props.kind === "app-route-handler") && (props.bypassInterceptionContextCache || props.forceDynamic === true && responseStagePolicy === null) ? "bypass" : canUseSharedWorkerResponseStage ? "shared" : "bypass";
464
481
  let dispatchRequest = props.kind === "app-page" ? prepareSharedAppPageDispatch(stageRequest, cache) : stageRequest;
465
482
  let canonicalRsc = null;
466
- if (cache === "shared" && props.kind === "app-page" && props.isRscRequest && props.matchKind === "request" && props.interceptionContext === null && props.interceptionId === null && props.mountedSlotsHeader === null) {
483
+ if (cache === "shared" && props.kind === "app-page" && props.isRscRequest && (props.matchKind === "request" || props.matchKind === "resolved") && props.interceptionContext === null && props.interceptionId === null && props.mountedSlotsHeader === null) {
467
484
  const headers = new Headers(dispatchRequest.headers);
468
485
  if (props.renderMode === "navigation" ? canonicalizePrewarmableRscRequestHeaders(headers) : props.renderMode === "prefetch-loading-shell" && props.canUseCanonicalLoadingShell ? canonicalizeLoadingShellRscRequestHeaders(headers) : false) {
469
486
  canonicalRsc = {
@@ -558,6 +575,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
558
575
  basePath: options.basePath,
559
576
  configHeaders: options.configHeaders,
560
577
  i18nConfig: options.i18nConfig,
578
+ restoreLocaleRootTrailingSlash,
561
579
  middlewareHeaders: middlewareContext.headers,
562
580
  overwriteExisting: preserveExistingPolicy ? /* @__PURE__ */ new Set() : isCdnResponsePolicyHeader,
563
581
  recordCacheability: dispatchResponseStage === void 0,
@@ -576,6 +594,8 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
576
594
  basePath: options.basePath,
577
595
  configHeaders: options.configHeaders,
578
596
  i18nConfig: options.i18nConfig,
597
+ restoreLocaleRootTrailingSlash,
598
+ middlewareHeaders: middlewareContext.headers,
579
599
  overwriteExisting: isCdnResponsePolicyHeader,
580
600
  recordCacheability: false,
581
601
  requestContext: preMiddlewareRequestContext
@@ -594,7 +614,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
594
614
  return markAppRscResponseConfigHeadersApplied(response);
595
615
  };
596
616
  const postMiddlewareRequestContext = buildPostMwRequestContext(userlandRequest);
597
- filesystemRouteEligible ||= didMiddlewareRewrite;
617
+ if (didMiddlewareRewrite) filesystemRouteEligible = resolvedPathnameHasBasePath;
598
618
  for (const rewrite of options.configRewrites.beforeFiles) {
599
619
  const beforeFilesRewrite = await applyRewrite({
600
620
  basePathState: currentBasePathState(),
@@ -611,8 +631,8 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
611
631
  resolvedUrl = mergeRewriteQuery(resolvedUrl, beforeFilesRewrite);
612
632
  cleanPathname = pathnameForResolvedUrl(resolvedUrl);
613
633
  cleanPathnameIsRequestPathname = false;
614
- filesystemRouteEligible = true;
615
634
  resolvedPathnameHasBasePath = !options.basePath || rewrite.basePath !== false;
635
+ filesystemRouteEligible = resolvedPathnameHasBasePath;
616
636
  }
617
637
  }
618
638
  const claimedRscCacheBustingRedirect = await validateClaimedOutsideBasePathRsc();
@@ -621,55 +641,6 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
621
641
  const isPostRequest = request.method.toUpperCase() === "POST";
622
642
  const contentType = request.headers.get("content-type") || "";
623
643
  const isProgressiveActionRequest = isPostRequest && !actionId && contentType.startsWith("multipart/form-data");
624
- let resolvedLateRewritesForAction = false;
625
- if (!filesystemRouteEligible && (actionId || isProgressiveActionRequest)) {
626
- let actionMatch = null;
627
- for (const rewrite of options.configRewrites.afterFiles) {
628
- const rewritten = await applyRewrite({
629
- basePathState: currentBasePathState(),
630
- clearRequestContext: options.clearRequestContext,
631
- middlewareContext,
632
- request: normalizedUserlandRequest,
633
- requestContext: requestContextForResolvedUrl(postMiddlewareRequestContext, resolvedUrl, url),
634
- paramsPathname: matchPathname(cleanPathnameIsRequestPathname ? requestCleanPathname : cleanPathname),
635
- rewrites: [rewrite],
636
- validateExternalRewriteRequest: () => validateClaimedOutsideBasePathRsc(true)
637
- }, matchPathname(cleanPathname), dispatchResponseStage === void 0);
638
- if (rewritten instanceof Response) return rewritten;
639
- if (!rewritten) continue;
640
- resolvedUrl = mergeRewriteQuery(resolvedUrl, rewritten);
641
- cleanPathname = pathnameForResolvedUrl(resolvedUrl);
642
- cleanPathnameIsRequestPathname = false;
643
- filesystemRouteEligible = true;
644
- resolvedPathnameHasBasePath = !options.basePath || rewrite.basePath !== false;
645
- actionMatch = matchCleanPathname();
646
- if (actionMatch) break;
647
- }
648
- if (!actionMatch) for (const rewrite of options.configRewrites.fallback) {
649
- const rewritten = await applyRewrite({
650
- basePathState: currentBasePathState(),
651
- clearRequestContext: options.clearRequestContext,
652
- middlewareContext,
653
- request: normalizedUserlandRequest,
654
- requestContext: requestContextForResolvedUrl(postMiddlewareRequestContext, resolvedUrl, url),
655
- paramsPathname: matchPathname(cleanPathnameIsRequestPathname ? requestCleanPathname : cleanPathname),
656
- rewrites: [rewrite],
657
- validateExternalRewriteRequest: () => validateClaimedOutsideBasePathRsc(true)
658
- }, matchPathname(cleanPathname), dispatchResponseStage === void 0);
659
- if (rewritten instanceof Response) return rewritten;
660
- if (!rewritten) continue;
661
- resolvedUrl = mergeRewriteQuery(resolvedUrl, rewritten);
662
- cleanPathname = pathnameForResolvedUrl(resolvedUrl);
663
- cleanPathnameIsRequestPathname = false;
664
- filesystemRouteEligible = true;
665
- resolvedPathnameHasBasePath = !options.basePath || rewrite.basePath !== false;
666
- actionMatch = matchCleanPathname();
667
- if (actionMatch) break;
668
- }
669
- resolvedLateRewritesForAction = filesystemRouteEligible;
670
- }
671
- const lateActionRscCacheBustingRedirect = await validateClaimedOutsideBasePathRsc();
672
- if (lateActionRscCacheBustingRedirect) return lateActionRscCacheBustingRedirect;
673
644
  const serveImageEndpointIfMatched = () => {
674
645
  if (!filesystemRouteEligible || !resolvedPathnameHasBasePath || !isImageOptimizationPath(cleanPathname)) return null;
675
646
  const imageUrl = new URL(resolvedUrl, url);
@@ -691,17 +662,20 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
691
662
  if (imageEndpointResponse) return imageEndpointResponse;
692
663
  const metadataRouteResponse = await renderMetadataRouteIfMatched();
693
664
  if (metadataRouteResponse) return composeResponseStageResponse(metadataRouteResponse);
694
- const publicFileResponse = filesystemRouteEligible ? resolvePublicFileRoute({
695
- cleanPathname: cleanPathnameIsRequestPathname ? cleanPathname : normalizePathnameForRouteMatch(cleanPathname),
696
- middlewareContext,
697
- pathname,
698
- publicFiles: options.publicFiles,
699
- request
700
- }) : null;
701
- if (publicFileResponse) {
702
- options.clearRequestContext();
665
+ const servePublicFileIfMatched = () => {
666
+ if (!filesystemRouteEligible) return null;
667
+ const publicFileResponse = resolvePublicFileRoute({
668
+ cleanPathname: cleanPathnameIsRequestPathname ? cleanPathname : normalizePathnameForRouteMatch(cleanPathname),
669
+ middlewareContext,
670
+ pathname,
671
+ publicFiles: options.publicFiles,
672
+ request
673
+ });
674
+ if (publicFileResponse) options.clearRequestContext();
703
675
  return publicFileResponse;
704
- }
676
+ };
677
+ const publicFileResponse = servePublicFileIfMatched();
678
+ if (publicFileResponse) return publicFileResponse;
705
679
  stripRscCacheBustingSearchParam(url);
706
680
  resolvedUrl = serializeResolvedUrl(resolvedUrl, url);
707
681
  options.setNavigationContext({
@@ -740,7 +714,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
740
714
  const rewrittenSourceMatch = options.matchRoute(rewrittenPathname);
741
715
  return interceptionSourceMatch !== null && rewrittenSourceMatch?.route === interceptionSourceMatch.route && haveSamePageParams(rewrittenSourceMatch.params, interceptionSourceMatch.params);
742
716
  };
743
- if (configMatchers?.matchRedirect(matchPathname(sourceRequestPathname), options.configRedirects, preMiddlewareRequestContext, basePathState, dispatchResponseStage ? void 0 : markConditionalRedirectCacheability)) {
717
+ if (configMatchers?.matchRedirect(matchPathname(sourceRequestPathname), options.configRedirects, preMiddlewareRequestContext, currentBasePathState(), dispatchResponseStage ? void 0 : markConditionalRedirectCacheability)) {
744
718
  options.clearRequestContext();
745
719
  return notFoundResponse();
746
720
  }
@@ -748,7 +722,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
748
722
  if (runMiddleware) {
749
723
  const sourceUrl = new URL(userlandRequest.url);
750
724
  sourceUrl.search = new URL(resolvedUrl, url).search;
751
- const sourceUrlPathname = hadBasePath && options.basePath ? sourceRequestPathname === "/" ? options.basePath : options.basePath + sourceRequestPathname : sourceRequestPathname;
725
+ const sourceUrlPathname = resolvedPathnameHasBasePath && options.basePath ? sourceRequestPathname === "/" ? options.basePath : options.basePath + sourceRequestPathname : sourceRequestPathname;
752
726
  sourceUrl.pathname = sourceUrlPathname;
753
727
  if (sourceUrl.pathname !== sourceUrlPathname) {
754
728
  options.clearRequestContext();
@@ -780,7 +754,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
780
754
  cleanPathname: decodedSourceRequestPathname,
781
755
  context: sourceMiddlewareContext,
782
756
  externalRewriteRequest: normalizedUserlandRequest,
783
- hadBasePath,
757
+ hadBasePath: resolvedPathnameHasBasePath,
784
758
  isDataRequest: isMiddlewareDataRequest,
785
759
  request: sourceMiddlewareRequest,
786
760
  validateExternalRewriteRequest: () => validateClaimedOutsideBasePathRsc(true)
@@ -815,7 +789,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
815
789
  canUseSharedWorkerResponseStage = false;
816
790
  }
817
791
  if (sourceMiddlewareResult.rewritten) {
818
- if (sourceMiddlewareResult.search !== sourceUrl.search || !adoptRewrittenInterceptionSource(sourceMiddlewareResult.cleanPathname)) {
792
+ if (options.basePath && sourceMiddlewareResult.rewriteHadBasePath === false || sourceMiddlewareResult.search !== sourceUrl.search || !adoptRewrittenInterceptionSource(sourceMiddlewareResult.cleanPathname)) {
819
793
  options.clearRequestContext();
820
794
  return notFoundResponse();
821
795
  }
@@ -827,7 +801,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
827
801
  const sourceRewriteContext = requestContextForResolvedUrl(buildPostMwRequestContext(userlandRequest), resolvedUrl, url);
828
802
  let didRewriteSource = false;
829
803
  for (const rewrite of options.configRewrites.beforeFiles) {
830
- const destination = matchRewrite(matchPathname(sourceRulesPathname), [rewrite], sourceRewriteContext, basePathState, matchPathname(sourceRulesPathname), dispatchResponseStage === void 0 ? markConditionalRewriteCacheability : void 0);
804
+ const destination = matchRewrite(matchPathname(sourceRulesPathname), [rewrite], sourceRewriteContext, currentBasePathState(), matchPathname(sourceRulesPathname), dispatchResponseStage === void 0 ? markConditionalRewriteCacheability : void 0);
831
805
  if (!destination) continue;
832
806
  if (isExternalUrl(destination) || destination.includes("?")) {
833
807
  options.clearRequestContext();
@@ -872,64 +846,76 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
872
846
  options.clearRequestContext();
873
847
  return new Response("{}", { headers });
874
848
  }
875
- if (!filesystemRouteEligible && isPostRequest && actionId) {
876
- options.clearRequestContext();
877
- return notFoundResponse();
878
- }
879
- let progressiveActionResult = null;
880
- if (filesystemRouteEligible && isPostRequest && contentType.startsWith("multipart/form-data") && !actionId) {
881
- if (options.handleProgressiveActionRequest) progressiveActionResult = await options.handleProgressiveActionRequest({
882
- actionId,
883
- cleanPathname,
884
- contentType,
885
- middlewareContext,
886
- request,
887
- routeMatch: renderedPreActionMatch
888
- });
889
- else if (preActionMatch?.route.__loadPage && !preActionMatch.route.__loadRouteHandler) return createMissingServerActionResponse(options, null);
890
- }
891
- if (progressiveActionResult instanceof Response) return progressiveActionResult;
892
- const progressiveActionFormState = progressiveActionResult?.kind === "form-state" ? progressiveActionResult : null;
893
- const isProgressiveActionRender = progressiveActionFormState !== null;
894
- const formState = progressiveActionFormState?.formState ?? null;
895
- const failedProgressiveActionResult = progressiveActionFormState && "actionError" in progressiveActionFormState ? progressiveActionFormState : null;
896
- const actionFailed = failedProgressiveActionResult !== null;
897
- const actionError = failedProgressiveActionResult?.actionError;
898
- const actionErrorDigest = actionError && typeof actionError === "object" && "digest" in actionError ? String(actionError.digest) : null;
899
- const actionHttpFallbackStatus = actionErrorDigest ? parseNextHttpErrorDigest(actionErrorDigest)?.status ?? null : null;
900
- const normalizedProgressiveActionError = actionHttpFallbackStatus === null || actionHttpFallbackStatus === 404 ? actionError : { digest: "NEXT_NOT_FOUND" };
901
- if (actionFailed && middlewareContext.status === null && actionHttpFallbackStatus === null) middlewareContext.status = 500;
902
- let sourceConfigHeaders = null;
903
- if (filesystemRouteEligible && isPostRequest && actionId && options.handleServerActionRequest) {
904
- sourceConfigHeaders = new Headers();
849
+ const literalRoutePattern = preActionMatch !== null && !isAppRouteHandlerRoute(preActionMatch.route) ? patternToNextFormat(preActionMatch.route.pattern) : null;
850
+ const routeMatchPathname = cleanPathnameIsRequestPathname ? cleanPathname : normalizePathnameForRouteMatch(cleanPathname);
851
+ const isServerActionRequest = isPostRequest && Boolean(actionId);
852
+ const requestsLiteralRoutePattern = (isProgressiveActionRequest || isServerActionRequest) && literalRoutePattern !== null && literalRoutePattern === (routeMatchPathname.length > 1 && routeMatchPathname.endsWith("/") ? routeMatchPathname.slice(0, -1) : routeMatchPathname);
853
+ const isFinalRouteMatch = isInterceptionMatch || requestsLiteralRoutePattern;
854
+ const preActionMatchIsFinal = preActionMatch !== null && (isFinalRouteMatch || !preActionMatch.route.isDynamic);
855
+ let serverActionHandled = false;
856
+ const handleServerAction = async (routeMatch, routePathname) => {
857
+ if (!filesystemRouteEligible || !isPostRequest || !actionId) return null;
858
+ if (routeMatch && isAppRouteHandlerRoute(routeMatch.route)) return null;
859
+ if (!options.handleServerActionRequest) return createMissingServerActionResponse(options, actionId);
860
+ const sourceConfigHeaders = new Headers();
905
861
  const sourceConfigUrl = new URL(request.url);
906
862
  sourceConfigUrl.pathname = hadBasePath ? addBasePathToPathname(requestCleanPathname, options.basePath) : requestCleanPathname;
907
863
  await applyAppRscConfigHeaders(sourceConfigHeaders, cloneRequestWithUrl(request, sourceConfigUrl.toString()), {
908
864
  basePath: options.basePath,
909
865
  configHeaders: options.configHeaders,
910
866
  i18nConfig: options.i18nConfig,
867
+ restoreLocaleRootTrailingSlash,
868
+ middlewareHeaders: middlewareContext.headers,
911
869
  recordCacheability: dispatchResponseStage === void 0,
912
870
  requestContext: preMiddlewareRequestContext
913
871
  });
872
+ return options.handleServerActionRequest({
873
+ actionId,
874
+ cleanPathname,
875
+ contentType,
876
+ interceptionContext: interceptionSourceContext,
877
+ isRscRequest,
878
+ middlewareContext,
879
+ mountedSlotsHeader,
880
+ request,
881
+ scriptNonce,
882
+ routeMatch,
883
+ routePathname,
884
+ dispatchRedirectTargetRequest: dispatchInternalRequest,
885
+ sourceConfigHeaders,
886
+ searchParams: getResolvedSearchParams()
887
+ });
888
+ };
889
+ let progressiveActionHandled = false;
890
+ let progressiveActionFormState = null;
891
+ const handleProgressiveAction = async (routeMatch, unrenderedRouteMatch) => {
892
+ if (!filesystemRouteEligible || !isProgressiveActionRequest) return null;
893
+ if (routeMatch && isAppRouteHandlerRoute(routeMatch.route)) return null;
894
+ if (!options.handleProgressiveActionRequest) return unrenderedRouteMatch?.route.__loadPage && !unrenderedRouteMatch.route.__loadRouteHandler ? createMissingServerActionResponse(options, null) : null;
895
+ const progressiveActionResult = await options.handleProgressiveActionRequest({
896
+ actionId,
897
+ cleanPathname,
898
+ contentType,
899
+ middlewareContext,
900
+ request,
901
+ routeMatch
902
+ });
903
+ if (progressiveActionResult instanceof Response) return progressiveActionResult;
904
+ if (progressiveActionResult?.kind !== "form-state") return null;
905
+ if ("actionError" in progressiveActionResult && middlewareContext.status === null && progressiveActionHttpFallbackStatus(progressiveActionResult.actionError) === null) middlewareContext.status = 500;
906
+ return progressiveActionResult;
907
+ };
908
+ if (preActionMatchIsFinal) {
909
+ progressiveActionHandled = true;
910
+ const progressiveActionResult = await handleProgressiveAction(renderedPreActionMatch, preActionMatch);
911
+ if (progressiveActionResult instanceof Response) return progressiveActionResult;
912
+ progressiveActionFormState = progressiveActionResult;
913
+ }
914
+ if (isServerActionRequest && preActionMatchIsFinal) {
915
+ serverActionHandled = true;
916
+ const serverActionResponse = await handleServerAction(renderedPreActionMatch, preActionRoutePathname);
917
+ if (serverActionResponse) return serverActionResponse;
914
918
  }
915
- const serverActionResponse = filesystemRouteEligible && isPostRequest && actionId && options.handleServerActionRequest ? await options.handleServerActionRequest({
916
- actionId,
917
- cleanPathname,
918
- contentType,
919
- interceptionContext: interceptionSourceContext,
920
- isRscRequest,
921
- middlewareContext,
922
- mountedSlotsHeader,
923
- request,
924
- scriptNonce,
925
- routeMatch: renderedPreActionMatch,
926
- routePathname: preActionRoutePathname,
927
- dispatchRedirectTargetRequest: dispatchInternalRequest,
928
- sourceConfigHeaders,
929
- searchParams: getResolvedSearchParams()
930
- }) : null;
931
- if (serverActionResponse) return serverActionResponse;
932
- if (filesystemRouteEligible && isPostRequest && actionId && !options.handleServerActionRequest) return createMissingServerActionResponse(options, actionId);
933
919
  let match = preActionMatch;
934
920
  const renderPagesForMatchKind = async (matchKind) => {
935
921
  if (!filesystemRouteEligible) return null;
@@ -978,7 +964,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
978
964
  if (!responseStageHasContentLength) response.headers.delete("Content-Length");
979
965
  return response;
980
966
  } : void 0;
981
- const response = !isInterceptionMatch && (match === null || match.route.isDynamic) ? await runOutsideWorkStoreScope(() => options.renderPagesFallback?.({
967
+ const response = !isFinalRouteMatch && (match === null || match.route.isDynamic) ? await runOutsideWorkStoreScope(() => options.renderPagesFallback?.({
982
968
  appRouteMatch: match ?? null,
983
969
  allowRscDocumentFallback: didMiddlewareRewritePathname || allowInternalRscDocumentFallback,
984
970
  dispatchPagesResponseStage,
@@ -1012,7 +998,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
1012
998
  options.clearRequestContext();
1013
999
  return staticPagesFallbackResponse;
1014
1000
  }
1015
- if (!isInterceptionMatch && !resolvedLateRewritesForAction && (!match || match.route.isDynamic)) for (const rewrite of options.configRewrites.afterFiles) {
1001
+ if (!isFinalRouteMatch && (!match || match.route.isDynamic)) for (const rewrite of options.configRewrites.afterFiles) {
1016
1002
  const afterFilesRewrite = await applyRewrite({
1017
1003
  basePathState: currentBasePathState(),
1018
1004
  clearRequestContext: options.clearRequestContext,
@@ -1032,14 +1018,16 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
1032
1018
  cleanPathname = pathnameForResolvedUrl(resolvedUrl);
1033
1019
  cleanPathnameIsRequestPathname = false;
1034
1020
  invalidateInterceptionCacheProof();
1035
- filesystemRouteEligible = true;
1036
1021
  resolvedPathnameHasBasePath = !options.basePath || rewrite.basePath !== false;
1022
+ filesystemRouteEligible = resolvedPathnameHasBasePath;
1037
1023
  const claimedRscCacheBustingRedirect = await validateClaimedOutsideBasePathRsc();
1038
1024
  if (claimedRscCacheBustingRedirect) return claimedRscCacheBustingRedirect;
1039
1025
  const rewrittenImageEndpointResponse = serveImageEndpointIfMatched();
1040
1026
  if (rewrittenImageEndpointResponse) return rewrittenImageEndpointResponse;
1041
1027
  const rewrittenMetadataResponse = await renderMetadataRouteIfMatched();
1042
1028
  if (rewrittenMetadataResponse) return composeResponseStageResponse(rewrittenMetadataResponse);
1029
+ const rewrittenPublicFileResponse = servePublicFileIfMatched();
1030
+ if (rewrittenPublicFileResponse) return rewrittenPublicFileResponse;
1043
1031
  match = matchCleanPathname();
1044
1032
  const rewrittenStaticPagesResponse = await renderPagesForMatchKind("static");
1045
1033
  if (rewrittenStaticPagesResponse) {
@@ -1058,7 +1046,7 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
1058
1046
  options.clearRequestContext();
1059
1047
  return dynamicPagesFallbackResponse;
1060
1048
  }
1061
- if (!resolvedLateRewritesForAction && !match) for (const rewrite of options.configRewrites.fallback) {
1049
+ if (!match) for (const rewrite of options.configRewrites.fallback) {
1062
1050
  const fallbackRewrite = await applyRewrite({
1063
1051
  basePathState: currentBasePathState(),
1064
1052
  clearRequestContext: options.clearRequestContext,
@@ -1078,14 +1066,16 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
1078
1066
  cleanPathname = pathnameForResolvedUrl(resolvedUrl);
1079
1067
  cleanPathnameIsRequestPathname = false;
1080
1068
  invalidateInterceptionCacheProof();
1081
- filesystemRouteEligible = true;
1082
1069
  resolvedPathnameHasBasePath = !options.basePath || rewrite.basePath !== false;
1070
+ filesystemRouteEligible = resolvedPathnameHasBasePath;
1083
1071
  const claimedRscCacheBustingRedirect = await validateClaimedOutsideBasePathRsc();
1084
1072
  if (claimedRscCacheBustingRedirect) return claimedRscCacheBustingRedirect;
1085
1073
  const rewrittenImageEndpointResponse = serveImageEndpointIfMatched();
1086
1074
  if (rewrittenImageEndpointResponse) return rewrittenImageEndpointResponse;
1087
1075
  const rewrittenMetadataResponse = await renderMetadataRouteIfMatched();
1088
1076
  if (rewrittenMetadataResponse) return composeResponseStageResponse(rewrittenMetadataResponse);
1077
+ const rewrittenPublicFileResponse = servePublicFileIfMatched();
1078
+ if (rewrittenPublicFileResponse) return rewrittenPublicFileResponse;
1089
1079
  match = matchCleanPathname();
1090
1080
  const rewrittenStaticPagesResponse = await renderPagesForMatchKind("static");
1091
1081
  if (rewrittenStaticPagesResponse) {
@@ -1140,6 +1130,18 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
1140
1130
  }
1141
1131
  return buildNextDataNotFoundResponse();
1142
1132
  }
1133
+ if (isProgressiveActionRequest && !progressiveActionHandled || isServerActionRequest && !serverActionHandled) {
1134
+ const finalRouteMatch = renderedRouteMatch(match);
1135
+ setRootParams(finalRouteMatch ? pickRootParams(finalRouteMatch.params, finalRouteMatch.route.rootParamNames) : null);
1136
+ if (isServerActionRequest) {
1137
+ const serverActionResponse = await handleServerAction(finalRouteMatch, cleanPathnameIsRequestPathname ? requestCleanPathname : cleanPathname);
1138
+ if (serverActionResponse) return serverActionResponse;
1139
+ } else {
1140
+ const progressiveActionResult = await handleProgressiveAction(finalRouteMatch, match);
1141
+ if (progressiveActionResult instanceof Response) return progressiveActionResult;
1142
+ progressiveActionFormState = progressiveActionResult;
1143
+ }
1144
+ }
1143
1145
  if (!match) {
1144
1146
  if (process.env.NODE_ENV !== "production" && canonicalPathname === "/favicon.ico") {
1145
1147
  options.clearRequestContext();
@@ -1265,6 +1267,9 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
1265
1267
  searchParams: resolvedSearchParams
1266
1268
  });
1267
1269
  }
1270
+ const failedProgressiveActionResult = progressiveActionFormState && "actionError" in progressiveActionFormState ? progressiveActionFormState : null;
1271
+ const actionHttpFallbackStatus = failedProgressiveActionResult ? progressiveActionHttpFallbackStatus(failedProgressiveActionResult.actionError) : null;
1272
+ const normalizedProgressiveActionError = actionHttpFallbackStatus === null || actionHttpFallbackStatus === 404 ? failedProgressiveActionResult?.actionError : { digest: "NEXT_NOT_FOUND" };
1268
1273
  const pageResponse = withStoredSpecialErrorStatus(matchedResponseStage ? await matchedResponseStage(responseStageRequest(), {
1269
1274
  kind: "app-page",
1270
1275
  buildId: options.buildId,
@@ -1296,14 +1301,14 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
1296
1301
  clientReuseManifest,
1297
1302
  cleanPathname,
1298
1303
  displayPathname: canonicalPathname,
1299
- formState,
1304
+ formState: progressiveActionFormState?.formState ?? null,
1300
1305
  actionError: normalizedProgressiveActionError,
1301
- actionFailed,
1306
+ actionFailed: failedProgressiveActionResult !== null,
1302
1307
  handlerStart,
1303
1308
  interceptionContext: interceptionSourceContext,
1304
1309
  interceptionId: interceptionIdHeader,
1305
1310
  interceptionPathname: cleanPathnameIsRequestPathname ? requestCleanPathname : cleanPathname,
1306
- isProgressiveActionRender,
1311
+ isProgressiveActionRender: progressiveActionFormState !== null,
1307
1312
  isRscRequest,
1308
1313
  middlewareContext,
1309
1314
  mountedSlotsHeader,
@@ -1324,9 +1329,13 @@ async function handleAppRscRequest(options, request, preMiddlewareRequestContext
1324
1329
  searchParams: resolvedSearchParams,
1325
1330
  renderMode
1326
1331
  }), isRscRequest && request.headers.get("Next-Router-Prefetch") === "1" && request.headers.has("Next-Router-Segment-Prefetch"));
1327
- if (isProgressiveActionRender) return applyProgressiveActionSideEffects(pageResponse, progressiveActionFormState);
1332
+ if (progressiveActionFormState) return applyProgressiveActionSideEffects(pageResponse, progressiveActionFormState);
1328
1333
  return pageResponse;
1329
1334
  }
1335
+ function progressiveActionHttpFallbackStatus(actionError) {
1336
+ const actionErrorDigest = actionError && typeof actionError === "object" && "digest" in actionError ? String(actionError.digest) : null;
1337
+ return actionErrorDigest ? parseNextHttpErrorDigest(actionErrorDigest)?.status ?? null : null;
1338
+ }
1330
1339
  /**
1331
1340
  * Append `Set-Cookie` headers and the `x-action-revalidated` marker captured
1332
1341
  * during progressive (no-JS) server action execution to the page render
@@ -1362,6 +1371,7 @@ function applyProgressiveActionSideEffects(response, sideEffects) {
1362
1371
  /** Build the request-only handler without retaining the response renderer graph. */
1363
1372
  function createAppRscRequestHandler(options) {
1364
1373
  const handleAppRscRequestLifecycle = async (rawRequest, ctx, allowInternalRscDocumentFallback = false, dispatchResponseStage, responseStageProbeMode = null, transportedPrerenderState) => {
1374
+ const rawRequestSignal = rawRequest.signal;
1365
1375
  const mwCtx = openForwardedMiddlewareContext(rawRequest.headers.get(VINEXT_MW_CTX_HEADER), options.devForwardedMiddlewareContextKey);
1366
1376
  const pagesDataUrl = new URL(rawRequest.url);
1367
1377
  const pagesDataInScope = !options.basePath || hasBasePath(pagesDataUrl.pathname, options.basePath);
@@ -1396,6 +1406,7 @@ function createAppRscRequestHandler(options) {
1396
1406
  const requestContext = createRequestContext({
1397
1407
  headersContext,
1398
1408
  executionContext,
1409
+ requestSignal: executionContext?.requestSignal ?? rawRequestSignal,
1399
1410
  unstableCacheRevalidation: "background"
1400
1411
  });
1401
1412
  let interceptionResponseUncacheable = false;
@@ -1423,6 +1434,7 @@ function createAppRscRequestHandler(options) {
1423
1434
  basePath: options.basePath,
1424
1435
  configHeaders: options.configHeaders,
1425
1436
  i18nConfig: options.i18nConfig,
1437
+ restoreLocaleRootTrailingSlash: shouldRestoreLocaleRootTrailingSlash(stripRscSuffix(new URL(rawRequest.url).pathname), options),
1426
1438
  middlewareHeaders: middlewareContext.headers,
1427
1439
  recordCacheability: dispatchResponseStage === void 0,
1428
1440
  requestContext: preMiddlewareRequestContext
@@ -1443,7 +1455,7 @@ function createAppRscRequestHandler(options) {
1443
1455
  };
1444
1456
  const appRscHandler = async function appRscHandler(rawRequest, ctx, allowInternalRscDocumentFallback = false, dispatchResponseStage, responseStageProbeMode = null, transportedPrerenderState, detachedTrace = false) {
1445
1457
  options.registerCacheAdapters();
1446
- await options.ensureInstrumentation?.();
1458
+ await options.ensureInstrumentation?.(isExecutionContextLike(ctx) ? ctx : null);
1447
1459
  const traceUrl = new URL(rawRequest.url);
1448
1460
  return traceFrameworkRequest({
1449
1461
  callback: () => handleAppRscRequestLifecycle(rawRequest, ctx, allowInternalRscDocumentFallback, dispatchResponseStage, responseStageProbeMode, transportedPrerenderState),
@@ -11,6 +11,11 @@ type FinalizeAppRscResponseOptions = {
11
11
  * default-locale URLs (issue #1336, item 4).
12
12
  */
13
13
  i18nConfig: NextI18nConfig | null;
14
+ /**
15
+ * Whether the root keeps its trailing slash when the default locale is
16
+ * spliced in (`shouldRestoreLocaleRootTrailingSlash` on the raw request).
17
+ */
18
+ restoreLocaleRootTrailingSlash?: boolean;
14
19
  /**
15
20
  * Original pre-middleware request context.
16
21
  * Next.js evaluates config header has/missing conditions against the
@@ -42,4 +47,5 @@ export declare function applyAppRscConfigHeaders(headers: Headers, request: Requ
42
47
  * to redirects regardless.
43
48
  */
44
49
  export declare function finalizeAppRscResponse(response: Response, request: Request, options: FinalizeAppRscResponseOptions): Promise<Response>;
45
- //#endregion
50
+ //#endregion
51
+ export {};
@@ -32,7 +32,10 @@ async function applyAppRscConfigHeaders(headers, request, options) {
32
32
  let pathname = url.pathname;
33
33
  const hadBasePath = !options.basePath || hasBasePath(pathname, options.basePath);
34
34
  pathname = stripBasePath(pathname, options.basePath);
35
- const matchPathname = options.i18nConfig ? normalizeDefaultLocalePathname(pathname, options.i18nConfig, { hostname: url.hostname }) : pathname;
35
+ const matchPathname = options.i18nConfig ? normalizeDefaultLocalePathname(pathname, options.i18nConfig, {
36
+ hostname: url.hostname,
37
+ restoreRootTrailingSlash: options.restoreLocaleRootTrailingSlash
38
+ }) : pathname;
36
39
  const { applyConfigHeadersToResponse } = await import("./config-headers.js");
37
40
  applyConfigHeadersToResponse(headers, {
38
41
  configHeaders: options.configHeaders,
@@ -71,9 +71,10 @@ function rematchAppWorkerResponseStageRoute(options, normalized, props) {
71
71
  async function renderAppWorkerResponseStage(options, rawRequest, ctx, props, stageOptions) {
72
72
  if (props.protocolVersion !== 11 || props.buildId !== options.buildId) return new Response("Incompatible vinext App response stage", { status: 409 });
73
73
  if (props.kind === "app-full-request") return new Response("Invalid vinext App response stage", { status: 400 });
74
+ const rawRequestSignal = rawRequest.signal;
74
75
  options.registerCacheAdapters();
75
- await options.ensureInstrumentation?.();
76
76
  const executionContext = isExecutionContextLike(ctx) ? ctx : getRequestExecutionContext() ?? null;
77
+ await options.ensureInstrumentation?.(executionContext);
77
78
  const filteredHeaders = executionContext?.isInternalPagesRevalidation ? new Headers(rawRequest.headers) : filterInternalHeaders(rawRequest.headers);
78
79
  filteredHeaders.delete(VINEXT_REVALIDATE_HOST_HEADER);
79
80
  const request = cloneRequestWithHeaders(rawRequest, filteredHeaders);
@@ -103,6 +104,7 @@ async function renderAppWorkerResponseStage(options, rawRequest, ctx, props, sta
103
104
  const requestContext = createRequestContext({
104
105
  headersContext,
105
106
  executionContext,
107
+ requestSignal: executionContext?.requestSignal ?? rawRequestSignal,
106
108
  unstableCacheRevalidation: "background"
107
109
  });
108
110
  const middlewareContext = {