vinext 1.0.0-beta.4 → 1.0.0-beta.6

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 (460) 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 +41 -7
  14. package/dist/build/prerender-paths.d.ts +2 -2
  15. package/dist/build/prerender-paths.js +3 -4
  16. package/dist/build/prerender-phase.d.ts +15 -0
  17. package/dist/build/prerender-phase.js +37 -0
  18. package/dist/build/prerender-server-entry.d.ts +1 -1
  19. package/dist/build/prerender-server-entry.js +3 -3
  20. package/dist/build/prerender-server-pool.d.ts +4 -2
  21. package/dist/build/prerender-server-pool.js +2 -0
  22. package/dist/build/prerender.d.ts +40 -33
  23. package/dist/build/prerender.js +99 -18
  24. package/dist/build/public-dir-conflict.d.ts +14 -0
  25. package/dist/build/public-dir-conflict.js +25 -0
  26. package/dist/build/report.d.ts +2 -2
  27. package/dist/build/route-classification-injector.d.ts +0 -1
  28. package/dist/build/route-classification-manifest.d.ts +5 -3
  29. package/dist/build/run-prerender.d.ts +3 -2
  30. package/dist/build/run-prerender.js +9 -6
  31. package/dist/build/static-export.d.ts +23 -12
  32. package/dist/cache/cache-adapters-virtual.d.ts +5 -2
  33. package/dist/check.js +4 -4
  34. package/dist/cli-dev-config.d.ts +0 -1
  35. package/dist/cli.d.ts +1 -1
  36. package/dist/client/client-rewrite-matcher.d.ts +12 -0
  37. package/dist/client/client-rewrite-matcher.js +20 -0
  38. package/dist/client/client-rewrites.d.ts +31 -0
  39. package/dist/client/client-rewrites.js +41 -0
  40. package/dist/client/dev-error-overlay.d.ts +0 -1
  41. package/dist/client/empty-module.d.ts +1 -1
  42. package/dist/client/index.d.ts +2 -0
  43. package/dist/client/index.js +2 -0
  44. package/dist/client/instrumentation-client-state.d.ts +0 -1
  45. package/dist/client/navigation-runtime.d.ts +6 -1
  46. package/dist/client/navigation-runtime.js +5 -1
  47. package/dist/client/pages-router-link-navigation.d.ts +3 -21
  48. package/dist/client/react-instance-bootstrap.d.ts +1 -0
  49. package/dist/client/react-instance-bootstrap.js +7 -0
  50. package/dist/client/react-instance.d.ts +13 -0
  51. package/dist/client/react-instance.js +20 -0
  52. package/dist/client/vinext-next-data.d.ts +13 -6
  53. package/dist/client/window-next.d.ts +5 -2
  54. package/dist/config/config-matchers.d.ts +3 -5
  55. package/dist/config/config-matchers.js +7 -6
  56. package/dist/config/dotenv.d.ts +1 -5
  57. package/dist/config/next-config.d.ts +113 -54
  58. package/dist/config/next-config.js +27 -7
  59. package/dist/config/prerender.d.ts +0 -1
  60. package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +808 -0
  61. package/dist/entries/app-browser-entry.d.ts +0 -1
  62. package/dist/entries/app-browser-entry.js +8 -3
  63. package/dist/entries/app-rsc-entry.d.ts +30 -16
  64. package/dist/entries/app-rsc-entry.js +48 -10
  65. package/dist/entries/app-rsc-manifest.d.ts +0 -1
  66. package/dist/entries/app-rsc-manifest.js +1 -0
  67. package/dist/entries/pages-client-entry.d.ts +0 -1
  68. package/dist/entries/pages-client-entry.js +15 -5
  69. package/dist/entries/pages-server-entry.d.ts +1 -2
  70. package/dist/entries/pages-server-entry.js +21 -5
  71. package/dist/image/image-adapters-virtual.d.ts +4 -2
  72. package/dist/index.d.ts +0 -1
  73. package/dist/index.js +328 -227
  74. package/dist/init-cloudflare.d.ts +0 -1
  75. package/dist/init-platform.d.ts +0 -1
  76. package/dist/init.d.ts +40 -20
  77. package/dist/plugins/ast-scope.d.ts +0 -1
  78. package/dist/plugins/async-hooks-stub.d.ts +0 -1
  79. package/dist/plugins/client-reference-dedup.d.ts +0 -1
  80. package/dist/plugins/css-data-url.d.ts +0 -1
  81. package/dist/plugins/css-module-imports.d.ts +0 -1
  82. package/dist/plugins/dynamic-preload-metadata.d.ts +0 -1
  83. package/dist/plugins/extensionless-dynamic-import.d.ts +0 -1
  84. package/dist/plugins/extensionless-dynamic-import.js +352 -13
  85. package/dist/plugins/fonts.d.ts +0 -1
  86. package/dist/plugins/ignore-dynamic-requests.d.ts +0 -1
  87. package/dist/plugins/ignore-dynamic-requests.js +28 -4
  88. package/dist/plugins/import-meta-url.d.ts +0 -1
  89. package/dist/plugins/instrumentation-client.d.ts +0 -1
  90. package/dist/plugins/middleware-server-only.d.ts +0 -1
  91. package/dist/plugins/og-asset-ownership.d.ts +0 -1
  92. package/dist/plugins/og-assets.d.ts +0 -1
  93. package/dist/plugins/optimize-imports.d.ts +0 -1
  94. package/dist/plugins/pages-node-externals.d.ts +23 -0
  95. package/dist/plugins/pages-node-externals.js +206 -0
  96. package/dist/plugins/remove-console.d.ts +0 -1
  97. package/dist/plugins/require-context.d.ts +0 -1
  98. package/dist/plugins/require-context.js +143 -26
  99. package/dist/plugins/rsc-client-reference-loaders.d.ts +0 -1
  100. package/dist/plugins/rsc-reference-validation-normalizer.d.ts +0 -1
  101. package/dist/plugins/sass.d.ts +30 -2
  102. package/dist/plugins/sass.js +64 -1
  103. package/dist/plugins/server-externals-manifest.d.ts +0 -1
  104. package/dist/plugins/strip-server-exports.d.ts +0 -1
  105. package/dist/plugins/styled-jsx.d.ts +0 -1
  106. package/dist/plugins/transitive-externals.d.ts +24 -0
  107. package/dist/plugins/transitive-externals.js +121 -0
  108. package/dist/plugins/typeof-window.d.ts +11 -1
  109. package/dist/plugins/typeof-window.js +141 -13
  110. package/dist/plugins/use-cache-callable.d.ts +12 -0
  111. package/dist/plugins/use-cache-callable.js +209 -0
  112. package/dist/plugins/wasm-module-import.d.ts +0 -1
  113. package/dist/routing/app-route-graph.d.ts +115 -56
  114. package/dist/routing/app-route-graph.js +2 -1
  115. package/dist/routing/app-router.d.ts +0 -1
  116. package/dist/routing/pages-router.d.ts +9 -5
  117. package/dist/routing/route-matching.d.ts +0 -1
  118. package/dist/routing/utils.d.ts +1 -23
  119. package/dist/routing/utils.js +1 -30
  120. package/dist/server/accept-encoding.d.ts +0 -1
  121. package/dist/server/api-handler.d.ts +0 -1
  122. package/dist/server/api-handler.js +1 -1
  123. package/dist/server/app-bfcache-identity.d.ts +9 -10
  124. package/dist/server/app-bfcache-identity.js +27 -128
  125. package/dist/server/app-browser-action-result.d.ts +0 -1
  126. package/dist/server/app-browser-client-reuse-manifest.d.ts +0 -1
  127. package/dist/server/app-browser-entry.d.ts +1 -1
  128. package/dist/server/app-browser-entry.js +46 -30
  129. package/dist/server/app-browser-history-controller.d.ts +8 -5
  130. package/dist/server/app-browser-hydration.d.ts +0 -1
  131. package/dist/server/app-browser-interception-context.d.ts +0 -1
  132. package/dist/server/app-browser-mpa-navigation.d.ts +0 -1
  133. package/dist/server/app-browser-navigation-controller.d.ts +2 -5
  134. package/dist/server/app-browser-popstate.d.ts +0 -1
  135. package/dist/server/app-browser-prefetch-response.d.ts +17 -1
  136. package/dist/server/app-browser-prefetch-response.js +23 -1
  137. package/dist/server/app-browser-server-action-client.d.ts +1 -1
  138. package/dist/server/app-browser-server-action-client.js +3 -2
  139. package/dist/server/app-browser-server-action-navigation.d.ts +0 -1
  140. package/dist/server/app-browser-state.d.ts +4 -3
  141. package/dist/server/app-browser-state.js +2 -4
  142. package/dist/server/app-browser-stream.d.ts +0 -1
  143. package/dist/server/app-browser-visible-commit.d.ts +1 -1
  144. package/dist/server/app-browser-visible-commit.js +6 -2
  145. package/dist/server/app-elements-wire.d.ts +16 -13
  146. package/dist/server/app-elements-wire.js +37 -10
  147. package/dist/server/app-elements.d.ts +2 -3
  148. package/dist/server/app-elements.js +2 -2
  149. package/dist/server/app-fallback-renderer.d.ts +8 -4
  150. package/dist/server/app-fallback-renderer.js +2 -1
  151. package/dist/server/app-history-state.d.ts +2 -2
  152. package/dist/server/app-history-state.js +1 -1
  153. package/dist/server/app-hook-warning-suppression.d.ts +0 -1
  154. package/dist/server/app-layout-param-observation.d.ts +0 -1
  155. package/dist/server/app-layout-param-observation.js +1 -1
  156. package/dist/server/app-middleware.d.ts +5 -1
  157. package/dist/server/app-middleware.js +96 -31
  158. package/dist/server/app-optimistic-routing.d.ts +1 -0
  159. package/dist/server/app-page-boundary-render.d.ts +8 -4
  160. package/dist/server/app-page-boundary-render.js +4 -7
  161. package/dist/server/app-page-cache-finalizer.d.ts +3 -3
  162. package/dist/server/app-page-cache-finalizer.js +45 -19
  163. package/dist/server/app-page-cache-render.d.ts +3 -2
  164. package/dist/server/app-page-cache-render.js +5 -2
  165. package/dist/server/app-page-cache.d.ts +3 -4
  166. package/dist/server/app-page-cache.js +33 -15
  167. package/dist/server/app-page-dispatch.d.ts +11 -5
  168. package/dist/server/app-page-dispatch.js +11 -6
  169. package/dist/server/app-page-element-builder.d.ts +61 -19
  170. package/dist/server/app-page-element-builder.js +113 -43
  171. package/dist/server/app-page-execution.d.ts +12 -5
  172. package/dist/server/app-page-execution.js +20 -7
  173. package/dist/server/app-page-head.d.ts +2 -2
  174. package/dist/server/app-page-http-access-fallback-metadata.d.ts +2 -2
  175. package/dist/server/app-page-params.d.ts +0 -1
  176. package/dist/server/app-page-ppr-runtime.d.ts +0 -1
  177. package/dist/server/app-page-probe.d.ts +4 -3
  178. package/dist/server/app-page-probe.js +1 -1
  179. package/dist/server/app-page-render-identity.d.ts +1 -0
  180. package/dist/server/app-page-render-observation.d.ts +0 -1
  181. package/dist/server/app-page-render.d.ts +6 -4
  182. package/dist/server/app-page-render.js +53 -25
  183. package/dist/server/app-page-request.d.ts +3 -1
  184. package/dist/server/app-page-request.js +3 -34
  185. package/dist/server/app-page-response.d.ts +13 -3
  186. package/dist/server/app-page-response.js +17 -11
  187. package/dist/server/app-page-route-wiring.d.ts +27 -5
  188. package/dist/server/app-page-route-wiring.js +110 -58
  189. package/dist/server/app-page-search-params-observation.d.ts +0 -1
  190. package/dist/server/app-page-segment-plan.d.ts +56 -0
  191. package/dist/server/app-page-segment-plan.js +177 -0
  192. package/dist/server/app-page-segment-state.d.ts +18 -2
  193. package/dist/server/app-page-segment-state.js +23 -4
  194. package/dist/server/app-page-stream.d.ts +31 -10
  195. package/dist/server/app-page-stream.js +10 -3
  196. package/dist/server/app-pages-bridge.d.ts +0 -1
  197. package/dist/server/app-pages-bridge.js +12 -1
  198. package/dist/server/app-post-middleware-context.d.ts +0 -1
  199. package/dist/server/app-ppr-fallback-shell-render.d.ts +0 -1
  200. package/dist/server/app-prerender-endpoints.d.ts +1 -1
  201. package/dist/server/app-prerender-endpoints.js +12 -0
  202. package/dist/server/app-prerender-static-params.d.ts +0 -1
  203. package/dist/server/app-render-dependency.d.ts +11 -4
  204. package/dist/server/app-render-dependency.js +59 -9
  205. package/dist/server/app-request-context.d.ts +1 -0
  206. package/dist/server/app-response-header-provenance.d.ts +13 -0
  207. package/dist/server/app-response-header-provenance.js +26 -0
  208. package/dist/server/app-route-handler-cache.d.ts +3 -2
  209. package/dist/server/app-route-handler-cache.js +7 -3
  210. package/dist/server/app-route-handler-dispatch.d.ts +0 -1
  211. package/dist/server/app-route-handler-dispatch.js +4 -2
  212. package/dist/server/app-route-handler-execution.d.ts +2 -2
  213. package/dist/server/app-route-handler-execution.js +15 -7
  214. package/dist/server/app-route-handler-policy.d.ts +1 -1
  215. package/dist/server/app-route-handler-response.d.ts +3 -2
  216. package/dist/server/app-route-handler-response.js +15 -5
  217. package/dist/server/app-route-handler-runtime.d.ts +1 -2
  218. package/dist/server/app-route-handler-runtime.js +218 -85
  219. package/dist/server/app-route-module-loader.d.ts +32 -6
  220. package/dist/server/app-route-module-loader.js +73 -3
  221. package/dist/server/app-route-request-built-ins.d.ts +16 -0
  222. package/dist/server/app-route-request-built-ins.js +41 -0
  223. package/dist/server/app-router-entry.d.ts +0 -1
  224. package/dist/server/app-router-entry.js +4 -4
  225. package/dist/server/app-rsc-cache-busting.d.ts +2 -1
  226. package/dist/server/app-rsc-cache-busting.js +24 -16
  227. package/dist/server/app-rsc-handler.d.ts +9 -2
  228. package/dist/server/app-rsc-handler.js +176 -47
  229. package/dist/server/app-rsc-redirect-flight.d.ts +0 -1
  230. package/dist/server/app-rsc-request-normalization.d.ts +19 -10
  231. package/dist/server/app-rsc-response-finalizer.d.ts +7 -2
  232. package/dist/server/app-rsc-response-finalizer.js +34 -18
  233. package/dist/server/app-rsc-route-matching.d.ts +6 -1
  234. package/dist/server/app-rsc-route-matching.js +47 -2
  235. package/dist/server/app-rsc-state-fingerprint.d.ts +14 -0
  236. package/dist/server/app-rsc-state-fingerprint.js +13 -0
  237. package/dist/server/app-segment-config.d.ts +0 -1
  238. package/dist/server/app-server-action-execution.d.ts +41 -8
  239. package/dist/server/app-server-action-execution.js +191 -113
  240. package/dist/server/app-ssr-entry.d.ts +11 -3
  241. package/dist/server/app-ssr-entry.js +19 -8
  242. package/dist/server/app-ssr-router-instance.d.ts +0 -1
  243. package/dist/server/app-ssr-stream.d.ts +13 -2
  244. package/dist/server/app-ssr-stream.js +30 -5
  245. package/dist/server/app-static-generation.d.ts +0 -1
  246. package/dist/server/app-visited-response-cache.d.ts +1 -1
  247. package/dist/server/before-interactive-head.d.ts +0 -1
  248. package/dist/server/before-interactive-head.js +2 -0
  249. package/dist/server/bfcache-identity.d.ts +45 -0
  250. package/dist/server/bfcache-identity.js +52 -0
  251. package/dist/server/cache-control.d.ts +11 -7
  252. package/dist/server/cache-control.js +23 -11
  253. package/dist/server/cache-proof.d.ts +0 -1
  254. package/dist/server/client-reuse-manifest.d.ts +0 -1
  255. package/dist/server/config-headers.d.ts +6 -2
  256. package/dist/server/config-headers.js +19 -3
  257. package/dist/server/csp.d.ts +0 -1
  258. package/dist/server/default-global-error-module.d.ts +0 -1
  259. package/dist/server/default-global-not-found-module.d.ts +0 -1
  260. package/dist/server/default-not-found-module.d.ts +0 -1
  261. package/dist/server/dev-lockfile.d.ts +21 -9
  262. package/dist/server/dev-module-runner.d.ts +0 -1
  263. package/dist/server/dev-route-files.d.ts +0 -1
  264. package/dist/server/dev-server.d.ts +4 -8
  265. package/dist/server/dev-server.js +54 -105
  266. package/dist/server/dev-stack-sourcemap.d.ts +0 -1
  267. package/dist/server/document-initial-head.d.ts +12 -2
  268. package/dist/server/document-initial-head.js +17 -2
  269. package/dist/server/file-based-metadata.d.ts +0 -1
  270. package/dist/server/headers.d.ts +21 -2
  271. package/dist/server/headers.js +23 -2
  272. package/dist/server/http-conditional.d.ts +22 -0
  273. package/dist/server/http-conditional.js +117 -0
  274. package/dist/server/http-date.d.ts +5 -0
  275. package/dist/server/http-date.js +73 -0
  276. package/dist/server/http-error-responses.d.ts +3 -2
  277. package/dist/server/http-error-responses.js +21 -4
  278. package/dist/server/http-range.d.ts +25 -0
  279. package/dist/server/http-range.js +67 -0
  280. package/dist/server/image-optimization.d.ts +14 -6
  281. package/dist/server/image-optimization.js +0 -1
  282. package/dist/server/instrumentation.d.ts +7 -4
  283. package/dist/server/isr-cache.d.ts +28 -6
  284. package/dist/server/isr-cache.js +19 -13
  285. package/dist/server/isr-decision.d.ts +6 -4
  286. package/dist/server/metadata-route-build-data.d.ts +0 -1
  287. package/dist/server/metadata-route-build-data.js +1 -1
  288. package/dist/server/metadata-route-cache-policy.d.ts +6 -0
  289. package/dist/server/metadata-route-cache-policy.js +6 -0
  290. package/dist/server/metadata-route-response.d.ts +26 -2
  291. package/dist/server/metadata-route-response.js +225 -11
  292. package/dist/server/metadata-routes.d.ts +34 -16
  293. package/dist/server/metadata-routes.js +1 -1
  294. package/dist/server/middleware-matcher-pattern.d.ts +0 -1
  295. package/dist/server/middleware-matcher.d.ts +8 -3
  296. package/dist/server/middleware-matcher.js +23 -18
  297. package/dist/server/middleware-response-headers.js +4 -2
  298. package/dist/server/middleware-runtime.d.ts +6 -1
  299. package/dist/server/middleware-runtime.js +91 -28
  300. package/dist/server/middleware.d.ts +0 -1
  301. package/dist/server/navigation-planner.d.ts +1 -1
  302. package/dist/server/next-error-digest.d.ts +0 -1
  303. package/dist/server/pages-api-route.d.ts +0 -1
  304. package/dist/server/pages-api-route.js +30 -5
  305. package/dist/server/pages-asset-tags.d.ts +2 -1
  306. package/dist/server/pages-data-route.d.ts +14 -6
  307. package/dist/server/pages-data-route.js +19 -10
  308. package/dist/server/pages-dev-hydration.js +14 -4
  309. package/dist/server/pages-dev-stylesheets.d.ts +10 -0
  310. package/dist/server/pages-dev-stylesheets.js +150 -0
  311. package/dist/server/pages-document-initial-props.d.ts +10 -6
  312. package/dist/server/pages-get-initial-props.d.ts +2 -2
  313. package/dist/server/pages-i18n.d.ts +1 -7
  314. package/dist/server/pages-node-compat.d.ts +11 -2
  315. package/dist/server/pages-node-compat.js +49 -2
  316. package/dist/server/pages-page-data.d.ts +21 -9
  317. package/dist/server/pages-page-data.js +109 -30
  318. package/dist/server/pages-page-handler.d.ts +72 -33
  319. package/dist/server/pages-page-handler.js +25 -20
  320. package/dist/server/pages-page-response.d.ts +7 -13
  321. package/dist/server/pages-page-response.js +16 -23
  322. package/dist/server/pages-readiness.d.ts +0 -1
  323. package/dist/server/pages-request-pipeline.d.ts +20 -6
  324. package/dist/server/pages-request-pipeline.js +40 -20
  325. package/dist/server/pages-revalidate.d.ts +0 -1
  326. package/dist/server/pages-revalidate.js +1 -1
  327. package/dist/server/pages-router-entry.js +13 -9
  328. package/dist/server/prerender-cache-life-header.d.ts +11 -0
  329. package/dist/server/prerender-cache-life-header.js +18 -0
  330. package/dist/server/prerender-manifest.d.ts +11 -2
  331. package/dist/server/prerender-manifest.js +4 -1
  332. package/dist/server/prod-server.d.ts +13 -7
  333. package/dist/server/prod-server.js +280 -92
  334. package/dist/server/proxy-trust.d.ts +0 -1
  335. package/dist/server/request-log.d.ts +7 -11
  336. package/dist/server/request-pipeline.d.ts +13 -4
  337. package/dist/server/request-pipeline.js +30 -20
  338. package/dist/server/revalidation-host.d.ts +0 -1
  339. package/dist/server/revalidation-host.js +1 -1
  340. package/dist/server/rsc-completion-metadata.d.ts +15 -0
  341. package/dist/server/rsc-completion-metadata.js +183 -0
  342. package/dist/server/seed-cache.d.ts +6 -2
  343. package/dist/server/seed-cache.js +35 -8
  344. package/dist/server/skip-cache-proof.d.ts +0 -1
  345. package/dist/server/static-file-cache.d.ts +23 -9
  346. package/dist/server/static-file-cache.js +47 -23
  347. package/dist/server/static-layout-client-reuse-proof.d.ts +0 -1
  348. package/dist/server/worker-revalidation-context.d.ts +0 -1
  349. package/dist/server/worker-utils.d.ts +3 -1
  350. package/dist/server/worker-utils.js +12 -3
  351. package/dist/shims/app-router-scroll.d.ts +2 -8
  352. package/dist/shims/app.d.ts +1 -5
  353. package/dist/shims/before-interactive-context.d.ts +5 -3
  354. package/dist/shims/cache-callable-runtime.d.ts +11 -0
  355. package/dist/shims/cache-callable-runtime.js +30 -0
  356. package/dist/shims/cache-handler.d.ts +6 -1
  357. package/dist/shims/cache-handler.js +4 -2
  358. package/dist/shims/cache-request-state.d.ts +15 -1
  359. package/dist/shims/cache-request-state.js +27 -1
  360. package/dist/shims/cache-runtime.d.ts +15 -6
  361. package/dist/shims/cache-runtime.js +129 -29
  362. package/dist/shims/cache.d.ts +2 -3
  363. package/dist/shims/cache.js +2 -2
  364. package/dist/shims/cdn-cache.d.ts +18 -7
  365. package/dist/shims/cdn-cache.js +4 -2
  366. package/dist/shims/client-locale.d.ts +1 -6
  367. package/dist/shims/client-only.d.ts +1 -1
  368. package/dist/shims/compat-router.d.ts +0 -1
  369. package/dist/shims/constants.d.ts +1 -1
  370. package/dist/shims/default-global-error.d.ts +1 -4
  371. package/dist/shims/default-not-found.d.ts +0 -1
  372. package/dist/shims/document.d.ts +0 -1
  373. package/dist/shims/document.js +2 -1
  374. package/dist/shims/dynamic-preload-chunks.d.ts +0 -1
  375. package/dist/shims/dynamic.d.ts +0 -1
  376. package/dist/shims/error-boundary-navigation.d.ts +0 -1
  377. package/dist/shims/error-boundary.d.ts +7 -32
  378. package/dist/shims/error.d.ts +1 -6
  379. package/dist/shims/fetch-cache.js +115 -65
  380. package/dist/shims/font-google-base.d.ts +0 -1
  381. package/dist/shims/font-local.d.ts +0 -1
  382. package/dist/shims/font-local.js +3 -3
  383. package/dist/shims/form.d.ts +5 -3
  384. package/dist/shims/head-state.d.ts +0 -1
  385. package/dist/shims/head.d.ts +17 -5
  386. package/dist/shims/head.js +70 -8
  387. package/dist/shims/headers.d.ts +2 -2
  388. package/dist/shims/headers.js +1 -1
  389. package/dist/shims/i18n-context.d.ts +0 -1
  390. package/dist/shims/i18n-state.d.ts +0 -1
  391. package/dist/shims/image.d.ts +0 -1
  392. package/dist/shims/image.js +1 -2
  393. package/dist/shims/internal/als-registry.d.ts +31 -2
  394. package/dist/shims/internal/als-registry.js +50 -2
  395. package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +17 -2
  396. package/dist/shims/internal/app-prefetch-fetch-queue.js +69 -7
  397. package/dist/shims/internal/app-route-detection.d.ts +0 -1
  398. package/dist/shims/internal/app-route-prefetch-policy.d.ts +33 -0
  399. package/dist/shims/internal/app-route-prefetch-policy.js +63 -0
  400. package/dist/shims/internal/app-router-context.d.ts +0 -1
  401. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +1 -5
  402. package/dist/shims/internal/hybrid-client-route-owner.d.ts +0 -1
  403. package/dist/shims/internal/hybrid-client-route-owner.js +6 -8
  404. package/dist/shims/internal/interpolate-as.d.ts +3 -2
  405. package/dist/shims/internal/pages-data-target.d.ts +22 -11
  406. package/dist/shims/internal/pages-data-target.js +19 -6
  407. package/dist/shims/internal/pages-data-url.d.ts +3 -1
  408. package/dist/shims/internal/router-context.d.ts +0 -1
  409. package/dist/shims/internal/work-unit-async-storage.d.ts +4 -3
  410. package/dist/shims/internal/work-unit-async-storage.js +2 -0
  411. package/dist/shims/layout-segment-context.d.ts +2 -6
  412. package/dist/shims/legacy-image.d.ts +0 -1
  413. package/dist/shims/link.d.ts +29 -23
  414. package/dist/shims/link.js +59 -150
  415. package/dist/shims/metadata.d.ts +2 -10
  416. package/dist/shims/navigation-context-state.d.ts +4 -1
  417. package/dist/shims/navigation-state.d.ts +1 -0
  418. package/dist/shims/navigation.d.ts +65 -6
  419. package/dist/shims/navigation.js +360 -71
  420. package/dist/shims/navigation.react-server.d.ts +1 -0
  421. package/dist/shims/og.d.ts +0 -1
  422. package/dist/shims/request-context.d.ts +8 -4
  423. package/dist/shims/request-state-types.d.ts +1 -0
  424. package/dist/shims/root-params.d.ts +3 -1
  425. package/dist/shims/root-params.js +7 -1
  426. package/dist/shims/router.d.ts +44 -23
  427. package/dist/shims/router.js +184 -82
  428. package/dist/shims/script-nonce-context.d.ts +0 -1
  429. package/dist/shims/script.d.ts +25 -13
  430. package/dist/shims/server-only.d.ts +1 -1
  431. package/dist/shims/server.d.ts +1 -3
  432. package/dist/shims/server.js +7 -7
  433. package/dist/shims/slot.d.ts +22 -11
  434. package/dist/shims/slot.js +99 -19
  435. package/dist/shims/streamed-icons.d.ts +1 -3
  436. package/dist/shims/unified-request-context.d.ts +44 -4
  437. package/dist/shims/unified-request-context.js +56 -2
  438. package/dist/shims/use-merged-ref.d.ts +0 -1
  439. package/dist/shims/web-vitals.d.ts +0 -1
  440. package/dist/typegen.d.ts +1 -2
  441. package/dist/typegen.js +1 -1
  442. package/dist/utils/cache-control-metadata.d.ts +13 -1
  443. package/dist/utils/cache-control-metadata.js +17 -1
  444. package/dist/utils/client-build-manifest.d.ts +0 -1
  445. package/dist/utils/domain-locale.d.ts +1 -5
  446. package/dist/utils/encode-cache-tag.d.ts +1 -1
  447. package/dist/utils/encode-cache-tag.js +1 -1
  448. package/dist/utils/html-limited-bots.js +1 -1
  449. package/dist/utils/middleware-request-headers.d.ts +17 -5
  450. package/dist/utils/middleware-request-headers.js +32 -23
  451. package/dist/utils/precompressed-variant.d.ts +9 -0
  452. package/dist/utils/precompressed-variant.js +15 -0
  453. package/dist/utils/prerender-output-paths.d.ts +3 -1
  454. package/dist/utils/prerender-output-paths.js +6 -1
  455. package/dist/utils/project.d.ts +12 -7
  456. package/dist/utils/public-file-path.d.ts +5 -0
  457. package/dist/utils/public-file-path.js +12 -0
  458. package/dist/utils/public-routes.d.ts +1 -1
  459. package/dist/utils/public-routes.js +6 -5
  460. package/package.json +10 -6
@@ -1,8 +1,9 @@
1
1
  import path from "../deps/.pnpm/pathslash@0.1.0/deps/pathslash/dist/index.js";
2
2
  import { createValidFileMatcher, findFileWithExtensions } from "../routing/file-matcher.js";
3
3
  import { VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER, VINEXT_PRERENDER_SPECULATIVE_HEADER } from "../utils/protocol-headers.js";
4
- import { NEXT_CACHE_TAGS_HEADER, VINEXT_PRERENDER_CACHE_LIFE_HEADER } from "../server/headers.js";
4
+ import { NEXT_CACHE_TAGS_HEADER, VINEXT_METADATA_ROUTE_CACHE_HEADER, VINEXT_PRERENDER_CACHE_LIFE_HEADER, VINEXT_PRERENDER_METADATA_ROUTES_PATH } from "../server/headers.js";
5
5
  import { classifyAppRoute, classifyPagesRoute, getAppRouteRenderEntryPath } from "./report.js";
6
+ import { resolveClientStaleTimeSeconds } from "../utils/cache-control-metadata.js";
6
7
  import { NoOpCacheHandler, getCacheHandler, setCacheHandler } from "../shims/cache-handler.js";
7
8
  import { headersContextFromRequest, runWithHeadersContext } from "../shims/headers.js";
8
9
  import { _consumeRequestScopedCacheLife } from "../shims/cache-request-state.js";
@@ -14,9 +15,12 @@ import { navigationRuntimeRscBootstrapExpression } from "../server/app-ssr-strea
14
15
  import { encodePrerenderRouteParams, serializePrerenderRouteParamsHeader } from "../server/prerender-route-params.js";
15
16
  import { readPrerenderSecret } from "./server-manifest.js";
16
17
  import { createAppPprFallbackShells, markAppPprDynamicFallbackShellHtml } from "../server/app-ppr-fallback-shell.js";
17
- import { getOutputPath, getRscOutputPath } from "../utils/prerender-output-paths.js";
18
+ import { getAppRouteOutputPath, getOutputPath, getRscOutputPath } from "../utils/prerender-output-paths.js";
18
19
  import { startProdServer } from "../server/prod-server.js";
19
20
  import { prerenderPoolAvailable, resolvePrerenderPoolSize, startPrerenderServerPool } from "./prerender-server-pool.js";
21
+ import { enterPrerenderPhase } from "./prerender-phase.js";
22
+ import { buildAppRouteCacheValue } from "../server/app-route-handler-response.js";
23
+ import { isMetadataResponseCacheable } from "../server/metadata-route-cache-policy.js";
20
24
  import fs from "node:fs";
21
25
  import os from "node:os";
22
26
  //#region src/build/prerender.ts
@@ -264,8 +268,7 @@ async function prerenderPages({ routes, apiRoutes, pagesDir, outDir, config, mod
264
268
  });
265
269
  const previousHandler = getCacheHandler();
266
270
  setCacheHandler(new NoOpCacheHandler());
267
- const previousPrerenderFlag = process.env.VINEXT_PRERENDER;
268
- process.env.VINEXT_PRERENDER = "1";
271
+ const restorePrerenderPhase = enterPrerenderPhase();
269
272
  let ownedProdServerHandle = null;
270
273
  let renderPool = null;
271
274
  try {
@@ -496,11 +499,13 @@ async function prerenderPages({ routes, apiRoutes, pagesDir, outDir, config, mod
496
499
  });
497
500
  return { routes: results };
498
501
  } finally {
499
- if (renderPool) await renderPool.close();
500
- setCacheHandler(previousHandler);
501
- if (previousPrerenderFlag === void 0) delete process.env.VINEXT_PRERENDER;
502
- else process.env.VINEXT_PRERENDER = previousPrerenderFlag;
503
- if (ownedProdServerHandle) await new Promise((resolve) => ownedProdServerHandle.server.close(() => resolve()));
502
+ try {
503
+ if (renderPool) await renderPool.close();
504
+ setCacheHandler(previousHandler);
505
+ if (ownedProdServerHandle) await new Promise((resolve) => ownedProdServerHandle.server.close(() => resolve()));
506
+ } finally {
507
+ restorePrerenderPhase();
508
+ }
504
509
  }
505
510
  }
506
511
  /**
@@ -529,8 +534,7 @@ async function prerenderApp({ routes, metadataRoutes = [], outDir, config, mode,
529
534
  fs.mkdirSync(outDir, { recursive: true });
530
535
  const previousHandler = getCacheHandler();
531
536
  setCacheHandler(new NoOpCacheHandler());
532
- const previousPrerenderFlag = process.env.VINEXT_PRERENDER;
533
- process.env.VINEXT_PRERENDER = "1";
537
+ const restorePrerenderPhase = enterPrerenderPhase();
534
538
  const serverDir = path.dirname(rscBundlePath);
535
539
  let rscHandler;
536
540
  let staticParamsMap = {};
@@ -742,14 +746,83 @@ async function prerenderApp({ routes, metadataRoutes = [], outDir, config, mode,
742
746
  isSpeculative: false
743
747
  });
744
748
  }
749
+ if (metadataRoutes.length > 0) {
750
+ const response = await fetch(`${baseUrl}${VINEXT_PRERENDER_METADATA_ROUTES_PATH}`, { headers: secretHeaders });
751
+ const text = await response.text();
752
+ if (!response.ok) throw new Error(`[vinext] Failed to enumerate prerenderable metadata routes: ${parsePrerenderEndpointError(text)}`);
753
+ const metadataEntries = JSON.parse(text);
754
+ if (!Array.isArray(metadataEntries)) throw new Error("[vinext] Invalid prerender metadata route response");
755
+ const queuedMetadataPaths = /* @__PURE__ */ new Set();
756
+ for (const metadataEntry of metadataEntries) {
757
+ if (typeof metadataEntry !== "object" || metadataEntry === null || typeof Reflect.get(metadataEntry, "path") !== "string" || typeof Reflect.get(metadataEntry, "routePattern") !== "string" || !Array.isArray(Reflect.get(metadataEntry, "routeSegments"))) continue;
758
+ const { path: metadataPath, routePattern, routeSegments } = metadataEntry;
759
+ if (!metadataPath.startsWith("/") || !routePattern.startsWith("/") || routeSegments.some((segment) => typeof segment !== "string") || queuedMetadataPaths.has(metadataPath)) continue;
760
+ queuedMetadataPaths.add(metadataPath);
761
+ urlsToRender.push({
762
+ kind: "metadata",
763
+ metadataRouteSegments: routeSegments,
764
+ urlPath: metadataPath,
765
+ routePattern,
766
+ prerenderRouteParams: null,
767
+ revalidate: false,
768
+ isSpeculative: false
769
+ });
770
+ }
771
+ }
745
772
  /**
746
773
  * Render a single URL and return its result.
747
774
  * `onProgress` is intentionally not called here; the outer loop calls it
748
775
  * exactly once per URL after this function returns, keeping the callback
749
776
  * at a single, predictable call site.
750
777
  */
751
- async function renderUrl({ urlPath, routePattern, prerenderRouteParams, revalidate, isSpeculative, isFallback }) {
778
+ async function renderUrl({ kind, metadataRouteSegments, urlPath, routePattern, prerenderRouteParams, revalidate, isSpeculative, isFallback }) {
752
779
  try {
780
+ if (kind === "metadata") {
781
+ const request = new Request(`http://localhost${config.basePath ?? ""}${urlPath}`);
782
+ const response = await runWithHeadersContext(headersContextFromRequest(request), () => rscHandler(request));
783
+ if (!response.ok) {
784
+ await response.body?.cancel();
785
+ return {
786
+ route: routePattern,
787
+ status: "error",
788
+ error: `Metadata route returned ${response.status}`
789
+ };
790
+ }
791
+ const cacheControl = response.headers.get("cache-control") ?? "";
792
+ if (!isMetadataResponseCacheable(response)) {
793
+ await response.body?.cancel();
794
+ return {
795
+ route: routePattern,
796
+ status: "skipped",
797
+ reason: "dynamic"
798
+ };
799
+ }
800
+ const requestCacheLife = readPrerenderCacheLifeHeader(response.headers);
801
+ const collectedTags = readPrerenderCacheTagsHeader(response.headers);
802
+ const cacheValue = await buildAppRouteCacheValue(response);
803
+ cacheValue.headers[VINEXT_METADATA_ROUTE_CACHE_HEADER] = "1";
804
+ const outputPath = getAppRouteOutputPath(urlPath);
805
+ const fullPath = path.join(outDir, outputPath);
806
+ fs.mkdirSync(path.dirname(fullPath), { recursive: true });
807
+ fs.writeFileSync(fullPath, new Uint8Array(cacheValue.body));
808
+ const renderedCacheControl = resolveRenderedCacheControl(requestCacheLife ?? {}, cacheControl, config.expireTime);
809
+ const renderedRevalidate = renderedCacheControl.revalidate ?? false;
810
+ const renderedStale = resolveClientStaleTimeSeconds(requestCacheLife ?? void 0);
811
+ return {
812
+ route: routePattern,
813
+ ...urlPath === routePattern ? {} : { path: urlPath },
814
+ status: "rendered",
815
+ outputFiles: [outputPath],
816
+ revalidate: renderedRevalidate,
817
+ ...typeof renderedRevalidate === "number" ? { expire: renderedCacheControl.expire } : {},
818
+ ...renderedStale === void 0 ? {} : { stale: renderedStale },
819
+ router: "metadata",
820
+ headers: cacheValue.headers,
821
+ responseStatus: cacheValue.status,
822
+ routeSegments: metadataRouteSegments ?? [],
823
+ tags: collectedTags
824
+ };
825
+ }
753
826
  const prerenderRouteParamsHeader = serializePrerenderRouteParamsHeader(prerenderRouteParams);
754
827
  const htmlHeaders = new Headers();
755
828
  if (prerenderRouteParamsHeader !== null) htmlHeaders.set(VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, prerenderRouteParamsHeader);
@@ -838,12 +911,14 @@ async function prerenderApp({ routes, metadataRoutes = [], outDir, config, mode,
838
911
  outputFiles.push(rscOutputPath);
839
912
  const renderedCacheControl = resolveRenderedCacheControl(htmlRender.requestCacheLife ?? {}, htmlCacheControl, config.expireTime);
840
913
  const renderedRevalidate = typeof revalidate === "number" ? renderedCacheControl.revalidate === void 0 ? revalidate : Math.min(revalidate, renderedCacheControl.revalidate) : renderedCacheControl.revalidate ?? revalidate;
914
+ const renderedStale = resolveClientStaleTimeSeconds(htmlRender.requestCacheLife);
841
915
  return {
842
916
  route: routePattern,
843
917
  status: "rendered",
844
918
  outputFiles,
845
919
  revalidate: renderedRevalidate,
846
920
  ...typeof renderedRevalidate === "number" ? { expire: renderedCacheControl.expire } : {},
921
+ ...renderedStale === void 0 ? {} : { stale: renderedStale },
847
922
  router: "app",
848
923
  ...htmlRender.tags.length > 0 ? { tags: htmlRender.tags } : {},
849
924
  ...htmlRender.linkHeader ? { headers: { link: htmlRender.linkHeader } } : {},
@@ -916,11 +991,13 @@ async function prerenderApp({ routes, metadataRoutes = [], outDir, config, mode,
916
991
  ...outputFiles.length > 0 ? { outputFiles } : {}
917
992
  };
918
993
  } finally {
919
- if (renderPool) await renderPool.close();
920
- setCacheHandler(previousHandler);
921
- if (previousPrerenderFlag === void 0) delete process.env.VINEXT_PRERENDER;
922
- else process.env.VINEXT_PRERENDER = previousPrerenderFlag;
923
- if (ownedProdServerHandle) await new Promise((resolve) => ownedProdServerHandle.server.close(() => resolve()));
994
+ try {
995
+ if (renderPool) await renderPool.close();
996
+ setCacheHandler(previousHandler);
997
+ if (ownedProdServerHandle) await new Promise((resolve) => ownedProdServerHandle.server.close(() => resolve()));
998
+ } finally {
999
+ restorePrerenderPhase();
1000
+ }
924
1001
  }
925
1002
  }
926
1003
  function resolveRenderedCacheControl(requestCacheLife, cacheControl, fallbackExpireSeconds) {
@@ -944,7 +1021,8 @@ function readPrerenderCacheLifeHeader(headers) {
944
1021
  const cacheLife = {};
945
1022
  if (typeof parsed.revalidate === "number" && Number.isFinite(parsed.revalidate)) cacheLife.revalidate = parsed.revalidate;
946
1023
  if (typeof parsed.expire === "number" && Number.isFinite(parsed.expire)) cacheLife.expire = parsed.expire;
947
- return cacheLife.revalidate === void 0 && cacheLife.expire === void 0 ? null : cacheLife;
1024
+ if (typeof parsed.stale === "number" && Number.isFinite(parsed.stale) && parsed.stale >= 0) cacheLife.stale = parsed.stale;
1025
+ return cacheLife.revalidate === void 0 && cacheLife.expire === void 0 && cacheLife.stale === void 0 ? null : cacheLife;
948
1026
  } catch {
949
1027
  return null;
950
1028
  }
@@ -984,9 +1062,12 @@ function writePrerenderIndex(routes, outDir, options) {
984
1062
  status: r.status,
985
1063
  revalidate: r.revalidate,
986
1064
  ...typeof r.revalidate === "number" ? { expire: r.expire } : {},
1065
+ ...typeof r.stale === "number" ? { stale: r.stale } : {},
987
1066
  router: r.router,
988
1067
  ...r.tags && r.tags.length > 0 ? { tags: r.tags } : {},
1068
+ ...r.routeSegments ? { routeSegments: r.routeSegments } : {},
989
1069
  ...r.headers ? { headers: r.headers } : {},
1070
+ ...typeof r.responseStatus === "number" ? { responseStatus: r.responseStatus } : {},
990
1071
  ...r.path ? { path: r.path } : {},
991
1072
  ...r.fallback ? { fallback: true } : {}
992
1073
  };
@@ -0,0 +1,14 @@
1
+ //#region src/build/public-dir-conflict.d.ts
2
+ type PublicDirConflictOptions = {
3
+ root: string;
4
+ publicDir: string | null;
5
+ assetsDir: string;
6
+ };
7
+ type PublicNextRequestConflictOptions = Pick<PublicDirConflictOptions, "root" | "publicDir"> & {
8
+ basePath: string;
9
+ requestUrl: string;
10
+ };
11
+ declare function assertNoPublicNextRequestConflict({ root, publicDir, basePath, requestUrl }: PublicNextRequestConflictOptions): void;
12
+ declare function assertNoPublicDirAssetConflict({ root, publicDir, assetsDir }: PublicDirConflictOptions): void;
13
+ //#endregion
14
+ export { PublicDirConflictOptions, PublicNextRequestConflictOptions, assertNoPublicDirAssetConflict, assertNoPublicNextRequestConflict };
@@ -0,0 +1,25 @@
1
+ import path from "../deps/.pnpm/pathslash@0.1.0/deps/pathslash/dist/index.js";
2
+ import { existsSync } from "node:fs";
3
+ //#region src/build/public-dir-conflict.ts
4
+ const PUBLIC_NEXT_CONFLICT_ERROR = "You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict";
5
+ function assertNoPublicNextDir(root, publicDir) {
6
+ if (!publicDir) return;
7
+ if (existsSync(path.join(path.resolve(root, publicDir), "_next"))) throw new Error(PUBLIC_NEXT_CONFLICT_ERROR);
8
+ }
9
+ function assertNoPublicNextRequestConflict({ root, publicDir, basePath, requestUrl }) {
10
+ const internalOrigin = "http://vinext.invalid";
11
+ const parseTarget = requestUrl.startsWith("/") ? internalOrigin + requestUrl : requestUrl;
12
+ let pathname = new URL(parseTarget, internalOrigin).pathname;
13
+ if (basePath && (pathname === basePath || pathname.startsWith(basePath + "/"))) pathname = pathname.slice(basePath.length) || "/";
14
+ if (pathname.startsWith("/_next")) assertNoPublicNextDir(root, publicDir);
15
+ }
16
+ function assertNoPublicDirAssetConflict({ root, publicDir, assetsDir }) {
17
+ assertNoPublicNextDir(root, publicDir);
18
+ if (!publicDir || !assetsDir) return;
19
+ const resolvedPublicDir = path.resolve(root, publicDir);
20
+ const publicAssetsDir = path.resolve(resolvedPublicDir, assetsDir);
21
+ const relativeAssetsDir = path.relative(resolvedPublicDir, publicAssetsDir);
22
+ if (relativeAssetsDir !== "" && !relativeAssetsDir.startsWith("../") && !path.isAbsolute(relativeAssetsDir) && existsSync(publicAssetsDir)) throw new Error(`[vinext] The public directory contains a path reserved for build assets: ${relativeAssetsDir}`);
23
+ }
24
+ //#endregion
25
+ export { assertNoPublicDirAssetConflict, assertNoPublicNextRequestConflict };
@@ -2,12 +2,12 @@ import { LayoutBuildClassification } from "./layout-classification-types.js";
2
2
  import { Route } from "../routing/pages-router.js";
3
3
  import { AppRoute } from "../routing/app-route-graph.js";
4
4
  import { PrerenderResult } from "./prerender.js";
5
-
6
5
  //#region src/build/report.d.ts
7
6
  type RouteType = "static" | "isr" | "ssr" | "unknown" | "api";
8
7
  type RouteRow = {
9
8
  pattern: string;
10
- type: RouteType; /** Only set for `isr` routes. */
9
+ type: RouteType;
10
+ /** Only set for `isr` routes. */
11
11
  revalidate?: number;
12
12
  /**
13
13
  * True when the route was classified as `static` by speculative prerender
@@ -1,6 +1,5 @@
1
1
  import { ModuleInfoProvider } from "./layout-classification.js";
2
2
  import { RouteClassificationManifest } from "./route-classification-manifest.js";
3
-
4
3
  //#region src/build/route-classification-injector.d.ts
5
4
  /**
6
5
  * Build-time route classification injection.
@@ -1,11 +1,13 @@
1
1
  import { ClassificationReason, ModuleGraphStaticReason } from "./layout-classification-types.js";
2
2
  import { AppRoute } from "../routing/app-route-graph.js";
3
-
4
3
  //#region src/build/route-classification-manifest.d.ts
5
4
  type Layer1Class = "static" | "dynamic";
6
5
  type RouteManifestEntry = {
7
- /** Route pattern for diagnostics (e.g. "/blog/:slug"). */pattern: string; /** Absolute file paths for each layout, ordered root → leaf. */
8
- layoutPaths: string[]; /** Layer 1 (segment config) results keyed by numeric layout index. */
6
+ /** Route pattern for diagnostics (e.g. "/blog/:slug"). */
7
+ pattern: string;
8
+ /** Absolute file paths for each layout, ordered root → leaf. */
9
+ layoutPaths: string[];
10
+ /** Layer 1 (segment config) results keyed by numeric layout index. */
9
11
  layer1: Map<number, Layer1Class>;
10
12
  /**
11
13
  * Structured reasons for every Layer 1 decision, keyed by the same layout
@@ -1,9 +1,10 @@
1
1
  import { ResolvedNextConfig } from "../config/next-config.js";
2
2
  import { PrerenderResult, PrerenderRouteResult } from "./prerender.js";
3
-
4
3
  //#region src/build/run-prerender.d.ts
5
4
  type RunPrerenderOptions = {
6
- /** Project root directory. */root: string; /** Fully resolved Next.js config. Loaded from disk when omitted. */
5
+ /** Project root directory. */
6
+ root: string;
7
+ /** Fully resolved Next.js config. Loaded from disk when omitted. */
7
8
  nextConfig?: ResolvedNextConfig;
8
9
  /**
9
10
  * Override the path to the Pages Router server bundle.
@@ -3,9 +3,11 @@ import { findDir } from "../utils/project.js";
3
3
  import { apiRouter, pagesRouter } from "../routing/pages-router.js";
4
4
  import { appRouter } from "../routing/app-router.js";
5
5
  import { scanMetadataFiles } from "../server/metadata-routes.js";
6
+ import { PHASE_PRODUCTION_BUILD } from "../shims/constants.js";
6
7
  import { loadNextConfig, resolveNextConfig } from "../config/next-config.js";
7
8
  import { readPrerenderSecret } from "./server-manifest.js";
8
9
  import { rememberCurrentServerEntryImportMtime, startProdServer } from "../server/prod-server.js";
10
+ import { enterPrerenderPhase } from "./prerender-phase.js";
9
11
  import { prerenderApp, prerenderPages, writePrerenderIndex } from "./prerender.js";
10
12
  import { injectPregeneratedConcretePaths } from "./inject-pregenerated-paths.js";
11
13
  import fs from "node:fs";
@@ -104,12 +106,10 @@ async function runPrerender(options) {
104
106
  const appDir = findDir(root, "app", "src/app");
105
107
  const pagesDir = findDir(root, "pages", "src/pages");
106
108
  if (!appDir && !pagesDir) return null;
107
- const previousPrerenderFlag = process.env.VINEXT_PRERENDER;
108
- process.env.VINEXT_PRERENDER = "1";
109
109
  const manifestDir = path.join(root, "dist", "server");
110
110
  const rscBundlePath = options.rscBundlePath ?? path.join(root, "dist", "server", "index.js");
111
111
  const serverDir = path.dirname(rscBundlePath);
112
- const config = options.nextConfig ? { ...options.nextConfig } : { ...await resolveNextConfig(await loadNextConfig(root), root) };
112
+ const config = options.nextConfig ? { ...options.nextConfig } : { ...await resolveNextConfig(await loadNextConfig(root, PHASE_PRODUCTION_BUILD), root) };
113
113
  const builtBuildId = readBuiltBuildId(serverDir);
114
114
  if (builtBuildId) config.buildId = builtBuildId;
115
115
  const mode = config.output === "export" ? "export" : "default";
@@ -121,6 +121,7 @@ async function runPrerender(options) {
121
121
  const outDir = mode === "export" ? path.join(root, "dist", "client") : path.join(root, "dist", "server", "prerendered-routes");
122
122
  let sharedProdServer = null;
123
123
  let sharedPrerenderSecret;
124
+ const restorePrerenderPhase = enterPrerenderPhase();
124
125
  try {
125
126
  if (appDir && pagesDir) {
126
127
  sharedProdServer = await startProdServer({
@@ -187,9 +188,11 @@ async function runPrerender(options) {
187
188
  if (result.outputFiles) allOutputFiles.push(...result.outputFiles);
188
189
  }
189
190
  } finally {
190
- if (sharedProdServer) await new Promise((resolve) => sharedProdServer.server.close(() => resolve()));
191
- if (previousPrerenderFlag === void 0) delete process.env.VINEXT_PRERENDER;
192
- else process.env.VINEXT_PRERENDER = previousPrerenderFlag;
191
+ try {
192
+ if (sharedProdServer) await new Promise((resolve) => sharedProdServer.server.close(() => resolve()));
193
+ } finally {
194
+ restorePrerenderPhase();
195
+ }
193
196
  }
194
197
  if (allRoutes.length === 0) {
195
198
  progress.finish(0, 0, 0);
@@ -1,24 +1,32 @@
1
1
  import { ResolvedNextConfig } from "../config/next-config.js";
2
2
  import { Route } from "../routing/pages-router.js";
3
3
  import { AppRoute } from "../routing/app-route-graph.js";
4
-
5
4
  //#region src/build/static-export.d.ts
6
5
  type StaticExportOptions = {
7
6
  /**
8
7
  * Absolute path to the pre-built Pages Router server bundle
9
8
  * (e.g. `dist/server/entry.js`).
10
9
  */
11
- pagesBundlePath: string; /** Discovered page routes (excludes API routes) */
12
- routes: Route[]; /** Discovered API routes */
13
- apiRoutes: Route[]; /** Pages directory path */
14
- pagesDir: string; /** Output directory for static files */
15
- outDir: string; /** Resolved next.config.js */
10
+ pagesBundlePath: string;
11
+ /** Discovered page routes (excludes API routes) */
12
+ routes: Route[];
13
+ /** Discovered API routes */
14
+ apiRoutes: Route[];
15
+ /** Pages directory path */
16
+ pagesDir: string;
17
+ /** Output directory for static files */
18
+ outDir: string;
19
+ /** Resolved next.config.js */
16
20
  config: ResolvedNextConfig;
17
21
  };
18
22
  type StaticExportResult = {
19
- /** Number of HTML files generated */pageCount: number; /** Generated file paths (relative to outDir) */
20
- files: string[]; /** Warnings encountered */
21
- warnings: string[]; /** Errors encountered (non-fatal, specific pages) */
23
+ /** Number of HTML files generated */
24
+ pageCount: number;
25
+ /** Generated file paths (relative to outDir) */
26
+ files: string[];
27
+ /** Warnings encountered */
28
+ warnings: string[];
29
+ /** Errors encountered (non-fatal, specific pages) */
22
30
  errors: Array<{
23
31
  route: string;
24
32
  error: string;
@@ -31,7 +39,8 @@ type StaticExportResult = {
31
39
  */
32
40
  declare function staticExportPages(options: StaticExportOptions): Promise<StaticExportResult>;
33
41
  type AppStaticExportOptions = {
34
- /** Discovered app routes */routes: AppRoute[];
42
+ /** Discovered app routes */
43
+ routes: AppRoute[];
35
44
  /**
36
45
  * App directory path. When provided, static export scans it for file-based
37
46
  * metadata assets such as icon.png and sitemap.xml.
@@ -41,8 +50,10 @@ type AppStaticExportOptions = {
41
50
  * Absolute path to the pre-built RSC handler bundle
42
51
  * (e.g. `dist/server/index.js`).
43
52
  */
44
- rscBundlePath: string; /** Output directory */
45
- outDir: string; /** Resolved next.config.js */
53
+ rscBundlePath: string;
54
+ /** Output directory */
55
+ outDir: string;
56
+ /** Resolved next.config.js */
46
57
  config: ResolvedNextConfig;
47
58
  };
48
59
  /**
@@ -11,7 +11,8 @@ type CacheAdapterDescriptor<O extends Record<string, unknown> = Record<string, u
11
11
  * Module specifier (or absolute path, e.g. from `require.resolve(...)`) whose
12
12
  * default export is a cache adapter factory.
13
13
  */
14
- adapter: string; /** JSON-serializable options forwarded to the factory at runtime. */
14
+ adapter: string;
15
+ /** JSON-serializable options forwarded to the factory at runtime. */
15
16
  options?: O;
16
17
  };
17
18
  /**
@@ -20,7 +21,9 @@ type CacheAdapterDescriptor<O extends Record<string, unknown> = Record<string, u
20
21
  * from a worker entry.
21
22
  */
22
23
  type VinextCacheConfig = {
23
- /** Page-level ISR serving strategy (CDN cache adapter). */cdn?: CacheAdapterDescriptor; /** Data cache (fetch / `"use cache"` / `unstable_cache`) handler. */
24
+ /** Page-level ISR serving strategy (CDN cache adapter). */
25
+ cdn?: CacheAdapterDescriptor;
26
+ /** Data cache (fetch / `"use cache"` / `unstable_cache`) handler. */
24
27
  data?: CacheAdapterDescriptor;
25
28
  };
26
29
  /** Public virtual module id imported by the server entries. */
package/dist/check.js CHANGED
@@ -295,12 +295,12 @@ const CONFIG_SUPPORT = {
295
295
  detail: "not recognized; instrumentation files are enabled automatically"
296
296
  },
297
297
  skipMiddlewareUrlNormalize: {
298
- status: "unsupported",
299
- detail: "not recognized; use of this option is ignored"
298
+ status: "partial",
299
+ detail: "preserves raw Pages Router _next/data URLs passed to middleware"
300
300
  },
301
301
  skipProxyUrlNormalize: {
302
- status: "unsupported",
303
- detail: "not recognized; use of this option is ignored"
302
+ status: "partial",
303
+ detail: "preserves raw Pages Router _next/data URLs passed to proxy"
304
304
  },
305
305
  "i18n.domains": {
306
306
  status: "partial",
@@ -1,5 +1,4 @@
1
1
  import { Plugin, ServerOptions } from "vite";
2
-
3
2
  //#region src/cli-dev-config.d.ts
4
3
  type DevServerCliOptions = {
5
4
  port?: number;
package/dist/cli.d.ts CHANGED
@@ -1 +1 @@
1
- export { };
1
+ export {}
@@ -0,0 +1,12 @@
1
+ import { RequestContext } from "../config/request-context.js";
2
+ import { BasePathMatchState } from "../config/config-matchers.js";
3
+ import { ClientRewrite } from "./client-rewrites.js";
4
+ //#region src/client/client-rewrite-matcher.d.ts
5
+ declare function matchClientRewrite(pathname: string, rewrite: ClientRewrite, context: RequestContext, basePathState: BasePathMatchState): {
6
+ kind: "rewrite";
7
+ destination: string;
8
+ } | {
9
+ kind: "server";
10
+ } | null;
11
+ //#endregion
12
+ export { matchClientRewrite };
@@ -0,0 +1,20 @@
1
+ import { isExternalUrl } from "../utils/external-url.js";
2
+ import { matchRewrite } from "../config/config-matchers.js";
3
+ //#region src/client/client-rewrite-matcher.ts
4
+ function matchClientRewrite(pathname, rewrite, context, basePathState) {
5
+ const destination = matchRewrite(pathname, [{
6
+ source: rewrite.source,
7
+ destination: rewrite.destination ?? "/",
8
+ has: rewrite.has,
9
+ locale: rewrite.locale,
10
+ basePath: rewrite.basePath
11
+ }], context, basePathState);
12
+ if (destination === null) return null;
13
+ if (rewrite.requiresServerEvaluation || isExternalUrl(destination)) return { kind: "server" };
14
+ return {
15
+ kind: "rewrite",
16
+ destination
17
+ };
18
+ }
19
+ //#endregion
20
+ export { matchClientRewrite };
@@ -0,0 +1,31 @@
1
+ import { HasCondition, NextRewrite, ResolvedNextConfig } from "../config/next-config.js";
2
+ //#region src/client/client-rewrites.d.ts
3
+ type ClientHasCondition = Omit<HasCondition, "type"> & {
4
+ type: "host" | "query";
5
+ };
6
+ type ClientRewriteFields = Pick<NextRewrite, "basePath" | "locale" | "source"> & {
7
+ has?: ClientHasCondition[];
8
+ };
9
+ /**
10
+ * Rewrite data that is safe to publish in a browser bundle.
11
+ *
12
+ * Rules that require server-only data deliberately omit both the destination
13
+ * and the data that made server evaluation necessary. The client can still
14
+ * use browser-authoritative conditions as a prefilter before handing the
15
+ * navigation to the server.
16
+ */
17
+ type ClientRewrite = (ClientRewriteFields & {
18
+ destination: string;
19
+ requiresServerEvaluation?: never;
20
+ }) | (ClientRewriteFields & {
21
+ destination?: never;
22
+ requiresServerEvaluation: true;
23
+ });
24
+ type ClientRewrites = {
25
+ afterFiles: ClientRewrite[];
26
+ beforeFiles: ClientRewrite[];
27
+ fallback: ClientRewrite[];
28
+ };
29
+ declare function toClientRewrites(rewrites: ResolvedNextConfig["rewrites"]): ClientRewrites;
30
+ //#endregion
31
+ export { ClientRewrite, ClientRewrites, toClientRewrites };
@@ -0,0 +1,41 @@
1
+ import { isExternalUrl } from "../utils/external-url.js";
2
+ //#region src/client/client-rewrites.ts
3
+ function isClientHasCondition(condition) {
4
+ switch (condition.type) {
5
+ case "host":
6
+ case "query": return true;
7
+ case "cookie":
8
+ case "header": return false;
9
+ default: return false;
10
+ }
11
+ }
12
+ function toClientRewrite(rewrite) {
13
+ const clientHas = rewrite.has?.filter(isClientHasCondition);
14
+ const hasServerOnlyCondition = rewrite.has?.some((condition) => !isClientHasCondition(condition)) ?? false;
15
+ const common = {
16
+ source: rewrite.source,
17
+ has: clientHas?.length ? clientHas : void 0,
18
+ locale: rewrite.locale,
19
+ basePath: rewrite.basePath
20
+ };
21
+ if (isExternalUrl(rewrite.destination) || (rewrite.missing?.length ?? 0) > 0 || hasServerOnlyCondition) return {
22
+ ...common,
23
+ requiresServerEvaluation: true
24
+ };
25
+ return {
26
+ source: rewrite.source,
27
+ destination: rewrite.destination,
28
+ has: common.has,
29
+ locale: rewrite.locale,
30
+ basePath: rewrite.basePath
31
+ };
32
+ }
33
+ function toClientRewrites(rewrites) {
34
+ return {
35
+ beforeFiles: rewrites.beforeFiles.map(toClientRewrite),
36
+ afterFiles: rewrites.afterFiles.map(toClientRewrite),
37
+ fallback: rewrites.fallback.map(toClientRewrite)
38
+ };
39
+ }
40
+ //#endregion
41
+ export { toClientRewrites };
@@ -1,5 +1,4 @@
1
1
  import { ReportedError, dismissOverlay } from "./dev-error-overlay-store.js";
2
-
3
2
  //#region src/client/dev-error-overlay.d.ts
4
3
  declare const DEV_ERROR_OVERLAY_HOST_ID = "__vinext_dev_error_overlay_root";
5
4
  declare const DEV_ERROR_OVERLAY_MOUNT_ID = "__vinext_dev_error_overlay_mount";
@@ -1 +1 @@
1
- export { };
1
+ export {}
@@ -0,0 +1,2 @@
1
+ import { getVinextReact } from "./react-instance.js";
2
+ export { getVinextReact };
@@ -0,0 +1,2 @@
1
+ import { getVinextReact } from "./react-instance.js";
2
+ export { getVinextReact };
@@ -1,5 +1,4 @@
1
1
  import { ClientInstrumentationHooks } from "./instrumentation-client.js";
2
-
3
2
  //#region src/client/instrumentation-client-state.d.ts
4
3
  declare function normalizeClientInstrumentationHooks(hooks: ClientInstrumentationHooks): ClientInstrumentationHooks | null;
5
4
  declare function setClientInstrumentationHooks(hooks: ClientInstrumentationHooks | null): ClientInstrumentationHooks | null;
@@ -1,6 +1,5 @@
1
1
  import { RouteManifest } from "../routing/app-route-graph.js";
2
2
  import { AppRouterScrollIntent } from "../shims/app-router-scroll-state.js";
3
-
4
3
  //#region src/client/navigation-runtime.d.ts
5
4
  type NavigationRuntimeSnapshot = {
6
5
  pathname: string;
@@ -14,6 +13,12 @@ type NavigationRuntimeRscBootstrap = {
14
13
  nav?: NavigationRuntimeSnapshot;
15
14
  params?: Record<string, string | string[]>;
16
15
  rsc: NavigationRuntimeRscChunk[];
16
+ /**
17
+ * Client reuse bound in seconds resolved from the initial render's completed
18
+ * `cacheLife` — the done-script sibling of `dynamicStaleTimeSeconds`, which
19
+ * carries the `experimental.staleTimes` config value instead.
20
+ */
21
+ staleTimeSeconds?: number;
17
22
  };
18
23
  type NavigationRuntimeKind = "navigate" | "traverse" | "refresh";
19
24
  type NavigationRuntimeHistoryUpdateMode = "push" | "replace";
@@ -55,7 +55,11 @@ function isNavigationRuntimeRscBootstrap(value) {
55
55
  const nav = Reflect.get(value, "nav");
56
56
  const params = Reflect.get(value, "params");
57
57
  const rsc = Reflect.get(value, "rsc");
58
- return (done === void 0 || typeof done === "boolean") && (dynamicStaleTimeSeconds === void 0 || typeof dynamicStaleTimeSeconds === "number" && Number.isFinite(dynamicStaleTimeSeconds) && dynamicStaleTimeSeconds >= 0) && (initialCacheKind === void 0 || initialCacheKind === "dynamic" || initialCacheKind === "static") && (nav === void 0 || isNavigationRuntimeSnapshot(nav)) && (params === void 0 || isNavigationRuntimeParams(params)) && Array.isArray(rsc) && rsc.every(isNavigationRuntimeRscChunk);
58
+ const staleTimeSeconds = Reflect.get(value, "staleTimeSeconds");
59
+ return (done === void 0 || typeof done === "boolean") && isOptionalStaleTimeSeconds(dynamicStaleTimeSeconds) && (initialCacheKind === void 0 || initialCacheKind === "dynamic" || initialCacheKind === "static") && (nav === void 0 || isNavigationRuntimeSnapshot(nav)) && (params === void 0 || isNavigationRuntimeParams(params)) && Array.isArray(rsc) && rsc.every(isNavigationRuntimeRscChunk) && isOptionalStaleTimeSeconds(staleTimeSeconds);
60
+ }
61
+ function isOptionalStaleTimeSeconds(value) {
62
+ return value === void 0 || typeof value === "number" && Number.isFinite(value) && value >= 0;
59
63
  }
60
64
  function isReadonlyStringArray(value) {
61
65
  return Array.isArray(value) && value.every((entry) => typeof entry === "string");