vinext 0.0.45 → 0.0.46

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 (222) hide show
  1. package/dist/build/prerender.js +10 -3
  2. package/dist/build/prerender.js.map +1 -1
  3. package/dist/build/standalone.js +4 -3
  4. package/dist/build/standalone.js.map +1 -1
  5. package/dist/check.js +30 -18
  6. package/dist/check.js.map +1 -1
  7. package/dist/cli.js +4 -0
  8. package/dist/cli.js.map +1 -1
  9. package/dist/cloudflare/kv-cache-handler.js.map +1 -1
  10. package/dist/config/config-matchers.js +1 -0
  11. package/dist/config/config-matchers.js.map +1 -1
  12. package/dist/config/next-config.d.ts +38 -2
  13. package/dist/config/next-config.js +24 -0
  14. package/dist/config/next-config.js.map +1 -1
  15. package/dist/deploy.js +18 -23
  16. package/dist/deploy.js.map +1 -1
  17. package/dist/entries/app-rsc-entry.js +331 -1732
  18. package/dist/entries/app-rsc-entry.js.map +1 -1
  19. package/dist/entries/app-rsc-manifest.d.ts +24 -0
  20. package/dist/entries/app-rsc-manifest.js +153 -0
  21. package/dist/entries/app-rsc-manifest.js.map +1 -0
  22. package/dist/entries/pages-server-entry.js +13 -103
  23. package/dist/entries/pages-server-entry.js.map +1 -1
  24. package/dist/index.js +54 -34
  25. package/dist/index.js.map +1 -1
  26. package/dist/plugins/rsc-client-shim-excludes.d.ts +6 -0
  27. package/dist/plugins/rsc-client-shim-excludes.js +27 -0
  28. package/dist/plugins/rsc-client-shim-excludes.js.map +1 -0
  29. package/dist/routing/app-router.d.ts +14 -5
  30. package/dist/routing/app-router.js +75 -1
  31. package/dist/routing/app-router.js.map +1 -1
  32. package/dist/routing/route-pattern.d.ts +9 -0
  33. package/dist/routing/route-pattern.js +90 -0
  34. package/dist/routing/route-pattern.js.map +1 -0
  35. package/dist/routing/route-trie.js +10 -11
  36. package/dist/routing/route-trie.js.map +1 -1
  37. package/dist/server/app-browser-entry.js +30 -2
  38. package/dist/server/app-browser-entry.js.map +1 -1
  39. package/dist/server/app-browser-state.js.map +1 -1
  40. package/dist/server/app-middleware.d.ts +32 -0
  41. package/dist/server/app-middleware.js +147 -0
  42. package/dist/server/app-middleware.js.map +1 -0
  43. package/dist/server/app-page-boundary-render.d.ts +2 -0
  44. package/dist/server/app-page-boundary-render.js +50 -30
  45. package/dist/server/app-page-boundary-render.js.map +1 -1
  46. package/dist/server/app-page-boundary.d.ts +12 -1
  47. package/dist/server/app-page-boundary.js +27 -12
  48. package/dist/server/app-page-boundary.js.map +1 -1
  49. package/dist/server/app-page-cache.d.ts +4 -1
  50. package/dist/server/app-page-cache.js +38 -2
  51. package/dist/server/app-page-cache.js.map +1 -1
  52. package/dist/server/app-page-dispatch.d.ts +120 -0
  53. package/dist/server/app-page-dispatch.js +332 -0
  54. package/dist/server/app-page-dispatch.js.map +1 -0
  55. package/dist/server/app-page-execution.d.ts +4 -3
  56. package/dist/server/app-page-execution.js +5 -8
  57. package/dist/server/app-page-execution.js.map +1 -1
  58. package/dist/server/app-page-head.d.ts +55 -0
  59. package/dist/server/app-page-head.js +196 -0
  60. package/dist/server/app-page-head.js.map +1 -0
  61. package/dist/server/app-page-method.d.ts +16 -0
  62. package/dist/server/app-page-method.js +30 -0
  63. package/dist/server/app-page-method.js.map +1 -0
  64. package/dist/server/app-page-params.d.ts +7 -0
  65. package/dist/server/app-page-params.js +28 -0
  66. package/dist/server/app-page-params.js.map +1 -0
  67. package/dist/server/app-page-render.d.ts +2 -1
  68. package/dist/server/app-page-render.js +54 -8
  69. package/dist/server/app-page-render.js.map +1 -1
  70. package/dist/server/app-page-request.d.ts +4 -4
  71. package/dist/server/app-page-request.js.map +1 -1
  72. package/dist/server/app-page-route-wiring.d.ts +14 -3
  73. package/dist/server/app-page-route-wiring.js +30 -8
  74. package/dist/server/app-page-route-wiring.js.map +1 -1
  75. package/dist/server/app-page-stream.d.ts +10 -0
  76. package/dist/server/app-page-stream.js +5 -1
  77. package/dist/server/app-page-stream.js.map +1 -1
  78. package/dist/server/app-prerender-endpoints.d.ts +19 -0
  79. package/dist/server/app-prerender-endpoints.js +96 -0
  80. package/dist/server/app-prerender-endpoints.js.map +1 -0
  81. package/dist/server/app-prerender-static-params.d.ts +16 -0
  82. package/dist/server/app-prerender-static-params.js +14 -0
  83. package/dist/server/app-prerender-static-params.js.map +1 -0
  84. package/dist/server/app-route-handler-cache.d.ts +3 -0
  85. package/dist/server/app-route-handler-cache.js +6 -2
  86. package/dist/server/app-route-handler-cache.js.map +1 -1
  87. package/dist/server/app-route-handler-dispatch.d.ts +42 -0
  88. package/dist/server/app-route-handler-dispatch.js +147 -0
  89. package/dist/server/app-route-handler-dispatch.js.map +1 -0
  90. package/dist/server/app-route-handler-execution.d.ts +6 -2
  91. package/dist/server/app-route-handler-execution.js +23 -2
  92. package/dist/server/app-route-handler-execution.js.map +1 -1
  93. package/dist/server/app-route-handler-response.d.ts +2 -1
  94. package/dist/server/app-route-handler-response.js +44 -4
  95. package/dist/server/app-route-handler-response.js.map +1 -1
  96. package/dist/server/app-route-handler-runtime.d.ts +4 -1
  97. package/dist/server/app-route-handler-runtime.js +107 -1
  98. package/dist/server/app-route-handler-runtime.js.map +1 -1
  99. package/dist/server/app-router-entry.js.map +1 -1
  100. package/dist/server/app-rsc-errors.d.ts +27 -0
  101. package/dist/server/app-rsc-errors.js +42 -0
  102. package/dist/server/app-rsc-errors.js.map +1 -0
  103. package/dist/server/app-rsc-route-matching.d.ts +40 -0
  104. package/dist/server/app-rsc-route-matching.js +66 -0
  105. package/dist/server/app-rsc-route-matching.js.map +1 -0
  106. package/dist/server/app-server-action-execution.d.ts +86 -1
  107. package/dist/server/app-server-action-execution.js +255 -5
  108. package/dist/server/app-server-action-execution.js.map +1 -1
  109. package/dist/server/app-ssr-entry.d.ts +7 -0
  110. package/dist/server/app-ssr-entry.js +30 -9
  111. package/dist/server/app-ssr-entry.js.map +1 -1
  112. package/dist/server/app-ssr-stream.d.ts +4 -2
  113. package/dist/server/app-ssr-stream.js +29 -2
  114. package/dist/server/app-ssr-stream.js.map +1 -1
  115. package/dist/server/app-static-generation.d.ts +15 -0
  116. package/dist/server/app-static-generation.js +20 -0
  117. package/dist/server/app-static-generation.js.map +1 -0
  118. package/dist/server/dev-route-files.d.ts +7 -0
  119. package/dist/server/dev-route-files.js +73 -0
  120. package/dist/server/dev-route-files.js.map +1 -0
  121. package/dist/server/dev-server.js +4 -0
  122. package/dist/server/dev-server.js.map +1 -1
  123. package/dist/server/file-based-metadata.d.ts +17 -0
  124. package/dist/server/file-based-metadata.js +356 -0
  125. package/dist/server/file-based-metadata.js.map +1 -0
  126. package/dist/server/implicit-tags.d.ts +6 -0
  127. package/dist/server/implicit-tags.js +42 -0
  128. package/dist/server/implicit-tags.js.map +1 -0
  129. package/dist/server/instrumentation.js.map +1 -1
  130. package/dist/server/isr-cache.d.ts +20 -2
  131. package/dist/server/isr-cache.js +58 -7
  132. package/dist/server/isr-cache.js.map +1 -1
  133. package/dist/server/metadata-route-build-data.d.ts +25 -0
  134. package/dist/server/metadata-route-build-data.js +150 -0
  135. package/dist/server/metadata-route-build-data.js.map +1 -0
  136. package/dist/server/metadata-route-response.d.ts +17 -0
  137. package/dist/server/metadata-route-response.js +187 -0
  138. package/dist/server/metadata-route-response.js.map +1 -0
  139. package/dist/server/metadata-routes.d.ts +42 -4
  140. package/dist/server/metadata-routes.js +127 -11
  141. package/dist/server/metadata-routes.js.map +1 -1
  142. package/dist/server/middleware-matcher.d.ts +15 -0
  143. package/dist/server/middleware-matcher.js +102 -0
  144. package/dist/server/middleware-matcher.js.map +1 -0
  145. package/dist/server/middleware-request-headers.js +2 -1
  146. package/dist/server/middleware-request-headers.js.map +1 -1
  147. package/dist/server/middleware-runtime.d.ts +39 -0
  148. package/dist/server/middleware-runtime.js +159 -0
  149. package/dist/server/middleware-runtime.js.map +1 -0
  150. package/dist/server/middleware.d.ts +4 -36
  151. package/dist/server/middleware.js +18 -228
  152. package/dist/server/middleware.js.map +1 -1
  153. package/dist/server/pages-page-data.d.ts +5 -1
  154. package/dist/server/pages-page-data.js +4 -0
  155. package/dist/server/pages-page-data.js.map +1 -1
  156. package/dist/server/pages-page-response.js +2 -1
  157. package/dist/server/pages-page-response.js.map +1 -1
  158. package/dist/server/prerender-work-unit-setup.d.ts +7 -0
  159. package/dist/server/prerender-work-unit-setup.js +30 -0
  160. package/dist/server/prerender-work-unit-setup.js.map +1 -0
  161. package/dist/server/prod-server.js +10 -14
  162. package/dist/server/prod-server.js.map +1 -1
  163. package/dist/server/request-pipeline.d.ts +46 -5
  164. package/dist/server/request-pipeline.js +84 -5
  165. package/dist/server/request-pipeline.js.map +1 -1
  166. package/dist/server/rsc-stream-hints.d.ts +5 -0
  167. package/dist/server/rsc-stream-hints.js +35 -0
  168. package/dist/server/rsc-stream-hints.js.map +1 -0
  169. package/dist/server/seed-cache.js.map +1 -1
  170. package/dist/server/server-action-not-found.d.ts +9 -0
  171. package/dist/server/server-action-not-found.js +40 -0
  172. package/dist/server/server-action-not-found.js.map +1 -0
  173. package/dist/shims/cache.d.ts +25 -2
  174. package/dist/shims/cache.js +52 -2
  175. package/dist/shims/cache.js.map +1 -1
  176. package/dist/shims/error-boundary.d.ts +50 -5
  177. package/dist/shims/error-boundary.js +76 -4
  178. package/dist/shims/error-boundary.js.map +1 -1
  179. package/dist/shims/font-google-base.d.ts +5 -4
  180. package/dist/shims/font-google-base.js +61 -13
  181. package/dist/shims/font-google-base.js.map +1 -1
  182. package/dist/shims/headers.d.ts +14 -2
  183. package/dist/shims/headers.js +127 -17
  184. package/dist/shims/headers.js.map +1 -1
  185. package/dist/shims/image.js +26 -8
  186. package/dist/shims/image.js.map +1 -1
  187. package/dist/shims/internal/make-hanging-promise.d.ts +16 -0
  188. package/dist/shims/internal/make-hanging-promise.js +46 -0
  189. package/dist/shims/internal/make-hanging-promise.js.map +1 -0
  190. package/dist/shims/internal/work-unit-async-storage.d.ts +26 -3
  191. package/dist/shims/internal/work-unit-async-storage.js +6 -3
  192. package/dist/shims/internal/work-unit-async-storage.js.map +1 -1
  193. package/dist/shims/metadata.d.ts +38 -26
  194. package/dist/shims/metadata.js +75 -45
  195. package/dist/shims/metadata.js.map +1 -1
  196. package/dist/shims/navigation.d.ts +10 -1
  197. package/dist/shims/navigation.js +18 -1
  198. package/dist/shims/navigation.js.map +1 -1
  199. package/dist/shims/navigation.react-server.d.ts +2 -2
  200. package/dist/shims/navigation.react-server.js +2 -2
  201. package/dist/shims/navigation.react-server.js.map +1 -1
  202. package/dist/shims/offline.d.ts +5 -0
  203. package/dist/shims/offline.js +17 -0
  204. package/dist/shims/offline.js.map +1 -0
  205. package/dist/shims/request-state-types.d.ts +2 -1
  206. package/dist/shims/root-params.d.ts +11 -0
  207. package/dist/shims/root-params.js +24 -0
  208. package/dist/shims/root-params.js.map +1 -0
  209. package/dist/shims/router.js +1 -1
  210. package/dist/shims/server.d.ts +3 -1
  211. package/dist/shims/server.js +83 -5
  212. package/dist/shims/server.js.map +1 -1
  213. package/dist/shims/thenable-params.d.ts +5 -0
  214. package/dist/shims/thenable-params.js +37 -0
  215. package/dist/shims/thenable-params.js.map +1 -0
  216. package/dist/shims/unified-request-context.d.ts +2 -1
  217. package/dist/shims/unified-request-context.js +2 -0
  218. package/dist/shims/unified-request-context.js.map +1 -1
  219. package/package.json +6 -1
  220. package/dist/server/middleware-codegen.d.ts +0 -54
  221. package/dist/server/middleware-codegen.js +0 -414
  222. package/dist/server/middleware-codegen.js.map +0 -1
package/dist/index.js CHANGED
@@ -3,18 +3,21 @@ import { normalizePathnameForRouteMatchStrict } from "./routing/utils.js";
3
3
  import { createValidFileMatcher } from "./routing/file-matcher.js";
4
4
  import { apiRouter, invalidateRouteCache, matchRoute, pagesRouter } from "./routing/pages-router.js";
5
5
  import { buildRequestHeadersFromMiddlewareResponse } from "./server/middleware-request-headers.js";
6
- import { isExternalUrl, matchHeaders, matchRedirect, matchRewrite, proxyExternalRequest, requestContextFromRequest, sanitizeDestination } from "./config/config-matchers.js";
7
6
  import { normalizePath as normalizePath$1 } from "./server/normalize-path.js";
7
+ import { isExternalUrl, matchHeaders, matchRedirect, matchRewrite, proxyExternalRequest, requestContextFromRequest, sanitizeDestination } from "./config/config-matchers.js";
8
+ import { hasBasePath } from "./utils/base-path.js";
9
+ import { isOpenRedirectShaped } from "./server/request-pipeline.js";
8
10
  import { findMiddlewareFile, runMiddleware } from "./server/middleware.js";
9
11
  import { generateServerEntry } from "./entries/pages-server-entry.js";
10
12
  import { generateClientEntry } from "./entries/pages-client-entry.js";
11
13
  import { appRouter, invalidateAppRouteCache } from "./routing/app-router.js";
12
14
  import { findInstrumentationClientFile, findInstrumentationFile, runInstrumentation } from "./server/instrumentation.js";
13
- import { hasBasePath } from "./utils/base-path.js";
14
15
  import { logRequest, now } from "./server/request-log.js";
15
16
  import { createSSRHandler } from "./server/dev-server.js";
16
17
  import { handleApiRoute } from "./server/api-handler.js";
17
18
  import { installSocketErrorBackstop } from "./server/socket-error-backstop.js";
19
+ import { scanMetadataFiles } from "./server/metadata-routes.js";
20
+ import { shouldInvalidateAppRouteFile } from "./server/dev-route-files.js";
18
21
  import { createDirectRunner } from "./server/dev-module-runner.js";
19
22
  import { validateDevRequest } from "./server/dev-origin-check.js";
20
23
  import { generateRscEntry } from "./entries/app-rsc-entry.js";
@@ -24,15 +27,14 @@ import { buildGenerateBundleReplacement, buildReasonsReplacement, collectRouteCl
24
27
  import { classifyLayoutByModuleGraph, isStaticModuleGraphResult, moduleGraphReason } from "./build/layout-classification.js";
25
28
  import { PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_BUILD } from "./shims/constants.js";
26
29
  import { findNextConfigPath, loadNextConfig, resolveNextConfig, resolveNextConfigInput } from "./config/next-config.js";
27
- import { isOpenRedirectShaped } from "./server/request-pipeline.js";
28
30
  import { precompressAssets } from "./build/precompress.js";
29
- import { scanMetadataFiles } from "./server/metadata-routes.js";
30
31
  import { manifestFileWithBase, manifestFilesWithBase } from "./utils/manifest-paths.js";
31
32
  import { asyncHooksStubPlugin } from "./plugins/async-hooks-stub.js";
32
33
  import { clientReferenceDedupPlugin } from "./plugins/client-reference-dedup.js";
33
34
  import { createInstrumentationClientTransformPlugin } from "./plugins/instrumentation-client.js";
34
35
  import { createOptimizeImportsPlugin } from "./plugins/optimize-imports.js";
35
36
  import { createOgInlineFetchAssetsPlugin, ogAssetsPlugin } from "./plugins/og-assets.js";
37
+ import { VINEXT_OPTIMIZE_DEPS_EXCLUDE, mergeOptimizeDepsExclude } from "./plugins/rsc-client-shim-excludes.js";
36
38
  import { createServerExternalsManifestPlugin } from "./plugins/server-externals-manifest.js";
37
39
  import { RESOLVED_VIRTUAL_GOOGLE_FONTS, VIRTUAL_GOOGLE_FONTS, createGoogleFontsPlugin, createLocalFontsPlugin, generateGoogleFontsVirtualModule, parseStaticObjectLiteral } from "./plugins/fonts.js";
38
40
  import { computeLazyChunks } from "./utils/lazy-chunks.js";
@@ -205,12 +207,23 @@ const VIRTUAL_APP_SSR_ENTRY = "virtual:vinext-app-ssr-entry";
205
207
  const RESOLVED_APP_SSR_ENTRY = "\0" + VIRTUAL_APP_SSR_ENTRY;
206
208
  const VIRTUAL_APP_BROWSER_ENTRY = "virtual:vinext-app-browser-entry";
207
209
  const RESOLVED_APP_BROWSER_ENTRY = "\0" + VIRTUAL_APP_BROWSER_ENTRY;
210
+ const RESOLVED_ROOT_PARAMS = "\0virtual:vinext-root-params";
208
211
  /** Image file extensions handled by the vinext:image-imports plugin.
209
212
  * Shared between the Rolldown hook filter and the transform handler regex. */
210
213
  const IMAGE_EXTS = "png|jpe?g|gif|webp|avif|svg|ico|bmp|tiff?";
211
214
  /** Absolute path to vinext's shims directory, used by clientManualChunks. */
212
215
  const _shimsDir = path.resolve(__dirname, "shims") + "/";
213
216
  const _fontGoogleShimPath = resolveShimModulePath(_shimsDir, "font-google");
217
+ function isValidExportIdentifier(name) {
218
+ return /^[$A-Z_a-z][$\w]*$/.test(name);
219
+ }
220
+ function generateRootParamsModule(rootParamNames) {
221
+ const names = Array.from(new Set(rootParamNames)).filter(isValidExportIdentifier).sort();
222
+ if (names.length === 0) return "export {};\n";
223
+ const rootParamsShimPath = resolveShimModulePath(_shimsDir, "root-params");
224
+ const exports = names.map((name) => `export function ${name}() { return getRootParam(${JSON.stringify(name)}); }`).join("\n");
225
+ return `import { getRootParam } from ${JSON.stringify(rootParamsShimPath)};\n${exports}\n`;
226
+ }
214
227
  /**
215
228
  * Shims with a `.react-server.ts` variant for the RSC environment.
216
229
  * Maps import specifier → base shim name. In the RSC env, resolveId
@@ -451,6 +464,7 @@ function vinext(options = {}) {
451
464
  "next/og": path.join(shimsDir, "og"),
452
465
  "next/web-vitals": path.join(shimsDir, "web-vitals"),
453
466
  "next/amp": path.join(shimsDir, "amp"),
467
+ "next/offline": path.join(shimsDir, "offline"),
454
468
  "next/error": path.join(shimsDir, "error"),
455
469
  "next/constants": path.join(shimsDir, "constants"),
456
470
  "next/dist/shared/lib/app-router-context.shared-runtime": path.join(shimsDir, "internal", "app-router-context"),
@@ -464,6 +478,7 @@ function vinext(options = {}) {
464
478
  "next/dist/client/components/work-unit-async-storage.external": path.join(shimsDir, "internal", "work-unit-async-storage"),
465
479
  "next/dist/client/components/request-async-storage.external": path.join(shimsDir, "internal", "work-unit-async-storage"),
466
480
  "next/dist/client/components/request-async-storage": path.join(shimsDir, "internal", "work-unit-async-storage"),
481
+ "next/dist/server/request/root-params": path.join(shimsDir, "root-params"),
467
482
  "next/dist/server/config-shared": path.join(shimsDir, "internal", "utils"),
468
483
  "server-only": path.join(shimsDir, "server-only"),
469
484
  "client-only": path.join(shimsDir, "client-only"),
@@ -557,12 +572,7 @@ function vinext(options = {}) {
557
572
  }
558
573
  };
559
574
  viteConfig.optimizeDeps = {
560
- exclude: [...new Set([
561
- ...incomingExclude,
562
- "vinext",
563
- "@vercel/og",
564
- "@tailwindcss/oxide"
565
- ])],
575
+ exclude: mergeOptimizeDepsExclude(incomingExclude, VINEXT_OPTIMIZE_DEPS_EXCLUDE, ["@tailwindcss/oxide"]),
566
576
  ...incomingInclude.length > 0 ? { include: incomingInclude } : {},
567
577
  rolldownOptions: { plugins: [depOptimizeAliasPlugin] }
568
578
  };
@@ -583,11 +593,7 @@ function vinext(options = {}) {
583
593
  ...userSsrExternal === true ? {} : { noExternal: true }
584
594
  } },
585
595
  optimizeDeps: {
586
- exclude: [...new Set([
587
- ...incomingExclude,
588
- "vinext",
589
- "@vercel/og"
590
- ])],
596
+ exclude: mergeOptimizeDepsExclude(incomingExclude, VINEXT_OPTIMIZE_DEPS_EXCLUDE),
591
597
  entries: optimizeEntries
592
598
  },
593
599
  build: {
@@ -601,11 +607,7 @@ function vinext(options = {}) {
601
607
  ...userSsrExternal === true ? {} : { noExternal: true }
602
608
  } },
603
609
  optimizeDeps: {
604
- exclude: [...new Set([
605
- ...incomingExclude,
606
- "vinext",
607
- "@vercel/og"
608
- ])],
610
+ exclude: mergeOptimizeDepsExclude(incomingExclude, VINEXT_OPTIMIZE_DEPS_EXCLUDE),
609
611
  entries: optimizeEntries
610
612
  },
611
613
  build: {
@@ -616,12 +618,7 @@ function vinext(options = {}) {
616
618
  client: {
617
619
  consumer: "client",
618
620
  optimizeDeps: {
619
- exclude: [...new Set([
620
- ...incomingExclude,
621
- "vinext",
622
- "@vercel/og",
623
- ...nextServerExternal
624
- ])],
621
+ exclude: mergeOptimizeDepsExclude(incomingExclude, VINEXT_OPTIMIZE_DEPS_EXCLUDE, nextServerExternal),
625
622
  entries: optimizeEntries,
626
623
  include: [...new Set([
627
624
  ...incomingInclude,
@@ -722,6 +719,7 @@ function vinext(options = {}) {
722
719
  if (cleanId === VIRTUAL_RSC_ENTRY) return RESOLVED_RSC_ENTRY;
723
720
  if (cleanId === VIRTUAL_APP_SSR_ENTRY) return RESOLVED_APP_SSR_ENTRY;
724
721
  if (cleanId === VIRTUAL_APP_BROWSER_ENTRY) return RESOLVED_APP_BROWSER_ENTRY;
722
+ if (cleanId === "next/root-params" || cleanId === "next/root-params.js") return RESOLVED_ROOT_PARAMS;
725
723
  if (cleanId.startsWith("virtual:vinext-google-fonts?")) return RESOLVED_VIRTUAL_GOOGLE_FONTS + cleanId.slice(VIRTUAL_GOOGLE_FONTS.length);
726
724
  if (cleanId.endsWith("/" + VIRTUAL_RSC_ENTRY) || cleanId.endsWith("\\" + VIRTUAL_RSC_ENTRY)) return RESOLVED_RSC_ENTRY;
727
725
  if (cleanId.endsWith("/" + VIRTUAL_APP_SSR_ENTRY) || cleanId.endsWith("\\" + VIRTUAL_APP_SSR_ENTRY)) return RESOLVED_APP_SSR_ENTRY;
@@ -754,6 +752,7 @@ function vinext(options = {}) {
754
752
  publicFiles: scanPublicFileRoutes(root)
755
753
  }, instrumentationPath);
756
754
  }
755
+ if (id === RESOLVED_ROOT_PARAMS) return generateRootParamsModule((hasAppDir ? await appRouter(appDir, nextConfig?.pageExtensions, fileMatcher) : []).flatMap((route) => route.rootParamNames ?? []));
757
756
  if (id === RESOLVED_APP_SSR_ENTRY && hasAppDir) return generateSsrEntry(hasPagesDir);
758
757
  if (id === RESOLVED_APP_BROWSER_ENTRY && hasAppDir) return generateBrowserEntry();
759
758
  if (id.startsWith("\0virtual:vinext-google-fonts?")) return generateGoogleFontsVirtualModule(id, _fontGoogleShimPath);
@@ -904,22 +903,27 @@ function vinext(options = {}) {
904
903
  rscEnv.hot.send({ type: "full-reload" });
905
904
  }
906
905
  }
906
+ function invalidateRootParamsModule() {
907
+ for (const env of Object.values(server.environments)) {
908
+ const mod = env.moduleGraph.getModuleById(RESOLVED_ROOT_PARAMS);
909
+ if (mod) env.moduleGraph.invalidateModule(mod);
910
+ }
911
+ }
912
+ function invalidateAppRoutingModules() {
913
+ invalidateAppRouteCache();
914
+ invalidateRscEntryModule();
915
+ invalidateRootParamsModule();
916
+ }
907
917
  server.httpServer?.on("connection", (socket) => {
908
918
  socket.on("error", () => {});
909
919
  });
910
920
  server.watcher.on("add", (filePath) => {
911
921
  if (hasPagesDir && filePath.startsWith(pagesDir) && pageExtensions.test(filePath)) invalidateRouteCache(pagesDir);
912
- if (hasAppDir && filePath.startsWith(appDir) && pageExtensions.test(filePath)) {
913
- invalidateAppRouteCache();
914
- invalidateRscEntryModule();
915
- }
922
+ if (hasAppDir && shouldInvalidateAppRouteFile(appDir, filePath, fileMatcher)) invalidateAppRoutingModules();
916
923
  });
917
924
  server.watcher.on("unlink", (filePath) => {
918
925
  if (hasPagesDir && filePath.startsWith(pagesDir) && pageExtensions.test(filePath)) invalidateRouteCache(pagesDir);
919
- if (hasAppDir && filePath.startsWith(appDir) && pageExtensions.test(filePath)) {
920
- invalidateAppRouteCache();
921
- invalidateRscEntryModule();
922
- }
926
+ if (hasAppDir && shouldInvalidateAppRouteFile(appDir, filePath, fileMatcher)) invalidateAppRoutingModules();
923
927
  });
924
928
  server.middlewares.use((req, res, next) => {
925
929
  const blockReason = validateDevRequest({
@@ -1086,6 +1090,10 @@ function vinext(options = {}) {
1086
1090
  const applyDeferredMwHeaders = () => {
1087
1091
  if (deferredMwResponseHeaders) for (const [key, value] of deferredMwResponseHeaders) res.appendHeader(key, value);
1088
1092
  };
1093
+ const applyMwRequestHeadersForExternalProxy = () => {
1094
+ if (middlewareRequestHeaders) applyRequestHeadersToNodeRequest(middlewareRequestHeaders);
1095
+ else delete req.headers["x-vinext-mw-ctx"];
1096
+ };
1089
1097
  if (middlewarePath) {
1090
1098
  const rawProto = process.env.VINEXT_TRUST_PROXY === "1" || (process.env.VINEXT_TRUSTED_HOSTS ?? "").split(",").some((h) => h.trim()) ? String(req.headers["x-forwarded-proto"] || "").split(",")[0].trim() : "";
1091
1099
  const origin = `${rawProto === "https" || rawProto === "http" ? rawProto : "http"}://${req.headers.host || "localhost"}`;
@@ -1151,6 +1159,7 @@ function vinext(options = {}) {
1151
1159
  if (nextConfig?.rewrites.beforeFiles.length) resolvedUrl = applyRewrites(pathname, nextConfig.rewrites.beforeFiles, reqCtx) ?? url;
1152
1160
  if (isExternalUrl(resolvedUrl)) {
1153
1161
  applyDeferredMwHeaders();
1162
+ applyMwRequestHeadersForExternalProxy();
1154
1163
  await proxyExternalRewriteNode(req, res, resolvedUrl);
1155
1164
  return;
1156
1165
  }
@@ -1174,6 +1183,7 @@ function vinext(options = {}) {
1174
1183
  }
1175
1184
  if (isExternalUrl(resolvedUrl)) {
1176
1185
  applyDeferredMwHeaders();
1186
+ applyMwRequestHeadersForExternalProxy();
1177
1187
  await proxyExternalRewriteNode(req, res, resolvedUrl);
1178
1188
  return;
1179
1189
  }
@@ -1190,6 +1200,7 @@ function vinext(options = {}) {
1190
1200
  if (fallbackRewrite) {
1191
1201
  if (isExternalUrl(fallbackRewrite)) {
1192
1202
  applyDeferredMwHeaders();
1203
+ applyMwRequestHeadersForExternalProxy();
1193
1204
  await proxyExternalRewriteNode(req, res, fallbackRewrite);
1194
1205
  return;
1195
1206
  }
@@ -1442,6 +1453,15 @@ function vinext(options = {}) {
1442
1453
  }
1443
1454
  };
1444
1455
  })(),
1456
+ {
1457
+ name: "vinext:hash-salt",
1458
+ apply: "build",
1459
+ augmentChunkHash() {
1460
+ if (this.environment?.name !== "client") return;
1461
+ const salt = nextConfig?.hashSalt;
1462
+ if (salt) return salt;
1463
+ }
1464
+ },
1445
1465
  (() => {
1446
1466
  const prerenderSecret = randomBytes(32).toString("hex");
1447
1467
  return {