@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
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 { getDefaultPrefetchMode, 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,
43
40
  replace,
44
41
  scroll,
45
42
  search,
@@ -51,8 +48,10 @@ 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
+ // A link's own prefetch prop wins; otherwise the app-wide config default.
53
+ const prefetchMode = prefetch ?? getDefaultPrefetchMode()
54
+ const anchorRef = usePrefetchLifecycle(onPrefetchStart, onPrefetchFinish)
56
55
  return h(
57
56
  'a',
58
57
  {
@@ -60,50 +59,50 @@ export function Link<Route extends RoutePath>({
60
59
  ref: anchorRef,
61
60
  href: resolvedHref,
62
61
  'data-pnext-link': true,
63
- 'data-prefetch': prefetch === false ? 'false' : prefetch,
62
+ 'data-prefetch': prefetchMode === false ? 'false' : prefetchMode,
64
63
  'data-pnext-replace': replace ? 'true' : undefined,
65
64
  'data-pnext-scroll': scroll === false ? 'false' : undefined,
66
65
  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();
66
+ const clickEvent = event as unknown as LinkMouseEvent
67
+ onClick?.(clickEvent)
68
+ if (clickEvent.defaultPrevented || !onNavigate || !isPlainLeftClick(clickEvent)) return
69
+ const navEvent = navigationEvent()
70
+ onNavigate(navEvent)
71
+ if (navEvent.defaultPrevented) clickEvent.preventDefault()
73
72
  },
74
73
  } as JSX.HTMLAttributes<HTMLAnchorElement>,
75
74
  children as ComponentChildren,
76
- ) as unknown as ReactNode;
75
+ ) as unknown as ReactNode
77
76
  }
78
77
 
79
78
  // The prefetch runtime dispatches lifecycle events on the anchor that
80
79
  // triggered a prefetch, for every mode (intent, visible, load).
81
80
  export function usePrefetchLifecycle(onStart?: () => void, onFinish?: () => void) {
82
- const anchorRef = useRef<HTMLAnchorElement | null>(null);
81
+ const anchorRef = useRef<HTMLAnchorElement | null>(null)
83
82
 
84
83
  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);
84
+ const node = anchorRef.current
85
+ if (!node || (!onStart && !onFinish)) return
86
+ const handleStart = () => onStart?.()
87
+ const handleFinish = () => onFinish?.()
88
+ node.addEventListener('pnext:prefetchstart', handleStart)
89
+ node.addEventListener('pnext:prefetchfinish', handleFinish)
91
90
  return () => {
92
- node.removeEventListener('pnext:prefetchstart', handleStart);
93
- node.removeEventListener('pnext:prefetchfinish', handleFinish);
94
- };
95
- }, [onStart, onFinish]);
91
+ node.removeEventListener('pnext:prefetchstart', handleStart)
92
+ node.removeEventListener('pnext:prefetchfinish', handleFinish)
93
+ }
94
+ }, [onStart, onFinish])
96
95
 
97
- return anchorRef;
96
+ return anchorRef
98
97
  }
99
98
 
100
99
  function navigationEvent() {
101
100
  return {
102
101
  defaultPrevented: false,
103
102
  preventDefault() {
104
- this.defaultPrevented = true;
103
+ this.defaultPrevented = true
105
104
  },
106
- };
105
+ }
107
106
  }
108
107
 
109
108
  function isPlainLeftClick(event: LinkMouseEvent) {
@@ -115,5 +114,5 @@ function isPlainLeftClick(event: LinkMouseEvent) {
115
114
  !event.shiftKey &&
116
115
  !event.currentTarget.target &&
117
116
  !event.currentTarget.download
118
- );
117
+ )
119
118
  }
@@ -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
  }