@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
@@ -10,48 +10,48 @@
10
10
  * exactly.
11
11
  */
12
12
 
13
- export type FontDisplay = 'auto' | 'block' | 'swap' | 'fallback' | 'optional';
13
+ export type FontDisplay = 'auto' | 'block' | 'swap' | 'fallback' | 'optional'
14
14
 
15
15
  export interface GoogleFontOptions {
16
- axes?: string[];
17
- adjustFontFallback?: boolean;
18
- display?: FontDisplay;
19
- fallback?: string[];
20
- preload?: boolean;
21
- subsets?: string[];
22
- style?: string | string[];
23
- variable?: string;
24
- weight?: string | string[];
16
+ axes?: string[]
17
+ adjustFontFallback?: boolean
18
+ display?: FontDisplay
19
+ fallback?: string[]
20
+ preload?: boolean
21
+ subsets?: string[]
22
+ style?: string | string[]
23
+ variable?: string
24
+ weight?: string | string[]
25
25
  }
26
26
 
27
27
  export interface LocalFontSource {
28
- path: string;
29
- style?: string;
30
- weight?: string;
28
+ path: string
29
+ style?: string
30
+ weight?: string
31
31
  }
32
32
 
33
33
  export interface LocalFontOptions {
34
- declarations?: { prop: string; value: string }[];
35
- display?: FontDisplay;
36
- fallback?: string[];
37
- preload?: boolean;
38
- src: string | LocalFontSource | LocalFontSource[];
39
- style?: string;
40
- variable?: string;
41
- weight?: string;
34
+ declarations?: { prop: string; value: string }[]
35
+ display?: FontDisplay
36
+ fallback?: string[]
37
+ preload?: boolean
38
+ src: string | LocalFontSource | LocalFontSource[]
39
+ style?: string
40
+ variable?: string
41
+ weight?: string
42
42
  }
43
43
 
44
44
  export interface NextFont {
45
- className: string;
45
+ className: string
46
46
  style: {
47
- fontFamily: string;
48
- fontStyle?: string;
49
- fontWeight?: number | string;
50
- };
47
+ fontFamily: string
48
+ fontStyle?: string
49
+ fontWeight?: number | string
50
+ }
51
51
  }
52
52
 
53
53
  export interface NextFontWithVariable extends NextFont {
54
- variable: string;
54
+ variable: string
55
55
  }
56
56
 
57
57
  /**
@@ -59,26 +59,26 @@ export interface NextFontWithVariable extends NextFont {
59
59
  * Both runtimes derive these from the same inputs, so they agree byte-for-byte.
60
60
  */
61
61
  export interface FontNaming {
62
- className: string;
63
- variable: string;
64
- style: NextFont['style'];
62
+ className: string
63
+ variable: string
64
+ style: NextFont['style']
65
65
  /** Human-readable CSS family label (single, unquoted). */
66
- fontFamily: string;
66
+ fontFamily: string
67
67
  /** 12-char hash used for `__className_<hash>` / `__variable_<hash>`. */
68
- hash: string;
68
+ hash: string
69
69
  /** Whether the loader call requested a CSS variable. When false the returned
70
70
  * font object omits the `variable` key entirely (Next only exposes it when
71
71
  * `variable` was passed). */
72
- hasVariable: boolean;
72
+ hasVariable: boolean
73
73
  }
74
74
 
75
75
  /** Naming for a `next/font/google` loader call: keyed on `{family, options}`. */
76
76
  export function googleFontNaming(family: string, options: GoogleFontOptions): FontNaming {
77
- const normalizedKey = stableJson({ family, options });
78
- const hash = hashString(normalizedKey).slice(0, 12);
77
+ const normalizedKey = stableJson({ family, options })
78
+ const hash = hashString(normalizedKey).slice(0, 12)
79
79
  // Next scopes the family to the human-readable font name (`'Inter'`), not a
80
80
  // hashed token; only the className/variable identifiers are hashed.
81
- const fontFamily = family;
81
+ const fontFamily = family
82
82
  return {
83
83
  className: `__className_${hash}`,
84
84
  variable: `__variable_${hash}`,
@@ -86,7 +86,7 @@ export function googleFontNaming(family: string, options: GoogleFontOptions): Fo
86
86
  hash,
87
87
  hasVariable: Boolean(options.variable),
88
88
  style: fontStyle(fontFamily, options, options.fallback ?? []),
89
- };
89
+ }
90
90
  }
91
91
 
92
92
  /**
@@ -98,12 +98,12 @@ export function localFontNaming(
98
98
  callerFile: string | undefined,
99
99
  options: LocalFontOptions,
100
100
  ): FontNaming {
101
- const normalizedKey = stableJson({ callerFile, options });
102
- const hash = hashString(normalizedKey).slice(0, 12);
101
+ const normalizedKey = stableJson({ callerFile, options })
102
+ const hash = hashString(normalizedKey).slice(0, 12)
103
103
  // Next derives the CSS font-family from the loader call's JS binding
104
104
  // (`variableName`). We reproduce the same human-readable label from the
105
105
  // (first) source filename stem: `font1_roboto.woff2` -> `font1`.
106
- const fontFamily = localFontFamilyLabel(options) ?? `local_${hash}`;
106
+ const fontFamily = localFontFamilyLabel(options) ?? `local_${hash}`
107
107
  return {
108
108
  className: `__className_${hash}`,
109
109
  variable: `__variable_${hash}`,
@@ -111,17 +111,17 @@ export function localFontNaming(
111
111
  hash,
112
112
  hasVariable: Boolean(options.variable),
113
113
  style: fontStyle(fontFamily, options, options.fallback ?? []),
114
- };
114
+ }
115
115
  }
116
116
 
117
117
  /** Human-readable family label from the first local `src` filename stem. */
118
118
  export function localFontFamilyLabel(options: LocalFontOptions): string | undefined {
119
- const first = Array.isArray(options.src) ? options.src[0] : options.src;
120
- const srcPath = typeof first === 'string' ? first : first?.path;
121
- if (!srcPath) return undefined;
122
- const base = srcPath.replace(/^.*[\\/]/, '').replace(/\.[^.]+$/, '');
123
- const stem = base.split('_', 1)[0] ?? base;
124
- return /^[-_a-zA-Z0-9 ]+$/.test(stem) ? stem : undefined;
119
+ const first = Array.isArray(options.src) ? options.src[0] : options.src
120
+ const srcPath = typeof first === 'string' ? first : first?.path
121
+ if (!srcPath) return undefined
122
+ const base = srcPath.replace(/^.*[\\/]/, '').replace(/\.[^.]+$/, '')
123
+ const stem = base.split('_', 1)[0] ?? base
124
+ return /^[-_a-zA-Z0-9 ]+$/.test(stem) ? stem : undefined
125
125
  }
126
126
 
127
127
  export function fontStyle(
@@ -132,18 +132,20 @@ export function fontStyle(
132
132
  // Next exports numeric font-weight and the raw font-style, but only when a
133
133
  // single (non-range) value is set on the loader call.
134
134
  const weight =
135
- typeof options.weight === 'string' && !isRangeValue(options.weight) && !Number.isNaN(Number(options.weight))
135
+ typeof options.weight === 'string' &&
136
+ !isRangeValue(options.weight) &&
137
+ !Number.isNaN(Number(options.weight))
136
138
  ? { fontWeight: Number(cssIdentifier(options.weight)) }
137
- : {};
139
+ : {}
138
140
  const style =
139
141
  typeof options.style === 'string' && !isRangeValue(options.style)
140
142
  ? { fontStyle: cssIdentifier(options.style) }
141
- : {};
143
+ : {}
142
144
  return {
143
145
  fontFamily: familyStack(family, fallbackFonts),
144
146
  ...weight,
145
147
  ...style,
146
- };
148
+ }
147
149
  }
148
150
 
149
151
  /**
@@ -151,41 +153,45 @@ export function fontStyle(
151
153
  * `<family> Fallback` metrics-adjusted fallback (adjustFontFallback defaults
152
154
  * on), then any user fallbacks. Single-quoted to match Next's postcss output.
153
155
  */
154
- export function familyStack(family: string, fallbackFonts: string[] = [], adjustFontFallback = true) {
156
+ export function familyStack(
157
+ family: string,
158
+ fallbackFonts: string[] = [],
159
+ adjustFontFallback = true,
160
+ ) {
155
161
  return [
156
162
  singleQuoteFamily(family),
157
163
  ...(adjustFontFallback ? [singleQuoteFamily(`${family} Fallback`)] : []),
158
164
  ...fallbackFonts.map(singleQuoteFamily),
159
- ].join(', ');
165
+ ].join(', ')
160
166
  }
161
167
 
162
168
  export function singleQuoteFamily(value: string) {
163
- if (!/^[-_a-zA-Z0-9 ]+$/.test(value)) throw new Error(`Invalid font family: ${value}`);
164
- return `'${value}'`;
169
+ if (!/^[-_a-zA-Z0-9 ]+$/.test(value)) throw new Error(`Invalid font family: ${value}`)
170
+ return `'${value}'`
165
171
  }
166
172
 
167
173
  function cssIdentifier(value: string) {
168
- if (!/^[-_a-zA-Z0-9. ]+$/.test(value)) throw new Error(`Invalid font option value: ${value}`);
169
- return value;
174
+ if (!/^[-_a-zA-Z0-9. ]+$/.test(value)) throw new Error(`Invalid font option value: ${value}`)
175
+ return value
170
176
  }
171
177
 
172
178
  function isRangeValue(value: string) {
173
- return value.trim().includes(' ');
179
+ return value.trim().includes(' ')
174
180
  }
175
181
 
176
182
  export function stableJson(value: unknown): string {
177
- return JSON.stringify(sortObject(value));
183
+ return JSON.stringify(sortObject(value))
178
184
  }
179
185
 
180
186
  function sortObject(value: unknown): unknown {
181
- if (Array.isArray(value)) return value.map(sortObject);
182
- if (!value || typeof value !== 'object') return value;
187
+ if (Array.isArray(value)) return value.map(sortObject)
188
+ if (!value || typeof value !== 'object') return value
183
189
  return Object.fromEntries(
184
190
  Object.entries(value as Record<string, unknown>)
185
191
  .filter(([, item]) => item !== undefined)
186
192
  .sort(([a], [b]) => a.localeCompare(b))
187
193
  .map(([key, item]) => [key, sortObject(item)]),
188
- );
194
+ )
189
195
  }
190
196
 
191
197
  /**
@@ -195,12 +201,12 @@ function sortObject(value: unknown): unknown {
195
201
  * font hashes in lock-step.
196
202
  */
197
203
  export function hashString(value: string): string {
198
- return sha256Hex(utf8Bytes(value));
204
+ return sha256Hex(utf8Bytes(value))
199
205
  }
200
206
 
201
207
  function utf8Bytes(value: string): Uint8Array {
202
208
  // TextEncoder is available in browsers and in Node/Bun.
203
- return new TextEncoder().encode(value);
209
+ return new TextEncoder().encode(value)
204
210
  }
205
211
 
206
212
  const K = new Uint32Array([
@@ -212,70 +218,76 @@ const K = new Uint32Array([
212
218
  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
213
219
  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
214
220
  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
215
- ]);
221
+ ])
216
222
 
217
223
  function sha256Hex(message: Uint8Array): string {
218
224
  const h = new Uint32Array([
219
225
  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,
220
- ]);
226
+ ])
221
227
 
222
- const bitLen = message.length * 8;
228
+ const bitLen = message.length * 8
223
229
  // Padded length: message + 0x80 + zeros + 8-byte length, up to a 64-byte block.
224
- const padded = new Uint8Array((((message.length + 8) >> 6) + 1) << 6);
225
- padded.set(message);
226
- padded[message.length] = 0x80;
230
+ const padded = new Uint8Array((((message.length + 8) >> 6) + 1) << 6)
231
+ padded.set(message)
232
+ padded[message.length] = 0x80
227
233
  // 64-bit big-endian bit length in the final 8 bytes (high 32 bits ~always 0
228
234
  // for our short inputs, but write both halves for correctness).
229
- const dv = new DataView(padded.buffer);
230
- dv.setUint32(padded.length - 8, Math.floor(bitLen / 0x100000000));
231
- dv.setUint32(padded.length - 4, bitLen >>> 0);
235
+ const dv = new DataView(padded.buffer)
236
+ dv.setUint32(padded.length - 8, Math.floor(bitLen / 0x100000000))
237
+ dv.setUint32(padded.length - 4, bitLen >>> 0)
232
238
 
233
- const w = new Uint32Array(64);
239
+ const w = new Uint32Array(64)
234
240
  for (let offset = 0; offset < padded.length; offset += 64) {
235
- for (let i = 0; i < 16; i++) w[i] = dv.getUint32(offset + i * 4);
241
+ for (let i = 0; i < 16; i++) w[i] = dv.getUint32(offset + i * 4)
236
242
  for (let i = 16; i < 64; i++) {
237
- const w15 = w[i - 15]!;
238
- const w2 = w[i - 2]!;
239
- const s0 = rotr(w15, 7) ^ rotr(w15, 18) ^ (w15 >>> 3);
240
- const s1 = rotr(w2, 17) ^ rotr(w2, 19) ^ (w2 >>> 10);
241
- w[i] = (w[i - 16]! + s0 + w[i - 7]! + s1) >>> 0;
243
+ const w15 = w[i - 15]!
244
+ const w2 = w[i - 2]!
245
+ const s0 = rotr(w15, 7) ^ rotr(w15, 18) ^ (w15 >>> 3)
246
+ const s1 = rotr(w2, 17) ^ rotr(w2, 19) ^ (w2 >>> 10)
247
+ w[i] = (w[i - 16]! + s0 + w[i - 7]! + s1) >>> 0
242
248
  }
243
249
 
244
- let a = h[0]!, b = h[1]!, c = h[2]!, d = h[3]!;
245
- let e = h[4]!, f = h[5]!, g = h[6]!, hh = h[7]!;
250
+ let a = h[0]!,
251
+ b = h[1]!,
252
+ c = h[2]!,
253
+ d = h[3]!
254
+ let e = h[4]!,
255
+ f = h[5]!,
256
+ g = h[6]!,
257
+ hh = h[7]!
246
258
 
247
259
  for (let i = 0; i < 64; i++) {
248
- const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);
249
- const ch = (e & f) ^ (~e & g);
250
- const t1 = (hh + S1 + ch + K[i]! + w[i]!) >>> 0;
251
- const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);
252
- const maj = (a & b) ^ (a & c) ^ (b & c);
253
- const t2 = (S0 + maj) >>> 0;
254
- hh = g;
255
- g = f;
256
- f = e;
257
- e = (d + t1) >>> 0;
258
- d = c;
259
- c = b;
260
- b = a;
261
- a = (t1 + t2) >>> 0;
260
+ const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25)
261
+ const ch = (e & f) ^ (~e & g)
262
+ const t1 = (hh + S1 + ch + K[i]! + w[i]!) >>> 0
263
+ const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)
264
+ const maj = (a & b) ^ (a & c) ^ (b & c)
265
+ const t2 = (S0 + maj) >>> 0
266
+ hh = g
267
+ g = f
268
+ f = e
269
+ e = (d + t1) >>> 0
270
+ d = c
271
+ c = b
272
+ b = a
273
+ a = (t1 + t2) >>> 0
262
274
  }
263
275
 
264
- h[0] = (h[0]! + a) >>> 0;
265
- h[1] = (h[1]! + b) >>> 0;
266
- h[2] = (h[2]! + c) >>> 0;
267
- h[3] = (h[3]! + d) >>> 0;
268
- h[4] = (h[4]! + e) >>> 0;
269
- h[5] = (h[5]! + f) >>> 0;
270
- h[6] = (h[6]! + g) >>> 0;
271
- h[7] = (h[7]! + hh) >>> 0;
276
+ h[0] = (h[0]! + a) >>> 0
277
+ h[1] = (h[1]! + b) >>> 0
278
+ h[2] = (h[2]! + c) >>> 0
279
+ h[3] = (h[3]! + d) >>> 0
280
+ h[4] = (h[4]! + e) >>> 0
281
+ h[5] = (h[5]! + f) >>> 0
282
+ h[6] = (h[6]! + g) >>> 0
283
+ h[7] = (h[7]! + hh) >>> 0
272
284
  }
273
285
 
274
- let hex = '';
275
- for (let i = 0; i < 8; i++) hex += h[i]!.toString(16).padStart(8, '0');
276
- return hex;
286
+ let hex = ''
287
+ for (let i = 0; i < 8; i++) hex += h[i]!.toString(16).padStart(8, '0')
288
+ return hex
277
289
  }
278
290
 
279
291
  function rotr(value: number, bits: number): number {
280
- return ((value >>> bits) | (value << (32 - bits))) >>> 0;
292
+ return ((value >>> bits) | (value << (32 - bits))) >>> 0
281
293
  }
@@ -1,17 +1,17 @@
1
- 'use client';
1
+ 'use client'
2
2
 
3
- import { useEffect, useRef, type JSX, type ReactNode } from 'preact/compat';
4
- import { prefetchRoute, softNavigate } from '../../api/router';
5
- import { addBasePath } from '../client/base-path';
3
+ import { useEffect, useRef, type JSX, type ReactNode } from 'preact/compat'
4
+ import { prefetchRoute, softNavigate } from '../../client/router'
5
+ import { addBasePath } from '../client/base-path'
6
6
 
7
- type FormAction = string | ((formData: FormData) => void | Promise<void>);
7
+ type FormAction = string | ((formData: FormData) => void | Promise<void>)
8
8
  export type FormProps = Omit<JSX.HTMLAttributes<HTMLFormElement>, 'action' | 'method'> & {
9
- action: FormAction;
10
- replace?: boolean;
11
- scroll?: boolean;
12
- prefetch?: boolean;
13
- children?: ReactNode;
14
- };
9
+ action: FormAction
10
+ replace?: boolean
11
+ scroll?: boolean
12
+ prefetch?: boolean
13
+ children?: ReactNode
14
+ }
15
15
 
16
16
  export default function Form({
17
17
  action,
@@ -22,52 +22,50 @@ export default function Form({
22
22
  children,
23
23
  ...formProps
24
24
  }: FormProps) {
25
- const formRef = useRef<HTMLFormElement | null>(null);
26
- const stringAction = typeof action === 'string' ? action : undefined;
27
- const basePathAction = stringAction == null ? undefined : addBasePath(stringAction);
25
+ const formRef = useRef<HTMLFormElement | null>(null)
26
+ const stringAction = typeof action === 'string' ? action : undefined
27
+ const basePathAction = stringAction == null ? undefined : addBasePath(stringAction)
28
28
 
29
29
  // Function actions are React form actions; pass through untouched so the
30
30
  // renderer wires them (no soft-nav interception, no GET semantics).
31
31
 
32
32
  useEffect(() => {
33
- if (basePathAction == null || prefetch === false) return;
33
+ if (basePathAction == null || prefetch === false) return
34
34
  // No prefetch in dev (per-request rendering); prefetchRoute already no-ops.
35
35
  // Register the form element so a revalidation-triggered retry re-prefetches
36
36
  // visible forms exactly like visible links (the router reads its `action`).
37
- void prefetchRoute(basePathAction, { element: formRef.current ?? undefined });
38
- }, [basePathAction, prefetch]);
37
+ void prefetchRoute(basePathAction, { element: formRef.current ?? undefined })
38
+ }, [basePathAction, prefetch])
39
39
 
40
40
  if (typeof action !== 'string') {
41
41
  return (
42
42
  <form ref={formRef} action={action as never} onSubmit={onSubmit} {...formProps}>
43
43
  {children}
44
44
  </form>
45
- );
45
+ )
46
46
  }
47
47
 
48
48
  const handleSubmit = (event: JSX.TargetedSubmitEvent<HTMLFormElement>) => {
49
- onSubmit?.(event);
50
- if (event.defaultPrevented) return;
49
+ onSubmit?.(event)
50
+ if (event.defaultPrevented) return
51
51
 
52
- const form = event.currentTarget;
52
+ const form = event.currentTarget
53
53
  const submitter = (event as unknown as { submitter?: HTMLElement }).submitter as
54
- | HTMLButtonElement
55
- | HTMLInputElement
56
- | undefined;
54
+ HTMLButtonElement | HTMLInputElement | undefined
57
55
 
58
56
  // A submitter that sets encType/method/target to a non-default value isn't
59
57
  // supported for soft-nav; fall back to the browser's native submit.
60
- if (submitter && hasUnsupportedSubmitterAttr(submitter)) return;
61
- if (submitter && hasReactClientActionAttributes(submitter)) return;
58
+ if (submitter && hasUnsupportedSubmitterAttr(submitter)) return
59
+ if (submitter && hasReactClientActionAttributes(submitter)) return
62
60
 
63
- event.preventDefault();
61
+ event.preventDefault()
64
62
 
65
- const submitterAction = submitter?.getAttribute('formaction');
66
- const target = submitterAction != null ? submitterAction : addBasePath(action);
67
- const destination = createFormSubmitDestinationUrl(target, form);
63
+ const submitterAction = submitter?.getAttribute('formaction')
64
+ const target = submitterAction != null ? submitterAction : addBasePath(action)
65
+ const destination = createFormSubmitDestinationUrl(target, form)
68
66
 
69
- void softNavigate(destination.href, { replace, scroll });
70
- };
67
+ void softNavigate(destination.href, { replace, scroll })
68
+ }
71
69
 
72
70
  return (
73
71
  <form
@@ -79,10 +77,10 @@ export default function Form({
79
77
  >
80
78
  {children}
81
79
  </form>
82
- );
80
+ )
83
81
  }
84
82
 
85
- export { Form };
83
+ export { Form }
86
84
 
87
85
  // encType/method/target set to a non-default value can't be honored by a
88
86
  // soft-nav GET; detect and warn so the caller falls back to native submit.
@@ -90,67 +88,69 @@ const SUBMITTER_ATTRS: { attr: string; name: string; defaults: string[] }[] = [
90
88
  { attr: 'formEncType', name: 'encType', defaults: ['application/x-www-form-urlencoded'] },
91
89
  { attr: 'formMethod', name: 'method', defaults: ['get'] },
92
90
  { attr: 'formTarget', name: 'target', defaults: ['', '_self'] },
93
- ];
91
+ ]
94
92
 
95
93
  function hasUnsupportedSubmitterAttr(submitter: HTMLButtonElement | HTMLInputElement) {
96
94
  for (const { attr, name, defaults } of SUBMITTER_ATTRS) {
97
- const raw = submitter.getAttribute(attr) ?? submitter.getAttribute(attr.toLowerCase());
98
- if (raw == null || raw === '') continue;
99
- if (defaults.includes(raw.toLowerCase())) continue;
100
- reportUnsupportedAttr(name);
101
- return true;
95
+ const raw = submitter.getAttribute(attr) ?? submitter.getAttribute(attr.toLowerCase())
96
+ if (raw == null || raw === '') continue
97
+ if (defaults.includes(raw.toLowerCase())) continue
98
+ reportUnsupportedAttr(name)
99
+ return true
102
100
  }
103
- return false;
101
+ return false
104
102
  }
105
103
 
106
104
  function hasReactClientActionAttributes(submitter: HTMLElement) {
107
- const name = submitter.getAttribute('name');
108
- return Boolean(name && (name.startsWith('$ACTION_ID_') || name.startsWith('$ACTION_REF_')));
105
+ const name = submitter.getAttribute('name')
106
+ return Boolean(name && (name.startsWith('$ACTION_ID_') || name.startsWith('$ACTION_REF_')))
109
107
  }
110
108
 
111
109
  function createFormSubmitDestinationUrl(action: string, form: HTMLFormElement) {
112
- let targetUrl: URL;
110
+ let targetUrl: URL
113
111
  try {
114
- targetUrl = new URL(action, location.href);
112
+ targetUrl = new URL(action, location.href)
115
113
  } catch (error) {
116
114
  throw new Error(`Cannot parse form action "${action}" as a URL`, {
117
115
  cause: error as Error,
118
- });
116
+ })
119
117
  }
120
- if (targetUrl.searchParams.size > 0) targetUrl.search = '';
118
+ if (targetUrl.searchParams.size > 0) targetUrl.search = ''
121
119
 
122
- const data = new FormData(form);
120
+ const data = new FormData(form)
123
121
  for (const [key, value] of data.entries()) {
124
122
  if (typeof value === 'string') {
125
- targetUrl.searchParams.append(key, value);
123
+ targetUrl.searchParams.append(key, value)
126
124
  } else {
127
- warnFileInput();
128
- targetUrl.searchParams.append(key, (value as File).name);
125
+ warnFileInput()
126
+ targetUrl.searchParams.append(key, (value as File).name)
129
127
  }
130
128
  }
131
- return targetUrl;
129
+ return targetUrl
132
130
  }
133
131
 
134
- let reportedAttrs: Set<string> | undefined;
132
+ let reportedAttrs: Set<string> | undefined
135
133
  function reportUnsupportedAttr(name: string) {
136
- if (typeof document === 'undefined' || !isDevDocument()) return;
137
- reportedAttrs ??= new Set();
138
- if (reportedAttrs.has(name)) return;
139
- reportedAttrs.add(name);
134
+ if (typeof document === 'undefined' || !isDevDocument()) return
135
+ reportedAttrs ??= new Set()
136
+ if (reportedAttrs.has(name)) return
137
+ reportedAttrs.add(name)
140
138
  console.error(
141
139
  `<Form>'s \`${name}\` was set to an unsupported value. Only the default value is supported. See https://nextjs.org/docs/app/api-reference/components/form`,
142
- );
140
+ )
143
141
  }
144
142
 
145
- let fileInputWarned = false;
143
+ let fileInputWarned = false
146
144
  function warnFileInput() {
147
- if (fileInputWarned || typeof document === 'undefined' || !isDevDocument()) return;
148
- fileInputWarned = true;
145
+ if (fileInputWarned || typeof document === 'undefined' || !isDevDocument()) return
146
+ fileInputWarned = true
149
147
  console.warn(
150
148
  '<Form> only supports file inputs if `action` is a function. Files will not be submitted with a string action.',
151
- );
149
+ )
152
150
  }
153
151
 
154
152
  function isDevDocument() {
155
- return typeof document !== 'undefined' && Boolean(document.querySelector('script[data-pnext-dev]'));
153
+ return (
154
+ typeof document !== 'undefined' && Boolean(document.querySelector('script[data-pnext-dev]'))
155
+ )
156
156
  }
@@ -1,4 +1,4 @@
1
- import type { ComponentChildren } from 'preact';
1
+ import type { ComponentChildren } from 'preact'
2
2
 
3
3
  /**
4
4
  * Pages-router head hoisting is not supported (Next's own app router rejects
@@ -6,5 +6,5 @@ import type { ComponentChildren } from 'preact';
6
6
  * components that still carry a <Head> don't break.
7
7
  */
8
8
  export default function Head(_props: { children?: ComponentChildren }) {
9
- return null;
9
+ return null
10
10
  }