vinext 1.2.1 → 1.3.1

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 (509) hide show
  1. package/README.md +12 -9
  2. package/dist/_virtual/_rolldown/runtime.js +1 -1
  3. package/dist/build/action-owner-manifest.d.ts +3 -2
  4. package/dist/build/action-owner-manifest.js +18 -2
  5. package/dist/build/app-page-static-eligibility.d.ts +17 -1
  6. package/dist/build/app-page-static-eligibility.js +80 -13
  7. package/dist/build/clean-output.d.ts +2 -1
  8. package/dist/build/client-build-config.d.ts +77 -6
  9. package/dist/build/client-build-config.js +176 -12
  10. package/dist/build/client-reference-async.d.ts +48 -0
  11. package/dist/build/client-reference-async.js +123 -0
  12. package/dist/build/client-reference-chunks.d.ts +32 -0
  13. package/dist/build/client-reference-chunks.js +111 -0
  14. package/dist/build/client-reference-groups.d.ts +171 -0
  15. package/dist/build/client-reference-groups.js +572 -0
  16. package/dist/build/css-url-assets.d.ts +2 -1
  17. package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
  18. package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
  19. package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
  20. package/dist/build/google-fonts/font-metadata.d.ts +2 -1
  21. package/dist/build/google-fonts/validate.d.ts +2 -1
  22. package/dist/build/inline-css.d.ts +2 -1
  23. package/dist/build/layout-classification.d.ts +2 -1
  24. package/dist/build/module-dependency-cache.d.ts +33 -1
  25. package/dist/build/module-dependency-cache.js +51 -1
  26. package/dist/build/next-client-runtime-manifests.d.ts +12 -2
  27. package/dist/build/next-client-runtime-manifests.js +19 -4
  28. package/dist/build/nitro-public-files.d.ts +24 -0
  29. package/dist/build/nitro-public-files.js +60 -0
  30. package/dist/build/pages-client-assets-module.js +1 -1
  31. package/dist/build/precompress.d.ts +2 -1
  32. package/dist/build/precompress.js +1 -1
  33. package/dist/build/prerender-paths.d.ts +2 -1
  34. package/dist/build/prerender-paths.js +5 -2
  35. package/dist/build/prerender-phase.d.ts +2 -1
  36. package/dist/build/prerender-server-pool.js +1 -1
  37. package/dist/build/prerender.d.ts +3 -2
  38. package/dist/build/prerender.js +5 -4
  39. package/dist/build/report.d.ts +2 -1
  40. package/dist/build/route-classification-injector.d.ts +2 -1
  41. package/dist/build/route-classification-manifest.d.ts +2 -1
  42. package/dist/build/run-prerender.d.ts +2 -1
  43. package/dist/build/server-actions-encryption-key.d.ts +24 -0
  44. package/dist/build/server-actions-encryption-key.js +101 -0
  45. package/dist/build/ssr-manifest.d.ts +3 -0
  46. package/dist/build/ssr-manifest.js +34 -2
  47. package/dist/build/standalone.d.ts +2 -1
  48. package/dist/cache/cache-adapters-virtual.d.ts +2 -1
  49. package/dist/cache.js +1 -2
  50. package/dist/check.d.ts +2 -1
  51. package/dist/check.js +4 -0
  52. package/dist/cli-args.d.ts +2 -1
  53. package/dist/cli.js +2 -0
  54. package/dist/client/client-redirect-matcher.js +2 -1
  55. package/dist/client/client-redirects.d.ts +4 -3
  56. package/dist/client/client-redirects.js +2 -1
  57. package/dist/client/client-rewrite-params.d.ts +9 -0
  58. package/dist/client/client-rewrite-params.js +20 -0
  59. package/dist/client/client-rewrites.d.ts +2 -1
  60. package/dist/client/dev-error-overlay-store.d.ts +2 -1
  61. package/dist/client/dev-error-overlay.js +2 -1
  62. package/dist/client/index.js +1 -2
  63. package/dist/client/instrumentation-client-state.js +5 -5
  64. package/dist/client/navigation-runtime.d.ts +28 -3
  65. package/dist/client/navigation-runtime.js +42 -11
  66. package/dist/client/pages-router-link-navigation.d.ts +2 -1
  67. package/dist/client/vinext-next-data.d.ts +25 -2
  68. package/dist/client/window-next.d.ts +2 -1
  69. package/dist/config/config-matchers.d.ts +27 -41
  70. package/dist/config/config-matchers.js +293 -270
  71. package/dist/config/config-source.d.ts +34 -0
  72. package/dist/config/config-source.js +141 -0
  73. package/dist/config/dotenv.d.ts +2 -1
  74. package/dist/config/header-params.d.ts +29 -0
  75. package/dist/config/header-params.js +106 -0
  76. package/dist/config/next-config.d.ts +20 -6
  77. package/dist/config/next-config.js +149 -11
  78. package/dist/config/tsconfig-paths.d.ts +2 -1
  79. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
  80. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
  81. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
  82. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
  83. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
  84. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
  85. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
  86. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
  87. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
  88. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
  89. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
  90. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
  91. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
  92. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
  93. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
  94. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
  95. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
  96. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
  97. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
  98. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
  99. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
  100. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
  101. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
  102. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
  103. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
  104. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
  105. package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
  106. package/dist/entries/app-browser-entry.d.ts +34 -6
  107. package/dist/entries/app-browser-entry.js +103 -40
  108. package/dist/entries/app-rsc-entry.d.ts +4 -1
  109. package/dist/entries/app-rsc-entry.js +131 -66
  110. package/dist/entries/app-rsc-manifest.d.ts +12 -1
  111. package/dist/entries/app-rsc-manifest.js +73 -1
  112. package/dist/entries/app-ssr-entry.d.ts +4 -1
  113. package/dist/entries/app-ssr-entry.js +9 -2
  114. package/dist/entries/pages-client-entry.d.ts +1 -0
  115. package/dist/entries/pages-client-entry.js +6 -6
  116. package/dist/entries/pages-entry-helpers.js +1 -2
  117. package/dist/entries/pages-server-entry.d.ts +2 -1
  118. package/dist/entries/pages-server-entry.js +18 -15
  119. package/dist/entries/runtime-entry-module.d.ts +1 -0
  120. package/dist/entries/runtime-entry-module.js +4 -1
  121. package/dist/image/image-adapters-virtual.d.ts +2 -1
  122. package/dist/index.d.ts +11 -0
  123. package/dist/index.js +340 -116
  124. package/dist/init.js +17 -0
  125. package/dist/plugins/client-compile-hints.d.ts +30 -0
  126. package/dist/plugins/client-compile-hints.js +88 -0
  127. package/dist/plugins/client-reference-dedup.d.ts +2 -1
  128. package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
  129. package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
  130. package/dist/plugins/dynamic-preload-metadata.js +1 -1
  131. package/dist/plugins/environment.d.ts +2 -1
  132. package/dist/plugins/fonts.js +9 -12
  133. package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
  134. package/dist/plugins/import-meta-url.d.ts +2 -1
  135. package/dist/plugins/og-assets.d.ts +2 -1
  136. package/dist/plugins/og-assets.js +2 -3
  137. package/dist/plugins/optimize-imports.d.ts +27 -3
  138. package/dist/plugins/optimize-imports.js +106 -20
  139. package/dist/plugins/pages-node-externals.d.ts +2 -1
  140. package/dist/plugins/remove-console.d.ts +2 -1
  141. package/dist/plugins/require-condition-resolution.d.ts +2 -1
  142. package/dist/plugins/rsc-client-reference-loaders.d.ts +53 -1
  143. package/dist/plugins/rsc-client-reference-loaders.js +447 -27
  144. package/dist/plugins/rsc-client-shim-excludes.js +2 -0
  145. package/dist/plugins/sass.d.ts +2 -1
  146. package/dist/plugins/strip-server-exports.d.ts +2 -1
  147. package/dist/plugins/styled-jsx.d.ts +2 -1
  148. package/dist/plugins/transform-result.d.ts +2 -1
  149. package/dist/plugins/typeof-window.d.ts +2 -1
  150. package/dist/plugins/use-cache-callable.d.ts +5 -0
  151. package/dist/plugins/use-cache-callable.js +30 -8
  152. package/dist/plugins/worker-image-imports.d.ts +1 -0
  153. package/dist/plugins/worker-image-imports.js +2 -2
  154. package/dist/plugins/worker-use-server.d.ts +2 -1
  155. package/dist/routing/app-route-graph.d.ts +41 -1
  156. package/dist/routing/app-route-graph.js +122 -50
  157. package/dist/routing/browser-route-manifest.d.ts +44 -0
  158. package/dist/routing/browser-route-manifest.js +195 -0
  159. package/dist/routing/hashed-route-patterns.d.ts +4 -0
  160. package/dist/routing/hashed-route-patterns.js +22 -0
  161. package/dist/routing/optimistic-route-trie.d.ts +28 -0
  162. package/dist/routing/optimistic-route-trie.js +102 -0
  163. package/dist/routing/route-matching.d.ts +2 -1
  164. package/dist/routing/route-pattern.d.ts +2 -1
  165. package/dist/routing/route-validation.d.ts +6 -1
  166. package/dist/routing/route-validation.js +26 -10
  167. package/dist/server/accept-encoding.d.ts +2 -1
  168. package/dist/server/app-action-forwarding.d.ts +10 -1
  169. package/dist/server/app-action-forwarding.js +15 -1
  170. package/dist/server/app-bfcache-identity.d.ts +2 -1
  171. package/dist/server/app-browser-action-result.d.ts +2 -1
  172. package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -1
  173. package/dist/server/app-browser-entry.js +175 -64
  174. package/dist/server/app-browser-error.d.ts +5 -2
  175. package/dist/server/app-browser-error.js +7 -2
  176. package/dist/server/app-browser-history-controller.d.ts +2 -1
  177. package/dist/server/app-browser-hydration.d.ts +2 -1
  178. package/dist/server/app-browser-interception-context.d.ts +4 -3
  179. package/dist/server/app-browser-mpa-navigation.d.ts +1 -0
  180. package/dist/server/app-browser-mpa-navigation.js +6 -5
  181. package/dist/server/app-browser-navigation-controller.d.ts +17 -6
  182. package/dist/server/app-browser-navigation-controller.js +103 -36
  183. package/dist/server/app-browser-popstate.d.ts +2 -1
  184. package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
  185. package/dist/server/app-browser-server-action-client.d.ts +2 -1
  186. package/dist/server/app-browser-state.d.ts +2 -2
  187. package/dist/server/app-browser-state.js +1 -1
  188. package/dist/server/app-browser-stream.d.ts +2 -1
  189. package/dist/server/app-browser-visible-commit.d.ts +6 -5
  190. package/dist/server/app-client-reference-manifest.d.ts +31 -0
  191. package/dist/server/app-client-reference-manifest.js +46 -0
  192. package/dist/server/app-client-reference-preloader.d.ts +45 -2
  193. package/dist/server/app-client-reference-preloader.js +48 -10
  194. package/dist/server/app-elements-wire.d.ts +2 -1
  195. package/dist/server/app-elements.d.ts +2 -0
  196. package/dist/server/app-elements.js +3 -1
  197. package/dist/server/app-fallback-renderer.d.ts +9 -2
  198. package/dist/server/app-fallback-renderer.js +6 -2
  199. package/dist/server/app-history-state.d.ts +2 -1
  200. package/dist/server/app-inline-css-client.d.ts +2 -1
  201. package/dist/server/app-layout-param-observation.d.ts +2 -1
  202. package/dist/server/app-metadata-tracing.d.ts +2 -1
  203. package/dist/server/app-middleware.d.ts +6 -0
  204. package/dist/server/app-middleware.js +8 -10
  205. package/dist/server/app-optimistic-routing.d.ts +26 -11
  206. package/dist/server/app-optimistic-routing.js +38 -96
  207. package/dist/server/app-page-boundary-render.d.ts +20 -2
  208. package/dist/server/app-page-boundary-render.js +229 -39
  209. package/dist/server/app-page-boundary.d.ts +34 -5
  210. package/dist/server/app-page-boundary.js +40 -7
  211. package/dist/server/app-page-cache-finalizer.d.ts +2 -1
  212. package/dist/server/app-page-cache-finalizer.js +1 -1
  213. package/dist/server/app-page-cache-render.d.ts +10 -2
  214. package/dist/server/app-page-cache-render.js +15 -2
  215. package/dist/server/app-page-cache.js +2 -2
  216. package/dist/server/app-page-dispatch.d.ts +34 -1
  217. package/dist/server/app-page-dispatch.js +165 -34
  218. package/dist/server/app-page-element-builder.d.ts +17 -1
  219. package/dist/server/app-page-element-builder.js +187 -66
  220. package/dist/server/app-page-execution.d.ts +28 -1
  221. package/dist/server/app-page-execution.js +114 -5
  222. package/dist/server/app-page-head.d.ts +95 -3
  223. package/dist/server/app-page-head.js +307 -152
  224. package/dist/server/app-page-http-access-fallback-metadata.d.ts +48 -2
  225. package/dist/server/app-page-http-access-fallback-metadata.js +76 -1
  226. package/dist/server/app-page-method.d.ts +2 -1
  227. package/dist/server/app-page-probe.d.ts +2 -1
  228. package/dist/server/app-page-render-identity.d.ts +2 -1
  229. package/dist/server/app-page-render.d.ts +7 -1
  230. package/dist/server/app-page-render.js +38 -11
  231. package/dist/server/app-page-request.d.ts +14 -1
  232. package/dist/server/app-page-request.js +1 -1
  233. package/dist/server/app-page-route-wiring.d.ts +52 -2
  234. package/dist/server/app-page-route-wiring.js +197 -47
  235. package/dist/server/app-page-rsc-render-status.d.ts +3 -1
  236. package/dist/server/app-page-rsc-render-status.js +1 -0
  237. package/dist/server/app-page-search-params-observation.d.ts +8 -6
  238. package/dist/server/app-page-search-params-observation.js +16 -11
  239. package/dist/server/app-page-segment-plan.d.ts +2 -1
  240. package/dist/server/app-page-stream.d.ts +38 -1
  241. package/dist/server/app-page-stream.js +24 -4
  242. package/dist/server/app-pages-bridge.d.ts +4 -2
  243. package/dist/server/app-pages-bridge.js +11 -7
  244. package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
  245. package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
  246. package/dist/server/app-prerender-endpoints.d.ts +2 -1
  247. package/dist/server/app-prerender-static-params.d.ts +2 -1
  248. package/dist/server/app-prerender-static-params.js +3 -2
  249. package/dist/server/app-render-dependency.d.ts +11 -1
  250. package/dist/server/app-render-dependency.js +65 -6
  251. package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
  252. package/dist/server/app-request-stage-independent-entry.js +2 -2
  253. package/dist/server/app-response-stage-entry.d.ts +2 -1
  254. package/dist/server/app-response-stage-entry.js +3 -3
  255. package/dist/server/app-route-handler-cache.d.ts +2 -1
  256. package/dist/server/app-route-handler-dispatch.d.ts +2 -1
  257. package/dist/server/app-route-handler-dispatch.js +4 -2
  258. package/dist/server/app-route-handler-execution.d.ts +4 -1
  259. package/dist/server/app-route-handler-execution.js +9 -2
  260. package/dist/server/app-route-handler-middleware-context.d.ts +2 -1
  261. package/dist/server/app-route-handler-middleware-context.js +3 -3
  262. package/dist/server/app-route-handler-response.d.ts +4 -2
  263. package/dist/server/app-route-handler-response.js +2 -2
  264. package/dist/server/app-route-handler-runtime.d.ts +4 -1
  265. package/dist/server/app-route-handler-runtime.js +20 -3
  266. package/dist/server/app-route-module-loader.d.ts +18 -1
  267. package/dist/server/app-route-module-loader.js +15 -6
  268. package/dist/server/app-route-tree-prefetch.d.ts +2 -1
  269. package/dist/server/app-route-tree.d.ts +20 -0
  270. package/dist/server/app-route-tree.js +18 -0
  271. package/dist/server/app-router-entry.js +2 -2
  272. package/dist/server/app-rsc-combined-handler.js +8 -1
  273. package/dist/server/app-rsc-error-handler.d.ts +2 -1
  274. package/dist/server/app-rsc-errors.d.ts +9 -1
  275. package/dist/server/app-rsc-errors.js +9 -2
  276. package/dist/server/app-rsc-handler.d.ts +6 -2
  277. package/dist/server/app-rsc-handler.js +152 -140
  278. package/dist/server/app-rsc-response-finalizer.d.ts +7 -1
  279. package/dist/server/app-rsc-response-finalizer.js +4 -1
  280. package/dist/server/app-rsc-response-stage.js +3 -1
  281. package/dist/server/app-rsc-route-matching.d.ts +39 -1
  282. package/dist/server/app-rsc-route-matching.js +25 -1
  283. package/dist/server/app-segment-config.d.ts +2 -1
  284. package/dist/server/app-segment-config.js +1 -14
  285. package/dist/server/app-server-action-execution.d.ts +25 -7
  286. package/dist/server/app-server-action-execution.js +53 -59
  287. package/dist/server/app-ssr-entry.d.ts +12 -0
  288. package/dist/server/app-ssr-entry.js +104 -48
  289. package/dist/server/app-ssr-error-meta.d.ts +2 -1
  290. package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
  291. package/dist/server/app-ssr-stream.d.ts +29 -10
  292. package/dist/server/app-ssr-stream.js +311 -67
  293. package/dist/server/app-static-generation.d.ts +2 -1
  294. package/dist/server/app-streamed-client-references.d.ts +39 -0
  295. package/dist/server/app-streamed-client-references.js +156 -0
  296. package/dist/server/app-visited-response-cache.d.ts +2 -1
  297. package/dist/server/app-worker-stages.d.ts +2 -1
  298. package/dist/server/artifact-compatibility.d.ts +2 -1
  299. package/dist/server/bfcache-identity.d.ts +2 -1
  300. package/dist/server/cache-headers.d.ts +2 -1
  301. package/dist/server/cacheability-request.d.ts +2 -1
  302. package/dist/server/client-reuse-manifest.d.ts +2 -1
  303. package/dist/server/config-headers.d.ts +2 -1
  304. package/dist/server/config-headers.js +12 -3
  305. package/dist/server/csp.d.ts +2 -1
  306. package/dist/server/default-global-not-found-module.d.ts +2 -1
  307. package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
  308. package/dist/server/default-http-access-fallback-modules.js +31 -0
  309. package/dist/server/defer-until-stream-consumed.d.ts +34 -0
  310. package/dist/server/defer-until-stream-consumed.js +154 -21
  311. package/dist/server/dev-lockfile.d.ts +32 -2
  312. package/dist/server/dev-lockfile.js +46 -2
  313. package/dist/server/dev-module-runner.d.ts +2 -1
  314. package/dist/server/dev-server.js +10 -3
  315. package/dist/server/fetch-handler.js +1 -2
  316. package/dist/server/file-based-metadata.d.ts +2 -1
  317. package/dist/server/framework-tracer.d.ts +2 -1
  318. package/dist/server/html.d.ts +1 -0
  319. package/dist/server/html.js +19 -1
  320. package/dist/server/http-conditional.d.ts +2 -1
  321. package/dist/server/http-error-responses.d.ts +2 -1
  322. package/dist/server/implicit-tags.d.ts +2 -1
  323. package/dist/server/isolate-shared-promise.d.ts +10 -0
  324. package/dist/server/isolate-shared-promise.js +33 -0
  325. package/dist/server/isr-cache.js +3 -2
  326. package/dist/server/metadata-route-build-data.d.ts +2 -1
  327. package/dist/server/metadata-route-build-data.js +1 -1
  328. package/dist/server/metadata-route-response.d.ts +2 -1
  329. package/dist/server/metadata-route-response.js +1 -1
  330. package/dist/server/metadata-routes.d.ts +2 -1
  331. package/dist/server/middleware-matcher-pattern.d.ts +0 -1
  332. package/dist/server/middleware-matcher-pattern.js +11 -140
  333. package/dist/server/middleware-matcher.js +5 -6
  334. package/dist/server/middleware-response-headers.d.ts +31 -0
  335. package/dist/server/middleware-response-headers.js +57 -1
  336. package/dist/server/middleware-runtime.d.ts +2 -1
  337. package/dist/server/middleware-runtime.js +26 -13
  338. package/dist/server/navigation-planner.d.ts +2 -2
  339. package/dist/server/navigation-trace.d.ts +2 -1
  340. package/dist/server/next-error-digest.d.ts +2 -1
  341. package/dist/server/nitro-public-files-plugin.d.ts +39 -0
  342. package/dist/server/nitro-public-files-plugin.js +106 -0
  343. package/dist/server/nitro-public-files.d.ts +22 -0
  344. package/dist/server/nitro-public-files.js +39 -0
  345. package/dist/server/opentelemetry-api.d.ts +2 -1
  346. package/dist/server/operation-token.d.ts +2 -1
  347. package/dist/server/pages-api-route.d.ts +2 -1
  348. package/dist/server/pages-asset-tags.d.ts +7 -1
  349. package/dist/server/pages-asset-tags.js +9 -2
  350. package/dist/server/pages-body-parser-config.d.ts +2 -1
  351. package/dist/server/pages-client-assets.d.ts +8 -1
  352. package/dist/server/pages-data-route.d.ts +2 -1
  353. package/dist/server/pages-document-asset-props.d.ts +2 -1
  354. package/dist/server/pages-document-initial-props.d.ts +2 -1
  355. package/dist/server/pages-execution-tracing.d.ts +2 -1
  356. package/dist/server/pages-execution-tracing.js +1 -1
  357. package/dist/server/pages-get-initial-props.d.ts +2 -1
  358. package/dist/server/pages-i18n.d.ts +18 -0
  359. package/dist/server/pages-i18n.js +18 -2
  360. package/dist/server/pages-node-compat.d.ts +5 -3
  361. package/dist/server/pages-node-compat.js +35 -16
  362. package/dist/server/pages-page-data.d.ts +7 -1
  363. package/dist/server/pages-page-data.js +35 -12
  364. package/dist/server/pages-page-handler.d.ts +3 -2
  365. package/dist/server/pages-page-handler.js +16 -7
  366. package/dist/server/pages-page-method.d.ts +2 -1
  367. package/dist/server/pages-page-response.d.ts +2 -1
  368. package/dist/server/pages-preview.d.ts +2 -1
  369. package/dist/server/pages-readiness.d.ts +2 -1
  370. package/dist/server/pages-request-pipeline.d.ts +8 -2
  371. package/dist/server/pages-request-pipeline.js +35 -40
  372. package/dist/server/pages-request-stage-entry.d.ts +2 -1
  373. package/dist/server/pages-request-stage-entry.js +16 -6
  374. package/dist/server/pages-response-stage-entry.d.ts +2 -1
  375. package/dist/server/pages-response-stage-entry.js +1 -1
  376. package/dist/server/pages-revalidate.js +1 -0
  377. package/dist/server/pages-route-data-kind.d.ts +2 -1
  378. package/dist/server/pages-router-entry.js +1 -1
  379. package/dist/server/prerender-cache-life-header.d.ts +2 -1
  380. package/dist/server/prerender-route-params.d.ts +2 -1
  381. package/dist/server/prod-server.d.ts +2 -2
  382. package/dist/server/prod-server.js +80 -36
  383. package/dist/server/proxy-trust.d.ts +6 -0
  384. package/dist/server/proxy-trust.js +12 -6
  385. package/dist/server/request-log.d.ts +2 -1
  386. package/dist/server/request-pipeline.d.ts +5 -0
  387. package/dist/server/request-pipeline.js +12 -1
  388. package/dist/server/request-tracing.d.ts +2 -1
  389. package/dist/server/request-tracing.js +1 -1
  390. package/dist/server/response-start-tracing.js +7 -29
  391. package/dist/server/rsc-render-stream.d.ts +4 -0
  392. package/dist/server/rsc-render-stream.js +25 -0
  393. package/dist/server/seed-cache.d.ts +2 -1
  394. package/dist/server/seed-cache.js +1 -1
  395. package/dist/server/server-reference-loader.js +10 -1
  396. package/dist/server/static-file-cache.d.ts +2 -1
  397. package/dist/server/static-file-cache.js +16 -3
  398. package/dist/server/static-layout-client-reuse-proof.d.ts +2 -1
  399. package/dist/server/worker-revalidation-context.d.ts +2 -1
  400. package/dist/server/worker-stages.d.ts +2 -1
  401. package/dist/server/worker-utils.js +1 -1
  402. package/dist/shims/app.d.ts +2 -1
  403. package/dist/shims/cache-callable-runtime.d.ts +2 -1
  404. package/dist/shims/cache-handler.d.ts +8 -3
  405. package/dist/shims/cache-handler.js +32 -11
  406. package/dist/shims/cache-request-state.d.ts +40 -3
  407. package/dist/shims/cache-request-state.js +70 -5
  408. package/dist/shims/cache-runtime.js +47 -19
  409. package/dist/shims/cache.d.ts +2 -2
  410. package/dist/shims/cache.js +17 -8
  411. package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
  412. package/dist/shims/caught-not-found-boundaries.js +48 -0
  413. package/dist/shims/cdn-purge-routes.d.ts +25 -0
  414. package/dist/shims/cdn-purge-routes.js +77 -0
  415. package/dist/shims/client-locale.js +2 -1
  416. package/dist/shims/client-page-root.d.ts +2 -1
  417. package/dist/shims/config.d.ts +2 -1
  418. package/dist/shims/default-forbidden.d.ts +4 -0
  419. package/dist/shims/default-forbidden.js +18 -0
  420. package/dist/shims/default-not-found.d.ts +0 -5
  421. package/dist/shims/default-not-found.js +5 -41
  422. package/dist/shims/default-unauthorized.d.ts +4 -0
  423. package/dist/shims/default-unauthorized.js +18 -0
  424. package/dist/shims/dynamic.js +17 -4
  425. package/dist/shims/error-boundary.d.ts +39 -3
  426. package/dist/shims/error-boundary.js +31 -16
  427. package/dist/shims/font-google.js +1 -2
  428. package/dist/shims/font-utils.d.ts +3 -2
  429. package/dist/shims/font-utils.js +5 -3
  430. package/dist/shims/form.js +9 -4
  431. package/dist/shims/http-access-error-fallback.d.ts +7 -0
  432. package/dist/shims/http-access-error-fallback.js +47 -0
  433. package/dist/shims/image-props.d.ts +93 -0
  434. package/dist/shims/image-props.js +323 -0
  435. package/dist/shims/image.d.ts +4 -39
  436. package/dist/shims/image.js +4 -319
  437. package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
  438. package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
  439. package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
  440. package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
  441. package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
  442. package/dist/shims/internal/client-reference-loader.d.ts +7 -0
  443. package/dist/shims/internal/client-reference-loader.js +91 -0
  444. package/dist/shims/internal/cookie-serialize.d.ts +2 -1
  445. package/dist/shims/internal/cookies.js +1 -2
  446. package/dist/shims/internal/headers-state.d.ts +9 -0
  447. package/dist/shims/internal/headers-state.js +19 -2
  448. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +6 -2
  449. package/dist/shims/internal/hybrid-client-route-owner-direct.js +31 -14
  450. package/dist/shims/internal/hybrid-client-route-owner.js +8 -8
  451. package/dist/shims/internal/interpolate-as.d.ts +2 -1
  452. package/dist/shims/internal/pages-data-target.d.ts +2 -1
  453. package/dist/shims/internal/pages-data-url.d.ts +2 -1
  454. package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
  455. package/dist/shims/link.js +198 -53
  456. package/dist/shims/metadata.d.ts +32 -11
  457. package/dist/shims/metadata.js +88 -26
  458. package/dist/shims/navigation-errors.d.ts +2 -1
  459. package/dist/shims/navigation.d.ts +23 -3
  460. package/dist/shims/navigation.js +91 -25
  461. package/dist/shims/og.js +35 -10
  462. package/dist/shims/pages-router-runtime.d.ts +2 -1
  463. package/dist/shims/ppr-fallback-shell.d.ts +2 -1
  464. package/dist/shims/request-context.d.ts +13 -0
  465. package/dist/shims/router.js +33 -43
  466. package/dist/shims/server.d.ts +31 -4
  467. package/dist/shims/server.js +58 -10
  468. package/dist/shims/thenable-params.d.ts +6 -1
  469. package/dist/shims/thenable-params.js +11 -2
  470. package/dist/shims/unified-request-context.d.ts +5 -0
  471. package/dist/shims/unified-request-context.js +5 -3
  472. package/dist/typegen.d.ts +2 -1
  473. package/dist/utils/asset-prefix.d.ts +7 -0
  474. package/dist/utils/asset-prefix.js +10 -1
  475. package/dist/utils/client-build-manifest.d.ts +4 -1
  476. package/dist/utils/client-build-manifest.js +20 -6
  477. package/dist/utils/client-entry-manifest.d.ts +13 -0
  478. package/dist/utils/client-entry-manifest.js +20 -1
  479. package/dist/utils/client-reference-chunks.d.ts +45 -0
  480. package/dist/utils/client-reference-chunks.js +30 -0
  481. package/dist/utils/client-runtime-metadata.d.ts +10 -1
  482. package/dist/utils/client-runtime-metadata.js +53 -9
  483. package/dist/utils/compare.d.ts +9 -0
  484. package/dist/utils/compare.js +15 -1
  485. package/dist/utils/lazy-chunks.d.ts +18 -0
  486. package/dist/utils/lazy-chunks.js +27 -1
  487. package/dist/utils/manifest-paths.d.ts +14 -0
  488. package/dist/utils/manifest-paths.js +22 -1
  489. package/dist/utils/middleware-request-headers.d.ts +2 -1
  490. package/dist/utils/path-to-regexp.d.ts +21 -0
  491. package/dist/{server/middleware-path-to-regexp.js → utils/path-to-regexp.js} +14 -11
  492. package/dist/utils/plugin-react-version.d.ts +15 -0
  493. package/dist/utils/plugin-react-version.js +64 -0
  494. package/dist/utils/project.d.ts +2 -1
  495. package/dist/utils/project.js +9 -1
  496. package/dist/utils/public-routes.d.ts +2 -0
  497. package/dist/utils/public-routes.js +18 -7
  498. package/dist/utils/query.d.ts +2 -1
  499. package/dist/utils/sorted-array.d.ts +2 -1
  500. package/dist/utils/vite-cli-invocation.d.ts +2 -1
  501. package/package.json +5 -5
  502. package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
  503. package/dist/server/default-not-found-module.d.ts +0 -19
  504. package/dist/server/default-not-found-module.js +0 -18
  505. package/dist/server/middleware-path-to-regexp.d.ts +0 -13
  506. package/dist/server/rsc-stream-hints.d.ts +0 -21
  507. package/dist/server/rsc-stream-hints.js +0 -227
  508. package/dist/utils/regex-safety.d.ts +0 -17
  509. package/dist/utils/regex-safety.js +0 -789
@@ -1,5 +1,6 @@
1
1
  import path from "../deps/.pnpm/pathslash@0.1.0/deps/pathslash/dist/index.js";
2
2
  import fs from "node:fs";
3
+ import os from "node:os";
3
4
  //#region src/server/dev-lockfile.ts
4
5
  /**
5
6
  * Dev server lock file.
@@ -21,6 +22,9 @@ import fs from "node:fs";
21
22
  * (`process.kill(pid, 0)`), which is good enough for the dev-server
22
23
  * "another server is running" use case. Race conditions on lock acquisition
23
24
  * are tolerated: at worst, two dev servers race and one fails to bind a port.
25
+ * Unlike a `flock()`, the lock file survives a hard restart, so a lock
26
+ * written before the current boot is treated as stale whatever its PID: the
27
+ * PID may now belong to an unrelated process. See `predatesCurrentBoot()`.
24
28
  * - Lock file lives in `<root>/.vinext/dev/lock.json` (mirroring Next.js'
25
29
  * `.next/dev/lock` layout). `.vinext/` is already used by the fonts plugin
26
30
  * to cache self-hosted Google Fonts, so this re-uses the same project-local
@@ -71,6 +75,46 @@ function isPidAlive(pid) {
71
75
  }
72
76
  }
73
77
  /**
78
+ * Slack for the boot-time comparison in `predatesCurrentBoot`. `os.uptime()`
79
+ * has whole-second resolution on some platforms (macOS derives it from
80
+ * `kern.boottime`), so the derived boot time is only accurate to about a
81
+ * second.
82
+ */
83
+ const BOOT_TIME_TOLERANCE_MS = 5e3;
84
+ /**
85
+ * Returns true if a lock with the given `startedAt` was written before the
86
+ * machine last booted.
87
+ *
88
+ * Such a lock was left behind by a session whose exit handler never ran (a
89
+ * crash, a forced restart, power loss). PIDs are handed out again after a
90
+ * boot, so the lock's PID may be held by an unrelated process, and
91
+ * `isPidAlive()` alone would report the dead server as running.
92
+ *
93
+ * The boot time is derived from `Date.now() - os.uptime()`. Stepping the wall
94
+ * clock forward moves it too (`os.uptime()` doesn't change), so a forward
95
+ * step larger than the uptime at which a server started makes its lock look
96
+ * stale, e.g. a VM resuming after the host slept. The second `vinext dev`
97
+ * then takes over, as in the acquisition race tolerated below: Vite moves it
98
+ * to another port, or it fails to bind with `strictPort`.
99
+ *
100
+ * Known limitations, where a lock is still checked by PID alone:
101
+ * - A wall clock that comes back from a reboot behind the previous session
102
+ * (an RTC running slow, or NTP stepping it back) can leave the lock's
103
+ * `startedAt` after the derived boot time.
104
+ * - Windows Fast Startup shuts down by hibernating the kernel, so
105
+ * `os.uptime()` keeps counting across that shutdown.
106
+ * - A container restart doesn't reset the host's uptime.
107
+ */
108
+ function predatesCurrentBoot(startedAt) {
109
+ let uptime;
110
+ try {
111
+ uptime = os.uptime();
112
+ } catch {
113
+ return false;
114
+ }
115
+ return startedAt < Date.now() - uptime * 1e3 - BOOT_TIME_TOLERANCE_MS;
116
+ }
117
+ /**
74
118
  * Writes the lock file with the given content. Creates the parent directory
75
119
  * if it doesn't exist.
76
120
  *
@@ -128,7 +172,7 @@ function tryAcquireLockfile(opts) {
128
172
  const lockfilePath = getLockfilePath(root);
129
173
  const existing = readLockfile(lockfilePath);
130
174
  if (existing) {
131
- if (isPidAlive(existing.pid)) return {
175
+ if (!predatesCurrentBoot(existing.startedAt) && isPidAlive(existing.pid)) return {
132
176
  ok: false,
133
177
  existing,
134
178
  lockfilePath
@@ -178,4 +222,4 @@ function tryAcquireLockfile(opts) {
178
222
  };
179
223
  }
180
224
  //#endregion
181
- export { formatAlreadyRunningError, getLockfilePath, isPidAlive, readLockfile, tryAcquireLockfile };
225
+ export { formatAlreadyRunningError, getLockfilePath, isPidAlive, predatesCurrentBoot, readLockfile, tryAcquireLockfile };
@@ -25,4 +25,5 @@ type DevEnvironmentLike = {
25
25
  * Typically `server.environments["ssr"]`.
26
26
  */
27
27
  export declare function createDirectRunner(environment: DevEnvironmentLike | DevEnvironment): ModuleRunner;
28
- //#endregion
28
+ //#endregion
29
+ export {};
@@ -41,7 +41,7 @@ import { PAGES_PREVIEW_CACHE_CONTROL, appendPagesPreviewClearCookies, getPagesPr
41
41
  import { attachPagesRequestCookies } from "./pages-node-compat.js";
42
42
  import { randomUUID } from "node:crypto";
43
43
  import React from "react";
44
- import { renderToReadableStream } from "react-dom/server.edge";
44
+ import { renderToReadableStream } from "react-dom/server";
45
45
  //#region src/server/dev-server.ts
46
46
  /**
47
47
  * Render a React element to a string using renderToReadableStream.
@@ -112,6 +112,7 @@ function writeGsspRedirect(res, redirect, isDataReq, props, options) {
112
112
  ...props,
113
113
  pageProps: props.pageProps
114
114
  });
115
+ if (options.method === "getServerSideProps" && !res.getHeader("Cache-Control")) res.setHeader("Cache-Control", NEVER_CACHE_CONTROL);
115
116
  const gsspHeaders = Object.fromEntries(Object.entries(res.getHeaders()).filter((entry) => entry[1] !== void 0));
116
117
  if (isDangerousScheme(resolved.destination)) {
117
118
  const deploymentId = process.env.__VINEXT_DEPLOYMENT_ID || process.env.NEXT_DEPLOYMENT_ID;
@@ -643,14 +644,17 @@ function createSSRHandler(server, runner, routes, pagesDir, i18nConfig, fileMatc
643
644
  const deploymentId = process.env.__VINEXT_DEPLOYMENT_ID || process.env.NEXT_DEPLOYMENT_ID;
644
645
  stripDevPagesNotFoundFramingHeaders(res);
645
646
  if (!res.hasHeader("Content-Type")) res.setHeader("Content-Type", "application/json");
647
+ if (!res.getHeader("Cache-Control")) res.setHeader("Cache-Control", NEVER_CACHE_CONTROL);
646
648
  if (deploymentId && !res.hasHeader("x-nextjs-deployment-id")) res.setHeader(NEXTJS_DEPLOYMENT_ID_HEADER, deploymentId);
647
649
  res.writeHead(404);
648
650
  res.end("{\"notFound\":true}");
649
651
  return;
650
652
  }
653
+ if (!res.getHeader("Cache-Control")) res.setHeader("Cache-Control", NEVER_CACHE_CONTROL);
651
654
  await renderErrorPage(server, runner, req, res, url, pagesDir, 404, routerShim.wrapWithRouterContext, void 0, void 0, reactStrictMode, {
652
655
  ...errorPageContext,
653
- notFoundSrcPage: patternToNextFormat(route.pattern)
656
+ notFoundSrcPage: patternToNextFormat(route.pattern),
657
+ cacheControl: requestPreview.data === false && !requestPreview.shouldClear ? DEV_PAGES_CACHE_CONTROL : PAGES_PREVIEW_CACHE_CONTROL
654
658
  });
655
659
  return;
656
660
  }
@@ -1130,7 +1134,8 @@ async function renderErrorPage(server, runner, req, res, url, pagesDir, statusCo
1130
1134
  getTailHeadHTML: () => getClientTraceMetadataHTML(context.clientTraceMetadata),
1131
1135
  setDocumentInitialHead: typeof headShim.setDocumentInitialHead === "function" ? headShim.setDocumentInitialHead : void 0,
1132
1136
  crossOrigin: context.crossOrigin,
1133
- preserveExistingContentType: statusCode === 404
1137
+ preserveExistingContentType: statusCode === 404,
1138
+ extraHeaders: context.cacheControl ? { "Cache-Control": context.cacheControl } : void 0
1134
1139
  });
1135
1140
  else {
1136
1141
  const bodyHtml = await tracePagesDocument(errorPage, () => renderToStringAsync(element));
@@ -1155,6 +1160,7 @@ async function renderErrorPage(server, runner, req, res, url, pagesDir, statusCo
1155
1160
  configuredCrossOrigin: context.crossOrigin,
1156
1161
  protectedAssetMarker
1157
1162
  }), protectedAssetMarker);
1163
+ if (context.cacheControl) res.setHeader("Cache-Control", context.cacheControl);
1158
1164
  res.writeHead(statusCode, statusCode === 404 && res.hasHeader("Content-Type") ? void 0 : { "Content-Type": "text/html; charset=utf-8" });
1159
1165
  res.end(transformedHtml);
1160
1166
  }
@@ -1173,6 +1179,7 @@ async function renderErrorPage(server, runner, req, res, url, pagesDir, statusCo
1173
1179
  defaultResponse.headers.forEach((value, key) => {
1174
1180
  headers[key] = value;
1175
1181
  });
1182
+ if (context.cacheControl) headers["cache-control"] = context.cacheControl;
1176
1183
  res.writeHead(defaultResponse.status, headers);
1177
1184
  res.end(await defaultResponse.text());
1178
1185
  return;
@@ -1,3 +1,2 @@
1
- import virtual_vinext_worker_entry_default from "virtual:vinext-worker-entry";
1
+ export { default } from "virtual:vinext-worker-entry";
2
2
  export * from "virtual:vinext-worker-entry";
3
- export { virtual_vinext_worker_entry_default as default };
@@ -24,4 +24,5 @@ type FileBasedMetadataOptions = {
24
24
  basePath?: string;
25
25
  };
26
26
  export declare function applyFileBasedMetadata(metadata: Metadata | null, routePath: string, params: AppPageParams, metadataRoutes: readonly MetadataFileRoute[] | null | undefined, options?: FileBasedMetadataOptions): Promise<Metadata | null>;
27
- //#endregion
27
+ //#endregion
28
+ export {};
@@ -43,4 +43,5 @@ export type FrameworkTracer = {
43
43
  };
44
44
  export declare function recordFrameworkSpanError(span: FrameworkSpan, error: unknown): void;
45
45
  export declare function createFrameworkTracer(integrations: readonly FrameworkTracingIntegration[]): FrameworkTracer;
46
- //#endregion
46
+ //#endregion
47
+ export {};
@@ -1,5 +1,6 @@
1
1
  //#region src/server/html.d.ts
2
2
  export declare function safeJsonStringify(data: unknown): string;
3
+ export declare function scriptSafeJsonStringify(data: unknown): string;
3
4
  export declare function escapeHtmlAttr(value: string): string;
4
5
  export declare function htmlTokenListContains(value: string | null, token: string): boolean;
5
6
  export declare function createNonceAttribute(nonce?: string): string;
@@ -37,6 +37,24 @@ function safeJsonStringify(data) {
37
37
  if (!HTML_UNSAFE_JSON_CHAR_RE.test(json)) return json;
38
38
  return json.replace(HTML_UNSAFE_JSON_CHARS_RE, escapeHtmlUnsafeJsonChar);
39
39
  }
40
+ /**
41
+ * Minimal escaping for JSON that is only ever embedded as the content of a
42
+ * classic inline <script> element. The HTML spec only forbids "<!--",
43
+ * "<script" and "<\/script" (ASCII case-insensitive) in script content, so
44
+ * only a '<' that begins one of those is escaped; '>' and '&' have no
45
+ * meaning there.
46
+ * https://html.spec.whatwg.org/multipage/scripting.html#restrictions-for-contents-of-script-elements
47
+ *
48
+ * Used for the large RSC payload chunks: leaving markup such as "<p>" intact
49
+ * lets compression match it against the identical SSR markup. Do not use
50
+ * this for values that can land outside a script element.
51
+ */
52
+ const SCRIPT_UNSAFE_JSON_CHARS_RE = /<(?=!--|\/?script)|[\u2028\u2029]/gi;
53
+ function scriptSafeJsonStringify(data) {
54
+ const json = JSON.stringify(data);
55
+ if (json === void 0) throw new TypeError("Cannot serialize value as JSON");
56
+ return json.replace(SCRIPT_UNSAFE_JSON_CHARS_RE, escapeHtmlUnsafeJsonChar);
57
+ }
40
58
  function escapeHtmlAttr(value) {
41
59
  return value.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
42
60
  }
@@ -53,4 +71,4 @@ function createInlineScriptTag(content, nonce) {
53
71
  return `<script${createNonceAttribute(nonce)}>${content}<\/script>`;
54
72
  }
55
73
  //#endregion
56
- export { createInlineScriptTag, createNonceAttribute, escapeHtmlAttr, htmlTokenListContains, safeJsonStringify };
74
+ export { createInlineScriptTag, createNonceAttribute, escapeHtmlAttr, htmlTokenListContains, safeJsonStringify, scriptSafeJsonStringify };
@@ -29,4 +29,5 @@ type StaticConditionalHeaders = {
29
29
  export type StaticPreconditionResult = "proceed" | "not-modified" | "precondition-failed";
30
30
  /** Evaluate static representation preconditions in RFC 9110 section 13.2.2 order. */
31
31
  export declare function evaluateStaticPreconditions(headers: StaticConditionalHeaders, method: string | undefined, etag: string | undefined, mtimeMs: number): StaticPreconditionResult;
32
- //#endregion
32
+ //#endregion
33
+ export {};
@@ -88,4 +88,5 @@ export declare function payloadTooLargeResponse(): Response;
88
88
  * to use the canonical "Internal Server Error" body.
89
89
  */
90
90
  export declare function internalServerErrorResponse(message?: string, init?: ErrorResponseInit): Response;
91
- //#endregion
91
+ //#endregion
92
+ export {};
@@ -2,4 +2,5 @@
2
2
  type AppCacheLeafKind = "page" | "route";
3
3
  export declare function buildAppPageTags(cleanPathname: string, extraTags: string[], routeSegments: readonly string[]): string[];
4
4
  export declare function buildPageCacheTags(pathname: string, extraTags: string[], routeSegments: string[], leafKind: AppCacheLeafKind): string[];
5
- //#endregion
5
+ //#endregion
6
+ export {};
@@ -0,0 +1,10 @@
1
+ import { ExecutionContextLike } from "../shims/request-context.js";
2
+ //#region src/server/isolate-shared-promise.d.ts
3
+ /**
4
+ * Register `promise` with the creating request's `waitUntil()` and return it.
5
+ *
6
+ * @param ctx - The creating request's execution context. Defaults to the one
7
+ * in scope, for callers inside `runWithExecutionContext()`.
8
+ */
9
+ export declare function shareIsolatePromise<T>(promise: Promise<T>, ctx?: Partial<Pick<ExecutionContextLike, "waitUntil">> | null): Promise<T>;
10
+ //#endregion
@@ -0,0 +1,33 @@
1
+ import { getRequestExecutionContext } from "../shims/request-context.js";
2
+ //#region src/server/isolate-shared-promise.ts
3
+ /**
4
+ * Keep the request that creates an isolate-shared promise alive until it
5
+ * settles.
6
+ *
7
+ * workerd binds the I/O a promise waits on (timers, fetches, dynamic
8
+ * `import()` under the legacy module registry) to the request that started it.
9
+ * If that request is canceled first, for example because the client navigated
10
+ * away or aborted a prefetch, the continuations are dropped and the promise
11
+ * never settles. A promise memoized for the isolate is awaited by every later
12
+ * request too, so they would all wait forever. `waitUntil()` keeps the creating
13
+ * request's context running after cancellation, so the work finishes for
14
+ * everyone.
15
+ *
16
+ * Call this only where the shared promise is created. Later requests that
17
+ * merely await it need nothing.
18
+ */
19
+ function ignore() {}
20
+ /**
21
+ * Register `promise` with the creating request's `waitUntil()` and return it.
22
+ *
23
+ * @param ctx - The creating request's execution context. Defaults to the one
24
+ * in scope, for callers inside `runWithExecutionContext()`.
25
+ */
26
+ function shareIsolatePromise(promise, ctx) {
27
+ (typeof ctx?.waitUntil === "function" ? ctx : getRequestExecutionContext())?.waitUntil?.(promise.then(ignore, ignore));
28
+ return promise;
29
+ }
30
+ const SHARE_ISOLATE_PROMISE_KEY = Symbol.for("vinext.shareIsolatePromise");
31
+ globalThis[SHARE_ISOLATE_PROMISE_KEY] ??= shareIsolatePromise;
32
+ //#endregion
33
+ export { shareIsolatePromise };
@@ -4,6 +4,7 @@ import { getRequestExecutionContext } from "../shims/request-context.js";
4
4
  import { isInterceptionMatchedUrlPath } from "./normalize-path.js";
5
5
  import { reportRequestError } from "./instrumentation.js";
6
6
  import { getCdnCacheAdapter } from "../shims/cdn-cache.js";
7
+ import { shareIsolatePromise } from "./isolate-shared-promise.js";
7
8
  import { normalizeMountedSlotsHeader } from "./app-mounted-slots-header.js";
8
9
  import { APP_RSC_RENDER_MODE_NAVIGATION, getRscRenderModeCacheVariant } from "./app-rsc-render-mode.js";
9
10
  import { getRevalidateSecret, isOnDemandRevalidateRequest, isRevalidateSecret } from "./revalidation-request.js";
@@ -93,9 +94,9 @@ const pendingOnDemandRegenerations = _g[_PENDING_ON_DEMAND_REGEN_KEY] ??= /* @__
93
94
  function coalesceOnDemandRevalidation(key, renderFn) {
94
95
  const pending = pendingOnDemandRegenerations.get(key);
95
96
  if (pending) return pending;
96
- const promise = Promise.resolve().then(renderFn).finally(() => {
97
+ const promise = shareIsolatePromise(Promise.resolve().then(renderFn).finally(() => {
97
98
  if (pendingOnDemandRegenerations.get(key) === promise) pendingOnDemandRegenerations.delete(key);
98
- });
99
+ }));
99
100
  pendingOnDemandRegenerations.set(key, promise);
100
101
  return promise;
101
102
  }
@@ -19,4 +19,5 @@ type MetadataRouteEntryData = {
19
19
  export declare function createMetadataRouteEntryData(route: MetadataFileRoute): MetadataRouteEntryData;
20
20
  export declare function createMetadataRouteEntrySource(input: MetadataRouteEntrySourceInput): string;
21
21
  export declare function createMetadataRouteEntriesSource(routes: readonly MetadataFileRoute[], moduleNames: ReadonlyMap<string, string>): string[];
22
- //#endregion
22
+ //#endregion
23
+ export {};
@@ -1,6 +1,6 @@
1
1
  import { routePatternParts } from "../routing/route-pattern.js";
2
2
  import { getMetadataRouteKind } from "./metadata-routes.js";
3
- import imageSize from "../deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js";
3
+ import { imageSize } from "../deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js";
4
4
  import fs from "node:fs";
5
5
  import { createHash } from "node:crypto";
6
6
  //#region src/server/metadata-route-build-data.ts
@@ -37,4 +37,5 @@ export type PrerenderableMetadataRoute = {
37
37
  export declare function getPrerenderableMetadataRoutePaths(metadataRoutes: readonly MetadataRuntimeRoute[]): Promise<PrerenderableMetadataRoute[]>;
38
38
  export declare function isMetadataRouteRequestPath(metadataRoutes: readonly MetadataRuntimeRoute[], cleanPathname: string): boolean;
39
39
  export declare function handleMetadataRouteRequest(options: MetadataRouteRequestOptions): Promise<Response | null>;
40
- //#endregion
40
+ //#endregion
41
+ export {};
@@ -17,8 +17,8 @@ import { ensureFetchPatch, getCollectedFetchTags, setCurrentFetchSoftTags } from
17
17
  import { isValidMetadataImageId, manifestToJson, matchMetadataRoutePattern, robotsToText, sitemapToXml } from "./metadata-routes.js";
18
18
  import { applyPrerenderCacheLifeHeader, applyPrerenderCacheTagsHeader } from "./prerender-cache-life-header.js";
19
19
  import { canonicalizeAppPageParams } from "./app-page-segment-state.js";
20
- import { buildPageCacheTags } from "./implicit-tags.js";
21
20
  import { buildAppRouteCacheValue, buildRouteHandlerCachedResponse } from "./app-route-handler-response.js";
21
+ import { buildPageCacheTags } from "./implicit-tags.js";
22
22
  import { createStaticGenerationHeadersContext } from "./app-static-generation.js";
23
23
  import { completeAppRouteHandlerResponse } from "./app-route-handler-execution.js";
24
24
  //#region src/server/metadata-route-response.ts
@@ -155,4 +155,5 @@ export declare function invalidateMetadataFileCache(): void;
155
155
  * Scan an app directory for metadata files.
156
156
  */
157
157
  export declare function scanMetadataFiles(appDir: string): MetadataFileRoute[];
158
- //#endregion
158
+ //#endregion
159
+ export {};
@@ -6,7 +6,6 @@ export type CompiledMiddlewareMatcherPattern = {
6
6
  } | {
7
7
  regexp?: never;
8
8
  error: string;
9
- kind: "invalid" | "unsafe";
10
9
  };
11
10
  export type MiddlewareMatcherObject = {
12
11
  source: string;
@@ -1,5 +1,4 @@
1
- import { analyzeRegexSafety, mayHaveNamedGroups, regexAtomsMayOverlap } from "../utils/regex-safety.js";
2
- import { middlewarePathTokensToRegExp, normalizeMiddlewarePathTokens, parseMiddlewarePath } from "./middleware-path-to-regexp.js";
1
+ import { normalizePathTokens, parsePathPattern, pathTokensToRegExpSource } from "../utils/path-to-regexp.js";
3
2
  //#region src/server/middleware-matcher-pattern.ts
4
3
  const MATCHER_OBJECT_KEYS = /* @__PURE__ */ new Set([
5
4
  "source",
@@ -52,154 +51,26 @@ function matcherObjectSource(value) {
52
51
  function isValidMiddlewareMatcherObjectConfig(value) {
53
52
  return matcherObjectSource(value).error === void 0;
54
53
  }
55
- function patternMatches(pattern, value) {
56
- try {
57
- return new RegExp(`^(?:${pattern})$`).test(value);
58
- } catch {
59
- return false;
60
- }
61
- }
62
- function atomsOverlap(left, right) {
63
- return regexAtomsMayOverlap(left, right, true);
64
- }
65
- function groupCanMatchEmpty(group) {
66
- if (/^\?(?:[=!]|<[=!])/.test(group)) return true;
67
- return patternMatches(group.startsWith("?:") ? group.slice(2) : group, "");
68
- }
69
- function hasOverlappingSequentialRepetition(pattern) {
70
- const repeatedAtDepth = [[]];
71
- const groupStarts = [];
72
- let depth = 0;
73
- for (let index = 0; index < pattern.length; index++) {
74
- const character = pattern[index];
75
- if (character === "(") {
76
- groupStarts.push(index);
77
- depth++;
78
- repeatedAtDepth[depth] = [];
79
- if (pattern[index + 1] === "?") {
80
- index++;
81
- if (pattern[index + 1] === "<" && /[=!]/.test(pattern[index + 2] ?? "")) index += 2;
82
- else if (/[=:!]/.test(pattern[index + 1] ?? "")) index++;
83
- }
84
- continue;
85
- }
86
- if (character === ")") {
87
- const groupStart = groupStarts.pop();
88
- repeatedAtDepth[depth] = [];
89
- depth = Math.max(0, depth - 1);
90
- if (groupStart !== void 0) {
91
- const modifier = pattern[index + 1];
92
- if (!(modifier === "*" || modifier === "?" || modifier === "{" && /^\{0(?:,\d*)?\}/.test(pattern.slice(index + 1))) && !groupCanMatchEmpty(pattern.slice(groupStart + 1, index))) repeatedAtDepth[depth] = [];
93
- }
94
- continue;
95
- }
96
- if (character === "|") {
97
- repeatedAtDepth[depth] = [];
98
- continue;
99
- }
100
- if (character === "^" || character === "$") continue;
101
- if (character === "*" || character === "+" || character === "?" || character === "{") continue;
102
- let atom = character;
103
- if (character === "\\") {
104
- if (index + 1 >= pattern.length) return true;
105
- atom += pattern[++index];
106
- } else if (character === "[") {
107
- let classEnd = index + 1;
108
- if (pattern[classEnd] === "^") classEnd++;
109
- while (classEnd < pattern.length && pattern[classEnd] !== "]") {
110
- if (pattern[classEnd] === "\\") classEnd++;
111
- classEnd++;
112
- }
113
- if (classEnd >= pattern.length) return true;
114
- atom = pattern.slice(index, classEnd + 1);
115
- index = classEnd;
116
- } else if (character === ".") atom = ".";
117
- const quantifierStart = index + 1;
118
- const quantifier = pattern[quantifierStart];
119
- let unbounded = quantifier === "*" || quantifier === "+";
120
- let canBeEmpty = quantifier === "*";
121
- let quantifierEnd = quantifierStart;
122
- if (quantifier === "{") {
123
- const match = /^\{(\d+),\}/.exec(pattern.slice(quantifierStart));
124
- if (match) {
125
- unbounded = true;
126
- canBeEmpty = Number(match[1]) === 0;
127
- quantifierEnd += match[0].length - 1;
128
- }
129
- }
130
- if (!unbounded) {
131
- if (quantifier !== "?") repeatedAtDepth[depth] = [];
132
- if (quantifier === "?") index = quantifierStart;
133
- continue;
134
- }
135
- if (repeatedAtDepth[depth].some((previous) => atomsOverlap(previous, atom))) return true;
136
- repeatedAtDepth[depth] = canBeEmpty ? [...repeatedAtDepth[depth], atom] : [atom];
137
- index = quantifierEnd;
138
- }
139
- return false;
140
- }
141
- function unsafeTokenReason(token, namedGroups) {
142
- const regexSafetyIssue = analyzeRegexSafety(token.pattern, {
143
- ignoreCase: true,
144
- namedGroups
145
- });
146
- if (regexSafetyIssue) {
147
- if (regexSafetyIssue === "analysis budget exceeded") return `parameter "${token.name}" exceeds the regex analysis budget`;
148
- return `parameter "${token.name}" contains ${regexSafetyIssue}`;
149
- }
150
- if (hasOverlappingSequentialRepetition(token.pattern)) return `parameter "${token.name}" contains overlapping sequential repetition`;
151
- if (token.modifier !== "*" && token.modifier !== "+") return null;
152
- if (patternMatches(token.pattern, "") || patternMatches(token.pattern, "/")) return `repeated parameter "${token.name}" may match an empty value or path delimiter`;
153
- return null;
154
- }
155
- function validateTokens(tokens) {
156
- const namedGroups = tokens.some((token) => typeof token !== "string" && mayHaveNamedGroups(token.pattern));
157
- for (const token of tokens) {
158
- if (typeof token === "string") continue;
159
- const reason = unsafeTokenReason(token, namedGroups);
160
- if (reason) return reason;
161
- }
162
- return null;
54
+ function middlewareRegExp(tokens) {
55
+ return new RegExp(`${pathTokensToRegExpSource(tokens)}[\\/#\\?]?$`);
163
56
  }
164
57
  function compileMiddlewareMatcherPattern(source) {
165
- if (!source.startsWith("/")) return {
166
- kind: "invalid",
167
- error: "source must start with /"
168
- };
169
- if (source.length > 4096) return {
170
- kind: "invalid",
171
- error: "source exceeds max built length of 4096"
172
- };
58
+ if (!source.startsWith("/")) return { error: "source must start with /" };
59
+ if (source.length > 4096) return { error: "source exceeds max built length of 4096" };
173
60
  let tokens;
174
61
  try {
175
- tokens = parseMiddlewarePath(source);
62
+ tokens = parsePathPattern(source);
176
63
  } catch (error) {
177
- return {
178
- kind: "invalid",
179
- error: error instanceof Error ? error.message : "matcher could not be parsed"
180
- };
64
+ return { error: error instanceof Error ? error.message : "matcher could not be parsed" };
181
65
  }
182
- const unsafeReason = validateTokens(tokens);
183
- if (unsafeReason) return {
184
- kind: "unsafe",
185
- error: unsafeReason
186
- };
187
66
  try {
188
- return { regexp: middlewarePathTokensToRegExp(tokens) };
67
+ return { regexp: middlewareRegExp(tokens) };
189
68
  } catch {
190
- const normalizedTokens = normalizeMiddlewarePathTokens(tokens);
191
- const normalizedUnsafeReason = validateTokens(normalizedTokens);
192
- if (normalizedUnsafeReason) return {
193
- kind: "unsafe",
194
- error: normalizedUnsafeReason
195
- };
69
+ const normalizedTokens = normalizePathTokens(tokens);
196
70
  try {
197
- return { regexp: middlewarePathTokensToRegExp(normalizedTokens) };
71
+ return { regexp: middlewareRegExp(normalizedTokens) };
198
72
  } catch (error) {
199
- return {
200
- kind: "invalid",
201
- error: error instanceof Error ? error.message : "matcher could not be compiled"
202
- };
73
+ return { error: error instanceof Error ? error.message : "matcher could not be compiled" };
203
74
  }
204
75
  }
205
76
  }
@@ -8,7 +8,7 @@ const EMPTY_MIDDLEWARE_REQUEST_CONTEXT = {
8
8
  query: new URLSearchParams(),
9
9
  host: ""
10
10
  };
11
- const UNSAFE_MATCHER_PATTERN = Symbol("unsafe matcher pattern");
11
+ const INVALID_MATCHER_PATTERN = Symbol("invalid matcher pattern");
12
12
  const _mwPatternCache = /* @__PURE__ */ new Map();
13
13
  function matchesMiddleware(pathname, matcher, request, i18nConfig, localeContext) {
14
14
  if (!matcher) return true;
@@ -63,7 +63,7 @@ function matchObjectMatcher(pathname, matcher, i18nConfig, localeContext) {
63
63
  return matchPattern(localeContext?.kind === "defaulted" ? `/${localeContext.defaultLocale}${pathname === "/" ? "" : pathname}` : pathname, matcher.source);
64
64
  }
65
65
  function matchNextDataPattern(pathname, source, i18nConfig, localized) {
66
- if (compiledPattern(source) === UNSAFE_MATCHER_PATTERN) return true;
66
+ if (compiledPattern(source) === INVALID_MATCHER_PATTERN) return true;
67
67
  return matchPattern(pathname, nextDataMatcherSource(source, i18nConfig, localized));
68
68
  }
69
69
  /**
@@ -89,7 +89,7 @@ function stripFirstPathSegment(pathname) {
89
89
  function matchPattern(pathname, pattern) {
90
90
  if (pattern === "/" && (pathname === "//" || pathname === "/?" || pathname === "/#")) return false;
91
91
  const compiled = compiledPattern(pattern);
92
- if (compiled === UNSAFE_MATCHER_PATTERN) return true;
92
+ if (compiled === INVALID_MATCHER_PATTERN) return true;
93
93
  return compiled.test(pathname);
94
94
  }
95
95
  function compiledPattern(pattern) {
@@ -103,9 +103,8 @@ function compiledPattern(pattern) {
103
103
  function compileMatcherPattern(pattern) {
104
104
  const result = compileMiddlewareMatcherPattern(pattern);
105
105
  if (result.regexp) return result.regexp;
106
- const problem = result.kind === "unsafe" ? "potentially unsafe" : "invalid";
107
- console.warn(`[vinext] Rejecting ${problem} middleware matcher: ${pattern}\n ${result.error}.\n Middleware will run for all paths to avoid bypassing request guards.`);
108
- return UNSAFE_MATCHER_PATTERN;
106
+ console.warn(`[vinext] Rejecting invalid middleware matcher: ${pattern}\n ${result.error}.\n Middleware will run for all paths to avoid bypassing request guards.`);
107
+ return INVALID_MATCHER_PATTERN;
109
108
  }
110
109
  //#endregion
111
110
  export { matchPattern, matchesMiddleware, matchesMiddlewarePathname };
@@ -8,4 +8,35 @@ export declare function mergeVaryHeader(target: Headers, value: string): void;
8
8
  * response headers like Cache-Control.
9
9
  */
10
10
  export declare function mergeMiddlewareResponseHeaders(target: Headers, middlewareHeaders: Headers | null): void;
11
+ export type MiddlewareResponseMergeOptions = {
12
+ /**
13
+ * Keep the response's WWW-Authenticate and Proxy-Authenticate after
14
+ * middleware's, as Next.js does for App route handlers. Pages API handlers
15
+ * write to the Node response that already holds middleware's headers, so
16
+ * their callers opt out.
17
+ */
18
+ appendResponseChallenges?: boolean;
19
+ };
20
+ /**
21
+ * Merge middleware response headers onto an already-built response's headers.
22
+ *
23
+ * Next.js writes middleware response headers before the handler runs and then
24
+ * appends the handler response's Set-Cookie, WWW-Authenticate and
25
+ * Proxy-Authenticate values, so middleware values come first and the
26
+ * response's own are kept. A handler's cookie for the same name (a logout
27
+ * deletion or session rotation) is then the one the browser applies last.
28
+ */
29
+ export declare function mergeMiddlewareResponseHeadersOntoResponse(target: Headers, middlewareHeaders: Headers | null, options?: MiddlewareResponseMergeOptions): void;
30
+ /**
31
+ * Build the response for an external rewrite from the headers routing staged
32
+ * before proxying.
33
+ *
34
+ * Next.js writes the staged config and middleware headers to its outgoing
35
+ * response and then proxies, and the proxy sets each upstream header over
36
+ * them. Its Set-Cookie patch keeps middleware's cookies ahead of the
37
+ * upstream's, so an upstream cookie replaces a staged config cookie while
38
+ * middleware's are kept. Without an upstream Set-Cookie the staged cookies
39
+ * stay as they are.
40
+ */
41
+ export declare function withExternalRewriteResponseHeaders(upstream: Response, staged: Headers, middlewareCookies: readonly string[]): Response;
11
42
  //#endregion