vinext 0.0.45 → 0.0.47

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 (311) hide show
  1. package/README.md +7 -5
  2. package/dist/build/prerender.d.ts +2 -1
  3. package/dist/build/prerender.js +80 -17
  4. package/dist/build/prerender.js.map +1 -1
  5. package/dist/build/report.d.ts +1 -1
  6. package/dist/build/route-classification-injector.d.ts +35 -0
  7. package/dist/build/route-classification-injector.js +61 -0
  8. package/dist/build/route-classification-injector.js.map +1 -0
  9. package/dist/build/route-classification-manifest.d.ts +1 -1
  10. package/dist/build/standalone.js +4 -3
  11. package/dist/build/standalone.js.map +1 -1
  12. package/dist/build/static-export.d.ts +1 -1
  13. package/dist/check.js +30 -18
  14. package/dist/check.js.map +1 -1
  15. package/dist/cli-args.d.ts +31 -0
  16. package/dist/cli-args.js +104 -0
  17. package/dist/cli-args.js.map +1 -0
  18. package/dist/cli.js +6 -19
  19. package/dist/cli.js.map +1 -1
  20. package/dist/cloudflare/kv-cache-handler.js +29 -9
  21. package/dist/cloudflare/kv-cache-handler.js.map +1 -1
  22. package/dist/config/config-matchers.js +1 -0
  23. package/dist/config/config-matchers.js.map +1 -1
  24. package/dist/config/next-config.d.ts +42 -4
  25. package/dist/config/next-config.js +27 -0
  26. package/dist/config/next-config.js.map +1 -1
  27. package/dist/deploy.js +18 -23
  28. package/dist/deploy.js.map +1 -1
  29. package/dist/entries/app-rsc-entry.d.ts +4 -3
  30. package/dist/entries/app-rsc-entry.js +435 -2317
  31. package/dist/entries/app-rsc-entry.js.map +1 -1
  32. package/dist/entries/app-rsc-manifest.d.ts +24 -0
  33. package/dist/entries/app-rsc-manifest.js +155 -0
  34. package/dist/entries/app-rsc-manifest.js.map +1 -0
  35. package/dist/entries/pages-server-entry.js +18 -105
  36. package/dist/entries/pages-server-entry.js.map +1 -1
  37. package/dist/index.js +82 -85
  38. package/dist/index.js.map +1 -1
  39. package/dist/plugins/fonts.js +54 -32
  40. package/dist/plugins/fonts.js.map +1 -1
  41. package/dist/plugins/rsc-client-shim-excludes.d.ts +6 -0
  42. package/dist/plugins/rsc-client-shim-excludes.js +28 -0
  43. package/dist/plugins/rsc-client-shim-excludes.js.map +1 -0
  44. package/dist/routing/app-route-graph.d.ts +109 -0
  45. package/dist/routing/app-route-graph.js +819 -0
  46. package/dist/routing/app-route-graph.js.map +1 -0
  47. package/dist/routing/app-router.d.ts +2 -79
  48. package/dist/routing/app-router.js +7 -621
  49. package/dist/routing/app-router.js.map +1 -1
  50. package/dist/routing/route-pattern.d.ts +9 -0
  51. package/dist/routing/route-pattern.js +90 -0
  52. package/dist/routing/route-pattern.js.map +1 -0
  53. package/dist/routing/route-trie.js +10 -11
  54. package/dist/routing/route-trie.js.map +1 -1
  55. package/dist/server/app-browser-entry.js +94 -232
  56. package/dist/server/app-browser-entry.js.map +1 -1
  57. package/dist/server/app-browser-error.d.ts +3 -4
  58. package/dist/server/app-browser-error.js +8 -4
  59. package/dist/server/app-browser-error.js.map +1 -1
  60. package/dist/server/app-browser-navigation-controller.d.ts +73 -0
  61. package/dist/server/app-browser-navigation-controller.js +282 -0
  62. package/dist/server/app-browser-navigation-controller.js.map +1 -0
  63. package/dist/server/app-browser-state.d.ts +1 -1
  64. package/dist/server/app-browser-state.js.map +1 -1
  65. package/dist/server/app-elements.js +1 -5
  66. package/dist/server/app-elements.js.map +1 -1
  67. package/dist/server/app-fallback-renderer.d.ts +57 -0
  68. package/dist/server/app-fallback-renderer.js +79 -0
  69. package/dist/server/app-fallback-renderer.js.map +1 -0
  70. package/dist/server/app-hook-warning-suppression.d.ts +7 -0
  71. package/dist/server/app-hook-warning-suppression.js +12 -0
  72. package/dist/server/app-hook-warning-suppression.js.map +1 -0
  73. package/dist/server/app-middleware.d.ts +32 -0
  74. package/dist/server/app-middleware.js +147 -0
  75. package/dist/server/app-middleware.js.map +1 -0
  76. package/dist/server/app-mounted-slots-header.d.ts +17 -0
  77. package/dist/server/app-mounted-slots-header.js +21 -0
  78. package/dist/server/app-mounted-slots-header.js.map +1 -0
  79. package/dist/server/app-page-boundary-render.d.ts +4 -2
  80. package/dist/server/app-page-boundary-render.js +50 -30
  81. package/dist/server/app-page-boundary-render.js.map +1 -1
  82. package/dist/server/app-page-boundary.d.ts +12 -1
  83. package/dist/server/app-page-boundary.js +27 -12
  84. package/dist/server/app-page-boundary.js.map +1 -1
  85. package/dist/server/app-page-cache.d.ts +22 -5
  86. package/dist/server/app-page-cache.js +90 -11
  87. package/dist/server/app-page-cache.js.map +1 -1
  88. package/dist/server/app-page-dispatch.d.ts +123 -0
  89. package/dist/server/app-page-dispatch.js +348 -0
  90. package/dist/server/app-page-dispatch.js.map +1 -0
  91. package/dist/server/app-page-element-builder.d.ts +61 -0
  92. package/dist/server/app-page-element-builder.js +139 -0
  93. package/dist/server/app-page-element-builder.js.map +1 -0
  94. package/dist/server/app-page-execution.d.ts +4 -3
  95. package/dist/server/app-page-execution.js +5 -8
  96. package/dist/server/app-page-execution.js.map +1 -1
  97. package/dist/server/app-page-head.d.ts +55 -0
  98. package/dist/server/app-page-head.js +196 -0
  99. package/dist/server/app-page-head.js.map +1 -0
  100. package/dist/server/app-page-method.d.ts +16 -0
  101. package/dist/server/app-page-method.js +30 -0
  102. package/dist/server/app-page-method.js.map +1 -0
  103. package/dist/server/app-page-params.d.ts +8 -0
  104. package/dist/server/app-page-params.js +28 -0
  105. package/dist/server/app-page-params.js.map +1 -0
  106. package/dist/server/app-page-render.d.ts +7 -2
  107. package/dist/server/app-page-render.js +131 -32
  108. package/dist/server/app-page-render.js.map +1 -1
  109. package/dist/server/app-page-request.d.ts +23 -8
  110. package/dist/server/app-page-request.js +51 -6
  111. package/dist/server/app-page-request.js.map +1 -1
  112. package/dist/server/app-page-response.d.ts +1 -0
  113. package/dist/server/app-page-response.js +3 -7
  114. package/dist/server/app-page-response.js.map +1 -1
  115. package/dist/server/app-page-route-wiring.d.ts +29 -5
  116. package/dist/server/app-page-route-wiring.js +30 -8
  117. package/dist/server/app-page-route-wiring.js.map +1 -1
  118. package/dist/server/app-page-stream.d.ts +10 -0
  119. package/dist/server/app-page-stream.js +5 -1
  120. package/dist/server/app-page-stream.js.map +1 -1
  121. package/dist/server/app-post-middleware-context.d.ts +16 -0
  122. package/dist/server/app-post-middleware-context.js +28 -0
  123. package/dist/server/app-post-middleware-context.js.map +1 -0
  124. package/dist/server/app-prerender-endpoints.d.ts +19 -0
  125. package/dist/server/app-prerender-endpoints.js +96 -0
  126. package/dist/server/app-prerender-endpoints.js.map +1 -0
  127. package/dist/server/app-prerender-static-params.d.ts +16 -0
  128. package/dist/server/app-prerender-static-params.js +14 -0
  129. package/dist/server/app-prerender-static-params.js.map +1 -0
  130. package/dist/server/app-request-context.d.ts +22 -0
  131. package/dist/server/app-request-context.js +30 -0
  132. package/dist/server/app-request-context.js.map +1 -0
  133. package/dist/server/app-route-handler-cache.d.ts +4 -0
  134. package/dist/server/app-route-handler-cache.js +11 -3
  135. package/dist/server/app-route-handler-cache.js.map +1 -1
  136. package/dist/server/app-route-handler-dispatch.d.ts +43 -0
  137. package/dist/server/app-route-handler-dispatch.js +149 -0
  138. package/dist/server/app-route-handler-dispatch.js.map +1 -0
  139. package/dist/server/app-route-handler-execution.d.ts +8 -3
  140. package/dist/server/app-route-handler-execution.js +25 -4
  141. package/dist/server/app-route-handler-execution.js.map +1 -1
  142. package/dist/server/app-route-handler-response.d.ts +6 -3
  143. package/dist/server/app-route-handler-response.js +52 -11
  144. package/dist/server/app-route-handler-response.js.map +1 -1
  145. package/dist/server/app-route-handler-runtime.d.ts +4 -1
  146. package/dist/server/app-route-handler-runtime.js +107 -1
  147. package/dist/server/app-route-handler-runtime.js.map +1 -1
  148. package/dist/server/app-router-entry.js.map +1 -1
  149. package/dist/server/app-rsc-error-handler.d.ts +21 -0
  150. package/dist/server/app-rsc-error-handler.js +30 -0
  151. package/dist/server/app-rsc-error-handler.js.map +1 -0
  152. package/dist/server/app-rsc-errors.d.ts +27 -0
  153. package/dist/server/app-rsc-errors.js +42 -0
  154. package/dist/server/app-rsc-errors.js.map +1 -0
  155. package/dist/server/app-rsc-handler.d.ts +117 -0
  156. package/dist/server/app-rsc-handler.js +260 -0
  157. package/dist/server/app-rsc-handler.js.map +1 -0
  158. package/dist/server/app-rsc-request-normalization.d.ts +40 -0
  159. package/dist/server/app-rsc-request-normalization.js +63 -0
  160. package/dist/server/app-rsc-request-normalization.js.map +1 -0
  161. package/dist/server/app-rsc-response-finalizer.d.ts +30 -0
  162. package/dist/server/app-rsc-response-finalizer.js +38 -0
  163. package/dist/server/app-rsc-response-finalizer.js.map +1 -0
  164. package/dist/server/app-rsc-route-matching.d.ts +40 -0
  165. package/dist/server/app-rsc-route-matching.js +66 -0
  166. package/dist/server/app-rsc-route-matching.js.map +1 -0
  167. package/dist/server/app-segment-config.d.ts +33 -0
  168. package/dist/server/app-segment-config.js +86 -0
  169. package/dist/server/app-segment-config.js.map +1 -0
  170. package/dist/server/app-server-action-execution.d.ts +88 -1
  171. package/dist/server/app-server-action-execution.js +257 -5
  172. package/dist/server/app-server-action-execution.js.map +1 -1
  173. package/dist/server/app-ssr-entry.d.ts +7 -0
  174. package/dist/server/app-ssr-entry.js +30 -9
  175. package/dist/server/app-ssr-entry.js.map +1 -1
  176. package/dist/server/app-ssr-stream.d.ts +4 -2
  177. package/dist/server/app-ssr-stream.js +29 -2
  178. package/dist/server/app-ssr-stream.js.map +1 -1
  179. package/dist/server/app-static-generation.d.ts +15 -0
  180. package/dist/server/app-static-generation.js +20 -0
  181. package/dist/server/app-static-generation.js.map +1 -0
  182. package/dist/server/cache-control.d.ts +24 -0
  183. package/dist/server/cache-control.js +33 -0
  184. package/dist/server/cache-control.js.map +1 -0
  185. package/dist/server/dev-error-overlay-store.d.ts +23 -0
  186. package/dist/server/dev-error-overlay-store.js +67 -0
  187. package/dist/server/dev-error-overlay-store.js.map +1 -0
  188. package/dist/server/dev-error-overlay.d.ts +15 -0
  189. package/dist/server/dev-error-overlay.js +548 -0
  190. package/dist/server/dev-error-overlay.js.map +1 -0
  191. package/dist/server/dev-route-files.d.ts +7 -0
  192. package/dist/server/dev-route-files.js +73 -0
  193. package/dist/server/dev-route-files.js.map +1 -0
  194. package/dist/server/dev-server.js +4 -0
  195. package/dist/server/dev-server.js.map +1 -1
  196. package/dist/server/file-based-metadata.d.ts +17 -0
  197. package/dist/server/file-based-metadata.js +356 -0
  198. package/dist/server/file-based-metadata.js.map +1 -0
  199. package/dist/server/implicit-tags.d.ts +6 -0
  200. package/dist/server/implicit-tags.js +42 -0
  201. package/dist/server/implicit-tags.js.map +1 -0
  202. package/dist/server/instrumentation-runtime.d.ts +44 -0
  203. package/dist/server/instrumentation-runtime.js +29 -0
  204. package/dist/server/instrumentation-runtime.js.map +1 -0
  205. package/dist/server/instrumentation.js.map +1 -1
  206. package/dist/server/isr-cache.d.ts +16 -3
  207. package/dist/server/isr-cache.js +56 -8
  208. package/dist/server/isr-cache.js.map +1 -1
  209. package/dist/server/metadata-route-build-data.d.ts +25 -0
  210. package/dist/server/metadata-route-build-data.js +150 -0
  211. package/dist/server/metadata-route-build-data.js.map +1 -0
  212. package/dist/server/metadata-route-response.d.ts +17 -0
  213. package/dist/server/metadata-route-response.js +187 -0
  214. package/dist/server/metadata-route-response.js.map +1 -0
  215. package/dist/server/metadata-routes.d.ts +42 -4
  216. package/dist/server/metadata-routes.js +127 -11
  217. package/dist/server/metadata-routes.js.map +1 -1
  218. package/dist/server/middleware-matcher.d.ts +15 -0
  219. package/dist/server/middleware-matcher.js +102 -0
  220. package/dist/server/middleware-matcher.js.map +1 -0
  221. package/dist/server/middleware-request-headers.js +2 -1
  222. package/dist/server/middleware-request-headers.js.map +1 -1
  223. package/dist/server/middleware-runtime.d.ts +39 -0
  224. package/dist/server/middleware-runtime.js +159 -0
  225. package/dist/server/middleware-runtime.js.map +1 -0
  226. package/dist/server/middleware.d.ts +4 -36
  227. package/dist/server/middleware.js +18 -228
  228. package/dist/server/middleware.js.map +1 -1
  229. package/dist/server/pages-page-data.d.ts +7 -2
  230. package/dist/server/pages-page-data.js +10 -5
  231. package/dist/server/pages-page-data.js.map +1 -1
  232. package/dist/server/pages-page-response.d.ts +2 -1
  233. package/dist/server/pages-page-response.js +5 -3
  234. package/dist/server/pages-page-response.js.map +1 -1
  235. package/dist/server/prerender-work-unit-setup.d.ts +7 -0
  236. package/dist/server/prerender-work-unit-setup.js +30 -0
  237. package/dist/server/prerender-work-unit-setup.js.map +1 -0
  238. package/dist/server/prod-server.js +10 -14
  239. package/dist/server/prod-server.js.map +1 -1
  240. package/dist/server/request-pipeline.d.ts +46 -5
  241. package/dist/server/request-pipeline.js +84 -5
  242. package/dist/server/request-pipeline.js.map +1 -1
  243. package/dist/server/rsc-stream-hints.d.ts +7 -0
  244. package/dist/server/rsc-stream-hints.js +38 -0
  245. package/dist/server/rsc-stream-hints.js.map +1 -0
  246. package/dist/server/seed-cache.js +19 -8
  247. package/dist/server/seed-cache.js.map +1 -1
  248. package/dist/server/server-action-not-found.d.ts +9 -0
  249. package/dist/server/server-action-not-found.js +40 -0
  250. package/dist/server/server-action-not-found.js.map +1 -0
  251. package/dist/shims/cache-runtime.js +28 -11
  252. package/dist/shims/cache-runtime.js.map +1 -1
  253. package/dist/shims/cache.d.ts +39 -4
  254. package/dist/shims/cache.js +93 -16
  255. package/dist/shims/cache.js.map +1 -1
  256. package/dist/shims/error-boundary.d.ts +66 -5
  257. package/dist/shims/error-boundary.js +106 -4
  258. package/dist/shims/error-boundary.js.map +1 -1
  259. package/dist/shims/fetch-cache.d.ts +4 -1
  260. package/dist/shims/fetch-cache.js +55 -13
  261. package/dist/shims/fetch-cache.js.map +1 -1
  262. package/dist/shims/font-google-base.d.ts +5 -4
  263. package/dist/shims/font-google-base.js +61 -13
  264. package/dist/shims/font-google-base.js.map +1 -1
  265. package/dist/shims/headers.d.ts +14 -2
  266. package/dist/shims/headers.js +127 -17
  267. package/dist/shims/headers.js.map +1 -1
  268. package/dist/shims/image.js +116 -10
  269. package/dist/shims/image.js.map +1 -1
  270. package/dist/shims/internal/make-hanging-promise.d.ts +16 -0
  271. package/dist/shims/internal/make-hanging-promise.js +46 -0
  272. package/dist/shims/internal/make-hanging-promise.js.map +1 -0
  273. package/dist/shims/internal/work-unit-async-storage.d.ts +26 -3
  274. package/dist/shims/internal/work-unit-async-storage.js +6 -3
  275. package/dist/shims/internal/work-unit-async-storage.js.map +1 -1
  276. package/dist/shims/metadata.d.ts +38 -26
  277. package/dist/shims/metadata.js +75 -45
  278. package/dist/shims/metadata.js.map +1 -1
  279. package/dist/shims/navigation.d.ts +10 -1
  280. package/dist/shims/navigation.js +18 -1
  281. package/dist/shims/navigation.js.map +1 -1
  282. package/dist/shims/navigation.react-server.d.ts +2 -2
  283. package/dist/shims/navigation.react-server.js +2 -2
  284. package/dist/shims/navigation.react-server.js.map +1 -1
  285. package/dist/shims/offline.d.ts +5 -0
  286. package/dist/shims/offline.js +17 -0
  287. package/dist/shims/offline.js.map +1 -0
  288. package/dist/shims/request-state-types.d.ts +3 -2
  289. package/dist/shims/root-params.d.ts +11 -0
  290. package/dist/shims/root-params.js +24 -0
  291. package/dist/shims/root-params.js.map +1 -0
  292. package/dist/shims/router.js +1 -1
  293. package/dist/shims/server.d.ts +3 -1
  294. package/dist/shims/server.js +83 -5
  295. package/dist/shims/server.js.map +1 -1
  296. package/dist/shims/thenable-params.d.ts +5 -0
  297. package/dist/shims/thenable-params.js +37 -0
  298. package/dist/shims/thenable-params.js.map +1 -0
  299. package/dist/shims/unified-request-context.d.ts +3 -2
  300. package/dist/shims/unified-request-context.js +3 -0
  301. package/dist/shims/unified-request-context.js.map +1 -1
  302. package/dist/shims/use-merged-ref.d.ts +7 -0
  303. package/dist/shims/use-merged-ref.js +40 -0
  304. package/dist/shims/use-merged-ref.js.map +1 -0
  305. package/dist/utils/cache-control-metadata.d.ts +6 -0
  306. package/dist/utils/cache-control-metadata.js +16 -0
  307. package/dist/utils/cache-control-metadata.js.map +1 -0
  308. package/package.json +6 -1
  309. package/dist/server/middleware-codegen.d.ts +0 -54
  310. package/dist/server/middleware-codegen.js +0 -414
  311. package/dist/server/middleware-codegen.js.map +0 -1
@@ -0,0 +1,30 @@
1
+ import { NextHeader } from "../config/next-config.js";
2
+ import { RequestContext } from "../config/config-matchers.js";
3
+
4
+ //#region src/server/app-rsc-response-finalizer.d.ts
5
+ type FinalizeAppRscResponseOptions = {
6
+ basePath: string;
7
+ configHeaders: NextHeader[];
8
+ /**
9
+ * Original pre-middleware request context.
10
+ * Next.js evaluates config header has/missing conditions against the
11
+ * unmodified incoming request, so callers must pass the snapshot taken
12
+ * before middleware runs.
13
+ */
14
+ requestContext: RequestContext;
15
+ };
16
+ /**
17
+ * Apply next.config.js response headers to an App Router response.
18
+ *
19
+ * Called once per request in the outer handler() wrapper, after all route
20
+ * handling, so that every response path (page, route handler, server action,
21
+ * metadata, not-found) gets headers applied consistently.
22
+ *
23
+ * Skips 3xx redirect responses. Response.redirect() creates immutable
24
+ * headers that throw on mutation, and Next.js does not apply config headers
25
+ * to redirects regardless.
26
+ */
27
+ declare function finalizeAppRscResponse(response: Response, request: Request, options: FinalizeAppRscResponseOptions): Response;
28
+ //#endregion
29
+ export { finalizeAppRscResponse };
30
+ //# sourceMappingURL=app-rsc-response-finalizer.d.ts.map
@@ -0,0 +1,38 @@
1
+ import { normalizePathnameForRouteMatch } from "../routing/utils.js";
2
+ import { normalizePath } from "./normalize-path.js";
3
+ import { stripBasePath } from "../utils/base-path.js";
4
+ import { applyConfigHeadersToResponse } from "./request-pipeline.js";
5
+ //#region src/server/app-rsc-response-finalizer.ts
6
+ /**
7
+ * Apply next.config.js response headers to an App Router response.
8
+ *
9
+ * Called once per request in the outer handler() wrapper, after all route
10
+ * handling, so that every response path (page, route handler, server action,
11
+ * metadata, not-found) gets headers applied consistently.
12
+ *
13
+ * Skips 3xx redirect responses. Response.redirect() creates immutable
14
+ * headers that throw on mutation, and Next.js does not apply config headers
15
+ * to redirects regardless.
16
+ */
17
+ function finalizeAppRscResponse(response, request, options) {
18
+ if (response.status >= 300 && response.status < 400) return response;
19
+ if (!options.configHeaders.length) return response;
20
+ const url = new URL(request.url);
21
+ let pathname;
22
+ try {
23
+ pathname = normalizePath(normalizePathnameForRouteMatch(url.pathname));
24
+ } catch {
25
+ pathname = url.pathname;
26
+ }
27
+ pathname = stripBasePath(pathname, options.basePath);
28
+ applyConfigHeadersToResponse(response.headers, {
29
+ configHeaders: options.configHeaders,
30
+ pathname,
31
+ requestContext: options.requestContext
32
+ });
33
+ return response;
34
+ }
35
+ //#endregion
36
+ export { finalizeAppRscResponse };
37
+
38
+ //# sourceMappingURL=app-rsc-response-finalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-rsc-response-finalizer.js","names":[],"sources":["../../src/server/app-rsc-response-finalizer.ts"],"sourcesContent":["import type { NextHeader } from \"../config/next-config.js\";\nimport type { RequestContext } from \"../config/config-matchers.js\";\nimport { applyConfigHeadersToResponse } from \"./request-pipeline.js\";\nimport { stripBasePath } from \"../utils/base-path.js\";\nimport { normalizePath } from \"./normalize-path.js\";\nimport { normalizePathnameForRouteMatch } from \"../routing/utils.js\";\n\ntype FinalizeAppRscResponseOptions = {\n basePath: string;\n configHeaders: NextHeader[];\n /**\n * Original pre-middleware request context.\n * Next.js evaluates config header has/missing conditions against the\n * unmodified incoming request, so callers must pass the snapshot taken\n * before middleware runs.\n */\n requestContext: RequestContext;\n};\n\n/**\n * Apply next.config.js response headers to an App Router response.\n *\n * Called once per request in the outer handler() wrapper, after all route\n * handling, so that every response path (page, route handler, server action,\n * metadata, not-found) gets headers applied consistently.\n *\n * Skips 3xx redirect responses. Response.redirect() creates immutable\n * headers that throw on mutation, and Next.js does not apply config headers\n * to redirects regardless.\n */\nexport function finalizeAppRscResponse(\n response: Response,\n request: Request,\n options: FinalizeAppRscResponseOptions,\n): Response {\n // 3xx responses: Response.redirect() headers are immutable (throws on write),\n // and Next.js deliberately excludes config headers from redirect responses.\n if (response.status >= 300 && response.status < 400) {\n return response;\n }\n\n if (!options.configHeaders.length) {\n return response;\n }\n\n const url = new URL(request.url);\n let pathname: string;\n try {\n pathname = normalizePath(normalizePathnameForRouteMatch(url.pathname));\n } catch {\n // Malformed percent-encoding. The request reached this point only because\n // normalizePathnameForRouteMatchStrict ran earlier and returned 400 for\n // truly-malformed paths. This catch exists as a safety net for edge cases;\n // keep the historical raw-path fallback rather than crashing the response.\n pathname = url.pathname;\n }\n\n // Config header sources are defined without basePath prefix. Strip basePath\n // at a segment boundary (not a string prefix) so /app2/page with basePath\n // /app is not incorrectly treated as /app with suffix /2/page.\n pathname = stripBasePath(pathname, options.basePath);\n\n applyConfigHeadersToResponse(response.headers, {\n configHeaders: options.configHeaders,\n pathname,\n requestContext: options.requestContext,\n });\n\n return response;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA8BA,SAAgB,uBACd,UACA,SACA,SACU;AAGV,KAAI,SAAS,UAAU,OAAO,SAAS,SAAS,IAC9C,QAAO;AAGT,KAAI,CAAC,QAAQ,cAAc,OACzB,QAAO;CAGT,MAAM,MAAM,IAAI,IAAI,QAAQ,IAAI;CAChC,IAAI;AACJ,KAAI;AACF,aAAW,cAAc,+BAA+B,IAAI,SAAS,CAAC;SAChE;AAKN,aAAW,IAAI;;AAMjB,YAAW,cAAc,UAAU,QAAQ,SAAS;AAEpD,8BAA6B,SAAS,SAAS;EAC7C,eAAe,QAAQ;EACvB;EACA,gBAAgB,QAAQ;EACzB,CAAC;AAEF,QAAO"}
@@ -0,0 +1,40 @@
1
+ import { RoutePatternParams } from "../routing/route-pattern.js";
2
+
3
+ //#region src/server/app-rsc-route-matching.d.ts
4
+ type AppRscRouteParams = RoutePatternParams;
5
+ type AppRscInterceptForMatching = {
6
+ targetPattern: string;
7
+ interceptLayouts: readonly unknown[];
8
+ page: unknown;
9
+ params: readonly string[];
10
+ };
11
+ type AppRscSlotForMatching = {
12
+ intercepts?: readonly AppRscInterceptForMatching[];
13
+ };
14
+ type AppRscRouteForMatching = {
15
+ patternParts: string[];
16
+ slots?: Record<string, AppRscSlotForMatching>;
17
+ };
18
+ type AppRscInterceptMatch = AppRscInterceptLookupEntry & {
19
+ matchedParams: AppRscRouteParams;
20
+ };
21
+ type AppRscInterceptLookupEntry = {
22
+ sourceRouteIndex: number;
23
+ slotKey: string;
24
+ targetPattern: string;
25
+ targetPatternParts: string[];
26
+ interceptLayouts: readonly unknown[];
27
+ page: unknown;
28
+ params: readonly string[];
29
+ };
30
+ declare function createAppRscRouteMatcher<Route extends AppRscRouteForMatching>(routes: Route[]): {
31
+ matchRoute(url: string): {
32
+ route: Route;
33
+ params: AppRscRouteParams;
34
+ } | null;
35
+ findIntercept(pathname: string, sourcePathname?: string | null): AppRscInterceptMatch | null;
36
+ };
37
+ declare function matchAppRscRoutePattern(urlParts: string[], patternParts: string[]): AppRscRouteParams | null;
38
+ //#endregion
39
+ export { createAppRscRouteMatcher, matchAppRscRoutePattern };
40
+ //# sourceMappingURL=app-rsc-route-matching.d.ts.map
@@ -0,0 +1,66 @@
1
+ import { buildRouteTrie, trieMatch } from "../routing/route-trie.js";
2
+ import { matchRoutePattern } from "../routing/route-pattern.js";
3
+ //#region src/server/app-rsc-route-matching.ts
4
+ function createRouteParams() {
5
+ return Object.create(null);
6
+ }
7
+ function createAppRscRouteMatcher(routes) {
8
+ const routeTrie = buildRouteTrie(routes);
9
+ const interceptLookup = createInterceptLookup(routes);
10
+ return {
11
+ matchRoute(url) {
12
+ const pathname = url.split("?")[0];
13
+ return trieMatch(routeTrie, (pathname === "/" ? "/" : pathname.replace(/\/$/, "")).split("/").filter(Boolean));
14
+ },
15
+ findIntercept(pathname, sourcePathname = null) {
16
+ const urlParts = pathname.split("/").filter(Boolean);
17
+ for (const entry of interceptLookup) {
18
+ const params = matchAppRscRoutePattern(urlParts, entry.targetPatternParts);
19
+ if (params !== null) {
20
+ let sourceParams = createRouteParams();
21
+ if (sourcePathname !== null) {
22
+ const sourceRoute = routes[entry.sourceRouteIndex];
23
+ const sourceParts = sourcePathname.split("/").filter(Boolean);
24
+ const matchedSourceParams = sourceRoute ? matchAppRscRoutePattern(sourceParts, sourceRoute.patternParts) : null;
25
+ if (matchedSourceParams !== null) sourceParams = matchedSourceParams;
26
+ }
27
+ return {
28
+ ...entry,
29
+ matchedParams: mergeMatchedParams(sourceParams, params)
30
+ };
31
+ }
32
+ }
33
+ return null;
34
+ }
35
+ };
36
+ }
37
+ function createInterceptLookup(routes) {
38
+ const interceptLookup = [];
39
+ for (let routeIndex = 0; routeIndex < routes.length; routeIndex++) {
40
+ const route = routes[routeIndex];
41
+ if (!route.slots) continue;
42
+ for (const [slotKey, slotModule] of Object.entries(route.slots)) {
43
+ if (!slotModule.intercepts) continue;
44
+ for (const intercept of slotModule.intercepts) interceptLookup.push({
45
+ sourceRouteIndex: routeIndex,
46
+ slotKey,
47
+ targetPattern: intercept.targetPattern,
48
+ targetPatternParts: intercept.targetPattern.split("/").filter(Boolean),
49
+ interceptLayouts: intercept.interceptLayouts,
50
+ page: intercept.page,
51
+ params: intercept.params
52
+ });
53
+ }
54
+ }
55
+ return interceptLookup;
56
+ }
57
+ function matchAppRscRoutePattern(urlParts, patternParts) {
58
+ return matchRoutePattern(urlParts, patternParts);
59
+ }
60
+ function mergeMatchedParams(sourceParams, targetParams) {
61
+ return Object.assign(createRouteParams(), sourceParams, targetParams);
62
+ }
63
+ //#endregion
64
+ export { createAppRscRouteMatcher, matchAppRscRoutePattern };
65
+
66
+ //# sourceMappingURL=app-rsc-route-matching.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-rsc-route-matching.js","names":[],"sources":["../../src/server/app-rsc-route-matching.ts"],"sourcesContent":["import { buildRouteTrie, trieMatch } from \"../routing/route-trie.js\";\nimport { matchRoutePattern, type RoutePatternParams } from \"../routing/route-pattern.js\";\n\ntype AppRscRouteParams = RoutePatternParams;\n\ntype AppRscInterceptForMatching = {\n targetPattern: string;\n interceptLayouts: readonly unknown[];\n page: unknown;\n params: readonly string[];\n};\n\ntype AppRscSlotForMatching = {\n intercepts?: readonly AppRscInterceptForMatching[];\n};\n\ntype AppRscRouteForMatching = {\n patternParts: string[];\n slots?: Record<string, AppRscSlotForMatching>;\n};\n\ntype AppRscInterceptMatch = AppRscInterceptLookupEntry & {\n matchedParams: AppRscRouteParams;\n};\n\ntype AppRscInterceptLookupEntry = {\n sourceRouteIndex: number;\n slotKey: string;\n targetPattern: string;\n targetPatternParts: string[];\n interceptLayouts: readonly unknown[];\n page: unknown;\n params: readonly string[];\n};\n\nfunction createRouteParams(): AppRscRouteParams {\n return Object.create(null);\n}\n\nexport function createAppRscRouteMatcher<Route extends AppRscRouteForMatching>(\n routes: Route[],\n): {\n matchRoute(url: string): { route: Route; params: AppRscRouteParams } | null;\n findIntercept(pathname: string, sourcePathname?: string | null): AppRscInterceptMatch | null;\n} {\n const routeTrie = buildRouteTrie(routes);\n const interceptLookup = createInterceptLookup(routes);\n\n return {\n matchRoute(url) {\n const pathname = url.split(\"?\")[0];\n const normalizedUrl = pathname === \"/\" ? \"/\" : pathname.replace(/\\/$/, \"\");\n // The request entry point owns decoding. Matching here preserves the\n // already-normalized segment bytes so middleware and routing stay aligned.\n const urlParts = normalizedUrl.split(\"/\").filter(Boolean);\n return trieMatch(routeTrie, urlParts);\n },\n findIntercept(pathname, sourcePathname = null) {\n const urlParts = pathname.split(\"/\").filter(Boolean);\n for (const entry of interceptLookup) {\n const params = matchAppRscRoutePattern(urlParts, entry.targetPatternParts);\n if (params !== null) {\n let sourceParams = createRouteParams();\n if (sourcePathname !== null) {\n const sourceRoute = routes[entry.sourceRouteIndex];\n const sourceParts = sourcePathname.split(\"/\").filter(Boolean);\n const matchedSourceParams = sourceRoute\n ? matchAppRscRoutePattern(sourceParts, sourceRoute.patternParts)\n : null;\n if (matchedSourceParams !== null) {\n sourceParams = matchedSourceParams;\n }\n }\n return { ...entry, matchedParams: mergeMatchedParams(sourceParams, params) };\n }\n }\n return null;\n },\n };\n}\n\nfunction createInterceptLookup<Route extends AppRscRouteForMatching>(\n routes: Route[],\n): AppRscInterceptLookupEntry[] {\n const interceptLookup: AppRscInterceptLookupEntry[] = [];\n for (let routeIndex = 0; routeIndex < routes.length; routeIndex++) {\n const route = routes[routeIndex];\n if (!route.slots) continue;\n for (const [slotKey, slotModule] of Object.entries(route.slots)) {\n if (!slotModule.intercepts) continue;\n for (const intercept of slotModule.intercepts) {\n interceptLookup.push({\n sourceRouteIndex: routeIndex,\n slotKey,\n targetPattern: intercept.targetPattern,\n targetPatternParts: intercept.targetPattern.split(\"/\").filter(Boolean),\n interceptLayouts: intercept.interceptLayouts,\n page: intercept.page,\n params: intercept.params,\n });\n }\n }\n }\n return interceptLookup;\n}\n\nexport function matchAppRscRoutePattern(\n urlParts: string[],\n patternParts: string[],\n): AppRscRouteParams | null {\n return matchRoutePattern(urlParts, patternParts);\n}\n\nfunction mergeMatchedParams(\n sourceParams: AppRscRouteParams,\n targetParams: AppRscRouteParams,\n): AppRscRouteParams {\n return Object.assign(createRouteParams(), sourceParams, targetParams);\n}\n"],"mappings":";;;AAmCA,SAAS,oBAAuC;AAC9C,QAAO,OAAO,OAAO,KAAK;;AAG5B,SAAgB,yBACd,QAIA;CACA,MAAM,YAAY,eAAe,OAAO;CACxC,MAAM,kBAAkB,sBAAsB,OAAO;AAErD,QAAO;EACL,WAAW,KAAK;GACd,MAAM,WAAW,IAAI,MAAM,IAAI,CAAC;AAKhC,UAAO,UAAU,YAJK,aAAa,MAAM,MAAM,SAAS,QAAQ,OAAO,GAAG,EAG3C,MAAM,IAAI,CAAC,OAAO,QAAQ,CACpB;;EAEvC,cAAc,UAAU,iBAAiB,MAAM;GAC7C,MAAM,WAAW,SAAS,MAAM,IAAI,CAAC,OAAO,QAAQ;AACpD,QAAK,MAAM,SAAS,iBAAiB;IACnC,MAAM,SAAS,wBAAwB,UAAU,MAAM,mBAAmB;AAC1E,QAAI,WAAW,MAAM;KACnB,IAAI,eAAe,mBAAmB;AACtC,SAAI,mBAAmB,MAAM;MAC3B,MAAM,cAAc,OAAO,MAAM;MACjC,MAAM,cAAc,eAAe,MAAM,IAAI,CAAC,OAAO,QAAQ;MAC7D,MAAM,sBAAsB,cACxB,wBAAwB,aAAa,YAAY,aAAa,GAC9D;AACJ,UAAI,wBAAwB,KAC1B,gBAAe;;AAGnB,YAAO;MAAE,GAAG;MAAO,eAAe,mBAAmB,cAAc,OAAO;MAAE;;;AAGhF,UAAO;;EAEV;;AAGH,SAAS,sBACP,QAC8B;CAC9B,MAAM,kBAAgD,EAAE;AACxD,MAAK,IAAI,aAAa,GAAG,aAAa,OAAO,QAAQ,cAAc;EACjE,MAAM,QAAQ,OAAO;AACrB,MAAI,CAAC,MAAM,MAAO;AAClB,OAAK,MAAM,CAAC,SAAS,eAAe,OAAO,QAAQ,MAAM,MAAM,EAAE;AAC/D,OAAI,CAAC,WAAW,WAAY;AAC5B,QAAK,MAAM,aAAa,WAAW,WACjC,iBAAgB,KAAK;IACnB,kBAAkB;IAClB;IACA,eAAe,UAAU;IACzB,oBAAoB,UAAU,cAAc,MAAM,IAAI,CAAC,OAAO,QAAQ;IACtE,kBAAkB,UAAU;IAC5B,MAAM,UAAU;IAChB,QAAQ,UAAU;IACnB,CAAC;;;AAIR,QAAO;;AAGT,SAAgB,wBACd,UACA,cAC0B;AAC1B,QAAO,kBAAkB,UAAU,aAAa;;AAGlD,SAAS,mBACP,cACA,cACmB;AACnB,QAAO,OAAO,OAAO,mBAAmB,EAAE,cAAc,aAAa"}
@@ -0,0 +1,33 @@
1
+ import { FetchCacheMode } from "../shims/fetch-cache.js";
2
+
3
+ //#region src/server/app-segment-config.d.ts
4
+ type AppRouteSegmentDynamic = "auto" | "error" | "force-dynamic" | "force-static";
5
+ type AppRouteSegmentConfigModule = {
6
+ dynamic?: unknown;
7
+ dynamicParams?: unknown;
8
+ fetchCache?: unknown;
9
+ revalidate?: unknown;
10
+ };
11
+ type EffectiveAppPageSegmentConfig = {
12
+ dynamicConfig?: AppRouteSegmentDynamic;
13
+ dynamicParamsConfig?: boolean;
14
+ fetchCache?: FetchCacheMode;
15
+ revalidateSeconds: number | null;
16
+ };
17
+ type ResolveAppPageSegmentConfigOptions = {
18
+ layouts?: readonly (AppRouteSegmentConfigModule | null | undefined)[];
19
+ page?: AppRouteSegmentConfigModule | null;
20
+ };
21
+ /**
22
+ * Resolve the route segment config that applies to an App page route.
23
+ *
24
+ * Next.js collects config from every segment in the loader tree and reduces it
25
+ * into the effective route config. The generated vinext entry already knows
26
+ * the concrete layout/page modules for a route, so it should only describe
27
+ * those modules and delegate the behavior to this helper.
28
+ */
29
+ declare function resolveAppPageSegmentConfig(options: ResolveAppPageSegmentConfigOptions): EffectiveAppPageSegmentConfig;
30
+ declare function resolveAppPageFetchCacheMode(options: ResolveAppPageSegmentConfigOptions): FetchCacheMode | null;
31
+ //#endregion
32
+ export { resolveAppPageFetchCacheMode, resolveAppPageSegmentConfig };
33
+ //# sourceMappingURL=app-segment-config.d.ts.map
@@ -0,0 +1,86 @@
1
+ //#region src/server/app-segment-config.ts
2
+ const DYNAMIC_VALUES = new Set([
3
+ "auto",
4
+ "error",
5
+ "force-dynamic",
6
+ "force-static"
7
+ ]);
8
+ const FETCH_CACHE_VALUES = new Set([
9
+ "auto",
10
+ "default-cache",
11
+ "default-no-store",
12
+ "force-cache",
13
+ "force-no-store",
14
+ "only-cache",
15
+ "only-no-store"
16
+ ]);
17
+ function isRouteSegmentDynamic(value) {
18
+ return DYNAMIC_VALUES.has(value);
19
+ }
20
+ function isRouteSegmentFetchCache(value) {
21
+ return FETCH_CACHE_VALUES.has(value);
22
+ }
23
+ function resolveRevalidateSeconds(current, value) {
24
+ if (typeof value !== "number") return current;
25
+ if (current === null) return value;
26
+ return value < current ? value : current;
27
+ }
28
+ function isCacheFetchCacheMode(value) {
29
+ return value === "default-cache" || value === "force-cache" || value === "only-cache";
30
+ }
31
+ function describeFetchCacheConflict(value) {
32
+ return `Route segment config has incompatible fetchCache values including "${value}".`;
33
+ }
34
+ /**
35
+ * Resolve the route segment config that applies to an App page route.
36
+ *
37
+ * Next.js collects config from every segment in the loader tree and reduces it
38
+ * into the effective route config. The generated vinext entry already knows
39
+ * the concrete layout/page modules for a route, so it should only describe
40
+ * those modules and delegate the behavior to this helper.
41
+ */
42
+ function resolveAppPageSegmentConfig(options) {
43
+ const segments = [...options.layouts ?? [], options.page];
44
+ const config = { revalidateSeconds: null };
45
+ let hasForceCache = false;
46
+ let hasForceNoStore = false;
47
+ let hasOnlyCache = false;
48
+ let hasOnlyNoStore = false;
49
+ let hasParentDefaultNoStore = false;
50
+ for (const segment of segments) {
51
+ if (!segment) continue;
52
+ if (isRouteSegmentDynamic(segment.dynamic)) config.dynamicConfig = segment.dynamic;
53
+ if (segment.dynamicParams === false) config.dynamicParamsConfig = false;
54
+ else if (segment.dynamicParams === true && config.dynamicParamsConfig !== false) config.dynamicParamsConfig = true;
55
+ if (isRouteSegmentFetchCache(segment.fetchCache)) {
56
+ const fetchCache = segment.fetchCache;
57
+ if (hasParentDefaultNoStore && (fetchCache === "auto" || isCacheFetchCacheMode(fetchCache))) throw new Error(describeFetchCacheConflict(fetchCache));
58
+ if (fetchCache === "force-cache") hasForceCache = true;
59
+ if (fetchCache === "force-no-store") hasForceNoStore = true;
60
+ if (fetchCache === "only-cache") hasOnlyCache = true;
61
+ if (fetchCache === "only-no-store") hasOnlyNoStore = true;
62
+ if ((hasForceCache || hasOnlyCache) && (hasForceNoStore || hasOnlyNoStore)) throw new Error(describeFetchCacheConflict(fetchCache));
63
+ if (fetchCache === "default-no-store") hasParentDefaultNoStore = true;
64
+ if (hasForceCache) config.fetchCache = "force-cache";
65
+ else if (hasForceNoStore) config.fetchCache = "force-no-store";
66
+ else if (hasOnlyCache) config.fetchCache = "only-cache";
67
+ else if (hasOnlyNoStore) config.fetchCache = "only-no-store";
68
+ else config.fetchCache = fetchCache;
69
+ }
70
+ config.revalidateSeconds = resolveRevalidateSeconds(config.revalidateSeconds, segment.revalidate);
71
+ }
72
+ if (config.dynamicConfig === "force-dynamic") config.revalidateSeconds = 0;
73
+ if (config.fetchCache === void 0) {
74
+ if (config.dynamicConfig === "force-dynamic") config.fetchCache = "force-no-store";
75
+ else if (config.dynamicConfig === "error") config.fetchCache = "only-cache";
76
+ }
77
+ if (config.dynamicParamsConfig === void 0 && (config.dynamicConfig === "error" || config.dynamicConfig === "force-static")) config.dynamicParamsConfig = false;
78
+ return config;
79
+ }
80
+ function resolveAppPageFetchCacheMode(options) {
81
+ return resolveAppPageSegmentConfig(options).fetchCache ?? null;
82
+ }
83
+ //#endregion
84
+ export { resolveAppPageFetchCacheMode, resolveAppPageSegmentConfig };
85
+
86
+ //# sourceMappingURL=app-segment-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-segment-config.js","names":[],"sources":["../../src/server/app-segment-config.ts"],"sourcesContent":["import type { FetchCacheMode } from \"vinext/shims/fetch-cache\";\n\ntype AppRouteSegmentDynamic = \"auto\" | \"error\" | \"force-dynamic\" | \"force-static\";\n\ntype AppRouteSegmentConfigModule = {\n dynamic?: unknown;\n dynamicParams?: unknown;\n fetchCache?: unknown;\n revalidate?: unknown;\n};\n\ntype EffectiveAppPageSegmentConfig = {\n dynamicConfig?: AppRouteSegmentDynamic;\n dynamicParamsConfig?: boolean;\n fetchCache?: FetchCacheMode;\n revalidateSeconds: number | null;\n};\n\ntype ResolveAppPageSegmentConfigOptions = {\n layouts?: readonly (AppRouteSegmentConfigModule | null | undefined)[];\n page?: AppRouteSegmentConfigModule | null;\n};\n\nconst DYNAMIC_VALUES = new Set<unknown>([\"auto\", \"error\", \"force-dynamic\", \"force-static\"]);\nconst FETCH_CACHE_VALUES = new Set<unknown>([\n \"auto\",\n \"default-cache\",\n \"default-no-store\",\n \"force-cache\",\n \"force-no-store\",\n \"only-cache\",\n \"only-no-store\",\n]);\n\nfunction isRouteSegmentDynamic(value: unknown): value is AppRouteSegmentDynamic {\n return DYNAMIC_VALUES.has(value);\n}\n\nfunction isRouteSegmentFetchCache(value: unknown): value is FetchCacheMode {\n return FETCH_CACHE_VALUES.has(value);\n}\n\nfunction resolveRevalidateSeconds(current: number | null, value: unknown): number | null {\n // TODO: Next.js also accepts `revalidate = false` for indefinite caching.\n // Existing vinext code ignores non-numeric values; keep that behavior until\n // the cache layer can represent \"cache forever\" distinctly from \"unset\".\n if (typeof value !== \"number\") {\n return current;\n }\n\n if (current === null) {\n return value;\n }\n\n return value < current ? value : current;\n}\n\nfunction isCacheFetchCacheMode(value: FetchCacheMode): boolean {\n return value === \"default-cache\" || value === \"force-cache\" || value === \"only-cache\";\n}\n\nfunction describeFetchCacheConflict(value: FetchCacheMode): string {\n return `Route segment config has incompatible fetchCache values including \"${value}\".`;\n}\n\n/**\n * Resolve the route segment config that applies to an App page route.\n *\n * Next.js collects config from every segment in the loader tree and reduces it\n * into the effective route config. The generated vinext entry already knows\n * the concrete layout/page modules for a route, so it should only describe\n * those modules and delegate the behavior to this helper.\n */\nexport function resolveAppPageSegmentConfig(\n options: ResolveAppPageSegmentConfigOptions,\n): EffectiveAppPageSegmentConfig {\n const segments = [...(options.layouts ?? []), options.page];\n // Reduction strategies differ by field:\n // - dynamic: child segments override parents.\n // - dynamicParams: false is sticky across the route tree.\n // - fetchCache: force/only modes take route-level precedence and reject conflicts.\n // - revalidate: the shortest numeric interval wins.\n const config: EffectiveAppPageSegmentConfig = {\n revalidateSeconds: null,\n };\n let hasForceCache = false;\n let hasForceNoStore = false;\n let hasOnlyCache = false;\n let hasOnlyNoStore = false;\n let hasParentDefaultNoStore = false;\n\n for (const segment of segments) {\n if (!segment) continue;\n\n if (isRouteSegmentDynamic(segment.dynamic)) {\n config.dynamicConfig = segment.dynamic;\n }\n\n if (segment.dynamicParams === false) {\n config.dynamicParamsConfig = false;\n } else if (segment.dynamicParams === true && config.dynamicParamsConfig !== false) {\n config.dynamicParamsConfig = true;\n }\n\n if (isRouteSegmentFetchCache(segment.fetchCache)) {\n const fetchCache = segment.fetchCache;\n\n if (hasParentDefaultNoStore && (fetchCache === \"auto\" || isCacheFetchCacheMode(fetchCache))) {\n throw new Error(describeFetchCacheConflict(fetchCache));\n }\n\n if (fetchCache === \"force-cache\") hasForceCache = true;\n if (fetchCache === \"force-no-store\") hasForceNoStore = true;\n if (fetchCache === \"only-cache\") hasOnlyCache = true;\n if (fetchCache === \"only-no-store\") hasOnlyNoStore = true;\n\n const hasCacheEnforcer = hasForceCache || hasOnlyCache;\n const hasNoStoreEnforcer = hasForceNoStore || hasOnlyNoStore;\n if (hasCacheEnforcer && hasNoStoreEnforcer) {\n throw new Error(describeFetchCacheConflict(fetchCache));\n }\n\n if (fetchCache === \"default-no-store\") {\n hasParentDefaultNoStore = true;\n }\n\n if (hasForceCache) {\n config.fetchCache = \"force-cache\";\n } else if (hasForceNoStore) {\n config.fetchCache = \"force-no-store\";\n } else if (hasOnlyCache) {\n config.fetchCache = \"only-cache\";\n } else if (hasOnlyNoStore) {\n config.fetchCache = \"only-no-store\";\n } else {\n config.fetchCache = fetchCache;\n }\n }\n\n config.revalidateSeconds = resolveRevalidateSeconds(\n config.revalidateSeconds,\n segment.revalidate,\n );\n }\n\n if (config.dynamicConfig === \"force-dynamic\") {\n config.revalidateSeconds = 0;\n }\n\n // Top-level dynamic modes supply fetchCache defaults unless a segment does.\n if (config.fetchCache === undefined) {\n if (config.dynamicConfig === \"force-dynamic\") {\n config.fetchCache = \"force-no-store\";\n } else if (config.dynamicConfig === \"error\") {\n config.fetchCache = \"only-cache\";\n }\n }\n\n // Static-only dynamic modes change the default, but explicit dynamicParams wins.\n if (\n config.dynamicParamsConfig === undefined &&\n (config.dynamicConfig === \"error\" || config.dynamicConfig === \"force-static\")\n ) {\n config.dynamicParamsConfig = false;\n }\n\n return config;\n}\n\nexport function resolveAppPageFetchCacheMode(\n options: ResolveAppPageSegmentConfigOptions,\n): FetchCacheMode | null {\n return resolveAppPageSegmentConfig(options).fetchCache ?? null;\n}\n"],"mappings":";AAuBA,MAAM,iBAAiB,IAAI,IAAa;CAAC;CAAQ;CAAS;CAAiB;CAAe,CAAC;AAC3F,MAAM,qBAAqB,IAAI,IAAa;CAC1C;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAS,sBAAsB,OAAiD;AAC9E,QAAO,eAAe,IAAI,MAAM;;AAGlC,SAAS,yBAAyB,OAAyC;AACzE,QAAO,mBAAmB,IAAI,MAAM;;AAGtC,SAAS,yBAAyB,SAAwB,OAA+B;AAIvF,KAAI,OAAO,UAAU,SACnB,QAAO;AAGT,KAAI,YAAY,KACd,QAAO;AAGT,QAAO,QAAQ,UAAU,QAAQ;;AAGnC,SAAS,sBAAsB,OAAgC;AAC7D,QAAO,UAAU,mBAAmB,UAAU,iBAAiB,UAAU;;AAG3E,SAAS,2BAA2B,OAA+B;AACjE,QAAO,sEAAsE,MAAM;;;;;;;;;;AAWrF,SAAgB,4BACd,SAC+B;CAC/B,MAAM,WAAW,CAAC,GAAI,QAAQ,WAAW,EAAE,EAAG,QAAQ,KAAK;CAM3D,MAAM,SAAwC,EAC5C,mBAAmB,MACpB;CACD,IAAI,gBAAgB;CACpB,IAAI,kBAAkB;CACtB,IAAI,eAAe;CACnB,IAAI,iBAAiB;CACrB,IAAI,0BAA0B;AAE9B,MAAK,MAAM,WAAW,UAAU;AAC9B,MAAI,CAAC,QAAS;AAEd,MAAI,sBAAsB,QAAQ,QAAQ,CACxC,QAAO,gBAAgB,QAAQ;AAGjC,MAAI,QAAQ,kBAAkB,MAC5B,QAAO,sBAAsB;WACpB,QAAQ,kBAAkB,QAAQ,OAAO,wBAAwB,MAC1E,QAAO,sBAAsB;AAG/B,MAAI,yBAAyB,QAAQ,WAAW,EAAE;GAChD,MAAM,aAAa,QAAQ;AAE3B,OAAI,4BAA4B,eAAe,UAAU,sBAAsB,WAAW,EACxF,OAAM,IAAI,MAAM,2BAA2B,WAAW,CAAC;AAGzD,OAAI,eAAe,cAAe,iBAAgB;AAClD,OAAI,eAAe,iBAAkB,mBAAkB;AACvD,OAAI,eAAe,aAAc,gBAAe;AAChD,OAAI,eAAe,gBAAiB,kBAAiB;AAIrD,QAFyB,iBAAiB,kBACf,mBAAmB,gBAE5C,OAAM,IAAI,MAAM,2BAA2B,WAAW,CAAC;AAGzD,OAAI,eAAe,mBACjB,2BAA0B;AAG5B,OAAI,cACF,QAAO,aAAa;YACX,gBACT,QAAO,aAAa;YACX,aACT,QAAO,aAAa;YACX,eACT,QAAO,aAAa;OAEpB,QAAO,aAAa;;AAIxB,SAAO,oBAAoB,yBACzB,OAAO,mBACP,QAAQ,WACT;;AAGH,KAAI,OAAO,kBAAkB,gBAC3B,QAAO,oBAAoB;AAI7B,KAAI,OAAO,eAAe,KAAA;MACpB,OAAO,kBAAkB,gBAC3B,QAAO,aAAa;WACX,OAAO,kBAAkB,QAClC,QAAO,aAAa;;AAKxB,KACE,OAAO,wBAAwB,KAAA,MAC9B,OAAO,kBAAkB,WAAW,OAAO,kBAAkB,gBAE9D,QAAO,sBAAsB;AAG/B,QAAO;;AAGT,SAAgB,6BACd,SACuB;AACvB,QAAO,4BAA4B,QAAQ,CAAC,cAAc"}
@@ -1,6 +1,8 @@
1
+ import { FetchCacheMode } from "../shims/fetch-cache.js";
1
2
  import { HeadersAccessPhase } from "../shims/headers.js";
2
3
 
3
4
  //#region src/server/app-server-action-execution.d.ts
5
+ type AppPageParams = Record<string, string | string[]>;
4
6
  type AppServerActionErrorReporter = (error: Error, request: {
5
7
  path: string;
6
8
  method: string;
@@ -12,6 +14,48 @@ type AppServerActionErrorReporter = (error: Error, request: {
12
14
  }) => void;
13
15
  type AppServerActionDecoder = (body: FormData) => Promise<unknown>;
14
16
  type ReadFormDataWithLimit = (request: Request, maxBytes: number) => Promise<FormData>;
17
+ type ReadBodyWithLimit = (request: Request, maxBytes: number) => Promise<string>;
18
+ type AppServerActionReturnValue = {
19
+ data: unknown;
20
+ ok: true;
21
+ } | {
22
+ data: unknown;
23
+ ok: false;
24
+ };
25
+ type AppServerActionRoute = {
26
+ pattern: string;
27
+ };
28
+ type AppServerActionMatch<TRoute extends AppServerActionRoute> = {
29
+ params: AppPageParams;
30
+ route: TRoute;
31
+ };
32
+ type AppServerActionIntercept<TPage = unknown> = {
33
+ matchedParams: AppPageParams;
34
+ page: TPage;
35
+ slotKey: string;
36
+ sourceRouteIndex: number;
37
+ };
38
+ type BuildServerActionPageElementOptions<TRoute extends AppServerActionRoute, TInterceptOpts> = {
39
+ cleanPathname: string;
40
+ interceptOpts: TInterceptOpts | undefined;
41
+ isRscRequest: boolean;
42
+ mountedSlotsHeader: string | null;
43
+ params: AppPageParams;
44
+ request: Request;
45
+ route: TRoute;
46
+ searchParams: URLSearchParams;
47
+ };
48
+ type AppServerActionRscModel<TElement> = {
49
+ returnValue: AppServerActionReturnValue;
50
+ root: TElement;
51
+ };
52
+ type RenderServerActionRscStreamOptions<TTemporaryReferences> = {
53
+ onError: (error: unknown) => unknown;
54
+ temporaryReferences: TTemporaryReferences;
55
+ };
56
+ type DecodeServerActionReplyOptions<TTemporaryReferences> = {
57
+ temporaryReferences: TTemporaryReferences;
58
+ };
15
59
  type HandleProgressiveServerActionRequestOptions = {
16
60
  actionId: string | null;
17
61
  allowedOrigins: string[];
@@ -28,8 +72,51 @@ type HandleProgressiveServerActionRequestOptions = {
28
72
  request: Request;
29
73
  setHeadersAccessPhase: (phase: HeadersAccessPhase) => HeadersAccessPhase;
30
74
  };
75
+ type HandleServerActionRscRequestOptions<TElement, TRoute extends AppServerActionRoute, TInterceptOpts, TTemporaryReferences, TPage = unknown> = {
76
+ actionId: string | null;
77
+ allowedOrigins: string[];
78
+ buildPageElement: (options: BuildServerActionPageElementOptions<TRoute, TInterceptOpts>) => TElement;
79
+ cleanPathname: string;
80
+ clearRequestContext: () => void;
81
+ contentType: string;
82
+ createNotFoundElement: (routeId: string) => TElement;
83
+ createPayloadRouteId: (pathname: string, interceptionContext: string | null) => string;
84
+ createRscOnErrorHandler: (request: Request, pathname: string, pattern: string) => (error: unknown) => unknown;
85
+ createTemporaryReferenceSet: () => TTemporaryReferences;
86
+ decodeReply: (body: string | FormData, options: DecodeServerActionReplyOptions<TTemporaryReferences>) => Promise<unknown[]> | unknown[];
87
+ findIntercept: (pathname: string) => AppServerActionIntercept<TPage> | null;
88
+ getAndClearPendingCookies: () => string[];
89
+ getDraftModeCookieHeader: () => string | null | undefined;
90
+ getRouteParamNames: (route: TRoute) => readonly string[];
91
+ getSourceRoute: (sourceRouteIndex: number) => TRoute | undefined;
92
+ isRscRequest: boolean;
93
+ loadServerAction: (actionId: string) => Promise<unknown>;
94
+ matchRoute: (pathname: string) => AppServerActionMatch<TRoute> | null;
95
+ maxActionBodySize: number;
96
+ middlewareHeaders: Headers | null;
97
+ middlewareStatus: number | null | undefined;
98
+ mountedSlotsHeader: string | null;
99
+ readBodyWithLimit: ReadBodyWithLimit;
100
+ readFormDataWithLimit: ReadFormDataWithLimit;
101
+ renderToReadableStream: (model: AppServerActionRscModel<TElement>, options: RenderServerActionRscStreamOptions<TTemporaryReferences>) => BodyInit | null | Promise<BodyInit | null>;
102
+ reportRequestError: AppServerActionErrorReporter;
103
+ resolveRouteFetchCacheMode?: (route: TRoute) => FetchCacheMode | null;
104
+ request: Request;
105
+ sanitizeErrorForClient: (error: unknown) => unknown;
106
+ searchParams: URLSearchParams;
107
+ setHeadersAccessPhase: (phase: HeadersAccessPhase) => HeadersAccessPhase;
108
+ setNavigationContext: (context: {
109
+ params: AppPageParams;
110
+ pathname: string;
111
+ searchParams: URLSearchParams;
112
+ }) => void;
113
+ toInterceptOpts: (intercept: AppServerActionIntercept<TPage>) => TInterceptOpts;
114
+ };
115
+ declare function readActionBodyWithLimit(request: Request, maxBytes: number): Promise<string>;
116
+ declare function readActionFormDataWithLimit(request: Request, maxBytes: number): Promise<FormData>;
31
117
  declare function isProgressiveServerActionRequest(request: Pick<Request, "method">, contentType: string, actionId: string | null): boolean;
32
118
  declare function handleProgressiveServerActionRequest(options: HandleProgressiveServerActionRequestOptions): Promise<Response | null>;
119
+ declare function handleServerActionRscRequest<TElement, TRoute extends AppServerActionRoute, TInterceptOpts, TTemporaryReferences, TPage = unknown>(options: HandleServerActionRscRequestOptions<TElement, TRoute, TInterceptOpts, TTemporaryReferences, TPage>): Promise<Response | null>;
33
120
  //#endregion
34
- export { HandleProgressiveServerActionRequestOptions, handleProgressiveServerActionRequest, isProgressiveServerActionRequest };
121
+ export { HandleProgressiveServerActionRequestOptions, HandleServerActionRscRequestOptions, handleProgressiveServerActionRequest, handleServerActionRscRequest, isProgressiveServerActionRequest, readActionBodyWithLimit, readActionFormDataWithLimit };
35
122
  //# sourceMappingURL=app-server-action-execution.d.ts.map