vinext 0.1.7 → 0.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 (279) hide show
  1. package/README.md +51 -30
  2. package/dist/build/inject-pregenerated-paths.d.ts +4 -0
  3. package/dist/build/inject-pregenerated-paths.js +18 -0
  4. package/dist/build/layout-classification.js +1 -1
  5. package/dist/build/nitro-route-rules.js +1 -1
  6. package/dist/build/pages-client-assets-module.d.ts +11 -0
  7. package/dist/build/pages-client-assets-module.js +27 -0
  8. package/dist/build/prerender.d.ts +2 -1
  9. package/dist/build/prerender.js +13 -6
  10. package/dist/build/report.d.ts +13 -2
  11. package/dist/build/report.js +99 -2
  12. package/dist/build/run-prerender.d.ts +7 -0
  13. package/dist/build/run-prerender.js +10 -1
  14. package/dist/build/standalone.js +2 -0
  15. package/dist/cache/cache-adapters-virtual.js +3 -3
  16. package/dist/check.d.ts +18 -0
  17. package/dist/check.js +77 -19
  18. package/dist/cli-args.d.ts +1 -2
  19. package/dist/cli-args.js +1 -1
  20. package/dist/cli-dev-config.d.ts +12 -0
  21. package/dist/cli-dev-config.js +23 -0
  22. package/dist/cli.js +113 -97
  23. package/dist/{server → client}/dev-error-overlay-store.d.ts +1 -1
  24. package/dist/{server → client}/dev-error-overlay-store.js +1 -1
  25. package/dist/{server → client}/dev-error-overlay.d.ts +1 -1
  26. package/dist/{server → client}/dev-error-overlay.js +2 -2
  27. package/dist/client/navigation-runtime.d.ts +2 -0
  28. package/dist/client/navigation-runtime.js +3 -1
  29. package/dist/client/window-next.d.ts +2 -1
  30. package/dist/cloudflare/index.d.ts +2 -2
  31. package/dist/cloudflare/index.js +2 -2
  32. package/dist/config/config-matchers.js +14 -10
  33. package/dist/config/next-config.d.ts +6 -3
  34. package/dist/config/next-config.js +47 -1
  35. package/dist/config/prerender.d.ts +34 -0
  36. package/dist/config/prerender.js +55 -0
  37. package/dist/config/server-external-packages.d.ts +4 -0
  38. package/dist/config/server-external-packages.js +91 -0
  39. package/dist/entries/app-rsc-entry.d.ts +2 -1
  40. package/dist/entries/app-rsc-entry.js +89 -15
  41. package/dist/entries/app-rsc-manifest.js +10 -0
  42. package/dist/entries/pages-client-entry.d.ts +3 -0
  43. package/dist/entries/pages-client-entry.js +16 -1
  44. package/dist/entries/pages-server-entry.js +6 -2
  45. package/dist/image/image-adapters-virtual.d.ts +59 -0
  46. package/dist/image/image-adapters-virtual.js +59 -0
  47. package/dist/index.d.ts +33 -0
  48. package/dist/index.js +211 -118
  49. package/dist/init-cloudflare.d.ts +43 -0
  50. package/dist/init-cloudflare.js +839 -0
  51. package/dist/init-platform.d.ts +40 -0
  52. package/dist/init-platform.js +195 -0
  53. package/dist/init.d.ts +16 -38
  54. package/dist/init.js +208 -97
  55. package/dist/node_modules/.pnpm/am-i-vibing@0.5.0/node_modules/am-i-vibing/dist/detector-1yx2Hoe0.js +294 -0
  56. package/dist/node_modules/.pnpm/process-ancestry@0.1.0/node_modules/process-ancestry/dist/index.js +94 -0
  57. package/dist/{cloudflare → packages/cloudflare}/src/cache/cdn-adapter.runtime.js +1 -1
  58. package/dist/{cloudflare → packages/cloudflare}/src/cache/kv-data-adapter.runtime.d.ts +2 -2
  59. package/dist/{cloudflare → packages/cloudflare}/src/cache/kv-data-adapter.runtime.js +1 -1
  60. package/dist/packages/cloudflare/src/deploy-config.js +150 -0
  61. package/dist/packages/cloudflare/src/deploy-help.js +55 -0
  62. package/dist/packages/cloudflare/src/deploy.js +276 -0
  63. package/dist/{cloudflare → packages/cloudflare/src}/tpr.d.ts +4 -41
  64. package/dist/{cloudflare → packages/cloudflare/src}/tpr.js +18 -15
  65. package/dist/plugins/ast-scope.d.ts +16 -0
  66. package/dist/plugins/ast-scope.js +62 -0
  67. package/dist/plugins/ast-utils.d.ts +27 -1
  68. package/dist/plugins/ast-utils.js +32 -1
  69. package/dist/plugins/css-module-imports.d.ts +14 -0
  70. package/dist/plugins/css-module-imports.js +59 -0
  71. package/dist/plugins/extensionless-dynamic-import.js +2 -2
  72. package/dist/plugins/ignore-dynamic-requests.d.ts +11 -0
  73. package/dist/plugins/ignore-dynamic-requests.js +530 -0
  74. package/dist/plugins/middleware-server-only.d.ts +8 -6
  75. package/dist/plugins/middleware-server-only.js +8 -7
  76. package/dist/plugins/optimize-imports.js +1 -1
  77. package/dist/plugins/typeof-window.d.ts +1 -1
  78. package/dist/plugins/typeof-window.js +28 -56
  79. package/dist/routing/app-route-graph.d.ts +29 -4
  80. package/dist/routing/app-route-graph.js +182 -40
  81. package/dist/routing/app-router.d.ts +5 -0
  82. package/dist/routing/app-router.js +5 -0
  83. package/dist/routing/file-matcher.d.ts +8 -0
  84. package/dist/routing/file-matcher.js +10 -1
  85. package/dist/routing/pages-router.js +2 -2
  86. package/dist/server/api-handler.js +9 -14
  87. package/dist/server/app-browser-action-result.d.ts +4 -1
  88. package/dist/server/app-browser-action-result.js +8 -1
  89. package/dist/server/app-browser-entry.js +194 -190
  90. package/dist/server/app-browser-history-controller.d.ts +2 -1
  91. package/dist/server/app-browser-history-controller.js +6 -2
  92. package/dist/server/app-browser-interception-context.d.ts +1 -0
  93. package/dist/server/app-browser-interception-context.js +4 -2
  94. package/dist/server/app-browser-navigation-controller.d.ts +2 -0
  95. package/dist/server/app-browser-navigation-controller.js +60 -31
  96. package/dist/server/app-browser-server-action-client.d.ts +32 -0
  97. package/dist/server/app-browser-server-action-client.js +127 -0
  98. package/dist/server/app-browser-state.d.ts +11 -1
  99. package/dist/server/app-browser-state.js +25 -8
  100. package/dist/server/app-browser-visible-commit.d.ts +6 -1
  101. package/dist/server/app-browser-visible-commit.js +43 -25
  102. package/dist/server/app-elements-wire.d.ts +9 -2
  103. package/dist/server/app-elements-wire.js +8 -1
  104. package/dist/server/app-elements.d.ts +2 -2
  105. package/dist/server/app-elements.js +4 -3
  106. package/dist/server/app-fallback-renderer.d.ts +5 -2
  107. package/dist/server/app-fallback-renderer.js +15 -7
  108. package/dist/server/app-hydration-cache-publication.d.ts +11 -0
  109. package/dist/server/app-hydration-cache-publication.js +43 -0
  110. package/dist/server/app-middleware.d.ts +4 -3
  111. package/dist/server/app-middleware.js +8 -3
  112. package/dist/server/app-optimistic-routing.js +11 -4
  113. package/dist/server/app-page-boundary-render.d.ts +3 -0
  114. package/dist/server/app-page-boundary-render.js +14 -3
  115. package/dist/server/app-page-cache-finalizer.d.ts +1 -0
  116. package/dist/server/app-page-cache-finalizer.js +10 -3
  117. package/dist/server/app-page-cache-render.d.ts +1 -0
  118. package/dist/server/app-page-cache-render.js +8 -4
  119. package/dist/server/app-page-cache.d.ts +1 -0
  120. package/dist/server/app-page-cache.js +5 -2
  121. package/dist/server/app-page-dispatch.d.ts +33 -4
  122. package/dist/server/app-page-dispatch.js +63 -90
  123. package/dist/server/app-page-element-builder.d.ts +9 -2
  124. package/dist/server/app-page-element-builder.js +114 -23
  125. package/dist/server/app-page-head.d.ts +16 -1
  126. package/dist/server/app-page-head.js +44 -22
  127. package/dist/server/app-page-params.d.ts +2 -1
  128. package/dist/server/app-page-params.js +8 -1
  129. package/dist/server/app-page-ppr-runtime.d.ts +7 -0
  130. package/dist/server/app-page-ppr-runtime.js +70 -0
  131. package/dist/server/app-page-probe.d.ts +1 -0
  132. package/dist/server/app-page-probe.js +6 -1
  133. package/dist/server/app-page-render-identity.d.ts +1 -0
  134. package/dist/server/app-page-render-identity.js +1 -1
  135. package/dist/server/app-page-render.d.ts +4 -1
  136. package/dist/server/app-page-render.js +26 -3
  137. package/dist/server/app-page-request.d.ts +22 -1
  138. package/dist/server/app-page-request.js +92 -15
  139. package/dist/server/app-page-route-wiring.d.ts +14 -2
  140. package/dist/server/app-page-route-wiring.js +61 -25
  141. package/dist/server/app-page-search-params-observation.d.ts +4 -2
  142. package/dist/server/app-page-search-params-observation.js +11 -7
  143. package/dist/server/app-page-segment-state.d.ts +2 -1
  144. package/dist/server/app-page-segment-state.js +3 -1
  145. package/dist/server/app-page-stream.d.ts +5 -0
  146. package/dist/server/app-page-stream.js +3 -1
  147. package/dist/server/app-ppr-fallback-shell-render.d.ts +4 -3
  148. package/dist/server/app-route-handler-dispatch.js +1 -0
  149. package/dist/server/app-route-handler-execution.js +7 -2
  150. package/dist/server/app-route-handler-response.js +1 -0
  151. package/dist/server/app-route-handler-runtime.js +1 -1
  152. package/dist/server/app-route-module-loader.d.ts +2 -0
  153. package/dist/server/app-route-module-loader.js +1 -0
  154. package/dist/server/app-router-entry.js +16 -8
  155. package/dist/server/app-rsc-errors.js +7 -1
  156. package/dist/server/app-rsc-handler.d.ts +3 -1
  157. package/dist/server/app-rsc-handler.js +67 -39
  158. package/dist/server/app-rsc-request-normalization.d.ts +3 -2
  159. package/dist/server/app-rsc-request-normalization.js +6 -3
  160. package/dist/server/app-rsc-route-matching.d.ts +7 -0
  161. package/dist/server/app-rsc-route-matching.js +36 -3
  162. package/dist/server/app-segment-config.d.ts +12 -0
  163. package/dist/server/app-segment-config.js +91 -5
  164. package/dist/server/app-server-action-execution.d.ts +5 -0
  165. package/dist/server/app-server-action-execution.js +94 -33
  166. package/dist/server/app-ssr-entry.d.ts +3 -0
  167. package/dist/server/app-ssr-entry.js +19 -8
  168. package/dist/server/app-ssr-stream.d.ts +7 -3
  169. package/dist/server/app-ssr-stream.js +10 -6
  170. package/dist/server/app-static-generation.d.ts +1 -0
  171. package/dist/server/app-static-generation.js +1 -0
  172. package/dist/server/app-visited-response-cache.d.ts +6 -0
  173. package/dist/server/app-visited-response-cache.js +3 -1
  174. package/dist/server/client-trace-metadata.js +26 -0
  175. package/dist/server/default-global-not-found-module.d.ts +14 -0
  176. package/dist/server/default-global-not-found-module.js +14 -0
  177. package/dist/server/dev-route-files.js +4 -0
  178. package/dist/server/dev-server.js +19 -18
  179. package/dist/server/dev-stack-sourcemap.d.ts +1 -1
  180. package/dist/server/dev-stack-sourcemap.js +1 -1
  181. package/dist/server/fetch-handler.d.ts +2 -0
  182. package/dist/server/fetch-handler.js +18 -0
  183. package/dist/server/headers.d.ts +5 -15
  184. package/dist/server/headers.js +4 -15
  185. package/dist/server/image-optimization.d.ts +51 -1
  186. package/dist/server/image-optimization.js +52 -2
  187. package/dist/server/implicit-tags.js +1 -1
  188. package/dist/server/isr-cache.d.ts +1 -1
  189. package/dist/server/isr-cache.js +2 -2
  190. package/dist/server/metadata-routes.d.ts +3 -1
  191. package/dist/server/metadata-routes.js +12 -2
  192. package/dist/server/middleware-runtime.js +6 -1
  193. package/dist/server/navigation-planner.d.ts +1 -0
  194. package/dist/server/navigation-planner.js +14 -3
  195. package/dist/server/pages-api-route.js +2 -2
  196. package/dist/server/pages-asset-tags.d.ts +4 -6
  197. package/dist/server/pages-asset-tags.js +12 -12
  198. package/dist/server/pages-client-assets.d.ts +12 -0
  199. package/dist/server/pages-client-assets.js +10 -0
  200. package/dist/server/pages-node-compat.d.ts +8 -1
  201. package/dist/server/pages-node-compat.js +32 -4
  202. package/dist/server/pages-page-data.d.ts +24 -1
  203. package/dist/server/pages-page-data.js +45 -24
  204. package/dist/server/pages-page-handler.d.ts +2 -1
  205. package/dist/server/pages-page-handler.js +19 -12
  206. package/dist/server/pages-page-response.d.ts +7 -0
  207. package/dist/server/pages-page-response.js +4 -1
  208. package/dist/server/pages-request-pipeline.d.ts +2 -0
  209. package/dist/server/pages-request-pipeline.js +25 -1
  210. package/dist/server/pages-router-entry.d.ts +30 -0
  211. package/dist/server/pages-router-entry.js +108 -0
  212. package/dist/server/prerender-manifest.d.ts +3 -1
  213. package/dist/server/prerender-route-params.js +1 -1
  214. package/dist/server/prod-server.d.ts +1 -1
  215. package/dist/server/prod-server.js +48 -26
  216. package/dist/server/request-pipeline.js +1 -0
  217. package/dist/server/seed-cache.js +4 -4
  218. package/dist/server/worker-utils.d.ts +2 -1
  219. package/dist/server/worker-utils.js +7 -1
  220. package/dist/shims/app-router-scroll-state.d.ts +1 -0
  221. package/dist/shims/app-router-scroll-state.js +1 -0
  222. package/dist/shims/app-router-scroll.js +2 -1
  223. package/dist/shims/cache.js +19 -15
  224. package/dist/shims/cdn-cache.js +1 -1
  225. package/dist/shims/dynamic-preload-chunks.js +2 -1
  226. package/dist/shims/error-boundary.d.ts +19 -1
  227. package/dist/shims/error-boundary.js +11 -1
  228. package/dist/shims/form.d.ts +3 -1
  229. package/dist/shims/form.js +37 -43
  230. package/dist/shims/headers.d.ts +9 -1
  231. package/dist/shims/headers.js +31 -6
  232. package/dist/shims/image.js +75 -14
  233. package/dist/shims/internal/app-route-detection.d.ts +2 -17
  234. package/dist/shims/internal/app-route-detection.js +4 -17
  235. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +23 -0
  236. package/dist/shims/internal/hybrid-client-route-owner-direct.js +51 -0
  237. package/dist/shims/internal/hybrid-client-route-owner.d.ts +2 -15
  238. package/dist/shims/internal/hybrid-client-route-owner.js +9 -60
  239. package/dist/shims/internal/pages-data-fetch-dedup.d.ts +9 -5
  240. package/dist/shims/internal/pages-data-fetch-dedup.js +73 -14
  241. package/dist/shims/internal/pages-data-target.d.ts +10 -9
  242. package/dist/shims/internal/pages-data-target.js +91 -12
  243. package/dist/shims/internal/pages-router-components.d.ts +7 -0
  244. package/dist/shims/internal/pages-router-components.js +13 -0
  245. package/dist/shims/layout-segment-context.d.ts +4 -1
  246. package/dist/shims/layout-segment-context.js +18 -4
  247. package/dist/shims/link.js +70 -37
  248. package/dist/shims/metadata.d.ts +3 -2
  249. package/dist/shims/metadata.js +8 -4
  250. package/dist/shims/navigation.d.ts +5 -1
  251. package/dist/shims/navigation.js +45 -10
  252. package/dist/shims/navigation.react-server.js +1 -1
  253. package/dist/shims/root-params.d.ts +15 -1
  254. package/dist/shims/root-params.js +21 -1
  255. package/dist/shims/router.d.ts +5 -7
  256. package/dist/shims/router.js +374 -94
  257. package/dist/shims/server.js +3 -2
  258. package/dist/shims/slot.js +3 -6
  259. package/dist/typegen.js +6 -5
  260. package/dist/utils/client-runtime-metadata.d.ts +2 -18
  261. package/dist/utils/client-runtime-metadata.js +31 -22
  262. package/dist/utils/dev-stack-sourcemap-endpoint.d.ts +4 -0
  263. package/dist/{server → utils}/dev-stack-sourcemap-endpoint.js +1 -1
  264. package/dist/utils/domain-locale.d.ts +6 -3
  265. package/dist/{server → utils}/middleware-request-headers.d.ts +1 -1
  266. package/dist/{server → utils}/middleware-request-headers.js +2 -2
  267. package/dist/utils/path.d.ts +2 -1
  268. package/dist/utils/path.js +1 -1
  269. package/dist/utils/project.d.ts +52 -2
  270. package/dist/utils/project.js +230 -5
  271. package/dist/utils/protocol-headers.d.ts +17 -0
  272. package/dist/utils/protocol-headers.js +17 -0
  273. package/dist/utils/react-version.d.ts +4 -0
  274. package/dist/utils/react-version.js +44 -0
  275. package/package.json +53 -4
  276. package/dist/deploy.d.ts +0 -190
  277. package/dist/deploy.js +0 -1033
  278. package/dist/server/dev-stack-sourcemap-endpoint.d.ts +0 -4
  279. /package/dist/{cloudflare → packages/cloudflare}/src/utils/cache-control-metadata.js +0 -0
@@ -16,20 +16,24 @@ import DefaultGlobalError from "../shims/default-global-error.js";
16
16
  import { BfcacheStateKeyMapContext, ElementsContext, Slot } from "../shims/slot.js";
17
17
  import { createSsrErrorMetaRenderer } from "./app-ssr-error-meta.js";
18
18
  import { createNavigationRuntimeRscMetadataScript, createRscEmbedTransform, createTickBufferedTransform } from "./app-ssr-stream.js";
19
- import { BeforeInteractiveContext } from "../shims/before-interactive-context.js";
20
- import { runWithRootParamsScope } from "../shims/root-params.js";
19
+ import { setPagesClientAssets } from "./pages-client-assets.js";
21
20
  import { createInitialBfcacheMaps } from "./app-bfcache-identity.js";
22
21
  import { RSC_FORM_STATE_GLOBAL } from "./app-browser-hydration.js";
23
22
  import { createClientReferencePreloader } from "./app-client-reference-preloader.js";
24
23
  import { deferUntilStreamConsumed } from "./defer-until-stream-consumed.js";
24
+ import { runWithRootParamsScope } from "../shims/root-params.js";
25
+ import { BeforeInteractiveContext } from "../shims/before-interactive-context.js";
25
26
  import { renderBeforeInteractiveInlineScripts } from "./before-interactive-head.js";
26
27
  import { createInitialDevServerErrorScript } from "./dev-initial-server-error.js";
27
28
  import { ssrAppRouterInstance } from "./app-ssr-router-instance.js";
28
29
  import { Fragment, createElement, use } from "react";
29
30
  import { renderToReadableStream, renderToStaticMarkup } from "react-dom/server.edge";
31
+ import { preinitModule } from "react-dom";
30
32
  import { createFromReadableStream } from "@vitejs/plugin-rsc/ssr";
31
33
  import clientReferences from "virtual:vite-rsc/client-references";
34
+ import pagesClientAssets from "virtual:vinext-pages-client-assets";
32
35
  //#region src/server/app-ssr-entry.ts
36
+ setPagesClientAssets(pagesClientAssets);
33
37
  /**
34
38
  * Default cap for the preload `Link` header, matching Next.js's
35
39
  * `defaultConfig.reactMaxHeadersLength`. Used when no config value threads
@@ -52,7 +56,10 @@ async function loadStaticPrerender() {
52
56
  const [{ createRequire }, path] = await Promise.all([import("node:module"), import("node:path")]);
53
57
  const reactDomPackageJson = createRequire(import.meta.url).resolve("react-dom/package.json");
54
58
  const reactDomDir = path.dirname(reactDomPackageJson);
55
- const devRenderer = await import(path.join(reactDomDir, "cjs/react-dom-server.edge.development.js"));
59
+ const devRenderer = await import(
60
+ /* @vite-ignore */
61
+ path.join(reactDomDir, "cjs/react-dom-server.edge.development.js")
62
+ );
56
63
  if (isStaticPrerenderModule(devRenderer)) return devRenderer.prerender;
57
64
  const devRendererDefault = typeof devRenderer === "object" && devRenderer !== null && "default" in devRenderer && devRenderer.default;
58
65
  if (isStaticPrerenderModule(devRendererDefault)) return devRendererDefault.prerender;
@@ -146,12 +153,12 @@ function buildModulePreloadHtml(bootstrapModuleUrl, nonce) {
146
153
  if (!bootstrapModuleUrl) return "";
147
154
  return `<link rel="modulepreload"${createNonceAttribute(nonce)} href="${escapeHtmlAttr(bootstrapModuleUrl)}" />\n`;
148
155
  }
149
- function buildHeadInjectionHtml(navContext, bootstrapModuleUrl, formState, insertedHTML, fontHTML, scriptNonce) {
156
+ function buildHeadInjectionHtml(navContext, bootstrapModuleUrl, formState, insertedHTML, fontHTML, dynamicStaleTimeSeconds, scriptNonce) {
150
157
  const navPayload = {
151
158
  pathname: navContext.pathname,
152
159
  searchParams: [...navContext.searchParams.entries()]
153
160
  };
154
- return createInlineScriptTag(createNavigationRuntimeRscMetadataScript(navContext.params, navPayload), scriptNonce) + (formState === null ? "" : createInlineScriptTag("self[" + safeJsonStringify(RSC_FORM_STATE_GLOBAL) + "]=" + safeJsonStringify(formState), scriptNonce)) + buildModulePreloadHtml(bootstrapModuleUrl, scriptNonce) + insertedHTML + fontHTML;
161
+ return createInlineScriptTag(createNavigationRuntimeRscMetadataScript(navContext.params, navPayload, dynamicStaleTimeSeconds), scriptNonce) + (formState === null ? "" : createInlineScriptTag("self[" + safeJsonStringify(RSC_FORM_STATE_GLOBAL) + "]=" + safeJsonStringify(formState), scriptNonce)) + buildModulePreloadHtml(bootstrapModuleUrl, scriptNonce) + insertedHTML + fontHTML;
155
162
  }
156
163
  function requireNavigationContext(navContext) {
157
164
  if (!navContext) throw new Error("App SSR requires navigation context for BFCache state keys");
@@ -173,15 +180,19 @@ async function handleSsr(rscStream, navContext, fontData, options) {
173
180
  let rscEmbed;
174
181
  if (options?.sideStream) {
175
182
  ssrStream = rscStream;
176
- rscEmbed = createRscEmbedTransform(options.sideStream, options?.scriptNonce);
183
+ rscEmbed = createRscEmbedTransform(options.sideStream, options?.scriptNonce, options?.getInitialNavigationCacheMetadata);
177
184
  if (options.capturedRscDataRef) options.capturedRscDataRef.value = rscEmbed.getRawBuffer();
178
185
  } else {
179
186
  const [s1, s2] = rscStream.tee();
180
187
  ssrStream = s1;
181
- rscEmbed = createRscEmbedTransform(s2, options?.scriptNonce);
188
+ rscEmbed = createRscEmbedTransform(s2, options?.scriptNonce, options?.getInitialNavigationCacheMetadata);
182
189
  }
183
190
  let flightRoot = null;
184
191
  function VinextFlightRoot() {
192
+ for (const moduleUrl of pagesClientAssets.appBootstrapPreinitModules ?? []) preinitModule(moduleUrl, {
193
+ as: "script",
194
+ nonce: options?.scriptNonce
195
+ });
185
196
  if (!flightRoot) flightRoot = createFromReadableStream(ssrStream);
186
197
  const wireElements = use(flightRoot);
187
198
  const elements = AppElementsWire.decode(wireElements);
@@ -267,7 +278,7 @@ async function handleSsr(rscStream, navContext, fontData, options) {
267
278
  const initialDevServerErrorHTML = createInitialDevServerErrorScript(options?.initialDevServerError, options?.scriptNonce);
268
279
  if (didInjectHeadHTML) return insertedHTML + errorMetaHTML;
269
280
  didInjectHeadHTML = true;
270
- return buildHeadInjectionHtml(ssrNavigationContext, bootstrapModuleUrl, options?.formState ?? null, insertedHTML + errorMetaHTML + getTraceMetaHTML() + initialDevServerErrorHTML, fontHTML, options?.scriptNonce);
281
+ return buildHeadInjectionHtml(ssrNavigationContext, bootstrapModuleUrl, options?.formState ?? null, insertedHTML + errorMetaHTML + getTraceMetaHTML() + initialDevServerErrorHTML, fontHTML, options?.dynamicStaleTimeSeconds, options?.scriptNonce);
271
282
  };
272
283
  const getBeforeInteractiveHeadHTML = () => renderBeforeInteractiveInlineScripts(beforeInteractiveInlineScripts);
273
284
  return {
@@ -6,11 +6,15 @@ type RscEmbedTransform = {
6
6
  };
7
7
  type HtmlInsertion = string | (() => string);
8
8
  type InlineCssManifest = Record<string, string>;
9
+ type InitialNavigationCacheMetadata = {
10
+ kind: "dynamic" | "static";
11
+ dynamicStaleTimeSeconds?: number;
12
+ };
9
13
  declare function navigationRuntimeRscBootstrapExpression(): string;
10
14
  declare function createNavigationRuntimeRscMetadataScript(params: Record<string, string | string[]>, nav: {
11
15
  pathname: string;
12
16
  searchParams: [string, string][];
13
- }): string;
17
+ }, dynamicStaleTimeSeconds?: number): string;
14
18
  /**
15
19
  * Fix invalid preload "as" values in RSC Flight hint lines before they reach
16
20
  * the client. React Flight emits HL hints with as="stylesheet" for CSS, but
@@ -21,7 +25,7 @@ declare function fixFlightHints(text: string): string;
21
25
  * Create a helper that progressively embeds RSC chunks as inline <script> tags.
22
26
  * The browser entry turns the embedded chunks back into Uint8Array data.
23
27
  */
24
- declare function createRscEmbedTransform(embedStream: ReadableStream<Uint8Array>, scriptNonce?: string): RscEmbedTransform;
28
+ declare function createRscEmbedTransform(embedStream: ReadableStream<Uint8Array>, scriptNonce?: string, getInitialNavigationCacheMetadata?: () => InitialNavigationCacheMetadata): RscEmbedTransform;
25
29
  /**
26
30
  * Fix invalid preload "as" values in server-rendered HTML.
27
31
  * React Fizz emits <link rel="preload" as="stylesheet"> for CSS, but the
@@ -57,4 +61,4 @@ declare function fixPreloadAs(html: string): string;
57
61
  */
58
62
  declare function createTickBufferedTransform(rscEmbed: RscEmbedTransform, injectHTML?: HtmlInsertion, injectAfterHeadOpenHTML?: HtmlInsertion, inlineCssManifest?: InlineCssManifest, inlineCssPrependCss?: string, inlineCssPrependFallbackHTML?: string, inlineCssScriptNonce?: string): TransformStream<Uint8Array, Uint8Array>;
59
63
  //#endregion
60
- export { createNavigationRuntimeRscMetadataScript, createRscEmbedTransform, createTickBufferedTransform, fixFlightHints, fixPreloadAs, navigationRuntimeRscBootstrapExpression };
64
+ export { InitialNavigationCacheMetadata, createNavigationRuntimeRscMetadataScript, createRscEmbedTransform, createTickBufferedTransform, fixFlightHints, fixPreloadAs, navigationRuntimeRscBootstrapExpression };
@@ -6,14 +6,18 @@ const NAVIGATION_RUNTIME_REFERENCE = `self[Symbol.for(${safeJsonStringify(NAVIGA
6
6
  function navigationRuntimeRscBootstrapExpression() {
7
7
  return `((${NAVIGATION_RUNTIME_REFERENCE}??={bootstrap:{routeManifest:null},functions:{}}).bootstrap.rsc??={rsc:[]})`;
8
8
  }
9
- function createNavigationRuntimeRscMetadataScript(params, nav) {
10
- return "Object.assign(" + navigationRuntimeRscBootstrapExpression() + ",{params:" + safeJsonStringify(params) + ",nav:" + safeJsonStringify(nav) + "})";
9
+ function createNavigationRuntimeRscMetadataScript(params, nav, dynamicStaleTimeSeconds) {
10
+ return "Object.assign(" + navigationRuntimeRscBootstrapExpression() + ",{params:" + safeJsonStringify(params) + ",nav:" + safeJsonStringify(nav) + (dynamicStaleTimeSeconds === void 0 ? "" : ",dynamicStaleTimeSeconds:" + safeJsonStringify(dynamicStaleTimeSeconds)) + "})";
11
11
  }
12
12
  function createNavigationRuntimeRscChunkScript(chunk) {
13
13
  return navigationRuntimeRscBootstrapExpression() + ".rsc.push(" + safeJsonStringify(chunk) + ")";
14
14
  }
15
- function createNavigationRuntimeRscDoneScript() {
16
- return navigationRuntimeRscBootstrapExpression() + ".done=true";
15
+ function createNavigationRuntimeRscDoneScript(metadata) {
16
+ const bootstrap = navigationRuntimeRscBootstrapExpression();
17
+ return (metadata === void 0 ? "" : "Object.assign(" + bootstrap + "," + safeJsonStringify({
18
+ initialCacheKind: metadata.kind,
19
+ ...metadata.dynamicStaleTimeSeconds === void 0 ? {} : { dynamicStaleTimeSeconds: metadata.dynamicStaleTimeSeconds }
20
+ }) + ");") + bootstrap + ".done=true";
17
21
  }
18
22
  /**
19
23
  * Fix invalid preload "as" values in RSC Flight hint lines before they reach
@@ -27,7 +31,7 @@ function fixFlightHints(text) {
27
31
  * Create a helper that progressively embeds RSC chunks as inline <script> tags.
28
32
  * The browser entry turns the embedded chunks back into Uint8Array data.
29
33
  */
30
- function createRscEmbedTransform(embedStream, scriptNonce) {
34
+ function createRscEmbedTransform(embedStream, scriptNonce, getInitialNavigationCacheMetadata) {
31
35
  const reader = embedStream.getReader();
32
36
  let pendingChunks = [];
33
37
  const rawChunks = [];
@@ -67,7 +71,7 @@ function createRscEmbedTransform(embedStream, scriptNonce) {
67
71
  async finalize() {
68
72
  await pumpPromise;
69
73
  let scripts = this.flush();
70
- scripts += createInlineScriptTag(createNavigationRuntimeRscDoneScript(), scriptNonce);
74
+ scripts += createInlineScriptTag(createNavigationRuntimeRscDoneScript(getInitialNavigationCacheMetadata?.()), scriptNonce);
71
75
  return scripts;
72
76
  },
73
77
  async getRawBuffer() {
@@ -3,6 +3,7 @@ import { HeadersContext } from "../shims/headers.js";
3
3
  //#region src/server/app-static-generation.d.ts
4
4
  type AppStaticGenerationRouteKind = "page" | "route";
5
5
  type CreateStaticGenerationHeadersContextOptions = {
6
+ draftModeEnabled?: boolean;
6
7
  draftModeSecret?: string;
7
8
  dynamicConfig?: string;
8
9
  routeKind: AppStaticGenerationRouteKind;
@@ -9,6 +9,7 @@ function createStaticGenerationHeadersContext(options) {
9
9
  const context = {
10
10
  headers: new Headers(),
11
11
  cookies: /* @__PURE__ */ new Map(),
12
+ draftModeEnabled: options.draftModeEnabled,
12
13
  draftModeSecret: options.draftModeSecret
13
14
  };
14
15
  if (options.dynamicConfig === "force-static") context.forceStatic = true;
@@ -1,17 +1,23 @@
1
+ import { AppElements } from "./app-elements-wire.js";
1
2
  import { CachedRscResponse } from "../shims/navigation.js";
2
3
 
3
4
  //#region src/server/app-visited-response-cache.d.ts
4
5
  type VisitedResponseCacheNavigationKind = "navigate" | "refresh" | "traverse";
5
6
  type VisitedResponseCacheEntry = {
6
7
  createdAt: number;
8
+ elements?: AppElements;
7
9
  expiresAt: number;
10
+ mountedSlotsHeader: string | null;
8
11
  params: Record<string, string | string[]>;
9
12
  response: CachedRscResponse;
10
13
  };
11
14
  declare const VISITED_RESPONSE_CACHE_TTL: number;
12
15
  declare const MAX_TRAVERSAL_CACHE_TTL: number;
13
16
  declare function createVisitedResponseCacheEntry(options: {
17
+ elements?: AppElements;
18
+ fallbackTtlMs?: number;
14
19
  now: number;
20
+ mountedSlotsHeader?: string | null;
15
21
  params: Record<string, string | string[]>;
16
22
  response: CachedRscResponse;
17
23
  }): VisitedResponseCacheEntry;
@@ -5,7 +5,9 @@ const MAX_TRAVERSAL_CACHE_TTL = 30 * 6e4;
5
5
  function createVisitedResponseCacheEntry(options) {
6
6
  return {
7
7
  createdAt: options.now,
8
- expiresAt: resolveCachedRscResponseExpiresAt(options.now, options.response, VISITED_RESPONSE_CACHE_TTL),
8
+ ...options.elements ? { elements: options.elements } : {},
9
+ expiresAt: resolveCachedRscResponseExpiresAt(options.now, options.response, options.fallbackTtlMs ?? 3e5),
10
+ mountedSlotsHeader: options.mountedSlotsHeader ?? null,
9
11
  params: options.params,
10
12
  response: options.response
11
13
  };
@@ -24,7 +24,32 @@ const carrierSetter = { set(carrier, key, value) {
24
24
  value
25
25
  });
26
26
  } };
27
+ const OPEN_TELEMETRY_API_SYMBOL = Symbol.for("opentelemetry.js.api.1");
28
+ const OPEN_TELEMETRY_SPAN_SYMBOL = Symbol.for("OpenTelemetry Context Key SPAN");
29
+ function getRegisteredOpenTelemetryTraceData() {
30
+ let metadataSpan = null;
31
+ try {
32
+ const registry = globalThis[OPEN_TELEMETRY_API_SYMBOL];
33
+ if (!registry?.context || !registry.propagation) return null;
34
+ const contextApi = registry.context;
35
+ const propagation = registry.propagation;
36
+ const activeContext = contextApi.active();
37
+ metadataSpan = activeContext.getValue(OPEN_TELEMETRY_SPAN_SYMBOL) !== void 0 ? null : registry.trace?.getTracer("vinext").startSpan("vinext.clientTraceMetadata", void 0, activeContext) ?? null;
38
+ const context = metadataSpan ? activeContext.setValue(OPEN_TELEMETRY_SPAN_SYMBOL, metadataSpan) : activeContext;
39
+ const entries = [];
40
+ contextApi.with(context, () => {
41
+ propagation.inject(context, entries, carrierSetter);
42
+ });
43
+ return entries;
44
+ } catch {
45
+ return [];
46
+ } finally {
47
+ metadataSpan?.end();
48
+ }
49
+ }
27
50
  function getOpenTelemetryTraceData() {
51
+ const registeredEntries = getRegisteredOpenTelemetryTraceData();
52
+ if (registeredEntries) return registeredEntries;
28
53
  let api;
29
54
  try {
30
55
  const req = globalThis.require;
@@ -75,6 +100,7 @@ function renderClientTraceMetadataTags(entries) {
75
100
  */
76
101
  function getClientTraceMetadataHTML(allowList) {
77
102
  if (!allowList || allowList.length === 0) return "";
103
+ if (typeof process !== "undefined" && process.env.VINEXT_PRERENDER === "1") return "";
78
104
  return renderClientTraceMetadataTags(filterClientTraceMetadata(getOpenTelemetryTraceData(), allowList));
79
105
  }
80
106
  //#endregion
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+
3
+ //#region src/server/default-global-not-found-module.d.ts
4
+ declare function DefaultGlobalNotFound(): React.ReactElement;
5
+ /**
6
+ * Module-shaped wrapper around Next.js's built-in global not-found document.
7
+ * Unlike the regular default not-found boundary, this component owns the
8
+ * document shell because global not-found responses skip the root layout.
9
+ */
10
+ declare const DEFAULT_GLOBAL_NOT_FOUND_MODULE: {
11
+ readonly default: typeof DefaultGlobalNotFound;
12
+ };
13
+ //#endregion
14
+ export { DEFAULT_GLOBAL_NOT_FOUND_MODULE };
@@ -0,0 +1,14 @@
1
+ import DefaultNotFound from "../shims/default-not-found.js";
2
+ import React from "react";
3
+ //#region src/server/default-global-not-found-module.ts
4
+ function DefaultGlobalNotFound() {
5
+ return React.createElement("html", null, React.createElement("body", null, React.createElement(DefaultNotFound)));
6
+ }
7
+ /**
8
+ * Module-shaped wrapper around Next.js's built-in global not-found document.
9
+ * Unlike the regular default not-found boundary, this component owns the
10
+ * document shell because global not-found responses skip the root layout.
11
+ */
12
+ const DEFAULT_GLOBAL_NOT_FOUND_MODULE = { default: DefaultGlobalNotFound };
13
+ //#endregion
14
+ export { DEFAULT_GLOBAL_NOT_FOUND_MODULE };
@@ -48,6 +48,10 @@ function isRootGlobalError(parts, matcher) {
48
48
  function isMetadataRouteFile(parts) {
49
49
  const fileName = parts[parts.length - 1];
50
50
  if (!fileName) return false;
51
+ if (fileName.endsWith(".alt.txt")) {
52
+ const imageBaseName = fileName.slice(0, -8);
53
+ return matchMetadataFileBaseName("opengraph-image", imageBaseName) !== null || matchMetadataFileBaseName("twitter-image", imageBaseName) !== null;
54
+ }
51
55
  const { baseName, extension } = stripLastExtension(fileName);
52
56
  if (!extension) return false;
53
57
  const routePrefix = visibleRoutePrefix(parts);
@@ -3,7 +3,6 @@ import { createValidFileMatcher, findFileWithExtensions } from "../routing/file-
3
3
  import { patternToNextFormat } from "../routing/route-validation.js";
4
4
  import { matchRoute } from "../routing/pages-router.js";
5
5
  import { NEXTJS_DEPLOYMENT_ID_HEADER } from "./headers.js";
6
- import { normalizeStaticPathname } from "../routing/route-pattern.js";
7
6
  import { importModule, reportRequestError } from "./instrumentation.js";
8
7
  import { buildCacheStateHeaders } from "./cache-headers.js";
9
8
  import { isUnknownRecord } from "../utils/record.js";
@@ -26,12 +25,14 @@ import { detectLocaleFromAcceptLanguage, extractLocaleFromUrl as extractLocaleFr
26
25
  import { buildDefaultPagesNotFoundResponse } from "./pages-default-404.js";
27
26
  import { buildPagesReadinessNextData } from "./pages-readiness.js";
28
27
  import { resolvePagesPageMethodResponse } from "./pages-page-method.js";
29
- import { createPagesDevModuleUrl } from "./pages-dev-module-url.js";
30
- import { isSerializableProps } from "./pages-serializable-props.js";
31
28
  import { loadUserDocumentInitialProps, runDocumentRenderPage } from "./pages-document-initial-props.js";
32
29
  import { callDocumentGetInitialProps } from "./document-initial-head.js";
33
30
  import { hasPagesGetInitialProps, loadDevAppInitialProps, loadPagesGetInitialProps } from "./pages-get-initial-props.js";
31
+ import { isSerializableProps } from "./pages-serializable-props.js";
34
32
  import { isBotUserAgent } from "../utils/html-limited-bots.js";
33
+ import { getPagesRouteParams, matchesPagesStaticPath } from "./pages-page-data.js";
34
+ import { createPagesDevModuleUrl } from "./pages-dev-module-url.js";
35
+ import { attachPagesRequestCookies } from "./pages-node-compat.js";
35
36
  import path from "node:path";
36
37
  import React from "react";
37
38
  import { renderToReadableStream } from "react-dom/server.edge";
@@ -101,7 +102,7 @@ const STREAM_BODY_MARKER = "<!--VINEXT_STREAM_BODY-->";
101
102
  * shell sooner).
102
103
  */
103
104
  async function streamPageToResponse(res, element, options) {
104
- const { url, server, fontHeadHTML, scripts, DocumentComponent, statusCode = 200, extraHeaders, getHeadHTML, enhancePageElement, scriptNonce, documentContext, setDocumentInitialHead, bufferBodyBeforeHeaders = false } = options;
105
+ const { url, server, fontHeadHTML, scripts, DocumentComponent, statusCode, extraHeaders, getHeadHTML, enhancePageElement, scriptNonce, documentContext, setDocumentInitialHead, bufferBodyBeforeHeaders = false } = options;
105
106
  const documentRenderPage = await runDocumentRenderPage({
106
107
  DocumentComponent,
107
108
  enhancePageElement,
@@ -110,6 +111,7 @@ async function streamPageToResponse(res, element, options) {
110
111
  scriptNonce,
111
112
  context: documentContext
112
113
  });
114
+ if (res.headersSent || res.writableEnded) return;
113
115
  let bodyStream;
114
116
  if (documentRenderPage.status === "rendered") {
115
117
  const synthesised = documentRenderPage.bodyHtml;
@@ -152,7 +154,7 @@ async function streamPageToResponse(res, element, options) {
152
154
  };
153
155
  if (extraHeaders) for (const [key, val] of Object.entries(extraHeaders)) if (Array.isArray(val)) res.setHeader(key, val);
154
156
  else headers[key] = val;
155
- res.writeHead(statusCode, headers);
157
+ res.writeHead(statusCode ?? res.statusCode, headers);
156
158
  res.write(prefix);
157
159
  if (bufferedBody !== null) {
158
160
  res.end(bufferedBody + suffix);
@@ -211,6 +213,7 @@ function createSSRHandler(server, runner, routes, pagesDir, i18nConfig, fileMatc
211
213
  const _reqStart = now();
212
214
  let _compileEnd;
213
215
  let _renderEnd;
216
+ attachPagesRequestCookies(req);
214
217
  res.on("finish", () => {
215
218
  const totalMs = now() - _reqStart;
216
219
  const compileMs = _compileEnd !== void 0 ? Math.round(_compileEnd - _reqStart) : void 0;
@@ -248,8 +251,9 @@ function createSSRHandler(server, runner, routes, pagesDir, i18nConfig, fileMatc
248
251
  if (isDataReq) {
249
252
  const deploymentId = process.env.__VINEXT_DEPLOYMENT_ID || process.env.NEXT_DEPLOYMENT_ID;
250
253
  const notFoundHeaders = { "Content-Type": "application/json" };
254
+ if (hasMiddleware) notFoundHeaders["x-nextjs-matched-path"] = `${locale ? `/${locale}` : ""}${localeStrippedUrl}`;
251
255
  if (deploymentId) notFoundHeaders[NEXTJS_DEPLOYMENT_ID_HEADER] = deploymentId;
252
- res.writeHead(404, notFoundHeaders);
256
+ res.writeHead(hasMiddleware ? 200 : 404, notFoundHeaders);
253
257
  res.end("{}");
254
258
  return;
255
259
  }
@@ -340,17 +344,8 @@ function createSSRHandler(server, runner, routes, pagesDir, i18nConfig, fileMatc
340
344
  });
341
345
  const fallback = pathsResult?.fallback ?? false;
342
346
  const paths = pathsResult?.paths ?? [];
343
- const currentPathname = normalizeStaticPathname(url);
344
- const isValidPath = paths.some((p) => {
345
- if (typeof p === "string") return normalizeStaticPathname(p) === currentPathname;
346
- const entryParams = p.params;
347
- if (entryParams === void 0 || entryParams === null) return false;
348
- return Object.entries(entryParams).every(([key, val]) => {
349
- const actual = params[key];
350
- if (Array.isArray(val)) return Array.isArray(actual) && val.join("/") === actual.join("/");
351
- return String(val) === String(actual);
352
- });
353
- });
347
+ const routeParams = getPagesRouteParams(patternToNextFormat(route.pattern));
348
+ const isValidPath = paths.some((pathEntry) => matchesPagesStaticPath(pathEntry, params, routeParams, url));
354
349
  if (fallback === false && !isValidPath) {
355
350
  if (isDataReq) {
356
351
  const deploymentId = process.env.__VINEXT_DEPLOYMENT_ID || process.env.NEXT_DEPLOYMENT_ID;
@@ -762,6 +757,7 @@ function createSSRHandler(server, runner, routes, pagesDir, i18nConfig, fileMatc
762
757
  setRevalidateDuration(cacheKey, revalidateSeconds);
763
758
  }
764
759
  const dataHeaders = { "Content-Type": "application/json" };
760
+ if ((statusCode ?? 200) === 200) dataHeaders["x-nextjs-matched-path"] = `${locale ? `/${locale}` : ""}${patternToNextFormat(route.pattern)}`;
765
761
  if (gsspExtraHeaders) for (const [k, v] of Object.entries(gsspExtraHeaders)) dataHeaders[k] = v;
766
762
  const dataRoutePattern = patternToNextFormat(route.pattern);
767
763
  if (dataRoutePattern !== "/_error" && dataRoutePattern !== "/500") {
@@ -935,7 +931,11 @@ hydrate();
935
931
  documentContext: {
936
932
  pathname: patternToNextFormat(route.pattern),
937
933
  query,
938
- asPath: requestAsPath
934
+ asPath: requestAsPath,
935
+ ...pagesNextData.autoExport === true ? {} : {
936
+ req,
937
+ res
938
+ }
939
939
  },
940
940
  enhancePageElement: (renderPageOpts) => {
941
941
  let FinalApp = AppComponent;
@@ -1004,6 +1004,7 @@ hydrate();
1004
1004
  * - other: pages/_error.tsx -> default
1005
1005
  */
1006
1006
  async function renderErrorPage(server, runner, req, res, url, pagesDir, statusCode, wrapWithRouterContext, fileMatcher, err) {
1007
+ attachPagesRequestCookies(req);
1007
1008
  const matcher = fileMatcher ?? createValidFileMatcher();
1008
1009
  const candidates = statusCode === 404 ? ["404", "_error"] : statusCode === 500 ? ["500", "_error"] : ["_error"];
1009
1010
  for (const candidate of candidates) try {
@@ -1,4 +1,4 @@
1
- import { VINEXT_ORIGINAL_STACK_TRACE_ENDPOINT } from "./dev-stack-sourcemap-endpoint.js";
1
+ import { VINEXT_ORIGINAL_STACK_TRACE_ENDPOINT } from "../utils/dev-stack-sourcemap-endpoint.js";
2
2
  import { ViteDevServer } from "vite";
3
3
 
4
4
  //#region src/server/dev-stack-sourcemap.d.ts
@@ -1,4 +1,4 @@
1
- import { VINEXT_ORIGINAL_STACK_TRACE_ENDPOINT } from "./dev-stack-sourcemap-endpoint.js";
1
+ import { VINEXT_ORIGINAL_STACK_TRACE_ENDPOINT } from "../utils/dev-stack-sourcemap-endpoint.js";
2
2
  import { readFile } from "node:fs/promises";
3
3
  import { fileURLToPath, pathToFileURL } from "node:url";
4
4
  //#region src/server/dev-stack-sourcemap.ts
@@ -0,0 +1,2 @@
1
+ import handler from "virtual:vinext-worker-entry";
2
+ export { handler as default };
@@ -0,0 +1,18 @@
1
+ import handler from "virtual:vinext-worker-entry";
2
+ //#region src/server/fetch-handler.ts
3
+ /**
4
+ * Default Cloudflare fetch handler for vinext.
5
+ *
6
+ * Use this directly in wrangler.jsonc:
7
+ * "main": "vinext/server/fetch-handler"
8
+ *
9
+ * Or import and delegate to it from a custom worker:
10
+ * import handler from "vinext/server/fetch-handler";
11
+ * return handler.fetch(request, env, ctx);
12
+ *
13
+ * The vinext plugin resolves this to the App Router or Pages Router handler
14
+ * for the current project at build time.
15
+ */
16
+ var fetch_handler_default = handler;
17
+ //#endregion
18
+ export { fetch_handler_default as default };
@@ -1,3 +1,5 @@
1
+ import { MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_SET_COOKIE_HEADER, VINEXT_MW_CTX_HEADER, VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER } from "../utils/protocol-headers.js";
2
+
1
3
  //#region src/server/headers.d.ts
2
4
  /**
3
5
  * Internal HTTP header name constants used throughout vinext.
@@ -15,14 +17,8 @@ declare const VINEXT_CACHE_HEADER = "X-Vinext-Cache";
15
17
  declare const NEXTJS_CACHE_HEADER = "x-nextjs-cache";
16
18
  /** Static file signal — value is URL-encoded pathname. */
17
19
  declare const VINEXT_STATIC_FILE_HEADER = "x-vinext-static-file";
18
- /** Serialized middleware context (JSON) forwarded from dev server to RSC entry. */
19
- declare const VINEXT_MW_CTX_HEADER = "x-vinext-mw-ctx";
20
20
  /** Timing metrics: `handlerStart,compileMs,renderMs`. */
21
21
  declare const VINEXT_TIMING_HEADER = "x-vinext-timing";
22
- /** Build-time prerender authentication secret. */
23
- declare const VINEXT_PRERENDER_SECRET_HEADER = "x-vinext-prerender-secret";
24
- /** URL-encoded JSON route params for build-time prerender renders. */
25
- declare const VINEXT_PRERENDER_ROUTE_PARAMS_HEADER = "x-vinext-prerender-route-params";
26
22
  /** Internal endpoint used to evaluate App Router generateStaticParams exports. */
27
23
  declare const VINEXT_PRERENDER_STATIC_PARAMS_PATH = "/__vinext/prerender/static-params";
28
24
  /** Internal endpoint used to evaluate Pages Router getStaticPaths exports. */
@@ -81,22 +77,16 @@ declare const ACTION_REDIRECT_HEADER = "x-action-redirect";
81
77
  declare const ACTION_REDIRECT_TYPE_HEADER = "x-action-redirect-type";
82
78
  /** HTTP status for a Server Action redirect (e.g. "308"). */
83
79
  declare const ACTION_REDIRECT_STATUS_HEADER = "x-action-redirect-status";
84
- /** Prefix for forwarded request headers (e.g. `x-middleware-request-cookie`). */
85
- declare const MIDDLEWARE_REQUEST_HEADER_PREFIX = "x-middleware-request-";
86
- /** Comma-separated list of header names that middleware wants to override. */
87
- declare const MIDDLEWARE_OVERRIDE_HEADERS = "x-middleware-override-headers";
88
- /** Carries cookies set by middleware for same-render reads. */
89
- declare const MIDDLEWARE_SET_COOKIE_HEADER = "x-middleware-set-cookie";
90
80
  /** Signal from `NextResponse.next()` — value "1" means "continue to next handler". */
91
81
  declare const MIDDLEWARE_NEXT_HEADER = "x-middleware-next";
92
82
  /** Rewrite destination URL set by `NextResponse.rewrite()`. */
93
83
  declare const MIDDLEWARE_REWRITE_HEADER = "x-middleware-rewrite";
94
- /** Generic prefix for all middleware internal headers. */
95
- declare const MIDDLEWARE_HEADER_PREFIX = "x-middleware-";
96
84
  declare const NEXT_ROUTER_STATE_TREE_HEADER = "Next-Router-State-Tree";
97
85
  declare const NEXT_ROUTER_PREFETCH_HEADER = "Next-Router-Prefetch";
98
86
  declare const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER = "Next-Router-Segment-Prefetch";
99
87
  declare const NEXT_URL_HEADER = "Next-Url";
88
+ declare const NEXT_REQUEST_ID_HEADER = "x-nextjs-request-id";
89
+ declare const NEXT_HTML_REQUEST_ID_HEADER = "x-nextjs-html-request-id";
100
90
  /** Lowercase flight header variants used in middleware forwarding. */
101
91
  declare const FLIGHT_HEADERS: readonly string[];
102
92
  /**
@@ -111,4 +101,4 @@ declare const INTERNAL_HEADERS: string[];
111
101
  /** Vinext-only internal headers stripped alongside Next.js protocol internals. */
112
102
  declare const VINEXT_INTERNAL_HEADERS: string[];
113
103
  //#endregion
114
- export { ACTION_FORWARDED_HEADER, ACTION_REDIRECT_HEADER, ACTION_REDIRECT_STATUS_HEADER, ACTION_REDIRECT_TYPE_HEADER, ACTION_REVALIDATED_HEADER, FLIGHT_HEADERS, INTERNAL_HEADERS, MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_NEXT_HEADER, MIDDLEWARE_OVERRIDE_HEADERS, MIDDLEWARE_REQUEST_HEADER_PREFIX, MIDDLEWARE_REWRITE_HEADER, MIDDLEWARE_SET_COOKIE_HEADER, NEXTJS_ACTION_NOT_FOUND_HEADER, NEXTJS_CACHE_HEADER, NEXTJS_DEPLOYMENT_ID_HEADER, NEXT_ACTION_HEADER, NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, NEXT_ROUTER_STATE_TREE_HEADER, NEXT_URL_HEADER, RSC_ACTION_HEADER, RSC_HEADER, VINEXT_CACHE_HEADER, VINEXT_CLIENT_REUSE_MANIFEST_HEADER, VINEXT_DYNAMIC_STALE_TIME_HEADER, VINEXT_INTERCEPTION_CONTEXT_HEADER, VINEXT_INTERNAL_HEADERS, VINEXT_MOUNTED_SLOTS_HEADER, VINEXT_MW_CTX_HEADER, VINEXT_PARAMS_HEADER, VINEXT_PRERENDER_PAGES_STATIC_PATHS_PATH, VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER, VINEXT_PRERENDER_STATIC_PARAMS_PATH, VINEXT_REVALIDATE_HEADER, VINEXT_RSC_MARKER_HEADER, VINEXT_RSC_REDIRECT_HEADER, VINEXT_RSC_RENDER_MODE_HEADER, VINEXT_STATIC_FILE_HEADER, VINEXT_TIMING_HEADER };
104
+ export { ACTION_FORWARDED_HEADER, ACTION_REDIRECT_HEADER, ACTION_REDIRECT_STATUS_HEADER, ACTION_REDIRECT_TYPE_HEADER, ACTION_REVALIDATED_HEADER, FLIGHT_HEADERS, INTERNAL_HEADERS, MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_NEXT_HEADER, MIDDLEWARE_REWRITE_HEADER, MIDDLEWARE_SET_COOKIE_HEADER, NEXTJS_ACTION_NOT_FOUND_HEADER, NEXTJS_CACHE_HEADER, NEXTJS_DEPLOYMENT_ID_HEADER, NEXT_ACTION_HEADER, NEXT_HTML_REQUEST_ID_HEADER, NEXT_REQUEST_ID_HEADER, NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, NEXT_ROUTER_STATE_TREE_HEADER, NEXT_URL_HEADER, RSC_ACTION_HEADER, RSC_HEADER, VINEXT_CACHE_HEADER, VINEXT_CLIENT_REUSE_MANIFEST_HEADER, VINEXT_DYNAMIC_STALE_TIME_HEADER, VINEXT_INTERCEPTION_CONTEXT_HEADER, VINEXT_INTERNAL_HEADERS, VINEXT_MOUNTED_SLOTS_HEADER, VINEXT_MW_CTX_HEADER, VINEXT_PARAMS_HEADER, VINEXT_PRERENDER_PAGES_STATIC_PATHS_PATH, VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER, VINEXT_PRERENDER_STATIC_PARAMS_PATH, VINEXT_REVALIDATE_HEADER, VINEXT_RSC_MARKER_HEADER, VINEXT_RSC_REDIRECT_HEADER, VINEXT_RSC_RENDER_MODE_HEADER, VINEXT_STATIC_FILE_HEADER, VINEXT_TIMING_HEADER };
@@ -1,3 +1,4 @@
1
+ import { MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_OVERRIDE_HEADERS, MIDDLEWARE_SET_COOKIE_HEADER, VINEXT_MW_CTX_HEADER, VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER } from "../utils/protocol-headers.js";
1
2
  //#region src/server/headers.ts
2
3
  /**
3
4
  * Internal HTTP header name constants used throughout vinext.
@@ -15,14 +16,8 @@ const VINEXT_CACHE_HEADER = "X-Vinext-Cache";
15
16
  const NEXTJS_CACHE_HEADER = "x-nextjs-cache";
16
17
  /** Static file signal — value is URL-encoded pathname. */
17
18
  const VINEXT_STATIC_FILE_HEADER = "x-vinext-static-file";
18
- /** Serialized middleware context (JSON) forwarded from dev server to RSC entry. */
19
- const VINEXT_MW_CTX_HEADER = "x-vinext-mw-ctx";
20
19
  /** Timing metrics: `handlerStart,compileMs,renderMs`. */
21
20
  const VINEXT_TIMING_HEADER = "x-vinext-timing";
22
- /** Build-time prerender authentication secret. */
23
- const VINEXT_PRERENDER_SECRET_HEADER = "x-vinext-prerender-secret";
24
- /** URL-encoded JSON route params for build-time prerender renders. */
25
- const VINEXT_PRERENDER_ROUTE_PARAMS_HEADER = "x-vinext-prerender-route-params";
26
21
  /** Internal endpoint used to evaluate App Router generateStaticParams exports. */
27
22
  const VINEXT_PRERENDER_STATIC_PARAMS_PATH = "/__vinext/prerender/static-params";
28
23
  /** Internal endpoint used to evaluate Pages Router getStaticPaths exports. */
@@ -81,12 +76,6 @@ const ACTION_REDIRECT_HEADER = "x-action-redirect";
81
76
  const ACTION_REDIRECT_TYPE_HEADER = "x-action-redirect-type";
82
77
  /** HTTP status for a Server Action redirect (e.g. "308"). */
83
78
  const ACTION_REDIRECT_STATUS_HEADER = "x-action-redirect-status";
84
- /** Prefix for forwarded request headers (e.g. `x-middleware-request-cookie`). */
85
- const MIDDLEWARE_REQUEST_HEADER_PREFIX = "x-middleware-request-";
86
- /** Comma-separated list of header names that middleware wants to override. */
87
- const MIDDLEWARE_OVERRIDE_HEADERS = "x-middleware-override-headers";
88
- /** Carries cookies set by middleware for same-render reads. */
89
- const MIDDLEWARE_SET_COOKIE_HEADER = "x-middleware-set-cookie";
90
79
  /** Signal from `NextResponse.next()` — value "1" means "continue to next handler". */
91
80
  const MIDDLEWARE_NEXT_HEADER = "x-middleware-next";
92
81
  /** Rewrite destination URL set by `NextResponse.rewrite()`. */
@@ -95,12 +84,12 @@ const MIDDLEWARE_REWRITE_HEADER = "x-middleware-rewrite";
95
84
  const MIDDLEWARE_REDIRECT_HEADER = "x-middleware-redirect";
96
85
  /** Skip-middleware signal. */
97
86
  const MIDDLEWARE_SKIP_HEADER = "x-middleware-skip";
98
- /** Generic prefix for all middleware internal headers. */
99
- const MIDDLEWARE_HEADER_PREFIX = "x-middleware-";
100
87
  const NEXT_ROUTER_STATE_TREE_HEADER = "Next-Router-State-Tree";
101
88
  const NEXT_ROUTER_PREFETCH_HEADER = "Next-Router-Prefetch";
102
89
  const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER = "Next-Router-Segment-Prefetch";
103
90
  const NEXT_URL_HEADER = "Next-Url";
91
+ const NEXT_REQUEST_ID_HEADER = "x-nextjs-request-id";
92
+ const NEXT_HTML_REQUEST_ID_HEADER = "x-nextjs-html-request-id";
104
93
  /** Lowercase flight header variants used in middleware forwarding. */
105
94
  const FLIGHT_HEADERS = [
106
95
  "rsc",
@@ -133,4 +122,4 @@ const INTERNAL_HEADERS = [
133
122
  /** Vinext-only internal headers stripped alongside Next.js protocol internals. */
134
123
  const VINEXT_INTERNAL_HEADERS = [VINEXT_PRERENDER_ROUTE_PARAMS_HEADER];
135
124
  //#endregion
136
- export { ACTION_FORWARDED_HEADER, ACTION_REDIRECT_HEADER, ACTION_REDIRECT_STATUS_HEADER, ACTION_REDIRECT_TYPE_HEADER, ACTION_REVALIDATED_HEADER, FLIGHT_HEADERS, INTERNAL_HEADERS, MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_NEXT_HEADER, MIDDLEWARE_OVERRIDE_HEADERS, MIDDLEWARE_REQUEST_HEADER_PREFIX, MIDDLEWARE_REWRITE_HEADER, MIDDLEWARE_SET_COOKIE_HEADER, NEXTJS_ACTION_NOT_FOUND_HEADER, NEXTJS_CACHE_HEADER, NEXTJS_DEPLOYMENT_ID_HEADER, NEXT_ACTION_HEADER, NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, NEXT_ROUTER_STATE_TREE_HEADER, NEXT_URL_HEADER, RSC_ACTION_HEADER, RSC_HEADER, VINEXT_CACHE_HEADER, VINEXT_CLIENT_REUSE_MANIFEST_HEADER, VINEXT_DYNAMIC_STALE_TIME_HEADER, VINEXT_INTERCEPTION_CONTEXT_HEADER, VINEXT_INTERNAL_HEADERS, VINEXT_MOUNTED_SLOTS_HEADER, VINEXT_MW_CTX_HEADER, VINEXT_PARAMS_HEADER, VINEXT_PRERENDER_PAGES_STATIC_PATHS_PATH, VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER, VINEXT_PRERENDER_STATIC_PARAMS_PATH, VINEXT_REVALIDATE_HEADER, VINEXT_RSC_MARKER_HEADER, VINEXT_RSC_REDIRECT_HEADER, VINEXT_RSC_RENDER_MODE_HEADER, VINEXT_STATIC_FILE_HEADER, VINEXT_TIMING_HEADER };
125
+ export { ACTION_FORWARDED_HEADER, ACTION_REDIRECT_HEADER, ACTION_REDIRECT_STATUS_HEADER, ACTION_REDIRECT_TYPE_HEADER, ACTION_REVALIDATED_HEADER, FLIGHT_HEADERS, INTERNAL_HEADERS, MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_NEXT_HEADER, MIDDLEWARE_REWRITE_HEADER, MIDDLEWARE_SET_COOKIE_HEADER, NEXTJS_ACTION_NOT_FOUND_HEADER, NEXTJS_CACHE_HEADER, NEXTJS_DEPLOYMENT_ID_HEADER, NEXT_ACTION_HEADER, NEXT_HTML_REQUEST_ID_HEADER, NEXT_REQUEST_ID_HEADER, NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, NEXT_ROUTER_STATE_TREE_HEADER, NEXT_URL_HEADER, RSC_ACTION_HEADER, RSC_HEADER, VINEXT_CACHE_HEADER, VINEXT_CLIENT_REUSE_MANIFEST_HEADER, VINEXT_DYNAMIC_STALE_TIME_HEADER, VINEXT_INTERCEPTION_CONTEXT_HEADER, VINEXT_INTERNAL_HEADERS, VINEXT_MOUNTED_SLOTS_HEADER, VINEXT_MW_CTX_HEADER, VINEXT_PARAMS_HEADER, VINEXT_PRERENDER_PAGES_STATIC_PATHS_PATH, VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER, VINEXT_PRERENDER_STATIC_PARAMS_PATH, VINEXT_REVALIDATE_HEADER, VINEXT_RSC_MARKER_HEADER, VINEXT_RSC_REDIRECT_HEADER, VINEXT_RSC_RENDER_MODE_HEADER, VINEXT_STATIC_FILE_HEADER, VINEXT_TIMING_HEADER };
@@ -121,5 +121,55 @@ type ImageHandlers = {
121
121
  * cache headers.
122
122
  */
123
123
  declare function handleImageOptimization(request: Request, handlers: ImageHandlers, allowedWidths?: number[], imageConfig?: ImageConfig): Promise<Response>;
124
+ /**
125
+ * A server-side image optimizer: the transform backend that resizes/transcodes
126
+ * a source image. Produced by an adapter factory (e.g. `imagesOptimizer()` from
127
+ * `@vinext/cloudflare/images/images-optimizer`) and registered via
128
+ * {@link setImageOptimizer}.
129
+ */
130
+ type ImageOptimizer = {
131
+ /** Transform the source image (resize, format, quality). */transformImage: (body: ReadableStream, options: {
132
+ width: number;
133
+ format: string;
134
+ quality: number;
135
+ }) => Promise<Response>;
136
+ };
137
+ /**
138
+ * Register the active image optimizer (transform backend). An explicit
139
+ * registration always wins; passing `null` clears it (falling back to
140
+ * unoptimized passthrough).
141
+ *
142
+ * Configure this declaratively via the `images.optimizer` option on the
143
+ * `vinext()` plugin in your `vite.config.ts` rather than calling it directly.
144
+ * On Cloudflare Workers:
145
+ *
146
+ * ```ts
147
+ * import { vinext } from "vinext";
148
+ * import { imagesOptimizer } from "@vinext/cloudflare/images/images-optimizer";
149
+ *
150
+ * export default defineConfig({
151
+ * plugins: [vinext({ images: { optimizer: imagesOptimizer() } })],
152
+ * });
153
+ * ```
154
+ *
155
+ * The plugin registers the optimizer across every runtime/router entry, so you
156
+ * don't have to wire `env.IMAGES` into a custom worker entry. This setter
157
+ * remains the internal registration target.
158
+ */
159
+ declare function setImageOptimizer(optimizer: ImageOptimizer | null): void;
160
+ /** Get the active image optimizer, or `null` when none is configured. */
161
+ declare function getImageOptimizer(): ImageOptimizer | null;
162
+ /**
163
+ * Handle an image optimization request using the configured optimizer (if any).
164
+ *
165
+ * This is the single entry point every runtime/router seam (App Router worker,
166
+ * Pages worker, Node prod server) should call: it reads the registered
167
+ * {@link ImageOptimizer} and wires its `transformImage` into
168
+ * {@link handleImageOptimization}, with the caller supplying the runtime's
169
+ * `fetchAsset` (e.g. the Cloudflare `ASSETS` binding, or filesystem reads on
170
+ * Node). When no optimizer is registered, the request is served unoptimized
171
+ * (passthrough) with the same security/cache headers.
172
+ */
173
+ declare function handleConfiguredImageOptimization(request: Request, fetchAsset: (path: string, request: Request) => Promise<Response>, allowedWidths?: number[], imageConfig?: ImageConfig): Promise<Response>;
124
174
  //#endregion
125
- export { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES, IMAGE_CACHE_CONTROL, IMAGE_CONTENT_SECURITY_POLICY, IMAGE_OPTIMIZATION_PATH, ImageConfig, ImageHandlers, ParseImageParamsOptions, VINEXT_IMAGE_OPTIMIZATION_PATH, handleImageOptimization, isImageOptimizationPath, isSafeImageContentType, negotiateImageFormat, parseImageParams, resolveDevImageRedirect };
175
+ export { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES, IMAGE_CACHE_CONTROL, IMAGE_CONTENT_SECURITY_POLICY, IMAGE_OPTIMIZATION_PATH, ImageConfig, ImageHandlers, ImageOptimizer, ParseImageParamsOptions, VINEXT_IMAGE_OPTIMIZATION_PATH, getImageOptimizer, handleConfiguredImageOptimization, handleImageOptimization, isImageOptimizationPath, isSafeImageContentType, negotiateImageFormat, parseImageParams, resolveDevImageRedirect, setImageOptimizer };