vinext 1.0.0-beta.3 → 1.0.0-beta.5

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 (436) hide show
  1. package/README.md +44 -3
  2. package/dist/build/client-build-config.d.ts +0 -1
  3. package/dist/build/css-url-assets.d.ts +0 -1
  4. package/dist/build/google-fonts/build-url.d.ts +5 -2
  5. package/dist/build/google-fonts/font-metadata.d.ts +7 -3
  6. package/dist/build/google-fonts/get-axes.d.ts +0 -1
  7. package/dist/build/layout-classification.d.ts +7 -4
  8. package/dist/build/next-client-runtime-manifests.d.ts +0 -1
  9. package/dist/build/next-client-runtime-manifests.js +2 -19
  10. package/dist/build/nitro-route-rules.d.ts +0 -1
  11. package/dist/build/pages-client-assets-module.d.ts +0 -1
  12. package/dist/build/precompress.d.ts +7 -2
  13. package/dist/build/precompress.js +42 -8
  14. package/dist/build/prerender-paths.d.ts +2 -2
  15. package/dist/build/prerender-server-entry.d.ts +1 -1
  16. package/dist/build/prerender-server-pool.d.ts +4 -2
  17. package/dist/build/prerender.d.ts +36 -32
  18. package/dist/build/prerender.js +18 -3
  19. package/dist/build/public-dir-conflict.d.ts +14 -0
  20. package/dist/build/public-dir-conflict.js +25 -0
  21. package/dist/build/report.d.ts +2 -2
  22. package/dist/build/route-classification-injector.d.ts +0 -1
  23. package/dist/build/route-classification-manifest.d.ts +5 -3
  24. package/dist/build/run-prerender.d.ts +3 -2
  25. package/dist/build/static-export.d.ts +23 -12
  26. package/dist/cache/cache-adapters-virtual.d.ts +5 -2
  27. package/dist/check.js +4 -4
  28. package/dist/cli-args.d.ts +2 -1
  29. package/dist/cli-args.js +10 -0
  30. package/dist/cli-dev-config.d.ts +0 -1
  31. package/dist/cli.d.ts +1 -1
  32. package/dist/cli.js +14 -8
  33. package/dist/client/client-rewrite-matcher.d.ts +12 -0
  34. package/dist/client/client-rewrite-matcher.js +20 -0
  35. package/dist/client/client-rewrites.d.ts +31 -0
  36. package/dist/client/client-rewrites.js +41 -0
  37. package/dist/client/dev-error-overlay.d.ts +0 -1
  38. package/dist/client/empty-module.d.ts +1 -1
  39. package/dist/client/index.d.ts +2 -0
  40. package/dist/client/index.js +2 -0
  41. package/dist/client/instrumentation-client-state.d.ts +0 -1
  42. package/dist/client/navigation-runtime.d.ts +12 -1
  43. package/dist/client/navigation-runtime.js +6 -2
  44. package/dist/client/pages-router-link-navigation.d.ts +3 -21
  45. package/dist/client/react-instance-bootstrap.d.ts +1 -0
  46. package/dist/client/react-instance-bootstrap.js +7 -0
  47. package/dist/client/react-instance.d.ts +13 -0
  48. package/dist/client/react-instance.js +20 -0
  49. package/dist/client/vinext-next-data.d.ts +11 -6
  50. package/dist/client/window-next.d.ts +5 -2
  51. package/dist/config/config-matchers.d.ts +3 -5
  52. package/dist/config/config-matchers.js +7 -6
  53. package/dist/config/dotenv.d.ts +4 -9
  54. package/dist/config/dotenv.js +30 -22
  55. package/dist/config/next-config.d.ts +113 -52
  56. package/dist/config/next-config.js +6 -0
  57. package/dist/config/prerender.d.ts +0 -1
  58. package/dist/entries/app-browser-entry.d.ts +0 -1
  59. package/dist/entries/app-browser-entry.js +7 -3
  60. package/dist/entries/app-rsc-entry.d.ts +30 -16
  61. package/dist/entries/app-rsc-entry.js +40 -12
  62. package/dist/entries/app-rsc-manifest.d.ts +0 -1
  63. package/dist/entries/app-rsc-manifest.js +1 -0
  64. package/dist/entries/pages-client-entry.d.ts +0 -1
  65. package/dist/entries/pages-client-entry.js +7 -2
  66. package/dist/entries/pages-server-entry.d.ts +1 -2
  67. package/dist/entries/pages-server-entry.js +25 -6
  68. package/dist/image/image-adapters-virtual.d.ts +4 -2
  69. package/dist/index.d.ts +0 -1
  70. package/dist/index.js +257 -75
  71. package/dist/init-cloudflare.d.ts +0 -1
  72. package/dist/init-platform.d.ts +0 -1
  73. package/dist/init.d.ts +40 -20
  74. package/dist/plugins/ast-scope.d.ts +0 -1
  75. package/dist/plugins/async-hooks-stub.d.ts +0 -1
  76. package/dist/plugins/client-reference-dedup.d.ts +0 -1
  77. package/dist/plugins/client-reference-dedup.js +7 -5
  78. package/dist/plugins/css-data-url.d.ts +0 -1
  79. package/dist/plugins/css-module-imports.d.ts +0 -1
  80. package/dist/plugins/dynamic-preload-metadata.d.ts +0 -1
  81. package/dist/plugins/extensionless-dynamic-import.d.ts +0 -1
  82. package/dist/plugins/extensionless-dynamic-import.js +352 -13
  83. package/dist/plugins/fonts.d.ts +0 -1
  84. package/dist/plugins/ignore-dynamic-requests.d.ts +0 -1
  85. package/dist/plugins/ignore-dynamic-requests.js +28 -4
  86. package/dist/plugins/import-meta-url.d.ts +0 -1
  87. package/dist/plugins/instrumentation-client.d.ts +0 -1
  88. package/dist/plugins/middleware-server-only.d.ts +0 -1
  89. package/dist/plugins/og-asset-ownership.d.ts +0 -1
  90. package/dist/plugins/og-assets.d.ts +0 -1
  91. package/dist/plugins/optimize-imports.d.ts +0 -1
  92. package/dist/plugins/remove-console.d.ts +0 -1
  93. package/dist/plugins/require-context.d.ts +0 -1
  94. package/dist/plugins/require-context.js +143 -26
  95. package/dist/plugins/rsc-client-reference-loaders.d.ts +0 -1
  96. package/dist/plugins/rsc-reference-validation-normalizer.d.ts +0 -1
  97. package/dist/plugins/sass.d.ts +30 -2
  98. package/dist/plugins/sass.js +67 -5
  99. package/dist/plugins/server-externals-manifest.d.ts +0 -1
  100. package/dist/plugins/strip-server-exports.d.ts +0 -1
  101. package/dist/plugins/styled-jsx.d.ts +0 -1
  102. package/dist/plugins/wasm-module-import.d.ts +0 -1
  103. package/dist/routing/app-route-graph.d.ts +115 -56
  104. package/dist/routing/app-route-graph.js +2 -1
  105. package/dist/routing/app-router.d.ts +0 -1
  106. package/dist/routing/pages-router.d.ts +9 -5
  107. package/dist/routing/route-matching.d.ts +0 -1
  108. package/dist/routing/utils.d.ts +1 -23
  109. package/dist/routing/utils.js +1 -30
  110. package/dist/server/accept-encoding.d.ts +0 -1
  111. package/dist/server/api-handler.d.ts +0 -1
  112. package/dist/server/api-handler.js +4 -3
  113. package/dist/server/app-bfcache-identity.d.ts +9 -10
  114. package/dist/server/app-bfcache-identity.js +27 -102
  115. package/dist/server/app-browser-action-result.d.ts +0 -1
  116. package/dist/server/app-browser-client-reuse-manifest.d.ts +0 -1
  117. package/dist/server/app-browser-entry.d.ts +1 -1
  118. package/dist/server/app-browser-entry.js +106 -66
  119. package/dist/server/app-browser-history-controller.d.ts +8 -5
  120. package/dist/server/app-browser-hydration.d.ts +0 -1
  121. package/dist/server/app-browser-interception-context.d.ts +0 -1
  122. package/dist/server/app-browser-mpa-navigation.d.ts +0 -1
  123. package/dist/server/app-browser-navigation-controller.d.ts +3 -6
  124. package/dist/server/app-browser-navigation-controller.js +29 -4
  125. package/dist/server/app-browser-popstate.d.ts +0 -1
  126. package/dist/server/app-browser-prefetch-response.d.ts +25 -0
  127. package/dist/server/app-browser-prefetch-response.js +54 -0
  128. package/dist/server/app-browser-server-action-client.d.ts +1 -1
  129. package/dist/server/app-browser-server-action-client.js +3 -2
  130. package/dist/server/app-browser-server-action-navigation.d.ts +0 -1
  131. package/dist/server/app-browser-state.d.ts +11 -5
  132. package/dist/server/app-browser-state.js +10 -6
  133. package/dist/server/app-browser-stream.d.ts +0 -1
  134. package/dist/server/app-browser-visible-commit.d.ts +1 -1
  135. package/dist/server/app-browser-visible-commit.js +6 -2
  136. package/dist/server/app-elements-wire.d.ts +16 -13
  137. package/dist/server/app-elements-wire.js +37 -10
  138. package/dist/server/app-elements.d.ts +2 -3
  139. package/dist/server/app-elements.js +2 -2
  140. package/dist/server/app-fallback-renderer.d.ts +8 -4
  141. package/dist/server/app-fallback-renderer.js +2 -1
  142. package/dist/server/app-history-state.d.ts +2 -2
  143. package/dist/server/app-history-state.js +1 -1
  144. package/dist/server/app-hook-warning-suppression.d.ts +0 -1
  145. package/dist/server/app-layout-param-observation.d.ts +0 -1
  146. package/dist/server/app-layout-param-observation.js +1 -1
  147. package/dist/server/app-middleware.d.ts +5 -1
  148. package/dist/server/app-middleware.js +96 -31
  149. package/dist/server/app-optimistic-routing.d.ts +1 -0
  150. package/dist/server/app-page-boundary-render.d.ts +8 -4
  151. package/dist/server/app-page-cache-finalizer.d.ts +2 -3
  152. package/dist/server/app-page-cache-finalizer.js +47 -17
  153. package/dist/server/app-page-cache-render.d.ts +2 -2
  154. package/dist/server/app-page-cache-render.js +2 -1
  155. package/dist/server/app-page-cache.d.ts +1 -3
  156. package/dist/server/app-page-cache.js +22 -11
  157. package/dist/server/app-page-dispatch.d.ts +12 -6
  158. package/dist/server/app-page-dispatch.js +14 -6
  159. package/dist/server/app-page-element-builder.d.ts +63 -20
  160. package/dist/server/app-page-element-builder.js +114 -43
  161. package/dist/server/app-page-execution.d.ts +12 -5
  162. package/dist/server/app-page-execution.js +1 -1
  163. package/dist/server/app-page-head.d.ts +2 -2
  164. package/dist/server/app-page-http-access-fallback-metadata.d.ts +2 -2
  165. package/dist/server/app-page-params.d.ts +0 -1
  166. package/dist/server/app-page-ppr-runtime.d.ts +0 -1
  167. package/dist/server/app-page-probe.d.ts +4 -3
  168. package/dist/server/app-page-probe.js +1 -1
  169. package/dist/server/app-page-render-identity.d.ts +1 -0
  170. package/dist/server/app-page-render-observation.d.ts +0 -1
  171. package/dist/server/app-page-render.d.ts +7 -5
  172. package/dist/server/app-page-render.js +59 -24
  173. package/dist/server/app-page-request.d.ts +3 -2
  174. package/dist/server/app-page-request.js +6 -46
  175. package/dist/server/app-page-response.d.ts +15 -3
  176. package/dist/server/app-page-response.js +21 -3
  177. package/dist/server/app-page-route-wiring.d.ts +30 -7
  178. package/dist/server/app-page-route-wiring.js +163 -63
  179. package/dist/server/app-page-search-params-observation.d.ts +0 -1
  180. package/dist/server/app-page-segment-plan.d.ts +56 -0
  181. package/dist/server/app-page-segment-plan.js +177 -0
  182. package/dist/server/app-page-segment-state.d.ts +18 -2
  183. package/dist/server/app-page-segment-state.js +23 -4
  184. package/dist/server/app-page-stream.d.ts +19 -10
  185. package/dist/server/app-pages-bridge.d.ts +2 -2
  186. package/dist/server/app-pages-bridge.js +14 -2
  187. package/dist/server/app-post-middleware-context.d.ts +0 -1
  188. package/dist/server/app-ppr-fallback-shell-render.d.ts +0 -1
  189. package/dist/server/app-prerender-endpoints.d.ts +0 -1
  190. package/dist/server/app-prerender-static-params.d.ts +0 -1
  191. package/dist/server/app-render-dependency.d.ts +11 -4
  192. package/dist/server/app-render-dependency.js +59 -9
  193. package/dist/server/app-request-context.d.ts +1 -0
  194. package/dist/server/app-route-handler-cache.d.ts +2 -2
  195. package/dist/server/app-route-handler-cache.js +5 -1
  196. package/dist/server/app-route-handler-dispatch.d.ts +0 -1
  197. package/dist/server/app-route-handler-execution.d.ts +2 -2
  198. package/dist/server/app-route-handler-execution.js +5 -1
  199. package/dist/server/app-route-handler-policy.d.ts +0 -1
  200. package/dist/server/app-route-handler-response.d.ts +0 -1
  201. package/dist/server/app-route-handler-runtime.d.ts +0 -1
  202. package/dist/server/app-route-handler-runtime.js +1 -2
  203. package/dist/server/app-route-module-loader.d.ts +32 -6
  204. package/dist/server/app-route-module-loader.js +73 -3
  205. package/dist/server/app-router-entry.d.ts +0 -1
  206. package/dist/server/app-router-entry.js +2 -2
  207. package/dist/server/app-rsc-cache-busting.d.ts +7 -1
  208. package/dist/server/app-rsc-cache-busting.js +6 -0
  209. package/dist/server/app-rsc-handler.d.ts +9 -2
  210. package/dist/server/app-rsc-handler.js +173 -41
  211. package/dist/server/app-rsc-redirect-flight.d.ts +0 -1
  212. package/dist/server/app-rsc-render-mode.d.ts +3 -2
  213. package/dist/server/app-rsc-render-mode.js +4 -1
  214. package/dist/server/app-rsc-request-normalization.d.ts +19 -10
  215. package/dist/server/app-rsc-request-normalization.js +65 -4
  216. package/dist/server/app-rsc-response-finalizer.d.ts +5 -2
  217. package/dist/server/app-rsc-response-finalizer.js +31 -18
  218. package/dist/server/app-rsc-route-matching.d.ts +6 -1
  219. package/dist/server/app-rsc-route-matching.js +47 -2
  220. package/dist/server/app-segment-config.d.ts +0 -1
  221. package/dist/server/app-server-action-execution.d.ts +42 -9
  222. package/dist/server/app-server-action-execution.js +189 -111
  223. package/dist/server/app-ssr-entry.d.ts +5 -3
  224. package/dist/server/app-ssr-entry.js +4 -5
  225. package/dist/server/app-ssr-router-instance.d.ts +0 -1
  226. package/dist/server/app-ssr-stream.d.ts +7 -1
  227. package/dist/server/app-ssr-stream.js +2 -1
  228. package/dist/server/app-static-generation.d.ts +0 -1
  229. package/dist/server/app-visited-response-cache.d.ts +7 -2
  230. package/dist/server/app-visited-response-cache.js +49 -1
  231. package/dist/server/before-interactive-head.d.ts +0 -1
  232. package/dist/server/before-interactive-head.js +2 -0
  233. package/dist/server/bfcache-identity.d.ts +45 -0
  234. package/dist/server/bfcache-identity.js +52 -0
  235. package/dist/server/cache-control.d.ts +3 -3
  236. package/dist/server/cache-control.js +3 -2
  237. package/dist/server/cache-proof.d.ts +0 -1
  238. package/dist/server/client-reuse-manifest.d.ts +0 -1
  239. package/dist/server/config-headers.d.ts +2 -2
  240. package/dist/server/csp.d.ts +0 -1
  241. package/dist/server/default-global-error-module.d.ts +0 -1
  242. package/dist/server/default-global-not-found-module.d.ts +0 -1
  243. package/dist/server/default-not-found-module.d.ts +0 -1
  244. package/dist/server/dev-lockfile.d.ts +21 -9
  245. package/dist/server/dev-module-runner.d.ts +0 -1
  246. package/dist/server/dev-route-files.d.ts +0 -1
  247. package/dist/server/dev-server.d.ts +4 -8
  248. package/dist/server/dev-server.js +86 -131
  249. package/dist/server/dev-stack-sourcemap.d.ts +0 -1
  250. package/dist/server/document-initial-head.d.ts +12 -2
  251. package/dist/server/document-initial-head.js +17 -2
  252. package/dist/server/edge-api-runtime.d.ts +10 -1
  253. package/dist/server/edge-api-runtime.js +29 -1
  254. package/dist/server/file-based-metadata.d.ts +0 -1
  255. package/dist/server/headers.d.ts +17 -2
  256. package/dist/server/headers.js +17 -1
  257. package/dist/server/http-conditional.d.ts +22 -0
  258. package/dist/server/http-conditional.js +117 -0
  259. package/dist/server/http-date.d.ts +5 -0
  260. package/dist/server/http-date.js +73 -0
  261. package/dist/server/http-error-responses.d.ts +2 -1
  262. package/dist/server/http-error-responses.js +14 -2
  263. package/dist/server/http-range.d.ts +25 -0
  264. package/dist/server/http-range.js +67 -0
  265. package/dist/server/image-optimization.d.ts +14 -6
  266. package/dist/server/image-optimization.js +0 -1
  267. package/dist/server/instrumentation.d.ts +7 -4
  268. package/dist/server/isr-cache.d.ts +28 -6
  269. package/dist/server/isr-cache.js +19 -13
  270. package/dist/server/isr-decision.d.ts +6 -4
  271. package/dist/server/metadata-route-build-data.d.ts +0 -1
  272. package/dist/server/metadata-route-response.d.ts +0 -1
  273. package/dist/server/metadata-route-response.js +7 -6
  274. package/dist/server/metadata-routes.d.ts +34 -16
  275. package/dist/server/middleware-matcher-pattern.d.ts +0 -1
  276. package/dist/server/middleware-matcher.d.ts +8 -3
  277. package/dist/server/middleware-matcher.js +23 -18
  278. package/dist/server/middleware-runtime.d.ts +6 -1
  279. package/dist/server/middleware-runtime.js +91 -28
  280. package/dist/server/middleware.d.ts +0 -1
  281. package/dist/server/navigation-planner.d.ts +1 -1
  282. package/dist/server/next-error-digest.d.ts +0 -1
  283. package/dist/server/pages-api-route.d.ts +2 -1
  284. package/dist/server/pages-api-route.js +32 -7
  285. package/dist/server/pages-asset-tags.d.ts +3 -1
  286. package/dist/server/pages-asset-tags.js +6 -4
  287. package/dist/server/pages-data-route.d.ts +14 -6
  288. package/dist/server/pages-data-route.js +19 -10
  289. package/dist/server/pages-dev-hydration.js +3 -0
  290. package/dist/server/pages-dev-stylesheets.d.ts +10 -0
  291. package/dist/server/pages-dev-stylesheets.js +150 -0
  292. package/dist/server/pages-document-asset-props.d.ts +26 -0
  293. package/dist/server/pages-document-asset-props.js +69 -0
  294. package/dist/server/pages-document-initial-props.d.ts +10 -6
  295. package/dist/server/pages-get-initial-props.d.ts +2 -2
  296. package/dist/server/pages-i18n.d.ts +1 -7
  297. package/dist/server/pages-node-compat.d.ts +11 -2
  298. package/dist/server/pages-node-compat.js +52 -5
  299. package/dist/server/pages-page-data.d.ts +21 -9
  300. package/dist/server/pages-page-data.js +109 -30
  301. package/dist/server/pages-page-handler.d.ts +70 -32
  302. package/dist/server/pages-page-handler.js +25 -6
  303. package/dist/server/pages-page-response.d.ts +9 -13
  304. package/dist/server/pages-page-response.js +25 -26
  305. package/dist/server/pages-readiness.d.ts +0 -1
  306. package/dist/server/pages-request-pipeline.d.ts +20 -6
  307. package/dist/server/pages-request-pipeline.js +40 -20
  308. package/dist/server/pages-revalidate.d.ts +0 -1
  309. package/dist/server/pages-revalidate.js +1 -1
  310. package/dist/server/pages-router-entry.js +14 -10
  311. package/dist/server/prerender-manifest.d.ts +7 -0
  312. package/dist/server/prod-server.d.ts +13 -7
  313. package/dist/server/prod-server.js +276 -83
  314. package/dist/server/proxy-trust.d.ts +0 -1
  315. package/dist/server/request-log.d.ts +7 -11
  316. package/dist/server/request-pipeline.d.ts +13 -4
  317. package/dist/server/request-pipeline.js +28 -20
  318. package/dist/server/revalidation-host.d.ts +0 -1
  319. package/dist/server/revalidation-host.js +1 -1
  320. package/dist/server/rsc-completion-metadata.d.ts +15 -0
  321. package/dist/server/rsc-completion-metadata.js +183 -0
  322. package/dist/server/seed-cache.d.ts +2 -1
  323. package/dist/server/seed-cache.js +8 -5
  324. package/dist/server/skip-cache-proof.d.ts +0 -1
  325. package/dist/server/static-file-cache.d.ts +23 -9
  326. package/dist/server/static-file-cache.js +47 -23
  327. package/dist/server/static-layout-client-reuse-proof.d.ts +0 -1
  328. package/dist/server/worker-revalidation-context.d.ts +0 -1
  329. package/dist/server/worker-revalidation-context.js +1 -0
  330. package/dist/server/worker-utils.d.ts +3 -1
  331. package/dist/server/worker-utils.js +11 -2
  332. package/dist/shims/app-router-scroll-state.d.ts +2 -1
  333. package/dist/shims/app-router-scroll-state.js +7 -2
  334. package/dist/shims/app-router-scroll.d.ts +2 -8
  335. package/dist/shims/app.d.ts +1 -5
  336. package/dist/shims/before-interactive-context.d.ts +5 -3
  337. package/dist/shims/cache-handler.d.ts +6 -1
  338. package/dist/shims/cache-handler.js +4 -2
  339. package/dist/shims/cache-request-state.d.ts +12 -1
  340. package/dist/shims/cache-request-state.js +22 -1
  341. package/dist/shims/cache-runtime.d.ts +9 -5
  342. package/dist/shims/cache-runtime.js +16 -6
  343. package/dist/shims/cache.d.ts +2 -3
  344. package/dist/shims/cache.js +2 -2
  345. package/dist/shims/cdn-cache.d.ts +0 -1
  346. package/dist/shims/client-locale.d.ts +1 -6
  347. package/dist/shims/client-only.d.ts +1 -1
  348. package/dist/shims/compat-router.d.ts +0 -1
  349. package/dist/shims/constants.d.ts +1 -1
  350. package/dist/shims/default-global-error.d.ts +1 -4
  351. package/dist/shims/default-not-found.d.ts +0 -1
  352. package/dist/shims/document.d.ts +0 -1
  353. package/dist/shims/document.js +17 -3
  354. package/dist/shims/dynamic-preload-chunks.d.ts +0 -1
  355. package/dist/shims/dynamic.d.ts +0 -1
  356. package/dist/shims/error-boundary-navigation.d.ts +0 -1
  357. package/dist/shims/error-boundary.d.ts +7 -32
  358. package/dist/shims/error.d.ts +1 -6
  359. package/dist/shims/fetch-cache.js +112 -63
  360. package/dist/shims/font-google-base.d.ts +0 -1
  361. package/dist/shims/font-local.d.ts +0 -1
  362. package/dist/shims/form.d.ts +5 -3
  363. package/dist/shims/hash-scroll.d.ts +1 -1
  364. package/dist/shims/hash-scroll.js +2 -1
  365. package/dist/shims/head-state.d.ts +0 -1
  366. package/dist/shims/head.d.ts +1 -4
  367. package/dist/shims/headers.d.ts +2 -2
  368. package/dist/shims/headers.js +1 -1
  369. package/dist/shims/i18n-context.d.ts +0 -1
  370. package/dist/shims/i18n-state.d.ts +0 -1
  371. package/dist/shims/image.d.ts +0 -1
  372. package/dist/shims/image.js +1 -2
  373. package/dist/shims/internal/als-registry.d.ts +31 -2
  374. package/dist/shims/internal/als-registry.js +50 -2
  375. package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +17 -2
  376. package/dist/shims/internal/app-prefetch-fetch-queue.js +69 -7
  377. package/dist/shims/internal/app-route-detection.d.ts +0 -1
  378. package/dist/shims/internal/app-route-prefetch-policy.d.ts +31 -0
  379. package/dist/shims/internal/app-route-prefetch-policy.js +57 -0
  380. package/dist/shims/internal/app-router-context.d.ts +0 -1
  381. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +1 -5
  382. package/dist/shims/internal/hybrid-client-route-owner.d.ts +0 -1
  383. package/dist/shims/internal/hybrid-client-route-owner.js +6 -8
  384. package/dist/shims/internal/interpolate-as.d.ts +3 -2
  385. package/dist/shims/internal/pages-data-target.d.ts +21 -10
  386. package/dist/shims/internal/pages-data-target.js +1 -1
  387. package/dist/shims/internal/pages-data-url.d.ts +3 -1
  388. package/dist/shims/internal/router-context.d.ts +0 -1
  389. package/dist/shims/internal/work-unit-async-storage.d.ts +4 -3
  390. package/dist/shims/internal/work-unit-async-storage.js +2 -0
  391. package/dist/shims/layout-segment-context.d.ts +2 -6
  392. package/dist/shims/legacy-image.d.ts +0 -1
  393. package/dist/shims/link.d.ts +29 -21
  394. package/dist/shims/link.js +52 -97
  395. package/dist/shims/metadata.d.ts +11 -25
  396. package/dist/shims/metadata.js +24 -32
  397. package/dist/shims/navigation-context-state.d.ts +0 -1
  398. package/dist/shims/navigation-state.d.ts +1 -0
  399. package/dist/shims/navigation.d.ts +54 -6
  400. package/dist/shims/navigation.js +325 -73
  401. package/dist/shims/navigation.react-server.d.ts +1 -0
  402. package/dist/shims/og.d.ts +0 -1
  403. package/dist/shims/request-context.d.ts +8 -3
  404. package/dist/shims/request-state-types.d.ts +1 -0
  405. package/dist/shims/router.d.ts +44 -23
  406. package/dist/shims/router.js +8 -7
  407. package/dist/shims/script-nonce-context.d.ts +0 -1
  408. package/dist/shims/script.d.ts +25 -13
  409. package/dist/shims/server-only.d.ts +1 -1
  410. package/dist/shims/server.d.ts +1 -3
  411. package/dist/shims/server.js +5 -6
  412. package/dist/shims/slot.d.ts +23 -11
  413. package/dist/shims/slot.js +103 -19
  414. package/dist/shims/streamed-icons.d.ts +7 -0
  415. package/dist/shims/streamed-icons.js +33 -0
  416. package/dist/shims/unified-request-context.d.ts +44 -4
  417. package/dist/shims/unified-request-context.js +56 -2
  418. package/dist/shims/use-merged-ref.d.ts +0 -1
  419. package/dist/shims/web-vitals.d.ts +0 -1
  420. package/dist/typegen.d.ts +1 -2
  421. package/dist/typegen.js +1 -1
  422. package/dist/utils/cache-control-metadata.d.ts +13 -1
  423. package/dist/utils/cache-control-metadata.js +17 -1
  424. package/dist/utils/client-build-manifest.d.ts +0 -1
  425. package/dist/utils/domain-locale.d.ts +1 -5
  426. package/dist/utils/html-limited-bots.js +1 -1
  427. package/dist/utils/middleware-request-headers.d.ts +17 -5
  428. package/dist/utils/middleware-request-headers.js +32 -23
  429. package/dist/utils/precompressed-variant.d.ts +9 -0
  430. package/dist/utils/precompressed-variant.js +15 -0
  431. package/dist/utils/project.d.ts +12 -7
  432. package/dist/utils/public-file-path.d.ts +5 -0
  433. package/dist/utils/public-file-path.js +12 -0
  434. package/dist/utils/public-routes.d.ts +1 -1
  435. package/dist/utils/public-routes.js +6 -5
  436. package/package.json +7 -3
@@ -8,6 +8,7 @@ import { PrivateCacheState } from "./cache-runtime.js";
8
8
  import { HeadState } from "./head-state.js";
9
9
  import { I18nState } from "./i18n-state.js";
10
10
  import { NavigationState } from "./navigation-state.js";
11
+ import "./request-state-types.js";
11
12
  //#region src/shims/unified-request-context.d.ts
12
13
  /**
13
14
  * Flat union of all per-request state previously spread across
@@ -17,14 +18,18 @@ import { NavigationState } from "./navigation-state.js";
17
18
  * Each field group is documented with its source shim module.
18
19
  */
19
20
  type UnifiedRequestContext = {
20
- /** Cloudflare Workers ExecutionContext, or null on Node.js dev. */executionContext: ExecutionContextLike | null; /** Per-request cache for cacheForRequest(). Keyed by factory function reference. */
21
- requestCache: WeakMap<(...args: any[]) => any, unknown>; /** Shared lifecycle state for work deferred until the response closes. */
21
+ /** Cloudflare Workers ExecutionContext, or null on Node.js dev. */
22
+ executionContext: ExecutionContextLike | null;
23
+ /** Per-request cache for cacheForRequest(). Keyed by factory function reference. */
24
+ requestCache: WeakMap<(...args: any[]) => any, unknown>;
25
+ /** Shared lifecycle state for work deferred until the response closes. */
22
26
  afterContext: AfterRequestContext;
23
27
  } & VinextHeadersShimState & I18nState & NavigationState & CacheState & PrivateCacheState & FetchCacheState & RouterState & HeadState & RootParamsState;
24
28
  type AfterRequestContext = {
25
29
  callbacks: Array<() => unknown>;
26
30
  responseClosed: boolean;
27
31
  pendingCallbacks: number;
32
+ pendingPromises: number;
28
33
  completion: Promise<void> | null;
29
34
  resolveCompletion: (() => void) | null;
30
35
  };
@@ -35,6 +40,8 @@ type AfterRequestContext = {
35
40
  declare function createRequestContext(opts?: Partial<UnifiedRequestContext>): UnifiedRequestContext;
36
41
  /** Queue a callback until response close, or start it immediately once closed. */
37
42
  declare function queueAfterCallback(ctx: UnifiedRequestContext, callback: () => unknown): void;
43
+ /** Track promise-form after() work that can register a callback before settling. */
44
+ declare function trackAfterPromise<T>(ctx: UnifiedRequestContext, promise: Promise<T>): Promise<T>;
38
45
  /** Bind a callback to every AsyncLocalStorage context active at registration. */
39
46
  declare function bindRequestContextSnapshot<T>(ctx: UnifiedRequestContext, callback: () => T): () => T;
40
47
  /**
@@ -42,7 +49,40 @@ declare function bindRequestContextSnapshot<T>(ctx: UnifiedRequestContext, callb
42
49
  * All queued callbacks start together, matching Next.js' unbounded PromiseQueue.
43
50
  */
44
51
  declare function closeAfterResponse(ctx: UnifiedRequestContext): Promise<void>;
45
- /** Wrap a response so deferred callbacks start on stream completion or cancellation. */
52
+ /**
53
+ * Whether this request has function-form `after()` work that still needs to
54
+ * observe the response body closing.
55
+ *
56
+ * Promise-form `after(promise)` is included because its continuation can
57
+ * register a function-form `after()` before the promise settles. Function-form
58
+ * work needs the body's close observed because its contract is "run once the
59
+ * response has been sent". `resolveCompletion` stays non-null for as long as
60
+ * any callback is queued or in flight, so checking it alongside the explicit
61
+ * counters keeps this correct on re-entry after callbacks have started.
62
+ */
63
+ declare function requiresResponseCloseTracking(ctx: UnifiedRequestContext): boolean;
64
+ /**
65
+ * Mark a response whose body vinext constructed from a fully in-memory string
66
+ * or byte array, as opposed to a body handed back by user code, which could
67
+ * still be producing. With no producer left, no `after()` call can originate
68
+ * from this body — the one signal that makes it safe for
69
+ * `closeAfterResponseWithBody()` to skip close tracking.
70
+ *
71
+ * Not set for a metadata route's `result instanceof Response` passthrough (a
72
+ * user `icon.tsx`/`opengraph-image.tsx` can return a streaming
73
+ * `ImageResponse`) or any handler-returned `new Response(stream)` — those
74
+ * bodies can still be producing and must keep close tracking.
75
+ */
76
+ declare function markFullyBufferedBody(response: Response): Response;
77
+ /** Preserve the internal buffered-body signal when response metadata is rebuilt. */
78
+ declare function preserveFullyBufferedBodyMetadata(source: Response, target: Response): Response;
79
+ /**
80
+ * Wrap a response so deferred `after()` callbacks start on stream completion
81
+ * or cancellation. Skipped only when the body is marked fully buffered (see
82
+ * `markFullyBufferedBody`) and nothing is currently registered — that lets
83
+ * the runtime send it with an accurate `Content-Length` instead of chunked
84
+ * transfer encoding.
85
+ */
46
86
  declare function closeAfterResponseWithBody(response: Response, ctx: UnifiedRequestContext): Response;
47
87
  /**
48
88
  * Run `fn` within a unified request context scope.
@@ -84,4 +124,4 @@ declare function getRequestContext(): UnifiedRequestContext;
84
124
  */
85
125
  declare function isInsideUnifiedScope(): boolean;
86
126
  //#endregion
87
- export { AfterRequestContext, UnifiedRequestContext, bindRequestContextSnapshot, closeAfterResponse, closeAfterResponseWithBody, createRequestContext, getRequestContext, isInsideUnifiedScope, queueAfterCallback, runWithRequestContext, runWithUnifiedStateMutation };
127
+ export { AfterRequestContext, UnifiedRequestContext, bindRequestContextSnapshot, closeAfterResponse, closeAfterResponseWithBody, createRequestContext, getRequestContext, isInsideUnifiedScope, markFullyBufferedBody, preserveFullyBufferedBodyMetadata, queueAfterCallback, requiresResponseCloseTracking, runWithRequestContext, runWithUnifiedStateMutation, trackAfterPromise };
@@ -47,6 +47,7 @@ function createRequestContext(opts) {
47
47
  callbacks: [],
48
48
  responseClosed: false,
49
49
  pendingCallbacks: 0,
50
+ pendingPromises: 0,
50
51
  completion: null,
51
52
  resolveCompletion: null
52
53
  },
@@ -92,6 +93,13 @@ function queueAfterCallback(ctx, callback) {
92
93
  if (ctx.afterContext.responseClosed) startAfterCallback(ctx, callback);
93
94
  else ctx.afterContext.callbacks.push(callback);
94
95
  }
96
+ /** Track promise-form after() work that can register a callback before settling. */
97
+ function trackAfterPromise(ctx, promise) {
98
+ ctx.afterContext.pendingPromises += 1;
99
+ return promise.finally(() => {
100
+ ctx.afterContext.pendingPromises -= 1;
101
+ });
102
+ }
95
103
  /** Bind a callback to every AsyncLocalStorage context active at registration. */
96
104
  function bindRequestContextSnapshot(ctx, callback) {
97
105
  const constructor = _als.constructor;
@@ -115,12 +123,57 @@ async function closeAfterResponse(ctx) {
115
123
  }
116
124
  return state.completion ?? Promise.resolve();
117
125
  }
118
- /** Wrap a response so deferred callbacks start on stream completion or cancellation. */
126
+ /**
127
+ * Whether this request has function-form `after()` work that still needs to
128
+ * observe the response body closing.
129
+ *
130
+ * Promise-form `after(promise)` is included because its continuation can
131
+ * register a function-form `after()` before the promise settles. Function-form
132
+ * work needs the body's close observed because its contract is "run once the
133
+ * response has been sent". `resolveCompletion` stays non-null for as long as
134
+ * any callback is queued or in flight, so checking it alongside the explicit
135
+ * counters keeps this correct on re-entry after callbacks have started.
136
+ */
137
+ function requiresResponseCloseTracking(ctx) {
138
+ const state = ctx.afterContext;
139
+ return state.callbacks.length > 0 || state.pendingCallbacks > 0 || state.pendingPromises > 0 || state.resolveCompletion !== null;
140
+ }
141
+ /**
142
+ * Mark a response whose body vinext constructed from a fully in-memory string
143
+ * or byte array, as opposed to a body handed back by user code, which could
144
+ * still be producing. With no producer left, no `after()` call can originate
145
+ * from this body — the one signal that makes it safe for
146
+ * `closeAfterResponseWithBody()` to skip close tracking.
147
+ *
148
+ * Not set for a metadata route's `result instanceof Response` passthrough (a
149
+ * user `icon.tsx`/`opengraph-image.tsx` can return a streaming
150
+ * `ImageResponse`) or any handler-returned `new Response(stream)` — those
151
+ * bodies can still be producing and must keep close tracking.
152
+ */
153
+ function markFullyBufferedBody(response) {
154
+ response.__vinextFullyBufferedBody = true;
155
+ return response;
156
+ }
157
+ function isFullyBufferedBody(response) {
158
+ return response.__vinextFullyBufferedBody === true;
159
+ }
160
+ /** Preserve the internal buffered-body signal when response metadata is rebuilt. */
161
+ function preserveFullyBufferedBodyMetadata(source, target) {
162
+ return isFullyBufferedBody(source) ? markFullyBufferedBody(target) : target;
163
+ }
164
+ /**
165
+ * Wrap a response so deferred `after()` callbacks start on stream completion
166
+ * or cancellation. Skipped only when the body is marked fully buffered (see
167
+ * `markFullyBufferedBody`) and nothing is currently registered — that lets
168
+ * the runtime send it with an accurate `Content-Length` instead of chunked
169
+ * transfer encoding.
170
+ */
119
171
  function closeAfterResponseWithBody(response, ctx) {
120
172
  if (!response.body) {
121
173
  queueMicrotask(() => void closeAfterResponse(ctx));
122
174
  return response;
123
175
  }
176
+ if (isFullyBufferedBody(response) && !requiresResponseCloseTracking(ctx)) return response;
124
177
  const passthrough = new TransformStream();
125
178
  response.body.pipeTo(passthrough.writable).then(() => void closeAfterResponse(ctx), () => void closeAfterResponse(ctx));
126
179
  const wrapped = new Response(passthrough.readable, {
@@ -129,6 +182,7 @@ function closeAfterResponseWithBody(response, ctx) {
129
182
  headers: response.headers
130
183
  });
131
184
  wrapped.__vinextStreamedHtmlResponse = response.__vinextStreamedHtmlResponse;
185
+ wrapped.__vinextStreamedApiResponse = response.__vinextStreamedApiResponse;
132
186
  return wrapped;
133
187
  }
134
188
  function runWithRequestContext(ctx, fn) {
@@ -167,4 +221,4 @@ function isInsideUnifiedScope() {
167
221
  return _als.getStore() != null;
168
222
  }
169
223
  //#endregion
170
- export { bindRequestContextSnapshot, closeAfterResponse, closeAfterResponseWithBody, createRequestContext, getRequestContext, isInsideUnifiedScope, queueAfterCallback, runWithRequestContext, runWithUnifiedStateMutation };
224
+ export { bindRequestContextSnapshot, closeAfterResponse, closeAfterResponseWithBody, createRequestContext, getRequestContext, isInsideUnifiedScope, markFullyBufferedBody, preserveFullyBufferedBodyMetadata, queueAfterCallback, requiresResponseCloseTracking, runWithRequestContext, runWithUnifiedStateMutation, trackAfterPromise };
@@ -1,5 +1,4 @@
1
1
  import { Ref } from "react";
2
-
3
2
  //#region src/shims/use-merged-ref.d.ts
4
3
  declare function useMergedRef<TElement>(refA: Ref<TElement>, refB: Ref<TElement>): Ref<TElement>;
5
4
  //#endregion
@@ -1,5 +1,4 @@
1
1
  import { MetricType } from "web-vitals";
2
-
3
2
  //#region src/shims/web-vitals.d.ts
4
3
  type WebVitalsMetric = MetricType;
5
4
  type ReportWebVitalsCallback = (metric: WebVitalsMetric) => void;
package/dist/typegen.d.ts CHANGED
@@ -9,7 +9,6 @@ type GenerateRouteTypesResult = {
9
9
  nextEnvPath: string;
10
10
  nextEnvStatus: "created" | "updated" | "unchanged";
11
11
  };
12
- declare function nextEnvFileContent(hasNext: boolean, hasAppDir: boolean, eol?: string): string;
13
12
  declare function generateRouteTypes(options: GenerateRouteTypesOptions): Promise<GenerateRouteTypesResult>;
14
13
  //#endregion
15
- export { GenerateRouteTypesResult, generateRouteTypes, nextEnvFileContent };
14
+ export { GenerateRouteTypesResult, generateRouteTypes };
package/dist/typegen.js CHANGED
@@ -285,4 +285,4 @@ function quote(value) {
285
285
  return JSON.stringify(value);
286
286
  }
287
287
  //#endregion
288
- export { generateRouteTypes, nextEnvFileContent };
288
+ export { generateRouteTypes };
@@ -1,5 +1,17 @@
1
1
  //#region src/utils/cache-control-metadata.d.ts
2
2
  declare function readCacheControlNumberField(ctx: Record<string, unknown> | undefined, field: string): number | undefined;
3
3
  declare function readCacheControlRevalidateField(ctx: Record<string, unknown> | undefined): number | false | undefined;
4
+ /**
5
+ * Client-reuse seconds from a resolved `cacheLife`. Shared by every emitter
6
+ * (ISR write, hit replay, prerender seed, done-script) so warm hits claim what
7
+ * the producing render claimed. Two rules: never synthesize `stale` from
8
+ * `revalidate`/`expire` (the `default` profile would license ~136y of reuse),
9
+ * and never clamp it by them (Next.js replays the stored value verbatim;
10
+ * `expire` is a serve-side ceiling, not a client bound). A literal `stale: 0`
11
+ * is still a real client claim; it must not be treated as absent.
12
+ */
13
+ declare function resolveClientStaleTimeSeconds(cacheLife: {
14
+ stale?: number;
15
+ } | null | undefined): number | undefined;
4
16
  //#endregion
5
- export { readCacheControlNumberField, readCacheControlRevalidateField };
17
+ export { readCacheControlNumberField, readCacheControlRevalidateField, resolveClientStaleTimeSeconds };
@@ -12,5 +12,21 @@ function readCacheControlRevalidateField(ctx) {
12
12
  const value = readRecordField(ctx, "cacheControl")?.revalidate ?? ctx?.revalidate;
13
13
  return typeof value === "number" || value === false ? value : void 0;
14
14
  }
15
+ function isFiniteNonNegative(value) {
16
+ return typeof value === "number" && Number.isFinite(value) && value >= 0;
17
+ }
18
+ /**
19
+ * Client-reuse seconds from a resolved `cacheLife`. Shared by every emitter
20
+ * (ISR write, hit replay, prerender seed, done-script) so warm hits claim what
21
+ * the producing render claimed. Two rules: never synthesize `stale` from
22
+ * `revalidate`/`expire` (the `default` profile would license ~136y of reuse),
23
+ * and never clamp it by them (Next.js replays the stored value verbatim;
24
+ * `expire` is a serve-side ceiling, not a client bound). A literal `stale: 0`
25
+ * is still a real client claim; it must not be treated as absent.
26
+ */
27
+ function resolveClientStaleTimeSeconds(cacheLife) {
28
+ const stale = cacheLife?.stale;
29
+ return isFiniteNonNegative(stale) ? stale : void 0;
30
+ }
15
31
  //#endregion
16
- export { readCacheControlNumberField, readCacheControlRevalidateField };
32
+ export { readCacheControlNumberField, readCacheControlRevalidateField, resolveClientStaleTimeSeconds };
@@ -1,5 +1,4 @@
1
1
  import { BuildManifestChunk } from "./lazy-chunks.js";
2
-
3
2
  //#region src/utils/client-build-manifest.d.ts
4
3
  type ClientBuildManifest = Record<string, BuildManifestChunk>;
5
4
  declare function readClientBuildManifest(manifestPath: string): ClientBuildManifest | undefined;
@@ -16,11 +16,7 @@ declare function normalizeDomainHostname(hostname: string | null | undefined): s
16
16
  declare function detectDomainLocale(domainItems?: readonly DomainLocale[], hostname?: string, detectedLocale?: string): DomainLocale | undefined;
17
17
  declare function addLocalePrefix(path: string, locale: string, localeDefault: string): string;
18
18
  declare function getLocalePathPrefix(path: string, locales: readonly string[] | undefined): string | undefined;
19
- declare function getDomainLocaleUrl(url: string, locale: string, {
20
- basePath,
21
- currentHostname,
22
- domainItems
23
- }: {
19
+ declare function getDomainLocaleUrl(url: string, locale: string, { basePath, currentHostname, domainItems }: {
24
20
  basePath?: string;
25
21
  currentHostname?: string | null;
26
22
  domainItems?: readonly DomainLocale[];
@@ -1,5 +1,5 @@
1
1
  //#region src/utils/html-limited-bots.ts
2
- const HTML_LIMITED_BOT_UA_RE_STRING = String.raw`[\w-]+-Google|Google-[\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|meta-externalagent|meta-externalfetcher|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight`;
2
+ const HTML_LIMITED_BOT_UA_RE_STRING = String.raw`(?:^|[^\w-])[\w-]+-Google|Google-[\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|meta-externalagent|meta-externalfetcher|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight`;
3
3
  const HEADLESS_BROWSER_BOT_UA_RE = /Googlebot(?!-)|Googlebot$/i;
4
4
  const htmlLimitedBotRegexCache = /* @__PURE__ */ new Map();
5
5
  function getHtmlLimitedBotRegex(htmlLimitedBots) {
@@ -1,11 +1,23 @@
1
1
  //#region src/utils/middleware-request-headers.d.ts
2
2
  type MiddlewareHeaderValue = string | string[];
3
3
  type MiddlewareHeaderSource = Headers | Record<string, MiddlewareHeaderValue>;
4
- type BuildRequestHeadersOptions = {
5
- preserveCredentialHeaders?: boolean;
6
- };
4
+ /**
5
+ * Return truthy forwarded values that Next.js does not consume through the
6
+ * override list. Its subsequent generic middleware-header merge exposes these
7
+ * under their literal protocol-header names on both the request and response.
8
+ */
9
+ declare function getUnconsumedMiddlewareRequestHeaders(source: MiddlewareHeaderSource): Map<string, string>;
7
10
  declare function encodeMiddlewareRequestHeaders(targetHeaders: Headers, requestHeaders: Headers): void;
8
- declare function buildRequestHeadersFromMiddlewareResponse(baseHeaders: Headers, middlewareHeaders: MiddlewareHeaderSource, options?: BuildRequestHeadersOptions): Headers | null;
11
+ /**
12
+ * A non-empty `x-middleware-override-headers` value lists the complete
13
+ * post-middleware header set, so any name absent from it was deleted by
14
+ * middleware. Never re-add absent headers from the base request — that would
15
+ * resurrect credentials the app explicitly stripped before an external
16
+ * rewrite. Next.js treats the empty value emitted for `new Headers()` as no
17
+ * override. Any unconsumed `x-middleware-request-*` values are subsequently
18
+ * copied to the request under their literal protocol-header names.
19
+ */
20
+ declare function buildRequestHeadersFromMiddlewareResponse(baseHeaders: Headers, middlewareHeaders: MiddlewareHeaderSource): Headers | null;
9
21
  declare function shouldKeepMiddlewareHeader(key: string): boolean;
10
22
  //#endregion
11
- export { buildRequestHeadersFromMiddlewareResponse, encodeMiddlewareRequestHeaders, shouldKeepMiddlewareHeader };
23
+ export { buildRequestHeadersFromMiddlewareResponse, encodeMiddlewareRequestHeaders, getUnconsumedMiddlewareRequestHeaders, shouldKeepMiddlewareHeader };
@@ -1,15 +1,12 @@
1
1
  import { MIDDLEWARE_OVERRIDE_HEADERS, MIDDLEWARE_REQUEST_HEADER_PREFIX } from "./protocol-headers.js";
2
2
  //#region src/utils/middleware-request-headers.ts
3
- const CREDENTIAL_REQUEST_HEADERS = ["authorization", "cookie"];
4
3
  function getMiddlewareHeaderValue(source, key) {
5
4
  if (source instanceof Headers) return source.get(key);
6
5
  const value = source[key];
7
6
  if (value === void 0) return null;
8
7
  return Array.isArray(value) ? value[0] ?? null : value;
9
8
  }
10
- function getOverrideHeaderNames(source) {
11
- const rawValue = getMiddlewareHeaderValue(source, MIDDLEWARE_OVERRIDE_HEADERS);
12
- if (rawValue === null) return null;
9
+ function parseOverrideHeaderNames(rawValue) {
13
10
  return rawValue.split(",").map((key) => key.trim()).filter(Boolean);
14
11
  }
15
12
  function getForwardedRequestHeaders(source) {
@@ -25,41 +22,53 @@ function getForwardedRequestHeaders(source) {
25
22
  }
26
23
  return forwardedHeaders;
27
24
  }
28
- function cloneHeaders(source) {
29
- const cloned = new Headers();
30
- for (const [key, value] of source.entries()) cloned.append(key, value);
31
- return cloned;
25
+ /**
26
+ * Return truthy forwarded values that Next.js does not consume through the
27
+ * override list. Its subsequent generic middleware-header merge exposes these
28
+ * under their literal protocol-header names on both the request and response.
29
+ */
30
+ function getUnconsumedMiddlewareRequestHeaders(source) {
31
+ const rawOverrideHeader = getMiddlewareHeaderValue(source, MIDDLEWARE_OVERRIDE_HEADERS);
32
+ const overriddenHeaders = rawOverrideHeader ? new Set(parseOverrideHeaderNames(rawOverrideHeader)) : null;
33
+ const unconsumedHeaders = /* @__PURE__ */ new Map();
34
+ for (const [key, value] of getForwardedRequestHeaders(source)) if (value && !overriddenHeaders?.has(key)) unconsumedHeaders.set(`${MIDDLEWARE_REQUEST_HEADER_PREFIX}${key}`, value);
35
+ return unconsumedHeaders;
32
36
  }
33
37
  function encodeMiddlewareRequestHeaders(targetHeaders, requestHeaders) {
34
38
  const overrideHeaderNames = [...requestHeaders.keys()];
35
39
  targetHeaders.set(MIDDLEWARE_OVERRIDE_HEADERS, overrideHeaderNames.join(","));
36
40
  for (const [key, value] of requestHeaders.entries()) targetHeaders.set(`${MIDDLEWARE_REQUEST_HEADER_PREFIX}${key}`, value);
37
41
  }
38
- function buildRequestHeadersFromMiddlewareResponse(baseHeaders, middlewareHeaders, options = {}) {
39
- const overrideHeaderNames = getOverrideHeaderNames(middlewareHeaders);
42
+ /**
43
+ * A non-empty `x-middleware-override-headers` value lists the complete
44
+ * post-middleware header set, so any name absent from it was deleted by
45
+ * middleware. Never re-add absent headers from the base request — that would
46
+ * resurrect credentials the app explicitly stripped before an external
47
+ * rewrite. Next.js treats the empty value emitted for `new Headers()` as no
48
+ * override. Any unconsumed `x-middleware-request-*` values are subsequently
49
+ * copied to the request under their literal protocol-header names.
50
+ */
51
+ function buildRequestHeadersFromMiddlewareResponse(baseHeaders, middlewareHeaders) {
40
52
  const forwardedHeaders = getForwardedRequestHeaders(middlewareHeaders);
41
- if (overrideHeaderNames === null && forwardedHeaders.size === 0) return null;
42
- const nextHeaders = overrideHeaderNames === null ? cloneHeaders(baseHeaders) : new Headers();
43
- if (overrideHeaderNames === null) {
44
- for (const [key, value] of forwardedHeaders) nextHeaders.set(key, value);
53
+ const unconsumedHeaders = getUnconsumedMiddlewareRequestHeaders(middlewareHeaders);
54
+ const rawOverrideHeader = getMiddlewareHeaderValue(middlewareHeaders, MIDDLEWARE_OVERRIDE_HEADERS);
55
+ if (!rawOverrideHeader) {
56
+ if (unconsumedHeaders.size === 0) return null;
57
+ const nextHeaders = new Headers(baseHeaders);
58
+ for (const [key, value] of unconsumedHeaders) nextHeaders.set(key, value);
45
59
  return nextHeaders;
46
60
  }
47
- if (options.preserveCredentialHeaders) {
48
- const overrideHeaderNameSet = new Set(overrideHeaderNames);
49
- for (const key of CREDENTIAL_REQUEST_HEADERS) {
50
- if (overrideHeaderNameSet.has(key)) continue;
51
- const value = baseHeaders.get(key);
52
- if (value !== null) nextHeaders.set(key, value);
53
- }
54
- }
61
+ const overrideHeaderNames = parseOverrideHeaderNames(rawOverrideHeader);
62
+ const nextHeaders = new Headers();
55
63
  for (const key of overrideHeaderNames) {
56
64
  const value = forwardedHeaders.get(key);
57
65
  if (value !== void 0) nextHeaders.set(key, value);
58
66
  }
67
+ for (const [key, value] of unconsumedHeaders) nextHeaders.set(key, value);
59
68
  return nextHeaders;
60
69
  }
61
70
  function shouldKeepMiddlewareHeader(key) {
62
71
  return key === "x-middleware-override-headers" || key === "x-middleware-cache" || key === "x-middleware-set-cookie" || key.startsWith("x-middleware-request-");
63
72
  }
64
73
  //#endregion
65
- export { buildRequestHeadersFromMiddlewareResponse, encodeMiddlewareRequestHeaders, shouldKeepMiddlewareHeader };
74
+ export { buildRequestHeadersFromMiddlewareResponse, encodeMiddlewareRequestHeaders, getUnconsumedMiddlewareRequestHeaders, shouldKeepMiddlewareHeader };
@@ -0,0 +1,9 @@
1
+ //#region src/utils/precompressed-variant.d.ts
2
+ type PrecompressedEncoding = "br" | "gzip" | "zstd";
3
+ /**
4
+ * Return whether an encoded representation reduces conservative HTTP/1 wire
5
+ * bytes after accounting for the response fields needed to negotiate it.
6
+ */
7
+ declare function isPrecompressedVariantBeneficial(compressedSize: number, originalSize: number, encoding: PrecompressedEncoding): boolean;
8
+ //#endregion
9
+ export { PrecompressedEncoding, isPrecompressedVariantBeneficial };
@@ -0,0 +1,15 @@
1
+ //#region src/utils/precompressed-variant.ts
2
+ const RESPONSE_HEADER_OVERHEAD = {
3
+ br: 45,
4
+ gzip: 47,
5
+ zstd: 47
6
+ };
7
+ /**
8
+ * Return whether an encoded representation reduces conservative HTTP/1 wire
9
+ * bytes after accounting for the response fields needed to negotiate it.
10
+ */
11
+ function isPrecompressedVariantBeneficial(compressedSize, originalSize, encoding) {
12
+ return originalSize - compressedSize > RESPONSE_HEADER_OVERHEAD[encoding];
13
+ }
14
+ //#endregion
15
+ export { isPrecompressedVariantBeneficial };
@@ -79,11 +79,16 @@ type ProjectInfo = {
79
79
  hasCloudflarePlugin: boolean;
80
80
  hasRscPlugin: boolean;
81
81
  hasWrangler: boolean;
82
- projectName: string; /** Pages that use `revalidate` (ISR) */
83
- hasISR: boolean; /** package.json has "type": "module" */
84
- hasTypeModule: boolean; /** .mdx files detected in app/ or pages/ */
85
- hasMDX: boolean; /** CodeHike is a dependency */
86
- hasCodeHike: boolean; /** Native Node modules that need stubbing for Workers */
82
+ projectName: string;
83
+ /** Pages that use `revalidate` (ISR) */
84
+ hasISR: boolean;
85
+ /** package.json has "type": "module" */
86
+ hasTypeModule: boolean;
87
+ /** .mdx files detected in app/ or pages/ */
88
+ hasMDX: boolean;
89
+ /** CodeHike is a dependency */
90
+ hasCodeHike: boolean;
91
+ /** Native Node modules that need stubbing for Workers */
87
92
  nativeModulesToStub: string[];
88
93
  };
89
94
  /** Check whether a wrangler config file exists in the given directory. */
@@ -103,8 +108,8 @@ type MissingDep = {
103
108
  * module resolution. Handles hoisting, pnpm symlinks, monorepos, and Yarn PnP.
104
109
  */
105
110
  declare function isPackageResolvable(root: string, packageName: string): boolean;
106
- declare function getMissingDeps(info: ProjectInfo, /** Override for testing — defaults to `isPackageResolvable` */
107
-
111
+ declare function getMissingDeps(info: ProjectInfo,
112
+ /** Override for testing — defaults to `isPackageResolvable` */
108
113
  _isResolvable?: (root: string, pkg: string) => boolean): MissingDep[];
109
114
  /**
110
115
  * Return the first candidate directory (resolved against `root`) that exists,
@@ -0,0 +1,5 @@
1
+ //#region src/utils/public-file-path.d.ts
2
+ /** Precompute keys for both encoded requests and decoded proxy/dev variants. */
3
+ declare function publicFilePathVariants(pathname: string): string[];
4
+ //#endregion
5
+ export { publicFilePathVariants };
@@ -0,0 +1,12 @@
1
+ //#region src/utils/public-file-path.ts
2
+ /** Encode each pathname segment without encoding `/` separators. */
3
+ function encodePublicFilePath(pathname) {
4
+ return pathname.split("/").map((segment) => encodeURIComponent(segment)).join("/");
5
+ }
6
+ /** Precompute keys for both encoded requests and decoded proxy/dev variants. */
7
+ function publicFilePathVariants(pathname) {
8
+ const encoded = encodePublicFilePath(pathname);
9
+ return encoded === pathname ? [pathname] : [pathname, encoded];
10
+ }
11
+ //#endregion
12
+ export { publicFilePathVariants };
@@ -1,4 +1,4 @@
1
1
  //#region src/utils/public-routes.d.ts
2
- declare function scanPublicFileRoutes(root: string): string[];
2
+ declare function scanPublicFileRoutes(root: string, configuredPublicDir?: string | false): string[];
3
3
  //#endregion
4
4
  export { scanPublicFileRoutes };
@@ -1,8 +1,10 @@
1
1
  import path from "../deps/.pnpm/pathslash@0.1.0/deps/pathslash/dist/index.js";
2
+ import { publicFilePathVariants } from "./public-file-path.js";
2
3
  import fs from "node:fs";
3
4
  //#region src/utils/public-routes.ts
4
- function scanPublicFileRoutes(root) {
5
- const publicDir = path.join(root, "public");
5
+ function scanPublicFileRoutes(root, configuredPublicDir = "public") {
6
+ if (configuredPublicDir === false || configuredPublicDir === "") return [];
7
+ const publicDir = path.resolve(root, configuredPublicDir);
6
8
  const routes = [];
7
9
  const visitedDirs = /* @__PURE__ */ new Set();
8
10
  function walk(dir) {
@@ -35,14 +37,13 @@ function scanPublicFileRoutes(root) {
35
37
  if (!stat.isFile()) continue;
36
38
  } else if (!entry.isFile()) continue;
37
39
  const relativePath = path.relative(publicDir, fullPath);
38
- routes.push("/" + relativePath);
40
+ routes.push(...publicFilePathVariants("/" + relativePath));
39
41
  }
40
42
  }
41
43
  if (fs.existsSync(publicDir)) try {
42
44
  walk(publicDir);
43
45
  } catch {}
44
- routes.sort();
45
- return routes;
46
+ return [...new Set(routes)].sort();
46
47
  }
47
48
  //#endregion
48
49
  export { scanPublicFileRoutes };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vinext",
3
- "version": "1.0.0-beta.3",
3
+ "version": "1.0.0-beta.5",
4
4
  "description": "Run Next.js apps on Vite. Drop-in replacement for the next CLI.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -21,6 +21,10 @@
21
21
  "types": "./dist/index.d.ts",
22
22
  "import": "./dist/index.js"
23
23
  },
24
+ "./client": {
25
+ "types": "./dist/client/index.d.ts",
26
+ "import": "./dist/client/index.js"
27
+ },
24
28
  "./cache": {
25
29
  "types": "./dist/cache.d.ts",
26
30
  "import": "./dist/cache.js"
@@ -183,8 +187,8 @@
183
187
  "am-i-vibing": "^0.5.0",
184
188
  "pathslash": "^0.1.0",
185
189
  "react-server-dom-webpack": "^19.2.7",
186
- "vite": "npm:@voidzero-dev/vite-plus-core@0.2.2",
187
- "vite-plus": "0.2.2"
190
+ "vite": "npm:@voidzero-dev/vite-plus-core@0.2.6",
191
+ "vite-plus": "0.2.6"
188
192
  },
189
193
  "peerDependencies": {
190
194
  "@mdx-js/rollup": "^3.0.0",