vinext 1.0.0-beta.0 → 1.0.0-beta.2

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 (305) hide show
  1. package/README.md +21 -2
  2. package/dist/build/assets-ignore.js +1 -1
  3. package/dist/build/clean-output.js +1 -1
  4. package/dist/build/client-build-config.js +7 -4
  5. package/dist/build/css-url-assets.js +3 -3
  6. package/dist/build/google-fonts/fallback-metrics.js +1 -1
  7. package/dist/build/google-fonts/font-metadata.js +1 -1
  8. package/dist/build/inject-pregenerated-paths.js +1 -1
  9. package/dist/build/inline-css.js +2 -5
  10. package/dist/build/module-dependency-cache.d.ts +4 -0
  11. package/dist/build/module-dependency-cache.js +13 -0
  12. package/dist/build/next-client-runtime-manifests.js +1 -1
  13. package/dist/build/pages-client-assets-module.js +1 -1
  14. package/dist/build/precompress.js +7 -7
  15. package/dist/build/prerender-paths.d.ts +2 -2
  16. package/dist/build/prerender-paths.js +10 -15
  17. package/dist/build/prerender-server-pool.js +2 -2
  18. package/dist/build/prerender.js +1 -1
  19. package/dist/build/preview-credentials.d.ts +11 -0
  20. package/dist/build/preview-credentials.js +19 -0
  21. package/dist/build/report.d.ts +8 -4
  22. package/dist/build/report.js +14 -6
  23. package/dist/build/run-prerender.d.ts +2 -11
  24. package/dist/build/run-prerender.js +2 -10
  25. package/dist/build/server-manifest.js +1 -1
  26. package/dist/build/ssr-manifest.d.ts +4 -0
  27. package/dist/build/ssr-manifest.js +10 -6
  28. package/dist/build/standalone.js +37 -37
  29. package/dist/cache/cache-adapters-virtual.d.ts +1 -17
  30. package/dist/cache/cache-adapters-virtual.js +20 -11
  31. package/dist/check.d.ts +0 -16
  32. package/dist/check.js +27 -36
  33. package/dist/cli.js +61 -55
  34. package/dist/client/instrumentation-client-inject.js +1 -1
  35. package/dist/client/pages-router-link-navigation.js +1 -1
  36. package/dist/config/config-matchers.d.ts +13 -37
  37. package/dist/config/config-matchers.js +33 -123
  38. package/dist/config/dotenv.js +1 -1
  39. package/dist/config/next-config.d.ts +7 -3
  40. package/dist/config/next-config.js +84 -15
  41. package/dist/config/prerender.d.ts +2 -2
  42. package/dist/config/prerender.js +7 -15
  43. package/dist/config/request-context.d.ts +14 -0
  44. package/dist/config/request-context.js +26 -0
  45. package/dist/config/server-external-packages.js +1 -1
  46. package/dist/config/tsconfig-paths.js +2 -2
  47. package/dist/{node_modules/.pnpm/am-i-vibing@0.5.0/node_modules → deps/.pnpm/am-i-vibing@0.5.0/deps}/am-i-vibing/dist/detector-1yx2Hoe0.js +2 -2
  48. package/dist/deps/.pnpm/pathslash@0.1.0/deps/pathslash/dist/index.js +50 -0
  49. package/dist/entries/app-rsc-entry.js +39 -14
  50. package/dist/entries/app-rsc-manifest.js +21 -4
  51. package/dist/entries/pages-client-entry.js +6 -5
  52. package/dist/entries/pages-server-entry.js +18 -28
  53. package/dist/entries/runtime-entry-module.js +2 -2
  54. package/dist/index.js +314 -230
  55. package/dist/init-cloudflare.js +1 -1
  56. package/dist/init-platform.js +1 -1
  57. package/dist/init.d.ts +6 -4
  58. package/dist/init.js +25 -27
  59. package/dist/plugins/ast-utils.js +1 -1
  60. package/dist/plugins/dynamic-preload-metadata.js +7 -7
  61. package/dist/plugins/extensionless-dynamic-import.js +1 -1
  62. package/dist/plugins/fonts.js +3 -3
  63. package/dist/plugins/ignore-dynamic-requests.js +13 -8
  64. package/dist/plugins/import-meta-url.js +16 -17
  65. package/dist/plugins/middleware-export-validation.js +1 -1
  66. package/dist/plugins/middleware-server-only.js +2 -2
  67. package/dist/plugins/og-asset-ownership.js +7 -6
  68. package/dist/plugins/og-assets.js +5 -6
  69. package/dist/plugins/optimize-imports.js +12 -13
  70. package/dist/plugins/postcss.js +1 -1
  71. package/dist/plugins/remove-console.js +1 -1
  72. package/dist/plugins/require-context.js +1 -1
  73. package/dist/plugins/sass.js +2 -2
  74. package/dist/plugins/server-externals-manifest.js +1 -1
  75. package/dist/plugins/strip-server-exports.js +1 -1
  76. package/dist/plugins/styled-jsx.js +3 -2
  77. package/dist/plugins/typeof-window.js +1 -1
  78. package/dist/routing/app-route-graph.d.ts +16 -15
  79. package/dist/routing/app-route-graph.js +86 -88
  80. package/dist/routing/app-router.d.ts +0 -5
  81. package/dist/routing/app-router.js +12 -11
  82. package/dist/routing/file-matcher.d.ts +13 -28
  83. package/dist/routing/file-matcher.js +31 -44
  84. package/dist/routing/pages-router.js +26 -32
  85. package/dist/routing/route-matching.d.ts +14 -1
  86. package/dist/routing/route-matching.js +13 -1
  87. package/dist/routing/route-pattern.d.ts +2 -1
  88. package/dist/routing/route-pattern.js +7 -4
  89. package/dist/routing/route-trie.d.ts +5 -1
  90. package/dist/routing/route-trie.js +5 -2
  91. package/dist/server/api-handler.js +41 -33
  92. package/dist/server/app-browser-entry.js +18 -11
  93. package/dist/server/app-browser-history-controller.d.ts +1 -1
  94. package/dist/server/app-browser-history-controller.js +3 -3
  95. package/dist/server/app-browser-navigation-controller.js +4 -2
  96. package/dist/server/app-browser-server-action-client.js +1 -1
  97. package/dist/server/app-elements-wire.d.ts +2 -1
  98. package/dist/server/app-fallback-renderer.d.ts +11 -0
  99. package/dist/server/app-fallback-renderer.js +16 -2
  100. package/dist/server/app-middleware.js +2 -1
  101. package/dist/server/app-page-boundary-render.d.ts +26 -2
  102. package/dist/server/app-page-boundary-render.js +190 -55
  103. package/dist/server/app-page-cache-finalizer.d.ts +1 -1
  104. package/dist/server/app-page-cache.d.ts +1 -1
  105. package/dist/server/app-page-dispatch.d.ts +12 -2
  106. package/dist/server/app-page-dispatch.js +37 -51
  107. package/dist/server/app-page-element-builder.d.ts +8 -2
  108. package/dist/server/app-page-element-builder.js +112 -27
  109. package/dist/server/app-page-execution.d.ts +3 -1
  110. package/dist/server/app-page-execution.js +31 -39
  111. package/dist/server/app-page-head.d.ts +54 -2
  112. package/dist/server/app-page-head.js +164 -78
  113. package/dist/server/app-page-http-access-fallback-metadata.d.ts +29 -0
  114. package/dist/server/app-page-http-access-fallback-metadata.js +106 -0
  115. package/dist/server/app-page-render.d.ts +2 -2
  116. package/dist/server/app-page-render.js +1 -1
  117. package/dist/server/app-page-request.d.ts +12 -0
  118. package/dist/server/app-page-request.js +134 -14
  119. package/dist/server/app-page-route-wiring.d.ts +9 -0
  120. package/dist/server/app-page-route-wiring.js +44 -4
  121. package/dist/server/app-post-middleware-context.d.ts +1 -1
  122. package/dist/server/app-post-middleware-context.js +1 -1
  123. package/dist/server/app-route-handler-dispatch.js +31 -17
  124. package/dist/server/app-route-handler-execution.d.ts +6 -1
  125. package/dist/server/app-route-handler-execution.js +41 -15
  126. package/dist/server/app-route-handler-policy.d.ts +2 -0
  127. package/dist/server/app-route-handler-policy.js +3 -3
  128. package/dist/server/app-route-module-loader.d.ts +3 -1
  129. package/dist/server/app-route-module-loader.js +1 -0
  130. package/dist/server/app-route-tree-prefetch.js +1 -1
  131. package/dist/server/app-rsc-cache-busting.d.ts +1 -1
  132. package/dist/server/app-rsc-cache-busting.js +1 -1
  133. package/dist/server/app-rsc-errors.d.ts +1 -1
  134. package/dist/server/app-rsc-errors.js +12 -2
  135. package/dist/server/app-rsc-handler.d.ts +10 -5
  136. package/dist/server/app-rsc-handler.js +51 -23
  137. package/dist/server/app-rsc-redirect-flight.d.ts +66 -0
  138. package/dist/server/app-rsc-redirect-flight.js +71 -0
  139. package/dist/server/app-rsc-request-normalization.d.ts +3 -2
  140. package/dist/server/app-rsc-request-normalization.js +8 -2
  141. package/dist/server/app-rsc-response-finalizer.d.ts +2 -2
  142. package/dist/server/app-rsc-response-finalizer.js +5 -11
  143. package/dist/server/app-rsc-route-matching.d.ts +20 -0
  144. package/dist/server/app-rsc-route-matching.js +87 -11
  145. package/dist/server/app-segment-config.js +15 -5
  146. package/dist/server/app-server-action-execution.d.ts +3 -1
  147. package/dist/server/app-server-action-execution.js +8 -6
  148. package/dist/server/app-ssr-entry.js +4 -1
  149. package/dist/server/app-ssr-stream.d.ts +2 -7
  150. package/dist/server/app-ssr-stream.js +5 -10
  151. package/dist/server/cache-proof.js +1 -1
  152. package/dist/server/config-headers.d.ts +24 -0
  153. package/dist/server/config-headers.js +52 -0
  154. package/dist/server/default-global-error-module.d.ts +3 -1
  155. package/dist/server/default-not-found-module.d.ts +3 -1
  156. package/dist/server/dev-initial-server-error.d.ts +1 -1
  157. package/dist/server/dev-lockfile.js +2 -3
  158. package/dist/server/dev-route-files.js +1 -1
  159. package/dist/server/dev-server.js +281 -173
  160. package/dist/server/dev-stack-sourcemap.js +4 -3
  161. package/dist/server/headers.d.ts +3 -1
  162. package/dist/server/headers.js +3 -1
  163. package/dist/server/image-optimization.js +2 -2
  164. package/dist/server/implicit-tags.js +2 -1
  165. package/dist/server/instrumentation.js +2 -2
  166. package/dist/server/isr-cache.d.ts +1 -1
  167. package/dist/server/isr-cache.js +1 -1
  168. package/dist/server/metadata-routes.js +4 -4
  169. package/dist/server/middleware-matcher-pattern.d.ts +22 -0
  170. package/dist/server/middleware-matcher-pattern.js +219 -0
  171. package/dist/server/middleware-matcher.d.ts +2 -7
  172. package/dist/server/middleware-matcher.js +13 -60
  173. package/dist/server/middleware-path-to-regexp.d.ts +14 -0
  174. package/dist/server/middleware-path-to-regexp.js +228 -0
  175. package/dist/server/middleware-response-headers.js +1 -1
  176. package/dist/server/middleware-runtime.js +5 -4
  177. package/dist/server/middleware.d.ts +2 -1
  178. package/dist/server/middleware.js +3 -2
  179. package/dist/server/navigation-planner.d.ts +2 -0
  180. package/dist/server/navigation-planner.js +8 -2
  181. package/dist/server/next-error-digest.d.ts +9 -24
  182. package/dist/server/next-error-digest.js +23 -15
  183. package/dist/server/operation-token.js +1 -1
  184. package/dist/server/pages-body-parser-config.js +2 -1
  185. package/dist/server/pages-data-route.d.ts +11 -1
  186. package/dist/server/pages-data-route.js +16 -1
  187. package/dist/server/pages-dev-hydration.d.ts +14 -0
  188. package/dist/server/pages-dev-hydration.js +83 -0
  189. package/dist/server/pages-dev-module-url.js +2 -2
  190. package/dist/server/pages-get-initial-props.d.ts +15 -2
  191. package/dist/server/pages-get-initial-props.js +16 -6
  192. package/dist/server/pages-node-compat.d.ts +13 -6
  193. package/dist/server/pages-node-compat.js +44 -45
  194. package/dist/server/pages-page-data.d.ts +4 -2
  195. package/dist/server/pages-page-data.js +20 -10
  196. package/dist/server/pages-page-handler.d.ts +4 -2
  197. package/dist/server/pages-page-handler.js +74 -43
  198. package/dist/server/pages-page-response.d.ts +2 -2
  199. package/dist/server/pages-page-response.js +1 -1
  200. package/dist/server/pages-preview.d.ts +26 -0
  201. package/dist/server/pages-preview.js +165 -0
  202. package/dist/server/pages-readiness.d.ts +5 -4
  203. package/dist/server/pages-readiness.js +4 -2
  204. package/dist/server/pages-request-pipeline.d.ts +1 -0
  205. package/dist/server/pages-request-pipeline.js +25 -11
  206. package/dist/server/pages-router-entry.js +6 -0
  207. package/dist/server/prerender-route-params.js +2 -2
  208. package/dist/server/prod-server.d.ts +1 -4
  209. package/dist/server/prod-server.js +44 -30
  210. package/dist/server/request-pipeline.d.ts +15 -29
  211. package/dist/server/request-pipeline.js +25 -60
  212. package/dist/server/rsc-stream-hints.js +122 -18
  213. package/dist/server/seed-cache.js +1 -1
  214. package/dist/server/socket-error-backstop.js +1 -1
  215. package/dist/server/static-file-cache.js +7 -8
  216. package/dist/server/worker-utils.js +1 -1
  217. package/dist/shims/app.d.ts +1 -1
  218. package/dist/shims/cache-request-state.d.ts +27 -1
  219. package/dist/shims/cache-request-state.js +60 -1
  220. package/dist/shims/cache-runtime.d.ts +12 -1
  221. package/dist/shims/cache-runtime.js +22 -7
  222. package/dist/shims/cache.d.ts +5 -5
  223. package/dist/shims/cache.js +28 -11
  224. package/dist/shims/constants.js +1 -1
  225. package/dist/shims/document.d.ts +42 -83
  226. package/dist/shims/document.js +62 -53
  227. package/dist/shims/dynamic.d.ts +5 -25
  228. package/dist/shims/dynamic.js +29 -8
  229. package/dist/shims/error-boundary.d.ts +4 -4
  230. package/dist/shims/error.d.ts +22 -6
  231. package/dist/shims/error.js +53 -15
  232. package/dist/shims/fetch-cache.js +13 -4
  233. package/dist/shims/font-google-base.d.ts +11 -4
  234. package/dist/shims/font-local.d.ts +10 -3
  235. package/dist/shims/font-utils.js +1 -1
  236. package/dist/shims/form.d.ts +1 -1
  237. package/dist/shims/head.d.ts +13 -2
  238. package/dist/shims/head.js +6 -6
  239. package/dist/shims/headers.d.ts +28 -31
  240. package/dist/shims/headers.js +115 -53
  241. package/dist/shims/image.d.ts +27 -37
  242. package/dist/shims/image.js +21 -14
  243. package/dist/shims/internal/cookie-serialize.d.ts +3 -1
  244. package/dist/shims/internal/cookie-serialize.js +3 -1
  245. package/dist/shims/internal/hybrid-client-route-owner.js +3 -1
  246. package/dist/shims/internal/pages-data-fetch-dedup.js +5 -3
  247. package/dist/shims/internal/utils.d.ts +3 -3
  248. package/dist/shims/layout-segment-context.d.ts +1 -1
  249. package/dist/shims/legacy-image.d.ts +3 -37
  250. package/dist/shims/legacy-image.js +6 -16
  251. package/dist/shims/link.d.ts +16 -21
  252. package/dist/shims/link.js +25 -13
  253. package/dist/shims/navigation-context-state.d.ts +1 -1
  254. package/dist/shims/navigation-errors.d.ts +2 -1
  255. package/dist/shims/navigation-errors.js +9 -13
  256. package/dist/shims/navigation.d.ts +8 -4
  257. package/dist/shims/navigation.js +29 -18
  258. package/dist/shims/next-shims-augmentations.d.ts +1 -0
  259. package/dist/shims/next-shims-public.d.ts +1 -0
  260. package/dist/shims/public-shim-map.json.js +103 -0
  261. package/dist/shims/readonly-url-search-params.d.ts +3 -3
  262. package/dist/shims/readonly-url-search-params.js +3 -3
  263. package/dist/shims/request-state-types.d.ts +1 -1
  264. package/dist/shims/router-state.d.ts +1 -0
  265. package/dist/shims/router.d.ts +57 -22
  266. package/dist/shims/router.js +178 -46
  267. package/dist/shims/script.d.ts +6 -10
  268. package/dist/shims/script.js +7 -4
  269. package/dist/shims/server.d.ts +45 -22
  270. package/dist/shims/server.js +46 -7
  271. package/dist/shims/slot.d.ts +1 -1
  272. package/dist/shims/thenable-params.js +1 -1
  273. package/dist/shims/unified-request-context.d.ts +1 -1
  274. package/dist/shims/unified-request-context.js +2 -0
  275. package/dist/shims/url-safety.d.ts +1 -1
  276. package/dist/shims/url-safety.js +2 -2
  277. package/dist/typegen.d.ts +8 -2
  278. package/dist/typegen.js +84 -25
  279. package/dist/utils/client-build-manifest.js +2 -2
  280. package/dist/utils/client-entry-manifest.js +1 -1
  281. package/dist/utils/client-runtime-metadata.js +1 -1
  282. package/dist/utils/commonjs-loader.js +3 -3
  283. package/dist/utils/domain-locale.d.ts +2 -2
  284. package/dist/utils/external-url.d.ts +5 -0
  285. package/dist/utils/external-url.js +7 -0
  286. package/dist/utils/mdx-scan.js +1 -1
  287. package/dist/utils/path.d.ts +1 -13
  288. package/dist/utils/path.js +1 -15
  289. package/dist/utils/plugin-options.d.ts +4 -0
  290. package/dist/utils/plugin-options.js +8 -0
  291. package/dist/utils/project.d.ts +0 -6
  292. package/dist/utils/project.js +2 -8
  293. package/dist/utils/public-routes.js +2 -2
  294. package/dist/utils/react-version.js +1 -1
  295. package/dist/utils/redirect-digest.d.ts +9 -0
  296. package/dist/utils/redirect-digest.js +25 -0
  297. package/dist/utils/regex-safety.d.ts +8 -0
  298. package/dist/utils/regex-safety.js +737 -0
  299. package/dist/utils/vinext-root.js +1 -1
  300. package/dist/utils/vite-version.d.ts +5 -2
  301. package/dist/utils/vite-version.js +43 -17
  302. package/package.json +16 -4
  303. /package/dist/build/google-fonts/{fallback-metrics-data.js → fallback-metrics-data.json.js} +0 -0
  304. /package/dist/build/google-fonts/{font-data.js → font-data.json.js} +0 -0
  305. /package/dist/{node_modules/.pnpm/process-ancestry@0.1.0/node_modules → deps/.pnpm/process-ancestry@0.1.0/deps}/process-ancestry/dist/index.js +0 -0
@@ -1,5 +1,6 @@
1
1
  import { AppRouterContext } from "./internal/app-router-context.js";
2
2
  import { RouterContext } from "./internal/router-context.js";
3
+ import Head from "./head.js";
3
4
  import { isNextRouterError } from "./navigation-errors.js";
4
5
  import "./navigation.js";
5
6
  import { useUntrackedPathname } from "./internal/navigation-untracked.js";
@@ -16,32 +17,69 @@ import React from "react";
16
17
  * (`unstable_catchError`) and its `ErrorInfo` type, mirroring
17
18
  * `next/error`'s public surface.
18
19
  */
19
- function ErrorComponent({ statusCode, title }) {
20
- const displayTitle = title ?? (statusCode === 404 ? "This page could not be found" : "Internal Server Error");
21
- return React.createElement("div", { style: {
22
- fontFamily: "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif",
20
+ const statusCodes = {
21
+ 400: "Bad Request",
22
+ 404: "This page could not be found",
23
+ 405: "Method Not Allowed",
24
+ 500: "Internal Server Error"
25
+ };
26
+ function getErrorInitialProps({ err, req, res }) {
27
+ const statusCode = res?.statusCode ? res.statusCode : err ? err.statusCode : 404;
28
+ let hostname;
29
+ if (typeof window !== "undefined") hostname = window.location.hostname;
30
+ else if (req) {
31
+ if (req.url) try {
32
+ hostname = new URL(req.url).hostname;
33
+ } catch {}
34
+ if (!hostname) {
35
+ const host = Array.isArray(req.headers?.host) ? req.headers.host[0] : req.headers?.host;
36
+ if (host) hostname = new URL(`http://${host}`).hostname;
37
+ }
38
+ }
39
+ return {
40
+ statusCode,
41
+ hostname
42
+ };
43
+ }
44
+ const styles = {
45
+ error: {
46
+ fontFamily: "system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"",
23
47
  height: "100vh",
24
48
  textAlign: "center",
25
49
  display: "flex",
26
50
  flexDirection: "column",
27
51
  alignItems: "center",
28
52
  justifyContent: "center"
29
- } }, React.createElement("div", null, React.createElement("h1", { style: {
53
+ },
54
+ desc: { lineHeight: "48px" },
55
+ h1: {
30
56
  display: "inline-block",
31
57
  margin: "0 20px 0 0",
32
- padding: "0 23px 0 0",
58
+ paddingRight: 23,
33
59
  fontSize: 24,
34
60
  fontWeight: 500,
35
- verticalAlign: "top",
36
- lineHeight: "49px",
37
- borderRight: "1px solid rgba(0, 0, 0, .3)"
38
- } }, statusCode), React.createElement("div", { style: { display: "inline-block" } }, React.createElement("h2", { style: {
61
+ verticalAlign: "top"
62
+ },
63
+ h2: {
39
64
  fontSize: 14,
40
65
  fontWeight: 400,
41
- lineHeight: "49px",
42
- margin: 0
43
- } }, displayTitle + "."))));
44
- }
66
+ lineHeight: "28px"
67
+ },
68
+ wrap: { display: "inline-block" }
69
+ };
70
+ var ErrorComponent = class extends React.Component {
71
+ static displayName = "ErrorPage";
72
+ static getInitialProps = getErrorInitialProps;
73
+ static origGetInitialProps = getErrorInitialProps;
74
+ render() {
75
+ const { statusCode, hostname, title: customTitle, withDarkMode = true } = this.props;
76
+ const title = customTitle || statusCodes[statusCode] || "An unexpected error has occurred";
77
+ return React.createElement("div", { style: styles.error }, React.createElement(Head, null, React.createElement("title", null, statusCode ? `${statusCode}: ${title}` : "Application error: a client-side exception has occurred")), React.createElement("div", { style: styles.desc }, React.createElement("style", { dangerouslySetInnerHTML: { __html: `body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}${withDarkMode ? "@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}" : ""}` } }), statusCode ? React.createElement("h1", {
78
+ className: "next-error-h1",
79
+ style: styles.h1
80
+ }, statusCode) : null, React.createElement("div", { style: styles.wrap }, React.createElement("h2", { style: styles.h2 }, customTitle || statusCode ? `${title}.` : `Application error: a client-side exception has occurred${hostname ? ` while loading ${hostname}` : ""} (see the browser console for more information).`))));
81
+ }
82
+ };
45
83
  const _CatchErrorAppRouterContext = AppRouterContext ?? React.createContext(null);
46
84
  var _CatchError = class extends React.Component {
47
85
  static contextType = _CatchErrorAppRouterContext;
@@ -81,7 +119,7 @@ var _CatchError = class extends React.Component {
81
119
  if (this.state.error) {
82
120
  const Fallback = this.props.fallback;
83
121
  const errorInfo = {
84
- error: this.state.error.thrownValue,
122
+ error: this.state.error.thrownValue instanceof Error ? this.state.error.thrownValue : new Error(String(this.state.error.thrownValue)),
85
123
  reset: this.reset,
86
124
  unstable_retry: this.unstable_retry
87
125
  };
@@ -3,7 +3,7 @@ import { getRequestContext, isInsideUnifiedScope, runWithUnifiedStateMutation }
3
3
  import { getRequestExecutionContext } from "./request-context.js";
4
4
  import { getDataCacheHandler } from "./cache-handler.js";
5
5
  import { markDynamicUsage } from "./headers.js";
6
- import { _setRequestScopedCacheLife } from "./cache-request-state.js";
6
+ import { _hasPendingRevalidatedTag, _setRequestScopedCacheLife } from "./cache-request-state.js";
7
7
  import { encodeCacheTags } from "../utils/encode-cache-tag.js";
8
8
  //#region src/shims/fetch-cache.ts
9
9
  /**
@@ -371,7 +371,7 @@ async function writeFetchCacheResponse(handler, cacheKey, response, tags, revali
371
371
  }
372
372
  async function lowerFetchCacheRevalidateIfNeeded(handler, cacheKey, cachedValue, tags, revalidateSeconds) {
373
373
  if (!Number.isFinite(revalidateSeconds) || revalidateSeconds <= 0 || typeof cachedValue.revalidate !== "number" || cachedValue.revalidate <= revalidateSeconds) return;
374
- const mergedTags = Array.from(new Set([...cachedValue.tags ?? [], ...tags]));
374
+ const mergedTags = Array.from(/* @__PURE__ */ new Set([...cachedValue.tags ?? [], ...tags]));
375
375
  const updatedValue = {
376
376
  ...cachedValue,
377
377
  tags: mergedTags,
@@ -639,13 +639,22 @@ function createPatchedFetch() {
639
639
  throw err;
640
640
  }
641
641
  const handler = getDataCacheHandler();
642
+ let mustBypassPendingRevalidation = _hasPendingRevalidatedTag([...tags, ...softTags]);
642
643
  try {
643
- const cached = await handler.get(cacheKey, {
644
+ let cached = mustBypassPendingRevalidation ? null : await handler.get(cacheKey, {
644
645
  kind: "FETCH",
645
646
  tags,
646
647
  softTags,
647
648
  revalidate: revalidateSeconds
648
649
  });
650
+ if (cached?.value?.kind === "FETCH" && _hasPendingRevalidatedTag([
651
+ ...cached.value.tags ?? [],
652
+ ...tags,
653
+ ...softTags
654
+ ])) {
655
+ mustBypassPendingRevalidation = true;
656
+ cached = null;
657
+ }
649
658
  if (cached?.value && cached.value.kind === "FETCH" && cached.cacheState !== "stale") {
650
659
  await lowerFetchCacheRevalidateIfNeeded(handler, cacheKey, cached.value, tags, revalidateSeconds);
651
660
  const cachedData = cached.value.data;
@@ -679,7 +688,7 @@ function createPatchedFetch() {
679
688
  } catch (cacheErr) {
680
689
  console.error("[vinext] fetch cache read error:", cacheErr);
681
690
  }
682
- const response = await dedupeFetch(input, fetchInit);
691
+ const response = await (mustBypassPendingRevalidation ? originalFetch(input, fetchInit) : dedupeFetch(input, fetchInit));
683
692
  const cacheValue = await buildFetchCacheValue(response, tags, revalidateSeconds);
684
693
  if (cacheValue) handler.set(cacheKey, cacheValue, {
685
694
  fetchCache: true,
@@ -1,7 +1,8 @@
1
1
  import { FontStyle } from "./font-utils.js";
2
2
 
3
3
  //#region src/shims/font-google-base.d.ts
4
- type FontOptions = {
4
+ type CssVariable = `--${string}`;
5
+ type FontOptions<T extends CssVariable | undefined = CssVariable | undefined> = {
5
6
  weight?: string | string[];
6
7
  style?: string | string[];
7
8
  subsets?: string[];
@@ -9,7 +10,7 @@ type FontOptions = {
9
10
  preload?: boolean;
10
11
  fallback?: string[];
11
12
  adjustFontFallback?: boolean | string;
12
- variable?: string;
13
+ variable?: T;
13
14
  axes?: string[];
14
15
  };
15
16
  type FontResult = {
@@ -24,7 +25,7 @@ type InternalGoogleFontRuntimeOptions = {
24
25
  fontWeight?: number;
25
26
  fontStyle?: "normal" | "italic";
26
27
  };
27
- type FontLoaderOptions = FontOptions & {
28
+ type FontLoaderOptions<T extends CssVariable | undefined = CssVariable | undefined> = FontOptions<T> & {
28
29
  /**
29
30
  * Internal payload injected by the vinext:google-fonts transform after
30
31
  * metadata validation. Runtime must prefer these values over user options
@@ -76,7 +77,13 @@ declare function getSSRFontPreloads(): Array<{
76
77
  href: string;
77
78
  type: string;
78
79
  }>;
79
- type FontLoader = (options?: FontLoaderOptions) => FontResult;
80
+ type NextFont = Omit<FontResult, "variable"> & {
81
+ variable?: undefined;
82
+ };
83
+ type NextFontWithVariable = Omit<NextFont, "variable"> & {
84
+ variable: string;
85
+ };
86
+ type FontLoader = <T extends CssVariable | undefined = undefined>(options?: FontLoaderOptions<T>) => T extends undefined ? NextFont : NextFontWithVariable;
80
87
  declare function createFontLoader(family: string): FontLoader;
81
88
  declare const googleFonts: Record<string, FontLoader>;
82
89
  //#endregion
@@ -6,14 +6,15 @@ type LocalFontSrc = {
6
6
  weight?: string;
7
7
  style?: string;
8
8
  };
9
- type LocalFontOptions = {
9
+ type CssVariable = `--${string}`;
10
+ type LocalFontOptions<T extends CssVariable | undefined = CssVariable | undefined> = {
10
11
  src: string | LocalFontSrc | LocalFontSrc[];
11
12
  display?: string;
12
13
  weight?: string;
13
14
  style?: string;
14
15
  fallback?: string[];
15
16
  preload?: boolean;
16
- variable?: string;
17
+ variable?: T;
17
18
  adjustFontFallback?: boolean | string;
18
19
  declarations?: Array<{
19
20
  prop: string;
@@ -30,6 +31,12 @@ type FontResult = {
30
31
  style: FontStyle;
31
32
  variable?: string;
32
33
  };
34
+ type NextFont = Omit<FontResult, "variable"> & {
35
+ variable?: undefined;
36
+ };
37
+ type NextFontWithVariable = Omit<NextFont, "variable"> & {
38
+ variable: string;
39
+ };
33
40
  /**
34
41
  * Get collected SSR font styles (used by the renderer).
35
42
  * Note: We don't clear the arrays because fonts are loaded at module import
@@ -45,6 +52,6 @@ declare function getSSRFontPreloads(): Array<{
45
52
  href: string;
46
53
  type: string;
47
54
  }>;
48
- declare function localFont(options: LocalFontOptions): FontResult;
55
+ declare function localFont<T extends CssVariable | undefined = undefined>(options: LocalFontOptions<T>): T extends undefined ? NextFont : NextFontWithVariable;
49
56
  //#endregion
50
57
  export { localFont as default, getSSRFontPreloads, getSSRFontStyles };
@@ -30,7 +30,7 @@ function sanitizeCSSVarName(name) {
30
30
  * crafted fallback values like `); } body { color: red; } .x {`.
31
31
  */
32
32
  function sanitizeFallback(name) {
33
- const generics = new Set([
33
+ const generics = /* @__PURE__ */ new Set([
34
34
  "serif",
35
35
  "sans-serif",
36
36
  "monospace",
@@ -16,6 +16,6 @@ declare const Form: import("react").ForwardRefExoticComponent<{
16
16
  * In pages dir, prefetch is not supported and the prop has no effect.
17
17
  */
18
18
  prefetch?: false | null;
19
- } & Omit<FormHTMLAttributes<HTMLFormElement>, "method" | "encType" | "target"> & import("react").RefAttributes<HTMLFormElement>>;
19
+ } & Omit<FormHTMLAttributes<HTMLFormElement>, "encType" | "method" | "target"> & import("react").RefAttributes<HTMLFormElement>>;
20
20
  //#endregion
21
21
  export { createFormSubmitDestinationUrl, Form as default, useActionState };
@@ -28,6 +28,17 @@ declare function resetSSRHead(): void;
28
28
  * Pass an empty array (or simply don't call this) to skip the merge.
29
29
  */
30
30
  declare function setDocumentInitialHead(head: React.ReactNode[]): void;
31
+ /**
32
+ * Default head tags emitted alongside every Pages Router render — charset
33
+ * first, then viewport. Mirrors Next.js's `defaultHead()` in
34
+ * `packages/next/src/shared/lib/head.tsx`, which seeds the head array used
35
+ * by `HeadManagerContext` before any user `<Head>` reduces over it.
36
+ *
37
+ * The canonical Next.js order is `<meta charset>` then `<meta viewport>`
38
+ * then user tags, all with `data-next-head=""`. See assertion in
39
+ * `test/e2e/next-head/index.test.ts`.
40
+ */
41
+ declare function defaultHead(): React.ReactElement[];
31
42
  /** Get collected head HTML. Call after render. */
32
43
  declare function getSSRHeadHTML(): string;
33
44
  type HeadDOMElement = Pick<HTMLElement, "innerHTML" | "setAttribute" | "textContent">;
@@ -68,6 +79,6 @@ declare function _applyHeadPropsToElement(domEl: HeadDOMElement, props: Record<s
68
79
  declare function _syncClientHead(): void;
69
80
  declare function Head({
70
81
  children
71
- }: HeadProps): null;
82
+ }: HeadProps): React.ReactElement;
72
83
  //#endregion
73
- export { _applyHeadPropsToElement, _clientHeadChildren, _registerHeadStateAccessors, _syncClientHead, Head as default, escapeAttr, escapeInlineContent, getSSRHeadHTML, isSafeAttrName, reduceHeadChildren, resetSSRHead, setDocumentInitialHead };
84
+ export { _applyHeadPropsToElement, _clientHeadChildren, _registerHeadStateAccessors, _syncClientHead, Head as default, defaultHead, escapeAttr, escapeInlineContent, getSSRHeadHTML, isSafeAttrName, reduceHeadChildren, resetSSRHead, setDocumentInitialHead };
@@ -80,7 +80,7 @@ function getSSRHeadHTML() {
80
80
  * Tags allowed inside <head>. Anything else is silently dropped.
81
81
  * This prevents injection of dangerous elements like <iframe>, <object>, etc.
82
82
  */
83
- const ALLOWED_HEAD_TAGS = new Set([
83
+ const ALLOWED_HEAD_TAGS = /* @__PURE__ */ new Set([
84
84
  "title",
85
85
  "meta",
86
86
  "link",
@@ -97,13 +97,13 @@ const META_TYPES = [
97
97
  "itemProp"
98
98
  ];
99
99
  /** Self-closing tags: no inner content, emit as <tag ... /> */
100
- const SELF_CLOSING_HEAD_TAGS = new Set([
100
+ const SELF_CLOSING_HEAD_TAGS = /* @__PURE__ */ new Set([
101
101
  "meta",
102
102
  "link",
103
103
  "base"
104
104
  ]);
105
105
  /** Tags whose content is raw text — closing-tag sequences must be escaped during SSR. */
106
- const RAW_CONTENT_TAGS = new Set(["script", "style"]);
106
+ const RAW_CONTENT_TAGS = /* @__PURE__ */ new Set(["script", "style"]);
107
107
  const INLINE_CLOSE_TAG_RES = {
108
108
  script: /<\/(script)/gi,
109
109
  style: /<\/(style)/gi
@@ -323,7 +323,7 @@ function Head({ children }) {
323
323
  if (headInstanceIdRef.current === null) headInstanceIdRef.current = Symbol("vinext-head");
324
324
  if (typeof window === "undefined") {
325
325
  _getSSRHeadChildren().push(children);
326
- return null;
326
+ return React.createElement(React.Fragment);
327
327
  }
328
328
  useEffect(() => {
329
329
  const instanceId = headInstanceIdRef.current;
@@ -334,7 +334,7 @@ function Head({ children }) {
334
334
  _syncClientHead();
335
335
  };
336
336
  }, [children]);
337
- return null;
337
+ return React.createElement(React.Fragment);
338
338
  }
339
339
  //#endregion
340
- export { _applyHeadPropsToElement, _clientHeadChildren, _registerHeadStateAccessors, _syncClientHead, Head as default, escapeAttr, escapeInlineContent, getSSRHeadHTML, isSafeAttrName, reduceHeadChildren, resetSSRHead, setDocumentInitialHead };
340
+ export { _applyHeadPropsToElement, _clientHeadChildren, _registerHeadStateAccessors, _syncClientHead, Head as default, defaultHead, escapeAttr, escapeInlineContent, getSSRHeadHTML, isSafeAttrName, reduceHeadChildren, resetSSRHead, setDocumentInitialHead };
@@ -1,4 +1,6 @@
1
1
  import { RenderRequestApiKind } from "../server/cache-proof.js";
2
+ import { ReadonlyRequestCookies } from "@vinext/types/next/upstream/dist/server/web/spec-extension/adapters/request-cookies";
3
+ import { ResponseCookie } from "@vinext/types/next/upstream/dist/compiled/@edge-runtime/cookies/index";
2
4
 
3
5
  //#region src/shims/headers.d.ts
4
6
  type HeadersContext = {
@@ -27,6 +29,8 @@ type VinextHeadersShimState = {
27
29
  phase: HeadersAccessPhase;
28
30
  };
29
31
  type ConnectionProbeState = {
32
+ active: boolean;
33
+ dynamicUsageTarget: VinextHeadersShimState;
30
34
  interrupted: boolean;
31
35
  interrupt: () => void;
32
36
  pending: Promise<never>;
@@ -47,6 +51,16 @@ type ConnectionProbeResult<T> = {
47
51
  * Called by connection(), cookies(), headers(), and noStore().
48
52
  */
49
53
  declare function markDynamicUsage(): void;
54
+ /**
55
+ * Measure dynamic usage in a child async scope without clearing the parent.
56
+ * Concurrent work that already belongs to the request (such as deferred
57
+ * metadata) keeps writing to the parent state and therefore remains visible
58
+ * to the final cache policy.
59
+ */
60
+ declare function runWithIsolatedDynamicUsage<T>(fn: () => T | Promise<T>): Promise<{
61
+ result: T;
62
+ dynamicDetected: boolean;
63
+ }>;
50
64
  declare function markRenderRequestApiUsage(kind: RenderRequestApiKind): void;
51
65
  declare function throwIfStaticGenerationAccessError(): void;
52
66
  declare function runWithConnectionProbe<T>(fn: () => T | Promise<T>): Promise<ConnectionProbeResult<T>>;
@@ -162,11 +176,8 @@ declare function headersContextFromRequest(request: Request, options?: HeadersCo
162
176
  * the context is already available).
163
177
  */
164
178
  declare function headers(): Promise<Headers> & Headers;
165
- /**
166
- * Cookie jar from the incoming request.
167
- * Returns a ReadonlyRequestCookies-like object.
168
- */
169
- declare function cookies(): Promise<RequestCookies> & RequestCookies;
179
+ type VinextReadonlyRequestCookies = Omit<ReadonlyRequestCookies, keyof RequestCookies> & RequestCookies;
180
+ declare function cookies(): Promise<VinextReadonlyRequestCookies> & VinextReadonlyRequestCookies;
170
181
  /** Accumulated Set-Cookie headers from cookies().set() / .delete() calls */
171
182
  /**
172
183
  * Get and clear all pending Set-Cookie headers generated by cookies().set()/delete().
@@ -179,6 +190,12 @@ declare function getAndClearPendingCookies(): string[];
179
190
  */
180
191
  declare function getDraftModeCookieHeader(): string | null;
181
192
  declare function isDraftModeRequest(request: Request, draftModeSecret: string): boolean;
193
+ /**
194
+ * Read draft mode from the live request context without recording request API
195
+ * usage. `null` means there is no active request context, which lets framework
196
+ * callers fall back to an explicitly supplied request when needed.
197
+ */
198
+ declare function getActiveDraftModeState(): boolean | null;
182
199
  /**
183
200
  * Read the active request's draft-mode state without recording request API usage.
184
201
  * Internal cache implementations use this to bypass persistent reads and writes,
@@ -223,39 +240,19 @@ declare class RequestCookies {
223
240
  * Set a cookie. In Route Handlers and Server Actions, this produces
224
241
  * a Set-Cookie header on the response.
225
242
  */
226
- set(nameOrOptions: string | {
227
- name: string;
228
- value: string;
229
- path?: string;
230
- domain?: string;
231
- maxAge?: number;
232
- expires?: Date;
233
- httpOnly?: boolean;
234
- secure?: boolean;
235
- sameSite?: "Strict" | "Lax" | "None";
236
- }, value?: string, options?: {
237
- path?: string;
238
- domain?: string;
239
- maxAge?: number;
240
- expires?: Date;
241
- httpOnly?: boolean;
242
- secure?: boolean;
243
- sameSite?: "Strict" | "Lax" | "None";
244
- }): this;
243
+ set(options: ResponseCookie): this;
244
+ set(key: string, value: string, cookie?: Partial<ResponseCookie>): this;
245
245
  /**
246
246
  * Delete a cookie by emitting an expired Set-Cookie header.
247
247
  */
248
- delete(nameOrOptions: string | {
249
- name: string;
250
- path?: string;
251
- domain?: string;
252
- }): this;
248
+ delete(name: string): this;
249
+ delete(options: Omit<ResponseCookie, "value" | "expires">): this;
253
250
  get size(): number;
254
- [Symbol.iterator](): IterableIterator<[string, {
251
+ [Symbol.iterator](): MapIterator<[string, {
255
252
  name: string;
256
253
  value: string;
257
254
  }]>;
258
255
  toString(): string;
259
256
  }
260
257
  //#endregion
261
- export { HeadersAccessPhase, HeadersContext, type RequestCookies, VinextHeadersShimState, applyMiddlewareRequestHeaders, consumeDynamicUsage, consumeInvalidDynamicUsageError, consumeRenderRequestApiUsage, cookies, draftMode, getAndClearPendingCookies, getDraftModeCookieHeader, getHeadersAccessPhase, getHeadersContext, headers, headersContextFromRequest, isDraftModeEnabled, isDraftModeRequest, markDynamicUsage, markRenderRequestApiUsage, peekDynamicUsage, peekRenderRequestApiUsage, runWithConnectionProbe, runWithHeadersContext, setHeadersAccessPhase, setHeadersContext, suspendConnectionProbe, throwIfInsideCacheScope, throwIfStaticGenerationAccessError };
258
+ export { HeadersAccessPhase, HeadersContext, type RequestCookies, VinextHeadersShimState, applyMiddlewareRequestHeaders, consumeDynamicUsage, consumeInvalidDynamicUsageError, consumeRenderRequestApiUsage, cookies, draftMode, getActiveDraftModeState, getAndClearPendingCookies, getDraftModeCookieHeader, getHeadersAccessPhase, getHeadersContext, headers, headersContextFromRequest, isDraftModeEnabled, isDraftModeRequest, markDynamicUsage, markRenderRequestApiUsage, peekDynamicUsage, peekRenderRequestApiUsage, runWithConnectionProbe, runWithHeadersContext, runWithIsolatedDynamicUsage, setHeadersAccessPhase, setHeadersContext, suspendConnectionProbe, throwIfInsideCacheScope, throwIfStaticGenerationAccessError };