@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,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
  }