vinext 0.0.49 → 0.0.51

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 (506) hide show
  1. package/dist/build/client-build-config.js.map +1 -1
  2. package/dist/build/google-fonts/build-url.js.map +1 -1
  3. package/dist/build/google-fonts/fallback-metrics-data.js +14031 -0
  4. package/dist/build/google-fonts/fallback-metrics-data.js.map +1 -0
  5. package/dist/build/google-fonts/fallback-metrics.d.ts +13 -0
  6. package/dist/build/google-fonts/fallback-metrics.js +46 -0
  7. package/dist/build/google-fonts/fallback-metrics.js.map +1 -0
  8. package/dist/build/google-fonts/get-axes.js.map +1 -1
  9. package/dist/build/google-fonts/sort-variants.js.map +1 -1
  10. package/dist/build/google-fonts/validate.js.map +1 -1
  11. package/dist/build/layout-classification.js.map +1 -1
  12. package/dist/build/nitro-route-rules.js.map +1 -1
  13. package/dist/build/precompress.d.ts +13 -2
  14. package/dist/build/precompress.js +12 -3
  15. package/dist/build/precompress.js.map +1 -1
  16. package/dist/build/prerender.d.ts +17 -1
  17. package/dist/build/prerender.js +114 -23
  18. package/dist/build/prerender.js.map +1 -1
  19. package/dist/build/report.d.ts +5 -4
  20. package/dist/build/report.js +196 -348
  21. package/dist/build/report.js.map +1 -1
  22. package/dist/build/route-classification-injector.js.map +1 -1
  23. package/dist/build/route-classification-manifest.js.map +1 -1
  24. package/dist/build/run-prerender.js.map +1 -1
  25. package/dist/build/server-manifest.js.map +1 -1
  26. package/dist/build/ssr-manifest.js.map +1 -1
  27. package/dist/build/standalone.js.map +1 -1
  28. package/dist/build/static-export.js.map +1 -1
  29. package/dist/check.js +2 -1
  30. package/dist/check.js.map +1 -1
  31. package/dist/cli-args.js.map +1 -1
  32. package/dist/cli.js +68 -7
  33. package/dist/cli.js.map +1 -1
  34. package/dist/client/instrumentation-client-state.js.map +1 -1
  35. package/dist/client/validate-module-path.js.map +1 -1
  36. package/dist/client/vinext-next-data.d.ts +5 -1
  37. package/dist/client/window-next.d.ts +151 -0
  38. package/dist/client/window-next.js +48 -0
  39. package/dist/client/window-next.js.map +1 -0
  40. package/dist/cloudflare/kv-cache-handler.js.map +1 -1
  41. package/dist/cloudflare/tpr.js +2 -1
  42. package/dist/cloudflare/tpr.js.map +1 -1
  43. package/dist/config/config-matchers.d.ts +3 -1
  44. package/dist/config/config-matchers.js +5 -4
  45. package/dist/config/config-matchers.js.map +1 -1
  46. package/dist/config/dotenv.d.ts +11 -1
  47. package/dist/config/dotenv.js.map +1 -1
  48. package/dist/config/next-config.d.ts +93 -6
  49. package/dist/config/next-config.js +233 -6
  50. package/dist/config/next-config.js.map +1 -1
  51. package/dist/config/tsconfig-paths.d.ts +13 -0
  52. package/dist/config/tsconfig-paths.js +117 -0
  53. package/dist/config/tsconfig-paths.js.map +1 -0
  54. package/dist/deploy.js +16 -7
  55. package/dist/deploy.js.map +1 -1
  56. package/dist/entries/app-browser-entry.d.ts +3 -1
  57. package/dist/entries/app-browser-entry.js +36 -2
  58. package/dist/entries/app-browser-entry.js.map +1 -1
  59. package/dist/entries/app-rsc-entry.d.ts +19 -1
  60. package/dist/entries/app-rsc-entry.js +49 -12
  61. package/dist/entries/app-rsc-entry.js.map +1 -1
  62. package/dist/entries/app-rsc-manifest.d.ts +9 -0
  63. package/dist/entries/app-rsc-manifest.js +8 -1
  64. package/dist/entries/app-rsc-manifest.js.map +1 -1
  65. package/dist/entries/app-ssr-entry.js.map +1 -1
  66. package/dist/entries/pages-client-entry.js +3 -5
  67. package/dist/entries/pages-client-entry.js.map +1 -1
  68. package/dist/entries/pages-entry-helpers.js.map +1 -1
  69. package/dist/entries/pages-server-entry.js +34 -1
  70. package/dist/entries/pages-server-entry.js.map +1 -1
  71. package/dist/entries/runtime-entry-module.js.map +1 -1
  72. package/dist/index.js +204 -53
  73. package/dist/index.js.map +1 -1
  74. package/dist/init.js.map +1 -1
  75. package/dist/plugins/async-hooks-stub.js.map +1 -1
  76. package/dist/plugins/client-reference-dedup.d.ts +15 -2
  77. package/dist/plugins/client-reference-dedup.js +138 -16
  78. package/dist/plugins/client-reference-dedup.js.map +1 -1
  79. package/dist/plugins/fonts.d.ts +2 -2
  80. package/dist/plugins/fonts.js +15 -6
  81. package/dist/plugins/fonts.js.map +1 -1
  82. package/dist/plugins/instrumentation-client.js.map +1 -1
  83. package/dist/plugins/og-assets.js.map +1 -1
  84. package/dist/plugins/optimize-imports.js.map +1 -1
  85. package/dist/plugins/postcss.js.map +1 -1
  86. package/dist/plugins/rsc-client-reference-loaders.d.ts +7 -0
  87. package/dist/plugins/rsc-client-reference-loaders.js +48 -0
  88. package/dist/plugins/rsc-client-reference-loaders.js.map +1 -0
  89. package/dist/plugins/rsc-client-shim-excludes.js.map +1 -1
  90. package/dist/plugins/sass.d.ts +34 -0
  91. package/dist/plugins/sass.js +22 -0
  92. package/dist/plugins/sass.js.map +1 -0
  93. package/dist/plugins/server-externals-manifest.js.map +1 -1
  94. package/dist/plugins/strip-server-exports.js.map +1 -1
  95. package/dist/routing/app-route-graph.d.ts +78 -6
  96. package/dist/routing/app-route-graph.js +241 -25
  97. package/dist/routing/app-route-graph.js.map +1 -1
  98. package/dist/routing/app-router.js.map +1 -1
  99. package/dist/routing/file-matcher.js.map +1 -1
  100. package/dist/routing/pages-router.js.map +1 -1
  101. package/dist/routing/route-matching.js.map +1 -1
  102. package/dist/routing/route-pattern.d.ts +56 -1
  103. package/dist/routing/route-pattern.js +60 -1
  104. package/dist/routing/route-pattern.js.map +1 -1
  105. package/dist/routing/route-trie.js.map +1 -1
  106. package/dist/routing/route-validation.js.map +1 -1
  107. package/dist/routing/utils.js.map +1 -1
  108. package/dist/server/api-handler.js.map +1 -1
  109. package/dist/server/app-browser-action-result.d.ts +44 -0
  110. package/dist/server/app-browser-action-result.js +79 -0
  111. package/dist/server/app-browser-action-result.js.map +1 -0
  112. package/dist/server/app-browser-entry.js +330 -133
  113. package/dist/server/app-browser-entry.js.map +1 -1
  114. package/dist/server/app-browser-error.js.map +1 -1
  115. package/dist/server/app-browser-hydration.d.ts +31 -0
  116. package/dist/server/app-browser-hydration.js +30 -0
  117. package/dist/server/app-browser-hydration.js.map +1 -0
  118. package/dist/server/app-browser-navigation-controller.d.ts +20 -4
  119. package/dist/server/app-browser-navigation-controller.js +90 -23
  120. package/dist/server/app-browser-navigation-controller.js.map +1 -1
  121. package/dist/server/app-browser-popstate.d.ts +16 -0
  122. package/dist/server/app-browser-popstate.js +17 -0
  123. package/dist/server/app-browser-popstate.js.map +1 -0
  124. package/dist/server/app-browser-rsc-redirect.d.ts +28 -0
  125. package/dist/server/app-browser-rsc-redirect.js +37 -0
  126. package/dist/server/app-browser-rsc-redirect.js.map +1 -0
  127. package/dist/server/app-browser-state.d.ts +27 -23
  128. package/dist/server/app-browser-state.js +158 -54
  129. package/dist/server/app-browser-state.js.map +1 -1
  130. package/dist/server/app-browser-stream.d.ts +9 -4
  131. package/dist/server/app-browser-stream.js +29 -8
  132. package/dist/server/app-browser-stream.js.map +1 -1
  133. package/dist/server/app-browser-visible-commit.d.ts +11 -1
  134. package/dist/server/app-browser-visible-commit.js +69 -21
  135. package/dist/server/app-browser-visible-commit.js.map +1 -1
  136. package/dist/server/app-client-reference-preloader.js.map +1 -1
  137. package/dist/server/app-elements-wire.d.ts +43 -6
  138. package/dist/server/app-elements-wire.js +121 -5
  139. package/dist/server/app-elements-wire.js.map +1 -1
  140. package/dist/server/app-elements.d.ts +2 -2
  141. package/dist/server/app-elements.js +2 -2
  142. package/dist/server/app-elements.js.map +1 -1
  143. package/dist/server/app-fallback-renderer.d.ts +10 -1
  144. package/dist/server/app-fallback-renderer.js +37 -1
  145. package/dist/server/app-fallback-renderer.js.map +1 -1
  146. package/dist/server/app-history-state.d.ts +26 -0
  147. package/dist/server/app-history-state.js +53 -0
  148. package/dist/server/app-history-state.js.map +1 -0
  149. package/dist/server/app-hook-warning-suppression.js.map +1 -1
  150. package/dist/server/app-middleware.d.ts +1 -1
  151. package/dist/server/app-middleware.js +4 -9
  152. package/dist/server/app-middleware.js.map +1 -1
  153. package/dist/server/app-mounted-slots-header.js.map +1 -1
  154. package/dist/server/app-page-boundary-render.d.ts +11 -1
  155. package/dist/server/app-page-boundary-render.js +27 -19
  156. package/dist/server/app-page-boundary-render.js.map +1 -1
  157. package/dist/server/app-page-boundary.d.ts +1 -0
  158. package/dist/server/app-page-boundary.js +10 -7
  159. package/dist/server/app-page-boundary.js.map +1 -1
  160. package/dist/server/app-page-cache.d.ts +23 -3
  161. package/dist/server/app-page-cache.js +63 -27
  162. package/dist/server/app-page-cache.js.map +1 -1
  163. package/dist/server/app-page-dispatch.d.ts +11 -1
  164. package/dist/server/app-page-dispatch.js +85 -14
  165. package/dist/server/app-page-dispatch.js.map +1 -1
  166. package/dist/server/app-page-element-builder.d.ts +10 -1
  167. package/dist/server/app-page-element-builder.js +38 -6
  168. package/dist/server/app-page-element-builder.js.map +1 -1
  169. package/dist/server/app-page-execution.js +2 -3
  170. package/dist/server/app-page-execution.js.map +1 -1
  171. package/dist/server/app-page-head.d.ts +7 -0
  172. package/dist/server/app-page-head.js +6 -1
  173. package/dist/server/app-page-head.js.map +1 -1
  174. package/dist/server/app-page-method.js.map +1 -1
  175. package/dist/server/app-page-params.js.map +1 -1
  176. package/dist/server/app-page-probe.d.ts +23 -1
  177. package/dist/server/app-page-probe.js +29 -1
  178. package/dist/server/app-page-probe.js.map +1 -1
  179. package/dist/server/app-page-render-observation.d.ts +35 -0
  180. package/dist/server/app-page-render-observation.js +68 -0
  181. package/dist/server/app-page-render-observation.js.map +1 -0
  182. package/dist/server/app-page-render.d.ts +12 -2
  183. package/dist/server/app-page-render.js +90 -7
  184. package/dist/server/app-page-render.js.map +1 -1
  185. package/dist/server/app-page-request.d.ts +1 -0
  186. package/dist/server/app-page-request.js +2 -1
  187. package/dist/server/app-page-request.js.map +1 -1
  188. package/dist/server/app-page-response.d.ts +2 -0
  189. package/dist/server/app-page-response.js +18 -7
  190. package/dist/server/app-page-response.js.map +1 -1
  191. package/dist/server/app-page-route-wiring.d.ts +9 -3
  192. package/dist/server/app-page-route-wiring.js +91 -62
  193. package/dist/server/app-page-route-wiring.js.map +1 -1
  194. package/dist/server/app-page-segment-state.d.ts +10 -0
  195. package/dist/server/app-page-segment-state.js +87 -0
  196. package/dist/server/app-page-segment-state.js.map +1 -0
  197. package/dist/server/app-page-stream.d.ts +9 -2
  198. package/dist/server/app-page-stream.js +4 -1
  199. package/dist/server/app-page-stream.js.map +1 -1
  200. package/dist/server/app-post-middleware-context.js.map +1 -1
  201. package/dist/server/app-prerender-endpoints.js.map +1 -1
  202. package/dist/server/app-prerender-static-params.js.map +1 -1
  203. package/dist/server/app-render-dependency.js.map +1 -1
  204. package/dist/server/app-request-context.js.map +1 -1
  205. package/dist/server/app-route-handler-cache.js.map +1 -1
  206. package/dist/server/app-route-handler-dispatch.js +3 -1
  207. package/dist/server/app-route-handler-dispatch.js.map +1 -1
  208. package/dist/server/app-route-handler-execution.js.map +1 -1
  209. package/dist/server/app-route-handler-policy.js +1 -0
  210. package/dist/server/app-route-handler-policy.js.map +1 -1
  211. package/dist/server/app-route-handler-response.js +4 -3
  212. package/dist/server/app-route-handler-response.js.map +1 -1
  213. package/dist/server/app-route-handler-runtime.js.map +1 -1
  214. package/dist/server/app-router-entry.js +7 -15
  215. package/dist/server/app-router-entry.js.map +1 -1
  216. package/dist/server/app-rsc-cache-busting.d.ts +23 -2
  217. package/dist/server/app-rsc-cache-busting.js +75 -19
  218. package/dist/server/app-rsc-cache-busting.js.map +1 -1
  219. package/dist/server/app-rsc-embedded-chunks.d.ts +9 -0
  220. package/dist/server/app-rsc-embedded-chunks.js +34 -0
  221. package/dist/server/app-rsc-embedded-chunks.js.map +1 -0
  222. package/dist/server/app-rsc-error-handler.js.map +1 -1
  223. package/dist/server/app-rsc-errors.d.ts +4 -1
  224. package/dist/server/app-rsc-errors.js +1 -1
  225. package/dist/server/app-rsc-errors.js.map +1 -1
  226. package/dist/server/app-rsc-handler.d.ts +18 -1
  227. package/dist/server/app-rsc-handler.js +55 -16
  228. package/dist/server/app-rsc-handler.js.map +1 -1
  229. package/dist/server/app-rsc-render-mode.d.ts +11 -0
  230. package/dist/server/app-rsc-render-mode.js +21 -0
  231. package/dist/server/app-rsc-render-mode.js.map +1 -0
  232. package/dist/server/app-rsc-request-normalization.d.ts +4 -1
  233. package/dist/server/app-rsc-request-normalization.js +7 -2
  234. package/dist/server/app-rsc-request-normalization.js.map +1 -1
  235. package/dist/server/app-rsc-response-finalizer.d.ts +2 -1
  236. package/dist/server/app-rsc-response-finalizer.js +6 -1
  237. package/dist/server/app-rsc-response-finalizer.js.map +1 -1
  238. package/dist/server/app-rsc-route-matching.d.ts +23 -0
  239. package/dist/server/app-rsc-route-matching.js +45 -23
  240. package/dist/server/app-rsc-route-matching.js.map +1 -1
  241. package/dist/server/app-segment-config.js.map +1 -1
  242. package/dist/server/app-server-action-execution.d.ts +51 -5
  243. package/dist/server/app-server-action-execution.js +161 -51
  244. package/dist/server/app-server-action-execution.js.map +1 -1
  245. package/dist/server/app-ssr-entry.d.ts +7 -0
  246. package/dist/server/app-ssr-entry.js +44 -14
  247. package/dist/server/app-ssr-entry.js.map +1 -1
  248. package/dist/server/app-ssr-error-meta.d.ts +14 -0
  249. package/dist/server/app-ssr-error-meta.js +50 -0
  250. package/dist/server/app-ssr-error-meta.js.map +1 -0
  251. package/dist/server/app-ssr-stream.d.ts +1 -1
  252. package/dist/server/app-ssr-stream.js +9 -12
  253. package/dist/server/app-ssr-stream.js.map +1 -1
  254. package/dist/server/app-static-generation.js.map +1 -1
  255. package/dist/server/artifact-compatibility.d.ts +12 -2
  256. package/dist/server/artifact-compatibility.js +12 -8
  257. package/dist/server/artifact-compatibility.js.map +1 -1
  258. package/dist/server/cache-control.js +1 -0
  259. package/dist/server/cache-control.js.map +1 -1
  260. package/dist/server/cache-proof.d.ts +124 -5
  261. package/dist/server/cache-proof.js +416 -18
  262. package/dist/server/cache-proof.js.map +1 -1
  263. package/dist/server/csp.js.map +1 -1
  264. package/dist/server/dev-error-overlay-store.js.map +1 -1
  265. package/dist/server/dev-error-overlay.js +5 -0
  266. package/dist/server/dev-error-overlay.js.map +1 -1
  267. package/dist/server/dev-lockfile.d.ts +110 -0
  268. package/dist/server/dev-lockfile.js +180 -0
  269. package/dist/server/dev-lockfile.js.map +1 -0
  270. package/dist/server/dev-module-runner.js.map +1 -1
  271. package/dist/server/dev-origin-check.js.map +1 -1
  272. package/dist/server/dev-route-files.js.map +1 -1
  273. package/dist/server/dev-server.js +23 -10
  274. package/dist/server/dev-server.js.map +1 -1
  275. package/dist/server/file-based-metadata.d.ts +13 -0
  276. package/dist/server/file-based-metadata.js +49 -2
  277. package/dist/server/file-based-metadata.js.map +1 -1
  278. package/dist/server/headers.d.ts +81 -0
  279. package/dist/server/headers.js +104 -0
  280. package/dist/server/headers.js.map +1 -0
  281. package/dist/server/html.js +1 -1
  282. package/dist/server/html.js.map +1 -1
  283. package/dist/server/http-error-responses.d.ts +10 -0
  284. package/dist/server/http-error-responses.js +11 -1
  285. package/dist/server/http-error-responses.js.map +1 -1
  286. package/dist/server/image-optimization.d.ts +11 -1
  287. package/dist/server/image-optimization.js.map +1 -1
  288. package/dist/server/implicit-tags.js +2 -1
  289. package/dist/server/implicit-tags.js.map +1 -1
  290. package/dist/server/instrumentation-runtime.js.map +1 -1
  291. package/dist/server/instrumentation.js.map +1 -1
  292. package/dist/server/isr-cache.d.ts +12 -2
  293. package/dist/server/isr-cache.js +16 -5
  294. package/dist/server/isr-cache.js.map +1 -1
  295. package/dist/server/metadata-route-build-data.js.map +1 -1
  296. package/dist/server/metadata-route-response.js +22 -5
  297. package/dist/server/metadata-route-response.js.map +1 -1
  298. package/dist/server/metadata-routes.js +27 -8
  299. package/dist/server/metadata-routes.js.map +1 -1
  300. package/dist/server/middleware-matcher.js.map +1 -1
  301. package/dist/server/middleware-request-headers.d.ts +4 -1
  302. package/dist/server/middleware-request-headers.js +15 -8
  303. package/dist/server/middleware-request-headers.js.map +1 -1
  304. package/dist/server/middleware-response-headers.d.ts +2 -1
  305. package/dist/server/middleware-response-headers.js +1 -1
  306. package/dist/server/middleware-response-headers.js.map +1 -1
  307. package/dist/server/middleware-runtime.d.ts +1 -0
  308. package/dist/server/middleware-runtime.js +7 -3
  309. package/dist/server/middleware-runtime.js.map +1 -1
  310. package/dist/server/middleware.d.ts +12 -0
  311. package/dist/server/middleware.js +12 -0
  312. package/dist/server/middleware.js.map +1 -1
  313. package/dist/server/navigation-planner.d.ts +133 -0
  314. package/dist/server/navigation-planner.js +432 -0
  315. package/dist/server/navigation-planner.js.map +1 -0
  316. package/dist/server/navigation-trace.d.ts +19 -2
  317. package/dist/server/navigation-trace.js +20 -1
  318. package/dist/server/navigation-trace.js.map +1 -1
  319. package/dist/server/next-error-digest.d.ts +3 -2
  320. package/dist/server/next-error-digest.js +4 -2
  321. package/dist/server/next-error-digest.js.map +1 -1
  322. package/dist/server/normalize-path.d.ts +2 -1
  323. package/dist/server/normalize-path.js +4 -1
  324. package/dist/server/normalize-path.js.map +1 -1
  325. package/dist/server/pages-api-route.js +1 -0
  326. package/dist/server/pages-api-route.js.map +1 -1
  327. package/dist/server/pages-i18n.js.map +1 -1
  328. package/dist/server/pages-media-type.js.map +1 -1
  329. package/dist/server/pages-node-compat.js.map +1 -1
  330. package/dist/server/pages-page-data.d.ts +3 -2
  331. package/dist/server/pages-page-data.js +27 -5
  332. package/dist/server/pages-page-data.js.map +1 -1
  333. package/dist/server/pages-page-response.js +2 -1
  334. package/dist/server/pages-page-response.js.map +1 -1
  335. package/dist/server/prerender-work-unit-setup.js +1 -1
  336. package/dist/server/prerender-work-unit-setup.js.map +1 -1
  337. package/dist/server/prod-server.d.ts +28 -1
  338. package/dist/server/prod-server.js +97 -22
  339. package/dist/server/prod-server.js.map +1 -1
  340. package/dist/server/request-log.js.map +1 -1
  341. package/dist/server/request-pipeline.d.ts +1 -13
  342. package/dist/server/request-pipeline.js +3 -25
  343. package/dist/server/request-pipeline.js.map +1 -1
  344. package/dist/server/rsc-stream-hints.js.map +1 -1
  345. package/dist/server/seed-cache.js.map +1 -1
  346. package/dist/server/server-action-not-found.d.ts +16 -3
  347. package/dist/server/server-action-not-found.js +22 -4
  348. package/dist/server/server-action-not-found.js.map +1 -1
  349. package/dist/server/server-globals.d.ts +5 -0
  350. package/dist/server/server-globals.js +37 -0
  351. package/dist/server/server-globals.js.map +1 -0
  352. package/dist/server/socket-error-backstop.js.map +1 -1
  353. package/dist/server/static-file-cache.js +1 -1
  354. package/dist/server/static-file-cache.js.map +1 -1
  355. package/dist/server/worker-utils.d.ts +0 -7
  356. package/dist/server/worker-utils.js +3 -2
  357. package/dist/server/worker-utils.js.map +1 -1
  358. package/dist/shims/amp.js.map +1 -1
  359. package/dist/shims/app.d.ts +37 -4
  360. package/dist/shims/app.js +50 -1
  361. package/dist/shims/app.js.map +1 -0
  362. package/dist/shims/cache-for-request.js.map +1 -1
  363. package/dist/shims/cache-runtime.d.ts +19 -2
  364. package/dist/shims/cache-runtime.js +87 -19
  365. package/dist/shims/cache-runtime.js.map +1 -1
  366. package/dist/shims/cache.d.ts +20 -21
  367. package/dist/shims/cache.js +101 -15
  368. package/dist/shims/cache.js.map +1 -1
  369. package/dist/shims/client-hook-error.js.map +1 -1
  370. package/dist/shims/compat-router.js.map +1 -1
  371. package/dist/shims/config.js.map +1 -1
  372. package/dist/shims/constants.js.map +1 -1
  373. package/dist/shims/document.js.map +1 -1
  374. package/dist/shims/dynamic.d.ts +18 -10
  375. package/dist/shims/dynamic.js +107 -51
  376. package/dist/shims/dynamic.js.map +1 -1
  377. package/dist/shims/error-boundary.d.ts +35 -6
  378. package/dist/shims/error-boundary.js +116 -33
  379. package/dist/shims/error-boundary.js.map +1 -1
  380. package/dist/shims/error.d.ts +18 -1
  381. package/dist/shims/error.js +56 -1
  382. package/dist/shims/error.js.map +1 -1
  383. package/dist/shims/fetch-cache.d.ts +25 -1
  384. package/dist/shims/fetch-cache.js +159 -13
  385. package/dist/shims/fetch-cache.js.map +1 -1
  386. package/dist/shims/font-google-base.d.ts +22 -8
  387. package/dist/shims/font-google-base.js +41 -71
  388. package/dist/shims/font-google-base.js.map +1 -1
  389. package/dist/shims/font-local.d.ts +3 -20
  390. package/dist/shims/font-local.js +23 -75
  391. package/dist/shims/font-local.js.map +1 -1
  392. package/dist/shims/font-utils.d.ts +51 -0
  393. package/dist/shims/font-utils.js +97 -0
  394. package/dist/shims/font-utils.js.map +1 -0
  395. package/dist/shims/form.js +3 -1
  396. package/dist/shims/form.js.map +1 -1
  397. package/dist/shims/hash-scroll.d.ts +7 -0
  398. package/dist/shims/hash-scroll.js +30 -0
  399. package/dist/shims/hash-scroll.js.map +1 -0
  400. package/dist/shims/head-state.js.map +1 -1
  401. package/dist/shims/head.d.ts +3 -1
  402. package/dist/shims/head.js +28 -16
  403. package/dist/shims/head.js.map +1 -1
  404. package/dist/shims/headers.d.ts +11 -12
  405. package/dist/shims/headers.js +45 -8
  406. package/dist/shims/headers.js.map +1 -1
  407. package/dist/shims/i18n-context.js.map +1 -1
  408. package/dist/shims/i18n-state.js.map +1 -1
  409. package/dist/shims/image-config.d.ts +14 -1
  410. package/dist/shims/image-config.js +24 -1
  411. package/dist/shims/image-config.js.map +1 -1
  412. package/dist/shims/image.d.ts +1 -0
  413. package/dist/shims/image.js +159 -80
  414. package/dist/shims/image.js.map +1 -1
  415. package/dist/shims/internal/als-registry.js.map +1 -1
  416. package/dist/shims/internal/app-router-context.d.ts +7 -6
  417. package/dist/shims/internal/app-router-context.js +17 -6
  418. package/dist/shims/internal/app-router-context.js.map +1 -1
  419. package/dist/shims/internal/cookie-serialize.js.map +1 -1
  420. package/dist/shims/internal/make-hanging-promise.d.ts +1 -1
  421. package/dist/shims/internal/make-hanging-promise.js +1 -1
  422. package/dist/shims/internal/make-hanging-promise.js.map +1 -1
  423. package/dist/shims/internal/parse-cookie-header.js.map +1 -1
  424. package/dist/shims/internal/utils.js.map +1 -1
  425. package/dist/shims/internal/work-unit-async-storage.js +2 -2
  426. package/dist/shims/internal/work-unit-async-storage.js.map +1 -1
  427. package/dist/shims/layout-segment-context.js.map +1 -1
  428. package/dist/shims/legacy-image.js.map +1 -1
  429. package/dist/shims/link-prefetch.d.ts +42 -0
  430. package/dist/shims/link-prefetch.js +45 -0
  431. package/dist/shims/link-prefetch.js.map +1 -0
  432. package/dist/shims/link.d.ts +37 -4
  433. package/dist/shims/link.js +156 -46
  434. package/dist/shims/link.js.map +1 -1
  435. package/dist/shims/metadata.d.ts +16 -30
  436. package/dist/shims/metadata.js +87 -28
  437. package/dist/shims/metadata.js.map +1 -1
  438. package/dist/shims/navigation-state.js.map +1 -1
  439. package/dist/shims/navigation.d.ts +172 -10
  440. package/dist/shims/navigation.js +335 -70
  441. package/dist/shims/navigation.js.map +1 -1
  442. package/dist/shims/navigation.react-server.d.ts +3 -2
  443. package/dist/shims/navigation.react-server.js +5 -2
  444. package/dist/shims/navigation.react-server.js.map +1 -1
  445. package/dist/shims/offline.js.map +1 -1
  446. package/dist/shims/pages-router-runtime.d.ts +7 -0
  447. package/dist/shims/pages-router-runtime.js +16 -0
  448. package/dist/shims/pages-router-runtime.js.map +1 -0
  449. package/dist/shims/readonly-url-search-params.js.map +1 -1
  450. package/dist/shims/request-context.js.map +1 -1
  451. package/dist/shims/root-params.js.map +1 -1
  452. package/dist/shims/router-state.js.map +1 -1
  453. package/dist/shims/router.d.ts +69 -7
  454. package/dist/shims/router.js +232 -249
  455. package/dist/shims/router.js.map +1 -1
  456. package/dist/shims/script-nonce-context.js.map +1 -1
  457. package/dist/shims/script.js +110 -32
  458. package/dist/shims/script.js.map +1 -1
  459. package/dist/shims/server.js +12 -15
  460. package/dist/shims/server.js.map +1 -1
  461. package/dist/shims/slot.d.ts +7 -1
  462. package/dist/shims/slot.js +60 -7
  463. package/dist/shims/slot.js.map +1 -1
  464. package/dist/shims/thenable-params.js.map +1 -1
  465. package/dist/shims/unified-request-context.js +5 -0
  466. package/dist/shims/unified-request-context.js.map +1 -1
  467. package/dist/shims/unrecognized-action-error.d.ts +35 -0
  468. package/dist/shims/unrecognized-action-error.js +41 -0
  469. package/dist/shims/unrecognized-action-error.js.map +1 -0
  470. package/dist/shims/url-safety.js.map +1 -1
  471. package/dist/shims/url-utils.d.ts +22 -1
  472. package/dist/shims/url-utils.js +76 -3
  473. package/dist/shims/url-utils.js.map +1 -1
  474. package/dist/shims/use-merged-ref.js.map +1 -1
  475. package/dist/shims/web-vitals.d.ts +4 -21
  476. package/dist/shims/web-vitals.js +19 -6
  477. package/dist/shims/web-vitals.js.map +1 -1
  478. package/dist/utils/asset-prefix.d.ts +69 -0
  479. package/dist/utils/asset-prefix.js +91 -0
  480. package/dist/utils/asset-prefix.js.map +1 -0
  481. package/dist/utils/base-path.d.ts +7 -1
  482. package/dist/utils/base-path.js +10 -1
  483. package/dist/utils/base-path.js.map +1 -1
  484. package/dist/utils/cache-control-metadata.js.map +1 -1
  485. package/dist/utils/domain-locale.js.map +1 -1
  486. package/dist/utils/encode-cache-tag.d.ts +31 -0
  487. package/dist/utils/encode-cache-tag.js +38 -0
  488. package/dist/utils/encode-cache-tag.js.map +1 -0
  489. package/dist/utils/error-cause.js.map +1 -1
  490. package/dist/utils/hash.js.map +1 -1
  491. package/dist/utils/lazy-chunks.js.map +1 -1
  492. package/dist/utils/manifest-paths.js.map +1 -1
  493. package/dist/utils/mdx-scan.js.map +1 -1
  494. package/dist/utils/navigation-signal.d.ts +5 -0
  495. package/dist/utils/navigation-signal.js +14 -0
  496. package/dist/utils/navigation-signal.js.map +1 -0
  497. package/dist/utils/project.js.map +1 -1
  498. package/dist/utils/public-routes.js.map +1 -1
  499. package/dist/utils/query.js.map +1 -1
  500. package/dist/utils/safe-json-file.js.map +1 -1
  501. package/dist/utils/sorted-array.d.ts +9 -0
  502. package/dist/utils/sorted-array.js +22 -0
  503. package/dist/utils/sorted-array.js.map +1 -0
  504. package/dist/utils/text-stream.js.map +1 -1
  505. package/dist/utils/vinext-root.js.map +1 -1
  506. package/package.json +8 -6
@@ -1,5 +1,6 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
+ import { parseSync } from "vite";
3
4
  //#region src/build/report.ts
4
5
  /**
5
6
  * Build report — prints a Next.js-style route table after `vinext build`.
@@ -11,9 +12,9 @@ import path from "node:path";
11
12
  * ? Unknown — no explicit config; likely dynamic but not confirmed
12
13
  * λ API — API route handler
13
14
  *
14
- * Classification uses regex-based static source analysis (no module
15
- * execution). Vite's parseAst() is NOT used because it doesn't handle
16
- * TypeScript syntax.
15
+ * Classification uses AST-based static source analysis (no module execution).
16
+ * Runtime/prerender results are still treated as stronger evidence where
17
+ * available; AST analysis only reads top-level static exports.
17
18
  *
18
19
  * Limitation: without running the build, we cannot detect dynamic API usage
19
20
  * (headers(), cookies(), connection(), etc.) that implicitly forces a route
@@ -28,42 +29,113 @@ function getAppRouteRenderEntryPath(route) {
28
29
  for (const slot of route.parallelSlots) if (slot.defaultPath) return slot.defaultPath;
29
30
  return null;
30
31
  }
32
+ function parseRouteModuleWithLang(code, lang) {
33
+ try {
34
+ const result = parseSync(`vinext-route.${lang}`, code, {
35
+ astType: "ts",
36
+ lang,
37
+ sourceType: "module"
38
+ });
39
+ return result.errors.some((error) => error.severity === "Error") ? null : result.program;
40
+ } catch {
41
+ return null;
42
+ }
43
+ }
44
+ function parseRouteModule(code) {
45
+ return parseRouteModuleWithLang(code, "tsx") ?? parseRouteModuleWithLang(code, "ts");
46
+ }
47
+ function moduleExportNameValue(name) {
48
+ if (name.type === "Identifier") return name.name;
49
+ if (name.type === "Literal" && typeof name.value === "string") return name.value;
50
+ return null;
51
+ }
52
+ function bindingName(pattern) {
53
+ return pattern.type === "Identifier" ? pattern.name : null;
54
+ }
55
+ function declarationHasBindingName(declaration, name) {
56
+ if (declaration === null) return false;
57
+ if (declaration.type === "FunctionDeclaration") return declaration.id?.name === name;
58
+ if (declaration.type !== "VariableDeclaration") return false;
59
+ return declaration.declarations.some((declaration) => bindingName(declaration.id) === name);
60
+ }
31
61
  /**
32
- * Returns true if the source code contains a named export with the given name.
62
+ * Returns true if the source code contains an export declaration with the given name.
63
+ * For re-export specifiers, this intentionally follows Next.js' static analyzer
64
+ * and checks the local/original binding name.
33
65
  * Handles all three common export forms:
34
66
  * export function foo() {}
35
67
  * export const foo = ...
36
68
  * export { foo }
37
69
  */
38
70
  function hasNamedExport(code, name) {
39
- if (new RegExp(`(?:^|\\n)\\s*export\\s+(?:async\\s+)?function\\s+${name}\\b`).test(code)) return true;
40
- if (new RegExp(`(?:^|\\n)\\s*export\\s+(?:const|let|var)\\s+${name}\\s*[=:]`).test(code)) return true;
41
- if (new RegExp(`export\\s*\\{[^}]*\\b${name}\\b[^}]*\\}`).test(code)) return true;
71
+ const program = parseRouteModule(code);
72
+ if (!program) return false;
73
+ return hasNamedExportInProgram(program, name);
74
+ }
75
+ function hasNamedExportInProgram(program, name) {
76
+ for (const node of program.body) {
77
+ if (node.type !== "ExportNamedDeclaration") continue;
78
+ if (declarationHasBindingName(node.declaration, name)) return true;
79
+ for (const specifier of node.specifiers) if (moduleExportNameValue(specifier.local) === name) return true;
80
+ }
42
81
  return false;
43
82
  }
83
+ function unwrapStaticExpression(expression) {
84
+ let current = expression;
85
+ while (current.type === "ParenthesizedExpression" || current.type === "TSAsExpression" || current.type === "TSSatisfiesExpression" || current.type === "TSTypeAssertion" || current.type === "TSNonNullExpression") current = current.expression;
86
+ return current;
87
+ }
88
+ function findExportedConstInitializer(code, name) {
89
+ const program = parseRouteModule(code);
90
+ if (!program) return null;
91
+ return findExportedConstInitializerInProgram(program, name);
92
+ }
93
+ function findExportedConstInitializerInProgram(program, name) {
94
+ for (const node of program.body) {
95
+ if (node.type !== "ExportNamedDeclaration") continue;
96
+ const declaration = node.declaration;
97
+ if (declaration?.type !== "VariableDeclaration" || declaration.kind !== "const") continue;
98
+ for (const declarator of declaration.declarations) if (bindingName(declarator.id) === name) return declarator.init;
99
+ }
100
+ return null;
101
+ }
44
102
  /**
45
103
  * Extracts the string value of `export const <name> = "value"`.
46
- * Handles optional TypeScript type annotations:
47
- * export const dynamic: string = "force-dynamic"
104
+ * Handles TypeScript annotations/assertions and no-substitution template literals.
48
105
  * Returns null if the export is absent or not a string literal.
49
106
  */
50
107
  function extractExportConstString(code, name) {
51
- const m = new RegExp(`^\\s*export\\s+const\\s+${name}\\s*(?::[^=]+)?\\s*=\\s*['"]([^'"]+)['"]`, "m").exec(code);
52
- return m ? m[1] : null;
108
+ return extractStringFromConstInitializer(findExportedConstInitializer(code, name));
109
+ }
110
+ function extractExportConstStringFromProgram(program, name) {
111
+ return extractStringFromConstInitializer(findExportedConstInitializerInProgram(program, name));
112
+ }
113
+ function extractStringFromConstInitializer(initializer) {
114
+ if (initializer === null) return null;
115
+ const expression = unwrapStaticExpression(initializer);
116
+ if (expression.type === "Literal" && typeof expression.value === "string") return expression.value;
117
+ if (expression.type === "TemplateLiteral" && expression.expressions.length === 0) return expression.quasis[0]?.value.cooked ?? expression.quasis[0]?.value.raw ?? null;
118
+ return null;
53
119
  }
54
120
  /**
55
121
  * Extracts the numeric value of `export const <name> = <number|false>`.
56
122
  * Supports integers, decimals, negative values, `Infinity`, and `false`.
57
123
  * `false` is returned as `Infinity` because `export const revalidate = false`
58
124
  * means "cache indefinitely" in Next.js segment config.
59
- * Handles optional TypeScript type annotations.
125
+ * Handles TypeScript annotations/assertions and JavaScript numeric separators.
60
126
  * Returns null if the export is absent or not a number/`false`.
61
127
  */
62
128
  function extractExportConstNumber(code, name) {
63
- const m = new RegExp(`^\\s*export\\s+const\\s+${name}\\s*(?::[^=]+)?\\s*=\\s*(-?\\d+(?:\\.\\d+)?|Infinity|false)(?![\\w$])`, "m").exec(code);
64
- if (!m) return null;
65
- if (m[1] === "Infinity" || m[1] === "false") return Infinity;
66
- return parseFloat(m[1]);
129
+ return extractNumberFromConstInitializer(findExportedConstInitializer(code, name));
130
+ }
131
+ function extractExportConstNumberFromProgram(program, name) {
132
+ return extractNumberFromConstInitializer(findExportedConstInitializerInProgram(program, name));
133
+ }
134
+ function extractNumberFromConstInitializer(initializer) {
135
+ if (initializer === null) return null;
136
+ const value = extractStaticNumberValue(initializer);
137
+ if (value === null) return null;
138
+ return value === false ? Infinity : value;
67
139
  }
68
140
  /**
69
141
  * Extracts the `revalidate` value from inside a `getStaticProps` return object.
@@ -77,345 +149,118 @@ function extractExportConstNumber(code, name) {
77
149
  * null — no `revalidate` key found (fully static)
78
150
  */
79
151
  function extractGetStaticPropsRevalidate(code) {
80
- const returnObjects = extractGetStaticPropsReturnObjects(code);
81
- if (returnObjects) {
82
- for (const searchSpace of returnObjects) {
83
- const revalidate = extractTopLevelRevalidateValue(searchSpace);
84
- if (revalidate !== null) return revalidate;
85
- }
152
+ const program = parseRouteModule(code);
153
+ if (!program) return extractWrappedGetStaticPropsRevalidate(code);
154
+ return extractGetStaticPropsRevalidateFromProgram(program, code);
155
+ }
156
+ function extractGetStaticPropsRevalidateFromProgram(program, fallbackCode) {
157
+ const getStaticProps = findExportedGetStaticProps(program);
158
+ if (getStaticProps === "external") return null;
159
+ if (getStaticProps === null) return extractWrappedGetStaticPropsRevalidate(fallbackCode);
160
+ return extractFunctionRevalidate(getStaticProps);
161
+ }
162
+ function extractStaticNumberValue(expression) {
163
+ const unwrapped = unwrapStaticExpression(expression);
164
+ if (unwrapped.type === "Literal") {
165
+ if (typeof unwrapped.value === "number") return unwrapped.value;
166
+ if (unwrapped.value === false) return false;
86
167
  return null;
87
168
  }
88
- const m = /\brevalidate\s*:\s*(-?\d+(?:\.\d+)?|Infinity|false)\b/.exec(code);
89
- if (!m) return null;
90
- if (m[1] === "false") return false;
91
- if (m[1] === "Infinity") return Infinity;
92
- return parseFloat(m[1]);
93
- }
94
- function extractTopLevelRevalidateValue(code) {
95
- let braceDepth = 0;
96
- let parenDepth = 0;
97
- let bracketDepth = 0;
98
- let quote = null;
99
- let inLineComment = false;
100
- let inBlockComment = false;
101
- for (let i = 0; i < code.length; i++) {
102
- const char = code[i];
103
- const next = code[i + 1];
104
- if (inLineComment) {
105
- if (char === "\n") inLineComment = false;
106
- continue;
107
- }
108
- if (inBlockComment) {
109
- if (char === "*" && next === "/") {
110
- inBlockComment = false;
111
- i++;
112
- }
113
- continue;
114
- }
115
- if (quote) {
116
- if (char === "\\") {
117
- i++;
118
- continue;
119
- }
120
- if (char === quote) quote = null;
121
- continue;
122
- }
123
- if (char === "/" && next === "/") {
124
- inLineComment = true;
125
- i++;
126
- continue;
127
- }
128
- if (char === "/" && next === "*") {
129
- inBlockComment = true;
130
- i++;
131
- continue;
132
- }
133
- if (char === "\"" || char === "'" || char === "`") {
134
- quote = char;
135
- continue;
136
- }
137
- if (char === "{") {
138
- braceDepth++;
139
- continue;
140
- }
141
- if (char === "}") {
142
- braceDepth--;
143
- continue;
144
- }
145
- if (char === "(") {
146
- parenDepth++;
147
- continue;
148
- }
149
- if (char === ")") {
150
- parenDepth--;
151
- continue;
152
- }
153
- if (char === "[") {
154
- bracketDepth++;
155
- continue;
156
- }
157
- if (char === "]") {
158
- bracketDepth--;
159
- continue;
169
+ if (unwrapped.type === "Identifier" && unwrapped.name === "Infinity") return Infinity;
170
+ if (unwrapped.type === "UnaryExpression") {
171
+ const argument = extractStaticNumberValue(unwrapped.argument);
172
+ if (typeof argument !== "number") return null;
173
+ if (unwrapped.operator === "-") return -argument;
174
+ if (unwrapped.operator === "+") return argument;
175
+ return null;
176
+ }
177
+ return null;
178
+ }
179
+ function findExportedGetStaticProps(program) {
180
+ let hasLocalGetStaticPropsExport = false;
181
+ for (const node of program.body) {
182
+ if (node.type !== "ExportNamedDeclaration") continue;
183
+ const declaration = node.declaration;
184
+ if (declaration?.type === "FunctionDeclaration" && declaration.id?.name === "getStaticProps") return declaration;
185
+ if (declaration?.type === "VariableDeclaration") {
186
+ const direct = findFunctionLikeVariable(declaration.declarations, "getStaticProps");
187
+ if (direct) return direct;
188
+ }
189
+ for (const specifier of node.specifiers) {
190
+ if (moduleExportNameValue(specifier.local) !== "getStaticProps") continue;
191
+ if (node.source !== null) return "external";
192
+ hasLocalGetStaticPropsExport = true;
160
193
  }
161
- if (braceDepth === 1 && parenDepth === 0 && bracketDepth === 0 && matchesKeywordAt(code, i, "revalidate")) {
162
- const colonIndex = findNextNonWhitespaceIndex(code, i + 10);
163
- if (colonIndex === -1 || code[colonIndex] !== ":") continue;
164
- const valueStart = findNextNonWhitespaceIndex(code, colonIndex + 1);
165
- if (valueStart === -1) return null;
166
- const valueMatch = /^(-?\d+(?:\.\d+)?|Infinity|false)\b/.exec(code.slice(valueStart));
167
- if (!valueMatch) return null;
168
- if (valueMatch[1] === "false") return false;
169
- if (valueMatch[1] === "Infinity") return Infinity;
170
- return parseFloat(valueMatch[1]);
194
+ }
195
+ if (!hasLocalGetStaticPropsExport) return null;
196
+ for (const node of program.body) {
197
+ if (node.type === "FunctionDeclaration" && node.id?.name === "getStaticProps") return node;
198
+ if (node.type === "VariableDeclaration") {
199
+ const local = findFunctionLikeVariable(node.declarations, "getStaticProps");
200
+ if (local) return local;
171
201
  }
172
202
  }
173
203
  return null;
174
204
  }
175
- function extractGetStaticPropsReturnObjects(code) {
176
- const declarationMatch = /(?:^|\n)\s*(?:export\s+)?(?:async\s+)?function\s+getStaticProps\b|(?:^|\n)\s*(?:export\s+)?(?:const|let|var)\s+getStaticProps\b/.exec(code);
177
- if (!declarationMatch) {
178
- if (/(?:^|\n)\s*export\s*\{[^}]*\bgetStaticProps\b[^}]*\}\s*from\b/.test(code)) return [];
179
- return null;
205
+ function findFunctionLikeVariable(declarations, name) {
206
+ for (const declaration of declarations) {
207
+ if (bindingName(declaration.id) !== name || declaration.init === null) continue;
208
+ const initializer = unwrapStaticExpression(declaration.init);
209
+ if (initializer.type === "FunctionExpression" || initializer.type === "ArrowFunctionExpression") return initializer;
180
210
  }
181
- const declaration = extractGetStaticPropsDeclaration(code, declarationMatch);
182
- if (declaration === null) return [];
183
- const returnObjects = declaration.trimStart().startsWith("{") ? collectReturnObjectsFromFunctionBody(declaration) : [];
184
- if (returnObjects.length > 0) return returnObjects;
185
- const arrowMatch = declaration.search(/=>\s*\(\s*\{/);
186
- if (arrowMatch === -1) return [];
187
- const braceStart = declaration.indexOf("{", arrowMatch);
188
- if (braceStart === -1) return [];
189
- const braceEnd = findMatchingBrace(declaration, braceStart);
190
- if (braceEnd === -1) return [];
191
- return [declaration.slice(braceStart, braceEnd + 1)];
192
- }
193
- function extractGetStaticPropsDeclaration(code, declarationMatch) {
194
- const declarationStart = declarationMatch.index;
195
- const declarationText = declarationMatch[0];
196
- const declarationTail = code.slice(declarationStart);
197
- if (declarationText.includes("function getStaticProps")) return extractFunctionBody(code, declarationStart + declarationText.length);
198
- const functionExpressionMatch = /(?:async\s+)?function\b/.exec(declarationTail);
199
- if (functionExpressionMatch) return extractFunctionBody(declarationTail, functionExpressionMatch.index);
200
- const blockBodyMatch = /=>\s*\{/.exec(declarationTail);
201
- if (blockBodyMatch) {
202
- const braceStart = declarationTail.indexOf("{", blockBodyMatch.index);
203
- if (braceStart === -1) return null;
204
- const braceEnd = findMatchingBrace(declarationTail, braceStart);
205
- if (braceEnd === -1) return null;
206
- return declarationTail.slice(braceStart, braceEnd + 1);
207
- }
208
- const implicitArrowMatch = declarationTail.search(/=>\s*\(\s*\{/);
209
- if (implicitArrowMatch === -1) return null;
210
- const implicitBraceStart = declarationTail.indexOf("{", implicitArrowMatch);
211
- if (implicitBraceStart === -1) return null;
212
- const implicitBraceEnd = findMatchingBrace(declarationTail, implicitBraceStart);
213
- if (implicitBraceEnd === -1) return null;
214
- return declarationTail.slice(0, implicitBraceEnd + 1);
215
- }
216
- function extractFunctionBody(code, functionStart) {
217
- const bodyEnd = findFunctionBodyEnd(code, functionStart);
218
- if (bodyEnd === -1) return null;
219
- const paramsStart = code.indexOf("(", functionStart);
220
- if (paramsStart === -1) return null;
221
- const paramsEnd = findMatchingParen(code, paramsStart);
222
- if (paramsEnd === -1) return null;
223
- const bodyStart = code.indexOf("{", paramsEnd + 1);
224
- if (bodyStart === -1) return null;
225
- return code.slice(bodyStart, bodyEnd + 1);
226
- }
227
- function collectReturnObjectsFromFunctionBody(code) {
228
- const returnObjects = [];
229
- let quote = null;
230
- let inLineComment = false;
231
- let inBlockComment = false;
232
- for (let i = 0; i < code.length; i++) {
233
- const char = code[i];
234
- const next = code[i + 1];
235
- if (inLineComment) {
236
- if (char === "\n") inLineComment = false;
237
- continue;
238
- }
239
- if (inBlockComment) {
240
- if (char === "*" && next === "/") {
241
- inBlockComment = false;
242
- i++;
243
- }
244
- continue;
245
- }
246
- if (quote) {
247
- if (char === "\\") {
248
- i++;
249
- continue;
250
- }
251
- if (char === quote) quote = null;
252
- continue;
253
- }
254
- if (char === "/" && next === "/") {
255
- inLineComment = true;
256
- i++;
257
- continue;
258
- }
259
- if (char === "/" && next === "*") {
260
- inBlockComment = true;
261
- i++;
262
- continue;
263
- }
264
- if (char === "\"" || char === "'" || char === "`") {
265
- quote = char;
266
- continue;
267
- }
268
- if (matchesKeywordAt(code, i, "function")) {
269
- const nestedBodyEnd = findFunctionBodyEnd(code, i);
270
- if (nestedBodyEnd !== -1) i = nestedBodyEnd;
271
- continue;
272
- }
273
- if (matchesKeywordAt(code, i, "class")) {
274
- const classBodyEnd = findClassBodyEnd(code, i);
275
- if (classBodyEnd !== -1) i = classBodyEnd;
276
- continue;
277
- }
278
- if (char === "=" && next === ">") {
279
- const nestedBodyEnd = findArrowFunctionBodyEnd(code, i);
280
- if (nestedBodyEnd !== -1) i = nestedBodyEnd;
281
- continue;
282
- }
283
- if (char >= "A" && char <= "Z" || char >= "a" && char <= "z" || char === "_" || char === "$" || char === "*") {
284
- const methodBodyEnd = findObjectMethodBodyEnd(code, i);
285
- if (methodBodyEnd !== -1) {
286
- i = methodBodyEnd;
287
- continue;
288
- }
289
- }
290
- if (matchesKeywordAt(code, i, "return")) {
291
- const braceStart = findNextNonWhitespaceIndex(code, i + 6);
292
- if (braceStart === -1 || code[braceStart] !== "{") continue;
293
- const braceEnd = findMatchingBrace(code, braceStart);
294
- if (braceEnd === -1) continue;
295
- returnObjects.push(code.slice(braceStart, braceEnd + 1));
296
- i = braceEnd;
297
- }
211
+ return null;
212
+ }
213
+ function extractWrappedGetStaticPropsRevalidate(code) {
214
+ const program = parseRouteModule(`function __vinextGetStaticProps() {\n${code}\n}`);
215
+ if (!program) return null;
216
+ for (const node of program.body) if (node.type === "FunctionDeclaration" && node.id?.name === "__vinextGetStaticProps") return extractFunctionRevalidate(node);
217
+ return null;
218
+ }
219
+ function extractFunctionRevalidate(fn) {
220
+ if (fn.type === "ArrowFunctionExpression" && fn.body.type !== "BlockStatement") {
221
+ const expression = unwrapStaticExpression(fn.body);
222
+ return expression.type === "ObjectExpression" ? extractObjectRevalidate(expression) : null;
298
223
  }
299
- return returnObjects;
300
- }
301
- function findFunctionBodyEnd(code, functionStart) {
302
- const paramsStart = code.indexOf("(", functionStart);
303
- if (paramsStart === -1) return -1;
304
- const paramsEnd = findMatchingParen(code, paramsStart);
305
- if (paramsEnd === -1) return -1;
306
- const bodyStart = code.indexOf("{", paramsEnd + 1);
307
- if (bodyStart === -1) return -1;
308
- return findMatchingBrace(code, bodyStart);
309
- }
310
- function findClassBodyEnd(code, classStart) {
311
- const bodyStart = code.indexOf("{", classStart + 5);
312
- if (bodyStart === -1) return -1;
313
- return findMatchingBrace(code, bodyStart);
314
- }
315
- function findArrowFunctionBodyEnd(code, arrowIndex) {
316
- const bodyStart = findNextNonWhitespaceIndex(code, arrowIndex + 2);
317
- if (bodyStart === -1 || code[bodyStart] !== "{") return -1;
318
- return findMatchingBrace(code, bodyStart);
319
- }
320
- function findObjectMethodBodyEnd(code, start) {
321
- let i = start;
322
- if (matchesKeywordAt(code, i, "async")) {
323
- const afterAsync = findNextNonWhitespaceIndex(code, i + 5);
324
- if (afterAsync === -1) return -1;
325
- if (code[afterAsync] !== "(") i = afterAsync;
224
+ if (!fn.body || fn.body.type !== "BlockStatement") return null;
225
+ return extractBlockRevalidate(fn.body);
226
+ }
227
+ function extractBlockRevalidate(block) {
228
+ for (const statement of block.body) {
229
+ const result = extractStatementRevalidate(statement);
230
+ if (result !== null) return result;
326
231
  }
327
- if (code[i] === "*") {
328
- i = findNextNonWhitespaceIndex(code, i + 1);
329
- if (i === -1) return -1;
232
+ return null;
233
+ }
234
+ function extractStatementRevalidate(statement) {
235
+ if (statement.type === "ReturnStatement") {
236
+ if (!statement.argument) return null;
237
+ const argument = unwrapStaticExpression(statement.argument);
238
+ return argument.type === "ObjectExpression" ? extractObjectRevalidate(argument) : null;
330
239
  }
331
- if (!/[A-Za-z_$]/.test(code[i] ?? "")) return -1;
332
- const nameStart = i;
333
- while (/[A-Za-z0-9_$]/.test(code[i] ?? "")) i++;
334
- const name = code.slice(nameStart, i);
335
- if (name === "if" || name === "for" || name === "while" || name === "switch" || name === "catch" || name === "function" || name === "return" || name === "const" || name === "let" || name === "var" || name === "new") return -1;
336
- if (name === "get" || name === "set") {
337
- const afterAccessor = findNextNonWhitespaceIndex(code, i);
338
- if (afterAccessor === -1) return -1;
339
- if (code[afterAccessor] !== "(") {
340
- i = afterAccessor;
341
- if (!/[A-Za-z_$]/.test(code[i] ?? "")) return -1;
342
- while (/[A-Za-z0-9_$]/.test(code[i] ?? "")) i++;
240
+ if (statement.type === "BlockStatement") return extractBlockRevalidate(statement);
241
+ if (statement.type === "IfStatement") return extractStatementRevalidate(statement.consequent) ?? (statement.alternate ? extractStatementRevalidate(statement.alternate) : null);
242
+ if (statement.type === "ForStatement" || statement.type === "ForInStatement" || statement.type === "ForOfStatement" || statement.type === "WhileStatement" || statement.type === "DoWhileStatement" || statement.type === "WithStatement" || statement.type === "LabeledStatement") return extractStatementRevalidate(statement.body);
243
+ if (statement.type === "SwitchStatement") {
244
+ for (const switchCase of statement.cases) for (const consequent of switchCase.consequent) {
245
+ const result = extractStatementRevalidate(consequent);
246
+ if (result !== null) return result;
343
247
  }
248
+ return null;
344
249
  }
345
- const paramsStart = findNextNonWhitespaceIndex(code, i);
346
- if (paramsStart === -1 || code[paramsStart] !== "(") return -1;
347
- const paramsEnd = findMatchingParen(code, paramsStart);
348
- if (paramsEnd === -1) return -1;
349
- const bodyStart = findNextNonWhitespaceIndex(code, paramsEnd + 1);
350
- if (bodyStart === -1 || code[bodyStart] !== "{") return -1;
351
- return findMatchingBrace(code, bodyStart);
352
- }
353
- function findNextNonWhitespaceIndex(code, start) {
354
- for (let i = start; i < code.length; i++) if (!/\s/.test(code[i])) return i;
355
- return -1;
356
- }
357
- function matchesKeywordAt(code, index, keyword) {
358
- const before = index === 0 ? "" : code[index - 1];
359
- const after = code[index + keyword.length] ?? "";
360
- return code.startsWith(keyword, index) && (before === "" || !/[A-Za-z0-9_$]/.test(before)) && (after === "" || !/[A-Za-z0-9_$]/.test(after));
361
- }
362
- function findMatchingBrace(code, start) {
363
- return findMatchingToken(code, start, "{", "}");
364
- }
365
- function findMatchingParen(code, start) {
366
- return findMatchingToken(code, start, "(", ")");
367
- }
368
- function findMatchingToken(code, start, openToken, closeToken) {
369
- let depth = 0;
370
- let quote = null;
371
- let inLineComment = false;
372
- let inBlockComment = false;
373
- for (let i = start; i < code.length; i++) {
374
- const char = code[i];
375
- const next = code[i + 1];
376
- if (inLineComment) {
377
- if (char === "\n") inLineComment = false;
378
- continue;
379
- }
380
- if (inBlockComment) {
381
- if (char === "*" && next === "/") {
382
- inBlockComment = false;
383
- i++;
384
- }
385
- continue;
386
- }
387
- if (quote) {
388
- if (char === "\\") {
389
- i++;
390
- continue;
391
- }
392
- if (char === quote) quote = null;
393
- continue;
394
- }
395
- if (char === "/" && next === "/") {
396
- inLineComment = true;
397
- i++;
398
- continue;
399
- }
400
- if (char === "/" && next === "*") {
401
- inBlockComment = true;
402
- i++;
403
- continue;
404
- }
405
- if (char === "\"" || char === "'" || char === "`") {
406
- quote = char;
407
- continue;
408
- }
409
- if (char === openToken) {
410
- depth++;
411
- continue;
412
- }
413
- if (char === closeToken) {
414
- depth--;
415
- if (depth === 0) return i;
416
- }
250
+ if (statement.type === "TryStatement") return extractBlockRevalidate(statement.block) ?? (statement.handler ? extractBlockRevalidate(statement.handler.body) : null) ?? (statement.finalizer ? extractBlockRevalidate(statement.finalizer) : null);
251
+ return null;
252
+ }
253
+ function extractObjectRevalidate(object) {
254
+ for (const property of object.properties) {
255
+ if (property.type !== "Property" || property.computed || propertyName(property.key) !== "revalidate") continue;
256
+ return extractStaticNumberValue(property.value);
417
257
  }
418
- return -1;
258
+ return null;
259
+ }
260
+ function propertyName(key) {
261
+ if (key.type === "Identifier") return key.name;
262
+ if (key.type === "Literal" && typeof key.value === "string") return key.value;
263
+ return null;
419
264
  }
420
265
  /**
421
266
  * Classifies a layout file by its segment config exports (`dynamic`, `revalidate`).
@@ -430,7 +275,8 @@ function findMatchingToken(code, start, openToken, closeToken) {
430
275
  * (`revalidate = 0` → dynamic, `revalidate = Infinity` → static) are decisive.
431
276
  */
432
277
  function classifyLayoutSegmentConfig(code) {
433
- const dynamicValue = extractExportConstString(code, "dynamic");
278
+ const program = parseRouteModule(code);
279
+ const dynamicValue = program ? extractExportConstStringFromProgram(program, "dynamic") : null;
434
280
  if (dynamicValue === "force-dynamic") return {
435
281
  kind: "dynamic",
436
282
  reason: {
@@ -447,7 +293,7 @@ function classifyLayoutSegmentConfig(code) {
447
293
  value: dynamicValue
448
294
  }
449
295
  };
450
- const revalidateValue = extractExportConstNumber(code, "revalidate");
296
+ const revalidateValue = program ? extractExportConstNumberFromProgram(program, "revalidate") : null;
451
297
  if (revalidateValue === Infinity) return {
452
298
  kind: "static",
453
299
  reason: {
@@ -480,9 +326,10 @@ function classifyPagesRoute(filePath) {
480
326
  } catch {
481
327
  return { type: "unknown" };
482
328
  }
483
- if (hasNamedExport(code, "getServerSideProps")) return { type: "ssr" };
484
- if (hasNamedExport(code, "getStaticProps")) {
485
- const revalidate = extractGetStaticPropsRevalidate(code);
329
+ const program = parseRouteModule(code);
330
+ if (program && hasNamedExportInProgram(program, "getServerSideProps")) return { type: "ssr" };
331
+ if (program && hasNamedExportInProgram(program, "getStaticProps")) {
332
+ const revalidate = extractGetStaticPropsRevalidateFromProgram(program, code);
486
333
  if (revalidate === null || revalidate === false || revalidate === Infinity) return { type: "static" };
487
334
  if (revalidate === 0) return { type: "ssr" };
488
335
  return {
@@ -509,10 +356,11 @@ function classifyAppRoute(pagePath, routePath, isDynamic) {
509
356
  } catch {
510
357
  return { type: "unknown" };
511
358
  }
512
- const dynamicValue = extractExportConstString(code, "dynamic");
359
+ const program = parseRouteModule(code);
360
+ const dynamicValue = program ? extractExportConstStringFromProgram(program, "dynamic") : null;
513
361
  if (dynamicValue === "force-dynamic") return { type: "ssr" };
514
362
  if (dynamicValue === "force-static" || dynamicValue === "error") return { type: "static" };
515
- const revalidateValue = extractExportConstNumber(code, "revalidate");
363
+ const revalidateValue = program ? extractExportConstNumberFromProgram(program, "revalidate") : null;
516
364
  if (revalidateValue !== null) {
517
365
  if (revalidateValue === Infinity) return { type: "static" };
518
366
  if (revalidateValue === 0) return { type: "ssr" };