vinext 0.0.51 → 0.0.52

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 (307) hide show
  1. package/dist/build/precompress.d.ts +7 -7
  2. package/dist/build/precompress.js +18 -17
  3. package/dist/build/precompress.js.map +1 -1
  4. package/dist/build/prerender.d.ts +3 -14
  5. package/dist/build/prerender.js +40 -40
  6. package/dist/build/prerender.js.map +1 -1
  7. package/dist/check.js +4 -0
  8. package/dist/check.js.map +1 -1
  9. package/dist/cli-args.d.ts +1 -0
  10. package/dist/cli-args.js +5 -0
  11. package/dist/cli-args.js.map +1 -1
  12. package/dist/cli.js +39 -0
  13. package/dist/cli.js.map +1 -1
  14. package/dist/client/navigation-runtime.d.ts +47 -0
  15. package/dist/client/navigation-runtime.js +156 -0
  16. package/dist/client/navigation-runtime.js.map +1 -0
  17. package/dist/client/pages-router-link-navigation.d.ts +26 -0
  18. package/dist/client/pages-router-link-navigation.js +14 -0
  19. package/dist/client/pages-router-link-navigation.js.map +1 -0
  20. package/dist/client/vinext-next-data.d.ts +12 -2
  21. package/dist/client/vinext-next-data.js +50 -1
  22. package/dist/client/vinext-next-data.js.map +1 -0
  23. package/dist/cloudflare/kv-cache-handler.js +2 -1
  24. package/dist/cloudflare/kv-cache-handler.js.map +1 -1
  25. package/dist/config/config-matchers.d.ts +63 -16
  26. package/dist/config/config-matchers.js +143 -8
  27. package/dist/config/config-matchers.js.map +1 -1
  28. package/dist/config/next-config.d.ts +20 -2
  29. package/dist/config/next-config.js +11 -1
  30. package/dist/config/next-config.js.map +1 -1
  31. package/dist/deploy.js +101 -39
  32. package/dist/deploy.js.map +1 -1
  33. package/dist/entries/app-browser-entry.js +9 -3
  34. package/dist/entries/app-browser-entry.js.map +1 -1
  35. package/dist/entries/app-rsc-entry.js +53 -13
  36. package/dist/entries/app-rsc-entry.js.map +1 -1
  37. package/dist/entries/app-rsc-manifest.d.ts +1 -0
  38. package/dist/entries/app-rsc-manifest.js +53 -6
  39. package/dist/entries/app-rsc-manifest.js.map +1 -1
  40. package/dist/entries/app-ssr-entry.d.ts +3 -3
  41. package/dist/entries/app-ssr-entry.js +4 -4
  42. package/dist/entries/app-ssr-entry.js.map +1 -1
  43. package/dist/entries/pages-client-entry.js +18 -2
  44. package/dist/entries/pages-client-entry.js.map +1 -1
  45. package/dist/entries/pages-server-entry.js +58 -8
  46. package/dist/entries/pages-server-entry.js.map +1 -1
  47. package/dist/entries/runtime-entry-module.d.ts +2 -1
  48. package/dist/entries/runtime-entry-module.js +9 -3
  49. package/dist/entries/runtime-entry-module.js.map +1 -1
  50. package/dist/index.js +132 -40
  51. package/dist/index.js.map +1 -1
  52. package/dist/plugins/css-data-url.d.ts +7 -0
  53. package/dist/plugins/css-data-url.js +81 -0
  54. package/dist/plugins/css-data-url.js.map +1 -0
  55. package/dist/plugins/fonts.js +5 -3
  56. package/dist/plugins/fonts.js.map +1 -1
  57. package/dist/plugins/middleware-server-only.d.ts +54 -0
  58. package/dist/plugins/middleware-server-only.js +91 -0
  59. package/dist/plugins/middleware-server-only.js.map +1 -0
  60. package/dist/plugins/optimize-imports.js +4 -4
  61. package/dist/plugins/optimize-imports.js.map +1 -1
  62. package/dist/plugins/strip-server-exports.js +5 -8
  63. package/dist/plugins/strip-server-exports.js.map +1 -1
  64. package/dist/routing/app-route-graph.d.ts +20 -1
  65. package/dist/routing/app-route-graph.js +58 -6
  66. package/dist/routing/app-route-graph.js.map +1 -1
  67. package/dist/routing/app-router.d.ts +2 -2
  68. package/dist/routing/app-router.js +2 -2
  69. package/dist/routing/app-router.js.map +1 -1
  70. package/dist/routing/utils.d.ts +2 -1
  71. package/dist/routing/utils.js +4 -1
  72. package/dist/routing/utils.js.map +1 -1
  73. package/dist/server/api-handler.js +139 -37
  74. package/dist/server/api-handler.js.map +1 -1
  75. package/dist/server/app-browser-entry.js +293 -149
  76. package/dist/server/app-browser-entry.js.map +1 -1
  77. package/dist/server/app-browser-interception-context.d.ts +24 -0
  78. package/dist/server/app-browser-interception-context.js +32 -0
  79. package/dist/server/app-browser-interception-context.js.map +1 -0
  80. package/dist/server/app-browser-navigation-controller.d.ts +3 -1
  81. package/dist/server/app-browser-navigation-controller.js +5 -1
  82. package/dist/server/app-browser-navigation-controller.js.map +1 -1
  83. package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
  84. package/dist/server/app-browser-rsc-redirect.js +2 -2
  85. package/dist/server/app-browser-rsc-redirect.js.map +1 -1
  86. package/dist/server/app-browser-state.d.ts +18 -1
  87. package/dist/server/app-browser-state.js +19 -1
  88. package/dist/server/app-browser-state.js.map +1 -1
  89. package/dist/server/app-browser-stream.d.ts +5 -14
  90. package/dist/server/app-browser-stream.js +13 -7
  91. package/dist/server/app-browser-stream.js.map +1 -1
  92. package/dist/server/app-browser-visible-commit.d.ts +2 -1
  93. package/dist/server/app-browser-visible-commit.js +1 -0
  94. package/dist/server/app-browser-visible-commit.js.map +1 -1
  95. package/dist/server/app-elements-wire.d.ts +10 -5
  96. package/dist/server/app-elements-wire.js +84 -2
  97. package/dist/server/app-elements-wire.js.map +1 -1
  98. package/dist/server/app-elements.d.ts +3 -2
  99. package/dist/server/app-elements.js +3 -2
  100. package/dist/server/app-elements.js.map +1 -1
  101. package/dist/server/app-fallback-renderer.js +5 -3
  102. package/dist/server/app-fallback-renderer.js.map +1 -1
  103. package/dist/server/app-middleware.d.ts +13 -0
  104. package/dist/server/app-middleware.js +3 -1
  105. package/dist/server/app-middleware.js.map +1 -1
  106. package/dist/server/app-optimistic-routing.d.ts +54 -0
  107. package/dist/server/app-optimistic-routing.js +200 -0
  108. package/dist/server/app-optimistic-routing.js.map +1 -0
  109. package/dist/server/app-page-cache.d.ts +13 -1
  110. package/dist/server/app-page-cache.js +61 -6
  111. package/dist/server/app-page-cache.js.map +1 -1
  112. package/dist/server/app-page-dispatch.d.ts +2 -0
  113. package/dist/server/app-page-dispatch.js +28 -1
  114. package/dist/server/app-page-dispatch.js.map +1 -1
  115. package/dist/server/app-page-element-builder.js +2 -1
  116. package/dist/server/app-page-element-builder.js.map +1 -1
  117. package/dist/server/app-page-execution.d.ts +28 -1
  118. package/dist/server/app-page-execution.js +89 -4
  119. package/dist/server/app-page-execution.js.map +1 -1
  120. package/dist/server/app-page-head.js +21 -2
  121. package/dist/server/app-page-head.js.map +1 -1
  122. package/dist/server/app-page-probe.js +1 -1
  123. package/dist/server/app-page-render.d.ts +2 -0
  124. package/dist/server/app-page-render.js +2 -1
  125. package/dist/server/app-page-render.js.map +1 -1
  126. package/dist/server/app-page-response.js +4 -3
  127. package/dist/server/app-page-response.js.map +1 -1
  128. package/dist/server/app-page-route-wiring.js +17 -10
  129. package/dist/server/app-page-route-wiring.js.map +1 -1
  130. package/dist/server/app-page-stream.d.ts +3 -0
  131. package/dist/server/app-page-stream.js +1 -0
  132. package/dist/server/app-page-stream.js.map +1 -1
  133. package/dist/server/app-prerender-static-params.d.ts +2 -1
  134. package/dist/server/app-prerender-static-params.js +44 -8
  135. package/dist/server/app-prerender-static-params.js.map +1 -1
  136. package/dist/server/app-route-handler-cache.d.ts +2 -2
  137. package/dist/server/app-route-handler-cache.js +3 -2
  138. package/dist/server/app-route-handler-cache.js.map +1 -1
  139. package/dist/server/app-route-handler-dispatch.d.ts +6 -1
  140. package/dist/server/app-route-handler-dispatch.js +1 -1
  141. package/dist/server/app-route-handler-dispatch.js.map +1 -1
  142. package/dist/server/app-route-handler-execution.d.ts +17 -2
  143. package/dist/server/app-route-handler-execution.js.map +1 -1
  144. package/dist/server/app-route-handler-response.js +5 -4
  145. package/dist/server/app-route-handler-response.js.map +1 -1
  146. package/dist/server/app-router-entry.js +6 -2
  147. package/dist/server/app-router-entry.js.map +1 -1
  148. package/dist/server/app-rsc-handler.d.ts +9 -1
  149. package/dist/server/app-rsc-handler.js +32 -14
  150. package/dist/server/app-rsc-handler.js.map +1 -1
  151. package/dist/server/app-rsc-render-mode.d.ts +4 -3
  152. package/dist/server/app-rsc-render-mode.js +7 -1
  153. package/dist/server/app-rsc-render-mode.js.map +1 -1
  154. package/dist/server/app-rsc-request-normalization.d.ts +4 -1
  155. package/dist/server/app-rsc-request-normalization.js +4 -1
  156. package/dist/server/app-rsc-request-normalization.js.map +1 -1
  157. package/dist/server/app-rsc-response-finalizer.d.ts +8 -1
  158. package/dist/server/app-rsc-response-finalizer.js +10 -3
  159. package/dist/server/app-rsc-response-finalizer.js.map +1 -1
  160. package/dist/server/app-rsc-route-matching.js +2 -2
  161. package/dist/server/app-rsc-route-matching.js.map +1 -1
  162. package/dist/server/app-server-action-execution.js +1 -1
  163. package/dist/server/app-ssr-entry.d.ts +2 -0
  164. package/dist/server/app-ssr-entry.js +56 -55
  165. package/dist/server/app-ssr-entry.js.map +1 -1
  166. package/dist/server/app-ssr-stream.d.ts +6 -1
  167. package/dist/server/app-ssr-stream.js +17 -3
  168. package/dist/server/app-ssr-stream.js.map +1 -1
  169. package/dist/server/artifact-compatibility.d.ts +1 -1
  170. package/dist/server/artifact-compatibility.js.map +1 -1
  171. package/dist/server/cache-headers.d.ts +7 -0
  172. package/dist/server/cache-headers.js +19 -0
  173. package/dist/server/cache-headers.js.map +1 -0
  174. package/dist/server/cache-proof.d.ts +49 -3
  175. package/dist/server/cache-proof.js +78 -22
  176. package/dist/server/cache-proof.js.map +1 -1
  177. package/dist/server/client-reuse-manifest.d.ts +99 -0
  178. package/dist/server/client-reuse-manifest.js +212 -0
  179. package/dist/server/client-reuse-manifest.js.map +1 -0
  180. package/dist/server/default-global-error-module.d.ts +20 -0
  181. package/dist/server/default-global-error-module.js +20 -0
  182. package/dist/server/default-global-error-module.js.map +1 -0
  183. package/dist/server/dev-server.d.ts +9 -1
  184. package/dist/server/dev-server.js +76 -29
  185. package/dist/server/dev-server.js.map +1 -1
  186. package/dist/server/edge-api-runtime.d.ts +5 -0
  187. package/dist/server/edge-api-runtime.js +8 -0
  188. package/dist/server/edge-api-runtime.js.map +1 -0
  189. package/dist/server/headers.d.ts +18 -1
  190. package/dist/server/headers.js +18 -1
  191. package/dist/server/headers.js.map +1 -1
  192. package/dist/server/http-error-responses.d.ts +16 -1
  193. package/dist/server/http-error-responses.js +21 -1
  194. package/dist/server/http-error-responses.js.map +1 -1
  195. package/dist/server/isr-cache.d.ts +6 -2
  196. package/dist/server/isr-cache.js +20 -4
  197. package/dist/server/isr-cache.js.map +1 -1
  198. package/dist/server/middleware-runtime.d.ts +15 -0
  199. package/dist/server/middleware-runtime.js +59 -7
  200. package/dist/server/middleware-runtime.js.map +1 -1
  201. package/dist/server/middleware.d.ts +1 -1
  202. package/dist/server/middleware.js +4 -2
  203. package/dist/server/middleware.js.map +1 -1
  204. package/dist/server/navigation-planner.d.ts +9 -3
  205. package/dist/server/navigation-planner.js +98 -25
  206. package/dist/server/navigation-planner.js.map +1 -1
  207. package/dist/server/navigation-trace.d.ts +2 -1
  208. package/dist/server/navigation-trace.js +1 -0
  209. package/dist/server/navigation-trace.js.map +1 -1
  210. package/dist/server/pages-api-route.d.ts +27 -1
  211. package/dist/server/pages-api-route.js +24 -3
  212. package/dist/server/pages-api-route.js.map +1 -1
  213. package/dist/server/pages-data-route.d.ts +77 -0
  214. package/dist/server/pages-data-route.js +97 -0
  215. package/dist/server/pages-data-route.js.map +1 -0
  216. package/dist/server/pages-i18n.d.ts +51 -1
  217. package/dist/server/pages-i18n.js +61 -1
  218. package/dist/server/pages-i18n.js.map +1 -1
  219. package/dist/server/pages-page-data.d.ts +29 -2
  220. package/dist/server/pages-page-data.js +31 -17
  221. package/dist/server/pages-page-data.js.map +1 -1
  222. package/dist/server/pages-page-response.d.ts +11 -1
  223. package/dist/server/pages-page-response.js +5 -3
  224. package/dist/server/pages-page-response.js.map +1 -1
  225. package/dist/server/prod-server.d.ts +13 -15
  226. package/dist/server/prod-server.js +109 -56
  227. package/dist/server/prod-server.js.map +1 -1
  228. package/dist/server/request-pipeline.d.ts +11 -2
  229. package/dist/server/request-pipeline.js +28 -11
  230. package/dist/server/request-pipeline.js.map +1 -1
  231. package/dist/server/seed-cache.d.ts +12 -31
  232. package/dist/server/seed-cache.js +22 -35
  233. package/dist/server/seed-cache.js.map +1 -1
  234. package/dist/server/server-action-not-found.js +8 -3
  235. package/dist/server/server-action-not-found.js.map +1 -1
  236. package/dist/server/skip-cache-proof.d.ts +41 -0
  237. package/dist/server/skip-cache-proof.js +101 -0
  238. package/dist/server/skip-cache-proof.js.map +1 -0
  239. package/dist/server/static-file-cache.d.ts +1 -1
  240. package/dist/server/static-file-cache.js +7 -6
  241. package/dist/server/static-file-cache.js.map +1 -1
  242. package/dist/shims/client-locale.d.ts +15 -0
  243. package/dist/shims/client-locale.js +13 -0
  244. package/dist/shims/client-locale.js.map +1 -0
  245. package/dist/shims/default-global-error.d.ts +32 -0
  246. package/dist/shims/default-global-error.js +181 -0
  247. package/dist/shims/default-global-error.js.map +1 -0
  248. package/dist/shims/document.d.ts +59 -3
  249. package/dist/shims/document.js +36 -5
  250. package/dist/shims/document.js.map +1 -1
  251. package/dist/shims/error-boundary.d.ts +2 -2
  252. package/dist/shims/form.js +13 -6
  253. package/dist/shims/form.js.map +1 -1
  254. package/dist/shims/link.d.ts +21 -3
  255. package/dist/shims/link.js +131 -22
  256. package/dist/shims/link.js.map +1 -1
  257. package/dist/shims/metadata.js +4 -4
  258. package/dist/shims/metadata.js.map +1 -1
  259. package/dist/shims/navigation.d.ts +8 -2
  260. package/dist/shims/navigation.js +36 -15
  261. package/dist/shims/navigation.js.map +1 -1
  262. package/dist/shims/og.d.ts +18 -2
  263. package/dist/shims/og.js +49 -1
  264. package/dist/shims/og.js.map +1 -0
  265. package/dist/shims/request-state-types.d.ts +1 -1
  266. package/dist/shims/root-params.d.ts +3 -1
  267. package/dist/shims/root-params.js +11 -3
  268. package/dist/shims/root-params.js.map +1 -1
  269. package/dist/shims/router-state.d.ts +1 -0
  270. package/dist/shims/router-state.js.map +1 -1
  271. package/dist/shims/router.d.ts +12 -5
  272. package/dist/shims/router.js +172 -22
  273. package/dist/shims/router.js.map +1 -1
  274. package/dist/shims/server.d.ts +21 -4
  275. package/dist/shims/server.js +29 -9
  276. package/dist/shims/server.js.map +1 -1
  277. package/dist/shims/slot.js +5 -1
  278. package/dist/shims/slot.js.map +1 -1
  279. package/dist/shims/unified-request-context.d.ts +1 -1
  280. package/dist/shims/url-safety.d.ts +23 -1
  281. package/dist/shims/url-safety.js +29 -2
  282. package/dist/shims/url-safety.js.map +1 -1
  283. package/dist/typegen.d.ts +10 -0
  284. package/dist/typegen.js +242 -0
  285. package/dist/typegen.js.map +1 -0
  286. package/dist/utils/asset-prefix.d.ts +33 -5
  287. package/dist/utils/asset-prefix.js +39 -6
  288. package/dist/utils/asset-prefix.js.map +1 -1
  289. package/dist/utils/cache-control-metadata.d.ts +2 -1
  290. package/dist/utils/cache-control-metadata.js +1 -3
  291. package/dist/utils/cache-control-metadata.js.map +1 -1
  292. package/dist/utils/domain-locale.d.ts +2 -1
  293. package/dist/utils/domain-locale.js +9 -1
  294. package/dist/utils/domain-locale.js.map +1 -1
  295. package/dist/utils/lazy-chunks.d.ts +1 -1
  296. package/dist/utils/lazy-chunks.js +1 -1
  297. package/dist/utils/lazy-chunks.js.map +1 -1
  298. package/dist/utils/prerender-output-paths.d.ts +15 -0
  299. package/dist/utils/prerender-output-paths.js +24 -0
  300. package/dist/utils/prerender-output-paths.js.map +1 -0
  301. package/dist/utils/query.d.ts +17 -1
  302. package/dist/utils/query.js +36 -1
  303. package/dist/utils/query.js.map +1 -1
  304. package/dist/utils/record.d.ts +5 -0
  305. package/dist/utils/record.js +8 -0
  306. package/dist/utils/record.js.map +1 -0
  307. package/package.json +11 -3
package/dist/index.js CHANGED
@@ -1,19 +1,21 @@
1
1
  import { detectPackageManager } from "./utils/project.js";
2
2
  import { normalizePathnameForRouteMatchStrict } from "./routing/utils.js";
3
3
  import { createValidFileMatcher } from "./routing/file-matcher.js";
4
- import { hasBasePath, removeTrailingSlash } from "./utils/base-path.js";
4
+ import { hasBasePath } from "./utils/base-path.js";
5
5
  import { apiRouter, invalidateRouteCache, matchRoute, pagesRouter } from "./routing/pages-router.js";
6
6
  import { INTERNAL_HEADERS, VINEXT_MW_CTX_HEADER, VINEXT_TIMING_HEADER } from "./server/headers.js";
7
7
  import { buildRequestHeadersFromMiddlewareResponse } from "./server/middleware-request-headers.js";
8
8
  import { normalizePath as normalizePath$1 } from "./server/normalize-path.js";
9
9
  import { isExternalUrl, matchHeaders, matchRedirect, matchRewrite, proxyExternalRequest, requestContextFromRequest, sanitizeDestination } from "./config/config-matchers.js";
10
- import { filterInternalHeaders, isOpenRedirectShaped } from "./server/request-pipeline.js";
10
+ import { filterInternalHeaders, isOpenRedirectShaped, normalizeTrailingSlash } from "./server/request-pipeline.js";
11
+ import { mergeRewriteQuery } from "./utils/query.js";
11
12
  import { findMiddlewareFile, runMiddleware } from "./server/middleware.js";
12
13
  import { generateServerEntry } from "./entries/pages-server-entry.js";
13
14
  import { generateClientEntry } from "./entries/pages-client-entry.js";
14
15
  import { appRouteGraph, appRouter, invalidateAppRouteCache } from "./routing/app-router.js";
15
16
  import { findInstrumentationClientFile, findInstrumentationFile, runInstrumentation } from "./server/instrumentation.js";
16
17
  import { logRequest, now } from "./server/request-log.js";
18
+ import { normalizeDefaultLocalePathname, stripI18nLocaleForApiRoute } from "./server/pages-i18n.js";
17
19
  import { createSSRHandler } from "./server/dev-server.js";
18
20
  import { handleApiRoute } from "./server/api-handler.js";
19
21
  import { installSocketErrorBackstop } from "./server/socket-error-backstop.js";
@@ -27,17 +29,21 @@ import { generateBrowserEntry } from "./entries/app-browser-entry.js";
27
29
  import { collectRouteClassificationManifest } from "./build/route-classification-manifest.js";
28
30
  import { planRouteClassificationInjection } from "./build/route-classification-injector.js";
29
31
  import { PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_BUILD } from "./shims/constants.js";
32
+ import { ASSET_PREFIX_URL_DIR, resolveAssetUrlPrefix, resolveAssetsDir } from "./utils/asset-prefix.js";
30
33
  import { RESOLVED_VIRTUAL_GOOGLE_FONTS, VIRTUAL_GOOGLE_FONTS, createGoogleFontsPlugin, createLocalFontsPlugin, generateGoogleFontsVirtualModule, parseStaticObjectLiteral } from "./plugins/fonts.js";
31
34
  import { findNextConfigPath, loadNextConfig, resolveNextConfig, resolveNextConfigInput } from "./config/next-config.js";
35
+ import { isNextDataPathname, parseNextDataPathname } from "./server/pages-data-route.js";
32
36
  import { precompressAssets } from "./build/precompress.js";
33
37
  import { manifestFileWithBase, manifestFilesWithBase } from "./utils/manifest-paths.js";
34
- import { ASSET_PREFIX_URL_DIR, resolveAssetUrlPrefix, resolveAssetsDir } from "./utils/asset-prefix.js";
35
38
  import { asyncHooksStubPlugin } from "./plugins/async-hooks-stub.js";
36
39
  import { clientReferenceDedupPlugin } from "./plugins/client-reference-dedup.js";
40
+ import { dataUrlCssPlugin } from "./plugins/css-data-url.js";
37
41
  import { createRscClientReferenceLoadersPlugin } from "./plugins/rsc-client-reference-loaders.js";
38
42
  import { createInstrumentationClientTransformPlugin } from "./plugins/instrumentation-client.js";
43
+ import { createMiddlewareServerOnlyPlugin } from "./plugins/middleware-server-only.js";
39
44
  import { createOptimizeImportsPlugin } from "./plugins/optimize-imports.js";
40
45
  import { createOgInlineFetchAssetsPlugin, ogAssetsPlugin } from "./plugins/og-assets.js";
46
+ import { generateRouteTypes } from "./typegen.js";
41
47
  import { SSR_EXTERNAL_REACT_ENTRIES, VINEXT_OPTIMIZE_DEPS_EXCLUDE, mergeOptimizeDepsExclude } from "./plugins/rsc-client-shim-excludes.js";
42
48
  import { createServerExternalsManifestPlugin } from "./plugins/server-externals-manifest.js";
43
49
  import { computeLazyChunks } from "./utils/lazy-chunks.js";
@@ -76,12 +82,24 @@ function resolveOptionalDependency(projectRoot, specifier) {
76
82
  return null;
77
83
  }
78
84
  function resolveShimModulePath(shimsDir, moduleName) {
79
- for (const ext of [".ts", ".js"]) {
85
+ for (const ext of [
86
+ ".ts",
87
+ ".tsx",
88
+ ".js"
89
+ ]) {
80
90
  const candidate = path.join(shimsDir, `${moduleName}${ext}`);
81
91
  if (fs.existsSync(candidate)) return candidate;
82
92
  }
83
93
  return path.join(shimsDir, `${moduleName}.js`);
84
94
  }
95
+ function isVercelOgImport(id) {
96
+ return id === "@vercel/og" || id === "@vercel/og.js";
97
+ }
98
+ function isVinextOgShimImporter(importer) {
99
+ if (!importer) return false;
100
+ const normalizedImporter = (importer.startsWith("\0") ? importer.slice(1) : importer).split("?")[0].replace(/\\/g, "/");
101
+ return normalizedImporter.endsWith("/shims/og.tsx") || normalizedImporter.endsWith("/shims/og.js") || normalizedImporter.endsWith("/dist/shims/og.js");
102
+ }
85
103
  function toRelativeFileEntry(root, absPath) {
86
104
  return path.relative(root, absPath).split(path.sep).join("/");
87
105
  }
@@ -366,6 +384,14 @@ function vinext(options = {}) {
366
384
  async function generateClientEntry$1() {
367
385
  return generateClientEntry(pagesDir, nextConfig, fileMatcher);
368
386
  }
387
+ async function writeRouteTypes() {
388
+ if (!hasAppDir) return;
389
+ await generateRouteTypes({
390
+ root,
391
+ appDir,
392
+ pageExtensions: nextConfig.pageExtensions
393
+ });
394
+ }
369
395
  const autoRsc = options.rsc !== false;
370
396
  const earlyBaseDir = options.appDir ?? process.cwd();
371
397
  const earlyAppDirExists = !options.disableAppRouter && (fs.existsSync(path.join(earlyBaseDir, "app")) || fs.existsSync(path.join(earlyBaseDir, "src", "app")));
@@ -455,6 +481,12 @@ function vinext(options = {}) {
455
481
  };
456
482
  }
457
483
  }] : [],
484
+ createMiddlewareServerOnlyPlugin({
485
+ getMiddlewarePath: () => middlewarePath,
486
+ getCanonicalMiddlewarePath: () => middlewarePath ? tryRealpathSync(middlewarePath) ?? middlewarePath : null,
487
+ serverOnlyShimPath: resolveShimModulePath(shimsDir, "server-only")
488
+ }),
489
+ dataUrlCssPlugin(),
458
490
  {
459
491
  name: "vinext:config",
460
492
  enforce: "pre",
@@ -504,6 +536,7 @@ function vinext(options = {}) {
504
536
  instrumentationPath = findInstrumentationFile(root, fileMatcher);
505
537
  instrumentationClientPath = findInstrumentationClientFile(root, fileMatcher);
506
538
  middlewarePath = findMiddlewareFile(root, fileMatcher);
539
+ if (env?.command === "build") await writeRouteTypes();
507
540
  const defines = getNextPublicEnvDefines();
508
541
  if (!config.define || typeof config.define !== "object" || !("process.env.NODE_ENV" in config.define)) defines["process.env.NODE_ENV"] = JSON.stringify(resolvedNodeEnv);
509
542
  for (const [key, value] of Object.entries(nextConfig.env)) {
@@ -545,6 +578,7 @@ function vinext(options = {}) {
545
578
  defines["process.env.__VINEXT_RSC_COMPATIBILITY_ID"] = JSON.stringify(rscCompatibilityId);
546
579
  defines["process.env.__VINEXT_DEPLOYMENT_ID"] = JSON.stringify(nextConfig.deploymentId ?? "");
547
580
  defines["process.env.__NEXT_VERSION"] = JSON.stringify(getVinextVersion());
581
+ defines["process.env.__NEXT_APP_SHELLS"] = JSON.stringify(false);
548
582
  nextShimMap = Object.fromEntries(Object.entries({
549
583
  "next/link": path.join(shimsDir, "link"),
550
584
  "next/head": path.join(shimsDir, "head"),
@@ -627,7 +661,7 @@ function vinext(options = {}) {
627
661
  "firefox114",
628
662
  "safari15"
629
663
  ],
630
- ...nextConfig.assetPrefix ? { assetsDir: resolveAssetsDir(nextConfig.assetPrefix) } : {},
664
+ assetsDir: resolveAssetsDir(nextConfig.assetPrefix ?? ""),
631
665
  ...withBuildBundlerOptions(viteMajorVersion, {
632
666
  onwarn: (() => {
633
667
  const userOnwarn = getBuildBundlerOptions(config.build)?.onwarn;
@@ -841,9 +875,10 @@ function vinext(options = {}) {
841
875
  }));
842
876
  },
843
877
  resolveId: {
844
- filter: { id: /(?:next\/|virtual:vinext-)/ },
845
- handler(id) {
878
+ filter: { id: /(?:next\/|virtual:vinext-|^@vercel\/og(?:\.js)?$)/ },
879
+ handler(id, importer) {
846
880
  const cleanId = id.startsWith("\0") ? id.slice(1) : id;
881
+ if (isVercelOgImport(cleanId) && !isVinextOgShimImporter(importer)) return resolveShimModulePath(_shimsDir, "og");
847
882
  if (cleanId === VIRTUAL_SERVER_ENTRY) return RESOLVED_SERVER_ENTRY;
848
883
  if (cleanId === VIRTUAL_CLIENT_ENTRY) return RESOLVED_CLIENT_ENTRY;
849
884
  if (cleanId.endsWith("/" + VIRTUAL_SERVER_ENTRY) || cleanId.endsWith("\\" + VIRTUAL_SERVER_ENTRY)) return RESOLVED_SERVER_ENTRY;
@@ -1030,16 +1065,46 @@ function vinext(options = {}) {
1030
1065
  invalidateRscEntryModule();
1031
1066
  invalidateRootParamsModule();
1032
1067
  }
1068
+ let appRouteTypeGeneration = null;
1069
+ let appRouteTypeGenerationPending = false;
1070
+ function warnRouteTypeGenerationFailure(error) {
1071
+ server.config.logger.warn(`[vinext] Failed to regenerate route types: ${error instanceof Error ? error.message : String(error)}`);
1072
+ }
1073
+ async function drainAppRouteTypeGeneration() {
1074
+ while (appRouteTypeGenerationPending) {
1075
+ appRouteTypeGenerationPending = false;
1076
+ try {
1077
+ await writeRouteTypes();
1078
+ } catch (error) {
1079
+ warnRouteTypeGenerationFailure(error);
1080
+ }
1081
+ }
1082
+ }
1083
+ function regenerateAppRouteTypes() {
1084
+ appRouteTypeGenerationPending = true;
1085
+ if (appRouteTypeGeneration) return;
1086
+ appRouteTypeGeneration = drainAppRouteTypeGeneration().finally(() => {
1087
+ appRouteTypeGeneration = null;
1088
+ if (appRouteTypeGenerationPending) regenerateAppRouteTypes();
1089
+ });
1090
+ }
1091
+ regenerateAppRouteTypes();
1033
1092
  server.httpServer?.on("connection", (socket) => {
1034
1093
  socket.on("error", () => {});
1035
1094
  });
1036
1095
  server.watcher.on("add", (filePath) => {
1037
1096
  if (hasPagesDir && filePath.startsWith(pagesDir) && pageExtensions.test(filePath)) invalidateRouteCache(pagesDir);
1038
- if (hasAppDir && shouldInvalidateAppRouteFile(appDir, filePath, fileMatcher)) invalidateAppRoutingModules();
1097
+ if (hasAppDir && shouldInvalidateAppRouteFile(appDir, filePath, fileMatcher)) {
1098
+ invalidateAppRoutingModules();
1099
+ regenerateAppRouteTypes();
1100
+ }
1039
1101
  });
1040
1102
  server.watcher.on("unlink", (filePath) => {
1041
1103
  if (hasPagesDir && filePath.startsWith(pagesDir) && pageExtensions.test(filePath)) invalidateRouteCache(pagesDir);
1042
- if (hasAppDir && shouldInvalidateAppRouteFile(appDir, filePath, fileMatcher)) invalidateAppRoutingModules();
1104
+ if (hasAppDir && shouldInvalidateAppRouteFile(appDir, filePath, fileMatcher)) {
1105
+ invalidateAppRoutingModules();
1106
+ regenerateAppRouteTypes();
1107
+ }
1043
1108
  });
1044
1109
  server.middlewares.use((req, res, next) => {
1045
1110
  const blockReason = validateDevRequest({
@@ -1153,7 +1218,6 @@ function vinext(options = {}) {
1153
1218
  if (rawPathname.endsWith("/index.html")) url = url.replace("/index.html", "/");
1154
1219
  else if (rawPathname.endsWith(".html")) url = url.replace(/\.html(?=\?|$)/, "");
1155
1220
  let pathname = url.split("?")[0];
1156
- if (pathname.includes(".") && !pathname.endsWith(".html")) return next();
1157
1221
  if (isOpenRedirectShaped(pathname)) {
1158
1222
  res.writeHead(404);
1159
1223
  res.end("This page could not be found");
@@ -1173,30 +1237,45 @@ function vinext(options = {}) {
1173
1237
  url = stripped + (url.includes("?") ? url.slice(url.indexOf("?")) : "");
1174
1238
  pathname = stripped;
1175
1239
  }
1176
- if (nextConfig && pathname !== "/" && pathname !== "/api" && !pathname.startsWith("/api/")) {
1177
- const hasTrailing = pathname.endsWith("/");
1178
- if (nextConfig.trailingSlash && !hasTrailing) {
1179
- const qs = url.includes("?") ? url.slice(url.indexOf("?")) : "";
1180
- const dest = bp + pathname + "/" + qs;
1181
- res.writeHead(308, { Location: dest });
1240
+ if (nextConfig) {
1241
+ const qs = url.includes("?") ? url.slice(url.indexOf("?")) : "";
1242
+ const trailingSlashRedirect = normalizeTrailingSlash(pathname, bp, nextConfig.trailingSlash, qs);
1243
+ if (trailingSlashRedirect) {
1244
+ const location = trailingSlashRedirect.headers.get("Location");
1245
+ res.writeHead(trailingSlashRedirect.status, location ? { Location: location } : void 0);
1182
1246
  res.end();
1183
1247
  return;
1184
- } else if (!nextConfig.trailingSlash && hasTrailing) {
1248
+ }
1249
+ }
1250
+ let isDataReq = false;
1251
+ if (isNextDataPathname(pathname)) {
1252
+ const devBuildId = nextConfig?.buildId ?? process.env.__VINEXT_BUILD_ID ?? "development";
1253
+ const dataMatch = parseNextDataPathname(pathname, devBuildId);
1254
+ if (dataMatch) {
1255
+ isDataReq = true;
1185
1256
  const qs = url.includes("?") ? url.slice(url.indexOf("?")) : "";
1186
- const dest = bp + removeTrailingSlash(pathname) + qs;
1187
- res.writeHead(308, { Location: dest });
1188
- res.end();
1257
+ url = dataMatch.pagePathname + qs;
1258
+ pathname = dataMatch.pagePathname;
1259
+ req.url = url;
1260
+ } else {
1261
+ res.writeHead(404, { "Content-Type": "application/json" });
1262
+ res.end("{}");
1189
1263
  return;
1190
1264
  }
1191
1265
  }
1266
+ if (pathname.includes(".") && !pathname.endsWith(".html")) return next();
1192
1267
  if (hasCloudflarePlugin) return next();
1193
- const nodeRequestHeaders = filterInternalHeaders(new Headers(Object.fromEntries(Object.entries(req.headers).filter(([, v]) => v !== void 0).map(([k, v]) => [k, Array.isArray(v) ? v.join(", ") : String(v)]))));
1268
+ const rawHeaders = new Headers(Object.fromEntries(Object.entries(req.headers).filter(([, v]) => v !== void 0).map(([k, v]) => [k, Array.isArray(v) ? v.join(", ") : String(v)])));
1269
+ const isDataRequest = rawHeaders.get("x-nextjs-data") === "1";
1270
+ const nodeRequestHeaders = filterInternalHeaders(rawHeaders);
1194
1271
  for (const header of INTERNAL_HEADERS) delete req.headers[header];
1195
1272
  const requestOrigin = `http://${req.headers.host || "localhost"}`;
1196
1273
  const preMiddlewareReqUrl = new URL(url, requestOrigin);
1197
1274
  const preMiddlewareReqCtx = requestContextFromRequest(new Request(preMiddlewareReqUrl, { headers: nodeRequestHeaders }));
1275
+ const matchPathname = nextConfig?.i18n ? normalizeDefaultLocalePathname(pathname, nextConfig.i18n, { hostname: preMiddlewareReqUrl.hostname }) : pathname;
1276
+ const matchResolvedPathname = (p) => nextConfig?.i18n ? normalizeDefaultLocalePathname(p, nextConfig.i18n, { hostname: preMiddlewareReqUrl.hostname }) : p;
1198
1277
  if (nextConfig?.redirects.length) {
1199
- if (applyRedirects(pathname, res, nextConfig.redirects, preMiddlewareReqCtx, nextConfig.basePath ?? "")) return;
1278
+ if (applyRedirects(matchPathname, res, nextConfig.redirects, preMiddlewareReqCtx, nextConfig.basePath ?? "")) return;
1200
1279
  }
1201
1280
  const applyRequestHeadersToNodeRequest = (nextRequestHeaders) => {
1202
1281
  for (const key of Object.keys(req.headers)) delete req.headers[key];
@@ -1218,7 +1297,7 @@ function vinext(options = {}) {
1218
1297
  method: req.method,
1219
1298
  headers: nodeRequestHeaders
1220
1299
  });
1221
- const result = await runMiddleware(getPagesRunner(), middlewarePath, middlewareRequest, nextConfig?.i18n, nextConfig?.basePath);
1300
+ const result = await runMiddleware(getPagesRunner(), middlewarePath, middlewareRequest, nextConfig?.i18n, nextConfig?.basePath, nextConfig?.trailingSlash, isDataRequest);
1222
1301
  if (result.waitUntilPromises?.length) Promise.allSettled(result.waitUntilPromises);
1223
1302
  if (!result.continue) {
1224
1303
  if (result.redirectUrl) {
@@ -1272,23 +1351,27 @@ function vinext(options = {}) {
1272
1351
  }
1273
1352
  const reqUrl = new URL(url, requestOrigin);
1274
1353
  const reqCtx = requestContextFromRequest(new Request(reqUrl, { headers: middlewareRequestHeaders ?? nodeRequestHeaders }));
1275
- if (nextConfig?.headers.length) applyHeaders(pathname, res, nextConfig.headers, preMiddlewareReqCtx);
1354
+ if (nextConfig?.headers.length) applyHeaders(matchPathname, res, nextConfig.headers, preMiddlewareReqCtx, bp);
1276
1355
  let resolvedUrl = url;
1277
- if (nextConfig?.rewrites.beforeFiles.length) resolvedUrl = applyRewrites(pathname, nextConfig.rewrites.beforeFiles, reqCtx) ?? url;
1356
+ if (nextConfig?.rewrites.beforeFiles.length) {
1357
+ const rewritten = applyRewrites(matchPathname, nextConfig.rewrites.beforeFiles, reqCtx, bp);
1358
+ if (rewritten) resolvedUrl = mergeRewriteQuery(url, rewritten);
1359
+ }
1278
1360
  if (isExternalUrl(resolvedUrl)) {
1279
1361
  applyDeferredMwHeaders();
1280
1362
  applyMwRequestHeadersForExternalProxy();
1281
1363
  await proxyExternalRewriteNode(req, res, resolvedUrl);
1282
1364
  return;
1283
1365
  }
1284
- const resolvedPathname = resolvedUrl.split("?")[0];
1366
+ const apiLookupUrl = stripI18nLocaleForApiRoute(resolvedUrl, nextConfig?.i18n);
1367
+ const resolvedPathname = apiLookupUrl.split("?")[0];
1285
1368
  if (resolvedPathname.startsWith("/api/") || resolvedPathname === "/api") {
1286
1369
  const apiRoutes = await apiRouter(pagesDir, nextConfig?.pageExtensions, fileMatcher);
1287
- if (matchRoute(resolvedUrl, apiRoutes)) {
1370
+ if (matchRoute(apiLookupUrl, apiRoutes)) {
1288
1371
  applyDeferredMwHeaders();
1289
1372
  if (middlewareRequestHeaders) applyRequestHeadersToNodeRequest(middlewareRequestHeaders);
1290
1373
  }
1291
- if (await handleApiRoute(getPagesRunner(), req, res, resolvedUrl, apiRoutes)) return;
1374
+ if (await handleApiRoute(getPagesRunner(), req, res, apiLookupUrl, apiRoutes)) return;
1292
1375
  if (hasAppDir) return next();
1293
1376
  res.statusCode = 404;
1294
1377
  res.end("404 - API route not found");
@@ -1297,9 +1380,9 @@ function vinext(options = {}) {
1297
1380
  const routes = await pagesRouter(pagesDir, nextConfig?.pageExtensions, fileMatcher);
1298
1381
  let match = matchRoute(resolvedUrl.split("?")[0], routes);
1299
1382
  if ((!match || match.route.isDynamic) && nextConfig?.rewrites.afterFiles.length) {
1300
- const afterRewrite = applyRewrites(resolvedUrl.split("?")[0], nextConfig.rewrites.afterFiles, reqCtx);
1383
+ const afterRewrite = applyRewrites(matchResolvedPathname(resolvedUrl.split("?")[0]), nextConfig.rewrites.afterFiles, reqCtx, bp);
1301
1384
  if (afterRewrite) {
1302
- resolvedUrl = afterRewrite;
1385
+ resolvedUrl = mergeRewriteQuery(resolvedUrl, afterRewrite);
1303
1386
  match = matchRoute(resolvedUrl.split("?")[0], routes);
1304
1387
  }
1305
1388
  }
@@ -1314,11 +1397,11 @@ function vinext(options = {}) {
1314
1397
  if (match) {
1315
1398
  applyDeferredMwHeaders();
1316
1399
  if (middlewareRequestHeaders) applyRequestHeadersToNodeRequest(middlewareRequestHeaders);
1317
- await handler(req, res, resolvedUrl, mwStatus);
1400
+ await handler(req, res, resolvedUrl, mwStatus, isDataReq);
1318
1401
  return;
1319
1402
  }
1320
1403
  if (nextConfig?.rewrites.fallback.length) {
1321
- const fallbackRewrite = applyRewrites(resolvedUrl.split("?")[0], nextConfig.rewrites.fallback, reqCtx);
1404
+ const fallbackRewrite = applyRewrites(matchResolvedPathname(resolvedUrl.split("?")[0]), nextConfig.rewrites.fallback, reqCtx, bp);
1322
1405
  if (fallbackRewrite) {
1323
1406
  if (isExternalUrl(fallbackRewrite)) {
1324
1407
  applyDeferredMwHeaders();
@@ -1329,12 +1412,12 @@ function vinext(options = {}) {
1329
1412
  if (!matchRoute(fallbackRewrite.split("?")[0], routes) && hasAppDir) return next();
1330
1413
  applyDeferredMwHeaders();
1331
1414
  if (middlewareRequestHeaders) applyRequestHeadersToNodeRequest(middlewareRequestHeaders);
1332
- await handler(req, res, fallbackRewrite, mwStatus);
1415
+ await handler(req, res, fallbackRewrite, mwStatus, isDataReq);
1333
1416
  return;
1334
1417
  }
1335
1418
  }
1336
1419
  if (hasAppDir) return next();
1337
- await handler(req, res, resolvedUrl, mwStatus);
1420
+ await handler(req, res, resolvedUrl, mwStatus, isDataReq);
1338
1421
  } catch (e) {
1339
1422
  next(e);
1340
1423
  }
@@ -1792,7 +1875,7 @@ function vinext(options = {}) {
1792
1875
  if (!fs.existsSync(headersPath)) {
1793
1876
  const headersContent = [
1794
1877
  "# Cache content-hashed assets immutably (generated by vinext)",
1795
- `/${envConfig.build?.assetsDir ?? "assets"}/*`,
1878
+ `/${envConfig.build?.assetsDir ?? "_next/static"}/*`,
1796
1879
  " Cache-Control: public, max-age=31536000, immutable",
1797
1880
  ""
1798
1881
  ].join("\n");
@@ -1872,7 +1955,10 @@ function getNextPublicEnvDefines() {
1872
1955
  * Returns true if a redirect was applied.
1873
1956
  */
1874
1957
  function applyRedirects(pathname, res, redirects, ctx, basePath = "") {
1875
- const result = matchRedirect(pathname, redirects, ctx);
1958
+ const result = matchRedirect(pathname, redirects, ctx, {
1959
+ basePath,
1960
+ hadBasePath: true
1961
+ });
1876
1962
  if (result) {
1877
1963
  const dest = sanitizeDestination(basePath && !isExternalUrl(result.destination) && !hasBasePath(result.destination, basePath) ? basePath + result.destination : result.destination);
1878
1964
  res.writeHead(result.permanent ? 308 : 307, { Location: dest });
@@ -1919,8 +2005,11 @@ async function proxyExternalRewriteNode(req, res, externalUrl) {
1919
2005
  * Apply rewrite rules from next.config.js.
1920
2006
  * Returns the rewritten URL or null if no rewrite matched.
1921
2007
  */
1922
- function applyRewrites(pathname, rewrites, ctx) {
1923
- const dest = matchRewrite(pathname, rewrites, ctx);
2008
+ function applyRewrites(pathname, rewrites, ctx, basePath = "") {
2009
+ const dest = matchRewrite(pathname, rewrites, ctx, {
2010
+ basePath,
2011
+ hadBasePath: true
2012
+ });
1924
2013
  if (dest) return sanitizeDestination(dest);
1925
2014
  return null;
1926
2015
  }
@@ -1929,8 +2018,11 @@ function applyRewrites(pathname, rewrites, ctx) {
1929
2018
  * Middleware headers take precedence: if a header key was already set on the
1930
2019
  * response (by middleware), the config value is skipped for that key.
1931
2020
  */
1932
- function applyHeaders(pathname, res, headers, ctx) {
1933
- const matched = matchHeaders(pathname, headers, ctx);
2021
+ function applyHeaders(pathname, res, headers, ctx, basePath = "") {
2022
+ const matched = matchHeaders(pathname, headers, ctx, {
2023
+ basePath,
2024
+ hadBasePath: true
2025
+ });
1934
2026
  for (const header of matched) {
1935
2027
  const lk = header.key.toLowerCase();
1936
2028
  if (lk === "set-cookie") {