vinext 0.0.54 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (977) hide show
  1. package/README.md +52 -15
  2. package/dist/build/clean-output.d.ts +1 -2
  3. package/dist/build/clean-output.js +0 -2
  4. package/dist/build/client-build-config.d.ts +16 -3
  5. package/dist/build/client-build-config.js +29 -4
  6. package/dist/build/css-url-assets.d.ts +29 -0
  7. package/dist/build/css-url-assets.js +211 -0
  8. package/dist/build/google-fonts/build-url.d.ts +1 -2
  9. package/dist/build/google-fonts/build-url.js +0 -2
  10. package/dist/build/google-fonts/fallback-metrics-data.js +0 -2
  11. package/dist/build/google-fonts/fallback-metrics.d.ts +1 -2
  12. package/dist/build/google-fonts/fallback-metrics.js +0 -2
  13. package/dist/build/google-fonts/font-data.js +0 -2
  14. package/dist/build/google-fonts/font-metadata.d.ts +1 -2
  15. package/dist/build/google-fonts/font-metadata.js +0 -2
  16. package/dist/build/google-fonts/get-axes.d.ts +1 -2
  17. package/dist/build/google-fonts/get-axes.js +0 -2
  18. package/dist/build/google-fonts/sort-variants.d.ts +1 -2
  19. package/dist/build/google-fonts/sort-variants.js +0 -2
  20. package/dist/build/google-fonts/validate.d.ts +1 -2
  21. package/dist/build/google-fonts/validate.js +0 -2
  22. package/dist/build/inline-css.d.ts +1 -2
  23. package/dist/build/inline-css.js +0 -2
  24. package/dist/build/layout-classification-types.d.ts +1 -2
  25. package/dist/build/layout-classification.d.ts +2 -3
  26. package/dist/build/layout-classification.js +1 -3
  27. package/dist/build/next-client-runtime-manifests.d.ts +14 -0
  28. package/dist/build/next-client-runtime-manifests.js +39 -0
  29. package/dist/build/nitro-route-rules.d.ts +1 -2
  30. package/dist/build/nitro-route-rules.js +0 -2
  31. package/dist/build/precompress.d.ts +1 -2
  32. package/dist/build/precompress.js +0 -2
  33. package/dist/build/prerender.d.ts +2 -3
  34. package/dist/build/prerender.js +14 -2
  35. package/dist/build/report.d.ts +1 -2
  36. package/dist/build/report.js +0 -2
  37. package/dist/build/route-classification-injector.d.ts +1 -2
  38. package/dist/build/route-classification-injector.js +4 -6
  39. package/dist/build/route-classification-manifest.d.ts +5 -6
  40. package/dist/build/route-classification-manifest.js +5 -7
  41. package/dist/build/run-prerender.d.ts +1 -2
  42. package/dist/build/run-prerender.js +15 -7
  43. package/dist/build/server-manifest.d.ts +1 -2
  44. package/dist/build/server-manifest.js +0 -2
  45. package/dist/build/ssr-manifest.d.ts +1 -2
  46. package/dist/build/ssr-manifest.js +2 -4
  47. package/dist/build/standalone.d.ts +1 -2
  48. package/dist/build/standalone.js +0 -2
  49. package/dist/build/static-export.d.ts +2 -3
  50. package/dist/build/static-export.js +0 -2
  51. package/dist/cache/cache-adapters-virtual.d.ts +50 -0
  52. package/dist/cache/cache-adapters-virtual.js +45 -0
  53. package/dist/check.d.ts +33 -2
  54. package/dist/check.js +321 -27
  55. package/dist/cli-args.d.ts +1 -2
  56. package/dist/cli-args.js +0 -2
  57. package/dist/cli.js +7 -13
  58. package/dist/client/instrumentation-client-inject.d.ts +1 -2
  59. package/dist/client/instrumentation-client-inject.js +0 -2
  60. package/dist/client/instrumentation-client-state.d.ts +1 -2
  61. package/dist/client/instrumentation-client-state.js +0 -2
  62. package/dist/client/instrumentation-client.d.ts +1 -2
  63. package/dist/client/instrumentation-client.js +0 -2
  64. package/dist/client/navigation-runtime.d.ts +2 -2
  65. package/dist/client/navigation-runtime.js +1 -3
  66. package/dist/client/pages-router-link-navigation.d.ts +1 -2
  67. package/dist/client/pages-router-link-navigation.js +0 -2
  68. package/dist/client/validate-module-path.d.ts +1 -2
  69. package/dist/client/validate-module-path.js +0 -2
  70. package/dist/client/vinext-next-data.d.ts +1 -2
  71. package/dist/client/vinext-next-data.js +0 -2
  72. package/dist/client/window-next.d.ts +1 -2
  73. package/dist/client/window-next.js +0 -2
  74. package/dist/cloudflare/index.d.ts +1 -1
  75. package/dist/cloudflare/index.js +1 -1
  76. package/dist/cloudflare/src/cache/cdn-adapter.runtime.js +97 -0
  77. package/dist/cloudflare/{kv-cache-handler.d.ts → src/cache/kv-data-adapter.runtime.d.ts} +25 -6
  78. package/dist/cloudflare/{kv-cache-handler.js → src/cache/kv-data-adapter.runtime.js} +36 -28
  79. package/dist/cloudflare/src/utils/cache-control-metadata.js +20 -0
  80. package/dist/cloudflare/tpr.d.ts +2 -3
  81. package/dist/cloudflare/tpr.js +8 -8
  82. package/dist/config/config-matchers.d.ts +1 -2
  83. package/dist/config/config-matchers.js +0 -2
  84. package/dist/config/dotenv.d.ts +1 -2
  85. package/dist/config/dotenv.js +0 -2
  86. package/dist/config/next-config.d.ts +30 -3
  87. package/dist/config/next-config.js +47 -8
  88. package/dist/config/tsconfig-paths.d.ts +12 -4
  89. package/dist/config/tsconfig-paths.js +58 -31
  90. package/dist/deploy.d.ts +48 -3
  91. package/dist/deploy.js +141 -112
  92. package/dist/entries/app-browser-entry.d.ts +1 -2
  93. package/dist/entries/app-browser-entry.js +0 -2
  94. package/dist/entries/app-rsc-entry.d.ts +6 -5
  95. package/dist/entries/app-rsc-entry.js +62 -61
  96. package/dist/entries/app-rsc-manifest.d.ts +1 -2
  97. package/dist/entries/app-rsc-manifest.js +42 -12
  98. package/dist/entries/app-ssr-entry.d.ts +1 -2
  99. package/dist/entries/app-ssr-entry.js +0 -2
  100. package/dist/entries/pages-client-entry.d.ts +3 -3
  101. package/dist/entries/pages-client-entry.js +16 -5
  102. package/dist/entries/pages-entry-helpers.d.ts +2 -11
  103. package/dist/entries/pages-entry-helpers.js +1 -20
  104. package/dist/entries/pages-server-entry.d.ts +2 -3
  105. package/dist/entries/pages-server-entry.js +94 -670
  106. package/dist/entries/runtime-entry-module.d.ts +1 -2
  107. package/dist/entries/runtime-entry-module.js +0 -2
  108. package/dist/index.d.ts +22 -2
  109. package/dist/index.js +297 -140
  110. package/dist/init.d.ts +1 -2
  111. package/dist/init.js +1 -3
  112. package/dist/plugins/ast-utils.d.ts +20 -0
  113. package/dist/plugins/ast-utils.js +78 -0
  114. package/dist/plugins/async-hooks-stub.d.ts +1 -2
  115. package/dist/plugins/async-hooks-stub.js +0 -2
  116. package/dist/plugins/client-reference-dedup.d.ts +1 -2
  117. package/dist/plugins/client-reference-dedup.js +4 -8
  118. package/dist/plugins/css-data-url.d.ts +1 -2
  119. package/dist/plugins/css-data-url.js +0 -2
  120. package/dist/plugins/fonts.d.ts +13 -3
  121. package/dist/plugins/fonts.js +19 -13
  122. package/dist/plugins/import-meta-url.d.ts +16 -0
  123. package/dist/plugins/import-meta-url.js +347 -0
  124. package/dist/plugins/instrumentation-client.d.ts +1 -2
  125. package/dist/plugins/instrumentation-client.js +0 -2
  126. package/dist/plugins/middleware-server-only.d.ts +1 -2
  127. package/dist/plugins/middleware-server-only.js +0 -2
  128. package/dist/plugins/og-assets.d.ts +32 -8
  129. package/dist/plugins/og-assets.js +126 -34
  130. package/dist/plugins/optimize-imports.d.ts +1 -2
  131. package/dist/plugins/optimize-imports.js +9 -17
  132. package/dist/plugins/postcss.d.ts +1 -2
  133. package/dist/plugins/postcss.js +0 -2
  134. package/dist/plugins/remove-console.d.ts +1 -2
  135. package/dist/plugins/remove-console.js +0 -2
  136. package/dist/plugins/rsc-client-reference-loaders.d.ts +1 -2
  137. package/dist/plugins/rsc-client-reference-loaders.js +0 -2
  138. package/dist/plugins/rsc-client-shim-excludes.d.ts +1 -2
  139. package/dist/plugins/rsc-client-shim-excludes.js +0 -2
  140. package/dist/plugins/sass.d.ts +1 -2
  141. package/dist/plugins/sass.js +0 -2
  142. package/dist/plugins/server-externals-manifest.d.ts +1 -2
  143. package/dist/plugins/server-externals-manifest.js +0 -2
  144. package/dist/plugins/strip-server-exports.d.ts +1 -2
  145. package/dist/plugins/strip-server-exports.js +0 -2
  146. package/dist/routing/app-route-graph.d.ts +2 -9
  147. package/dist/routing/app-route-graph.js +9 -30
  148. package/dist/routing/app-router.d.ts +1 -2
  149. package/dist/routing/app-router.js +0 -2
  150. package/dist/routing/file-matcher.d.ts +6 -2
  151. package/dist/routing/file-matcher.js +15 -7
  152. package/dist/routing/pages-router.d.ts +1 -2
  153. package/dist/routing/pages-router.js +0 -2
  154. package/dist/routing/route-matching.d.ts +1 -2
  155. package/dist/routing/route-matching.js +0 -2
  156. package/dist/routing/route-pattern.d.ts +1 -2
  157. package/dist/routing/route-pattern.js +0 -2
  158. package/dist/routing/route-trie.d.ts +1 -2
  159. package/dist/routing/route-trie.js +0 -2
  160. package/dist/routing/route-validation.d.ts +1 -2
  161. package/dist/routing/route-validation.js +0 -2
  162. package/dist/routing/utils.d.ts +44 -2
  163. package/dist/routing/utils.js +62 -3
  164. package/dist/server/api-handler.d.ts +1 -2
  165. package/dist/server/api-handler.js +0 -2
  166. package/dist/server/app-bfcache-id.d.ts +5 -0
  167. package/dist/server/app-bfcache-id.js +5 -0
  168. package/dist/server/app-browser-action-result.d.ts +9 -17
  169. package/dist/server/app-browser-action-result.js +25 -16
  170. package/dist/server/app-browser-client-reuse-manifest.d.ts +12 -0
  171. package/dist/server/app-browser-client-reuse-manifest.js +101 -0
  172. package/dist/server/app-browser-entry.js +352 -115
  173. package/dist/server/app-browser-error.d.ts +1 -2
  174. package/dist/server/app-browser-error.js +0 -2
  175. package/dist/server/app-browser-hydration.d.ts +1 -2
  176. package/dist/server/app-browser-hydration.js +0 -2
  177. package/dist/server/app-browser-interception-context.d.ts +1 -2
  178. package/dist/server/app-browser-interception-context.js +0 -2
  179. package/dist/server/app-browser-mpa-navigation.d.ts +16 -0
  180. package/dist/server/app-browser-mpa-navigation.js +42 -0
  181. package/dist/server/app-browser-navigation-controller.d.ts +5 -4
  182. package/dist/server/app-browser-navigation-controller.js +3 -3
  183. package/dist/server/app-browser-popstate.d.ts +4 -3
  184. package/dist/server/app-browser-popstate.js +15 -3
  185. package/dist/server/app-browser-rsc-redirect.d.ts +1 -2
  186. package/dist/server/app-browser-rsc-redirect.js +0 -2
  187. package/dist/server/app-browser-state.d.ts +28 -4
  188. package/dist/server/app-browser-state.js +195 -11
  189. package/dist/server/app-browser-stream.d.ts +1 -2
  190. package/dist/server/app-browser-stream.js +0 -2
  191. package/dist/server/app-browser-visible-commit.d.ts +2 -3
  192. package/dist/server/app-browser-visible-commit.js +24 -17
  193. package/dist/server/app-client-reference-preloader.d.ts +1 -2
  194. package/dist/server/app-client-reference-preloader.js +0 -2
  195. package/dist/server/app-elements-wire.d.ts +14 -8
  196. package/dist/server/app-elements-wire.js +45 -24
  197. package/dist/server/app-elements.d.ts +2 -3
  198. package/dist/server/app-elements.js +2 -4
  199. package/dist/server/app-fallback-renderer.d.ts +5 -5
  200. package/dist/server/app-fallback-renderer.js +4 -3
  201. package/dist/server/app-history-state.d.ts +18 -2
  202. package/dist/server/app-history-state.js +68 -10
  203. package/dist/server/app-hook-warning-suppression.d.ts +1 -2
  204. package/dist/server/app-hook-warning-suppression.js +0 -2
  205. package/dist/server/app-inline-css-client.d.ts +1 -2
  206. package/dist/server/app-inline-css-client.js +0 -2
  207. package/dist/server/app-interception-context-header.d.ts +1 -2
  208. package/dist/server/app-interception-context-header.js +0 -2
  209. package/dist/server/app-layout-param-observation.d.ts +43 -0
  210. package/dist/server/app-layout-param-observation.js +168 -0
  211. package/dist/server/app-middleware.d.ts +1 -2
  212. package/dist/server/app-middleware.js +0 -2
  213. package/dist/server/app-mounted-slots-header.d.ts +1 -2
  214. package/dist/server/app-mounted-slots-header.js +0 -2
  215. package/dist/server/app-optimistic-routing.d.ts +1 -2
  216. package/dist/server/app-optimistic-routing.js +0 -2
  217. package/dist/server/app-page-boundary-render.d.ts +4 -3
  218. package/dist/server/app-page-boundary-render.js +20 -11
  219. package/dist/server/app-page-boundary.d.ts +11 -2
  220. package/dist/server/app-page-boundary.js +13 -4
  221. package/dist/server/app-page-cache.d.ts +3 -3
  222. package/dist/server/app-page-cache.js +36 -11
  223. package/dist/server/app-page-dispatch.d.ts +19 -5
  224. package/dist/server/app-page-dispatch.js +119 -24
  225. package/dist/server/app-page-element-builder.d.ts +3 -2
  226. package/dist/server/app-page-element-builder.js +9 -11
  227. package/dist/server/app-page-execution.d.ts +8 -3
  228. package/dist/server/app-page-execution.js +55 -24
  229. package/dist/server/app-page-head.d.ts +1 -2
  230. package/dist/server/app-page-head.js +6 -6
  231. package/dist/server/app-page-method.d.ts +1 -2
  232. package/dist/server/app-page-method.js +0 -2
  233. package/dist/server/app-page-params.d.ts +2 -2
  234. package/dist/server/app-page-params.js +14 -3
  235. package/dist/server/app-page-probe.d.ts +90 -2
  236. package/dist/server/app-page-probe.js +201 -6
  237. package/dist/server/app-page-render-identity.d.ts +1 -2
  238. package/dist/server/app-page-render-identity.js +0 -2
  239. package/dist/server/app-page-render-observation.d.ts +1 -2
  240. package/dist/server/app-page-render-observation.js +0 -2
  241. package/dist/server/app-page-render.d.ts +9 -3
  242. package/dist/server/app-page-render.js +167 -10
  243. package/dist/server/app-page-request.d.ts +4 -3
  244. package/dist/server/app-page-request.js +1 -3
  245. package/dist/server/app-page-response.d.ts +2 -2
  246. package/dist/server/app-page-response.js +5 -3
  247. package/dist/server/app-page-route-wiring.d.ts +14 -3
  248. package/dist/server/app-page-route-wiring.js +63 -11
  249. package/dist/server/app-page-search-params-observation.d.ts +10 -0
  250. package/dist/server/app-page-search-params-observation.js +20 -0
  251. package/dist/server/app-page-segment-state.d.ts +1 -2
  252. package/dist/server/app-page-segment-state.js +1 -8
  253. package/dist/server/app-page-stream.d.ts +19 -9
  254. package/dist/server/app-page-stream.js +28 -10
  255. package/dist/server/app-pages-bridge.d.ts +25 -0
  256. package/dist/server/app-pages-bridge.js +34 -0
  257. package/dist/server/app-post-middleware-context.d.ts +1 -2
  258. package/dist/server/app-post-middleware-context.js +0 -2
  259. package/dist/server/app-ppr-fallback-shell.d.ts +21 -0
  260. package/dist/server/app-ppr-fallback-shell.js +82 -0
  261. package/dist/server/app-prerender-endpoints.d.ts +1 -2
  262. package/dist/server/app-prerender-endpoints.js +0 -2
  263. package/dist/server/app-prerender-static-params.d.ts +15 -2
  264. package/dist/server/app-prerender-static-params.js +44 -13
  265. package/dist/server/app-render-dependency.d.ts +3 -2
  266. package/dist/server/app-render-dependency.js +9 -3
  267. package/dist/server/app-request-context.d.ts +1 -2
  268. package/dist/server/app-request-context.js +0 -2
  269. package/dist/server/app-route-handler-cache.d.ts +1 -2
  270. package/dist/server/app-route-handler-cache.js +0 -2
  271. package/dist/server/app-route-handler-dispatch.d.ts +1 -2
  272. package/dist/server/app-route-handler-dispatch.js +0 -2
  273. package/dist/server/app-route-handler-execution.d.ts +1 -2
  274. package/dist/server/app-route-handler-execution.js +2 -4
  275. package/dist/server/app-route-handler-policy.d.ts +1 -2
  276. package/dist/server/app-route-handler-policy.js +0 -2
  277. package/dist/server/app-route-handler-response.d.ts +2 -3
  278. package/dist/server/app-route-handler-response.js +8 -7
  279. package/dist/server/app-route-handler-runtime.d.ts +1 -2
  280. package/dist/server/app-route-handler-runtime.js +0 -2
  281. package/dist/server/app-route-module-loader.d.ts +43 -0
  282. package/dist/server/app-route-module-loader.js +32 -0
  283. package/dist/server/app-router-entry.d.ts +1 -2
  284. package/dist/server/app-router-entry.js +2 -2
  285. package/dist/server/app-rsc-cache-busting.d.ts +12 -3
  286. package/dist/server/app-rsc-cache-busting.js +21 -10
  287. package/dist/server/app-rsc-embedded-chunks.d.ts +1 -2
  288. package/dist/server/app-rsc-embedded-chunks.js +0 -2
  289. package/dist/server/app-rsc-error-handler.d.ts +1 -2
  290. package/dist/server/app-rsc-error-handler.js +0 -2
  291. package/dist/server/app-rsc-errors.d.ts +1 -2
  292. package/dist/server/app-rsc-errors.js +0 -2
  293. package/dist/server/app-rsc-handler.d.ts +16 -2
  294. package/dist/server/app-rsc-handler.js +32 -14
  295. package/dist/server/app-rsc-render-mode.d.ts +1 -2
  296. package/dist/server/app-rsc-render-mode.js +0 -2
  297. package/dist/server/app-rsc-request-normalization.d.ts +4 -5
  298. package/dist/server/app-rsc-request-normalization.js +2 -4
  299. package/dist/server/app-rsc-response-finalizer.d.ts +1 -2
  300. package/dist/server/app-rsc-response-finalizer.js +2 -2
  301. package/dist/server/app-rsc-route-matching.d.ts +1 -2
  302. package/dist/server/app-rsc-route-matching.js +0 -2
  303. package/dist/server/app-segment-config.d.ts +5 -3
  304. package/dist/server/app-segment-config.js +12 -3
  305. package/dist/server/app-server-action-execution.d.ts +12 -2
  306. package/dist/server/app-server-action-execution.js +200 -25
  307. package/dist/server/app-ssr-entry.d.ts +5 -4
  308. package/dist/server/app-ssr-entry.js +31 -15
  309. package/dist/server/app-ssr-error-meta.d.ts +1 -2
  310. package/dist/server/app-ssr-error-meta.js +0 -2
  311. package/dist/server/app-ssr-stream.d.ts +1 -2
  312. package/dist/server/app-ssr-stream.js +31 -3
  313. package/dist/server/app-static-generation.d.ts +1 -2
  314. package/dist/server/app-static-generation.js +0 -2
  315. package/dist/server/app-visited-response-cache.d.ts +23 -0
  316. package/dist/server/app-visited-response-cache.js +19 -0
  317. package/dist/server/artifact-compatibility.d.ts +2 -2
  318. package/dist/server/artifact-compatibility.js +12 -7
  319. package/dist/server/cache-control.d.ts +15 -2
  320. package/dist/server/cache-control.js +21 -3
  321. package/dist/server/cache-headers.d.ts +1 -2
  322. package/dist/server/cache-headers.js +0 -2
  323. package/dist/server/cache-proof.d.ts +1 -2
  324. package/dist/server/cache-proof.js +0 -2
  325. package/dist/server/client-reuse-manifest.d.ts +10 -5
  326. package/dist/server/client-reuse-manifest.js +7 -10
  327. package/dist/server/client-trace-metadata.d.ts +1 -2
  328. package/dist/server/client-trace-metadata.js +0 -2
  329. package/dist/server/cookie-utils.d.ts +1 -2
  330. package/dist/server/cookie-utils.js +0 -2
  331. package/dist/server/csp.d.ts +1 -2
  332. package/dist/server/csp.js +0 -2
  333. package/dist/server/default-global-error-module.d.ts +1 -2
  334. package/dist/server/default-global-error-module.js +0 -2
  335. package/dist/server/default-not-found-module.d.ts +1 -2
  336. package/dist/server/default-not-found-module.js +0 -2
  337. package/dist/server/dev-error-overlay-store.d.ts +20 -4
  338. package/dist/server/dev-error-overlay-store.js +23 -4
  339. package/dist/server/dev-error-overlay.d.ts +39 -3
  340. package/dist/server/dev-error-overlay.js +952 -164
  341. package/dist/server/dev-initial-server-error.d.ts +9 -0
  342. package/dist/server/dev-initial-server-error.js +26 -0
  343. package/dist/server/dev-lockfile.d.ts +1 -2
  344. package/dist/server/dev-lockfile.js +0 -2
  345. package/dist/server/dev-module-runner.d.ts +1 -2
  346. package/dist/server/dev-module-runner.js +0 -2
  347. package/dist/server/dev-origin-check.d.ts +1 -2
  348. package/dist/server/dev-origin-check.js +0 -2
  349. package/dist/server/dev-route-files.d.ts +1 -2
  350. package/dist/server/dev-route-files.js +0 -2
  351. package/dist/server/dev-server.d.ts +2 -3
  352. package/dist/server/dev-server.js +127 -28
  353. package/dist/server/dev-stack-sourcemap-endpoint.d.ts +4 -0
  354. package/dist/server/dev-stack-sourcemap-endpoint.js +4 -0
  355. package/dist/server/dev-stack-sourcemap.d.ts +43 -0
  356. package/dist/server/dev-stack-sourcemap.js +443 -0
  357. package/dist/server/document-initial-head.d.ts +6 -0
  358. package/dist/server/document-initial-head.js +33 -0
  359. package/dist/server/edge-api-runtime.d.ts +1 -2
  360. package/dist/server/edge-api-runtime.js +0 -2
  361. package/dist/server/file-based-metadata.d.ts +1 -2
  362. package/dist/server/file-based-metadata.js +0 -2
  363. package/dist/server/headers.d.ts +3 -2
  364. package/dist/server/headers.js +3 -3
  365. package/dist/server/html.d.ts +1 -2
  366. package/dist/server/html.js +0 -2
  367. package/dist/server/http-error-responses.d.ts +1 -2
  368. package/dist/server/http-error-responses.js +0 -2
  369. package/dist/server/image-optimization.d.ts +1 -2
  370. package/dist/server/image-optimization.js +0 -2
  371. package/dist/server/implicit-tags.d.ts +1 -2
  372. package/dist/server/implicit-tags.js +0 -2
  373. package/dist/server/instrumentation-runtime.d.ts +1 -2
  374. package/dist/server/instrumentation-runtime.js +0 -2
  375. package/dist/server/instrumentation.d.ts +1 -2
  376. package/dist/server/instrumentation.js +0 -2
  377. package/dist/server/isr-cache.d.ts +10 -3
  378. package/dist/server/isr-cache.js +13 -28
  379. package/dist/server/metadata-route-build-data.d.ts +1 -2
  380. package/dist/server/metadata-route-build-data.js +0 -2
  381. package/dist/server/metadata-route-response.d.ts +1 -2
  382. package/dist/server/metadata-route-response.js +0 -2
  383. package/dist/server/metadata-routes.d.ts +1 -2
  384. package/dist/server/metadata-routes.js +0 -2
  385. package/dist/server/middleware-matcher.d.ts +1 -2
  386. package/dist/server/middleware-matcher.js +0 -2
  387. package/dist/server/middleware-request-headers.d.ts +1 -2
  388. package/dist/server/middleware-request-headers.js +0 -2
  389. package/dist/server/middleware-response-headers.d.ts +1 -2
  390. package/dist/server/middleware-response-headers.js +0 -2
  391. package/dist/server/middleware-runtime.d.ts +1 -2
  392. package/dist/server/middleware-runtime.js +14 -5
  393. package/dist/server/middleware.d.ts +2 -3
  394. package/dist/server/middleware.js +0 -2
  395. package/dist/server/navigation-planner.d.ts +16 -2
  396. package/dist/server/navigation-planner.js +1 -3
  397. package/dist/server/navigation-trace.d.ts +1 -2
  398. package/dist/server/navigation-trace.js +0 -2
  399. package/dist/server/next-error-digest.d.ts +1 -2
  400. package/dist/server/next-error-digest.js +0 -2
  401. package/dist/server/normalize-path.d.ts +1 -2
  402. package/dist/server/normalize-path.js +0 -2
  403. package/dist/server/pages-api-route.d.ts +1 -2
  404. package/dist/server/pages-api-route.js +1 -3
  405. package/dist/server/pages-asset-tags.d.ts +66 -0
  406. package/dist/server/pages-asset-tags.js +116 -0
  407. package/dist/server/pages-body-parser-config.d.ts +1 -2
  408. package/dist/server/pages-body-parser-config.js +0 -2
  409. package/dist/server/pages-data-route.d.ts +39 -2
  410. package/dist/server/pages-data-route.js +46 -3
  411. package/dist/server/pages-default-404.d.ts +1 -2
  412. package/dist/server/pages-default-404.js +0 -2
  413. package/dist/server/pages-document-initial-props.d.ts +84 -3
  414. package/dist/server/pages-document-initial-props.js +127 -3
  415. package/dist/server/pages-get-initial-props.d.ts +17 -0
  416. package/dist/server/pages-get-initial-props.js +50 -0
  417. package/dist/server/pages-i18n.d.ts +1 -2
  418. package/dist/server/pages-i18n.js +0 -2
  419. package/dist/server/pages-media-type.d.ts +1 -2
  420. package/dist/server/pages-media-type.js +1 -2
  421. package/dist/server/pages-node-compat.d.ts +9 -2
  422. package/dist/server/pages-node-compat.js +35 -4
  423. package/dist/server/pages-page-data.d.ts +7 -3
  424. package/dist/server/pages-page-data.js +75 -33
  425. package/dist/server/pages-page-handler.d.ts +90 -0
  426. package/dist/server/pages-page-handler.js +335 -0
  427. package/dist/server/pages-page-method.d.ts +1 -2
  428. package/dist/server/pages-page-method.js +0 -2
  429. package/dist/server/pages-page-response.d.ts +15 -2
  430. package/dist/server/pages-page-response.js +39 -12
  431. package/dist/server/pages-serializable-props.d.ts +1 -2
  432. package/dist/server/pages-serializable-props.js +0 -2
  433. package/dist/server/pregenerated-concrete-paths.d.ts +32 -0
  434. package/dist/server/pregenerated-concrete-paths.js +78 -0
  435. package/dist/server/prerender-route-params.d.ts +13 -3
  436. package/dist/server/prerender-route-params.js +30 -11
  437. package/dist/server/prerender-work-unit-setup.d.ts +1 -2
  438. package/dist/server/prerender-work-unit-setup.js +0 -2
  439. package/dist/server/prod-server.d.ts +2 -4
  440. package/dist/server/prod-server.js +13 -8
  441. package/dist/server/proxy-trust.d.ts +1 -2
  442. package/dist/server/proxy-trust.js +0 -2
  443. package/dist/server/request-log.d.ts +1 -2
  444. package/dist/server/request-log.js +0 -2
  445. package/dist/server/request-pipeline.d.ts +14 -2
  446. package/dist/server/request-pipeline.js +42 -3
  447. package/dist/server/rsc-stream-hints.d.ts +1 -2
  448. package/dist/server/rsc-stream-hints.js +0 -2
  449. package/dist/server/seed-cache.d.ts +6 -2
  450. package/dist/server/seed-cache.js +10 -8
  451. package/dist/server/server-action-not-found.d.ts +1 -2
  452. package/dist/server/server-action-not-found.js +0 -2
  453. package/dist/server/server-globals.d.ts +1 -2
  454. package/dist/server/server-globals.js +0 -2
  455. package/dist/server/skip-cache-proof.d.ts +23 -3
  456. package/dist/server/skip-cache-proof.js +81 -14
  457. package/dist/server/socket-error-backstop.d.ts +1 -2
  458. package/dist/server/socket-error-backstop.js +0 -2
  459. package/dist/server/static-file-cache.d.ts +1 -2
  460. package/dist/server/static-file-cache.js +0 -2
  461. package/dist/server/static-layout-client-reuse-proof.d.ts +15 -0
  462. package/dist/server/static-layout-client-reuse-proof.js +33 -0
  463. package/dist/server/streaming-metadata.d.ts +1 -2
  464. package/dist/server/streaming-metadata.js +0 -2
  465. package/dist/server/worker-utils.d.ts +1 -2
  466. package/dist/server/worker-utils.js +3 -6
  467. package/dist/shims/amp.d.ts +1 -2
  468. package/dist/shims/amp.js +0 -2
  469. package/dist/shims/app-router-scroll-state.d.ts +1 -2
  470. package/dist/shims/app-router-scroll-state.js +0 -2
  471. package/dist/shims/app-router-scroll.d.ts +3 -5
  472. package/dist/shims/app-router-scroll.js +0 -2
  473. package/dist/shims/app.d.ts +1 -2
  474. package/dist/shims/app.js +0 -2
  475. package/dist/shims/before-interactive-context.d.ts +1 -2
  476. package/dist/shims/before-interactive-context.js +0 -2
  477. package/dist/shims/cache-for-request.d.ts +1 -2
  478. package/dist/shims/cache-for-request.js +0 -2
  479. package/dist/shims/cache-runtime.d.ts +20 -5
  480. package/dist/shims/cache-runtime.js +35 -30
  481. package/dist/shims/cache.d.ts +68 -7
  482. package/dist/shims/cache.js +179 -25
  483. package/dist/shims/cdn-cache.d.ts +125 -0
  484. package/dist/shims/cdn-cache.js +100 -0
  485. package/dist/shims/client-hook-error.d.ts +1 -2
  486. package/dist/shims/client-hook-error.js +0 -2
  487. package/dist/shims/client-locale.d.ts +1 -2
  488. package/dist/shims/client-locale.js +1 -3
  489. package/dist/shims/compat-router.d.ts +1 -2
  490. package/dist/shims/compat-router.js +0 -2
  491. package/dist/shims/config.d.ts +1 -2
  492. package/dist/shims/config.js +0 -2
  493. package/dist/shims/constants.d.ts +1 -2
  494. package/dist/shims/constants.js +0 -2
  495. package/dist/shims/default-global-error.d.ts +3 -4
  496. package/dist/shims/default-global-error.js +0 -2
  497. package/dist/shims/default-not-found.d.ts +1 -2
  498. package/dist/shims/default-not-found.js +0 -2
  499. package/dist/shims/document.d.ts +11 -7
  500. package/dist/shims/document.js +7 -10
  501. package/dist/shims/dynamic.d.ts +1 -2
  502. package/dist/shims/dynamic.js +0 -2
  503. package/dist/shims/error-boundary.d.ts +16 -12
  504. package/dist/shims/error-boundary.js +60 -28
  505. package/dist/shims/error.d.ts +1 -2
  506. package/dist/shims/error.js +0 -2
  507. package/dist/shims/fetch-cache.d.ts +3 -2
  508. package/dist/shims/fetch-cache.js +18 -9
  509. package/dist/shims/font-google-base.d.ts +1 -2
  510. package/dist/shims/font-google-base.js +1 -13
  511. package/dist/shims/font-local.d.ts +1 -2
  512. package/dist/shims/font-local.js +1 -15
  513. package/dist/shims/font-utils.d.ts +7 -2
  514. package/dist/shims/font-utils.js +13 -3
  515. package/dist/shims/form.d.ts +12 -5
  516. package/dist/shims/form.js +98 -21
  517. package/dist/shims/hash-scroll.d.ts +4 -2
  518. package/dist/shims/hash-scroll.js +13 -3
  519. package/dist/shims/head-state.d.ts +2 -2
  520. package/dist/shims/head-state.js +18 -5
  521. package/dist/shims/head.d.ts +35 -2
  522. package/dist/shims/head.js +113 -16
  523. package/dist/shims/headers.d.ts +9 -2
  524. package/dist/shims/headers.js +13 -3
  525. package/dist/shims/i18n-context.d.ts +1 -2
  526. package/dist/shims/i18n-context.js +0 -2
  527. package/dist/shims/i18n-state.d.ts +1 -2
  528. package/dist/shims/i18n-state.js +0 -2
  529. package/dist/shims/image-config.d.ts +1 -2
  530. package/dist/shims/image-config.js +0 -2
  531. package/dist/shims/image.d.ts +1 -2
  532. package/dist/shims/image.js +1 -3
  533. package/dist/shims/internal/als-registry.d.ts +1 -2
  534. package/dist/shims/internal/als-registry.js +0 -2
  535. package/dist/shims/internal/api-utils.d.ts +1 -2
  536. package/dist/shims/internal/app-route-detection.d.ts +1 -2
  537. package/dist/shims/internal/app-route-detection.js +0 -2
  538. package/dist/shims/internal/app-router-context.d.ts +1 -2
  539. package/dist/shims/internal/app-router-context.js +0 -2
  540. package/dist/shims/internal/cookie-serialize.d.ts +1 -2
  541. package/dist/shims/internal/cookie-serialize.js +0 -2
  542. package/dist/shims/internal/make-hanging-promise.d.ts +1 -2
  543. package/dist/shims/internal/make-hanging-promise.js +0 -2
  544. package/dist/shims/internal/pages-data-fetch-dedup.d.ts +55 -0
  545. package/dist/shims/internal/pages-data-fetch-dedup.js +68 -0
  546. package/dist/shims/internal/pages-data-target.d.ts +1 -2
  547. package/dist/shims/internal/pages-data-target.js +0 -2
  548. package/dist/shims/internal/pages-data-url.d.ts +1 -2
  549. package/dist/shims/internal/pages-data-url.js +0 -2
  550. package/dist/shims/internal/parse-cookie-header.d.ts +1 -2
  551. package/dist/shims/internal/parse-cookie-header.js +0 -2
  552. package/dist/shims/internal/router-context.d.ts +2 -4
  553. package/dist/shims/internal/router-context.js +0 -2
  554. package/dist/shims/internal/utils.d.ts +1 -2
  555. package/dist/shims/internal/utils.js +0 -2
  556. package/dist/shims/internal/work-unit-async-storage.d.ts +1 -2
  557. package/dist/shims/internal/work-unit-async-storage.js +0 -2
  558. package/dist/shims/layout-segment-context.d.ts +2 -4
  559. package/dist/shims/layout-segment-context.js +0 -2
  560. package/dist/shims/legacy-image.d.ts +1 -2
  561. package/dist/shims/legacy-image.js +0 -2
  562. package/dist/shims/link-prefetch.d.ts +1 -2
  563. package/dist/shims/link-prefetch.js +0 -2
  564. package/dist/shims/link.d.ts +2 -2
  565. package/dist/shims/link.js +47 -15
  566. package/dist/shims/metadata.d.ts +4 -5
  567. package/dist/shims/metadata.js +1 -3
  568. package/dist/shims/navigation-state.d.ts +1 -2
  569. package/dist/shims/navigation-state.js +0 -2
  570. package/dist/shims/navigation.d.ts +61 -7
  571. package/dist/shims/navigation.js +244 -47
  572. package/dist/shims/navigation.react-server.d.ts +1 -2
  573. package/dist/shims/navigation.react-server.js +0 -2
  574. package/dist/shims/offline.d.ts +1 -2
  575. package/dist/shims/offline.js +0 -2
  576. package/dist/shims/og.d.ts +1 -2
  577. package/dist/shims/og.js +2 -4
  578. package/dist/shims/pages-router-runtime.d.ts +7 -2
  579. package/dist/shims/pages-router-runtime.js +11 -3
  580. package/dist/shims/ppr-fallback-shell.d.ts +29 -0
  581. package/dist/shims/ppr-fallback-shell.js +149 -0
  582. package/dist/shims/readonly-url-search-params.d.ts +1 -2
  583. package/dist/shims/readonly-url-search-params.js +0 -2
  584. package/dist/shims/request-context.d.ts +9 -5
  585. package/dist/shims/request-context.js +0 -2
  586. package/dist/shims/request-state-types.d.ts +1 -1
  587. package/dist/shims/root-params.d.ts +1 -2
  588. package/dist/shims/root-params.js +0 -2
  589. package/dist/shims/router-state.d.ts +1 -2
  590. package/dist/shims/router-state.js +0 -2
  591. package/dist/shims/router.d.ts +1 -2
  592. package/dist/shims/router.js +172 -37
  593. package/dist/shims/script-nonce-context.d.ts +1 -2
  594. package/dist/shims/script-nonce-context.js +0 -2
  595. package/dist/shims/script.d.ts +1 -2
  596. package/dist/shims/script.js +0 -2
  597. package/dist/shims/server.d.ts +1 -2
  598. package/dist/shims/server.js +0 -2
  599. package/dist/shims/slot.d.ts +11 -4
  600. package/dist/shims/slot.js +121 -9
  601. package/dist/shims/thenable-params.d.ts +6 -3
  602. package/dist/shims/thenable-params.js +131 -12
  603. package/dist/shims/unified-request-context.d.ts +1 -2
  604. package/dist/shims/unified-request-context.js +3 -2
  605. package/dist/shims/unrecognized-action-error.d.ts +1 -2
  606. package/dist/shims/unrecognized-action-error.js +0 -2
  607. package/dist/shims/url-safety.d.ts +1 -2
  608. package/dist/shims/url-safety.js +0 -2
  609. package/dist/shims/url-utils.d.ts +1 -2
  610. package/dist/shims/url-utils.js +0 -2
  611. package/dist/shims/use-merged-ref.d.ts +1 -2
  612. package/dist/shims/use-merged-ref.js +0 -2
  613. package/dist/shims/web-vitals.d.ts +1 -2
  614. package/dist/shims/web-vitals.js +0 -2
  615. package/dist/typegen.d.ts +1 -2
  616. package/dist/typegen.js +2 -9
  617. package/dist/utils/asset-prefix.d.ts +1 -2
  618. package/dist/utils/asset-prefix.js +0 -2
  619. package/dist/utils/base-path.d.ts +1 -2
  620. package/dist/utils/base-path.js +0 -2
  621. package/dist/utils/cache-control-metadata.d.ts +1 -4
  622. package/dist/utils/cache-control-metadata.js +1 -3
  623. package/dist/utils/client-build-manifest.d.ts +14 -0
  624. package/dist/utils/client-build-manifest.js +52 -0
  625. package/dist/utils/compare.d.ts +4 -0
  626. package/dist/utils/compare.js +8 -0
  627. package/dist/utils/dev-error-recovery-event.d.ts +4 -0
  628. package/dist/utils/dev-error-recovery-event.js +4 -0
  629. package/dist/utils/domain-locale.d.ts +1 -2
  630. package/dist/utils/domain-locale.js +2 -4
  631. package/dist/utils/encode-cache-tag.d.ts +1 -2
  632. package/dist/utils/encode-cache-tag.js +0 -2
  633. package/dist/utils/error-cause.d.ts +1 -2
  634. package/dist/utils/error-cause.js +0 -2
  635. package/dist/utils/hash.d.ts +1 -2
  636. package/dist/utils/hash.js +1 -3
  637. package/dist/utils/html-limited-bots.d.ts +1 -2
  638. package/dist/utils/html-limited-bots.js +0 -2
  639. package/dist/utils/lazy-chunks.d.ts +1 -2
  640. package/dist/utils/lazy-chunks.js +0 -2
  641. package/dist/utils/manifest-paths.d.ts +8 -3
  642. package/dist/utils/manifest-paths.js +15 -3
  643. package/dist/utils/mdx-scan.d.ts +1 -2
  644. package/dist/utils/mdx-scan.js +0 -2
  645. package/dist/utils/navigation-signal.d.ts +1 -2
  646. package/dist/utils/navigation-signal.js +0 -2
  647. package/dist/utils/number.d.ts +4 -0
  648. package/dist/utils/number.js +6 -0
  649. package/dist/utils/path.d.ts +4 -2
  650. package/dist/utils/path.js +5 -3
  651. package/dist/utils/prerender-output-paths.d.ts +1 -2
  652. package/dist/utils/prerender-output-paths.js +0 -2
  653. package/dist/utils/project.d.ts +1 -2
  654. package/dist/utils/project.js +0 -2
  655. package/dist/utils/promise.d.ts +4 -0
  656. package/dist/utils/promise.js +6 -0
  657. package/dist/utils/public-routes.d.ts +1 -2
  658. package/dist/utils/public-routes.js +0 -2
  659. package/dist/utils/query.d.ts +1 -2
  660. package/dist/utils/query.js +0 -2
  661. package/dist/utils/record.d.ts +1 -2
  662. package/dist/utils/record.js +0 -2
  663. package/dist/utils/regex.d.ts +4 -0
  664. package/dist/utils/regex.js +6 -0
  665. package/dist/utils/safe-json-file.d.ts +1 -2
  666. package/dist/utils/safe-json-file.js +0 -2
  667. package/dist/utils/sorted-array.d.ts +1 -2
  668. package/dist/utils/sorted-array.js +0 -2
  669. package/dist/utils/text-stream.d.ts +1 -2
  670. package/dist/utils/text-stream.js +0 -2
  671. package/dist/utils/vinext-root.d.ts +1 -2
  672. package/dist/utils/vinext-root.js +0 -2
  673. package/dist/utils/vite-version.d.ts +10 -0
  674. package/dist/utils/vite-version.js +34 -0
  675. package/package.json +20 -7
  676. package/dist/build/clean-output.js.map +0 -1
  677. package/dist/build/client-build-config.js.map +0 -1
  678. package/dist/build/google-fonts/build-url.js.map +0 -1
  679. package/dist/build/google-fonts/fallback-metrics-data.js.map +0 -1
  680. package/dist/build/google-fonts/fallback-metrics.js.map +0 -1
  681. package/dist/build/google-fonts/font-data.js.map +0 -1
  682. package/dist/build/google-fonts/font-metadata.js.map +0 -1
  683. package/dist/build/google-fonts/get-axes.js.map +0 -1
  684. package/dist/build/google-fonts/sort-variants.js.map +0 -1
  685. package/dist/build/google-fonts/validate.js.map +0 -1
  686. package/dist/build/inline-css.js.map +0 -1
  687. package/dist/build/layout-classification.js.map +0 -1
  688. package/dist/build/nitro-route-rules.js.map +0 -1
  689. package/dist/build/precompress.js.map +0 -1
  690. package/dist/build/prerender.js.map +0 -1
  691. package/dist/build/report.js.map +0 -1
  692. package/dist/build/route-classification-injector.js.map +0 -1
  693. package/dist/build/route-classification-manifest.js.map +0 -1
  694. package/dist/build/run-prerender.js.map +0 -1
  695. package/dist/build/server-manifest.js.map +0 -1
  696. package/dist/build/ssr-manifest.js.map +0 -1
  697. package/dist/build/standalone.js.map +0 -1
  698. package/dist/build/static-export.js.map +0 -1
  699. package/dist/check.js.map +0 -1
  700. package/dist/cli-args.js.map +0 -1
  701. package/dist/cli.js.map +0 -1
  702. package/dist/client/instrumentation-client-inject.js.map +0 -1
  703. package/dist/client/instrumentation-client-state.js.map +0 -1
  704. package/dist/client/instrumentation-client.js.map +0 -1
  705. package/dist/client/navigation-runtime.js.map +0 -1
  706. package/dist/client/pages-router-link-navigation.js.map +0 -1
  707. package/dist/client/validate-module-path.js.map +0 -1
  708. package/dist/client/vinext-next-data.js.map +0 -1
  709. package/dist/client/window-next.js.map +0 -1
  710. package/dist/cloudflare/kv-cache-handler.js.map +0 -1
  711. package/dist/cloudflare/tpr.js.map +0 -1
  712. package/dist/config/config-matchers.js.map +0 -1
  713. package/dist/config/dotenv.js.map +0 -1
  714. package/dist/config/next-config.js.map +0 -1
  715. package/dist/config/tsconfig-paths.js.map +0 -1
  716. package/dist/deploy.js.map +0 -1
  717. package/dist/entries/app-browser-entry.js.map +0 -1
  718. package/dist/entries/app-rsc-entry.js.map +0 -1
  719. package/dist/entries/app-rsc-manifest.js.map +0 -1
  720. package/dist/entries/app-ssr-entry.js.map +0 -1
  721. package/dist/entries/pages-client-entry.js.map +0 -1
  722. package/dist/entries/pages-entry-helpers.js.map +0 -1
  723. package/dist/entries/pages-server-entry.js.map +0 -1
  724. package/dist/entries/runtime-entry-module.js.map +0 -1
  725. package/dist/index.js.map +0 -1
  726. package/dist/init.js.map +0 -1
  727. package/dist/plugins/async-hooks-stub.js.map +0 -1
  728. package/dist/plugins/client-reference-dedup.js.map +0 -1
  729. package/dist/plugins/css-data-url.js.map +0 -1
  730. package/dist/plugins/fonts.js.map +0 -1
  731. package/dist/plugins/instrumentation-client.js.map +0 -1
  732. package/dist/plugins/middleware-server-only.js.map +0 -1
  733. package/dist/plugins/og-assets.js.map +0 -1
  734. package/dist/plugins/optimize-imports.js.map +0 -1
  735. package/dist/plugins/postcss.js.map +0 -1
  736. package/dist/plugins/remove-console.js.map +0 -1
  737. package/dist/plugins/rsc-client-reference-loaders.js.map +0 -1
  738. package/dist/plugins/rsc-client-shim-excludes.js.map +0 -1
  739. package/dist/plugins/sass.js.map +0 -1
  740. package/dist/plugins/server-externals-manifest.js.map +0 -1
  741. package/dist/plugins/strip-server-exports.js.map +0 -1
  742. package/dist/routing/app-route-graph.js.map +0 -1
  743. package/dist/routing/app-router.js.map +0 -1
  744. package/dist/routing/file-matcher.js.map +0 -1
  745. package/dist/routing/pages-router.js.map +0 -1
  746. package/dist/routing/route-matching.js.map +0 -1
  747. package/dist/routing/route-pattern.js.map +0 -1
  748. package/dist/routing/route-trie.js.map +0 -1
  749. package/dist/routing/route-validation.js.map +0 -1
  750. package/dist/routing/utils.js.map +0 -1
  751. package/dist/server/api-handler.js.map +0 -1
  752. package/dist/server/app-browser-action-result.js.map +0 -1
  753. package/dist/server/app-browser-entry.js.map +0 -1
  754. package/dist/server/app-browser-error.js.map +0 -1
  755. package/dist/server/app-browser-hydration.js.map +0 -1
  756. package/dist/server/app-browser-interception-context.js.map +0 -1
  757. package/dist/server/app-browser-navigation-controller.js.map +0 -1
  758. package/dist/server/app-browser-popstate.js.map +0 -1
  759. package/dist/server/app-browser-rsc-redirect.js.map +0 -1
  760. package/dist/server/app-browser-state.js.map +0 -1
  761. package/dist/server/app-browser-stream.js.map +0 -1
  762. package/dist/server/app-browser-visible-commit.js.map +0 -1
  763. package/dist/server/app-client-reference-preloader.js.map +0 -1
  764. package/dist/server/app-elements-wire.js.map +0 -1
  765. package/dist/server/app-elements.js.map +0 -1
  766. package/dist/server/app-fallback-renderer.js.map +0 -1
  767. package/dist/server/app-history-state.js.map +0 -1
  768. package/dist/server/app-hook-warning-suppression.js.map +0 -1
  769. package/dist/server/app-inline-css-client.js.map +0 -1
  770. package/dist/server/app-interception-context-header.js.map +0 -1
  771. package/dist/server/app-middleware.js.map +0 -1
  772. package/dist/server/app-mounted-slots-header.js.map +0 -1
  773. package/dist/server/app-optimistic-routing.js.map +0 -1
  774. package/dist/server/app-page-boundary-render.js.map +0 -1
  775. package/dist/server/app-page-boundary.js.map +0 -1
  776. package/dist/server/app-page-cache.js.map +0 -1
  777. package/dist/server/app-page-dispatch.js.map +0 -1
  778. package/dist/server/app-page-element-builder.js.map +0 -1
  779. package/dist/server/app-page-execution.js.map +0 -1
  780. package/dist/server/app-page-head.js.map +0 -1
  781. package/dist/server/app-page-method.js.map +0 -1
  782. package/dist/server/app-page-params.js.map +0 -1
  783. package/dist/server/app-page-probe.js.map +0 -1
  784. package/dist/server/app-page-render-identity.js.map +0 -1
  785. package/dist/server/app-page-render-observation.js.map +0 -1
  786. package/dist/server/app-page-render.js.map +0 -1
  787. package/dist/server/app-page-request.js.map +0 -1
  788. package/dist/server/app-page-response.js.map +0 -1
  789. package/dist/server/app-page-route-wiring.js.map +0 -1
  790. package/dist/server/app-page-segment-state.js.map +0 -1
  791. package/dist/server/app-page-stream.js.map +0 -1
  792. package/dist/server/app-post-middleware-context.js.map +0 -1
  793. package/dist/server/app-prerender-endpoints.js.map +0 -1
  794. package/dist/server/app-prerender-static-params.js.map +0 -1
  795. package/dist/server/app-render-dependency.js.map +0 -1
  796. package/dist/server/app-request-context.js.map +0 -1
  797. package/dist/server/app-route-handler-cache.js.map +0 -1
  798. package/dist/server/app-route-handler-dispatch.js.map +0 -1
  799. package/dist/server/app-route-handler-execution.js.map +0 -1
  800. package/dist/server/app-route-handler-policy.js.map +0 -1
  801. package/dist/server/app-route-handler-response.js.map +0 -1
  802. package/dist/server/app-route-handler-runtime.js.map +0 -1
  803. package/dist/server/app-router-entry.js.map +0 -1
  804. package/dist/server/app-rsc-cache-busting.js.map +0 -1
  805. package/dist/server/app-rsc-embedded-chunks.js.map +0 -1
  806. package/dist/server/app-rsc-error-handler.js.map +0 -1
  807. package/dist/server/app-rsc-errors.js.map +0 -1
  808. package/dist/server/app-rsc-handler.js.map +0 -1
  809. package/dist/server/app-rsc-render-mode.js.map +0 -1
  810. package/dist/server/app-rsc-request-normalization.js.map +0 -1
  811. package/dist/server/app-rsc-response-finalizer.js.map +0 -1
  812. package/dist/server/app-rsc-route-matching.js.map +0 -1
  813. package/dist/server/app-segment-config.js.map +0 -1
  814. package/dist/server/app-server-action-execution.js.map +0 -1
  815. package/dist/server/app-ssr-entry.js.map +0 -1
  816. package/dist/server/app-ssr-error-meta.js.map +0 -1
  817. package/dist/server/app-ssr-stream.js.map +0 -1
  818. package/dist/server/app-static-generation.js.map +0 -1
  819. package/dist/server/artifact-compatibility.js.map +0 -1
  820. package/dist/server/cache-control.js.map +0 -1
  821. package/dist/server/cache-headers.js.map +0 -1
  822. package/dist/server/cache-proof.js.map +0 -1
  823. package/dist/server/client-reuse-manifest.js.map +0 -1
  824. package/dist/server/client-trace-metadata.js.map +0 -1
  825. package/dist/server/cookie-utils.js.map +0 -1
  826. package/dist/server/csp.js.map +0 -1
  827. package/dist/server/default-global-error-module.js.map +0 -1
  828. package/dist/server/default-not-found-module.js.map +0 -1
  829. package/dist/server/dev-error-overlay-store.js.map +0 -1
  830. package/dist/server/dev-error-overlay.js.map +0 -1
  831. package/dist/server/dev-lockfile.js.map +0 -1
  832. package/dist/server/dev-module-runner.js.map +0 -1
  833. package/dist/server/dev-origin-check.js.map +0 -1
  834. package/dist/server/dev-route-files.js.map +0 -1
  835. package/dist/server/dev-server.js.map +0 -1
  836. package/dist/server/edge-api-runtime.js.map +0 -1
  837. package/dist/server/file-based-metadata.js.map +0 -1
  838. package/dist/server/headers.js.map +0 -1
  839. package/dist/server/html.js.map +0 -1
  840. package/dist/server/http-error-responses.js.map +0 -1
  841. package/dist/server/image-optimization.js.map +0 -1
  842. package/dist/server/implicit-tags.js.map +0 -1
  843. package/dist/server/instrumentation-runtime.js.map +0 -1
  844. package/dist/server/instrumentation.js.map +0 -1
  845. package/dist/server/isr-cache.js.map +0 -1
  846. package/dist/server/metadata-route-build-data.js.map +0 -1
  847. package/dist/server/metadata-route-response.js.map +0 -1
  848. package/dist/server/metadata-routes.js.map +0 -1
  849. package/dist/server/middleware-matcher.js.map +0 -1
  850. package/dist/server/middleware-request-headers.js.map +0 -1
  851. package/dist/server/middleware-response-headers.js.map +0 -1
  852. package/dist/server/middleware-runtime.js.map +0 -1
  853. package/dist/server/middleware.js.map +0 -1
  854. package/dist/server/navigation-planner.js.map +0 -1
  855. package/dist/server/navigation-trace.js.map +0 -1
  856. package/dist/server/next-error-digest.js.map +0 -1
  857. package/dist/server/normalize-path.js.map +0 -1
  858. package/dist/server/pages-api-route.js.map +0 -1
  859. package/dist/server/pages-body-parser-config.js.map +0 -1
  860. package/dist/server/pages-data-route.js.map +0 -1
  861. package/dist/server/pages-default-404.js.map +0 -1
  862. package/dist/server/pages-document-initial-props.js.map +0 -1
  863. package/dist/server/pages-i18n.js.map +0 -1
  864. package/dist/server/pages-media-type.js.map +0 -1
  865. package/dist/server/pages-node-compat.js.map +0 -1
  866. package/dist/server/pages-page-data.js.map +0 -1
  867. package/dist/server/pages-page-method.js.map +0 -1
  868. package/dist/server/pages-page-response.js.map +0 -1
  869. package/dist/server/pages-serializable-props.js.map +0 -1
  870. package/dist/server/prerender-route-params.js.map +0 -1
  871. package/dist/server/prerender-work-unit-setup.js.map +0 -1
  872. package/dist/server/prod-server.js.map +0 -1
  873. package/dist/server/proxy-trust.js.map +0 -1
  874. package/dist/server/request-log.js.map +0 -1
  875. package/dist/server/request-pipeline.js.map +0 -1
  876. package/dist/server/rsc-stream-hints.js.map +0 -1
  877. package/dist/server/seed-cache.js.map +0 -1
  878. package/dist/server/server-action-not-found.js.map +0 -1
  879. package/dist/server/server-globals.js.map +0 -1
  880. package/dist/server/skip-cache-proof.js.map +0 -1
  881. package/dist/server/socket-error-backstop.js.map +0 -1
  882. package/dist/server/static-file-cache.js.map +0 -1
  883. package/dist/server/streaming-metadata.js.map +0 -1
  884. package/dist/server/worker-utils.js.map +0 -1
  885. package/dist/shims/amp.js.map +0 -1
  886. package/dist/shims/app-router-scroll-state.js.map +0 -1
  887. package/dist/shims/app-router-scroll.js.map +0 -1
  888. package/dist/shims/app.js.map +0 -1
  889. package/dist/shims/before-interactive-context.js.map +0 -1
  890. package/dist/shims/cache-for-request.js.map +0 -1
  891. package/dist/shims/cache-runtime.js.map +0 -1
  892. package/dist/shims/cache.js.map +0 -1
  893. package/dist/shims/client-hook-error.js.map +0 -1
  894. package/dist/shims/client-locale.js.map +0 -1
  895. package/dist/shims/compat-router.js.map +0 -1
  896. package/dist/shims/config.js.map +0 -1
  897. package/dist/shims/constants.js.map +0 -1
  898. package/dist/shims/default-global-error.js.map +0 -1
  899. package/dist/shims/default-not-found.js.map +0 -1
  900. package/dist/shims/document.js.map +0 -1
  901. package/dist/shims/dynamic.js.map +0 -1
  902. package/dist/shims/error-boundary.js.map +0 -1
  903. package/dist/shims/error.js.map +0 -1
  904. package/dist/shims/fetch-cache.js.map +0 -1
  905. package/dist/shims/font-google-base.js.map +0 -1
  906. package/dist/shims/font-local.js.map +0 -1
  907. package/dist/shims/font-utils.js.map +0 -1
  908. package/dist/shims/form.js.map +0 -1
  909. package/dist/shims/hash-scroll.js.map +0 -1
  910. package/dist/shims/head-state.js.map +0 -1
  911. package/dist/shims/head.js.map +0 -1
  912. package/dist/shims/headers.js.map +0 -1
  913. package/dist/shims/i18n-context.js.map +0 -1
  914. package/dist/shims/i18n-state.js.map +0 -1
  915. package/dist/shims/image-config.js.map +0 -1
  916. package/dist/shims/image.js.map +0 -1
  917. package/dist/shims/internal/als-registry.js.map +0 -1
  918. package/dist/shims/internal/app-route-detection.js.map +0 -1
  919. package/dist/shims/internal/app-router-context.js.map +0 -1
  920. package/dist/shims/internal/cookie-serialize.js.map +0 -1
  921. package/dist/shims/internal/make-hanging-promise.js.map +0 -1
  922. package/dist/shims/internal/pages-data-target.js.map +0 -1
  923. package/dist/shims/internal/pages-data-url.js.map +0 -1
  924. package/dist/shims/internal/parse-cookie-header.js.map +0 -1
  925. package/dist/shims/internal/router-context.js.map +0 -1
  926. package/dist/shims/internal/utils.js.map +0 -1
  927. package/dist/shims/internal/work-unit-async-storage.js.map +0 -1
  928. package/dist/shims/layout-segment-context.js.map +0 -1
  929. package/dist/shims/legacy-image.js.map +0 -1
  930. package/dist/shims/link-prefetch.js.map +0 -1
  931. package/dist/shims/link.js.map +0 -1
  932. package/dist/shims/metadata.js.map +0 -1
  933. package/dist/shims/navigation-state.js.map +0 -1
  934. package/dist/shims/navigation.js.map +0 -1
  935. package/dist/shims/navigation.react-server.js.map +0 -1
  936. package/dist/shims/offline.js.map +0 -1
  937. package/dist/shims/og.js.map +0 -1
  938. package/dist/shims/pages-router-runtime.js.map +0 -1
  939. package/dist/shims/readonly-url-search-params.js.map +0 -1
  940. package/dist/shims/request-context.js.map +0 -1
  941. package/dist/shims/root-params.js.map +0 -1
  942. package/dist/shims/router-state.js.map +0 -1
  943. package/dist/shims/router.js.map +0 -1
  944. package/dist/shims/script-nonce-context.js.map +0 -1
  945. package/dist/shims/script.js.map +0 -1
  946. package/dist/shims/server.js.map +0 -1
  947. package/dist/shims/slot.js.map +0 -1
  948. package/dist/shims/thenable-params.js.map +0 -1
  949. package/dist/shims/unified-request-context.js.map +0 -1
  950. package/dist/shims/unrecognized-action-error.js.map +0 -1
  951. package/dist/shims/url-safety.js.map +0 -1
  952. package/dist/shims/url-utils.js.map +0 -1
  953. package/dist/shims/use-merged-ref.js.map +0 -1
  954. package/dist/shims/web-vitals.js.map +0 -1
  955. package/dist/typegen.js.map +0 -1
  956. package/dist/utils/asset-prefix.js.map +0 -1
  957. package/dist/utils/base-path.js.map +0 -1
  958. package/dist/utils/cache-control-metadata.js.map +0 -1
  959. package/dist/utils/domain-locale.js.map +0 -1
  960. package/dist/utils/encode-cache-tag.js.map +0 -1
  961. package/dist/utils/error-cause.js.map +0 -1
  962. package/dist/utils/hash.js.map +0 -1
  963. package/dist/utils/html-limited-bots.js.map +0 -1
  964. package/dist/utils/lazy-chunks.js.map +0 -1
  965. package/dist/utils/manifest-paths.js.map +0 -1
  966. package/dist/utils/mdx-scan.js.map +0 -1
  967. package/dist/utils/navigation-signal.js.map +0 -1
  968. package/dist/utils/path.js.map +0 -1
  969. package/dist/utils/prerender-output-paths.js.map +0 -1
  970. package/dist/utils/project.js.map +0 -1
  971. package/dist/utils/public-routes.js.map +0 -1
  972. package/dist/utils/query.js.map +0 -1
  973. package/dist/utils/record.js.map +0 -1
  974. package/dist/utils/safe-json-file.js.map +0 -1
  975. package/dist/utils/sorted-array.js.map +0 -1
  976. package/dist/utils/text-stream.js.map +0 -1
  977. package/dist/utils/vinext-root.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-ssr-entry.js","names":["createReactElement"],"sources":["../../src/server/app-ssr-entry.ts"],"sourcesContent":["/// <reference types=\"@vitejs/plugin-rsc/types\" />\n\nimport \"./server-globals.js\";\nimport type { ReactNode } from \"react\";\nimport type { ReactFormState } from \"react-dom/client\";\nimport { Fragment, createElement as createReactElement, use } from \"react\";\nimport { createFromReadableStream } from \"@vitejs/plugin-rsc/ssr\";\nimport { renderToReadableStream, renderToStaticMarkup } from \"react-dom/server.edge\";\nimport clientReferences from \"virtual:vite-rsc/client-references\";\nimport type { NavigationContext } from \"vinext/shims/navigation\";\nimport {\n ServerInsertedHTMLContext,\n appRouterInstance,\n clearServerInsertedHTML,\n renderServerInsertedHTML,\n setNavigationContext,\n useServerInsertedHTML,\n} from \"vinext/shims/navigation\";\nimport { runWithNavigationContext } from \"vinext/shims/navigation-state\";\nimport { runWithRootParamsScope, type RootParams } from \"vinext/shims/root-params\";\nimport { isOpenRedirectShaped } from \"./request-pipeline.js\";\nimport { notFoundResponse } from \"./http-error-responses.js\";\nimport { withScriptNonce } from \"vinext/shims/script-nonce-context\";\nimport {\n BeforeInteractiveContext,\n type BeforeInteractiveInlineScript,\n} from \"vinext/shims/before-interactive-context\";\nimport {\n createInlineScriptTag,\n createNonceAttribute,\n escapeHtmlAttr,\n safeJsonStringify,\n} from \"./html.js\";\nimport {\n createNavigationRuntimeRscMetadataScript,\n createRscEmbedTransform,\n createTickBufferedTransform,\n} from \"./app-ssr-stream.js\";\nimport { deferUntilStreamConsumed } from \"./app-page-stream.js\";\nimport { createSsrErrorMetaRenderer } from \"./app-ssr-error-meta.js\";\nimport { getClientTraceMetadataHTML } from \"./client-trace-metadata.js\";\nimport { AppElementsWire, type AppWireElements } from \"./app-elements.js\";\nimport { ElementsContext, Slot } from \"vinext/shims/slot\";\nimport { AppRouterContext } from \"vinext/shims/internal/app-router-context\";\nimport { createClientReferencePreloader } from \"./app-client-reference-preloader.js\";\nimport { RSC_FORM_STATE_GLOBAL } from \"./app-browser-hydration.js\";\n\nexport type FontPreload = {\n href: string;\n type: string;\n};\n\nexport type FontData = {\n links?: string[];\n styles?: string[];\n preloads?: FontPreload[];\n};\n\nconst clientReferencePreloader = createClientReferencePreloader({\n getReferences() {\n return clientReferences;\n },\n getClientRequire() {\n return globalThis.__vite_rsc_client_require__;\n },\n onPreloadError(id, error) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"[vinext] failed to preload client ref:\", id, error);\n }\n },\n});\n\nfunction ssrErrorDigest(input: string): string {\n let hash = 5381;\n for (let i = input.length - 1; i >= 0; i--) {\n hash = (hash * 33) ^ input.charCodeAt(i);\n }\n return (hash >>> 0).toString();\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n if (typeof error === \"string\") return error;\n return Object.prototype.toString.call(error);\n}\n\nfunction renderInsertedHtml(insertedElements: readonly unknown[]): string {\n let insertedHTML = \"\";\n\n for (const element of insertedElements) {\n try {\n insertedHTML += renderToStaticMarkup(\n createReactElement(Fragment, null, element as ReactNode),\n );\n } catch {\n // Ignore individual callback failures so the rest of the page can render.\n }\n }\n\n return insertedHTML;\n}\n\n/**\n * Render captured `<Script strategy=\"beforeInteractive\">` inline scripts to\n * HTML, ready to splice immediately after `<head ...>` opens. Each entry has\n * already had its inline content escaped via `escapeInlineContent(..., \"script\")`\n * inside the Script shim, so this function only quotes the attributes that\n * actually go on the tag (id, nonce, plus the residual passthroughs).\n *\n * Keeping this function colocated with the rest of the head-injection\n * helpers makes it obvious where the boundary is: anything passed through\n * here is being concatenated directly into HTML; treat the inputs\n * accordingly.\n */\n// Conservative subset of the HTML attribute-name grammar. Must start with a\n// letter and contain only letters, digits, underscores, hyphens, or dots —\n// enough to round-trip data-* and standard attributes (`async`, `defer`,\n// `type`, `crossorigin`, etc.) without ever splicing a `\"`/`>`/whitespace\n// into the unquoted *name* position where escaping wouldn't help.\nconst VALID_ATTR_NAME = /^[a-zA-Z][\\w.-]*$/;\n\nfunction renderBeforeInteractiveInlineScripts(\n scripts: readonly BeforeInteractiveInlineScript[],\n): string {\n if (scripts.length === 0) return \"\";\n let html = \"\";\n for (const script of scripts) {\n let attrs = \"\";\n if (script.id) {\n attrs += ` id=\"${escapeHtmlAttr(script.id)}\"`;\n }\n attrs += createNonceAttribute(script.nonce);\n if (script.attributes) {\n for (const [key, value] of Object.entries(script.attributes)) {\n // Attribute *values* go through escapeHtmlAttr below. The *name*\n // can't be escaped — a malformed key would break the tag — so we\n // gate at the boundary instead of trying to neutralise it.\n if (!VALID_ATTR_NAME.test(key)) continue;\n if (value === true) {\n attrs += ` ${key}`;\n } else if (typeof value === \"string\") {\n attrs += ` ${key}=\"${escapeHtmlAttr(value)}\"`;\n }\n }\n }\n html += `<script${attrs}>${script.innerHTML}</script>`;\n }\n return html;\n}\n\nfunction renderFontHtml(\n fontData?: FontData,\n nonce?: string,\n options: { includeStyles?: boolean } = {},\n): string {\n if (!fontData) return \"\";\n\n let fontHTML = \"\";\n const nonceAttr = createNonceAttribute(nonce);\n const includeStyles = options.includeStyles ?? true;\n\n for (const url of fontData.links ?? []) {\n fontHTML += `<link rel=\"stylesheet\"${nonceAttr} href=\"${escapeHtmlAttr(url)}\" />\\n`;\n }\n\n for (const preload of fontData.preloads ?? []) {\n fontHTML += `<link rel=\"preload\"${nonceAttr} href=\"${escapeHtmlAttr(preload.href)}\" as=\"font\" type=\"${escapeHtmlAttr(preload.type)}\" crossorigin />\\n`;\n }\n\n if (includeStyles && fontData.styles && fontData.styles.length > 0) {\n fontHTML += `<style data-vinext-fonts${nonceAttr}>${fontData.styles.join(\"\\n\")}</style>\\n`;\n }\n\n return fontHTML;\n}\n\nfunction hasInlineCssManifest(manifest: Record<string, string> | undefined): boolean {\n return manifest !== undefined && Object.keys(manifest).length > 0;\n}\n\n/**\n * Extract the bootstrap module URL from the `import(\"...\")` string that\n * `import.meta.viteRsc.loadBootstrapScriptContent(\"index\")` returns.\n *\n * The plugin-rsc helper returns the bootstrap as an inline call so we can\n * inject it via `bootstrapScriptContent`. We instead pass the URL to\n * React's `bootstrapModules` option so a real\n * `<script type=\"module\" src=\"…\">` tag ends up in the streamed HTML —\n * this exposes the URL to anything that reads `script.attribs.src` (e.g.\n * the Next.js asset-prefix fixture test). The same URL also feeds the\n * `<link rel=\"modulepreload\">` we emit ahead of the bootstrap.\n *\n * Returns `undefined` when the helper produced no URL (older plugin-rsc\n * versions, or a custom client entry that disables bootstrap content).\n */\nfunction extractBootstrapModuleUrl(bootstrapScriptContent?: string): string | undefined {\n if (!bootstrapScriptContent) return undefined;\n // Accept either quote style — plugin-rsc currently emits double quotes\n // (`import(\"…\")`) but a future version could switch to single quotes,\n // and there's no public contract documenting which is used.\n const match = bootstrapScriptContent.match(/import\\([\"']([^\"']+)[\"']\\)/);\n return match?.[1] ?? undefined;\n}\n\nfunction buildModulePreloadHtml(bootstrapModuleUrl?: string, nonce?: string): string {\n if (!bootstrapModuleUrl) return \"\";\n return `<link rel=\"modulepreload\"${createNonceAttribute(nonce)} href=\"${escapeHtmlAttr(bootstrapModuleUrl)}\" />\\n`;\n}\n\nfunction buildHeadInjectionHtml(\n navContext: NavigationContext | null,\n bootstrapModuleUrl: string | undefined,\n formState: ReactFormState | null,\n insertedHTML: string,\n fontHTML: string,\n scriptNonce?: string,\n): string {\n const navPayload = {\n pathname: navContext?.pathname ?? \"/\",\n searchParams: navContext?.searchParams ? [...navContext.searchParams.entries()] : [],\n };\n const rscMetadataScript = createInlineScriptTag(\n createNavigationRuntimeRscMetadataScript(navContext?.params ?? {}, navPayload),\n scriptNonce,\n );\n const formStateScript =\n formState === null\n ? \"\"\n : createInlineScriptTag(\n \"self[\" + safeJsonStringify(RSC_FORM_STATE_GLOBAL) + \"]=\" + safeJsonStringify(formState),\n scriptNonce,\n );\n\n return (\n rscMetadataScript +\n formStateScript +\n buildModulePreloadHtml(bootstrapModuleUrl, scriptNonce) +\n insertedHTML +\n fontHTML\n );\n}\n\nexport async function handleSsr(\n rscStream: ReadableStream<Uint8Array>,\n navContext: NavigationContext | null,\n fontData?: FontData,\n options?: {\n scriptNonce?: string;\n /** Pre-split side stream for embed+capture fusion. When provided,\n * rscStream is fed directly to createFromReadableStream (no internal tee).\n * The embed transform accumulates raw bytes. */\n sideStream?: ReadableStream<Uint8Array>;\n /** Out-parameter: filled with accumulated raw RSC bytes when sideStream is consumed. */\n capturedRscDataRef?: { value: Promise<ArrayBuffer> | null };\n formState?: ReactFormState | null;\n basePath?: string;\n /**\n * Allow-list of OpenTelemetry propagation keys (from\n * `experimental.clientTraceMetadata`) to render as `<meta>` tags in the\n * SSR head. Undefined or empty disables emission entirely.\n */\n clientTraceMetadata?: readonly string[];\n rootParams?: RootParams;\n /** When true, wait for the full React tree (including Suspense boundaries)\n * to resolve before returning the HTML stream. Used for static prerender\n * and ISR cache writes to avoid caching fallback content. */\n waitForAllReady?: boolean;\n },\n): Promise<ReadableStream<Uint8Array>> {\n return runWithNavigationContext(async () => {\n await clientReferencePreloader.preload();\n\n if (navContext) {\n setNavigationContext(navContext);\n }\n\n clearServerInsertedHTML();\n\n const cleanup = (): void => {\n setNavigationContext(null);\n clearServerInsertedHTML();\n };\n\n const rootParams = options?.rootParams ?? {};\n return runWithRootParamsScope(rootParams, async () => {\n try {\n // Fused tee path (#981): caller pre-split the stream. No internal tee needed.\n // sideStream carries both the embed transform and raw byte accumulation.\n // rscStream is used directly for createFromReadableStream (SSR).\n let ssrStream: ReadableStream<Uint8Array>;\n let rscEmbed;\n\n if (options?.sideStream) {\n ssrStream = rscStream;\n rscEmbed = createRscEmbedTransform(options.sideStream, options?.scriptNonce);\n if (options.capturedRscDataRef) {\n options.capturedRscDataRef.value = rscEmbed.getRawBuffer();\n }\n } else {\n const [s1, s2] = rscStream.tee();\n ssrStream = s1;\n rscEmbed = createRscEmbedTransform(s2, options?.scriptNonce);\n }\n\n let flightRoot: PromiseLike<AppWireElements> | null = null;\n\n function VinextFlightRoot(): ReactNode {\n if (!flightRoot) {\n flightRoot = createFromReadableStream<AppWireElements>(ssrStream);\n }\n const wireElements = use(flightRoot);\n const elements = AppElementsWire.decode(wireElements);\n const metadata = AppElementsWire.readMetadata(elements);\n return createReactElement(\n ElementsContext.Provider,\n { value: elements },\n createReactElement(Slot, { id: metadata.routeId }),\n );\n }\n\n const flightRootElement = createReactElement(VinextFlightRoot);\n const root = AppRouterContext\n ? createReactElement(\n AppRouterContext.Provider,\n { value: appRouterInstance },\n flightRootElement,\n )\n : flightRootElement;\n const ssrTree = ServerInsertedHTMLContext\n ? createReactElement(\n ServerInsertedHTMLContext.Provider,\n { value: useServerInsertedHTML },\n root,\n )\n : root;\n\n // Capture inline `<Script strategy=\"beforeInteractive\">` content so the\n // SSR stream transform can emit it immediately after `<head ...>`\n // opens — ahead of every React-emitted resource hint. The Script shim\n // pushes here when it sees an inline beforeInteractive Script and\n // returns `null` from its render so React does not also serialize the\n // tag where the user wrote it (where Fizz would push it *after* the\n // hoisted stylesheets/modulepreloads). See\n // packages/vinext/src/shims/script.tsx for the capture side.\n const beforeInteractiveInlineScripts: BeforeInteractiveInlineScript[] = [];\n const registerBeforeInteractiveInlineScript = (\n script: BeforeInteractiveInlineScript,\n ): void => {\n beforeInteractiveInlineScripts.push(script);\n };\n const treeWithBeforeInteractive = createReactElement(\n BeforeInteractiveContext.Provider,\n { value: registerBeforeInteractiveInlineScript },\n ssrTree,\n );\n const ssrRoot = withScriptNonce(treeWithBeforeInteractive, options?.scriptNonce);\n\n // plugin-rsc returns the bootstrap as `import(\"<url>\")` so callers can\n // inject it via `bootstrapScriptContent`. We hand the URL to React's\n // `bootstrapModules` option instead so the streamed HTML contains a\n // real `<script type=\"module\" src=\"<url>\">` tag — exposing the URL\n // to anything that inspects `script.attribs.src` (e.g. the Next.js\n // asset-prefix fixture test \"bundles should return 200 on served\n // assetPrefix\"). Mirrors Next.js's app-render path which passes\n // `bootstrapScripts: [{ src }]` for the same reason; we use\n // `bootstrapModules` because vinext's chunks are native ES modules\n // (Vite output) so a `type=\"module\"` tag is the correct loader.\n //\n // In dev, `<url>` is a Vite dev URL like\n // `/@id/__x00__virtual:vinext-app-browser-entry`; the browser fetches\n // it as a module from the dev server. In prod it's the hashed bundle\n // URL (e.g. `/_next/static/index-abc123.js`, optionally prefixed by\n // `assetPrefix`). Both are valid `<script type=\"module\" src=…>` targets.\n const bootstrapScriptContent = await import.meta.viteRsc.loadBootstrapScriptContent(\n \"index\",\n );\n const bootstrapModuleUrl = extractBootstrapModuleUrl(bootstrapScriptContent);\n const errorMetaRenderer = createSsrErrorMetaRenderer({\n basePath: options?.basePath,\n });\n\n const htmlStream = await renderToReadableStream(ssrRoot, {\n // `bootstrapScriptContent` was previously how vinext injected the\n // dynamic-import call. `bootstrapModules` performs the same work\n // natively (and exposes the URL in the DOM), so passing both would\n // load the bootstrap module twice.\n //\n // CSP implications of using `bootstrapModules` instead of inline\n // `bootstrapScriptContent`:\n // - Apps no longer need `script-src 'unsafe-inline'` to load the\n // bootstrap (improvement — inline imports required `'unsafe-inline'`).\n // - Apps that restrict script sources need `'self'` for the\n // common case, or the CDN origin when `assetPrefix` is an\n // absolute URL like `https://cdn.example.com`.\n // - React still applies `nonce` to the emitted\n // `<script type=\"module\" src=…>` tag, so nonce-based CSP\n // (`script-src 'nonce-…' 'strict-dynamic'`) keeps working.\n bootstrapModules: bootstrapModuleUrl ? [bootstrapModuleUrl] : undefined,\n formState: options?.formState ?? null,\n nonce: options?.scriptNonce,\n onError(error) {\n errorMetaRenderer.capture(error);\n\n if (error && typeof error === \"object\" && \"digest\" in error) {\n return String(error.digest);\n }\n\n if (process.env.NODE_ENV === \"production\" && error) {\n const message = getErrorMessage(error);\n const stack = error instanceof Error ? (error.stack ?? \"\") : \"\";\n return ssrErrorDigest(message + stack);\n }\n\n return undefined;\n },\n });\n\n // When producing static output (prerender / ISR cache writes), wait for\n // the full React tree to resolve before emitting bytes. This prevents\n // Suspense fallback content from being serialized to the cache.\n // Matches Next.js waitForAllReady forkpoint in renderToNodeFizzStream.\n if (options?.waitForAllReady === true) {\n await htmlStream.allReady;\n }\n\n // Populated before any SSR request runs: at prod-server startup\n // (prod-server.ts) or via build-time bundle injection (index.ts). Left\n // undefined in dev, which naturally disables inline CSS there.\n const inlineCssManifest = globalThis.__VINEXT_INLINE_CSS__;\n const fontStyles = fontData?.styles ?? [];\n const mergeFontStylesIntoInlineCss =\n fontStyles.length > 0 && hasInlineCssManifest(inlineCssManifest);\n const inlineCssFontStyles = mergeFontStylesIntoInlineCss ? fontStyles.join(\"\\n\") : \"\";\n const inlineCssFontStyleFallbackHTML = mergeFontStylesIntoInlineCss\n ? renderFontHtml({ styles: fontStyles }, options?.scriptNonce)\n : \"\";\n const fontHTML = renderFontHtml(fontData, options?.scriptNonce, {\n includeStyles: !mergeFontStylesIntoInlineCss,\n });\n // Trace meta tags only need to land in the document head once.\n // Read the active OTel context lazily so the value reflects the\n // span that was active when the SSR shell rendered. When\n // clientTraceMetadata is unset (the common case) this is empty.\n let traceMetaHTML: string | null = null;\n const getTraceMetaHTML = (): string => {\n if (traceMetaHTML === null) {\n traceMetaHTML = getClientTraceMetadataHTML(options?.clientTraceMetadata);\n }\n return traceMetaHTML;\n };\n let didInjectHeadHTML = false;\n const getInsertedHTML = (): string => {\n const insertedHTML = renderInsertedHtml(renderServerInsertedHTML());\n const errorMetaHTML = errorMetaRenderer.flush();\n if (didInjectHeadHTML) return insertedHTML + errorMetaHTML;\n\n didInjectHeadHTML = true;\n return buildHeadInjectionHtml(\n navContext,\n bootstrapModuleUrl,\n options?.formState ?? null,\n insertedHTML + errorMetaHTML + getTraceMetaHTML(),\n fontHTML,\n options?.scriptNonce,\n );\n };\n\n // The transform calls this once when it splices after `<head ...>`.\n // By that point React Fizz has rendered the layout's `<head>` children\n // (which is where the Script shim registers), so the captured array is\n // populated. We deliberately return a snapshot — `flushBuffered` will\n // not re-invoke us, and any beforeInteractive Script that renders\n // later (inside a Suspense boundary further down the tree) falls back\n // to its inline location, matching the documented guarantee that\n // ordering applies to scripts rendered in the initial shell.\n const getBeforeInteractiveHeadHTML = (): string =>\n renderBeforeInteractiveInlineScripts(beforeInteractiveInlineScripts);\n\n return deferUntilStreamConsumed(\n htmlStream.pipeThrough(\n createTickBufferedTransform(\n rscEmbed,\n getInsertedHTML,\n getBeforeInteractiveHeadHTML,\n inlineCssManifest,\n inlineCssFontStyles,\n inlineCssFontStyleFallbackHTML,\n options?.scriptNonce,\n ),\n ),\n cleanup,\n );\n } catch (error) {\n cleanup();\n throw error;\n }\n });\n }) as Promise<ReadableStream<Uint8Array>>;\n}\n\nexport default {\n async fetch(request: Request): Promise<Response> {\n const url = new URL(request.url);\n // Block protocol-relative URL open redirects (including percent-encoded\n // variants like /%5Cevil.com/). See request-pipeline.ts for details.\n if (isOpenRedirectShaped(url.pathname)) {\n return notFoundResponse();\n }\n\n const rscModule = await import.meta.viteRsc.loadModule<{\n default(request: Request): Promise<Response | string | null | undefined>;\n }>(\"rsc\", \"index\");\n const result = await rscModule.default(request);\n\n if (result instanceof Response) {\n return result;\n }\n\n if (result == null) {\n return notFoundResponse();\n }\n\n return new Response(String(result), { status: 200 });\n },\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-ssr-error-meta.js","names":[],"sources":["../../src/server/app-ssr-error-meta.ts"],"sourcesContent":["import { addBasePathToPathname } from \"../utils/base-path.js\";\nimport { escapeHtmlAttr } from \"./html.js\";\nimport {\n getNextErrorDigest,\n parseNextHttpErrorDigest,\n parseNextRedirectDigest,\n} from \"./next-error-digest.js\";\n\ntype SsrErrorMetaRenderOptions = {\n basePath?: string;\n nodeEnv?: string;\n};\n\ntype SsrErrorMetaRenderer = {\n capture: (error: unknown) => void;\n flush: () => string;\n};\n\nconst PERMANENT_REDIRECT_STATUS = 308;\n\nfunction prefixRedirectLocation(location: string, basePath?: string): string {\n if (!basePath || !location.startsWith(\"/\")) {\n return location;\n }\n\n const hashIndex = location.indexOf(\"#\");\n const queryIndex = location.indexOf(\"?\");\n const pathnameEnd =\n queryIndex === -1\n ? hashIndex === -1\n ? location.length\n : hashIndex\n : hashIndex === -1\n ? queryIndex\n : Math.min(queryIndex, hashIndex);\n const pathname = location.slice(0, pathnameEnd);\n\n return addBasePathToPathname(pathname, basePath) + location.slice(pathnameEnd);\n}\n\nfunction renderSsrErrorMetaTag(error: unknown, options: SsrErrorMetaRenderOptions): string {\n const digest = getNextErrorDigest(error);\n if (!digest) return \"\";\n\n const httpError = parseNextHttpErrorDigest(digest);\n if (httpError) {\n // Output format matches Next.js's `make-get-server-inserted-html.tsx`,\n // which serializes these meta tags via React's HTML renderer. React's\n // void-element output uses no space before `/>`, and Next.js tests assert\n // on that exact substring (e.g. `'<meta name=\"robots\" content=\"noindex\"/>'`).\n // https://github.com/vercel/next.js/blob/canary/packages/next/src/server/app-render/make-get-server-inserted-html.tsx\n let html = '<meta name=\"robots\" content=\"noindex\"/>';\n if ((options.nodeEnv ?? process.env.NODE_ENV) === \"development\") {\n html += '<meta name=\"next-error\" content=\"not-found\"/>';\n }\n return html;\n }\n\n const redirect = parseNextRedirectDigest(digest);\n if (!redirect) return \"\";\n\n const delay = redirect.status === PERMANENT_REDIRECT_STATUS ? 0 : 1;\n const location = prefixRedirectLocation(redirect.url, options.basePath);\n return (\n '<meta id=\"__next-page-redirect\" http-equiv=\"refresh\" content=\"' +\n delay +\n \";url=\" +\n escapeHtmlAttr(location) +\n '\"/>'\n );\n}\n\nexport function renderSsrErrorMetaTags(\n errors: readonly unknown[],\n options: SsrErrorMetaRenderOptions = {},\n): string {\n let html = \"\";\n\n for (const error of errors) {\n html += renderSsrErrorMetaTag(error, options);\n }\n\n return html;\n}\n\nexport function createSsrErrorMetaRenderer(\n options: SsrErrorMetaRenderOptions = {},\n): SsrErrorMetaRenderer {\n const capturedErrors: unknown[] = [];\n let flushedUntil = 0;\n\n return {\n capture(error) {\n capturedErrors.push(error);\n },\n flush() {\n if (flushedUntil >= capturedErrors.length) return \"\";\n\n const html = renderSsrErrorMetaTags(capturedErrors.slice(flushedUntil), options);\n flushedUntil = capturedErrors.length;\n return html;\n },\n };\n}\n"],"mappings":";;;;AAkBA,MAAM,4BAA4B;AAElC,SAAS,uBAAuB,UAAkB,UAA2B;CAC3E,IAAI,CAAC,YAAY,CAAC,SAAS,WAAW,IAAI,EACxC,OAAO;CAGT,MAAM,YAAY,SAAS,QAAQ,IAAI;CACvC,MAAM,aAAa,SAAS,QAAQ,IAAI;CACxC,MAAM,cACJ,eAAe,KACX,cAAc,KACZ,SAAS,SACT,YACF,cAAc,KACZ,aACA,KAAK,IAAI,YAAY,UAAU;CAGvC,OAAO,sBAFU,SAAS,MAAM,GAAG,YAEE,EAAE,SAAS,GAAG,SAAS,MAAM,YAAY;;AAGhF,SAAS,sBAAsB,OAAgB,SAA4C;CACzF,MAAM,SAAS,mBAAmB,MAAM;CACxC,IAAI,CAAC,QAAQ,OAAO;CAGpB,IADkB,yBAAyB,OAC9B,EAAE;EAMb,IAAI,OAAO;EACX,KAAK,QAAQ,WAAW,QAAQ,IAAI,cAAc,eAChD,QAAQ;EAEV,OAAO;;CAGT,MAAM,WAAW,wBAAwB,OAAO;CAChD,IAAI,CAAC,UAAU,OAAO;CAEtB,MAAM,QAAQ,SAAS,WAAW,4BAA4B,IAAI;CAClE,MAAM,WAAW,uBAAuB,SAAS,KAAK,QAAQ,SAAS;CACvE,OACE,wEACA,QACA,UACA,eAAe,SAAS,GACxB;;AAIJ,SAAgB,uBACd,QACA,UAAqC,EAAE,EAC/B;CACR,IAAI,OAAO;CAEX,KAAK,MAAM,SAAS,QAClB,QAAQ,sBAAsB,OAAO,QAAQ;CAG/C,OAAO;;AAGT,SAAgB,2BACd,UAAqC,EAAE,EACjB;CACtB,MAAM,iBAA4B,EAAE;CACpC,IAAI,eAAe;CAEnB,OAAO;EACL,QAAQ,OAAO;GACb,eAAe,KAAK,MAAM;;EAE5B,QAAQ;GACN,IAAI,gBAAgB,eAAe,QAAQ,OAAO;GAElD,MAAM,OAAO,uBAAuB,eAAe,MAAM,aAAa,EAAE,QAAQ;GAChF,eAAe,eAAe;GAC9B,OAAO;;EAEV"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-ssr-stream.js","names":[],"sources":["../../src/server/app-ssr-stream.ts"],"sourcesContent":["import {\n createInlineScriptTag,\n escapeHtmlAttr,\n htmlTokenListContains,\n safeJsonStringify,\n} from \"./html.js\";\nimport {\n bytesToBase64,\n concatUint8Arrays,\n RSC_EMBEDDED_BINARY_CHUNK,\n type RscEmbeddedChunk,\n} from \"./app-rsc-embedded-chunks.js\";\nimport { NAVIGATION_RUNTIME_SYMBOL_DESCRIPTION } from \"../client/navigation-runtime.js\";\n\ntype RscEmbedTransform = {\n flush(): string;\n finalize(): Promise<string>;\n /** Resolves when all raw bytes from the embed stream have been read. */\n getRawBuffer(): Promise<ArrayBuffer>;\n};\n\ntype HtmlInsertion = string | (() => string);\ntype InlineCssManifest = Record<string, string>;\ntype InlineCssRewriteResult = {\n html: string;\n consumedPrependCss: boolean;\n};\n\nconst NAVIGATION_RUNTIME_REFERENCE = `self[Symbol.for(${safeJsonStringify(\n NAVIGATION_RUNTIME_SYMBOL_DESCRIPTION,\n)})]`;\n\nexport function navigationRuntimeRscBootstrapExpression(): string {\n return `((${NAVIGATION_RUNTIME_REFERENCE}??={bootstrap:{routeManifest:null},functions:{}}).bootstrap.rsc??={rsc:[]})`;\n}\n\nexport function createNavigationRuntimeRscMetadataScript(\n params: Record<string, string | string[]>,\n nav: { pathname: string; searchParams: [string, string][] },\n): string {\n return (\n \"Object.assign(\" +\n navigationRuntimeRscBootstrapExpression() +\n \",{params:\" +\n safeJsonStringify(params) +\n \",nav:\" +\n safeJsonStringify(nav) +\n \"})\"\n );\n}\n\nfunction createNavigationRuntimeRscChunkScript(chunk: RscEmbeddedChunk): string {\n return navigationRuntimeRscBootstrapExpression() + \".rsc.push(\" + safeJsonStringify(chunk) + \")\";\n}\n\nfunction createNavigationRuntimeRscDoneScript(): string {\n return navigationRuntimeRscBootstrapExpression() + \".done=true\";\n}\n\n/**\n * Fix invalid preload \"as\" values in RSC Flight hint lines before they reach\n * the client. React Flight emits HL hints with as=\"stylesheet\" for CSS, but\n * the HTML spec requires as=\"style\" for <link rel=\"preload\">.\n */\nexport function fixFlightHints(text: string): string {\n return text.replace(/(\\d*:HL\\[.*?),\"stylesheet\"(\\]|,)/g, '$1,\"style\"$2');\n}\n\n/**\n * Create a helper that progressively embeds RSC chunks as inline <script> tags.\n * The browser entry turns the embedded chunks back into Uint8Array data.\n */\nexport function createRscEmbedTransform(\n embedStream: ReadableStream<Uint8Array>,\n scriptNonce?: string,\n): RscEmbedTransform {\n const reader = embedStream.getReader();\n let pendingChunks: RscEmbeddedChunk[] = [];\n const rawChunks: Uint8Array[] = [];\n let reading = false;\n\n async function pumpReader(): Promise<void> {\n if (reading) return;\n reading = true;\n try {\n while (true) {\n const result = await reader.read();\n if (result.done) break;\n // Accumulate raw bytes BEFORE fixFlightHints so the cache stores\n // unmodified RSC data. The embed script path below applies fixes.\n rawChunks.push(result.value);\n try {\n const decoder = new TextDecoder(\"utf-8\", { fatal: true });\n const text = decoder.decode(result.value);\n // The RSC entry already fixes HL hints at the source. Keep this second\n // pass as defense in depth for any embed stream that bypasses that\n // wrapper; the rewrite is idempotent, so double-application is safe.\n pendingChunks.push(fixFlightHints(text));\n } catch {\n pendingChunks.push([RSC_EMBEDDED_BINARY_CHUNK, bytesToBase64(result.value)]);\n }\n }\n } catch (error) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"[vinext] RSC embed stream read error:\", error);\n }\n throw error;\n } finally {\n reading = false;\n }\n }\n\n const pumpPromise = pumpReader();\n\n return {\n flush(): string {\n if (pendingChunks.length === 0) return \"\";\n\n const chunks = pendingChunks;\n pendingChunks = [];\n\n let scripts = \"\";\n for (const chunk of chunks) {\n scripts += createInlineScriptTag(createNavigationRuntimeRscChunkScript(chunk), scriptNonce);\n }\n return scripts;\n },\n\n async finalize(): Promise<string> {\n await pumpPromise;\n let scripts = this.flush();\n scripts += createInlineScriptTag(createNavigationRuntimeRscDoneScript(), scriptNonce);\n return scripts;\n },\n\n async getRawBuffer(): Promise<ArrayBuffer> {\n await pumpPromise;\n const buffer = concatUint8Arrays(rawChunks);\n rawChunks.length = 0;\n return buffer.buffer;\n },\n };\n}\n\n/**\n * Fix invalid preload \"as\" values in server-rendered HTML.\n * React Fizz emits <link rel=\"preload\" as=\"stylesheet\"> for CSS, but the\n * HTML spec requires as=\"style\" for <link rel=\"preload\">.\n */\nexport function fixPreloadAs(html: string): string {\n return html.replace(/<link(?=[^>]*\\srel=\"preload\")[^>]*>/g, (tag) =>\n tag.replace(' as=\"stylesheet\"', ' as=\"style\"'),\n );\n}\n\n// These `g`-flag regexes carry mutable `lastIndex` state. Every consumer below\n// resets `lastIndex` before use, which is safe only because they run to\n// completion synchronously within a single call. They must not be shared across\n// concurrent/interleaved call paths.\nconst LINK_TAG_RE = /<link\\b[^>]*>/gi;\nconst HTML_REWRITE_EXCLUDED_REGION_RE =\n /<!--[\\s\\S]*?-->|<(script|style|textarea|title)\\b[^>]*>[\\s\\S]*?<\\/\\1\\s*>/gi;\nconst HTML_REWRITE_EXCLUDED_REGION_START_RE = /<!--|<(script|style|textarea|title)\\b[^>]*>/gi;\n\nfunction getHtmlAttribute(tag: string, name: string): string | null {\n const attrRe = /\\s([^\\s\"'=<>`]+)(?:\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s\"'=<>`]+)))?/g;\n let match: RegExpExecArray | null;\n\n while ((match = attrRe.exec(tag)) !== null) {\n if (match[1]?.toLowerCase() !== name.toLowerCase()) continue;\n return match[2] ?? match[3] ?? match[4] ?? \"\";\n }\n\n return null;\n}\n\nfunction htmlAttributeHasToken(tag: string, name: string, token: string): boolean {\n return htmlTokenListContains(getHtmlAttribute(tag, name), token);\n}\n\nfunction getInlineCss(manifest: InlineCssManifest, href: string): string | null {\n if (Object.prototype.hasOwnProperty.call(manifest, href)) {\n return manifest[href] ?? \"\";\n }\n\n try {\n const pathname = new URL(href).pathname;\n if (Object.prototype.hasOwnProperty.call(manifest, pathname)) {\n return manifest[pathname] ?? \"\";\n }\n } catch {\n // Relative asset URLs are looked up by their emitted href.\n }\n\n return null;\n}\n\n// Module-level regex; consumers reset `lastIndex` before each scan. Same\n// shared-state constraint as the other `g`-flag regexes above.\nconst TRAILING_LINK_OPEN_RE = /<link/gi;\n\nfunction splitTrailingIncompleteLinkTag(html: string): { complete: string; trailing: string } {\n // Scan forward to find the last `<link` opening without allocating a\n // lowercased copy of `html` — this runs on every flush of the streaming\n // hot path, and `html` can be tens of KB.\n TRAILING_LINK_OPEN_RE.lastIndex = 0;\n let lastIndex = -1;\n let match: RegExpExecArray | null;\n while ((match = TRAILING_LINK_OPEN_RE.exec(html)) !== null) {\n lastIndex = match.index;\n }\n if (lastIndex === -1) return { complete: html, trailing: \"\" };\n const close = html.indexOf(\">\", lastIndex);\n if (close !== -1) return { complete: html, trailing: \"\" };\n return {\n complete: html.slice(0, lastIndex),\n trailing: html.slice(lastIndex),\n };\n}\n\nfunction findTrailingOpenHtmlRewriteExcludedRegionStart(html: string): number | null {\n let match: RegExpExecArray | null;\n\n HTML_REWRITE_EXCLUDED_REGION_START_RE.lastIndex = 0;\n while ((match = HTML_REWRITE_EXCLUDED_REGION_START_RE.exec(html)) !== null) {\n const start = match.index;\n if (match[0] === \"<!--\") {\n const close = html.indexOf(\"-->\", HTML_REWRITE_EXCLUDED_REGION_START_RE.lastIndex);\n if (close === -1) return start;\n HTML_REWRITE_EXCLUDED_REGION_START_RE.lastIndex = close + 3;\n continue;\n }\n\n const tagName = match[1]?.toLowerCase();\n if (!tagName) continue;\n\n const closeTagRe = new RegExp(`</${tagName}\\\\s*>`, \"i\");\n const close = closeTagRe.exec(html.slice(HTML_REWRITE_EXCLUDED_REGION_START_RE.lastIndex));\n if (!close) return start;\n HTML_REWRITE_EXCLUDED_REGION_START_RE.lastIndex += close.index + close[0].length;\n }\n\n return null;\n}\n\nfunction splitTrailingInlineCssRewriteBoundary(html: string): {\n complete: string;\n trailing: string;\n} {\n const linkSplit = splitTrailingIncompleteLinkTag(html);\n const incompleteLinkStart = linkSplit.trailing ? linkSplit.complete.length : null;\n const openRegionStart = findTrailingOpenHtmlRewriteExcludedRegionStart(html);\n const trailingStart =\n incompleteLinkStart === null\n ? openRegionStart\n : openRegionStart === null\n ? incompleteLinkStart\n : Math.min(incompleteLinkStart, openRegionStart);\n\n if (trailingStart === null) return { complete: html, trailing: \"\" };\n\n return {\n complete: html.slice(0, trailingStart),\n trailing: html.slice(trailingStart),\n };\n}\n\nfunction escapeStyleText(css: string): string {\n return css.replace(/<\\/style/gi, \"<\\\\/style\");\n}\n\nconst CSS_PREPEND_UNSAFE_PREAMBLE_RE =\n /^\\uFEFF?(?:\\s|\\/\\*[\\s\\S]*?\\*\\/)*@(charset|import|layer|namespace)\\b/i;\n\nfunction canPrependCss(css: string): boolean {\n return !CSS_PREPEND_UNSAFE_PREAMBLE_RE.test(css);\n}\n\nfunction replaceLinkTags(html: string, replaceLinkTag: (tag: string) => string): string {\n LINK_TAG_RE.lastIndex = 0;\n return html.replace(LINK_TAG_RE, replaceLinkTag);\n}\n\nfunction replaceLinkTagsOutsideRawText(\n html: string,\n replaceLinkTag: (tag: string) => string,\n): string {\n let rewritten = \"\";\n let cursor = 0;\n let match: RegExpExecArray | null;\n\n HTML_REWRITE_EXCLUDED_REGION_RE.lastIndex = 0;\n while ((match = HTML_REWRITE_EXCLUDED_REGION_RE.exec(html)) !== null) {\n rewritten += replaceLinkTags(html.slice(cursor, match.index), replaceLinkTag);\n rewritten += match[0];\n cursor = match.index + match[0].length;\n }\n\n const tail = html.slice(cursor);\n const openRegionStart = findTrailingOpenHtmlRewriteExcludedRegionStart(tail);\n if (openRegionStart === null) {\n return rewritten + replaceLinkTags(tail, replaceLinkTag);\n }\n\n return (\n rewritten +\n replaceLinkTags(tail.slice(0, openRegionStart), replaceLinkTag) +\n tail.slice(openRegionStart)\n );\n}\n\nfunction rewriteInlineCssStylesheetLinks(\n html: string,\n inlineCssManifest: InlineCssManifest | undefined,\n prependCss: string,\n ssrScriptNonce: string | undefined,\n): InlineCssRewriteResult {\n if (!inlineCssManifest || Object.keys(inlineCssManifest).length === 0) {\n return { html, consumedPrependCss: false };\n }\n let consumedPrependCss = false;\n\n const rewritten = replaceLinkTagsOutsideRawText(html, (tag) => {\n if (!htmlAttributeHasToken(tag, \"rel\", \"stylesheet\")) return tag;\n\n const href = getHtmlAttribute(tag, \"href\");\n const precedence =\n getHtmlAttribute(tag, \"data-precedence\") ?? getHtmlAttribute(tag, \"precedence\");\n if (!href || !precedence) return tag;\n\n const css = getInlineCss(inlineCssManifest, href);\n if (css === null) return tag;\n\n // Prefer the link's own nonce if Fizz emitted one; otherwise fall back to\n // the SSR-time script/style nonce so sites with CSP `style-src 'nonce-…'`\n // policies don't block the inlined `<style>` block. The `<link>` tag this\n // replaces wasn't subject to inline-style CSP, but the new `<style>` is.\n const linkNonce = getHtmlAttribute(tag, \"nonce\");\n const effectiveNonce = linkNonce ?? ssrScriptNonce;\n const nonceAttr = effectiveNonce ? ` nonce=\"${escapeHtmlAttr(effectiveNonce)}\"` : \"\";\n const shouldPrependCss = !consumedPrependCss && prependCss.length > 0 && canPrependCss(css);\n const cssPrefix = shouldPrependCss ? `${prependCss}\\n` : \"\";\n consumedPrependCss ||= cssPrefix.length > 0;\n\n return (\n `<style data-vinext-inline-css${nonceAttr}` +\n ` data-precedence=\"${escapeHtmlAttr(precedence)}\"` +\n ` data-href=\"${escapeHtmlAttr(href)}\">` +\n `${escapeStyleText(cssPrefix + css)}</style>`\n );\n });\n\n return { html: rewritten, consumedPrependCss };\n}\n\n/**\n * Match the `<head ...>` opening tag in a chunk. Matches both bare `<head>`\n * and `<head class=\"foo\">` shapes. Used to splice HTML immediately after the\n * opening tag so injected content runs before any React-emitted resource\n * hints (stylesheets, modulepreloads) that React Float hoists into `<head>`.\n */\nconst HEAD_OPEN_RE = /<head\\b[^>]*>/;\n\n/**\n * Create the tick-buffered HTML transform that injects RSC scripts between\n * React Fizz flush cycles without corrupting split HTML chunks.\n *\n * Two insertion points are supported in tandem:\n *\n * - `injectHTML` is emitted immediately before `</head>`. This is where the\n * bulk of vinext's head additions live (RSC navigation runtime metadata,\n * bootstrap modulepreload, server-inserted HTML, font preloads, etc.).\n * - `injectAfterHeadOpenHTML` is emitted immediately after the `<head ...>`\n * opening tag so the content runs before any React-emitted resource\n * hints. This is where inline `<Script strategy=\"beforeInteractive\">`\n * captures land so the no-flash dark-mode pattern works.\n *\n * Fallback behaviour differs by insertion point:\n *\n * - `injectHTML` is emitted at end-of-stream by the `flush` handler when no\n * chunk ever contained `</head>` — callers still see the payload on\n * highly fragmented streams (just at the end of the body rather than in\n * the head).\n * - `injectAfterHeadOpenHTML` is silently dropped when `<head ...>` is not\n * found in a discoverable chunk. Emitting it at end-of-stream would put\n * it after the document body, defeating the point — the splice has to\n * happen before resource hints to be useful, so the safer behaviour is\n * to no-op and let the user-rendered Script (in its source-order\n * position) ship as-is.\n */\nexport function createTickBufferedTransform(\n rscEmbed: RscEmbedTransform,\n injectHTML: HtmlInsertion = \"\",\n injectAfterHeadOpenHTML: HtmlInsertion = \"\",\n inlineCssManifest?: InlineCssManifest,\n inlineCssPrependCss = \"\",\n inlineCssPrependFallbackHTML = \"\",\n inlineCssScriptNonce?: string,\n): TransformStream<Uint8Array, Uint8Array> {\n const decoder = new TextDecoder();\n const encoder = new TextEncoder();\n const insertsPerFlush = typeof injectHTML === \"function\";\n let injected = false;\n let preHeadInjected = false;\n let buffered: string[] = [];\n let pendingHtml = \"\";\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n // Computed once at transform creation: every flush is a hot path, so we\n // avoid re-running Object.keys() on the manifest per chunk. Gates both the\n // split-link boundary buffering and the inline-css link rewrite below.\n const hasInlineCssManifest =\n inlineCssManifest !== undefined && Object.keys(inlineCssManifest).length > 0;\n const readInsertion = (): string =>\n typeof injectHTML === \"function\" ? injectHTML() : injectHTML;\n const readPreHeadInsertion = (): string =>\n typeof injectAfterHeadOpenHTML === \"function\"\n ? injectAfterHeadOpenHTML()\n : injectAfterHeadOpenHTML;\n const readInlineCssPrependFallback = (): string => {\n if (!inlineCssPrependCss || !inlineCssPrependFallbackHTML) return \"\";\n inlineCssPrependCss = \"\";\n return inlineCssPrependFallbackHTML;\n };\n const emitInsertion = (controller: TransformStreamDefaultController<Uint8Array>): void => {\n const insertion = readInlineCssPrependFallback() + readInsertion();\n if (insertion) {\n controller.enqueue(encoder.encode(insertion));\n }\n };\n\n /**\n * Splice the pre-head insertion (typically captured beforeInteractive inline\n * scripts) immediately after the `<head ...>` opening tag. Returns the\n * rewritten chunk and a flag indicating whether the splice happened, so the\n * caller can mark `preHeadInjected` and stop scanning further chunks.\n *\n * NOTE: This is called only when `<head ...>` lies fully inside the current\n * tick-buffered batch. We deliberately avoid retaining arbitrary output until\n * a future chunk completes `<head ...>`, which would delay TTFB and complicate\n * the existing `</head>` injection path. In practice React Fizz emits the\n * opening shell as a single batch.\n */\n const spliceAfterHeadOpen = (chunk: string): { chunk: string; spliced: boolean } => {\n if (preHeadInjected) return { chunk, spliced: false };\n const insertion = readPreHeadInsertion();\n if (!insertion) return { chunk, spliced: false };\n const match = HEAD_OPEN_RE.exec(chunk);\n if (!match) return { chunk, spliced: false };\n const insertAt = match.index + match[0].length;\n return {\n chunk: chunk.slice(0, insertAt) + insertion + chunk.slice(insertAt),\n spliced: true,\n };\n };\n\n const flushBuffered = (\n controller: TransformStreamDefaultController<Uint8Array>,\n final = false,\n ): void => {\n if (buffered.length === 0 && !pendingHtml) return;\n const rawHtml = pendingHtml + buffered.join(\"\");\n buffered = [];\n pendingHtml = \"\";\n\n const split =\n final || !hasInlineCssManifest\n ? { complete: rawHtml, trailing: \"\" }\n : splitTrailingInlineCssRewriteBoundary(rawHtml);\n if (split.trailing) {\n pendingHtml = split.trailing;\n }\n if (!split.complete) return;\n\n if (injected && insertsPerFlush) {\n // Emit newly collected server-inserted HTML before the next Fizz HTML\n // batch so CSS-in-JS styles precede the elements they style.\n emitInsertion(controller);\n }\n\n const preparedHtml = fixPreloadAs(split.complete);\n const inlineCssResult = hasInlineCssManifest\n ? rewriteInlineCssStylesheetLinks(\n preparedHtml,\n inlineCssManifest,\n inlineCssPrependCss,\n inlineCssScriptNonce,\n )\n : { html: preparedHtml, consumedPrependCss: false };\n if (inlineCssResult.consumedPrependCss) {\n inlineCssPrependCss = \"\";\n }\n\n let working = inlineCssResult.html;\n if (!preHeadInjected) {\n const result = spliceAfterHeadOpen(working);\n if (result.spliced) {\n working = result.chunk;\n preHeadInjected = true;\n }\n }\n if (!injected) {\n const headEnd = working.indexOf(\"</head>\");\n if (headEnd !== -1) {\n const before = working.slice(0, headEnd);\n const after = working.slice(headEnd);\n controller.enqueue(\n encoder.encode(before + readInlineCssPrependFallback() + readInsertion() + after),\n );\n injected = true;\n return;\n }\n }\n controller.enqueue(encoder.encode(working));\n };\n\n return new TransformStream<Uint8Array, Uint8Array>({\n transform(chunk, controller) {\n buffered.push(decoder.decode(chunk, { stream: true }));\n\n if (timeoutId !== null) return;\n\n timeoutId = setTimeout(() => {\n try {\n flushBuffered(controller);\n\n const rscScripts = rscEmbed.flush();\n if (rscScripts) {\n controller.enqueue(encoder.encode(rscScripts));\n }\n } catch {\n // Stream was cancelled between when the timeout was registered and\n // when it fired (e.g. client disconnected, health-check cancelled\n // the response body). Ignore — the stream is already closed.\n }\n\n timeoutId = null;\n }, 0);\n },\n\n async flush(controller) {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n const remainder = decoder.decode();\n if (remainder) {\n buffered.push(remainder);\n }\n\n flushBuffered(controller, true);\n\n if (!injected) {\n emitInsertion(controller);\n injected = true;\n } else if (insertsPerFlush) {\n emitInsertion(controller);\n }\n\n const finalScripts = await rscEmbed.finalize();\n if (finalScripts) {\n controller.enqueue(encoder.encode(finalScripts));\n }\n },\n });\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-static-generation.js","names":[],"sources":["../../src/server/app-static-generation.ts"],"sourcesContent":["import type { HeadersContext } from \"vinext/shims/headers\";\n\ntype AppStaticGenerationRouteKind = \"page\" | \"route\";\n\ntype CreateStaticGenerationHeadersContextOptions = {\n draftModeSecret?: string;\n dynamicConfig?: string;\n routeKind: AppStaticGenerationRouteKind;\n routePattern?: string;\n};\n\nexport function getAppPageStaticGenerationErrorMessage(): string {\n return (\n 'Page with `dynamic = \"error\"` used a dynamic API. ' +\n \"This page was expected to be fully static, but headers(), cookies(), \" +\n \"or searchParams was accessed. Remove the dynamic API usage or change \" +\n 'the dynamic config to \"auto\" or \"force-dynamic\".'\n );\n}\n\nexport function getAppRouteStaticGenerationErrorMessage(\n routePattern?: string,\n expression?: string,\n): string {\n const route = routePattern ?? \"unknown route\";\n const dynamicExpression = expression ?? \"a dynamic request API\";\n return (\n `Route ${route} with \\`dynamic = \"error\"\\` couldn't be rendered statically ` +\n `because it used ${dynamicExpression}. ` +\n \"See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering\"\n );\n}\n\nexport function createStaticGenerationHeadersContext(\n options: CreateStaticGenerationHeadersContextOptions,\n): HeadersContext {\n const context: HeadersContext = {\n headers: new Headers(),\n cookies: new Map(),\n draftModeSecret: options.draftModeSecret,\n };\n\n if (options.dynamicConfig === \"force-static\") {\n context.forceStatic = true;\n }\n\n if (options.dynamicConfig === \"error\") {\n context.accessError = new Error(\n options.routeKind === \"route\"\n ? getAppRouteStaticGenerationErrorMessage(options.routePattern)\n : getAppPageStaticGenerationErrorMessage(),\n );\n }\n\n return context;\n}\n"],"mappings":";AAWA,SAAgB,yCAAiD;CAC/D,OACE;;AAOJ,SAAgB,wCACd,cACA,YACQ;CAGR,OACE,SAHY,gBAAgB,gBAGb,8EAFS,cAAc,wBAGD;;AAKzC,SAAgB,qCACd,SACgB;CAChB,MAAM,UAA0B;EAC9B,SAAS,IAAI,SAAS;EACtB,yBAAS,IAAI,KAAK;EAClB,iBAAiB,QAAQ;EAC1B;CAED,IAAI,QAAQ,kBAAkB,gBAC5B,QAAQ,cAAc;CAGxB,IAAI,QAAQ,kBAAkB,SAC5B,QAAQ,cAAc,IAAI,MACxB,QAAQ,cAAc,UAClB,wCAAwC,QAAQ,aAAa,GAC7D,wCAAwC,CAC7C;CAGH,OAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"artifact-compatibility.js","names":[],"sources":["../../src/server/artifact-compatibility.ts"],"sourcesContent":["import { fnv1a64 } from \"../utils/hash.js\";\n\nexport const ARTIFACT_COMPATIBILITY_SCHEMA_VERSION = 1;\n\n// These versions describe separate protocol layers. For example, a future\n// rolling deploy can bump the flat AppElements row shape while keeping the\n// envelope object and serialized RSC transport version stable.\nexport const APP_ELEMENTS_SCHEMA_VERSION = 1;\nexport const RSC_PAYLOAD_SCHEMA_VERSION = 1;\n\nexport type ArtifactCompatibilityEnvelope = Readonly<{\n schemaVersion: typeof ARTIFACT_COMPATIBILITY_SCHEMA_VERSION;\n graphVersion: string | null;\n deploymentVersion: string | null;\n appElementsSchemaVersion: typeof APP_ELEMENTS_SCHEMA_VERSION;\n rscPayloadSchemaVersion: typeof RSC_PAYLOAD_SCHEMA_VERSION;\n rootBoundaryId: string | null;\n renderEpoch: string | null;\n}>;\n\ntype ArtifactCompatibilityEnvelopeInput = Readonly<{\n graphVersion?: string | null;\n deploymentVersion?: string | null;\n rootBoundaryId?: string | null;\n renderEpoch?: string | null;\n}>;\n\nexport type ArtifactCompatibilitySet = readonly [string, string, ...string[]];\n\nexport type ArtifactCompatibilityMap = Readonly<{\n graphVersions?: readonly ArtifactCompatibilitySet[];\n deploymentVersions?: readonly ArtifactCompatibilitySet[];\n rootBoundaryIds?: readonly ArtifactCompatibilitySet[];\n renderEpochs?: readonly ArtifactCompatibilitySet[];\n}>;\n\nexport type ArtifactCompatibilityEvaluationOptions = Readonly<{\n compatibilityMap?: ArtifactCompatibilityMap;\n}>;\n\ntype ArtifactCompatibilityFallback = \"renderFresh\";\n\ntype ArtifactCompatibilityUnknownReason =\n | \"graphVersionUnknown\"\n | \"deploymentVersionUnknown\"\n | \"rootBoundaryIdUnknown\"\n | \"renderEpochUnknown\";\n\ntype ArtifactCompatibilityIncompatibleReason =\n | \"appElementsSchemaVersionMismatch\"\n | \"deploymentVersionNotDeclaredCompatible\"\n | \"deploymentVersionMismatch\"\n | \"graphVersionNotDeclaredCompatible\"\n | \"graphVersionMismatch\"\n | \"renderEpochNotDeclaredCompatible\"\n | \"renderEpochMismatch\"\n | \"rootBoundaryIdNotDeclaredCompatible\"\n | \"rootBoundaryIdMismatch\"\n | \"rscPayloadSchemaVersionMismatch\"\n | \"schemaVersionMismatch\";\n\ntype ArtifactCompatibilityDecision = Readonly<\n | { kind: \"compatible\" }\n | {\n kind: \"unknown\";\n fallback: ArtifactCompatibilityFallback;\n reason: ArtifactCompatibilityUnknownReason;\n }\n | {\n kind: \"incompatible\";\n fallback: ArtifactCompatibilityFallback;\n reason: ArtifactCompatibilityIncompatibleReason;\n }\n>;\n\ntype ArtifactCompatibilityGraphVersionInput = Readonly<{\n routePattern: string;\n rootBoundaryId: string | null;\n}>;\n\nexport function createArtifactCompatibilityEnvelope(\n input: ArtifactCompatibilityEnvelopeInput = {},\n): ArtifactCompatibilityEnvelope {\n return {\n schemaVersion: ARTIFACT_COMPATIBILITY_SCHEMA_VERSION,\n graphVersion: input.graphVersion ?? null,\n deploymentVersion: input.deploymentVersion ?? null,\n appElementsSchemaVersion: APP_ELEMENTS_SCHEMA_VERSION,\n rscPayloadSchemaVersion: RSC_PAYLOAD_SCHEMA_VERSION,\n rootBoundaryId: input.rootBoundaryId ?? null,\n renderEpoch: input.renderEpoch ?? null,\n };\n}\n\nexport function createArtifactCompatibilityGraphVersion(\n input: ArtifactCompatibilityGraphVersionInput,\n): string {\n const fingerprint = fnv1a64(JSON.stringify([input.routePattern, input.rootBoundaryId]));\n return `app-route-graph:${fingerprint}`;\n}\n\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isStringOrNull(value: unknown): value is string | null {\n return typeof value === \"string\" || value === null;\n}\n\nfunction hasCurrentSchemaVersions(record: Readonly<Record<string, unknown>>): boolean {\n return (\n record.schemaVersion === ARTIFACT_COMPATIBILITY_SCHEMA_VERSION &&\n record.appElementsSchemaVersion === APP_ELEMENTS_SCHEMA_VERSION &&\n record.rscPayloadSchemaVersion === RSC_PAYLOAD_SCHEMA_VERSION\n );\n}\n\nexport function parseArtifactCompatibilityEnvelope(\n value: unknown,\n): ArtifactCompatibilityEnvelope | null {\n if (!isRecord(value)) return null;\n // The Wave01 skeleton intentionally collapses version mismatch and malformed\n // metadata into \"not current\". Cache/skip callers must split those cases\n // before treating unknown compatibility as anything other than a miss/reject.\n if (!hasCurrentSchemaVersions(value)) return null;\n if (!isStringOrNull(value.graphVersion)) return null;\n if (!isStringOrNull(value.deploymentVersion)) return null;\n if (!isStringOrNull(value.rootBoundaryId)) return null;\n if (!isStringOrNull(value.renderEpoch)) return null;\n\n // This parser intentionally returns a normalized current-version proof. A\n // future-compatible reader should introduce a separate parsed type instead of\n // widening this Wave01 envelope after the current-version checks above.\n return {\n schemaVersion: ARTIFACT_COMPATIBILITY_SCHEMA_VERSION,\n graphVersion: value.graphVersion,\n deploymentVersion: value.deploymentVersion,\n appElementsSchemaVersion: APP_ELEMENTS_SCHEMA_VERSION,\n rscPayloadSchemaVersion: RSC_PAYLOAD_SCHEMA_VERSION,\n rootBoundaryId: value.rootBoundaryId,\n renderEpoch: value.renderEpoch,\n };\n}\n\nfunction incompatible(\n reason: ArtifactCompatibilityIncompatibleReason,\n): ArtifactCompatibilityDecision {\n return { kind: \"incompatible\", fallback: \"renderFresh\", reason };\n}\n\nfunction unknown(reason: ArtifactCompatibilityUnknownReason): ArtifactCompatibilityDecision {\n return { kind: \"unknown\", fallback: \"renderFresh\", reason };\n}\n\nfunction compareKnownField(\n currentValue: string | null,\n candidateValue: string | null,\n unknownReason: ArtifactCompatibilityUnknownReason,\n mismatchReason: ArtifactCompatibilityIncompatibleReason,\n notDeclaredCompatibleReason: ArtifactCompatibilityIncompatibleReason,\n compatibilitySets: readonly ArtifactCompatibilitySet[] | undefined,\n): ArtifactCompatibilityDecision | null {\n if (currentValue === null || candidateValue === null) {\n return unknown(unknownReason);\n }\n if (currentValue === candidateValue) {\n return null;\n }\n if (compatibilitySets === undefined) {\n return incompatible(mismatchReason);\n }\n return isDeclaredCompatible(currentValue, candidateValue, compatibilitySets)\n ? null\n : incompatible(notDeclaredCompatibleReason);\n}\n\nfunction isDeclaredCompatible(\n currentValue: string,\n candidateValue: string,\n compatibilitySets: readonly ArtifactCompatibilitySet[],\n): boolean {\n // Compatibility is intentionally scoped to one declared set. Overlapping\n // pair sets like [a,b] and [b,c] must not silently make a compatible with c.\n return compatibilitySets.some(\n (compatibilitySet) =>\n compatibilitySet.includes(currentValue) && compatibilitySet.includes(candidateValue),\n );\n}\n\nexport function evaluateArtifactCompatibility(\n current: ArtifactCompatibilityEnvelope,\n candidate: ArtifactCompatibilityEnvelope,\n options: ArtifactCompatibilityEvaluationOptions = {},\n): ArtifactCompatibilityDecision {\n // This remains a proof evaluator: mismatched fields are compatible only when\n // the current build's compatibility map explicitly declares that relationship.\n if (current.schemaVersion !== candidate.schemaVersion) {\n return incompatible(\"schemaVersionMismatch\");\n }\n if (current.appElementsSchemaVersion !== candidate.appElementsSchemaVersion) {\n return incompatible(\"appElementsSchemaVersionMismatch\");\n }\n if (current.rscPayloadSchemaVersion !== candidate.rscPayloadSchemaVersion) {\n return incompatible(\"rscPayloadSchemaVersionMismatch\");\n }\n\n const graphDecision = compareKnownField(\n current.graphVersion,\n candidate.graphVersion,\n \"graphVersionUnknown\",\n \"graphVersionMismatch\",\n \"graphVersionNotDeclaredCompatible\",\n options.compatibilityMap?.graphVersions,\n );\n if (graphDecision) return graphDecision;\n\n const deploymentDecision = compareKnownField(\n current.deploymentVersion,\n candidate.deploymentVersion,\n \"deploymentVersionUnknown\",\n \"deploymentVersionMismatch\",\n \"deploymentVersionNotDeclaredCompatible\",\n options.compatibilityMap?.deploymentVersions,\n );\n if (deploymentDecision) return deploymentDecision;\n\n const rootBoundaryDecision = compareKnownField(\n current.rootBoundaryId,\n candidate.rootBoundaryId,\n \"rootBoundaryIdUnknown\",\n \"rootBoundaryIdMismatch\",\n \"rootBoundaryIdNotDeclaredCompatible\",\n options.compatibilityMap?.rootBoundaryIds,\n );\n if (rootBoundaryDecision) return rootBoundaryDecision;\n\n const renderEpochDecision = compareKnownField(\n current.renderEpoch,\n candidate.renderEpoch,\n \"renderEpochUnknown\",\n \"renderEpochMismatch\",\n \"renderEpochNotDeclaredCompatible\",\n options.compatibilityMap?.renderEpochs,\n );\n if (renderEpochDecision) return renderEpochDecision;\n\n return { kind: \"compatible\" };\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cache-control.js","names":[],"sources":["../../src/server/cache-control.ts"],"sourcesContent":["export const NEVER_CACHE_CONTROL = \"private, no-cache, no-store, max-age=0, must-revalidate\";\n\nexport const STATIC_CACHE_CONTROL = \"s-maxage=31536000, stale-while-revalidate\";\n\nconst STALE_REVALIDATE_CACHE_CONTROL = \"s-maxage=0, stale-while-revalidate\";\n\nexport const NO_STORE_CACHE_CONTROL = \"no-store, must-revalidate\";\n\n/**\n * Matches Next.js's `getCacheControlHeader` stale window semantics while\n * preserving vinext's legacy unbounded SWR header when no expire ceiling is\n * available yet.\n *\n * Next.js source:\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/server/lib/cache-control.ts\n */\nexport function buildRevalidateCacheControl(\n revalidateSeconds: number,\n expireSeconds?: number,\n): string {\n if (expireSeconds === undefined) {\n return `s-maxage=${revalidateSeconds}, stale-while-revalidate`;\n }\n\n // `expire <= revalidate` is a zero-width stale window: downstream caches\n // should refetch after s-maxage instead of serving stale.\n if (revalidateSeconds >= expireSeconds) {\n return `s-maxage=${revalidateSeconds}`;\n }\n\n return `s-maxage=${revalidateSeconds}, stale-while-revalidate=${\n expireSeconds - revalidateSeconds\n }`;\n}\n\n/**\n * Builds Cache-Control for ISR cache reads. HIT responses and STALE responses\n * with stored expire metadata use the same route policy because Next.js derives\n * this header from cache-control metadata, not from the cache hit/stale state.\n * STALE entries without expire metadata keep vinext's legacy `s-maxage=0`\n * fallback so older cache entries are not treated as newly fresh downstream.\n */\nexport function buildCachedRevalidateCacheControl(\n cacheState: \"HIT\" | \"STALE\",\n revalidateSeconds: number,\n expireSeconds?: number,\n): string {\n if (revalidateSeconds === Infinity) {\n return STATIC_CACHE_CONTROL;\n }\n\n // When expire is known, match Next.js and emit the route policy even for\n // vinext-served STALE entries. The hard-expire gate has already decided the\n // stale payload is still usable, and downstream caches should see the same\n // finite SWR window Next.js would emit from cacheControl metadata.\n if (cacheState === \"STALE\" && expireSeconds === undefined) {\n return STALE_REVALIDATE_CACHE_CONTROL;\n }\n\n return buildRevalidateCacheControl(revalidateSeconds, expireSeconds);\n}\n"],"mappings":";AAAA,MAAa,sBAAsB;AAEnC,MAAa,uBAAuB;AAEpC,MAAM,iCAAiC;AAEvC,MAAa,yBAAyB;;;;;;;;;AAUtC,SAAgB,4BACd,mBACA,eACQ;CACR,IAAI,kBAAkB,KAAA,GACpB,OAAO,YAAY,kBAAkB;CAKvC,IAAI,qBAAqB,eACvB,OAAO,YAAY;CAGrB,OAAO,YAAY,kBAAkB,2BACnC,gBAAgB;;;;;;;;;AAWpB,SAAgB,kCACd,YACA,mBACA,eACQ;CACR,IAAI,sBAAsB,UACxB,OAAO;CAOT,IAAI,eAAe,WAAW,kBAAkB,KAAA,GAC9C,OAAO;CAGT,OAAO,4BAA4B,mBAAmB,cAAc"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cache-headers.js","names":[],"sources":["../../src/server/cache-headers.ts"],"sourcesContent":["import { NEXTJS_CACHE_HEADER, VINEXT_CACHE_HEADER } from \"./headers.js\";\n\ntype VinextCacheState = \"HIT\" | \"MISS\" | \"STALE\" | \"STATIC\";\ntype NextJsCacheState = \"HIT\" | \"MISS\" | \"STALE\";\n\nfunction toNextJsCacheState(cacheState: VinextCacheState): NextJsCacheState {\n return cacheState === \"STATIC\" ? \"HIT\" : cacheState;\n}\n\nexport function setCacheStateHeaders(headers: Headers, cacheState: VinextCacheState): void {\n headers.set(VINEXT_CACHE_HEADER, cacheState);\n headers.set(NEXTJS_CACHE_HEADER, toNextJsCacheState(cacheState));\n}\n\nexport function buildCacheStateHeaders(cacheState: VinextCacheState): Record<string, string> {\n return {\n [VINEXT_CACHE_HEADER]: cacheState,\n [NEXTJS_CACHE_HEADER]: toNextJsCacheState(cacheState),\n };\n}\n"],"mappings":";;AAKA,SAAS,mBAAmB,YAAgD;CAC1E,OAAO,eAAe,WAAW,QAAQ;;AAG3C,SAAgB,qBAAqB,SAAkB,YAAoC;CACzF,QAAQ,IAAI,qBAAqB,WAAW;CAC5C,QAAQ,IAAI,qBAAqB,mBAAmB,WAAW,CAAC;;AAGlE,SAAgB,uBAAuB,YAAsD;CAC3F,OAAO;GACJ,sBAAsB;GACtB,sBAAsB,mBAAmB,WAAW;EACtD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cache-proof.js","names":[],"sources":["../../src/server/cache-proof.ts"],"sourcesContent":["import type { AppRouteSemanticIds } from \"../routing/app-route-graph.js\";\nimport { fnv1a64 } from \"../utils/hash.js\";\nimport { findSortedStringPosition } from \"../utils/sorted-array.js\";\nimport {\n evaluateArtifactCompatibility,\n type ArtifactCompatibilityEnvelope,\n type ArtifactCompatibilityEvaluationOptions,\n} from \"./artifact-compatibility.js\";\n\nexport const CACHE_PROOF_MODEL_SCHEMA_VERSION = 1;\nexport type CacheProofModelSchemaVersion = 1;\n\nexport type CacheProofRejectionCode =\n | \"CP_CACHE_ENTRY_PROOF_MISSING\"\n | \"CP_MODEL_DISABLED\"\n | \"CP_ARTIFACT_COMPATIBILITY_INCOMPATIBLE\"\n | \"CP_ARTIFACT_COMPATIBILITY_UNKNOWN\"\n | \"CP_DIMENSION_COUNT_EXCEEDED\"\n | \"CP_DIMENSION_NAME_MISSING\"\n | \"CP_DIMENSION_NAME_TOO_LONG\"\n | \"CP_DIMENSION_VALUE_COUNT_EXCEEDED\"\n | \"CP_DIMENSION_VALUE_TOO_LONG\"\n | \"CP_DIMENSION_VALUES_MISSING\"\n | \"CP_ENCODED_VARIANT_TOO_LONG\"\n | \"CP_INVALID_VARIANT_BUDGET\"\n | \"CP_ROUTE_VARIANT_BUDGET_ROUTE_MISMATCH\"\n | \"CP_ROUTE_VARIANT_CEILING_EXCEEDED\"\n | \"CP_UNSAFE_PUBLIC_DIMENSION\"\n | \"CP_BOUNDARY_OUTCOME_MISMATCH\"\n | \"CP_BOUNDARY_OUTCOME_UNKNOWN\"\n | \"CP_PRIVATE_DYNAMIC_DOWNGRADE\"\n | \"CP_STATIC_LAYOUT_CANDIDATE_OUTPUT_KIND\"\n | \"CP_STATIC_LAYOUT_CURRENT_OUTPUT_KIND\"\n | \"CP_STATIC_LAYOUT_ID_MISMATCH\"\n | \"CP_STATIC_LAYOUT_OBSERVATION_OUTPUT_KIND\"\n | \"CP_STATIC_LAYOUT_OBSERVATION_OUTPUT_MISMATCH\"\n | \"CP_STATIC_LAYOUT_PRIVATE_DYNAMIC_DOWNGRADE\"\n | \"CP_STATIC_LAYOUT_REQUEST_API_OBSERVED\"\n | \"CP_STATIC_LAYOUT_REQUEST_API_UNKNOWN\"\n | \"CP_STATIC_LAYOUT_ROOT_BOUNDARY_MISMATCH\"\n | \"CP_STATIC_LAYOUT_ROOT_BOUNDARY_UNKNOWN\"\n | \"CP_STATIC_LAYOUT_VARIANT_DIMENSION_UNPROVEN\";\n\nexport type CacheProofAcceptanceCode = \"CP_STATIC_LAYOUT_REUSE_PROVEN\";\n\nexport type CacheProofTraceCode = CacheProofAcceptanceCode | CacheProofRejectionCode;\n\nexport type CacheProofTraceFieldValue = string | number | boolean | null | readonly string[];\n\nexport type CacheProofTraceFields = Readonly<Record<string, CacheProofTraceFieldValue>>;\n\nexport type CacheProofBreakerFallbackMode = \"renderFresh\" | \"privateUncacheable\";\nexport type CacheProofFallbackScope = \"affectedOutput\" | \"route\";\n\nexport type CacheProofBreakerFallback = Readonly<{\n kind: \"breakerFallback\";\n code: CacheProofRejectionCode;\n mode: CacheProofBreakerFallbackMode;\n scope: CacheProofFallbackScope;\n fields: CacheProofTraceFields;\n}>;\n\nexport type CacheVariantBudget = Readonly<{\n maxDimensionCount: number;\n maxDimensionNameLength: number;\n maxDimensionValueLength: number;\n maxEncodedLength: number;\n maxValuesPerDimension: number;\n maxVariantsPerRoute: number;\n}>;\n\nexport const DEFAULT_CACHE_VARIANT_BUDGET = {\n maxDimensionCount: 8,\n maxDimensionNameLength: 64,\n maxDimensionValueLength: 256,\n maxEncodedLength: 1024,\n maxValuesPerDimension: 8,\n maxVariantsPerRoute: 64,\n} satisfies CacheVariantBudget;\n\nexport type CacheVariantDimensionSource =\n | \"auth\"\n | \"cookie\"\n | \"custom\"\n | \"draft-mode\"\n | \"header\"\n | \"interception\"\n | \"mounted-slots\"\n | \"params\"\n | \"route\"\n | \"search\"\n | \"session\";\n\nexport type CacheVariantDimensionPrivacy = \"internal\" | \"private\" | \"public\";\n\nexport type CacheVariantDimensionInput = Readonly<{\n name: string;\n privacy: CacheVariantDimensionPrivacy;\n source: CacheVariantDimensionSource;\n values: readonly string[];\n}>;\n\nexport type CacheVariantDimension = Readonly<{\n encoded: string;\n name: string;\n privacy: CacheVariantDimensionPrivacy;\n source: CacheVariantDimensionSource;\n valueCount: number;\n valueHashes: readonly string[];\n}>;\n\nexport type CacheProofOutputScope =\n | Readonly<{\n kind: \"app-html\";\n renderEpoch: string | null;\n rootBoundaryId: string | null;\n routeId: string;\n }>\n | Readonly<{\n kind: \"app-rsc\";\n mountedSlotsFingerprint: string | null;\n renderEpoch: string | null;\n rootBoundaryId: string | null;\n routeId: string;\n }>\n | Readonly<{\n kind: \"layout\";\n layoutId: string;\n rootBoundaryId: string | null;\n routeId: string;\n }>\n | Readonly<{\n kind: \"page\";\n pageId: string;\n rootBoundaryId: string | null;\n routeId: string;\n }>\n | Readonly<{\n kind: \"route-handler\";\n routeHandlerId: string;\n routeId: string;\n }>\n | Readonly<{\n kind: \"slot\";\n rootBoundaryId: string | null;\n routeId: string;\n slotId: string;\n }>\n | Readonly<{\n kind: \"template\";\n rootBoundaryId: string | null;\n routeId: string;\n templateId: string;\n }>;\n\nexport type StaticLayoutCacheProofOutputScope = Extract<CacheProofOutputScope, { kind: \"layout\" }>;\n\nexport type CacheVariant = Readonly<{\n budget: CacheVariantBudget;\n cacheKey: string;\n dimensions: readonly CacheVariantDimension[];\n encodedLength: number;\n output: CacheProofOutputScope;\n schemaVersion: CacheProofModelSchemaVersion;\n}>;\n\nexport type BuildCacheVariantInput = Readonly<{\n budget: CacheVariantBudget;\n dimensions: readonly CacheVariantDimensionInput[];\n output: CacheProofOutputScope;\n}>;\n\nexport type BuildCacheVariantResult =\n | Readonly<{ kind: \"variant\"; variant: CacheVariant }>\n | Readonly<{ kind: \"breakerFallback\"; fallback: CacheProofBreakerFallback }>;\n\nexport type CacheVariantRouteBudget = Readonly<{\n routeId: string;\n variantCacheKeys: readonly string[];\n}>;\n\nexport type CacheVariantRouteBudgetAdmission =\n | Readonly<{\n didConsumeRouteVariantBudget: boolean;\n kind: \"variant\";\n routeBudget: CacheVariantRouteBudget;\n variant: CacheVariant;\n }>\n | Readonly<{\n fallback: CacheProofBreakerFallback;\n kind: \"breakerFallback\";\n routeBudget: CacheVariantRouteBudget | null;\n }>;\n\nexport type BuildCacheVariantWithRouteBudgetInput = BuildCacheVariantInput &\n Readonly<{\n routeBudget: CacheVariantRouteBudget | null;\n }>;\n\nexport type BuildCacheVariantWithRouteBudgetResult = CacheVariantRouteBudgetAdmission;\n\nexport type AppRouteCacheProofGraphScopeInput = Readonly<{\n ids: AppRouteSemanticIds;\n}>;\n\nexport type AppRouteCacheProofGraphScope = Readonly<{\n layoutIds: readonly string[];\n pageId: string | null;\n routeHandlerId: string | null;\n routeId: string;\n slotIds: readonly string[];\n templateIds: readonly string[];\n}>;\n\nexport type BoundaryOutcome =\n | Readonly<{ kind: \"error\"; digest?: string }>\n | Readonly<{ kind: \"forbidden\" }>\n | Readonly<{ kind: \"globalError\"; digest?: string }>\n | Readonly<{ kind: \"notFound\" }>\n | Readonly<{ kind: \"redirect\"; location: string; status: number }>\n | Readonly<{ kind: \"success\" }>\n | Readonly<{ kind: \"unauthorized\" }>\n | Readonly<{ kind: \"unknown\" }>;\n\nexport type BoundaryOutcomeCompatibility =\n | Readonly<{\n kind: \"compatible\";\n outcome: BoundaryOutcome;\n reason: \"CP_BOUNDARY_OUTCOME_MATCH\";\n }>\n | Readonly<{\n candidate: BoundaryOutcome;\n expected: BoundaryOutcome;\n fallback: CacheProofBreakerFallback;\n kind: \"incompatible\";\n }>;\n\nexport type RenderObservationCompleteness = \"complete\" | \"partial\" | \"unknown\";\nexport type RenderCacheability = \"private\" | \"public\" | \"uncacheable\" | \"unknown\";\nexport type RenderRequestApiKind =\n | \"connection\"\n | \"cookies\"\n | \"draftMode\"\n | \"headers\"\n | \"params\"\n | \"searchParams\";\nexport type RenderRequestApiStatus = \"notObserved\" | \"observed\" | \"unknown\";\n\nexport const ALL_RENDER_REQUEST_API_KINDS: readonly RenderRequestApiKind[] = [\n \"connection\",\n \"cookies\",\n \"draftMode\",\n \"headers\",\n \"params\",\n \"searchParams\",\n];\n\nexport type RenderRequestApiObservation = Readonly<{\n kind: RenderRequestApiKind;\n status: RenderRequestApiStatus;\n}>;\n\nexport type CacheProofDowngradeTarget =\n | \"freshRender\"\n | \"private\"\n | \"privateUncacheable\"\n | \"public\"\n | \"publicVariant\";\n\nexport type CacheProofDowngradeReason =\n | Readonly<{\n code: \"CP_DOWNGRADE_CACHEABILITY_PRIVATE\";\n target: \"private\";\n }>\n | Readonly<{\n code: \"CP_DOWNGRADE_CACHEABILITY_UNCACHEABLE\";\n target: \"privateUncacheable\";\n }>\n | Readonly<{\n code: \"CP_DOWNGRADE_CACHEABILITY_UNKNOWN\";\n target: \"freshRender\";\n }>\n | Readonly<{\n code: \"CP_DOWNGRADE_DYNAMIC_FETCH\";\n dynamicFetchCount: number;\n target: \"freshRender\";\n }>\n | Readonly<{\n code: \"CP_DOWNGRADE_DYNAMIC_REQUEST_API\";\n requestApi: \"connection\";\n target: \"freshRender\";\n }>\n | Readonly<{\n code: \"CP_DOWNGRADE_DRAFT_MODE\";\n requestApi: \"draftMode\";\n target: \"privateUncacheable\";\n }>\n | Readonly<{\n code: \"CP_DOWNGRADE_INCOMPLETE_OBSERVATION\";\n completeness: Exclude<RenderObservationCompleteness, \"complete\">;\n target: \"freshRender\";\n }>\n | Readonly<{\n code: \"CP_DOWNGRADE_PRIVATE_DIMENSION\";\n inputClass: \"auth\" | \"draft\" | \"private\" | \"session\";\n source: \"auth\" | \"cookie\" | \"draft-mode\" | \"header\" | \"session\";\n target: \"private\" | \"privateUncacheable\";\n }>\n | Readonly<{\n code: \"CP_DOWNGRADE_PRIVATE_REQUEST_API\";\n requestApi: \"cookies\" | \"headers\";\n target: \"private\";\n }>\n | Readonly<{\n code: \"CP_DOWNGRADE_PUBLIC_REQUEST_API\";\n requestApi: \"params\" | \"searchParams\";\n target: \"publicVariant\";\n }>\n | Readonly<{\n code: \"CP_DOWNGRADE_UNKNOWN_REQUEST_API\";\n requestApi: RenderRequestApiKind;\n target: \"freshRender\";\n }>;\n\nexport type CacheProofDowngradeClassification = Readonly<{\n fallback: CacheProofBreakerFallback | null;\n isPublicCacheCandidate: boolean;\n reasons: readonly CacheProofDowngradeReason[];\n target: CacheProofDowngradeTarget;\n}>;\n\nexport type ClassifyRenderObservationDowngradeInput = Readonly<{\n cacheability: RenderCacheability;\n completeness: RenderObservationCompleteness;\n dynamicFetches: readonly string[];\n requestApis: readonly RenderRequestApiObservation[];\n}>;\n\nexport type ClassifyCacheVariantDimensionDowngradeInput = Pick<\n CacheVariantDimensionInput,\n \"source\"\n>;\n\nexport type RenderObservation = Readonly<{\n boundaryOutcome: BoundaryOutcome;\n cacheTags: readonly string[];\n cacheability: RenderCacheability;\n completeness: RenderObservationCompleteness;\n downgrade: CacheProofDowngradeClassification;\n dynamicFetches: readonly string[];\n output: CacheProofOutputScope;\n pathTags: readonly string[];\n requestApis: readonly RenderRequestApiObservation[];\n schemaVersion: CacheProofModelSchemaVersion;\n}>;\n\nexport type StaticLayoutReuseProof = Readonly<{\n authorizesRuntimeReuse: true;\n candidateOutput: StaticLayoutCacheProofOutputScope;\n code: \"CP_STATIC_LAYOUT_REUSE_PROVEN\";\n currentOutput: StaticLayoutCacheProofOutputScope;\n fields: CacheProofTraceFields;\n observation: RenderObservation;\n requiredNegativeRequestApis: readonly RenderRequestApiKind[];\n reuseClass: \"static-layout\";\n variant: CacheVariant;\n}>;\n\nexport type StaticLayoutArtifactReuseProof = StaticLayoutReuseProof &\n Readonly<{\n candidateArtifactCompatibility: ArtifactCompatibilityEnvelope;\n }>;\n\nexport type BuildStaticLayoutReuseProofInput = Readonly<{\n candidateObservation: RenderObservation;\n candidateVariant: CacheVariant;\n currentOutput: CacheProofOutputScope;\n}>;\n\nexport type BuildStaticLayoutReuseProofResult =\n | Readonly<{ kind: \"proof\"; proof: StaticLayoutReuseProof }>\n | Readonly<{ kind: \"rejected\"; fallback: CacheProofBreakerFallback }>;\n\nexport type CacheProofHotPathMetric = Readonly<{\n code: CacheProofTraceCode;\n fields: CacheProofTraceFields;\n name: \"vinext.cache.static_layout_artifact_reuse\";\n outcome: \"fallback\" | \"reuse\";\n}>;\n\nexport type StaticLayoutArtifactReuseDecision =\n | Readonly<{\n canReuse: true;\n kind: \"reuse\";\n metric: CacheProofHotPathMetric;\n proof: StaticLayoutArtifactReuseProof;\n }>\n | Readonly<{\n canReuse: false;\n fallback: CacheProofBreakerFallback;\n kind: \"fallback\";\n metric: CacheProofHotPathMetric;\n }>;\n\nexport type CacheEntryReuseDecision =\n | Readonly<{\n canReuse: true;\n code: CacheProofAcceptanceCode;\n kind: \"reuse\";\n reuseClass: StaticLayoutReuseProof[\"reuseClass\"];\n }>\n | Readonly<{\n canReuse: false;\n code: CacheProofRejectionCode;\n kind: \"reject\";\n mode: CacheProofBreakerFallbackMode;\n scope: CacheProofFallbackScope;\n }>;\n\nexport type CacheEntryReuseProof = Readonly<{\n decision: CacheEntryReuseDecision | null;\n kind: \"runtime-cache-entry\";\n}>;\n\nexport type CreateStaticLayoutArtifactReuseDecisionInput = Readonly<{\n candidateArtifactCompatibility: ArtifactCompatibilityEnvelope;\n candidateObservation: RenderObservation;\n candidateVariant: BuildCacheVariantWithRouteBudgetResult;\n currentArtifactCompatibility: ArtifactCompatibilityEnvelope;\n currentOutput: CacheProofOutputScope;\n}> &\n ArtifactCompatibilityEvaluationOptions;\n\nexport type BuildRenderObservationInput = Readonly<{\n boundaryOutcome: BoundaryOutcome;\n cacheTags: readonly string[];\n cacheability: RenderCacheability;\n completeness: RenderObservationCompleteness;\n dynamicFetches: readonly string[];\n output: CacheProofOutputScope;\n pathTags: readonly string[];\n requestApis: readonly RenderRequestApiObservation[];\n}>;\n\nexport type BuildRenderRequestApiObservationsInput = Readonly<{\n completeness: RenderObservationCompleteness;\n observed: readonly RenderRequestApiKind[];\n}>;\n\nexport type DisabledCacheProofDecision = Readonly<{\n canReuse: false;\n fallback: CacheProofBreakerFallback;\n kind: \"disabled\";\n observation: RenderObservation;\n staticLayoutProof?: StaticLayoutReuseProof;\n variant: CacheVariant;\n}>;\n\nexport type CreateDisabledCacheProofDecisionInput = Readonly<{\n observation: RenderObservation;\n staticLayoutProof?: StaticLayoutReuseProof;\n variant: CacheVariant;\n}>;\n\nconst PUBLIC_UNSAFE_DIMENSION_SOURCES: ReadonlySet<CacheVariantDimensionSource> = new Set([\n \"auth\",\n \"cookie\",\n \"draft-mode\",\n \"header\",\n \"session\",\n]);\n\ntype CacheVariantDimensionAccumulator = {\n name: string;\n privacy: CacheVariantDimensionPrivacy;\n source: CacheVariantDimensionSource;\n values: string[];\n};\n\ntype DimensionAccumulatorByName = Map<string, CacheVariantDimensionAccumulator>;\ntype DimensionAccumulatorByPrivacy = Map<CacheVariantDimensionPrivacy, DimensionAccumulatorByName>;\ntype DimensionAccumulatorBySource = Map<CacheVariantDimensionSource, DimensionAccumulatorByPrivacy>;\n\nfunction buildBreakerFallback(\n code: CacheProofRejectionCode,\n fields: CacheProofTraceFields = {},\n mode: CacheProofBreakerFallbackMode = \"renderFresh\",\n scope: CacheProofFallbackScope = \"affectedOutput\",\n): CacheProofBreakerFallback {\n return {\n kind: \"breakerFallback\",\n code,\n mode,\n scope,\n fields,\n };\n}\n\nfunction sortedUnique(values: readonly string[]): string[] {\n return [...new Set(values)].sort();\n}\n\nfunction normalizeDimensionName(name: string): string {\n return name.trim().toLowerCase();\n}\n\nfunction redactValue(value: string): string {\n return `h:${fnv1a64(value)}`;\n}\n\nfunction sortedUniqueRedacted(values: readonly string[]): string[] {\n return sortedUnique(sortedUnique(values).map(redactValue));\n}\n\nfunction encodeParts(parts: readonly unknown[]): string {\n return JSON.stringify(parts);\n}\n\nfunction compareDimensions(a: CacheVariantDimension, b: CacheVariantDimension): number {\n return (\n a.source.localeCompare(b.source) ||\n a.name.localeCompare(b.name) ||\n a.privacy.localeCompare(b.privacy)\n );\n}\n\nfunction encodeNullable(value: string | null): string | null {\n return value;\n}\n\nfunction assertNever(value: never): never {\n throw new Error(`Unhandled cache proof variant: ${String(value)}`);\n}\n\nfunction encodeOutputScope(output: CacheProofOutputScope): string {\n switch (output.kind) {\n case \"app-html\":\n return encodeParts([\n output.kind,\n output.routeId,\n encodeNullable(output.rootBoundaryId),\n encodeNullable(output.renderEpoch),\n ]);\n case \"app-rsc\":\n return encodeParts([\n output.kind,\n output.routeId,\n encodeNullable(output.rootBoundaryId),\n encodeNullable(output.renderEpoch),\n encodeNullable(output.mountedSlotsFingerprint),\n ]);\n case \"layout\":\n return encodeParts([\n output.kind,\n output.routeId,\n output.layoutId,\n encodeNullable(output.rootBoundaryId),\n ]);\n case \"page\":\n return encodeParts([\n output.kind,\n output.routeId,\n output.pageId,\n encodeNullable(output.rootBoundaryId),\n ]);\n case \"route-handler\":\n return encodeParts([output.kind, output.routeId, output.routeHandlerId]);\n case \"slot\":\n return encodeParts([\n output.kind,\n output.routeId,\n output.slotId,\n encodeNullable(output.rootBoundaryId),\n ]);\n case \"template\":\n return encodeParts([\n output.kind,\n output.routeId,\n output.templateId,\n encodeNullable(output.rootBoundaryId),\n ]);\n default:\n return assertNever(output);\n }\n}\n\nfunction validateBudgetNumber(name: string, value: number): CacheProofBreakerFallback | null {\n if (Number.isInteger(value) && value >= 0) return null;\n return buildBreakerFallback(\"CP_INVALID_VARIANT_BUDGET\", {\n budgetField: name,\n });\n}\n\nfunction validateBudget(budget: CacheVariantBudget): CacheProofBreakerFallback | null {\n return (\n validateBudgetNumber(\"maxDimensionCount\", budget.maxDimensionCount) ??\n validateBudgetNumber(\"maxDimensionNameLength\", budget.maxDimensionNameLength) ??\n validateBudgetNumber(\"maxDimensionValueLength\", budget.maxDimensionValueLength) ??\n validateBudgetNumber(\"maxEncodedLength\", budget.maxEncodedLength) ??\n validateBudgetNumber(\"maxValuesPerDimension\", budget.maxValuesPerDimension) ??\n validateBudgetNumber(\"maxVariantsPerRoute\", budget.maxVariantsPerRoute)\n );\n}\n\nfunction buildDimension(\n input: CacheVariantDimensionInput,\n budget: CacheVariantBudget,\n): CacheVariantDimension | CacheProofBreakerFallback {\n const name = normalizeDimensionName(input.name);\n if (name.length === 0) {\n return buildBreakerFallback(\"CP_DIMENSION_NAME_MISSING\", {\n source: input.source,\n });\n }\n if (name.length > budget.maxDimensionNameLength) {\n return buildBreakerFallback(\"CP_DIMENSION_NAME_TOO_LONG\", {\n maxLength: budget.maxDimensionNameLength,\n nameHash: redactValue(name),\n source: input.source,\n });\n }\n if (input.privacy === \"public\" && PUBLIC_UNSAFE_DIMENSION_SOURCES.has(input.source)) {\n return buildBreakerFallback(\n \"CP_UNSAFE_PUBLIC_DIMENSION\",\n {\n name,\n source: input.source,\n },\n \"privateUncacheable\",\n );\n }\n\n const values = sortedUnique(input.values);\n if (values.length === 0) {\n return buildBreakerFallback(\"CP_DIMENSION_VALUES_MISSING\", {\n name,\n source: input.source,\n });\n }\n if (values.length > budget.maxValuesPerDimension) {\n return buildBreakerFallback(\"CP_DIMENSION_VALUE_COUNT_EXCEEDED\", {\n maxValues: budget.maxValuesPerDimension,\n name,\n source: input.source,\n valueCount: values.length,\n });\n }\n for (const value of values) {\n if (value.length > budget.maxDimensionValueLength) {\n return buildBreakerFallback(\"CP_DIMENSION_VALUE_TOO_LONG\", {\n maxLength: budget.maxDimensionValueLength,\n name,\n source: input.source,\n valueHash: redactValue(value),\n });\n }\n }\n\n const valueHashes = values.map(redactValue);\n const encoded = encodeParts([input.source, input.privacy, name, valueHashes]);\n\n return {\n encoded,\n name,\n privacy: input.privacy,\n source: input.source,\n valueCount: valueHashes.length,\n valueHashes,\n };\n}\n\nfunction isCacheProofBreakerFallback(\n value: CacheVariantDimension | CacheProofBreakerFallback,\n): value is CacheProofBreakerFallback {\n return \"code\" in value;\n}\n\nfunction getDimensionBucket(\n bySource: DimensionAccumulatorBySource,\n source: CacheVariantDimensionSource,\n privacy: CacheVariantDimensionPrivacy,\n): DimensionAccumulatorByName {\n const existingByPrivacy = bySource.get(source);\n const byPrivacy = existingByPrivacy ?? new Map();\n if (!existingByPrivacy) {\n bySource.set(source, byPrivacy);\n }\n\n const existingByName = byPrivacy.get(privacy);\n const byName = existingByName ?? new Map();\n if (!existingByName) {\n byPrivacy.set(privacy, byName);\n }\n\n return byName;\n}\n\nfunction mergeDimensionInputs(\n dimensions: readonly CacheVariantDimensionInput[],\n): CacheVariantDimensionInput[] {\n const bySource: DimensionAccumulatorBySource = new Map();\n const orderedDimensions: CacheVariantDimensionAccumulator[] = [];\n\n for (const dimension of dimensions) {\n const name = normalizeDimensionName(dimension.name);\n const bucket = getDimensionBucket(bySource, dimension.source, dimension.privacy);\n const existing = bucket.get(name);\n if (existing) {\n existing.values.push(...dimension.values);\n continue;\n }\n const accumulator = {\n name,\n privacy: dimension.privacy,\n source: dimension.source,\n values: [...dimension.values],\n };\n bucket.set(name, accumulator);\n orderedDimensions.push(accumulator);\n }\n\n return orderedDimensions;\n}\n\nexport function createAppRouteCacheProofGraphScope(\n route: AppRouteCacheProofGraphScopeInput,\n): AppRouteCacheProofGraphScope {\n return {\n routeId: route.ids.route,\n pageId: route.ids.page,\n routeHandlerId: route.ids.routeHandler,\n layoutIds: [...route.ids.layouts],\n templateIds: [...route.ids.templates],\n slotIds: sortedUnique(Object.values(route.ids.slots)),\n };\n}\n\nexport function buildCacheVariant(input: BuildCacheVariantInput): BuildCacheVariantResult {\n const budgetFallback = validateBudget(input.budget);\n if (budgetFallback) {\n return {\n kind: \"breakerFallback\",\n fallback: budgetFallback,\n };\n }\n const dimensionInputs = mergeDimensionInputs(input.dimensions);\n if (dimensionInputs.length > input.budget.maxDimensionCount) {\n return {\n kind: \"breakerFallback\",\n fallback: buildBreakerFallback(\"CP_DIMENSION_COUNT_EXCEEDED\", {\n dimensionCount: dimensionInputs.length,\n maxDimensionCount: input.budget.maxDimensionCount,\n routeId: input.output.routeId,\n }),\n };\n }\n\n const dimensions: CacheVariantDimension[] = [];\n for (const dimensionInput of dimensionInputs) {\n const dimension = buildDimension(dimensionInput, input.budget);\n if (isCacheProofBreakerFallback(dimension)) {\n return {\n kind: \"breakerFallback\",\n fallback: dimension,\n };\n }\n dimensions.push(dimension);\n }\n dimensions.sort(compareDimensions);\n\n const encoded = [\n `schema:${CACHE_PROOF_MODEL_SCHEMA_VERSION}`,\n encodeOutputScope(input.output),\n ...dimensions.map((dimension) => dimension.encoded),\n ].join(\"|\");\n\n if (encoded.length > input.budget.maxEncodedLength) {\n return {\n kind: \"breakerFallback\",\n fallback: buildBreakerFallback(\"CP_ENCODED_VARIANT_TOO_LONG\", {\n encodedHash: redactValue(encoded),\n encodedLength: encoded.length,\n maxEncodedLength: input.budget.maxEncodedLength,\n routeId: input.output.routeId,\n }),\n };\n }\n\n return {\n kind: \"variant\",\n variant: {\n schemaVersion: CACHE_PROOF_MODEL_SCHEMA_VERSION,\n cacheKey: `cp${CACHE_PROOF_MODEL_SCHEMA_VERSION}:${fnv1a64(encoded)}`,\n output: input.output,\n dimensions,\n encodedLength: encoded.length,\n budget: { ...input.budget },\n },\n };\n}\n\nfunction normalizeRouteBudget(input: CacheVariantRouteBudget): CacheVariantRouteBudget {\n return {\n routeId: input.routeId,\n variantCacheKeys: sortedUnique(input.variantCacheKeys),\n };\n}\n\nfunction buildRouteVariantCeilingFallback(\n variant: CacheVariant,\n existingVariantCount: number,\n): CacheProofBreakerFallback {\n return buildBreakerFallback(\n \"CP_ROUTE_VARIANT_CEILING_EXCEEDED\",\n {\n existingVariantCount,\n maxVariantsPerRoute: variant.budget.maxVariantsPerRoute,\n routeId: variant.output.routeId,\n },\n \"privateUncacheable\",\n \"route\",\n );\n}\n\nexport function enforceCacheVariantRouteBudget(input: {\n routeBudget: CacheVariantRouteBudget | null;\n variant: CacheVariant;\n}): CacheVariantRouteBudgetAdmission {\n if (input.routeBudget && input.routeBudget.routeId !== input.variant.output.routeId) {\n return {\n kind: \"breakerFallback\",\n routeBudget: normalizeRouteBudget(input.routeBudget),\n fallback: buildBreakerFallback(\n \"CP_ROUTE_VARIANT_BUDGET_ROUTE_MISMATCH\",\n {\n budgetRouteId: input.routeBudget.routeId,\n routeId: input.variant.output.routeId,\n },\n \"privateUncacheable\",\n \"route\",\n ),\n };\n }\n\n const routeBudget = normalizeRouteBudget(\n input.routeBudget ?? {\n routeId: input.variant.output.routeId,\n variantCacheKeys: [],\n },\n );\n const existingVariantCount = routeBudget.variantCacheKeys.length;\n const variantKeyPosition = findSortedStringPosition(\n routeBudget.variantCacheKeys,\n input.variant.cacheKey,\n );\n\n if (existingVariantCount > input.variant.budget.maxVariantsPerRoute) {\n return {\n kind: \"breakerFallback\",\n routeBudget,\n fallback: buildRouteVariantCeilingFallback(input.variant, existingVariantCount),\n };\n }\n\n if (variantKeyPosition.found) {\n return {\n kind: \"variant\",\n variant: input.variant,\n routeBudget,\n didConsumeRouteVariantBudget: false,\n };\n }\n\n if (existingVariantCount >= input.variant.budget.maxVariantsPerRoute) {\n return {\n kind: \"breakerFallback\",\n routeBudget,\n fallback: buildRouteVariantCeilingFallback(input.variant, existingVariantCount),\n };\n }\n\n return {\n kind: \"variant\",\n variant: input.variant,\n routeBudget: {\n routeId: routeBudget.routeId,\n variantCacheKeys: [\n ...routeBudget.variantCacheKeys.slice(0, variantKeyPosition.index),\n input.variant.cacheKey,\n ...routeBudget.variantCacheKeys.slice(variantKeyPosition.index),\n ],\n },\n didConsumeRouteVariantBudget: true,\n };\n}\n\nexport function buildCacheVariantWithRouteBudget(\n input: BuildCacheVariantWithRouteBudgetInput,\n): BuildCacheVariantWithRouteBudgetResult {\n const variantResult = buildCacheVariant({\n budget: input.budget,\n dimensions: input.dimensions,\n output: input.output,\n });\n\n if (variantResult.kind === \"breakerFallback\") {\n return {\n kind: \"breakerFallback\",\n routeBudget: input.routeBudget ? normalizeRouteBudget(input.routeBudget) : null,\n fallback: variantResult.fallback,\n };\n }\n\n return enforceCacheVariantRouteBudget({\n routeBudget: input.routeBudget,\n variant: variantResult.variant,\n });\n}\n\nfunction boundaryOutcomesMatch(expected: BoundaryOutcome, candidate: BoundaryOutcome): boolean {\n switch (expected.kind) {\n case \"error\":\n return candidate.kind === \"error\" && (expected.digest ?? \"\") === (candidate.digest ?? \"\");\n case \"forbidden\":\n return candidate.kind === \"forbidden\";\n case \"globalError\":\n return (\n candidate.kind === \"globalError\" && (expected.digest ?? \"\") === (candidate.digest ?? \"\")\n );\n case \"notFound\":\n return candidate.kind === \"notFound\";\n case \"redirect\":\n return (\n candidate.kind === \"redirect\" &&\n expected.status === candidate.status &&\n expected.location === candidate.location\n );\n case \"success\":\n return candidate.kind === \"success\";\n case \"unauthorized\":\n return candidate.kind === \"unauthorized\";\n case \"unknown\":\n return false;\n default:\n return assertNever(expected);\n }\n}\n\nexport function buildBoundaryOutcomeCompatibility(input: {\n candidate: BoundaryOutcome;\n expected: BoundaryOutcome;\n}): BoundaryOutcomeCompatibility {\n if (input.expected.kind === \"unknown\" || input.candidate.kind === \"unknown\") {\n return {\n kind: \"incompatible\",\n expected: input.expected,\n candidate: input.candidate,\n fallback: buildBreakerFallback(\"CP_BOUNDARY_OUTCOME_UNKNOWN\", {\n candidateKind: input.candidate.kind,\n expectedKind: input.expected.kind,\n }),\n };\n }\n\n if (boundaryOutcomesMatch(input.expected, input.candidate)) {\n return {\n kind: \"compatible\",\n outcome: input.candidate,\n reason: \"CP_BOUNDARY_OUTCOME_MATCH\",\n };\n }\n\n return {\n kind: \"incompatible\",\n expected: input.expected,\n candidate: input.candidate,\n fallback: buildBreakerFallback(\"CP_BOUNDARY_OUTCOME_MISMATCH\", {\n candidateKind: input.candidate.kind,\n expectedKind: input.expected.kind,\n }),\n };\n}\n\nfunction requestApiStatusRank(status: RenderRequestApiStatus): number {\n switch (status) {\n case \"notObserved\":\n return 0;\n case \"unknown\":\n return 1;\n case \"observed\":\n return 2;\n default:\n return assertNever(status);\n }\n}\n\nfunction normalizeRequestApiObservations(\n observations: readonly RenderRequestApiObservation[],\n): RenderRequestApiObservation[] {\n const byKind = new Map<RenderRequestApiKind, RenderRequestApiStatus>();\n for (const observation of observations) {\n const current = byKind.get(observation.kind);\n if (\n current === undefined ||\n requestApiStatusRank(observation.status) > requestApiStatusRank(current)\n ) {\n byKind.set(observation.kind, observation.status);\n }\n }\n\n return [...byKind.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([kind, status]) => ({ kind, status }));\n}\n\nfunction cacheProofDowngradeTargetRank(target: CacheProofDowngradeTarget): number {\n switch (target) {\n case \"public\":\n return 0;\n case \"publicVariant\":\n return 1;\n case \"private\":\n return 2;\n case \"privateUncacheable\":\n return 3;\n case \"freshRender\":\n return 4;\n default:\n return assertNever(target);\n }\n}\n\nfunction maxCacheProofDowngradeTarget(\n current: CacheProofDowngradeTarget,\n candidate: CacheProofDowngradeTarget,\n): CacheProofDowngradeTarget {\n return cacheProofDowngradeTargetRank(candidate) > cacheProofDowngradeTargetRank(current)\n ? candidate\n : current;\n}\n\nfunction createDowngradeFallback(\n target: CacheProofDowngradeTarget,\n reasons: readonly CacheProofDowngradeReason[],\n): CacheProofBreakerFallback | null {\n switch (target) {\n case \"public\":\n case \"publicVariant\":\n case \"private\":\n return null;\n case \"privateUncacheable\":\n return buildBreakerFallback(\n \"CP_PRIVATE_DYNAMIC_DOWNGRADE\",\n {\n reasonCodes: reasons.map((reason) => reason.code),\n target,\n },\n \"privateUncacheable\",\n );\n case \"freshRender\":\n return buildBreakerFallback(\"CP_PRIVATE_DYNAMIC_DOWNGRADE\", {\n reasonCodes: reasons.map((reason) => reason.code),\n target,\n });\n default:\n return assertNever(target);\n }\n}\n\nfunction classifyObservedRequestApiDowngrade(\n kind: RenderRequestApiKind,\n): CacheProofDowngradeReason {\n switch (kind) {\n case \"connection\":\n return {\n code: \"CP_DOWNGRADE_DYNAMIC_REQUEST_API\",\n requestApi: \"connection\",\n target: \"freshRender\",\n };\n case \"cookies\":\n return {\n code: \"CP_DOWNGRADE_PRIVATE_REQUEST_API\",\n requestApi: \"cookies\",\n target: \"private\",\n };\n case \"draftMode\":\n return {\n code: \"CP_DOWNGRADE_DRAFT_MODE\",\n requestApi: \"draftMode\",\n target: \"privateUncacheable\",\n };\n case \"headers\":\n return {\n code: \"CP_DOWNGRADE_PRIVATE_REQUEST_API\",\n requestApi: \"headers\",\n target: \"private\",\n };\n case \"params\":\n return {\n code: \"CP_DOWNGRADE_PUBLIC_REQUEST_API\",\n requestApi: \"params\",\n target: \"publicVariant\",\n };\n case \"searchParams\":\n return {\n code: \"CP_DOWNGRADE_PUBLIC_REQUEST_API\",\n requestApi: \"searchParams\",\n target: \"publicVariant\",\n };\n default:\n return assertNever(kind);\n }\n}\n\nexport function classifyCacheVariantDimensionDowngrade(\n input: ClassifyCacheVariantDimensionDowngradeInput,\n): CacheProofDowngradeReason | null {\n switch (input.source) {\n case \"auth\":\n return {\n code: \"CP_DOWNGRADE_PRIVATE_DIMENSION\",\n inputClass: \"auth\",\n source: \"auth\",\n target: \"private\",\n };\n case \"cookie\":\n return {\n code: \"CP_DOWNGRADE_PRIVATE_DIMENSION\",\n inputClass: \"private\",\n source: \"cookie\",\n target: \"private\",\n };\n case \"draft-mode\":\n return {\n code: \"CP_DOWNGRADE_PRIVATE_DIMENSION\",\n inputClass: \"draft\",\n source: \"draft-mode\",\n target: \"privateUncacheable\",\n };\n case \"header\":\n return {\n code: \"CP_DOWNGRADE_PRIVATE_DIMENSION\",\n inputClass: \"private\",\n source: \"header\",\n target: \"private\",\n };\n case \"session\":\n return {\n code: \"CP_DOWNGRADE_PRIVATE_DIMENSION\",\n inputClass: \"session\",\n source: \"session\",\n target: \"private\",\n };\n case \"custom\":\n case \"interception\":\n case \"mounted-slots\":\n case \"params\":\n case \"route\":\n case \"search\":\n return null;\n default:\n return assertNever(input.source);\n }\n}\n\nexport function classifyRenderObservationDowngrade(\n input: ClassifyRenderObservationDowngradeInput,\n): CacheProofDowngradeClassification {\n const reasons: CacheProofDowngradeReason[] = [];\n let target: CacheProofDowngradeTarget = \"public\";\n\n switch (input.cacheability) {\n case \"public\":\n break;\n case \"private\": {\n const reason = {\n code: \"CP_DOWNGRADE_CACHEABILITY_PRIVATE\",\n target: \"private\",\n } satisfies CacheProofDowngradeReason;\n reasons.push(reason);\n target = maxCacheProofDowngradeTarget(target, reason.target);\n break;\n }\n case \"uncacheable\": {\n const reason = {\n code: \"CP_DOWNGRADE_CACHEABILITY_UNCACHEABLE\",\n target: \"privateUncacheable\",\n } satisfies CacheProofDowngradeReason;\n reasons.push(reason);\n target = maxCacheProofDowngradeTarget(target, reason.target);\n break;\n }\n case \"unknown\": {\n const reason = {\n code: \"CP_DOWNGRADE_CACHEABILITY_UNKNOWN\",\n target: \"freshRender\",\n } satisfies CacheProofDowngradeReason;\n reasons.push(reason);\n target = maxCacheProofDowngradeTarget(target, reason.target);\n break;\n }\n default:\n assertNever(input.cacheability);\n }\n\n if (input.completeness !== \"complete\") {\n const reason = {\n code: \"CP_DOWNGRADE_INCOMPLETE_OBSERVATION\",\n completeness: input.completeness,\n target: \"freshRender\",\n } satisfies CacheProofDowngradeReason;\n reasons.push(reason);\n target = maxCacheProofDowngradeTarget(target, reason.target);\n }\n\n if (input.dynamicFetches.length > 0) {\n const reason = {\n code: \"CP_DOWNGRADE_DYNAMIC_FETCH\",\n dynamicFetchCount: input.dynamicFetches.length,\n target: \"freshRender\",\n } satisfies CacheProofDowngradeReason;\n reasons.push(reason);\n target = maxCacheProofDowngradeTarget(target, reason.target);\n }\n\n const requestApis = normalizeRequestApiObservations(input.requestApis);\n for (const requestApi of requestApis) {\n if (requestApi.status === \"notObserved\") continue;\n const reason =\n requestApi.status === \"unknown\"\n ? ({\n code: \"CP_DOWNGRADE_UNKNOWN_REQUEST_API\",\n requestApi: requestApi.kind,\n target: \"freshRender\",\n } satisfies CacheProofDowngradeReason)\n : classifyObservedRequestApiDowngrade(requestApi.kind);\n reasons.push(reason);\n target = maxCacheProofDowngradeTarget(target, reason.target);\n }\n\n return {\n target,\n reasons,\n fallback: createDowngradeFallback(target, reasons),\n isPublicCacheCandidate: target === \"public\" || target === \"publicVariant\",\n };\n}\n\nexport function buildRenderRequestApiObservations(\n input: BuildRenderRequestApiObservationsInput,\n): RenderRequestApiObservation[] {\n const observedKinds = new Set(input.observed);\n const absentStatus: RenderRequestApiStatus =\n input.completeness === \"complete\" ? \"notObserved\" : \"unknown\";\n\n return ALL_RENDER_REQUEST_API_KINDS.map((kind) => ({\n kind,\n status: observedKinds.has(kind) ? \"observed\" : absentStatus,\n }));\n}\n\nexport function buildRenderObservation(input: BuildRenderObservationInput): RenderObservation {\n const requestApis = normalizeRequestApiObservations(input.requestApis);\n const dynamicFetches = sortedUniqueRedacted(input.dynamicFetches);\n\n return {\n schemaVersion: CACHE_PROOF_MODEL_SCHEMA_VERSION,\n output: input.output,\n completeness: input.completeness,\n boundaryOutcome: input.boundaryOutcome,\n requestApis,\n dynamicFetches,\n cacheTags: sortedUnique(input.cacheTags),\n pathTags: sortedUnique(input.pathTags),\n cacheability: input.cacheability,\n downgrade: classifyRenderObservationDowngrade({\n cacheability: input.cacheability,\n completeness: input.completeness,\n dynamicFetches,\n requestApis,\n }),\n };\n}\n\nexport function hasCompleteNegativeRequestApiProof(\n observation: RenderObservation,\n requiredApis: readonly RenderRequestApiKind[],\n): boolean {\n if (observation.completeness !== \"complete\") return false;\n\n const statuses = new Map<RenderRequestApiKind, RenderRequestApiStatus>();\n for (const requestApi of normalizeRequestApiObservations(observation.requestApis)) {\n statuses.set(requestApi.kind, requestApi.status);\n }\n\n for (const api of requiredApis) {\n if (statuses.get(api) !== \"notObserved\") return false;\n }\n return true;\n}\n\nfunction isStaticLayoutOutputScope(\n output: CacheProofOutputScope,\n): output is StaticLayoutCacheProofOutputScope {\n return output.kind === \"layout\";\n}\n\nfunction rejectStaticLayoutReuseProof(\n code: CacheProofRejectionCode,\n fields: CacheProofTraceFields,\n mode: CacheProofBreakerFallbackMode = \"renderFresh\",\n): BuildStaticLayoutReuseProofResult {\n return {\n kind: \"rejected\",\n fallback: buildBreakerFallback(code, fields, mode),\n };\n}\n\nfunction getRequestApiStatus(\n observations: readonly RenderRequestApiObservation[],\n kind: RenderRequestApiKind,\n): RenderRequestApiStatus | \"missing\" {\n let status: RenderRequestApiStatus | null = null;\n\n for (const requestApi of observations) {\n if (requestApi.kind !== kind) continue;\n if (status === null || requestApiStatusRank(requestApi.status) > requestApiStatusRank(status)) {\n status = requestApi.status;\n }\n }\n\n return status ?? \"missing\";\n}\n\nfunction createStaticLayoutDowngradeFallback(\n downgrade: CacheProofDowngradeClassification,\n): CacheProofBreakerFallback {\n const mode: CacheProofBreakerFallbackMode =\n downgrade.target === \"privateUncacheable\" ? \"privateUncacheable\" : \"renderFresh\";\n return buildBreakerFallback(\n \"CP_STATIC_LAYOUT_PRIVATE_DYNAMIC_DOWNGRADE\",\n {\n reasonCodes: downgrade.reasons.map((reason) => reason.code),\n target: downgrade.target,\n },\n mode,\n );\n}\n\nfunction outputFieldMismatch(\n candidate: StaticLayoutCacheProofOutputScope,\n observation: StaticLayoutCacheProofOutputScope,\n): \"layoutId\" | \"rootBoundaryId\" | \"routeId\" | null {\n if (candidate.layoutId !== observation.layoutId) return \"layoutId\";\n if (candidate.rootBoundaryId !== observation.rootBoundaryId) return \"rootBoundaryId\";\n if (candidate.routeId !== observation.routeId) return \"routeId\";\n return null;\n}\n\nexport function buildStaticLayoutReuseProof(\n input: BuildStaticLayoutReuseProofInput,\n): BuildStaticLayoutReuseProofResult {\n if (!isStaticLayoutOutputScope(input.currentOutput)) {\n return rejectStaticLayoutReuseProof(\"CP_STATIC_LAYOUT_CURRENT_OUTPUT_KIND\", {\n currentOutputKind: input.currentOutput.kind,\n });\n }\n\n if (!isStaticLayoutOutputScope(input.candidateVariant.output)) {\n return rejectStaticLayoutReuseProof(\"CP_STATIC_LAYOUT_CANDIDATE_OUTPUT_KIND\", {\n candidateOutputKind: input.candidateVariant.output.kind,\n });\n }\n\n if (!isStaticLayoutOutputScope(input.candidateObservation.output)) {\n return rejectStaticLayoutReuseProof(\"CP_STATIC_LAYOUT_OBSERVATION_OUTPUT_KIND\", {\n observationOutputKind: input.candidateObservation.output.kind,\n });\n }\n\n const currentOutput = input.currentOutput;\n const candidateOutput = input.candidateVariant.output;\n const observationOutput = input.candidateObservation.output;\n const requestApis = normalizeRequestApiObservations(input.candidateObservation.requestApis);\n const candidateObservation = {\n ...input.candidateObservation,\n requestApis,\n downgrade: classifyRenderObservationDowngrade({\n cacheability: input.candidateObservation.cacheability,\n completeness: input.candidateObservation.completeness,\n dynamicFetches: input.candidateObservation.dynamicFetches,\n requestApis,\n }),\n } satisfies RenderObservation;\n const observedOutputMismatch = outputFieldMismatch(candidateOutput, observationOutput);\n if (observedOutputMismatch) {\n return rejectStaticLayoutReuseProof(\"CP_STATIC_LAYOUT_OBSERVATION_OUTPUT_MISMATCH\", {\n candidateLayoutId: candidateOutput.layoutId,\n candidateRootBoundaryId: candidateOutput.rootBoundaryId,\n candidateRouteId: candidateOutput.routeId,\n field: observedOutputMismatch,\n observationLayoutId: observationOutput.layoutId,\n observationRootBoundaryId: observationOutput.rootBoundaryId,\n observationRouteId: observationOutput.routeId,\n });\n }\n\n if (currentOutput.layoutId !== candidateOutput.layoutId) {\n return rejectStaticLayoutReuseProof(\"CP_STATIC_LAYOUT_ID_MISMATCH\", {\n candidateLayoutId: candidateOutput.layoutId,\n currentLayoutId: currentOutput.layoutId,\n });\n }\n\n if (currentOutput.rootBoundaryId === null || candidateOutput.rootBoundaryId === null) {\n return rejectStaticLayoutReuseProof(\"CP_STATIC_LAYOUT_ROOT_BOUNDARY_UNKNOWN\", {\n candidateRootBoundaryId: candidateOutput.rootBoundaryId,\n currentRootBoundaryId: currentOutput.rootBoundaryId,\n });\n }\n\n if (currentOutput.rootBoundaryId !== candidateOutput.rootBoundaryId) {\n return rejectStaticLayoutReuseProof(\"CP_STATIC_LAYOUT_ROOT_BOUNDARY_MISMATCH\", {\n candidateRootBoundaryId: candidateOutput.rootBoundaryId,\n currentRootBoundaryId: currentOutput.rootBoundaryId,\n });\n }\n\n const boundaryCompatibility = buildBoundaryOutcomeCompatibility({\n candidate: candidateObservation.boundaryOutcome,\n expected: { kind: \"success\" },\n });\n if (boundaryCompatibility.kind === \"incompatible\") {\n return {\n kind: \"rejected\",\n fallback: boundaryCompatibility.fallback,\n };\n }\n\n if (input.candidateVariant.dimensions.length > 0) {\n return rejectStaticLayoutReuseProof(\"CP_STATIC_LAYOUT_VARIANT_DIMENSION_UNPROVEN\", {\n dimensionCount: input.candidateVariant.dimensions.length,\n sources: sortedUnique(input.candidateVariant.dimensions.map((dimension) => dimension.source)),\n });\n }\n\n if (!candidateObservation.downgrade.isPublicCacheCandidate) {\n return {\n kind: \"rejected\",\n fallback: createStaticLayoutDowngradeFallback(candidateObservation.downgrade),\n };\n }\n\n // The loop can use the shared readonly registry; the proof stores a detached evidence copy.\n const requiredNegativeRequestApis = ALL_RENDER_REQUEST_API_KINDS;\n for (const api of requiredNegativeRequestApis) {\n const status = getRequestApiStatus(candidateObservation.requestApis, api);\n if (status === \"notObserved\") continue;\n\n return rejectStaticLayoutReuseProof(\n status === \"missing\"\n ? \"CP_STATIC_LAYOUT_REQUEST_API_UNKNOWN\"\n : \"CP_STATIC_LAYOUT_REQUEST_API_OBSERVED\",\n {\n requestApi: api,\n status,\n },\n );\n }\n\n return {\n kind: \"proof\",\n proof: {\n authorizesRuntimeReuse: true,\n candidateOutput,\n code: \"CP_STATIC_LAYOUT_REUSE_PROVEN\",\n currentOutput,\n fields: {\n candidateRouteId: candidateOutput.routeId,\n currentRouteId: currentOutput.routeId,\n layoutId: currentOutput.layoutId,\n rootBoundaryId: currentOutput.rootBoundaryId,\n },\n observation: candidateObservation,\n requiredNegativeRequestApis: [...requiredNegativeRequestApis],\n reuseClass: \"static-layout\",\n variant: input.candidateVariant,\n },\n };\n}\n\nfunction createCacheProofHotPathMetric(\n outcome: CacheProofHotPathMetric[\"outcome\"],\n code: CacheProofTraceCode,\n fields: CacheProofTraceFields,\n): CacheProofHotPathMetric {\n return {\n name: \"vinext.cache.static_layout_artifact_reuse\",\n outcome,\n code,\n fields,\n };\n}\n\nfunction createStaticLayoutArtifactReuseFallback(\n fallback: CacheProofBreakerFallback,\n): StaticLayoutArtifactReuseDecision {\n return {\n kind: \"fallback\",\n canReuse: false,\n fallback,\n metric: createCacheProofHotPathMetric(\"fallback\", fallback.code, fallback.fields),\n };\n}\n\nexport function createStaticLayoutArtifactReuseDecision(\n input: CreateStaticLayoutArtifactReuseDecisionInput,\n): StaticLayoutArtifactReuseDecision {\n if (input.candidateVariant.kind === \"breakerFallback\") {\n return createStaticLayoutArtifactReuseFallback(input.candidateVariant.fallback);\n }\n\n const artifactCompatibility = evaluateArtifactCompatibility(\n input.currentArtifactCompatibility,\n input.candidateArtifactCompatibility,\n { compatibilityMap: input.compatibilityMap },\n );\n if (artifactCompatibility.kind === \"unknown\") {\n return createStaticLayoutArtifactReuseFallback(\n buildBreakerFallback(\"CP_ARTIFACT_COMPATIBILITY_UNKNOWN\", {\n compatibilityFallback: artifactCompatibility.fallback,\n reason: artifactCompatibility.reason,\n }),\n );\n }\n if (artifactCompatibility.kind === \"incompatible\") {\n return createStaticLayoutArtifactReuseFallback(\n buildBreakerFallback(\"CP_ARTIFACT_COMPATIBILITY_INCOMPATIBLE\", {\n compatibilityFallback: artifactCompatibility.fallback,\n reason: artifactCompatibility.reason,\n }),\n );\n }\n\n const proof = buildStaticLayoutReuseProof({\n candidateObservation: input.candidateObservation,\n candidateVariant: input.candidateVariant.variant,\n currentOutput: input.currentOutput,\n });\n if (proof.kind === \"rejected\") {\n return createStaticLayoutArtifactReuseFallback(proof.fallback);\n }\n\n return {\n kind: \"reuse\",\n canReuse: true,\n proof: {\n ...proof.proof,\n candidateArtifactCompatibility: { ...input.candidateArtifactCompatibility },\n },\n metric: createCacheProofHotPathMetric(\"reuse\", proof.proof.code, proof.proof.fields),\n };\n}\n\nexport function createCacheEntryReuseProof(\n decision: StaticLayoutArtifactReuseDecision | null,\n): CacheEntryReuseProof {\n if (decision === null) {\n return {\n kind: \"runtime-cache-entry\",\n decision: null,\n };\n }\n\n switch (decision.kind) {\n case \"reuse\":\n return {\n kind: \"runtime-cache-entry\",\n decision: {\n canReuse: true,\n code: decision.proof.code,\n kind: \"reuse\",\n reuseClass: decision.proof.reuseClass,\n },\n };\n case \"fallback\":\n return {\n kind: \"runtime-cache-entry\",\n decision: {\n canReuse: false,\n code: decision.fallback.code,\n kind: \"reject\",\n mode: decision.fallback.mode,\n scope: decision.fallback.scope,\n },\n };\n default:\n return assertNever(decision);\n }\n}\n\nexport function createDisabledCacheProofDecision(\n input: CreateDisabledCacheProofDecisionInput,\n): DisabledCacheProofDecision {\n return {\n kind: \"disabled\",\n canReuse: false,\n variant: input.variant,\n observation: input.observation,\n ...(input.staticLayoutProof ? { staticLayoutProof: input.staticLayoutProof } : {}),\n fallback: buildBreakerFallback(\"CP_MODEL_DISABLED\"),\n };\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-reuse-manifest.js","names":[],"sources":["../../src/server/client-reuse-manifest.ts"],"sourcesContent":["import {\n parseArtifactCompatibilityEnvelope,\n type ArtifactCompatibilityEnvelope,\n} from \"./artifact-compatibility.js\";\nimport { AppElementsWire } from \"./app-elements-wire.js\";\nimport { fnv1a64 } from \"../utils/hash.js\";\nimport { isUnknownRecord } from \"../utils/record.js\";\n\nexport const CLIENT_REUSE_MANIFEST_SCHEMA_VERSION = 1;\nexport type ClientReuseManifestSchemaVersion = 1;\n\nexport const CLIENT_REUSE_MANIFEST_HASH_ALGORITHM = \"fnv1a64\";\nexport type ClientReuseManifestHashAlgorithm = typeof CLIENT_REUSE_MANIFEST_HASH_ALGORITHM;\n\ntype ClientReuseManifestLimits = Readonly<{\n maxEntryCount: number;\n maxEntryIdLength: number;\n maxManifestBytes: number;\n maxPayloadHashLength: number;\n maxVariantCacheKeyLength: number;\n}>;\n\nexport const DEFAULT_CLIENT_REUSE_MANIFEST_LIMITS = {\n maxEntryCount: 64,\n maxEntryIdLength: 512,\n maxManifestBytes: 4096,\n maxPayloadHashLength: 16,\n maxVariantCacheKeyLength: 256,\n} satisfies ClientReuseManifestLimits;\n\nexport type ClientReuseManifestEntryKind = \"layout\" | \"page\" | \"route\" | \"slot\" | \"template\";\ntype ClientReuseManifestEntryPrivacy = \"private\" | \"public\";\n\nexport type ClientReuseManifestReplayWindow = Readonly<{\n validFromVisibleCommitVersion: number;\n validUntilVisibleCommitVersion: number;\n}>;\n\nexport type ClientReuseManifestEntry = Readonly<{\n artifactCompatibility: ArtifactCompatibilityEnvelope;\n id: string;\n kind: ClientReuseManifestEntryKind;\n payloadHash: string;\n privacy: \"public\";\n variantCacheKey: string;\n}>;\n\ntype ClientReuseManifestWireEntry = Readonly<{\n artifactCompatibility: ArtifactCompatibilityEnvelope;\n id: string;\n payloadHash: string;\n privacy: ClientReuseManifestEntryPrivacy;\n variantCacheKey: string;\n}>;\n\nexport type ClientReuseManifest = Readonly<{\n entries: readonly ClientReuseManifestEntry[];\n hashAlgorithm: ClientReuseManifestHashAlgorithm;\n replayWindow: ClientReuseManifestReplayWindow;\n schemaVersion: ClientReuseManifestSchemaVersion;\n visibleCommitVersion: number;\n}>;\n\n// Internal: createClientReuseManifest returns wire shape while parsing decides\n// which client-declared entries can participate in future reuse.\ntype ClientReuseManifestWire = Readonly<{\n entries: readonly ClientReuseManifestWireEntry[];\n hashAlgorithm: ClientReuseManifestHashAlgorithm;\n replayWindow: ClientReuseManifestReplayWindow;\n schemaVersion: ClientReuseManifestSchemaVersion;\n visibleCommitVersion: number;\n}>;\n\ntype CreateClientReuseManifestInput = Readonly<{\n entries: readonly ClientReuseManifestWireEntry[];\n replayWindow?: ClientReuseManifestReplayWindow;\n visibleCommitVersion: number;\n}>;\n\nexport type ClientReuseManifestRejectionCode =\n | \"SKIP_CACHE_ARTIFACT_COMPATIBILITY_INCOMPATIBLE\"\n | \"SKIP_CACHE_ARTIFACT_COMPATIBILITY_UNKNOWN\"\n | \"SKIP_CACHE_ARTIFACT_PROOF_MISMATCH\"\n | \"SKIP_CACHE_ENTRY_ID_MISMATCH\"\n | \"SKIP_CACHE_INVALIDATED\"\n | \"SKIP_CACHE_INVALIDATION_UNKNOWN\"\n | \"SKIP_CACHE_PAYLOAD_HASH_MISMATCH\"\n | \"SKIP_CACHE_PAYLOAD_HASH_MISSING\"\n | \"SKIP_CACHE_PROOF_MISSING\"\n | \"SKIP_CACHE_PROOF_REJECTED\"\n | \"SKIP_CACHE_REUSE_CLASS_UNSUPPORTED\"\n | \"SKIP_CACHE_VARIANT_MISMATCH\"\n | \"SKIP_ARTIFACT_COMPATIBILITY_INVALID\"\n | \"SKIP_ENTRY_COUNT_EXCEEDED\"\n | \"SKIP_ENTRY_HASH_INVALID\"\n | \"SKIP_ENTRY_ID_INVALID\"\n | \"SKIP_ENTRY_ID_TOO_LONG\"\n | \"SKIP_ENTRY_MALFORMED\"\n | \"SKIP_ENTRY_ORDER_NON_CANONICAL\"\n | \"SKIP_HASH_ALGORITHM_UNSUPPORTED\"\n | \"SKIP_MANIFEST_MALFORMED\"\n | \"SKIP_MANIFEST_SCHEMA_UNSUPPORTED\"\n | \"SKIP_MANIFEST_TOO_LARGE\"\n | \"SKIP_PRIVATE_ENTRY\"\n | \"SKIP_REPLAY_WINDOW_INVALID\"\n | \"SKIP_UNKNOWN_ENTRY\"\n | \"SKIP_VARIANT_CACHE_KEY_INVALID\"\n | \"SKIP_VARIANT_CACHE_KEY_TOO_LONG\"\n | \"SKIP_VISIBLE_COMMIT_VERSION_INVALID\"\n | \"SKIP_VISIBLE_COMMIT_VERSION_MISMATCH\";\n\nexport type ClientReuseManifestDispositionCode = \"SKIP_MODEL_DISABLED\";\n\nexport type ClientReuseManifestTraceFieldValue =\n | string\n | number\n | boolean\n | null\n | readonly string[];\n\nexport type ClientReuseManifestTraceFields = Readonly<\n Record<string, ClientReuseManifestTraceFieldValue>\n>;\n\nexport type ClientReuseManifestRejection = Readonly<{\n code: ClientReuseManifestRejectionCode;\n fields: ClientReuseManifestTraceFields;\n}>;\n\nexport type ClientReuseManifestEntryRejection = ClientReuseManifestRejection &\n Readonly<{\n entryId: string | null;\n }>;\n\nexport type ClientReuseManifestSkipDisposition = Readonly<{\n code: ClientReuseManifestDispositionCode;\n enabled: false;\n mode: \"renderAndSend\";\n}>;\n\nexport type ClientReuseManifestParseResult =\n | Readonly<{ kind: \"absent\" }>\n | Readonly<{ kind: \"rejected\"; rejection: ClientReuseManifestRejection }>\n | Readonly<{\n entryRejections: readonly ClientReuseManifestEntryRejection[];\n kind: \"parsed\";\n manifest: ClientReuseManifest;\n skipDisposition: ClientReuseManifestSkipDisposition;\n }>;\n\ntype ParseClientReuseManifestOptions = Readonly<{\n currentVisibleCommitVersion?: number;\n limits?: ClientReuseManifestLimits;\n}>;\n\nconst HASH_DIGEST_PATTERN = /^[0-9a-z]+$/;\nconst textEncoder = new TextEncoder();\n\ntype ParseReplayWindowResult =\n | Readonly<{ kind: \"parsed\"; replayWindow: ClientReuseManifestReplayWindow }>\n | Readonly<{ kind: \"rejected\"; rejection: ClientReuseManifestRejection }>;\n\nfunction createRejection(\n code: ClientReuseManifestRejectionCode,\n fields: ClientReuseManifestTraceFields = {},\n): ClientReuseManifestRejection {\n return { code, fields };\n}\n\nfunction rejectManifest(\n code: ClientReuseManifestRejectionCode,\n fields: ClientReuseManifestTraceFields = {},\n): ClientReuseManifestParseResult {\n return { kind: \"rejected\", rejection: createRejection(code, fields) };\n}\n\nfunction rejectEntry(\n code: ClientReuseManifestRejectionCode,\n entryId: string | null,\n fields: ClientReuseManifestTraceFields = {},\n): ClientReuseManifestEntryRejection {\n return { code, entryId, fields };\n}\n\nfunction compareManifestEntries(\n left: Pick<ClientReuseManifestWireEntry, \"id\">,\n right: Pick<ClientReuseManifestWireEntry, \"id\">,\n): number {\n if (left.id < right.id) return -1;\n if (left.id > right.id) return 1;\n return 0;\n}\n\nfunction createCanonicalWireEntries(\n entries: readonly ClientReuseManifestWireEntry[],\n): ClientReuseManifestWireEntry[] {\n const entriesById = new Map<string, ClientReuseManifestWireEntry>();\n for (const entry of entries) {\n if (!entriesById.has(entry.id)) {\n entriesById.set(entry.id, entry);\n }\n }\n\n return Array.from(entriesById.values()).sort(compareManifestEntries);\n}\n\n// The manifest byte budget is enforced once at the untrusted header boundary.\nfunction countUtf8Bytes(input: string): number {\n return textEncoder.encode(input).length;\n}\n\nfunction isVisibleCommitVersion(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0;\n}\n\nfunction parseReplayWindow(value: unknown, visibleCommitVersion: number): ParseReplayWindowResult {\n if (!isUnknownRecord(value)) {\n return {\n kind: \"rejected\",\n rejection: createRejection(\"SKIP_REPLAY_WINDOW_INVALID\", { field: \"replayWindow\" }),\n };\n }\n\n const validFromVisibleCommitVersion = value.validFromVisibleCommitVersion;\n const validUntilVisibleCommitVersion = value.validUntilVisibleCommitVersion;\n if (\n !isVisibleCommitVersion(validFromVisibleCommitVersion) ||\n !isVisibleCommitVersion(validUntilVisibleCommitVersion) ||\n validFromVisibleCommitVersion > validUntilVisibleCommitVersion ||\n visibleCommitVersion < validFromVisibleCommitVersion ||\n visibleCommitVersion > validUntilVisibleCommitVersion\n ) {\n return {\n kind: \"rejected\",\n rejection: createRejection(\"SKIP_REPLAY_WINDOW_INVALID\", {\n validFromVisibleCommitVersion: isVisibleCommitVersion(validFromVisibleCommitVersion)\n ? validFromVisibleCommitVersion\n : null,\n validUntilVisibleCommitVersion: isVisibleCommitVersion(validUntilVisibleCommitVersion)\n ? validUntilVisibleCommitVersion\n : null,\n visibleCommitVersion,\n }),\n };\n }\n\n return {\n kind: \"parsed\",\n replayWindow: {\n validFromVisibleCommitVersion,\n validUntilVisibleCommitVersion,\n },\n };\n}\n\nfunction currentCommitVersionMatchesReplayWindow(\n currentVisibleCommitVersion: number | undefined,\n replayWindow: ClientReuseManifestReplayWindow,\n): boolean {\n if (currentVisibleCommitVersion === undefined) return true;\n return (\n currentVisibleCommitVersion >= replayWindow.validFromVisibleCommitVersion &&\n currentVisibleCommitVersion <= replayWindow.validUntilVisibleCommitVersion\n );\n}\n\nfunction parseEntryKind(id: string): ClientReuseManifestEntryKind | null {\n const parsed = AppElementsWire.parseElementKey(id);\n if (parsed === null) return null;\n return parsed.kind;\n}\n\nfunction isValidPayloadHash(value: unknown, limits: ClientReuseManifestLimits): value is string {\n return (\n typeof value === \"string\" &&\n value.length > 0 &&\n value.length <= limits.maxPayloadHashLength &&\n HASH_DIGEST_PATTERN.test(value)\n );\n}\n\nfunction parseManifestEntry(\n value: unknown,\n limits: ClientReuseManifestLimits,\n index: number,\n): ClientReuseManifestEntry | ClientReuseManifestEntryRejection {\n if (!isUnknownRecord(value)) {\n return rejectEntry(\"SKIP_ENTRY_MALFORMED\", null, { index });\n }\n\n const id = value.id;\n if (typeof id !== \"string\" || id.length === 0) {\n return rejectEntry(\"SKIP_ENTRY_ID_INVALID\", null, { index });\n }\n if (id.length > limits.maxEntryIdLength) {\n return rejectEntry(\"SKIP_ENTRY_ID_TOO_LONG\", id, {\n idHash: createClientReusePayloadHash(id),\n maxEntryIdLength: limits.maxEntryIdLength,\n });\n }\n\n const kind = parseEntryKind(id);\n if (kind === null) {\n return rejectEntry(\"SKIP_UNKNOWN_ENTRY\", id, { idHash: createClientReusePayloadHash(id) });\n }\n\n const privacy = value.privacy;\n if (privacy === \"private\") {\n return rejectEntry(\"SKIP_PRIVATE_ENTRY\", id, { privacy });\n }\n if (privacy !== \"public\") {\n return rejectEntry(\"SKIP_ENTRY_MALFORMED\", id, { field: \"privacy\" });\n }\n\n const payloadHash = value.payloadHash;\n if (!isValidPayloadHash(payloadHash, limits)) {\n return rejectEntry(\"SKIP_ENTRY_HASH_INVALID\", id, {\n maxPayloadHashLength: limits.maxPayloadHashLength,\n });\n }\n\n const variantCacheKey = value.variantCacheKey;\n if (typeof variantCacheKey !== \"string\" || variantCacheKey.length === 0) {\n return rejectEntry(\"SKIP_VARIANT_CACHE_KEY_INVALID\", id, { field: \"variantCacheKey\" });\n }\n if (variantCacheKey.length > limits.maxVariantCacheKeyLength) {\n return rejectEntry(\"SKIP_VARIANT_CACHE_KEY_TOO_LONG\", id, {\n maxVariantCacheKeyLength: limits.maxVariantCacheKeyLength,\n variantCacheKeyHash: createClientReusePayloadHash(variantCacheKey),\n });\n }\n\n const artifactCompatibility = parseArtifactCompatibilityEnvelope(value.artifactCompatibility);\n if (artifactCompatibility === null) {\n return rejectEntry(\"SKIP_ARTIFACT_COMPATIBILITY_INVALID\", id, {\n field: \"artifactCompatibility\",\n });\n }\n\n return {\n artifactCompatibility,\n id,\n kind,\n payloadHash,\n privacy,\n variantCacheKey,\n };\n}\n\nexport function createClientReusePayloadHash(input: string): string {\n return fnv1a64(input);\n}\n\nexport function createClientReuseManifest(\n input: CreateClientReuseManifestInput,\n): ClientReuseManifestWire {\n const replayWindow =\n input.replayWindow ??\n ({\n validFromVisibleCommitVersion: input.visibleCommitVersion,\n validUntilVisibleCommitVersion: input.visibleCommitVersion,\n } satisfies ClientReuseManifestReplayWindow);\n\n return {\n entries: createCanonicalWireEntries(input.entries),\n hashAlgorithm: CLIENT_REUSE_MANIFEST_HASH_ALGORITHM,\n replayWindow,\n schemaVersion: CLIENT_REUSE_MANIFEST_SCHEMA_VERSION,\n visibleCommitVersion: input.visibleCommitVersion,\n };\n}\n\nexport function serializeClientReuseManifest(input: CreateClientReuseManifestInput): string {\n return JSON.stringify(createClientReuseManifest(input));\n}\n\nexport function parseClientReuseManifestHeader(\n rawHeader: string | null | undefined,\n options: ParseClientReuseManifestOptions = {},\n): ClientReuseManifestParseResult {\n const header = rawHeader?.trim();\n if (!header) return { kind: \"absent\" };\n\n const limits = options.limits ?? DEFAULT_CLIENT_REUSE_MANIFEST_LIMITS;\n const manifestBytes = countUtf8Bytes(header);\n if (manifestBytes > limits.maxManifestBytes) {\n return rejectManifest(\"SKIP_MANIFEST_TOO_LARGE\", {\n manifestBytes,\n maxManifestBytes: limits.maxManifestBytes,\n });\n }\n\n let decoded: unknown;\n try {\n decoded = JSON.parse(header);\n } catch {\n return rejectManifest(\"SKIP_MANIFEST_MALFORMED\");\n }\n\n if (!isUnknownRecord(decoded)) {\n return rejectManifest(\"SKIP_MANIFEST_MALFORMED\", { field: \"manifest\" });\n }\n\n if (decoded.schemaVersion !== CLIENT_REUSE_MANIFEST_SCHEMA_VERSION) {\n return rejectManifest(\"SKIP_MANIFEST_SCHEMA_UNSUPPORTED\", {\n schemaVersion:\n typeof decoded.schemaVersion === \"number\" || typeof decoded.schemaVersion === \"string\"\n ? decoded.schemaVersion\n : null,\n });\n }\n\n if (decoded.hashAlgorithm !== CLIENT_REUSE_MANIFEST_HASH_ALGORITHM) {\n return rejectManifest(\"SKIP_HASH_ALGORITHM_UNSUPPORTED\", {\n hashAlgorithm: typeof decoded.hashAlgorithm === \"string\" ? decoded.hashAlgorithm : null,\n });\n }\n\n const visibleCommitVersion = decoded.visibleCommitVersion;\n if (!isVisibleCommitVersion(visibleCommitVersion)) {\n return rejectManifest(\"SKIP_VISIBLE_COMMIT_VERSION_INVALID\", {\n visibleCommitVersion: null,\n });\n }\n\n const replayWindowResult = parseReplayWindow(decoded.replayWindow, visibleCommitVersion);\n if (replayWindowResult.kind === \"rejected\") {\n return { kind: \"rejected\", rejection: replayWindowResult.rejection };\n }\n const { replayWindow } = replayWindowResult;\n if (!currentCommitVersionMatchesReplayWindow(options.currentVisibleCommitVersion, replayWindow)) {\n return rejectManifest(\"SKIP_VISIBLE_COMMIT_VERSION_MISMATCH\", {\n currentVisibleCommitVersion: options.currentVisibleCommitVersion ?? null,\n validFromVisibleCommitVersion: replayWindow.validFromVisibleCommitVersion,\n validUntilVisibleCommitVersion: replayWindow.validUntilVisibleCommitVersion,\n visibleCommitVersion,\n });\n }\n\n const entriesValue = decoded.entries;\n if (!Array.isArray(entriesValue)) {\n return rejectManifest(\"SKIP_MANIFEST_MALFORMED\", { field: \"entries\" });\n }\n if (entriesValue.length > limits.maxEntryCount) {\n return rejectManifest(\"SKIP_ENTRY_COUNT_EXCEEDED\", {\n entryCount: entriesValue.length,\n maxEntryCount: limits.maxEntryCount,\n });\n }\n\n const entries: ClientReuseManifestEntry[] = [];\n const entryRejections: ClientReuseManifestEntryRejection[] = [];\n let previousEntryId: string | null = null;\n\n for (let index = 0; index < entriesValue.length; index++) {\n const value = entriesValue[index];\n if (isUnknownRecord(value) && typeof value.id === \"string\") {\n // Canonical ordering is enforced over entries with string IDs. Malformed\n // entries cannot advance previousEntryId, so interleaving them cannot hide\n // an ordering violation between valid checkpoints. <= rejects both\n // out-of-order and duplicate IDs.\n if (previousEntryId !== null && value.id <= previousEntryId) {\n return rejectManifest(\"SKIP_ENTRY_ORDER_NON_CANONICAL\", {\n entryIdHash: createClientReusePayloadHash(value.id),\n previousEntryIdHash: createClientReusePayloadHash(previousEntryId),\n });\n }\n previousEntryId = value.id;\n }\n\n const parsedEntry = parseManifestEntry(value, limits, index);\n if (\"code\" in parsedEntry) {\n entryRejections.push(parsedEntry);\n } else {\n entries.push(parsedEntry);\n }\n }\n\n return {\n entryRejections,\n kind: \"parsed\",\n manifest: {\n entries,\n hashAlgorithm: CLIENT_REUSE_MANIFEST_HASH_ALGORITHM,\n replayWindow,\n schemaVersion: CLIENT_REUSE_MANIFEST_SCHEMA_VERSION,\n visibleCommitVersion,\n },\n skipDisposition: {\n code: \"SKIP_MODEL_DISABLED\",\n enabled: false,\n mode: \"renderAndSend\",\n },\n };\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-trace-metadata.js","names":[],"sources":["../../src/server/client-trace-metadata.ts"],"sourcesContent":["/**\n * Client trace metadata renderer.\n *\n * When `experimental.clientTraceMetadata` is configured in `next.config`,\n * vinext emits `<meta name=\"...\" content=\"...\">` tags in the SSR HTML head\n * for each configured key. The values are sourced from the active\n * OpenTelemetry context via the registered propagator.\n *\n * This mirrors Next.js' implementation:\n * - packages/next/src/server/lib/trace/utils.ts (getTracedMetadata)\n * - packages/next/src/server/app-render/make-get-server-inserted-html.tsx (traceMetaTags)\n *\n * OpenTelemetry is an optional peer — we resolve `@opentelemetry/api` at\n * runtime and silently no-op when it is not installed. This matches user\n * expectations: apps that don't configure OTel get no meta tags, and apps\n * that do get the filtered subset they asked for in `clientTraceMetadata`.\n */\nimport { escapeHtmlAttr } from \"./html.js\";\n\nexport type ClientTraceDataEntry = {\n key: string;\n value: string;\n};\n\ntype TextMapSetter = {\n set(carrier: ClientTraceDataEntry[], key: string, value: string): void;\n};\n\nconst carrierSetter: TextMapSetter = {\n set(carrier, key, value) {\n if (typeof key !== \"string\" || typeof value !== \"string\") return;\n carrier.push({ key, value });\n },\n};\n\n/**\n * Pull entries off the active OpenTelemetry context via the registered\n * propagator. Returns an empty array when `@opentelemetry/api` is not\n * installed or when no propagator has been registered.\n *\n * The implementation mirrors Next.js's `NextTracerImpl.getTracePropagationData`:\n * we call `propagation.inject(activeContext, entries, setter)` and let the\n * setter push entries into our carrier array.\n */\ntype OpenTelemetryApi = {\n context: { active(): unknown };\n propagation: {\n inject(context: unknown, carrier: ClientTraceDataEntry[], setter: TextMapSetter): void;\n };\n};\n\nfunction getOpenTelemetryTraceData(): ClientTraceDataEntry[] {\n let api: OpenTelemetryApi | undefined;\n try {\n // Use require() at runtime so `@opentelemetry/api` is an optional peer.\n // Bundlers (Vite/esbuild) leave the `require` reference alone, so apps\n // that don't install the package never hit this branch.\n const req = (globalThis as { require?: (id: string) => unknown }).require;\n if (typeof req === \"function\") {\n api = req(\"@opentelemetry/api\") as OpenTelemetryApi;\n }\n } catch {\n return [];\n }\n\n if (!api) return [];\n\n try {\n const activeContext = api.context.active();\n const entries: ClientTraceDataEntry[] = [];\n api.propagation.inject(activeContext, entries, carrierSetter);\n return entries;\n } catch {\n return [];\n }\n}\n\n/**\n * Filter an entry list against the configured `clientTraceMetadata` allow-list.\n * Returns `undefined` when the allow-list is unset so callers can skip\n * rendering altogether.\n */\nexport function filterClientTraceMetadata(\n entries: readonly ClientTraceDataEntry[],\n allowList: readonly string[] | undefined,\n): ClientTraceDataEntry[] | undefined {\n if (!allowList || allowList.length === 0) return undefined;\n const allowSet = new Set(allowList);\n return entries.filter(({ key }) => allowSet.has(key));\n}\n\n/**\n * Render the filtered entries as a sequence of self-closing `<meta>` tags.\n * Names and values are HTML-attribute escaped. Returns an empty string when\n * `entries` is empty or undefined so callers can append unconditionally.\n */\nexport function renderClientTraceMetadataTags(\n entries: readonly ClientTraceDataEntry[] | undefined,\n): string {\n if (!entries || entries.length === 0) return \"\";\n let html = \"\";\n for (const { key, value } of entries) {\n html += `<meta name=\"${escapeHtmlAttr(key)}\" content=\"${escapeHtmlAttr(value)}\"/>`;\n }\n return html;\n}\n\n/**\n * Convenience helper: read OTel propagation data, filter against the\n * configured allow-list, and render the resulting `<meta>` tags. Returns an\n * empty string when the allow-list is unset, OTel is not installed, or no\n * matching keys were emitted by the propagator.\n *\n * Safe to call unconditionally on every SSR render — when nothing is\n * configured/active this is a few `try/catch`-bounded operations and returns\n * `\"\"`.\n */\nexport function getClientTraceMetadataHTML(allowList: readonly string[] | undefined): string {\n if (!allowList || allowList.length === 0) return \"\";\n const entries = getOpenTelemetryTraceData();\n const filtered = filterClientTraceMetadata(entries, allowList);\n return renderClientTraceMetadataTags(filtered);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA4BA,MAAM,gBAA+B,EACnC,IAAI,SAAS,KAAK,OAAO;CACvB,IAAI,OAAO,QAAQ,YAAY,OAAO,UAAU,UAAU;CAC1D,QAAQ,KAAK;EAAE;EAAK;EAAO,CAAC;GAE/B;AAkBD,SAAS,4BAAoD;CAC3D,IAAI;CACJ,IAAI;EAIF,MAAM,MAAO,WAAqD;EAClE,IAAI,OAAO,QAAQ,YACjB,MAAM,IAAI,qBAAqB;SAE3B;EACN,OAAO,EAAE;;CAGX,IAAI,CAAC,KAAK,OAAO,EAAE;CAEnB,IAAI;EACF,MAAM,gBAAgB,IAAI,QAAQ,QAAQ;EAC1C,MAAM,UAAkC,EAAE;EAC1C,IAAI,YAAY,OAAO,eAAe,SAAS,cAAc;EAC7D,OAAO;SACD;EACN,OAAO,EAAE;;;;;;;;AASb,SAAgB,0BACd,SACA,WACoC;CACpC,IAAI,CAAC,aAAa,UAAU,WAAW,GAAG,OAAO,KAAA;CACjD,MAAM,WAAW,IAAI,IAAI,UAAU;CACnC,OAAO,QAAQ,QAAQ,EAAE,UAAU,SAAS,IAAI,IAAI,CAAC;;;;;;;AAQvD,SAAgB,8BACd,SACQ;CACR,IAAI,CAAC,WAAW,QAAQ,WAAW,GAAG,OAAO;CAC7C,IAAI,OAAO;CACX,KAAK,MAAM,EAAE,KAAK,WAAW,SAC3B,QAAQ,eAAe,eAAe,IAAI,CAAC,aAAa,eAAe,MAAM,CAAC;CAEhF,OAAO;;;;;;;;;;;;AAaT,SAAgB,2BAA2B,WAAkD;CAC3F,IAAI,CAAC,aAAa,UAAU,WAAW,GAAG,OAAO;CAGjD,OAAO,8BADU,0BADD,2BACkC,EAAE,UACP,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cookie-utils.js","names":[],"sources":["../../src/server/cookie-utils.ts"],"sourcesContent":["/**\n * Parse the cookie name out of a serialised Set-Cookie line.\n *\n * Bounded by the first `;` so the attribute portion (e.g. `Path=/`) is never\n * mistaken for part of the name when the value happens to contain another\n * `=`. Returns null when the line is not parseable (defensive — callers keep\n * unparseable entries verbatim so they don't drop user-supplied cookies).\n */\nexport function getSetCookieName(cookie: string): string | null {\n const equalsIndex = cookie.indexOf(\"=\");\n if (equalsIndex <= 0) {\n return null;\n }\n const semicolonIndex = cookie.indexOf(\";\");\n const end = semicolonIndex === -1 ? equalsIndex : Math.min(equalsIndex, semicolonIndex);\n return cookie.slice(0, end);\n}\n"],"mappings":";;;;;;;;;AAQA,SAAgB,iBAAiB,QAA+B;CAC9D,MAAM,cAAc,OAAO,QAAQ,IAAI;CACvC,IAAI,eAAe,GACjB,OAAO;CAET,MAAM,iBAAiB,OAAO,QAAQ,IAAI;CAC1C,MAAM,MAAM,mBAAmB,KAAK,cAAc,KAAK,IAAI,aAAa,eAAe;CACvF,OAAO,OAAO,MAAM,GAAG,IAAI"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"csp.js","names":[],"sources":["../../src/server/csp.ts"],"sourcesContent":["import type { IncomingHttpHeaders, OutgoingHttpHeaders } from \"node:http\";\n\nconst ESCAPE_REGEX = /[&><\\u2028\\u2029]/;\ntype NodeHeaders = IncomingHttpHeaders | OutgoingHttpHeaders;\n\nfunction matchesDirectiveName(directive: string, name: string): boolean {\n return directive === name || directive.startsWith(`${name} `);\n}\n\nfunction getNodeHeaderValue(\n headers: NodeHeaders | null | undefined,\n key: \"content-security-policy\" | \"content-security-policy-report-only\",\n): string | undefined {\n const value = headers?.[key];\n if (Array.isArray(value)) {\n return value.join(\", \");\n }\n if (value == null) {\n return undefined;\n }\n return String(value);\n}\n\nexport function getScriptNonceFromHeader(cspHeaderValue: string): string | undefined {\n const directives = cspHeaderValue.split(\";\").map((directive) => directive.trim());\n\n const directive =\n directives.find((value) => matchesDirectiveName(value, \"script-src\")) ??\n directives.find((value) => matchesDirectiveName(value, \"default-src\"));\n\n if (!directive) {\n return undefined;\n }\n\n const nonce = directive\n .split(\" \")\n .slice(1)\n .map((source) => source.trim())\n .find((source) => source.startsWith(\"'nonce-\") && source.length > 8 && source.endsWith(\"'\"))\n ?.slice(7, -1);\n\n if (!nonce) {\n return undefined;\n }\n\n if (ESCAPE_REGEX.test(nonce)) {\n throw new Error(\n \"Nonce value from Content-Security-Policy contained HTML escape characters.\\nLearn more: https://nextjs.org/docs/messages/nonce-contained-invalid-characters\",\n );\n }\n\n return nonce;\n}\n\nexport function getScriptNonceFromHeaders(headers: Headers | null | undefined): string | undefined {\n const csp =\n headers?.get(\"content-security-policy\") ?? headers?.get(\"content-security-policy-report-only\");\n\n if (!csp) {\n return undefined;\n }\n\n return getScriptNonceFromHeader(csp);\n}\n\nfunction getScriptNonceFromNodeHeaders(\n headers: NodeHeaders | null | undefined,\n): string | undefined {\n const csp =\n getNodeHeaderValue(headers, \"content-security-policy\") ??\n getNodeHeaderValue(headers, \"content-security-policy-report-only\");\n\n if (!csp) {\n return undefined;\n }\n\n return getScriptNonceFromHeader(csp);\n}\n\nexport function getScriptNonceFromNodeHeaderSources(\n ...headersList: readonly (NodeHeaders | null | undefined)[]\n): string | undefined {\n for (const headers of headersList) {\n const nonce = getScriptNonceFromNodeHeaders(headers);\n if (nonce) {\n return nonce;\n }\n }\n\n return undefined;\n}\n\nexport function getScriptNonceFromHeaderSources(\n ...headersList: readonly (Headers | null | undefined)[]\n): string | undefined {\n for (const headers of headersList) {\n const nonce = getScriptNonceFromHeaders(headers);\n if (nonce) {\n return nonce;\n }\n }\n\n return undefined;\n}\n"],"mappings":";AAEA,MAAM,eAAe;AAGrB,SAAS,qBAAqB,WAAmB,MAAuB;CACtE,OAAO,cAAc,QAAQ,UAAU,WAAW,GAAG,KAAK,GAAG;;AAG/D,SAAS,mBACP,SACA,KACoB;CACpB,MAAM,QAAQ,UAAU;CACxB,IAAI,MAAM,QAAQ,MAAM,EACtB,OAAO,MAAM,KAAK,KAAK;CAEzB,IAAI,SAAS,MACX;CAEF,OAAO,OAAO,MAAM;;AAGtB,SAAgB,yBAAyB,gBAA4C;CACnF,MAAM,aAAa,eAAe,MAAM,IAAI,CAAC,KAAK,cAAc,UAAU,MAAM,CAAC;CAEjF,MAAM,YACJ,WAAW,MAAM,UAAU,qBAAqB,OAAO,aAAa,CAAC,IACrE,WAAW,MAAM,UAAU,qBAAqB,OAAO,cAAc,CAAC;CAExE,IAAI,CAAC,WACH;CAGF,MAAM,QAAQ,UACX,MAAM,IAAI,CACV,MAAM,EAAE,CACR,KAAK,WAAW,OAAO,MAAM,CAAC,CAC9B,MAAM,WAAW,OAAO,WAAW,UAAU,IAAI,OAAO,SAAS,KAAK,OAAO,SAAS,IAAI,CAAC,EAC1F,MAAM,GAAG,GAAG;CAEhB,IAAI,CAAC,OACH;CAGF,IAAI,aAAa,KAAK,MAAM,EAC1B,MAAM,IAAI,MACR,8JACD;CAGH,OAAO;;AAGT,SAAgB,0BAA0B,SAAyD;CACjG,MAAM,MACJ,SAAS,IAAI,0BAA0B,IAAI,SAAS,IAAI,sCAAsC;CAEhG,IAAI,CAAC,KACH;CAGF,OAAO,yBAAyB,IAAI;;AAGtC,SAAS,8BACP,SACoB;CACpB,MAAM,MACJ,mBAAmB,SAAS,0BAA0B,IACtD,mBAAmB,SAAS,sCAAsC;CAEpE,IAAI,CAAC,KACH;CAGF,OAAO,yBAAyB,IAAI;;AAGtC,SAAgB,oCACd,GAAG,aACiB;CACpB,KAAK,MAAM,WAAW,aAAa;EACjC,MAAM,QAAQ,8BAA8B,QAAQ;EACpD,IAAI,OACF,OAAO;;;AAOb,SAAgB,gCACd,GAAG,aACiB;CACpB,KAAK,MAAM,WAAW,aAAa;EACjC,MAAM,QAAQ,0BAA0B,QAAQ;EAChD,IAAI,OACF,OAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"default-global-error-module.js","names":[],"sources":["../../src/server/default-global-error-module.ts"],"sourcesContent":["import DefaultGlobalError from \"vinext/shims/default-global-error\";\n\n/**\n * Module-shaped wrapper around vinext's built-in default global error\n * component. Used as the fallback when an app does not define its own\n * `app/global-error.tsx`. The runtime treats any `{ default: Component }`\n * record as a \"global error module\", so wrapping the component this way lets\n * us thread the default through the existing `globalErrorModule` plumbing\n * without introducing a parallel code path.\n *\n * Mirrors Next.js's `defaultGlobalErrorPath`\n * (`next/dist/client/components/builtin/global-error.js`), which is selected\n * automatically when the user has not supplied a custom global error file:\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/build/webpack/loaders/next-app-loader/index.ts\n */\nexport const DEFAULT_GLOBAL_ERROR_MODULE = {\n default: DefaultGlobalError,\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAa,8BAA8B,EACzC,SAAS,oBACV"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"default-not-found-module.js","names":[],"sources":["../../src/server/default-not-found-module.ts"],"sourcesContent":["import DefaultNotFound from \"vinext/shims/default-not-found\";\n\n/**\n * Module-shaped wrapper around vinext's built-in default not-found component.\n * Used as the fallback when an app does not define its own `app/not-found.tsx`\n * (and has not opted into `app/global-not-found.tsx`). The runtime treats any\n * `{ default: Component }` record as a \"not-found module\", so wrapping the\n * component this way lets us thread the default through the existing\n * `rootNotFoundModule` plumbing without introducing a parallel code path.\n *\n * Mirrors Next.js's `defaultNotFoundPath`\n * (`next/dist/client/components/builtin/not-found.js`), which is selected\n * automatically when the user has not supplied a custom not-found file:\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/build/webpack/loaders/next-app-loader/index.ts\n */\nexport const DEFAULT_NOT_FOUND_MODULE = {\n default: DefaultNotFound,\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAa,2BAA2B,EACtC,SAAS,iBACV"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-error-overlay-store.js","names":[],"sources":["../../src/server/dev-error-overlay-store.ts"],"sourcesContent":["// Module-level store for the dev error overlay. Lives in its own file so the\n// overlay React component (dev-error-overlay.tsx) can subscribe via\n// useSyncExternalStore without circular imports.\n\nexport type Source = \"uncaught\" | \"caught\" | \"window-error\" | \"unhandledrejection\";\n\nexport type ReportedError = {\n source: Source;\n message: string;\n stack: string | undefined;\n componentStack: string | undefined;\n};\n\nexport type OverlayState = {\n errors: ReportedError[];\n index: number;\n minimized: boolean;\n};\n\n// Cap the buffer so a hot-reloading loop or an effect that throws on every\n// render can't grow the array (and its retained stack strings) without\n// bound. FIFO eviction keeps the most recent failures.\nconst MAX_DEV_OVERLAY_ERRORS = 50;\n\nlet snapshot: OverlayState = { errors: [], index: 0, minimized: false };\nconst listeners = new Set<() => void>();\n\nfunction emit(): void {\n for (const fn of listeners) fn();\n}\n\nexport function subscribeOverlay(fn: () => void): () => void {\n listeners.add(fn);\n return () => {\n listeners.delete(fn);\n };\n}\n\nexport function getOverlaySnapshot(): OverlayState {\n return snapshot;\n}\n\nexport function reportToOverlay(error: ReportedError): void {\n // Any new error pops the dialog open, regardless of source or current\n // state. The developer can minimize once they've taken stock; subsequent\n // failures will re-expand.\n const next = [...snapshot.errors, error];\n const dropped = next.length > MAX_DEV_OVERLAY_ERRORS ? next.length - MAX_DEV_OVERLAY_ERRORS : 0;\n const errors = dropped > 0 ? next.slice(dropped) : next;\n snapshot = {\n errors,\n index: errors.length - 1,\n minimized: false,\n };\n emit();\n}\n\nexport function dismissOverlay(): void {\n snapshot = { errors: [], index: 0, minimized: false };\n emit();\n}\n\nexport function setOverlayIndex(index: number): void {\n if (index < 0 || index >= snapshot.errors.length) return;\n snapshot = { ...snapshot, index };\n emit();\n}\n\nexport function minimizeOverlay(): void {\n if (snapshot.minimized) return;\n snapshot = { ...snapshot, minimized: true };\n emit();\n}\n\nexport function expandOverlay(): void {\n if (!snapshot.minimized) return;\n snapshot = { ...snapshot, minimized: false };\n emit();\n}\n"],"mappings":";AAsBA,MAAM,yBAAyB;AAE/B,IAAI,WAAyB;CAAE,QAAQ,EAAE;CAAE,OAAO;CAAG,WAAW;CAAO;AACvE,MAAM,4BAAY,IAAI,KAAiB;AAEvC,SAAS,OAAa;CACpB,KAAK,MAAM,MAAM,WAAW,IAAI;;AAGlC,SAAgB,iBAAiB,IAA4B;CAC3D,UAAU,IAAI,GAAG;CACjB,aAAa;EACX,UAAU,OAAO,GAAG;;;AAIxB,SAAgB,qBAAmC;CACjD,OAAO;;AAGT,SAAgB,gBAAgB,OAA4B;CAI1D,MAAM,OAAO,CAAC,GAAG,SAAS,QAAQ,MAAM;CACxC,MAAM,UAAU,KAAK,SAAS,yBAAyB,KAAK,SAAS,yBAAyB;CAC9F,MAAM,SAAS,UAAU,IAAI,KAAK,MAAM,QAAQ,GAAG;CACnD,WAAW;EACT;EACA,OAAO,OAAO,SAAS;EACvB,WAAW;EACZ;CACD,MAAM;;AAGR,SAAgB,iBAAuB;CACrC,WAAW;EAAE,QAAQ,EAAE;EAAE,OAAO;EAAG,WAAW;EAAO;CACrD,MAAM;;AAGR,SAAgB,gBAAgB,OAAqB;CACnD,IAAI,QAAQ,KAAK,SAAS,SAAS,OAAO,QAAQ;CAClD,WAAW;EAAE,GAAG;EAAU;EAAO;CACjC,MAAM;;AAGR,SAAgB,kBAAwB;CACtC,IAAI,SAAS,WAAW;CACxB,WAAW;EAAE,GAAG;EAAU,WAAW;EAAM;CAC3C,MAAM;;AAGR,SAAgB,gBAAsB;CACpC,IAAI,CAAC,SAAS,WAAW;CACzB,WAAW;EAAE,GAAG;EAAU,WAAW;EAAO;CAC5C,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-error-overlay.js","names":[],"sources":["../../src/server/dev-error-overlay.tsx"],"sourcesContent":["// Dev-only runtime error overlay. Surfaces three error sources that\n// otherwise only reach the console:\n// 1. React render errors caught by an error.tsx boundary (onCaughtError)\n// 2. React render errors with no boundary above them (onUncaughtError)\n// 3. Plain script errors / unhandled promise rejections (window listeners)\n//\n// Rendered via a separate React root mounted on a detached <div> appended to\n// the body. That isolation means the overlay survives an unmount of the main\n// hydrateRoot(document, ...) tree — necessary because most of the errors we\n// want to surface are exactly the ones that take that tree down.\n\nimport { useEffect, useSyncExternalStore } from \"react\";\nimport { createRoot, type Root } from \"react-dom/client\";\n\nimport { isNavigationSignalError } from \"../utils/navigation-signal.js\";\nimport {\n type OverlayState,\n type ReportedError,\n type Source,\n dismissOverlay,\n expandOverlay,\n getOverlaySnapshot,\n minimizeOverlay,\n reportToOverlay,\n setOverlayIndex,\n subscribeOverlay,\n} from \"./dev-error-overlay-store.js\";\n\n// Re-export so callers (e.g. the HMR rsc:update handler) can clear the\n// overlay when a new payload lands.\nexport { dismissOverlay } from \"./dev-error-overlay-store.js\";\n\nconst MOUNT_NODE_ID = \"__vinext_dev_error_overlay_root\";\n\nlet reactRoot: Root | null = null;\nlet installed = false;\n\n// Errors React already routed through onCaughtError/onUncaughtError shouldn't\n// also surface from the window listeners — otherwise the same throw appears\n// twice in the dialog (\"Runtime Error\" + \"Unhandled Script Error\"). We track\n// instances we've reported and skip them in the global handlers.\nconst reportedErrors = new WeakSet<object>();\n\nfunction rememberReported(error: unknown): void {\n if (error && typeof error === \"object\") reportedErrors.add(error);\n}\n\nfunction alreadyReported(error: unknown): boolean {\n return !!error && typeof error === \"object\" && reportedErrors.has(error);\n}\n\nexport function installDevErrorOverlay(): void {\n if (installed || typeof window === \"undefined\") return;\n installed = true;\n\n window.addEventListener(\"error\", (event: ErrorEvent) => {\n const err = event.error;\n if (isNavigationSignalError(err)) return;\n if (err instanceof Error) {\n if (alreadyReported(err)) return;\n reportDevError(err, { source: \"window-error\" });\n } else if (event.message) {\n reportDevError(new Error(event.message), { source: \"window-error\" });\n }\n });\n\n window.addEventListener(\"unhandledrejection\", (event: PromiseRejectionEvent) => {\n const reason = event.reason;\n if (isNavigationSignalError(reason)) return;\n if (reason instanceof Error) {\n if (alreadyReported(reason)) return;\n reportDevError(reason, { source: \"unhandledrejection\" });\n } else {\n reportDevError(new Error(String(reason)), { source: \"unhandledrejection\" });\n }\n });\n}\n\nfunction reportDevError(\n error: unknown,\n options: { source: Source; componentStack?: string },\n): void {\n if (typeof window === \"undefined\") return;\n\n rememberReported(error);\n\n const message =\n error instanceof Error\n ? error.message\n : typeof error === \"string\"\n ? error\n : safeStringify(error);\n const stack = error instanceof Error ? error.stack : undefined;\n\n ensureMounted();\n reportToOverlay({\n source: options.source,\n message,\n stack,\n componentStack: options.componentStack,\n });\n}\n\n// React's onCaughtError fires for boundary-caught errors. We log to the console\n// (preserving the default behavior) and surface in the overlay. Sentinel errors\n// (NEXT_NOT_FOUND, NEXT_REDIRECT, etc.) are re-thrown in getDerivedStateFromError\n// before they reach onCaughtError, so they don't appear here in practice.\nexport function devOnCaughtError(\n error: unknown,\n errorInfo: { componentStack?: string; errorBoundary?: unknown },\n): void {\n if (isNavigationSignalError(error)) return;\n\n console.error(error);\n if (errorInfo?.componentStack) {\n console.error(\"The above error occurred in a React component:\\n\" + errorInfo.componentStack);\n }\n reportDevError(error, { source: \"caught\", componentStack: errorInfo?.componentStack });\n}\n\n// Dev variant of onUncaughtError. Surfaces the error in the overlay and stops\n// — we deliberately do NOT perform the prod recovery navigation\n// (window.location.assign) because in dev the overlay is the user-facing\n// recovery; a hard navigation would blow it away along with the rest of the\n// page. HMR or a manual refresh resumes the session once the bug is fixed.\nexport function devOnUncaughtError(\n error: unknown,\n errorInfo: { componentStack?: string; errorBoundary?: unknown },\n): void {\n if (isNavigationSignalError(error)) return;\n\n console.error(error);\n if (errorInfo?.componentStack) {\n console.error(\"The above error occurred in a React component:\\n\" + errorInfo.componentStack);\n }\n reportDevError(error, { source: \"uncaught\", componentStack: errorInfo?.componentStack });\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value);\n } catch {\n return Object.prototype.toString.call(value);\n }\n}\n\nfunction ensureMounted(): void {\n if (reactRoot) return;\n const node = document.createElement(\"div\");\n node.id = MOUNT_NODE_ID;\n // Fall back to documentElement in case body hasn't been parsed yet (e.g.\n // an extremely early hydration error firing before the body element is\n // attached). Either parent keeps the overlay outside the React-managed\n // hydrateRoot tree, which is what matters.\n (document.body ?? document.documentElement).appendChild(node);\n reactRoot = createRoot(node);\n reactRoot.render(<DevErrorOverlayApp />);\n}\n\n// ---------------------------------------------------------------------------\n// React component tree\n// ---------------------------------------------------------------------------\n\nconst SOURCE_LABEL: Record<Source, string> = {\n uncaught: \"Unhandled Runtime Error\",\n caught: \"Runtime Error\",\n \"window-error\": \"Unhandled Script Error\",\n unhandledrejection: \"Unhandled Promise Rejection\",\n};\n\nfunction DevErrorOverlayApp(): React.ReactNode {\n const state = useSyncExternalStore<OverlayState>(\n subscribeOverlay,\n getOverlaySnapshot,\n getOverlaySnapshot,\n );\n if (state.errors.length === 0) return null;\n const current = state.errors[state.index] ?? state.errors[0]!;\n\n // Render the stylesheet once at the root so it's not re-injected when\n // toggling between minimized and expanded states.\n return (\n <>\n <style>{overlayStylesheet}</style>\n {state.minimized ? (\n <DevErrorIndicator\n count={state.errors.length}\n source={current.source}\n onExpand={expandOverlay}\n />\n ) : (\n <DevErrorOverlay\n error={current}\n index={state.index}\n total={state.errors.length}\n // setOverlayIndex bounds-checks internally and the prev/next\n // buttons are disabled at the edges, so no clamp needed here.\n onPrev={() => setOverlayIndex(state.index - 1)}\n onNext={() => setOverlayIndex(state.index + 1)}\n onMinimize={minimizeOverlay}\n onDismiss={dismissOverlay}\n />\n )}\n </>\n );\n}\n\nfunction DevErrorIndicator({\n count,\n source,\n onExpand,\n}: {\n count: number;\n source: Source;\n onExpand: () => void;\n}): React.ReactNode {\n return (\n <div style={indicatorContainerStyle}>\n <button\n type=\"button\"\n data-testid=\"vinext-dev-error-indicator\"\n aria-label={`${count} runtime error${count === 1 ? \"\" : \"s\"} — click to expand`}\n title={SOURCE_LABEL[source]}\n onClick={onExpand}\n className=\"vinext-overlay-indicator\"\n >\n <span aria-hidden=\"true\" style={indicatorIconStyle}>\n ⚠\n </span>\n <span data-testid=\"vinext-dev-error-indicator-count\" style={indicatorCountStyle}>\n {count}\n </span>\n </button>\n </div>\n );\n}\n\nfunction DevErrorOverlay({\n error,\n index,\n total,\n onPrev,\n onNext,\n onMinimize,\n onDismiss,\n}: {\n error: ReportedError;\n index: number;\n total: number;\n onPrev: () => void;\n onNext: () => void;\n onMinimize: () => void;\n onDismiss: () => void;\n}): React.ReactNode {\n const frames = error.stack ? parseStack(error.stack) : [];\n\n // Esc minimizes, ←/→ navigate between errors. Esc no longer dismisses\n // outright — once a developer wants the overlay gone they can hit the ×\n // button. Listener is attached on the window so it works regardless of\n // focus location inside the overlay.\n useEffect(() => {\n const onKey = (e: KeyboardEvent): void => {\n if (e.key === \"Escape\") {\n onMinimize();\n } else if (e.key === \"ArrowLeft\" && total > 1) {\n onPrev();\n } else if (e.key === \"ArrowRight\" && total > 1) {\n onNext();\n }\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [onMinimize, onPrev, onNext, total]);\n\n return (\n <div style={backdropStyle} data-testid=\"vinext-dev-error-backdrop\" onClick={onMinimize}>\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={SOURCE_LABEL[error.source]}\n data-testid=\"vinext-dev-error-overlay\"\n style={dialogStyle}\n onClick={(e) => e.stopPropagation()}\n >\n <div style={accentBarStyle} />\n\n <header style={headerStyle}>\n <div style={headerLeftStyle}>\n <span data-testid=\"vinext-dev-error-title\" style={badgeStyle}>\n {SOURCE_LABEL[error.source]}\n </span>\n {total > 1 ? (\n <div data-testid=\"vinext-dev-error-pagination\" style={paginationStyle}>\n <button\n type=\"button\"\n data-testid=\"vinext-dev-error-prev\"\n onClick={onPrev}\n disabled={index === 0}\n className=\"vinext-overlay-nav\"\n aria-label=\"Previous error\"\n >\n ‹\n </button>\n <span data-testid=\"vinext-dev-error-counter\" style={counterStyle}>\n {index + 1} of {total}\n </span>\n <button\n type=\"button\"\n data-testid=\"vinext-dev-error-next\"\n onClick={onNext}\n disabled={index === total - 1}\n className=\"vinext-overlay-nav\"\n aria-label=\"Next error\"\n >\n ›\n </button>\n </div>\n ) : null}\n </div>\n <button\n type=\"button\"\n data-testid=\"vinext-dev-error-minimize\"\n onClick={onMinimize}\n className=\"vinext-overlay-minimize\"\n aria-label=\"Minimize\"\n title=\"Minimize (Esc)\"\n >\n –\n </button>\n <button\n type=\"button\"\n data-testid=\"vinext-dev-error-close\"\n onClick={onDismiss}\n className=\"vinext-overlay-close\"\n aria-label=\"Dismiss\"\n title=\"Dismiss all errors\"\n >\n ×\n </button>\n </header>\n\n <div style={bodyStyle}>\n <h2 data-testid=\"vinext-dev-error-message\" style={messageStyle}>\n {error.message}\n </h2>\n\n {frames.length > 0 ? (\n <ol data-testid=\"vinext-dev-error-stack\" style={stackListStyle}>\n {frames.map((frame) => (\n <li key={frame.key} className=\"vinext-overlay-frame\" style={stackItemStyle}>\n <span style={frameFnStyle}>{frame.fn}</span>\n {frame.file ? (\n <span style={frameLocStyle}>\n {frame.file}\n {frame.line ? `:${frame.line}` : \"\"}\n {frame.col ? `:${frame.col}` : \"\"}\n </span>\n ) : null}\n </li>\n ))}\n </ol>\n ) : null}\n\n {error.componentStack ? (\n <details style={detailsStyle}>\n <summary style={summaryStyle}>Component stack</summary>\n <pre data-testid=\"vinext-dev-error-component-stack\" style={componentStackStyle}>\n {error.componentStack}\n </pre>\n </details>\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Stack parsing — handles V8 (\" at fn (file:line:col)\") and SpiderMonkey/\n// JavaScriptCore (\"fn@file:line:col\") formats. Lines that don't match either\n// shape are kept verbatim as a function-name-only frame so the overlay still\n// renders something useful in unfamiliar runtimes.\n// ---------------------------------------------------------------------------\n\ntype Frame = { key: string; fn: string; file?: string; line?: string; col?: string };\n\nconst V8_PAREN_FRAME = /^(.*?)\\s*\\((.+):(\\d+):(\\d+)\\)$/;\nconst V8_BARE_FRAME = /^(.+):(\\d+):(\\d+)$/;\nconst MOZ_FRAME = /^(.*?)@(.+):(\\d+):(\\d+)$/;\n\nfunction parseStack(stack: string): Frame[] {\n const frames: Frame[] = [];\n // Suffix repeat occurrences with #2, #3 so React keys stay unique even when\n // the same frame appears multiple times in a recursive stack.\n const seen = new Map<string, number>();\n const pushFrame = (fn: string, file?: string, line?: string, col?: string): void => {\n const base = `${fn}@${file ?? \"\"}:${line ?? \"\"}:${col ?? \"\"}`;\n const count = (seen.get(base) ?? 0) + 1;\n seen.set(base, count);\n const key = count === 1 ? base : `${base}#${count}`;\n frames.push({ key, fn, file, line, col });\n };\n for (const raw of stack.split(\"\\n\")) {\n const line = raw.trim();\n if (!line) continue;\n\n // V8 / Chromium: \" at fn (file:line:col)\" or \" at file:line:col\"\n if (line.startsWith(\"at \")) {\n const body = line.slice(3);\n const parenMatch = body.match(V8_PAREN_FRAME);\n if (parenMatch) {\n pushFrame(parenMatch[1] || \"<anonymous>\", parenMatch[2], parenMatch[3], parenMatch[4]);\n continue;\n }\n const bareMatch = body.match(V8_BARE_FRAME);\n if (bareMatch) {\n pushFrame(\"<anonymous>\", bareMatch[1], bareMatch[2], bareMatch[3]);\n continue;\n }\n pushFrame(body);\n continue;\n }\n\n // SpiderMonkey (Firefox) / JavaScriptCore (Safari): \"fn@file:line:col\".\n // The first line of a Firefox stack is the error message itself; skip it\n // by requiring the @-form match.\n const mozMatch = line.match(MOZ_FRAME);\n if (mozMatch) {\n pushFrame(mozMatch[1] || \"<anonymous>\", mozMatch[2], mozMatch[3], mozMatch[4]);\n continue;\n }\n\n // Unknown shape — preserve the line as a function-name-only frame so the\n // overlay shows something rather than dropping the line silently.\n pushFrame(line);\n }\n return frames;\n}\n\n// ---------------------------------------------------------------------------\n// Inline styles + a tiny stylesheet for hover/focus + entrance animation.\n// Keeping it all in this file means the overlay has no external CSS\n// dependency and works the same way in any host app.\n// ---------------------------------------------------------------------------\n\nconst FONT_STACK =\n \"ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\";\nconst MONO_STACK = \"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace\";\n\nconst overlayStylesheet = `\n@keyframes vinextOverlayBackdropIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n@keyframes vinextOverlayDialogIn {\n from { opacity: 0; transform: translateY(8px) scale(0.98); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n}\n@keyframes vinextOverlayIndicatorIn {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n.vinext-overlay-nav {\n background: transparent;\n border: none;\n color: inherit;\n cursor: pointer;\n padding: 2px 8px;\n font-size: 14px;\n line-height: 1;\n border-radius: 6px;\n transition: background 0.12s ease;\n}\n.vinext-overlay-nav:hover:not(:disabled) {\n background: rgba(255, 255, 255, 0.08);\n}\n.vinext-overlay-nav:disabled {\n opacity: 0.35;\n cursor: not-allowed;\n}\n.vinext-overlay-minimize,\n.vinext-overlay-close {\n background: transparent;\n border: none;\n color: #a1a1aa;\n cursor: pointer;\n font-size: 16px;\n line-height: 1;\n padding: 4px 8px;\n border-radius: 6px;\n transition: background 0.12s ease, color 0.12s ease;\n}\n.vinext-overlay-minimize:hover,\n.vinext-overlay-close:hover {\n background: rgba(255, 255, 255, 0.08);\n color: #fafafa;\n}\n.vinext-overlay-close { font-size: 20px; }\n.vinext-overlay-frame {\n padding: 8px 12px;\n border-radius: 6px;\n transition: background 0.12s ease;\n}\n.vinext-overlay-frame:hover {\n background: rgba(255, 255, 255, 0.04);\n}\n.vinext-overlay-indicator {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n border-radius: 999px;\n background: #18181b;\n color: #fafafa;\n border: 1px solid rgba(239, 68, 68, 0.45);\n font: 600 13px ${FONT_STACK};\n cursor: pointer;\n transition: background 0.12s ease, border-color 0.12s ease, transform 0.12s ease;\n animation: vinextOverlayIndicatorIn 0.18s ease-out;\n}\n.vinext-overlay-indicator:hover {\n background: #1f1f23;\n border-color: rgba(239, 68, 68, 0.7);\n transform: translateY(-1px);\n}\n`;\n\nconst backdropStyle: React.CSSProperties = {\n // The backdrop captures click-outside-to-minimize as a proper modal would —\n // a click on it dismisses the overlay rather than reaching the page\n // underneath. The dialog re-enables pointer events for itself via\n // dialogStyle.\n position: \"fixed\",\n inset: 0,\n background: \"rgba(10, 10, 12, 0.55)\",\n backdropFilter: \"blur(3px)\",\n WebkitBackdropFilter: \"blur(3px)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 24,\n zIndex: 2147483646,\n animation: \"vinextOverlayBackdropIn 0.15s ease-out\",\n};\n\nconst dialogStyle: React.CSSProperties = {\n position: \"relative\",\n pointerEvents: \"auto\",\n width: \"min(640px, 100%)\",\n maxHeight: \"min(80vh, 720px)\",\n display: \"flex\",\n flexDirection: \"column\",\n background: \"#0a0a0a\",\n color: \"#fafafa\",\n border: \"1px solid rgba(255, 255, 255, 0.08)\",\n borderRadius: 12,\n fontFamily: FONT_STACK,\n fontSize: 14,\n lineHeight: 1.5,\n overflow: \"hidden\",\n animation: \"vinextOverlayDialogIn 0.18s ease-out\",\n};\n\nconst indicatorContainerStyle: React.CSSProperties = {\n position: \"fixed\",\n bottom: 16,\n left: 16,\n zIndex: 2147483646,\n};\n\nconst indicatorIconStyle: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"#ef4444\",\n fontSize: 14,\n};\n\nconst indicatorCountStyle: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n minWidth: 18,\n padding: \"0 6px\",\n height: 18,\n borderRadius: 999,\n background: \"rgba(239, 68, 68, 0.18)\",\n color: \"#fca5a5\",\n fontSize: 11,\n fontWeight: 600,\n fontVariantNumeric: \"tabular-nums\",\n};\n\nconst accentBarStyle: React.CSSProperties = {\n height: 3,\n background: \"linear-gradient(90deg, #ef4444 0%, #f97316 100%)\",\n};\n\nconst headerStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n padding: \"14px 16px\",\n borderBottom: \"1px solid rgba(255, 255, 255, 0.06)\",\n};\n\nconst headerLeftStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: 10,\n minWidth: 0,\n};\n\nconst badgeStyle: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n background: \"rgba(239, 68, 68, 0.12)\",\n color: \"#fca5a5\",\n border: \"1px solid rgba(239, 68, 68, 0.25)\",\n padding: \"3px 10px\",\n borderRadius: 999,\n fontSize: 11,\n fontWeight: 600,\n letterSpacing: 0.2,\n textTransform: \"uppercase\",\n whiteSpace: \"nowrap\",\n};\n\nconst paginationStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: 2,\n color: \"#a1a1aa\",\n fontSize: 12,\n};\n\nconst counterStyle: React.CSSProperties = {\n padding: \"0 4px\",\n fontVariantNumeric: \"tabular-nums\",\n};\n\nconst bodyStyle: React.CSSProperties = {\n padding: \"16px 20px 20px\",\n overflow: \"auto\",\n flex: 1,\n};\n\nconst messageStyle: React.CSSProperties = {\n margin: \"0 0 16px 0\",\n fontFamily: MONO_STACK,\n fontSize: 16,\n fontWeight: 500,\n lineHeight: 1.45,\n color: \"#fafafa\",\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n};\n\nconst stackListStyle: React.CSSProperties = {\n listStyle: \"none\",\n margin: 0,\n padding: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n fontFamily: MONO_STACK,\n fontSize: 12,\n};\n\nconst stackItemStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n cursor: \"default\",\n};\n\nconst frameFnStyle: React.CSSProperties = {\n color: \"#fafafa\",\n fontWeight: 500,\n};\n\nconst frameLocStyle: React.CSSProperties = {\n color: \"#71717a\",\n fontSize: 11,\n};\n\nconst detailsStyle: React.CSSProperties = {\n marginTop: 16,\n paddingTop: 12,\n borderTop: \"1px solid rgba(255, 255, 255, 0.06)\",\n color: \"#a1a1aa\",\n fontSize: 12,\n};\n\nconst summaryStyle: React.CSSProperties = {\n cursor: \"pointer\",\n userSelect: \"none\",\n padding: \"4px 0\",\n color: \"#a1a1aa\",\n fontWeight: 500,\n};\n\nconst componentStackStyle: React.CSSProperties = {\n margin: \"8px 0 0 0\",\n fontFamily: MONO_STACK,\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n color: \"#a1a1aa\",\n};\n"],"mappings":"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"}