vinext 1.0.0-beta.8 → 1.0.0

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 (813) hide show
  1. package/README.md +158 -84
  2. package/THIRD_PARTY_LICENSES.md +25 -0
  3. package/dist/_virtual/_rolldown/runtime.js +25 -0
  4. package/dist/build/action-owner-manifest.d.ts +8 -9
  5. package/dist/build/action-owner-manifest.js +23 -5
  6. package/dist/build/assets-ignore.d.ts +3 -4
  7. package/dist/build/clean-output.d.ts +2 -3
  8. package/dist/build/client-build-config.d.ts +40 -12
  9. package/dist/build/client-build-config.js +76 -6
  10. package/dist/build/css-url-assets.d.ts +4 -5
  11. package/dist/build/css-url-assets.js +5 -2
  12. package/dist/build/google-fonts/build-url.d.ts +3 -4
  13. package/dist/build/google-fonts/fallback-metrics.d.ts +3 -4
  14. package/dist/build/google-fonts/find-font-files-in-css.d.ts +2 -3
  15. package/dist/build/google-fonts/font-metadata.d.ts +2 -3
  16. package/dist/build/google-fonts/get-axes.d.ts +2 -3
  17. package/dist/build/google-fonts/sort-variants.d.ts +2 -3
  18. package/dist/build/google-fonts/validate.d.ts +2 -3
  19. package/dist/build/google-fonts/validate.js +8 -4
  20. package/dist/build/inject-pregenerated-paths.d.ts +2 -3
  21. package/dist/build/inject-pregenerated-paths.js +16 -14
  22. package/dist/build/inline-css.d.ts +3 -4
  23. package/dist/build/layout-classification-types.d.ts +4 -5
  24. package/dist/build/layout-classification.d.ts +7 -8
  25. package/dist/build/lifecycle.d.ts +42 -0
  26. package/dist/build/lifecycle.js +253 -0
  27. package/dist/build/module-dependency-cache.d.ts +2 -3
  28. package/dist/build/next-client-runtime-manifests.d.ts +4 -5
  29. package/dist/build/nitro-route-rules.d.ts +6 -7
  30. package/dist/build/nitro-route-rules.js +1 -1
  31. package/dist/build/pages-client-assets-module.d.ts +4 -8
  32. package/dist/build/pages-client-assets-module.js +1 -13
  33. package/dist/build/precompress.d.ts +2 -3
  34. package/dist/build/prerender-cloudflare-loader.d.ts +4 -0
  35. package/dist/build/prerender-cloudflare-loader.js +49 -0
  36. package/dist/build/prerender-paths.d.ts +82 -8
  37. package/dist/build/prerender-paths.js +814 -99
  38. package/dist/build/prerender-phase.d.ts +2 -3
  39. package/dist/build/prerender-server-entry.js +11 -3
  40. package/dist/build/prerender-server-pool.d.ts +9 -6
  41. package/dist/build/prerender-server-pool.js +8 -5
  42. package/dist/build/prerender.d.ts +67 -15
  43. package/dist/build/prerender.js +177 -64
  44. package/dist/build/preview-credentials.d.ts +5 -6
  45. package/dist/build/preview-credentials.js +2 -2
  46. package/dist/build/public-dir-conflict.d.ts +5 -6
  47. package/dist/build/public-dir-conflict.js +2 -1
  48. package/dist/build/report.d.ts +38 -19
  49. package/dist/build/report.js +73 -4
  50. package/dist/build/route-classification-injector.d.ts +2 -3
  51. package/dist/build/route-classification-manifest.d.ts +5 -6
  52. package/dist/build/run-prerender.d.ts +11 -9
  53. package/dist/build/run-prerender.js +25 -16
  54. package/dist/build/server-entry.d.ts +4 -0
  55. package/dist/build/server-entry.js +28 -0
  56. package/dist/build/server-manifest.d.ts +8 -3
  57. package/dist/build/server-manifest.js +14 -2
  58. package/dist/build/ssr-manifest.d.ts +5 -6
  59. package/dist/build/standalone.d.ts +2 -3
  60. package/dist/build/standalone.js +2 -2
  61. package/dist/build/static-export.d.ts +7 -8
  62. package/dist/cache/cache-adapters-virtual.d.ts +95 -9
  63. package/dist/cache/cache-adapters-virtual.js +58 -6
  64. package/dist/check.d.ts +11 -10
  65. package/dist/check.js +467 -176
  66. package/dist/cli-args.d.ts +7 -16
  67. package/dist/cli-args.js +2 -45
  68. package/dist/cli-dev-config.d.ts +10 -7
  69. package/dist/cli-dev-config.js +160 -3
  70. package/dist/cli.js +124 -435
  71. package/dist/client/app-nav-failure-handler.d.ts +6 -7
  72. package/dist/client/client-rewrite-matcher.d.ts +2 -3
  73. package/dist/client/client-rewrites.d.ts +4 -5
  74. package/dist/client/dev-error-overlay-store.d.ts +13 -14
  75. package/dist/client/dev-error-overlay.d.ts +15 -15
  76. package/dist/client/dev-error-overlay.js +8 -5
  77. package/dist/client/instrumentation-client-inject.d.ts +3 -4
  78. package/dist/client/instrumentation-client-state.d.ts +5 -6
  79. package/dist/client/instrumentation-client.d.ts +3 -4
  80. package/dist/client/navigation-runtime.d.ts +21 -17
  81. package/dist/client/navigation-runtime.js +2 -1
  82. package/dist/client/pages-router-link-navigation.d.ts +4 -5
  83. package/dist/client/react-instance.d.ts +2 -3
  84. package/dist/client/validate-module-path.d.ts +2 -3
  85. package/dist/client/vinext-next-data.d.ts +7 -8
  86. package/dist/client/window-next.d.ts +4 -5
  87. package/dist/config/config-matchers.d.ts +16 -16
  88. package/dist/config/config-matchers.js +10 -7
  89. package/dist/config/dotenv.d.ts +3 -4
  90. package/dist/config/dotenv.js +2 -1
  91. package/dist/config/next-config.d.ts +31 -27
  92. package/dist/config/next-config.js +163 -16
  93. package/dist/config/prerender.d.ts +20 -16
  94. package/dist/config/prerender.js +10 -4
  95. package/dist/config/request-context.d.ts +5 -6
  96. package/dist/config/server-external-packages.d.ts +14 -3
  97. package/dist/config/server-external-packages.js +37 -3
  98. package/dist/config/tsconfig-paths.d.ts +3 -4
  99. package/dist/deps/.pnpm/ignore@5.3.2/deps/ignore/index.js +189 -0
  100. package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +1057 -0
  101. package/dist/entries/app-browser-entry.d.ts +5 -6
  102. package/dist/entries/app-browser-entry.js +3 -2
  103. package/dist/entries/app-rsc-entry.d.ts +12 -3
  104. package/dist/entries/app-rsc-entry.js +530 -55
  105. package/dist/entries/app-rsc-manifest.d.ts +4 -3
  106. package/dist/entries/app-rsc-manifest.js +27 -8
  107. package/dist/entries/app-ssr-entry.d.ts +2 -3
  108. package/dist/entries/app-ssr-entry.js +8 -1
  109. package/dist/entries/pages-client-entry.d.ts +3 -3
  110. package/dist/entries/pages-client-entry.js +17 -2
  111. package/dist/entries/pages-server-entry.d.ts +13 -3
  112. package/dist/entries/pages-server-entry.js +237 -33
  113. package/dist/entries/runtime-entry-module.d.ts +4 -5
  114. package/dist/image/image-adapters-virtual.d.ts +4 -5
  115. package/dist/index.d.ts +10 -11
  116. package/dist/index.js +832 -199
  117. package/dist/init-cloudflare.d.ts +27 -16
  118. package/dist/init-cloudflare.js +754 -113
  119. package/dist/init-platform.d.ts +26 -22
  120. package/dist/init-platform.js +85 -29
  121. package/dist/init.d.ts +19 -13
  122. package/dist/init.js +123 -41
  123. package/dist/plugins/action-owner-manifest.d.ts +3 -4
  124. package/dist/plugins/action-owner-manifest.js +10 -3
  125. package/dist/plugins/ast-scope.d.ts +10 -11
  126. package/dist/plugins/ast-scope.js +10 -22
  127. package/dist/plugins/ast-utils.d.ts +16 -29
  128. package/dist/plugins/ast-utils.js +27 -71
  129. package/dist/plugins/async-hooks-stub.d.ts +2 -3
  130. package/dist/plugins/client-reference-dedup.d.ts +4 -5
  131. package/dist/plugins/css-data-url.d.ts +2 -3
  132. package/dist/plugins/css-module-imports.d.ts +3 -4
  133. package/dist/plugins/css-module-imports.js +1 -1
  134. package/dist/plugins/dynamic-preload-metadata.d.ts +3 -4
  135. package/dist/plugins/dynamic-preload-metadata.js +55 -154
  136. package/dist/plugins/environment.d.ts +2 -3
  137. package/dist/plugins/extensionless-dynamic-import.d.ts +2 -3
  138. package/dist/plugins/extensionless-dynamic-import.js +6 -10
  139. package/dist/plugins/fonts.d.ts +10 -11
  140. package/dist/plugins/fonts.js +4 -3
  141. package/dist/plugins/ignore-dynamic-requests.d.ts +3 -4
  142. package/dist/plugins/ignore-dynamic-requests.js +60 -89
  143. package/dist/plugins/import-meta-url.d.ts +6 -7
  144. package/dist/plugins/import-meta-url.js +31 -43
  145. package/dist/plugins/instrumentation-client.d.ts +3 -3
  146. package/dist/plugins/instrumentation-client.js +46 -10
  147. package/dist/plugins/middleware-export-validation.d.ts +3 -4
  148. package/dist/plugins/middleware-export-validation.js +3 -3
  149. package/dist/plugins/middleware-server-only.d.ts +2 -3
  150. package/dist/plugins/og-asset-ownership.d.ts +3 -4
  151. package/dist/plugins/og-assets.d.ts +4 -5
  152. package/dist/plugins/og-assets.js +32 -13
  153. package/dist/plugins/og-harfbuzz.d.ts +24 -0
  154. package/dist/plugins/og-harfbuzz.js +260 -0
  155. package/dist/plugins/optimize-imports.d.ts +7 -7
  156. package/dist/plugins/optimize-imports.js +32 -44
  157. package/dist/plugins/pages-node-externals.d.ts +2 -3
  158. package/dist/plugins/pages-node-externals.js +6 -11
  159. package/dist/plugins/postcss.d.ts +8 -4
  160. package/dist/plugins/postcss.js +1 -1
  161. package/dist/plugins/remove-console.d.ts +2 -3
  162. package/dist/plugins/remove-console.js +0 -1
  163. package/dist/plugins/require-condition-resolution.d.ts +3 -4
  164. package/dist/plugins/require-condition-resolution.js +17 -18
  165. package/dist/plugins/require-context.d.ts +2 -3
  166. package/dist/plugins/require-context.js +13 -21
  167. package/dist/plugins/rsc-client-reference-loaders.d.ts +2 -3
  168. package/dist/plugins/rsc-client-shim-excludes.d.ts +4 -5
  169. package/dist/plugins/rsc-client-shim-excludes.js +1 -0
  170. package/dist/plugins/rsc-reference-validation-normalizer.d.ts +2 -3
  171. package/dist/plugins/sass.d.ts +7 -8
  172. package/dist/plugins/sass.js +7 -4
  173. package/dist/plugins/server-externals-manifest.d.ts +2 -3
  174. package/dist/plugins/strip-server-exports.d.ts +5 -6
  175. package/dist/plugins/strip-server-exports.js +1 -1
  176. package/dist/plugins/styled-jsx.d.ts +2 -3
  177. package/dist/plugins/styled-jsx.js +7 -7
  178. package/dist/plugins/transform-cache.d.ts +2 -3
  179. package/dist/plugins/transform-result.d.ts +3 -4
  180. package/dist/plugins/transitive-externals.d.ts +2 -3
  181. package/dist/plugins/typeof-window.d.ts +6 -7
  182. package/dist/plugins/typeof-window.js +30 -31
  183. package/dist/plugins/use-cache-callable.d.ts +2 -5
  184. package/dist/plugins/use-cache-callable.js +43 -22
  185. package/dist/plugins/wasm-module-import.d.ts +2 -3
  186. package/dist/plugins/worker-image-imports.d.ts +2 -3
  187. package/dist/plugins/worker-image-imports.js +6 -8
  188. package/dist/routing/app-route-graph.d.ts +19 -19
  189. package/dist/routing/app-route-graph.js +3 -2
  190. package/dist/routing/app-router.d.ts +20 -5
  191. package/dist/routing/app-router.js +28 -2
  192. package/dist/routing/file-matcher.d.ts +9 -10
  193. package/dist/routing/pages-router.d.ts +6 -6
  194. package/dist/routing/pages-router.js +1 -1
  195. package/dist/routing/route-matching.d.ts +4 -5
  196. package/dist/routing/route-matching.js +4 -2
  197. package/dist/routing/route-pattern.d.ts +13 -14
  198. package/dist/routing/route-trie.d.ts +5 -6
  199. package/dist/routing/route-validation.d.ts +3 -4
  200. package/dist/routing/route-validation.js +12 -11
  201. package/dist/routing/utils.d.ts +13 -14
  202. package/dist/server/accept-encoding.d.ts +9 -10
  203. package/dist/server/api-handler.d.ts +2 -3
  204. package/dist/server/api-handler.js +9 -6
  205. package/dist/server/app-action-forwarding.d.ts +3 -4
  206. package/dist/server/app-action-forwarding.js +1 -1
  207. package/dist/server/app-action-request.d.ts +2 -3
  208. package/dist/server/app-bfcache-id.d.ts +3 -4
  209. package/dist/server/app-bfcache-identity.d.ts +8 -9
  210. package/dist/server/app-browser-action-result.d.ts +15 -16
  211. package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -3
  212. package/dist/server/app-browser-entry.js +121 -40
  213. package/dist/server/app-browser-error.d.ts +5 -6
  214. package/dist/server/app-browser-error.js +9 -3
  215. package/dist/server/app-browser-history-controller.d.ts +4 -5
  216. package/dist/server/app-browser-hydration.d.ts +16 -6
  217. package/dist/server/app-browser-hydration.js +14 -1
  218. package/dist/server/app-browser-interception-context.d.ts +3 -4
  219. package/dist/server/app-browser-mpa-navigation.d.ts +4 -5
  220. package/dist/server/app-browser-navigation-abort.d.ts +3 -4
  221. package/dist/server/app-browser-navigation-controller.d.ts +8 -8
  222. package/dist/server/app-browser-navigation-controller.js +9 -5
  223. package/dist/server/app-browser-navigation-response.d.ts +2 -3
  224. package/dist/server/app-browser-popstate.d.ts +4 -5
  225. package/dist/server/app-browser-prefetch-response.d.ts +5 -6
  226. package/dist/server/app-browser-rsc-redirect.d.ts +4 -5
  227. package/dist/server/app-browser-server-action-client.d.ts +7 -6
  228. package/dist/server/app-browser-server-action-client.js +9 -5
  229. package/dist/server/app-browser-server-action-navigation.d.ts +2 -3
  230. package/dist/server/app-browser-state.d.ts +17 -17
  231. package/dist/server/app-browser-state.js +7 -3
  232. package/dist/server/app-browser-stream.d.ts +4 -5
  233. package/dist/server/app-browser-stream.js +8 -6
  234. package/dist/server/app-browser-supplemental-refresh.d.ts +11 -12
  235. package/dist/server/app-browser-visible-commit.d.ts +6 -7
  236. package/dist/server/app-browser-visible-commit.js +1 -1
  237. package/dist/server/app-client-reference-preloader.d.ts +2 -3
  238. package/dist/server/app-elements-wire-key.d.ts +25 -0
  239. package/dist/server/app-elements-wire-key.js +69 -0
  240. package/dist/server/app-elements-wire.d.ts +34 -53
  241. package/dist/server/app-elements-wire.js +4 -75
  242. package/dist/server/app-elements.d.ts +5 -5
  243. package/dist/server/app-elements.js +1 -1
  244. package/dist/server/app-fallback-renderer.d.ts +4 -4
  245. package/dist/server/app-fallback-renderer.js +6 -6
  246. package/dist/server/app-fetch-tracing.d.ts +15 -0
  247. package/dist/server/app-fetch-tracing.js +38 -0
  248. package/dist/server/app-history-state.d.ts +26 -27
  249. package/dist/server/app-history-state.js +19 -11
  250. package/dist/server/app-hook-warning-suppression.d.ts +2 -3
  251. package/dist/server/app-hydration-cache-publication.d.ts +3 -4
  252. package/dist/server/app-inline-css-client.d.ts +3 -4
  253. package/dist/server/app-interception-context-header.d.ts +2 -3
  254. package/dist/server/app-layout-param-observation.d.ts +7 -8
  255. package/dist/server/app-metadata-tracing.d.ts +12 -0
  256. package/dist/server/app-metadata-tracing.js +17 -0
  257. package/dist/server/app-middleware.d.ts +15 -7
  258. package/dist/server/app-middleware.js +30 -5
  259. package/dist/server/app-mounted-slots-header.d.ts +2 -3
  260. package/dist/server/app-mounted-slots-header.js +2 -2
  261. package/dist/server/app-optimistic-routing.d.ts +14 -10
  262. package/dist/server/app-optimistic-routing.js +16 -3
  263. package/dist/server/app-page-boundary-render.d.ts +6 -6
  264. package/dist/server/app-page-boundary-render.js +10 -4
  265. package/dist/server/app-page-boundary.d.ts +9 -10
  266. package/dist/server/app-page-boundary.js +2 -1
  267. package/dist/server/app-page-cache-finalizer.d.ts +32 -8
  268. package/dist/server/app-page-cache-finalizer.js +118 -14
  269. package/dist/server/app-page-cache-render.d.ts +8 -5
  270. package/dist/server/app-page-cache-render.js +22 -5
  271. package/dist/server/app-page-cache.d.ts +28 -9
  272. package/dist/server/app-page-cache.js +96 -25
  273. package/dist/server/app-page-dispatch.d.ts +36 -12
  274. package/dist/server/app-page-dispatch.js +188 -63
  275. package/dist/server/app-page-element-builder.d.ts +13 -11
  276. package/dist/server/app-page-element-builder.js +104 -61
  277. package/dist/server/app-page-execution.d.ts +14 -14
  278. package/dist/server/app-page-execution.js +12 -8
  279. package/dist/server/app-page-head.d.ts +19 -16
  280. package/dist/server/app-page-head.js +25 -25
  281. package/dist/server/app-page-http-access-fallback-metadata.d.ts +6 -5
  282. package/dist/server/app-page-http-access-fallback-metadata.js +9 -2
  283. package/dist/server/app-page-method.d.ts +5 -11
  284. package/dist/server/app-page-method.js +2 -9
  285. package/dist/server/app-page-params.d.ts +5 -6
  286. package/dist/server/app-page-ppr-runtime.d.ts +2 -2
  287. package/dist/server/app-page-probe.d.ts +5 -6
  288. package/dist/server/app-page-probe.js +5 -4
  289. package/dist/server/app-page-render-identity.d.ts +4 -5
  290. package/dist/server/app-page-render-observation.d.ts +8 -9
  291. package/dist/server/app-page-render-observation.js +1 -1
  292. package/dist/server/app-page-render.d.ts +42 -6
  293. package/dist/server/app-page-render.js +192 -28
  294. package/dist/server/app-page-request.d.ts +10 -9
  295. package/dist/server/app-page-request.js +16 -12
  296. package/dist/server/app-page-response.d.ts +20 -9
  297. package/dist/server/app-page-response.js +31 -13
  298. package/dist/server/app-page-route-wiring.d.ts +15 -15
  299. package/dist/server/app-page-route-wiring.js +31 -24
  300. package/dist/server/app-page-search-params-observation.d.ts +26 -5
  301. package/dist/server/app-page-search-params-observation.js +42 -6
  302. package/dist/server/app-page-segment-plan.d.ts +2 -3
  303. package/dist/server/app-page-segment-state.d.ts +11 -12
  304. package/dist/server/app-page-stream.d.ts +27 -11
  305. package/dist/server/app-page-stream.js +35 -6
  306. package/dist/server/app-page-tracing.d.ts +33 -0
  307. package/dist/server/app-page-tracing.js +49 -0
  308. package/dist/server/app-pages-bridge.d.ts +6 -6
  309. package/dist/server/app-pages-bridge.js +19 -4
  310. package/dist/server/app-post-middleware-context.d.ts +2 -3
  311. package/dist/server/app-ppr-fallback-shell-render.d.ts +3 -4
  312. package/dist/server/app-ppr-fallback-shell-render.js +3 -2
  313. package/dist/server/app-ppr-fallback-shell.d.ts +6 -7
  314. package/dist/server/app-prerender-endpoints.d.ts +5 -5
  315. package/dist/server/app-prerender-endpoints.js +26 -12
  316. package/dist/server/app-prerender-static-params.d.ts +15 -7
  317. package/dist/server/app-prerender-static-params.js +33 -11
  318. package/dist/server/app-render-dependency.d.ts +14 -13
  319. package/dist/server/app-render-dependency.js +5 -1
  320. package/dist/server/app-request-context.d.ts +3 -4
  321. package/dist/server/app-request-stage-context.d.ts +5 -0
  322. package/dist/server/app-request-stage-context.js +11 -0
  323. package/dist/server/app-request-stage-dispatch.d.ts +25 -0
  324. package/dist/server/app-request-stage-dispatch.js +54 -0
  325. package/dist/server/app-request-stage-independent-entry.d.ts +8 -0
  326. package/dist/server/app-request-stage-independent-entry.js +115 -0
  327. package/dist/server/app-response-header-provenance.d.ts +13 -7
  328. package/dist/server/app-response-header-provenance.js +34 -1
  329. package/dist/server/app-response-stage-entry.d.ts +9 -0
  330. package/dist/server/app-response-stage-entry.js +87 -0
  331. package/dist/server/app-route-handler-cache.d.ts +2 -3
  332. package/dist/server/app-route-handler-cache.js +46 -34
  333. package/dist/server/app-route-handler-dispatch.d.ts +3 -3
  334. package/dist/server/app-route-handler-dispatch.js +75 -57
  335. package/dist/server/app-route-handler-execution.d.ts +18 -13
  336. package/dist/server/app-route-handler-execution.js +189 -25
  337. package/dist/server/app-route-handler-middleware-context.d.ts +8 -0
  338. package/dist/server/app-route-handler-middleware-context.js +15 -0
  339. package/dist/server/app-route-handler-policy.d.ts +22 -10
  340. package/dist/server/app-route-handler-policy.js +19 -4
  341. package/dist/server/app-route-handler-response.d.ts +9 -10
  342. package/dist/server/app-route-handler-response.js +2 -0
  343. package/dist/server/app-route-handler-runtime.d.ts +9 -10
  344. package/dist/server/app-route-handler-runtime.js +20 -16
  345. package/dist/server/app-route-module-loader.d.ts +6 -7
  346. package/dist/server/app-route-request-built-ins.d.ts +3 -4
  347. package/dist/server/app-route-tree-prefetch.d.ts +6 -7
  348. package/dist/server/app-route-tree-prefetch.js +2 -1
  349. package/dist/server/app-router-entry.d.ts +2 -0
  350. package/dist/server/app-router-entry.js +76 -12
  351. package/dist/server/app-rsc-cache-busting.d.ts +47 -22
  352. package/dist/server/app-rsc-cache-busting.js +80 -18
  353. package/dist/server/app-rsc-combined-handler.d.ts +9 -0
  354. package/dist/server/app-rsc-combined-handler.js +11 -0
  355. package/dist/server/app-rsc-embedded-chunks.d.ts +6 -7
  356. package/dist/server/app-rsc-error-handler.d.ts +12 -6
  357. package/dist/server/app-rsc-error-handler.js +15 -6
  358. package/dist/server/app-rsc-errors.d.ts +12 -9
  359. package/dist/server/app-rsc-errors.js +15 -13
  360. package/dist/server/app-rsc-handler.d.ts +33 -6
  361. package/dist/server/app-rsc-handler.js +498 -83
  362. package/dist/server/app-rsc-redirect-flight.d.ts +4 -5
  363. package/dist/server/app-rsc-render-mode.d.ts +8 -9
  364. package/dist/server/app-rsc-request-normalization.d.ts +3 -3
  365. package/dist/server/app-rsc-request-normalization.js +2 -1
  366. package/dist/server/app-rsc-response-finalizer.d.ts +8 -5
  367. package/dist/server/app-rsc-response-finalizer.js +24 -7
  368. package/dist/server/app-rsc-response-stage.d.ts +6 -0
  369. package/dist/server/app-rsc-response-stage.js +251 -0
  370. package/dist/server/app-rsc-route-matching.d.ts +4 -4
  371. package/dist/server/app-rsc-route-matching.js +4 -2
  372. package/dist/server/app-rsc-state-fingerprint.d.ts +3 -4
  373. package/dist/server/app-rsc-vary.d.ts +16 -0
  374. package/dist/server/app-rsc-vary.js +31 -0
  375. package/dist/server/app-segment-config.d.ts +120 -6
  376. package/dist/server/app-segment-config.js +264 -12
  377. package/dist/server/app-server-action-execution.d.ts +16 -12
  378. package/dist/server/app-server-action-execution.js +88 -35
  379. package/dist/server/app-ssr-entry.d.ts +14 -4
  380. package/dist/server/app-ssr-entry.js +64 -17
  381. package/dist/server/app-ssr-error-meta.d.ts +3 -4
  382. package/dist/server/app-ssr-error-meta.js +2 -1
  383. package/dist/server/app-ssr-router-instance.d.ts +2 -3
  384. package/dist/server/app-ssr-search-params-gate.d.ts +20 -0
  385. package/dist/server/app-ssr-search-params-gate.js +54 -0
  386. package/dist/server/app-ssr-stream.d.ts +13 -9
  387. package/dist/server/app-ssr-stream.js +33 -7
  388. package/dist/server/app-static-generation.d.ts +4 -5
  389. package/dist/server/app-visited-response-cache.d.ts +11 -12
  390. package/dist/server/app-visited-response-cache.js +2 -2
  391. package/dist/server/app-worker-stages.d.ts +112 -0
  392. package/dist/server/app-worker-stages.js +105 -0
  393. package/dist/server/artifact-compatibility.d.ts +11 -12
  394. package/dist/server/before-interactive-head.d.ts +2 -3
  395. package/dist/server/bfcache-identity.d.ts +7 -8
  396. package/dist/server/cache-control.d.ts +39 -11
  397. package/dist/server/cache-control.js +104 -7
  398. package/dist/server/cache-headers.d.ts +3 -4
  399. package/dist/server/cache-proof.d.ts +75 -70
  400. package/dist/server/cache-proof.js +9 -1
  401. package/dist/server/cacheability-limits.d.ts +8 -0
  402. package/dist/server/cacheability-limits.js +9 -0
  403. package/dist/server/cacheability-manifest.d.ts +68 -0
  404. package/dist/server/cacheability-manifest.js +241 -0
  405. package/dist/server/cacheability-request.d.ts +49 -0
  406. package/dist/server/cacheability-request.js +559 -0
  407. package/dist/server/client-reuse-manifest.d.ts +17 -18
  408. package/dist/server/client-reuse-manifest.js +2 -2
  409. package/dist/server/client-trace-metadata.d.ts +9 -6
  410. package/dist/server/client-trace-metadata.js +27 -15
  411. package/dist/server/cloudflare-workers-tracing.d.ts +1 -0
  412. package/dist/server/cloudflare-workers-tracing.js +8 -0
  413. package/dist/server/config-headers.d.ts +19 -5
  414. package/dist/server/config-headers.js +39 -5
  415. package/dist/server/cookie-utils.d.ts +2 -3
  416. package/dist/server/csp.d.ts +5 -6
  417. package/dist/server/default-global-error-module.d.ts +2 -3
  418. package/dist/server/default-global-not-found-module.d.ts +2 -3
  419. package/dist/server/default-not-found-module.d.ts +2 -3
  420. package/dist/server/defer-until-stream-consumed.d.ts +2 -3
  421. package/dist/server/defer-until-stream-consumed.js +2 -1
  422. package/dist/server/dev-initial-server-error.d.ts +3 -4
  423. package/dist/server/dev-initial-server-error.js +2 -1
  424. package/dist/server/dev-lockfile.d.ts +7 -8
  425. package/dist/server/dev-lockfile.js +4 -1
  426. package/dist/server/dev-module-runner.d.ts +2 -3
  427. package/dist/server/dev-origin-check.d.ts +5 -6
  428. package/dist/server/dev-route-files.d.ts +2 -3
  429. package/dist/server/dev-server.d.ts +4 -5
  430. package/dist/server/dev-server.js +130 -61
  431. package/dist/server/dev-stack-sourcemap.d.ts +7 -7
  432. package/dist/server/dev-stack-sourcemap.js +1 -1
  433. package/dist/server/document-initial-head.d.ts +3 -4
  434. package/dist/server/edge-api-runtime.d.ts +4 -5
  435. package/dist/server/fetch-handler.d.ts +3 -2
  436. package/dist/server/fetch-handler.js +3 -18
  437. package/dist/server/file-based-metadata.d.ts +2 -3
  438. package/dist/server/framework-tracer.d.ts +46 -0
  439. package/dist/server/framework-tracer.js +125 -0
  440. package/dist/server/fully-buffered-response.d.ts +11 -0
  441. package/dist/server/fully-buffered-response.js +19 -0
  442. package/dist/server/headers.d.ts +62 -56
  443. package/dist/server/headers.js +33 -20
  444. package/dist/server/html.d.ts +6 -27
  445. package/dist/server/html.js +16 -1
  446. package/dist/server/http-conditional.d.ts +5 -6
  447. package/dist/server/http-date.d.ts +2 -3
  448. package/dist/server/http-error-responses.d.ts +9 -10
  449. package/dist/server/http-range.d.ts +4 -5
  450. package/dist/server/hybrid-route-priority.d.ts +4 -5
  451. package/dist/server/image-optimization.d.ts +20 -21
  452. package/dist/server/implicit-tags.d.ts +3 -4
  453. package/dist/server/instrumentation-runtime.d.ts +17 -21
  454. package/dist/server/instrumentation-runtime.js +26 -8
  455. package/dist/server/instrumentation.d.ts +26 -30
  456. package/dist/server/instrumentation.js +18 -23
  457. package/dist/server/isr-cache.d.ts +28 -27
  458. package/dist/server/isr-cache.js +18 -70
  459. package/dist/server/isr-decision.d.ts +4 -4
  460. package/dist/server/metadata-route-build-data.d.ts +4 -5
  461. package/dist/server/metadata-route-cache-policy.d.ts +2 -3
  462. package/dist/server/metadata-route-response.d.ts +7 -7
  463. package/dist/server/metadata-route-response.js +68 -2
  464. package/dist/server/metadata-routes.d.ts +18 -19
  465. package/dist/server/middleware-matcher-pattern.d.ts +6 -7
  466. package/dist/server/middleware-matcher.d.ts +13 -6
  467. package/dist/server/middleware-matcher.js +22 -1
  468. package/dist/server/middleware-path-to-regexp.d.ts +6 -7
  469. package/dist/server/middleware-path-to-regexp.js +11 -9
  470. package/dist/server/middleware-response-headers.d.ts +3 -4
  471. package/dist/server/middleware-runtime.d.ts +13 -8
  472. package/dist/server/middleware-runtime.js +54 -10
  473. package/dist/server/middleware.d.ts +5 -5
  474. package/dist/server/multi-stage.d.ts +141 -0
  475. package/dist/server/multi-stage.js +8 -0
  476. package/dist/server/navigation-planner.d.ts +26 -26
  477. package/dist/server/navigation-trace.d.ts +11 -12
  478. package/dist/server/next-error-digest.d.ts +4 -5
  479. package/dist/server/normalize-path.d.ts +5 -6
  480. package/dist/server/normalize-path.js +1 -1
  481. package/dist/server/open-redirect.d.ts +2 -3
  482. package/dist/server/opentelemetry-api.d.ts +59 -0
  483. package/dist/server/opentelemetry-api.js +53 -0
  484. package/dist/server/opentelemetry-tracing.d.ts +5 -0
  485. package/dist/server/opentelemetry-tracing.js +83 -0
  486. package/dist/server/operation-token.d.ts +11 -12
  487. package/dist/server/otel-tracer-extension.d.ts +7 -9
  488. package/dist/server/otel-tracer-extension.js +37 -36
  489. package/dist/server/pages-api-route.d.ts +5 -4
  490. package/dist/server/pages-api-route.js +21 -8
  491. package/dist/server/pages-asset-tags.d.ts +6 -6
  492. package/dist/server/pages-asset-tags.js +37 -2
  493. package/dist/server/pages-body-parser-config.d.ts +4 -5
  494. package/dist/server/pages-body-parser-config.js +4 -4
  495. package/dist/server/pages-client-assets.d.ts +11 -5
  496. package/dist/server/pages-data-route.d.ts +11 -12
  497. package/dist/server/pages-data-route.js +1 -1
  498. package/dist/server/pages-default-404.d.ts +3 -4
  499. package/dist/server/pages-dev-hydration.d.ts +9 -4
  500. package/dist/server/pages-dev-hydration.js +19 -7
  501. package/dist/server/pages-dev-module-url.d.ts +3 -4
  502. package/dist/server/pages-dev-stylesheets.d.ts +5 -6
  503. package/dist/server/pages-document-asset-props.d.ts +6 -7
  504. package/dist/server/pages-document-initial-props.d.ts +5 -5
  505. package/dist/server/pages-document-initial-props.js +4 -2
  506. package/dist/server/pages-execution-tracing.d.ts +40 -0
  507. package/dist/server/pages-execution-tracing.js +80 -0
  508. package/dist/server/pages-get-initial-props.d.ts +9 -10
  509. package/dist/server/pages-i18n.d.ts +8 -8
  510. package/dist/server/pages-i18n.js +3 -2
  511. package/dist/server/pages-media-type.d.ts +4 -5
  512. package/dist/server/pages-node-compat.d.ts +11 -10
  513. package/dist/server/pages-node-compat.js +12 -4
  514. package/dist/server/pages-page-data.d.ts +18 -19
  515. package/dist/server/pages-page-data.js +11 -10
  516. package/dist/server/pages-page-handler.d.ts +7 -6
  517. package/dist/server/pages-page-handler.js +98 -47
  518. package/dist/server/pages-page-method.d.ts +2 -3
  519. package/dist/server/pages-page-response.d.ts +14 -10
  520. package/dist/server/pages-page-response.js +49 -31
  521. package/dist/server/pages-preview.d.ts +10 -11
  522. package/dist/server/pages-readiness.d.ts +2 -3
  523. package/dist/server/pages-request-pipeline.d.ts +16 -12
  524. package/dist/server/pages-request-pipeline.js +69 -28
  525. package/dist/server/pages-request-stage-entry.d.ts +23 -0
  526. package/dist/server/pages-request-stage-entry.js +314 -0
  527. package/dist/server/pages-response-stage-entry.d.ts +11 -0
  528. package/dist/server/pages-response-stage-entry.js +106 -0
  529. package/dist/server/pages-response-stage.d.ts +31 -0
  530. package/dist/server/pages-response-stage.js +49 -0
  531. package/dist/server/pages-revalidate.d.ts +3 -4
  532. package/dist/server/pages-revalidate.js +9 -4
  533. package/dist/server/pages-route-data-kind.d.ts +18 -0
  534. package/dist/server/pages-route-data-kind.js +11 -0
  535. package/dist/server/pages-router-entry.d.ts +1 -25
  536. package/dist/server/pages-router-entry.js +48 -114
  537. package/dist/server/pages-serializable-props.d.ts +3 -4
  538. package/dist/server/pregenerated-concrete-paths.d.ts +9 -7
  539. package/dist/server/pregenerated-concrete-paths.js +12 -6
  540. package/dist/server/prerender-cache-life-header.d.ts +3 -4
  541. package/dist/server/prerender-manifest.d.ts +11 -11
  542. package/dist/server/prerender-manifest.js +6 -3
  543. package/dist/server/prerender-route-params.d.ts +16 -9
  544. package/dist/server/prerender-route-params.js +18 -2
  545. package/dist/server/prerender-work-unit-setup.d.ts +4 -4
  546. package/dist/server/prerender-work-unit-setup.js +37 -14
  547. package/dist/server/prod-server.d.ts +12 -9
  548. package/dist/server/prod-server.js +129 -36
  549. package/dist/server/proxy-trust.d.ts +5 -6
  550. package/dist/server/request-log.d.ts +3 -4
  551. package/dist/server/request-pipeline.d.ts +17 -21
  552. package/dist/server/request-pipeline.js +8 -10
  553. package/dist/server/request-stage.d.ts +5 -0
  554. package/dist/server/request-stage.js +7 -0
  555. package/dist/server/request-tracing.d.ts +22 -0
  556. package/dist/server/request-tracing.js +180 -0
  557. package/dist/server/response-stage-cacheability.d.ts +37 -0
  558. package/dist/server/response-stage-cacheability.js +55 -0
  559. package/dist/server/response-stage-policy.d.ts +23 -0
  560. package/dist/server/response-stage-policy.js +89 -0
  561. package/dist/server/response-stage.d.ts +5 -0
  562. package/dist/server/response-stage.js +7 -0
  563. package/dist/server/response-start-tracing.d.ts +14 -0
  564. package/dist/server/response-start-tracing.js +80 -0
  565. package/dist/server/revalidation-host.d.ts +2 -3
  566. package/dist/server/revalidation-host.js +2 -1
  567. package/dist/server/revalidation-request.d.ts +8 -0
  568. package/dist/server/revalidation-request.js +37 -0
  569. package/dist/server/rsc-completion-metadata.d.ts +6 -7
  570. package/dist/server/rsc-stream-hints.d.ts +18 -7
  571. package/dist/server/rsc-stream-hints.js +70 -35
  572. package/dist/server/seed-cache.d.ts +2 -3
  573. package/dist/server/seed-cache.js +8 -7
  574. package/dist/server/server-action-not-found.d.ts +5 -6
  575. package/dist/server/server-globals.d.ts +2 -3
  576. package/dist/server/server-globals.js +13 -0
  577. package/dist/server/skip-cache-proof.d.ts +4 -4
  578. package/dist/server/socket-error-backstop.d.ts +5 -6
  579. package/dist/server/socket-error-backstop.js +1 -1
  580. package/dist/server/static-file-cache.d.ts +5 -6
  581. package/dist/server/static-file-cache.js +9 -7
  582. package/dist/server/static-file-signal.d.ts +16 -0
  583. package/dist/server/static-file-signal.js +82 -0
  584. package/dist/server/static-layout-client-reuse-proof.d.ts +4 -5
  585. package/dist/server/streaming-metadata.d.ts +2 -3
  586. package/dist/server/tracer.d.ts +5 -0
  587. package/dist/server/tracer.js +13 -0
  588. package/dist/server/worker-prerender-discovery.d.ts +18 -0
  589. package/dist/server/worker-prerender-discovery.js +55 -0
  590. package/dist/server/worker-revalidation-context.d.ts +2 -3
  591. package/dist/server/worker-revalidation-context.js +5 -5
  592. package/dist/server/worker-stages.d.ts +43 -0
  593. package/dist/server/worker-stages.js +25 -0
  594. package/dist/server/worker-utils.d.ts +5 -6
  595. package/dist/server/worker-utils.js +4 -4
  596. package/dist/server/workers-tracing.d.ts +17 -0
  597. package/dist/server/workers-tracing.js +27 -0
  598. package/dist/shims/amp.d.ts +3 -4
  599. package/dist/shims/app-router-scroll-state.d.ts +9 -10
  600. package/dist/shims/app-router-scroll.d.ts +4 -5
  601. package/dist/shims/app-router-scroll.js +2 -1
  602. package/dist/shims/app.d.ts +5 -6
  603. package/dist/shims/before-interactive-context.d.ts +5 -6
  604. package/dist/shims/cache-callable-runtime.d.ts +44 -4
  605. package/dist/shims/cache-callable-runtime.js +168 -8
  606. package/dist/shims/cache-for-request.d.ts +2 -3
  607. package/dist/shims/cache-handler.d.ts +33 -20
  608. package/dist/shims/cache-handler.js +61 -2
  609. package/dist/shims/cache-request-state.d.ts +28 -29
  610. package/dist/shims/cache-runtime.d.ts +23 -21
  611. package/dist/shims/cache-runtime.js +239 -121
  612. package/dist/shims/cache.d.ts +15 -15
  613. package/dist/shims/cache.js +25 -13
  614. package/dist/shims/cacheability-classification.d.ts +106 -0
  615. package/dist/shims/cacheability-classification.js +161 -0
  616. package/dist/shims/cdn-cache-state.d.ts +13 -0
  617. package/dist/shims/cdn-cache-state.js +23 -0
  618. package/dist/shims/cdn-cache.d.ts +76 -18
  619. package/dist/shims/cdn-cache.js +40 -39
  620. package/dist/shims/client-hook-error.d.ts +3 -4
  621. package/dist/shims/client-locale.d.ts +2 -3
  622. package/dist/shims/client-page-root.d.ts +24 -0
  623. package/dist/shims/client-page-root.js +121 -0
  624. package/dist/shims/compat-router.d.ts +2 -3
  625. package/dist/shims/config.d.ts +3 -4
  626. package/dist/shims/constants.d.ts +73 -74
  627. package/dist/shims/constants.js +1 -1
  628. package/dist/shims/default-not-found.d.ts +2 -3
  629. package/dist/shims/document.d.ts +9 -9
  630. package/dist/shims/dynamic-preload-chunks.d.ts +2 -3
  631. package/dist/shims/dynamic-preload-chunks.js +17 -13
  632. package/dist/shims/dynamic.d.ts +3 -3
  633. package/dist/shims/error-boundary-navigation.d.ts +3 -4
  634. package/dist/shims/error-boundary.d.ts +17 -18
  635. package/dist/shims/error-boundary.js +17 -11
  636. package/dist/shims/error.d.ts +4 -4
  637. package/dist/shims/error.js +1 -1
  638. package/dist/shims/error.react-server.d.ts +3 -4
  639. package/dist/shims/fetch-cache.d.ts +22 -22
  640. package/dist/shims/fetch-cache.js +50 -20
  641. package/dist/shims/font-google-base.d.ts +9 -9
  642. package/dist/shims/font-google-base.js +2 -1
  643. package/dist/shims/font-local.d.ts +3 -3
  644. package/dist/shims/font-local.js +1 -1
  645. package/dist/shims/font-utils.d.ts +14 -15
  646. package/dist/shims/form.d.ts +2 -2
  647. package/dist/shims/form.js +10 -7
  648. package/dist/shims/hash-scroll.d.ts +5 -6
  649. package/dist/shims/head-state.d.ts +4 -5
  650. package/dist/shims/head.d.ts +16 -16
  651. package/dist/shims/head.js +5 -4
  652. package/dist/shims/headers.d.ts +68 -32
  653. package/dist/shims/headers.js +101 -10
  654. package/dist/shims/i18n-context.d.ts +5 -6
  655. package/dist/shims/i18n-state.d.ts +4 -5
  656. package/dist/shims/image-config.d.ts +5 -6
  657. package/dist/shims/image-config.js +2 -0
  658. package/dist/shims/image.d.ts +5 -5
  659. package/dist/shims/image.js +12 -8
  660. package/dist/shims/internal/als-registry.d.ts +4 -5
  661. package/dist/shims/internal/api-utils.d.ts +3 -4
  662. package/dist/shims/internal/app-page-props-cache-key.d.ts +32 -4
  663. package/dist/shims/internal/app-page-props-cache-key.js +53 -1
  664. package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +5 -6
  665. package/dist/shims/internal/app-prefetch-rsc-request.d.ts +13 -0
  666. package/dist/shims/internal/app-prefetch-rsc-request.js +12 -0
  667. package/dist/shims/internal/app-route-detection.d.ts +2 -2
  668. package/dist/shims/internal/app-route-prefetch-policy.d.ts +5 -6
  669. package/dist/shims/internal/app-route-prefetch-policy.js +1 -0
  670. package/dist/shims/internal/app-router-context.d.ts +9 -10
  671. package/dist/shims/internal/cookie-serialize.d.ts +4 -5
  672. package/dist/shims/internal/format-url-object.d.ts +7 -0
  673. package/dist/shims/internal/format-url-object.js +53 -0
  674. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +6 -7
  675. package/dist/shims/internal/hybrid-client-route-owner-direct.js +29 -11
  676. package/dist/shims/internal/hybrid-client-route-owner.d.ts +3 -3
  677. package/dist/shims/internal/hybrid-client-route-owner.js +5 -4
  678. package/dist/shims/internal/interpolate-as.d.ts +5 -6
  679. package/dist/shims/internal/interpolate-as.js +4 -2
  680. package/dist/shims/internal/link-status-registry.d.ts +5 -6
  681. package/dist/shims/internal/make-hanging-promise.d.ts +8 -3
  682. package/dist/shims/internal/make-hanging-promise.js +13 -2
  683. package/dist/shims/internal/navigation-untracked.d.ts +2 -3
  684. package/dist/shims/internal/normalize-router-href.d.ts +15 -0
  685. package/dist/shims/internal/normalize-router-href.js +41 -0
  686. package/dist/shims/internal/pages-data-fetch-dedup.d.ts +8 -9
  687. package/dist/shims/internal/pages-data-target.d.ts +8 -6
  688. package/dist/shims/internal/pages-data-target.js +32 -36
  689. package/dist/shims/internal/pages-data-url.d.ts +4 -5
  690. package/dist/shims/internal/pages-data-url.js +2 -1
  691. package/dist/shims/internal/pages-router-accessor.d.ts +3 -4
  692. package/dist/shims/internal/pages-router-components.d.ts +3 -4
  693. package/dist/shims/internal/route-pattern-for-warning.d.ts +5 -6
  694. package/dist/shims/internal/route-pattern-for-warning.js +3 -3
  695. package/dist/shims/internal/router-context.d.ts +2 -3
  696. package/dist/shims/internal/thenable-well-known-properties.d.ts +10 -0
  697. package/dist/shims/internal/thenable-well-known-properties.js +33 -0
  698. package/dist/shims/internal/utils.d.ts +7 -8
  699. package/dist/shims/internal/work-unit-async-storage.d.ts +12 -11
  700. package/dist/shims/layout-segment-context.d.ts +3 -4
  701. package/dist/shims/link-prefetch.d.ts +9 -10
  702. package/dist/shims/link.d.ts +4 -4
  703. package/dist/shims/link.js +67 -116
  704. package/dist/shims/metadata.d.ts +15 -16
  705. package/dist/shims/metadata.js +40 -36
  706. package/dist/shims/navigation-context-accessors.d.ts +9 -0
  707. package/dist/shims/navigation-context-accessors.js +19 -0
  708. package/dist/shims/navigation-context-state.d.ts +27 -18
  709. package/dist/shims/navigation-errors.d.ts +18 -19
  710. package/dist/shims/navigation-state.d.ts +6 -7
  711. package/dist/shims/navigation.d.ts +80 -68
  712. package/dist/shims/navigation.js +45 -17
  713. package/dist/shims/navigation.react-server.d.ts +9 -9
  714. package/dist/shims/navigation.react-server.js +1 -1
  715. package/dist/shims/offline.d.ts +2 -3
  716. package/dist/shims/og.d.ts +2 -2
  717. package/dist/shims/pages-router-runtime.d.ts +4 -5
  718. package/dist/shims/ppr-fallback-shell.d.ts +13 -14
  719. package/dist/shims/readonly-url-search-params.d.ts +2 -3
  720. package/dist/shims/request-context.d.ts +7 -6
  721. package/dist/shims/root-params.d.ts +14 -15
  722. package/dist/shims/router-state.d.ts +5 -6
  723. package/dist/shims/router-state.js +1 -1
  724. package/dist/shims/router.d.ts +22 -21
  725. package/dist/shims/router.js +339 -164
  726. package/dist/shims/script-nonce-context.d.ts +8 -6
  727. package/dist/shims/script-nonce-context.js +15 -6
  728. package/dist/shims/script.d.ts +4 -4
  729. package/dist/shims/script.js +9 -7
  730. package/dist/shims/search-params-gate.d.ts +35 -0
  731. package/dist/shims/search-params-gate.js +32 -0
  732. package/dist/shims/server.d.ts +19 -51
  733. package/dist/shims/server.js +14 -28
  734. package/dist/shims/slot.d.ts +33 -15
  735. package/dist/shims/slot.js +41 -9
  736. package/dist/shims/streamed-icons.d.ts +3 -4
  737. package/dist/shims/thenable-params.d.ts +5 -7
  738. package/dist/shims/thenable-params.js +3 -24
  739. package/dist/shims/unified-request-context.d.ts +34 -31
  740. package/dist/shims/unified-request-context.js +34 -24
  741. package/dist/shims/unrecognized-action-error.d.ts +3 -4
  742. package/dist/shims/url-safety.d.ts +5 -6
  743. package/dist/shims/url-utils.d.ts +18 -12
  744. package/dist/shims/url-utils.js +10 -1
  745. package/dist/shims/use-merged-ref.d.ts +2 -3
  746. package/dist/shims/user-agent.d.ts +31 -0
  747. package/dist/shims/user-agent.js +16 -0
  748. package/dist/shims/web-vitals.d.ts +2 -2
  749. package/dist/typegen.d.ts +3 -4
  750. package/dist/utils/asset-prefix.d.ts +7 -8
  751. package/dist/utils/base-path.d.ts +5 -6
  752. package/dist/utils/built-asset-url.d.ts +2 -3
  753. package/dist/utils/built-asset-url.js +1 -1
  754. package/dist/utils/cache-control-metadata.d.ts +4 -5
  755. package/dist/utils/client-build-manifest.d.ts +6 -7
  756. package/dist/utils/client-build-manifest.js +2 -1
  757. package/dist/utils/client-entry-manifest.d.ts +6 -7
  758. package/dist/utils/client-runtime-metadata.d.ts +8 -3
  759. package/dist/utils/client-runtime-metadata.js +18 -1
  760. package/dist/utils/commonjs-loader.d.ts +4 -5
  761. package/dist/utils/compare.d.ts +2 -3
  762. package/dist/utils/deployment-id.d.ts +6 -7
  763. package/dist/utils/dev-error-recovery-event.d.ts +2 -3
  764. package/dist/utils/dev-stack-sourcemap-endpoint.d.ts +2 -3
  765. package/dist/utils/domain-locale.d.ts +7 -8
  766. package/dist/utils/encode-cache-tag.d.ts +3 -4
  767. package/dist/utils/error-cause.d.ts +2 -3
  768. package/dist/utils/external-url.d.ts +2 -3
  769. package/dist/utils/has-trailing-comma.d.ts +3 -4
  770. package/dist/utils/hash.d.ts +3 -4
  771. package/dist/utils/html-limited-bots.d.ts +3 -4
  772. package/dist/utils/lazy-chunks.d.ts +8 -9
  773. package/dist/utils/lazy-chunks.js +4 -4
  774. package/dist/utils/manifest-paths.d.ts +5 -6
  775. package/dist/utils/mdx-scan.d.ts +11 -4
  776. package/dist/utils/mdx-scan.js +27 -1
  777. package/dist/utils/middleware-request-headers.d.ts +7 -6
  778. package/dist/utils/middleware-request-headers.js +6 -1
  779. package/dist/utils/navigation-signal.d.ts +3 -3
  780. package/dist/utils/navigation-signal.js +16 -1
  781. package/dist/utils/number.d.ts +2 -3
  782. package/dist/utils/package-name.d.ts +3 -4
  783. package/dist/utils/parse-cookie.d.ts +4 -5
  784. package/dist/utils/path.d.ts +8 -9
  785. package/dist/utils/plugin-options.d.ts +2 -3
  786. package/dist/utils/precompressed-variant.d.ts +3 -4
  787. package/dist/utils/prerender-output-paths.d.ts +9 -10
  788. package/dist/utils/prerender-output-paths.js +16 -9
  789. package/dist/utils/project.d.ts +19 -30
  790. package/dist/utils/project.js +20 -29
  791. package/dist/utils/promise.d.ts +2 -3
  792. package/dist/utils/protocol-headers.d.ts +14 -15
  793. package/dist/utils/public-file-path.d.ts +2 -3
  794. package/dist/utils/public-routes.d.ts +2 -3
  795. package/dist/utils/query.d.ts +14 -9
  796. package/dist/utils/query.js +22 -1
  797. package/dist/utils/react-compiler-support.d.ts +6 -7
  798. package/dist/utils/react-version.d.ts +4 -3
  799. package/dist/utils/react-version.js +19 -1
  800. package/dist/utils/record.d.ts +2 -3
  801. package/dist/utils/redirect-digest.d.ts +3 -4
  802. package/dist/utils/regex-safety.d.ts +4 -5
  803. package/dist/utils/regex.d.ts +2 -3
  804. package/dist/utils/safe-json-file.d.ts +2 -3
  805. package/dist/utils/sorted-array.d.ts +2 -3
  806. package/dist/utils/text-stream.d.ts +3 -4
  807. package/dist/utils/vinext-root.d.ts +2 -3
  808. package/dist/utils/virtual-module.d.ts +3 -4
  809. package/dist/utils/vite-cli-invocation.d.ts +21 -0
  810. package/dist/utils/vite-cli-invocation.js +144 -0
  811. package/dist/utils/vite-version.d.ts +5 -6
  812. package/next-package.json +4 -0
  813. package/package.json +55 -6
@@ -1,21 +1,45 @@
1
1
  import path, { toSlash } from "../deps/.pnpm/pathslash@0.1.0/deps/pathslash/dist/index.js";
2
2
  import { findDir } from "../utils/project.js";
3
- import { apiRouter, pagesRouter } from "../routing/pages-router.js";
4
- import { VINEXT_PRERENDER_SECRET_HEADER } from "../utils/protocol-headers.js";
5
- import { classifyAppRoute, classifyPagesRoute, getAppRouteRenderEntryPath, hasNamedExport } from "./report.js";
6
- import { appRouter } from "../routing/app-router.js";
7
- import { normalizeStaticPathsEntry } from "../routing/route-pattern.js";
8
3
  import { BLOCKED_PAGES, PHASE_PRODUCTION_BUILD } from "../shims/constants.js";
4
+ import { VINEXT_PRERENDER_SECRET_HEADER } from "../utils/protocol-headers.js";
5
+ import { isExternalUrl } from "../utils/external-url.js";
6
+ import { matchHeaders, matchesRewriteSource } from "../config/config-matchers.js";
9
7
  import { loadNextConfig, resolveNextConfig } from "../config/next-config.js";
8
+ import { appRouteHasMainTreeLoadingBoundary, appRouter, matchAppRoute } from "../routing/app-router.js";
9
+ import { apiRouter, matchRoute, pagesRouter } from "../routing/pages-router.js";
10
+ import "../server/headers.js";
11
+ import { matchesMiddlewarePathname } from "../server/middleware-matcher.js";
12
+ import { extractLocaleFromUrl, normalizeDefaultLocalePathname } from "../server/pages-i18n.js";
13
+ import { classifyAppRoute, classifyAppRouteHandler, classifyPagesRoute, extractExportConstNumber, extractExportConstString, extractMiddlewareMatcherConfig, getAppRouteRenderEntryPath, hasRuntimeExportedName } from "./report.js";
14
+ import { normalizeStaticPathname, normalizeStaticPathsEntry } from "../routing/route-pattern.js";
15
+ import { buildPagesDataHref } from "../shims/internal/pages-data-url.js";
16
+ import { normalizePathTrailingSlash } from "../shims/url-utils.js";
17
+ import { pagesRouteHasPriorityOverAppRoute } from "../server/hybrid-route-priority.js";
10
18
  import { readPrerenderSecret } from "./server-manifest.js";
19
+ import { loadMdxEsmReader } from "../utils/mdx-scan.js";
11
20
  import { startProdServer } from "../server/prod-server.js";
12
21
  import { enterPrerenderPhase } from "./prerender-phase.js";
13
- import { buildUrlFromParams, resolveParentParams } from "./prerender.js";
22
+ import { buildUrlFromParams, layoutOnlyParamSets, resolveParentParams, routeStaticParamSets, validateDiscoveredParams } from "./prerender.js";
23
+ import { collectAppPageStaticGenerationRuntimes, hasAppPageGenerateStaticParamsAtLastDynamicSegment, isAppPageStaticEligible, isEdgeRuntime, resolveAppPageDynamicConfig, resolveAppPageSegmentConfig, resolveAppPageStaticGenerationRuntime } from "../server/app-segment-config.js";
24
+ import { resolveBuiltRscEntryPath } from "./server-entry.js";
14
25
  import fs from "node:fs";
15
26
  //#region src/build/prerender-paths.ts
16
27
  const PRERENDER_PATH_DISCOVERY_ENV = "__VINEXT_PRERENDER_PATH_DISCOVERY";
17
28
  const PRERENDER_PATHS_MANIFEST = "vinext-prerender-paths.json";
18
29
  const PATH_DISCOVERY_FETCH_TIMEOUT_MS = 3e4;
30
+ const DEFAULT_REMOTE_PATH_DISCOVERY_RETRY_DELAY_MS = 1e3;
31
+ const DEFAULT_REMOTE_PATH_DISCOVERY_PHASE_TIMEOUT_MS = 12e4;
32
+ function readDiscoveryUserFailure(response, text) {
33
+ if (response.status !== 500 || !response.headers.get("content-type")?.includes("application/json")) return null;
34
+ try {
35
+ const value = JSON.parse(text);
36
+ if (!value || typeof value !== "object" || Array.isArray(value)) return null;
37
+ const error = value.error;
38
+ return typeof error === "string" && error.length > 0 ? error : null;
39
+ } catch {
40
+ return null;
41
+ }
42
+ }
19
43
  function readBuiltBuildId(serverDir) {
20
44
  try {
21
45
  const buildId = fs.readFileSync(path.join(serverDir, "BUILD_ID"), "utf-8").trim();
@@ -25,40 +49,131 @@ function readBuiltBuildId(serverDir) {
25
49
  throw error;
26
50
  }
27
51
  }
52
+ function readBuiltRscBuildId(serverDir) {
53
+ try {
54
+ const buildId = fs.readFileSync(path.join(serverDir, "RSC_BUILD_ID"), "utf-8").trim();
55
+ return buildId.length > 0 ? buildId : null;
56
+ } catch (error) {
57
+ if (error && typeof error === "object" && "code" in error && error.code === "ENOENT") return null;
58
+ throw error;
59
+ }
60
+ }
28
61
  function addPath(paths, seen, pathname) {
29
62
  if (seen.has(pathname)) return;
30
63
  seen.add(pathname);
31
64
  paths.push(pathname);
32
65
  }
33
- function warnDiscoveryFailure(route, error) {
66
+ function throwDiscoveryFailure(route, error) {
34
67
  const message = error instanceof Error ? error.message : String(error);
35
- console.warn(`[vinext] Warning: failed to discover warmup path(s) for ${route}: ${message}`);
68
+ if (/cloudflare:|ERR_UNSUPPORTED_ESM_URL_SCHEME/i.test(message)) throw new Error(`Failed to discover warmup path(s) for ${route}: Cloudflare runtime bindings cannot execute in the local Node prerender server. Use \`vinext-cloudflare deploy --warm-cache\` so path discovery runs against the staged Worker version.`, { cause: error });
69
+ throw new Error(`Failed to discover warmup path(s) for ${route}: ${message}`, { cause: error });
36
70
  }
37
- async function fetchDiscoveryEndpoint(url, headers) {
38
- const controller = new AbortController();
39
- const timeout = setTimeout(() => controller.abort(), PATH_DISCOVERY_FETCH_TIMEOUT_MS);
40
- try {
41
- const res = await fetch(url, {
42
- headers,
43
- signal: controller.signal
44
- });
45
- const text = await res.text();
46
- if (!res.ok || text === "null") return null;
47
- return text;
48
- } catch (error) {
49
- if (error instanceof Error && error.name === "AbortError") throw new Error(`path discovery timed out after ${PATH_DISCOVERY_FETCH_TIMEOUT_MS}ms`);
50
- throw error;
51
- } finally {
52
- clearTimeout(timeout);
71
+ function validatePagesStaticPathsResult(value, route) {
72
+ const expected = "Expected { paths: [], fallback: boolean | 'blocking' }.";
73
+ if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error(`Invalid value returned from getStaticPaths for ${route}. ${expected}`);
74
+ const result = value;
75
+ const extraKeys = Object.keys(result).filter((key) => key !== "paths" && key !== "fallback");
76
+ if (extraKeys.length > 0) throw new Error(`Extra key(s) returned from getStaticPaths for ${route}: ${extraKeys.join(", ")}. ${expected}`);
77
+ if (typeof result.fallback !== "boolean" && result.fallback !== "blocking") throw new Error(`Invalid fallback returned from getStaticPaths for ${route}. ${expected}`);
78
+ if (!Array.isArray(result.paths)) throw new Error(`Invalid paths returned from getStaticPaths for ${route}; paths must be an array.`);
79
+ return {
80
+ fallback: result.fallback,
81
+ paths: result.paths
82
+ };
83
+ }
84
+ function hasUnsafeRawUrlPathCharacter(value) {
85
+ for (let index = 0; index < value.length; index++) {
86
+ const code = value.charCodeAt(index);
87
+ if (code === 92 || code <= 31 || code === 127) return true;
53
88
  }
89
+ return false;
54
90
  }
55
- function fileHasNamedExport(filePath, name) {
56
- if (!filePath) return false;
57
- try {
58
- return hasNamedExport(fs.readFileSync(filePath, "utf-8"), name);
59
- } catch {
60
- return false;
91
+ function validatePagesStaticPathsEntry(entry, pattern) {
92
+ if (typeof entry === "string") {
93
+ if (!entry.startsWith("/") || entry.includes("//") || entry.includes("?") || entry.includes("#") || hasUnsafeRawUrlPathCharacter(entry)) throw new Error(`The provided path \`${entry}\` from getStaticPaths does not match the route pattern \`${pattern}\`.`);
94
+ let decodedSegments;
95
+ try {
96
+ decodedSegments = entry.split("/").map((segment) => decodeURIComponent(segment));
97
+ } catch {
98
+ throw new Error(`The provided path \`${entry}\` from getStaticPaths contains malformed percent-encoding.`);
99
+ }
100
+ if (decodedSegments.some((segment) => segment === "." || segment === "..")) throw new Error(`The provided path \`${entry}\` from getStaticPaths contains a dot path segment.`);
101
+ return entry;
61
102
  }
103
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) return entry;
104
+ const extraKeys = Object.keys(entry).filter((key) => key !== "params" && key !== "locale");
105
+ if (extraKeys.length > 0) throw new Error(`Additional key(s) returned from getStaticPaths for ${pattern}: ${extraKeys.join(", ")}.`);
106
+ if (entry.locale !== void 0 && typeof entry.locale !== "string") throw new Error(`Invalid locale returned from getStaticPaths for ${pattern}.`);
107
+ return {
108
+ ...entry,
109
+ params: validateDiscoveredParams(entry.params, pattern, "getStaticPaths")
110
+ };
111
+ }
112
+ async function fetchDiscoveryEndpoint(url, headers, retryOptions = {}) {
113
+ const hasSharedPhaseDeadline = retryOptions.deadlineAt !== void 0;
114
+ const retryDelayMs = Math.max(0, retryOptions.retryDelayMs ?? (hasSharedPhaseDeadline ? 1e3 : 0));
115
+ const phaseTimeoutMs = Math.max(1, retryOptions.phaseTimeoutMs ?? 12e4);
116
+ const retryBudgetDelayMs = retryDelayMs > 0 ? retryDelayMs : DEFAULT_REMOTE_PATH_DISCOVERY_RETRY_DELAY_MS;
117
+ const retries = Math.max(0, retryOptions.retries ?? (hasSharedPhaseDeadline ? Math.ceil(phaseTimeoutMs / retryBudgetDelayMs) : 0));
118
+ const deadlineAt = retryOptions.deadlineAt ?? Date.now() + phaseTimeoutMs;
119
+ let lastError;
120
+ let attemptsRun = 0;
121
+ let lastTransientStatus;
122
+ const attemptSummary = () => ` after ${attemptsRun} attempt(s)${lastTransientStatus === void 0 ? "" : `; last transient status was HTTP ${lastTransientStatus}`}`;
123
+ const phaseTimeoutError = () => /* @__PURE__ */ new Error(`remote path discovery exceeded its ${phaseTimeoutMs}ms phase deadline${attemptSummary()}`);
124
+ for (let attempt = 0; attempt <= retries; attempt++) {
125
+ const remainingMs = deadlineAt - Date.now();
126
+ if (remainingMs <= 0) throw phaseTimeoutError();
127
+ attemptsRun++;
128
+ const controller = new AbortController();
129
+ const attemptTimeoutMs = Math.min(PATH_DISCOVERY_FETCH_TIMEOUT_MS, remainingMs);
130
+ let timeout;
131
+ let shouldRetry = true;
132
+ try {
133
+ const request = (async () => {
134
+ const res = await fetch(url, {
135
+ headers,
136
+ signal: controller.signal
137
+ });
138
+ return {
139
+ res,
140
+ text: await res.text()
141
+ };
142
+ })();
143
+ const timedOut = new Promise((_resolve, reject) => {
144
+ timeout = setTimeout(() => {
145
+ controller.abort();
146
+ reject(new DOMException(`Timed out after ${attemptTimeoutMs}ms`, "AbortError"));
147
+ }, attemptTimeoutMs);
148
+ });
149
+ const { res, text } = await Promise.race([request, timedOut]);
150
+ if (res.ok) {
151
+ if (res.status === 204) return null;
152
+ return text;
153
+ }
154
+ const userFailure = readDiscoveryUserFailure(res, text);
155
+ const detail = userFailure ?? (/cloudflare:|ERR_UNSUPPORTED_ESM_URL_SCHEME/i.test(text) ? text.trim() : "");
156
+ lastError = /* @__PURE__ */ new Error(`path discovery returned HTTP ${res.status}${detail ? `: ${detail}` : ""}`);
157
+ if (!(res.status === 404 || res.status >= 500 && res.status <= 599 && userFailure === null)) {
158
+ shouldRetry = false;
159
+ throw lastError;
160
+ }
161
+ lastTransientStatus = res.status;
162
+ } catch (error) {
163
+ if (Date.now() >= deadlineAt) throw phaseTimeoutError();
164
+ lastError = error instanceof Error && error.name === "AbortError" ? /* @__PURE__ */ new Error(`path discovery timed out after ${attemptTimeoutMs}ms`) : error;
165
+ if (!shouldRetry) throw lastError;
166
+ } finally {
167
+ if (timeout !== void 0) clearTimeout(timeout);
168
+ }
169
+ if (attempt < retries && retryDelayMs > 0) {
170
+ const delayMs = Math.min(retryDelayMs, Math.max(0, deadlineAt - Date.now()));
171
+ if (delayMs <= 0) throw phaseTimeoutError();
172
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
173
+ }
174
+ }
175
+ const message = lastError instanceof Error ? lastError.message : String(lastError);
176
+ throw new Error(`${message}${attemptSummary()}`, { cause: lastError });
62
177
  }
63
178
  function resolveConfiguredRouteDirs(root, routeRootConfig) {
64
179
  if (!routeRootConfig) return {
@@ -83,16 +198,12 @@ function resolveConfiguredRouteDirs(root, routeRootConfig) {
83
198
  pagesDir: fs.existsSync(pagesDir) ? pagesDir : null
84
199
  };
85
200
  }
86
- function appRouteMayHaveGenerateStaticParams(route) {
87
- if (fileHasNamedExport(route.pagePath, "generateStaticParams")) return true;
88
- return route.layouts.some((layoutPath) => fileHasNamedExport(layoutPath, "generateStaticParams"));
89
- }
90
201
  async function shouldStartPathDiscoveryServer(options) {
91
202
  if (options.appDir) {
92
- if ((await appRouter(options.appDir, options.pageExtensions)).some((route) => route.isDynamic && appRouteMayHaveGenerateStaticParams(route))) return true;
203
+ if ((await appRouter(options.appDir, options.pageExtensions)).some((route) => route.isDynamic)) return true;
93
204
  }
94
205
  if (options.pagesDir) {
95
- if ((await pagesRouter(options.pagesDir, options.pageExtensions)).some((route) => route.isDynamic && fileHasNamedExport(route.filePath, "getStaticPaths"))) return true;
206
+ if ((await pagesRouter(options.pagesDir, options.pageExtensions)).some((route) => route.isDynamic)) return true;
96
207
  }
97
208
  return false;
98
209
  }
@@ -113,73 +224,294 @@ async function collectPagesPaths(options) {
113
224
  const apiPatterns = new Set(apiRoutes.map((route) => route.pattern));
114
225
  const paths = [];
115
226
  const seen = /* @__PURE__ */ new Set();
227
+ const dataPaths = [];
228
+ const seenDataPaths = /* @__PURE__ */ new Set();
229
+ const fallbackRoutePatterns = [];
230
+ const nonDynamicPaths = [];
231
+ const seenNonDynamicPaths = /* @__PURE__ */ new Set();
116
232
  for (const route of pageRoutes) {
117
233
  if (apiPatterns.has(route.pattern)) continue;
118
234
  if (BLOCKED_PAGES.includes(route.pattern)) continue;
119
235
  if (route.pattern === "/404" || route.pattern === "/500" || route.pattern === "/_error") continue;
120
- const { type } = classifyPagesRoute(route.filePath);
121
- if (type === "api" || type === "ssr") continue;
236
+ const { hasServerSideProps, hasStaticProps, type } = classifyPagesRoute(route.filePath);
237
+ if (type === "api") continue;
122
238
  if (!route.isDynamic) {
123
- addPath(paths, seen, route.pattern);
239
+ if (options.i18n) for (const locale of options.i18n.locales) {
240
+ const pathname = localizePagesPath(route.pattern, locale, options.i18n);
241
+ addPath(paths, seen, pathname);
242
+ addPath(nonDynamicPaths, seenNonDynamicPaths, pathname);
243
+ if (hasStaticProps || hasServerSideProps) addPath(dataPaths, seenDataPaths, pathname);
244
+ }
245
+ else {
246
+ addPath(paths, seen, route.pattern);
247
+ addPath(nonDynamicPaths, seenNonDynamicPaths, route.pattern);
248
+ if (hasStaticProps || hasServerSideProps) addPath(dataPaths, seenDataPaths, route.pattern);
249
+ }
124
250
  continue;
125
251
  }
126
- if (!fileHasNamedExport(route.filePath, "getStaticPaths")) continue;
252
+ if (!options.enumerateDynamicPaths) continue;
253
+ if (type === "ssr") continue;
127
254
  if (!options.baseUrl) continue;
128
255
  try {
129
256
  const search = new URLSearchParams({ pattern: route.pattern });
130
- const text = await fetchDiscoveryEndpoint(`${options.baseUrl}/__vinext/prerender/pages-static-paths?${search}`, options.secretHeaders);
257
+ if (options.i18n) {
258
+ search.set("locales", JSON.stringify(options.i18n.locales));
259
+ search.set("defaultLocale", options.i18n.defaultLocale);
260
+ }
261
+ const text = await fetchDiscoveryEndpoint(`${options.baseUrl}/__vinext/prerender/pages-static-paths?${search}`, options.secretHeaders, options.retryOptions);
131
262
  if (text === null) continue;
132
- const pathsResult = JSON.parse(text);
133
- for (const item of pathsResult.paths ?? []) {
134
- const normalized = normalizeStaticPathsEntry(item, route.pattern);
263
+ const pathsResult = validatePagesStaticPathsResult(JSON.parse(text), route.pattern);
264
+ if (pathsResult.fallback !== false) fallbackRoutePatterns.push({
265
+ kind: "pages-page",
266
+ pattern: route.pattern
267
+ });
268
+ for (const item of pathsResult.paths) {
269
+ const validatedItem = validatePagesStaticPathsEntry(item, route.pattern);
270
+ let itemToNormalize = validatedItem;
271
+ let locale = options.i18n?.defaultLocale;
272
+ if (options.i18n && typeof validatedItem === "string") itemToNormalize = extractPagesStaticPathLocale(validatedItem, options.i18n).url;
273
+ else if (options.i18n && validatedItem && typeof validatedItem === "object" && validatedItem.locale) {
274
+ if (!options.i18n.locales.includes(validatedItem.locale)) throw new Error(`Invalid locale returned from getStaticPaths for ${route.pattern}: ${validatedItem.locale}`);
275
+ locale = validatedItem.locale;
276
+ }
277
+ const normalized = normalizeStaticPathsEntry(itemToNormalize, route.pattern);
135
278
  if ("error" in normalized) throw new Error(normalized.error);
136
- addPath(paths, seen, buildUrlFromParams(route.pattern, normalized.params));
279
+ const pathname = typeof validatedItem === "string" ? normalizeStaticPathname(validatedItem) : localizePagesPath(buildUrlFromParams(route.pattern, normalized.params), locale, options.i18n);
280
+ addPath(paths, seen, pathname);
281
+ if (hasStaticProps) addPath(dataPaths, seenDataPaths, pathname);
137
282
  }
138
283
  } catch (error) {
139
- warnDiscoveryFailure(route.pattern, error);
284
+ throwDiscoveryFailure(route.pattern, error);
285
+ }
286
+ }
287
+ return {
288
+ dataPaths,
289
+ fallbackRoutePatterns,
290
+ nonDynamicPaths,
291
+ paths
292
+ };
293
+ }
294
+ async function excludePagesApiWarmPaths(options) {
295
+ const apiRoutes = await apiRouter(options.pagesDir, options.pageExtensions);
296
+ return options.paths.filter((pathname) => {
297
+ const pagesPathname = options.i18n ? extractLocaleFromUrl(pathname, options.i18n).url : pathname;
298
+ if (pagesPathname !== "/api" && !pagesPathname.startsWith("/api/")) return true;
299
+ return matchRoute(pagesPathname, apiRoutes) === null;
300
+ });
301
+ }
302
+ async function resolvePagesWarmRouteMetadata(options) {
303
+ const pageRoutes = await pagesRouter(options.pagesDir, options.pageExtensions);
304
+ const classifications = /* @__PURE__ */ new Map();
305
+ const dataPaths = [];
306
+ const routePatterns = {};
307
+ for (const pathname of options.paths) {
308
+ const pagesPathname = options.i18n ? extractLocaleFromUrl(pathname, options.i18n).url : pathname;
309
+ const match = matchRoute(pagesPathname, pageRoutes);
310
+ if (!match) continue;
311
+ routePatterns[pathname] = {
312
+ kind: "pages-page",
313
+ pattern: match.route.pattern
314
+ };
315
+ let classification = classifications.get(match.route.filePath);
316
+ if (!classification) {
317
+ classification = classifyPagesRoute(match.route.filePath);
318
+ classifications.set(match.route.filePath, classification);
140
319
  }
320
+ const { hasServerSideProps, hasStaticProps } = classification;
321
+ if (hasServerSideProps || hasStaticProps) dataPaths.push(pathname);
141
322
  }
142
- return paths;
323
+ return {
324
+ dataPaths,
325
+ routePatterns
326
+ };
327
+ }
328
+ function localizePagesPath(pathname, locale, i18n) {
329
+ if (!i18n || !locale || locale === i18n.defaultLocale) return pathname;
330
+ return pathname === "/" ? `/${locale}` : `/${locale}${pathname}`;
331
+ }
332
+ /**
333
+ * Next.js data URLs always carry the locale segment, including the default
334
+ * locale that is omitted from the corresponding public HTML pathname.
335
+ *
336
+ * Ported from Next.js:
337
+ * packages/next/src/shared/lib/router/utils/format-next-pathname-info.ts
338
+ */
339
+ function localizePagesDataPath(pathname, i18n) {
340
+ if (!i18n) return pathname;
341
+ if (extractPagesStaticPathLocale(pathname, i18n).explicitLocalePrefix) return pathname;
342
+ return pathname === "/" ? `/${i18n.defaultLocale}` : `/${i18n.defaultLocale}${pathname}`;
343
+ }
344
+ function extractPagesStaticPathLocale(url, i18n) {
345
+ const queryIndex = url.indexOf("?");
346
+ const pathname = queryIndex === -1 ? url : url.slice(0, queryIndex);
347
+ const query = queryIndex === -1 ? "" : url.slice(queryIndex);
348
+ const parts = pathname.split("/").filter(Boolean);
349
+ const locale = parts.length > 0 ? i18n.locales.find((candidate) => candidate.toLowerCase() === parts[0].toLowerCase()) : void 0;
350
+ if (!locale) return extractLocaleFromUrl(url, i18n);
351
+ const rest = `/${parts.slice(1).join("/")}`;
352
+ return {
353
+ explicitLocalePrefix: parts[0],
354
+ locale,
355
+ url: `${rest || "/"}${query}`
356
+ };
357
+ }
358
+ /**
359
+ * Whether Next.js classifies an App page route as static or SSG, read from its
360
+ * layout, page and parallel-slot sources with the helpers dispatch applies to
361
+ * the loaded modules. Only such a route has listed paths.
362
+ *
363
+ * An MDX source read without the MDX parser has unknown exports, so its route
364
+ * is "unreadable". Its paths are still listed: the built runtime reads the real
365
+ * exports and never stores a route that isn't static, while an unlisted path's
366
+ * render failure would be dropped instead of failing. But no probe renders an
367
+ * unreadable route's fallback, so it never certifies one.
368
+ */
369
+ function classifyAppPageRouteStaticEligibility(route, readMdxEsm) {
370
+ let unreadable = false;
371
+ const readSegmentConfig = (filePath) => {
372
+ if (!filePath) return null;
373
+ let code = fs.readFileSync(filePath, "utf8");
374
+ if (filePath.toLowerCase().endsWith(".mdx")) {
375
+ let esm = null;
376
+ try {
377
+ esm = readMdxEsm?.(code) ?? null;
378
+ } catch {}
379
+ unreadable ||= esm === null;
380
+ code = esm ?? "";
381
+ }
382
+ const dynamic = extractExportConstString(code, "dynamic");
383
+ const revalidate = extractExportConstNumber(code, "revalidate");
384
+ const runtime = extractExportConstString(code, "runtime");
385
+ return {
386
+ ...dynamic === null ? {} : { dynamic },
387
+ ...hasRuntimeExportedName(code, "generateStaticParams") ? { generateStaticParams() {} } : {},
388
+ ...revalidate === null ? {} : { revalidate },
389
+ ...runtime === null ? {} : { runtime }
390
+ };
391
+ };
392
+ const layouts = route.layouts.map(readSegmentConfig);
393
+ const page = readSegmentConfig(route.pagePath);
394
+ const parallelBranches = route.parallelSlots.map((slot) => ({
395
+ configLayouts: (slot.configLayoutPaths ?? []).map(readSegmentConfig),
396
+ configLayoutTreePositions: slot.configLayoutTreePositions ?? [],
397
+ isDefault: !slot.pagePath,
398
+ layout: readSegmentConfig(slot.layoutPath),
399
+ name: slot.name,
400
+ ownerTreePosition: slot.ownerTreePosition ?? null,
401
+ page: readSegmentConfig(slot.pagePath ?? slot.defaultPath),
402
+ routeSegments: slot.routeSegments
403
+ }));
404
+ if (unreadable) return "unreadable";
405
+ const segmentConfig = resolveAppPageSegmentConfig({
406
+ layouts,
407
+ layoutTreePositions: route.layoutTreePositions,
408
+ page,
409
+ parallelBranches,
410
+ routeSegments: route.routeSegments
411
+ });
412
+ return isAppPageStaticEligible({
413
+ dynamicConfig: segmentConfig.dynamicConfig,
414
+ hasGenerateStaticParams: hasAppPageGenerateStaticParamsAtLastDynamicSegment({
415
+ childrenSlot: route.childrenSlot ?? null,
416
+ layouts,
417
+ layoutTreePositions: route.layoutTreePositions,
418
+ page,
419
+ parallelBranches,
420
+ routeSegments: route.routeSegments
421
+ }),
422
+ isDynamicRoute: route.isDynamic,
423
+ isStaticGenerationEdgeRuntime: isEdgeRuntime(resolveAppPageStaticGenerationRuntime(collectAppPageStaticGenerationRuntimes({
424
+ childrenSlot: route.childrenSlot ?? null,
425
+ layouts,
426
+ layoutTreePositions: route.layoutTreePositions,
427
+ page,
428
+ parallelBranches,
429
+ routeSegments: route.routeSegments
430
+ }))),
431
+ revalidateSeconds: segmentConfig.revalidateSeconds
432
+ }) ? "eligible" : "ineligible";
433
+ }
434
+ /** Keys a path an App page route lists by the route and the pathname together. */
435
+ function appPageListingKey(routePattern, pathname) {
436
+ return `${routePattern}\0${pathname}`;
143
437
  }
144
438
  async function collectAppPaths(options) {
145
439
  const routes = await appRouter(options.appDir, options.pageExtensions);
146
440
  const paths = [];
147
441
  const seen = /* @__PURE__ */ new Set();
442
+ const routeHandlerPaths = [];
443
+ const seenRouteHandlerPaths = /* @__PURE__ */ new Set();
444
+ const fallbackRoutePatterns = [];
445
+ const nonDynamicPaths = [];
446
+ const seenNonDynamicPaths = /* @__PURE__ */ new Set();
447
+ const listedRoutePaths = /* @__PURE__ */ new Set();
148
448
  const staticParamsCache = /* @__PURE__ */ new Map();
449
+ let requireNonEmptyStaticParams = false;
149
450
  const staticParamsMap = new Proxy({}, {
150
451
  get(_target, pattern) {
151
452
  return async ({ params }) => {
152
453
  if (!options.baseUrl) return null;
153
- const cacheKey = `${pattern}\0${JSON.stringify(params)}`;
154
- const cached = staticParamsCache.get(cacheKey);
155
- if (cached !== void 0) return cached;
156
- const request = (async () => {
157
- const search = new URLSearchParams({ pattern });
158
- if (Object.keys(params).length > 0) search.set("parentParams", JSON.stringify(params));
159
- const text = await fetchDiscoveryEndpoint(`${options.baseUrl}/__vinext/prerender/static-params?${search}`, options.secretHeaders);
160
- if (text === null) return null;
161
- return JSON.parse(text);
162
- })();
163
- request.catch(() => staticParamsCache.delete(cacheKey));
164
- staticParamsCache.set(cacheKey, request);
165
- return request;
454
+ const rejectEmptyResults = requireNonEmptyStaticParams;
455
+ const cacheKey = `${pattern}\0${JSON.stringify(params)}\0${rejectEmptyResults}`;
456
+ let request = staticParamsCache.get(cacheKey);
457
+ if (request === void 0) {
458
+ request = (async () => {
459
+ const search = new URLSearchParams({ pattern });
460
+ if (Object.keys(params).length > 0) search.set("parentParams", JSON.stringify(params));
461
+ if (rejectEmptyResults) search.set("rejectEmptyResults", "1");
462
+ const text = await fetchDiscoveryEndpoint(`${options.baseUrl}/__vinext/prerender/static-params?${search}`, options.secretHeaders, options.retryOptions);
463
+ if (text === null) return null;
464
+ const value = JSON.parse(text);
465
+ if (!Array.isArray(value)) throw new Error(`generateStaticParams must return an array for ${pattern}.`);
466
+ return value.map((entry) => {
467
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) throw new Error(`generateStaticParams must return parameter objects for ${pattern}.`);
468
+ return validateDiscoveredParams({
469
+ ...params,
470
+ ...entry
471
+ }, pattern, "generateStaticParams");
472
+ });
473
+ })();
474
+ request.catch(() => staticParamsCache.delete(cacheKey));
475
+ staticParamsCache.set(cacheKey, request);
476
+ }
477
+ const value = await request;
478
+ if (rejectEmptyResults && value?.length === 0) throw new Error("When using Cache Components, all `generateStaticParams` functions must return at least one result. This is to ensure that we can perform build-time validation that there is no other dynamic accesses that would cause a runtime error.\n\nLearn more: https://nextjs.org/docs/messages/empty-generate-static-params");
479
+ return value;
166
480
  };
167
481
  },
168
482
  has() {
169
483
  return false;
170
484
  }
171
485
  });
486
+ const readMdxEsm = !options.cacheComponents && options.pageExtensions.includes("mdx") ? await loadMdxEsmReader(options.root) : null;
172
487
  for (const route of routes) {
173
- const renderEntryPath = getAppRouteRenderEntryPath(route);
488
+ const isRouteHandler = route.routePath !== null && route.pagePath === null;
489
+ const renderEntryPath = isRouteHandler ? route.routePath : getAppRouteRenderEntryPath(route);
174
490
  if (!renderEntryPath) continue;
175
- const { type } = classifyAppRoute(renderEntryPath, route.routePath, route.isDynamic);
176
- if (type === "api") continue;
177
- if (type === "ssr" && !route.isDynamic) continue;
491
+ if (isRouteHandler) {
492
+ const classification = classifyAppRouteHandler(route.routePath);
493
+ if (!classification.hasGet || !classification.staticGenerationEnabled) continue;
494
+ } else {
495
+ const { type } = classifyAppRoute(renderEntryPath, route.routePath, route.isDynamic);
496
+ if (type === "api") continue;
497
+ }
498
+ const staticEligibility = isRouteHandler || options.cacheComponents ? "eligible" : classifyAppPageRouteStaticEligibility(route, readMdxEsm);
499
+ const isStaticEligible = staticEligibility !== "ineligible";
500
+ const addDiscoveredPath = (pathname) => {
501
+ if (isRouteHandler) {
502
+ addPath(routeHandlerPaths, seenRouteHandlerPaths, pathname);
503
+ return;
504
+ }
505
+ addPath(paths, seen, pathname);
506
+ if (isStaticEligible) listedRoutePaths.add(appPageListingKey(route.pattern, pathname));
507
+ };
178
508
  if (!route.isDynamic) {
179
- addPath(paths, seen, route.pattern);
509
+ addDiscoveredPath(route.pattern);
510
+ addPath(nonDynamicPaths, seenNonDynamicPaths, route.pattern);
180
511
  continue;
181
512
  }
182
- if (!appRouteMayHaveGenerateStaticParams(route)) continue;
513
+ if (!options.enumerateDynamicPaths) continue;
514
+ requireNonEmptyStaticParams = options.cacheComponents && !isRouteHandler;
183
515
  try {
184
516
  const generateStaticParams = staticParamsMap[route.pattern];
185
517
  if (typeof generateStaticParams !== "function") continue;
@@ -190,28 +522,255 @@ async function collectAppPaths(options) {
190
522
  for (const parentParams of parentParamSets) {
191
523
  const childResults = await generateStaticParams({ params: parentParams });
192
524
  if (childResults === null) {
193
- paramSets = null;
525
+ paramSets = layoutOnlyParamSets(route, parentParamSets);
194
526
  break;
195
527
  }
196
- if (Array.isArray(childResults)) for (const childParams of childResults) paramSets.push({
197
- ...parentParams,
198
- ...childParams
199
- });
528
+ if (Array.isArray(childResults)) {
529
+ if (childResults.length === 0) paramSets.push(parentParams);
530
+ for (const childParams of childResults) paramSets.push({
531
+ ...parentParams,
532
+ ...childParams
533
+ });
534
+ }
200
535
  }
536
+ if (paramSets !== null) paramSets = routeStaticParamSets(route, paramSets);
201
537
  } else {
202
538
  const results = await generateStaticParams({ params: {} });
203
- paramSets = Array.isArray(results) || results === null ? results : [];
539
+ paramSets = results === null ? null : routeStaticParamSets(route, Array.isArray(results) ? results : []);
540
+ }
541
+ if (!paramSets?.length) {
542
+ if (isRouteHandler) {
543
+ const dynamicConfig = extractExportConstString(fs.readFileSync(renderEntryPath, "utf8"), "dynamic");
544
+ if (paramSets !== null || dynamicConfig === "force-static" || dynamicConfig === "error") fallbackRoutePatterns.push({
545
+ kind: "app-route",
546
+ pattern: route.pattern
547
+ });
548
+ continue;
549
+ }
550
+ const parallelSegments = route.parallelSlots.flatMap((slot) => [
551
+ slot.layoutPath,
552
+ ...slot.configLayoutPaths ?? [],
553
+ slot.pagePath ?? slot.defaultPath
554
+ ].filter((filePath) => typeof filePath === "string"));
555
+ const hasDynamicSegment = [
556
+ ...route.layouts,
557
+ renderEntryPath,
558
+ ...parallelSegments
559
+ ].map((filePath) => classifyAppRoute(filePath, null, false)).some((classification) => classification.type === "ssr");
560
+ const readDynamicConfig = (filePath) => {
561
+ const dynamic = extractExportConstString(fs.readFileSync(filePath, "utf8"), "dynamic");
562
+ return dynamic === null ? {} : { dynamic };
563
+ };
564
+ const dynamicConfig = resolveAppPageDynamicConfig({
565
+ layouts: route.layouts.map(readDynamicConfig),
566
+ page: readDynamicConfig(renderEntryPath),
567
+ parallelSegments: parallelSegments.map(readDynamicConfig)
568
+ });
569
+ if ((paramSets !== null || dynamicConfig === "force-static" || dynamicConfig === "error") && !hasDynamicSegment && staticEligibility === "eligible") fallbackRoutePatterns.push({
570
+ kind: "app-page",
571
+ pattern: route.pattern
572
+ });
573
+ continue;
204
574
  }
205
- if (!paramSets?.length) continue;
206
575
  for (const params of paramSets) {
207
576
  if (params === null || params === void 0) continue;
208
- addPath(paths, seen, buildUrlFromParams(route.pattern, params));
577
+ addDiscoveredPath(buildUrlFromParams(route.pattern, params));
209
578
  }
210
579
  } catch (error) {
211
- warnDiscoveryFailure(route.pattern, error);
580
+ throwDiscoveryFailure(route.pattern, error);
581
+ }
582
+ }
583
+ return {
584
+ fallbackRoutePatterns,
585
+ nonDynamicPaths,
586
+ paths,
587
+ routeHandlerPaths,
588
+ listedRoutePaths
589
+ };
590
+ }
591
+ async function resolveAppWarmPaths(options) {
592
+ const appRoutes = await appRouter(options.appDir, options.pageExtensions);
593
+ const loadingBoundaryRoutePatterns = appRoutes.filter((route) => !(route.routePath && !route.pagePath) && appRouteHasMainTreeLoadingBoundary(route)).map((route) => route.pattern).sort();
594
+ const routeHandlerClassifications = new Map(appRoutes.flatMap((route) => route.routePath && !route.pagePath ? [[route.routePath, classifyAppRouteHandler(route.routePath)]] : []));
595
+ const [pageRoutes, apiRoutes] = options.pagesDir ? await Promise.all([pagesRouter(options.pagesDir, options.pageExtensions), apiRouter(options.pagesDir, options.pageExtensions)]) : [[], []];
596
+ const rscPaths = [];
597
+ const appPaths = [];
598
+ const appRoutePaths = [];
599
+ const htmlPaths = [];
600
+ const loadingShellPaths = [];
601
+ const pagesPaths = [];
602
+ const routePatterns = {};
603
+ for (const pathname of options.paths) {
604
+ const appMatch = matchAppRoute(pathname, appRoutes);
605
+ const pagesPathname = options.i18n ? extractLocaleFromUrl(pathname, options.i18n).url : pathname;
606
+ const isPagesApiRequest = pathname === "/api" || pathname.startsWith("/api/");
607
+ const pagesMatch = matchRoute(pagesPathname, isPagesApiRequest ? apiRoutes : pageRoutes);
608
+ if (pagesMatch && (!appMatch || pagesRouteHasPriorityOverAppRoute(pagesMatch.route, appMatch.route))) {
609
+ if (!isPagesApiRequest) {
610
+ htmlPaths.push(pathname);
611
+ pagesPaths.push(pathname);
612
+ routePatterns[pathname] = {
613
+ kind: "pages-page",
614
+ pattern: pagesMatch.route.pattern
615
+ };
616
+ }
617
+ continue;
618
+ }
619
+ if (!appMatch) continue;
620
+ const matchedAppRoute = appMatch.route;
621
+ if (matchedAppRoute.routePath && !matchedAppRoute.pagePath) {
622
+ const classification = routeHandlerClassifications.get(matchedAppRoute.routePath);
623
+ if (classification?.hasGet && classification.staticGenerationEnabled) {
624
+ appRoutePaths.push(pathname);
625
+ routePatterns[pathname] = {
626
+ kind: "app-route",
627
+ pattern: matchedAppRoute.pattern
628
+ };
629
+ }
630
+ continue;
212
631
  }
632
+ const appRenderEntryPath = getAppRouteRenderEntryPath(matchedAppRoute);
633
+ if (!appRenderEntryPath) continue;
634
+ if (classifyAppRoute(appRenderEntryPath, matchedAppRoute.routePath, matchedAppRoute.isDynamic).type === "api") continue;
635
+ appPaths.push(pathname);
636
+ htmlPaths.push(pathname);
637
+ rscPaths.push(pathname);
638
+ routePatterns[pathname] = {
639
+ kind: "app-page",
640
+ pattern: matchedAppRoute.pattern
641
+ };
642
+ if (appRouteHasMainTreeLoadingBoundary(matchedAppRoute)) loadingShellPaths.push(pathname);
643
+ }
644
+ return {
645
+ appPaths,
646
+ appRoutePaths,
647
+ htmlPaths,
648
+ loadingBoundaryRoutePatterns,
649
+ loadingShellPaths,
650
+ pagesPaths,
651
+ routePatterns,
652
+ rscPaths
653
+ };
654
+ }
655
+ function cachePolicyRuleMatchesWarmPath(pathname, rule, config) {
656
+ const canonicalPathname = normalizePathTrailingSlash(pathname, config.trailingSlash);
657
+ return [void 0, ...config.i18n?.domains?.map((domain) => domain.domain) ?? []].some((hostname) => {
658
+ const matchPathname = normalizeDefaultLocalePathname(canonicalPathname, config.i18n, { hostname });
659
+ let sourceMatched = false;
660
+ matchHeaders(matchPathname, [rule], {
661
+ cookies: {},
662
+ headers: new Headers(),
663
+ host: hostname ?? "",
664
+ query: new URLSearchParams()
665
+ }, {
666
+ basePath: config.basePath,
667
+ hadBasePath: true
668
+ }, () => {
669
+ sourceMatched = true;
670
+ });
671
+ return sourceMatched;
672
+ });
673
+ }
674
+ function cachePolicyRuleSourceMatchesWarmPath(pathname, rule, config) {
675
+ return cachePolicyRuleMatchesWarmPath(pathname, {
676
+ ...rule,
677
+ has: void 0,
678
+ missing: void 0
679
+ }, config);
680
+ }
681
+ function staticConfigPatternSegments(pattern) {
682
+ const segments = [];
683
+ for (const segment of pattern.split("/").filter(Boolean)) {
684
+ if (/[:*()[\]{}]/.test(segment)) break;
685
+ segments.push(segment);
686
+ }
687
+ return segments;
688
+ }
689
+ function routePatternCouldIntersectCachePolicyRule(routePattern, rule, basePath) {
690
+ let ruleSource = rule.source;
691
+ if (rule.basePath !== false && basePath && (ruleSource === basePath || ruleSource.startsWith(`${basePath}/`))) ruleSource = ruleSource.slice(basePath.length) || "/";
692
+ const routeSegments = staticConfigPatternSegments(routePattern);
693
+ const ruleSegments = staticConfigPatternSegments(ruleSource);
694
+ const sharedLength = Math.min(routeSegments.length, ruleSegments.length);
695
+ for (let index = 0; index < sharedLength; index++) if (routeSegments[index] !== ruleSegments[index]) return false;
696
+ return true;
697
+ }
698
+ /**
699
+ * Certify only route-config bailouts that cannot hide a path- or
700
+ * request-specific next.config cache policy. The final Worker still evaluates
701
+ * every concrete response before emitting public cache headers.
702
+ */
703
+ function annotateCacheabilityProbeSafety(routePatterns, config, routeMayResolve, requestStageMayTerminate, unlisted, isResponsePolicyHeader) {
704
+ const cachePolicyRules = config.headers.filter((rule) => rule.headers.some((header) => isResponsePolicyHeader(header.key)));
705
+ const matchingPolicyRules = new Map(Object.keys(routePatterns).map((pathname) => [pathname, new Set(cachePolicyRules.filter((rule) => cachePolicyRuleMatchesWarmPath(pathname, rule, config)))]));
706
+ const pathsByPattern = /* @__PURE__ */ new Map();
707
+ for (const [pathname, route] of Object.entries(routePatterns)) {
708
+ const key = `${route.kind}\0${route.pattern}`;
709
+ const paths = pathsByPattern.get(key) ?? [];
710
+ paths.push(pathname);
711
+ pathsByPattern.set(key, paths);
213
712
  }
214
- return paths;
713
+ const canPrunePatterns = /* @__PURE__ */ new Map();
714
+ for (const [patternKey, patternPaths] of pathsByPattern) {
715
+ const routePattern = routePatterns[patternPaths[0]].pattern;
716
+ const relevantRules = cachePolicyRules.filter((rule) => patternPaths.some((path) => cachePolicyRuleSourceMatchesWarmPath(path, rule, config)) || routePatternCouldIntersectCachePolicyRule(routePattern, rule, config.basePath));
717
+ canPrunePatterns.set(patternKey, relevantRules.every((rule) => !rule.has?.length && !rule.missing?.length && patternPaths.every((path) => matchingPolicyRules.get(path)?.has(rule) === true)));
718
+ }
719
+ return Object.fromEntries(Object.entries(routePatterns).map(([pathname, route]) => {
720
+ const patternKey = `${route.kind}\0${route.pattern}`;
721
+ const canPrunePattern = canPrunePatterns.get(patternKey) ?? false;
722
+ return [pathname, {
723
+ ...route,
724
+ cacheabilityProbe: {
725
+ canPrunePattern,
726
+ ...routeMayResolve.has(pathname) ? { routeMayResolve: true } : {},
727
+ ...requestStageMayTerminate.has(pathname) ? { requestStageMayTerminate: true } : {},
728
+ ...unlisted.has(pathname) ? { unlisted: true } : {}
729
+ }
730
+ }];
731
+ }));
732
+ }
733
+ function configuredRulesAffectWarmPath(pathname, rules, config) {
734
+ const canonicalPathname = normalizePathTrailingSlash(pathname, config.trailingSlash);
735
+ const hostnames = [void 0, ...config.i18n?.domains?.map((domain) => domain.domain) ?? []];
736
+ const matchPathnames = new Set(hostnames.map((hostname) => normalizeDefaultLocalePathname(canonicalPathname, config.i18n, { hostname })));
737
+ return rules.some((rule) => Array.from(matchPathnames).some((matchPathname) => matchesRewriteSource(matchPathname, rule, {
738
+ basePath: config.basePath,
739
+ hadBasePath: true
740
+ })));
741
+ }
742
+ /**
743
+ * Whether a configured rewrite can replace a route-owned warm response.
744
+ * Non-dynamic filesystem routes win before `afterFiles`, while every concrete
745
+ * path discovered here wins dynamic matching before `fallback`.
746
+ */
747
+ function configuredRewritesCanReplaceWarmPath(pathname, rewrites, hasNonDynamicRoute, config, include) {
748
+ return configuredRulesAffectWarmPath(pathname, [...rewrites.beforeFiles.filter(include), ...hasNonDynamicRoute ? [] : rewrites.afterFiles.filter(include)], config);
749
+ }
750
+ function findMiddlewareConventionFile(root, appDir, pagesDir, pageExtensions) {
751
+ const routeDir = appDir ?? pagesDir;
752
+ const routeRoot = routeDir ? path.dirname(routeDir) : root;
753
+ const conventionDir = routeRoot === path.join(root, "src") ? routeRoot : root;
754
+ for (const name of ["proxy", "middleware"]) for (const extension of pageExtensions) {
755
+ const filePath = path.join(conventionDir, `${name}.${extension}`);
756
+ if (fs.existsSync(filePath)) return filePath;
757
+ }
758
+ return null;
759
+ }
760
+ /** @internal Match the pathname forms and locale provenance used by middleware runtime. */
761
+ function matchesMiddlewareWarmPath(pathname, matcher, i18n) {
762
+ const encodedPathname = new URL(pathname, "https://vinext.invalid").pathname;
763
+ const firstSegment = encodedPathname.split("/", 3)[1]?.toLowerCase();
764
+ const localeContexts = i18n ? i18n.locales.some((locale) => locale.toLowerCase() === firstSegment) ? [{ kind: "literal" }] : Array.from(/* @__PURE__ */ new Set([i18n.defaultLocale, ...i18n.domains?.map((domain) => domain.defaultLocale) ?? []]), (defaultLocale) => ({
765
+ defaultLocale,
766
+ kind: "defaulted"
767
+ })) : [void 0];
768
+ const matchPathnames = [encodedPathname];
769
+ try {
770
+ const decodedPathname = decodeURIComponent(encodedPathname);
771
+ if (decodedPathname !== encodedPathname) matchPathnames.push(decodedPathname);
772
+ } catch {}
773
+ return matchPathnames.some((matchPathname) => localeContexts.some((localeContext) => matchesMiddlewarePathname(matchPathname, matcher, i18n, localeContext)));
215
774
  }
216
775
  async function startPathDiscoveryServer(options) {
217
776
  return startProdServer({
@@ -219,34 +778,50 @@ async function startPathDiscoveryServer(options) {
219
778
  host: "127.0.0.1",
220
779
  outDir: options.pagesBundlePath ? path.dirname(path.dirname(options.pagesBundlePath)) : path.dirname(options.serverDir),
221
780
  rscEntryPath: options.rscBundlePath,
781
+ serverDir: options.serverDir,
222
782
  serverEntryPath: options.pagesBundlePath,
223
783
  noCompression: true,
224
784
  purpose: "prerender"
225
785
  });
226
786
  }
227
- async function emitPrerenderPathManifest(options) {
787
+ async function discoverPrerenderPathManifest(options) {
228
788
  const { root } = options;
229
789
  const configuredRouteDirs = resolveConfiguredRouteDirs(root, options.routeRootConfig);
230
790
  const appDir = options.appDir !== void 0 ? options.appDir : configuredRouteDirs.appDir;
231
791
  const pagesDir = options.pagesDir !== void 0 ? options.pagesDir : configuredRouteDirs.pagesDir;
232
792
  if (!appDir && !pagesDir) return null;
233
- const defaultRscBundlePath = options.routeRootConfig?.rscOutDir ? path.join(path.resolve(root, options.routeRootConfig.rscOutDir), "index.js") : path.join(root, "dist", "server", "index.js");
793
+ const configuredRscServerDir = options.routeRootConfig?.rscOutDir ? path.resolve(root, options.routeRootConfig.rscOutDir) : path.join(root, "dist", "server");
794
+ const defaultRscBundlePath = resolveBuiltRscEntryPath(configuredRscServerDir);
234
795
  const rscBundlePath = options.rscBundlePath ?? defaultRscBundlePath;
796
+ const relativeRscEntryPath = path.relative(configuredRscServerDir, rscBundlePath);
797
+ const rscServerDir = !relativeRscEntryPath.startsWith("../") && !path.isAbsolute(relativeRscEntryPath) ? configuredRscServerDir : path.dirname(rscBundlePath);
235
798
  const pagesBundlePath = options.pagesBundlePath ?? path.join(root, "dist", "server", "entry.js");
236
- const bundleServerDir = fs.existsSync(rscBundlePath) ? path.dirname(rscBundlePath) : path.dirname(pagesBundlePath);
799
+ const bundleServerDir = fs.existsSync(rscBundlePath) ? rscServerDir : path.dirname(pagesBundlePath);
237
800
  const manifestDir = path.join(root, "dist", "server");
238
801
  const config = options.nextConfig ? { ...options.nextConfig } : { ...await resolveNextConfig(await loadNextConfig(root, PHASE_PRODUCTION_BUILD), root) };
239
802
  const builtBuildId = readBuiltBuildId(manifestDir) ?? readBuiltBuildId(bundleServerDir);
803
+ const rscBuildId = readBuiltRscBuildId(manifestDir) ?? readBuiltRscBuildId(bundleServerDir);
240
804
  if (builtBuildId) config.buildId = builtBuildId;
241
805
  const paths = [];
242
806
  const seen = /* @__PURE__ */ new Set();
807
+ const discoveredPagesPaths = [];
808
+ const seenPagesPaths = /* @__PURE__ */ new Set();
809
+ const discoveredPagesDataPaths = [];
810
+ const seenPagesDataPaths = /* @__PURE__ */ new Set();
811
+ const discoveredRouteHandlerPaths = [];
812
+ const seenRouteHandlerPaths = /* @__PURE__ */ new Set();
813
+ const discoveredNonDynamicPathSet = /* @__PURE__ */ new Set();
814
+ const appListedRoutePaths = /* @__PURE__ */ new Set();
815
+ const candidateOnlyPathSet = /* @__PURE__ */ new Set();
816
+ const fallbackRoutePatterns = [];
243
817
  await withPrerenderEndpoints(async () => {
244
818
  let prodServer = null;
245
- if (await shouldStartPathDiscoveryServer({
819
+ const needsServer = await shouldStartPathDiscoveryServer({
246
820
  appDir,
247
821
  pagesDir,
248
822
  pageExtensions: config.pageExtensions
249
- })) try {
823
+ });
824
+ if (needsServer && !options.pathDiscoveryTarget) try {
250
825
  prodServer = await startPathDiscoveryServer({
251
826
  serverDir: bundleServerDir,
252
827
  pagesBundlePath: !appDir && pagesDir ? pagesBundlePath : void 0,
@@ -254,37 +829,177 @@ async function emitPrerenderPathManifest(options) {
254
829
  });
255
830
  } catch (error) {
256
831
  const message = error instanceof Error ? error.message : String(error);
257
- console.warn(`[vinext] Warning: failed to start prerender path discovery server: ${message}`);
832
+ throw new Error(`Failed to start prerender path discovery server: ${message}`, { cause: error });
258
833
  }
259
- const baseUrl = prodServer ? `http://127.0.0.1:${prodServer.port}` : null;
834
+ const baseUrl = options.pathDiscoveryTarget?.baseUrl ? new URL(options.pathDiscoveryTarget.baseUrl).origin : prodServer ? `http://127.0.0.1:${prodServer.port}` : null;
260
835
  const prerenderSecret = readPrerenderSecret(bundleServerDir) ?? readPrerenderSecret(manifestDir);
261
- const secretHeaders = prerenderSecret ? { [VINEXT_PRERENDER_SECRET_HEADER]: prerenderSecret } : {};
836
+ if (needsServer && options.pathDiscoveryTarget && !prerenderSecret) throw new Error("Cannot discover warmup paths from the staged Worker because dist/server/vinext-server.json does not contain a prerender secret. Rebuild the app before deploying.");
837
+ const secretHeaders = Object.fromEntries(new Headers(options.pathDiscoveryTarget?.headers));
838
+ if (prerenderSecret) secretHeaders[VINEXT_PRERENDER_SECRET_HEADER] = prerenderSecret;
839
+ const pathDiscoveryRetryOptions = options.pathDiscoveryTarget ? {
840
+ deadlineAt: Date.now() + Math.max(1, options.pathDiscoveryTarget.phaseTimeoutMs ?? 12e4),
841
+ phaseTimeoutMs: options.pathDiscoveryTarget.phaseTimeoutMs,
842
+ retries: options.pathDiscoveryTarget.retries,
843
+ retryDelayMs: options.pathDiscoveryTarget.retryDelayMs
844
+ } : void 0;
262
845
  try {
263
- if (appDir) for (const pathname of await collectAppPaths({
264
- appDir,
265
- baseUrl,
266
- pageExtensions: config.pageExtensions,
267
- secretHeaders
268
- })) addPath(paths, seen, pathname);
269
- if (pagesDir) for (const pathname of await collectPagesPaths({
270
- baseUrl,
271
- pagesDir,
272
- pageExtensions: config.pageExtensions,
273
- secretHeaders
274
- })) addPath(paths, seen, pathname);
846
+ if (appDir) {
847
+ const appPathResult = await collectAppPaths({
848
+ appDir,
849
+ baseUrl,
850
+ cacheComponents: config.cacheComponents,
851
+ enumerateDynamicPaths: options.candidatePathsOnly !== true,
852
+ pageExtensions: config.pageExtensions,
853
+ retryOptions: pathDiscoveryRetryOptions,
854
+ root,
855
+ secretHeaders
856
+ });
857
+ for (const pathname of appPathResult.paths) addPath(paths, seen, pathname);
858
+ for (const pathname of appPathResult.routeHandlerPaths) addPath(discoveredRouteHandlerPaths, seenRouteHandlerPaths, pathname);
859
+ for (const pathname of appPathResult.nonDynamicPaths) discoveredNonDynamicPathSet.add(pathname);
860
+ fallbackRoutePatterns.push(...appPathResult.fallbackRoutePatterns);
861
+ for (const key of appPathResult.listedRoutePaths) appListedRoutePaths.add(key);
862
+ }
863
+ if (pagesDir) {
864
+ const pagesPathResult = await collectPagesPaths({
865
+ baseUrl,
866
+ enumerateDynamicPaths: options.candidatePathsOnly !== true,
867
+ i18n: config.i18n,
868
+ pagesDir,
869
+ pageExtensions: config.pageExtensions,
870
+ retryOptions: pathDiscoveryRetryOptions,
871
+ secretHeaders
872
+ });
873
+ for (const pathname of pagesPathResult.paths) {
874
+ addPath(paths, seen, pathname);
875
+ addPath(discoveredPagesPaths, seenPagesPaths, pathname);
876
+ }
877
+ for (const pathname of pagesPathResult.dataPaths) addPath(discoveredPagesDataPaths, seenPagesDataPaths, pathname);
878
+ for (const pathname of pagesPathResult.nonDynamicPaths) discoveredNonDynamicPathSet.add(pathname);
879
+ fallbackRoutePatterns.push(...pagesPathResult.fallbackRoutePatterns);
880
+ }
275
881
  } finally {
276
882
  if (prodServer) await new Promise((resolve) => prodServer.server.close(() => resolve()));
277
883
  }
278
884
  });
885
+ for (const publicPathname of options.candidatePaths ?? []) {
886
+ let pathname = normalizePathTrailingSlash(new URL(publicPathname, "http://vinext.local").pathname, false);
887
+ if (config.basePath) {
888
+ if (pathname === config.basePath) pathname = "/";
889
+ else if (pathname.startsWith(`${config.basePath}/`)) pathname = pathname.slice(config.basePath.length);
890
+ else continue;
891
+ }
892
+ if (!seen.has(pathname)) candidateOnlyPathSet.add(pathname);
893
+ addPath(paths, seen, pathname);
894
+ if (pagesDir) addPath(discoveredPagesPaths, seenPagesPaths, pathname);
895
+ }
896
+ const hasStagedRequestRouting = options.requestRouting === "uncached-stage";
897
+ const middlewarePath = hasStagedRequestRouting ? findMiddlewareConventionFile(root, appDir, pagesDir, config.pageExtensions) : null;
898
+ const configuredMatcher = middlewarePath ? extractMiddlewareMatcherConfig(middlewarePath) : void 0;
899
+ const middlewareMayRouteWarmPath = (pathname) => middlewarePath !== null && matchesMiddlewareWarmPath(pathname, configuredMatcher, config.i18n);
900
+ const routedWarmPaths = [...paths, ...discoveredRouteHandlerPaths];
901
+ const routeMayResolveWarmPathSet = new Set(hasStagedRequestRouting ? routedWarmPaths.filter((pathname) => middlewareMayRouteWarmPath(pathname) || configuredRewritesCanReplaceWarmPath(pathname, config.rewrites, discoveredNonDynamicPathSet.has(pathname), config, (rewrite) => !isExternalUrl(rewrite.destination))) : []);
902
+ const requestStageMayTerminateWarmPathSet = new Set(hasStagedRequestRouting ? routedWarmPaths.filter((pathname) => middlewareMayRouteWarmPath(pathname) || configuredRulesAffectWarmPath(pathname, config.redirects, config) || configuredRewritesCanReplaceWarmPath(pathname, config.rewrites, discoveredNonDynamicPathSet.has(pathname), config, (rewrite) => isExternalUrl(rewrite.destination))) : []);
903
+ const excludedWarmPathSet = new Set(options.responseVary && !hasStagedRequestRouting ? routedWarmPaths.filter((pathname) => configuredRulesAffectWarmPath(pathname, config.redirects, config) || configuredRewritesCanReplaceWarmPath(pathname, config.rewrites, discoveredNonDynamicPathSet.has(pathname), config, () => true)) : []);
904
+ const configuredPagesWarmPaths = discoveredPagesPaths.filter((pathname) => !excludedWarmPathSet.has(pathname));
905
+ const resolvedPagesWarmPaths = !appDir && pagesDir ? await excludePagesApiWarmPaths({
906
+ i18n: config.i18n,
907
+ pagesDir,
908
+ pageExtensions: config.pageExtensions,
909
+ paths: configuredPagesWarmPaths
910
+ }) : configuredPagesWarmPaths;
911
+ const configuredCandidatePaths = paths.filter((pathname) => !excludedWarmPathSet.has(pathname));
912
+ const configuredRouteHandlerPaths = discoveredRouteHandlerPaths.filter((pathname) => !excludedWarmPathSet.has(pathname));
913
+ const pagesWarmMetadata = pagesDir ? await resolvePagesWarmRouteMetadata({
914
+ i18n: config.i18n,
915
+ pagesDir,
916
+ pageExtensions: config.pageExtensions,
917
+ paths: resolvedPagesWarmPaths
918
+ }) : {
919
+ dataPaths: [],
920
+ routePatterns: {}
921
+ };
922
+ for (const pathname of pagesWarmMetadata.dataPaths) addPath(discoveredPagesDataPaths, seenPagesDataPaths, pathname);
923
+ const discoveredPagesDataPathSet = new Set(discoveredPagesDataPaths);
924
+ const pagesOnlyWarmPaths = resolvedPagesWarmPaths.filter((pathname) => pagesWarmMetadata.routePatterns[pathname] !== void 0);
925
+ const appOwnedWarmPaths = appDir ? await resolveAppWarmPaths({
926
+ appDir,
927
+ i18n: config.i18n,
928
+ pagesDir,
929
+ pageExtensions: config.pageExtensions,
930
+ paths: [...configuredCandidatePaths, ...configuredRouteHandlerPaths]
931
+ }) : {
932
+ appPaths: [],
933
+ appRoutePaths: [],
934
+ htmlPaths: pagesOnlyWarmPaths,
935
+ loadingBoundaryRoutePatterns: [],
936
+ loadingShellPaths: [],
937
+ pagesPaths: pagesOnlyWarmPaths,
938
+ routePatterns: pagesWarmMetadata.routePatterns,
939
+ rscPaths: []
940
+ };
941
+ for (const pathname of configuredCandidatePaths) {
942
+ if (appOwnedWarmPaths.routePatterns[pathname] || !routeMayResolveWarmPathSet.has(pathname) && !requestStageMayTerminateWarmPathSet.has(pathname)) continue;
943
+ appOwnedWarmPaths.htmlPaths.push(pathname);
944
+ (appDir ? appOwnedWarmPaths.appPaths : appOwnedWarmPaths.pagesPaths).push(pathname);
945
+ if (appDir && routeMayResolveWarmPathSet.has(pathname)) appOwnedWarmPaths.rscPaths.push(pathname);
946
+ appOwnedWarmPaths.routePatterns[pathname] = {
947
+ kind: appDir ? "app-page" : "pages-page",
948
+ pattern: pathname
949
+ };
950
+ }
951
+ const warmPaths = appOwnedWarmPaths.htmlPaths;
952
+ const pagesOwnedWarmPaths = appOwnedWarmPaths.pagesPaths;
953
+ const resolvedPagesDataWarmPaths = pagesOwnedWarmPaths.filter((pathname) => discoveredPagesDataPathSet.has(pathname));
954
+ const pagesDataPaths = resolvedPagesDataWarmPaths.map((pathname) => buildPagesDataHref(config.basePath, config.buildId, localizePagesDataPath(pathname, config.i18n), ""));
955
+ const unlistedPathSet = new Set(Object.entries(appOwnedWarmPaths.routePatterns).flatMap(([pathname, route]) => (route.kind === "app-page" ? !appListedRoutePaths.has(appPageListingKey(route.pattern, pathname)) : candidateOnlyPathSet.has(pathname)) ? [pathname] : []));
956
+ const routePatterns = annotateCacheabilityProbeSafety(appOwnedWarmPaths.routePatterns, config, routeMayResolveWarmPathSet, requestStageMayTerminateWarmPathSet, unlistedPathSet, (name) => name.trim().toLowerCase() === "cache-control" || options.isResponsePolicyHeader?.(name) === true);
957
+ for (let index = 0; index < resolvedPagesDataWarmPaths.length; index++) {
958
+ const route = routePatterns[resolvedPagesDataWarmPaths[index]];
959
+ if (route) {
960
+ const htmlPathname = resolvedPagesDataWarmPaths[index] === "/" ? config.basePath || "/" : `${config.basePath}${resolvedPagesDataWarmPaths[index]}`;
961
+ routePatterns[pagesDataPaths[index]] = {
962
+ ...route,
963
+ cacheabilityProbe: {
964
+ ...route.cacheabilityProbe,
965
+ concretePathname: htmlPathname
966
+ }
967
+ };
968
+ }
969
+ }
970
+ const includeCanonicalRsc = options.responseVary || options.includeCanonicalRsc;
279
971
  const manifest = {
972
+ ...appDir ? { appPaths: appOwnedWarmPaths.appPaths } : {},
973
+ ...config.basePath ? { basePath: config.basePath } : {},
280
974
  buildId: config.buildId,
975
+ ...rscBuildId && options.buildIdentity === "response-header" ? { buildIdentity: rscBuildId } : {},
976
+ ...config.deploymentId ? { deploymentId: config.deploymentId } : {},
977
+ ...pagesDir ? {
978
+ pagesDataPaths,
979
+ pagesPaths: pagesOwnedWarmPaths
980
+ } : {},
981
+ ...excludedWarmPathSet.size > 0 ? { excludedWarmPaths: Array.from(excludedWarmPathSet) } : {},
982
+ ...fallbackRoutePatterns.length > 0 ? { fallbackRoutePatterns } : {},
983
+ ...appOwnedWarmPaths.loadingBoundaryRoutePatterns.length > 0 ? { loadingBoundaryRoutePatterns: appOwnedWarmPaths.loadingBoundaryRoutePatterns } : {},
984
+ ...rscBuildId ? { rscBuildId } : {},
985
+ ...options.responseVary ? { responseVary: options.responseVary } : {},
986
+ ...includeCanonicalRsc ? { rscPaths: appOwnedWarmPaths.rscPaths } : {},
987
+ ...Object.keys(routePatterns).length > 0 ? { routePatterns } : {},
988
+ ...appOwnedWarmPaths.appRoutePaths.length > 0 ? { routeHandlerPaths: appOwnedWarmPaths.appRoutePaths } : {},
989
+ ...includeCanonicalRsc ? { loadingShellPaths: appOwnedWarmPaths.loadingShellPaths } : {},
281
990
  trailingSlash: config.trailingSlash,
282
- paths
991
+ paths: warmPaths
283
992
  };
993
+ console.log(` Discovered ${warmPaths.length + appOwnedWarmPaths.appRoutePaths.length} CDN warmup path(s).`);
994
+ return manifest;
995
+ }
996
+ async function emitPrerenderPathManifest(options) {
997
+ const manifest = await discoverPrerenderPathManifest(options);
998
+ if (!manifest) return null;
999
+ const manifestDir = path.join(options.root, "dist", "server");
284
1000
  fs.mkdirSync(manifestDir, { recursive: true });
285
1001
  fs.writeFileSync(path.join(manifestDir, PRERENDER_PATHS_MANIFEST), JSON.stringify(manifest, null, 2) + "\n", "utf-8");
286
- console.log(` Discovered ${paths.length} CDN warmup path(s).`);
287
1002
  return manifest;
288
1003
  }
289
1004
  //#endregion
290
- export { PRERENDER_PATHS_MANIFEST, PRERENDER_PATH_DISCOVERY_ENV, emitPrerenderPathManifest };
1005
+ export { DEFAULT_REMOTE_PATH_DISCOVERY_PHASE_TIMEOUT_MS, DEFAULT_REMOTE_PATH_DISCOVERY_RETRY_DELAY_MS, PRERENDER_PATHS_MANIFEST, PRERENDER_PATH_DISCOVERY_ENV, discoverPrerenderPathManifest, emitPrerenderPathManifest, matchesMiddlewareWarmPath };