vinext 0.1.7 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/README.md +51 -30
  2. package/dist/build/inject-pregenerated-paths.d.ts +4 -0
  3. package/dist/build/inject-pregenerated-paths.js +18 -0
  4. package/dist/build/layout-classification.js +1 -1
  5. package/dist/build/nitro-route-rules.js +1 -1
  6. package/dist/build/pages-client-assets-module.d.ts +11 -0
  7. package/dist/build/pages-client-assets-module.js +27 -0
  8. package/dist/build/prerender.d.ts +2 -1
  9. package/dist/build/prerender.js +13 -6
  10. package/dist/build/report.d.ts +13 -2
  11. package/dist/build/report.js +99 -2
  12. package/dist/build/run-prerender.d.ts +7 -0
  13. package/dist/build/run-prerender.js +10 -1
  14. package/dist/build/standalone.js +2 -0
  15. package/dist/cache/cache-adapters-virtual.js +3 -3
  16. package/dist/check.d.ts +18 -0
  17. package/dist/check.js +77 -19
  18. package/dist/cli-args.d.ts +1 -2
  19. package/dist/cli-args.js +1 -1
  20. package/dist/cli-dev-config.d.ts +12 -0
  21. package/dist/cli-dev-config.js +23 -0
  22. package/dist/cli.js +113 -97
  23. package/dist/{server → client}/dev-error-overlay-store.d.ts +1 -1
  24. package/dist/{server → client}/dev-error-overlay-store.js +1 -1
  25. package/dist/{server → client}/dev-error-overlay.d.ts +1 -1
  26. package/dist/{server → client}/dev-error-overlay.js +2 -2
  27. package/dist/client/navigation-runtime.d.ts +2 -0
  28. package/dist/client/navigation-runtime.js +3 -1
  29. package/dist/client/window-next.d.ts +2 -1
  30. package/dist/cloudflare/index.d.ts +2 -2
  31. package/dist/cloudflare/index.js +2 -2
  32. package/dist/config/config-matchers.js +14 -10
  33. package/dist/config/next-config.d.ts +6 -3
  34. package/dist/config/next-config.js +47 -1
  35. package/dist/config/prerender.d.ts +34 -0
  36. package/dist/config/prerender.js +55 -0
  37. package/dist/config/server-external-packages.d.ts +4 -0
  38. package/dist/config/server-external-packages.js +91 -0
  39. package/dist/entries/app-rsc-entry.d.ts +2 -1
  40. package/dist/entries/app-rsc-entry.js +89 -15
  41. package/dist/entries/app-rsc-manifest.js +10 -0
  42. package/dist/entries/pages-client-entry.d.ts +3 -0
  43. package/dist/entries/pages-client-entry.js +16 -1
  44. package/dist/entries/pages-server-entry.js +6 -2
  45. package/dist/image/image-adapters-virtual.d.ts +59 -0
  46. package/dist/image/image-adapters-virtual.js +59 -0
  47. package/dist/index.d.ts +33 -0
  48. package/dist/index.js +211 -118
  49. package/dist/init-cloudflare.d.ts +43 -0
  50. package/dist/init-cloudflare.js +839 -0
  51. package/dist/init-platform.d.ts +40 -0
  52. package/dist/init-platform.js +195 -0
  53. package/dist/init.d.ts +16 -38
  54. package/dist/init.js +208 -97
  55. package/dist/node_modules/.pnpm/am-i-vibing@0.5.0/node_modules/am-i-vibing/dist/detector-1yx2Hoe0.js +294 -0
  56. package/dist/node_modules/.pnpm/process-ancestry@0.1.0/node_modules/process-ancestry/dist/index.js +94 -0
  57. package/dist/{cloudflare → packages/cloudflare}/src/cache/cdn-adapter.runtime.js +1 -1
  58. package/dist/{cloudflare → packages/cloudflare}/src/cache/kv-data-adapter.runtime.d.ts +2 -2
  59. package/dist/{cloudflare → packages/cloudflare}/src/cache/kv-data-adapter.runtime.js +1 -1
  60. package/dist/packages/cloudflare/src/deploy-config.js +150 -0
  61. package/dist/packages/cloudflare/src/deploy-help.js +55 -0
  62. package/dist/packages/cloudflare/src/deploy.js +276 -0
  63. package/dist/{cloudflare → packages/cloudflare/src}/tpr.d.ts +4 -41
  64. package/dist/{cloudflare → packages/cloudflare/src}/tpr.js +18 -15
  65. package/dist/plugins/ast-scope.d.ts +16 -0
  66. package/dist/plugins/ast-scope.js +62 -0
  67. package/dist/plugins/ast-utils.d.ts +27 -1
  68. package/dist/plugins/ast-utils.js +32 -1
  69. package/dist/plugins/css-module-imports.d.ts +14 -0
  70. package/dist/plugins/css-module-imports.js +59 -0
  71. package/dist/plugins/extensionless-dynamic-import.js +2 -2
  72. package/dist/plugins/ignore-dynamic-requests.d.ts +11 -0
  73. package/dist/plugins/ignore-dynamic-requests.js +530 -0
  74. package/dist/plugins/middleware-server-only.d.ts +8 -6
  75. package/dist/plugins/middleware-server-only.js +8 -7
  76. package/dist/plugins/optimize-imports.js +1 -1
  77. package/dist/plugins/typeof-window.d.ts +1 -1
  78. package/dist/plugins/typeof-window.js +28 -56
  79. package/dist/routing/app-route-graph.d.ts +29 -4
  80. package/dist/routing/app-route-graph.js +182 -40
  81. package/dist/routing/app-router.d.ts +5 -0
  82. package/dist/routing/app-router.js +5 -0
  83. package/dist/routing/file-matcher.d.ts +8 -0
  84. package/dist/routing/file-matcher.js +10 -1
  85. package/dist/routing/pages-router.js +2 -2
  86. package/dist/server/api-handler.js +9 -14
  87. package/dist/server/app-browser-action-result.d.ts +4 -1
  88. package/dist/server/app-browser-action-result.js +8 -1
  89. package/dist/server/app-browser-entry.js +194 -190
  90. package/dist/server/app-browser-history-controller.d.ts +2 -1
  91. package/dist/server/app-browser-history-controller.js +6 -2
  92. package/dist/server/app-browser-interception-context.d.ts +1 -0
  93. package/dist/server/app-browser-interception-context.js +4 -2
  94. package/dist/server/app-browser-navigation-controller.d.ts +2 -0
  95. package/dist/server/app-browser-navigation-controller.js +60 -31
  96. package/dist/server/app-browser-server-action-client.d.ts +32 -0
  97. package/dist/server/app-browser-server-action-client.js +127 -0
  98. package/dist/server/app-browser-state.d.ts +11 -1
  99. package/dist/server/app-browser-state.js +25 -8
  100. package/dist/server/app-browser-visible-commit.d.ts +6 -1
  101. package/dist/server/app-browser-visible-commit.js +43 -25
  102. package/dist/server/app-elements-wire.d.ts +9 -2
  103. package/dist/server/app-elements-wire.js +8 -1
  104. package/dist/server/app-elements.d.ts +2 -2
  105. package/dist/server/app-elements.js +4 -3
  106. package/dist/server/app-fallback-renderer.d.ts +5 -2
  107. package/dist/server/app-fallback-renderer.js +15 -7
  108. package/dist/server/app-hydration-cache-publication.d.ts +11 -0
  109. package/dist/server/app-hydration-cache-publication.js +43 -0
  110. package/dist/server/app-middleware.d.ts +4 -3
  111. package/dist/server/app-middleware.js +8 -3
  112. package/dist/server/app-optimistic-routing.js +11 -4
  113. package/dist/server/app-page-boundary-render.d.ts +3 -0
  114. package/dist/server/app-page-boundary-render.js +14 -3
  115. package/dist/server/app-page-cache-finalizer.d.ts +1 -0
  116. package/dist/server/app-page-cache-finalizer.js +10 -3
  117. package/dist/server/app-page-cache-render.d.ts +1 -0
  118. package/dist/server/app-page-cache-render.js +8 -4
  119. package/dist/server/app-page-cache.d.ts +1 -0
  120. package/dist/server/app-page-cache.js +5 -2
  121. package/dist/server/app-page-dispatch.d.ts +33 -4
  122. package/dist/server/app-page-dispatch.js +63 -90
  123. package/dist/server/app-page-element-builder.d.ts +9 -2
  124. package/dist/server/app-page-element-builder.js +114 -23
  125. package/dist/server/app-page-head.d.ts +16 -1
  126. package/dist/server/app-page-head.js +44 -22
  127. package/dist/server/app-page-params.d.ts +2 -1
  128. package/dist/server/app-page-params.js +8 -1
  129. package/dist/server/app-page-ppr-runtime.d.ts +7 -0
  130. package/dist/server/app-page-ppr-runtime.js +70 -0
  131. package/dist/server/app-page-probe.d.ts +1 -0
  132. package/dist/server/app-page-probe.js +6 -1
  133. package/dist/server/app-page-render-identity.d.ts +1 -0
  134. package/dist/server/app-page-render-identity.js +1 -1
  135. package/dist/server/app-page-render.d.ts +4 -1
  136. package/dist/server/app-page-render.js +26 -3
  137. package/dist/server/app-page-request.d.ts +22 -1
  138. package/dist/server/app-page-request.js +92 -15
  139. package/dist/server/app-page-route-wiring.d.ts +14 -2
  140. package/dist/server/app-page-route-wiring.js +61 -25
  141. package/dist/server/app-page-search-params-observation.d.ts +4 -2
  142. package/dist/server/app-page-search-params-observation.js +11 -7
  143. package/dist/server/app-page-segment-state.d.ts +2 -1
  144. package/dist/server/app-page-segment-state.js +3 -1
  145. package/dist/server/app-page-stream.d.ts +5 -0
  146. package/dist/server/app-page-stream.js +3 -1
  147. package/dist/server/app-ppr-fallback-shell-render.d.ts +4 -3
  148. package/dist/server/app-route-handler-dispatch.js +1 -0
  149. package/dist/server/app-route-handler-execution.js +7 -2
  150. package/dist/server/app-route-handler-response.js +1 -0
  151. package/dist/server/app-route-handler-runtime.js +1 -1
  152. package/dist/server/app-route-module-loader.d.ts +2 -0
  153. package/dist/server/app-route-module-loader.js +1 -0
  154. package/dist/server/app-router-entry.js +16 -8
  155. package/dist/server/app-rsc-errors.js +7 -1
  156. package/dist/server/app-rsc-handler.d.ts +3 -1
  157. package/dist/server/app-rsc-handler.js +67 -39
  158. package/dist/server/app-rsc-request-normalization.d.ts +3 -2
  159. package/dist/server/app-rsc-request-normalization.js +6 -3
  160. package/dist/server/app-rsc-route-matching.d.ts +7 -0
  161. package/dist/server/app-rsc-route-matching.js +36 -3
  162. package/dist/server/app-segment-config.d.ts +12 -0
  163. package/dist/server/app-segment-config.js +91 -5
  164. package/dist/server/app-server-action-execution.d.ts +5 -0
  165. package/dist/server/app-server-action-execution.js +94 -33
  166. package/dist/server/app-ssr-entry.d.ts +3 -0
  167. package/dist/server/app-ssr-entry.js +19 -8
  168. package/dist/server/app-ssr-stream.d.ts +7 -3
  169. package/dist/server/app-ssr-stream.js +10 -6
  170. package/dist/server/app-static-generation.d.ts +1 -0
  171. package/dist/server/app-static-generation.js +1 -0
  172. package/dist/server/app-visited-response-cache.d.ts +6 -0
  173. package/dist/server/app-visited-response-cache.js +3 -1
  174. package/dist/server/client-trace-metadata.js +26 -0
  175. package/dist/server/default-global-not-found-module.d.ts +14 -0
  176. package/dist/server/default-global-not-found-module.js +14 -0
  177. package/dist/server/dev-route-files.js +4 -0
  178. package/dist/server/dev-server.js +19 -18
  179. package/dist/server/dev-stack-sourcemap.d.ts +1 -1
  180. package/dist/server/dev-stack-sourcemap.js +1 -1
  181. package/dist/server/fetch-handler.d.ts +2 -0
  182. package/dist/server/fetch-handler.js +18 -0
  183. package/dist/server/headers.d.ts +5 -15
  184. package/dist/server/headers.js +4 -15
  185. package/dist/server/image-optimization.d.ts +51 -1
  186. package/dist/server/image-optimization.js +52 -2
  187. package/dist/server/implicit-tags.js +1 -1
  188. package/dist/server/isr-cache.d.ts +1 -1
  189. package/dist/server/isr-cache.js +2 -2
  190. package/dist/server/metadata-routes.d.ts +3 -1
  191. package/dist/server/metadata-routes.js +12 -2
  192. package/dist/server/middleware-runtime.js +6 -1
  193. package/dist/server/navigation-planner.d.ts +1 -0
  194. package/dist/server/navigation-planner.js +14 -3
  195. package/dist/server/pages-api-route.js +2 -2
  196. package/dist/server/pages-asset-tags.d.ts +4 -6
  197. package/dist/server/pages-asset-tags.js +12 -12
  198. package/dist/server/pages-client-assets.d.ts +12 -0
  199. package/dist/server/pages-client-assets.js +10 -0
  200. package/dist/server/pages-node-compat.d.ts +8 -1
  201. package/dist/server/pages-node-compat.js +32 -4
  202. package/dist/server/pages-page-data.d.ts +24 -1
  203. package/dist/server/pages-page-data.js +45 -24
  204. package/dist/server/pages-page-handler.d.ts +2 -1
  205. package/dist/server/pages-page-handler.js +19 -12
  206. package/dist/server/pages-page-response.d.ts +7 -0
  207. package/dist/server/pages-page-response.js +4 -1
  208. package/dist/server/pages-request-pipeline.d.ts +2 -0
  209. package/dist/server/pages-request-pipeline.js +25 -1
  210. package/dist/server/pages-router-entry.d.ts +30 -0
  211. package/dist/server/pages-router-entry.js +108 -0
  212. package/dist/server/prerender-manifest.d.ts +3 -1
  213. package/dist/server/prerender-route-params.js +1 -1
  214. package/dist/server/prod-server.d.ts +1 -1
  215. package/dist/server/prod-server.js +48 -26
  216. package/dist/server/request-pipeline.js +1 -0
  217. package/dist/server/seed-cache.js +4 -4
  218. package/dist/server/worker-utils.d.ts +2 -1
  219. package/dist/server/worker-utils.js +7 -1
  220. package/dist/shims/app-router-scroll-state.d.ts +1 -0
  221. package/dist/shims/app-router-scroll-state.js +1 -0
  222. package/dist/shims/app-router-scroll.js +2 -1
  223. package/dist/shims/cache.js +19 -15
  224. package/dist/shims/cdn-cache.js +1 -1
  225. package/dist/shims/dynamic-preload-chunks.js +2 -1
  226. package/dist/shims/error-boundary.d.ts +19 -1
  227. package/dist/shims/error-boundary.js +11 -1
  228. package/dist/shims/form.d.ts +3 -1
  229. package/dist/shims/form.js +37 -43
  230. package/dist/shims/headers.d.ts +9 -1
  231. package/dist/shims/headers.js +31 -6
  232. package/dist/shims/image.js +75 -14
  233. package/dist/shims/internal/app-route-detection.d.ts +2 -17
  234. package/dist/shims/internal/app-route-detection.js +4 -17
  235. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +23 -0
  236. package/dist/shims/internal/hybrid-client-route-owner-direct.js +51 -0
  237. package/dist/shims/internal/hybrid-client-route-owner.d.ts +2 -15
  238. package/dist/shims/internal/hybrid-client-route-owner.js +9 -60
  239. package/dist/shims/internal/pages-data-fetch-dedup.d.ts +9 -5
  240. package/dist/shims/internal/pages-data-fetch-dedup.js +73 -14
  241. package/dist/shims/internal/pages-data-target.d.ts +10 -9
  242. package/dist/shims/internal/pages-data-target.js +91 -12
  243. package/dist/shims/internal/pages-router-components.d.ts +7 -0
  244. package/dist/shims/internal/pages-router-components.js +13 -0
  245. package/dist/shims/layout-segment-context.d.ts +4 -1
  246. package/dist/shims/layout-segment-context.js +18 -4
  247. package/dist/shims/link.js +70 -37
  248. package/dist/shims/metadata.d.ts +3 -2
  249. package/dist/shims/metadata.js +8 -4
  250. package/dist/shims/navigation.d.ts +5 -1
  251. package/dist/shims/navigation.js +45 -10
  252. package/dist/shims/navigation.react-server.js +1 -1
  253. package/dist/shims/root-params.d.ts +15 -1
  254. package/dist/shims/root-params.js +21 -1
  255. package/dist/shims/router.d.ts +5 -7
  256. package/dist/shims/router.js +374 -94
  257. package/dist/shims/server.js +3 -2
  258. package/dist/shims/slot.js +3 -6
  259. package/dist/typegen.js +6 -5
  260. package/dist/utils/client-runtime-metadata.d.ts +2 -18
  261. package/dist/utils/client-runtime-metadata.js +31 -22
  262. package/dist/utils/dev-stack-sourcemap-endpoint.d.ts +4 -0
  263. package/dist/{server → utils}/dev-stack-sourcemap-endpoint.js +1 -1
  264. package/dist/utils/domain-locale.d.ts +6 -3
  265. package/dist/{server → utils}/middleware-request-headers.d.ts +1 -1
  266. package/dist/{server → utils}/middleware-request-headers.js +2 -2
  267. package/dist/utils/path.d.ts +2 -1
  268. package/dist/utils/path.js +1 -1
  269. package/dist/utils/project.d.ts +52 -2
  270. package/dist/utils/project.js +230 -5
  271. package/dist/utils/protocol-headers.d.ts +17 -0
  272. package/dist/utils/protocol-headers.js +17 -0
  273. package/dist/utils/react-version.d.ts +4 -0
  274. package/dist/utils/react-version.js +44 -0
  275. package/package.json +53 -4
  276. package/dist/deploy.d.ts +0 -190
  277. package/dist/deploy.js +0 -1033
  278. package/dist/server/dev-stack-sourcemap-endpoint.d.ts +0 -4
  279. /package/dist/{cloudflare → packages/cloudflare}/src/utils/cache-control-metadata.js +0 -0
@@ -72,6 +72,7 @@ const CONFIG_FILES = [
72
72
  "next.config.cjs"
73
73
  ];
74
74
  const DEFAULT_EXPIRE_TIME = 31536e3;
75
+ const DEFAULT_TRANSPILED_PACKAGES = ["geist"];
75
76
  /**
76
77
  * Default cap for the App Router preload `Link` header length, matching the
77
78
  * Next.js `defaultConfig.reactMaxHeadersLength`.
@@ -252,6 +253,31 @@ function findNextConfigPath(root) {
252
253
  }
253
254
  return null;
254
255
  }
256
+ function hasConfigProperty(config, propertyPath) {
257
+ let current = config;
258
+ for (const property of propertyPath.split(".")) {
259
+ if (!isUnknownRecord(current) || current[property] === void 0) return false;
260
+ current = current[property];
261
+ }
262
+ return true;
263
+ }
264
+ const emittedConfigWarnings = /* @__PURE__ */ new Set();
265
+ function warnConfigOnce(message) {
266
+ if (emittedConfigWarnings.has(message)) return;
267
+ emittedConfigWarnings.add(message);
268
+ console.warn(message);
269
+ }
270
+ function warnDeprecatedConfigOptions(config, root) {
271
+ const configFileName = path.basename(findNextConfigPath(root) ?? "next.config.js");
272
+ const warnings = [
273
+ ["experimental.middlewarePrefetch", `\`experimental.middlewarePrefetch\` is deprecated. Please use \`experimental.proxyPrefetch\` instead in ${configFileName}.`],
274
+ ["experimental.middlewareClientMaxBodySize", `\`experimental.middlewareClientMaxBodySize\` is deprecated. Please use \`experimental.proxyClientMaxBodySize\` instead in ${configFileName}.`],
275
+ ["experimental.externalMiddlewareRewritesResolve", `\`experimental.externalMiddlewareRewritesResolve\` is deprecated. Please use \`experimental.externalProxyRewritesResolve\` instead in ${configFileName}.`],
276
+ ["skipMiddlewareUrlNormalize", `\`skipMiddlewareUrlNormalize\` is deprecated. Please use \`skipProxyUrlNormalize\` instead in ${configFileName}.`],
277
+ ["experimental.instrumentationHook", `\`experimental.instrumentationHook\` is no longer needed, because \`instrumentation.js\` is available by default. You can remove it from ${configFileName}.`]
278
+ ];
279
+ for (const [propertyPath, warning] of warnings) if (hasConfigProperty(config, propertyPath)) warnConfigOnce(warning);
280
+ }
255
281
  async function resolveNextConfigInput(config, phase = PHASE_DEVELOPMENT_SERVER) {
256
282
  return await resolveConfigValue(config, phase);
257
283
  }
@@ -569,7 +595,10 @@ async function resolveNextConfig(config, root = process.cwd(), options = {}) {
569
595
  allowedDevOrigins: [],
570
596
  serverActionsAllowedOrigins: [],
571
597
  optimizePackageImports: [],
598
+ transpilePackages: [],
599
+ turbopackTranspilePackages: [...DEFAULT_TRANSPILED_PACKAGES],
572
600
  inlineCss: false,
601
+ globalNotFound: false,
573
602
  serverActionsBodySizeLimit: 1 * 1024 * 1024,
574
603
  serverActionsBodySizeLimitLabel: "1 MB",
575
604
  expireTime: DEFAULT_EXPIRE_TIME,
@@ -601,6 +630,7 @@ async function resolveNextConfig(config, root = process.cwd(), options = {}) {
601
630
  detectNextIntlConfig(root, resolved);
602
631
  return resolved;
603
632
  }
633
+ warnDeprecatedConfigOptions(config, root);
604
634
  let redirects = [];
605
635
  if (config.redirects) {
606
636
  const result = await config.redirects();
@@ -652,6 +682,7 @@ async function resolveNextConfig(config, root = process.cwd(), options = {}) {
652
682
  const rawOptimize = experimental?.optimizePackageImports;
653
683
  const optimizePackageImports = Array.isArray(rawOptimize) ? rawOptimize.filter((x) => typeof x === "string") : [];
654
684
  const inlineCss = experimental?.inlineCss === true;
685
+ const globalNotFound = experimental?.globalNotFound === true;
655
686
  const prefetchInlining = experimental?.prefetchInlining === true || isUnknownRecord(experimental?.prefetchInlining);
656
687
  const appShells = experimental?.appShells === true;
657
688
  if (appShells) {
@@ -666,6 +697,8 @@ async function resolveNextConfig(config, root = process.cwd(), options = {}) {
666
697
  const topLevelServerExternalPackages = Array.isArray(config.serverExternalPackages) ? readStringArray(config.serverExternalPackages) : void 0;
667
698
  const legacyServerComponentsExternal = readStringArray(experimental?.serverComponentsExternalPackages);
668
699
  const serverExternalPackages = topLevelServerExternalPackages ?? legacyServerComponentsExternal;
700
+ const transpilePackages = readStringArray(config.transpilePackages);
701
+ const turbopackTranspilePackages = [...transpilePackages, ...DEFAULT_TRANSPILED_PACKAGES];
669
702
  if (experimental?.swcEnvOptions !== void 0) console.warn("[vinext] next.config option \"experimental.swcEnvOptions\" is not applicable and will be ignored (vinext uses Vite, not SWC). A Vite-compatible polyfill solution may be explored in the future.");
670
703
  if (experimental?.rootParams !== void 0) console.warn("[vinext] `experimental.rootParams` is no longer needed, because `next/root-params` is available by default. You can remove it from next.config.(js|mjs|ts).");
671
704
  const useLightningcss = experimental?.useLightningcss === true;
@@ -704,6 +737,16 @@ async function resolveNextConfig(config, root = process.cwd(), options = {}) {
704
737
  fallback: applyLocaleToRoutes(rewrites.fallback, i18n, "rewrite", opts)
705
738
  };
706
739
  }
740
+ const images = config.images ? {
741
+ ...config.images,
742
+ remotePatterns: config.images.remotePatterns?.map((pattern) => pattern instanceof URL ? {
743
+ protocol: pattern.protocol.slice(0, -1),
744
+ hostname: pattern.hostname,
745
+ port: pattern.port,
746
+ pathname: pattern.pathname,
747
+ search: pattern.search
748
+ } : { ...pattern })
749
+ } : void 0;
707
750
  const resolved = {
708
751
  env: config.env ?? {},
709
752
  basePath: config.basePath ?? "",
@@ -721,14 +764,17 @@ async function resolveNextConfig(config, root = process.cwd(), options = {}) {
721
764
  redirects,
722
765
  rewrites,
723
766
  headers,
724
- images: config.images,
767
+ images,
725
768
  i18n,
726
769
  mdx,
727
770
  aliases,
728
771
  allowedDevOrigins,
729
772
  serverActionsAllowedOrigins,
730
773
  optimizePackageImports,
774
+ transpilePackages,
775
+ turbopackTranspilePackages,
731
776
  inlineCss,
777
+ globalNotFound,
732
778
  serverActionsBodySizeLimit,
733
779
  serverActionsBodySizeLimitLabel,
734
780
  expireTime: typeof config.expireTime === "number" ? config.expireTime : DEFAULT_EXPIRE_TIME,
@@ -0,0 +1,34 @@
1
+ import { PluginOption } from "vite";
2
+
3
+ //#region src/config/prerender.d.ts
4
+ type VinextPrerenderConfig = true | {
5
+ /**
6
+ * Routes to pre-render after the production build.
7
+ *
8
+ * Currently only `"*"` is supported, which pre-renders every discovered
9
+ * App Router and Pages Router route that vinext can statically render.
10
+ */
11
+ routes: "*";
12
+ };
13
+ type ResolvedVinextPrerenderConfig = {
14
+ routes: "*";
15
+ };
16
+ type VinextPrerenderDecisionReason = "flag" | "next-export" | "vinext-config";
17
+ type VinextPrerenderDecision = ResolvedVinextPrerenderConfig & {
18
+ reason: VinextPrerenderDecisionReason;
19
+ };
20
+ declare const VINEXT_PRERENDER_CONFIG_PLUGIN_PROPERTY = "__vinextPrerenderConfig";
21
+ type ViteConfigLoader = {
22
+ loadConfigFromFile: typeof import("vite").loadConfigFromFile;
23
+ };
24
+ declare function normalizeVinextPrerenderConfig(config: VinextPrerenderConfig | undefined): ResolvedVinextPrerenderConfig | null;
25
+ declare function findVinextPrerenderConfigInPlugins(plugins: PluginOption[] | undefined): ResolvedVinextPrerenderConfig | null;
26
+ declare function loadVinextPrerenderConfigFromViteConfig(vite: ViteConfigLoader, root: string): Promise<ResolvedVinextPrerenderConfig | null>;
27
+ declare function resolveVinextPrerenderDecision(options: {
28
+ prerenderAllFlag?: boolean;
29
+ vinextPrerenderConfig?: ResolvedVinextPrerenderConfig | null;
30
+ nextOutput?: string;
31
+ }): VinextPrerenderDecision | null;
32
+ declare function formatVinextPrerenderLabel(decision: VinextPrerenderDecision): string;
33
+ //#endregion
34
+ export { ResolvedVinextPrerenderConfig, VINEXT_PRERENDER_CONFIG_PLUGIN_PROPERTY, VinextPrerenderConfig, VinextPrerenderDecision, VinextPrerenderDecisionReason, findVinextPrerenderConfigInPlugins, formatVinextPrerenderLabel, loadVinextPrerenderConfigFromViteConfig, normalizeVinextPrerenderConfig, resolveVinextPrerenderDecision };
@@ -0,0 +1,55 @@
1
+ import { isUnknownRecord } from "../utils/record.js";
2
+ //#region src/config/prerender.ts
3
+ const VINEXT_PRERENDER_CONFIG_PLUGIN_PROPERTY = "__vinextPrerenderConfig";
4
+ function normalizeVinextPrerenderConfig(config) {
5
+ if (config === void 0) return null;
6
+ if (config === true) return { routes: "*" };
7
+ if (!isUnknownRecord(config)) throw new Error("[vinext] Invalid `prerender` config. Use `true` or `{ routes: \"*\" }`.");
8
+ if (config.routes === "*") return { routes: "*" };
9
+ throw new Error("[vinext] Unsupported `prerender.routes` config. Currently only `routes: \"*\"` is supported.");
10
+ }
11
+ function flattenPluginOptions(value, target) {
12
+ if (Array.isArray(value)) {
13
+ for (const item of value) flattenPluginOptions(item, target);
14
+ return;
15
+ }
16
+ if (value) target.push(value);
17
+ }
18
+ function findVinextPrerenderConfigInPlugins(plugins) {
19
+ const flattened = [];
20
+ flattenPluginOptions(plugins, flattened);
21
+ for (const plugin of flattened) {
22
+ if (!isUnknownRecord(plugin)) continue;
23
+ const prerenderConfig = plugin[VINEXT_PRERENDER_CONFIG_PLUGIN_PROPERTY];
24
+ if (prerenderConfig) return prerenderConfig;
25
+ }
26
+ return null;
27
+ }
28
+ async function loadVinextPrerenderConfigFromViteConfig(vite, root) {
29
+ return findVinextPrerenderConfigInPlugins((await vite.loadConfigFromFile({
30
+ command: "build",
31
+ mode: "production"
32
+ }, void 0, root))?.config.plugins);
33
+ }
34
+ function resolveVinextPrerenderDecision(options) {
35
+ if (options.prerenderAllFlag) return {
36
+ routes: "*",
37
+ reason: "flag"
38
+ };
39
+ if (options.nextOutput === "export") return {
40
+ routes: "*",
41
+ reason: "next-export"
42
+ };
43
+ if (options.vinextPrerenderConfig?.routes === "*") return {
44
+ routes: "*",
45
+ reason: "vinext-config"
46
+ };
47
+ return null;
48
+ }
49
+ function formatVinextPrerenderLabel(decision) {
50
+ if (decision.reason === "next-export") return "Pre-rendering all routes (output: 'export')...";
51
+ if (decision.reason === "vinext-config") return "Pre-rendering all routes (vinext prerender config)...";
52
+ return "Pre-rendering all routes...";
53
+ }
54
+ //#endregion
55
+ export { VINEXT_PRERENDER_CONFIG_PLUGIN_PROPERTY, findVinextPrerenderConfigInPlugins, formatVinextPrerenderLabel, loadVinextPrerenderConfigFromViteConfig, normalizeVinextPrerenderConfig, resolveVinextPrerenderDecision };
@@ -0,0 +1,4 @@
1
+ //#region src/config/server-external-packages.d.ts
2
+ declare function mergeServerExternalPackages(userPackages?: readonly string[], transpilePackages?: readonly string[]): string[];
3
+ //#endregion
4
+ export { mergeServerExternalPackages };
@@ -0,0 +1,91 @@
1
+ //#region src/config/server-external-packages.ts
2
+ const DEFAULT_SERVER_EXTERNAL_PACKAGES = [
3
+ "@alinea/generated",
4
+ "@appsignal/nodejs",
5
+ "@aws-sdk/client-s3",
6
+ "@aws-sdk/s3-presigned-post",
7
+ "@blockfrost/blockfrost-js",
8
+ "@highlight-run/node",
9
+ "@huggingface/transformers",
10
+ "@jpg-store/lucid-cardano",
11
+ "@libsql/client",
12
+ "@mikro-orm/core",
13
+ "@mikro-orm/knex",
14
+ "@node-rs/argon2",
15
+ "@node-rs/bcrypt",
16
+ "@prisma/client",
17
+ "@react-pdf/renderer",
18
+ "@sentry/profiling-node",
19
+ "@sparticuz/chromium",
20
+ "@sparticuz/chromium-min",
21
+ "@statsig/statsig-node-core",
22
+ "@swc/core",
23
+ "@xenova/transformers",
24
+ "@zenstackhq/runtime",
25
+ "argon2",
26
+ "autoprefixer",
27
+ "aws-crt",
28
+ "bcrypt",
29
+ "better-sqlite3",
30
+ "canvas",
31
+ "chromadb-default-embed",
32
+ "config",
33
+ "cpu-features",
34
+ "cypress",
35
+ "dd-trace",
36
+ "eslint",
37
+ "express",
38
+ "firebase-admin",
39
+ "htmlrewriter",
40
+ "import-in-the-middle",
41
+ "isolated-vm",
42
+ "jest",
43
+ "jsdom",
44
+ "keyv",
45
+ "libsql",
46
+ "mdx-bundler",
47
+ "mongodb",
48
+ "mongoose",
49
+ "newrelic",
50
+ "next-mdx-remote",
51
+ "next-seo",
52
+ "node-cron",
53
+ "node-pty",
54
+ "node-web-audio-api",
55
+ "onnxruntime-node",
56
+ "oslo",
57
+ "pg",
58
+ "pino",
59
+ "pino-pretty",
60
+ "pino-roll",
61
+ "playwright",
62
+ "playwright-core",
63
+ "postcss",
64
+ "prettier",
65
+ "prisma",
66
+ "puppeteer",
67
+ "puppeteer-core",
68
+ "ravendb",
69
+ "require-in-the-middle",
70
+ "rimraf",
71
+ "sharp",
72
+ "shiki",
73
+ "sqlite3",
74
+ "thread-stream",
75
+ "ts-morph",
76
+ "ts-node",
77
+ "typescript",
78
+ "vscode-oniguruma",
79
+ "webpack",
80
+ "websocket",
81
+ "zeromq"
82
+ ];
83
+ function mergeServerExternalPackages(userPackages = [], transpilePackages = []) {
84
+ const transpiled = new Set(transpilePackages);
85
+ const conflicts = userPackages.filter((name) => transpiled.has(name));
86
+ if (conflicts.length > 0) throw new Error(`The packages specified in the 'transpilePackages' conflict with the 'serverExternalPackages': ${conflicts.join(", ")}`);
87
+ const defaults = DEFAULT_SERVER_EXTERNAL_PACKAGES.filter((name) => !transpiled.has(name));
88
+ return [...new Set([...defaults, ...userPackages])];
89
+ }
90
+ //#endregion
91
+ export { mergeServerExternalPackages };
@@ -43,7 +43,8 @@ type AppRouterConfig = {
43
43
  */
44
44
  reactMaxHeadersLength?: number; /** Maximum in-memory cache size in bytes. 0 disables the default memory cache. */
45
45
  cacheMaxMemorySize?: number; /** Inline app CSS into production HTML (from experimental.inlineCss). */
46
- inlineCss?: boolean; /** Enables Next.js Cache Components semantics for App Router document HTML. */
46
+ inlineCss?: boolean; /** Enable standalone route-miss 404 handling (from experimental.globalNotFound). */
47
+ globalNotFound?: boolean; /** Enables Next.js Cache Components semantics for App Router document HTML. */
47
48
  cacheComponents?: boolean; /** Whether the RSC build discovered any server references. Defaults to true. */
48
49
  hasServerActions?: boolean; /** Internationalization routing config for middleware matcher locale handling. */
49
50
  i18n?: NextI18nConfig | null;
@@ -1,6 +1,7 @@
1
1
  import { normalizePathSeparators } from "../utils/path.js";
2
2
  import { resolveEntryPath } from "./runtime-entry-module.js";
3
3
  import { isProxyFile } from "../server/middleware.js";
4
+ import { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES } from "../server/image-optimization.js";
4
5
  import { buildAppRscManifestCode } from "./app-rsc-manifest.js";
5
6
  import { generateDevOriginCheckCode } from "../server/dev-origin-check.js";
6
7
  import { randomUUID } from "node:crypto";
@@ -16,7 +17,7 @@ import { randomUUID } from "node:crypto";
16
17
  */
17
18
  const DEFAULT_EXPIRE_TIME = 31536e3;
18
19
  const DEFAULT_REACT_MAX_HEADERS_LENGTH = 6e3;
19
- const middlewareRequestHeadersPath = resolveEntryPath("../server/middleware-request-headers.js", import.meta.url);
20
+ const middlewareRequestHeadersPath = resolveEntryPath("../utils/middleware-request-headers.js", import.meta.url);
20
21
  const normalizePathModulePath = resolveEntryPath("../server/normalize-path.js", import.meta.url);
21
22
  const appRouteHandlerDispatchPath = resolveEntryPath("../server/app-route-handler-dispatch.js", import.meta.url);
22
23
  const appRouteHandlerResponsePath = resolveEntryPath("../server/app-route-handler-response.js", import.meta.url);
@@ -30,6 +31,8 @@ const appElementsPath = resolveEntryPath("../server/app-elements.js", import.met
30
31
  const appPageRouteWiringPath = resolveEntryPath("../server/app-page-route-wiring.js", import.meta.url);
31
32
  const appPageProbePath = resolveEntryPath("../server/app-page-probe.js", import.meta.url);
32
33
  const appPageDispatchPath = resolveEntryPath("../server/app-page-dispatch.js", import.meta.url);
34
+ const appPagePprRuntimePath = resolveEntryPath("../server/app-page-ppr-runtime.js", import.meta.url);
35
+ const fileBasedMetadataPath = resolveEntryPath("../server/file-based-metadata.js", import.meta.url);
33
36
  const appPageRequestPath = resolveEntryPath("../server/app-page-request.js", import.meta.url);
34
37
  const appSegmentConfigPath = resolveEntryPath("../server/app-segment-config.js", import.meta.url);
35
38
  const appRscRouteMatchingPath = resolveEntryPath("../server/app-rsc-route-matching.js", import.meta.url);
@@ -80,11 +83,19 @@ function generateRscEntry(appDir, routes, middlewarePath, metadataRoutes, global
80
83
  const hasPagesDir = config?.hasPagesDir ?? false;
81
84
  const publicFiles = config?.publicFiles ?? [];
82
85
  const draftModeSecret = config?.draftModeSecret ?? randomUUID();
86
+ const imageAllowedWidths = [...config?.imageConfig?.deviceSizes ?? DEFAULT_DEVICE_SIZES, ...config?.imageConfig?.imageSizes ?? DEFAULT_IMAGE_SIZES];
87
+ const imageConfig = {
88
+ qualities: config?.imageConfig?.qualities,
89
+ dangerouslyAllowSVG: config?.imageConfig?.dangerouslyAllowSVG,
90
+ dangerouslyAllowLocalIP: config?.imageConfig?.dangerouslyAllowLocalIP,
91
+ contentDispositionType: config?.imageConfig?.contentDispositionType,
92
+ contentSecurityPolicy: config?.imageConfig?.contentSecurityPolicy
93
+ };
83
94
  const { imports, routeEntries, metaRouteEntries, generateStaticParamsEntries, rootParamNameEntries, rootNotFoundVar, rootForbiddenVar, rootUnauthorizedVar, rootLayoutVars, globalErrorVar, globalNotFoundImportSpecifier } = buildAppRscManifestCode({
84
95
  routes,
85
96
  metadataRoutes,
86
97
  globalErrorPath,
87
- globalNotFoundPath: config?.globalNotFoundPath ?? null
98
+ globalNotFoundPath: config?.globalNotFound === true ? config.globalNotFoundPath ?? null : null
88
99
  });
89
100
  const loadPrerenderPagesRoutesCode = hasPagesDir ? `
90
101
  async function __loadPrerenderPagesRoutes() {
@@ -121,6 +132,8 @@ ${instrumentationPath ? `import * as _instrumentation from ${JSON.stringify(norm
121
132
  import { ensureInstrumentationRegistered as __ensureInstrumentationRegistered } from ${JSON.stringify(instrumentationRuntimePath)};` : ""}
122
133
  import { createAppRscHandler } from "vinext/server/app-rsc-handler";
123
134
  import { registerConfiguredCacheAdapters as __registerConfiguredCacheAdapters } from "virtual:vinext-cache-adapters";
135
+ import __pagesClientAssets from "virtual:vinext-pages-client-assets";
136
+ import { setPagesClientAssets as __setPagesClientAssets } from "vinext/server/pages-client-assets";
124
137
  import { decodePathParams as __decodePathParams } from ${JSON.stringify(normalizePathModulePath)};
125
138
  import { buildRequestHeadersFromMiddlewareResponse as __buildRequestHeadersFromMiddlewareResponse } from ${JSON.stringify(middlewareRequestHeadersPath)};
126
139
  ${hasPagesDir ? `import {
@@ -129,6 +142,11 @@ ${hasPagesDir ? `import {
129
142
  const __loadAppRouteHandlerDispatch = () => import(${JSON.stringify(appRouteHandlerDispatchPath)});
130
143
  ${hasServerActions ? `const __loadAppServerActionExecution = () => import(${JSON.stringify(appServerActionExecutionPath)});` : ""}
131
144
  ${(metadataRoutes?.length ?? 0) > 0 ? `const __loadMetadataRouteResponse = () => import(${JSON.stringify(metadataRouteResponsePath)});` : ""}
145
+ ${(metadataRoutes?.length ?? 0) > 0 ? `const __loadFileBasedMetadata = () => import(${JSON.stringify(fileBasedMetadataPath)});
146
+ async function __applyFileBasedMetadata(...args) {
147
+ const { applyFileBasedMetadata } = await __loadFileBasedMetadata();
148
+ return applyFileBasedMetadata(...args);
149
+ }` : ""}
132
150
  import {
133
151
  sanitizeErrorForClient as __sanitizeErrorForClient,
134
152
  } from ${JSON.stringify(appRscErrorsPath)};
@@ -152,6 +170,10 @@ import { buildAppPageProbes as __buildAppPageProbes } from ${JSON.stringify(appP
152
170
  import {
153
171
  dispatchAppPage as __dispatchAppPage,
154
172
  } from ${JSON.stringify(appPageDispatchPath)};
173
+ ${cacheComponents ? `import {
174
+ appPagePprRuntime as __appPagePprRuntime,
175
+ createAppPprFallbackShells as __createAppPprFallbackShells,
176
+ } from ${JSON.stringify(appPagePprRuntimePath)};` : ""}
155
177
  import {
156
178
  resolveAppPageGenerateStaticParamsSources as __resolveAppPageGenerateStaticParamsSources,
157
179
  } from ${JSON.stringify(appPageRequestPath)};
@@ -234,6 +256,11 @@ function __resolveRouteFetchCacheMode(route) {
234
256
  return __resolveAppPageFetchCacheMode({
235
257
  layouts: route.layouts,
236
258
  page: route.page,
259
+ parallelSegments: Object.values(route.slots ?? {}).flatMap((slot) => [
260
+ slot.layout,
261
+ ...(slot.configLayouts ?? []),
262
+ slot.page ?? slot.default,
263
+ ]),
237
264
  });
238
265
  }
239
266
 
@@ -241,6 +268,11 @@ function __resolveRouteDynamicConfig(route) {
241
268
  return __resolveAppPageSegmentConfig({
242
269
  layouts: route.layouts,
243
270
  page: route.page,
271
+ parallelSegments: Object.values(route.slots ?? {}).flatMap((slot) => [
272
+ slot.layout,
273
+ ...(slot.configLayouts ?? []),
274
+ slot.page ?? slot.default,
275
+ ]),
244
276
  }).dynamicConfig ?? null;
245
277
  }
246
278
 
@@ -248,6 +280,11 @@ function __resolveRouteRuntime(route) {
248
280
  return __resolveAppPageSegmentConfig({
249
281
  layouts: route.layouts,
250
282
  page: route.page,
283
+ parallelSegments: Object.values(route.slots ?? {}).flatMap((slot) => [
284
+ slot.layout,
285
+ ...(slot.configLayouts ?? []),
286
+ slot.page ?? slot.default,
287
+ ]),
251
288
  }).runtime ?? null;
252
289
  }
253
290
 
@@ -317,6 +354,7 @@ const createRscOnErrorHandler = (request, pathname, routePath) =>
317
354
  createAppRscOnErrorHandler(_reportRequestError, request, pathname, routePath);
318
355
 
319
356
  const __fallbackRenderer = __createAppFallbackRenderer({
357
+ ${(metadataRoutes?.length ?? 0) > 0 ? "applyFileBasedMetadata: __applyFileBasedMetadata," : ""}
320
358
  basePath: __basePath,
321
359
  trailingSlash: __trailingSlash,
322
360
  rootBoundaries: {
@@ -327,6 +365,7 @@ const __fallbackRenderer = __createAppFallbackRenderer({
327
365
  },
328
366
  globalErrorModule: ${globalErrorVar ? globalErrorVar : "null"},
329
367
  loadGlobalNotFoundModule: __loadGlobalNotFoundModule,
368
+ globalNotFoundEnabled: ${config?.globalNotFound === true},
330
369
  metadataRoutes,
331
370
  ssrLoader() {
332
371
  return import.meta.viteRsc.loadModule("ssr", "index");
@@ -366,6 +405,7 @@ async function buildPageElements(route, params, routePath, pageRequest, layoutPa
366
405
  // Hydrate lazy page/route-handler modules before any synchronous read.
367
406
  await __ensureRouteLoaded(route);
368
407
  return __buildPageElements({
408
+ ${(metadataRoutes?.length ?? 0) > 0 ? "applyFileBasedMetadata: __applyFileBasedMetadata," : ""}
369
409
  route,
370
410
  params,
371
411
  routePath,
@@ -387,7 +427,7 @@ const __i18nConfig = ${JSON.stringify(i18nConfig)};
387
427
  const __configRedirects = ${JSON.stringify(redirects)};
388
428
  const __configRewrites = ${JSON.stringify(rewrites)};
389
429
  const __configHeaders = ${JSON.stringify(headers)};
390
- const __imageConfig = ${JSON.stringify(config?.imageConfig)};
430
+ const __runtimeImageConfig = ${JSON.stringify(config?.imageConfig)};
391
431
  const __publicFiles = new Set(${JSON.stringify(publicFiles)});
392
432
  const __allowedOrigins = ${JSON.stringify(allowedOrigins)};
393
433
  const __expireTime = ${JSON.stringify(expireTime)};
@@ -398,10 +438,11 @@ const __reactMaxHeadersLength = ${JSON.stringify(reactMaxHeadersLength)};
398
438
  // mirrors the embedded \`__basePath\` pattern (and Pages Router's
399
439
  // \`vinextConfig\` export). Empty string when unset.
400
440
  export const __assetPrefix = ${JSON.stringify(assetPrefix)};
441
+ export const __imageAllowedWidths = ${JSON.stringify(imageAllowedWidths)};
442
+ export const __imageConfig = ${JSON.stringify(imageConfig)};
401
443
  export const __inlineCss = ${JSON.stringify(inlineCss)};
402
444
  export const __hasPagesDir = ${JSON.stringify(hasPagesDir)};
403
445
  export const getRenderedConcreteUrlPathsForRoute = __getRenderedConcreteUrlPathsForRoute;
404
- const __cacheComponents = ${JSON.stringify(cacheComponents)};
405
446
 
406
447
  export async function seedMemoryCacheFromPrerender(serverDir) {
407
448
  const { seedMemoryCacheFromPrerender: __seedMemoryCacheFromPrerender } =
@@ -447,6 +488,7 @@ const rootParamNamesMap = {
447
488
  ${rootParamNameEntries.join("\n")}
448
489
  };
449
490
 
491
+ __setPagesClientAssets(__pagesClientAssets);
450
492
  export default createAppRscHandler({
451
493
  basePath: __basePath,
452
494
  buildId: process.env.__VINEXT_BUILD_ID ?? null,
@@ -456,10 +498,12 @@ export default createAppRscHandler({
456
498
  },
457
499
  registerCacheAdapters: __registerConfiguredCacheAdapters,
458
500
  configHeaders: __configHeaders,
459
- cacheComponents: __cacheComponents,
501
+ ${cacheComponents ? `createPprFallbackShells(route, params) {
502
+ return __createAppPprFallbackShells(route, params);
503
+ },` : ""}
460
504
  configRedirects: __configRedirects,
461
505
  configRewrites: __configRewrites,
462
- imageConfig: __imageConfig,
506
+ imageConfig: __runtimeImageConfig,
463
507
  isDev: process.env.NODE_ENV !== "production",
464
508
  draftModeSecret: __draftModeSecret,
465
509
  dispatchMatchedPage({
@@ -491,13 +535,32 @@ export default createAppRscHandler({
491
535
  const PageComponent = route.page?.default;
492
536
  const __segmentConfig = __resolveAppPageSegmentConfig({
493
537
  layouts: route.layouts,
538
+ layoutTreePositions: route.layoutTreePositions,
494
539
  page: route.page,
495
- parallelPages: Object.values(route.slots ?? {}).map((slot) => slot.page),
540
+ parallelBranches: Object.values(route.slots ?? {}).map((slot) => ({
541
+ layout: slot.layout,
542
+ configLayouts: slot.configLayouts,
543
+ configLayoutTreePositions: slot.configLayoutTreePositions,
544
+ page: slot.page ?? slot.default,
545
+ routeSegments: slot.routeSegments,
546
+ })),
547
+ parallelPages: Object.values(route.slots ?? {}).map((slot) => slot.page ?? slot.default),
548
+ routeSegments: route.routeSegments,
496
549
  });
497
550
  const __generateStaticParams = __resolveAppPageGenerateStaticParamsSources({
498
551
  layouts: route.layouts,
499
552
  layoutTreePositions: route.layoutTreePositions,
500
553
  page: route.page,
554
+ parallelBranches: Object.values(route.slots ?? {}).map((slot) => ({
555
+ layout: slot.layout,
556
+ configLayouts: slot.configLayouts,
557
+ configLayoutTreePositions: slot.configLayoutTreePositions,
558
+ page: slot.page ?? slot.default,
559
+ paramNames: slot.slotParamNames,
560
+ patternParts: slot.slotPatternParts,
561
+ routeSegments: slot.routeSegments,
562
+ })),
563
+ routePatternParts: route.patternParts,
501
564
  routeSegments: route.routeSegments,
502
565
  });
503
566
  const _asyncRouteParams = makeThenableParams(params);
@@ -506,7 +569,7 @@ export default createAppRscHandler({
506
569
  ensureRouteLoaded: __ensureRouteLoaded,
507
570
  clientTraceMetadata: __clientTraceMetadata,
508
571
  reactMaxHeadersLength: __reactMaxHeadersLength,
509
- buildPageElement(targetRoute, targetParams, targetOpts, targetSearchParams, layoutParamAccess) {
572
+ buildPageElement(targetRoute, targetParams, targetOpts, targetSearchParams, layoutParamAccess, buildOptions) {
510
573
  return buildPageElements(targetRoute, targetParams, cleanPathname, {
511
574
  opts: targetOpts,
512
575
  searchParams: targetSearchParams,
@@ -514,6 +577,8 @@ export default createAppRscHandler({
514
577
  request,
515
578
  mountedSlotsHeader,
516
579
  renderMode,
580
+ observeMetadataSearchParamsAccess: buildOptions?.observeMetadataSearchParamsAccess === true,
581
+ observePageSearchParamsAccess: buildOptions?.observePageSearchParamsAccess === true,
517
582
  }, layoutParamAccess, displayPathname);
518
583
  },
519
584
  clientReuseManifest,
@@ -570,6 +635,7 @@ export default createAppRscHandler({
570
635
  params,
571
636
  pprFallbackCacheShells,
572
637
  pprFallbackShell,
638
+ pprRuntime: ${cacheComponents ? "__appPagePprRuntime" : "undefined"},
573
639
  renderedConcreteUrlPaths,
574
640
  skipStaticParamsValidation,
575
641
  staticParamsValidationParams,
@@ -583,7 +649,7 @@ export default createAppRscHandler({
583
649
  route,
584
650
  });
585
651
  },
586
- async probePage() {
652
+ async probePage(probeSearchParams = searchParams) {
587
653
  const __probeIntercept = findIntercept(cleanPathname, interceptionContext);
588
654
  // The intercepting-route page module is lazy (page: null + __pageLoader).
589
655
  // Resolve it before probing so buildAppPageProbes inspects the real page
@@ -598,21 +664,21 @@ export default createAppRscHandler({
598
664
  route,
599
665
  pageComponent: PageComponent,
600
666
  asyncRouteParams: _asyncRouteParams,
601
- searchParams,
667
+ searchParams: probeSearchParams,
602
668
  intercept: __probeIntercept,
603
669
  isRscRequest,
604
670
  matchedParams: params,
605
671
  makeThenableParams,
606
672
  }));
607
673
  },
608
- renderErrorBoundaryPage(renderErr) {
674
+ renderErrorBoundaryPage(renderErr, errorOrigin) {
609
675
  const __activeIntercept = findIntercept(cleanPathname, interceptionContext);
610
676
  return __fallbackRenderer.renderErrorBoundary(route, renderErr, isRscRequest, request, params, scriptNonce, middlewareContext, {
611
677
  isEdgeRuntime: __isEdgeRuntime(__segmentConfig.runtime),
612
678
  sourcePageSegments: __activeIntercept?.slotKey === __SIBLING_PAGE_INTERCEPT_SLOT_KEY
613
679
  ? __activeIntercept.sourcePageSegments
614
680
  : null,
615
- });
681
+ }, errorOrigin);
616
682
  },
617
683
  renderHttpAccessFallbackPage(statusCode, opts, currentMiddlewareContext) {
618
684
  const __activeIntercept = findIntercept(cleanPathname, interceptionContext);
@@ -762,7 +828,7 @@ export default createAppRscHandler({
762
828
  const __actionMatch = matchRoute(cleanPathname);
763
829
  if (__actionMatch) await __ensureRouteLoaded(__actionMatch.route);
764
830
  const __actionIsEdgeRuntime = __actionMatch
765
- ? __isEdgeRuntime(__resolveAppPageSegmentConfig({ layouts: __actionMatch.route.layouts, page: __actionMatch.route.page }).runtime)
831
+ ? __isEdgeRuntime(__resolveRouteRuntime(__actionMatch.route))
766
832
  : false;
767
833
  return __handleServerActionRscRequest({
768
834
  actionId,
@@ -780,6 +846,8 @@ export default createAppRscHandler({
780
846
  request: actionRequest,
781
847
  mountedSlotsHeader: actionMountedSlotsHeader,
782
848
  renderMode: actionRenderMode,
849
+ observeMetadataSearchParamsAccess,
850
+ observePageSearchParamsAccess,
783
851
  }) {
784
852
  return buildPageElements(actionRoute, actionParams, actionCleanPathname, {
785
853
  opts: interceptOpts,
@@ -788,6 +856,8 @@ export default createAppRscHandler({
788
856
  request: actionRequest,
789
857
  mountedSlotsHeader: actionMountedSlotsHeader,
790
858
  renderMode: actionRenderMode,
859
+ observeMetadataSearchParamsAccess: observeMetadataSearchParamsAccess === true,
860
+ observePageSearchParamsAccess: observePageSearchParamsAccess === true,
791
861
  });
792
862
  },
793
863
  cleanPathname,
@@ -813,6 +883,7 @@ export default createAppRscHandler({
813
883
  },
814
884
  createTemporaryReferenceSet,
815
885
  decodeReply,
886
+ draftModeSecret: __draftModeSecret,
816
887
  findIntercept(pathnameToMatch) {
817
888
  return findIntercept(pathnameToMatch, interceptionContext);
818
889
  },
@@ -856,6 +927,8 @@ export default createAppRscHandler({
856
927
  return {
857
928
  interceptionContext,
858
929
  interceptLayouts: intercept.interceptLayouts,
930
+ interceptLayoutSegments: intercept.interceptLayoutSegments,
931
+ interceptBranchSegments: intercept.interceptBranchSegments,
859
932
  interceptSlotId: intercept.slotId,
860
933
  interceptSlotKey: intercept.slotKey,
861
934
  interceptSourceMatchedUrl: interceptionContext,
@@ -879,11 +952,12 @@ export default createAppRscHandler({
879
952
  });
880
953
  },` : ""}
881
954
  matchRoute,
882
- ${middlewarePath ? `runMiddleware({ cleanPathname, context, isDataRequest, request }) {
955
+ ${middlewarePath ? `runMiddleware({ cleanPathname, context, hadBasePath, isDataRequest, request }) {
883
956
  return __applyAppMiddleware({
884
957
  basePath: __basePath,
885
958
  cleanPathname,
886
959
  context,
960
+ hadBasePath,
887
961
  filePath: ${JSON.stringify(middlewarePath ? normalizePathSeparators(middlewarePath) : "")},
888
962
  i18nConfig: __i18nConfig,
889
963
  isDataRequest,
@@ -895,7 +969,7 @@ export default createAppRscHandler({
895
969
  },` : ""}
896
970
  publicFiles: __publicFiles,
897
971
  renderNotFound({ isRscRequest, matchedParams, middlewareContext, request, route, scriptNonce }) {
898
- const __isEdge = route ? __isEdgeRuntime(__resolveAppPageSegmentConfig({ layouts: route.layouts, page: route.page }).runtime) : false;
972
+ const __isEdge = route ? __isEdgeRuntime(__resolveRouteRuntime(route)) : false;
899
973
  return __fallbackRenderer.renderNotFound(route, isRscRequest, request, matchedParams, scriptNonce, middlewareContext, { isEdgeRuntime: __isEdge });
900
974
  },
901
975
  ${hasPagesDir ? `async renderPagesFallback({ allowRscDocumentFallback, appRouteMatch, isDataRequest, isRscRequest, matchKind, middlewareContext, pathname, pagesDataRequest, request, url }) {