vinext 0.0.46 → 0.0.48

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 (351) hide show
  1. package/README.md +8 -6
  2. package/dist/build/layout-classification.js +3 -1
  3. package/dist/build/layout-classification.js.map +1 -1
  4. package/dist/build/prerender.d.ts +2 -1
  5. package/dist/build/prerender.js +80 -24
  6. package/dist/build/prerender.js.map +1 -1
  7. package/dist/build/report.d.ts +9 -5
  8. package/dist/build/report.js +17 -7
  9. package/dist/build/report.js.map +1 -1
  10. package/dist/build/route-classification-injector.d.ts +35 -0
  11. package/dist/build/route-classification-injector.js +61 -0
  12. package/dist/build/route-classification-injector.js.map +1 -0
  13. package/dist/build/route-classification-manifest.d.ts +1 -1
  14. package/dist/build/run-prerender.d.ts +5 -0
  15. package/dist/build/run-prerender.js +4 -1
  16. package/dist/build/run-prerender.js.map +1 -1
  17. package/dist/build/server-manifest.js +2 -7
  18. package/dist/build/server-manifest.js.map +1 -1
  19. package/dist/build/standalone.js +3 -5
  20. package/dist/build/standalone.js.map +1 -1
  21. package/dist/build/static-export.d.ts +1 -1
  22. package/dist/check.js +45 -29
  23. package/dist/check.js.map +1 -1
  24. package/dist/cli-args.d.ts +33 -0
  25. package/dist/cli-args.js +121 -0
  26. package/dist/cli-args.js.map +1 -0
  27. package/dist/cli.js +11 -20
  28. package/dist/cli.js.map +1 -1
  29. package/dist/cloudflare/kv-cache-handler.js +29 -9
  30. package/dist/cloudflare/kv-cache-handler.js.map +1 -1
  31. package/dist/config/config-matchers.js +46 -37
  32. package/dist/config/config-matchers.js.map +1 -1
  33. package/dist/config/next-config.d.ts +4 -2
  34. package/dist/config/next-config.js +3 -0
  35. package/dist/config/next-config.js.map +1 -1
  36. package/dist/deploy.d.ts +18 -2
  37. package/dist/deploy.js +47 -4
  38. package/dist/deploy.js.map +1 -1
  39. package/dist/entries/app-rsc-entry.d.ts +4 -3
  40. package/dist/entries/app-rsc-entry.js +379 -858
  41. package/dist/entries/app-rsc-entry.js.map +1 -1
  42. package/dist/entries/app-rsc-manifest.d.ts +1 -1
  43. package/dist/entries/app-rsc-manifest.js +6 -1
  44. package/dist/entries/app-rsc-manifest.js.map +1 -1
  45. package/dist/entries/pages-client-entry.js +3 -2
  46. package/dist/entries/pages-client-entry.js.map +1 -1
  47. package/dist/entries/pages-server-entry.js +19 -61
  48. package/dist/entries/pages-server-entry.js.map +1 -1
  49. package/dist/entries/runtime-entry-module.d.ts +12 -3
  50. package/dist/entries/runtime-entry-module.js +15 -4
  51. package/dist/entries/runtime-entry-module.js.map +1 -1
  52. package/dist/index.js +40 -58
  53. package/dist/index.js.map +1 -1
  54. package/dist/plugins/fonts.js +54 -32
  55. package/dist/plugins/fonts.js.map +1 -1
  56. package/dist/plugins/og-assets.js +15 -16
  57. package/dist/plugins/og-assets.js.map +1 -1
  58. package/dist/plugins/rsc-client-shim-excludes.d.ts +2 -1
  59. package/dist/plugins/rsc-client-shim-excludes.js +11 -1
  60. package/dist/plugins/rsc-client-shim-excludes.js.map +1 -1
  61. package/dist/routing/app-route-graph.d.ts +195 -0
  62. package/dist/routing/app-route-graph.js +1022 -0
  63. package/dist/routing/app-route-graph.js.map +1 -0
  64. package/dist/routing/app-router.d.ts +14 -88
  65. package/dist/routing/app-router.js +21 -712
  66. package/dist/routing/app-router.js.map +1 -1
  67. package/dist/routing/file-matcher.d.ts +3 -1
  68. package/dist/routing/file-matcher.js +6 -1
  69. package/dist/routing/file-matcher.js.map +1 -1
  70. package/dist/routing/pages-router.js +10 -19
  71. package/dist/routing/pages-router.js.map +1 -1
  72. package/dist/routing/route-matching.d.ts +28 -0
  73. package/dist/routing/route-matching.js +44 -0
  74. package/dist/routing/route-matching.js.map +1 -0
  75. package/dist/routing/route-pattern.js +4 -1
  76. package/dist/routing/route-pattern.js.map +1 -1
  77. package/dist/routing/route-trie.d.ts +8 -0
  78. package/dist/routing/route-trie.js +12 -1
  79. package/dist/routing/route-trie.js.map +1 -1
  80. package/dist/routing/route-validation.js +3 -4
  81. package/dist/routing/route-validation.js.map +1 -1
  82. package/dist/routing/utils.d.ts +8 -1
  83. package/dist/routing/utils.js +25 -2
  84. package/dist/routing/utils.js.map +1 -1
  85. package/dist/server/app-browser-entry.js +145 -294
  86. package/dist/server/app-browser-entry.js.map +1 -1
  87. package/dist/server/app-browser-error.d.ts +3 -4
  88. package/dist/server/app-browser-error.js +8 -4
  89. package/dist/server/app-browser-error.js.map +1 -1
  90. package/dist/server/app-browser-navigation-controller.d.ts +75 -0
  91. package/dist/server/app-browser-navigation-controller.js +290 -0
  92. package/dist/server/app-browser-navigation-controller.js.map +1 -0
  93. package/dist/server/app-browser-state.d.ts +33 -15
  94. package/dist/server/app-browser-state.js +52 -59
  95. package/dist/server/app-browser-state.js.map +1 -1
  96. package/dist/server/app-browser-visible-commit.d.ts +68 -0
  97. package/dist/server/app-browser-visible-commit.js +182 -0
  98. package/dist/server/app-browser-visible-commit.js.map +1 -0
  99. package/dist/server/app-client-reference-preloader.d.ts +15 -0
  100. package/dist/server/app-client-reference-preloader.js +46 -0
  101. package/dist/server/app-client-reference-preloader.js.map +1 -0
  102. package/dist/server/app-elements-wire.d.ts +130 -0
  103. package/dist/server/app-elements-wire.js +205 -0
  104. package/dist/server/app-elements-wire.js.map +1 -0
  105. package/dist/server/app-elements.d.ts +2 -84
  106. package/dist/server/app-elements.js +4 -107
  107. package/dist/server/app-elements.js.map +1 -1
  108. package/dist/server/app-fallback-renderer.d.ts +57 -0
  109. package/dist/server/app-fallback-renderer.js +79 -0
  110. package/dist/server/app-fallback-renderer.js.map +1 -0
  111. package/dist/server/app-hook-warning-suppression.d.ts +7 -0
  112. package/dist/server/app-hook-warning-suppression.js +12 -0
  113. package/dist/server/app-hook-warning-suppression.js.map +1 -0
  114. package/dist/server/app-middleware.d.ts +2 -1
  115. package/dist/server/app-middleware.js +34 -11
  116. package/dist/server/app-middleware.js.map +1 -1
  117. package/dist/server/app-mounted-slots-header.d.ts +17 -0
  118. package/dist/server/app-mounted-slots-header.js +21 -0
  119. package/dist/server/app-mounted-slots-header.js.map +1 -0
  120. package/dist/server/app-page-boundary-render.d.ts +3 -3
  121. package/dist/server/app-page-boundary-render.js +8 -5
  122. package/dist/server/app-page-boundary-render.js.map +1 -1
  123. package/dist/server/app-page-boundary.js +2 -1
  124. package/dist/server/app-page-boundary.js.map +1 -1
  125. package/dist/server/app-page-cache.d.ts +19 -4
  126. package/dist/server/app-page-cache.js +60 -22
  127. package/dist/server/app-page-cache.js.map +1 -1
  128. package/dist/server/app-page-dispatch.d.ts +9 -5
  129. package/dist/server/app-page-dispatch.js +41 -17
  130. package/dist/server/app-page-dispatch.js.map +1 -1
  131. package/dist/server/app-page-element-builder.d.ts +61 -0
  132. package/dist/server/app-page-element-builder.js +142 -0
  133. package/dist/server/app-page-element-builder.js.map +1 -0
  134. package/dist/server/app-page-execution.d.ts +23 -5
  135. package/dist/server/app-page-execution.js +39 -24
  136. package/dist/server/app-page-execution.js.map +1 -1
  137. package/dist/server/app-page-head.js +2 -1
  138. package/dist/server/app-page-head.js.map +1 -1
  139. package/dist/server/app-page-method.js +2 -5
  140. package/dist/server/app-page-method.js.map +1 -1
  141. package/dist/server/app-page-params.d.ts +2 -1
  142. package/dist/server/app-page-params.js +3 -3
  143. package/dist/server/app-page-params.js.map +1 -1
  144. package/dist/server/app-page-probe.d.ts +1 -1
  145. package/dist/server/app-page-probe.js +5 -1
  146. package/dist/server/app-page-probe.js.map +1 -1
  147. package/dist/server/app-page-render.d.ts +6 -2
  148. package/dist/server/app-page-render.js +118 -30
  149. package/dist/server/app-page-render.js.map +1 -1
  150. package/dist/server/app-page-request.d.ts +19 -5
  151. package/dist/server/app-page-request.js +49 -7
  152. package/dist/server/app-page-request.js.map +1 -1
  153. package/dist/server/app-page-response.d.ts +1 -0
  154. package/dist/server/app-page-response.js +6 -9
  155. package/dist/server/app-page-response.js.map +1 -1
  156. package/dist/server/app-page-route-wiring.d.ts +20 -4
  157. package/dist/server/app-page-route-wiring.js +15 -12
  158. package/dist/server/app-page-route-wiring.js.map +1 -1
  159. package/dist/server/app-page-stream.d.ts +7 -0
  160. package/dist/server/app-page-stream.js +9 -2
  161. package/dist/server/app-page-stream.js.map +1 -1
  162. package/dist/server/app-post-middleware-context.d.ts +16 -0
  163. package/dist/server/app-post-middleware-context.js +28 -0
  164. package/dist/server/app-post-middleware-context.js.map +1 -0
  165. package/dist/server/app-prerender-endpoints.js +3 -2
  166. package/dist/server/app-prerender-endpoints.js.map +1 -1
  167. package/dist/server/app-request-context.d.ts +22 -0
  168. package/dist/server/app-request-context.js +30 -0
  169. package/dist/server/app-request-context.js.map +1 -0
  170. package/dist/server/app-route-handler-cache.d.ts +1 -0
  171. package/dist/server/app-route-handler-cache.js +7 -2
  172. package/dist/server/app-route-handler-cache.js.map +1 -1
  173. package/dist/server/app-route-handler-dispatch.d.ts +1 -0
  174. package/dist/server/app-route-handler-dispatch.js +8 -5
  175. package/dist/server/app-route-handler-dispatch.js.map +1 -1
  176. package/dist/server/app-route-handler-execution.d.ts +2 -1
  177. package/dist/server/app-route-handler-execution.js +2 -2
  178. package/dist/server/app-route-handler-execution.js.map +1 -1
  179. package/dist/server/app-route-handler-policy.js +13 -13
  180. package/dist/server/app-route-handler-policy.js.map +1 -1
  181. package/dist/server/app-route-handler-response.d.ts +4 -2
  182. package/dist/server/app-route-handler-response.js +9 -7
  183. package/dist/server/app-route-handler-response.js.map +1 -1
  184. package/dist/server/app-route-handler-runtime.d.ts +9 -1
  185. package/dist/server/app-route-handler-runtime.js +11 -1
  186. package/dist/server/app-route-handler-runtime.js.map +1 -1
  187. package/dist/server/app-router-entry.js +9 -4
  188. package/dist/server/app-router-entry.js.map +1 -1
  189. package/dist/server/app-rsc-cache-busting.d.ts +34 -0
  190. package/dist/server/app-rsc-cache-busting.js +137 -0
  191. package/dist/server/app-rsc-cache-busting.js.map +1 -0
  192. package/dist/server/app-rsc-error-handler.d.ts +21 -0
  193. package/dist/server/app-rsc-error-handler.js +30 -0
  194. package/dist/server/app-rsc-error-handler.js.map +1 -0
  195. package/dist/server/app-rsc-handler.d.ts +117 -0
  196. package/dist/server/app-rsc-handler.js +271 -0
  197. package/dist/server/app-rsc-handler.js.map +1 -0
  198. package/dist/server/app-rsc-request-normalization.d.ts +42 -0
  199. package/dist/server/app-rsc-request-normalization.js +67 -0
  200. package/dist/server/app-rsc-request-normalization.js.map +1 -0
  201. package/dist/server/app-rsc-response-finalizer.d.ts +30 -0
  202. package/dist/server/app-rsc-response-finalizer.js +38 -0
  203. package/dist/server/app-rsc-response-finalizer.js.map +1 -0
  204. package/dist/server/app-rsc-route-matching.js +8 -4
  205. package/dist/server/app-rsc-route-matching.js.map +1 -1
  206. package/dist/server/app-segment-config.d.ts +33 -0
  207. package/dist/server/app-segment-config.js +90 -0
  208. package/dist/server/app-segment-config.js.map +1 -0
  209. package/dist/server/app-server-action-execution.d.ts +2 -0
  210. package/dist/server/app-server-action-execution.js +45 -51
  211. package/dist/server/app-server-action-execution.js.map +1 -1
  212. package/dist/server/app-ssr-entry.js +21 -20
  213. package/dist/server/app-ssr-entry.js.map +1 -1
  214. package/dist/server/artifact-compatibility.d.ts +44 -0
  215. package/dist/server/artifact-compatibility.js +82 -0
  216. package/dist/server/artifact-compatibility.js.map +1 -0
  217. package/dist/server/cache-control.d.ts +24 -0
  218. package/dist/server/cache-control.js +33 -0
  219. package/dist/server/cache-control.js.map +1 -0
  220. package/dist/server/cache-proof.d.ts +200 -0
  221. package/dist/server/cache-proof.js +342 -0
  222. package/dist/server/cache-proof.js.map +1 -0
  223. package/dist/server/dev-error-overlay-store.d.ts +23 -0
  224. package/dist/server/dev-error-overlay-store.js +67 -0
  225. package/dist/server/dev-error-overlay-store.js.map +1 -0
  226. package/dist/server/dev-error-overlay.d.ts +15 -0
  227. package/dist/server/dev-error-overlay.js +548 -0
  228. package/dist/server/dev-error-overlay.js.map +1 -0
  229. package/dist/server/dev-origin-check.js +8 -4
  230. package/dist/server/dev-origin-check.js.map +1 -1
  231. package/dist/server/dev-server.js +1 -6
  232. package/dist/server/dev-server.js.map +1 -1
  233. package/dist/server/http-error-responses.d.ts +67 -0
  234. package/dist/server/http-error-responses.js +77 -0
  235. package/dist/server/http-error-responses.js.map +1 -0
  236. package/dist/server/image-optimization.js +2 -1
  237. package/dist/server/image-optimization.js.map +1 -1
  238. package/dist/server/instrumentation-runtime.d.ts +44 -0
  239. package/dist/server/instrumentation-runtime.js +29 -0
  240. package/dist/server/instrumentation-runtime.js.map +1 -0
  241. package/dist/server/isr-cache.d.ts +2 -7
  242. package/dist/server/isr-cache.js +7 -10
  243. package/dist/server/isr-cache.js.map +1 -1
  244. package/dist/server/metadata-route-response.js +6 -5
  245. package/dist/server/metadata-route-response.js.map +1 -1
  246. package/dist/server/metadata-routes.d.ts +1 -0
  247. package/dist/server/metadata-routes.js +6 -0
  248. package/dist/server/metadata-routes.js.map +1 -1
  249. package/dist/server/middleware-matcher.js +2 -2
  250. package/dist/server/middleware-matcher.js.map +1 -1
  251. package/dist/server/middleware-response-headers.js +21 -0
  252. package/dist/server/middleware-response-headers.js.map +1 -1
  253. package/dist/server/middleware-runtime.js +3 -3
  254. package/dist/server/middleware-runtime.js.map +1 -1
  255. package/dist/server/navigation-trace.d.ts +33 -0
  256. package/dist/server/navigation-trace.js +35 -0
  257. package/dist/server/navigation-trace.js.map +1 -0
  258. package/dist/server/next-error-digest.d.ts +44 -0
  259. package/dist/server/next-error-digest.js +40 -0
  260. package/dist/server/next-error-digest.js.map +1 -0
  261. package/dist/server/pages-api-route.js +2 -1
  262. package/dist/server/pages-api-route.js.map +1 -1
  263. package/dist/server/pages-node-compat.js +4 -16
  264. package/dist/server/pages-node-compat.js.map +1 -1
  265. package/dist/server/pages-page-data.d.ts +2 -1
  266. package/dist/server/pages-page-data.js +6 -5
  267. package/dist/server/pages-page-data.js.map +1 -1
  268. package/dist/server/pages-page-response.d.ts +3 -8
  269. package/dist/server/pages-page-response.js +46 -15
  270. package/dist/server/pages-page-response.js.map +1 -1
  271. package/dist/server/prod-server.d.ts +6 -0
  272. package/dist/server/prod-server.js +28 -21
  273. package/dist/server/prod-server.js.map +1 -1
  274. package/dist/server/request-pipeline.d.ts +42 -1
  275. package/dist/server/request-pipeline.js +97 -17
  276. package/dist/server/request-pipeline.js.map +1 -1
  277. package/dist/server/rsc-stream-hints.d.ts +3 -1
  278. package/dist/server/rsc-stream-hints.js +4 -1
  279. package/dist/server/rsc-stream-hints.js.map +1 -1
  280. package/dist/server/seed-cache.js +19 -8
  281. package/dist/server/seed-cache.js.map +1 -1
  282. package/dist/shims/cache-runtime.d.ts +2 -2
  283. package/dist/shims/cache-runtime.js +31 -17
  284. package/dist/shims/cache-runtime.js.map +1 -1
  285. package/dist/shims/cache.d.ts +15 -3
  286. package/dist/shims/cache.js +45 -20
  287. package/dist/shims/cache.js.map +1 -1
  288. package/dist/shims/error-boundary.d.ts +17 -1
  289. package/dist/shims/error-boundary.js +31 -1
  290. package/dist/shims/error-boundary.js.map +1 -1
  291. package/dist/shims/fetch-cache.d.ts +4 -1
  292. package/dist/shims/fetch-cache.js +57 -16
  293. package/dist/shims/fetch-cache.js.map +1 -1
  294. package/dist/shims/head-state.js +2 -3
  295. package/dist/shims/head-state.js.map +1 -1
  296. package/dist/shims/headers.js +4 -44
  297. package/dist/shims/headers.js.map +1 -1
  298. package/dist/shims/i18n-state.js +2 -3
  299. package/dist/shims/i18n-state.js.map +1 -1
  300. package/dist/shims/image.js +93 -5
  301. package/dist/shims/image.js.map +1 -1
  302. package/dist/shims/internal/als-registry.d.ts +15 -0
  303. package/dist/shims/internal/als-registry.js +55 -0
  304. package/dist/shims/internal/als-registry.js.map +1 -0
  305. package/dist/shims/internal/cookie-serialize.d.ts +46 -0
  306. package/dist/shims/internal/cookie-serialize.js +51 -0
  307. package/dist/shims/internal/cookie-serialize.js.map +1 -0
  308. package/dist/shims/link.js +31 -26
  309. package/dist/shims/link.js.map +1 -1
  310. package/dist/shims/metadata.d.ts +26 -1
  311. package/dist/shims/metadata.js +94 -4
  312. package/dist/shims/metadata.js.map +1 -1
  313. package/dist/shims/navigation-state.js +2 -3
  314. package/dist/shims/navigation-state.js.map +1 -1
  315. package/dist/shims/navigation.d.ts +2 -7
  316. package/dist/shims/navigation.js +44 -36
  317. package/dist/shims/navigation.js.map +1 -1
  318. package/dist/shims/request-context.js +2 -4
  319. package/dist/shims/request-context.js.map +1 -1
  320. package/dist/shims/request-state-types.d.ts +1 -1
  321. package/dist/shims/router-state.js +2 -3
  322. package/dist/shims/router-state.js.map +1 -1
  323. package/dist/shims/router.js +2 -2
  324. package/dist/shims/router.js.map +1 -1
  325. package/dist/shims/server.js +5 -30
  326. package/dist/shims/server.js.map +1 -1
  327. package/dist/shims/slot.d.ts +1 -1
  328. package/dist/shims/slot.js +5 -4
  329. package/dist/shims/slot.js.map +1 -1
  330. package/dist/shims/thenable-params.d.ts +5 -2
  331. package/dist/shims/thenable-params.js +26 -6
  332. package/dist/shims/thenable-params.js.map +1 -1
  333. package/dist/shims/unified-request-context.d.ts +1 -1
  334. package/dist/shims/unified-request-context.js +3 -14
  335. package/dist/shims/unified-request-context.js.map +1 -1
  336. package/dist/shims/use-merged-ref.d.ts +7 -0
  337. package/dist/shims/use-merged-ref.js +40 -0
  338. package/dist/shims/use-merged-ref.js.map +1 -0
  339. package/dist/utils/base-path.d.ts +7 -1
  340. package/dist/utils/base-path.js +12 -1
  341. package/dist/utils/base-path.js.map +1 -1
  342. package/dist/utils/cache-control-metadata.d.ts +6 -0
  343. package/dist/utils/cache-control-metadata.js +16 -0
  344. package/dist/utils/cache-control-metadata.js.map +1 -0
  345. package/dist/utils/safe-json-file.d.ts +18 -0
  346. package/dist/utils/safe-json-file.js +25 -0
  347. package/dist/utils/safe-json-file.js.map +1 -0
  348. package/dist/utils/text-stream.d.ts +29 -0
  349. package/dist/utils/text-stream.js +66 -0
  350. package/dist/utils/text-stream.js.map +1 -0
  351. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"app-rsc-entry.js","names":[],"sources":["../../src/entries/app-rsc-entry.ts"],"sourcesContent":["/**\n * App Router RSC entry generator.\n *\n * Generates the virtual RSC entry module for the App Router.\n * The RSC entry does route matching and renders the component tree,\n * then delegates to the SSR entry for HTML generation.\n *\n * Previously housed in server/app-dev-server.ts.\n */\nimport { buildAppRscManifestCode } from \"./app-rsc-manifest.js\";\nimport { resolveEntryPath } from \"./runtime-entry-module.js\";\nimport type {\n NextHeader,\n NextI18nConfig,\n NextRedirect,\n NextRewrite,\n} from \"../config/next-config.js\";\nimport type { AppRoute } from \"../routing/app-router.js\";\nimport { generateDevOriginCheckCode } from \"../server/dev-origin-check.js\";\nimport type { MetadataFileRoute } from \"../server/metadata-routes.js\";\nimport { isProxyFile } from \"../server/middleware.js\";\n\n// Pre-computed absolute paths for generated-code imports. The virtual RSC\n// entry can't use relative imports (it has no real file location), so we\n// resolve these at code-generation time and embed them as absolute paths.\nconst configMatchersPath = resolveEntryPath(\"../config/config-matchers.js\", import.meta.url);\nconst requestPipelinePath = resolveEntryPath(\"../server/request-pipeline.js\", import.meta.url);\nconst appMiddlewarePath = resolveEntryPath(\"../server/app-middleware.js\", import.meta.url);\nconst middlewareRequestHeadersPath = resolveEntryPath(\n \"../server/middleware-request-headers.js\",\n import.meta.url,\n);\nconst requestContextShimPath = resolveEntryPath(\"../shims/request-context.js\", import.meta.url);\nconst normalizePathModulePath = resolveEntryPath(\"../server/normalize-path.js\", import.meta.url);\nconst routingUtilsPath = resolveEntryPath(\"../routing/utils.js\", import.meta.url);\nconst appRouteHandlerDispatchPath = resolveEntryPath(\n \"../server/app-route-handler-dispatch.js\",\n import.meta.url,\n);\nconst appServerActionExecutionPath = resolveEntryPath(\n \"../server/app-server-action-execution.js\",\n import.meta.url,\n);\nconst appRscErrorsPath = resolveEntryPath(\"../server/app-rsc-errors.js\", import.meta.url);\nconst implicitTagsPath = resolveEntryPath(\"../server/implicit-tags.js\", import.meta.url);\nconst appPageExecutionPath = resolveEntryPath(\"../server/app-page-execution.js\", import.meta.url);\nconst appPageBoundaryRenderPath = resolveEntryPath(\n \"../server/app-page-boundary-render.js\",\n import.meta.url,\n);\nconst appElementsPath = resolveEntryPath(\"../server/app-elements.js\", import.meta.url);\nconst appPageRouteWiringPath = resolveEntryPath(\n \"../server/app-page-route-wiring.js\",\n import.meta.url,\n);\nconst appPageHeadPath = resolveEntryPath(\"../server/app-page-head.js\", import.meta.url);\nconst appPageParamsPath = resolveEntryPath(\"../server/app-page-params.js\", import.meta.url);\nconst appPageResponsePath = resolveEntryPath(\"../server/app-page-response.js\", import.meta.url);\nconst appPageDispatchPath = resolveEntryPath(\"../server/app-page-dispatch.js\", import.meta.url);\nconst cspPath = resolveEntryPath(\"../server/csp.js\", import.meta.url);\nconst appRscRouteMatchingPath = resolveEntryPath(\n \"../server/app-rsc-route-matching.js\",\n import.meta.url,\n);\nconst appPrerenderEndpointsPath = resolveEntryPath(\n \"../server/app-prerender-endpoints.js\",\n import.meta.url,\n);\nconst prerenderWorkUnitSetupPath = resolveEntryPath(\n \"../server/prerender-work-unit-setup.js\",\n import.meta.url,\n);\nconst rscStreamHintsPath = resolveEntryPath(\"../server/rsc-stream-hints.js\", import.meta.url);\nconst isrCachePath = resolveEntryPath(\"../server/isr-cache.js\", import.meta.url);\nconst rootParamsShimPath = resolveEntryPath(\"../shims/root-params.js\", import.meta.url);\nconst thenableParamsShimPath = resolveEntryPath(\"../shims/thenable-params.js\", import.meta.url);\nconst metadataRouteResponsePath = resolveEntryPath(\n \"../server/metadata-route-response.js\",\n import.meta.url,\n);\nconst errorCausePath = resolveEntryPath(\"../utils/error-cause.js\", import.meta.url);\n\n/**\n * Resolved config options relevant to App Router request handling.\n * Passed from the Vite plugin where the full next.config.js is loaded.\n */\nexport type AppRouterConfig = {\n redirects?: NextRedirect[];\n rewrites?: {\n beforeFiles: NextRewrite[];\n afterFiles: NextRewrite[];\n fallback: NextRewrite[];\n };\n headers?: NextHeader[];\n /** Extra origins allowed for server action CSRF checks (from experimental.serverActions.allowedOrigins). */\n allowedOrigins?: string[];\n /** Extra origins allowed for dev server access (from allowedDevOrigins). */\n allowedDevOrigins?: string[];\n /** Body size limit for server actions in bytes (from experimental.serverActions.bodySizeLimit). */\n bodySizeLimit?: number;\n /** Internationalization routing config for middleware matcher locale handling. */\n i18n?: NextI18nConfig | null;\n /**\n * When true, the project has a `pages/` directory alongside the App Router.\n * The generated RSC entry exposes `/__vinext/prerender/pages-static-paths`\n * so `prerenderPages` can call `getStaticPaths` via `wrangler unstable_startWorker`\n * in CF Workers builds. `pageRoutes` is loaded from the SSR environment via\n * `import(\"./ssr/index.js\")`, which re-exports it from\n * `virtual:vinext-server-entry` when this flag is set.\n */\n hasPagesDir?: boolean;\n /** Exact public/ file routes, using normalized leading-slash pathnames. */\n publicFiles?: string[];\n};\n\n/**\n * Generate the virtual RSC entry module.\n *\n * This runs in the `rsc` Vite environment (react-server condition).\n * It matches the incoming request URL to an app route, builds the\n * nested layout + page tree, and renders it to an RSC stream.\n */\nexport function generateRscEntry(\n appDir: string,\n routes: AppRoute[],\n middlewarePath?: string | null,\n metadataRoutes?: MetadataFileRoute[],\n globalErrorPath?: string | null,\n basePath?: string,\n trailingSlash?: boolean,\n config?: AppRouterConfig,\n instrumentationPath?: string | null,\n): string {\n const bp = basePath ?? \"\";\n const ts = trailingSlash ?? false;\n const redirects = config?.redirects ?? [];\n const rewrites = config?.rewrites ?? { beforeFiles: [], afterFiles: [], fallback: [] };\n const headers = config?.headers ?? [];\n const allowedOrigins = config?.allowedOrigins ?? [];\n const bodySizeLimit = config?.bodySizeLimit ?? 1 * 1024 * 1024;\n const i18nConfig = config?.i18n ?? null;\n const hasPagesDir = config?.hasPagesDir ?? false;\n const publicFiles = config?.publicFiles ?? [];\n const manifestCode = buildAppRscManifestCode({ routes, metadataRoutes, globalErrorPath });\n const {\n imports,\n routeEntries,\n metaRouteEntries,\n generateStaticParamsEntries,\n rootNotFoundVar,\n rootForbiddenVar,\n rootUnauthorizedVar,\n rootLayoutVars,\n globalErrorVar,\n } = manifestCode;\n const loadPrerenderPagesRoutesCode = hasPagesDir\n ? `\nasync function __loadPrerenderPagesRoutes() {\n const __gspSsrEntry = await import.meta.viteRsc.loadModule(\"ssr\", \"index\");\n return __gspSsrEntry.pageRoutes;\n}\n`\n : \"\";\n const prerenderPagesLoaderOption = hasPagesDir\n ? \" loadPagesRoutes: __loadPrerenderPagesRoutes,\\n\"\n : \"\";\n\n return `\nimport {\n renderToReadableStream as _renderToReadableStream,\n decodeAction,\n decodeReply,\n loadServerAction,\n createTemporaryReferenceSet,\n} from \"@vitejs/plugin-rsc/rsc\";\nimport { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport {\n normalizeReactFlightPreloadHints as __normalizeReactFlightPreloadHints,\n} from ${JSON.stringify(rscStreamHintsPath)};\n\nfunction renderToReadableStream(model, options) {\n return __normalizeReactFlightPreloadHints(_renderToReadableStream(model, options));\n}\nimport { createElement } from \"react\";\nimport { setNavigationContext as _setNavigationContextOrig, getNavigationContext as _getNavigationContext } from \"next/navigation\";\nimport { setHeadersContext, headersContextFromRequest, getDraftModeCookieHeader, getAndClearPendingCookies, consumeDynamicUsage, consumeInvalidDynamicUsageError, markDynamicUsage, getHeadersContext, setHeadersAccessPhase } from \"next/headers\";\nimport { mergeMetadata, resolveModuleMetadata, mergeViewport, resolveModuleViewport } from \"vinext/metadata\";\n${middlewarePath ? `import * as middlewareModule from ${JSON.stringify(middlewarePath.replace(/\\\\/g, \"/\"))};` : \"\"}\n${instrumentationPath ? `import * as _instrumentation from ${JSON.stringify(instrumentationPath.replace(/\\\\/g, \"/\"))};` : \"\"}\nimport { handleMetadataRouteRequest as __handleMetadataRouteRequest } from ${JSON.stringify(metadataRouteResponsePath)};\nimport { requestContextFromRequest, normalizeHost, matchRedirect, matchRewrite, isExternalUrl, proxyExternalRequest, sanitizeDestination } from ${JSON.stringify(configMatchersPath)};\nimport { decodePathParams as __decodePathParams, normalizePath as __normalizePath } from ${JSON.stringify(normalizePathModulePath)};\nimport { normalizePathnameForRouteMatch as __normalizePathnameForRouteMatch, normalizePathnameForRouteMatchStrict as __normalizePathnameForRouteMatchStrict } from ${JSON.stringify(routingUtilsPath)};\nimport { buildRequestHeadersFromMiddlewareResponse as __buildRequestHeadersFromMiddlewareResponse } from ${JSON.stringify(middlewareRequestHeadersPath)};\nimport { applyConfigHeadersToResponse, resolvePublicFileRoute, validateImageUrl, guardProtocolRelativeUrl, hasBasePath, stripBasePath, normalizeTrailingSlash } from ${JSON.stringify(requestPipelinePath)};\nimport { applyAppMiddleware as __applyAppMiddleware } from ${JSON.stringify(appMiddlewarePath)};\nimport {\n dispatchAppRouteHandler as __dispatchAppRouteHandler,\n} from ${JSON.stringify(appRouteHandlerDispatchPath)};\nimport {\n handleProgressiveServerActionRequest as __handleProgressiveServerActionRequest,\n handleServerActionRscRequest as __handleServerActionRscRequest,\n readActionBodyWithLimit as __readBodyWithLimit,\n readActionFormDataWithLimit as __readFormDataWithLimit,\n} from ${JSON.stringify(appServerActionExecutionPath)};\nimport {\n createRscOnErrorHandler as __createRscOnErrorHandler,\n sanitizeErrorForClient as __sanitizeErrorForClient,\n} from ${JSON.stringify(appRscErrorsPath)};\nimport {\n buildAppPageFontLinkHeader as __buildAppPageFontLinkHeader,\n resolveAppPageSpecialError as __resolveAppPageSpecialError,\n} from ${JSON.stringify(appPageExecutionPath)};\nimport {\n renderAppPageErrorBoundary as __renderAppPageErrorBoundary,\n renderAppPageHttpAccessFallback as __renderAppPageHttpAccessFallback,\n} from ${JSON.stringify(appPageBoundaryRenderPath)};\nimport {\n APP_INTERCEPTION_CONTEXT_KEY as __APP_INTERCEPTION_CONTEXT_KEY,\n createAppPayloadRouteId as __createAppPayloadRouteId,\n} from ${JSON.stringify(appElementsPath)};\nimport {\n buildAppPageElements as __buildAppPageElements,\n createAppPageTreePath as __createAppPageTreePath,\n resolveAppPageChildSegments as __resolveAppPageChildSegments,\n} from ${JSON.stringify(appPageRouteWiringPath)};\nimport {\n resolveAppPageSegmentParams as __resolveAppPageSegmentParams,\n} from ${JSON.stringify(appPageParamsPath)};\nimport {\n collectAppPageSearchParams as __collectAppPageSearchParams,\n resolveActiveParallelRouteHeadInputs as __resolveActiveParallelRouteHeadInputs,\n resolveAppPageHead as __resolveAppPageHead,\n} from ${JSON.stringify(appPageHeadPath)};\nimport {\n mergeMiddlewareResponseHeaders as __mergeMiddlewareResponseHeaders,\n} from ${JSON.stringify(appPageResponsePath)};\nimport {\n dispatchAppPage as __dispatchAppPage,\n} from ${JSON.stringify(appPageDispatchPath)};\nimport { getScriptNonceFromHeaderSources as __getScriptNonceFromHeaderSources } from ${JSON.stringify(cspPath)};\nimport { buildPageCacheTags } from ${JSON.stringify(implicitTagsPath)};\nimport { getRequestExecutionContext as _getRequestExecutionContext } from ${JSON.stringify(requestContextShimPath)};\nimport { setRootParams as __setRootParams, pickRootParams as __pickRootParams } from ${JSON.stringify(rootParamsShimPath)};\nimport { makeThenableParams } from ${JSON.stringify(thenableParamsShimPath)};\nimport { ensureFetchPatch as _ensureFetchPatch, setCurrentFetchSoftTags } from \"vinext/fetch-cache\";\nimport {\n createAppRscRouteMatcher as __createAppRscRouteMatcher,\n} from ${JSON.stringify(appRscRouteMatchingPath)};\nimport {\n handleAppPrerenderEndpoint as __handleAppPrerenderEndpoint,\n} from ${JSON.stringify(appPrerenderEndpointsPath)};\nimport {\n appIsrHtmlKey as __isrHtmlKey,\n appIsrRscKey as __isrRscKey,\n appIsrRouteKey as __isrRouteKey,\n isrGet as __isrGet,\n isrSet as __isrSet,\n normalizeMountedSlotsHeader as __normalizeMountedSlotsHeader,\n triggerBackgroundRegeneration as __triggerBackgroundRegeneration,\n} from ${JSON.stringify(isrCachePath)};\n// Import server-only state module to register ALS-backed accessors.\nimport \"vinext/navigation-state\";\nimport { runWithPrerenderWorkUnit as __runWithPrerenderWorkUnit } from ${JSON.stringify(prerenderWorkUnitSetupPath)};\nimport { runWithRequestContext as _runWithUnifiedCtx, createRequestContext as _createUnifiedCtx } from \"vinext/unified-request-context\";\nimport { reportRequestError as _reportRequestError } from \"vinext/instrumentation\";\nimport { flattenErrorCauses as __flattenErrorCauses } from ${JSON.stringify(errorCausePath)};\nimport { getSSRFontLinks as _getSSRFontLinks, getSSRFontStyles as _getSSRFontStylesGoogle, getSSRFontPreloads as _getSSRFontPreloadsGoogle } from \"next/font/google\";\nimport { getSSRFontStyles as _getSSRFontStylesLocal, getSSRFontPreloads as _getSSRFontPreloadsLocal } from \"next/font/local\";\nfunction _getSSRFontStyles() { return [..._getSSRFontStylesGoogle(), ..._getSSRFontStylesLocal()]; }\nfunction _getSSRFontPreloads() { return [..._getSSRFontPreloadsGoogle(), ..._getSSRFontPreloadsLocal()]; }\n${hasPagesDir ? `// Pages Router routes are loaded lazily from the SSR environment for internal prerender requests.` : \"\"}\n\n// ALS used to suppress the expected \"Invalid hook call\" dev warning when\n// layout/page components are probed outside React's render cycle. Patching\n// console.error once at module load (instead of per-request) avoids the\n// concurrent-request issue where request A's suppression filter could\n// swallow real errors from request B.\nconst _suppressHookWarningAls = new AsyncLocalStorage();\nconst _origConsoleError = console.error;\nconsole.error = (...args) => {\n if (_suppressHookWarningAls.getStore() === true &&\n typeof args[0] === \"string\" &&\n args[0].includes(\"Invalid hook call\")) return;\n _origConsoleError.apply(console, args);\n};\n\n// Set navigation context in the ALS-backed store. \"use client\" components\n// rendered during SSR need the pathname/searchParams/params but the SSR\n// environment has a separate module instance of next/navigation.\n// Use _getNavigationContext() to read the current context — never cache\n// it in a module-level variable (that would leak between concurrent requests).\nfunction setNavigationContext(ctx) {\n _setNavigationContextOrig(ctx);\n if (ctx === null) __setRootParams(null);\n}\n\nfunction __clearRequestContext() {\n setHeadersContext(null);\n setNavigationContext(null);\n // setNavigationContext(null) already clears root params internally\n}\n\n// Note: cache entries are written with \\`headers: undefined\\`. Next.js stores\n// response headers (e.g. set-cookie from cookies().set() during render) in the\n// cache entry so they can be replayed on HIT. We don't do this because:\n// 1. Pages that call cookies().set() during render trigger dynamicUsedDuringRender,\n// which opts them out of ISR caching before we reach the write path.\n// 2. Custom response headers set via next/headers are not yet captured separately\n// from the live Response object in vinext's server pipeline.\n// In practice this means ISR-cached responses won't replay render-time set-cookie\n// headers — but that case is already prevented by the dynamic-usage opt-out.\n// TODO: capture render-time response headers for full Next.js parity.\n// Verbose cache logging — opt in with NEXT_PRIVATE_DEBUG_CACHE=1.\n// Matches the env var Next.js uses for its own cache debug output so operators\n// have a single knob for all cache tracing.\nconst __isrDebug = process.env.NEXT_PRIVATE_DEBUG_CACHE\n ? console.debug.bind(console, \"[vinext] ISR:\")\n : undefined;\n\n// Classification debug — opt in with VINEXT_DEBUG_CLASSIFICATION=1. Gated on\n// the env var so the hot path pays no overhead unless an operator is actively\n// tracing why a layout was flagged static or dynamic. The reason payload is\n// carried by __VINEXT_CLASS_REASONS and consumed inside probeAppPageLayouts.\nconst __classDebug = process.env.VINEXT_DEBUG_CLASSIFICATION\n ? function(layoutId, reason) {\n console.debug(\"[vinext] CLS:\", layoutId, reason);\n }\n : undefined;\n\nfunction createRscOnErrorHandler(request, pathname, routePath) {\n const requestInfo = {\n path: pathname,\n method: request.method,\n headers: Object.fromEntries(request.headers.entries()),\n };\n const errorContext = {\n routerKind: \"App Router\",\n routePath: routePath || pathname,\n routeType: \"render\",\n };\n return __createRscOnErrorHandler({\n errorContext,\n reportRequestError: _reportRequestError,\n requestInfo,\n });\n}\n\n${imports.join(\"\\n\")}\n\n${\n instrumentationPath\n ? `// Run instrumentation register() exactly once, lazily on the first request.\n// Previously this was a top-level await, which blocked the entire module graph\n// from finishing initialization until register() resolved — adding that latency\n// to every cold start. Moving it here preserves the \"runs before any request is\n// handled\" guarantee while not blocking V8 isolate initialization.\n// On Cloudflare Workers, module evaluation happens synchronously in the isolate\n// startup phase; a top-level await extends that phase and increases cold-start\n// wall time for all requests, not just the first.\nlet __instrumentationInitialized = false;\nlet __instrumentationInitPromise = null;\nasync function __ensureInstrumentation() {\n if (process.env.VINEXT_PRERENDER === \"1\") return;\n if (__instrumentationInitialized) return;\n if (__instrumentationInitPromise) return __instrumentationInitPromise;\n __instrumentationInitPromise = (async () => {\n if (typeof _instrumentation.register === \"function\") {\n await _instrumentation.register();\n }\n // Store the onRequestError handler on globalThis so it is visible to\n // reportRequestError() (imported as _reportRequestError above) regardless\n // of which Vite environment module graph it is called from. With\n // @vitejs/plugin-rsc the RSC and SSR environments run in the same Node.js\n // process and share globalThis. With @cloudflare/vite-plugin everything\n // runs inside the Worker so globalThis is the Worker's global — also correct.\n if (typeof _instrumentation.onRequestError === \"function\") {\n globalThis.__VINEXT_onRequestErrorHandler__ = _instrumentation.onRequestError;\n }\n __instrumentationInitialized = true;\n })();\n return __instrumentationInitPromise;\n}`\n : \"\"\n}\n\n// Build-time layout classification dispatch. Replaced in generateBundle\n// with a switch statement that returns a pre-computed per-layout\n// Map<layoutIndex, \"static\" | \"dynamic\"> for each route. Until the\n// plugin patches this stub, every route falls back to the Layer 3\n// runtime probe, which is the current (slow) behaviour.\nfunction __VINEXT_CLASS(routeIdx) {\n return null;\n}\n\n// Build-time layout classification reasons dispatch. Sibling of\n// __VINEXT_CLASS, returning a per-route Map<layoutIndex, ClassificationReason>\n// that feeds the debug channel when VINEXT_DEBUG_CLASSIFICATION is active.\n// Replaced in generateBundle with a real dispatch table; the stub returns\n// null so the hot path never allocates reason maps when debug is off.\nfunction __VINEXT_CLASS_REASONS(routeIdx) {\n return null;\n}\n\nconst routes = [\n${routeEntries.join(\",\\n\")}\n];\nconst __routeMatcher = __createAppRscRouteMatcher(routes);\n\nconst metadataRoutes = [\n${metaRouteEntries.join(\",\\n\")}\n];\n\nconst rootNotFoundModule = ${rootNotFoundVar ? rootNotFoundVar : \"null\"};\nconst rootForbiddenModule = ${rootForbiddenVar ? rootForbiddenVar : \"null\"};\nconst rootUnauthorizedModule = ${rootUnauthorizedVar ? rootUnauthorizedVar : \"null\"};\nconst rootLayouts = [${rootLayoutVars.join(\", \")}];\nconst __APP_PAGE_EMPTY_MW_CTX = { headers: null, status: null };\n\n/**\n * Render an HTTP access fallback page (not-found/forbidden/unauthorized) with layouts and noindex meta.\n * Returns null if no matching component is available.\n *\n * @param opts.boundaryComponent - Override the boundary component (for layout-level notFound)\n * @param opts.layouts - Override the layouts to wrap with (for layout-level notFound, excludes the throwing layout)\n */\nasync function renderHTTPAccessFallbackPage(route, statusCode, isRscRequest, request, opts, scriptNonce, middlewareContext) {\n return __renderAppPageHttpAccessFallback({\n boundaryComponent: opts?.boundaryComponent ?? null,\n buildFontLinkHeader: __buildAppPageFontLinkHeader,\n clearRequestContext() {\n __clearRequestContext();\n },\n createRscOnErrorHandler(pathname, routePath) {\n return createRscOnErrorHandler(request, pathname, routePath);\n },\n getFontLinks: _getSSRFontLinks,\n getFontPreloads: _getSSRFontPreloads,\n getFontStyles: _getSSRFontStyles,\n getNavigationContext: _getNavigationContext,\n globalErrorModule: ${globalErrorVar ? globalErrorVar : \"null\"},\n isRscRequest,\n layoutModules: opts?.layouts ?? null,\n loadSsrHandler() {\n return import.meta.viteRsc.loadModule(\"ssr\", \"index\");\n },\n makeThenableParams,\n matchedParams: opts?.matchedParams ?? route?.params ?? {},\n middlewareContext: middlewareContext ?? __APP_PAGE_EMPTY_MW_CTX,\n metadataRoutes,\n requestUrl: request.url,\n resolveChildSegments: __resolveAppPageChildSegments,\n rootForbiddenModule: rootForbiddenModule,\n rootLayouts: rootLayouts,\n rootNotFoundModule: rootNotFoundModule,\n rootUnauthorizedModule: rootUnauthorizedModule,\n route,\n renderToReadableStream,\n scriptNonce,\n statusCode,\n });\n}\n\n/** Convenience: render a not-found page (404) */\nasync function renderNotFoundPage(route, isRscRequest, request, matchedParams, scriptNonce, middlewareContext) {\n return renderHTTPAccessFallbackPage(route, 404, isRscRequest, request, { matchedParams }, scriptNonce, middlewareContext);\n}\n\n/**\n * Render an error.tsx boundary page when a server component or generateMetadata() throws.\n * Returns null if no error boundary component is available for this route.\n *\n * Next.js returns HTTP 200 when error.tsx catches an error (the error is \"handled\"\n * by the boundary). This matches that behavior intentionally.\n */\nasync function renderErrorBoundaryPage(route, error, isRscRequest, request, matchedParams, scriptNonce, middlewareContext) {\n return __renderAppPageErrorBoundary({\n buildFontLinkHeader: __buildAppPageFontLinkHeader,\n clearRequestContext() {\n __clearRequestContext();\n },\n createRscOnErrorHandler(pathname, routePath) {\n return createRscOnErrorHandler(request, pathname, routePath);\n },\n error,\n getFontLinks: _getSSRFontLinks,\n getFontPreloads: _getSSRFontPreloads,\n getFontStyles: _getSSRFontStyles,\n getNavigationContext: _getNavigationContext,\n globalErrorModule: ${globalErrorVar ? globalErrorVar : \"null\"},\n isRscRequest,\n loadSsrHandler() {\n return import.meta.viteRsc.loadModule(\"ssr\", \"index\");\n },\n makeThenableParams,\n matchedParams: matchedParams ?? route?.params ?? {},\n middlewareContext: middlewareContext ?? __APP_PAGE_EMPTY_MW_CTX,\n metadataRoutes,\n requestUrl: request.url,\n resolveChildSegments: __resolveAppPageChildSegments,\n rootLayouts: rootLayouts,\n route,\n renderToReadableStream,\n sanitizeErrorForClient: __sanitizeErrorForClient,\n scriptNonce,\n });\n}\n\nfunction matchRoute(url) {\n return __routeMatcher.matchRoute(url);\n}\n\n/**\n * Check if a pathname matches any intercepting route.\n * Returns the match info or null.\n */\nfunction findIntercept(pathname, sourcePathname = null) {\n return __routeMatcher.findIntercept(pathname, sourcePathname);\n}\n\nasync function buildPageElements(route, params, routePath, pageRequest) {\n const {\n opts,\n searchParams,\n isRscRequest,\n request,\n mountedSlotsHeader,\n } = pageRequest;\n const hasPageModule = !!route.page;\n const PageComponent = route.page?.default;\n if (hasPageModule && !PageComponent) {\n const _interceptionContext = opts?.interceptionContext ?? null;\n const _noExportRouteId = __createAppPayloadRouteId(routePath, _interceptionContext);\n let _noExportRootLayout = null;\n if (route.layouts?.length > 0) {\n // Compute the root layout tree path for this error payload using the\n // canonical helper so it stays aligned with buildAppPageElements().\n const _tp = route.layoutTreePositions?.[0] ?? 0;\n _noExportRootLayout = __createAppPageTreePath(route.routeSegments, _tp);\n }\n return {\n [__APP_INTERCEPTION_CONTEXT_KEY]: _interceptionContext,\n __route: _noExportRouteId,\n __rootLayout: _noExportRootLayout,\n [_noExportRouteId]: createElement(\"div\", null, \"Page has no default export\"),\n };\n }\n\n const {\n hasSearchParams,\n metadata: resolvedMetadata,\n pageSearchParams,\n viewport: resolvedViewport,\n } = await __resolveAppPageHead({\n layoutModules: route.layouts,\n layoutTreePositions: route.layoutTreePositions,\n metadataRoutes,\n pageModule: route.page,\n parallelRoutes: __resolveActiveParallelRouteHeadInputs({\n interceptLayouts: opts?.interceptLayouts ?? null,\n interceptPage: opts?.interceptPage ?? null,\n interceptParams: opts?.interceptParams ?? null,\n interceptSlotKey: opts?.interceptSlotKey ?? null,\n params,\n routeSegments: route.routeSegments,\n slots: route.slots,\n }),\n params,\n routePath: route.pattern,\n routeSegments: route.routeSegments,\n searchParams,\n });\n\n // Build the route tree from the leaf page, then delegate the boundary/layout/\n // template/segment wiring to a typed runtime helper so the generated entry\n // stays thin and the wiring logic can be unit tested directly.\n const pageProps = { params: makeThenableParams(params) };\n if (searchParams) {\n // Always provide searchParams prop when the URL object is available, even\n // when the query string is empty -- pages that do \"await searchParams\" need\n // it to be a thenable rather than undefined.\n pageProps.searchParams = makeThenableParams(pageSearchParams);\n // If the URL has query parameters, mark the page as dynamic.\n // In Next.js, only accessing the searchParams prop signals dynamic usage,\n // but a Proxy-based approach doesn't work here because React's RSC debug\n // serializer accesses properties on all props (e.g. $$typeof check in\n // isClientReference), triggering the Proxy even when user code doesn't\n // read searchParams. Checking for non-empty query params is a safe\n // approximation: pages with query params in the URL are almost always\n // dynamic, and this avoids false positives from React internals.\n if (hasSearchParams) markDynamicUsage();\n }\n // mountedSlotsHeader is threaded through from the handler scope so every\n // call site shares one source of truth for request-derived values. Reading\n // the same header in two places invites silent drift when a future refactor\n // changes only one of them.\n const mountedSlotIds = mountedSlotsHeader\n ? new Set(mountedSlotsHeader.split(\" \"))\n : null;\n\n return __buildAppPageElements({\n element: PageComponent ? createElement(PageComponent, pageProps) : null,\n globalErrorModule: ${globalErrorVar ? globalErrorVar : \"null\"},\n isRscRequest,\n mountedSlotIds,\n makeThenableParams,\n matchedParams: params,\n resolvedMetadata,\n resolvedViewport,\n interceptionContext: opts?.interceptionContext ?? null,\n routePath,\n rootNotFoundModule: ${rootNotFoundVar ? rootNotFoundVar : \"null\"},\n rootForbiddenModule: ${rootForbiddenVar ? rootForbiddenVar : \"null\"},\n rootUnauthorizedModule: ${rootUnauthorizedVar ? rootUnauthorizedVar : \"null\"},\n route,\n slotOverrides:\n opts && opts.interceptSlotKey && opts.interceptPage\n ? {\n [opts.interceptSlotKey]: {\n layoutModules: opts.interceptLayouts || null,\n pageModule: opts.interceptPage,\n params: opts.interceptParams || params,\n },\n }\n : null,\n });\n}\n\nconst __basePath = ${JSON.stringify(bp)};\nconst __trailingSlash = ${JSON.stringify(ts)};\nconst __i18nConfig = ${JSON.stringify(i18nConfig)};\nconst __configRedirects = ${JSON.stringify(redirects)};\nconst __configRewrites = ${JSON.stringify(rewrites)};\nconst __configHeaders = ${JSON.stringify(headers)};\nconst __publicFiles = new Set(${JSON.stringify(publicFiles)});\nconst __allowedOrigins = ${JSON.stringify(allowedOrigins)};\n\n${generateDevOriginCheckCode(config?.allowedDevOrigins)}\n\n// ── Config pattern matching, redirects, rewrites, headers, CSRF validation,\n// external URL proxy, cookie parsing, and request context are imported from\n// config-matchers.ts and request-pipeline.ts (see import statements above).\n// This eliminates ~250 lines of duplicated inline code and ensures the\n// single-pass tokenizer in config-matchers.ts is used consistently\n// (fixing the chained .replace() divergence flagged by CodeQL).\n\n/**\n * Build a request context from the live ALS HeadersContext, which reflects\n * any x-middleware-request-* header mutations applied by middleware.\n * Used for afterFiles and fallback rewrite has/missing evaluation — these\n * run after middleware in the App Router execution order.\n */\nfunction __buildPostMwRequestContext(request) {\n const url = new URL(request.url);\n const ctx = getHeadersContext();\n if (!ctx) return requestContextFromRequest(request);\n // ctx.cookies is a Map<string, string> (HeadersContext), but RequestContext\n // requires a plain Record<string, string> for has/missing cookie evaluation\n // (config-matchers.ts uses obj[key] not Map.get()). Convert here.\n const cookiesRecord = Object.fromEntries(ctx.cookies);\n return {\n headers: ctx.headers,\n cookies: cookiesRecord,\n query: url.searchParams,\n host: normalizeHost(ctx.headers.get(\"host\"), url.hostname),\n };\n}\n\n/**\n * Maximum server-action request body size.\n * Configurable via experimental.serverActions.bodySizeLimit in next.config.\n * Defaults to 1MB, matching the Next.js default.\n * @see https://nextjs.org/docs/app/api-reference/config/next-config-js/serverActions#bodysizelimit\n * Prevents unbounded request body buffering.\n */\nvar __MAX_ACTION_BODY_SIZE = ${JSON.stringify(bodySizeLimit)};\n\n// Map from route pattern to generateStaticParams function.\n// Used by the prerender phase to enumerate dynamic route URLs without\n// loading route modules via the dev server.\nexport const generateStaticParamsMap = {\n// TODO: layout-level generateStaticParams — this map only includes routes that\n// have a pagePath (leaf pages). Layout segments can also export generateStaticParams\n// to provide parent params for nested dynamic routes, but they don't have a pagePath\n// so they are excluded here. Supporting layout-level generateStaticParams requires\n// scanning layout.tsx files separately and including them in this map.\n${generateStaticParamsEntries.join(\"\\n\")}\n};${loadPrerenderPagesRoutesCode}\nconst rootParamNamesMap = {\n${routes\n .filter((r) => r.isDynamic && r.pagePath && r.rootParamNames && r.rootParamNames.length > 0)\n .map((r) => ` ${JSON.stringify(r.pattern)}: ${JSON.stringify(r.rootParamNames)},`)\n .join(\"\\n\")}\n};\n\nexport default async function handler(request, ctx) {\n ${\n instrumentationPath\n ? `// Ensure instrumentation.register() has run before handling the first request.\n // This is a no-op after the first call (guarded by __instrumentationInitialized).\n await __ensureInstrumentation();\n `\n : \"\"\n }\n // Wrap the entire request in a single unified ALS scope for per-request\n // isolation. All state modules (headers, navigation, cache, fetch-cache,\n // execution-context) read from this store via isInsideUnifiedScope().\n const headersCtx = headersContextFromRequest(request);\n const __uCtx = _createUnifiedCtx({\n headersContext: headersCtx,\n executionContext: ctx ?? _getRequestExecutionContext() ?? null,\n unstableCacheRevalidation: \"background\",\n });\n return _runWithUnifiedCtx(__uCtx, () =>\n __runWithPrerenderWorkUnit(async () => {\n _ensureFetchPatch();\n const __reqCtx = requestContextFromRequest(request);\n // Per-request container for middleware state. Passed into\n // _handleRequest which fills in .headers and .status;\n // avoids module-level variables that race on Workers.\n const _mwCtx = { headers: null, requestHeaders: null, status: null };\n let response;\n try {\n response = await _handleRequest(request, __reqCtx, _mwCtx);\n } catch (err) {\n // Dev only: embed err.cause chain into err.message/err.stack so Vite's\n // dev-server \"Internal server error:\" logger (which builds output from\n // message + stack only) reveals the underlying root cause (ECONNREFUSED,\n // role missing, workerd socket error, etc.) instead of dropping it.\n // Skipped in production because Node's util.inspect / workerd's logger\n // already render .cause natively, so flattening would double-print it.\n // NODE_ENV is build-time-replaced by Vite, so the prod bundle compiles\n // this branch out entirely.\n if (process.env.NODE_ENV !== \"production\") {\n __flattenErrorCauses(err);\n }\n throw err;\n }\n // Apply custom headers from next.config.js to non-redirect responses.\n // Skip redirects (3xx) because Response.redirect() creates immutable headers,\n // and Next.js doesn't apply custom headers to redirects anyway.\n if (response && response.headers && !(response.status >= 300 && response.status < 400)) {\n if (__configHeaders.length) {\n const url = new URL(request.url);\n let pathname;\n try { pathname = __normalizePath(__normalizePathnameForRouteMatch(url.pathname)); } catch { pathname = url.pathname; }\n ${bp ? `if (pathname.startsWith(${JSON.stringify(bp)})) pathname = pathname.slice(${JSON.stringify(bp)}.length) || \"/\";` : \"\"}\n applyConfigHeadersToResponse(response.headers, {\n configHeaders: __configHeaders,\n pathname,\n requestContext: __reqCtx,\n });\n }\n }\n return response;\n }, { route: () => new URL(request.url).pathname })\n );\n}\n\nasync function _handleRequest(request, __reqCtx, _mwCtx) {\n const __reqStart = process.env.NODE_ENV !== \"production\" ? performance.now() : 0;\n // __reqStart is included in the timing header so the Node logging middleware\n // can compute true compile time as: handlerStart - middlewareStart.\n // Format: \"handlerStart,compileMs,renderMs\" - all as integers (ms). Dev-only.\n const url = new URL(request.url);\n\n // ── Cross-origin request protection (dev only) ─────────────────────\n // Block requests from non-localhost origins to prevent data exfiltration.\n // Skipped in production — Vite replaces NODE_ENV at build time.\n if (process.env.NODE_ENV !== \"production\") {\n const __originBlock = __validateDevRequestOrigin(request);\n if (__originBlock) return __originBlock;\n }\n\n // Guard against protocol-relative URL open redirects (see request-pipeline.ts).\n const __protoGuard = guardProtocolRelativeUrl(url.pathname);\n if (__protoGuard) return __protoGuard;\n\n // Decode percent-encoding segment-wise and normalize pathname to canonical form.\n // This preserves encoded path delimiters like %2F within a single segment.\n // __normalizePath collapses //foo///bar → /foo/bar, resolves . and .. segments.\n let decodedUrlPathname;\n try { decodedUrlPathname = __normalizePathnameForRouteMatchStrict(url.pathname); } catch (e) {\n return new Response(\"Bad Request\", { status: 400 });\n }\n let pathname = __normalizePath(decodedUrlPathname);\n\n ${\n bp\n ? `\n if (!hasBasePath(pathname, __basePath) && !pathname.startsWith(\"/__vinext/\")) {\n return new Response(\"Not Found\", { status: 404 });\n }\n // Strip basePath prefix\n pathname = stripBasePath(pathname, __basePath);\n `\n : \"\"\n }\n\n const __prerenderEndpointResponse = await __handleAppPrerenderEndpoint(request, {\n isPrerenderEnabled() {\n return process.env.VINEXT_PRERENDER === \"1\";\n },\n${prerenderPagesLoaderOption}\n pathname,\n rootParamNamesByPattern: rootParamNamesMap,\n staticParamsMap: generateStaticParamsMap,\n });\n if (__prerenderEndpointResponse) return __prerenderEndpointResponse;\n\n // Trailing slash normalization (redirect to canonical form)\n const __tsRedirect = normalizeTrailingSlash(pathname, __basePath, __trailingSlash, url.search);\n if (__tsRedirect) return __tsRedirect;\n\n // ── Apply redirects from next.config.js ───────────────────────────────\n if (__configRedirects.length) {\n // Strip .rsc suffix before matching redirect rules - RSC (client-side nav) requests\n // arrive as /some/path.rsc but redirect patterns are defined without it (e.g.\n // /some/path). Without this, soft-nav fetches bypass all config redirects.\n const __redirPathname = pathname.endsWith(\".rsc\") ? pathname.slice(0, -4) : pathname;\n const __redir = matchRedirect(__redirPathname, __configRedirects, __reqCtx);\n if (__redir) {\n const __redirDest = sanitizeDestination(\n __basePath &&\n !isExternalUrl(__redir.destination) &&\n !hasBasePath(__redir.destination, __basePath)\n ? __basePath + __redir.destination\n : __redir.destination\n );\n return new Response(null, {\n status: __redir.permanent ? 308 : 307,\n headers: { Location: __redirDest },\n });\n }\n }\n\n const isRscRequest = pathname.endsWith(\".rsc\") || request.headers.get(\"accept\")?.includes(\"text/x-component\");\n // Read mounted-slots header once at the handler scope and thread it through\n // every buildPageElements call site. Previously both the handler and\n // buildPageElements read and normalized it independently, which invited\n // silent drift if a future refactor changed only one path.\n const __mountedSlotsHeader = __normalizeMountedSlotsHeader(\n request.headers.get(\"x-vinext-mounted-slots\"),\n );\n const interceptionContextHeader = request.headers.get(\"X-Vinext-Interception-Context\")?.replaceAll(\"\\0\", \"\") || null;\n let cleanPathname = pathname.replace(/\\\\.rsc$/, \"\");\n\n // Middleware response headers and custom rewrite status are stored in\n // _mwCtx (per-request container) so handler() can merge them into\n // every response path without module-level state that races on Workers.\n\n ${\n middlewarePath\n ? `\n const __mwResult = await __applyAppMiddleware({\n basePath: __basePath,\n cleanPathname,\n context: _mwCtx,\n i18nConfig: __i18nConfig,\n isProxy: ${JSON.stringify(isProxyFile(middlewarePath))},\n module: middlewareModule,\n request,\n });\n if (__mwResult.kind === \"response\") return __mwResult.response;\n cleanPathname = __mwResult.cleanPathname;\n if (__mwResult.search !== null) {\n url.search = __mwResult.search;\n }\n `\n : \"\"\n }\n\n const _scriptNonce = __getScriptNonceFromHeaderSources(request.headers, _mwCtx.headers);\n\n // Build post-middleware request context for afterFiles/fallback rewrites.\n // These run after middleware in the App Router execution order and should\n // evaluate has/missing conditions against middleware-modified headers.\n // When no middleware is present, this falls back to requestContextFromRequest.\n const __postMwReqCtx = __buildPostMwRequestContext(request);\n\n // ── Apply beforeFiles rewrites from next.config.js ────────────────────\n // In App Router execution order, beforeFiles runs after middleware so that\n // has/missing conditions can evaluate against middleware-modified headers.\n if (__configRewrites.beforeFiles && __configRewrites.beforeFiles.length) {\n const __rewritten = matchRewrite(cleanPathname, __configRewrites.beforeFiles, __postMwReqCtx);\n if (__rewritten) {\n if (isExternalUrl(__rewritten)) {\n __clearRequestContext();\n return proxyExternalRequest(request, __rewritten);\n }\n cleanPathname = __rewritten;\n }\n }\n\n // ── Image optimization passthrough (dev mode — no transformation) ───────\n if (cleanPathname === \"/_vinext/image\") {\n const __imgResult = validateImageUrl(url.searchParams.get(\"url\"), request.url);\n if (__imgResult instanceof Response) return __imgResult;\n // In dev, redirect to the original asset URL so Vite's static serving handles it.\n return Response.redirect(new URL(__imgResult, url.origin).href, 302);\n }\n\n const metadataRouteResponse = await __handleMetadataRouteRequest({\n metadataRoutes,\n cleanPathname,\n makeThenableParams,\n });\n if (metadataRouteResponse) return metadataRouteResponse;\n\n // Serve public/ files as filesystem routes after middleware and before\n // afterFiles/fallback rewrites, matching Next.js routing semantics.\n const __publicFileResponse = resolvePublicFileRoute({\n cleanPathname,\n middlewareContext: _mwCtx,\n pathname,\n publicFiles: __publicFiles,\n request,\n });\n if (__publicFileResponse) {\n __clearRequestContext();\n return __publicFileResponse;\n }\n\n // Set navigation context for Server Components.\n // Note: Headers context is already set by runWithRequestContext in the handler wrapper.\n setNavigationContext({\n pathname: cleanPathname,\n searchParams: url.searchParams,\n params: {},\n });\n\n // Handle server action POST requests\n const actionId = request.headers.get(\"x-rsc-action\") ?? request.headers.get(\"next-action\");\n const actionContentType = request.headers.get(\"content-type\") || \"\";\n const progressiveActionResponse = await __handleProgressiveServerActionRequest({\n actionId,\n allowedOrigins: __allowedOrigins,\n cleanPathname,\n clearRequestContext() {\n __clearRequestContext();\n },\n contentType: actionContentType,\n decodeAction,\n getAndClearPendingCookies,\n getDraftModeCookieHeader,\n maxActionBodySize: __MAX_ACTION_BODY_SIZE,\n middlewareHeaders: _mwCtx.headers,\n readFormDataWithLimit: __readFormDataWithLimit,\n reportRequestError: _reportRequestError,\n request,\n setHeadersAccessPhase,\n });\n if (progressiveActionResponse) return progressiveActionResponse;\n\n const serverActionResponse = await __handleServerActionRscRequest({\n actionId,\n allowedOrigins: __allowedOrigins,\n buildPageElement({\n route: actionRoute,\n params: actionParams,\n cleanPathname: actionCleanPathname,\n interceptOpts,\n searchParams,\n isRscRequest: actionIsRscRequest,\n request: actionRequest,\n mountedSlotsHeader,\n }) {\n return buildPageElements(actionRoute, actionParams, actionCleanPathname, {\n opts: interceptOpts,\n searchParams,\n isRscRequest: actionIsRscRequest,\n request: actionRequest,\n mountedSlotsHeader,\n });\n },\n cleanPathname,\n clearRequestContext() {\n __clearRequestContext();\n },\n contentType: actionContentType,\n createNotFoundElement(actionRouteId) {\n return {\n [__APP_INTERCEPTION_CONTEXT_KEY]: null,\n __route: actionRouteId,\n __rootLayout: null,\n [actionRouteId]: createElement(\"div\", null, \"Page not found\"),\n };\n },\n createPayloadRouteId(pathnameToRender, interceptionContext) {\n return __createAppPayloadRouteId(pathnameToRender, interceptionContext);\n },\n createRscOnErrorHandler(actionRequest, actionPathname, routePattern) {\n return createRscOnErrorHandler(actionRequest, actionPathname, routePattern);\n },\n createTemporaryReferenceSet,\n decodeReply,\n findIntercept(pathnameToMatch) {\n return findIntercept(pathnameToMatch, interceptionContextHeader);\n },\n getAndClearPendingCookies,\n getDraftModeCookieHeader,\n getRouteParamNames(sourceRoute) {\n return sourceRoute.params;\n },\n getSourceRoute(sourceRouteIndex) {\n return routes[sourceRouteIndex];\n },\n isRscRequest,\n loadServerAction,\n matchRoute(pathnameToMatch) {\n return matchRoute(pathnameToMatch);\n },\n maxActionBodySize: __MAX_ACTION_BODY_SIZE,\n middlewareHeaders: _mwCtx.headers,\n middlewareStatus: _mwCtx.status,\n mountedSlotsHeader: __mountedSlotsHeader,\n readBodyWithLimit: __readBodyWithLimit,\n readFormDataWithLimit: __readFormDataWithLimit,\n renderToReadableStream,\n reportRequestError: _reportRequestError,\n request,\n sanitizeErrorForClient(error) {\n return __sanitizeErrorForClient(error);\n },\n searchParams: url.searchParams,\n setHeadersAccessPhase,\n setNavigationContext,\n toInterceptOpts(intercept) {\n return {\n interceptionContext: interceptionContextHeader,\n interceptLayouts: intercept.interceptLayouts,\n interceptSlotKey: intercept.slotKey,\n interceptPage: intercept.page,\n interceptParams: intercept.matchedParams,\n };\n },\n });\n if (serverActionResponse) return serverActionResponse;\n\n // ── Apply afterFiles rewrites from next.config.js ──────────────────────\n if (__configRewrites.afterFiles && __configRewrites.afterFiles.length) {\n const __afterRewritten = matchRewrite(cleanPathname, __configRewrites.afterFiles, __postMwReqCtx);\n if (__afterRewritten) {\n if (isExternalUrl(__afterRewritten)) {\n __clearRequestContext();\n return proxyExternalRequest(request, __afterRewritten);\n }\n cleanPathname = __afterRewritten;\n }\n }\n\n let match = matchRoute(cleanPathname);\n\n // ── Fallback rewrites from next.config.js (if no route matched) ───────\n if (!match && __configRewrites.fallback && __configRewrites.fallback.length) {\n const __fallbackRewritten = matchRewrite(cleanPathname, __configRewrites.fallback, __postMwReqCtx);\n if (__fallbackRewritten) {\n if (isExternalUrl(__fallbackRewritten)) {\n __clearRequestContext();\n return proxyExternalRequest(request, __fallbackRewritten);\n }\n cleanPathname = __fallbackRewritten;\n match = matchRoute(cleanPathname);\n }\n }\n\n if (!match) {\n ${\n hasPagesDir\n ? `\n // ── Pages Router fallback ────────────────────────────────────────────\n // When a request doesn't match any App Router route, delegate to the\n // Pages Router handler (available in the SSR environment). This covers\n // both production request serving and prerender fetches from wrangler.\n // RSC requests (.rsc suffix or Accept: text/x-component) cannot be\n // handled by the Pages Router, so skip the delegation for those.\n if (!isRscRequest) {\n const __pagesEntry = await import.meta.viteRsc.loadModule(\"ssr\", \"index\");\n if (typeof __pagesEntry.renderPage === \"function\") {\n const __pagesRequestHeaders = _mwCtx.requestHeaders\n ? __buildRequestHeadersFromMiddlewareResponse(request.headers, _mwCtx.requestHeaders)\n : null;\n const __pagesRequest = __pagesRequestHeaders\n ? new Request(request.url, { method: request.method, headers: __pagesRequestHeaders })\n : request;\n // Use segment-wise decoding to preserve encoded path delimiters (%2F).\n // decodeURIComponent would turn /admin%2Fpanel into /admin/panel,\n // changing the path structure and bypassing middleware matchers.\n // Ported from Next.js: packages/next/src/server/lib/router-utils/decode-path-params.ts\n // https://github.com/vercel/next.js/blob/canary/packages/next/src/server/lib/router-utils/decode-path-params.ts\n const __pagesRes = await __pagesEntry.renderPage(\n __pagesRequest,\n __decodePathParams(url.pathname) + (url.search || \"\"),\n {},\n undefined,\n _mwCtx.requestHeaders,\n );\n // Only return the Pages Router response if it matched a route\n // (non-404). A 404 means the path isn't a Pages route either,\n // so fall through to the App Router not-found page below.\n if (__pagesRes.status !== 404) {\n __clearRequestContext();\n return __pagesRes;\n }\n }\n }\n `\n : \"\"\n }\n // Render custom not-found page if available, otherwise plain 404\n const notFoundResponse = await renderNotFoundPage(null, isRscRequest, request, undefined, _scriptNonce, _mwCtx);\n if (notFoundResponse) return notFoundResponse;\n __clearRequestContext();\n const notFoundHeaders = new Headers();\n __mergeMiddlewareResponseHeaders(notFoundHeaders, _mwCtx.headers);\n return new Response(\"Not Found\", { status: 404, headers: notFoundHeaders });\n }\n\n const { route, params } = match;\n\n // Update navigation context with matched params\n setNavigationContext({\n pathname: cleanPathname,\n searchParams: url.searchParams,\n params,\n });\n __setRootParams(__pickRootParams(params, route.rootParamNames));\n\n // Handle route.ts API handlers\n if (route.routeHandler) {\n setCurrentFetchSoftTags(\n buildPageCacheTags(cleanPathname, [], route.routeSegments, \"route\"),\n );\n return __dispatchAppRouteHandler({\n basePath: __basePath,\n cleanPathname,\n clearRequestContext: function() {\n __clearRequestContext();\n },\n i18n: __i18nConfig,\n isrDebug: __isrDebug,\n isrGet: __isrGet,\n isrRouteKey: __isrRouteKey,\n isrSet: __isrSet,\n middlewareContext: _mwCtx,\n middlewareRequestHeaders: _mwCtx.requestHeaders,\n params,\n request,\n route: {\n pattern: route.pattern,\n routeHandler: route.routeHandler,\n routeSegments: route.routeSegments,\n },\n scheduleBackgroundRegeneration: __triggerBackgroundRegeneration,\n searchParams: url.searchParams,\n });\n }\n\n const PageComponent = route.page?.default;\n const _asyncRouteParams = makeThenableParams(params);\n return __dispatchAppPage({\n buildPageElement(targetRoute, targetParams, targetOpts, targetSearchParams) {\n return buildPageElements(targetRoute, targetParams, cleanPathname, {\n opts: targetOpts,\n searchParams: targetSearchParams,\n isRscRequest,\n request,\n mountedSlotsHeader: __mountedSlotsHeader,\n });\n },\n cleanPathname,\n clearRequestContext() {\n __clearRequestContext();\n },\n createRscOnErrorHandler(pathname, routePath) {\n return createRscOnErrorHandler(request, pathname, routePath);\n },\n debugClassification: __classDebug,\n dynamicConfig: route.page?.dynamic,\n dynamicParamsConfig: route.page?.dynamicParams,\n findIntercept(pathname) {\n return findIntercept(pathname, interceptionContextHeader);\n },\n generateStaticParams: route.page?.generateStaticParams,\n getFontLinks: _getSSRFontLinks,\n getFontPreloads: _getSSRFontPreloads,\n getFontStyles: _getSSRFontStyles,\n getNavigationContext: _getNavigationContext,\n getSourceRoute(sourceRouteIndex) {\n return routes[sourceRouteIndex];\n },\n hasGenerateStaticParams: typeof route.page?.generateStaticParams === \"function\",\n hasPageDefaultExport: !!PageComponent,\n hasPageModule: !!route.page,\n handlerStart: __reqStart,\n interceptionContext: interceptionContextHeader,\n isProduction: process.env.NODE_ENV === \"production\",\n isRscRequest,\n isrDebug: __isrDebug,\n isrGet: __isrGet,\n isrHtmlKey: __isrHtmlKey,\n isrRscKey: __isrRscKey,\n isrSet: __isrSet,\n loadSsrHandler() {\n return import.meta.viteRsc.loadModule(\"ssr\", \"index\");\n },\n middlewareContext: _mwCtx,\n mountedSlotsHeader: __mountedSlotsHeader,\n params,\n probeLayoutAt(li) {\n const LayoutComp = route.layouts[li]?.default;\n if (!LayoutComp) return null;\n return LayoutComp({\n params: makeThenableParams(__resolveAppPageSegmentParams(\n route.routeSegments,\n route.layoutTreePositions?.[li] ?? 0,\n params,\n )),\n children: null,\n });\n },\n probePage() {\n if (!PageComponent) return null;\n const _asyncSearchParams = makeThenableParams(\n __collectAppPageSearchParams(url.searchParams).searchParamsObject,\n );\n return PageComponent({ params: _asyncRouteParams, searchParams: _asyncSearchParams });\n },\n renderErrorBoundaryPage(renderErr) {\n return renderErrorBoundaryPage(route, renderErr, isRscRequest, request, params, _scriptNonce, _mwCtx);\n },\n renderHttpAccessFallbackPage(statusCode, opts, middlewareContext) {\n return renderHTTPAccessFallbackPage(route, statusCode, isRscRequest, request, opts, _scriptNonce, middlewareContext);\n },\n renderToReadableStream,\n request,\n revalidateSeconds: typeof route.page?.revalidate === \"number\" ? route.page.revalidate : null,\n rootForbiddenModule,\n rootNotFoundModule,\n rootUnauthorizedModule,\n route,\n runWithSuppressedHookWarning(probe) {\n return _suppressHookWarningAls.run(true, probe);\n },\n scheduleBackgroundRegeneration(key, renderFn, errorContext) {\n __triggerBackgroundRegeneration(key, renderFn, errorContext);\n },\n scriptNonce: _scriptNonce,\n searchParams: url.searchParams,\n setNavigationContext,\n });\n}\n\nif (import.meta.hot) {\n import.meta.hot.accept();\n}\n`;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"app-rsc-entry.js","names":[],"sources":["../../src/entries/app-rsc-entry.ts"],"sourcesContent":["/**\n * App Router RSC entry generator.\n *\n * Generates the virtual RSC entry module for the App Router.\n * The RSC entry does route matching and renders the component tree,\n * then delegates to the SSR entry for HTML generation.\n *\n * Previously housed in server/app-dev-server.ts.\n */\nimport { buildAppRscManifestCode } from \"./app-rsc-manifest.js\";\nimport { resolveEntryPath, normalizePathSeparators } from \"./runtime-entry-module.js\";\nimport type {\n NextHeader,\n NextI18nConfig,\n NextRedirect,\n NextRewrite,\n} from \"../config/next-config.js\";\nimport type { AppRoute } from \"../routing/app-router.js\";\nimport { generateDevOriginCheckCode } from \"../server/dev-origin-check.js\";\nimport type { MetadataFileRoute } from \"../server/metadata-routes.js\";\nimport { isProxyFile } from \"../server/middleware.js\";\n\nconst DEFAULT_EXPIRE_TIME = 31_536_000;\n\n// Pre-computed absolute paths for generated-code imports. The virtual RSC\n// entry can't use relative imports (it has no real file location), so we\n// resolve these at code-generation time and embed them as absolute paths.\nconst middlewareRequestHeadersPath = resolveEntryPath(\n \"../server/middleware-request-headers.js\",\n import.meta.url,\n);\nconst normalizePathModulePath = resolveEntryPath(\"../server/normalize-path.js\", import.meta.url);\nconst appRscHandlerPath = resolveEntryPath(\"../server/app-rsc-handler.js\", import.meta.url);\nconst appRouteHandlerDispatchPath = resolveEntryPath(\n \"../server/app-route-handler-dispatch.js\",\n import.meta.url,\n);\nconst appServerActionExecutionPath = resolveEntryPath(\n \"../server/app-server-action-execution.js\",\n import.meta.url,\n);\nconst appRscErrorsPath = resolveEntryPath(\"../server/app-rsc-errors.js\", import.meta.url);\nconst appPageExecutionPath = resolveEntryPath(\"../server/app-page-execution.js\", import.meta.url);\nconst appFallbackRendererPath = resolveEntryPath(\n \"../server/app-fallback-renderer.js\",\n import.meta.url,\n);\nconst appElementsPath = resolveEntryPath(\"../server/app-elements.js\", import.meta.url);\nconst appPageRouteWiringPath = resolveEntryPath(\n \"../server/app-page-route-wiring.js\",\n import.meta.url,\n);\nconst appPageHeadPath = resolveEntryPath(\"../server/app-page-head.js\", import.meta.url);\nconst appPageParamsPath = resolveEntryPath(\"../server/app-page-params.js\", import.meta.url);\nconst appPageDispatchPath = resolveEntryPath(\"../server/app-page-dispatch.js\", import.meta.url);\nconst appPageRequestPath = resolveEntryPath(\"../server/app-page-request.js\", import.meta.url);\nconst appSegmentConfigPath = resolveEntryPath(\"../server/app-segment-config.js\", import.meta.url);\nconst appRscRouteMatchingPath = resolveEntryPath(\n \"../server/app-rsc-route-matching.js\",\n import.meta.url,\n);\nconst rscStreamHintsPath = resolveEntryPath(\"../server/rsc-stream-hints.js\", import.meta.url);\nconst isrCachePath = resolveEntryPath(\"../server/isr-cache.js\", import.meta.url);\nconst thenableParamsShimPath = resolveEntryPath(\"../shims/thenable-params.js\", import.meta.url);\nconst appPageElementBuilderPath = resolveEntryPath(\n \"../server/app-page-element-builder.js\",\n import.meta.url,\n);\nconst instrumentationRuntimePath = resolveEntryPath(\n \"../server/instrumentation-runtime.js\",\n import.meta.url,\n);\nconst appRscErrorHandlerPath = resolveEntryPath(\n \"../server/app-rsc-error-handler.js\",\n import.meta.url,\n);\nconst appRequestContextPath = resolveEntryPath(\"../server/app-request-context.js\", import.meta.url);\nconst appHookWarningSuppressionPath = resolveEntryPath(\n \"../server/app-hook-warning-suppression.js\",\n import.meta.url,\n);\n\n/**\n * Resolved config options relevant to App Router request handling.\n * Passed from the Vite plugin where the full next.config.js is loaded.\n */\ntype AppRouterConfig = {\n redirects?: NextRedirect[];\n rewrites?: {\n beforeFiles: NextRewrite[];\n afterFiles: NextRewrite[];\n fallback: NextRewrite[];\n };\n headers?: NextHeader[];\n /** Extra origins allowed for server action CSRF checks (from experimental.serverActions.allowedOrigins). */\n allowedOrigins?: string[];\n /** Extra origins allowed for dev server access (from allowedDevOrigins). */\n allowedDevOrigins?: string[];\n /** Body size limit for server actions in bytes (from experimental.serverActions.bodySizeLimit). */\n bodySizeLimit?: number;\n /** Route-level expire fallback in seconds for ISR entries with numeric revalidate. */\n expireTime?: number;\n /** Internationalization routing config for middleware matcher locale handling. */\n i18n?: NextI18nConfig | null;\n /**\n * When true, the project has a `pages/` directory alongside the App Router.\n * The generated RSC entry exposes `/__vinext/prerender/pages-static-paths`\n * so `prerenderPages` can call `getStaticPaths` via `wrangler unstable_startWorker`\n * in CF Workers builds. `pageRoutes` is loaded from the SSR environment via\n * `import(\"./ssr/index.js\")`, which re-exports it from\n * `virtual:vinext-server-entry` when this flag is set.\n */\n hasPagesDir?: boolean;\n /** Exact public/ file routes, using normalized leading-slash pathnames. */\n publicFiles?: string[];\n};\n\n/**\n * Generate the virtual RSC entry module.\n *\n * This runs in the `rsc` Vite environment (react-server condition).\n * It matches the incoming request URL to an app route, builds the\n * nested layout + page tree, and renders it to an RSC stream.\n */\nexport function generateRscEntry(\n appDir: string,\n routes: AppRoute[],\n middlewarePath?: string | null,\n metadataRoutes?: MetadataFileRoute[],\n globalErrorPath?: string | null,\n basePath?: string,\n trailingSlash?: boolean,\n config?: AppRouterConfig,\n instrumentationPath?: string | null,\n): string {\n const bp = basePath ?? \"\";\n const ts = trailingSlash ?? false;\n const redirects = config?.redirects ?? [];\n const rewrites = config?.rewrites ?? { beforeFiles: [], afterFiles: [], fallback: [] };\n const headers = config?.headers ?? [];\n const allowedOrigins = config?.allowedOrigins ?? [];\n const bodySizeLimit = config?.bodySizeLimit ?? 1 * 1024 * 1024;\n const expireTime = config?.expireTime ?? DEFAULT_EXPIRE_TIME;\n const i18nConfig = config?.i18n ?? null;\n const hasPagesDir = config?.hasPagesDir ?? false;\n const publicFiles = config?.publicFiles ?? [];\n const manifestCode = buildAppRscManifestCode({ routes, metadataRoutes, globalErrorPath });\n const {\n imports,\n routeEntries,\n metaRouteEntries,\n generateStaticParamsEntries,\n rootNotFoundVar,\n rootForbiddenVar,\n rootUnauthorizedVar,\n rootLayoutVars,\n globalErrorVar,\n } = manifestCode;\n const loadPrerenderPagesRoutesCode = hasPagesDir\n ? `\nasync function __loadPrerenderPagesRoutes() {\n const __gspSsrEntry = await import.meta.viteRsc.loadModule(\"ssr\", \"index\");\n return __gspSsrEntry.pageRoutes;\n}\n`\n : \"\";\n\n return `\nimport {\n renderToReadableStream as _renderToReadableStream,\n decodeAction,\n decodeReply,\n loadServerAction,\n createTemporaryReferenceSet,\n} from \"@vitejs/plugin-rsc/rsc\";\nimport { createRscRenderer } from ${JSON.stringify(rscStreamHintsPath)};\n\nconst renderToReadableStream = createRscRenderer(_renderToReadableStream);\nimport { createElement } from \"react\";\nimport { getNavigationContext as _getNavigationContext } from \"next/navigation\";\nimport { headersContextFromRequest, getDraftModeCookieHeader, getAndClearPendingCookies, consumeDynamicUsage, consumeInvalidDynamicUsageError, setHeadersAccessPhase } from \"next/headers\";\nimport { mergeMetadata, resolveModuleMetadata, mergeViewport, resolveModuleViewport } from \"vinext/metadata\";\n${middlewarePath ? `import * as middlewareModule from ${JSON.stringify(normalizePathSeparators(middlewarePath))};` : \"\"}\n${\n instrumentationPath\n ? `import * as _instrumentation from ${JSON.stringify(normalizePathSeparators(instrumentationPath))};\nimport { ensureInstrumentationRegistered as __ensureInstrumentationRegistered } from ${JSON.stringify(instrumentationRuntimePath)};`\n : \"\"\n}\nimport { createAppRscHandler as __createAppRscHandler } from ${JSON.stringify(appRscHandlerPath)};\nimport { decodePathParams as __decodePathParams } from ${JSON.stringify(normalizePathModulePath)};\nimport { buildRequestHeadersFromMiddlewareResponse as __buildRequestHeadersFromMiddlewareResponse } from ${JSON.stringify(middlewareRequestHeadersPath)};\nimport {\n dispatchAppRouteHandler as __dispatchAppRouteHandler,\n} from ${JSON.stringify(appRouteHandlerDispatchPath)};\nimport {\n handleProgressiveServerActionRequest as __handleProgressiveServerActionRequest,\n handleServerActionRscRequest as __handleServerActionRscRequest,\n readActionBodyWithLimit as __readBodyWithLimit,\n readActionFormDataWithLimit as __readFormDataWithLimit,\n} from ${JSON.stringify(appServerActionExecutionPath)};\nimport {\n sanitizeErrorForClient as __sanitizeErrorForClient,\n} from ${JSON.stringify(appRscErrorsPath)};\nimport { createAppRscOnErrorHandler } from ${JSON.stringify(appRscErrorHandlerPath)};\nimport {\n buildAppPageFontLinkHeader as __buildAppPageFontLinkHeader,\n resolveAppPageSpecialError as __resolveAppPageSpecialError,\n} from ${JSON.stringify(appPageExecutionPath)};\nimport {\n createAppFallbackRenderer as __createAppFallbackRenderer,\n} from ${JSON.stringify(appFallbackRendererPath)};\nimport {\n AppElementsWire as __AppElementsWire,\n} from ${JSON.stringify(appElementsPath)};\nimport {\n resolveAppPageChildSegments as __resolveAppPageChildSegments,\n} from ${JSON.stringify(appPageRouteWiringPath)};\nimport { buildPageElements as __buildPageElements } from ${JSON.stringify(appPageElementBuilderPath)};\nimport {\n resolveAppPageSegmentParams as __resolveAppPageSegmentParams,\n} from ${JSON.stringify(appPageParamsPath)};\nimport {\n collectAppPageSearchParams as __collectAppPageSearchParams,\n} from ${JSON.stringify(appPageHeadPath)};\nimport {\n dispatchAppPage as __dispatchAppPage,\n} from ${JSON.stringify(appPageDispatchPath)};\nimport {\n resolveAppPageGenerateStaticParamsSources as __resolveAppPageGenerateStaticParamsSources,\n} from ${JSON.stringify(appPageRequestPath)};\nimport {\n resolveAppPageFetchCacheMode as __resolveAppPageFetchCacheMode,\n resolveAppPageSegmentConfig as __resolveAppPageSegmentConfig,\n} from ${JSON.stringify(appSegmentConfigPath)};\nimport { makeThenableParams } from ${JSON.stringify(thenableParamsShimPath)};\nimport {\n createAppRscRouteMatcher as __createAppRscRouteMatcher,\n} from ${JSON.stringify(appRscRouteMatchingPath)};\nimport {\n appIsrHtmlKey as __isrHtmlKey,\n appIsrRscKey as __isrRscKey,\n appIsrRouteKey as __isrRouteKey,\n isrGet as __isrGet,\n isrSet as __isrSet,\n triggerBackgroundRegeneration as __triggerBackgroundRegeneration,\n} from ${JSON.stringify(isrCachePath)};\n// Import server-only state module to register ALS-backed accessors.\nimport \"vinext/navigation-state\";\nimport { reportRequestError as _reportRequestError } from \"vinext/instrumentation\";\nimport { getSSRFontLinks as _getSSRFontLinks, getSSRFontStyles as _getSSRFontStylesGoogle, getSSRFontPreloads as _getSSRFontPreloadsGoogle } from \"next/font/google\";\nimport { getSSRFontStyles as _getSSRFontStylesLocal, getSSRFontPreloads as _getSSRFontPreloadsLocal } from \"next/font/local\";\nfunction _getSSRFontStyles() { return [..._getSSRFontStylesGoogle(), ..._getSSRFontStylesLocal()]; }\nfunction _getSSRFontPreloads() { return [..._getSSRFontPreloadsGoogle(), ..._getSSRFontPreloadsLocal()]; }\n${hasPagesDir ? `// Pages Router routes are loaded lazily from the SSR environment for internal prerender requests.` : \"\"}\n\n// Suppress expected \"Invalid hook call\" dev warning when layout/page\n// components are probed outside React's render cycle. The import patches\n// console.error once at module load (side-effect) and exposes the ALS\n// so per-route dispatch can opt into suppression via .run(true, ...).\nimport { suppressHookWarningAls } from ${JSON.stringify(appHookWarningSuppressionPath)};\nimport { clearAppRequestContext as __clearRequestContext, setAppNavigationContext as setNavigationContext } from ${JSON.stringify(appRequestContextPath)};\n\n// Note: cache entries are written with \\`headers: undefined\\`. Next.js stores\n// response headers (e.g. set-cookie from cookies().set() during render) in the\n// cache entry so they can be replayed on HIT. We don't do this because:\n// 1. Pages that call cookies().set() during render trigger dynamicUsedDuringRender,\n// which opts them out of ISR caching before we reach the write path.\n// 2. Custom response headers set via next/headers are not yet captured separately\n// from the live Response object in vinext's server pipeline.\n// In practice this means ISR-cached responses won't replay render-time set-cookie\n// headers — but that case is already prevented by the dynamic-usage opt-out.\n// TODO: capture render-time response headers for full Next.js parity.\n// Verbose cache logging — opt in with NEXT_PRIVATE_DEBUG_CACHE=1.\n// Matches the env var Next.js uses for its own cache debug output so operators\n// have a single knob for all cache tracing.\nconst __isrDebug = process.env.NEXT_PRIVATE_DEBUG_CACHE\n ? console.debug.bind(console, \"[vinext] ISR:\")\n : undefined;\n\n// Classification debug — opt in with VINEXT_DEBUG_CLASSIFICATION=1. Gated on\n// the env var so the hot path pays no overhead unless an operator is actively\n// tracing why a layout was flagged static or dynamic. The reason payload is\n// carried by __VINEXT_CLASS_REASONS and consumed inside probeAppPageLayouts.\nconst __classDebug = process.env.VINEXT_DEBUG_CLASSIFICATION\n ? function(layoutId, reason) {\n console.debug(\"[vinext] CLS:\", layoutId, reason);\n }\n : undefined;\n\nfunction __resolveRouteFetchCacheMode(route) {\n return __resolveAppPageFetchCacheMode({\n layouts: route.layouts,\n page: route.page,\n });\n}\n\n${imports.join(\"\\n\")}\n\n${\n instrumentationPath\n ? `// Lazy instrumentation initialisation is handled by ensureInstrumentationRegistered\n// (imported from vinext/instrumentation-runtime). The generated entry only passes\n// the user module in; all bookkeeping (initialized flag, shared promise, prerender\n// skip) lives in the typed helper so it can be unit-tested independently.`\n : \"\"\n}\n\n// Build-time layout classification dispatch. Replaced in generateBundle\n// with a switch statement that returns a pre-computed per-layout\n// Map<layoutIndex, \"static\" | \"dynamic\"> for each route. Until the\n// plugin patches this stub, every route falls back to the Layer 3\n// runtime probe, which is the current (slow) behaviour.\nfunction __VINEXT_CLASS(routeIdx) {\n return null;\n}\n\n// Build-time layout classification reasons dispatch. Sibling of\n// __VINEXT_CLASS, returning a per-route Map<layoutIndex, ClassificationReason>\n// that feeds the debug channel when VINEXT_DEBUG_CLASSIFICATION is active.\n// Replaced in generateBundle with a real dispatch table; the stub returns\n// null so the hot path never allocates reason maps when debug is off.\nfunction __VINEXT_CLASS_REASONS(routeIdx) {\n return null;\n}\n\nconst routes = [\n${routeEntries.join(\",\\n\")}\n];\nconst __routeMatcher = __createAppRscRouteMatcher(routes);\n\nconst metadataRoutes = [\n${metaRouteEntries.join(\",\\n\")}\n];\n\nconst rootNotFoundModule = ${rootNotFoundVar ? rootNotFoundVar : \"null\"};\nconst rootForbiddenModule = ${rootForbiddenVar ? rootForbiddenVar : \"null\"};\nconst rootUnauthorizedModule = ${rootUnauthorizedVar ? rootUnauthorizedVar : \"null\"};\nconst rootLayouts = [${rootLayoutVars.join(\", \")}];\n\nconst createRscOnErrorHandler = (request, pathname, routePath) =>\n createAppRscOnErrorHandler(_reportRequestError, request, pathname, routePath);\n\nconst __fallbackRenderer = __createAppFallbackRenderer({\n rootBoundaries: {\n rootForbiddenModule,\n rootLayouts,\n rootNotFoundModule,\n rootUnauthorizedModule,\n },\n globalErrorModule: ${globalErrorVar ? globalErrorVar : \"null\"},\n metadataRoutes,\n ssrLoader() {\n return import.meta.viteRsc.loadModule(\"ssr\", \"index\");\n },\n fontProviders: {\n buildFontLinkHeader: __buildAppPageFontLinkHeader,\n getFontLinks: _getSSRFontLinks,\n getFontPreloads: _getSSRFontPreloads,\n getFontStyles: _getSSRFontStyles,\n },\n makeThenableParams,\n sanitizer: __sanitizeErrorForClient,\n rscRenderer: renderToReadableStream,\n getNavigationContext: _getNavigationContext,\n resolveChildSegments: __resolveAppPageChildSegments,\n clearRequestContext() {\n __clearRequestContext();\n },\n createRscOnErrorHandler(request, pathname, routePath) {\n return createRscOnErrorHandler(request, pathname, routePath);\n },\n});\n\nfunction matchRoute(url) {\n return __routeMatcher.matchRoute(url);\n}\n\n/**\n * Check if a pathname matches any intercepting route.\n * Returns the match info or null.\n */\nfunction findIntercept(pathname, sourcePathname = null) {\n return __routeMatcher.findIntercept(pathname, sourcePathname);\n}\n\nasync function buildPageElements(route, params, routePath, pageRequest) {\n return __buildPageElements({\n route,\n params,\n routePath,\n pageRequest,\n globalErrorModule: ${globalErrorVar ? globalErrorVar : \"null\"},\n rootNotFoundModule: ${rootNotFoundVar ? rootNotFoundVar : \"null\"},\n rootForbiddenModule: ${rootForbiddenVar ? rootForbiddenVar : \"null\"},\n rootUnauthorizedModule: ${rootUnauthorizedVar ? rootUnauthorizedVar : \"null\"},\n metadataRoutes,\n });\n}\n\nconst __basePath = ${JSON.stringify(bp)};\nconst __trailingSlash = ${JSON.stringify(ts)};\nconst __i18nConfig = ${JSON.stringify(i18nConfig)};\nconst __configRedirects = ${JSON.stringify(redirects)};\nconst __configRewrites = ${JSON.stringify(rewrites)};\nconst __configHeaders = ${JSON.stringify(headers)};\nconst __publicFiles = new Set(${JSON.stringify(publicFiles)});\nconst __allowedOrigins = ${JSON.stringify(allowedOrigins)};\nconst __expireTime = ${JSON.stringify(expireTime)};\n\n${generateDevOriginCheckCode(config?.allowedDevOrigins)}\n\n/**\n * Maximum server-action request body size.\n * Configurable via experimental.serverActions.bodySizeLimit in next.config.\n * Defaults to 1MB, matching the Next.js default.\n * @see https://nextjs.org/docs/app/api-reference/config/next-config-js/serverActions#bodysizelimit\n * Prevents unbounded request body buffering.\n */\nvar __MAX_ACTION_BODY_SIZE = ${JSON.stringify(bodySizeLimit)};\n\n// Map from route pattern to generateStaticParams function.\n// Used by the prerender phase to enumerate dynamic route URLs without\n// loading route modules via the dev server.\nexport const generateStaticParamsMap = {\n// TODO: layout-level generateStaticParams — this map only includes routes that\n// have a pagePath (leaf pages). Layout segments can also export generateStaticParams\n// to provide parent params for nested dynamic routes, but they don't have a pagePath\n// so they are excluded here. Supporting layout-level generateStaticParams requires\n// scanning layout.tsx files separately and including them in this map.\n${generateStaticParamsEntries.join(\"\\n\")}\n};${loadPrerenderPagesRoutesCode}\nconst rootParamNamesMap = {\n${routes\n .filter((r) => r.isDynamic && r.pagePath && r.rootParamNames && r.rootParamNames.length > 0)\n .map((r) => ` ${JSON.stringify(r.pattern)}: ${JSON.stringify(r.rootParamNames)},`)\n .join(\"\\n\")}\n};\n\nexport default __createAppRscHandler({\n basePath: __basePath,\n clearRequestContext() {\n __clearRequestContext();\n },\n configHeaders: __configHeaders,\n configRedirects: __configRedirects,\n configRewrites: __configRewrites,\n dispatchMatchedPage({\n cleanPathname,\n handlerStart,\n interceptionContext,\n isRscRequest,\n middlewareContext,\n mountedSlotsHeader,\n params,\n request,\n route,\n scriptNonce,\n searchParams,\n }) {\n const PageComponent = route.page?.default;\n const __segmentConfig = __resolveAppPageSegmentConfig({\n layouts: route.layouts,\n page: route.page,\n });\n const __generateStaticParams = __resolveAppPageGenerateStaticParamsSources({\n layouts: route.layouts,\n layoutTreePositions: route.layoutTreePositions,\n page: route.page,\n routeSegments: route.routeSegments,\n });\n const _asyncRouteParams = makeThenableParams(params);\n return __dispatchAppPage({\n basePath: __basePath,\n buildPageElement(targetRoute, targetParams, targetOpts, targetSearchParams) {\n return buildPageElements(targetRoute, targetParams, cleanPathname, {\n opts: targetOpts,\n searchParams: targetSearchParams,\n isRscRequest,\n request,\n mountedSlotsHeader,\n });\n },\n cleanPathname,\n clearRequestContext() {\n __clearRequestContext();\n },\n createRscOnErrorHandler(pathname, routePath) {\n return createRscOnErrorHandler(request, pathname, routePath);\n },\n debugClassification: __classDebug,\n dynamicConfig: __segmentConfig.dynamicConfig,\n dynamicParamsConfig: __segmentConfig.dynamicParamsConfig,\n fetchCache: __segmentConfig.fetchCache ?? null,\n findIntercept(pathname) {\n return findIntercept(pathname, interceptionContext);\n },\n generateStaticParams: __generateStaticParams,\n getFontLinks: _getSSRFontLinks,\n getFontPreloads: _getSSRFontPreloads,\n getFontStyles: _getSSRFontStyles,\n getNavigationContext: _getNavigationContext,\n getSourceRoute(sourceRouteIndex) {\n return routes[sourceRouteIndex];\n },\n hasGenerateStaticParams: __generateStaticParams.length > 0,\n hasPageDefaultExport: !!PageComponent,\n hasPageModule: !!route.page,\n handlerStart,\n interceptionContext,\n expireSeconds: __expireTime,\n isProduction: process.env.NODE_ENV === \"production\",\n isRscRequest,\n isrDebug: __isrDebug,\n isrGet: __isrGet,\n isrHtmlKey: __isrHtmlKey,\n isrRscKey: __isrRscKey,\n isrSet: __isrSet,\n loadSsrHandler() {\n return import.meta.viteRsc.loadModule(\"ssr\", \"index\");\n },\n middlewareContext,\n mountedSlotsHeader,\n params,\n probeLayoutAt(li) {\n const LayoutComp = route.layouts[li]?.default;\n if (!LayoutComp) return null;\n return LayoutComp({\n params: makeThenableParams(__resolveAppPageSegmentParams(\n route.routeSegments,\n route.layoutTreePositions?.[li] ?? 0,\n params,\n )),\n children: null,\n });\n },\n probePage() {\n if (!PageComponent) return null;\n const _asyncSearchParams = makeThenableParams(\n __collectAppPageSearchParams(searchParams).searchParamsObject,\n );\n return PageComponent({ params: _asyncRouteParams, searchParams: _asyncSearchParams });\n },\n renderErrorBoundaryPage(renderErr) {\n return __fallbackRenderer.renderErrorBoundary(route, renderErr, isRscRequest, request, params, scriptNonce, middlewareContext);\n },\n renderHttpAccessFallbackPage(statusCode, opts, currentMiddlewareContext) {\n return __fallbackRenderer.renderHttpAccessFallback(route, statusCode, isRscRequest, request, opts, scriptNonce, currentMiddlewareContext);\n },\n renderToReadableStream,\n request,\n revalidateSeconds: __segmentConfig.revalidateSeconds,\n resolveRouteFetchCacheMode(targetRoute) {\n return __resolveRouteFetchCacheMode(targetRoute);\n },\n rootForbiddenModule,\n rootNotFoundModule,\n rootUnauthorizedModule,\n route,\n runWithSuppressedHookWarning(probe) {\n return suppressHookWarningAls.run(true, probe);\n },\n scheduleBackgroundRegeneration(key, renderFn, errorContext) {\n __triggerBackgroundRegeneration(key, renderFn, errorContext);\n },\n scriptNonce,\n searchParams,\n setNavigationContext,\n });\n },\n dispatchMatchedRouteHandler({\n cleanPathname,\n middlewareContext,\n params,\n request,\n route,\n searchParams,\n }) {\n return __dispatchAppRouteHandler({\n basePath: __basePath,\n cleanPathname,\n clearRequestContext() {\n __clearRequestContext();\n },\n i18n: __i18nConfig,\n isrDebug: __isrDebug,\n isrGet: __isrGet,\n isrRouteKey: __isrRouteKey,\n isrSet: __isrSet,\n middlewareContext,\n middlewareRequestHeaders: middlewareContext.requestHeaders,\n params,\n request,\n route: {\n pattern: route.pattern,\n routeHandler: route.routeHandler,\n routeSegments: route.routeSegments,\n },\n scheduleBackgroundRegeneration: __triggerBackgroundRegeneration,\n searchParams,\n });\n },\n ${\n instrumentationPath\n ? `ensureInstrumentation() {\n return __ensureInstrumentationRegistered(_instrumentation);\n },`\n : \"\"\n }\n handleProgressiveActionRequest({\n actionId,\n cleanPathname,\n contentType,\n middlewareContext,\n request,\n }) {\n return __handleProgressiveServerActionRequest({\n actionId,\n allowedOrigins: __allowedOrigins,\n cleanPathname,\n clearRequestContext() {\n __clearRequestContext();\n },\n contentType,\n decodeAction,\n getAndClearPendingCookies,\n getDraftModeCookieHeader,\n maxActionBodySize: __MAX_ACTION_BODY_SIZE,\n middlewareHeaders: middlewareContext.headers,\n readFormDataWithLimit: __readFormDataWithLimit,\n reportRequestError: _reportRequestError,\n request,\n setHeadersAccessPhase,\n });\n },\n handleServerActionRequest({\n actionId,\n cleanPathname,\n contentType,\n interceptionContext,\n isRscRequest,\n middlewareContext,\n mountedSlotsHeader,\n request,\n searchParams,\n }) {\n return __handleServerActionRscRequest({\n actionId,\n allowedOrigins: __allowedOrigins,\n buildPageElement({\n route: actionRoute,\n params: actionParams,\n cleanPathname: actionCleanPathname,\n interceptOpts,\n searchParams: actionSearchParams,\n isRscRequest: actionIsRscRequest,\n request: actionRequest,\n mountedSlotsHeader: actionMountedSlotsHeader,\n }) {\n return buildPageElements(actionRoute, actionParams, actionCleanPathname, {\n opts: interceptOpts,\n searchParams: actionSearchParams,\n isRscRequest: actionIsRscRequest,\n request: actionRequest,\n mountedSlotsHeader: actionMountedSlotsHeader,\n });\n },\n cleanPathname,\n clearRequestContext() {\n __clearRequestContext();\n },\n contentType,\n createNotFoundElement(actionRouteId) {\n return {\n ...__AppElementsWire.createMetadataEntries({\n interceptionContext: null,\n rootLayoutTreePath: null,\n routeId: actionRouteId,\n }),\n [actionRouteId]: createElement(\"div\", null, \"Page not found\"),\n };\n },\n createPayloadRouteId(pathnameToRender, currentInterceptionContext) {\n return __AppElementsWire.encodeRouteId(pathnameToRender, currentInterceptionContext);\n },\n createRscOnErrorHandler(actionRequest, actionPathname, routePattern) {\n return createRscOnErrorHandler(actionRequest, actionPathname, routePattern);\n },\n createTemporaryReferenceSet,\n decodeReply,\n findIntercept(pathnameToMatch) {\n return findIntercept(pathnameToMatch, interceptionContext);\n },\n getAndClearPendingCookies,\n getDraftModeCookieHeader,\n getRouteParamNames(sourceRoute) {\n return sourceRoute.params;\n },\n getSourceRoute(sourceRouteIndex) {\n return routes[sourceRouteIndex];\n },\n isRscRequest,\n loadServerAction,\n matchRoute(pathnameToMatch) {\n return matchRoute(pathnameToMatch);\n },\n maxActionBodySize: __MAX_ACTION_BODY_SIZE,\n middlewareHeaders: middlewareContext.headers,\n middlewareStatus: middlewareContext.status,\n mountedSlotsHeader,\n readBodyWithLimit: __readBodyWithLimit,\n readFormDataWithLimit: __readFormDataWithLimit,\n renderToReadableStream,\n reportRequestError: _reportRequestError,\n request,\n sanitizeErrorForClient(error) {\n return __sanitizeErrorForClient(error);\n },\n searchParams,\n setHeadersAccessPhase,\n setNavigationContext,\n toInterceptOpts(intercept) {\n return {\n interceptionContext,\n interceptLayouts: intercept.interceptLayouts,\n interceptSlotKey: intercept.slotKey,\n interceptPage: intercept.page,\n interceptParams: intercept.matchedParams,\n };\n },\n });\n },\n i18nConfig: __i18nConfig,\n isMiddlewareProxy: ${JSON.stringify(middlewarePath ? isProxyFile(middlewarePath) : false)},\n ${hasPagesDir ? `loadPrerenderPagesRoutes: __loadPrerenderPagesRoutes,` : \"\"}\n makeThenableParams,\n matchRoute,\n metadataRoutes,\n middlewareModule: ${middlewarePath ? \"middlewareModule\" : \"null\"},\n publicFiles: __publicFiles,\n renderNotFound({ isRscRequest, matchedParams, middlewareContext, request, route, scriptNonce }) {\n return __fallbackRenderer.renderNotFound(route, isRscRequest, request, matchedParams, scriptNonce, middlewareContext);\n },\n ${\n hasPagesDir\n ? `async renderPagesFallback({ isRscRequest, middlewareContext, request, url }) {\n if (isRscRequest) return null;\n\n const __pagesEntry = await import.meta.viteRsc.loadModule(\"ssr\", \"index\");\n if (typeof __pagesEntry.renderPage !== \"function\") return null;\n\n const __pagesRequestHeaders = middlewareContext.requestHeaders\n ? __buildRequestHeadersFromMiddlewareResponse(request.headers, middlewareContext.requestHeaders)\n : null;\n const __pagesRequest = __pagesRequestHeaders\n ? new Request(request.url, { method: request.method, headers: __pagesRequestHeaders })\n : request;\n const __pagesRes = await __pagesEntry.renderPage(\n __pagesRequest,\n __decodePathParams(url.pathname) + (url.search || \"\"),\n {},\n undefined,\n middlewareContext.requestHeaders,\n );\n return __pagesRes.status !== 404 ? __pagesRes : null;\n },`\n : \"\"\n }\n rootParamNamesByPattern: rootParamNamesMap,\n setNavigationContext,\n staticParamsMap: generateStaticParamsMap,\n trailingSlash: __trailingSlash,\n validateDevRequestOrigin: __validateDevRequestOrigin,\n});\n\nif (import.meta.hot) {\n import.meta.hot.accept();\n}\n`;\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { AppRoute } from "../routing/app-router.js";
1
+ import { AppRoute } from "../routing/app-route-graph.js";
2
2
  import { MetadataFileRoute } from "../server/metadata-routes.js";
3
3
 
4
4
  //#region src/entries/app-rsc-manifest.d.ts
@@ -1,3 +1,4 @@
1
+ import { normalizePathSeparators } from "./runtime-entry-module.js";
1
2
  import { createMetadataRouteEntriesSource } from "../server/metadata-route-build-data.js";
2
3
  //#region src/entries/app-rsc-manifest.ts
3
4
  function createImportAllocator() {
@@ -11,7 +12,7 @@ function createImportAllocator() {
11
12
  const existing = importMap.get(filePath);
12
13
  if (existing) return existing;
13
14
  const varName = `mod_${importIdx++}`;
14
- const absPath = filePath.replace(/\\/g, "/");
15
+ const absPath = normalizePathSeparators(filePath);
15
16
  imports.push(`import * as ${varName} from ${JSON.stringify(absPath)};`);
16
17
  importMap.set(filePath, varName);
17
18
  return varName;
@@ -70,6 +71,7 @@ function buildRouteEntries(routes, imports) {
70
71
  params: ${JSON.stringify(ir.params)},
71
72
  }`);
72
73
  return ` ${JSON.stringify(slot.key)}: {
74
+ id: ${JSON.stringify(slot.id ?? null)},
73
75
  name: ${JSON.stringify(slot.name)},
74
76
  page: ${slot.pagePath ? imports.getImportVar(slot.pagePath) : "null"},
75
77
  default: ${slot.defaultPath ? imports.getImportVar(slot.defaultPath) : "null"},
@@ -78,6 +80,8 @@ function buildRouteEntries(routes, imports) {
78
80
  error: ${slot.errorPath ? imports.getImportVar(slot.errorPath) : "null"},
79
81
  layoutIndex: ${slot.layoutIndex},
80
82
  routeSegments: ${JSON.stringify(slot.routeSegments)},
83
+ slotPatternParts: ${slot.slotPatternParts ? JSON.stringify(slot.slotPatternParts) : "null"},
84
+ slotParamNames: ${slot.slotParamNames ? JSON.stringify(slot.slotParamNames) : "null"},
81
85
  intercepts: [
82
86
  ${interceptEntries.join(",\n")}
83
87
  ],
@@ -87,6 +91,7 @@ ${interceptEntries.join(",\n")}
87
91
  return ` {
88
92
  __buildTimeClassifications: __VINEXT_CLASS(${routeIdx}), // evaluated once at module load
89
93
  __buildTimeReasons: __classDebug ? __VINEXT_CLASS_REASONS(${routeIdx}) : null,
94
+ ids: ${JSON.stringify(route.ids ?? null)},
90
95
  pattern: ${JSON.stringify(route.pattern)},
91
96
  patternParts: ${JSON.stringify(route.patternParts)},
92
97
  isDynamic: ${route.isDynamic},
@@ -1 +1 @@
1
- {"version":3,"file":"app-rsc-manifest.js","names":[],"sources":["../../src/entries/app-rsc-manifest.ts"],"sourcesContent":["import type { AppRoute } from \"../routing/app-router.js\";\nimport { createMetadataRouteEntriesSource } from \"../server/metadata-route-build-data.js\";\nimport type { MetadataFileRoute } from \"../server/metadata-routes.js\";\n\ntype AppRscManifestCode = {\n imports: string[];\n routeEntries: string[];\n metaRouteEntries: string[];\n generateStaticParamsEntries: string[];\n rootNotFoundVar: string | null;\n rootForbiddenVar: string | null;\n rootUnauthorizedVar: string | null;\n rootLayoutVars: string[];\n globalErrorVar: string | null;\n};\n\ntype BuildAppRscManifestCodeOptions = {\n routes: AppRoute[];\n metadataRoutes?: MetadataFileRoute[];\n globalErrorPath?: string | null;\n};\n\ntype ImportAllocator = {\n getImportVar(filePath: string): string;\n importMap: ReadonlyMap<string, string>;\n imports: string[];\n};\n\nfunction createImportAllocator(): ImportAllocator {\n const imports: string[] = [];\n const importMap = new Map<string, string>();\n let importIdx = 0;\n\n return {\n importMap,\n imports,\n getImportVar(filePath) {\n const existing = importMap.get(filePath);\n if (existing) return existing;\n\n const varName = `mod_${importIdx++}`;\n const absPath = filePath.replace(/\\\\/g, \"/\");\n imports.push(`import * as ${varName} from ${JSON.stringify(absPath)};`);\n importMap.set(filePath, varName);\n return varName;\n },\n };\n}\n\nfunction registerRouteModules(routes: AppRoute[], imports: ImportAllocator): void {\n for (const route of routes) {\n if (route.pagePath) imports.getImportVar(route.pagePath);\n if (route.routePath) imports.getImportVar(route.routePath);\n for (const layout of route.layouts) imports.getImportVar(layout);\n for (const tmpl of route.templates) imports.getImportVar(tmpl);\n if (route.loadingPath) imports.getImportVar(route.loadingPath);\n if (route.errorPath) imports.getImportVar(route.errorPath);\n if (route.layoutErrorPaths) {\n for (const ep of route.layoutErrorPaths) {\n if (ep) imports.getImportVar(ep);\n }\n }\n if (route.notFoundPath) imports.getImportVar(route.notFoundPath);\n if (route.notFoundPaths) {\n for (const nfp of route.notFoundPaths) {\n if (nfp) imports.getImportVar(nfp);\n }\n }\n if (route.forbiddenPath) imports.getImportVar(route.forbiddenPath);\n if (route.forbiddenPaths) {\n for (const fp of route.forbiddenPaths) {\n if (fp) imports.getImportVar(fp);\n }\n }\n if (route.unauthorizedPath) imports.getImportVar(route.unauthorizedPath);\n if (route.unauthorizedPaths) {\n for (const up of route.unauthorizedPaths) {\n if (up) imports.getImportVar(up);\n }\n }\n for (const slot of route.parallelSlots) {\n if (slot.pagePath) imports.getImportVar(slot.pagePath);\n if (slot.defaultPath) imports.getImportVar(slot.defaultPath);\n if (slot.layoutPath) imports.getImportVar(slot.layoutPath);\n if (slot.loadingPath) imports.getImportVar(slot.loadingPath);\n if (slot.errorPath) imports.getImportVar(slot.errorPath);\n for (const ir of slot.interceptingRoutes) {\n imports.getImportVar(ir.pagePath);\n for (const layoutPath of ir.layoutPaths) {\n imports.getImportVar(layoutPath);\n }\n }\n }\n }\n}\n\nfunction buildRouteEntries(routes: AppRoute[], imports: ImportAllocator): string[] {\n return routes.map((route, routeIdx) => {\n const layoutVars = route.layouts.map((l) => imports.getImportVar(l));\n const templateVars = route.templates.map((t) => imports.getImportVar(t));\n const notFoundVars = (route.notFoundPaths ?? []).map((nf) =>\n nf ? imports.getImportVar(nf) : \"null\",\n );\n const forbiddenVars = (route.forbiddenPaths ?? []).map((fp) =>\n fp ? imports.getImportVar(fp) : \"null\",\n );\n const unauthorizedVars = (route.unauthorizedPaths ?? []).map((up) =>\n up ? imports.getImportVar(up) : \"null\",\n );\n const slotEntries = route.parallelSlots.map((slot) => {\n const interceptEntries = slot.interceptingRoutes.map(\n (ir) => ` {\n convention: ${JSON.stringify(ir.convention)},\n targetPattern: ${JSON.stringify(ir.targetPattern)},\n interceptLayouts: [${ir.layoutPaths.map((layoutPath) => imports.getImportVar(layoutPath)).join(\", \")}],\n page: ${imports.getImportVar(ir.pagePath)},\n params: ${JSON.stringify(ir.params)},\n }`,\n );\n return ` ${JSON.stringify(slot.key)}: {\n name: ${JSON.stringify(slot.name)},\n page: ${slot.pagePath ? imports.getImportVar(slot.pagePath) : \"null\"},\n default: ${slot.defaultPath ? imports.getImportVar(slot.defaultPath) : \"null\"},\n layout: ${slot.layoutPath ? imports.getImportVar(slot.layoutPath) : \"null\"},\n loading: ${slot.loadingPath ? imports.getImportVar(slot.loadingPath) : \"null\"},\n error: ${slot.errorPath ? imports.getImportVar(slot.errorPath) : \"null\"},\n layoutIndex: ${slot.layoutIndex},\n routeSegments: ${JSON.stringify(slot.routeSegments)},\n intercepts: [\n${interceptEntries.join(\",\\n\")}\n ],\n }`;\n });\n const layoutErrorVars = (route.layoutErrorPaths || []).map((ep) =>\n ep ? imports.getImportVar(ep) : \"null\",\n );\n return ` {\n __buildTimeClassifications: __VINEXT_CLASS(${routeIdx}), // evaluated once at module load\n __buildTimeReasons: __classDebug ? __VINEXT_CLASS_REASONS(${routeIdx}) : null,\n pattern: ${JSON.stringify(route.pattern)},\n patternParts: ${JSON.stringify(route.patternParts)},\n isDynamic: ${route.isDynamic},\n params: ${JSON.stringify(route.params)},\n rootParamNames: ${JSON.stringify(route.rootParamNames ?? [])},\n page: ${route.pagePath ? imports.getImportVar(route.pagePath) : \"null\"},\n routeHandler: ${route.routePath ? imports.getImportVar(route.routePath) : \"null\"},\n layouts: [${layoutVars.join(\", \")}],\n routeSegments: ${JSON.stringify(route.routeSegments)},\n templateTreePositions: ${JSON.stringify(route.templateTreePositions)},\n layoutTreePositions: ${JSON.stringify(route.layoutTreePositions)},\n templates: [${templateVars.join(\", \")}],\n errors: [${layoutErrorVars.join(\", \")}],\n slots: {\n${slotEntries.join(\",\\n\")}\n },\n loading: ${route.loadingPath ? imports.getImportVar(route.loadingPath) : \"null\"},\n error: ${route.errorPath ? imports.getImportVar(route.errorPath) : \"null\"},\n notFound: ${route.notFoundPath ? imports.getImportVar(route.notFoundPath) : \"null\"},\n notFounds: [${notFoundVars.join(\", \")}],\n forbidden: ${route.forbiddenPath ? imports.getImportVar(route.forbiddenPath) : \"null\"},\n forbiddens: [${forbiddenVars.join(\", \")}],\n unauthorized: ${route.unauthorizedPath ? imports.getImportVar(route.unauthorizedPath) : \"null\"},\n unauthorizeds: [${unauthorizedVars.join(\", \")}],\n }`;\n });\n}\n\nfunction buildGenerateStaticParamsEntries(routes: AppRoute[], imports: ImportAllocator): string[] {\n const entries: string[] = [];\n for (const route of routes) {\n if (!route.isDynamic || !route.pagePath) continue;\n entries.push(\n ` ${JSON.stringify(route.pattern)}: ${imports.getImportVar(route.pagePath)}?.generateStaticParams ?? null,`,\n );\n }\n return entries;\n}\n\nexport function buildAppRscManifestCode(\n options: BuildAppRscManifestCodeOptions,\n): AppRscManifestCode {\n const imports = createImportAllocator();\n const metadataRoutes = options.metadataRoutes ?? [];\n\n registerRouteModules(options.routes, imports);\n const routeEntries = buildRouteEntries(options.routes, imports);\n\n const rootRoute = options.routes.find((r) => r.pattern === \"/\");\n const rootNotFoundVar = rootRoute?.notFoundPath\n ? imports.getImportVar(rootRoute.notFoundPath)\n : null;\n const rootForbiddenVar = rootRoute?.forbiddenPath\n ? imports.getImportVar(rootRoute.forbiddenPath)\n : null;\n const rootUnauthorizedVar = rootRoute?.unauthorizedPath\n ? imports.getImportVar(rootRoute.unauthorizedPath)\n : null;\n const rootLayoutVars = rootRoute ? rootRoute.layouts.map((l) => imports.getImportVar(l)) : [];\n const globalErrorVar = options.globalErrorPath\n ? imports.getImportVar(options.globalErrorPath)\n : null;\n\n const dynamicMetadataRoutes = metadataRoutes.filter((r) => r.isDynamic);\n for (const route of dynamicMetadataRoutes) {\n imports.getImportVar(route.filePath);\n }\n\n return {\n imports: imports.imports,\n routeEntries,\n metaRouteEntries: createMetadataRouteEntriesSource(metadataRoutes, imports.importMap),\n generateStaticParamsEntries: buildGenerateStaticParamsEntries(options.routes, imports),\n rootNotFoundVar,\n rootForbiddenVar,\n rootUnauthorizedVar,\n rootLayoutVars,\n globalErrorVar,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"app-rsc-manifest.js","names":[],"sources":["../../src/entries/app-rsc-manifest.ts"],"sourcesContent":["import type { AppRoute } from \"../routing/app-router.js\";\nimport { createMetadataRouteEntriesSource } from \"../server/metadata-route-build-data.js\";\nimport type { MetadataFileRoute } from \"../server/metadata-routes.js\";\nimport { normalizePathSeparators } from \"./runtime-entry-module.js\";\n\ntype AppRscManifestCode = {\n imports: string[];\n routeEntries: string[];\n metaRouteEntries: string[];\n generateStaticParamsEntries: string[];\n rootNotFoundVar: string | null;\n rootForbiddenVar: string | null;\n rootUnauthorizedVar: string | null;\n rootLayoutVars: string[];\n globalErrorVar: string | null;\n};\n\ntype BuildAppRscManifestCodeOptions = {\n routes: AppRoute[];\n metadataRoutes?: MetadataFileRoute[];\n globalErrorPath?: string | null;\n};\n\ntype ImportAllocator = {\n getImportVar(filePath: string): string;\n importMap: ReadonlyMap<string, string>;\n imports: string[];\n};\n\nfunction createImportAllocator(): ImportAllocator {\n const imports: string[] = [];\n const importMap = new Map<string, string>();\n let importIdx = 0;\n\n return {\n importMap,\n imports,\n getImportVar(filePath) {\n const existing = importMap.get(filePath);\n if (existing) return existing;\n\n const varName = `mod_${importIdx++}`;\n const absPath = normalizePathSeparators(filePath);\n imports.push(`import * as ${varName} from ${JSON.stringify(absPath)};`);\n importMap.set(filePath, varName);\n return varName;\n },\n };\n}\n\nfunction registerRouteModules(routes: AppRoute[], imports: ImportAllocator): void {\n for (const route of routes) {\n if (route.pagePath) imports.getImportVar(route.pagePath);\n if (route.routePath) imports.getImportVar(route.routePath);\n for (const layout of route.layouts) imports.getImportVar(layout);\n for (const tmpl of route.templates) imports.getImportVar(tmpl);\n if (route.loadingPath) imports.getImportVar(route.loadingPath);\n if (route.errorPath) imports.getImportVar(route.errorPath);\n if (route.layoutErrorPaths) {\n for (const ep of route.layoutErrorPaths) {\n if (ep) imports.getImportVar(ep);\n }\n }\n if (route.notFoundPath) imports.getImportVar(route.notFoundPath);\n if (route.notFoundPaths) {\n for (const nfp of route.notFoundPaths) {\n if (nfp) imports.getImportVar(nfp);\n }\n }\n if (route.forbiddenPath) imports.getImportVar(route.forbiddenPath);\n if (route.forbiddenPaths) {\n for (const fp of route.forbiddenPaths) {\n if (fp) imports.getImportVar(fp);\n }\n }\n if (route.unauthorizedPath) imports.getImportVar(route.unauthorizedPath);\n if (route.unauthorizedPaths) {\n for (const up of route.unauthorizedPaths) {\n if (up) imports.getImportVar(up);\n }\n }\n for (const slot of route.parallelSlots) {\n if (slot.pagePath) imports.getImportVar(slot.pagePath);\n if (slot.defaultPath) imports.getImportVar(slot.defaultPath);\n if (slot.layoutPath) imports.getImportVar(slot.layoutPath);\n if (slot.loadingPath) imports.getImportVar(slot.loadingPath);\n if (slot.errorPath) imports.getImportVar(slot.errorPath);\n for (const ir of slot.interceptingRoutes) {\n imports.getImportVar(ir.pagePath);\n for (const layoutPath of ir.layoutPaths) {\n imports.getImportVar(layoutPath);\n }\n }\n }\n }\n}\n\nfunction buildRouteEntries(routes: AppRoute[], imports: ImportAllocator): string[] {\n return routes.map((route, routeIdx) => {\n const layoutVars = route.layouts.map((l) => imports.getImportVar(l));\n const templateVars = route.templates.map((t) => imports.getImportVar(t));\n const notFoundVars = (route.notFoundPaths ?? []).map((nf) =>\n nf ? imports.getImportVar(nf) : \"null\",\n );\n const forbiddenVars = (route.forbiddenPaths ?? []).map((fp) =>\n fp ? imports.getImportVar(fp) : \"null\",\n );\n const unauthorizedVars = (route.unauthorizedPaths ?? []).map((up) =>\n up ? imports.getImportVar(up) : \"null\",\n );\n const slotEntries = route.parallelSlots.map((slot) => {\n const interceptEntries = slot.interceptingRoutes.map(\n (ir) => ` {\n convention: ${JSON.stringify(ir.convention)},\n targetPattern: ${JSON.stringify(ir.targetPattern)},\n interceptLayouts: [${ir.layoutPaths.map((layoutPath) => imports.getImportVar(layoutPath)).join(\", \")}],\n page: ${imports.getImportVar(ir.pagePath)},\n params: ${JSON.stringify(ir.params)},\n }`,\n );\n return ` ${JSON.stringify(slot.key)}: {\n id: ${JSON.stringify(slot.id ?? null)},\n name: ${JSON.stringify(slot.name)},\n page: ${slot.pagePath ? imports.getImportVar(slot.pagePath) : \"null\"},\n default: ${slot.defaultPath ? imports.getImportVar(slot.defaultPath) : \"null\"},\n layout: ${slot.layoutPath ? imports.getImportVar(slot.layoutPath) : \"null\"},\n loading: ${slot.loadingPath ? imports.getImportVar(slot.loadingPath) : \"null\"},\n error: ${slot.errorPath ? imports.getImportVar(slot.errorPath) : \"null\"},\n layoutIndex: ${slot.layoutIndex},\n routeSegments: ${JSON.stringify(slot.routeSegments)},\n slotPatternParts: ${slot.slotPatternParts ? JSON.stringify(slot.slotPatternParts) : \"null\"},\n slotParamNames: ${slot.slotParamNames ? JSON.stringify(slot.slotParamNames) : \"null\"},\n intercepts: [\n${interceptEntries.join(\",\\n\")}\n ],\n }`;\n });\n const layoutErrorVars = (route.layoutErrorPaths || []).map((ep) =>\n ep ? imports.getImportVar(ep) : \"null\",\n );\n return ` {\n __buildTimeClassifications: __VINEXT_CLASS(${routeIdx}), // evaluated once at module load\n __buildTimeReasons: __classDebug ? __VINEXT_CLASS_REASONS(${routeIdx}) : null,\n ids: ${JSON.stringify(route.ids ?? null)},\n pattern: ${JSON.stringify(route.pattern)},\n patternParts: ${JSON.stringify(route.patternParts)},\n isDynamic: ${route.isDynamic},\n params: ${JSON.stringify(route.params)},\n rootParamNames: ${JSON.stringify(route.rootParamNames ?? [])},\n page: ${route.pagePath ? imports.getImportVar(route.pagePath) : \"null\"},\n routeHandler: ${route.routePath ? imports.getImportVar(route.routePath) : \"null\"},\n layouts: [${layoutVars.join(\", \")}],\n routeSegments: ${JSON.stringify(route.routeSegments)},\n templateTreePositions: ${JSON.stringify(route.templateTreePositions)},\n layoutTreePositions: ${JSON.stringify(route.layoutTreePositions)},\n templates: [${templateVars.join(\", \")}],\n errors: [${layoutErrorVars.join(\", \")}],\n slots: {\n${slotEntries.join(\",\\n\")}\n },\n loading: ${route.loadingPath ? imports.getImportVar(route.loadingPath) : \"null\"},\n error: ${route.errorPath ? imports.getImportVar(route.errorPath) : \"null\"},\n notFound: ${route.notFoundPath ? imports.getImportVar(route.notFoundPath) : \"null\"},\n notFounds: [${notFoundVars.join(\", \")}],\n forbidden: ${route.forbiddenPath ? imports.getImportVar(route.forbiddenPath) : \"null\"},\n forbiddens: [${forbiddenVars.join(\", \")}],\n unauthorized: ${route.unauthorizedPath ? imports.getImportVar(route.unauthorizedPath) : \"null\"},\n unauthorizeds: [${unauthorizedVars.join(\", \")}],\n }`;\n });\n}\n\nfunction buildGenerateStaticParamsEntries(routes: AppRoute[], imports: ImportAllocator): string[] {\n const entries: string[] = [];\n for (const route of routes) {\n if (!route.isDynamic || !route.pagePath) continue;\n entries.push(\n ` ${JSON.stringify(route.pattern)}: ${imports.getImportVar(route.pagePath)}?.generateStaticParams ?? null,`,\n );\n }\n return entries;\n}\n\nexport function buildAppRscManifestCode(\n options: BuildAppRscManifestCodeOptions,\n): AppRscManifestCode {\n const imports = createImportAllocator();\n const metadataRoutes = options.metadataRoutes ?? [];\n\n registerRouteModules(options.routes, imports);\n const routeEntries = buildRouteEntries(options.routes, imports);\n\n const rootRoute = options.routes.find((r) => r.pattern === \"/\");\n const rootNotFoundVar = rootRoute?.notFoundPath\n ? imports.getImportVar(rootRoute.notFoundPath)\n : null;\n const rootForbiddenVar = rootRoute?.forbiddenPath\n ? imports.getImportVar(rootRoute.forbiddenPath)\n : null;\n const rootUnauthorizedVar = rootRoute?.unauthorizedPath\n ? imports.getImportVar(rootRoute.unauthorizedPath)\n : null;\n const rootLayoutVars = rootRoute ? rootRoute.layouts.map((l) => imports.getImportVar(l)) : [];\n const globalErrorVar = options.globalErrorPath\n ? imports.getImportVar(options.globalErrorPath)\n : null;\n\n const dynamicMetadataRoutes = metadataRoutes.filter((r) => r.isDynamic);\n for (const route of dynamicMetadataRoutes) {\n imports.getImportVar(route.filePath);\n }\n\n return {\n imports: imports.imports,\n routeEntries,\n metaRouteEntries: createMetadataRouteEntriesSource(metadataRoutes, imports.importMap),\n generateStaticParamsEntries: buildGenerateStaticParamsEntries(options.routes, imports),\n rootNotFoundVar,\n rootForbiddenVar,\n rootUnauthorizedVar,\n rootLayoutVars,\n globalErrorVar,\n };\n}\n"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { patternToNextFormat } from "../routing/route-validation.js";
2
2
  import { pagesRouter } from "../routing/pages-router.js";
3
+ import { normalizePathSeparators } from "./runtime-entry-module.js";
3
4
  import { findFileWithExts } from "./pages-entry-helpers.js";
4
5
  //#region src/entries/pages-client-entry.ts
5
6
  /**
@@ -18,11 +19,11 @@ async function generateClientEntry(pagesDir, nextConfig, fileMatcher) {
18
19
  const appFilePath = findFileWithExts(pagesDir, "_app", fileMatcher);
19
20
  const hasApp = appFilePath !== null;
20
21
  const loaderEntries = pageRoutes.map((r) => {
21
- const absPath = r.filePath.replace(/\\/g, "/");
22
+ const absPath = normalizePathSeparators(r.filePath);
22
23
  const nextFormatPattern = patternToNextFormat(r.pattern);
23
24
  return ` ${JSON.stringify(nextFormatPattern)}: () => import(${JSON.stringify(absPath)})`;
24
25
  });
25
- const appFileBase = appFilePath?.replace(/\\/g, "/");
26
+ const appFileBase = appFilePath ? normalizePathSeparators(appFilePath) : void 0;
26
27
  return `
27
28
  import "vinext/instrumentation-client";
28
29
  import React from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"pages-client-entry.js","names":["pagesPatternToNextFormat"],"sources":["../../src/entries/pages-client-entry.ts"],"sourcesContent":["/**\n * Pages Router client hydration entry generator.\n *\n * Generates the virtual client entry module (`virtual:vinext-client-entry`).\n * This is the entry point for `vite build` (client bundle). It maps route\n * patterns to dynamic imports of page modules so Vite code-splits each page\n * into its own chunk. At runtime it reads __NEXT_DATA__ to determine which\n * page to hydrate.\n *\n * Extracted from index.ts.\n */\nimport {\n pagesRouter,\n patternToNextFormat as pagesPatternToNextFormat,\n type Route,\n} from \"../routing/pages-router.js\";\nimport { createValidFileMatcher } from \"../routing/file-matcher.js\";\nimport { type ResolvedNextConfig } from \"../config/next-config.js\";\nimport { findFileWithExts } from \"./pages-entry-helpers.js\";\n\nexport async function generateClientEntry(\n pagesDir: string,\n nextConfig: ResolvedNextConfig,\n fileMatcher: ReturnType<typeof createValidFileMatcher>,\n): Promise<string> {\n const pageRoutes = await pagesRouter(pagesDir, nextConfig?.pageExtensions, fileMatcher);\n\n const appFilePath = findFileWithExts(pagesDir, \"_app\", fileMatcher);\n const hasApp = appFilePath !== null;\n\n // Build a map of route pattern -> dynamic import.\n // Keys must use Next.js bracket format (e.g. \"/user/[id]\") to match\n // __NEXT_DATA__.page which is set via patternToNextFormat() during SSR.\n const loaderEntries = pageRoutes.map((r: Route) => {\n const absPath = r.filePath.replace(/\\\\/g, \"/\");\n const nextFormatPattern = pagesPatternToNextFormat(r.pattern);\n // JSON.stringify safely escapes quotes, backslashes, and special chars in\n // both the route pattern and the absolute file path.\n // lgtm[js/bad-code-sanitization]\n return ` ${JSON.stringify(nextFormatPattern)}: () => import(${JSON.stringify(absPath)})`;\n });\n\n const appFileBase = appFilePath?.replace(/\\\\/g, \"/\");\n\n return `\nimport \"vinext/instrumentation-client\";\nimport React from \"react\";\nimport { hydrateRoot } from \"react-dom/client\";\n// Eagerly import the router shim so its module-level popstate listener is\n// registered. Without this, browser back/forward buttons do nothing because\n// navigateClient() is never invoked on history changes.\nimport \"next/router\";\n\nconst pageLoaders = {\n${loaderEntries.join(\",\\n\")}\n};\n\nasync function hydrate() {\n const nextData = window.__NEXT_DATA__;\n if (!nextData) {\n console.error(\"[vinext] No __NEXT_DATA__ found\");\n return;\n }\n\n const { pageProps } = nextData.props;\n const loader = pageLoaders[nextData.page];\n if (!loader) {\n console.error(\"[vinext] No page loader for route:\", nextData.page);\n return;\n }\n\n const pageModule = await loader();\n const PageComponent = pageModule.default;\n if (!PageComponent) {\n console.error(\"[vinext] Page module has no default export\");\n return;\n }\n\n let element;\n ${\n hasApp\n ? `\n try {\n const appModule = await import(${JSON.stringify(appFileBase!)});\n const AppComponent = appModule.default;\n window.__VINEXT_APP__ = AppComponent;\n element = React.createElement(AppComponent, { Component: PageComponent, pageProps });\n } catch {\n element = React.createElement(PageComponent, pageProps);\n }\n `\n : `\n element = React.createElement(PageComponent, pageProps);\n `\n }\n\n // Wrap with RouterContext.Provider so next/compat/router works during hydration\n const { wrapWithRouterContext } = await import(\"next/router\");\n element = wrapWithRouterContext(element);\n\n const container = document.getElementById(\"__next\");\n if (!container) {\n console.error(\"[vinext] No #__next element found\");\n return;\n }\n\n const root = hydrateRoot(container, element);\n window.__VINEXT_ROOT__ = root;\n window.__VINEXT_HYDRATED_AT = performance.now();\n}\n\nhydrate();\n`;\n}\n"],"mappings":";;;;;;;;;;;;;;;AAoBA,eAAsB,oBACpB,UACA,YACA,aACiB;CACjB,MAAM,aAAa,MAAM,YAAY,UAAU,YAAY,gBAAgB,YAAY;CAEvF,MAAM,cAAc,iBAAiB,UAAU,QAAQ,YAAY;CACnE,MAAM,SAAS,gBAAgB;CAK/B,MAAM,gBAAgB,WAAW,KAAK,MAAa;EACjD,MAAM,UAAU,EAAE,SAAS,QAAQ,OAAO,IAAI;EAC9C,MAAM,oBAAoBA,oBAAyB,EAAE,QAAQ;AAI7D,SAAO,KAAK,KAAK,UAAU,kBAAkB,CAAC,iBAAiB,KAAK,UAAU,QAAQ,CAAC;GACvF;CAEF,MAAM,cAAc,aAAa,QAAQ,OAAO,IAAI;AAEpD,QAAO;;;;;;;;;;EAUP,cAAc,KAAK,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;IA0BxB,SACI;;qCAE6B,KAAK,UAAU,YAAa,CAAC;;;;;;;MAQ1D;;IAGL"}
1
+ {"version":3,"file":"pages-client-entry.js","names":["pagesPatternToNextFormat"],"sources":["../../src/entries/pages-client-entry.ts"],"sourcesContent":["/**\n * Pages Router client hydration entry generator.\n *\n * Generates the virtual client entry module (`virtual:vinext-client-entry`).\n * This is the entry point for `vite build` (client bundle). It maps route\n * patterns to dynamic imports of page modules so Vite code-splits each page\n * into its own chunk. At runtime it reads __NEXT_DATA__ to determine which\n * page to hydrate.\n *\n * Extracted from index.ts.\n */\nimport {\n pagesRouter,\n patternToNextFormat as pagesPatternToNextFormat,\n type Route,\n} from \"../routing/pages-router.js\";\nimport { createValidFileMatcher } from \"../routing/file-matcher.js\";\nimport { type ResolvedNextConfig } from \"../config/next-config.js\";\nimport { findFileWithExts } from \"./pages-entry-helpers.js\";\nimport { normalizePathSeparators } from \"./runtime-entry-module.js\";\n\nexport async function generateClientEntry(\n pagesDir: string,\n nextConfig: ResolvedNextConfig,\n fileMatcher: ReturnType<typeof createValidFileMatcher>,\n): Promise<string> {\n const pageRoutes = await pagesRouter(pagesDir, nextConfig?.pageExtensions, fileMatcher);\n\n const appFilePath = findFileWithExts(pagesDir, \"_app\", fileMatcher);\n const hasApp = appFilePath !== null;\n\n // Build a map of route pattern -> dynamic import.\n // Keys must use Next.js bracket format (e.g. \"/user/[id]\") to match\n // __NEXT_DATA__.page which is set via patternToNextFormat() during SSR.\n const loaderEntries = pageRoutes.map((r: Route) => {\n const absPath = normalizePathSeparators(r.filePath);\n const nextFormatPattern = pagesPatternToNextFormat(r.pattern);\n // JSON.stringify safely escapes quotes, backslashes, and special chars in\n // both the route pattern and the absolute file path.\n // lgtm[js/bad-code-sanitization]\n return ` ${JSON.stringify(nextFormatPattern)}: () => import(${JSON.stringify(absPath)})`;\n });\n\n const appFileBase = appFilePath ? normalizePathSeparators(appFilePath) : undefined;\n\n return `\nimport \"vinext/instrumentation-client\";\nimport React from \"react\";\nimport { hydrateRoot } from \"react-dom/client\";\n// Eagerly import the router shim so its module-level popstate listener is\n// registered. Without this, browser back/forward buttons do nothing because\n// navigateClient() is never invoked on history changes.\nimport \"next/router\";\n\nconst pageLoaders = {\n${loaderEntries.join(\",\\n\")}\n};\n\nasync function hydrate() {\n const nextData = window.__NEXT_DATA__;\n if (!nextData) {\n console.error(\"[vinext] No __NEXT_DATA__ found\");\n return;\n }\n\n const { pageProps } = nextData.props;\n const loader = pageLoaders[nextData.page];\n if (!loader) {\n console.error(\"[vinext] No page loader for route:\", nextData.page);\n return;\n }\n\n const pageModule = await loader();\n const PageComponent = pageModule.default;\n if (!PageComponent) {\n console.error(\"[vinext] Page module has no default export\");\n return;\n }\n\n let element;\n ${\n hasApp\n ? `\n try {\n const appModule = await import(${JSON.stringify(appFileBase!)});\n const AppComponent = appModule.default;\n window.__VINEXT_APP__ = AppComponent;\n element = React.createElement(AppComponent, { Component: PageComponent, pageProps });\n } catch {\n element = React.createElement(PageComponent, pageProps);\n }\n `\n : `\n element = React.createElement(PageComponent, pageProps);\n `\n }\n\n // Wrap with RouterContext.Provider so next/compat/router works during hydration\n const { wrapWithRouterContext } = await import(\"next/router\");\n element = wrapWithRouterContext(element);\n\n const container = document.getElementById(\"__next\");\n if (!container) {\n console.error(\"[vinext] No #__next element found\");\n return;\n }\n\n const root = hydrateRoot(container, element);\n window.__VINEXT_ROOT__ = root;\n window.__VINEXT_HYDRATED_AT = performance.now();\n}\n\nhydrate();\n`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAqBA,eAAsB,oBACpB,UACA,YACA,aACiB;CACjB,MAAM,aAAa,MAAM,YAAY,UAAU,YAAY,gBAAgB,YAAY;CAEvF,MAAM,cAAc,iBAAiB,UAAU,QAAQ,YAAY;CACnE,MAAM,SAAS,gBAAgB;CAK/B,MAAM,gBAAgB,WAAW,KAAK,MAAa;EACjD,MAAM,UAAU,wBAAwB,EAAE,SAAS;EACnD,MAAM,oBAAoBA,oBAAyB,EAAE,QAAQ;AAI7D,SAAO,KAAK,KAAK,UAAU,kBAAkB,CAAC,iBAAiB,KAAK,UAAU,QAAQ,CAAC;GACvF;CAEF,MAAM,cAAc,cAAc,wBAAwB,YAAY,GAAG,KAAA;AAEzE,QAAO;;;;;;;;;;EAUP,cAAc,KAAK,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;IA0BxB,SACI;;qCAE6B,KAAK,UAAU,YAAa,CAAC;;;;;;;MAQ1D;;IAGL"}
@@ -1,5 +1,5 @@
1
1
  import { apiRouter, pagesRouter } from "../routing/pages-router.js";
2
- import { resolveEntryPath } from "./runtime-entry-module.js";
2
+ import { normalizePathSeparators, resolveEntryPath } from "./runtime-entry-module.js";
3
3
  import { isProxyFile } from "../server/middleware.js";
4
4
  import { findFileWithExts } from "./pages-entry-helpers.js";
5
5
  //#region src/entries/pages-server-entry.ts
@@ -30,22 +30,22 @@ async function generateServerEntry(pagesDir, nextConfig, fileMatcher, middleware
30
30
  const pageRoutes = await pagesRouter(pagesDir, nextConfig?.pageExtensions, fileMatcher);
31
31
  const apiRoutes = await apiRouter(pagesDir, nextConfig?.pageExtensions, fileMatcher);
32
32
  const pageImports = pageRoutes.map((r, i) => {
33
- const absPath = r.filePath.replace(/\\/g, "/");
33
+ const absPath = normalizePathSeparators(r.filePath);
34
34
  return `import * as page_${i} from ${JSON.stringify(absPath)};`;
35
35
  });
36
36
  const apiImports = apiRoutes.map((r, i) => {
37
- const absPath = r.filePath.replace(/\\/g, "/");
37
+ const absPath = normalizePathSeparators(r.filePath);
38
38
  return `import * as api_${i} from ${JSON.stringify(absPath)};`;
39
39
  });
40
40
  const pageRouteEntries = pageRoutes.map((r, i) => {
41
- const absPath = r.filePath.replace(/\\/g, "/");
41
+ const absPath = normalizePathSeparators(r.filePath);
42
42
  return ` { pattern: ${JSON.stringify(r.pattern)}, patternParts: ${JSON.stringify(r.patternParts)}, isDynamic: ${r.isDynamic}, params: ${JSON.stringify(r.params)}, module: page_${i}, filePath: ${JSON.stringify(absPath)} }`;
43
43
  });
44
44
  const apiRouteEntries = apiRoutes.map((r, i) => ` { pattern: ${JSON.stringify(r.pattern)}, patternParts: ${JSON.stringify(r.patternParts)}, isDynamic: ${r.isDynamic}, params: ${JSON.stringify(r.params)}, module: api_${i} }`);
45
45
  const appFilePath = findFileWithExts(pagesDir, "_app", fileMatcher);
46
46
  const docFilePath = findFileWithExts(pagesDir, "_document", fileMatcher);
47
- const appImportCode = appFilePath !== null ? `import { default as AppComponent } from ${JSON.stringify(appFilePath.replace(/\\/g, "/"))};` : `const AppComponent = null;`;
48
- const docImportCode = docFilePath !== null ? `import { default as DocumentComponent } from ${JSON.stringify(docFilePath.replace(/\\/g, "/"))};` : `const DocumentComponent = null;`;
47
+ const appImportCode = appFilePath !== null ? `import { default as AppComponent } from ${JSON.stringify(normalizePathSeparators(appFilePath))};` : `const AppComponent = null;`;
48
+ const docImportCode = docFilePath !== null ? `import { default as DocumentComponent } from ${JSON.stringify(normalizePathSeparators(docFilePath))};` : `const DocumentComponent = null;`;
49
49
  const i18nConfigJson = nextConfig?.i18n ? JSON.stringify({
50
50
  locales: nextConfig.i18n.locales,
51
51
  defaultLocale: nextConfig.i18n.defaultLocale,
@@ -63,6 +63,7 @@ async function generateServerEntry(pagesDir, nextConfig, fileMatcher, middleware
63
63
  fallback: []
64
64
  },
65
65
  headers: nextConfig?.headers ?? [],
66
+ expireTime: nextConfig?.expireTime,
66
67
  i18n: nextConfig?.i18n ?? null,
67
68
  images: {
68
69
  deviceSizes: nextConfig?.images?.deviceSizes,
@@ -72,7 +73,7 @@ async function generateServerEntry(pagesDir, nextConfig, fileMatcher, middleware
72
73
  contentSecurityPolicy: nextConfig?.images?.contentSecurityPolicy
73
74
  }
74
75
  });
75
- const instrumentationImportCode = instrumentationPath ? `import * as _instrumentation from ${JSON.stringify(instrumentationPath.replace(/\\/g, "/"))};` : "";
76
+ const instrumentationImportCode = instrumentationPath ? `import * as _instrumentation from ${JSON.stringify(normalizePathSeparators(instrumentationPath))};` : "";
76
77
  const instrumentationInitCode = instrumentationPath ? `// Run instrumentation register() once at module evaluation time — before any
77
78
  // requests are handled. Matches Next.js semantics: register() is called once
78
79
  // on startup in the process that handles requests.
@@ -84,7 +85,7 @@ if (typeof _instrumentation.register === "function") {
84
85
  if (typeof _instrumentation.onRequestError === "function") {
85
86
  globalThis.__VINEXT_onRequestErrorHandler__ = _instrumentation.onRequestError;
86
87
  }` : "";
87
- const middlewareImportCode = middlewarePath ? `import * as middlewareModule from ${JSON.stringify(middlewarePath.replace(/\\/g, "/"))};` : "";
88
+ const middlewareImportCode = middlewarePath ? `import * as middlewareModule from ${JSON.stringify(normalizePathSeparators(middlewarePath))};` : "";
88
89
  const middlewareExportCode = middlewarePath ? `
89
90
  export async function runMiddleware(request, ctx) {
90
91
  return __runGeneratedMiddleware({
@@ -151,8 +152,8 @@ export const vinextConfig = ${vinextConfigJson};
151
152
  function isrGet(key) {
152
153
  return __sharedIsrGet(key);
153
154
  }
154
- function isrSet(key, data, revalidateSeconds, tags) {
155
- return __sharedIsrSet(key, data, revalidateSeconds, tags);
155
+ function isrSet(key, data, revalidateSeconds, tags, expireSeconds) {
156
+ return __sharedIsrSet(key, data, revalidateSeconds, tags, expireSeconds);
156
157
  }
157
158
  function triggerBackgroundRegeneration(key, renderFn, errorContext) {
158
159
  return __sharedTriggerBackgroundRegeneration(key, renderFn, errorContext);
@@ -224,10 +225,13 @@ function parseQuery(url) {
224
225
  }
225
226
 
226
227
  function patternToNextFormat(pattern) {
228
+ // Match any non-/ param name. Non-greedy with lookahead prevents
229
+ // the +/* suffix being consumed into the param name when the name
230
+ // itself contains + or * internally (e.g. :c++lang → [c++lang]).
227
231
  return pattern
228
- .replace(/:([\\w]+)\\*/g, "[[...$1]]")
229
- .replace(/:([\\w]+)\\+/g, "[...$1]")
230
- .replace(/:([\\w]+)/g, "[$1]");
232
+ .replace(/:([^\\/]+?)\\+(?=\\/|$)/g, "[...$1]")
233
+ .replace(/:([^\\/]+?)\\*(?=\\/|$)/g, "[[...$1]]")
234
+ .replace(/:([^\\/]+?)(?=\\/|$)/g, "[$1]");
231
235
  }
232
236
 
233
237
  function collectAssetTags(manifest, moduleIds, scriptNonce) {
@@ -339,53 +343,6 @@ function collectAssetTags(manifest, moduleIds, scriptNonce) {
339
343
  return tags.join("\\n ");
340
344
  }
341
345
 
342
- // i18n helpers
343
- function extractLocale(url) {
344
- if (!i18nConfig) return { locale: undefined, url, hadPrefix: false };
345
- const pathname = url.split("?")[0];
346
- const parts = pathname.split("/").filter(Boolean);
347
- const query = url.includes("?") ? url.slice(url.indexOf("?")) : "";
348
- if (parts.length > 0 && i18nConfig.locales.includes(parts[0])) {
349
- const locale = parts[0];
350
- const rest = "/" + parts.slice(1).join("/");
351
- return { locale, url: (rest || "/") + query, hadPrefix: true };
352
- }
353
- return { locale: i18nConfig.defaultLocale, url, hadPrefix: false };
354
- }
355
-
356
- function detectLocaleFromHeaders(headers) {
357
- if (!i18nConfig) return null;
358
- const acceptLang = headers.get("accept-language");
359
- if (!acceptLang) return null;
360
- const langs = acceptLang.split(",").map(function(part) {
361
- const pieces = part.trim().split(";");
362
- const q = pieces[1] ? parseFloat(pieces[1].replace("q=", "")) : 1;
363
- return { lang: pieces[0].trim().toLowerCase(), q: q };
364
- }).sort(function(a, b) { return b.q - a.q; });
365
- for (let k = 0; k < langs.length; k++) {
366
- const lang = langs[k].lang;
367
- for (let j = 0; j < i18nConfig.locales.length; j++) {
368
- if (i18nConfig.locales[j].toLowerCase() === lang) return i18nConfig.locales[j];
369
- }
370
- const prefix = lang.split("-")[0];
371
- for (let j = 0; j < i18nConfig.locales.length; j++) {
372
- const loc = i18nConfig.locales[j].toLowerCase();
373
- if (loc === prefix || loc.startsWith(prefix + "-")) return i18nConfig.locales[j];
374
- }
375
- }
376
- return null;
377
- }
378
-
379
- function parseCookieLocaleFromHeader(cookieHeader) {
380
- if (!i18nConfig || !cookieHeader) return null;
381
- const match = cookieHeader.match(/(?:^|;\\s*)NEXT_LOCALE=([^;]*)/);
382
- if (!match) return null;
383
- var value;
384
- try { value = decodeURIComponent(match[1].trim()); } catch (e) { return null; }
385
- if (i18nConfig.locales.indexOf(value) !== -1) return value;
386
- return null;
387
- }
388
-
389
346
  export async function renderPage(request, url, manifest, ctx, middlewareHeaders) {
390
347
  if (ctx) return _runWithExecutionContext(ctx, () => _renderPage(request, url, manifest, middlewareHeaders));
391
348
  return _renderPage(request, url, manifest, middlewareHeaders);
@@ -511,6 +468,7 @@ async function _renderPage(request, url, manifest, middlewareHeaders) {
511
468
  isrCacheKey,
512
469
  isrGet,
513
470
  isrSet,
471
+ expireSeconds: vinextConfig.expireTime,
514
472
  pageModule,
515
473
  params,
516
474
  query,
@@ -583,6 +541,7 @@ async function _renderPage(request, url, manifest, middlewareHeaders) {
583
541
  getSSRHeadHTML: typeof getSSRHeadHTML === "function" ? getSSRHeadHTML : undefined,
584
542
  gsspRes,
585
543
  isrCacheKey,
544
+ expireSeconds: vinextConfig.expireTime,
586
545
  isrRevalidateSeconds,
587
546
  isrSet,
588
547
  i18n: {
@@ -596,7 +555,6 @@ async function _renderPage(request, url, manifest, middlewareHeaders) {
596
555
  renderDocumentToString(element) {
597
556
  return renderToStringAsync(element);
598
557
  },
599
- renderIsrPassToStringAsync,
600
558
  renderToReadableStream(element) {
601
559
  return renderToReadableStream(element);
602
560
  },