@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
@@ -1,49 +1,49 @@
1
- import { currentParams, currentRequest, getWorkUnit } from '../../request/context';
1
+ import { currentParams, currentRequest, getWorkUnit } from '../../request/context'
2
2
  import {
3
3
  cacheComponents,
4
4
  hangingPromise,
5
5
  isPrerendering,
6
6
  isRuntimePrefetchPrerender,
7
- } from '../../ppr';
8
- import { currentRenderCacheMeta, insideUnstableCacheProducer } from '../cache/revalidate';
9
- import { insideUseCacheProducer, recordUseCacheRootParamRead } from '../cache/use-cache';
10
- import { generateStaticParamsScope } from '../static-params';
11
- import { accumulateRootVaryParam } from '../segment/vary-params';
7
+ } from '../../render/ppr'
8
+ import { currentRenderCacheMeta, insideUnstableCacheProducer } from '../cache/revalidate'
9
+ import { insideUseCacheProducer, recordUseCacheRootParamRead } from '../cache/use-cache'
10
+ import { generateStaticParamsScope } from '../static-params'
11
+ import { accumulateRootVaryParam } from '../segment/vary-params'
12
12
 
13
13
  function currentRoutePattern(): string {
14
- let pathname: string;
14
+ let pathname: string
15
15
  try {
16
- pathname = new URL(currentRequest()?.url ?? '').pathname;
16
+ pathname = new URL(currentRequest()?.url ?? '').pathname
17
17
  } catch {
18
- return '';
18
+ return ''
19
19
  }
20
- const paramNamesByValue = new Map<string, string>();
20
+ const paramNamesByValue = new Map<string, string>()
21
21
  for (const [name, value] of Object.entries(currentParams())) {
22
- if (typeof value === 'string') paramNamesByValue.set(value, name);
22
+ if (typeof value === 'string') paramNamesByValue.set(value, name)
23
23
  }
24
24
  return pathname
25
25
  .split('/')
26
26
  .map(segment => {
27
27
  try {
28
- const name = paramNamesByValue.get(decodeURIComponent(segment));
29
- return name ? `[${name}]` : segment;
28
+ const name = paramNamesByValue.get(decodeURIComponent(segment))
29
+ return name ? `[${name}]` : segment
30
30
  } catch {
31
- return segment;
31
+ return segment
32
32
  }
33
33
  })
34
- .join('/');
34
+ .join('/')
35
35
  }
36
36
 
37
37
  function rootParamContextError(name: string): Error | undefined {
38
- const unit = getWorkUnit();
38
+ const unit = getWorkUnit()
39
39
  // Keep the module specifier out of a literal source string: the static
40
40
  // compat-import rewrite must not rewrite this user-facing diagnostic.
41
- const specifier = ['next', 'root-params'].join('/');
42
- const call = `\`import('${specifier}').${name}()\``;
43
- const route = currentRoutePattern();
41
+ const specifier = ['next', 'root-params'].join('/')
42
+ const call = `\`import('${specifier}').${name}()\``
43
+ const route = currentRoutePattern()
44
44
 
45
- const inUseCache = insideUseCacheProducer();
46
- const inUnstableCache = insideUnstableCacheProducer();
45
+ const inUseCache = insideUseCacheProducer()
46
+ const inUnstableCache = insideUnstableCacheProducer()
47
47
 
48
48
  if (inUseCache && inUnstableCache) {
49
49
  return Object.assign(
@@ -51,12 +51,12 @@ function rootParamContextError(name: string): Error | undefined {
51
51
  `Route ${route} used ${call} inside \`"use cache"\` nested within \`unstable_cache\`. Root params are not available in this context.`,
52
52
  ),
53
53
  { digest: 'E1140' },
54
- );
54
+ )
55
55
  }
56
56
 
57
57
  if (inUseCache) {
58
- recordUseCacheRootParamRead(name);
59
- return undefined;
58
+ recordUseCacheRootParamRead(name)
59
+ return undefined
60
60
  }
61
61
 
62
62
  if (inUnstableCache) {
@@ -65,52 +65,52 @@ function rootParamContextError(name: string): Error | undefined {
65
65
  `Route ${route} used ${call} inside \`unstable_cache\`. This is not supported. Use \`"use cache"\` instead.`,
66
66
  ),
67
67
  { digest: 'E1141' },
68
- );
68
+ )
69
69
  }
70
70
 
71
- if (!unit) return undefined;
71
+ if (!unit) return undefined
72
72
 
73
73
  if (unit.phase === 'action') {
74
74
  return new Error(
75
75
  `${call} was used inside a Server Action. This is not supported. ` +
76
76
  `Functions from '${specifier}' can only be called in the context of a route.`,
77
- );
77
+ )
78
78
  }
79
79
 
80
80
  if (unit.phase !== 'after' && unit.routeKind === 'route-handler') {
81
81
  return new Error(
82
82
  `Route ${route} used ${call} inside a Route Handler. ` +
83
83
  `Support for this API in Route Handlers is planned for a future version of Next.js.`,
84
- );
84
+ )
85
85
  }
86
86
 
87
- return undefined;
87
+ return undefined
88
88
  }
89
89
 
90
90
  export function rootParam<T = string | string[] | undefined>(name: string): Promise<T> {
91
91
  // Inside generateStaticParams, a root param resolves only when a PARENT
92
92
  // generateStaticParams already provided it; reading the param in the very
93
93
  // call that defines it is a build error (Next E394).
94
- const gsp = generateStaticParamsScope();
94
+ const gsp = generateStaticParamsScope()
95
95
  if (gsp) {
96
- if (name in gsp.provided) return Promise.resolve(gsp.provided[name] as T);
96
+ if (name in gsp.provided) return Promise.resolve(gsp.provided[name] as T)
97
97
  const route = (currentRenderCacheMeta()?.route ?? '')
98
98
  .replace(/:\.\.\.([^/*]+)\*?/g, '[...$1]')
99
99
  .replace(/:([^/*]+)\*/g, '[...$1]')
100
- .replace(/:([^/*]+)/g, '[$1]');
100
+ .replace(/:([^/*]+)/g, '[$1]')
101
101
  return Promise.reject(
102
102
  new Error(
103
103
  `Route ${route} used \`import('${['next', 'root-params'].join('/')}').${name}()\` inside \`generateStaticParams\`, ` +
104
104
  `but the \`${name}\` parameter was not provided by a parent \`generateStaticParams\`. ` +
105
105
  `In \`generateStaticParams\`, root params are only available for segments nested below the segment that provides them.`,
106
106
  ),
107
- );
107
+ )
108
108
  }
109
109
  // Segment-M2: a root param read varies EVERY segment of the response (Next
110
110
  // merges the rootParams set into each segment accumulator).
111
- accumulateRootVaryParam(name);
112
- const error = rootParamContextError(name);
113
- if (error) return Promise.reject(error);
111
+ accumulateRootVaryParam(name)
112
+ const error = rootParamContextError(name)
113
+ if (error) return Promise.reject(error)
114
114
  // A runtime-prefetch prerender renders against the REAL sampled request, so root params are concrete
115
115
  // there (root params are always available in a static prerender, so a runtime prefetch has them too).
116
116
  // Hanging them would postpone the ROOT LAYOUT itself - the whole document, not a boundary - so the
@@ -121,22 +121,22 @@ export function rootParam<T = string | string[] | undefined>(name: string): Prom
121
121
  isPrerendering() &&
122
122
  !isRuntimePrefetchPrerender()
123
123
  ) {
124
- return hangingPromise<T>(`rootParam(${name})`);
124
+ return hangingPromise<T>(`rootParam(${name})`)
125
125
  }
126
- const value = currentParams()[name];
127
- return Promise.resolve((Array.isArray(value) && value.length === 0 ? undefined : value) as T);
126
+ const value = currentParams()[name]
127
+ return Promise.resolve((Array.isArray(value) && value.length === 0 ? undefined : value) as T)
128
128
  }
129
129
 
130
130
  const rootParamsModule = new Proxy(
131
131
  {},
132
132
  {
133
133
  get(_target, prop: string | symbol): unknown {
134
- if (typeof prop !== 'string') return undefined;
135
- if (prop === '__esModule') return true;
136
- if (prop === 'default') return undefined;
137
- return () => rootParam(prop);
134
+ if (typeof prop !== 'string') return undefined
135
+ if (prop === '__esModule') return true
136
+ if (prop === 'default') return undefined
137
+ return () => rootParam(prop)
138
138
  },
139
139
  },
140
- ) as Record<string, () => Promise<unknown>>;
140
+ ) as Record<string, () => Promise<unknown>>
141
141
 
142
- export default rootParamsModule;
142
+ export default rootParamsModule
@@ -10,30 +10,30 @@
10
10
  // URLs, and page-less intermediate directories still surface as static children without leaking their
11
11
  // nested names.
12
12
 
13
- import type { RouteManifestEntry, RouteParamValue } from '../../types';
14
- import { getRequestRuntime } from '../../routing/request-runtime';
15
- import { getNextConfig } from './config-loader';
13
+ import type { RouteManifestEntry, RouteParamValue } from '../../types'
14
+ import { getRequestRuntime } from '../../routing/request-environment'
15
+ import { getNextConfig } from './config-loader'
16
16
 
17
17
  interface RouteState {
18
- route: string;
19
- params: Record<string, RouteParamValue>;
20
- catchAllOptional?: boolean;
21
- staticChildren?: string[];
22
- staticChildrenBySegment?: Record<string, string[]>;
23
- prefetchKind?: 'shell' | 'eager';
18
+ route: string
19
+ params: Record<string, RouteParamValue>
20
+ catchAllOptional?: boolean
21
+ staticChildren?: string[]
22
+ staticChildrenBySegment?: Record<string, string[]>
23
+ prefetchKind?: 'shell' | 'eager'
24
24
  /**
25
25
  * `prefetch = 'allow-runtime'`: the route's shell is RUNTIME-prefetched (request-sampled,
26
26
  * param-derived), so unlike a static `partial` shell it is NOT shared across params - every URL of the
27
27
  * route needs its own prefetch.
28
28
  */
29
- runtimePrefetch?: boolean;
29
+ runtimePrefetch?: boolean
30
30
  /**
31
31
  * The vary set of the BAKED SHELL these bytes came from (renderer's
32
32
  * `bakedShellPageVary`). Passed straight through by the spread below: the
33
33
  * client segment cache reads it off a hard-loaded document to key that
34
34
  * document's static stage across the route's params.
35
35
  */
36
- pageVary?: string[];
36
+ pageVary?: string[]
37
37
  }
38
38
 
39
39
  /**
@@ -42,12 +42,12 @@ interface RouteState {
42
42
  * align with the pattern the client trie matches against - and no `[x]` placeholder ever reaches a body.
43
43
  */
44
44
  function publicSegments(route: string): string[] {
45
- if (route === 'index' || route === '/') return [];
46
- return route.split('/').filter(Boolean);
45
+ if (route === 'index' || route === '/') return []
46
+ return route.split('/').filter(Boolean)
47
47
  }
48
48
 
49
49
  function isDynamicSegment(segment: string): boolean {
50
- return segment.startsWith(':');
50
+ return segment.startsWith(':')
51
51
  }
52
52
 
53
53
  /**
@@ -62,9 +62,9 @@ export function staticSiblingNames(
62
62
  pattern: readonly string[],
63
63
  ): string[] {
64
64
  for (let index = pattern.length - 1; index >= 0; index--) {
65
- if (isDynamicSegment(pattern[index]!)) return staticSiblingNamesAt(routes, pattern, index);
65
+ if (isDynamicSegment(pattern[index]!)) return staticSiblingNamesAt(routes, pattern, index)
66
66
  }
67
- return [];
67
+ return []
68
68
  }
69
69
 
70
70
  /** Literal static siblings for every dynamic level in a route prediction. */
@@ -72,15 +72,15 @@ export function staticSiblingNamesBySegment(
72
72
  routes: readonly Pick<RouteManifestEntry, 'route' | 'kind' | 'interception'>[],
73
73
  pattern: readonly string[],
74
74
  ): Record<string, string[]> {
75
- const result: Record<string, string[]> = {};
75
+ const result: Record<string, string[]> = {}
76
76
  for (let index = 0; index < pattern.length; index++) {
77
- if (!isDynamicSegment(pattern[index]!)) continue;
78
- const siblings = staticSiblingNamesAt(routes, pattern, index);
77
+ if (!isDynamicSegment(pattern[index]!)) continue
78
+ const siblings = staticSiblingNamesAt(routes, pattern, index)
79
79
  // An empty array is meaningful: unlike an absent entry, it says this
80
80
  // production route table knows there are no literal siblings here.
81
- result[String(index)] = siblings;
81
+ result[String(index)] = siblings
82
82
  }
83
- return result;
83
+ return result
84
84
  }
85
85
 
86
86
  function staticSiblingNamesAt(
@@ -88,27 +88,27 @@ function staticSiblingNamesAt(
88
88
  pattern: readonly string[],
89
89
  level: number,
90
90
  ): string[] {
91
- if (!isDynamicSegment(pattern[level]!)) return [];
92
- const names = new Set<string>();
91
+ if (!isDynamicSegment(pattern[level]!)) return []
92
+ const names = new Set<string>()
93
93
  for (const route of routes) {
94
- if (route.kind !== 'page' || route.interception) continue;
95
- const segments = publicSegments(route.route);
96
- if (segments.length <= level) continue;
97
- let compatible = true;
94
+ if (route.kind !== 'page' || route.interception) continue
95
+ const segments = publicSegments(route.route)
96
+ if (segments.length <= level) continue
97
+ let compatible = true
98
98
  for (let index = 0; index < level; index++) {
99
- const own = pattern[index]!;
100
- const other = segments[index]!;
101
- if (isDynamicSegment(own) || isDynamicSegment(other)) continue;
99
+ const own = pattern[index]!
100
+ const other = segments[index]!
101
+ if (isDynamicSegment(own) || isDynamicSegment(other)) continue
102
102
  if (own !== other) {
103
- compatible = false;
104
- break;
103
+ compatible = false
104
+ break
105
105
  }
106
106
  }
107
- if (!compatible) continue;
108
- const name = segments[level]!;
109
- if (!isDynamicSegment(name)) names.add(name);
107
+ if (!compatible) continue
108
+ const name = segments[level]!
109
+ if (!isDynamicSegment(name)) names.add(name)
110
110
  }
111
- return [...names].sort();
111
+ return [...names].sort()
112
112
  }
113
113
 
114
114
  /** True when the build enumerated exactly this param set for the route. */
@@ -116,18 +116,18 @@ function paramsPrerendered(
116
116
  route: Pick<RouteManifestEntry, 'prerenderedParams' | 'params'>,
117
117
  params: Record<string, RouteParamValue>,
118
118
  ): boolean {
119
- const sets = route.prerenderedParams;
120
- if (!sets?.length) return false;
119
+ const sets = route.prerenderedParams
120
+ if (!sets?.length) return false
121
121
  // A PPR SUB-shell carries only the params the build made concrete (the rest
122
122
  // are still holes), so its state is not the full URL's — never "prerendered".
123
- if (Object.keys(params).length !== (route.params ?? []).length) return false;
123
+ if (Object.keys(params).length !== (route.params ?? []).length) return false
124
124
  return sets.some(set => {
125
- const names = Object.keys(set);
125
+ const names = Object.keys(set)
126
126
  return (
127
127
  names.length === Object.keys(params).length &&
128
128
  names.every(name => String(set[name]) === String(params[name]))
129
- );
130
- });
129
+ )
130
+ })
131
131
  }
132
132
 
133
133
  /**
@@ -151,23 +151,23 @@ export function nextClientRouteState(
151
151
  >,
152
152
  state: RouteState,
153
153
  ): RouteState {
154
- const pattern = state.route.split('/').filter(Boolean);
155
- const routes = getRequestRuntime()?.routes;
156
- if (!routes) return state;
157
- const staticChildrenBySegment = staticSiblingNamesBySegment(routes, pattern);
158
- const staticChildren = staticSiblingNames(routes, pattern);
154
+ const pattern = state.route.split('/').filter(Boolean)
155
+ const routes = getRequestRuntime()?.routes
156
+ if (!routes) return state
157
+ const staticChildrenBySegment = staticSiblingNamesBySegment(routes, pattern)
158
+ const staticChildren = staticSiblingNames(routes, pattern)
159
159
  // Global `partialPrefetching: 'unstable_eager'` makes every route without a
160
160
  // per-segment `prefetch` export eager (the App Shells Speculative-skip does
161
161
  // not apply anywhere); a per-segment export still wins.
162
162
  const globalEager =
163
- (getNextConfig() as { partialPrefetching?: unknown }).partialPrefetching === 'unstable_eager';
164
- const declared = route.segmentConfig?.prefetch;
163
+ (getNextConfig() as { partialPrefetching?: unknown }).partialPrefetching === 'unstable_eager'
164
+ const declared = route.segmentConfig?.prefetch
165
165
  // `generateStaticParams` only makes a route eager for the param sets it actually enumerated. When
166
166
  // THIS URL's params were not among them and the route has a `loading` boundary, its page is dynamic
167
167
  // here - the server answers the default prefetch with the loading shell, and calling it eager would
168
168
  // escalate the reveal to a FULL prefetch that fetches the dynamic body and erases the loading state.
169
169
  const partiallyEnumerated =
170
- route.stream?.hasLoadingBoundary === true && !paramsPrerendered(route, state.params);
170
+ route.stream?.hasLoadingBoundary === true && !paramsPrerendered(route, state.params)
171
171
  const prefetchKind =
172
172
  declared === 'unstable_eager' ||
173
173
  (declared === undefined &&
@@ -175,7 +175,7 @@ export function nextClientRouteState(
175
175
  ? 'eager'
176
176
  : declared === 'allow-runtime' || declared === 'partial'
177
177
  ? 'shell'
178
- : undefined;
178
+ : undefined
179
179
  return {
180
180
  ...state,
181
181
  ...(staticChildren.length > 0 ? { staticChildren } : {}),
@@ -184,5 +184,5 @@ export function nextClientRouteState(
184
184
  // Only `allow-runtime` shells are request-sampled per URL; a `partial` shell
185
185
  // is a static prerender the whole route shares.
186
186
  ...(declared === 'allow-runtime' ? { runtimePrefetch: true } : {}),
187
- };
187
+ }
188
188
  }
@@ -44,6 +44,8 @@ exports.Router = { events }
44
44
  exports.default = exports.Router
45
45
  exports.useRouter = () => currentRouter()
46
46
  /** @param {(props: object) => unknown} Component */
47
- exports.withRouter = Component =>
47
+ exports.withRouter =
48
+ Component =>
48
49
  /** @param {object} props */
49
- props => Component({ ...props, router: currentRouter() })
50
+ props =>
51
+ Component({ ...props, router: currentRouter() })
@@ -1,5 +1,5 @@
1
- import { useEffect, useState } from 'preact/hooks';
2
- import { blockJavascriptUrl } from '../../api/router';
1
+ import { useEffect, useState } from 'preact/hooks'
2
+ import { blockJavascriptUrl } from '../../client/router'
3
3
 
4
4
  /**
5
5
  * Pages-router surface, present so shared components importing next/router
@@ -7,38 +7,38 @@ import { blockJavascriptUrl } from '../../api/router';
7
7
  * where it can and no-ops where pages-router concepts don't exist.
8
8
  */
9
9
 
10
- type RouterEventHandler = (...args: unknown[]) => void;
10
+ type RouterEventHandler = (...args: unknown[]) => void
11
11
 
12
- const noop = () => undefined;
12
+ const noop = () => undefined
13
13
 
14
14
  const routerEvents = {
15
15
  on: noop as (event: string, handler: RouterEventHandler) => void,
16
16
  off: noop as (event: string, handler: RouterEventHandler) => void,
17
17
  emit: noop as (event: string, ...args: unknown[]) => void,
18
- };
18
+ }
19
19
 
20
20
  export interface PagesRouter {
21
- pathname: string;
22
- route: string;
23
- query: Record<string, string | string[]>;
24
- asPath: string;
25
- basePath: string;
26
- isReady: boolean;
27
- isFallback: boolean;
28
- isPreview: boolean;
29
- events: typeof routerEvents;
30
- push(url: string): Promise<boolean>;
31
- replace(url: string): Promise<boolean>;
32
- prefetch(url: string): Promise<void>;
33
- back(): void;
34
- forward(): void;
35
- reload(): void;
21
+ pathname: string
22
+ route: string
23
+ query: Record<string, string | string[]>
24
+ asPath: string
25
+ basePath: string
26
+ isReady: boolean
27
+ isFallback: boolean
28
+ isPreview: boolean
29
+ events: typeof routerEvents
30
+ push(url: string): Promise<boolean>
31
+ replace(url: string): Promise<boolean>
32
+ prefetch(url: string): Promise<void>
33
+ back(): void
34
+ forward(): void
35
+ reload(): void
36
36
  }
37
37
 
38
38
  interface PagesRouterState {
39
- pathname?: string;
40
- asPath?: string;
41
- query?: Record<string, string | string[]>;
39
+ pathname?: string
40
+ asPath?: string
41
+ query?: Record<string, string | string[]>
42
42
  }
43
43
 
44
44
  // The pages-router state the materialized page wrapper emits: SSR reads the
@@ -49,33 +49,32 @@ function pagesRouterState(browser: boolean): PagesRouterState | undefined {
49
49
  if (!browser) {
50
50
  const storage = (globalThis as Record<PropertyKey, unknown>)[
51
51
  Symbol.for('pnext.requestStorage')
52
- ] as { getStore(): Record<PropertyKey, unknown> | undefined } | undefined;
52
+ ] as { getStore(): Record<PropertyKey, unknown> | undefined } | undefined
53
53
  return storage?.getStore?.()?.[Symbol.for('pnext.pagesRouterState')] as
54
- | PagesRouterState
55
- | undefined;
54
+ PagesRouterState | undefined
56
55
  }
57
- const node = document.getElementById('__PNEXT_PAGES_DATA__');
58
- if (!node?.textContent) return undefined;
56
+ const node = document.getElementById('__PNEXT_PAGES_DATA__')
57
+ if (!node?.textContent) return undefined
59
58
  try {
60
- return JSON.parse(node.textContent) as PagesRouterState;
59
+ return JSON.parse(node.textContent) as PagesRouterState
61
60
  } catch {
62
- return undefined;
61
+ return undefined
63
62
  }
64
63
  }
65
64
 
66
65
  function browserQuery(url: URL): Record<string, string> {
67
- const query: Record<string, string> = {};
66
+ const query: Record<string, string> = {}
68
67
  for (const [key, value] of url.searchParams) {
69
- if (key !== '_rsc') query[key] = value;
68
+ if (key !== '_rsc') query[key] = value
70
69
  }
71
- return query;
70
+ return query
72
71
  }
73
72
 
74
73
  function currentRouter(ready: boolean): PagesRouter {
75
- const browser = process.browser || typeof window !== 'undefined';
76
- const url = browser ? new URL(window.location.href) : undefined;
77
- const state = pagesRouterState(browser);
78
- const pathname = state?.pathname ?? url?.pathname ?? '/';
74
+ const browser = process.browser || typeof window !== 'undefined'
75
+ const url = browser ? new URL(window.location.href) : undefined
76
+ const state = pagesRouterState(browser)
77
+ const pathname = state?.pathname ?? url?.pathname ?? '/'
79
78
  return {
80
79
  pathname,
81
80
  route: pathname,
@@ -83,9 +82,7 @@ function currentRouter(ready: boolean): PagesRouter {
83
82
  // server-computed query (they are the live values after shallow/query-only
84
83
  // history updates); on the server the state already merged them. The
85
84
  // router-fetch cache key (`_rsc`) is never part of the page's query.
86
- query: url
87
- ? { ...(state?.query ?? {}), ...browserQuery(url) }
88
- : (state?.query ?? {}),
85
+ query: url ? { ...(state?.query ?? {}), ...browserQuery(url) } : (state?.query ?? {}),
89
86
  asPath: url ? `${url.pathname}${url.search}` : (state?.asPath ?? '/'),
90
87
  basePath: '',
91
88
  isReady: browser && ready,
@@ -93,51 +90,51 @@ function currentRouter(ready: boolean): PagesRouter {
93
90
  isPreview: false,
94
91
  events: routerEvents,
95
92
  push(target: string) {
96
- if (blockJavascriptUrl(target)) return Promise.resolve(false);
97
- if (browser) window.location.href = target;
98
- return Promise.resolve(true);
93
+ if (blockJavascriptUrl(target)) return Promise.resolve(false)
94
+ if (browser) window.location.href = target
95
+ return Promise.resolve(true)
99
96
  },
100
97
  replace(target: string) {
101
- if (blockJavascriptUrl(target)) return Promise.resolve(false);
102
- if (browser) window.location.replace(target);
103
- return Promise.resolve(true);
98
+ if (blockJavascriptUrl(target)) return Promise.resolve(false)
99
+ if (browser) window.location.replace(target)
100
+ return Promise.resolve(true)
104
101
  },
105
102
  prefetch(target: string) {
106
- blockJavascriptUrl(target);
107
- return Promise.resolve();
103
+ blockJavascriptUrl(target)
104
+ return Promise.resolve()
108
105
  },
109
106
  back() {
110
- if (browser) window.history.back();
107
+ if (browser) window.history.back()
111
108
  },
112
109
  forward() {
113
- if (browser) window.history.forward();
110
+ if (browser) window.history.forward()
114
111
  },
115
112
  reload() {
116
- if (browser) window.location.reload();
113
+ if (browser) window.location.reload()
117
114
  },
118
- };
115
+ }
119
116
  }
120
117
 
121
118
  // Next semantics: isReady is FALSE during the hydration render (matching the SSR markup - preact
122
119
  // hydrate adopts DOM without patching mismatches, so a true-at-hydration value would never reach
123
120
  // attributes) and flips via a post-hydration re-render. Once flipped, later mounts see true immediately.
124
- let pagesRouterReady = false;
121
+ let pagesRouterReady = false
125
122
 
126
123
  export function useRouter(): PagesRouter {
127
- const [ready, setReady] = useState(pagesRouterReady);
124
+ const [ready, setReady] = useState(pagesRouterReady)
128
125
  useEffect(() => {
129
- pagesRouterReady = true;
130
- setReady(true);
131
- }, []);
132
- return currentRouter(ready);
126
+ pagesRouterReady = true
127
+ setReady(true)
128
+ }, [])
129
+ return currentRouter(ready)
133
130
  }
134
131
 
135
- export const Router = { events: routerEvents };
136
- export default Router;
132
+ export const Router = { events: routerEvents }
133
+ export default Router
137
134
 
138
135
  export function withRouter<Props extends { router?: PagesRouter }>(
139
136
  Component: (props: Props) => unknown,
140
137
  ) {
141
138
  return (props: Omit<Props, 'router'>) =>
142
- Component({ ...props, router: currentRouter(pagesRouterReady) } as Props);
139
+ Component({ ...props, router: currentRouter(pagesRouterReady) } as Props)
143
140
  }