vinext 1.0.0-beta.9 → 1.0.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 (800) hide show
  1. package/README.md +150 -92
  2. package/THIRD_PARTY_LICENSES.md +25 -0
  3. package/dist/_virtual/_rolldown/runtime.js +25 -0
  4. package/dist/build/action-owner-manifest.d.ts +8 -9
  5. package/dist/build/action-owner-manifest.js +23 -5
  6. package/dist/build/assets-ignore.d.ts +3 -4
  7. package/dist/build/clean-output.d.ts +2 -3
  8. package/dist/build/client-build-config.d.ts +40 -12
  9. package/dist/build/client-build-config.js +76 -6
  10. package/dist/build/css-url-assets.d.ts +4 -5
  11. package/dist/build/css-url-assets.js +5 -2
  12. package/dist/build/google-fonts/build-url.d.ts +3 -4
  13. package/dist/build/google-fonts/fallback-metrics.d.ts +3 -4
  14. package/dist/build/google-fonts/find-font-files-in-css.d.ts +2 -3
  15. package/dist/build/google-fonts/font-metadata.d.ts +2 -3
  16. package/dist/build/google-fonts/get-axes.d.ts +2 -3
  17. package/dist/build/google-fonts/sort-variants.d.ts +2 -3
  18. package/dist/build/google-fonts/validate.d.ts +2 -3
  19. package/dist/build/google-fonts/validate.js +8 -4
  20. package/dist/build/inject-pregenerated-paths.d.ts +2 -3
  21. package/dist/build/inject-pregenerated-paths.js +16 -14
  22. package/dist/build/inline-css.d.ts +3 -4
  23. package/dist/build/layout-classification-types.d.ts +4 -5
  24. package/dist/build/layout-classification.d.ts +7 -8
  25. package/dist/build/lifecycle.d.ts +42 -0
  26. package/dist/build/lifecycle.js +253 -0
  27. package/dist/build/module-dependency-cache.d.ts +2 -3
  28. package/dist/build/next-client-runtime-manifests.d.ts +4 -5
  29. package/dist/build/nitro-route-rules.d.ts +6 -7
  30. package/dist/build/nitro-route-rules.js +1 -1
  31. package/dist/build/pages-client-assets-module.d.ts +4 -8
  32. package/dist/build/pages-client-assets-module.js +1 -13
  33. package/dist/build/precompress.d.ts +2 -3
  34. package/dist/build/prerender-cloudflare-loader.d.ts +4 -0
  35. package/dist/build/prerender-cloudflare-loader.js +49 -0
  36. package/dist/build/prerender-paths.d.ts +36 -11
  37. package/dist/build/prerender-paths.js +273 -97
  38. package/dist/build/prerender-phase.d.ts +2 -3
  39. package/dist/build/prerender-server-entry.js +11 -3
  40. package/dist/build/prerender-server-pool.d.ts +9 -6
  41. package/dist/build/prerender-server-pool.js +8 -5
  42. package/dist/build/prerender.d.ts +65 -15
  43. package/dist/build/prerender.js +139 -43
  44. package/dist/build/preview-credentials.d.ts +5 -6
  45. package/dist/build/preview-credentials.js +2 -2
  46. package/dist/build/public-dir-conflict.d.ts +5 -6
  47. package/dist/build/public-dir-conflict.js +2 -1
  48. package/dist/build/report.d.ts +24 -20
  49. package/dist/build/report.js +10 -2
  50. package/dist/build/route-classification-injector.d.ts +2 -3
  51. package/dist/build/route-classification-manifest.d.ts +5 -6
  52. package/dist/build/run-prerender.d.ts +11 -9
  53. package/dist/build/run-prerender.js +25 -16
  54. package/dist/build/server-entry.d.ts +4 -0
  55. package/dist/build/server-entry.js +28 -0
  56. package/dist/build/server-manifest.d.ts +8 -3
  57. package/dist/build/server-manifest.js +14 -2
  58. package/dist/build/ssr-manifest.d.ts +5 -6
  59. package/dist/build/standalone.d.ts +2 -3
  60. package/dist/build/standalone.js +2 -2
  61. package/dist/build/static-export.d.ts +6 -7
  62. package/dist/cache/cache-adapters-virtual.d.ts +60 -20
  63. package/dist/cache/cache-adapters-virtual.js +50 -7
  64. package/dist/check.d.ts +11 -10
  65. package/dist/check.js +467 -176
  66. package/dist/cli-args.d.ts +7 -16
  67. package/dist/cli-args.js +2 -45
  68. package/dist/cli-dev-config.d.ts +10 -7
  69. package/dist/cli-dev-config.js +160 -3
  70. package/dist/cli.js +124 -442
  71. package/dist/client/app-nav-failure-handler.d.ts +6 -7
  72. package/dist/client/client-rewrite-matcher.d.ts +2 -3
  73. package/dist/client/client-rewrites.d.ts +4 -5
  74. package/dist/client/dev-error-overlay-store.d.ts +13 -14
  75. package/dist/client/dev-error-overlay.d.ts +15 -15
  76. package/dist/client/dev-error-overlay.js +8 -5
  77. package/dist/client/instrumentation-client-inject.d.ts +3 -4
  78. package/dist/client/instrumentation-client-state.d.ts +5 -6
  79. package/dist/client/instrumentation-client.d.ts +3 -4
  80. package/dist/client/navigation-runtime.d.ts +21 -17
  81. package/dist/client/navigation-runtime.js +2 -1
  82. package/dist/client/pages-router-link-navigation.d.ts +4 -5
  83. package/dist/client/react-instance.d.ts +2 -3
  84. package/dist/client/validate-module-path.d.ts +2 -3
  85. package/dist/client/vinext-next-data.d.ts +7 -10
  86. package/dist/client/window-next.d.ts +4 -5
  87. package/dist/config/config-matchers.d.ts +16 -16
  88. package/dist/config/config-matchers.js +2 -4
  89. package/dist/config/dotenv.d.ts +3 -4
  90. package/dist/config/dotenv.js +2 -1
  91. package/dist/config/next-config.d.ts +31 -27
  92. package/dist/config/next-config.js +163 -16
  93. package/dist/config/prerender.d.ts +20 -16
  94. package/dist/config/prerender.js +10 -4
  95. package/dist/config/request-context.d.ts +5 -6
  96. package/dist/config/server-external-packages.d.ts +14 -3
  97. package/dist/config/server-external-packages.js +37 -3
  98. package/dist/config/tsconfig-paths.d.ts +3 -4
  99. package/dist/deps/.pnpm/ignore@5.3.2/deps/ignore/index.js +189 -0
  100. package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +1057 -0
  101. package/dist/entries/app-browser-entry.d.ts +4 -5
  102. package/dist/entries/app-browser-entry.js +1 -3
  103. package/dist/entries/app-rsc-entry.d.ts +10 -3
  104. package/dist/entries/app-rsc-entry.js +502 -51
  105. package/dist/entries/app-rsc-manifest.d.ts +4 -3
  106. package/dist/entries/app-rsc-manifest.js +26 -8
  107. package/dist/entries/app-ssr-entry.d.ts +2 -3
  108. package/dist/entries/app-ssr-entry.js +8 -1
  109. package/dist/entries/pages-client-entry.d.ts +3 -3
  110. package/dist/entries/pages-client-entry.js +17 -2
  111. package/dist/entries/pages-server-entry.d.ts +13 -3
  112. package/dist/entries/pages-server-entry.js +234 -33
  113. package/dist/entries/runtime-entry-module.d.ts +4 -5
  114. package/dist/image/image-adapters-virtual.d.ts +4 -5
  115. package/dist/index.d.ts +10 -11
  116. package/dist/index.js +711 -189
  117. package/dist/init-cloudflare.d.ts +26 -17
  118. package/dist/init-cloudflare.js +710 -102
  119. package/dist/init-platform.d.ts +26 -22
  120. package/dist/init-platform.js +85 -29
  121. package/dist/init.d.ts +19 -13
  122. package/dist/init.js +123 -41
  123. package/dist/plugins/action-owner-manifest.d.ts +3 -4
  124. package/dist/plugins/action-owner-manifest.js +10 -3
  125. package/dist/plugins/ast-scope.d.ts +10 -11
  126. package/dist/plugins/ast-scope.js +10 -22
  127. package/dist/plugins/ast-utils.d.ts +16 -29
  128. package/dist/plugins/ast-utils.js +27 -71
  129. package/dist/plugins/async-hooks-stub.d.ts +2 -3
  130. package/dist/plugins/client-reference-dedup.d.ts +4 -5
  131. package/dist/plugins/css-data-url.d.ts +2 -3
  132. package/dist/plugins/css-module-imports.d.ts +3 -4
  133. package/dist/plugins/css-module-imports.js +1 -1
  134. package/dist/plugins/dynamic-preload-metadata.d.ts +3 -4
  135. package/dist/plugins/dynamic-preload-metadata.js +55 -154
  136. package/dist/plugins/environment.d.ts +2 -3
  137. package/dist/plugins/extensionless-dynamic-import.d.ts +2 -3
  138. package/dist/plugins/extensionless-dynamic-import.js +6 -10
  139. package/dist/plugins/fonts.d.ts +10 -11
  140. package/dist/plugins/fonts.js +4 -3
  141. package/dist/plugins/ignore-dynamic-requests.d.ts +3 -4
  142. package/dist/plugins/ignore-dynamic-requests.js +60 -89
  143. package/dist/plugins/import-meta-url.d.ts +6 -7
  144. package/dist/plugins/import-meta-url.js +31 -43
  145. package/dist/plugins/instrumentation-client.d.ts +3 -3
  146. package/dist/plugins/instrumentation-client.js +46 -10
  147. package/dist/plugins/middleware-export-validation.d.ts +3 -4
  148. package/dist/plugins/middleware-export-validation.js +3 -3
  149. package/dist/plugins/middleware-server-only.d.ts +2 -3
  150. package/dist/plugins/og-asset-ownership.d.ts +3 -4
  151. package/dist/plugins/og-assets.d.ts +4 -5
  152. package/dist/plugins/og-assets.js +32 -13
  153. package/dist/plugins/og-harfbuzz.d.ts +24 -0
  154. package/dist/plugins/og-harfbuzz.js +260 -0
  155. package/dist/plugins/optimize-imports.d.ts +7 -7
  156. package/dist/plugins/optimize-imports.js +32 -44
  157. package/dist/plugins/pages-node-externals.d.ts +2 -3
  158. package/dist/plugins/pages-node-externals.js +6 -11
  159. package/dist/plugins/postcss.d.ts +8 -4
  160. package/dist/plugins/postcss.js +1 -1
  161. package/dist/plugins/remove-console.d.ts +2 -3
  162. package/dist/plugins/remove-console.js +0 -1
  163. package/dist/plugins/require-condition-resolution.d.ts +3 -4
  164. package/dist/plugins/require-condition-resolution.js +17 -18
  165. package/dist/plugins/require-context.d.ts +2 -3
  166. package/dist/plugins/require-context.js +13 -21
  167. package/dist/plugins/rsc-client-reference-loaders.d.ts +2 -3
  168. package/dist/plugins/rsc-client-shim-excludes.d.ts +4 -5
  169. package/dist/plugins/rsc-client-shim-excludes.js +1 -0
  170. package/dist/plugins/rsc-reference-validation-normalizer.d.ts +2 -3
  171. package/dist/plugins/sass.d.ts +7 -8
  172. package/dist/plugins/sass.js +7 -4
  173. package/dist/plugins/server-externals-manifest.d.ts +2 -3
  174. package/dist/plugins/strip-server-exports.d.ts +5 -6
  175. package/dist/plugins/strip-server-exports.js +1 -1
  176. package/dist/plugins/styled-jsx.d.ts +2 -3
  177. package/dist/plugins/styled-jsx.js +7 -7
  178. package/dist/plugins/transform-cache.d.ts +2 -3
  179. package/dist/plugins/transform-result.d.ts +3 -4
  180. package/dist/plugins/transitive-externals.d.ts +2 -3
  181. package/dist/plugins/typeof-window.d.ts +6 -7
  182. package/dist/plugins/typeof-window.js +30 -31
  183. package/dist/plugins/use-cache-callable.d.ts +2 -5
  184. package/dist/plugins/use-cache-callable.js +43 -22
  185. package/dist/plugins/wasm-module-import.d.ts +2 -3
  186. package/dist/plugins/worker-image-imports.d.ts +2 -3
  187. package/dist/plugins/worker-image-imports.js +6 -8
  188. package/dist/routing/app-route-graph.d.ts +19 -19
  189. package/dist/routing/app-route-graph.js +3 -2
  190. package/dist/routing/app-router.d.ts +19 -6
  191. package/dist/routing/app-router.js +24 -2
  192. package/dist/routing/file-matcher.d.ts +9 -10
  193. package/dist/routing/pages-router.d.ts +6 -6
  194. package/dist/routing/pages-router.js +1 -1
  195. package/dist/routing/route-matching.d.ts +4 -5
  196. package/dist/routing/route-matching.js +4 -2
  197. package/dist/routing/route-pattern.d.ts +13 -14
  198. package/dist/routing/route-trie.d.ts +5 -6
  199. package/dist/routing/route-validation.d.ts +3 -4
  200. package/dist/routing/route-validation.js +12 -11
  201. package/dist/routing/utils.d.ts +13 -14
  202. package/dist/server/accept-encoding.d.ts +9 -10
  203. package/dist/server/api-handler.d.ts +2 -3
  204. package/dist/server/api-handler.js +9 -6
  205. package/dist/server/app-action-forwarding.d.ts +3 -4
  206. package/dist/server/app-action-forwarding.js +1 -1
  207. package/dist/server/app-action-request.d.ts +2 -3
  208. package/dist/server/app-bfcache-id.d.ts +3 -4
  209. package/dist/server/app-bfcache-identity.d.ts +8 -9
  210. package/dist/server/app-browser-action-result.d.ts +15 -16
  211. package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -3
  212. package/dist/server/app-browser-entry.js +87 -34
  213. package/dist/server/app-browser-error.d.ts +5 -6
  214. package/dist/server/app-browser-error.js +9 -3
  215. package/dist/server/app-browser-history-controller.d.ts +4 -5
  216. package/dist/server/app-browser-hydration.d.ts +16 -6
  217. package/dist/server/app-browser-hydration.js +14 -1
  218. package/dist/server/app-browser-interception-context.d.ts +3 -4
  219. package/dist/server/app-browser-mpa-navigation.d.ts +4 -5
  220. package/dist/server/app-browser-navigation-abort.d.ts +3 -4
  221. package/dist/server/app-browser-navigation-controller.d.ts +8 -8
  222. package/dist/server/app-browser-navigation-controller.js +8 -4
  223. package/dist/server/app-browser-navigation-response.d.ts +2 -3
  224. package/dist/server/app-browser-popstate.d.ts +4 -5
  225. package/dist/server/app-browser-prefetch-response.d.ts +5 -6
  226. package/dist/server/app-browser-rsc-redirect.d.ts +4 -5
  227. package/dist/server/app-browser-server-action-client.d.ts +7 -6
  228. package/dist/server/app-browser-server-action-client.js +9 -5
  229. package/dist/server/app-browser-server-action-navigation.d.ts +2 -3
  230. package/dist/server/app-browser-state.d.ts +17 -17
  231. package/dist/server/app-browser-state.js +6 -2
  232. package/dist/server/app-browser-stream.d.ts +4 -5
  233. package/dist/server/app-browser-stream.js +8 -6
  234. package/dist/server/app-browser-supplemental-refresh.d.ts +11 -12
  235. package/dist/server/app-browser-visible-commit.d.ts +6 -7
  236. package/dist/server/app-client-reference-preloader.d.ts +2 -3
  237. package/dist/server/app-elements-wire-key.d.ts +25 -0
  238. package/dist/server/app-elements-wire-key.js +69 -0
  239. package/dist/server/app-elements-wire.d.ts +34 -53
  240. package/dist/server/app-elements-wire.js +4 -75
  241. package/dist/server/app-elements.d.ts +5 -5
  242. package/dist/server/app-elements.js +1 -1
  243. package/dist/server/app-fallback-renderer.d.ts +4 -4
  244. package/dist/server/app-fallback-renderer.js +6 -6
  245. package/dist/server/app-fetch-tracing.d.ts +15 -0
  246. package/dist/server/app-fetch-tracing.js +38 -0
  247. package/dist/server/app-history-state.d.ts +26 -27
  248. package/dist/server/app-history-state.js +19 -11
  249. package/dist/server/app-hook-warning-suppression.d.ts +2 -3
  250. package/dist/server/app-hydration-cache-publication.d.ts +3 -4
  251. package/dist/server/app-inline-css-client.d.ts +3 -4
  252. package/dist/server/app-interception-context-header.d.ts +2 -3
  253. package/dist/server/app-layout-param-observation.d.ts +7 -8
  254. package/dist/server/app-metadata-tracing.d.ts +12 -0
  255. package/dist/server/app-metadata-tracing.js +17 -0
  256. package/dist/server/app-middleware.d.ts +7 -7
  257. package/dist/server/app-middleware.js +2 -3
  258. package/dist/server/app-mounted-slots-header.d.ts +2 -3
  259. package/dist/server/app-mounted-slots-header.js +2 -2
  260. package/dist/server/app-optimistic-routing.d.ts +10 -11
  261. package/dist/server/app-optimistic-routing.js +3 -2
  262. package/dist/server/app-page-boundary-render.d.ts +6 -6
  263. package/dist/server/app-page-boundary-render.js +10 -4
  264. package/dist/server/app-page-boundary.d.ts +9 -10
  265. package/dist/server/app-page-boundary.js +1 -1
  266. package/dist/server/app-page-cache-finalizer.d.ts +18 -9
  267. package/dist/server/app-page-cache-finalizer.js +51 -16
  268. package/dist/server/app-page-cache-render.d.ts +8 -5
  269. package/dist/server/app-page-cache-render.js +22 -5
  270. package/dist/server/app-page-cache.d.ts +28 -9
  271. package/dist/server/app-page-cache.js +95 -24
  272. package/dist/server/app-page-dispatch.d.ts +34 -12
  273. package/dist/server/app-page-dispatch.js +181 -64
  274. package/dist/server/app-page-element-builder.d.ts +13 -11
  275. package/dist/server/app-page-element-builder.js +104 -61
  276. package/dist/server/app-page-execution.d.ts +14 -14
  277. package/dist/server/app-page-execution.js +11 -7
  278. package/dist/server/app-page-head.d.ts +19 -16
  279. package/dist/server/app-page-head.js +25 -25
  280. package/dist/server/app-page-http-access-fallback-metadata.d.ts +6 -5
  281. package/dist/server/app-page-http-access-fallback-metadata.js +9 -2
  282. package/dist/server/app-page-method.d.ts +5 -11
  283. package/dist/server/app-page-method.js +2 -9
  284. package/dist/server/app-page-params.d.ts +5 -6
  285. package/dist/server/app-page-ppr-runtime.d.ts +2 -2
  286. package/dist/server/app-page-probe.d.ts +5 -6
  287. package/dist/server/app-page-probe.js +5 -4
  288. package/dist/server/app-page-render-identity.d.ts +4 -5
  289. package/dist/server/app-page-render-observation.d.ts +8 -9
  290. package/dist/server/app-page-render-observation.js +1 -1
  291. package/dist/server/app-page-render.d.ts +41 -6
  292. package/dist/server/app-page-render.js +171 -25
  293. package/dist/server/app-page-request.d.ts +10 -9
  294. package/dist/server/app-page-request.js +16 -12
  295. package/dist/server/app-page-response.d.ts +20 -9
  296. package/dist/server/app-page-response.js +30 -12
  297. package/dist/server/app-page-route-wiring.d.ts +15 -15
  298. package/dist/server/app-page-route-wiring.js +31 -24
  299. package/dist/server/app-page-search-params-observation.d.ts +26 -5
  300. package/dist/server/app-page-search-params-observation.js +42 -6
  301. package/dist/server/app-page-segment-plan.d.ts +2 -3
  302. package/dist/server/app-page-segment-state.d.ts +11 -12
  303. package/dist/server/app-page-stream.d.ts +27 -11
  304. package/dist/server/app-page-stream.js +34 -6
  305. package/dist/server/app-page-tracing.d.ts +33 -0
  306. package/dist/server/app-page-tracing.js +49 -0
  307. package/dist/server/app-pages-bridge.d.ts +6 -6
  308. package/dist/server/app-pages-bridge.js +17 -4
  309. package/dist/server/app-post-middleware-context.d.ts +2 -3
  310. package/dist/server/app-ppr-fallback-shell-render.d.ts +3 -4
  311. package/dist/server/app-ppr-fallback-shell-render.js +3 -2
  312. package/dist/server/app-ppr-fallback-shell.d.ts +6 -7
  313. package/dist/server/app-prerender-endpoints.d.ts +5 -5
  314. package/dist/server/app-prerender-endpoints.js +3 -1
  315. package/dist/server/app-prerender-static-params.d.ts +15 -7
  316. package/dist/server/app-prerender-static-params.js +24 -9
  317. package/dist/server/app-render-dependency.d.ts +14 -13
  318. package/dist/server/app-render-dependency.js +5 -1
  319. package/dist/server/app-request-context.d.ts +3 -4
  320. package/dist/server/app-request-stage-context.d.ts +5 -0
  321. package/dist/server/app-request-stage-context.js +11 -0
  322. package/dist/server/app-request-stage-dispatch.d.ts +25 -0
  323. package/dist/server/app-request-stage-dispatch.js +54 -0
  324. package/dist/server/app-request-stage-independent-entry.d.ts +8 -0
  325. package/dist/server/app-request-stage-independent-entry.js +115 -0
  326. package/dist/server/app-response-header-provenance.d.ts +13 -7
  327. package/dist/server/app-response-header-provenance.js +34 -1
  328. package/dist/server/app-response-stage-entry.d.ts +9 -0
  329. package/dist/server/app-response-stage-entry.js +87 -0
  330. package/dist/server/app-route-handler-cache.d.ts +2 -3
  331. package/dist/server/app-route-handler-cache.js +46 -34
  332. package/dist/server/app-route-handler-dispatch.d.ts +3 -3
  333. package/dist/server/app-route-handler-dispatch.js +68 -54
  334. package/dist/server/app-route-handler-execution.d.ts +17 -13
  335. package/dist/server/app-route-handler-execution.js +69 -18
  336. package/dist/server/app-route-handler-middleware-context.d.ts +8 -0
  337. package/dist/server/app-route-handler-middleware-context.js +15 -0
  338. package/dist/server/app-route-handler-policy.d.ts +11 -11
  339. package/dist/server/app-route-handler-response.d.ts +9 -10
  340. package/dist/server/app-route-handler-response.js +2 -0
  341. package/dist/server/app-route-handler-runtime.d.ts +9 -10
  342. package/dist/server/app-route-handler-runtime.js +20 -16
  343. package/dist/server/app-route-module-loader.d.ts +6 -7
  344. package/dist/server/app-route-request-built-ins.d.ts +3 -4
  345. package/dist/server/app-route-tree-prefetch.d.ts +6 -7
  346. package/dist/server/app-route-tree-prefetch.js +2 -1
  347. package/dist/server/app-router-entry.d.ts +2 -0
  348. package/dist/server/app-router-entry.js +28 -8
  349. package/dist/server/app-rsc-cache-busting.d.ts +34 -27
  350. package/dist/server/app-rsc-cache-busting.js +14 -2
  351. package/dist/server/app-rsc-combined-handler.d.ts +9 -0
  352. package/dist/server/app-rsc-combined-handler.js +11 -0
  353. package/dist/server/app-rsc-embedded-chunks.d.ts +6 -7
  354. package/dist/server/app-rsc-error-handler.d.ts +12 -6
  355. package/dist/server/app-rsc-error-handler.js +15 -6
  356. package/dist/server/app-rsc-errors.d.ts +12 -9
  357. package/dist/server/app-rsc-errors.js +15 -13
  358. package/dist/server/app-rsc-handler.d.ts +31 -6
  359. package/dist/server/app-rsc-handler.js +411 -61
  360. package/dist/server/app-rsc-redirect-flight.d.ts +4 -5
  361. package/dist/server/app-rsc-render-mode.d.ts +8 -9
  362. package/dist/server/app-rsc-request-normalization.d.ts +3 -3
  363. package/dist/server/app-rsc-request-normalization.js +2 -1
  364. package/dist/server/app-rsc-response-finalizer.d.ts +8 -5
  365. package/dist/server/app-rsc-response-finalizer.js +6 -6
  366. package/dist/server/app-rsc-response-stage.d.ts +6 -0
  367. package/dist/server/app-rsc-response-stage.js +251 -0
  368. package/dist/server/app-rsc-route-matching.d.ts +3 -4
  369. package/dist/server/app-rsc-route-matching.js +3 -2
  370. package/dist/server/app-rsc-state-fingerprint.d.ts +3 -4
  371. package/dist/server/app-rsc-vary.d.ts +16 -0
  372. package/dist/server/app-rsc-vary.js +31 -0
  373. package/dist/server/app-segment-config.d.ts +119 -7
  374. package/dist/server/app-segment-config.js +242 -2
  375. package/dist/server/app-server-action-execution.d.ts +16 -12
  376. package/dist/server/app-server-action-execution.js +86 -33
  377. package/dist/server/app-ssr-entry.d.ts +14 -4
  378. package/dist/server/app-ssr-entry.js +61 -14
  379. package/dist/server/app-ssr-error-meta.d.ts +3 -4
  380. package/dist/server/app-ssr-error-meta.js +2 -1
  381. package/dist/server/app-ssr-router-instance.d.ts +2 -3
  382. package/dist/server/app-ssr-search-params-gate.d.ts +20 -0
  383. package/dist/server/app-ssr-search-params-gate.js +54 -0
  384. package/dist/server/app-ssr-stream.d.ts +13 -9
  385. package/dist/server/app-ssr-stream.js +33 -7
  386. package/dist/server/app-static-generation.d.ts +4 -5
  387. package/dist/server/app-visited-response-cache.d.ts +11 -12
  388. package/dist/server/app-visited-response-cache.js +2 -2
  389. package/dist/server/app-worker-stages.d.ts +112 -0
  390. package/dist/server/app-worker-stages.js +105 -0
  391. package/dist/server/artifact-compatibility.d.ts +11 -12
  392. package/dist/server/before-interactive-head.d.ts +2 -3
  393. package/dist/server/bfcache-identity.d.ts +7 -8
  394. package/dist/server/cache-control.d.ts +35 -13
  395. package/dist/server/cache-control.js +71 -5
  396. package/dist/server/cache-headers.d.ts +3 -4
  397. package/dist/server/cache-proof.d.ts +75 -70
  398. package/dist/server/cache-proof.js +9 -1
  399. package/dist/server/cacheability-limits.d.ts +4 -5
  400. package/dist/server/cacheability-limits.js +2 -2
  401. package/dist/server/cacheability-manifest.d.ts +42 -16
  402. package/dist/server/cacheability-manifest.js +60 -10
  403. package/dist/server/cacheability-request.d.ts +37 -8
  404. package/dist/server/cacheability-request.js +159 -57
  405. package/dist/server/client-reuse-manifest.d.ts +17 -18
  406. package/dist/server/client-reuse-manifest.js +2 -2
  407. package/dist/server/client-trace-metadata.d.ts +9 -6
  408. package/dist/server/client-trace-metadata.js +27 -15
  409. package/dist/server/cloudflare-workers-tracing.d.ts +1 -0
  410. package/dist/server/cloudflare-workers-tracing.js +8 -0
  411. package/dist/server/config-headers.d.ts +19 -5
  412. package/dist/server/config-headers.js +25 -11
  413. package/dist/server/cookie-utils.d.ts +2 -3
  414. package/dist/server/csp.d.ts +5 -6
  415. package/dist/server/default-global-error-module.d.ts +2 -3
  416. package/dist/server/default-global-not-found-module.d.ts +2 -3
  417. package/dist/server/default-not-found-module.d.ts +2 -3
  418. package/dist/server/defer-until-stream-consumed.d.ts +2 -3
  419. package/dist/server/defer-until-stream-consumed.js +2 -1
  420. package/dist/server/dev-initial-server-error.d.ts +3 -4
  421. package/dist/server/dev-initial-server-error.js +2 -1
  422. package/dist/server/dev-lockfile.d.ts +7 -8
  423. package/dist/server/dev-lockfile.js +4 -1
  424. package/dist/server/dev-module-runner.d.ts +2 -3
  425. package/dist/server/dev-origin-check.d.ts +5 -6
  426. package/dist/server/dev-route-files.d.ts +2 -3
  427. package/dist/server/dev-server.d.ts +4 -5
  428. package/dist/server/dev-server.js +130 -61
  429. package/dist/server/dev-stack-sourcemap.d.ts +7 -7
  430. package/dist/server/dev-stack-sourcemap.js +1 -1
  431. package/dist/server/document-initial-head.d.ts +3 -4
  432. package/dist/server/edge-api-runtime.d.ts +4 -5
  433. package/dist/server/fetch-handler.d.ts +3 -2
  434. package/dist/server/fetch-handler.js +3 -18
  435. package/dist/server/file-based-metadata.d.ts +2 -3
  436. package/dist/server/framework-tracer.d.ts +46 -0
  437. package/dist/server/framework-tracer.js +125 -0
  438. package/dist/server/fully-buffered-response.d.ts +11 -0
  439. package/dist/server/fully-buffered-response.js +19 -0
  440. package/dist/server/headers.d.ts +54 -61
  441. package/dist/server/headers.js +18 -31
  442. package/dist/server/html.d.ts +6 -27
  443. package/dist/server/html.js +16 -1
  444. package/dist/server/http-conditional.d.ts +5 -6
  445. package/dist/server/http-date.d.ts +2 -3
  446. package/dist/server/http-error-responses.d.ts +9 -10
  447. package/dist/server/http-range.d.ts +4 -5
  448. package/dist/server/hybrid-route-priority.d.ts +4 -5
  449. package/dist/server/image-optimization.d.ts +20 -21
  450. package/dist/server/implicit-tags.d.ts +3 -4
  451. package/dist/server/instrumentation-runtime.d.ts +17 -21
  452. package/dist/server/instrumentation-runtime.js +26 -8
  453. package/dist/server/instrumentation.d.ts +26 -30
  454. package/dist/server/instrumentation.js +18 -23
  455. package/dist/server/isr-cache.d.ts +28 -27
  456. package/dist/server/isr-cache.js +18 -70
  457. package/dist/server/isr-decision.d.ts +4 -4
  458. package/dist/server/metadata-route-build-data.d.ts +4 -5
  459. package/dist/server/metadata-route-cache-policy.d.ts +2 -3
  460. package/dist/server/metadata-route-response.d.ts +7 -7
  461. package/dist/server/metadata-route-response.js +68 -2
  462. package/dist/server/metadata-routes.d.ts +18 -19
  463. package/dist/server/middleware-matcher-pattern.d.ts +6 -7
  464. package/dist/server/middleware-matcher.d.ts +6 -7
  465. package/dist/server/middleware-path-to-regexp.d.ts +6 -7
  466. package/dist/server/middleware-path-to-regexp.js +11 -9
  467. package/dist/server/middleware-response-headers.d.ts +3 -4
  468. package/dist/server/middleware-runtime.d.ts +7 -8
  469. package/dist/server/middleware-runtime.js +36 -7
  470. package/dist/server/middleware.d.ts +5 -5
  471. package/dist/server/multi-stage.d.ts +141 -0
  472. package/dist/server/multi-stage.js +8 -0
  473. package/dist/server/navigation-planner.d.ts +26 -26
  474. package/dist/server/navigation-trace.d.ts +11 -12
  475. package/dist/server/next-error-digest.d.ts +4 -5
  476. package/dist/server/normalize-path.d.ts +5 -6
  477. package/dist/server/open-redirect.d.ts +2 -3
  478. package/dist/server/opentelemetry-api.d.ts +59 -0
  479. package/dist/server/opentelemetry-api.js +53 -0
  480. package/dist/server/opentelemetry-tracing.d.ts +5 -0
  481. package/dist/server/opentelemetry-tracing.js +83 -0
  482. package/dist/server/operation-token.d.ts +11 -12
  483. package/dist/server/otel-tracer-extension.d.ts +7 -9
  484. package/dist/server/otel-tracer-extension.js +37 -36
  485. package/dist/server/pages-api-route.d.ts +5 -4
  486. package/dist/server/pages-api-route.js +20 -7
  487. package/dist/server/pages-asset-tags.d.ts +6 -6
  488. package/dist/server/pages-asset-tags.js +37 -2
  489. package/dist/server/pages-body-parser-config.d.ts +4 -5
  490. package/dist/server/pages-body-parser-config.js +4 -4
  491. package/dist/server/pages-client-assets.d.ts +11 -5
  492. package/dist/server/pages-data-route.d.ts +11 -12
  493. package/dist/server/pages-data-route.js +1 -1
  494. package/dist/server/pages-default-404.d.ts +3 -4
  495. package/dist/server/pages-dev-hydration.d.ts +9 -4
  496. package/dist/server/pages-dev-hydration.js +19 -7
  497. package/dist/server/pages-dev-module-url.d.ts +3 -4
  498. package/dist/server/pages-dev-stylesheets.d.ts +5 -6
  499. package/dist/server/pages-document-asset-props.d.ts +6 -7
  500. package/dist/server/pages-document-initial-props.d.ts +5 -5
  501. package/dist/server/pages-document-initial-props.js +4 -2
  502. package/dist/server/pages-execution-tracing.d.ts +40 -0
  503. package/dist/server/pages-execution-tracing.js +80 -0
  504. package/dist/server/pages-get-initial-props.d.ts +9 -10
  505. package/dist/server/pages-i18n.d.ts +8 -8
  506. package/dist/server/pages-media-type.d.ts +4 -5
  507. package/dist/server/pages-node-compat.d.ts +11 -10
  508. package/dist/server/pages-node-compat.js +12 -4
  509. package/dist/server/pages-page-data.d.ts +18 -19
  510. package/dist/server/pages-page-data.js +11 -10
  511. package/dist/server/pages-page-handler.d.ts +7 -6
  512. package/dist/server/pages-page-handler.js +77 -39
  513. package/dist/server/pages-page-method.d.ts +2 -3
  514. package/dist/server/pages-page-response.d.ts +14 -10
  515. package/dist/server/pages-page-response.js +49 -31
  516. package/dist/server/pages-preview.d.ts +10 -11
  517. package/dist/server/pages-readiness.d.ts +2 -3
  518. package/dist/server/pages-request-pipeline.d.ts +14 -12
  519. package/dist/server/pages-request-pipeline.js +60 -30
  520. package/dist/server/pages-request-stage-entry.d.ts +23 -0
  521. package/dist/server/pages-request-stage-entry.js +314 -0
  522. package/dist/server/pages-response-stage-entry.d.ts +11 -0
  523. package/dist/server/pages-response-stage-entry.js +106 -0
  524. package/dist/server/pages-response-stage.d.ts +31 -0
  525. package/dist/server/pages-response-stage.js +49 -0
  526. package/dist/server/pages-revalidate.d.ts +3 -4
  527. package/dist/server/pages-revalidate.js +9 -4
  528. package/dist/server/pages-route-data-kind.d.ts +18 -0
  529. package/dist/server/pages-route-data-kind.js +11 -0
  530. package/dist/server/pages-router-entry.d.ts +1 -25
  531. package/dist/server/pages-router-entry.js +35 -148
  532. package/dist/server/pages-serializable-props.d.ts +3 -4
  533. package/dist/server/pregenerated-concrete-paths.d.ts +9 -7
  534. package/dist/server/pregenerated-concrete-paths.js +12 -6
  535. package/dist/server/prerender-cache-life-header.d.ts +3 -4
  536. package/dist/server/prerender-manifest.d.ts +11 -11
  537. package/dist/server/prerender-manifest.js +6 -3
  538. package/dist/server/prerender-route-params.d.ts +16 -9
  539. package/dist/server/prerender-route-params.js +18 -3
  540. package/dist/server/prerender-work-unit-setup.d.ts +2 -3
  541. package/dist/server/prerender-work-unit-setup.js +5 -5
  542. package/dist/server/prod-server.d.ts +12 -9
  543. package/dist/server/prod-server.js +124 -31
  544. package/dist/server/proxy-trust.d.ts +5 -6
  545. package/dist/server/request-log.d.ts +3 -4
  546. package/dist/server/request-pipeline.d.ts +16 -16
  547. package/dist/server/request-pipeline.js +7 -2
  548. package/dist/server/request-stage.d.ts +5 -0
  549. package/dist/server/request-stage.js +7 -0
  550. package/dist/server/request-tracing.d.ts +22 -0
  551. package/dist/server/request-tracing.js +180 -0
  552. package/dist/server/response-stage-cacheability.d.ts +37 -0
  553. package/dist/server/response-stage-cacheability.js +55 -0
  554. package/dist/server/response-stage-policy.d.ts +23 -0
  555. package/dist/server/response-stage-policy.js +89 -0
  556. package/dist/server/response-stage.d.ts +5 -0
  557. package/dist/server/response-stage.js +7 -0
  558. package/dist/server/response-start-tracing.d.ts +14 -0
  559. package/dist/server/response-start-tracing.js +80 -0
  560. package/dist/server/revalidation-host.d.ts +2 -3
  561. package/dist/server/revalidation-host.js +1 -1
  562. package/dist/server/revalidation-request.d.ts +8 -0
  563. package/dist/server/revalidation-request.js +37 -0
  564. package/dist/server/rsc-completion-metadata.d.ts +6 -7
  565. package/dist/server/rsc-stream-hints.d.ts +18 -7
  566. package/dist/server/rsc-stream-hints.js +70 -35
  567. package/dist/server/seed-cache.d.ts +2 -3
  568. package/dist/server/seed-cache.js +8 -7
  569. package/dist/server/server-action-not-found.d.ts +5 -6
  570. package/dist/server/server-globals.d.ts +2 -3
  571. package/dist/server/skip-cache-proof.d.ts +4 -4
  572. package/dist/server/socket-error-backstop.d.ts +5 -6
  573. package/dist/server/socket-error-backstop.js +1 -1
  574. package/dist/server/static-file-cache.d.ts +5 -6
  575. package/dist/server/static-file-cache.js +9 -7
  576. package/dist/server/static-file-signal.d.ts +9 -6
  577. package/dist/server/static-file-signal.js +51 -2
  578. package/dist/server/static-layout-client-reuse-proof.d.ts +4 -5
  579. package/dist/server/streaming-metadata.d.ts +2 -3
  580. package/dist/server/tracer.d.ts +5 -0
  581. package/dist/server/tracer.js +13 -0
  582. package/dist/server/worker-prerender-discovery.d.ts +5 -6
  583. package/dist/server/worker-revalidation-context.d.ts +2 -3
  584. package/dist/server/worker-revalidation-context.js +5 -5
  585. package/dist/server/worker-stages.d.ts +43 -0
  586. package/dist/server/worker-stages.js +25 -0
  587. package/dist/server/worker-utils.d.ts +5 -6
  588. package/dist/server/worker-utils.js +2 -1
  589. package/dist/server/workers-tracing.d.ts +17 -0
  590. package/dist/server/workers-tracing.js +27 -0
  591. package/dist/shims/amp.d.ts +3 -4
  592. package/dist/shims/app-router-scroll-state.d.ts +9 -10
  593. package/dist/shims/app-router-scroll.d.ts +4 -5
  594. package/dist/shims/app-router-scroll.js +2 -1
  595. package/dist/shims/app.d.ts +5 -6
  596. package/dist/shims/before-interactive-context.d.ts +5 -6
  597. package/dist/shims/cache-callable-runtime.d.ts +44 -4
  598. package/dist/shims/cache-callable-runtime.js +168 -8
  599. package/dist/shims/cache-for-request.d.ts +2 -3
  600. package/dist/shims/cache-handler.d.ts +33 -20
  601. package/dist/shims/cache-handler.js +61 -2
  602. package/dist/shims/cache-request-state.d.ts +28 -29
  603. package/dist/shims/cache-runtime.d.ts +23 -21
  604. package/dist/shims/cache-runtime.js +107 -27
  605. package/dist/shims/cache.d.ts +15 -15
  606. package/dist/shims/cache.js +15 -13
  607. package/dist/shims/cacheability-classification.d.ts +49 -28
  608. package/dist/shims/cacheability-classification.js +27 -12
  609. package/dist/shims/cdn-cache-state.d.ts +13 -0
  610. package/dist/shims/cdn-cache-state.js +23 -0
  611. package/dist/shims/cdn-cache.d.ts +50 -21
  612. package/dist/shims/cdn-cache.js +15 -38
  613. package/dist/shims/client-hook-error.d.ts +3 -4
  614. package/dist/shims/client-locale.d.ts +2 -3
  615. package/dist/shims/client-page-root.d.ts +24 -0
  616. package/dist/shims/client-page-root.js +121 -0
  617. package/dist/shims/compat-router.d.ts +2 -3
  618. package/dist/shims/config.d.ts +3 -4
  619. package/dist/shims/constants.d.ts +73 -74
  620. package/dist/shims/constants.js +1 -1
  621. package/dist/shims/default-not-found.d.ts +2 -3
  622. package/dist/shims/document.d.ts +9 -9
  623. package/dist/shims/dynamic-preload-chunks.d.ts +2 -3
  624. package/dist/shims/dynamic-preload-chunks.js +17 -13
  625. package/dist/shims/dynamic.d.ts +3 -3
  626. package/dist/shims/error-boundary-navigation.d.ts +3 -4
  627. package/dist/shims/error-boundary.d.ts +17 -18
  628. package/dist/shims/error-boundary.js +17 -11
  629. package/dist/shims/error.d.ts +4 -4
  630. package/dist/shims/error.react-server.d.ts +3 -4
  631. package/dist/shims/fetch-cache.d.ts +22 -22
  632. package/dist/shims/fetch-cache.js +42 -17
  633. package/dist/shims/font-google-base.d.ts +9 -9
  634. package/dist/shims/font-google-base.js +2 -1
  635. package/dist/shims/font-local.d.ts +3 -3
  636. package/dist/shims/font-local.js +1 -1
  637. package/dist/shims/font-utils.d.ts +14 -15
  638. package/dist/shims/form.d.ts +2 -2
  639. package/dist/shims/form.js +10 -7
  640. package/dist/shims/hash-scroll.d.ts +5 -6
  641. package/dist/shims/head-state.d.ts +4 -5
  642. package/dist/shims/head.d.ts +16 -16
  643. package/dist/shims/head.js +5 -4
  644. package/dist/shims/headers.d.ts +67 -33
  645. package/dist/shims/headers.js +93 -6
  646. package/dist/shims/i18n-context.d.ts +5 -6
  647. package/dist/shims/i18n-state.d.ts +4 -5
  648. package/dist/shims/image-config.d.ts +5 -6
  649. package/dist/shims/image-config.js +2 -0
  650. package/dist/shims/image.d.ts +5 -5
  651. package/dist/shims/image.js +12 -8
  652. package/dist/shims/internal/als-registry.d.ts +4 -5
  653. package/dist/shims/internal/api-utils.d.ts +3 -4
  654. package/dist/shims/internal/app-page-props-cache-key.d.ts +32 -4
  655. package/dist/shims/internal/app-page-props-cache-key.js +53 -1
  656. package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +5 -6
  657. package/dist/shims/internal/app-prefetch-rsc-request.d.ts +5 -17
  658. package/dist/shims/internal/app-prefetch-rsc-request.js +5 -14
  659. package/dist/shims/internal/app-route-detection.d.ts +2 -2
  660. package/dist/shims/internal/app-route-prefetch-policy.d.ts +5 -8
  661. package/dist/shims/internal/app-route-prefetch-policy.js +0 -1
  662. package/dist/shims/internal/app-router-context.d.ts +9 -10
  663. package/dist/shims/internal/cookie-serialize.d.ts +4 -5
  664. package/dist/shims/internal/format-url-object.d.ts +7 -0
  665. package/dist/shims/internal/format-url-object.js +53 -0
  666. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +6 -7
  667. package/dist/shims/internal/hybrid-client-route-owner.d.ts +3 -3
  668. package/dist/shims/internal/hybrid-client-route-owner.js +3 -2
  669. package/dist/shims/internal/interpolate-as.d.ts +5 -6
  670. package/dist/shims/internal/interpolate-as.js +4 -2
  671. package/dist/shims/internal/link-status-registry.d.ts +5 -6
  672. package/dist/shims/internal/make-hanging-promise.d.ts +3 -4
  673. package/dist/shims/internal/navigation-untracked.d.ts +2 -3
  674. package/dist/shims/internal/normalize-router-href.d.ts +15 -0
  675. package/dist/shims/internal/normalize-router-href.js +41 -0
  676. package/dist/shims/internal/pages-data-fetch-dedup.d.ts +8 -9
  677. package/dist/shims/internal/pages-data-target.d.ts +8 -6
  678. package/dist/shims/internal/pages-data-target.js +32 -36
  679. package/dist/shims/internal/pages-data-url.d.ts +4 -5
  680. package/dist/shims/internal/pages-data-url.js +2 -1
  681. package/dist/shims/internal/pages-router-accessor.d.ts +3 -4
  682. package/dist/shims/internal/pages-router-components.d.ts +3 -4
  683. package/dist/shims/internal/route-pattern-for-warning.d.ts +5 -6
  684. package/dist/shims/internal/route-pattern-for-warning.js +3 -3
  685. package/dist/shims/internal/router-context.d.ts +2 -3
  686. package/dist/shims/internal/thenable-well-known-properties.d.ts +10 -0
  687. package/dist/shims/internal/thenable-well-known-properties.js +33 -0
  688. package/dist/shims/internal/utils.d.ts +7 -8
  689. package/dist/shims/internal/work-unit-async-storage.d.ts +10 -11
  690. package/dist/shims/layout-segment-context.d.ts +3 -4
  691. package/dist/shims/link-prefetch.d.ts +9 -10
  692. package/dist/shims/link.d.ts +4 -4
  693. package/dist/shims/link.js +56 -116
  694. package/dist/shims/metadata.d.ts +15 -16
  695. package/dist/shims/metadata.js +40 -36
  696. package/dist/shims/navigation-context-accessors.d.ts +9 -0
  697. package/dist/shims/navigation-context-accessors.js +19 -0
  698. package/dist/shims/navigation-context-state.d.ts +27 -18
  699. package/dist/shims/navigation-errors.d.ts +18 -19
  700. package/dist/shims/navigation-state.d.ts +6 -7
  701. package/dist/shims/navigation.d.ts +80 -68
  702. package/dist/shims/navigation.js +24 -16
  703. package/dist/shims/navigation.react-server.d.ts +9 -9
  704. package/dist/shims/offline.d.ts +2 -3
  705. package/dist/shims/og.d.ts +2 -2
  706. package/dist/shims/pages-router-runtime.d.ts +4 -5
  707. package/dist/shims/ppr-fallback-shell.d.ts +13 -14
  708. package/dist/shims/readonly-url-search-params.d.ts +2 -3
  709. package/dist/shims/request-context.d.ts +5 -6
  710. package/dist/shims/root-params.d.ts +14 -15
  711. package/dist/shims/router-state.d.ts +5 -6
  712. package/dist/shims/router-state.js +1 -1
  713. package/dist/shims/router.d.ts +22 -21
  714. package/dist/shims/router.js +339 -164
  715. package/dist/shims/script-nonce-context.d.ts +8 -6
  716. package/dist/shims/script-nonce-context.js +15 -6
  717. package/dist/shims/script.d.ts +4 -4
  718. package/dist/shims/script.js +9 -7
  719. package/dist/shims/search-params-gate.d.ts +35 -0
  720. package/dist/shims/search-params-gate.js +32 -0
  721. package/dist/shims/server.d.ts +19 -51
  722. package/dist/shims/server.js +14 -28
  723. package/dist/shims/slot.d.ts +33 -15
  724. package/dist/shims/slot.js +41 -9
  725. package/dist/shims/streamed-icons.d.ts +3 -4
  726. package/dist/shims/thenable-params.d.ts +5 -7
  727. package/dist/shims/thenable-params.js +3 -24
  728. package/dist/shims/unified-request-context.d.ts +34 -31
  729. package/dist/shims/unified-request-context.js +34 -24
  730. package/dist/shims/unrecognized-action-error.d.ts +3 -4
  731. package/dist/shims/url-safety.d.ts +5 -6
  732. package/dist/shims/url-utils.d.ts +12 -13
  733. package/dist/shims/use-merged-ref.d.ts +2 -3
  734. package/dist/shims/user-agent.d.ts +31 -0
  735. package/dist/shims/user-agent.js +16 -0
  736. package/dist/shims/web-vitals.d.ts +2 -2
  737. package/dist/typegen.d.ts +3 -4
  738. package/dist/utils/asset-prefix.d.ts +7 -8
  739. package/dist/utils/base-path.d.ts +5 -6
  740. package/dist/utils/built-asset-url.d.ts +2 -3
  741. package/dist/utils/built-asset-url.js +1 -1
  742. package/dist/utils/cache-control-metadata.d.ts +4 -5
  743. package/dist/utils/client-build-manifest.d.ts +6 -7
  744. package/dist/utils/client-build-manifest.js +2 -1
  745. package/dist/utils/client-entry-manifest.d.ts +6 -7
  746. package/dist/utils/client-runtime-metadata.d.ts +8 -3
  747. package/dist/utils/client-runtime-metadata.js +18 -1
  748. package/dist/utils/commonjs-loader.d.ts +4 -5
  749. package/dist/utils/compare.d.ts +2 -3
  750. package/dist/utils/deployment-id.d.ts +6 -7
  751. package/dist/utils/dev-error-recovery-event.d.ts +2 -3
  752. package/dist/utils/dev-stack-sourcemap-endpoint.d.ts +2 -3
  753. package/dist/utils/domain-locale.d.ts +7 -8
  754. package/dist/utils/encode-cache-tag.d.ts +3 -4
  755. package/dist/utils/error-cause.d.ts +2 -3
  756. package/dist/utils/external-url.d.ts +2 -3
  757. package/dist/utils/has-trailing-comma.d.ts +3 -4
  758. package/dist/utils/hash.d.ts +3 -4
  759. package/dist/utils/html-limited-bots.d.ts +3 -4
  760. package/dist/utils/lazy-chunks.d.ts +8 -9
  761. package/dist/utils/lazy-chunks.js +4 -4
  762. package/dist/utils/manifest-paths.d.ts +5 -6
  763. package/dist/utils/mdx-scan.d.ts +11 -4
  764. package/dist/utils/mdx-scan.js +27 -1
  765. package/dist/utils/middleware-request-headers.d.ts +7 -6
  766. package/dist/utils/middleware-request-headers.js +6 -1
  767. package/dist/utils/navigation-signal.d.ts +3 -3
  768. package/dist/utils/navigation-signal.js +16 -1
  769. package/dist/utils/number.d.ts +2 -3
  770. package/dist/utils/package-name.d.ts +3 -4
  771. package/dist/utils/parse-cookie.d.ts +4 -5
  772. package/dist/utils/path.d.ts +8 -9
  773. package/dist/utils/plugin-options.d.ts +2 -3
  774. package/dist/utils/precompressed-variant.d.ts +3 -4
  775. package/dist/utils/prerender-output-paths.d.ts +4 -5
  776. package/dist/utils/project.d.ts +19 -30
  777. package/dist/utils/project.js +20 -29
  778. package/dist/utils/promise.d.ts +2 -3
  779. package/dist/utils/protocol-headers.d.ts +14 -15
  780. package/dist/utils/public-file-path.d.ts +2 -3
  781. package/dist/utils/public-routes.d.ts +2 -3
  782. package/dist/utils/query.d.ts +14 -9
  783. package/dist/utils/query.js +22 -1
  784. package/dist/utils/react-compiler-support.d.ts +6 -7
  785. package/dist/utils/react-version.d.ts +4 -3
  786. package/dist/utils/react-version.js +19 -1
  787. package/dist/utils/record.d.ts +2 -3
  788. package/dist/utils/redirect-digest.d.ts +3 -4
  789. package/dist/utils/regex-safety.d.ts +4 -5
  790. package/dist/utils/regex.d.ts +2 -3
  791. package/dist/utils/safe-json-file.d.ts +2 -3
  792. package/dist/utils/sorted-array.d.ts +2 -3
  793. package/dist/utils/text-stream.d.ts +3 -4
  794. package/dist/utils/vinext-root.d.ts +2 -3
  795. package/dist/utils/virtual-module.d.ts +3 -4
  796. package/dist/utils/vite-cli-invocation.d.ts +21 -0
  797. package/dist/utils/vite-cli-invocation.js +144 -0
  798. package/dist/utils/vite-version.d.ts +5 -6
  799. package/next-package.json +4 -0
  800. package/package.json +47 -6
package/dist/check.js CHANGED
@@ -1,5 +1,10 @@
1
+ import { __toESM } from "./_virtual/_rolldown/runtime.js";
1
2
  import path from "./deps/.pnpm/pathslash@0.1.0/deps/pathslash/dist/index.js";
2
- import { detectPackageManager, findDir } from "./utils/project.js";
3
+ import { detectPackageManager, findDir, findViteConfigPath } from "./utils/project.js";
4
+ import { normalizePageExtensions } from "./routing/file-matcher.js";
5
+ import { POSTCSS_CONFIG_FILES } from "./plugins/postcss.js";
6
+ import { unwrapExpression } from "./plugins/ast-utils.js";
7
+ import { require_ignore } from "./deps/.pnpm/ignore@5.3.2/deps/ignore/index.js";
3
8
  import fs from "node:fs";
4
9
  import { parseAst } from "vite";
5
10
  //#region src/check.ts
@@ -9,6 +14,7 @@ import { parseAst } from "vite";
9
14
  * Scans an existing Next.js app and produces a compatibility report
10
15
  * showing what will work, what needs changes, and an overall score.
11
16
  */
17
+ var import_ignore = /* @__PURE__ */ __toESM(require_ignore(), 1);
12
18
  /** Sort order for statuses: unsupported first, then partial, then supported. */
13
19
  const STATUS_ORDER = {
14
20
  unsupported: 0,
@@ -20,31 +26,20 @@ function compareByStatus(a, b) {
20
26
  return STATUS_ORDER[a.status] - STATUS_ORDER[b.status];
21
27
  }
22
28
  /**
23
- * App Router file conventions. Each convention lists the extensions that the
24
- * Next.js docs recognise for that file type — note that the boundary files
25
- * (loading/error/not-found) only exist as React components, so they don't
26
- * accept `.ts`/`.js`.
29
+ * True if `relFile` (relative to the app directory) is an App Router file of
30
+ * the given convention. Files inside private `_folder` segments are not routes.
31
+ * `exts` are the dotted `pageExtensions` that vinext resolves conventions with.
27
32
  */
28
- const APP_ROUTER_EXTENSIONS = {
29
- page: [
30
- ".tsx",
31
- ".jsx",
32
- ".ts",
33
- ".js"
34
- ],
35
- layout: [
36
- ".tsx",
37
- ".jsx",
38
- ".ts",
39
- ".js"
40
- ],
41
- loading: [".tsx", ".jsx"],
42
- error: [".tsx", ".jsx"],
43
- "not-found": [".tsx", ".jsx"]
44
- };
45
- /** True if `file` is an App Router file of the given convention. */
46
- function isAppRouterFile(file, type) {
47
- return APP_ROUTER_EXTENSIONS[type].some((ext) => file.endsWith(`${type}${ext}`));
33
+ function isAppRouterFile(relFile, type, exts) {
34
+ const segments = relFile.split("/");
35
+ const basename = segments.pop() ?? "";
36
+ if (segments.some((segment) => segment.startsWith("_"))) return false;
37
+ return exts.some((ext) => basename === `${type}${ext}`);
38
+ }
39
+ /** The first `<name><ext>` file found in `dir` for the given page extensions. */
40
+ function findConventionFile(dir, name, exts) {
41
+ for (const ext of exts) if (fs.existsSync(path.join(dir, `${name}${ext}`))) return `${name}${ext}`;
42
+ return null;
48
43
  }
49
44
  const IMPORT_SUPPORT = {
50
45
  next: {
@@ -54,7 +49,7 @@ const IMPORT_SUPPORT = {
54
49
  "next/link": { status: "supported" },
55
50
  "next/image": {
56
51
  status: "supported",
57
- detail: "uses @unpic/react (no local optimization yet)"
52
+ detail: "local images served via /_next/image (resized when an images optimizer is configured); remote images with width and height via @unpic/react, other remote images (fill or dimensionless) as a plain <img>"
58
53
  },
59
54
  "next/legacy/image": {
60
55
  status: "supported",
@@ -69,28 +64,31 @@ const IMPORT_SUPPORT = {
69
64
  "next/headers": { status: "supported" },
70
65
  "next/server": {
71
66
  status: "supported",
72
- detail: "NextRequest/NextResponse shimmed"
67
+ detail: "NextRequest, NextResponse, NextFetchEvent, userAgent, userAgentFromString, after, connection"
73
68
  },
74
69
  "next/cache": {
75
70
  status: "supported",
76
- detail: "revalidateTag, revalidatePath, unstable_cache, io, cacheLife, cacheTag"
71
+ detail: "revalidateTag, revalidatePath, updateTag, refresh, unstable_cache, unstable_noStore, io, cacheLife, cacheTag"
77
72
  },
78
73
  "next/dynamic": { status: "supported" },
79
74
  "next/head": { status: "supported" },
80
75
  "next/script": { status: "supported" },
81
76
  "next/font/google": {
82
- status: "partial",
83
- detail: "fonts loaded from CDN, not self-hosted at build time"
77
+ status: "supported",
78
+ detail: "self-hosted with fallback metrics; falls back to the Google Fonts CDN when font options aren't statically analyzable or the network fetch fails"
84
79
  },
85
80
  "next/font/local": {
86
81
  status: "supported",
87
- detail: "className and variable modes both work; no build-time subsetting"
82
+ detail: "className and variable modes both work; @font-face is generated at runtime; no adjusted fallback metrics (adjustFontFallback is ignored)"
88
83
  },
89
84
  "next/og": {
90
85
  status: "supported",
91
86
  detail: "ImageResponse via @vercel/og"
92
87
  },
93
- "next/config": { status: "supported" },
88
+ "next/config": {
89
+ status: "partial",
90
+ detail: "getConfig() returns empty publicRuntimeConfig/serverRuntimeConfig; runtime config was removed in Next.js 16, use environment variables"
91
+ },
94
92
  "next/amp": {
95
93
  status: "unsupported",
96
94
  detail: "AMP is not supported"
@@ -114,7 +112,7 @@ const IMPORT_SUPPORT = {
114
112
  },
115
113
  "next/web-vitals": {
116
114
  status: "supported",
117
- detail: "reportWebVitals helper"
115
+ detail: "useReportWebVitals hook"
118
116
  },
119
117
  "next/constants": {
120
118
  status: "supported",
@@ -140,19 +138,19 @@ const IMPORT_SUPPORT = {
140
138
  },
141
139
  "next/dist/shared/lib/utils": {
142
140
  status: "supported",
143
- detail: "execOnce, getLocationOrigin and other shared utilities"
141
+ detail: "execOnce, getLocationOrigin and a subset of the other shared helpers"
144
142
  },
145
143
  "next/dist/server/api-utils": {
146
144
  status: "supported",
147
- detail: "NextApiRequestCookies and Pages Router API route utilities"
145
+ detail: "NextApiRequestCookies / NextApiRequestQuery types"
148
146
  },
149
147
  "next/dist/server/web/spec-extension/cookies": {
150
148
  status: "supported",
151
- detail: "RequestCookies / ResponseCookies — shimmed via @edge-runtime/cookies"
149
+ detail: "RequestCookies / ResponseCookies"
152
150
  },
153
151
  "next/dist/compiled/@edge-runtime/cookies": {
154
152
  status: "supported",
155
- detail: "RequestCookies / ResponseCookies — shimmed via @edge-runtime/cookies"
153
+ detail: "RequestCookies / ResponseCookies"
156
154
  },
157
155
  "next/dist/server/app-render/work-unit-async-storage.external": {
158
156
  status: "supported",
@@ -174,6 +172,14 @@ const IMPORT_SUPPORT = {
174
172
  status: "supported",
175
173
  detail: "internal navigation module; re-exports next/navigation"
176
174
  },
175
+ "next/root-params": {
176
+ status: "supported",
177
+ detail: "root param getters generated from the root layout's dynamic segments; TypeScript types come from the next package"
178
+ },
179
+ "next/dist/server/request/root-params": {
180
+ status: "supported",
181
+ detail: "getRootParam()"
182
+ },
177
183
  "next/dist/server/config-shared": {
178
184
  status: "supported",
179
185
  detail: "shared config utilities; re-exports next/dist/shared/lib/utils"
@@ -192,7 +198,7 @@ const CONFIG_SUPPORT = {
192
198
  env: { status: "supported" },
193
199
  images: {
194
200
  status: "partial",
195
- detail: "remotePatterns validated; on-the-fly optimization via images.optimizer (Cloudflare Images), passthrough otherwise"
201
+ detail: "remotePatterns, deviceSizes/imageSizes, qualities and SVG/CSP options honoured; resizing needs an optimizer via vinext({ images: { optimizer } }), images are served as-is otherwise; loader/loaderFile are ignored"
196
202
  },
197
203
  allowedDevOrigins: {
198
204
  status: "supported",
@@ -204,11 +210,110 @@ const CONFIG_SUPPORT = {
204
210
  },
205
211
  transpilePackages: {
206
212
  status: "supported",
207
- detail: "Vite handles this natively"
213
+ detail: "listed packages are bundled instead of externalized on the server"
208
214
  },
215
+ serverExternalPackages: {
216
+ status: "supported",
217
+ detail: "externalized on the Node.js server; Cloudflare Workers and Nitro builds bundle them, since there are no node_modules at runtime"
218
+ },
219
+ pageExtensions: { status: "supported" },
220
+ assetPrefix: { status: "supported" },
221
+ sassOptions: { status: "supported" },
222
+ generateBuildId: { status: "supported" },
223
+ deploymentId: { status: "supported" },
224
+ crossOrigin: { status: "supported" },
225
+ expireTime: { status: "supported" },
226
+ htmlLimitedBots: { status: "supported" },
227
+ cacheMaxMemorySize: { status: "supported" },
228
+ reactMaxHeadersLength: { status: "supported" },
229
+ "typescript.tsconfigPath": { status: "supported" },
230
+ turbopack: {
231
+ status: "partial",
232
+ detail: "resolveAlias and resolveExtensions are honoured; rules (loaders) are ignored"
233
+ },
234
+ instrumentationClientInject: { status: "supported" },
209
235
  webpack: {
236
+ status: "partial",
237
+ detail: "resolve.alias, resolve.extensions and MDX loader options are carried over; other webpack loaders and plugins are ignored — migrate them to Vite plugins"
238
+ },
239
+ cacheHandler: {
240
+ status: "unsupported",
241
+ detail: "ignored; configure cache adapters with vinext({ cache }) in vite.config"
242
+ },
243
+ cacheHandlers: {
244
+ status: "unsupported",
245
+ detail: "ignored; configure cache adapters with vinext({ cache }) in vite.config"
246
+ },
247
+ cacheLife: {
248
+ status: "unsupported",
249
+ detail: "custom cacheLife profiles are ignored; only the built-in profiles are available"
250
+ },
251
+ "experimental.cacheLife": {
252
+ status: "unsupported",
253
+ detail: "custom cacheLife profiles are ignored; only the built-in profiles are available"
254
+ },
255
+ skipTrailingSlashRedirect: {
256
+ status: "unsupported",
257
+ detail: "ignored; trailing-slash redirects are always applied"
258
+ },
259
+ reactCompiler: {
260
+ status: "partial",
261
+ detail: "ignored; enable the React Compiler with vinext({ react: { compiler: true } })"
262
+ },
263
+ "experimental.reactCompiler": {
264
+ status: "partial",
265
+ detail: "ignored; enable the React Compiler with vinext({ react: { compiler: true } })"
266
+ },
267
+ modularizeImports: {
268
+ status: "partial",
269
+ detail: "ignored, so imports resolve unoptimized; experimental.optimizePackageImports is supported"
270
+ },
271
+ typedRoutes: {
272
+ status: "partial",
273
+ detail: "typed Link hrefs are not generated; vinext typegen provides PageProps/LayoutProps"
274
+ },
275
+ "compiler.define": { status: "supported" },
276
+ "compiler.defineServer": { status: "supported" },
277
+ "experimental.serverComponentsExternalPackages": {
278
+ status: "supported",
279
+ detail: "legacy alias of serverExternalPackages"
280
+ },
281
+ "experimental.turbo": {
282
+ status: "partial",
283
+ detail: "legacy alias of turbopack; resolveAlias and resolveExtensions are honoured, rules (loaders) are ignored"
284
+ },
285
+ "experimental.staleTimes": { status: "supported" },
286
+ "experimental.scrollRestoration": { status: "supported" },
287
+ "experimental.globalNotFound": { status: "supported" },
288
+ "experimental.clientTraceMetadata": { status: "supported" },
289
+ "experimental.useLightningcss": { status: "supported" },
290
+ "experimental.lightningCssFeatures": { status: "supported" },
291
+ "experimental.disableOptimizedLoading": { status: "supported" },
292
+ "experimental.gestureTransition": { status: "supported" },
293
+ "experimental.appNavFailHandling": { status: "supported" },
294
+ "experimental.rootParams": {
295
+ status: "supported",
296
+ detail: "no longer needed; root params are always available"
297
+ },
298
+ "compiler.removeConsole": {
299
+ status: "supported",
300
+ detail: "console calls are stripped from client bundles only"
301
+ },
302
+ "compiler.styledComponents": {
303
+ status: "partial",
304
+ detail: "SWC transform not applied; styled-components still work at runtime, without displayName or css prop support"
305
+ },
306
+ "compiler.emotion": {
307
+ status: "partial",
308
+ detail: "SWC transform not applied; @emotion/react still works at runtime, but component selectors need the transform"
309
+ },
310
+ "compiler.relay": {
210
311
  status: "unsupported",
211
- detail: "Vite replaces webpack — custom webpack configs need migration"
312
+ detail: "Relay graphql tag transform is not applied"
313
+ },
314
+ "experimental.optimizePackageImports": {
315
+ status: "supported",
316
+ detail: "barrel imports rewritten to direct imports"
212
317
  },
213
318
  enablePrerenderSourceMaps: {
214
319
  status: "supported",
@@ -220,15 +325,19 @@ const CONFIG_SUPPORT = {
220
325
  },
221
326
  "experimental.ppr": {
222
327
  status: "unsupported",
223
- detail: "partial prerendering not yet implemented"
328
+ detail: "removed in Next.js 16 and ignored; use cacheComponents"
224
329
  },
225
- "experimental.typedRoutes": {
330
+ "experimental.dynamicIO": {
226
331
  status: "unsupported",
227
- detail: "typed routes not implemented"
332
+ detail: "renamed to cacheComponents in Next.js 16 and ignored; use cacheComponents"
333
+ },
334
+ "experimental.typedRoutes": {
335
+ status: "partial",
336
+ detail: "typed Link hrefs are not generated; vinext typegen provides PageProps/LayoutProps"
228
337
  },
229
338
  "experimental.serverActions": {
230
339
  status: "supported",
231
- detail: "server actions via 'use server' directive"
340
+ detail: "bodySizeLimit and allowedOrigins are enforced"
232
341
  },
233
342
  "experimental.allowedRevalidateHeaderKeys": {
234
343
  status: "supported",
@@ -268,7 +377,7 @@ const CONFIG_SUPPORT = {
268
377
  },
269
378
  "experimental.middlewarePrefetch": {
270
379
  status: "unsupported",
271
- detail: "not recognized; use of this option is ignored"
380
+ detail: "deprecated alias of experimental.proxyPrefetch; ignored"
272
381
  },
273
382
  "experimental.proxyPrefetch": {
274
383
  status: "unsupported",
@@ -276,7 +385,7 @@ const CONFIG_SUPPORT = {
276
385
  },
277
386
  "experimental.middlewareClientMaxBodySize": {
278
387
  status: "unsupported",
279
- detail: "not recognized; use of this option is ignored"
388
+ detail: "deprecated alias of experimental.proxyClientMaxBodySize; ignored"
280
389
  },
281
390
  "experimental.proxyClientMaxBodySize": {
282
391
  status: "unsupported",
@@ -284,15 +393,15 @@ const CONFIG_SUPPORT = {
284
393
  },
285
394
  "experimental.externalMiddlewareRewritesResolve": {
286
395
  status: "unsupported",
287
- detail: "not recognized; use of this option is ignored"
396
+ detail: "deprecated alias of experimental.externalProxyRewritesResolve; ignored"
288
397
  },
289
398
  "experimental.externalProxyRewritesResolve": {
290
399
  status: "unsupported",
291
400
  detail: "not recognized; use of this option is ignored"
292
401
  },
293
402
  "experimental.instrumentationHook": {
294
- status: "unsupported",
295
- detail: "not recognized; instrumentation files are enabled automatically"
403
+ status: "supported",
404
+ detail: "no longer needed; instrumentation.ts is loaded automatically"
296
405
  },
297
406
  skipMiddlewareUrlNormalize: {
298
407
  status: "partial",
@@ -312,7 +421,7 @@ const CONFIG_SUPPORT = {
312
421
  },
313
422
  poweredByHeader: {
314
423
  status: "supported",
315
- detail: "not sent (matching Next.js default when disabled)"
424
+ detail: "vinext never sends an X-Powered-By header"
316
425
  }
317
426
  };
318
427
  const LIBRARY_SUPPORT = {
@@ -321,15 +430,15 @@ const LIBRARY_SUPPORT = {
321
430
  "next-view-transitions": { status: "supported" },
322
431
  "@vercel/analytics": {
323
432
  status: "supported",
324
- detail: "analytics script injected client-side"
433
+ detail: "renders client-side; by default events are only collected when deployed on Vercel"
325
434
  },
326
435
  "next-intl": {
327
- status: "supported",
328
- detail: "auto-detected from i18n/request.{ts,tsx,js,jsx}; createNextIntlPlugin wrapper not needed"
436
+ status: "partial",
437
+ detail: "auto-detected from (src/)i18n/request.{ts,tsx,js,jsx}, so createNextIntlPlugin isn't needed; client components can fail with \"No intl context found\" (cloudflare/vinext#177)"
329
438
  },
330
439
  "@clerk/nextjs": {
331
- status: "partial",
332
- detail: "clerkMiddleware, auth.protect, ClerkProvider, client hooks work; auth() in Server Components requires next/headers shim (wip)"
440
+ status: "supported",
441
+ detail: "clerkMiddleware, auth()/auth.protect in Server Components, ClerkProvider and client hooks work"
333
442
  },
334
443
  "@auth/nextjs": {
335
444
  status: "unsupported",
@@ -345,7 +454,7 @@ const LIBRARY_SUPPORT = {
345
454
  },
346
455
  "@sentry/nextjs": {
347
456
  status: "partial",
348
- detail: "client-side works, server integration needs manual setup"
457
+ detail: "standard instrumentation.ts + withSentryConfig setup works; webpack/Turbopack plugin build features (source map upload, auto-instrumentation, component annotation) don't run"
349
458
  },
350
459
  "@t3-oss/env-nextjs": { status: "supported" },
351
460
  tailwindcss: { status: "supported" },
@@ -365,32 +474,76 @@ const LIBRARY_SUPPORT = {
365
474
  "react-hook-form": { status: "supported" },
366
475
  prisma: {
367
476
  status: "supported",
368
- detail: "works on Cloudflare Workers with Prisma Accelerate"
477
+ detail: "works on Cloudflare Workers with driver adapters (D1, Hyperdrive) or Prisma Accelerate"
369
478
  },
370
479
  drizzle: {
371
480
  status: "supported",
372
481
  detail: "works with D1 on Cloudflare Workers"
373
482
  }
374
483
  };
375
- /**
376
- * Recursively find all source files in a directory.
377
- */
378
- function findSourceFiles(dir, extensions = [
484
+ const IGNORED_DIRECTORIES = /* @__PURE__ */ new Set([
485
+ "node_modules",
486
+ ".next",
487
+ "dist",
488
+ ".git"
489
+ ]);
490
+ const SOURCE_EXTENSIONS = [
379
491
  ".ts",
380
492
  ".tsx",
381
493
  ".js",
382
494
  ".jsx",
383
495
  ".mjs"
384
- ]) {
496
+ ];
497
+ function readGitignoreRule(dir) {
498
+ const gitignore = path.join(dir, ".gitignore");
499
+ let stat;
500
+ try {
501
+ stat = fs.lstatSync(gitignore);
502
+ } catch {
503
+ return;
504
+ }
505
+ if (!stat.isFile()) return;
506
+ return {
507
+ dir,
508
+ matcher: (0, import_ignore.default)({ ignorecase: false }).add(fs.readFileSync(gitignore, "utf-8"))
509
+ };
510
+ }
511
+ function ancestorGitignoreRules(root, dir) {
512
+ const rules = [];
513
+ let current = root;
514
+ for (const segment of path.relative(root, dir).split("/")) {
515
+ const rule = readGitignoreRule(current);
516
+ if (rule) rules.push(rule);
517
+ current = path.join(current, segment);
518
+ if (isGitignored(current, true, rules)) break;
519
+ }
520
+ return rules;
521
+ }
522
+ function isGitignored(fullPath, isDirectory, rules) {
523
+ let ignored = false;
524
+ for (const rule of rules) {
525
+ const relative = path.relative(rule.dir, fullPath) + (isDirectory ? "/" : "");
526
+ const result = rule.matcher.test(relative);
527
+ if (result.ignored) ignored = true;
528
+ else if (result.unignored) ignored = false;
529
+ }
530
+ return ignored;
531
+ }
532
+ /**
533
+ * Recursively find all source files in a directory.
534
+ */
535
+ function findSourceFiles(dir, extensions = SOURCE_EXTENSIONS, inherited = []) {
385
536
  const results = [];
386
537
  if (!fs.existsSync(dir)) return results;
538
+ const localRule = readGitignoreRule(dir);
539
+ const rules = localRule ? [...inherited, localRule] : inherited;
387
540
  const entries = fs.readdirSync(dir, { withFileTypes: true });
388
541
  for (const entry of entries) {
389
542
  const fullPath = path.join(dir, entry.name);
390
- if (entry.isDirectory()) {
391
- if (entry.name === "node_modules" || entry.name === ".next" || entry.name === "dist" || entry.name === ".git") continue;
392
- results.push(...findSourceFiles(fullPath, extensions));
393
- } else if (extensions.some((ext) => entry.name.endsWith(ext))) results.push(fullPath);
543
+ if (entry.isDirectory() && IGNORED_DIRECTORIES.has(entry.name)) continue;
544
+ if (isGitignored(fullPath, entry.isDirectory(), rules)) continue;
545
+ if (entry.isDirectory()) results.push(...findSourceFiles(fullPath, extensions, rules));
546
+ else if (extensions.some((ext) => entry.name.endsWith(ext))) results.push(fullPath);
394
547
  }
395
548
  return results;
396
549
  }
@@ -400,12 +553,13 @@ function findSourceFiles(dir, extensions = [
400
553
  * rather than bundled into the vinext application, so reporting their imports
401
554
  * or CJS globals as migration blockers produces false positives.
402
555
  */
556
+ function isRuntimeSourceFile(file) {
557
+ const basename = path.basename(file);
558
+ const isTestRunnerConfig = /^(?:jest|playwright|vitest)\.config\.[cm]?[jt]sx?$/.test(basename);
559
+ return !/\.(?:test|spec)\.[cm]?[jt]sx?$/.test(basename) && !isTestRunnerConfig;
560
+ }
403
561
  function findRuntimeSourceFiles(root) {
404
- return findSourceFiles(root).filter((file) => {
405
- const basename = path.basename(file);
406
- const isTestRunnerConfig = /^(?:jest|playwright|vitest)\.config\.[cm]?[jt]sx?$/.test(basename);
407
- return !/\.(?:test|spec)\.[cm]?[jt]sx?$/.test(basename) && !isTestRunnerConfig;
408
- });
562
+ return findSourceFiles(root).filter(isRuntimeSourceFile);
409
563
  }
410
564
  function isIdentStart(c) {
411
565
  return c >= "a" && c <= "z" || c >= "A" && c <= "Z" || c === "_" || c === "$";
@@ -666,6 +820,7 @@ function propertyKeyName(prop) {
666
820
  function collectConfigKeys(source) {
667
821
  const top = /* @__PURE__ */ new Set();
668
822
  const nested = /* @__PURE__ */ new Map();
823
+ let pageExtensions;
669
824
  let program;
670
825
  try {
671
826
  program = parseAst(source, { lang: "ts" });
@@ -718,6 +873,18 @@ function collectConfigKeys(source) {
718
873
  if (node.type === "TSAsExpression" || node.type === "TSSatisfiesExpression" || node.type === "ParenthesizedExpression") return resolveObjects(node.expression, depth + 1);
719
874
  return [];
720
875
  }
876
+ function resolveStringArray(node, depth = 0) {
877
+ if (!node || depth > 10) return void 0;
878
+ if (node.type === "Identifier") return resolveStringArray(vars.get(node.name), depth + 1);
879
+ if (node.type === "TSAsExpression" || node.type === "TSSatisfiesExpression" || node.type === "ParenthesizedExpression") return resolveStringArray(node.expression, depth + 1);
880
+ if (node.type !== "ArrayExpression") return void 0;
881
+ const values = [];
882
+ for (const el of node.elements) {
883
+ if (el?.type !== "Literal" || typeof el.value !== "string") return void 0;
884
+ values.push(el.value);
885
+ }
886
+ return values;
887
+ }
721
888
  let configObjs = [];
722
889
  for (const node of program.body) {
723
890
  if (node.type === "ExportDefaultDeclaration") configObjs = resolveObjects(node.declaration);
@@ -727,43 +894,143 @@ function collectConfigKeys(source) {
727
894
  }
728
895
  if (configObjs.length) break;
729
896
  }
730
- for (const configObj of configObjs) for (const prop of configObj.properties) {
731
- const name = propertyKeyName(prop);
732
- if (!name) continue;
733
- top.add(name);
734
- const childObjs = resolveObjects(prop.value);
735
- if (!childObjs.length) continue;
736
- const children = nested.get(name) ?? /* @__PURE__ */ new Set();
737
- for (const childObj of childObjs) for (const childProp of childObj.properties) {
738
- const childName = propertyKeyName(childProp);
739
- if (childName) children.add(childName);
897
+ const branchExtensions = [];
898
+ const expandSpreads = (obj, depth = 0) => obj.properties.flatMap((prop) => {
899
+ if (prop.type !== "SpreadElement" || depth > 10) return [prop];
900
+ const spread = resolveObjects(prop.argument);
901
+ return spread.length === 1 ? expandSpreads(spread[0], depth + 1) : [prop];
902
+ });
903
+ let pageExtensionsUnresolved = false;
904
+ for (const configObj of configObjs) {
905
+ let branchExts;
906
+ let branchUnresolved = false;
907
+ const branchNested = /* @__PURE__ */ new Map();
908
+ for (const prop of expandSpreads(configObj)) {
909
+ if (prop.type === "SpreadElement") {
910
+ branchExts = void 0;
911
+ branchUnresolved = true;
912
+ }
913
+ const name = propertyKeyName(prop);
914
+ if (!name) continue;
915
+ top.add(name);
916
+ const value = prop.value;
917
+ if (name === "pageExtensions") {
918
+ branchExts = resolveStringArray(value);
919
+ branchUnresolved = branchExts === void 0;
920
+ }
921
+ branchNested.delete(name);
922
+ const childObjs = resolveObjects(value);
923
+ if (!childObjs.length) continue;
924
+ const children = /* @__PURE__ */ new Set();
925
+ for (const childObj of childObjs) for (const childProp of childObj.properties) {
926
+ const childName = propertyKeyName(childProp);
927
+ if (childName) children.add(childName);
928
+ }
929
+ branchNested.set(name, children);
740
930
  }
741
- nested.set(name, children);
931
+ for (const [name, children] of branchNested) nested.set(name, /* @__PURE__ */ new Set([...nested.get(name) ?? [], ...children]));
932
+ branchExtensions.push(branchExts);
933
+ if (branchUnresolved) pageExtensionsUnresolved = true;
934
+ }
935
+ if (!pageExtensionsUnresolved && branchExtensions.some(Boolean)) {
936
+ const sets = branchExtensions.map((e) => normalizePageExtensions(e));
937
+ if (new Set(sets.map((set) => set.join(","))).size === 1) pageExtensions = sets[0];
938
+ else pageExtensionsUnresolved = true;
742
939
  }
743
940
  return {
744
941
  top,
745
- nested
942
+ nested,
943
+ pageExtensions,
944
+ pageExtensionsUnresolved
746
945
  };
747
946
  }
748
- /**
749
- * Analyze next.config.js/mjs/ts for supported and unsupported options.
750
- */
751
- function analyzeConfig(root) {
752
- const configFiles = [
947
+ function findNextConfigPath(root) {
948
+ for (const f of [
753
949
  "next.config.ts",
754
950
  "next.config.mts",
755
951
  "next.config.mjs",
756
952
  "next.config.js",
757
953
  "next.config.cjs"
758
- ];
759
- let configPath = null;
760
- for (const f of configFiles) {
954
+ ]) {
761
955
  const p = path.join(root, f);
762
- if (fs.existsSync(p)) {
763
- configPath = p;
764
- break;
956
+ if (fs.existsSync(p)) return p;
957
+ }
958
+ return null;
959
+ }
960
+ function readViteConfigSource(root) {
961
+ const viteConfigPath = findViteConfigPath(root);
962
+ return viteConfigPath ? fs.readFileSync(viteConfigPath, "utf-8") : null;
963
+ }
964
+ /**
965
+ * Whether `rel` is a next.config the loader provides `__dirname`/`__filename`
966
+ * for: TypeScript configs get them injected, and `.cjs` or CommonJS `.js`
967
+ * configs are loaded with `require`. An ESM `.js` config gets neither.
968
+ */
969
+ function isNextConfigWithCjsGlobals(rel, content) {
970
+ if (/^next\.config\.(?:ts|mts|cjs)$/.test(rel)) return true;
971
+ if (rel !== "next.config.js") return false;
972
+ try {
973
+ return !parseAst(content).body.some((node) => node.type === "ImportDeclaration" || node.type.startsWith("Export"));
974
+ } catch {
975
+ return false;
976
+ }
977
+ }
978
+ /**
979
+ * Whether a PostCSS config exports an object literal with only a `plugins` key,
980
+ * directly or via a variable — the shape vinext's string-plugin resolver keeps
981
+ * intact (it replaces the config with `{ plugins }`).
982
+ */
983
+ function exportsPostcssPluginsOnlyObject(content) {
984
+ let program;
985
+ try {
986
+ program = parseAst(content, { lang: "ts" });
987
+ } catch {
988
+ return false;
989
+ }
990
+ const vars = /* @__PURE__ */ new Map();
991
+ const mutated = /* @__PURE__ */ new Set();
992
+ let exported;
993
+ for (const node of program.body) {
994
+ if (node.type === "ExpressionStatement") {
995
+ const expr = node.expression;
996
+ if (expr.type === "AssignmentExpression" && expr.left.type === "MemberExpression" && expr.left.object.type === "Identifier") mutated.add(expr.left.object.name);
997
+ else if (expr.type === "CallExpression" && expr.callee.type === "MemberExpression" && expr.callee.object.type === "Identifier" && expr.callee.object.name === "Object" && expr.callee.property.type === "Identifier" && [
998
+ "assign",
999
+ "defineProperty",
1000
+ "defineProperties"
1001
+ ].includes(expr.callee.property.name) && expr.arguments[0]?.type === "Identifier") mutated.add(expr.arguments[0].name);
765
1002
  }
1003
+ if (node.type === "VariableDeclaration") {
1004
+ for (const decl of node.declarations) if (decl.id.type === "Identifier" && decl.init) vars.set(decl.id.name, decl.init);
1005
+ } else if (node.type === "ExportDefaultDeclaration") {
1006
+ if (!node.declaration.type.endsWith("Declaration")) exported = node.declaration;
1007
+ } else if (node.type === "ExpressionStatement" && node.expression.type === "AssignmentExpression" && node.expression.left.type === "MemberExpression" && node.expression.left.object.type === "Identifier" && node.expression.left.object.name === "module" && node.expression.left.property.type === "Identifier" && node.expression.left.property.name === "exports") exported = node.expression.right;
766
1008
  }
1009
+ if (exported === void 0) return false;
1010
+ let value = unwrapExpression(exported);
1011
+ if (value?.type === "Identifier") {
1012
+ if (mutated.has(value.name)) return false;
1013
+ value = unwrapExpression(vars.get(value.name));
1014
+ }
1015
+ return value?.type === "ObjectExpression" && value.properties.every((prop) => propertyKeyName(prop) === "plugins");
1016
+ }
1017
+ /**
1018
+ * The dotted `pageExtensions` vinext resolves route conventions with, and
1019
+ * whether the configured value is unresolved (then vinext's defaults are used).
1020
+ */
1021
+ function readPageExtensions(root) {
1022
+ const configPath = findNextConfigPath(root);
1023
+ const keys = configPath ? collectConfigKeys(fs.readFileSync(configPath, "utf-8")) : void 0;
1024
+ return {
1025
+ exts: normalizePageExtensions(keys?.pageExtensions).map((ext) => `.${ext}`),
1026
+ unresolved: keys?.pageExtensionsUnresolved ?? false
1027
+ };
1028
+ }
1029
+ /**
1030
+ * Analyze next.config.js/mjs/ts for supported and unsupported options.
1031
+ */
1032
+ function analyzeConfig(root) {
1033
+ const configPath = findNextConfigPath(root);
767
1034
  if (!configPath) return [{
768
1035
  name: "next.config",
769
1036
  status: "supported",
@@ -771,38 +1038,10 @@ function analyzeConfig(root) {
771
1038
  }];
772
1039
  const present = collectConfigKeys(fs.readFileSync(configPath, "utf-8"));
773
1040
  const items = [];
774
- for (const opt of [
775
- "basePath",
776
- "trailingSlash",
777
- "redirects",
778
- "rewrites",
779
- "headers",
780
- "i18n",
781
- "env",
782
- "images",
783
- "allowedDevOrigins",
784
- "output",
785
- "transpilePackages",
786
- "webpack",
787
- "cacheComponents",
788
- "reactStrictMode",
789
- "poweredByHeader",
790
- "skipMiddlewareUrlNormalize",
791
- "skipProxyUrlNormalize"
792
- ]) {
793
- if (!present.top.has(opt)) continue;
794
- const support = CONFIG_SUPPORT[opt];
795
- if (support) items.push({
796
- name: opt,
797
- status: support.status,
798
- detail: support.detail
799
- });
800
- else items.push({
801
- name: opt,
802
- status: "unsupported",
803
- detail: "not recognized"
804
- });
805
- }
1041
+ for (const [key, support] of Object.entries(CONFIG_SUPPORT)) if (!key.includes(".") && present.top.has(key)) items.push({
1042
+ name: key,
1043
+ ...support
1044
+ });
806
1045
  for (const key of Object.keys(CONFIG_SUPPORT)) {
807
1046
  if (!key.includes(".")) continue;
808
1047
  const dot = key.indexOf(".");
@@ -839,19 +1078,69 @@ function checkLibraries(root) {
839
1078
  */
840
1079
  function checkConventions(root) {
841
1080
  const items = [];
842
- const pagesDir = findDir(root, "pages", "src/pages");
843
- const appDirPath = findDir(root, "app", "src/app");
844
- const hasProxy = fs.existsSync(path.join(root, "proxy.ts")) || fs.existsSync(path.join(root, "proxy.js"));
845
- const hasMiddleware = fs.existsSync(path.join(root, "middleware.ts")) || fs.existsSync(path.join(root, "middleware.js"));
1081
+ const viteConfigSource = readViteConfigSource(root);
1082
+ const setsInlineNextConfig = viteConfigSource !== null && /\bnextConfig\b/.test(viteConfigSource);
1083
+ const pageExtensionsRead = readPageExtensions(root);
1084
+ const pageExts = setsInlineNextConfig ? normalizePageExtensions(void 0).map((ext) => `.${ext}`) : pageExtensionsRead.exts;
1085
+ const pageExtensionsUnresolved = !setsInlineNextConfig && pageExtensionsRead.unresolved;
1086
+ const pageExtensionsUncertain = setsInlineNextConfig || pageExtensionsUnresolved;
1087
+ const scanExts = [.../* @__PURE__ */ new Set([...SOURCE_EXTENSIONS, ...pageExts])];
1088
+ const sourceFiles = findSourceFiles(root, scanExts);
1089
+ const realRoot = fs.realpathSync(root);
1090
+ const isThroughSymlink = (dir) => fs.realpathSync(dir) !== path.join(realRoot, path.relative(root, dir));
1091
+ const routeFiles = (dir) => {
1092
+ const files = sourceFiles.filter((file) => file.startsWith(`${dir}/`));
1093
+ if (files.length || !isThroughSymlink(dir)) return files;
1094
+ const rules = ancestorGitignoreRules(root, dir);
1095
+ if (isGitignored(dir, true, rules)) return [];
1096
+ return findSourceFiles(dir, scanExts, rules);
1097
+ };
1098
+ const isPageFile = (file) => pageExts.some((ext) => file.endsWith(ext));
1099
+ const srcDir = path.join(root, "src");
1100
+ const usesSrcDir = findDir(root, "app", "pages") === null && findDir(root, "src/app", "src/pages") !== null;
1101
+ const baseDir = usesSrcDir ? srcDir : root;
1102
+ const pagesDir = findDir(baseDir, "pages");
1103
+ const appDirPath = findDir(baseDir, "app");
1104
+ const conventionPrefix = usesSrcDir ? "src/" : "";
1105
+ const conventionDir = usesSrcDir ? srcDir : root;
1106
+ const proxyFile = findConventionFile(conventionDir, "proxy", pageExts);
1107
+ const middlewareFile = findConventionFile(conventionDir, "middleware", pageExts);
1108
+ const routingNotes = [];
1109
+ const customizesRouting = viteConfigSource !== null && /\b(?:appDir|disableAppRouter|nextConfig)\b/.test(viteConfigSource);
1110
+ if (customizesRouting) routingNotes.push("vite.config passes vinext() routing options (appDir / disableAppRouter / nextConfig), which this check doesn't evaluate — detected with vinext's defaults");
1111
+ if (pageExtensionsUnresolved) routingNotes.push("pageExtensions in next.config can't be read statically or differs between phases — files counted with vinext's default extensions");
1112
+ const routingDetail = routingNotes.length ? routingNotes.join("; ") : void 0;
1113
+ if (!customizesRouting && !usesSrcDir) {
1114
+ for (const dir of ["app", "pages"]) if (findDir(root, dir) === null && findDir(root, `src/${dir}`) !== null) items.push({
1115
+ name: `src/${dir}/ is ignored`,
1116
+ status: "unsupported",
1117
+ detail: `vinext looks for app/ and pages/ in one directory (the project root here) — move src/${dir}/ to ${dir}/`
1118
+ });
1119
+ }
846
1120
  if (pagesDir !== null) {
847
- const isSrc = pagesDir.includes("src/pages");
848
1121
  items.push({
849
- name: isSrc ? "Pages Router (src/pages/)" : "Pages Router (pages/)",
850
- status: "supported"
1122
+ name: `Pages Router (${path.relative(root, pagesDir)}/)`,
1123
+ status: "supported",
1124
+ ...routingDetail && { detail: routingDetail }
1125
+ });
1126
+ const reserved = /* @__PURE__ */ new Set([
1127
+ "_app",
1128
+ "_document",
1129
+ "_error"
1130
+ ]);
1131
+ const pageFiles = routeFiles(pagesDir).filter(isPageFile).map((f) => path.relative(pagesDir, f));
1132
+ const stripPageExt = (file) => {
1133
+ const ext = pageExts.filter((e) => file.endsWith(e)).reduce((a, b) => b.length > a.length ? b : a, "");
1134
+ return file.slice(0, file.length - ext.length);
1135
+ };
1136
+ const isCustom = (name) => pageFiles.some((f) => stripPageExt(f) === name);
1137
+ const apiRoutes = pageFiles.filter((f) => f.startsWith("api/"));
1138
+ const pages = pageFiles.filter((f) => {
1139
+ const segments = f.split("/");
1140
+ const basename = segments.pop() ?? "";
1141
+ if (segments.some((dir) => dir === "api" || reserved.has(dir))) return false;
1142
+ return segments.length > 0 || !reserved.has(stripPageExt(basename));
851
1143
  });
852
- const pageFiles = findSourceFiles(pagesDir);
853
- const pages = pageFiles.filter((f) => !f.includes("/api/") && !f.includes("_app") && !f.includes("_document") && !f.includes("_error"));
854
- const apiRoutes = pageFiles.filter((f) => f.includes("/api/"));
855
1144
  items.push({
856
1145
  name: `${pages.length} page(s)`,
857
1146
  status: "supported"
@@ -860,28 +1149,28 @@ function checkConventions(root) {
860
1149
  name: `${apiRoutes.length} API route(s)`,
861
1150
  status: "supported"
862
1151
  });
863
- if (pageFiles.some((f) => f.includes("_app"))) items.push({
1152
+ if (isCustom("_app")) items.push({
864
1153
  name: "Custom _app",
865
1154
  status: "supported"
866
1155
  });
867
- if (pageFiles.some((f) => f.includes("_document"))) items.push({
1156
+ if (isCustom("_document")) items.push({
868
1157
  name: "Custom _document",
869
1158
  status: "supported"
870
1159
  });
871
1160
  }
872
1161
  if (appDirPath !== null) {
873
- const isSrc = appDirPath.includes("src/app");
874
1162
  items.push({
875
- name: isSrc ? "App Router (src/app/)" : "App Router (app/)",
876
- status: "supported"
1163
+ name: `App Router (${path.relative(root, appDirPath)}/)`,
1164
+ status: "supported",
1165
+ ...routingDetail && { detail: routingDetail }
877
1166
  });
878
- const appFiles = findSourceFiles(appDirPath);
879
- const pages = appFiles.filter((f) => isAppRouterFile(f, "page"));
880
- const layouts = appFiles.filter((f) => isAppRouterFile(f, "layout"));
881
- const routes = appFiles.filter((f) => f.endsWith("route.tsx") || f.endsWith("route.ts") || f.endsWith("route.js"));
882
- const loadings = appFiles.filter((f) => isAppRouterFile(f, "loading"));
883
- const errors = appFiles.filter((f) => isAppRouterFile(f, "error"));
884
- const notFounds = appFiles.filter((f) => isAppRouterFile(f, "not-found"));
1167
+ const appFiles = routeFiles(appDirPath).map((f) => path.relative(appDirPath, f));
1168
+ const pages = appFiles.filter((f) => isAppRouterFile(f, "page", pageExts));
1169
+ const layouts = appFiles.filter((f) => isAppRouterFile(f, "layout", pageExts));
1170
+ const routes = appFiles.filter((f) => isAppRouterFile(f, "route", pageExts));
1171
+ const loadings = appFiles.filter((f) => isAppRouterFile(f, "loading", pageExts));
1172
+ const errors = appFiles.filter((f) => isAppRouterFile(f, "error", pageExts));
1173
+ const notFounds = appFiles.filter((f) => isAppRouterFile(f, "not-found", pageExts));
885
1174
  items.push({
886
1175
  name: `${pages.length} page(s)`,
887
1176
  status: "supported"
@@ -907,36 +1196,33 @@ function checkConventions(root) {
907
1196
  status: "supported"
908
1197
  });
909
1198
  }
910
- if (hasProxy) items.push({
911
- name: "proxy.ts (Next.js 16)",
1199
+ if (proxyFile && middlewareFile && !pageExtensionsUncertain) items.push({
1200
+ name: `Both ${conventionPrefix}${middlewareFile} and ${conventionPrefix}${proxyFile}`,
1201
+ status: "unsupported",
1202
+ detail: `only one is allowed — keep ${conventionPrefix}${proxyFile} and remove ${conventionPrefix}${middlewareFile}`
1203
+ });
1204
+ else if (proxyFile) items.push({
1205
+ name: `${conventionPrefix}${proxyFile} (Next.js 16)`,
912
1206
  status: "supported"
913
1207
  });
914
- else if (hasMiddleware) items.push({
915
- name: "middleware.ts (deprecated in Next.js 16)",
1208
+ else if (middlewareFile) items.push({
1209
+ name: `${conventionPrefix}${middlewareFile} (deprecated in Next.js 16)`,
916
1210
  status: "supported"
917
1211
  });
918
1212
  if (pagesDir === null && appDirPath === null) items.push({
919
1213
  name: "No pages/ or app/ directory found",
920
1214
  status: "unsupported",
921
- detail: "vinext requires a pages/ or app/ directory"
1215
+ detail: ["vinext requires a pages/ or app/ directory", ...routingNotes].join("; ")
922
1216
  });
923
- const pkgPath = path.join(root, "package.json");
924
- if (fs.existsSync(pkgPath)) {
925
- if (JSON.parse(fs.readFileSync(pkgPath, "utf-8")).type !== "module") items.push({
926
- name: "Missing \"type\": \"module\" in package.json",
927
- status: "unsupported",
928
- detail: "required for Vite — vinext init will add it automatically"
929
- });
930
- }
931
- const allSourceFiles = findRuntimeSourceFiles(root);
1217
+ const runtimeSourceFiles = sourceFiles.filter((file) => isRuntimeSourceFile(file) && SOURCE_EXTENSIONS.some((ext) => file.endsWith(ext)));
932
1218
  const viewTransitionRegex = /import\s+\{[^}]*\bViewTransition\b[^}]*\}\s+from\s+['"]react['"]/;
933
1219
  const viewTransitionFiles = [];
934
1220
  const cjsGlobalFiles = [];
935
- for (const file of allSourceFiles) {
1221
+ for (const file of runtimeSourceFiles) {
936
1222
  const content = fs.readFileSync(file, "utf-8");
937
1223
  const rel = path.relative(root, file);
938
1224
  if (viewTransitionRegex.test(content)) viewTransitionFiles.push(rel);
939
- if (hasFreeCjsGlobal(content)) cjsGlobalFiles.push(rel);
1225
+ if (hasFreeCjsGlobal(content) && !isNextConfigWithCjsGlobals(rel, content)) cjsGlobalFiles.push(rel);
940
1226
  }
941
1227
  if (viewTransitionFiles.length > 0) items.push({
942
1228
  name: "ViewTransition (React canary API)",
@@ -944,18 +1230,18 @@ function checkConventions(root) {
944
1230
  detail: "vinext auto-shims with a passthrough fallback, view transitions won't animate",
945
1231
  files: viewTransitionFiles
946
1232
  });
947
- for (const configFile of [
948
- "postcss.config.mjs",
949
- "postcss.config.js",
950
- "postcss.config.cjs"
951
- ]) {
1233
+ for (const configFile of POSTCSS_CONFIG_FILES) {
952
1234
  const configPath = path.join(root, configFile);
953
1235
  if (fs.existsSync(configPath)) {
954
1236
  const content = fs.readFileSync(configPath, "utf-8");
955
- if (/plugins\s*:\s*\[\s*['"]/.test(content)) items.push({
1237
+ if (/plugins\s*:\s*\[\s*['"]/.test(content)) items.push(!exportsPostcssPluginsOnlyObject(content) ? {
956
1238
  name: `PostCSS string-form plugins (${configFile})`,
957
1239
  status: "partial",
958
- detail: "string-form PostCSS plugins need resolution — vinext handles this automatically"
1240
+ detail: "vinext resolves string-form plugins only in a config that exports a plain { plugins } object — function exports aren't resolved and other options are dropped"
1241
+ } : {
1242
+ name: `PostCSS string-form plugins (${configFile})`,
1243
+ status: "supported",
1244
+ detail: "string-form PostCSS plugins are resolved automatically by vinext"
959
1245
  });
960
1246
  break;
961
1247
  }
@@ -963,7 +1249,7 @@ function checkConventions(root) {
963
1249
  if (cjsGlobalFiles.length > 0) items.push({
964
1250
  name: "__dirname / __filename (CommonJS globals)",
965
1251
  status: "unsupported",
966
- detail: "CJS globals unavailable in ESM — use fileURLToPath(import.meta.url) / dirname(...), or import.meta.dirname / import.meta.filename (Node 22+)",
1252
+ detail: "vinext only defines them in server code, where they point at the built output rather than your source tree; they are undefined in client bundles and ESM next.config files — use import.meta.dirname / import.meta.filename or fileURLToPath(import.meta.url)",
967
1253
  files: cjsGlobalFiles
968
1254
  });
969
1255
  return items;
@@ -986,17 +1272,19 @@ function runCheck(root) {
986
1272
  const partial = allItems.filter((i) => i.status === "partial").length;
987
1273
  const unsupported = allItems.filter((i) => i.status === "unsupported").length;
988
1274
  const total = allItems.length;
1275
+ const score = total > 0 ? Math.round((supported + partial * .5) / total * 100) : 100;
989
1276
  return {
990
1277
  imports,
991
1278
  config,
992
1279
  libraries,
993
1280
  conventions,
1281
+ hasAppDir: findDir(root, "app", "src/app") !== null,
994
1282
  summary: {
995
1283
  supported,
996
1284
  partial,
997
1285
  unsupported,
998
1286
  total,
999
- score: total > 0 ? Math.round((supported + partial * .5) / total * 100) : 100
1287
+ score
1000
1288
  }
1001
1289
  };
1002
1290
  }
@@ -1005,7 +1293,7 @@ function runCheck(root) {
1005
1293
  */
1006
1294
  function formatReport(result, opts) {
1007
1295
  const lines = [];
1008
- const hasAppRouter = result.conventions.some((item) => item.name === "App Router (app/)" || item.name === "App Router (src/app/)");
1296
+ const hasAppRouter = result.hasAppDir === true;
1009
1297
  const statusIcon = (s) => s === "supported" ? "\x1B[32m✓\x1B[0m" : s === "partial" ? "\x1B[33m~\x1B[0m" : "\x1B[31m✗\x1B[0m";
1010
1298
  lines.push("");
1011
1299
  lines.push(" \x1B[1mvinext compatibility report\x1B[0m");
@@ -1074,7 +1362,10 @@ function formatReport(result, opts) {
1074
1362
  ...result.libraries,
1075
1363
  ...result.conventions
1076
1364
  ];
1077
- for (const item of allItems) if (item.status === "partial") lines.push(` \x1b[33m~\x1b[0m ${item.name}${item.detail ? ` — ${item.detail}` : ""}`);
1365
+ for (const item of allItems) if (item.status === "partial") {
1366
+ lines.push(` \x1b[33m~\x1b[0m ${item.name}${item.detail ? ` — ${item.detail}` : ""}`);
1367
+ for (const f of item.files ?? []) lines.push(` \x1b[90m${f}\x1b[0m`);
1368
+ }
1078
1369
  }
1079
1370
  if (!opts?.calledFromInit) {
1080
1371
  lines.push("");
@@ -1084,7 +1375,7 @@ function formatReport(result, opts) {
1084
1375
  lines.push(" Or manually:");
1085
1376
  lines.push(` 1. Add \x1b[36m"type": "module"\x1b[0m to package.json`);
1086
1377
  lines.push(` 2. Install: \x1b[36m${detectPackageManager(process.cwd())} vinext vite @vitejs/plugin-react${hasAppRouter ? " @vitejs/plugin-rsc react-server-dom-webpack" : ""}\x1b[0m`);
1087
- lines.push(` 3. Create vite.config.ts (see docs)`);
1378
+ lines.push(` 3. Create vite.config.ts with \x1b[36mplugins: [vinext()]\x1b[0m`);
1088
1379
  lines.push(` 4. Run: \x1b[36mnpx vite dev\x1b[0m`);
1089
1380
  }
1090
1381
  lines.push("");