vinext 1.0.1 → 1.2.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 (334) hide show
  1. package/README.md +93 -10
  2. package/dist/build/app-page-static-eligibility.d.ts +15 -0
  3. package/dist/build/app-page-static-eligibility.js +82 -0
  4. package/dist/build/client-build-config.d.ts +10 -0
  5. package/dist/build/client-build-config.js +18 -2
  6. package/dist/build/pages-client-assets-module.d.ts +8 -0
  7. package/dist/build/pages-client-assets-module.js +21 -1
  8. package/dist/build/prerender-paths.js +8 -81
  9. package/dist/build/prerender.js +33 -8
  10. package/dist/build/run-prerender.js +1 -1
  11. package/dist/build/server-manifest.d.ts +7 -0
  12. package/dist/build/server-manifest.js +11 -1
  13. package/dist/build/ssr-manifest.d.ts +2 -0
  14. package/dist/build/ssr-manifest.js +6 -2
  15. package/dist/cache/cache-adapters-virtual.d.ts +7 -1
  16. package/dist/cache/cache-adapters-virtual.js +3 -3
  17. package/dist/check.js +7 -6
  18. package/dist/cli.js +2 -1
  19. package/dist/client/client-redirect-matcher.d.ts +14 -0
  20. package/dist/client/client-redirect-matcher.js +37 -0
  21. package/dist/client/client-redirects.d.ts +27 -0
  22. package/dist/client/client-redirects.js +28 -0
  23. package/dist/client/client-rewrites.d.ts +2 -1
  24. package/dist/client/client-rewrites.js +1 -1
  25. package/dist/client/navigation-runtime.d.ts +11 -0
  26. package/dist/client/navigation-runtime.js +1 -1
  27. package/dist/config/config-matchers.d.ts +26 -11
  28. package/dist/config/config-matchers.js +81 -82
  29. package/dist/config/destination-params.d.ts +47 -0
  30. package/dist/config/destination-params.js +116 -0
  31. package/dist/config/next-config.d.ts +14 -0
  32. package/dist/config/next-config.js +21 -3
  33. package/dist/entries/app-rsc-entry.d.ts +6 -0
  34. package/dist/entries/app-rsc-entry.js +84 -49
  35. package/dist/entries/pages-client-entry.js +3 -1
  36. package/dist/entries/pages-server-entry.js +13 -37
  37. package/dist/index.d.ts +7 -2
  38. package/dist/index.js +193 -73
  39. package/dist/init-cloudflare.d.ts +9 -0
  40. package/dist/init-cloudflare.js +107 -31
  41. package/dist/init-platform.d.ts +4 -0
  42. package/dist/init-platform.js +27 -2
  43. package/dist/init.d.ts +1 -0
  44. package/dist/init.js +67 -3
  45. package/dist/plugins/ast-scope.d.ts +7 -0
  46. package/dist/plugins/ast-scope.js +59 -3
  47. package/dist/plugins/cache-flight-codec.d.ts +19 -0
  48. package/dist/plugins/cache-flight-codec.js +68 -0
  49. package/dist/plugins/commonjs-esm-facade.d.ts +35 -0
  50. package/dist/plugins/commonjs-esm-facade.js +80 -0
  51. package/dist/plugins/dynamic-preload-metadata.d.ts +1 -1
  52. package/dist/plugins/dynamic-preload-metadata.js +9 -8
  53. package/dist/plugins/fonts.d.ts +8 -11
  54. package/dist/plugins/fonts.js +71 -34
  55. package/dist/plugins/ignore-dynamic-requests.d.ts +1 -1
  56. package/dist/plugins/ignore-dynamic-requests.js +3 -4
  57. package/dist/plugins/middleware-server-only.d.ts +5 -4
  58. package/dist/plugins/middleware-server-only.js +8 -5
  59. package/dist/plugins/pages-node-externals.js +1 -1
  60. package/dist/plugins/rsc-scan-glob-imports.d.ts +19 -0
  61. package/dist/plugins/rsc-scan-glob-imports.js +50 -0
  62. package/dist/plugins/strip-server-exports.js +262 -98
  63. package/dist/plugins/transform-result.d.ts +9 -5
  64. package/dist/plugins/transitive-externals.js +1 -1
  65. package/dist/plugins/typeof-window.d.ts +2 -2
  66. package/dist/plugins/use-cache-callable.js +8 -2
  67. package/dist/plugins/worker-server-only-imports.d.ts +20 -0
  68. package/dist/plugins/worker-server-only-imports.js +31 -0
  69. package/dist/plugins/worker-use-server.d.ts +25 -0
  70. package/dist/plugins/worker-use-server.js +129 -0
  71. package/dist/routing/file-matcher.d.ts +1 -0
  72. package/dist/routing/file-matcher.js +1 -1
  73. package/dist/server/api-handler.d.ts +1 -0
  74. package/dist/server/api-handler.js +19 -8
  75. package/dist/server/app-browser-action-result.d.ts +1 -1
  76. package/dist/server/app-browser-action-result.js +9 -2
  77. package/dist/server/app-browser-entry.js +11 -7
  78. package/dist/server/app-browser-history-controller.d.ts +2 -0
  79. package/dist/server/app-browser-history-controller.js +8 -0
  80. package/dist/server/app-browser-interception-context.js +26 -2
  81. package/dist/server/app-browser-navigation-controller.d.ts +7 -1
  82. package/dist/server/app-browser-navigation-controller.js +94 -11
  83. package/dist/server/app-browser-server-action-client.js +1 -1
  84. package/dist/server/app-fallback-renderer.d.ts +2 -0
  85. package/dist/server/app-fallback-renderer.js +1 -0
  86. package/dist/server/app-history-state.d.ts +3 -0
  87. package/dist/server/app-history-state.js +7 -0
  88. package/dist/server/app-middleware.d.ts +11 -0
  89. package/dist/server/app-middleware.js +19 -3
  90. package/dist/server/app-optimistic-routing.js +1 -1
  91. package/dist/server/app-page-boundary-render.d.ts +5 -0
  92. package/dist/server/app-page-boundary-render.js +6 -4
  93. package/dist/server/app-page-cache-finalizer.d.ts +11 -0
  94. package/dist/server/app-page-cache-finalizer.js +41 -7
  95. package/dist/server/app-page-cache-render.d.ts +18 -0
  96. package/dist/server/app-page-cache-render.js +63 -43
  97. package/dist/server/app-page-cache.d.ts +6 -1
  98. package/dist/server/app-page-cache.js +28 -8
  99. package/dist/server/app-page-dispatch.d.ts +12 -2
  100. package/dist/server/app-page-dispatch.js +51 -33
  101. package/dist/server/app-page-element-builder.d.ts +7 -0
  102. package/dist/server/app-page-element-builder.js +27 -42
  103. package/dist/server/app-page-execution.d.ts +15 -12
  104. package/dist/server/app-page-execution.js +30 -40
  105. package/dist/server/app-page-head.d.ts +5 -0
  106. package/dist/server/app-page-head.js +9 -3
  107. package/dist/server/app-page-ppr-runtime.js +1 -1
  108. package/dist/server/app-page-probe.d.ts +0 -109
  109. package/dist/server/app-page-probe.js +3 -136
  110. package/dist/server/app-page-render-identity.d.ts +0 -1
  111. package/dist/server/app-page-render-identity.js +1 -1
  112. package/dist/server/app-page-render-observation.js +3 -3
  113. package/dist/server/app-page-render.d.ts +13 -5
  114. package/dist/server/app-page-render.js +219 -119
  115. package/dist/server/app-page-request.d.ts +0 -1
  116. package/dist/server/app-page-request.js +54 -17
  117. package/dist/server/app-page-response.d.ts +4 -3
  118. package/dist/server/app-page-response.js +4 -3
  119. package/dist/server/app-page-route-wiring.d.ts +17 -5
  120. package/dist/server/app-page-route-wiring.js +57 -35
  121. package/dist/server/app-page-rsc-render-status.d.ts +48 -0
  122. package/dist/server/app-page-rsc-render-status.js +54 -0
  123. package/dist/server/app-page-stream.d.ts +15 -8
  124. package/dist/server/app-page-stream.js +6 -0
  125. package/dist/server/app-pages-bridge.d.ts +1 -1
  126. package/dist/server/app-pages-bridge.js +2 -3
  127. package/dist/server/app-prerender-endpoints.js +9 -6
  128. package/dist/server/app-request-stage-dispatch.js +7 -3
  129. package/dist/server/app-request-stage-independent-entry.js +29 -9
  130. package/dist/server/app-response-header-provenance.d.ts +2 -0
  131. package/dist/server/app-response-header-provenance.js +10 -4
  132. package/dist/server/app-response-stage-entry.js +10 -2
  133. package/dist/server/app-route-handler-cache.d.ts +1 -0
  134. package/dist/server/app-route-handler-cache.js +1 -0
  135. package/dist/server/app-route-handler-dispatch.d.ts +1 -0
  136. package/dist/server/app-route-handler-dispatch.js +6 -3
  137. package/dist/server/app-route-handler-execution.d.ts +1 -0
  138. package/dist/server/app-route-handler-execution.js +1 -0
  139. package/dist/server/app-route-handler-runtime.d.ts +4 -1
  140. package/dist/server/app-route-handler-runtime.js +45 -24
  141. package/dist/server/app-router-entry.js +27 -8
  142. package/dist/server/app-rsc-cache-busting.js +1 -1
  143. package/dist/server/app-rsc-errors.js +20 -16
  144. package/dist/server/app-rsc-handler.d.ts +11 -0
  145. package/dist/server/app-rsc-handler.js +291 -125
  146. package/dist/server/app-rsc-request-normalization.d.ts +3 -1
  147. package/dist/server/app-rsc-request-normalization.js +4 -2
  148. package/dist/server/app-rsc-response-stage.d.ts +1 -1
  149. package/dist/server/app-rsc-response-stage.js +10 -6
  150. package/dist/server/app-rsc-route-matching.d.ts +9 -1
  151. package/dist/server/app-rsc-route-matching.js +36 -19
  152. package/dist/server/app-segment-config.d.ts +2 -1
  153. package/dist/server/app-server-action-execution.d.ts +2 -1
  154. package/dist/server/app-server-action-execution.js +62 -23
  155. package/dist/server/app-ssr-entry.d.ts +3 -2
  156. package/dist/server/app-ssr-entry.js +8 -5
  157. package/dist/server/app-ssr-stream.d.ts +6 -1
  158. package/dist/server/app-ssr-stream.js +34 -15
  159. package/dist/server/app-worker-stages.d.ts +7 -2
  160. package/dist/server/app-worker-stages.js +4 -4
  161. package/dist/server/cacheability-request.js +11 -7
  162. package/dist/server/client-build-files.d.ts +16 -0
  163. package/dist/server/client-build-files.js +36 -0
  164. package/dist/server/client-reuse-manifest.js +1 -1
  165. package/dist/server/config-headers.js +2 -0
  166. package/dist/server/dev-server.js +50 -29
  167. package/dist/server/dev-stack-sourcemap.js +18 -23
  168. package/dist/server/document-initial-head.d.ts +0 -11
  169. package/dist/server/document-initial-head.js +1 -1
  170. package/dist/server/forwarded-middleware-context.d.ts +5 -0
  171. package/dist/server/forwarded-middleware-context.js +22 -0
  172. package/dist/server/headers.d.ts +18 -1
  173. package/dist/server/headers.js +19 -2
  174. package/dist/server/http-conditional.d.ts +11 -0
  175. package/dist/server/http-conditional.js +10 -1
  176. package/dist/server/http-error-responses.d.ts +1 -1
  177. package/dist/server/image-optimization.d.ts +54 -0
  178. package/dist/server/image-optimization.js +118 -9
  179. package/dist/server/isr-cache.d.ts +10 -0
  180. package/dist/server/isr-cache.js +43 -8
  181. package/dist/server/metadata-route-response.js +9 -8
  182. package/dist/server/middleware-matcher-pattern.js +8 -4
  183. package/dist/server/middleware-matcher.d.ts +2 -0
  184. package/dist/server/middleware-matcher.js +23 -2
  185. package/dist/server/middleware-response-headers.js +2 -0
  186. package/dist/server/middleware-runtime.d.ts +13 -0
  187. package/dist/server/middleware-runtime.js +33 -20
  188. package/dist/server/middleware.d.ts +1 -1
  189. package/dist/server/middleware.js +3 -1
  190. package/dist/server/multi-stage.d.ts +19 -0
  191. package/dist/server/navigation-planner.js +1 -1
  192. package/dist/server/node-response-signal.d.ts +16 -0
  193. package/dist/server/node-response-signal.js +26 -0
  194. package/dist/server/normalize-path.d.ts +0 -13
  195. package/dist/server/normalize-path.js +1 -34
  196. package/dist/server/open-redirect.d.ts +47 -0
  197. package/dist/server/open-redirect.js +74 -1
  198. package/dist/server/pages-api-route.d.ts +3 -2
  199. package/dist/server/pages-api-route.js +4 -3
  200. package/dist/server/pages-cache-tag.d.ts +12 -0
  201. package/dist/server/pages-cache-tag.js +19 -0
  202. package/dist/server/pages-client-assets.d.ts +2 -0
  203. package/dist/server/pages-data-route.d.ts +10 -0
  204. package/dist/server/pages-data-route.js +19 -2
  205. package/dist/server/pages-document-asset-props.d.ts +5 -1
  206. package/dist/server/pages-document-asset-props.js +13 -5
  207. package/dist/server/pages-document-splice.d.ts +19 -0
  208. package/dist/server/pages-document-splice.js +55 -0
  209. package/dist/server/pages-i18n.d.ts +12 -1
  210. package/dist/server/pages-i18n.js +18 -4
  211. package/dist/server/pages-node-compat.d.ts +16 -5
  212. package/dist/server/pages-node-compat.js +20 -12
  213. package/dist/server/pages-page-data.d.ts +32 -24
  214. package/dist/server/pages-page-data.js +50 -120
  215. package/dist/server/pages-page-handler.d.ts +0 -6
  216. package/dist/server/pages-page-handler.js +209 -130
  217. package/dist/server/pages-page-response.d.ts +12 -6
  218. package/dist/server/pages-page-response.js +41 -34
  219. package/dist/server/pages-request-pipeline.d.ts +10 -2
  220. package/dist/server/pages-request-pipeline.js +37 -18
  221. package/dist/server/pages-request-stage-entry.d.ts +6 -0
  222. package/dist/server/pages-request-stage-entry.js +79 -16
  223. package/dist/server/pages-response-stage-entry.js +4 -0
  224. package/dist/server/pages-revalidate.js +1 -1
  225. package/dist/server/pages-router-entry.js +4 -3
  226. package/dist/server/prerender-manifest.d.ts +3 -3
  227. package/dist/server/prerender-manifest.js +4 -3
  228. package/dist/server/prerender-work-unit-setup.js +4 -0
  229. package/dist/server/prod-server.d.ts +20 -7
  230. package/dist/server/prod-server.js +343 -129
  231. package/dist/server/proper-error.d.ts +4 -0
  232. package/dist/server/proper-error.js +31 -0
  233. package/dist/server/request-pipeline.d.ts +24 -9
  234. package/dist/server/request-pipeline.js +24 -9
  235. package/dist/server/response-compression.d.ts +43 -0
  236. package/dist/server/response-compression.js +111 -0
  237. package/dist/server/revalidation-request.d.ts +1 -0
  238. package/dist/server/revalidation-request.js +1 -1
  239. package/dist/server/rsc-stream-hints.js +31 -2
  240. package/dist/server/seed-cache.d.ts +1 -0
  241. package/dist/server/seed-cache.js +15 -11
  242. package/dist/server/server-reference-loader.d.ts +4 -0
  243. package/dist/server/server-reference-loader.js +29 -0
  244. package/dist/server/socket-error-backstop.d.ts +23 -1
  245. package/dist/server/socket-error-backstop.js +69 -17
  246. package/dist/server/static-file-signal.d.ts +15 -4
  247. package/dist/server/static-file-signal.js +46 -12
  248. package/dist/server/worker-image-optimization.d.ts +34 -0
  249. package/dist/server/worker-image-optimization.js +86 -0
  250. package/dist/server/worker-stages.d.ts +1 -1
  251. package/dist/server/worker-stages.js +2 -2
  252. package/dist/server/worker-utils.d.ts +8 -3
  253. package/dist/server/worker-utils.js +12 -7
  254. package/dist/shims/app-router-scroll.js +4 -1
  255. package/dist/shims/app-router-tree-context.d.ts +5 -0
  256. package/dist/shims/app-router-tree-context.js +27 -0
  257. package/dist/shims/cache-adapter-instantiate.d.ts +50 -0
  258. package/dist/shims/cache-adapter-instantiate.js +118 -0
  259. package/dist/shims/cache-callable-runtime.d.ts +6 -42
  260. package/dist/shims/cache-callable-runtime.js +65 -174
  261. package/dist/shims/cache-flight-arguments.d.ts +22 -0
  262. package/dist/shims/cache-flight-arguments.js +56 -0
  263. package/dist/shims/cache-handler.js +1 -9
  264. package/dist/shims/cache-request-state.d.ts +15 -0
  265. package/dist/shims/cache-request-state.js +31 -8
  266. package/dist/shims/cache-runtime.d.ts +12 -20
  267. package/dist/shims/cache-runtime.js +166 -225
  268. package/dist/shims/cache.d.ts +4 -4
  269. package/dist/shims/cache.js +44 -16
  270. package/dist/shims/cacheability-classification.d.ts +7 -0
  271. package/dist/shims/cdn-cache.d.ts +8 -0
  272. package/dist/shims/cdn-cache.js +17 -1
  273. package/dist/shims/disable-smooth-scroll.d.ts +3 -0
  274. package/dist/shims/disable-smooth-scroll.js +36 -0
  275. package/dist/shims/document-placeholders.d.ts +19 -0
  276. package/dist/shims/document-placeholders.js +45 -0
  277. package/dist/shims/document.js +21 -5
  278. package/dist/shims/dynamic-preload-chunks.d.ts +1 -0
  279. package/dist/shims/dynamic-preload-chunks.js +13 -9
  280. package/dist/shims/dynamic.d.ts +1 -1
  281. package/dist/shims/dynamic.js +60 -8
  282. package/dist/shims/error-boundary-navigation.d.ts +7 -0
  283. package/dist/shims/error-boundary-navigation.js +19 -1
  284. package/dist/shims/error-boundary.d.ts +10 -10
  285. package/dist/shims/error-boundary.js +26 -7
  286. package/dist/shims/fetch-cache-state.d.ts +66 -0
  287. package/dist/shims/fetch-cache-state.js +92 -0
  288. package/dist/shims/fetch-cache.d.ts +3 -61
  289. package/dist/shims/fetch-cache.js +161 -108
  290. package/dist/shims/form.js +1 -1
  291. package/dist/shims/head.d.ts +10 -6
  292. package/dist/shims/head.js +15 -13
  293. package/dist/shims/headers.d.ts +13 -0
  294. package/dist/shims/headers.js +47 -4
  295. package/dist/shims/image.js +2 -1
  296. package/dist/shims/internal/app-page-props-cache-key.d.ts +5 -2
  297. package/dist/shims/internal/app-page-props-cache-key.js +24 -15
  298. package/dist/shims/internal/headers-state.d.ts +0 -1
  299. package/dist/shims/internal/work-store-scope.d.ts +5 -0
  300. package/dist/shims/internal/work-store-scope.js +24 -0
  301. package/dist/shims/metadata.js +3 -3
  302. package/dist/shims/navigation-errors.d.ts +6 -0
  303. package/dist/shims/navigation-errors.js +11 -1
  304. package/dist/shims/navigation.d.ts +7 -0
  305. package/dist/shims/navigation.js +45 -9
  306. package/dist/shims/request-context.d.ts +11 -0
  307. package/dist/shims/request-state-types.d.ts +2 -1
  308. package/dist/shims/router.js +12 -20
  309. package/dist/shims/server.d.ts +16 -0
  310. package/dist/shims/server.js +24 -4
  311. package/dist/shims/thenable-params.d.ts +4 -0
  312. package/dist/shims/thenable-params.js +25 -3
  313. package/dist/shims/unified-request-context.d.ts +1 -1
  314. package/dist/shims/unified-request-context.js +1 -0
  315. package/dist/shims/url-utils.d.ts +2 -0
  316. package/dist/shims/url-utils.js +3 -1
  317. package/dist/utils/client-runtime-metadata.js +1 -1
  318. package/dist/utils/hash.d.ts +7 -0
  319. package/dist/utils/hash.js +11 -1
  320. package/dist/utils/mdx-scan.d.ts +5 -0
  321. package/dist/utils/mdx-scan.js +8 -1
  322. package/dist/utils/package-name.d.ts +6 -0
  323. package/dist/utils/package-name.js +12 -1
  324. package/dist/utils/plugin-rsc-version.d.ts +4 -0
  325. package/dist/utils/plugin-rsc-version.js +15 -0
  326. package/dist/utils/prerender-output-paths.js +15 -4
  327. package/dist/utils/public-file-path.d.ts +10 -2
  328. package/dist/utils/public-file-path.js +13 -9
  329. package/dist/utils/public-routes.js +2 -2
  330. package/dist/utils/react-version.d.ts +3 -0
  331. package/dist/utils/react-version.js +1 -1
  332. package/dist/utils/regex-safety.d.ts +10 -0
  333. package/dist/utils/regex-safety.js +70 -18
  334. package/package.json +9 -5
@@ -6,17 +6,19 @@ import { hasBasePath, stripBasePath } from "../utils/base-path.js";
6
6
  import { runWithExecutionContext } from "../shims/request-context.js";
7
7
  import { VINEXT_CACHEABILITY_PROBE_QUERY_PARAM, VINEXT_EXPECTED_WORKER_VERSION_HEADER } from "./headers.js";
8
8
  import { notFoundStaticAssetResponse } from "./http-error-responses.js";
9
- import { isOpenRedirectShaped } from "./open-redirect.js";
10
- import { attachRequestCfMetadata, cloneRequestWithHeaders, cloneRequestWithUrl, filterInternalHeaders } from "./request-pipeline.js";
9
+ import { attachRequestCfMetadata, cloneRequestWithHeaders, cloneRequestWithUrl, filterInternalHeaders, guardProtocolRelativeUrl } from "./request-pipeline.js";
11
10
  import { normalizeDefaultLocalePathname } from "./pages-i18n.js";
11
+ import { isNextDataPathname } from "./pages-data-route.js";
12
12
  import { getExplicitCdnCacheAdapter } from "../shims/cdn-cache-state.js";
13
13
  import { CACHEABILITY_REQUEST_STATE } from "../shims/cacheability-classification.js";
14
14
  import { applyCdnResponseIdentityHeaders, captureCdnResponsePolicyOverrides, reconcileCdnResponseHeadersAfterOuterPolicy, validateCdnRequest } from "./cache-control.js";
15
15
  import { registerLazyDataCacheHandler } from "../shims/cache-handler.js";
16
- import { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES, handleConfiguredImageOptimization, isImageOptimizationPath } from "./image-optimization.js";
16
+ import { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES, handleConfiguredImageOptimization, isImageOptimizationPath, isImageSourceBodyStatus } from "./image-optimization.js";
17
17
  import { traceFrameworkRequest } from "./request-tracing.js";
18
18
  import { resolveResponseStageCachePolicy } from "./config-headers.js";
19
+ import { createStaticAssetRequest } from "./worker-utils.js";
19
20
  import { fetchWorkerFilesystemRoute, runPagesRequest, wrapMiddlewareWithBasePath } from "./pages-request-pipeline.js";
21
+ import { resolveClientBuildFile } from "./client-build-files.js";
20
22
  import { createWorkerRevalidationContext } from "./worker-revalidation-context.js";
21
23
  import { createWorkerPrerenderDiscoveryContext, createWorkerPrerenderReadinessResponse, isWorkerPrerenderDiscoveryPath } from "./worker-prerender-discovery.js";
22
24
  import { getPagesResponseStageCacheDisposition } from "./pages-response-stage.js";
@@ -40,12 +42,13 @@ function haveSameHeaders(first, second) {
40
42
  function captureOuterResponsePolicyHeaders(stagedHeaders, transportedPolicyHeaders) {
41
43
  return captureCdnResponsePolicyOverrides(stagedHeaders, new Headers(transportedPolicyHeaders ?? []));
42
44
  }
43
- const { authorizeOnDemandRevalidate, hasMiddleware, hasRequestAwareDocument, matchApiRoute, matchPageRoute, normalizeDataRequest, publicFiles, runMiddleware, vinextConfig } = pagesEntry;
45
+ const { authorizeOnDemandRevalidate, hasMiddleware, hasRequestAwareDocument, matchApiRoute, matchPageRoute, normalizeDataRequest, publicFiles, clientBuildFiles, runMiddleware, vinextConfig } = pagesEntry;
44
46
  const pagesRequestStageBuildId = pagesEntry.buildId ?? null;
45
47
  const pagesRequestStagePrerenderSecret = pagesEntry.prerenderSecret ?? null;
46
48
  const basePath = vinextConfig?.basePath ?? "";
47
49
  const assetPathPrefix = assetPrefixPathname(vinextConfig?.assetPrefix ?? "");
48
50
  const trailingSlash = vinextConfig?.trailingSlash ?? false;
51
+ const skipTrailingSlashRedirect = vinextConfig?.skipTrailingSlashRedirect ?? false;
49
52
  const i18nConfig = vinextConfig?.i18n ?? null;
50
53
  const configRedirects = vinextConfig?.redirects ?? [];
51
54
  const configRewrites = vinextConfig?.rewrites ?? {
@@ -61,6 +64,17 @@ const imageConfig = vinextConfig?.images ? {
61
64
  contentDispositionType: vinextConfig.images.contentDispositionType,
62
65
  contentSecurityPolicy: vinextConfig.images.contentSecurityPolicy
63
66
  } : void 0;
67
+ /**
68
+ * Whether the request stage serves this request as a client build file
69
+ * outside `_next/static`. Such responses resolve no route, so the Worker
70
+ * keeps their ASSETS cache policy out of route cacheability admission.
71
+ */
72
+ function isPagesClientBuildFileRequest(request, env, ctx) {
73
+ return (request.method === "GET" || request.method === "HEAD") && resolveAssetFetcher(ctx?.assets, env, "worker") !== void 0 && resolveClientBuildFile(new URL(request.url).pathname, basePath, clientBuildFiles) !== null;
74
+ }
75
+ function resolveAssetFetcher(assets, env, defaultHostRuntime) {
76
+ return assets ?? getExplicitCdnCacheAdapter()?.assets ?? (defaultHostRuntime === "worker" ? env?.ASSETS : void 0);
77
+ }
64
78
  /** Run the request-time stage with a host-owned response dispatcher. */
65
79
  function handleRequestStage(request, env, ctx, dispatchResponseStage) {
66
80
  const originalRequest = request;
@@ -90,7 +104,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
90
104
  let sharedOuterPolicyHeaders = null;
91
105
  let ctx = createWorkerRevalidationContext(platformCtx, (internalRequest, internalCtx) => handleRequest(internalRequest, env, internalCtx, dispatchResponseStage, forceCacheBypass, defaultHostRuntime, assets), defaultHostRuntime);
92
106
  configuredCdnCacheAdapters.registerConfiguredCacheAdapters(env);
93
- assets ??= getExplicitCdnCacheAdapter()?.assets ?? (defaultHostRuntime === "worker" ? env?.ASSETS : void 0);
107
+ assets = resolveAssetFetcher(assets, env, defaultHostRuntime);
94
108
  if (configuredCdnCacheAdapters.hasConfiguredDataCache) registerLazyDataCacheHandler(async () => {
95
109
  (await import("virtual:vinext-cache-adapters")).registerConfiguredCacheAdapters(env);
96
110
  });
@@ -144,16 +158,21 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
144
158
  resolvedRoutePathname: pathname
145
159
  },
146
160
  kind: "pages-prerender-discovery",
147
- protocolVersion: 4,
161
+ protocolVersion: 5,
148
162
  requestHost: url.host,
149
163
  stagedHeaders: null
150
164
  }, { cache: "bypass" }, env, ctx);
151
- if (isOpenRedirectShaped(pathname)) return new Response("This page could not be found", { status: 404 });
165
+ const protocolRelativeGuard = guardProtocolRelativeUrl(pathname, url.search);
166
+ if (protocolRelativeGuard) return protocolRelativeGuard;
152
167
  try {
153
168
  normalizePathnameForRouteMatchStrict(pathname);
154
169
  } catch {
155
170
  return new Response("Bad Request", { status: 400 });
156
171
  }
172
+ if (assets && (request.method === "GET" || request.method === "HEAD")) {
173
+ const clientBuildFile = resolveClientBuildFile(pathname, basePath, clientBuildFiles);
174
+ if (clientBuildFile) return await assets.fetch(createStaticAssetRequest(clientBuildFile, request));
175
+ }
157
176
  const missingBuildAsset = isNextStaticPath(pathname, basePath, assetPathPrefix);
158
177
  const hadBasePath = !basePath || hasBasePath(pathname, basePath);
159
178
  {
@@ -166,6 +185,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
166
185
  }
167
186
  }
168
187
  const middlewareRequest = request;
188
+ const originalRenderUrl = pathname + new URL(request.url).search;
169
189
  const dataNorm = normalizeDataRequest(request);
170
190
  if (dataNorm.notFoundResponse && !vinextConfig?.skipProxyUrlNormalize) return dataNorm.notFoundResponse;
171
191
  const isDataReq = dataNorm.isDataReq;
@@ -188,6 +208,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
188
208
  assetPrefix: vinextConfig?.assetPrefix,
189
209
  basePath,
190
210
  trailingSlash,
211
+ skipTrailingSlashRedirect,
191
212
  i18nConfig,
192
213
  configRedirects,
193
214
  configRewrites,
@@ -227,9 +248,12 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
227
248
  resolvedRoutePathname: new URL(resolvedUrl, req.url).pathname
228
249
  },
229
250
  kind: "pages-page",
230
- protocolVersion: 4,
251
+ protocolVersion: 5,
231
252
  requestHost: new URL(req.url).host,
232
- renderOptions: options ?? null,
253
+ renderOptions: isDataReq ? {
254
+ ...options,
255
+ originalUrl: originalRenderUrl
256
+ } : options ?? null,
233
257
  resolvedUrl,
234
258
  stagedHeaders: isSharedStaticPage ? null : [...stagedHeaders ?? new Headers()]
235
259
  });
@@ -264,7 +288,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
264
288
  resolvedRoutePathname: new URL(apiUrl, req.url).pathname
265
289
  },
266
290
  kind: "pages-api",
267
- protocolVersion: 4,
291
+ protocolVersion: 5,
268
292
  requestHost: new URL(req.url).host,
269
293
  stagedHeaders: [...stagedHeaders]
270
294
  });
@@ -281,17 +305,56 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
281
305
  return response;
282
306
  }) : dispatched;
283
307
  },
284
- serveFilesystemRoute: async (requestPathname, _stagedHeaders, phase, resolvedUrl) => {
308
+ serveFilesystemRoute: async (requestPathname, _stagedHeaders, phase, resolvedUrl, filesystemRequest, resolvedPathnameHasBasePath) => {
285
309
  if (!assets) return false;
286
- if (isImageOptimizationPath(requestPathname)) {
310
+ if (resolvedPathnameHasBasePath && isImageOptimizationPath(requestPathname)) {
287
311
  const imageUrl = new URL(resolvedUrl, request.url);
288
- const imageRequest = new Request(imageUrl, request);
312
+ const imageRequest = cloneRequestWithUrl(request, imageUrl.href);
289
313
  const allowedWidths = [...vinextConfig?.images?.deviceSizes ?? DEFAULT_DEVICE_SIZES, ...vinextConfig?.images?.imageSizes ?? DEFAULT_IMAGE_SIZES];
290
- return handleConfiguredImageOptimization(imageRequest, (assetPath) => Promise.resolve(assets.fetch(new Request(new URL(assetPath, request.url)))), allowedWidths, imageConfig);
314
+ const { fetchWorkerImageSource } = await import("./worker-image-optimization.js");
315
+ return handleConfiguredImageOptimization(imageRequest, (sourceUrl, sourceImageRequest) => fetchWorkerImageSource(sourceUrl, sourceImageRequest, {
316
+ assets,
317
+ basePath,
318
+ assetPathPrefix,
319
+ clientBuildFiles,
320
+ fetchPublicFile: (sourceRequest) => resolvePublicImageSource(sourceRequest, assets)
321
+ }), allowedWidths, imageConfig);
291
322
  }
292
- return fetchWorkerFilesystemRoute(request, requestPathname, phase, (assetRequest) => Promise.resolve(assets.fetch(assetRequest)), publicFiles, basePath, assetPathPrefix);
323
+ return fetchWorkerFilesystemRoute(filesystemRequest, requestPathname, phase, (assetRequest) => Promise.resolve(assets.fetch(assetRequest)), publicFiles, basePath, assetPathPrefix, hadBasePath);
293
324
  }
294
325
  };
326
+ const resolvePublicImageSource = async (sourceRequest, sourceAssets) => {
327
+ const sourceUrl = new URL(sourceRequest.url);
328
+ if (guardProtocolRelativeUrl(sourceUrl.pathname, sourceUrl.search)) return null;
329
+ const sourceHadBasePath = !basePath || hasBasePath(sourceUrl.pathname, basePath);
330
+ const sourcePathname = stripBasePath(sourceUrl.pathname, basePath);
331
+ if (isNextDataPathname(sourcePathname)) return null;
332
+ let sourceAsset = null;
333
+ const sourceResult = await runPagesRequest(attachRequestCfMetadata(new Request(new URL(sourcePathname + sourceUrl.search, sourceUrl), { signal: sourceRequest.signal }), sourceRequest), {
334
+ ...deps,
335
+ hadBasePath: sourceHadBasePath,
336
+ isDataReq: false,
337
+ isDataRequest: false,
338
+ middlewareRequest: void 0,
339
+ dataNotFoundResponse: null,
340
+ recordCacheability: false,
341
+ runMiddleware: typeof runMiddleware === "function" ? wrapMiddlewareWithBasePath(runMiddleware, basePath, sourceHadBasePath) : null,
342
+ renderPage: null,
343
+ handleApi: null,
344
+ serveFilesystemRoute: async (candidate, _stagedHeaders, phase, _resolvedUrl, filesystemRequest) => {
345
+ if (isImageOptimizationPath(candidate)) return false;
346
+ const asset = await fetchWorkerFilesystemRoute(filesystemRequest, candidate, phase, (assetRequest) => Promise.resolve(sourceAssets.fetch(assetRequest)), publicFiles, basePath, assetPathPrefix, sourceHadBasePath);
347
+ if (asset === false) return false;
348
+ sourceAsset = asset;
349
+ return new Response(null);
350
+ }
351
+ });
352
+ if (sourceResult.type !== "response") return null;
353
+ await sourceResult.response.body?.cancel().catch(() => {});
354
+ if (isImageSourceBodyStatus(sourceResult.response.status)) return sourceAsset;
355
+ await sourceAsset?.body?.cancel().catch(() => {});
356
+ return null;
357
+ };
295
358
  const result = await runPagesRequest(request, deps);
296
359
  if (result.type === "response") {
297
360
  let response = result.response;
@@ -313,4 +376,4 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
313
376
  }
314
377
  }
315
378
  //#endregion
316
- export { handleRequestStage, handleRequestStageLocally, pagesRequestStageBuildId, pagesRequestStagePrerenderSecret };
379
+ export { handleRequestStage, handleRequestStageLocally, isPagesClientBuildFileRequest, pagesRequestStageBuildId, pagesRequestStagePrerenderSecret };
@@ -53,6 +53,10 @@ async function renderPagesResponse(request, env, platformCtx, props, stagedHeade
53
53
  ...ctx,
54
54
  isPrerenderPathDiscovery: true
55
55
  };
56
+ else if (props.kind === "pages-page" && dispatchOptions.regeneratesStoredEntry === true) ctx = {
57
+ ...ctx,
58
+ isStoredEntryRegeneration: true
59
+ };
56
60
  const render = async (cacheabilityContext) => {
57
61
  if (props.kind === "pages-prerender-discovery") {
58
62
  const readinessResponse = createWorkerPrerenderReadinessResponse(cacheabilityContext, request);
@@ -29,7 +29,7 @@ async function performOnDemandRevalidate(source, urlPath, opts = {}, trustedOrig
29
29
  const res = await fetchRevalidateTarget(target, headers, dispatchRevalidate);
30
30
  if (!((res.headers.get("x-vercel-cache") ?? res.headers.get("x-nextjs-cache"))?.toUpperCase() === "REVALIDATED" || res.status === 200 || res.status === 404 && opts.unstable_onlyGenerated === true)) throw new Error(`Failed to revalidate ${urlPath}: ${res.status}`);
31
31
  const regeneratedTag = res.headers.get(VINEXT_REVALIDATED_CACHE_TAG_HEADER);
32
- if (regeneratedTag) await getCdnCacheAdapter().revalidateTag(regeneratedTag);
32
+ if (regeneratedTag) await getCdnCacheAdapter().revalidateTag(decodeURIComponent(regeneratedTag));
33
33
  }
34
34
  function readSourceHeader(source, key) {
35
35
  if (isWebHeaders(source)) return source.get(key) ?? void 0;
@@ -5,7 +5,7 @@ import { getCdnCacheAdapter } from "../shims/cdn-cache.js";
5
5
  import { validateCdnRequest } from "./cache-control.js";
6
6
  import { createWorkerRevalidationContext } from "./worker-revalidation-context.js";
7
7
  import { createWorkerPrerenderDiscoveryContext, createWorkerPrerenderReadinessResponse } from "./worker-prerender-discovery.js";
8
- import { handleRequestStageLocally, pagesRequestStageBuildId, pagesRequestStagePrerenderSecret } from "./pages-request-stage-entry.js";
8
+ import { handleRequestStageLocally, isPagesClientBuildFileRequest, pagesRequestStageBuildId, pagesRequestStagePrerenderSecret } from "./pages-request-stage-entry.js";
9
9
  import { renderPagesResponse } from "./pages-response-stage-entry.js";
10
10
  import { registerConfiguredCacheAdapters } from "virtual:vinext-cache-adapters";
11
11
  import { __ensureInstrumentation } from "virtual:vinext-pages-request-entry";
@@ -23,8 +23,9 @@ async function handleSingleStageRequest(request, env, platformCtx) {
23
23
  if (readinessResponse.status === 204) await Promise.all([__ensureInstrumentation(), __ensureInstrumentation$1()]);
24
24
  return await validateCdnRequest(request) ?? readinessResponse;
25
25
  }
26
+ const isClientBuildFile = isPagesClientBuildFileRequest(request, env, ctx);
26
27
  let finalize;
27
- if (request.headers.has("X-Vinext-Cacheability-Probe")) {
28
+ if (!isClientBuildFile && request.headers.has("X-Vinext-Cacheability-Probe")) {
28
29
  const cacheability = await import("./cacheability-request.js");
29
30
  const probeContext = cacheability.createWorkerCacheabilityContext(ctx, request, pagesRequestStagePrerenderSecret, adapter.responseVary);
30
31
  if (probeContext !== ctx) {
@@ -39,7 +40,7 @@ async function handleSingleStageRequest(request, env, platformCtx) {
39
40
  }
40
41
  }
41
42
  const requiresCompletedResponseAdmission = adapter.requiresCompletedResponseAdmission === true;
42
- if (!finalize && (__cacheabilityManifest || requiresCompletedResponseAdmission)) {
43
+ if (!finalize && !isClientBuildFile && (__cacheabilityManifest || requiresCompletedResponseAdmission)) {
43
44
  const cacheability = await import("./cacheability-request.js");
44
45
  const admissionContext = cacheability.createWorkerCacheabilityAdmissionContext(ctx, request, __cacheabilityManifest, pagesRequestStageBuildId, requiresCompletedResponseAdmission, adapter.responseVary);
45
46
  if (admissionContext !== ctx) {
@@ -32,7 +32,6 @@ export type PrerenderManifest = {
32
32
  pregeneratedConcretePaths?: Array<[string, string[]]>;
33
33
  };
34
34
  export type PrerenderedPathSelectionOptions = {
35
- includeFallbackShells?: boolean;
36
35
  includeErrorDocuments?: boolean;
37
36
  };
38
37
  export declare function readPrerenderManifest(manifestPath: string): PrerenderManifest | null;
@@ -58,8 +57,9 @@ export declare function buildPregeneratedConcretePathTable(manifest: PrerenderMa
58
57
  * This intentionally includes both App Router and Pages Router entries because
59
58
  * deploy-time cache warmup should exercise the same URLs the prerender phase
60
59
  * proved are statically renderable. PPR fallback-shell placeholder artifacts
61
- * and known error documents are excluded by default so warmup does not request
62
- * synthetic bracket paths or treat a healthy 404 response as a failed warmup.
60
+ * are always excluded, and known error documents by default, so warmup does not
61
+ * request synthetic bracket paths or treat a healthy 404 response as a failed
62
+ * warmup.
63
63
  */
64
64
  export declare function getPrerenderedConcretePaths(manifest: PrerenderManifest, options?: PrerenderedPathSelectionOptions): string[];
65
65
  //#endregion
@@ -65,8 +65,9 @@ function buildPregeneratedConcretePathTable(manifest) {
65
65
  * This intentionally includes both App Router and Pages Router entries because
66
66
  * deploy-time cache warmup should exercise the same URLs the prerender phase
67
67
  * proved are statically renderable. PPR fallback-shell placeholder artifacts
68
- * and known error documents are excluded by default so warmup does not request
69
- * synthetic bracket paths or treat a healthy 404 response as a failed warmup.
68
+ * are always excluded, and known error documents by default, so warmup does not
69
+ * request synthetic bracket paths or treat a healthy 404 response as a failed
70
+ * warmup.
70
71
  */
71
72
  function getPrerenderedConcretePaths(manifest, options) {
72
73
  const routes = manifest.routes;
@@ -76,7 +77,7 @@ function getPrerenderedConcretePaths(manifest, options) {
76
77
  for (const route of routes) {
77
78
  if (route.status !== "rendered" || route.notFound) continue;
78
79
  const pathname = route.path ?? route.route;
79
- if (!options?.includeFallbackShells && isFallbackShellArtifactPath(pathname, route)) continue;
80
+ if (isFallbackShellArtifactPath(pathname, route)) continue;
80
81
  if (!options?.includeErrorDocuments && isErrorDocumentRoute(pathname, route)) continue;
81
82
  if (seen.has(pathname)) continue;
82
83
  seen.add(pathname);
@@ -1,3 +1,4 @@
1
+ import { runInWorkStoreScope } from "../shims/internal/work-store-scope.js";
1
2
  import { workUnitAsyncStorage } from "../shims/internal/work-unit-async-storage.js";
2
3
  import { isRouteCacheabilityProbe } from "../shims/cacheability-classification.js";
3
4
  import { NO_STORE_CACHE_CONTROL } from "./cache-control.js";
@@ -15,6 +16,9 @@ import { NO_STORE_CACHE_CONTROL } from "./cache-control.js";
15
16
  *
16
17
  */
17
18
  function runWithPrerenderWorkUnit(fn, options) {
19
+ return runInWorkStoreScope(() => runWithWorkUnit(fn, options));
20
+ }
21
+ function runWithWorkUnit(fn, options) {
18
22
  if (process.env.VINEXT_PRERENDER === "1" || isRouteCacheabilityProbe()) {
19
23
  if (options?.cacheComponents !== true) return workUnitAsyncStorage.run({ type: "prerender-legacy" }, fn);
20
24
  return runWithPrerenderWorkUnitOwner(fn, options);
@@ -2,6 +2,7 @@ import { NextI18nConfig } from "../config/next-config.js";
2
2
  import { negotiateEncoding } from "./accept-encoding.js";
3
3
  import { StaticFileCache } from "./static-file-cache.js";
4
4
  import { resolveRequestHost, trustProxy, trustedHosts } from "./proxy-trust.js";
5
+ import { COMPRESS_THRESHOLD, isCompressibleContentType } from "./response-compression.js";
5
6
  import { IncomingMessage, ServerResponse } from "node:http";
6
7
  //#region src/server/prod-server.d.ts
7
8
  /**
@@ -68,10 +69,6 @@ export type ProdServerOptions = {
68
69
  /** Suppress the startup log for internal child-process servers. */
69
70
  silent?: boolean;
70
71
  };
71
- /** Content types that benefit from compression. */
72
- declare const COMPRESSIBLE_TYPES: Set<string>;
73
- /** Minimum size threshold for compression (in bytes). Below this, compression overhead isn't worth it. */
74
- declare const COMPRESS_THRESHOLD = 1024;
75
72
  /**
76
73
  * Merge middleware headers and a Web Response's headers into a single
77
74
  * record suitable for Node.js `res.writeHead()`. Uses `getSetCookie()`
@@ -104,15 +101,19 @@ declare function sendCompressed(req: IncomingMessage, res: ServerResponse, body:
104
101
  *
105
102
  * Without a cache, falls back to async filesystem probing (still non-blocking,
106
103
  * unlike the old sync existsSync/statSync approach).
104
+ *
105
+ * `extraHeaders` go on every response for the file. `representationHeaders` go
106
+ * only on responses that carry the file's bytes (200 and 206), never on a 304,
107
+ * 412, 416 or 405.
107
108
  */
108
- declare function tryServeStatic(req: IncomingMessage, res: ServerResponse, clientDir: string, pathname: string, compress: boolean, cache?: StaticFileCache, extraHeaders?: Record<string, string | string[]>, statusCode?: number): Promise<boolean>;
109
+ declare function tryServeStatic(req: IncomingMessage, res: ServerResponse, clientDir: string, pathname: string, compress: boolean, cache?: StaticFileCache, extraHeaders?: Record<string, string | string[]>, statusCode?: number, representationHeaders?: Record<string, string>): Promise<boolean>;
109
110
  /**
110
111
  * Convert a Node.js IncomingMessage to a Web Request object.
111
112
  *
112
113
  * When `urlOverride` is provided, it is used as the path + query string
113
114
  * instead of `req.url`.
114
115
  */
115
- declare function nodeToWebRequest(req: IncomingMessage, urlOverride?: string, prerenderSecret?: string, i18nConfig?: NextI18nConfig | null, authorizeOnDemandRevalidate?: (headerValue: string | null) => boolean): Request;
116
+ declare function nodeToWebRequest(req: IncomingMessage, urlOverride?: string, prerenderSecret?: string, i18nConfig?: NextI18nConfig | null, authorizeOnDemandRevalidate?: (headerValue: string | null) => boolean, signal?: AbortSignal): Request;
116
117
  /**
117
118
  * Stream a Web Response back to a Node.js ServerResponse.
118
119
  * Supports streaming compression for SSR responses.
@@ -154,5 +155,17 @@ export declare function resolveAppRouterPrerenderSeeder(entryModule: unknown): A
154
155
  * route through; the on-disk path is just `_next/static/...`.
155
156
  */
156
157
  export declare function resolveAppRouterAssetPath(pathname: string, assetPathPrefix: string, assetPrefix: string): string | null;
158
+ /**
159
+ * Create the Pages Router request handler for `vite preview`. Vite's preview
160
+ * middleware (proxy, compression, `base`, static files) runs first, so this
161
+ * handles only the requests Vite doesn't serve and leaves compression to Vite.
162
+ * Resolves to null when the build has no Pages Router server entry.
163
+ */
164
+ export declare function createPagesPreviewHandler(options: {
165
+ clientDir: string;
166
+ serverDir: string;
167
+ host: string;
168
+ port: number;
169
+ }): Promise<((req: IncomingMessage, res: ServerResponse) => void) | null>;
157
170
  //#endregion
158
- export { COMPRESSIBLE_TYPES, COMPRESS_THRESHOLD, mergeResponseHeaders, mergeWebResponse, negotiateEncoding, nodeToWebRequest, resolveRequestHost as resolveHost, sendCompressed, sendWebResponse, trustProxy, trustedHosts, tryServeStatic, waitForNodeResponseCompletion };
171
+ export { COMPRESS_THRESHOLD, isCompressibleContentType, mergeResponseHeaders, mergeWebResponse, negotiateEncoding, nodeToWebRequest, resolveRequestHost as resolveHost, sendCompressed, sendWebResponse, trustProxy, trustedHosts, tryServeStatic, waitForNodeResponseCompletion };