@wular/pnext 0.0.3 → 0.0.6

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 (392) hide show
  1. package/README.md +11 -11
  2. package/bin/pnext +1 -1
  3. package/config/lint/base.js +7 -7
  4. package/config/ts/base.json +2 -4
  5. package/config/ts/react.json +2 -6
  6. package/package.json +23 -2
  7. package/reference/compat.md +1 -1
  8. package/reference/config.md +2 -2
  9. package/reference/css.md +13 -9
  10. package/reference/dev.md +1 -1
  11. package/reference/metadata.md +7 -7
  12. package/reference/navigation.md +35 -28
  13. package/reference/performance.md +70 -70
  14. package/reference/rendering.md +17 -17
  15. package/reference/routing.md +17 -17
  16. package/reference/typegen.md +12 -8
  17. package/src/api/cache.ts +36 -37
  18. package/src/api/client-cache.ts +2 -2
  19. package/src/api/client-navigation.ts +113 -109
  20. package/src/api/dynamic.tsx +58 -55
  21. package/src/api/link.tsx +49 -52
  22. package/src/api/navigation.ts +59 -58
  23. package/src/api/server.ts +152 -144
  24. package/src/api/suspense.ts +4 -4
  25. package/src/cli/adapters/vercel-warm.ts +126 -121
  26. package/src/cli/adapters/vercel.ts +437 -443
  27. package/src/cli/analyze.ts +333 -144
  28. package/src/cli/{named-bin.ts → boot/named-bin.ts} +37 -37
  29. package/src/cli/{boot-trace.ts → boot/trace.ts} +10 -10
  30. package/src/cli/build.ts +976 -978
  31. package/src/cli/create.ts +71 -63
  32. package/src/cli/dev.ts +116 -116
  33. package/src/cli/index.ts +88 -85
  34. package/src/cli/migrate/package-json.ts +73 -71
  35. package/src/cli/migrate/report.ts +32 -33
  36. package/src/cli/migrate/{index.ts → run.ts} +48 -49
  37. package/src/cli/migrate/scan.ts +46 -46
  38. package/src/cli/migrate/spinner.ts +9 -9
  39. package/src/cli/migrate/tsconfig.ts +35 -35
  40. package/src/cli/{server-entry.ts → serve/entry.ts} +57 -57
  41. package/src/cli/{request-pipeline.ts → serve/pipeline.ts} +386 -394
  42. package/src/cli/{serve-ui.ts → serve/ui.ts} +47 -47
  43. package/src/cli/start.ts +65 -66
  44. package/src/{typegen.ts → cli/typegen.ts} +59 -59
  45. package/src/client/build.ts +794 -768
  46. package/src/client/chunk-fold.ts +245 -240
  47. package/src/client/{paths.ts → chunk-name.ts} +6 -6
  48. package/src/client/entry.ts +162 -147
  49. package/src/client/prebuilt.ts +231 -223
  50. package/src/client/profile.ts +29 -29
  51. package/src/client/react-compiler.ts +20 -15
  52. package/src/client/{compat-surface.ts → react-tier.ts} +64 -64
  53. package/src/client/reference-stub.ts +51 -51
  54. package/src/client/reference.ts +19 -19
  55. package/src/{api → client}/router/events.ts +17 -17
  56. package/src/{api → client}/router/history.ts +16 -16
  57. package/src/{api → client}/router/hub.ts +52 -53
  58. package/src/{api/router.ts → client/router/index.ts} +61 -60
  59. package/src/{api → client}/router/policies.ts +24 -24
  60. package/src/{api → client}/router/runtime.ts +1988 -1961
  61. package/src/{api → client}/router/types.ts +93 -98
  62. package/src/compat/actions/client-plugin.ts +42 -43
  63. package/src/compat/actions/client-stub.ts +14 -14
  64. package/src/compat/actions/{action-client.ts → client.ts} +194 -193
  65. package/src/compat/actions/config.ts +63 -64
  66. package/src/compat/actions/detect.ts +68 -68
  67. package/src/compat/actions/discovery.ts +105 -105
  68. package/src/compat/actions/{action-dispatch.ts → dispatch.ts} +277 -274
  69. package/src/compat/actions/early-submit.ts +1 -1
  70. package/src/compat/actions/endpoint.ts +198 -198
  71. package/src/compat/actions/extensions.ts +811 -0
  72. package/src/compat/actions/flight.ts +23 -23
  73. package/src/compat/actions/form-state.ts +34 -34
  74. package/src/compat/actions/hoist.ts +382 -236
  75. package/src/compat/actions/ids.ts +7 -12
  76. package/src/compat/actions/index.ts +8 -8
  77. package/src/compat/actions/instances.ts +46 -46
  78. package/src/compat/actions/origin.ts +47 -48
  79. package/src/compat/actions/protocol.ts +22 -22
  80. package/src/compat/actions/registry.ts +19 -19
  81. package/src/compat/{misc/action-return.ts → actions/return.ts} +60 -57
  82. package/src/compat/actions/rewrite.ts +125 -125
  83. package/src/compat/actions/{action-router.ts → router.ts} +10 -10
  84. package/src/compat/actions/serve.ts +132 -136
  85. package/src/compat/actions/server-tag.ts +4 -4
  86. package/src/compat/actions/{action-shared.ts → shared.ts} +34 -34
  87. package/src/compat/actions/unrecognized-error.ts +4 -4
  88. package/src/compat/{index.ts → aliases.ts} +112 -109
  89. package/src/compat/bundler/bun-externals.ts +18 -18
  90. package/src/compat/bundler/cjs-exports.ts +271 -223
  91. package/src/compat/bundler/config.ts +116 -111
  92. package/src/compat/bundler/externals.ts +12 -12
  93. package/src/compat/bundler/import-meta-url.ts +19 -19
  94. package/src/compat/bundler/modularize-imports.ts +36 -33
  95. package/src/compat/bundler/new-url-asset.ts +22 -24
  96. package/src/compat/bundler/optimize-package-imports.ts +111 -107
  97. package/src/compat/bundler/polyfill.ts +28 -28
  98. package/src/compat/bundler/react-compiler.ts +35 -29
  99. package/src/compat/bundler/react-profiler.tsx +11 -11
  100. package/src/compat/bundler/relay-transform.ts +48 -47
  101. package/src/compat/bundler/require-context.ts +119 -113
  102. package/src/compat/bundler/resolve-extensions.ts +19 -19
  103. package/src/compat/bundler/source-cache.ts +25 -25
  104. package/src/compat/bundler/static-imports.ts +7 -7
  105. package/src/compat/bundler/symlink-imports.ts +46 -46
  106. package/src/compat/bundler/tsconfig-paths.ts +13 -15
  107. package/src/compat/bundler/wasm.ts +58 -60
  108. package/src/compat/bundler/webpack-loaders.ts +254 -241
  109. package/src/compat/bundler/worker.ts +101 -104
  110. package/src/compat/cache/build-flags.ts +29 -29
  111. package/src/compat/cache/build-prerender-errors.ts +40 -44
  112. package/src/compat/cache/custom-handler.ts +60 -53
  113. package/src/compat/cache/fetch-patch.ts +240 -240
  114. package/src/compat/cache/handler.ts +27 -31
  115. package/src/compat/cache/modern-handler.ts +148 -126
  116. package/src/compat/cache/resume-data-cache.ts +47 -45
  117. package/src/compat/cache/revalidate.ts +233 -232
  118. package/src/compat/cache/runtime-error.ts +35 -35
  119. package/src/compat/cache/use-cache-transform.ts +442 -417
  120. package/src/compat/cache/use-cache.ts +650 -614
  121. package/src/compat/cache-control.ts +140 -142
  122. package/src/compat/client/base-path.ts +21 -20
  123. package/src/compat/client/css-order.ts +18 -18
  124. package/src/compat/client/errors/bare-boundary.ts +11 -11
  125. package/src/compat/client/errors/control-flow.ts +23 -23
  126. package/src/compat/client/errors/error-boundary.ts +61 -61
  127. package/src/compat/client/errors/global-error.ts +101 -91
  128. package/src/compat/client/errors/install.ts +71 -72
  129. package/src/compat/client/errors/lazy.ts +23 -23
  130. package/src/compat/client/errors/primitive-throw.ts +47 -45
  131. package/src/compat/client/errors/soft-refresh.ts +4 -4
  132. package/src/compat/client/link-status.ts +33 -33
  133. package/src/compat/client/{nav-compat-runtime.ts → nav-runtime.ts} +20 -20
  134. package/src/compat/client/{nav-compat.ts → nav.ts} +12 -13
  135. package/src/compat/client/navigation-scroll.ts +63 -63
  136. package/src/compat/client/optimistic-routing.ts +93 -88
  137. package/src/compat/client/prefetch-cache.ts +23 -24
  138. package/src/compat/client/route-announcer.ts +35 -35
  139. package/src/compat/client/segment-cache-policy.ts +20 -20
  140. package/src/compat/client/segment-cache.ts +309 -315
  141. package/src/compat/client/segment-prefetch.ts +127 -132
  142. package/src/compat/client/trailing-slash.ts +5 -4
  143. package/src/compat/css/chunking.ts +113 -116
  144. package/src/compat/css/inline-css.ts +21 -21
  145. package/src/compat/css/lightningcss.ts +37 -38
  146. package/src/compat/css/modules.ts +161 -175
  147. package/src/compat/css/nonce.ts +7 -7
  148. package/src/compat/css/sass-plugin.ts +18 -21
  149. package/src/compat/css/sass.ts +150 -152
  150. package/src/compat/css/styled-jsx-runtime.ts +27 -27
  151. package/src/compat/css/styled-jsx.ts +21 -21
  152. package/src/compat/edge-runtime.ts +27 -27
  153. package/src/compat/{adapter → export}/build-complete.ts +72 -75
  154. package/src/compat/export/client.ts +29 -31
  155. package/src/compat/export/{index.ts → emit.ts} +111 -110
  156. package/src/compat/export/standalone.ts +62 -54
  157. package/src/compat/image-optimizer/cache.ts +51 -49
  158. package/src/compat/image-optimizer/detect.ts +52 -52
  159. package/src/compat/image-optimizer/{index.ts → optimize.ts} +189 -194
  160. package/src/compat/image-optimizer/source.ts +77 -80
  161. package/src/compat/lifecycle/after-scope.ts +26 -26
  162. package/src/compat/lifecycle/after.ts +48 -45
  163. package/src/compat/lifecycle/error-funnel.ts +98 -102
  164. package/src/compat/lifecycle/error-serialize.ts +30 -26
  165. package/src/compat/lifecycle/error-ui.ts +67 -32
  166. package/src/compat/lifecycle/instrumentation-client.ts +36 -38
  167. package/src/compat/lifecycle/instrumentation.ts +85 -85
  168. package/src/compat/lifecycle/node-console.ts +11 -11
  169. package/src/compat/lifecycle/testmode.ts +160 -132
  170. package/src/compat/mdx/compile.ts +60 -57
  171. package/src/compat/mdx/plugin.ts +11 -11
  172. package/src/compat/mdx/{next-mdx-stub.ts → stub.ts} +5 -5
  173. package/src/compat/{metadata-route-artifacts.ts → metadata-artifacts.ts} +195 -191
  174. package/src/compat/metadata.ts +75 -81
  175. package/src/compat/next/cache.ts +68 -69
  176. package/src/compat/next/canonical-url.ts +9 -9
  177. package/src/compat/next/client-cache.ts +19 -19
  178. package/src/compat/next/client-navigation.ts +112 -116
  179. package/src/compat/next/client-only.ts +1 -1
  180. package/src/compat/next/client-script.tsx +99 -93
  181. package/src/compat/next/client-server.ts +10 -10
  182. package/src/compat/next/config-loader.ts +176 -173
  183. package/src/compat/next/config.ts +7 -7
  184. package/src/compat/next/constants.cjs +6 -6
  185. package/src/compat/next/constants.ts +6 -6
  186. package/src/compat/next/custom-server.ts +26 -24
  187. package/src/compat/next/dist/client/components/app-router-headers.ts +21 -21
  188. package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +3 -4
  189. package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -1
  190. package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -1
  191. package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -1
  192. package/src/compat/next/dynamic.tsx +21 -18
  193. package/src/compat/next/error.tsx +52 -52
  194. package/src/compat/next/font/cache.ts +74 -74
  195. package/src/compat/next/font/google.ts +2 -2
  196. package/src/compat/next/font/index.ts +1 -1
  197. package/src/compat/next/font/local.ts +3 -3
  198. package/src/compat/next/font/runtime-client.ts +17 -15
  199. package/src/compat/next/font/runtime.ts +443 -408
  200. package/src/compat/next/font/shared.ts +120 -108
  201. package/src/compat/next/form.tsx +63 -63
  202. package/src/compat/next/head.tsx +2 -2
  203. package/src/compat/next/headers.ts +103 -95
  204. package/src/compat/next/image/client.tsx +220 -0
  205. package/src/compat/next/image/config.ts +56 -58
  206. package/src/compat/next/image/optimizer.ts +40 -36
  207. package/src/compat/next/image/patterns.ts +37 -40
  208. package/src/compat/next/{image-props.ts → image/props.ts} +208 -202
  209. package/src/compat/next/image/shared.ts +65 -57
  210. package/src/compat/next/image/static-metadata.ts +98 -107
  211. package/src/compat/next/image/validate.ts +79 -88
  212. package/src/compat/next/image.tsx +19 -23
  213. package/src/compat/next/index.ts +1 -1
  214. package/src/compat/next/legacy-image.tsx +59 -60
  215. package/src/compat/next/{link-validation-transform.ts → link-transform.ts} +95 -96
  216. package/src/compat/next/link.tsx +158 -158
  217. package/src/compat/next/navigation.cjs +12 -3
  218. package/src/compat/next/navigation.ts +48 -50
  219. package/src/compat/next/offline.ts +27 -27
  220. package/src/compat/next/og.ts +121 -124
  221. package/src/compat/next/preferred-region.ts +13 -14
  222. package/src/compat/next/redirects.ts +58 -56
  223. package/src/compat/next/resource-hints.ts +73 -76
  224. package/src/compat/next/rewrites.ts +130 -133
  225. package/src/compat/next/root-params.ts +45 -45
  226. package/src/compat/next/{optimistic-route-state.ts → route-state.ts} +52 -52
  227. package/src/compat/next/router.cjs +4 -2
  228. package/src/compat/next/router.ts +58 -61
  229. package/src/compat/next/script.tsx +108 -108
  230. package/src/compat/next/server-only.ts +1 -1
  231. package/src/compat/next/server.ts +19 -19
  232. package/src/compat/next/svgr.ts +18 -17
  233. package/src/compat/next/telemetry.ts +24 -24
  234. package/src/compat/next/{image-usage.ts → usage.ts} +70 -39
  235. package/src/compat/next/user-agent.ts +53 -49
  236. package/src/compat/next/web-vitals.ts +22 -24
  237. package/src/compat/otel/api.ts +41 -41
  238. package/src/compat/otel/client-trace-metadata.ts +25 -27
  239. package/src/compat/otel/fetch-span.ts +29 -29
  240. package/src/compat/otel/tracer.ts +331 -331
  241. package/src/compat/pages/api.ts +456 -0
  242. package/src/compat/pages/client-plugin.ts +36 -36
  243. package/src/compat/pages/router-state.ts +34 -34
  244. package/src/compat/pages/{index.ts → router.ts} +130 -135
  245. package/src/compat/ppr/io.ts +12 -12
  246. package/src/compat/ppr/missing-root-params.ts +34 -38
  247. package/src/compat/ppr/root-params-scan.ts +66 -66
  248. package/src/compat/ppr/root-params-transform.ts +24 -26
  249. package/src/compat/ppr/root-params.ts +30 -30
  250. package/src/compat/ppr/segment-config-incompat.ts +6 -7
  251. package/src/compat/protocol.ts +71 -70
  252. package/src/compat/react/action-state.ts +47 -48
  253. package/src/compat/react/client-lite.ts +15 -15
  254. package/src/compat/react/client.ts +4 -4
  255. package/src/compat/react/compiler-runtime.ts +11 -11
  256. package/src/compat/react/dom-client.ts +44 -44
  257. package/src/compat/react/dom-react-server.ts +10 -16
  258. package/src/compat/react/dom-server.ts +10 -10
  259. package/src/compat/react/dom.ts +52 -52
  260. package/src/compat/react/hooks-extra.ts +34 -35
  261. package/src/compat/react/parity.ts +64 -61
  262. package/src/compat/react/preact.ts +81 -82
  263. package/src/compat/react/react-server.ts +28 -28
  264. package/src/compat/react/router-shim.ts +1 -1
  265. package/src/compat/react/server-component-use.ts +8 -8
  266. package/src/compat/react/server-inserted-html.ts +30 -31
  267. package/src/compat/react/server.ts +53 -55
  268. package/src/compat/react/use.ts +32 -32
  269. package/src/compat/react/view-transition.ts +20 -20
  270. package/src/compat/register/actions.ts +35 -824
  271. package/src/compat/register/boot.ts +41 -41
  272. package/src/compat/register/build-tier.ts +5 -5
  273. package/src/compat/register/build.ts +74 -70
  274. package/src/compat/register/bundler.ts +161 -156
  275. package/src/compat/register/cache.ts +20 -20
  276. package/src/compat/register/client-errors.ts +3 -3
  277. package/src/compat/register/config.ts +6 -6
  278. package/src/compat/register/css-extras.ts +30 -34
  279. package/src/compat/register/edge-runtime.ts +3 -3
  280. package/src/compat/register/errors.ts +10 -12
  281. package/src/compat/register/export.ts +16 -16
  282. package/src/compat/register/font.ts +11 -11
  283. package/src/compat/register/hooks.ts +2 -2
  284. package/src/compat/register/image.ts +40 -40
  285. package/src/compat/register/index.ts +59 -62
  286. package/src/compat/register/instrumentation-client.ts +10 -10
  287. package/src/compat/register/lifecycle.ts +25 -28
  288. package/src/compat/register/mdx.ts +10 -10
  289. package/src/compat/register/middleware.ts +226 -16
  290. package/src/compat/register/otel.ts +80 -88
  291. package/src/compat/register/pages-api.ts +10 -463
  292. package/src/compat/register/ppr.ts +16 -16
  293. package/src/compat/register/protocol.ts +17 -18
  294. package/src/compat/register/proxy.ts +49 -51
  295. package/src/compat/register/render.ts +79 -76
  296. package/src/compat/register/routing.ts +162 -159
  297. package/src/compat/register/segment.ts +24 -1887
  298. package/src/compat/register/static-image.ts +3 -3
  299. package/src/compat/register/{misc.ts → taint.ts} +9 -9
  300. package/src/compat/register/typed-routes.ts +14 -14
  301. package/src/compat/register/{usecache.ts → use-cache.ts} +39 -39
  302. package/src/compat/register/validation.ts +18 -18
  303. package/src/compat/segment/loading-boundary.ts +43 -45
  304. package/src/compat/segment/page-slot.ts +69 -69
  305. package/src/compat/segment/serve.ts +1884 -0
  306. package/src/compat/segment/tree.ts +113 -112
  307. package/src/compat/segment/vary-key.ts +38 -38
  308. package/src/compat/segment/vary-params.ts +138 -142
  309. package/src/compat/static-params.ts +14 -12
  310. package/src/compat/tsconfig-defaults.ts +87 -91
  311. package/src/compat/typecheck/{index.ts → check.ts} +234 -212
  312. package/src/compat/typecheck/worker.ts +15 -12
  313. package/src/compat/typed-routes/{index.ts → generate.ts} +36 -36
  314. package/src/compat/typed-routes/manifest.ts +174 -170
  315. package/src/compat/typed-routes/typegen.ts +127 -110
  316. package/src/compat/validation/errors.ts +16 -19
  317. package/src/compat/validation/prerender-diagnostics.ts +521 -504
  318. package/src/compat/validation/{index.ts → validate.ts} +647 -648
  319. package/src/compat-bootstrap.ts +16 -16
  320. package/src/config.ts +69 -69
  321. package/src/css/build.ts +230 -227
  322. package/src/css/postcss.ts +79 -80
  323. package/src/css/worker.ts +14 -15
  324. package/src/dev/client-actions.ts +10 -10
  325. package/src/dev/client-chunk-store.ts +27 -27
  326. package/src/dev/{client-key-cache.ts → restart/client-key.ts} +76 -76
  327. package/src/dev/{restart-cache.ts → restart/enabled.ts} +1 -1
  328. package/src/dev/{global-css-cache.ts → restart/global-css.ts} +91 -83
  329. package/src/dev/{node-module-bundle-cache.ts → restart/node-modules.ts} +24 -24
  330. package/src/dev/{route-bundle-key-cache.ts → restart/route-bundle-key.ts} +53 -53
  331. package/src/dev/{route-facts-cache.ts → restart/route-facts.ts} +82 -82
  332. package/src/dev/server.ts +804 -820
  333. package/src/env.ts +46 -43
  334. package/src/extensions.ts +491 -478
  335. package/src/index.ts +8 -8
  336. package/src/internal.ts +20 -23
  337. package/src/{islands → render}/boundary-error.ts +3 -3
  338. package/src/render/hooks.ts +71 -71
  339. package/src/render/island-context.ts +14 -14
  340. package/src/render/metadata.ts +310 -310
  341. package/src/{ppr-postpone.ts → render/postpone.ts} +5 -5
  342. package/src/{ppr.ts → render/ppr.ts} +244 -245
  343. package/src/render/renderer.ts +2076 -2082
  344. package/src/render/resource-hints.ts +16 -17
  345. package/src/render/slots.tsx +224 -235
  346. package/src/{islands → render}/static-children.ts +9 -12
  347. package/src/{islands → render}/static-slots.ts +37 -37
  348. package/src/{cache/context.ts → request/cache.ts} +20 -20
  349. package/src/request/context.ts +107 -107
  350. package/src/{dynamic/source.ts → resolve/dynamic.ts} +152 -143
  351. package/src/resolve/engine.ts +90 -77
  352. package/src/resolve/imports.ts +475 -463
  353. package/src/resolve/scan-facts.ts +442 -186
  354. package/src/resolve/source-text.ts +37 -37
  355. package/src/{dynamic → resolve}/tree-shake.ts +132 -128
  356. package/src/routing/forwarded.ts +19 -19
  357. package/src/routing/handler.ts +84 -91
  358. package/src/routing/href.ts +69 -70
  359. package/src/routing/{metadata.ts → metadata-files.ts} +403 -401
  360. package/src/{proxy.ts → routing/proxy.ts} +306 -312
  361. package/src/routing/{request-runtime.ts → request-environment.ts} +10 -10
  362. package/src/routing/routes.ts +833 -848
  363. package/src/routing/slots.ts +164 -160
  364. package/src/runtime/loader.ts +952 -0
  365. package/src/{dev → runtime}/module-cache.ts +309 -287
  366. package/src/{dev → runtime}/module-generations.ts +9 -9
  367. package/src/{dev → runtime}/module-transform.ts +81 -72
  368. package/src/{dev/imports.ts → runtime/modules.ts} +934 -847
  369. package/src/runtime/{server.ts → vendor-build.ts} +848 -1696
  370. package/src/runtime/vendor.ts +425 -404
  371. package/src/styles.d.ts +9 -0
  372. package/src/types.ts +320 -335
  373. package/src/utils/ansi.ts +5 -5
  374. package/src/utils/{source.ts → code.ts} +15 -12
  375. package/src/utils/content-type.ts +3 -3
  376. package/src/utils/decode.ts +2 -2
  377. package/src/utils/dev-profile.ts +13 -13
  378. package/src/utils/error-log.ts +6 -6
  379. package/src/utils/esbuild.ts +18 -18
  380. package/src/utils/fs-cache.ts +13 -13
  381. package/src/utils/fs.ts +57 -49
  382. package/src/utils/html.ts +20 -24
  383. package/src/utils/native-require.ts +8 -8
  384. package/src/utils/serialize.ts +139 -146
  385. package/src/utils/verbose.ts +18 -18
  386. package/src/cli/analyze-print.ts +0 -181
  387. package/src/compat/middleware/manifest.ts +0 -210
  388. package/src/compat/next/image-client.tsx +0 -215
  389. package/src/compat/next/link-usage.ts +0 -29
  390. package/src/css/index.ts +0 -2
  391. package/src/render/index.ts +0 -1
  392. package/src/style-modules.d.ts +0 -9
@@ -2,44 +2,54 @@
2
2
  // Ported near-verbatim from Next 16.3's router-utils/typegen.ts (non-strict
3
3
  // variants) so the generated output matches the exact substrings the
4
4
  // typed-routes / typed-routes-validator e2e suites assert on. Compat-only.
5
- import type { ManifestRouteInfo, RouteTypesManifest } from './manifest';
5
+ import type { ManifestRouteInfo, RouteTypesManifest } from './manifest'
6
6
 
7
7
  function isDynamicRoute(route: string): boolean {
8
- return /\[.+\]/.test(route);
8
+ return /\[.+\]/.test(route)
9
9
  }
10
10
 
11
11
  function generateRouteTypes(manifest: RouteTypesManifest): string {
12
- const appRoutes = Object.keys(manifest.appRoutes).sort();
13
- const pageRoutes = Object.keys(manifest.pageRoutes).sort();
14
- const layoutRoutes = Object.keys(manifest.layoutRoutes).sort();
15
- const redirectRoutes = Object.keys(manifest.redirectRoutes).sort();
16
- const rewriteRoutes = Object.keys(manifest.rewriteRoutes).sort();
17
- const appRouteHandlerRoutes = Object.keys(manifest.appRouteHandlerRoutes).sort();
18
- const hasAppRouteHandlers = appRouteHandlerRoutes.length > 0;
19
-
20
- const union = (list: string[]) => list.map(route => JSON.stringify(route)).join(' | ');
21
-
22
- let result = '';
23
- result += appRoutes.length > 0 ? `type AppRoutes = ${union(appRoutes)}\n` : 'type AppRoutes = never\n';
12
+ const appRoutes = Object.keys(manifest.appRoutes).sort()
13
+ const pageRoutes = Object.keys(manifest.pageRoutes).sort()
14
+ const layoutRoutes = Object.keys(manifest.layoutRoutes).sort()
15
+ const redirectRoutes = Object.keys(manifest.redirectRoutes).sort()
16
+ const rewriteRoutes = Object.keys(manifest.rewriteRoutes).sort()
17
+ const appRouteHandlerRoutes = Object.keys(manifest.appRouteHandlerRoutes).sort()
18
+ const hasAppRouteHandlers = appRouteHandlerRoutes.length > 0
19
+
20
+ const union = (list: string[]) => list.map(route => JSON.stringify(route)).join(' | ')
21
+
22
+ let result = ''
23
+ result +=
24
+ appRoutes.length > 0 ? `type AppRoutes = ${union(appRoutes)}\n` : 'type AppRoutes = never\n'
24
25
  if (hasAppRouteHandlers) {
25
- result += `type AppRouteHandlerRoutes = ${union(appRouteHandlerRoutes)}\n`;
26
+ result += `type AppRouteHandlerRoutes = ${union(appRouteHandlerRoutes)}\n`
26
27
  }
27
- result += pageRoutes.length > 0 ? `type PageRoutes = ${union(pageRoutes)}\n` : 'type PageRoutes = never\n';
28
28
  result +=
29
- layoutRoutes.length > 0 ? `type LayoutRoutes = ${union(layoutRoutes)}\n` : 'type LayoutRoutes = never\n';
29
+ pageRoutes.length > 0 ? `type PageRoutes = ${union(pageRoutes)}\n` : 'type PageRoutes = never\n'
30
+ result +=
31
+ layoutRoutes.length > 0
32
+ ? `type LayoutRoutes = ${union(layoutRoutes)}\n`
33
+ : 'type LayoutRoutes = never\n'
30
34
  result +=
31
35
  redirectRoutes.length > 0
32
36
  ? `type RedirectRoutes = ${union(redirectRoutes)}\n`
33
- : 'type RedirectRoutes = never\n';
37
+ : 'type RedirectRoutes = never\n'
34
38
  result +=
35
39
  rewriteRoutes.length > 0
36
40
  ? `type RewriteRoutes = ${union(rewriteRoutes)}\n`
37
- : 'type RewriteRoutes = never\n';
41
+ : 'type RewriteRoutes = never\n'
38
42
 
39
- const routeUnionParts = ['AppRoutes', 'PageRoutes', 'LayoutRoutes', 'RedirectRoutes', 'RewriteRoutes'];
40
- if (hasAppRouteHandlers) routeUnionParts.push('AppRouteHandlerRoutes');
41
- result += `type Routes = ${routeUnionParts.join(' | ')}\n`;
42
- return result;
43
+ const routeUnionParts = [
44
+ 'AppRoutes',
45
+ 'PageRoutes',
46
+ 'LayoutRoutes',
47
+ 'RedirectRoutes',
48
+ 'RewriteRoutes',
49
+ ]
50
+ if (hasAppRouteHandlers) routeUnionParts.push('AppRouteHandlerRoutes')
51
+ result += `type Routes = ${routeUnionParts.join(' | ')}\n`
52
+ return result
43
53
  }
44
54
 
45
55
  function generateParamTypes(manifest: RouteTypesManifest): string {
@@ -50,79 +60,79 @@ function generateParamTypes(manifest: RouteTypesManifest): string {
50
60
  ...manifest.layoutRoutes,
51
61
  ...manifest.redirectRoutes,
52
62
  ...manifest.rewriteRoutes,
53
- };
63
+ }
54
64
 
55
- let paramTypes = 'interface ParamMap {\n';
56
- const sortedRoutes = Object.entries(allRoutes).sort(([a], [b]) => a.localeCompare(b));
65
+ let paramTypes = 'interface ParamMap {\n'
66
+ const sortedRoutes = Object.entries(allRoutes).sort(([a], [b]) => a.localeCompare(b))
57
67
  for (const [route, routeInfo] of sortedRoutes) {
58
- const groups = routeInfo.groups;
68
+ const groups = routeInfo.groups
59
69
  if (!isDynamicRoute(route) || Object.keys(groups ?? {}).length === 0) {
60
- paramTypes += ` ${JSON.stringify(route)}: {}\n`;
61
- continue;
70
+ paramTypes += ` ${JSON.stringify(route)}: {}\n`
71
+ continue
62
72
  }
63
- let paramType = '{';
73
+ let paramType = '{'
64
74
  for (const [key, group] of Object.entries(groups)) {
65
- const escapedKey = JSON.stringify(key);
75
+ const escapedKey = JSON.stringify(key)
66
76
  if (group.repeat) {
67
- paramType += group.optional ? ` ${escapedKey}?: string[];` : ` ${escapedKey}: string[];`;
77
+ paramType += group.optional ? ` ${escapedKey}?: string[];` : ` ${escapedKey}: string[];`
68
78
  } else {
69
- paramType += group.optional ? ` ${escapedKey}?: string;` : ` ${escapedKey}: string;`;
79
+ paramType += group.optional ? ` ${escapedKey}?: string;` : ` ${escapedKey}: string;`
70
80
  }
71
81
  }
72
- paramType += ' }';
73
- paramTypes += ` ${JSON.stringify(route)}: ${paramType}\n`;
82
+ paramType += ' }'
83
+ paramTypes += ` ${JSON.stringify(route)}: ${paramType}\n`
74
84
  }
75
- paramTypes += '}\n';
76
- return paramTypes;
85
+ paramTypes += '}\n'
86
+ return paramTypes
77
87
  }
78
88
 
79
89
  function generateLayoutSlotMap(manifest: RouteTypesManifest): string {
80
- let slotMap = 'interface LayoutSlotMap {\n';
81
- const sorted = Object.entries(manifest.layoutRoutes).sort(([a], [b]) => a.localeCompare(b));
90
+ let slotMap = 'interface LayoutSlotMap {\n'
91
+ const sorted = Object.entries(manifest.layoutRoutes).sort(([a], [b]) => a.localeCompare(b))
82
92
  for (const [route, routeInfo] of sorted) {
83
- const slots = [...routeInfo.slots].sort();
93
+ const slots = [...routeInfo.slots].sort()
84
94
  slotMap +=
85
95
  slots.length > 0
86
96
  ? ` ${JSON.stringify(route)}: ${slots.map(slot => JSON.stringify(slot)).join(' | ')}\n`
87
- : ` ${JSON.stringify(route)}: never\n`;
97
+ : ` ${JSON.stringify(route)}: never\n`
88
98
  }
89
- slotMap += '}\n';
90
- return slotMap;
99
+ slotMap += '}\n'
100
+ return slotMap
91
101
  }
92
102
 
93
103
  function formatRouteToRouteType(route: string): { isDynamic: boolean; routeType: string } {
94
- const isDynamic = isDynamicRoute(route);
95
- let routeType = route;
104
+ const isDynamic = isDynamicRoute(route)
105
+ let routeType = route
96
106
  if (isDynamic) {
97
107
  routeType = route
98
108
  .split('/')
99
109
  .map(part => {
100
110
  if (part.startsWith('[') && part.endsWith(']')) {
101
- if (part.startsWith('[[...') && part.endsWith(']]')) return '${OptionalCatchAllSlug<T>}';
102
- if (part.startsWith('[...')) return '${CatchAllSlug<T>}';
103
- return '${SafeSlug<T>}';
111
+ if (part.startsWith('[[...') && part.endsWith(']]')) return '${OptionalCatchAllSlug<T>}'
112
+ if (part.startsWith('[...')) return '${CatchAllSlug<T>}'
113
+ return '${SafeSlug<T>}'
104
114
  }
105
- return part;
115
+ return part
106
116
  })
107
- .join('/');
117
+ .join('/')
108
118
  }
109
- return { isDynamic, routeType };
119
+ return { isDynamic, routeType }
110
120
  }
111
121
 
112
122
  function serializeRouteTypes(routeTypes: [routeType: string, cause: string][]): string {
113
- routeTypes.sort(([a], [b]) => a.localeCompare(b));
114
- let union = '';
123
+ routeTypes.sort(([a], [b]) => a.localeCompare(b))
124
+ let union = ''
115
125
  for (const [route, cause] of routeTypes) {
116
- union += `\n | \`${route}\` // ${cause}`;
126
+ union += `\n | \`${route}\` // ${cause}`
117
127
  }
118
- return union;
128
+ return union
119
129
  }
120
130
 
121
131
  export function generateRouteTypesFile(manifest: RouteTypesManifest): string {
122
- const routeTypes = generateRouteTypes(manifest);
123
- const paramTypes = generateParamTypes(manifest);
124
- const layoutSlotMap = generateLayoutSlotMap(manifest);
125
- const hasAppRouteHandlers = Object.keys(manifest.appRouteHandlerRoutes).length > 0;
132
+ const routeTypes = generateRouteTypes(manifest)
133
+ const paramTypes = generateParamTypes(manifest)
134
+ const layoutSlotMap = generateLayoutSlotMap(manifest)
135
+ const hasAppRouteHandlers = Object.keys(manifest.appRouteHandlerRoutes).length > 0
126
136
 
127
137
  const routeExports = [
128
138
  'AppRoutes',
@@ -131,9 +141,9 @@ export function generateRouteTypesFile(manifest: RouteTypesManifest): string {
131
141
  'RedirectRoutes',
132
142
  'RewriteRoutes',
133
143
  'ParamMap',
134
- ];
135
- if (hasAppRouteHandlers) routeExports.push('AppRouteHandlerRoutes');
136
- const exportStatement = `export type { ${routeExports.join(', ')} }`;
144
+ ]
145
+ if (hasAppRouteHandlers) routeExports.push('AppRouteHandlerRoutes')
146
+ const exportStatement = `export type { ${routeExports.join(', ')} }`
137
147
 
138
148
  const routeContextInterface = hasAppRouteHandlers
139
149
  ? `
@@ -151,7 +161,7 @@ export function generateRouteTypesFile(manifest: RouteTypesManifest): string {
151
161
  interface RouteContext<AppRouteHandlerRoute extends AppRouteHandlerRoutes> {
152
162
  params: Promise<ParamMap[AppRouteHandlerRoute]>
153
163
  }`
154
- : '';
164
+ : ''
155
165
 
156
166
  return `// This file is generated automatically by Next.js
157
167
  // Do not edit this file manually
@@ -199,13 +209,13 @@ declare global {
199
209
  [K in LayoutSlotMap[LayoutRoute]]: React.ReactNode
200
210
  }${routeContextInterface}
201
211
  }
202
- `;
212
+ `
203
213
  }
204
214
 
205
215
  export function generateLinkTypesFile(manifest: RouteTypesManifest): string {
206
- const visited = new Set<string>();
207
- const staticRouteTypes: [routeType: string, cause: string][] = [];
208
- const dynamicRouteTypes: [routeType: string, cause: string][] = [];
216
+ const visited = new Set<string>()
217
+ const staticRouteTypes: [routeType: string, cause: string][] = []
218
+ const dynamicRouteTypes: [routeType: string, cause: string][] = []
209
219
 
210
220
  for (const routeMap of [
211
221
  manifest.appRoutes,
@@ -215,25 +225,25 @@ export function generateLinkTypesFile(manifest: RouteTypesManifest): string {
215
225
  manifest.appRouteHandlerRoutes,
216
226
  ]) {
217
227
  for (const route in routeMap) {
218
- if (visited.has(route)) continue;
219
- visited.add(route);
220
- const { isDynamic, routeType } = formatRouteToRouteType(route);
221
- const cause = routeMap[route]!.path;
222
- (isDynamic ? dynamicRouteTypes : staticRouteTypes).push([routeType, cause]);
228
+ if (visited.has(route)) continue
229
+ visited.add(route)
230
+ const { isDynamic, routeType } = formatRouteToRouteType(route)
231
+ const cause = routeMap[route]!.path
232
+ ;(isDynamic ? dynamicRouteTypes : staticRouteTypes).push([routeType, cause])
223
233
  }
224
234
  }
225
235
 
226
236
  for (const filePath of manifest.pageApiRoutes) {
227
- if (visited.has(filePath)) continue;
228
- visited.add(filePath);
229
- const { isDynamic, routeType } = formatRouteToRouteType(filePath);
230
- (isDynamic ? dynamicRouteTypes : staticRouteTypes).push([routeType, filePath]);
237
+ if (visited.has(filePath)) continue
238
+ visited.add(filePath)
239
+ const { isDynamic, routeType } = formatRouteToRouteType(filePath)
240
+ ;(isDynamic ? dynamicRouteTypes : staticRouteTypes).push([routeType, filePath])
231
241
  }
232
242
 
233
- const serializedStaticRouteTypes = serializeRouteTypes(staticRouteTypes);
234
- const serializedDynamicRouteTypes = serializeRouteTypes(dynamicRouteTypes);
243
+ const serializedStaticRouteTypes = serializeRouteTypes(staticRouteTypes)
244
+ const serializedDynamicRouteTypes = serializeRouteTypes(dynamicRouteTypes)
235
245
  const routeTypesFallback =
236
- !serializedStaticRouteTypes && !serializedDynamicRouteTypes ? 'string & {}' : '';
246
+ !serializedStaticRouteTypes && !serializedDynamicRouteTypes ? 'string & {}' : ''
237
247
 
238
248
  return `// This file is generated automatically by Next.js
239
249
  // Do not edit this file manually
@@ -368,7 +378,7 @@ declare module 'next/form' {
368
378
 
369
379
  export default function Form<RouteType>(props: FormProps<RouteType>): JSX.Element
370
380
  }
371
- `;
381
+ `
372
382
  }
373
383
 
374
384
  /**
@@ -382,7 +392,12 @@ export function generateValidatorFile(
382
392
  ): string {
383
393
  const generateValidations = (
384
394
  paths: string[],
385
- type: 'AppPageConfig' | 'PagesPageConfig' | 'LayoutConfig' | 'RouteHandlerConfig' | 'ApiRouteConfig',
395
+ type:
396
+ | 'AppPageConfig'
397
+ | 'PagesPageConfig'
398
+ | 'LayoutConfig'
399
+ | 'RouteHandlerConfig'
400
+ | 'ApiRouteConfig',
386
401
  pathToRouteMap?: Map<string, string>,
387
402
  ) =>
388
403
  paths
@@ -393,13 +408,13 @@ export function generateValidatorFile(
393
408
  type !== 'AppPageConfig' || filePath.endsWith('page.ts') || filePath.endsWith('page.tsx'),
394
409
  )
395
410
  .map(filePath => {
396
- const importPath = toImportSpecifier(filePath);
397
- const route = pathToRouteMap?.get(filePath);
411
+ const importPath = toImportSpecifier(filePath)
412
+ const route = pathToRouteMap?.get(filePath)
398
413
  const typeWithRoute =
399
414
  route &&
400
415
  (type === 'AppPageConfig' || type === 'LayoutConfig' || type === 'RouteHandlerConfig')
401
416
  ? `${type}<${JSON.stringify(route)}>`
402
- : type;
417
+ : type
403
418
  return `// Validate ${filePath}
404
419
  {
405
420
  type __IsExpected<Specific extends ${typeWithRoute}> = Specific
@@ -407,37 +422,37 @@ export function generateValidatorFile(
407
422
  type __Check = __IsExpected<typeof handler>
408
423
  // @ts-ignore
409
424
  type __Unused = __Check
410
- }`;
425
+ }`
411
426
  })
412
- .join('\n\n');
427
+ .join('\n\n')
413
428
 
414
429
  const appPageValidations = generateValidations(
415
430
  [...manifest.appPagePaths].sort(),
416
431
  'AppPageConfig',
417
432
  manifest.filePathToRoute,
418
- );
433
+ )
419
434
  const appRouteHandlerValidations = generateValidations(
420
435
  [...manifest.appRouteHandlers].sort(),
421
436
  'RouteHandlerConfig',
422
437
  manifest.filePathToRoute,
423
- );
438
+ )
424
439
  const pagesRouterPageValidations = generateValidations(
425
440
  [...manifest.pagesRouterPagePaths].sort(),
426
441
  'PagesPageConfig',
427
- );
442
+ )
428
443
  const pagesApiRouteValidations = generateValidations(
429
444
  [...manifest.pageApiRoutes].sort(),
430
445
  'ApiRouteConfig',
431
- );
446
+ )
432
447
  const layoutValidations = generateValidations(
433
448
  [...manifest.layoutPaths].sort(),
434
449
  'LayoutConfig',
435
450
  manifest.filePathToRoute,
436
- );
451
+ )
437
452
 
438
- const hasAppRouteHandlers = Object.keys(manifest.appRouteHandlerRoutes).length > 0;
453
+ const hasAppRouteHandlers = Object.keys(manifest.appRouteHandlerRoutes).length > 0
439
454
 
440
- let typeDefinitions = '';
455
+ let typeDefinitions = ''
441
456
  if (appPageValidations) {
442
457
  typeDefinitions += `type AppPageConfig<Route extends AppRoutes = AppRoutes> = {
443
458
  default: React.JSXElementConstructor<PageProps<Route>> | ((props: { params: Promise<ParamMap[Route]>, searchParams: Promise<any> }) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)
@@ -454,7 +469,7 @@ export function generateValidatorFile(
454
469
  viewport?: any
455
470
  }
456
471
 
457
- `;
472
+ `
458
473
  }
459
474
 
460
475
  if (pagesRouterPageValidations) {
@@ -475,7 +490,7 @@ export function generateValidatorFile(
475
490
  }
476
491
  }
477
492
 
478
- `;
493
+ `
479
494
  }
480
495
 
481
496
  if (layoutValidations) {
@@ -494,7 +509,7 @@ export function generateValidatorFile(
494
509
  viewport?: any
495
510
  }
496
511
 
497
- `;
512
+ `
498
513
  }
499
514
 
500
515
  if (appRouteHandlerValidations) {
@@ -508,7 +523,7 @@ export function generateValidatorFile(
508
523
  OPTIONS?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
509
524
  }
510
525
 
511
- `;
526
+ `
512
527
  }
513
528
 
514
529
  if (pagesApiRouteValidations) {
@@ -525,26 +540,28 @@ export function generateValidatorFile(
525
540
  }
526
541
  }
527
542
 
528
- `;
543
+ `
529
544
  }
530
545
 
531
- const routeImports: string[] = [];
532
- if (appPageValidations) routeImports.push('AppRoutes');
533
- if (layoutValidations) routeImports.push('LayoutRoutes');
534
- if (appPageValidations || layoutValidations || appRouteHandlerValidations) routeImports.push('ParamMap');
535
- if (hasAppRouteHandlers) routeImports.push('AppRouteHandlerRoutes');
546
+ const routeImports: string[] = []
547
+ if (appPageValidations) routeImports.push('AppRoutes')
548
+ if (layoutValidations) routeImports.push('LayoutRoutes')
549
+ if (appPageValidations || layoutValidations || appRouteHandlerValidations)
550
+ routeImports.push('ParamMap')
551
+ if (hasAppRouteHandlers) routeImports.push('AppRouteHandlerRoutes')
536
552
  const routeImportStatement =
537
- routeImports.length > 0 ? `import type { ${routeImports.join(', ')} } from "./routes.js"` : '';
553
+ routeImports.length > 0 ? `import type { ${routeImports.join(', ')} } from "./routes.js"` : ''
538
554
 
539
555
  const nextRequestImport = hasAppRouteHandlers
540
556
  ? "import type { NextRequest } from 'next/server.js'\n"
541
- : '';
557
+ : ''
542
558
 
543
- const nextTypes: string[] = [];
544
- if (pagesApiRouteValidations) nextTypes.push('NextApiHandler');
545
- if (appPageValidations || layoutValidations) nextTypes.push('ResolvingMetadata', 'ResolvingViewport');
559
+ const nextTypes: string[] = []
560
+ if (pagesApiRouteValidations) nextTypes.push('NextApiHandler')
561
+ if (appPageValidations || layoutValidations)
562
+ nextTypes.push('ResolvingMetadata', 'ResolvingViewport')
546
563
  const nextTypesImport =
547
- nextTypes.length > 0 ? `import type { ${nextTypes.join(', ')} } from "next/types.js"\n` : '';
564
+ nextTypes.length > 0 ? `import type { ${nextTypes.join(', ')} } from "next/types.js"\n` : ''
548
565
 
549
566
  return `// This file is generated automatically by Next.js
550
567
  // Do not edit this file manually
@@ -562,5 +579,5 @@ ${pagesRouterPageValidations}
562
579
  ${pagesApiRouteValidations}
563
580
 
564
581
  ${layoutValidations}
565
- `;
582
+ `
566
583
  }
@@ -17,7 +17,7 @@
17
17
  * root `layout.*` providing `<html>`/`<body>`.
18
18
  */
19
19
  export function missingRootLayoutMessage(pageFile: string): string {
20
- return `${pageFile} doesn't have a root layout. To fix this error, make sure every page has a root layout.`;
20
+ return `${pageFile} doesn't have a root layout. To fix this error, make sure every page has a root layout.`
21
21
  }
22
22
 
23
23
  /**
@@ -25,12 +25,12 @@ export function missingRootLayoutMessage(pageFile: string): string {
25
25
  * (`conflicting-app-page-error`).
26
26
  */
27
27
  export function conflictingAppAndPageMessage(conflicts: { page: string; app: string }[]): string {
28
- const numConflicting = conflicts.length;
29
- const list = conflicts.map(item => ` "${item.page}" - "${item.app}"`).join('\n');
28
+ const numConflicting = conflicts.length
29
+ const list = conflicts.map(item => ` "${item.page}" - "${item.app}"`).join('\n')
30
30
  return (
31
31
  `Conflicting app and page file${numConflicting === 1 ? ' was' : 's were'} found, ` +
32
32
  `please remove the conflicting files to continue:\n${list}\n`
33
- );
33
+ )
34
34
  }
35
35
 
36
36
  /**
@@ -43,23 +43,20 @@ export function conflictingParallelPagesMessage(existingPath: string, appPath: s
43
43
  `Please check ${existingPath} and ${appPath}. ` +
44
44
  `Refer to the route group docs for more information: ` +
45
45
  `https://nextjs.org/docs/app/building-your-application/routing/route-groups`
46
- );
46
+ )
47
47
  }
48
48
 
49
49
  /**
50
50
  * A non-leaf parallel `@slot` segment missing its `default.js` fallback
51
51
  * (`parallel-routes-leaf-segments`) — Next's MissingDefaultParallelRouteError.
52
52
  */
53
- export function missingDefaultParallelRouteMessage(
54
- segmentPath: string,
55
- slotName: string,
56
- ): string {
53
+ export function missingDefaultParallelRouteMessage(segmentPath: string, slotName: string): string {
57
54
  return (
58
55
  `Missing required default.js file for parallel route at ${segmentPath}\n` +
59
56
  `The parallel route slot "${slotName}" is missing a default.js file. ` +
60
57
  `When using parallel routes, each slot must have a default.js file to serve as a fallback.\n\n` +
61
58
  `Create a default.js file at: ${segmentPath}/default.js`
62
- );
59
+ )
63
60
  }
64
61
 
65
62
  /**
@@ -76,7 +73,7 @@ export function missingSuspenseWithCsrBailoutMessage(page: string): string {
76
73
  // the page rather than the source file. Reproduce that frame so the error
77
74
  // still says which page's render bailed.
78
75
  ` at Page (.next/server/app${page === '/' ? '' : page}/page.js)`
79
- );
76
+ )
80
77
  }
81
78
 
82
79
  /**
@@ -87,7 +84,7 @@ export function missingSuspenseWithCsrBailoutMessage(page: string): string {
87
84
  * the caller emits the file path on its own line ahead of this message.
88
85
  */
89
86
  export function incompatibleCacheComponentsSegmentConfigMessage(key: string): string {
90
- return `Route segment config "${key}" is not compatible with \`nextConfig.cacheComponents\`. Please remove it.`;
87
+ return `Route segment config "${key}" is not compatible with \`nextConfig.cacheComponents\`. Please remove it.`
91
88
  }
92
89
 
93
90
  /**
@@ -96,7 +93,7 @@ export function incompatibleCacheComponentsSegmentConfigMessage(key: string): st
96
93
  */
97
94
  export function undefinedDefaultExportMessage(componentPath: string): string {
98
95
  return `Error occurred prerendering page "${componentPath.replace(/\/(?:page|layout|not-found)$/, '') || '/'}". Read more: https://nextjs.org/docs/messages/prerender-error
99
- Error: The default export is not a React Component in "${componentPath}"`;
96
+ Error: The default export is not a React Component in "${componentPath}"`
100
97
  }
101
98
 
102
99
  /**
@@ -104,7 +101,7 @@ Error: The default export is not a React Component in "${componentPath}"`;
104
101
  * (`app-dir-export`).
105
102
  */
106
103
  export function missingGenerateStaticParamsForExportMessage(page: string): string {
107
- return `Page "${page}" is missing "generateStaticParams()" so it cannot be used with "output: export" config.`;
104
+ return `Page "${page}" is missing "generateStaticParams()" so it cannot be used with "output: export" config.`
108
105
  }
109
106
 
110
107
  /**
@@ -115,7 +112,7 @@ export function dynamicForceDynamicWithExportMessage(page: string): string {
115
112
  return (
116
113
  `export const dynamic = "force-dynamic" on page "${page}" cannot be used with "output: export". ` +
117
114
  `See more info here: https://nextjs.org/docs/advanced-features/static-html-export`
118
- );
115
+ )
119
116
  }
120
117
 
121
118
  /**
@@ -129,14 +126,14 @@ export function forceDynamicPageWithExportMessage(): string {
129
126
  `\`output: "export"\` requires all pages be renderable statically ` +
130
127
  `because there is no runtime server to dynamically render routes in this output format. ` +
131
128
  `Learn more: https://nextjs.org/docs/app/building-your-application/deploying/static-exports`
132
- );
129
+ )
133
130
  }
134
131
 
135
132
  export function routeHandlerNotStaticWithExportMessage(route: string): string {
136
133
  return (
137
134
  `export const dynamic = "force-static"/export const revalidate not configured on route "${route}" ` +
138
135
  `with "output: export".`
139
- );
136
+ )
140
137
  }
141
138
 
142
139
  /**
@@ -147,7 +144,7 @@ export function exportPathMapWithAppDirMessage(): string {
147
144
  `The "exportPathMap" configuration cannot be used with the "app" directory. ` +
148
145
  `Please use generateStaticParams() instead. ` +
149
146
  `See more info here: https://nextjs.org/docs/app/building-your-application/deploying/static-exports`
150
- );
147
+ )
151
148
  }
152
149
 
153
150
  export function unresolvedCodemodCommentMessage(note: string): string {
@@ -155,5 +152,5 @@ export function unresolvedCodemodCommentMessage(note: string): string {
155
152
  `You have an unresolved @next/codemod comment "${note}" that needs review.\n` +
156
153
  `After review, either remove the comment if you made the necessary changes or replace ` +
157
154
  `"@next-codemod-error" with "@next-codemod-ignore" to bypass the build error if no action at this line can be taken.`
158
- );
155
+ )
159
156
  }