@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
@@ -2,73 +2,69 @@
2
2
  // bundle, and the lite client tier must not pull compat through it. Children.only/count are replaced
3
3
  // with toChildArray below; the ref arrives React-19-style as a prop (the parity vnode pass moves
4
4
  // vnode.ref into props for function components).
5
- import { cloneElement, h as createElement, toChildArray, type JSX } from 'preact';
6
- import { useContext, useEffect, useRef, useState } from 'preact/hooks';
7
- import type { MutableRefObject, ReactElement, ReactNode, Ref } from 'react';
8
- import { usePrefetchLifecycle } from '../../api/link';
9
- import { blockJavascriptUrl, isJavascriptUrl } from '../../api/router';
10
- import { applyTrailingSlash, routeHref, type SearchInput } from '../../routing/href';
11
- import { skipTrailingSlashRedirect } from '../client/trailing-slash';
12
- import type { PrefetchMode } from '../../types';
5
+ import { cloneElement, h as createElement, toChildArray, type JSX } from 'preact'
6
+ import { useContext, useEffect, useRef, useState } from 'preact/hooks'
7
+ import type { MutableRefObject, ReactElement, ReactNode, Ref } from 'react'
8
+ import { usePrefetchLifecycle } from '../../api/link'
9
+ import { blockJavascriptUrl, isJavascriptUrl } from '../../client/router'
10
+ import { applyTrailingSlash, routeHref, type SearchInput } from '../../routing/href'
11
+ import { skipTrailingSlashRedirect } from '../client/trailing-slash'
12
+ import type { PrefetchMode } from '../../types'
13
13
  import {
14
14
  LinkStatusContext,
15
15
  linkPending,
16
16
  navigateWithStatus,
17
17
  subscribeLinkStatus,
18
- } from '../client/link-status';
19
- import { addBasePath } from '../client/base-path';
20
- import { addTransitionType } from '../react/view-transition';
18
+ } from '../client/link-status'
19
+ import { addBasePath } from '../client/base-path'
20
+ import { addTransitionType } from '../react/view-transition'
21
21
 
22
- const reactClientReferenceSymbol = Symbol.for('react.client.reference');
22
+ const reactClientReferenceSymbol = Symbol.for('react.client.reference')
23
23
 
24
24
  // Client-graph bundler define (compat/register/bundler.ts): false drops the
25
25
  // whole legacy child path from a bundle whose app provably never renders
26
26
  // `<Link legacyBehavior>`. Undefined (server render, unbundled consumer) keeps
27
27
  // it, so the gate can only ever remove bytes an app proved it cannot use.
28
- declare const __PNEXT_LINK_LEGACY__: boolean;
28
+ declare const __PNEXT_LINK_LEGACY__: boolean
29
29
  type LegacyChildKind =
30
- | 'server-sync'
31
- | 'server-async'
32
- | 'server-async-through-client'
33
- | 'lazy'
34
- | 'client-lazy';
30
+ 'server-sync' | 'server-async' | 'server-async-through-client' | 'lazy' | 'client-lazy'
35
31
 
36
32
  export interface UrlObject {
37
- pathname?: string;
38
- query?: SearchInput;
39
- hash?: string;
33
+ pathname?: string
34
+ query?: SearchInput
35
+ hash?: string
40
36
  }
41
37
 
42
38
  export interface NavigateEvent {
43
- preventDefault(): void;
39
+ preventDefault(): void
44
40
  }
45
41
 
46
42
  export type LinkProps = Omit<JSX.HTMLAttributes<HTMLAnchorElement>, 'href' | 'onClick' | 'ref'> & {
47
- href: string | URL | UrlObject;
48
- as?: string | URL | UrlObject;
49
- replace?: boolean;
50
- scroll?: boolean;
51
- prefetch?: boolean | 'auto' | 'unstable_forceStale' | null;
43
+ href: string | URL | UrlObject
44
+ as?: string | URL | UrlObject
45
+ replace?: boolean
46
+ scroll?: boolean
47
+ prefetch?: boolean | 'auto' | 'unstable_forceStale' | null
52
48
  /** Hovering the link upgrades its prefetch to include the dynamic data. */
53
- unstable_dynamicOnHover?: boolean;
54
- locale?: string | false;
55
- legacyBehavior?: boolean;
56
- passHref?: boolean;
57
- onClick?: JSX.MouseEventHandler<HTMLAnchorElement>;
58
- onNavigate?: (event: NavigateEvent) => void;
49
+ unstable_dynamicOnHover?: boolean
50
+ locale?: string | false
51
+ legacyBehavior?: boolean
52
+ passHref?: boolean
53
+ onClick?: JSX.MouseEventHandler<HTMLAnchorElement>
54
+ onNavigate?: (event: NavigateEvent) => void
59
55
  /**
60
56
  * View-transition types declared for the navigation this Link starts, so
61
57
  * `:active-view-transition-type(...)` rules match while it runs. Consumed
62
58
  * here (never forwarded to the anchor as an attribute).
63
59
  */
64
- transitionTypes?: string[];
65
- onPrefetchStart?: () => void;
66
- onPrefetchFinish?: () => void;
60
+ transitionTypes?: string[]
61
+ onPrefetchStart?: () => void
62
+ onPrefetchFinish?: () => void
67
63
  /** @internal Preserves legacy child classification across server resolution. */
68
- __pnextLegacyChildKind?: LegacyChildKind;
69
- ref?: Ref<HTMLAnchorElement>;
70
- children?: ReactNode;
71
- };
64
+ __pnextLegacyChildKind?: LegacyChildKind
65
+ ref?: Ref<HTMLAnchorElement>
66
+ children?: ReactNode
67
+ }
72
68
 
73
69
  // Ref arrives as a prop (React 19 style): the parity vnode pass moves vnode.ref into props for plain
74
70
  // function components, on both server and client, so forwardRef is unnecessary.
@@ -93,7 +89,7 @@ function Link({
93
89
  ...anchorProps
94
90
  }: LinkProps) {
95
91
  // `as` supersedes `href` for what the anchor actually points at (app router).
96
- const target = as == null ? href : as;
92
+ const target = as == null ? href : as
97
93
  // basePath: prefix in-app hrefs so the rendered anchor (and the soft-nav it
98
94
  // drives) points under the configured basePath, matching Next. addBasePath
99
95
  // leaves external/absolute/already-prefixed hrefs untouched, and is a no-op
@@ -101,64 +97,64 @@ function Link({
101
97
  // skipTrailingSlashRedirect preserves the author's exact trailing slash (both
102
98
  // the rendered anchor and the soft-nav it drives); otherwise normalize per
103
99
  // the trailingSlash config so the anchor matches the canonical URL.
104
- const hrefBase = hrefString(target);
100
+ const hrefBase = hrefString(target)
105
101
  const resolvedHref = addBasePath(
106
102
  skipTrailingSlashRedirect() ? hrefBase : applyTrailingSlash(hrefBase),
107
- );
108
- const blocked = isJavascriptUrl(resolvedHref);
109
- const prefetchMode = nextPrefetchMode(prefetch);
110
- const lifecycleRef = usePrefetchLifecycle(onPrefetchStart, onPrefetchFinish);
111
- const anchorRef = useComposedRef(lifecycleRef, forwardedRef);
112
- const statusToken = useLinkToken();
103
+ )
104
+ const blocked = isJavascriptUrl(resolvedHref)
105
+ const prefetchMode = nextPrefetchMode(prefetch)
106
+ const lifecycleRef = usePrefetchLifecycle(onPrefetchStart, onPrefetchFinish)
107
+ const anchorRef = useComposedRef(lifecycleRef, forwardedRef)
108
+ const statusToken = useLinkToken()
113
109
 
114
110
  const handleClick = (event: JSX.TargetedMouseEvent<HTMLAnchorElement>) => {
115
- onClick?.(event);
116
- if (event.defaultPrevented) return;
111
+ onClick?.(event)
112
+ if (event.defaultPrevented) return
117
113
 
118
114
  if (blocked) {
119
115
  // Same guard the runtime applies to static links; a hydrated Link cancels
120
116
  // its own default so the javascript: URL never runs.
121
- if (blockJavascriptUrl(resolvedHref)) event.preventDefault();
122
- return;
117
+ if (blockJavascriptUrl(resolvedHref)) event.preventDefault()
118
+ return
123
119
  }
124
120
 
125
121
  // Modifier/middle clicks, target, download: let the browser handle it;
126
122
  // onNavigate does not fire (matches Next).
127
- if (!isPlainLeftClick(event)) return;
123
+ if (!isPlainLeftClick(event)) return
128
124
 
129
125
  if (isExternalHref(resolvedHref)) {
130
126
  // External hrefs never soft-navigate and never fire onNavigate. `replace`
131
127
  // still swaps history rather than pushing.
132
128
  if (replace) {
133
- event.preventDefault();
134
- window.location.replace(resolvedHref);
129
+ event.preventDefault()
130
+ window.location.replace(resolvedHref)
135
131
  }
136
- return;
132
+ return
137
133
  }
138
134
 
139
135
  // Internal soft navigation: onNavigate can cancel, and this Link drives the
140
136
  // navigation itself so useLinkStatus tracks it. preventDefault keeps the
141
137
  // router's document-level handler from navigating a second time.
142
138
  if (onNavigate) {
143
- const navEvent = navigationEvent();
144
- onNavigate(navEvent);
139
+ const navEvent = navigationEvent()
140
+ onNavigate(navEvent)
145
141
  if (navEvent.defaultPrevented) {
146
- event.preventDefault();
147
- return;
142
+ event.preventDefault()
143
+ return
148
144
  }
149
145
  }
150
146
 
151
- event.preventDefault();
152
- for (const type of transitionTypes ?? []) addTransitionType(type);
153
- const url = new URL(resolvedHref, window.location.href);
147
+ event.preventDefault()
148
+ for (const type of transitionTypes ?? []) addTransitionType(type)
149
+ const url = new URL(resolvedHref, window.location.href)
154
150
  const samePage =
155
- url.pathname === window.location.pathname && url.search === window.location.search;
151
+ url.pathname === window.location.pathname && url.search === window.location.search
156
152
  if (samePage && url.hash) {
157
- window.location.hash = url.hash;
158
- return;
153
+ window.location.hash = url.hash
154
+ return
159
155
  }
160
- navigateWithStatus(statusToken, url.href, { replace, scroll });
161
- };
156
+ navigateWithStatus(statusToken, url.href, { replace, scroll })
157
+ }
162
158
 
163
159
  const anchorAttributes: Record<string, unknown> = {
164
160
  ...anchorProps,
@@ -169,15 +165,16 @@ function Link({
169
165
  // prefetch={true} requests a FULL prefetch (5-min static window) vs the
170
166
  // default partial/dynamic 30s window; the router reads this attribute.
171
167
  // 'unstable_forceStale' is Next 16's alias for the full prefetch mode.
172
- 'data-prefetch-full': prefetch === true || prefetch === 'unstable_forceStale' ? 'true' : undefined,
168
+ 'data-prefetch-full':
169
+ prefetch === true || prefetch === 'unstable_forceStale' ? 'true' : undefined,
173
170
  // unstable_dynamicOnHover: hover intent upgrades the (viewport, partial)
174
171
  // prefetch to a full one that includes the dynamic data.
175
172
  'data-prefetch-hover-full': unstable_dynamicOnHover ? 'true' : undefined,
176
173
  'data-pnext-replace': replace ? 'true' : undefined,
177
174
  'data-pnext-scroll': scroll === false ? 'false' : undefined,
178
175
  onClick: handleClick,
179
- };
180
- if (blocked) anchorAttributes['data-pnext-blocked-href'] = resolvedHref;
176
+ }
177
+ if (blocked) anchorAttributes['data-pnext-blocked-href'] = resolvedHref
181
178
 
182
179
  if (
183
180
  (typeof __PNEXT_LINK_LEGACY__ === 'boolean' ? __PNEXT_LINK_LEGACY__ : true) &&
@@ -190,32 +187,36 @@ function Link({
190
187
  handleClick,
191
188
  anchorAttributes,
192
189
  __pnextLegacyChildKind,
193
- );
190
+ )
194
191
  }
195
192
 
196
193
  return createElement(
197
194
  'a',
198
195
  anchorAttributes,
199
- createElement(LinkStatusContext.Provider, { value: { pending: linkPending(statusToken) } }, children),
200
- ) as ReactElement;
196
+ createElement(
197
+ LinkStatusContext.Provider,
198
+ { value: { pending: linkPending(statusToken) } },
199
+ children,
200
+ ),
201
+ ) as ReactElement
201
202
  }
202
203
 
203
- export default Link;
204
- export { Link };
204
+ export default Link
205
+ export { Link }
205
206
 
206
207
  export function useLinkStatus() {
207
- return useContext(LinkStatusContext);
208
+ return useContext(LinkStatusContext)
208
209
  }
209
210
 
210
211
  // A stable per-Link identity used to key the pending navigation, plus a
211
212
  // re-render on pending change so useLinkStatus consumers update.
212
213
  function useLinkToken() {
213
- const tokenRef = useRef<symbol | null>(null);
214
- tokenRef.current ??= Symbol('pnext-link');
215
- const token = tokenRef.current;
216
- const [, force] = useState(0);
217
- useEffect(() => subscribeLinkStatus(token, () => force(n => n + 1)), [token]);
218
- return token;
214
+ const tokenRef = useRef<symbol | null>(null)
215
+ tokenRef.current ??= Symbol('pnext-link')
216
+ const token = tokenRef.current
217
+ const [, force] = useState(0)
218
+ useEffect(() => subscribeLinkStatus(token, () => force(n => n + 1)), [token])
219
+ return token
219
220
  }
220
221
 
221
222
  // `legacyBehavior`: the single child element becomes the interactive element;
@@ -228,106 +229,110 @@ function renderLegacyChild(
228
229
  anchorAttributes: Record<string, unknown>,
229
230
  annotatedKind?: LegacyChildKind,
230
231
  ): ReactElement {
231
- reportLegacyDeprecation();
232
+ reportLegacyDeprecation()
232
233
  // eslint-disable-next-line turbo/no-undeclared-env-vars
233
- const isDev = process.env.NODE_ENV !== 'production';
234
- const isServer = !process.browser && typeof window === 'undefined';
234
+ const isDev = process.env.NODE_ENV !== 'production'
235
+ const isServer = !process.browser && typeof window === 'undefined'
235
236
 
236
237
  // A React.lazy payload passed directly (not wrapped in JSX) never resolves to
237
238
  // a single element child; Next reports it specifically instead of Children.only.
238
- if (isLazyComponent(children)) throw unsupportedLegacyChildError();
239
+ if (isLazyComponent(children)) throw unsupportedLegacyChildError()
239
240
 
240
241
  if (children == null || children === false) {
241
242
  if (isDev) {
242
243
  throw validationError(
243
244
  `No children were passed to <Link> with \`href\` of \`${resolvedHref}\` but one child is required https://nextjs.org/docs/messages/link-no-children`,
244
245
  'E320',
245
- );
246
+ )
246
247
  }
247
- return childrenOnlyOrThrow(children);
248
+ return childrenOnlyOrThrow(children)
248
249
  }
249
250
 
250
251
  // A bare string/number child renders its own <a> (Next's legacy behavior).
251
252
  if (typeof children === 'string' || typeof children === 'number') {
252
- return createElement('a', { ...anchorAttributes, href: resolvedHref }, children) as unknown as ReactElement;
253
+ return createElement(
254
+ 'a',
255
+ { ...anchorAttributes, href: resolvedHref },
256
+ children,
257
+ ) as unknown as ReactElement
253
258
  }
254
259
 
255
- const count = toChildArray(children as JSX.Element).length;
260
+ const count = toChildArray(children as JSX.Element).length
256
261
  if (count > 1) {
257
262
  if (isDev) {
258
263
  throw validationError(
259
264
  `Multiple children were passed to <Link> with \`href\` of \`${resolvedHref}\` but only one child is supported https://nextjs.org/docs/messages/link-multiple-children`,
260
265
  'E266',
261
- );
266
+ )
262
267
  }
263
- return childrenOnlyOrThrow(children);
268
+ return childrenOnlyOrThrow(children)
264
269
  }
265
270
 
266
- const child = childrenOnlyOrThrow(children) as ReactElement<Record<string, unknown>>;
271
+ const child = childrenOnlyOrThrow(children) as ReactElement<Record<string, unknown>>
267
272
  const kind =
268
273
  annotatedKind ??
269
274
  (isAsyncFunctionComponent(child.type)
270
275
  ? 'server-async'
271
276
  : isLazyComponent(child.type)
272
277
  ? 'lazy'
273
- : undefined);
278
+ : undefined)
274
279
  if (isServer && (kind === 'server-sync' || kind === 'server-async' || kind === 'lazy')) {
275
- reportUnsupportedServerChild(kind, isDev);
280
+ reportUnsupportedServerChild(kind, isDev)
276
281
  }
277
282
  if (kind && kind !== 'server-sync') {
278
- const error = unsupportedLegacyChildError();
283
+ const error = unsupportedLegacyChildError()
279
284
  if (isServer && kind === 'server-async-through-client') {
280
285
  // Print the full trace, not just the message: the thrown error is
281
286
  // swallowed downstream in this path, so without the ` at` frame lines
282
287
  // the server log for this case would end at the message and the console
283
288
  // snapshot (which slices up to the first ` at` line) would pick up the
284
289
  // trailing blank line instead of terminating at the stack.
285
- console.error(`⨯ ${error.stack ?? `Error: ${error.message}`}`);
290
+ console.error(`⨯ ${error.stack ?? `Error: ${error.message}`}`)
286
291
  }
287
- throw error;
292
+ throw error
288
293
  }
289
294
 
290
295
  if (isServer && isDev && isServerComponent(child.type)) {
291
- reportUnsupportedServerChild('server-sync', isDev);
296
+ reportUnsupportedServerChild('server-sync', isDev)
292
297
  }
293
298
 
294
299
  const childProps: Record<string, unknown> = {
295
300
  onClick: (event: JSX.TargetedMouseEvent<HTMLAnchorElement>) => {
296
- (child.props as { onClick?: (event: unknown) => void }).onClick?.(event);
297
- onClick(event);
301
+ ;(child.props as { onClick?: (event: unknown) => void }).onClick?.(event)
302
+ onClick(event)
298
303
  },
299
- };
304
+ }
300
305
  if (passHref || (child.type as unknown) === 'a') {
301
306
  // The child becomes the anchor: give it the href plus the runtime's
302
307
  // soft-nav markers, so navigation/prefetch work even when the child is a
303
308
  // static (unhydrated) element and the onClick prop never runs.
304
- childProps.href = resolvedHref;
305
- childProps['data-pnext-link'] = anchorAttributes['data-pnext-link'];
306
- childProps['data-prefetch'] = anchorAttributes['data-prefetch'];
307
- childProps['data-prefetch-full'] = anchorAttributes['data-prefetch-full'];
308
- childProps['data-prefetch-hover-full'] = anchorAttributes['data-prefetch-hover-full'];
309
- childProps['data-pnext-replace'] = anchorAttributes['data-pnext-replace'];
310
- childProps['data-pnext-scroll'] = anchorAttributes['data-pnext-scroll'];
309
+ childProps.href = resolvedHref
310
+ childProps['data-pnext-link'] = anchorAttributes['data-pnext-link']
311
+ childProps['data-prefetch'] = anchorAttributes['data-prefetch']
312
+ childProps['data-prefetch-full'] = anchorAttributes['data-prefetch-full']
313
+ childProps['data-prefetch-hover-full'] = anchorAttributes['data-prefetch-hover-full']
314
+ childProps['data-pnext-replace'] = anchorAttributes['data-pnext-replace']
315
+ childProps['data-pnext-scroll'] = anchorAttributes['data-pnext-scroll']
311
316
  }
312
- return cloneElement(child as never, childProps) as ReactElement;
317
+ return cloneElement(child as never, childProps) as ReactElement
313
318
  }
314
319
 
315
320
  function reportUnsupportedServerChild(kind: LegacyChildKind, isDev: boolean) {
316
321
  const message =
317
322
  kind === 'lazy'
318
- ? 'Using a Lazy Component as a direct child of `<Link legacyBehavior>` from a Server Component is not supported. If you need legacyBehavior, wrap your Lazy Component in a Client Component that renders the Link\'s `<a>` tag.'
319
- : 'Using a Server Component as a direct child of `<Link legacyBehavior>` is not supported. If you need legacyBehavior, wrap your Server Component in a Client Component that renders the Link\'s `<a>` tag.';
320
- console.error(isDev ? validationError(message, 'E394') : message);
323
+ ? "Using a Lazy Component as a direct child of `<Link legacyBehavior>` from a Server Component is not supported. If you need legacyBehavior, wrap your Lazy Component in a Client Component that renders the Link's `<a>` tag."
324
+ : "Using a Server Component as a direct child of `<Link legacyBehavior>` is not supported. If you need legacyBehavior, wrap your Server Component in a Client Component that renders the Link's `<a>` tag."
325
+ console.error(isDev ? validationError(message, 'E394') : message)
321
326
  }
322
327
 
323
328
  function unsupportedLegacyChildError() {
324
329
  return validationError(
325
- '`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link\'s `<a>` tag.',
330
+ "`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag.",
326
331
  'E863',
327
- );
332
+ )
328
333
  }
329
334
 
330
- let deprecationWarned = false;
335
+ let deprecationWarned = false
331
336
  function reportLegacyDeprecation() {
332
337
  if (
333
338
  deprecationWarned ||
@@ -335,57 +340,54 @@ function reportLegacyDeprecation() {
335
340
  // eslint-disable-next-line turbo/no-undeclared-env-vars
336
341
  process.env.NODE_ENV === 'production'
337
342
  ) {
338
- return;
343
+ return
339
344
  }
340
- deprecationWarned = true;
345
+ deprecationWarned = true
341
346
  console.error(
342
347
  '`legacyBehavior` is deprecated and will be removed in a future release. A codemod is available to upgrade your components:\n\n' +
343
348
  'npx @next/codemod@latest new-link .\n\n' +
344
349
  'Learn more: https://nextjs.org/docs/app/building-your-application/upgrading/codemods#remove-a-tags-from-link-components',
345
- );
350
+ )
346
351
  }
347
352
 
348
353
  function validationError(message: string, digest: string) {
349
- return Object.assign(new Error(message), { digest });
354
+ return Object.assign(new Error(message), { digest })
350
355
  }
351
356
 
352
357
  // React.Children.only semantics on preact core: exactly one element child, with
353
358
  // React's exact error wording for the no-children/multiple-children cases.
354
359
  function childrenOnlyOrThrow(children: ReactNode): ReactElement {
355
- const array = toChildArray(children as JSX.Element);
356
- if (array.length === 1 && isValidElementLike(array[0])) return array[0] as ReactElement;
357
- throw new Error('React.Children.only expected to receive a single React element child.');
360
+ const array = toChildArray(children as JSX.Element)
361
+ if (array.length === 1 && isValidElementLike(array[0])) return array[0] as ReactElement
362
+ throw new Error('React.Children.only expected to receive a single React element child.')
358
363
  }
359
364
 
360
365
  function isValidElementLike(value: unknown) {
361
- return value !== null && typeof value === 'object' && 'type' in value;
366
+ return value !== null && typeof value === 'object' && 'type' in value
362
367
  }
363
368
 
364
369
  function isAsyncFunctionComponent(type: unknown) {
365
- if (typeof type !== 'function') return false;
366
- const asyncFunctionName = Object.prototype.toString.call(type);
367
- return asyncFunctionName === '[object AsyncFunction]';
370
+ if (typeof type !== 'function') return false
371
+ const asyncFunctionName = Object.prototype.toString.call(type)
372
+ return asyncFunctionName === '[object AsyncFunction]'
368
373
  }
369
374
 
370
375
  function isLazyComponent(type: unknown) {
371
- if (type === null || (typeof type !== 'object' && typeof type !== 'function')) return false;
372
- const marked = type as { $$typeof?: unknown } & Record<symbol, unknown>;
373
- return marked.$$typeof === Symbol.for('react.lazy') || marked[Symbol.for('pnext.lazy')] === true;
376
+ if (type === null || (typeof type !== 'object' && typeof type !== 'function')) return false
377
+ const marked = type as { $$typeof?: unknown } & Record<symbol, unknown>
378
+ return marked.$$typeof === Symbol.for('react.lazy') || marked[Symbol.for('pnext.lazy')] === true
374
379
  }
375
380
 
376
381
  function isServerComponent(type: unknown) {
377
- if (isClientComponent(type)) return false;
378
- return (
379
- typeof type === 'function' &&
380
- (type as { $$typeof?: unknown }).$$typeof === undefined
381
- );
382
+ if (isClientComponent(type)) return false
383
+ return typeof type === 'function' && (type as { $$typeof?: unknown }).$$typeof === undefined
382
384
  }
383
385
 
384
386
  function isClientComponent(type: unknown) {
385
387
  return (
386
388
  (typeof type === 'object' || typeof type === 'function') &&
387
389
  (type as { $$typeof?: unknown }).$$typeof === reactClientReferenceSymbol
388
- );
390
+ )
389
391
  }
390
392
 
391
393
  function useComposedRef(
@@ -393,43 +395,41 @@ function useComposedRef(
393
395
  userRef: Ref<HTMLAnchorElement> | undefined,
394
396
  ) {
395
397
  return (node: HTMLAnchorElement | null) => {
396
- internalRef.current = node;
397
- assignRef(userRef, node);
398
- };
398
+ internalRef.current = node
399
+ assignRef(userRef, node)
400
+ }
399
401
  }
400
402
 
401
403
  function assignRef(ref: Ref<HTMLAnchorElement> | undefined, node: HTMLAnchorElement | null) {
402
- if (!ref) return;
404
+ if (!ref) return
403
405
  if (typeof ref === 'function') {
404
406
  // Callback refs may return a cleanup; Preact ignores it, which is fine —
405
407
  // the ref is re-run with null on unmount, matching the manual-cleanup path.
406
- ref(node);
407
- return;
408
+ ref(node)
409
+ return
408
410
  }
409
- ref.current = node;
411
+ ref.current = node
410
412
  }
411
413
 
412
414
  function hrefString(href: string | URL | UrlObject) {
413
- if (typeof href === 'string') return href;
414
- if (href instanceof URL) return href.toString();
415
- return routeHref(href.pathname ?? '', { search: href.query, hash: href.hash });
415
+ if (typeof href === 'string') return href
416
+ if (href instanceof URL) return href.toString()
417
+ return routeHref(href.pathname ?? '', { search: href.query, hash: href.hash })
416
418
  }
417
419
 
418
- function nextPrefetchMode(
419
- prefetch: boolean | 'auto' | 'unstable_forceStale' | null,
420
- ): PrefetchMode {
420
+ function nextPrefetchMode(prefetch: boolean | 'auto' | 'unstable_forceStale' | null): PrefetchMode {
421
421
  // Next's default prefetches when the link enters the viewport; `false` opts
422
422
  // out entirely. (`true`/'auto'/'unstable_forceStale' also map to viewport
423
423
  // prefetch here — 'auto' is an explicit alias for the default.)
424
- return prefetch === false ? false : 'visible';
424
+ return prefetch === false ? false : 'visible'
425
425
  }
426
426
 
427
427
  function isExternalHref(href: string) {
428
- if (!process.browser && typeof window === 'undefined') return false;
428
+ if (!process.browser && typeof window === 'undefined') return false
429
429
  try {
430
- return new URL(href, window.location.href).origin !== window.location.origin;
430
+ return new URL(href, window.location.href).origin !== window.location.origin
431
431
  } catch {
432
- return true;
432
+ return true
433
433
  }
434
434
  }
435
435
 
@@ -437,9 +437,9 @@ function navigationEvent() {
437
437
  return {
438
438
  defaultPrevented: false,
439
439
  preventDefault() {
440
- this.defaultPrevented = true;
440
+ this.defaultPrevented = true
441
441
  },
442
- };
442
+ }
443
443
  }
444
444
 
445
445
  function isPlainLeftClick(event: JSX.TargetedMouseEvent<HTMLAnchorElement>) {
@@ -451,9 +451,9 @@ function isPlainLeftClick(event: JSX.TargetedMouseEvent<HTMLAnchorElement>) {
451
451
  !event.shiftKey &&
452
452
  isSelfTarget(event.currentTarget.target) &&
453
453
  !event.currentTarget.hasAttribute('download')
454
- );
454
+ )
455
455
  }
456
456
 
457
457
  function isSelfTarget(target: string) {
458
- return target === '' || target === '_self';
458
+ return target === '' || target === '_self'
459
459
  }
@@ -1,6 +1,10 @@
1
1
  const router = {
2
- push: () => undefined, replace: () => undefined, prefetch: () => undefined,
3
- refresh: () => undefined, back: () => undefined, forward: () => undefined,
2
+ push: () => undefined,
3
+ replace: () => undefined,
4
+ prefetch: () => undefined,
5
+ refresh: () => undefined,
6
+ back: () => undefined,
7
+ forward: () => undefined,
4
8
  bfcacheId: '',
5
9
  }
6
10
  const noop = () => undefined
@@ -15,7 +19,12 @@ exports.useRouter = () => router
15
19
  exports.usePathname = () => null
16
20
  exports.useSearchParams = () => new URLSearchParams()
17
21
  exports.useParams = () => ({})
18
- exports.useRoute = () => ({ route: null, pathname: '', params: {}, searchParams: new URLSearchParams() })
22
+ exports.useRoute = () => ({
23
+ route: null,
24
+ pathname: '',
25
+ params: {},
26
+ searchParams: new URLSearchParams(),
27
+ })
19
28
  exports.useSelectedLayoutSegment = () => null
20
29
  exports.useSelectedLayoutSegments = () => []
21
30
  exports.useLinkStatus = () => ({ pending: false })