@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
@@ -9,11 +9,11 @@
9
9
  // `.message`, and the Next e2e suite substring-matches it verbatim off cliOutput. Runs as a build step
10
10
  // gated on cacheComponents, ordered before the prerender pass so the build aborts before any shell work.
11
11
 
12
- import type { ResolvedConfig } from '../../config';
13
- import type { RouteManifestEntry } from '../../types';
14
- import { staticParamsFor } from '../../render';
15
- import { PnextBuildValidationError } from '../validation';
16
- import { scanRootParams } from './root-params-scan';
12
+ import type { ResolvedConfig } from '../../config'
13
+ import type { RouteManifestEntry } from '../../types'
14
+ import { staticParamsFor } from '../../render/renderer'
15
+ import { PnextBuildValidationError } from '../validation/validate'
16
+ import { scanRootParams } from './root-params-scan'
17
17
 
18
18
  /**
19
19
  * Convert a colon route pattern (`/:lang/blog/:slug`) to the bracket form Next
@@ -25,35 +25,33 @@ function toBracketPattern(pattern: string): string {
25
25
  return pattern
26
26
  .split('/')
27
27
  .map(segment => {
28
- if (!segment.startsWith(':')) return segment;
29
- let name = segment.slice(1);
30
- let optional = false;
31
- let catchAll = false;
28
+ if (!segment.startsWith(':')) return segment
29
+ let name = segment.slice(1)
30
+ let optional = false
31
+ let catchAll = false
32
32
  if (name.endsWith('?')) {
33
- optional = true;
34
- name = name.slice(0, -1);
33
+ optional = true
34
+ name = name.slice(0, -1)
35
35
  }
36
36
  if (name.endsWith('*') || name.endsWith('+')) {
37
- catchAll = true;
38
- name = name.slice(0, -1);
37
+ catchAll = true
38
+ name = name.slice(0, -1)
39
39
  }
40
- if (catchAll) return optional ? `[[...${name}]]` : `[...${name}]`;
41
- return `[${name}]`;
40
+ if (catchAll) return optional ? `[[...${name}]]` : `[...${name}]`
41
+ return `[${name}]`
42
42
  })
43
- .join('/');
43
+ .join('/')
44
44
  }
45
45
 
46
46
  /** The keys generateStaticParams actually enumerated for this route. */
47
- function providedParamKeys(
48
- allSets: Record<string, unknown>[],
49
- ): Set<string> {
50
- const provided = new Set<string>();
47
+ function providedParamKeys(allSets: Record<string, unknown>[]): Set<string> {
48
+ const provided = new Set<string>()
51
49
  for (const set of allSets) {
52
50
  for (const [key, value] of Object.entries(set)) {
53
- if (value !== undefined) provided.add(key);
51
+ if (value !== undefined) provided.add(key)
54
52
  }
55
53
  }
56
- return provided;
54
+ return provided
57
55
  }
58
56
 
59
57
  /**
@@ -66,40 +64,38 @@ export async function validateRootParamsProvided(
66
64
  config: ResolvedConfig,
67
65
  routes: RouteManifestEntry[],
68
66
  ): Promise<void> {
69
- const rootParams = scanRootParams(config.appPath);
70
- if (rootParams.size === 0) return;
67
+ const rootParams = scanRootParams(config.appPath)
68
+ if (rootParams.size === 0) return
71
69
 
72
- const pageRoutes = routes.filter(
73
- route => route.kind === 'page' && !route.interception,
74
- );
70
+ const pageRoutes = routes.filter(route => route.kind === 'page' && !route.interception)
75
71
 
76
72
  for (const route of pageRoutes) {
77
- const routeRootParams = route.params.filter(name => rootParams.has(name));
78
- if (routeRootParams.length === 0) continue;
73
+ const routeRootParams = route.params.filter(name => rootParams.has(name))
74
+ if (routeRootParams.length === 0) continue
79
75
 
80
- let provided: Set<string>;
76
+ let provided: Set<string>
81
77
  try {
82
- const staticParams = await staticParamsFor(config, route);
83
- provided = providedParamKeys(staticParams.allSets);
78
+ const staticParams = await staticParamsFor(config, route)
79
+ provided = providedParamKeys(staticParams.allSets)
84
80
  } catch {
85
81
  // A generateStaticParams that throws provides nothing — treat every root
86
82
  // param as missing rather than masking the (more relevant) config error.
87
- provided = new Set<string>();
83
+ provided = new Set<string>()
88
84
  }
89
85
 
90
- const missing = routeRootParams.filter(name => !provided.has(name));
91
- if (missing.length === 0) continue;
86
+ const missing = routeRootParams.filter(name => !provided.has(name))
87
+ if (missing.length === 0) continue
92
88
 
93
- const routePattern = toBracketPattern(route.route || '/');
89
+ const routePattern = toBracketPattern(route.route || '/')
94
90
  if (missing.length === 1) {
95
91
  throw new PnextBuildValidationError(
96
92
  `Error: A required root parameter (${missing[0]}) was not provided in ` +
97
93
  `generateStaticParams for ${routePattern}, please provide at least one value.`,
98
- );
94
+ )
99
95
  }
100
96
  throw new PnextBuildValidationError(
101
97
  `Error: Required root params (${missing.join(', ')}) were not provided in ` +
102
98
  `generateStaticParams for ${routePattern}, please provide at least one value for each.`,
103
- );
99
+ )
104
100
  }
105
101
  }
@@ -8,34 +8,34 @@
8
8
  // The scan drives which names `next/root-params` legitimately exports (import validation) and typegen.
9
9
  // Route-group and slot dirs never contribute params; catch-all segments contribute their param name.
10
10
 
11
- import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
12
- import path from 'node:path';
11
+ import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs'
12
+ import path from 'node:path'
13
13
 
14
- const LAYOUT_BASENAMES = ['layout.tsx', 'layout.ts', 'layout.jsx', 'layout.js'];
14
+ const LAYOUT_BASENAMES = ['layout.tsx', 'layout.ts', 'layout.jsx', 'layout.js']
15
15
 
16
16
  /** True when a layout source renders `<html>` (i.e. it is a root/document layout). */
17
17
  function isRootLayoutSource(source: string): boolean {
18
- return /<html[\s>]/.test(source);
18
+ return /<html[\s>]/.test(source)
19
19
  }
20
20
 
21
21
  /** Extract the param name from a segment dir name, or undefined for a static one. */
22
22
  function paramNameOfSegment(segment: string): string | undefined {
23
23
  // [[...slug]] optional catch-all, [...slug] catch-all, [slug] dynamic.
24
- const optional = /^\[\[\.\.\.(.+)\]\]$/.exec(segment);
25
- if (optional) return optional[1];
26
- const catchAll = /^\[\.\.\.(.+)\]$/.exec(segment);
27
- if (catchAll) return catchAll[1];
28
- const dynamic = /^\[(.+)\]$/.exec(segment);
29
- if (dynamic) return dynamic[1];
30
- return undefined;
24
+ const optional = /^\[\[\.\.\.(.+)\]\]$/.exec(segment)
25
+ if (optional) return optional[1]
26
+ const catchAll = /^\[\.\.\.(.+)\]$/.exec(segment)
27
+ if (catchAll) return catchAll[1]
28
+ const dynamic = /^\[(.+)\]$/.exec(segment)
29
+ if (dynamic) return dynamic[1]
30
+ return undefined
31
31
  }
32
32
 
33
33
  function findLayoutFile(dir: string): string | undefined {
34
34
  for (const base of LAYOUT_BASENAMES) {
35
- const candidate = path.join(dir, base);
36
- if (existsSync(candidate)) return candidate;
35
+ const candidate = path.join(dir, base)
36
+ if (existsSync(candidate)) return candidate
37
37
  }
38
- return undefined;
38
+ return undefined
39
39
  }
40
40
 
41
41
  /**
@@ -44,52 +44,52 @@ function findLayoutFile(dir: string): string | undefined {
44
44
  * the app's root-param set.
45
45
  */
46
46
  export function scanRootParams(appPath: string): Set<string> {
47
- const rootParams = new Set<string>();
48
- if (!existsSync(appPath)) return rootParams;
47
+ const rootParams = new Set<string>()
48
+ if (!existsSync(appPath)) return rootParams
49
49
 
50
50
  const walk = (dir: string, paramsAbove: string[]): void => {
51
- const layoutFile = findLayoutFile(dir);
51
+ const layoutFile = findLayoutFile(dir)
52
52
  if (layoutFile) {
53
- let source = '';
53
+ let source = ''
54
54
  try {
55
- source = readFileSync(layoutFile, 'utf8');
55
+ source = readFileSync(layoutFile, 'utf8')
56
56
  } catch {
57
- source = '';
57
+ source = ''
58
58
  }
59
59
  if (isRootLayoutSource(source)) {
60
- for (const name of paramsAbove) rootParams.add(name);
60
+ for (const name of paramsAbove) rootParams.add(name)
61
61
  }
62
62
  }
63
- let children: string[] = [];
63
+ let children: string[] = []
64
64
  try {
65
- children = readdirSync(dir);
65
+ children = readdirSync(dir)
66
66
  } catch {
67
- return;
67
+ return
68
68
  }
69
69
  for (const child of children) {
70
- const childPath = path.join(dir, child);
71
- let isDir = false;
70
+ const childPath = path.join(dir, child)
71
+ let isDir = false
72
72
  try {
73
- isDir = statSync(childPath).isDirectory();
73
+ isDir = statSync(childPath).isDirectory()
74
74
  } catch {
75
- isDir = false;
75
+ isDir = false
76
76
  }
77
- if (!isDir) continue;
78
- if (child.startsWith('@')) continue; // parallel-route slot dir
79
- const param = paramNameOfSegment(child);
80
- walk(childPath, param ? [...paramsAbove, param] : paramsAbove);
77
+ if (!isDir) continue
78
+ if (child.startsWith('@')) continue // parallel-route slot dir
79
+ const param = paramNameOfSegment(child)
80
+ walk(childPath, param ? [...paramsAbove, param] : paramsAbove)
81
81
  }
82
- };
82
+ }
83
83
 
84
- walk(appPath, []);
85
- return rootParams;
84
+ walk(appPath, [])
85
+ return rootParams
86
86
  }
87
87
 
88
- export type RootParamValueType = 'string' | 'string[]' | 'undefined';
88
+ export type RootParamValueType = 'string' | 'string[]' | 'undefined'
89
89
 
90
90
  interface ScannedParam {
91
- name: string;
92
- segment: string;
91
+ name: string
92
+ segment: string
93
93
  }
94
94
 
95
95
  /**
@@ -99,20 +99,20 @@ interface ScannedParam {
99
99
  * layouts, a param absent from some root also gains `undefined`.
100
100
  */
101
101
  export function scanRootParamTypes(appPath: string): Map<string, Set<RootParamValueType>> {
102
- const roots: Map<string, RootParamValueType[]>[] = [];
103
- if (!existsSync(appPath)) return new Map();
102
+ const roots: Map<string, RootParamValueType[]>[] = []
103
+ if (!existsSync(appPath)) return new Map()
104
104
 
105
105
  const walk = (dir: string, paramsAbove: ScannedParam[]): void => {
106
- const layoutFile = findLayoutFile(dir);
106
+ const layoutFile = findLayoutFile(dir)
107
107
  if (layoutFile) {
108
- let source = '';
108
+ let source = ''
109
109
  try {
110
- source = readFileSync(layoutFile, 'utf8');
110
+ source = readFileSync(layoutFile, 'utf8')
111
111
  } catch {
112
- source = '';
112
+ source = ''
113
113
  }
114
114
  if (isRootLayoutSource(source)) {
115
- const params = new Map<string, RootParamValueType[]>();
115
+ const params = new Map<string, RootParamValueType[]>()
116
116
  for (const { name, segment } of paramsAbove) {
117
117
  params.set(
118
118
  name,
@@ -121,44 +121,44 @@ export function scanRootParamTypes(appPath: string): Map<string, Set<RootParamVa
121
121
  : segment.startsWith('[...')
122
122
  ? ['string[]']
123
123
  : ['string'],
124
- );
124
+ )
125
125
  }
126
- roots.push(params);
126
+ roots.push(params)
127
127
  }
128
128
  }
129
- let children: string[] = [];
129
+ let children: string[] = []
130
130
  try {
131
- children = readdirSync(dir);
131
+ children = readdirSync(dir)
132
132
  } catch {
133
- return;
133
+ return
134
134
  }
135
135
  for (const child of children) {
136
- const childPath = path.join(dir, child);
137
- let isDir = false;
136
+ const childPath = path.join(dir, child)
137
+ let isDir = false
138
138
  try {
139
- isDir = statSync(childPath).isDirectory();
139
+ isDir = statSync(childPath).isDirectory()
140
140
  } catch {
141
- isDir = false;
141
+ isDir = false
142
142
  }
143
- if (!isDir) continue;
144
- if (child.startsWith('@')) continue; // parallel-route slot dir
145
- const param = paramNameOfSegment(child);
146
- walk(childPath, param ? [...paramsAbove, { name: param, segment: child }] : paramsAbove);
143
+ if (!isDir) continue
144
+ if (child.startsWith('@')) continue // parallel-route slot dir
145
+ const param = paramNameOfSegment(child)
146
+ walk(childPath, param ? [...paramsAbove, { name: param, segment: child }] : paramsAbove)
147
147
  }
148
- };
148
+ }
149
149
 
150
- walk(appPath, []);
150
+ walk(appPath, [])
151
151
 
152
- const combined = new Map<string, Set<RootParamValueType>>();
152
+ const combined = new Map<string, Set<RootParamValueType>>()
153
153
  for (const params of roots) {
154
154
  for (const [name, types] of params) {
155
- const set = combined.get(name) ?? new Set<RootParamValueType>();
156
- for (const type of types) set.add(type);
157
- combined.set(name, set);
155
+ const set = combined.get(name) ?? new Set<RootParamValueType>()
156
+ for (const type of types) set.add(type)
157
+ combined.set(name, set)
158
158
  }
159
159
  }
160
160
  for (const [name, set] of combined) {
161
- if (roots.some(params => !params.has(name))) set.add('undefined');
161
+ if (roots.some(params => !params.has(name))) set.add('undefined')
162
162
  }
163
- return combined;
163
+ return combined
164
164
  }
@@ -14,18 +14,18 @@
14
14
  // the Proxy. Build-time validation that a name is actually a root param lives in root-params-scan.ts;
15
15
  // this transform stays permissive.
16
16
 
17
- import { isIdentifier, uniqueIdentifier } from '../../utils/source';
17
+ import { isIdentifier, uniqueIdentifier } from '../../utils/code'
18
18
 
19
- const ROOT_PARAMS_SPECIFIER = /['"]next\/root-params['"]/;
19
+ const ROOT_PARAMS_SPECIFIER = /['"]next\/root-params['"]/
20
20
 
21
21
  // `[^}]` for the clause, never a lazy `[\s\S]*?`: the latter backtracks across
22
22
  // an earlier `import { X } from 'react'` and swallows that line too.
23
23
  const IMPORT_RE =
24
- /^[ \t]*import\s+\{([^}]*)\}\s+from\s+['"]next\/root-params['"]\s*;?[ \t]*(?:\r?\n)?/gm;
24
+ /^[ \t]*import\s+\{([^}]*)\}\s+from\s+['"]next\/root-params['"]\s*;?[ \t]*(?:\r?\n)?/gm
25
25
 
26
26
  interface Binding {
27
- imported: string;
28
- local: string;
27
+ imported: string
28
+ local: string
29
29
  }
30
30
 
31
31
  function parseBindings(clause: string): Binding[] {
@@ -34,13 +34,13 @@ function parseBindings(clause: string): Binding[] {
34
34
  .map(part => part.trim())
35
35
  .filter(Boolean)
36
36
  .flatMap(part => {
37
- if (part.startsWith('type ')) return [];
38
- const [importedRaw, localRaw] = part.split(/\s+as\s+/);
39
- const imported = importedRaw?.trim();
40
- const local = (localRaw ?? importedRaw)?.trim();
41
- if (!imported || !local || !isIdentifier(imported) || !isIdentifier(local)) return [];
42
- return [{ imported, local }];
43
- });
37
+ if (part.startsWith('type ')) return []
38
+ const [importedRaw, localRaw] = part.split(/\s+as\s+/)
39
+ const imported = importedRaw?.trim()
40
+ const local = (localRaw ?? importedRaw)?.trim()
41
+ if (!imported || !local || !isIdentifier(imported) || !isIdentifier(local)) return []
42
+ return [{ imported, local }]
43
+ })
44
44
  }
45
45
 
46
46
  /**
@@ -49,27 +49,25 @@ function parseBindings(clause: string): Binding[] {
49
49
  * source transform and applied in the client bundler plugin.
50
50
  */
51
51
  export function rewriteRootParamsSource(source: string): string {
52
- if (!ROOT_PARAMS_SPECIFIER.test(source)) return source;
53
- const proxyName = uniqueIdentifier(source, '__pnextRootParams');
54
- const declarations: string[] = [];
55
- let importedProxy = false;
52
+ if (!ROOT_PARAMS_SPECIFIER.test(source)) return source
53
+ const proxyName = uniqueIdentifier(source, '__pnextRootParams')
54
+ const declarations: string[] = []
55
+ let importedProxy = false
56
56
 
57
57
  const rewritten = source.replace(IMPORT_RE, (_statement, clause: string) => {
58
- const bindings = parseBindings(clause);
59
- if (bindings.length === 0) return '';
60
- importedProxy = true;
58
+ const bindings = parseBindings(clause)
59
+ if (bindings.length === 0) return ''
60
+ importedProxy = true
61
61
  for (const { imported, local } of bindings) {
62
- declarations.push(
63
- `const ${local} = ${proxyName}[${JSON.stringify(imported)}];`,
64
- );
62
+ declarations.push(`const ${local} = ${proxyName}[${JSON.stringify(imported)}];`)
65
63
  }
66
- return '';
67
- });
64
+ return ''
65
+ })
68
66
 
69
- if (!importedProxy) return source;
67
+ if (!importedProxy) return source
70
68
  return [
71
69
  `import ${proxyName} from ${JSON.stringify('next/root-params')};`,
72
70
  ...declarations,
73
71
  rewritten,
74
- ].join('\n');
72
+ ].join('\n')
75
73
  }
@@ -8,23 +8,23 @@
8
8
  // a build/dev error there - so this runtime is intentionally permissive and a valid getter always works.
9
9
  // Context errors (server action / route handler / unstable_cache) match Next's messages exactly.
10
10
 
11
- import { currentParams, currentRequest, getWorkUnit } from '../../request/context';
11
+ import { currentParams, currentRequest, getWorkUnit } from '../../request/context'
12
12
  import {
13
13
  cacheComponents,
14
14
  hangingPromise,
15
15
  isPrerendering,
16
16
  isRuntimePrefetchPrerender,
17
- } from '../../ppr';
18
- import { insideUnstableCacheProducer } from '../cache/revalidate';
19
- import { insideUseCacheProducer, recordUseCacheRootParamRead } from '../cache/use-cache';
17
+ } from '../../render/ppr'
18
+ import { insideUnstableCacheProducer } from '../cache/revalidate'
19
+ import { insideUseCacheProducer, recordUseCacheRootParamRead } from '../cache/use-cache'
20
20
 
21
21
  /** E-code errors Next throws for root-params used in an unsupported context. */
22
22
  function rootParamContextError(name: string): Error | undefined {
23
- const unit = getWorkUnit();
24
- const call = `\`import('next/root-params').${name}()\``;
23
+ const unit = getWorkUnit()
24
+ const call = `\`import('next/root-params').${name}()\``
25
25
 
26
- const inUseCache = insideUseCacheProducer();
27
- const inUnstableCache = insideUnstableCacheProducer();
26
+ const inUseCache = insideUseCacheProducer()
27
+ const inUnstableCache = insideUnstableCacheProducer()
28
28
 
29
29
  // Root params inside a `use cache` NESTED within `unstable_cache`: E1140.
30
30
  // (The `use cache` scope sits inside the unstable_cache producer, so both
@@ -35,15 +35,15 @@ function rootParamContextError(name: string): Error | undefined {
35
35
  `Root params (${call}) were used inside a cache scope nested within \`unstable_cache\`. Root params are not available in this context.`,
36
36
  ),
37
37
  { digest: 'E1140' },
38
- );
38
+ )
39
39
  }
40
40
 
41
41
  // Inside a plain `use cache` (not under unstable_cache): legal. Record the
42
42
  // read so the entry's cache key participates in this root param (Stage B-3),
43
43
  // then let the getter resolve the value below (no error).
44
44
  if (inUseCache) {
45
- recordUseCacheRootParamRead(name);
46
- return undefined;
45
+ recordUseCacheRootParamRead(name)
46
+ return undefined
47
47
  }
48
48
 
49
49
  // Inside `unstable_cache` (a data-cache producer that is NOT a `use cache`
@@ -54,34 +54,34 @@ function rootParamContextError(name: string): Error | undefined {
54
54
  `Root params (${call}) were used inside \`unstable_cache\`. This is not supported. Use \`"use cache"\` instead.`,
55
55
  ),
56
56
  { digest: 'E1141' },
57
- );
57
+ )
58
58
  }
59
59
 
60
- if (!unit) return undefined;
60
+ if (!unit) return undefined
61
61
 
62
62
  if (unit.phase === 'action') {
63
63
  return new Error(
64
64
  `${call} was used inside a Server Action. This is not supported. ` +
65
65
  `Functions from 'next/root-params' can only be called in the context of a route.`,
66
- );
66
+ )
67
67
  }
68
68
 
69
69
  // Route handlers are detected via routeKind (core sets no 'handler' phase).
70
70
  if (unit.phase !== 'after' && unit.routeKind === 'route-handler') {
71
71
  const route = (() => {
72
72
  try {
73
- return new URL(currentRequest()?.url ?? '').pathname;
73
+ return new URL(currentRequest()?.url ?? '').pathname
74
74
  } catch {
75
- return '';
75
+ return ''
76
76
  }
77
- })();
77
+ })()
78
78
  return new Error(
79
79
  `Route ${route} used ${call} inside a Route Handler. ` +
80
80
  `Support for this API in Route Handlers is planned for a future version of Next.js.`,
81
- );
81
+ )
82
82
  }
83
83
 
84
- return undefined;
84
+ return undefined
85
85
  }
86
86
 
87
87
  /**
@@ -90,8 +90,8 @@ function rootParamContextError(name: string): Error | undefined {
90
90
  * resolves to undefined.
91
91
  */
92
92
  export function rootParam<T = string | string[] | undefined>(name: string): Promise<T> {
93
- const error = rootParamContextError(name);
94
- if (error) return Promise.reject(error);
93
+ const error = rootParamContextError(name)
94
+ if (error) return Promise.reject(error)
95
95
  // A runtime-prefetch prerender renders against the REAL sampled request, so root params are concrete
96
96
  // there (root params are always available in static prerenders, so a runtime prefetch has them too).
97
97
  // Hanging them would postpone the root layout itself - the whole document, not a boundary - and the
@@ -102,10 +102,10 @@ export function rootParam<T = string | string[] | undefined>(name: string): Prom
102
102
  isPrerendering() &&
103
103
  !isRuntimePrefetchPrerender()
104
104
  ) {
105
- return hangingPromise<T>(`rootParam(${name})`);
105
+ return hangingPromise<T>(`rootParam(${name})`)
106
106
  }
107
- const params = currentParams();
108
- return Promise.resolve(params[name] as T);
107
+ const params = currentParams()
108
+ return Promise.resolve(params[name] as T)
109
109
  }
110
110
 
111
111
  /**
@@ -118,12 +118,12 @@ const rootParamsModule = new Proxy(
118
118
  {},
119
119
  {
120
120
  get(_target, prop: string | symbol): unknown {
121
- if (typeof prop !== 'string') return undefined;
122
- if (prop === '__esModule') return true;
123
- if (prop === 'default') return undefined;
124
- return () => rootParam(prop);
121
+ if (typeof prop !== 'string') return undefined
122
+ if (prop === '__esModule') return true
123
+ if (prop === 'default') return undefined
124
+ return () => rootParam(prop)
125
125
  },
126
126
  },
127
- ) as Record<string, () => Promise<unknown>>;
127
+ ) as Record<string, () => Promise<unknown>>
128
128
 
129
- export default rootParamsModule;
129
+ export default rootParamsModule
@@ -9,17 +9,16 @@ export const INCOMPATIBLE_SEGMENT_KEYS = [
9
9
  'dynamicParams',
10
10
  'dynamic',
11
11
  'fetchCache',
12
- ] as const;
12
+ ] as const
13
13
 
14
- export type IncompatibleSegmentKey = (typeof INCOMPATIBLE_SEGMENT_KEYS)[number];
14
+ export type IncompatibleSegmentKey = (typeof INCOMPATIBLE_SEGMENT_KEYS)[number]
15
15
 
16
16
  /** Next's exact incompat message for an offending segment-config export. */
17
17
  export function segmentConfigIncompatMessage(key: IncompatibleSegmentKey, file: string): string {
18
- return `"${key}" is not compatible with \`nextConfig.cacheComponents\`. Please remove it. Used in ${file}`;
18
+ return `"${key}" is not compatible with \`nextConfig.cacheComponents\`. Please remove it. Used in ${file}`
19
19
  }
20
20
 
21
- const EXPORT_RE = (key: string) =>
22
- new RegExp(`\\bexport\\s+const\\s+${key}\\b`);
21
+ const EXPORT_RE = (key: string) => new RegExp(`\\bexport\\s+const\\s+${key}\\b`)
23
22
 
24
23
  /**
25
24
  * Scan a page/layout source for an incompatible segment-config export, returning
@@ -28,7 +27,7 @@ const EXPORT_RE = (key: string) =>
28
27
  */
29
28
  export function findIncompatibleSegmentKey(source: string): IncompatibleSegmentKey | undefined {
30
29
  for (const key of INCOMPATIBLE_SEGMENT_KEYS) {
31
- if (EXPORT_RE(key).test(source)) return key;
30
+ if (EXPORT_RE(key).test(source)) return key
32
31
  }
33
- return undefined;
32
+ return undefined
34
33
  }