@wular/pnext 0.0.3 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (392) hide show
  1. package/README.md +11 -11
  2. package/bin/pnext +1 -1
  3. package/config/lint/base.js +7 -7
  4. package/config/ts/base.json +2 -4
  5. package/config/ts/react.json +2 -6
  6. package/package.json +23 -2
  7. package/reference/compat.md +1 -1
  8. package/reference/config.md +2 -2
  9. package/reference/css.md +13 -9
  10. package/reference/dev.md +1 -1
  11. package/reference/metadata.md +7 -7
  12. package/reference/navigation.md +35 -28
  13. package/reference/performance.md +70 -70
  14. package/reference/rendering.md +17 -17
  15. package/reference/routing.md +17 -17
  16. package/reference/typegen.md +12 -8
  17. package/src/api/cache.ts +36 -37
  18. package/src/api/client-cache.ts +2 -2
  19. package/src/api/client-navigation.ts +113 -109
  20. package/src/api/dynamic.tsx +58 -55
  21. package/src/api/link.tsx +49 -52
  22. package/src/api/navigation.ts +59 -58
  23. package/src/api/server.ts +152 -144
  24. package/src/api/suspense.ts +4 -4
  25. package/src/cli/adapters/vercel-warm.ts +126 -121
  26. package/src/cli/adapters/vercel.ts +437 -443
  27. package/src/cli/analyze.ts +333 -144
  28. package/src/cli/{named-bin.ts → boot/named-bin.ts} +37 -37
  29. package/src/cli/{boot-trace.ts → boot/trace.ts} +10 -10
  30. package/src/cli/build.ts +976 -978
  31. package/src/cli/create.ts +71 -63
  32. package/src/cli/dev.ts +116 -116
  33. package/src/cli/index.ts +88 -85
  34. package/src/cli/migrate/package-json.ts +73 -71
  35. package/src/cli/migrate/report.ts +32 -33
  36. package/src/cli/migrate/{index.ts → run.ts} +48 -49
  37. package/src/cli/migrate/scan.ts +46 -46
  38. package/src/cli/migrate/spinner.ts +9 -9
  39. package/src/cli/migrate/tsconfig.ts +35 -35
  40. package/src/cli/{server-entry.ts → serve/entry.ts} +57 -57
  41. package/src/cli/{request-pipeline.ts → serve/pipeline.ts} +386 -394
  42. package/src/cli/{serve-ui.ts → serve/ui.ts} +47 -47
  43. package/src/cli/start.ts +65 -66
  44. package/src/{typegen.ts → cli/typegen.ts} +59 -59
  45. package/src/client/build.ts +794 -768
  46. package/src/client/chunk-fold.ts +245 -240
  47. package/src/client/{paths.ts → chunk-name.ts} +6 -6
  48. package/src/client/entry.ts +162 -147
  49. package/src/client/prebuilt.ts +231 -223
  50. package/src/client/profile.ts +29 -29
  51. package/src/client/react-compiler.ts +20 -15
  52. package/src/client/{compat-surface.ts → react-tier.ts} +64 -64
  53. package/src/client/reference-stub.ts +51 -51
  54. package/src/client/reference.ts +19 -19
  55. package/src/{api → client}/router/events.ts +17 -17
  56. package/src/{api → client}/router/history.ts +16 -16
  57. package/src/{api → client}/router/hub.ts +52 -53
  58. package/src/{api/router.ts → client/router/index.ts} +61 -60
  59. package/src/{api → client}/router/policies.ts +24 -24
  60. package/src/{api → client}/router/runtime.ts +1988 -1961
  61. package/src/{api → client}/router/types.ts +93 -98
  62. package/src/compat/actions/client-plugin.ts +42 -43
  63. package/src/compat/actions/client-stub.ts +14 -14
  64. package/src/compat/actions/{action-client.ts → client.ts} +194 -193
  65. package/src/compat/actions/config.ts +63 -64
  66. package/src/compat/actions/detect.ts +68 -68
  67. package/src/compat/actions/discovery.ts +105 -105
  68. package/src/compat/actions/{action-dispatch.ts → dispatch.ts} +277 -274
  69. package/src/compat/actions/early-submit.ts +1 -1
  70. package/src/compat/actions/endpoint.ts +198 -198
  71. package/src/compat/actions/extensions.ts +811 -0
  72. package/src/compat/actions/flight.ts +23 -23
  73. package/src/compat/actions/form-state.ts +34 -34
  74. package/src/compat/actions/hoist.ts +382 -236
  75. package/src/compat/actions/ids.ts +7 -12
  76. package/src/compat/actions/index.ts +8 -8
  77. package/src/compat/actions/instances.ts +46 -46
  78. package/src/compat/actions/origin.ts +47 -48
  79. package/src/compat/actions/protocol.ts +22 -22
  80. package/src/compat/actions/registry.ts +19 -19
  81. package/src/compat/{misc/action-return.ts → actions/return.ts} +60 -57
  82. package/src/compat/actions/rewrite.ts +125 -125
  83. package/src/compat/actions/{action-router.ts → router.ts} +10 -10
  84. package/src/compat/actions/serve.ts +132 -136
  85. package/src/compat/actions/server-tag.ts +4 -4
  86. package/src/compat/actions/{action-shared.ts → shared.ts} +34 -34
  87. package/src/compat/actions/unrecognized-error.ts +4 -4
  88. package/src/compat/{index.ts → aliases.ts} +112 -109
  89. package/src/compat/bundler/bun-externals.ts +18 -18
  90. package/src/compat/bundler/cjs-exports.ts +271 -223
  91. package/src/compat/bundler/config.ts +116 -111
  92. package/src/compat/bundler/externals.ts +12 -12
  93. package/src/compat/bundler/import-meta-url.ts +19 -19
  94. package/src/compat/bundler/modularize-imports.ts +36 -33
  95. package/src/compat/bundler/new-url-asset.ts +22 -24
  96. package/src/compat/bundler/optimize-package-imports.ts +111 -107
  97. package/src/compat/bundler/polyfill.ts +28 -28
  98. package/src/compat/bundler/react-compiler.ts +35 -29
  99. package/src/compat/bundler/react-profiler.tsx +11 -11
  100. package/src/compat/bundler/relay-transform.ts +48 -47
  101. package/src/compat/bundler/require-context.ts +119 -113
  102. package/src/compat/bundler/resolve-extensions.ts +19 -19
  103. package/src/compat/bundler/source-cache.ts +25 -25
  104. package/src/compat/bundler/static-imports.ts +7 -7
  105. package/src/compat/bundler/symlink-imports.ts +46 -46
  106. package/src/compat/bundler/tsconfig-paths.ts +13 -15
  107. package/src/compat/bundler/wasm.ts +58 -60
  108. package/src/compat/bundler/webpack-loaders.ts +254 -241
  109. package/src/compat/bundler/worker.ts +101 -104
  110. package/src/compat/cache/build-flags.ts +29 -29
  111. package/src/compat/cache/build-prerender-errors.ts +40 -44
  112. package/src/compat/cache/custom-handler.ts +60 -53
  113. package/src/compat/cache/fetch-patch.ts +240 -240
  114. package/src/compat/cache/handler.ts +27 -31
  115. package/src/compat/cache/modern-handler.ts +148 -126
  116. package/src/compat/cache/resume-data-cache.ts +47 -45
  117. package/src/compat/cache/revalidate.ts +233 -232
  118. package/src/compat/cache/runtime-error.ts +35 -35
  119. package/src/compat/cache/use-cache-transform.ts +442 -417
  120. package/src/compat/cache/use-cache.ts +650 -614
  121. package/src/compat/cache-control.ts +140 -142
  122. package/src/compat/client/base-path.ts +21 -20
  123. package/src/compat/client/css-order.ts +18 -18
  124. package/src/compat/client/errors/bare-boundary.ts +11 -11
  125. package/src/compat/client/errors/control-flow.ts +23 -23
  126. package/src/compat/client/errors/error-boundary.ts +61 -61
  127. package/src/compat/client/errors/global-error.ts +101 -91
  128. package/src/compat/client/errors/install.ts +71 -72
  129. package/src/compat/client/errors/lazy.ts +23 -23
  130. package/src/compat/client/errors/primitive-throw.ts +47 -45
  131. package/src/compat/client/errors/soft-refresh.ts +4 -4
  132. package/src/compat/client/link-status.ts +33 -33
  133. package/src/compat/client/{nav-compat-runtime.ts → nav-runtime.ts} +20 -20
  134. package/src/compat/client/{nav-compat.ts → nav.ts} +12 -13
  135. package/src/compat/client/navigation-scroll.ts +63 -63
  136. package/src/compat/client/optimistic-routing.ts +93 -88
  137. package/src/compat/client/prefetch-cache.ts +23 -24
  138. package/src/compat/client/route-announcer.ts +35 -35
  139. package/src/compat/client/segment-cache-policy.ts +20 -20
  140. package/src/compat/client/segment-cache.ts +309 -315
  141. package/src/compat/client/segment-prefetch.ts +127 -132
  142. package/src/compat/client/trailing-slash.ts +5 -4
  143. package/src/compat/css/chunking.ts +113 -116
  144. package/src/compat/css/inline-css.ts +21 -21
  145. package/src/compat/css/lightningcss.ts +37 -38
  146. package/src/compat/css/modules.ts +161 -175
  147. package/src/compat/css/nonce.ts +7 -7
  148. package/src/compat/css/sass-plugin.ts +18 -21
  149. package/src/compat/css/sass.ts +150 -152
  150. package/src/compat/css/styled-jsx-runtime.ts +27 -27
  151. package/src/compat/css/styled-jsx.ts +21 -21
  152. package/src/compat/edge-runtime.ts +27 -27
  153. package/src/compat/{adapter → export}/build-complete.ts +72 -75
  154. package/src/compat/export/client.ts +29 -31
  155. package/src/compat/export/{index.ts → emit.ts} +111 -110
  156. package/src/compat/export/standalone.ts +62 -54
  157. package/src/compat/image-optimizer/cache.ts +51 -49
  158. package/src/compat/image-optimizer/detect.ts +52 -52
  159. package/src/compat/image-optimizer/{index.ts → optimize.ts} +189 -194
  160. package/src/compat/image-optimizer/source.ts +77 -80
  161. package/src/compat/lifecycle/after-scope.ts +26 -26
  162. package/src/compat/lifecycle/after.ts +48 -45
  163. package/src/compat/lifecycle/error-funnel.ts +98 -102
  164. package/src/compat/lifecycle/error-serialize.ts +30 -26
  165. package/src/compat/lifecycle/error-ui.ts +67 -32
  166. package/src/compat/lifecycle/instrumentation-client.ts +36 -38
  167. package/src/compat/lifecycle/instrumentation.ts +85 -85
  168. package/src/compat/lifecycle/node-console.ts +11 -11
  169. package/src/compat/lifecycle/testmode.ts +160 -132
  170. package/src/compat/mdx/compile.ts +60 -57
  171. package/src/compat/mdx/plugin.ts +11 -11
  172. package/src/compat/mdx/{next-mdx-stub.ts → stub.ts} +5 -5
  173. package/src/compat/{metadata-route-artifacts.ts → metadata-artifacts.ts} +195 -191
  174. package/src/compat/metadata.ts +75 -81
  175. package/src/compat/next/cache.ts +68 -69
  176. package/src/compat/next/canonical-url.ts +9 -9
  177. package/src/compat/next/client-cache.ts +19 -19
  178. package/src/compat/next/client-navigation.ts +112 -116
  179. package/src/compat/next/client-only.ts +1 -1
  180. package/src/compat/next/client-script.tsx +99 -93
  181. package/src/compat/next/client-server.ts +10 -10
  182. package/src/compat/next/config-loader.ts +176 -173
  183. package/src/compat/next/config.ts +7 -7
  184. package/src/compat/next/constants.cjs +6 -6
  185. package/src/compat/next/constants.ts +6 -6
  186. package/src/compat/next/custom-server.ts +26 -24
  187. package/src/compat/next/dist/client/components/app-router-headers.ts +21 -21
  188. package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +3 -4
  189. package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -1
  190. package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -1
  191. package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -1
  192. package/src/compat/next/dynamic.tsx +21 -18
  193. package/src/compat/next/error.tsx +52 -52
  194. package/src/compat/next/font/cache.ts +74 -74
  195. package/src/compat/next/font/google.ts +2 -2
  196. package/src/compat/next/font/index.ts +1 -1
  197. package/src/compat/next/font/local.ts +3 -3
  198. package/src/compat/next/font/runtime-client.ts +17 -15
  199. package/src/compat/next/font/runtime.ts +443 -408
  200. package/src/compat/next/font/shared.ts +120 -108
  201. package/src/compat/next/form.tsx +63 -63
  202. package/src/compat/next/head.tsx +2 -2
  203. package/src/compat/next/headers.ts +103 -95
  204. package/src/compat/next/image/client.tsx +220 -0
  205. package/src/compat/next/image/config.ts +56 -58
  206. package/src/compat/next/image/optimizer.ts +40 -36
  207. package/src/compat/next/image/patterns.ts +37 -40
  208. package/src/compat/next/{image-props.ts → image/props.ts} +208 -202
  209. package/src/compat/next/image/shared.ts +65 -57
  210. package/src/compat/next/image/static-metadata.ts +98 -107
  211. package/src/compat/next/image/validate.ts +79 -88
  212. package/src/compat/next/image.tsx +19 -23
  213. package/src/compat/next/index.ts +1 -1
  214. package/src/compat/next/legacy-image.tsx +59 -60
  215. package/src/compat/next/{link-validation-transform.ts → link-transform.ts} +95 -96
  216. package/src/compat/next/link.tsx +158 -158
  217. package/src/compat/next/navigation.cjs +12 -3
  218. package/src/compat/next/navigation.ts +48 -50
  219. package/src/compat/next/offline.ts +27 -27
  220. package/src/compat/next/og.ts +121 -124
  221. package/src/compat/next/preferred-region.ts +13 -14
  222. package/src/compat/next/redirects.ts +58 -56
  223. package/src/compat/next/resource-hints.ts +73 -76
  224. package/src/compat/next/rewrites.ts +130 -133
  225. package/src/compat/next/root-params.ts +45 -45
  226. package/src/compat/next/{optimistic-route-state.ts → route-state.ts} +52 -52
  227. package/src/compat/next/router.cjs +4 -2
  228. package/src/compat/next/router.ts +58 -61
  229. package/src/compat/next/script.tsx +108 -108
  230. package/src/compat/next/server-only.ts +1 -1
  231. package/src/compat/next/server.ts +19 -19
  232. package/src/compat/next/svgr.ts +18 -17
  233. package/src/compat/next/telemetry.ts +24 -24
  234. package/src/compat/next/{image-usage.ts → usage.ts} +70 -39
  235. package/src/compat/next/user-agent.ts +53 -49
  236. package/src/compat/next/web-vitals.ts +22 -24
  237. package/src/compat/otel/api.ts +41 -41
  238. package/src/compat/otel/client-trace-metadata.ts +25 -27
  239. package/src/compat/otel/fetch-span.ts +29 -29
  240. package/src/compat/otel/tracer.ts +331 -331
  241. package/src/compat/pages/api.ts +456 -0
  242. package/src/compat/pages/client-plugin.ts +36 -36
  243. package/src/compat/pages/router-state.ts +34 -34
  244. package/src/compat/pages/{index.ts → router.ts} +130 -135
  245. package/src/compat/ppr/io.ts +12 -12
  246. package/src/compat/ppr/missing-root-params.ts +34 -38
  247. package/src/compat/ppr/root-params-scan.ts +66 -66
  248. package/src/compat/ppr/root-params-transform.ts +24 -26
  249. package/src/compat/ppr/root-params.ts +30 -30
  250. package/src/compat/ppr/segment-config-incompat.ts +6 -7
  251. package/src/compat/protocol.ts +71 -70
  252. package/src/compat/react/action-state.ts +47 -48
  253. package/src/compat/react/client-lite.ts +15 -15
  254. package/src/compat/react/client.ts +4 -4
  255. package/src/compat/react/compiler-runtime.ts +11 -11
  256. package/src/compat/react/dom-client.ts +44 -44
  257. package/src/compat/react/dom-react-server.ts +10 -16
  258. package/src/compat/react/dom-server.ts +10 -10
  259. package/src/compat/react/dom.ts +52 -52
  260. package/src/compat/react/hooks-extra.ts +34 -35
  261. package/src/compat/react/parity.ts +64 -61
  262. package/src/compat/react/preact.ts +81 -82
  263. package/src/compat/react/react-server.ts +28 -28
  264. package/src/compat/react/router-shim.ts +1 -1
  265. package/src/compat/react/server-component-use.ts +8 -8
  266. package/src/compat/react/server-inserted-html.ts +30 -31
  267. package/src/compat/react/server.ts +53 -55
  268. package/src/compat/react/use.ts +32 -32
  269. package/src/compat/react/view-transition.ts +20 -20
  270. package/src/compat/register/actions.ts +35 -824
  271. package/src/compat/register/boot.ts +41 -41
  272. package/src/compat/register/build-tier.ts +5 -5
  273. package/src/compat/register/build.ts +74 -70
  274. package/src/compat/register/bundler.ts +161 -156
  275. package/src/compat/register/cache.ts +20 -20
  276. package/src/compat/register/client-errors.ts +3 -3
  277. package/src/compat/register/config.ts +6 -6
  278. package/src/compat/register/css-extras.ts +30 -34
  279. package/src/compat/register/edge-runtime.ts +3 -3
  280. package/src/compat/register/errors.ts +10 -12
  281. package/src/compat/register/export.ts +16 -16
  282. package/src/compat/register/font.ts +11 -11
  283. package/src/compat/register/hooks.ts +2 -2
  284. package/src/compat/register/image.ts +40 -40
  285. package/src/compat/register/index.ts +59 -62
  286. package/src/compat/register/instrumentation-client.ts +10 -10
  287. package/src/compat/register/lifecycle.ts +25 -28
  288. package/src/compat/register/mdx.ts +10 -10
  289. package/src/compat/register/middleware.ts +226 -16
  290. package/src/compat/register/otel.ts +80 -88
  291. package/src/compat/register/pages-api.ts +10 -463
  292. package/src/compat/register/ppr.ts +16 -16
  293. package/src/compat/register/protocol.ts +17 -18
  294. package/src/compat/register/proxy.ts +49 -51
  295. package/src/compat/register/render.ts +79 -76
  296. package/src/compat/register/routing.ts +162 -159
  297. package/src/compat/register/segment.ts +24 -1887
  298. package/src/compat/register/static-image.ts +3 -3
  299. package/src/compat/register/{misc.ts → taint.ts} +9 -9
  300. package/src/compat/register/typed-routes.ts +14 -14
  301. package/src/compat/register/{usecache.ts → use-cache.ts} +39 -39
  302. package/src/compat/register/validation.ts +18 -18
  303. package/src/compat/segment/loading-boundary.ts +43 -45
  304. package/src/compat/segment/page-slot.ts +69 -69
  305. package/src/compat/segment/serve.ts +1884 -0
  306. package/src/compat/segment/tree.ts +113 -112
  307. package/src/compat/segment/vary-key.ts +38 -38
  308. package/src/compat/segment/vary-params.ts +138 -142
  309. package/src/compat/static-params.ts +14 -12
  310. package/src/compat/tsconfig-defaults.ts +87 -91
  311. package/src/compat/typecheck/{index.ts → check.ts} +234 -212
  312. package/src/compat/typecheck/worker.ts +15 -12
  313. package/src/compat/typed-routes/{index.ts → generate.ts} +36 -36
  314. package/src/compat/typed-routes/manifest.ts +174 -170
  315. package/src/compat/typed-routes/typegen.ts +127 -110
  316. package/src/compat/validation/errors.ts +16 -19
  317. package/src/compat/validation/prerender-diagnostics.ts +521 -504
  318. package/src/compat/validation/{index.ts → validate.ts} +647 -648
  319. package/src/compat-bootstrap.ts +16 -16
  320. package/src/config.ts +69 -69
  321. package/src/css/build.ts +230 -227
  322. package/src/css/postcss.ts +79 -80
  323. package/src/css/worker.ts +14 -15
  324. package/src/dev/client-actions.ts +10 -10
  325. package/src/dev/client-chunk-store.ts +27 -27
  326. package/src/dev/{client-key-cache.ts → restart/client-key.ts} +76 -76
  327. package/src/dev/{restart-cache.ts → restart/enabled.ts} +1 -1
  328. package/src/dev/{global-css-cache.ts → restart/global-css.ts} +91 -83
  329. package/src/dev/{node-module-bundle-cache.ts → restart/node-modules.ts} +24 -24
  330. package/src/dev/{route-bundle-key-cache.ts → restart/route-bundle-key.ts} +53 -53
  331. package/src/dev/{route-facts-cache.ts → restart/route-facts.ts} +82 -82
  332. package/src/dev/server.ts +804 -820
  333. package/src/env.ts +46 -43
  334. package/src/extensions.ts +491 -478
  335. package/src/index.ts +8 -8
  336. package/src/internal.ts +20 -23
  337. package/src/{islands → render}/boundary-error.ts +3 -3
  338. package/src/render/hooks.ts +71 -71
  339. package/src/render/island-context.ts +14 -14
  340. package/src/render/metadata.ts +310 -310
  341. package/src/{ppr-postpone.ts → render/postpone.ts} +5 -5
  342. package/src/{ppr.ts → render/ppr.ts} +244 -245
  343. package/src/render/renderer.ts +2076 -2082
  344. package/src/render/resource-hints.ts +16 -17
  345. package/src/render/slots.tsx +224 -235
  346. package/src/{islands → render}/static-children.ts +9 -12
  347. package/src/{islands → render}/static-slots.ts +37 -37
  348. package/src/{cache/context.ts → request/cache.ts} +20 -20
  349. package/src/request/context.ts +107 -107
  350. package/src/{dynamic/source.ts → resolve/dynamic.ts} +152 -143
  351. package/src/resolve/engine.ts +90 -77
  352. package/src/resolve/imports.ts +475 -463
  353. package/src/resolve/scan-facts.ts +442 -186
  354. package/src/resolve/source-text.ts +37 -37
  355. package/src/{dynamic → resolve}/tree-shake.ts +132 -128
  356. package/src/routing/forwarded.ts +19 -19
  357. package/src/routing/handler.ts +84 -91
  358. package/src/routing/href.ts +69 -70
  359. package/src/routing/{metadata.ts → metadata-files.ts} +403 -401
  360. package/src/{proxy.ts → routing/proxy.ts} +306 -312
  361. package/src/routing/{request-runtime.ts → request-environment.ts} +10 -10
  362. package/src/routing/routes.ts +833 -848
  363. package/src/routing/slots.ts +164 -160
  364. package/src/runtime/loader.ts +952 -0
  365. package/src/{dev → runtime}/module-cache.ts +309 -287
  366. package/src/{dev → runtime}/module-generations.ts +9 -9
  367. package/src/{dev → runtime}/module-transform.ts +81 -72
  368. package/src/{dev/imports.ts → runtime/modules.ts} +934 -847
  369. package/src/runtime/{server.ts → vendor-build.ts} +848 -1696
  370. package/src/runtime/vendor.ts +425 -404
  371. package/src/styles.d.ts +9 -0
  372. package/src/types.ts +320 -335
  373. package/src/utils/ansi.ts +5 -5
  374. package/src/utils/{source.ts → code.ts} +15 -12
  375. package/src/utils/content-type.ts +3 -3
  376. package/src/utils/decode.ts +2 -2
  377. package/src/utils/dev-profile.ts +13 -13
  378. package/src/utils/error-log.ts +6 -6
  379. package/src/utils/esbuild.ts +18 -18
  380. package/src/utils/fs-cache.ts +13 -13
  381. package/src/utils/fs.ts +57 -49
  382. package/src/utils/html.ts +20 -24
  383. package/src/utils/native-require.ts +8 -8
  384. package/src/utils/serialize.ts +139 -146
  385. package/src/utils/verbose.ts +18 -18
  386. package/src/cli/analyze-print.ts +0 -181
  387. package/src/compat/middleware/manifest.ts +0 -210
  388. package/src/compat/next/image-client.tsx +0 -215
  389. package/src/compat/next/link-usage.ts +0 -29
  390. package/src/css/index.ts +0 -2
  391. package/src/render/index.ts +0 -1
  392. package/src/style-modules.d.ts +0 -9
package/src/api/link.tsx CHANGED
@@ -1,45 +1,42 @@
1
- import { h, type ComponentChildren, type JSX } from 'preact';
2
- import { useEffect, useRef } from 'preact/hooks';
3
- import type {
4
- AnchorHTMLAttributes,
5
- MouseEvent,
6
- ReactNode,
7
- } from 'react';
8
- import { routeHref, type SearchInput } from '../routing/href';
9
- import type { PrefetchMode, RouteParams, RoutePath } from '../types';
1
+ import { h, type ComponentChildren, type JSX } from 'preact'
2
+ import { useEffect, useRef } from 'preact/hooks'
3
+ import type { AnchorHTMLAttributes, MouseEvent, ReactNode } from 'react'
4
+ import { routeHref, type SearchInput } from '../routing/href'
5
+ import type { PrefetchMode, RouteParams, RoutePath } from '../types'
10
6
 
11
7
  export interface NavigateEvent {
12
- preventDefault(): void;
8
+ preventDefault(): void
13
9
  }
14
10
 
15
- type LinkMouseEvent = MouseEvent<HTMLAnchorElement>;
11
+ type LinkMouseEvent = MouseEvent<HTMLAnchorElement>
16
12
 
17
13
  type BaseLinkProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href' | 'onClick'> & {
18
- prefetch?: PrefetchMode;
19
- replace?: boolean;
20
- scroll?: boolean;
21
- search?: SearchInput;
22
- hash?: string;
23
- onClick?: (event: LinkMouseEvent) => void;
24
- onNavigate?: (event: NavigateEvent) => void;
25
- onPrefetchStart?: () => void;
26
- onPrefetchFinish?: () => void;
27
- children?: ReactNode;
28
- };
14
+ prefetch?: PrefetchMode
15
+ replace?: boolean
16
+ scroll?: boolean
17
+ search?: SearchInput
18
+ hash?: string
19
+ onClick?: (event: LinkMouseEvent) => void
20
+ onNavigate?: (event: NavigateEvent) => void
21
+ onPrefetchStart?: () => void
22
+ onPrefetchFinish?: () => void
23
+ children?: ReactNode
24
+ }
29
25
 
30
- type ParamsProp<Route extends RoutePath> = RouteParams<Route> extends Record<string, never>
31
- ? { params?: never }
32
- : { params: RouteParams<Route> };
26
+ type ParamsProp<Route extends RoutePath> =
27
+ RouteParams<Route> extends Record<string, never>
28
+ ? { params?: never }
29
+ : { params: RouteParams<Route> }
33
30
 
34
31
  export type LinkProps<Route extends RoutePath = RoutePath> = BaseLinkProps &
35
32
  ParamsProp<Route> & {
36
- href: Route;
37
- };
33
+ href: Route
34
+ }
38
35
 
39
36
  export function Link<Route extends RoutePath>({
40
37
  href,
41
38
  params,
42
- prefetch = 'intent',
39
+ prefetch = 'visible',
43
40
  replace,
44
41
  scroll,
45
42
  search,
@@ -51,8 +48,8 @@ export function Link<Route extends RoutePath>({
51
48
  children,
52
49
  ...anchorProps
53
50
  }: LinkProps<Route>): ReactNode {
54
- const resolvedHref = routeHref(href, { params: params ?? {}, search, hash });
55
- const anchorRef = usePrefetchLifecycle(onPrefetchStart, onPrefetchFinish);
51
+ const resolvedHref = routeHref(href, { params: params ?? {}, search, hash })
52
+ const anchorRef = usePrefetchLifecycle(onPrefetchStart, onPrefetchFinish)
56
53
  return h(
57
54
  'a',
58
55
  {
@@ -64,46 +61,46 @@ export function Link<Route extends RoutePath>({
64
61
  'data-pnext-replace': replace ? 'true' : undefined,
65
62
  'data-pnext-scroll': scroll === false ? 'false' : undefined,
66
63
  onClick: event => {
67
- const clickEvent = event as unknown as LinkMouseEvent;
68
- onClick?.(clickEvent);
69
- if (clickEvent.defaultPrevented || !onNavigate || !isPlainLeftClick(clickEvent)) return;
70
- const navEvent = navigationEvent();
71
- onNavigate(navEvent);
72
- if (navEvent.defaultPrevented) clickEvent.preventDefault();
64
+ const clickEvent = event as unknown as LinkMouseEvent
65
+ onClick?.(clickEvent)
66
+ if (clickEvent.defaultPrevented || !onNavigate || !isPlainLeftClick(clickEvent)) return
67
+ const navEvent = navigationEvent()
68
+ onNavigate(navEvent)
69
+ if (navEvent.defaultPrevented) clickEvent.preventDefault()
73
70
  },
74
71
  } as JSX.HTMLAttributes<HTMLAnchorElement>,
75
72
  children as ComponentChildren,
76
- ) as unknown as ReactNode;
73
+ ) as unknown as ReactNode
77
74
  }
78
75
 
79
76
  // The prefetch runtime dispatches lifecycle events on the anchor that
80
77
  // triggered a prefetch, for every mode (intent, visible, load).
81
78
  export function usePrefetchLifecycle(onStart?: () => void, onFinish?: () => void) {
82
- const anchorRef = useRef<HTMLAnchorElement | null>(null);
79
+ const anchorRef = useRef<HTMLAnchorElement | null>(null)
83
80
 
84
81
  useEffect(() => {
85
- const node = anchorRef.current;
86
- if (!node || (!onStart && !onFinish)) return;
87
- const handleStart = () => onStart?.();
88
- const handleFinish = () => onFinish?.();
89
- node.addEventListener('pnext:prefetchstart', handleStart);
90
- node.addEventListener('pnext:prefetchfinish', handleFinish);
82
+ const node = anchorRef.current
83
+ if (!node || (!onStart && !onFinish)) return
84
+ const handleStart = () => onStart?.()
85
+ const handleFinish = () => onFinish?.()
86
+ node.addEventListener('pnext:prefetchstart', handleStart)
87
+ node.addEventListener('pnext:prefetchfinish', handleFinish)
91
88
  return () => {
92
- node.removeEventListener('pnext:prefetchstart', handleStart);
93
- node.removeEventListener('pnext:prefetchfinish', handleFinish);
94
- };
95
- }, [onStart, onFinish]);
89
+ node.removeEventListener('pnext:prefetchstart', handleStart)
90
+ node.removeEventListener('pnext:prefetchfinish', handleFinish)
91
+ }
92
+ }, [onStart, onFinish])
96
93
 
97
- return anchorRef;
94
+ return anchorRef
98
95
  }
99
96
 
100
97
  function navigationEvent() {
101
98
  return {
102
99
  defaultPrevented: false,
103
100
  preventDefault() {
104
- this.defaultPrevented = true;
101
+ this.defaultPrevented = true
105
102
  },
106
- };
103
+ }
107
104
  }
108
105
 
109
106
  function isPlainLeftClick(event: LinkMouseEvent) {
@@ -115,5 +112,5 @@ function isPlainLeftClick(event: LinkMouseEvent) {
115
112
  !event.shiftKey &&
116
113
  !event.currentTarget.target &&
117
114
  !event.currentTarget.download
118
- );
115
+ )
119
116
  }
@@ -1,23 +1,23 @@
1
- import { routeHref, type SearchInput } from '../routing/href';
2
- import type { RouteParams, RoutePath } from '../types';
1
+ import { routeHref, type SearchInput } from '../routing/href'
2
+ import type { RouteParams, RoutePath } from '../types'
3
3
 
4
- export type { SearchInput, SearchValue } from '../routing/href';
4
+ export type { SearchInput, SearchValue } from '../routing/href'
5
5
 
6
- const notFoundDigest = 'PNEXT_NOT_FOUND';
7
- const redirectDigest = 'PNEXT_REDIRECT';
8
- const forbiddenDigest = 'PNEXT_FORBIDDEN';
9
- const unauthorizedDigest = 'PNEXT_UNAUTHORIZED';
10
- const nextNotFoundDigest = 'NEXT_HTTP_ERROR_FALLBACK;404';
11
- const nextForbiddenDigest = 'NEXT_HTTP_ERROR_FALLBACK;403';
12
- const nextUnauthorizedDigest = 'NEXT_HTTP_ERROR_FALLBACK;401';
6
+ const notFoundDigest = 'PNEXT_NOT_FOUND'
7
+ const redirectDigest = 'PNEXT_REDIRECT'
8
+ const forbiddenDigest = 'PNEXT_FORBIDDEN'
9
+ const unauthorizedDigest = 'PNEXT_UNAUTHORIZED'
10
+ const nextNotFoundDigest = 'NEXT_HTTP_ERROR_FALLBACK;404'
11
+ const nextForbiddenDigest = 'NEXT_HTTP_ERROR_FALLBACK;403'
12
+ const nextUnauthorizedDigest = 'NEXT_HTTP_ERROR_FALLBACK;401'
13
13
 
14
- export type RedirectStatus = 303 | 307 | 308;
14
+ export type RedirectStatus = 303 | 307 | 308
15
15
 
16
16
  class ReadonlyURLSearchParamsError extends Error {
17
17
  constructor() {
18
18
  super(
19
19
  'Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams',
20
- );
20
+ )
21
21
  }
22
22
  }
23
23
 
@@ -29,34 +29,35 @@ class ReadonlyURLSearchParamsError extends Error {
29
29
  export class ReadonlyURLSearchParams extends URLSearchParams {
30
30
  /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. */
31
31
  append(): never {
32
- throw new ReadonlyURLSearchParamsError();
32
+ throw new ReadonlyURLSearchParamsError()
33
33
  }
34
34
  /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. */
35
35
  delete(): never {
36
- throw new ReadonlyURLSearchParamsError();
36
+ throw new ReadonlyURLSearchParamsError()
37
37
  }
38
38
  /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. */
39
39
  set(): never {
40
- throw new ReadonlyURLSearchParamsError();
40
+ throw new ReadonlyURLSearchParamsError()
41
41
  }
42
42
  /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. */
43
43
  sort(): never {
44
- throw new ReadonlyURLSearchParamsError();
44
+ throw new ReadonlyURLSearchParamsError()
45
45
  }
46
46
  }
47
47
 
48
- type ParamsProp<Route extends RoutePath> = RouteParams<Route> extends Record<string, never>
49
- ? { params?: never }
50
- : { params: RouteParams<Route> };
48
+ type ParamsProp<Route extends RoutePath> =
49
+ RouteParams<Route> extends Record<string, never>
50
+ ? { params?: never }
51
+ : { params: RouteParams<Route> }
51
52
 
52
53
  export type HrefOptions<Route extends RoutePath> = ParamsProp<Route> & {
53
- search?: SearchInput;
54
- hash?: string;
55
- };
54
+ search?: SearchInput
55
+ hash?: string
56
+ }
56
57
 
57
58
  export type RedirectOptions<Route extends RoutePath> = HrefOptions<Route> & {
58
- status?: RedirectStatus;
59
- };
59
+ status?: RedirectStatus
60
+ }
60
61
 
61
62
  export function href<Route extends RoutePath>(
62
63
  route: Route,
@@ -64,26 +65,26 @@ export function href<Route extends RoutePath>(
64
65
  ? [options?: HrefOptions<Route>]
65
66
  : [options: HrefOptions<Route>]
66
67
  ) {
67
- return routeHref(route, options);
68
+ return routeHref(route, options)
68
69
  }
69
70
 
70
71
  export class PNextNotFoundError extends Error {
71
- digest = notFoundDigest;
72
+ digest = notFoundDigest
72
73
 
73
74
  constructor() {
74
- super('not found');
75
+ super('not found')
75
76
  }
76
77
  }
77
78
 
78
79
  export function notFound(): never {
79
- throw new PNextNotFoundError();
80
+ throw new PNextNotFoundError()
80
81
  }
81
82
 
82
83
  export class PNextForbiddenError extends Error {
83
- digest = forbiddenDigest;
84
+ digest = forbiddenDigest
84
85
 
85
86
  constructor() {
86
- super('forbidden');
87
+ super('forbidden')
87
88
  }
88
89
  }
89
90
 
@@ -92,14 +93,14 @@ export class PNextForbiddenError extends Error {
92
93
  * `forbidden.{tsx,...}` boundary with a 403. Only active when compat.next is on.
93
94
  */
94
95
  export function forbidden(): never {
95
- throw new PNextForbiddenError();
96
+ throw new PNextForbiddenError()
96
97
  }
97
98
 
98
99
  export class PNextUnauthorizedError extends Error {
99
- digest = unauthorizedDigest;
100
+ digest = unauthorizedDigest
100
101
 
101
102
  constructor() {
102
- super('unauthorized');
103
+ super('unauthorized')
103
104
  }
104
105
  }
105
106
 
@@ -108,50 +109,50 @@ export class PNextUnauthorizedError extends Error {
108
109
  * `unauthorized.{tsx,...}` boundary with a 401. Only active when compat.next is on.
109
110
  */
110
111
  export function unauthorized(): never {
111
- throw new PNextUnauthorizedError();
112
+ throw new PNextUnauthorizedError()
112
113
  }
113
114
 
114
115
  export class PNextRedirectError extends Error {
115
- digest = redirectDigest;
116
+ digest = redirectDigest
116
117
 
117
118
  constructor(
118
119
  public location: string,
119
120
  public status: RedirectStatus = 307,
120
121
  ) {
121
- super(`redirect to ${location}`);
122
+ super(`redirect to ${location}`)
122
123
  }
123
124
  }
124
125
 
125
126
  export function redirect<Route extends RoutePath>(
126
127
  route: Route,
127
128
  options: RedirectOptions<Route>,
128
- ): never;
129
- export function redirect(location: string, status?: RedirectStatus): never;
129
+ ): never
130
+ export function redirect(location: string, status?: RedirectStatus): never
130
131
  export function redirect<Route extends RoutePath>(
131
132
  location: Route | string,
132
133
  optionsOrStatus: RedirectOptions<Route> | RedirectStatus = 307,
133
134
  ): never {
134
135
  if (typeof optionsOrStatus === 'number') {
135
- if (redirectInBrowser(location, 'replace')) return undefined as never;
136
- throw new PNextRedirectError(location, optionsOrStatus);
136
+ if (redirectInBrowser(location, 'replace')) return undefined as never
137
+ throw new PNextRedirectError(location, optionsOrStatus)
137
138
  }
138
- const href = routeHref(location, optionsOrStatus);
139
- if (redirectInBrowser(href, 'replace')) return undefined as never;
140
- throw new PNextRedirectError(href, optionsOrStatus.status ?? 307);
139
+ const href = routeHref(location, optionsOrStatus)
140
+ if (redirectInBrowser(href, 'replace')) return undefined as never
141
+ throw new PNextRedirectError(href, optionsOrStatus.status ?? 307)
141
142
  }
142
143
 
143
144
  export function permanentRedirect<Route extends RoutePath>(
144
145
  route: Route,
145
146
  options: HrefOptions<Route>,
146
- ): never;
147
- export function permanentRedirect(location: string): never;
147
+ ): never
148
+ export function permanentRedirect(location: string): never
148
149
  export function permanentRedirect<Route extends RoutePath>(
149
150
  location: Route | string,
150
151
  options?: HrefOptions<Route>,
151
152
  ): never {
152
- const href = options ? routeHref(location, options) : location;
153
- if (redirectInBrowser(href, 'replace')) return undefined as never;
154
- throw new PNextRedirectError(href, 308);
153
+ const href = options ? routeHref(location, options) : location
154
+ if (redirectInBrowser(href, 'replace')) return undefined as never
155
+ throw new PNextRedirectError(href, 308)
155
156
  }
156
157
 
157
158
  export function isNotFoundError(error: unknown) {
@@ -159,11 +160,11 @@ export function isNotFoundError(error: unknown) {
159
160
  error instanceof PNextNotFoundError ||
160
161
  errorDigest(error) === notFoundDigest ||
161
162
  errorDigest(error) === nextNotFoundDigest
162
- );
163
+ )
163
164
  }
164
165
 
165
166
  export function isRedirectError(error: unknown): error is PNextRedirectError {
166
- return error instanceof PNextRedirectError || errorDigest(error) === redirectDigest;
167
+ return error instanceof PNextRedirectError || errorDigest(error) === redirectDigest
167
168
  }
168
169
 
169
170
  export function isForbiddenError(error: unknown): error is PNextForbiddenError {
@@ -171,7 +172,7 @@ export function isForbiddenError(error: unknown): error is PNextForbiddenError {
171
172
  error instanceof PNextForbiddenError ||
172
173
  errorDigest(error) === forbiddenDigest ||
173
174
  errorDigest(error) === nextForbiddenDigest
174
- );
175
+ )
175
176
  }
176
177
 
177
178
  export function isUnauthorizedError(error: unknown): error is PNextUnauthorizedError {
@@ -179,20 +180,20 @@ export function isUnauthorizedError(error: unknown): error is PNextUnauthorizedE
179
180
  error instanceof PNextUnauthorizedError ||
180
181
  errorDigest(error) === unauthorizedDigest ||
181
182
  errorDigest(error) === nextUnauthorizedDigest
182
- );
183
+ )
183
184
  }
184
185
 
185
186
  function errorDigest(error: unknown) {
186
187
  return typeof error === 'object' && error !== null && 'digest' in error
187
188
  ? (error as { digest?: unknown }).digest
188
- : undefined;
189
+ : undefined
189
190
  }
190
191
 
191
192
  function redirectInBrowser(location: string, mode: 'push' | 'replace') {
192
- if (!process.browser && typeof window === 'undefined') return false;
193
+ if (!process.browser && typeof window === 'undefined') return false
193
194
 
194
- const href = new URL(location, window.location.href).href;
195
- if (mode === 'push') window.location.assign(href);
196
- else window.location.replace(href);
197
- return true;
195
+ const href = new URL(location, window.location.href).href
196
+ if (mode === 'push') window.location.assign(href)
197
+ else window.location.replace(href)
198
+ return true
198
199
  }