@wular/pnext 0.0.4 → 0.0.7

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 (395) hide show
  1. package/README.md +22 -16
  2. package/bin/pnext +6 -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 +87 -22
  8. package/reference/config.md +40 -93
  9. package/reference/css.md +42 -33
  10. package/reference/dev.md +26 -33
  11. package/reference/env.md +18 -20
  12. package/reference/getting-started.md +132 -0
  13. package/reference/metadata.md +31 -46
  14. package/reference/navigation.md +65 -105
  15. package/reference/performance.md +21 -142
  16. package/reference/rendering.md +78 -75
  17. package/reference/routing.md +97 -107
  18. package/reference/typegen.md +27 -29
  19. package/src/api/cache.ts +36 -37
  20. package/src/api/client-cache.ts +2 -2
  21. package/src/api/client-navigation.ts +121 -114
  22. package/src/api/dynamic.tsx +58 -55
  23. package/src/api/link.tsx +52 -53
  24. package/src/api/navigation.ts +59 -58
  25. package/src/api/server.ts +152 -144
  26. package/src/api/suspense.ts +4 -4
  27. package/src/cli/adapters/vercel-warm.ts +126 -121
  28. package/src/cli/adapters/vercel.ts +437 -443
  29. package/src/cli/analyze.ts +333 -144
  30. package/src/cli/{named-bin.ts → boot/named-bin.ts} +37 -37
  31. package/src/cli/{boot-trace.ts → boot/trace.ts} +10 -10
  32. package/src/cli/build.ts +976 -978
  33. package/src/cli/create.ts +72 -64
  34. package/src/cli/dev.ts +116 -116
  35. package/src/cli/index.ts +94 -85
  36. package/src/cli/migrate/package-json.ts +73 -71
  37. package/src/cli/migrate/report.ts +32 -33
  38. package/src/cli/migrate/{index.ts → run.ts} +48 -49
  39. package/src/cli/migrate/scan.ts +46 -46
  40. package/src/cli/migrate/spinner.ts +9 -9
  41. package/src/cli/migrate/tsconfig.ts +35 -35
  42. package/src/cli/{server-entry.ts → serve/entry.ts} +57 -57
  43. package/src/cli/{request-pipeline.ts → serve/pipeline.ts} +386 -394
  44. package/src/cli/{serve-ui.ts → serve/ui.ts} +47 -47
  45. package/src/cli/start.ts +65 -66
  46. package/src/{typegen.ts → cli/typegen.ts} +59 -59
  47. package/src/client/build.ts +802 -768
  48. package/src/client/chunk-fold.ts +245 -240
  49. package/src/client/{paths.ts → chunk-name.ts} +6 -6
  50. package/src/client/entry.ts +162 -147
  51. package/src/client/prebuilt.ts +231 -223
  52. package/src/client/profile.ts +29 -29
  53. package/src/client/react-compiler.ts +20 -15
  54. package/src/client/{compat-surface.ts → react-tier.ts} +64 -64
  55. package/src/client/reference-stub.ts +51 -51
  56. package/src/client/reference.ts +19 -19
  57. package/src/{api → client}/router/events.ts +32 -17
  58. package/src/{api → client}/router/history.ts +16 -16
  59. package/src/{api → client}/router/hub.ts +52 -53
  60. package/src/{api/router.ts → client/router/index.ts} +61 -60
  61. package/src/{api → client}/router/policies.ts +24 -24
  62. package/src/{api → client}/router/runtime.ts +2022 -1995
  63. package/src/{api → client}/router/types.ts +98 -98
  64. package/src/compat/actions/client-plugin.ts +42 -43
  65. package/src/compat/actions/client-stub.ts +14 -14
  66. package/src/compat/actions/{action-client.ts → client.ts} +194 -193
  67. package/src/compat/actions/config.ts +63 -64
  68. package/src/compat/actions/detect.ts +68 -68
  69. package/src/compat/actions/discovery.ts +105 -105
  70. package/src/compat/actions/{action-dispatch.ts → dispatch.ts} +277 -274
  71. package/src/compat/actions/early-submit.ts +1 -1
  72. package/src/compat/actions/endpoint.ts +198 -198
  73. package/src/compat/actions/extensions.ts +811 -0
  74. package/src/compat/actions/flight.ts +23 -23
  75. package/src/compat/actions/form-state.ts +34 -34
  76. package/src/compat/actions/hoist.ts +382 -236
  77. package/src/compat/actions/ids.ts +7 -12
  78. package/src/compat/actions/index.ts +8 -8
  79. package/src/compat/actions/instances.ts +46 -46
  80. package/src/compat/actions/origin.ts +47 -48
  81. package/src/compat/actions/protocol.ts +22 -22
  82. package/src/compat/actions/registry.ts +19 -19
  83. package/src/compat/{misc/action-return.ts → actions/return.ts} +60 -57
  84. package/src/compat/actions/rewrite.ts +125 -125
  85. package/src/compat/actions/{action-router.ts → router.ts} +10 -10
  86. package/src/compat/actions/serve.ts +132 -136
  87. package/src/compat/actions/server-tag.ts +4 -4
  88. package/src/compat/actions/{action-shared.ts → shared.ts} +34 -34
  89. package/src/compat/actions/unrecognized-error.ts +4 -4
  90. package/src/compat/{index.ts → aliases.ts} +112 -109
  91. package/src/compat/bundler/bun-externals.ts +18 -18
  92. package/src/compat/bundler/cjs-exports.ts +271 -223
  93. package/src/compat/bundler/config.ts +116 -111
  94. package/src/compat/bundler/externals.ts +12 -12
  95. package/src/compat/bundler/import-meta-url.ts +19 -19
  96. package/src/compat/bundler/modularize-imports.ts +36 -33
  97. package/src/compat/bundler/new-url-asset.ts +22 -24
  98. package/src/compat/bundler/optimize-package-imports.ts +111 -107
  99. package/src/compat/bundler/polyfill.ts +28 -28
  100. package/src/compat/bundler/react-compiler.ts +35 -29
  101. package/src/compat/bundler/react-profiler.tsx +11 -11
  102. package/src/compat/bundler/relay-transform.ts +48 -47
  103. package/src/compat/bundler/require-context.ts +119 -113
  104. package/src/compat/bundler/resolve-extensions.ts +19 -19
  105. package/src/compat/bundler/source-cache.ts +25 -25
  106. package/src/compat/bundler/static-imports.ts +7 -7
  107. package/src/compat/bundler/symlink-imports.ts +46 -46
  108. package/src/compat/bundler/tsconfig-paths.ts +13 -15
  109. package/src/compat/bundler/wasm.ts +58 -60
  110. package/src/compat/bundler/webpack-loaders.ts +254 -241
  111. package/src/compat/bundler/worker.ts +101 -104
  112. package/src/compat/cache/build-flags.ts +29 -29
  113. package/src/compat/cache/build-prerender-errors.ts +40 -44
  114. package/src/compat/cache/custom-handler.ts +60 -53
  115. package/src/compat/cache/fetch-patch.ts +240 -240
  116. package/src/compat/cache/handler.ts +27 -31
  117. package/src/compat/cache/modern-handler.ts +148 -126
  118. package/src/compat/cache/resume-data-cache.ts +47 -45
  119. package/src/compat/cache/revalidate.ts +233 -232
  120. package/src/compat/cache/runtime-error.ts +35 -35
  121. package/src/compat/cache/use-cache-transform.ts +442 -417
  122. package/src/compat/cache/use-cache.ts +650 -614
  123. package/src/compat/cache-control.ts +140 -142
  124. package/src/compat/client/base-path.ts +21 -20
  125. package/src/compat/client/css-order.ts +18 -18
  126. package/src/compat/client/errors/bare-boundary.ts +11 -11
  127. package/src/compat/client/errors/control-flow.ts +23 -23
  128. package/src/compat/client/errors/error-boundary.ts +61 -61
  129. package/src/compat/client/errors/global-error.ts +101 -91
  130. package/src/compat/client/errors/install.ts +71 -72
  131. package/src/compat/client/errors/lazy.ts +23 -23
  132. package/src/compat/client/errors/primitive-throw.ts +47 -45
  133. package/src/compat/client/errors/soft-refresh.ts +4 -4
  134. package/src/compat/client/link-status.ts +33 -33
  135. package/src/compat/client/{nav-compat-runtime.ts → nav-runtime.ts} +20 -20
  136. package/src/compat/client/{nav-compat.ts → nav.ts} +12 -13
  137. package/src/compat/client/navigation-scroll.ts +63 -63
  138. package/src/compat/client/optimistic-routing.ts +93 -88
  139. package/src/compat/client/prefetch-cache.ts +23 -24
  140. package/src/compat/client/route-announcer.ts +35 -35
  141. package/src/compat/client/segment-cache-policy.ts +20 -20
  142. package/src/compat/client/segment-cache.ts +309 -315
  143. package/src/compat/client/segment-prefetch.ts +127 -132
  144. package/src/compat/client/trailing-slash.ts +5 -4
  145. package/src/compat/css/chunking.ts +113 -116
  146. package/src/compat/css/inline-css.ts +21 -21
  147. package/src/compat/css/lightningcss.ts +37 -38
  148. package/src/compat/css/modules.ts +161 -175
  149. package/src/compat/css/nonce.ts +7 -7
  150. package/src/compat/css/sass-plugin.ts +18 -21
  151. package/src/compat/css/sass.ts +150 -152
  152. package/src/compat/css/styled-jsx-runtime.ts +27 -27
  153. package/src/compat/css/styled-jsx.ts +21 -21
  154. package/src/compat/edge-runtime.ts +27 -27
  155. package/src/compat/{adapter → export}/build-complete.ts +72 -75
  156. package/src/compat/export/client.ts +29 -31
  157. package/src/compat/export/{index.ts → emit.ts} +111 -110
  158. package/src/compat/export/standalone.ts +62 -54
  159. package/src/compat/image-optimizer/cache.ts +51 -49
  160. package/src/compat/image-optimizer/detect.ts +52 -52
  161. package/src/compat/image-optimizer/{index.ts → optimize.ts} +189 -194
  162. package/src/compat/image-optimizer/source.ts +77 -80
  163. package/src/compat/lifecycle/after-scope.ts +26 -26
  164. package/src/compat/lifecycle/after.ts +48 -45
  165. package/src/compat/lifecycle/error-funnel.ts +98 -102
  166. package/src/compat/lifecycle/error-serialize.ts +30 -26
  167. package/src/compat/lifecycle/error-ui.ts +67 -32
  168. package/src/compat/lifecycle/instrumentation-client.ts +36 -38
  169. package/src/compat/lifecycle/instrumentation.ts +85 -85
  170. package/src/compat/lifecycle/node-console.ts +11 -11
  171. package/src/compat/lifecycle/testmode.ts +160 -132
  172. package/src/compat/mdx/compile.ts +60 -57
  173. package/src/compat/mdx/plugin.ts +11 -11
  174. package/src/compat/mdx/{next-mdx-stub.ts → stub.ts} +5 -5
  175. package/src/compat/{metadata-route-artifacts.ts → metadata-artifacts.ts} +195 -191
  176. package/src/compat/metadata.ts +75 -81
  177. package/src/compat/next/cache.ts +68 -69
  178. package/src/compat/next/canonical-url.ts +9 -9
  179. package/src/compat/next/client-cache.ts +19 -19
  180. package/src/compat/next/client-navigation.ts +112 -116
  181. package/src/compat/next/client-only.ts +1 -1
  182. package/src/compat/next/client-script.tsx +99 -93
  183. package/src/compat/next/client-server.ts +10 -10
  184. package/src/compat/next/config-loader.ts +176 -173
  185. package/src/compat/next/config.ts +7 -7
  186. package/src/compat/next/constants.cjs +6 -6
  187. package/src/compat/next/constants.ts +6 -6
  188. package/src/compat/next/custom-server.ts +26 -24
  189. package/src/compat/next/dist/client/components/app-router-headers.ts +21 -21
  190. package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +3 -4
  191. package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -1
  192. package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -1
  193. package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -1
  194. package/src/compat/next/dynamic.tsx +21 -18
  195. package/src/compat/next/error.tsx +52 -52
  196. package/src/compat/next/font/cache.ts +74 -74
  197. package/src/compat/next/font/google.ts +2 -2
  198. package/src/compat/next/font/index.ts +1 -1
  199. package/src/compat/next/font/local.ts +3 -3
  200. package/src/compat/next/font/runtime-client.ts +17 -15
  201. package/src/compat/next/font/runtime.ts +443 -408
  202. package/src/compat/next/font/shared.ts +120 -108
  203. package/src/compat/next/form.tsx +63 -63
  204. package/src/compat/next/head.tsx +2 -2
  205. package/src/compat/next/headers.ts +103 -95
  206. package/src/compat/next/image/client.tsx +220 -0
  207. package/src/compat/next/image/config.ts +56 -58
  208. package/src/compat/next/image/optimizer.ts +40 -36
  209. package/src/compat/next/image/patterns.ts +37 -40
  210. package/src/compat/next/{image-props.ts → image/props.ts} +208 -202
  211. package/src/compat/next/image/shared.ts +65 -57
  212. package/src/compat/next/image/static-metadata.ts +98 -107
  213. package/src/compat/next/image/validate.ts +79 -88
  214. package/src/compat/next/image.tsx +19 -23
  215. package/src/compat/next/index.ts +1 -1
  216. package/src/compat/next/legacy-image.tsx +59 -60
  217. package/src/compat/next/{link-validation-transform.ts → link-transform.ts} +95 -96
  218. package/src/compat/next/link.tsx +158 -158
  219. package/src/compat/next/navigation.cjs +12 -3
  220. package/src/compat/next/navigation.ts +48 -50
  221. package/src/compat/next/offline.ts +27 -27
  222. package/src/compat/next/og.ts +121 -124
  223. package/src/compat/next/preferred-region.ts +13 -14
  224. package/src/compat/next/redirects.ts +58 -56
  225. package/src/compat/next/resource-hints.ts +73 -76
  226. package/src/compat/next/rewrites.ts +130 -133
  227. package/src/compat/next/root-params.ts +45 -45
  228. package/src/compat/next/{optimistic-route-state.ts → route-state.ts} +52 -52
  229. package/src/compat/next/router.cjs +4 -2
  230. package/src/compat/next/router.ts +58 -61
  231. package/src/compat/next/script.tsx +108 -108
  232. package/src/compat/next/server-only.ts +1 -1
  233. package/src/compat/next/server.ts +19 -19
  234. package/src/compat/next/svgr.ts +18 -17
  235. package/src/compat/next/telemetry.ts +24 -24
  236. package/src/compat/next/{image-usage.ts → usage.ts} +70 -39
  237. package/src/compat/next/user-agent.ts +53 -49
  238. package/src/compat/next/web-vitals.ts +22 -24
  239. package/src/compat/otel/api.ts +41 -41
  240. package/src/compat/otel/client-trace-metadata.ts +25 -27
  241. package/src/compat/otel/fetch-span.ts +29 -29
  242. package/src/compat/otel/tracer.ts +331 -331
  243. package/src/compat/pages/api.ts +456 -0
  244. package/src/compat/pages/client-plugin.ts +36 -36
  245. package/src/compat/pages/router-state.ts +34 -34
  246. package/src/compat/pages/{index.ts → router.ts} +130 -135
  247. package/src/compat/ppr/io.ts +12 -12
  248. package/src/compat/ppr/missing-root-params.ts +34 -38
  249. package/src/compat/ppr/root-params-scan.ts +66 -66
  250. package/src/compat/ppr/root-params-transform.ts +24 -26
  251. package/src/compat/ppr/root-params.ts +30 -30
  252. package/src/compat/ppr/segment-config-incompat.ts +6 -7
  253. package/src/compat/protocol.ts +71 -70
  254. package/src/compat/react/action-state.ts +47 -48
  255. package/src/compat/react/client-lite.ts +15 -15
  256. package/src/compat/react/client.ts +4 -4
  257. package/src/compat/react/compiler-runtime.ts +11 -11
  258. package/src/compat/react/dom-client.ts +44 -44
  259. package/src/compat/react/dom-react-server.ts +10 -16
  260. package/src/compat/react/dom-server.ts +10 -10
  261. package/src/compat/react/dom.ts +52 -52
  262. package/src/compat/react/hooks-extra.ts +34 -35
  263. package/src/compat/react/parity.ts +64 -61
  264. package/src/compat/react/preact.ts +81 -82
  265. package/src/compat/react/react-server.ts +28 -28
  266. package/src/compat/react/router-shim.ts +1 -1
  267. package/src/compat/react/server-component-use.ts +8 -8
  268. package/src/compat/react/server-inserted-html.ts +30 -31
  269. package/src/compat/react/server.ts +53 -55
  270. package/src/compat/react/use.ts +32 -32
  271. package/src/compat/react/view-transition.ts +20 -20
  272. package/src/compat/register/actions.ts +35 -824
  273. package/src/compat/register/boot.ts +41 -41
  274. package/src/compat/register/build-tier.ts +5 -5
  275. package/src/compat/register/build.ts +74 -70
  276. package/src/compat/register/bundler.ts +161 -156
  277. package/src/compat/register/cache.ts +20 -20
  278. package/src/compat/register/client-errors.ts +3 -3
  279. package/src/compat/register/config.ts +6 -6
  280. package/src/compat/register/css-extras.ts +30 -34
  281. package/src/compat/register/edge-runtime.ts +3 -3
  282. package/src/compat/register/errors.ts +10 -12
  283. package/src/compat/register/export.ts +16 -16
  284. package/src/compat/register/font.ts +11 -11
  285. package/src/compat/register/hooks.ts +2 -2
  286. package/src/compat/register/image.ts +40 -40
  287. package/src/compat/register/index.ts +59 -62
  288. package/src/compat/register/instrumentation-client.ts +10 -10
  289. package/src/compat/register/lifecycle.ts +25 -28
  290. package/src/compat/register/mdx.ts +10 -10
  291. package/src/compat/register/middleware.ts +226 -16
  292. package/src/compat/register/otel.ts +80 -88
  293. package/src/compat/register/pages-api.ts +10 -463
  294. package/src/compat/register/ppr.ts +16 -16
  295. package/src/compat/register/protocol.ts +17 -18
  296. package/src/compat/register/proxy.ts +49 -51
  297. package/src/compat/register/render.ts +79 -76
  298. package/src/compat/register/routing.ts +162 -159
  299. package/src/compat/register/segment.ts +24 -1897
  300. package/src/compat/register/static-image.ts +3 -3
  301. package/src/compat/register/{misc.ts → taint.ts} +9 -9
  302. package/src/compat/register/typed-routes.ts +14 -14
  303. package/src/compat/register/{usecache.ts → use-cache.ts} +39 -39
  304. package/src/compat/register/validation.ts +18 -18
  305. package/src/compat/segment/loading-boundary.ts +43 -45
  306. package/src/compat/segment/page-slot.ts +69 -69
  307. package/src/compat/segment/serve.ts +1884 -0
  308. package/src/compat/segment/tree.ts +113 -112
  309. package/src/compat/segment/vary-key.ts +38 -38
  310. package/src/compat/segment/vary-params.ts +138 -142
  311. package/src/compat/static-params.ts +14 -12
  312. package/src/compat/tsconfig-defaults.ts +87 -91
  313. package/src/compat/typecheck/{index.ts → check.ts} +234 -212
  314. package/src/compat/typecheck/worker.ts +15 -12
  315. package/src/compat/typed-routes/{index.ts → generate.ts} +36 -36
  316. package/src/compat/typed-routes/manifest.ts +174 -170
  317. package/src/compat/typed-routes/typegen.ts +127 -110
  318. package/src/compat/validation/errors.ts +16 -19
  319. package/src/compat/validation/prerender-diagnostics.ts +521 -504
  320. package/src/compat/validation/{index.ts → validate.ts} +647 -648
  321. package/src/compat-bootstrap.ts +16 -16
  322. package/src/config.ts +86 -69
  323. package/src/css/build.ts +230 -227
  324. package/src/css/postcss.ts +79 -80
  325. package/src/css/worker.ts +14 -15
  326. package/src/dev/client-actions.ts +10 -10
  327. package/src/dev/client-chunk-store.ts +27 -27
  328. package/src/dev/{client-key-cache.ts → restart/client-key.ts} +76 -76
  329. package/src/dev/{restart-cache.ts → restart/enabled.ts} +1 -1
  330. package/src/dev/{global-css-cache.ts → restart/global-css.ts} +91 -83
  331. package/src/dev/{node-module-bundle-cache.ts → restart/node-modules.ts} +24 -24
  332. package/src/dev/{route-bundle-key-cache.ts → restart/route-bundle-key.ts} +53 -53
  333. package/src/dev/{route-facts-cache.ts → restart/route-facts.ts} +82 -82
  334. package/src/dev/server.ts +804 -820
  335. package/src/env.ts +46 -43
  336. package/src/extensions.ts +491 -478
  337. package/src/index.ts +8 -8
  338. package/src/internal.ts +20 -23
  339. package/src/{islands → render}/boundary-error.ts +3 -3
  340. package/src/render/hooks.ts +71 -71
  341. package/src/render/island-context.ts +14 -14
  342. package/src/render/metadata.ts +310 -310
  343. package/src/{ppr-postpone.ts → render/postpone.ts} +5 -5
  344. package/src/{ppr.ts → render/ppr.ts} +244 -245
  345. package/src/render/renderer.ts +2087 -2082
  346. package/src/render/resource-hints.ts +16 -17
  347. package/src/render/slots.tsx +224 -235
  348. package/src/{islands → render}/static-children.ts +9 -12
  349. package/src/{islands → render}/static-slots.ts +37 -37
  350. package/src/{cache/context.ts → request/cache.ts} +20 -20
  351. package/src/request/context.ts +107 -107
  352. package/src/{dynamic/source.ts → resolve/dynamic.ts} +139 -139
  353. package/src/resolve/engine.ts +90 -77
  354. package/src/resolve/imports.ts +475 -463
  355. package/src/resolve/scan-facts.ts +318 -296
  356. package/src/resolve/source-text.ts +37 -37
  357. package/src/{dynamic → resolve}/tree-shake.ts +132 -128
  358. package/src/routing/forwarded.ts +19 -19
  359. package/src/routing/handler.ts +84 -91
  360. package/src/routing/href.ts +87 -70
  361. package/src/routing/{metadata.ts → metadata-files.ts} +403 -401
  362. package/src/{proxy.ts → routing/proxy.ts} +306 -312
  363. package/src/routing/{request-runtime.ts → request-environment.ts} +10 -10
  364. package/src/routing/routes.ts +827 -815
  365. package/src/routing/slots.ts +164 -160
  366. package/src/runtime/loader.ts +954 -0
  367. package/src/{dev → runtime}/module-cache.ts +309 -287
  368. package/src/{dev → runtime}/module-generations.ts +9 -9
  369. package/src/{dev → runtime}/module-transform.ts +81 -72
  370. package/src/{dev/imports.ts → runtime/modules.ts} +934 -847
  371. package/src/runtime/{server.ts → vendor-build.ts} +848 -1696
  372. package/src/runtime/vendor.ts +428 -406
  373. package/src/styles.d.ts +9 -0
  374. package/src/types.ts +324 -335
  375. package/src/utils/ansi.ts +5 -5
  376. package/src/utils/{source.ts → code.ts} +15 -12
  377. package/src/utils/content-type.ts +3 -3
  378. package/src/utils/decode.ts +2 -2
  379. package/src/utils/dev-profile.ts +13 -13
  380. package/src/utils/error-log.ts +6 -6
  381. package/src/utils/esbuild.ts +18 -18
  382. package/src/utils/fs-cache.ts +13 -13
  383. package/src/utils/fs.ts +57 -49
  384. package/src/utils/html.ts +20 -24
  385. package/src/utils/native-require.ts +8 -8
  386. package/src/utils/serialize.ts +139 -146
  387. package/src/utils/verbose.ts +18 -18
  388. package/reference/overview.md +0 -35
  389. package/src/cli/analyze-print.ts +0 -181
  390. package/src/compat/middleware/manifest.ts +0 -210
  391. package/src/compat/next/image-client.tsx +0 -215
  392. package/src/compat/next/link-usage.ts +0 -29
  393. package/src/css/index.ts +0 -2
  394. package/src/render/index.ts +0 -1
  395. package/src/style-modules.d.ts +0 -9
@@ -1,19 +1,19 @@
1
- import path from 'node:path';
2
- import { type ResolvedConfig } from '../../config';
3
- import { setProxyExtensions, setProxyResponseProtocol } from '../../extensions';
4
- import { findProxyFiles, setProxyRewriteObserver } from '../../proxy';
5
- import { moduleExportNames } from '../../resolve/scan-facts';
6
- import { readText, toPosixPath } from '../../utils/fs';
7
- import { recordRewrite } from '../protocol';
8
- import { recordCanonicalUrl } from '../next/canonical-url';
9
- import { getNextConfig } from '../next/config-loader';
10
- import { activateTestProxy } from '../lifecycle/testmode';
1
+ import path from 'node:path'
2
+ import { type ResolvedConfig } from '../../config'
3
+ import { setProxyExtensions, setProxyResponseProtocol } from '../../extensions'
4
+ import { findProxyFiles, setProxyRewriteObserver } from '../../routing/proxy'
5
+ import { moduleExportNames } from '../../resolve/scan-facts'
6
+ import { readText, toPosixPath } from '../../utils/fs'
7
+ import { recordRewrite } from '../protocol'
8
+ import { recordCanonicalUrl } from '../next/canonical-url'
9
+ import { getNextConfig } from '../next/config-loader'
10
+ import { activateTestProxy } from '../lifecycle/testmode'
11
11
 
12
12
  export function registerProxyExtensions(_config: ResolvedConfig): void {
13
13
  setProxyResponseProtocol({
14
14
  nextHeader: 'x-middleware-next',
15
15
  rewriteHeader: 'x-middleware-rewrite',
16
- });
16
+ })
17
17
  setProxyExtensions({
18
18
  names: ['proxy', 'middleware'],
19
19
  validateFiles: validateNextProxyFiles,
@@ -22,88 +22,86 @@ export function registerProxyExtensions(_config: ResolvedConfig): void {
22
22
  locale: proxyLocale,
23
23
  onExternalRewrite: request => activateTestProxy(request.headers),
24
24
  clientMaxBodySize: proxyClientMaxBodySize,
25
- });
25
+ })
26
26
  // A same-origin middleware rewrite feeds the Next rewrite-tracking channel so
27
27
  // RSC responses carry x-nextjs-rewritten-path/query (identical to next.config
28
28
  // rewrites; the RSC-only emission gate lives in compat/protocol.ts). The
29
29
  // ORIGINAL url is stashed too so usePathname/useSearchParams stay canonical.
30
30
  setProxyRewriteObserver((from, to) => {
31
- recordCanonicalUrl(from);
32
- recordRewrite(from, to);
33
- });
31
+ recordCanonicalUrl(from)
32
+ recordRewrite(from, to)
33
+ })
34
34
  }
35
35
 
36
- const DEFAULT_PROXY_CLIENT_MAX_BODY_SIZE = 10 * 1024 * 1024;
36
+ const DEFAULT_PROXY_CLIENT_MAX_BODY_SIZE = 10 * 1024 * 1024
37
37
 
38
38
  // experimental.proxyClientMaxBodySize accepts bytes (2097152) or a size string
39
39
  // ('5mb'); experimental.middlewareClientMaxBodySize is the deprecated alias.
40
40
  function proxyClientMaxBodySize(): number {
41
- const experimental = (getNextConfig().experimental ?? {}) as Record<string, unknown>;
42
- const raw = experimental.proxyClientMaxBodySize ?? experimental.middlewareClientMaxBodySize;
43
- if (typeof raw === 'number' && raw > 0) return raw;
41
+ const experimental = (getNextConfig().experimental ?? {}) as Record<string, unknown>
42
+ const raw = experimental.proxyClientMaxBodySize ?? experimental.middlewareClientMaxBodySize
43
+ if (typeof raw === 'number' && raw > 0) return raw
44
44
  if (typeof raw === 'string') {
45
- const match = /^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i.exec(raw.trim());
45
+ const match = /^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i.exec(raw.trim())
46
46
  if (match?.[1]) {
47
- const unit = (match[2] ?? 'b').toLowerCase();
47
+ const unit = (match[2] ?? 'b').toLowerCase()
48
48
  const multiplier =
49
- unit === 'gb' ? 1024 ** 3 : unit === 'mb' ? 1024 ** 2 : unit === 'kb' ? 1024 : 1;
50
- const bytes = Math.floor(Number(match[1]) * multiplier);
51
- if (bytes > 0) return bytes;
49
+ unit === 'gb' ? 1024 ** 3 : unit === 'mb' ? 1024 ** 2 : unit === 'kb' ? 1024 : 1
50
+ const bytes = Math.floor(Number(match[1]) * multiplier)
51
+ if (bytes > 0) return bytes
52
52
  }
53
53
  }
54
- return DEFAULT_PROXY_CLIENT_MAX_BODY_SIZE;
54
+ return DEFAULT_PROXY_CLIENT_MAX_BODY_SIZE
55
55
  }
56
56
 
57
57
  function proxyLocale(url: URL): string {
58
- const i18n = getNextConfig().i18n as { locales?: unknown } | undefined;
59
- if (!Array.isArray(i18n?.locales)) return '';
60
- const locales = i18n.locales.filter((locale): locale is string => typeof locale === 'string');
61
- const dataLocale = /^\/_next\/data\/[^/]+\/([^/]+)(?:\/|$)/.exec(url.pathname)?.[1];
62
- const candidate = dataLocale ?? url.pathname.split('/')[1];
63
- return locales.find(locale => locale.toLowerCase() === candidate?.toLowerCase()) ?? '';
58
+ const i18n = getNextConfig().i18n as { locales?: unknown } | undefined
59
+ if (!Array.isArray(i18n?.locales)) return ''
60
+ const locales = i18n.locales.filter((locale): locale is string => typeof locale === 'string')
61
+ const dataLocale = /^\/_next\/data\/[^/]+\/([^/]+)(?:\/|$)/.exec(url.pathname)?.[1]
62
+ const candidate = dataLocale ?? url.pathname.split('/')[1]
63
+ return locales.find(locale => locale.toLowerCase() === candidate?.toLowerCase()) ?? ''
64
64
  }
65
65
 
66
66
  async function validateNextProxyFiles(config: ResolvedConfig) {
67
- const files = findProxyFiles(config, ['proxy', 'middleware']);
68
- const middleware = files.find(file => path.basename(file).startsWith('middleware.'));
69
- const proxy = files.find(file => path.basename(file).startsWith('proxy.'));
67
+ const files = findProxyFiles(config, ['proxy', 'middleware'])
68
+ const middleware = files.find(file => path.basename(file).startsWith('middleware.'))
69
+ const proxy = files.find(file => path.basename(file).startsWith('proxy.'))
70
70
  if (middleware && proxy) {
71
71
  throw new Error(
72
72
  `Both middleware file "${relativeProxyPath(config, middleware)}" and proxy file "${relativeProxyPath(config, proxy)}" are detected. Please use "${relativeProxyPath(config, proxy)}" only.`,
73
- );
73
+ )
74
74
  }
75
75
  if (middleware && !proxy) {
76
- console.warn(
77
- 'The "middleware" file convention is deprecated. Please use "proxy" instead.',
78
- );
76
+ console.warn('The "middleware" file convention is deprecated. Please use "proxy" instead.')
79
77
  }
80
- await Promise.all(files.map(file => validateNextProxyFile(config, file)));
78
+ await Promise.all(files.map(file => validateNextProxyFile(config, file)))
81
79
  }
82
80
 
83
81
  async function validateNextProxyFile(config: ResolvedConfig, file: string) {
84
- const source = await readText(file);
85
- const name = path.basename(file).split('.')[0];
86
- const exports = moduleExportNames(source, file);
82
+ const source = await readText(file)
83
+ const name = path.basename(file).split('.')[0]
84
+ const exports = moduleExportNames(source, file)
87
85
  const validExport =
88
86
  exports.includes('default') ||
89
- (name === 'proxy' ? exports.includes('proxy') : exports.includes('middleware'));
87
+ (name === 'proxy' ? exports.includes('proxy') : exports.includes('middleware'))
90
88
  if (!validExport) {
91
- throw new Error(proxyMissingExportError(config, file));
89
+ throw new Error(proxyMissingExportError(config, file))
92
90
  }
93
91
  if (name === 'proxy' && hasRuntimeConfig(source)) {
94
92
  throw new Error(
95
93
  `Route segment config is not allowed in Proxy file at "${relativeProxyPath(config, file)}". Proxy always runs on Node.js runtime. Learn more: https://nextjs.org/docs/messages/middleware-to-proxy`,
96
- );
94
+ )
97
95
  }
98
96
  }
99
97
 
100
98
  function proxyMissingExportError(config: ResolvedConfig, file: string) {
101
- const name = path.basename(file).split('.')[0] === 'middleware' ? 'middleware' : 'proxy';
99
+ const name = path.basename(file).split('.')[0] === 'middleware' ? 'middleware' : 'proxy'
102
100
  const migrationReason =
103
101
  name === 'proxy'
104
102
  ? "- You are migrating from `middleware` to `proxy`, but haven't updated the exported function.\n"
105
- : '';
106
- const target = name === 'proxy' ? 'proxy (previously called middleware)' : 'middleware';
103
+ : ''
104
+ const target = name === 'proxy' ? 'proxy (previously called middleware)' : 'middleware'
107
105
  return `The file "${relativeProxyPath(config, file)}" must export a function, either as a default export or as a named "${name}" export.
108
106
  This function is what Next.js runs for every request handled by this ${target}.
109
107
 
@@ -115,13 +113,13 @@ ${migrationReason}- The file exists but doesn't export a function.
115
113
  To fix it:
116
114
  - Ensure this file has either a default or "${name}" function export.
117
115
 
118
- Learn more: https://nextjs.org/docs/messages/middleware-to-proxy`;
116
+ Learn more: https://nextjs.org/docs/messages/middleware-to-proxy`
119
117
  }
120
118
 
121
119
  function hasRuntimeConfig(source: string) {
122
- return /\bexport\s+const\s+config\s*=/.test(source) && /\bruntime\s*:/.test(source);
120
+ return /\bexport\s+const\s+config\s*=/.test(source) && /\bruntime\s*:/.test(source)
123
121
  }
124
122
 
125
123
  function relativeProxyPath(config: ResolvedConfig, file: string) {
126
- return `./${toPosixPath(path.relative(config.root, file))}`;
124
+ return `./${toPosixPath(path.relative(config.root, file))}`
127
125
  }
@@ -16,12 +16,12 @@
16
16
  // serializeServerActionProp, collectRenderMeta and the server-action module tagging hooks are populated
17
17
  // by the actions and cache sub-registrars; this file owns the react and font/suspense hooks.
18
18
 
19
- import type { ResolvedConfig } from '../../config';
20
- import { onExtensionHostReset, setRenderExtensions } from '../../extensions';
21
- import { setReactCompatActive } from '../react/preact';
19
+ import type { ResolvedConfig } from '../../config'
20
+ import { onExtensionHostReset, setRenderExtensions } from '../../extensions'
21
+ import { setReactCompatActive } from '../react/preact'
22
22
 
23
23
  // preact's global vnode hook cannot be uninstalled, so it follows the host.
24
- onExtensionHostReset(() => setReactCompatActive(false));
24
+ onExtensionHostReset(() => setReactCompatActive(false))
25
25
  import {
26
26
  nextCompatEnabled,
27
27
  reactCompatEnabled,
@@ -31,72 +31,74 @@ import {
31
31
  setStaticParamsExtensions,
32
32
  setStreamRouteExtensions,
33
33
  setSuspenseExtensions,
34
- } from '../../render/hooks';
35
- import { withAssetPrefix } from '../../css';
36
- import { polyfillsChunkPath } from '../bundler/polyfill';
37
- import { nextRouterShimScript } from '../react/router-shim';
38
- import { renderPartytownHeadScripts } from '../next/script';
39
- import { ensureCompatSuspense, compatSuspenseType } from '../../compat';
40
- import { invokeServerComponentWithUse } from '../react/server-component-use';
41
- import { fontAssets, fontPreloadDomScript, prewarmFonts, runWithFontScope } from '../next/font/runtime';
34
+ } from '../../render/hooks'
35
+ import { withAssetPrefix } from '../../css/build'
36
+ import { polyfillsChunkPath } from '../bundler/polyfill'
37
+ import { nextRouterShimScript } from '../react/router-shim'
38
+ import { renderPartytownHeadScripts } from '../next/script'
39
+ import { ensureCompatSuspense, compatSuspenseType } from '../../compat/aliases'
40
+ import { invokeServerComponentWithUse } from '../react/server-component-use'
41
+ import {
42
+ fontAssets,
43
+ fontPreloadDomScript,
44
+ prewarmFonts,
45
+ runWithFontScope,
46
+ } from '../next/font/runtime'
42
47
  import {
43
48
  hasRuntimeMetadata,
44
49
  readNextModuleMetadata,
45
50
  readNextModuleViewport,
46
51
  shouldRenderMetadataInBody,
47
- } from '../metadata';
48
- import { aliasGenerateStaticParams } from '../static-params';
49
- import { getNextConfig } from '../next/config-loader';
50
- import {
51
- renderServerInsertedHTML,
52
- setServerInsertedHTMLScope,
53
- } from '../react/server-inserted-html';
54
- import { nextClientRouteState } from '../next/optimistic-route-state';
55
- import { earlySubmitCaptureScript } from '../actions/early-submit';
56
- import { getWorkUnit } from '../../request/context';
52
+ } from '../metadata'
53
+ import { aliasGenerateStaticParams } from '../static-params'
54
+ import { getNextConfig } from '../next/config-loader'
55
+ import { renderServerInsertedHTML, setServerInsertedHTMLScope } from '../react/server-inserted-html'
56
+ import { nextClientRouteState } from '../next/route-state'
57
+ import { earlySubmitCaptureScript } from '../actions/early-submit'
58
+ import { getWorkUnit } from '../../request/context'
57
59
  import {
58
60
  createVaryParamsAccumulator,
59
61
  createVaryingParams,
60
62
  createVaryingSearchParams,
61
63
  normalizeOptionalCatchAllParams,
62
- } from '../segment/vary-params';
63
- import type { VaryParamsTrackingContext } from '../../extensions';
64
+ } from '../segment/vary-params'
65
+ import type { VaryParamsTrackingContext } from '../../extensions'
64
66
 
65
67
  export function registerRenderExtensions(config: ResolvedConfig): void {
66
68
  // The react layer only matters when react/next compat is on. A next-only
67
69
  // predicate would miss react-compat-only apps (which still render server
68
70
  // components with use() and need the compat Suspense identity for streaming).
69
- if (!reactCompatEnabled(config)) return;
71
+ if (!reactCompatEnabled(config)) return
70
72
 
71
- setReactCompatActive(true);
73
+ setReactCompatActive(true)
72
74
 
73
75
  setServerInsertedHTMLScope(() => {
74
- const workUnit = getWorkUnit();
75
- if (!workUnit) return undefined;
76
- return (workUnit.compat ??= {});
77
- });
76
+ const workUnit = getWorkUnit()
77
+ if (!workUnit) return undefined
78
+ return (workUnit.compat ??= {})
79
+ })
78
80
 
79
81
  setRenderExtensions({
80
82
  wrapServerComponentInvoke: invokeServerComponentWithUse,
81
83
  genericErrorTitle: ({ dev }) => (dev ? undefined : 'This page couldn\u2019t load'),
82
- });
84
+ })
83
85
 
84
- setSuspenseExtensions({ ensureCompatSuspense, compatSuspenseType });
86
+ setSuspenseExtensions({ ensureCompatSuspense, compatSuspenseType })
85
87
 
86
88
  // next/font is a next-compat feature; a react-only app renders no fonts.
87
89
  if (nextCompatEnabled(config)) {
88
90
  setStreamRouteExtensions({
89
91
  canStreamRoute: canStreamNextRoute,
90
92
  inlineSuspenseStream: needsInlineSuspenseStream,
91
- });
93
+ })
92
94
  setMetadataExtensions({
93
95
  enabled: nextCompatEnabled,
94
96
  hasRuntimeMetadata,
95
97
  readModuleMetadata: readNextModuleMetadata,
96
98
  readModuleViewport: readNextModuleViewport,
97
99
  shouldRenderMetadataInBody,
98
- });
99
- setStaticParamsExtensions({ normalizeModule: aliasGenerateStaticParams });
100
+ })
101
+ setStaticParamsExtensions({ normalizeModule: aliasGenerateStaticParams })
100
102
  setRenderExtensions({
101
103
  clientRouteState: nextClientRouteState,
102
104
  trackVaryParams: trackRenderVaryParams,
@@ -104,17 +106,21 @@ export function registerRenderExtensions(config: ResolvedConfig): void {
104
106
  // island hosts and the page slot travel as comment pairs and the inline
105
107
  // bootstrap materializes them. Core ships the elements as final.
106
108
  islandCommentWireFormat: () => true,
107
- });
109
+ })
108
110
  setDocumentScriptExtensions({
109
111
  stylesheetPrecedence: cfg => (nextCompatEnabled(cfg) ? 'next' : undefined),
110
- });
111
- setFontExtensions({ runWithFontScope, collectFontAssets: fontAssets, prewarmFontAssets: prewarmFonts });
112
+ })
113
+ setFontExtensions({
114
+ runWithFontScope,
115
+ collectFontAssets: fontAssets,
116
+ prewarmFontAssets: prewarmFonts,
117
+ })
112
118
  setDocumentScriptExtensions({
113
119
  documentBodyScripts: cfg =>
114
120
  `${flightDataBootstrapScript()}${renderPartytownHeadScripts()}${basePathScript(cfg.basePath)}${trailingSlashScript(cfg.trailingSlash)}${skipTrailingSlashScript(cfg.skipTrailingSlashRedirect)}${staleTimesScript()}${segmentSchedulerScript()}${appShellsScript()}${optimisticRoutingScript()}${nextRouterShimScript()}<script>${earlySubmitCaptureScript()}</script>${fontPreloadDomScript()}`,
115
121
  documentHeadTags: () => `${polyfillsScript(config)}${renderServerInsertedHTML()}`,
116
122
  streamInsertedHTML: renderServerInsertedHTML,
117
- });
123
+ })
118
124
  }
119
125
  }
120
126
 
@@ -129,17 +135,17 @@ function trackRenderVaryParams<T extends Record<string, unknown>>(
129
135
  value: T,
130
136
  context: VaryParamsTrackingContext,
131
137
  ): T {
132
- const accumulator = createVaryParamsAccumulator(context.segment ?? 'page');
138
+ const accumulator = createVaryParamsAccumulator(context.segment ?? 'page')
133
139
  if (!accumulator) {
134
140
  // Segment-M2 deliverable 5: Next's params shape (an EMPTY optional catch-all
135
141
  // carries no key) applies to every render, not just tracked ones.
136
142
  return context.kind === 'searchParams'
137
143
  ? value
138
- : normalizeOptionalCatchAllParams(value, context.optionalCatchAllParam ?? null);
144
+ : normalizeOptionalCatchAllParams(value, context.optionalCatchAllParam ?? null)
139
145
  }
140
146
  return context.kind === 'searchParams'
141
147
  ? createVaryingSearchParams(accumulator, value)
142
- : createVaryingParams(accumulator, value, context.optionalCatchAllParam ?? null);
148
+ : createVaryingParams(accumulator, value, context.optionalCatchAllParam ?? null)
143
149
  }
144
150
 
145
151
  /**
@@ -150,7 +156,7 @@ function trackRenderVaryParams<T extends Record<string, unknown>>(
150
156
  * by construction.
151
157
  */
152
158
  function flightDataBootstrapScript(): string {
153
- return `<script>(self.__next_f=self.__next_f||[]).push([0])</script>`;
159
+ return `<script>(self.__next_f=self.__next_f||[]).push([0])</script>`
154
160
  }
155
161
 
156
162
  // Next emits a `<script noModule>` tag referencing the polyfills chunk in the
@@ -159,28 +165,27 @@ function flightDataBootstrapScript(): string {
159
165
  // written by the client build's static-chunk seam). assetPrefix is applied so a
160
166
  // CDN-hosted asset base still resolves.
161
167
  function polyfillsScript(config: ResolvedConfig): string {
162
- return `<script src="${withAssetPrefix(config, polyfillsChunkPath())}" noModule=""></script>`;
168
+ return `<script src="${withAssetPrefix(config, polyfillsChunkPath())}" noModule=""></script>`
163
169
  }
164
170
 
165
171
  function canStreamNextRoute(input: {
166
- config: ResolvedConfig;
167
- route: { client?: boolean; stream?: unknown };
172
+ config: ResolvedConfig
173
+ route: { client?: boolean; stream?: unknown }
168
174
  }) {
169
- if (!nextCompatEnabled(input.config)) return true;
175
+ if (!nextCompatEnabled(input.config)) return true
170
176
  // Whole-page client routes stream through a single Preact render, preserving
171
177
  // ancestor provider context across their Suspense boundaries.
172
- if (input.route.client) return true;
178
+ if (input.route.client) return true
173
179
  const stream = input.route.stream as
174
- | { hasLoadingBoundary?: boolean; ancestorClientReferences?: string[] }
175
- | undefined;
180
+ { hasLoadingBoundary?: boolean; ancestorClientReferences?: string[] } | undefined
176
181
  // No stream metadata means a non-page route (handlers never reach the page
177
182
  // renderer) — nothing to stream.
178
- if (!stream) return false;
183
+ if (!stream) return false
179
184
  // Out-of-order streaming isolates each Suspense boundary and drops client-provider context inherited
180
185
  // from ancestor layouts/templates. When no ancestor ships a client reference there is nothing to lose;
181
186
  // when one does, the route still streams through the single-render inline-suspense path, which keeps the
182
187
  // whole tree in one preact render so ancestor providers stay in scope.
183
- return true;
188
+ return true
184
189
  }
185
190
 
186
191
  // A route whose ancestor layouts/templates ship client references streams in
@@ -188,34 +193,34 @@ function canStreamNextRoute(input: {
188
193
  // replacement chunks rendered from a fresh root, which would drop the ancestor
189
194
  // islands' provider context around the boundary's content.
190
195
  function needsInlineSuspenseStream(input: {
191
- config: ResolvedConfig;
192
- route: { client?: boolean; stream?: unknown };
196
+ config: ResolvedConfig
197
+ route: { client?: boolean; stream?: unknown }
193
198
  }) {
194
- if (!nextCompatEnabled(input.config) || input.route.client) return false;
195
- const stream = input.route.stream as { ancestorClientReferences?: string[] } | undefined;
196
- return (stream?.ancestorClientReferences?.length ?? 0) > 0;
199
+ if (!nextCompatEnabled(input.config) || input.route.client) return false
200
+ const stream = input.route.stream as { ancestorClientReferences?: string[] } | undefined
201
+ return (stream?.ancestorClientReferences?.length ?? 0) > 0
197
202
  }
198
203
 
199
204
  // Inline script exposing experimental.staleTimes so the client prefetch cache
200
205
  // honors config overrides (defaults 30s dynamic / 300s static apply otherwise).
201
206
  function staleTimesScript(): string {
202
207
  const experimental = getNextConfig().experimental as
203
- | { staleTimes?: { dynamic?: number; static?: number } }
204
- | undefined;
205
- const staleTimes = experimental?.staleTimes;
206
- if (!staleTimes) return '';
207
- return `<script>window.__PNEXT_STALE_TIMES__=${JSON.stringify(staleTimes)};</script>`;
208
+ { staleTimes?: { dynamic?: number; static?: number } } | undefined
209
+ const staleTimes = experimental?.staleTimes
210
+ if (!staleTimes) return ''
211
+ return `<script>window.__PNEXT_STALE_TIMES__=${JSON.stringify(staleTimes)};</script>`
208
212
  }
209
213
 
210
214
  // The client prefetch bandwidth scheduler (concurrency limits + hover-reserved lanes) reproduces Next's
211
215
  // SEGMENT-CACHE scheduler, which only exists under cacheComponents. A classic prefetch app must fire all
212
216
  // visible prefetches without throttling - the app-client-cache full-prefetch tests clear their request
213
217
  // listener between two staggered prefetches and would see the delayed one land as an unexpected request.
218
+ // Core defaults to scheduling, so plain compat stamps an explicit `false` to opt out.
214
219
  function segmentSchedulerScript(): string {
215
- const config = getNextConfig() as { cacheComponents?: unknown };
220
+ const config = getNextConfig() as { cacheComponents?: unknown }
216
221
  return config.cacheComponents === true
217
222
  ? `<script>window.__PNEXT_SEGMENT_SCHEDULER__=true;</script>`
218
- : '';
223
+ : `<script>window.__PNEXT_SEGMENT_SCHEDULER__=false;</script>`
219
224
  }
220
225
 
221
226
  // `experimental.appShells`: the client fires a SECOND, param-stripped prefetch
@@ -223,10 +228,10 @@ function segmentSchedulerScript(): string {
223
228
  // client/segment-prefetch.ts). Strictly opt-in — without the flag the extra
224
229
  // request would break the request-count contracts of every other suite.
225
230
  function appShellsScript(): string {
226
- const experimental = getNextConfig().experimental as { appShells?: unknown } | undefined;
231
+ const experimental = getNextConfig().experimental as { appShells?: unknown } | undefined
227
232
  return experimental?.appShells === true
228
233
  ? `<script>window.__PNEXT_APP_SHELLS__=true;</script>`
229
- : '';
234
+ : ''
230
235
  }
231
236
 
232
237
  // `experimental.optimisticRouting` defaults ON, so this is an OPT-OUT marker:
@@ -234,12 +239,10 @@ function appShellsScript(): string {
234
239
  // segment cache then stops letting one URL's entry satisfy another URL's
235
240
  // PREFETCH (compat/client/segment-cache.ts). Navigation reuse is unaffected.
236
241
  function optimisticRoutingScript(): string {
237
- const experimental = getNextConfig().experimental as
238
- | { optimisticRouting?: unknown }
239
- | undefined;
242
+ const experimental = getNextConfig().experimental as { optimisticRouting?: unknown } | undefined
240
243
  return experimental?.optimisticRouting === false
241
244
  ? `<script>window.__PNEXT_NO_OPTIMISTIC_ROUTING__=true;</script>`
242
- : '';
245
+ : ''
243
246
  }
244
247
 
245
248
  /**
@@ -248,8 +251,8 @@ function optimisticRoutingScript(): string {
248
251
  * bare app keeps the global undefined, treated as ''.
249
252
  */
250
253
  function basePathScript(basePath: string): string {
251
- if (!basePath) return '';
252
- return `<script>window.__PNEXT_BASE_PATH__=${JSON.stringify(basePath)};</script>`;
254
+ if (!basePath) return ''
255
+ return `<script>window.__PNEXT_BASE_PATH__=${JSON.stringify(basePath)};</script>`
253
256
  }
254
257
 
255
258
  /**
@@ -258,11 +261,11 @@ function basePathScript(basePath: string): string {
258
261
  * global undefined, treated as false.
259
262
  */
260
263
  function skipTrailingSlashScript(skip: boolean | undefined): string {
261
- if (!skip) return '';
262
- return `<script>window.__PNEXT_SKIP_TRAILING_SLASH__=true;</script>`;
264
+ if (!skip) return ''
265
+ return `<script>window.__PNEXT_SKIP_TRAILING_SLASH__=true;</script>`
263
266
  }
264
267
 
265
268
  function trailingSlashScript(trailingSlash: boolean | undefined): string {
266
- if (trailingSlash !== true) return '';
267
- return `<script>window.__PNEXT_TRAILING_SLASH__=true;</script>`;
269
+ if (trailingSlash !== true) return ''
270
+ return `<script>window.__PNEXT_TRAILING_SLASH__=true;</script>`
268
271
  }