@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
@@ -11,14 +11,10 @@
11
11
  // Core owns the generic "merge, do not overwrite" discipline; compat owns the exact Next header
12
12
  // names and values. A pure-core app registers none of this.
13
13
 
14
- import type { ResolvedConfig } from '../config';
15
- import { getWorkUnit, type WorkUnit } from '../request/context';
16
- import type {
17
- RequestInterceptor,
18
- ResponseFinalizer,
19
- ResponseFinalizerContext,
20
- } from '../extensions';
21
- import { nextCompatEnabled } from '../compat';
14
+ import type { ResolvedConfig } from '../config'
15
+ import { getWorkUnit, type WorkUnit } from '../request/context'
16
+ import type { RequestInterceptor, ResponseFinalizer, ResponseFinalizerContext } from '../extensions'
17
+ import { nextCompatEnabled } from '../compat/aliases'
22
18
 
23
19
  // Next's router vary tokens appended to every app-router response so a CDN
24
20
  // keys its cache on the RSC negotiation headers. Order + spelling match Next.
@@ -27,20 +23,20 @@ const ROUTER_VARY = [
27
23
  'next-router-state-tree',
28
24
  'next-router-prefetch',
29
25
  'next-router-segment-prefetch',
30
- ];
26
+ ]
31
27
 
32
28
  /** Rewrite tracking recorded per request by the compat rewrite interceptor. */
33
29
  interface RewriteInfo {
34
30
  /** Destination pathname, only when it differs from the requested one. */
35
- path?: string;
31
+ path?: string
36
32
  /** Destination query (without leading `?`), only when non-empty. */
37
- query?: string;
33
+ query?: string
38
34
  }
39
35
 
40
36
  // Keyed on the request's work unit (stable for the whole response lifecycle);
41
37
  // the interceptor writes it, the finalizer reads it. A WeakMap so completed
42
38
  // requests are collected without any explicit teardown.
43
- const rewrites = new WeakMap<WorkUnit, RewriteInfo>();
39
+ const rewrites = new WeakMap<WorkUnit, RewriteInfo>()
44
40
 
45
41
  /**
46
42
  * Record that a compat rewrite changed the request URL from `from` to `to`.
@@ -48,66 +44,71 @@ const rewrites = new WeakMap<WorkUnit, RewriteInfo>();
48
44
  * no-op outside a request work unit or when the URL did not actually change.
49
45
  */
50
46
  export function recordRewrite(from: URL, to: URL): void {
51
- const unit = getWorkUnit();
52
- if (!unit) return;
53
- if (from.pathname === to.pathname && from.search === to.search) return;
54
- const query = to.search.replace(/^\?/, '');
47
+ const unit = getWorkUnit()
48
+ if (!unit) return
49
+ if (from.pathname === to.pathname && from.search === to.search) return
50
+ const query = to.search.replace(/^\?/, '')
55
51
  // Next reports the path header only when the pathname actually changed, and
56
52
  // the query header only when the destination carries a query (a query-only
57
53
  // rewrite reports query alone; a path-only rewrite reports path alone).
58
54
  rewrites.set(unit, {
59
55
  ...(to.pathname !== from.pathname ? { path: to.pathname } : {}),
60
56
  ...(query ? { query } : {}),
61
- });
57
+ })
62
58
  }
63
59
 
64
60
  /**
65
61
  * Internal marker set by the segment responder's `_rsc` cache-busting 307 so
66
62
  * this module's redirect normalization leaves it alone. Never reaches a client.
67
63
  */
68
- export const CACHE_BUSTING_REDIRECT_HEADER = 'x-pnext-cache-bust';
64
+ export const CACHE_BUSTING_REDIRECT_HEADER = 'x-pnext-cache-bust'
69
65
 
70
66
  const APP_ROUTE_KINDS = new Set<ResponseFinalizerContext['routeKind']>([
71
67
  'html',
72
68
  'data',
73
69
  'route-handler',
74
- ]);
70
+ ])
75
71
 
76
72
  const protocolFinalizer: ResponseFinalizer = ctx => {
77
- if (!APP_ROUTE_KINDS.has(ctx.routeKind)) return;
78
- mergeVary(ctx.headers, ROUTER_VARY);
79
- normalizeRscRedirectStatus(ctx);
80
- applyRewrittenHeaders(ctx);
81
- applyEdgeRuntimeHeader(ctx);
82
- };
73
+ if (!APP_ROUTE_KINDS.has(ctx.routeKind)) return
74
+ mergeVary(ctx.headers, ROUTER_VARY)
75
+ normalizeRscRedirectStatus(ctx)
76
+ applyRewrittenHeaders(ctx)
77
+ applyEdgeRuntimeHeader(ctx)
78
+ }
83
79
 
84
80
  // Next's edge SSR/route wrappers stamp `x-edge-runtime: 1` on every response
85
81
  // from a route whose segment config selects the edge runtime (edge-ssr-app.ts).
86
82
  // The matched route's runtime rides on the work-unit response hints.
87
83
  function applyEdgeRuntimeHeader(ctx: ResponseFinalizerContext): void {
88
- const runtime = ctx.hints?.runtime;
84
+ const runtime = ctx.hints?.runtime
89
85
  if (runtime === 'edge' || runtime === 'experimental-edge') {
90
- ctx.headers.set('x-edge-runtime', '1');
86
+ ctx.headers.set('x-edge-runtime', '1')
91
87
  }
92
88
  }
93
89
 
94
90
  // Append `values` to the response's Vary header, preserving any existing tokens
95
91
  // (user- or middleware-set) and never duplicating (case-insensitive).
96
92
  function mergeVary(headers: Headers, values: readonly string[]): void {
97
- const existing = headers.get('vary');
93
+ const existing = headers.get('vary')
98
94
  const present = new Set(
99
95
  (existing ?? '')
100
96
  .split(',')
101
97
  .map(token => token.trim().toLowerCase())
102
98
  .filter(Boolean),
103
- );
104
- const merged = existing ? existing.split(',').map(token => token.trim()).filter(Boolean) : [];
99
+ )
100
+ const merged = existing
101
+ ? existing
102
+ .split(',')
103
+ .map(token => token.trim())
104
+ .filter(Boolean)
105
+ : []
105
106
  for (const value of values) {
106
- if (present.has(value.toLowerCase())) continue;
107
- present.add(value.toLowerCase());
108
- merged.push(value);
107
+ if (present.has(value.toLowerCase())) continue
108
+ present.add(value.toLowerCase())
109
+ merged.push(value)
109
110
  }
110
- if (merged.length > 0) headers.set('vary', merged.join(', '));
111
+ if (merged.length > 0) headers.set('vary', merged.join(', '))
111
112
  }
112
113
 
113
114
  // Emit x-nextjs-rewritten-path/query when a compat rewrite changed this
@@ -116,13 +117,13 @@ function mergeVary(headers: Headers, values: readonly string[]): void {
116
117
  // them. Each header is set only when the rewrite recorded that part. Absent on
117
118
  // non-rewritten responses (the WeakMap has no entry).
118
119
  function applyRewrittenHeaders(ctx: ResponseFinalizerContext): void {
119
- if (ctx.request.headers.get('rsc') !== '1') return;
120
- const unit = getWorkUnit();
121
- if (!unit) return;
122
- const info = rewrites.get(unit);
123
- if (!info) return;
124
- if (info.path !== undefined) ctx.headers.set('x-nextjs-rewritten-path', info.path);
125
- if (info.query !== undefined) ctx.headers.set('x-nextjs-rewritten-query', info.query);
120
+ if (ctx.request.headers.get('rsc') !== '1') return
121
+ const unit = getWorkUnit()
122
+ if (!unit) return
123
+ const info = rewrites.get(unit)
124
+ if (!info) return
125
+ if (info.path !== undefined) ctx.headers.set('x-nextjs-rewritten-path', info.path)
126
+ if (info.query !== undefined) ctx.headers.set('x-nextjs-rewritten-query', info.query)
126
127
  }
127
128
 
128
129
  function normalizeRscRedirectStatus(ctx: ResponseFinalizerContext): void {
@@ -130,19 +131,19 @@ function normalizeRscRedirectStatus(ctx: ResponseFinalizerContext): void {
130
131
  // an app redirect(): Next sends it as a real 307 that every client follows,
131
132
  // so it must survive this normalization. The marker is internal — strip it.
132
133
  if (ctx.headers.has(CACHE_BUSTING_REDIRECT_HEADER)) {
133
- ctx.headers.delete(CACHE_BUSTING_REDIRECT_HEADER);
134
- return;
134
+ ctx.headers.delete(CACHE_BUSTING_REDIRECT_HEADER)
135
+ return
135
136
  }
136
- if (ctx.routeKind !== 'html') return;
137
- if (ctx.request.headers.get('rsc') !== '1') return;
137
+ if (ctx.routeKind !== 'html') return
138
+ if (ctx.request.headers.get('rsc') !== '1') return
138
139
  // pnext's own soft-nav client sends rsc:1 but follows real redirects via
139
140
  // fetch (it reads response.url as the final URL); rewriting 307/308 to 200
140
141
  // would strand it on the source URL. The 200+Location wire form is only
141
142
  // meaningful to Next's client, which never sends x-pnext-soft-nav.
142
- if (ctx.request.headers.has('x-pnext-soft-nav')) return;
143
- if (!ctx.headers.has('location')) return;
144
- if (ctx.status !== 307 && ctx.status !== 308) return;
145
- ctx.status = 200;
143
+ if (ctx.request.headers.has('x-pnext-soft-nav')) return
144
+ if (!ctx.headers.has('location')) return
145
+ if (ctx.status !== 307 && ctx.status !== 308) return
146
+ ctx.status = 200
146
147
  }
147
148
 
148
149
  // next-router-state-tree validation (Next's parseAndValidateFlightRouterState).
@@ -154,49 +155,49 @@ function normalizeRscRedirectStatus(ctx: ResponseFinalizerContext): void {
154
155
  // rejected. Anything Next's own client can send passes untouched.
155
156
 
156
157
  function isValidFlightRouterState(value: unknown): boolean {
157
- if (!Array.isArray(value)) return false;
158
- const [segment, parallelRoutes] = value as unknown[];
159
- if (typeof segment !== 'string' && !Array.isArray(segment)) return false;
160
- if (typeof parallelRoutes !== 'object' || parallelRoutes === null) return false;
161
- if (Array.isArray(parallelRoutes)) return false;
162
- return Object.values(parallelRoutes as Record<string, unknown>).every(isValidFlightRouterState);
158
+ if (!Array.isArray(value)) return false
159
+ const [segment, parallelRoutes] = value as unknown[]
160
+ if (typeof segment !== 'string' && !Array.isArray(segment)) return false
161
+ if (typeof parallelRoutes !== 'object' || parallelRoutes === null) return false
162
+ if (Array.isArray(parallelRoutes)) return false
163
+ return Object.values(parallelRoutes as Record<string, unknown>).every(isValidFlightRouterState)
163
164
  }
164
165
 
165
166
  const routerStateTreeInterceptor: RequestInterceptor = request =>
166
- Promise.resolve(validateRouterStateTree(request));
167
+ Promise.resolve(validateRouterStateTree(request))
167
168
 
168
169
  function validateRouterStateTree(request: Request): Response | undefined {
169
- if (request.headers.get('rsc') !== '1') return undefined;
170
+ if (request.headers.get('rsc') !== '1') return undefined
170
171
  // pnext's own client mirrors its richer nav-state object into this header for
171
- // wire compat (api/router.ts); that object is not a FlightRouterState and is
172
+ // wire compat (client/router/index.ts); that object is not a FlightRouterState and is
172
173
  // never what this check is about.
173
- if (request.headers.has('x-pnext-soft-nav')) return undefined;
174
- const header = request.headers.get('next-router-state-tree');
175
- if (header === null) return undefined;
174
+ if (request.headers.has('x-pnext-soft-nav')) return undefined
175
+ const header = request.headers.get('next-router-state-tree')
176
+ if (header === null) return undefined
176
177
 
177
- let tree: unknown;
178
+ let tree: unknown
178
179
  try {
179
- tree = JSON.parse(decodeURIComponent(header));
180
+ tree = JSON.parse(decodeURIComponent(header))
180
181
  } catch {
181
182
  try {
182
- tree = JSON.parse(header);
183
+ tree = JSON.parse(header)
183
184
  } catch {
184
- return new Response('Internal Server Error', { status: 500 });
185
+ return new Response('Internal Server Error', { status: 500 })
185
186
  }
186
187
  }
187
188
  return isValidFlightRouterState(tree)
188
189
  ? undefined
189
- : new Response('Internal Server Error', { status: 500 });
190
+ : new Response('Internal Server Error', { status: 500 })
190
191
  }
191
192
 
192
193
  /** The compat request interceptors this module owns, gated on compat.next. */
193
194
  export function protocolInterceptors(config: ResolvedConfig): RequestInterceptor[] {
194
- if (!nextCompatEnabled(config)) return [];
195
- return [routerStateTreeInterceptor];
195
+ if (!nextCompatEnabled(config)) return []
196
+ return [routerStateTreeInterceptor]
196
197
  }
197
198
 
198
199
  /** The compat protocol finalizers, gated on compat.next. */
199
200
  export function protocolFinalizers(config: ResolvedConfig): ResponseFinalizer[] {
200
- if (!nextCompatEnabled(config)) return [];
201
- return [protocolFinalizer];
201
+ if (!nextCompatEnabled(config)) return []
202
+ return [protocolFinalizer]
202
203
  }
@@ -1,5 +1,5 @@
1
- import { useCallback, useRef, useState } from 'preact/hooks';
2
- import { hooksUsable } from './hooks-extra';
1
+ import { useCallback, useRef, useState } from 'preact/hooks'
2
+ import { hooksUsable } from './hooks-extra'
3
3
 
4
4
  /**
5
5
  * React 19's useActionState, on preact hooks. Returns [state, dispatch, isPending]; dispatch(payload)
@@ -21,25 +21,25 @@ export function useActionState<State, Payload = FormData>(
21
21
  // <form action={dispatch}>.
22
22
  if (!hooksUsable()) {
23
23
  const staticInitial = (consumeActionStateOverride() ?? { value: initialState })
24
- .value as Awaited<State>;
24
+ .value as Awaited<State>
25
25
  const staticDispatch = (payload: Payload) =>
26
- void Promise.resolve(action(staticInitial, payload));
27
- tagFormStateDispatch(staticDispatch, action, staticInitial, _permalink);
28
- return [staticInitial, staticDispatch, false];
26
+ void Promise.resolve(action(staticInitial, payload))
27
+ tagFormStateDispatch(staticDispatch, action, staticInitial, _permalink)
28
+ return [staticInitial, staticDispatch, false]
29
29
  }
30
- const initialRef = useRef<{ value: Awaited<State> } | null>(null);
30
+ const initialRef = useRef<{ value: Awaited<State> } | null>(null)
31
31
  if (!initialRef.current) {
32
32
  // A progressive (no-JS) submission re-renders the page with the action's
33
33
  // result as the form state; the server (and the inline hydration script)
34
34
  // publish it via a consumed-once global override.
35
35
  initialRef.current = {
36
36
  value: (consumeActionStateOverride() ?? { value: initialState }).value as Awaited<State>,
37
- };
37
+ }
38
38
  }
39
- const [state, setState] = useState<Awaited<State>>(initialRef.current.value);
40
- const [pending, setPending] = useState(0);
41
- const lastSettled = useRef<Awaited<State>>(initialRef.current.value);
42
- const chain = useRef<Promise<unknown>>(Promise.resolve());
39
+ const [state, setState] = useState<Awaited<State>>(initialRef.current.value)
40
+ const [pending, setPending] = useState(0)
41
+ const lastSettled = useRef<Awaited<State>>(initialRef.current.value)
42
+ const chain = useRef<Promise<unknown>>(Promise.resolve())
43
43
  // A rejected action must surface to the nearest error boundary during an actual preact render (only
44
44
  // diff() wraps component calls in the getDerivedStateFromError/componentDidCatch try/catch).
45
45
  // preact/hooks' setState invokes a functional updater EAGERLY at call time, to bail out on an unchanged
@@ -47,55 +47,55 @@ export function useActionState<State, Payload = FormData>(
47
47
  // async .catch handler throws immediately in that microtask, outside any render call stack and outside
48
48
  // any try/catch, producing an unhandled rejection instead of reaching the boundary. Stash the error in
49
49
  // a ref and force a re-render instead; the throw then happens inside this hook's own render call.
50
- const pendingError = useRef<{ error: unknown } | null>(null);
51
- const [, forceRender] = useState(0);
50
+ const pendingError = useRef<{ error: unknown } | null>(null)
51
+ const [, forceRender] = useState(0)
52
52
 
53
53
  const dispatch = useCallback(
54
54
  (payload: Payload) => {
55
- setPending(count => count + 1);
55
+ setPending(count => count + 1)
56
56
  // Chain in dispatch order against the latest settled state. A rejected
57
57
  // action leaves the previous state in place (matching React, where the
58
58
  // error propagates to the nearest error boundary via the transition) and
59
59
  // must not poison the queue for later dispatches.
60
60
  chain.current = chain.current.then(async () => {
61
61
  try {
62
- const redirectsBefore = actionRedirectCount();
63
- const next = (await action(lastSettled.current, payload));
62
+ const redirectsBefore = actionRedirectCount()
63
+ const next = await action(lastSettled.current, payload)
64
64
  // A redirect renders the destination's initial form state even when
65
65
  // the shared layout island itself survives the navigation.
66
66
  if (next === undefined && actionRedirectCount() !== redirectsBefore) {
67
- lastSettled.current = initialRef.current!.value;
68
- setState(() => initialRef.current!.value);
69
- return;
67
+ lastSettled.current = initialRef.current!.value
68
+ setState(() => initialRef.current!.value)
69
+ return
70
70
  }
71
- lastSettled.current = next;
72
- setState(() => next);
71
+ lastSettled.current = next
72
+ setState(() => next)
73
73
  } finally {
74
- setPending(count => count - 1);
74
+ setPending(count => count - 1)
75
75
  }
76
- });
76
+ })
77
77
  // React propagates action errors to the nearest error boundary (they
78
78
  // are not catchable at the dispatch site). Stash it and force a render:
79
79
  // a class error boundary in the tree catches the throw below; without
80
80
  // one the uncaught render error reaches the window 'error' event, where
81
81
  // the compat entry's error.js overlay picks it up.
82
82
  chain.current = chain.current.catch(error => {
83
- if (!process.browser && typeof window === 'undefined') return;
84
- pendingError.current = { error };
85
- forceRender(count => count + 1);
86
- });
83
+ if (!process.browser && typeof window === 'undefined') return
84
+ pendingError.current = { error }
85
+ forceRender(count => count + 1)
86
+ })
87
87
  },
88
88
  [action],
89
- );
89
+ )
90
90
 
91
91
  if (pendingError.current) {
92
- const { error } = pendingError.current;
93
- pendingError.current = null;
94
- throw error;
92
+ const { error } = pendingError.current
93
+ pendingError.current = null
94
+ throw error
95
95
  }
96
96
 
97
- tagFormStateDispatch(dispatch, action, state, _permalink);
98
- return [state, dispatch, pending > 0];
97
+ tagFormStateDispatch(dispatch, action, state, _permalink)
98
+ return [state, dispatch, pending > 0]
99
99
  }
100
100
 
101
101
  /**
@@ -106,9 +106,9 @@ export function useActionState<State, Payload = FormData>(
106
106
  * optional permalink target.
107
107
  */
108
108
  export interface FormStateDispatchMeta {
109
- action: (state: never, payload: never) => unknown;
110
- state: unknown;
111
- permalink?: string;
109
+ action: (state: never, payload: never) => unknown
110
+ state: unknown
111
+ permalink?: string
112
112
  }
113
113
 
114
114
  function tagFormStateDispatch(
@@ -117,11 +117,11 @@ function tagFormStateDispatch(
117
117
  state: unknown,
118
118
  permalink?: string,
119
119
  ) {
120
- (dispatch as unknown as { $$pnextFormState?: FormStateDispatchMeta }).$$pnextFormState = {
120
+ ;(dispatch as unknown as { $$pnextFormState?: FormStateDispatchMeta }).$$pnextFormState = {
121
121
  action: action,
122
122
  state,
123
123
  ...(permalink !== undefined ? { permalink } : {}),
124
- };
124
+ }
125
125
  }
126
126
 
127
127
  /**
@@ -131,13 +131,13 @@ function tagFormStateDispatch(
131
131
  */
132
132
  /** Redirect counter the action-client runtime bumps (see markActionRedirected). */
133
133
  function actionRedirectCount(): number {
134
- return (globalThis as { __pnextActionRedirects?: number }).__pnextActionRedirects ?? 0;
134
+ return (globalThis as { __pnextActionRedirects?: number }).__pnextActionRedirects ?? 0
135
135
  }
136
136
 
137
137
  export function consumeActionStateOverride(): { value: unknown } | undefined {
138
- const holder = globalThis as { __PNEXT_ACTION_STATE__?: unknown };
139
- if (!('__PNEXT_ACTION_STATE__' in holder)) return undefined;
140
- const override = holder.__PNEXT_ACTION_STATE__;
138
+ const holder = globalThis as { __PNEXT_ACTION_STATE__?: unknown }
139
+ if (!('__PNEXT_ACTION_STATE__' in holder)) return undefined
140
+ const override = holder.__PNEXT_ACTION_STATE__
141
141
  if (
142
142
  override !== null &&
143
143
  typeof override === 'object' &&
@@ -145,15 +145,14 @@ export function consumeActionStateOverride(): { value: unknown } | undefined {
145
145
  typeof override.skip === 'number' &&
146
146
  override.skip > 0
147
147
  ) {
148
- override.skip--;
149
- return undefined;
148
+ override.skip--
149
+ return undefined
150
150
  }
151
- delete holder.__PNEXT_ACTION_STATE__;
151
+ delete holder.__PNEXT_ACTION_STATE__
152
152
  return {
153
153
  value:
154
154
  override !== null && typeof override === 'object' && 'value' in override
155
155
  ? override.value
156
156
  : override,
157
- };
157
+ }
158
158
  }
159
-
@@ -1,8 +1,8 @@
1
1
  // Lite client `react` alias for compat apps whose client graph provably never suspends and only uses
2
- // the core-preact-equivalent React surface (see clientCompatSurface in src/client/compat-surface.ts).
2
+ // the core-preact-equivalent React surface (see clientCompatSurface in src/client/react-tier.ts).
3
3
  // Everything here is backed by preact core + preact/hooks, so the bundle ships no preact/compat. The
4
4
  // parity import wires the same vnode pass (React 19 ref prop, primitive-throw safety) as the full shim.
5
- import './parity';
5
+ import './parity'
6
6
  import {
7
7
  Component,
8
8
  Fragment,
@@ -11,7 +11,7 @@ import {
11
11
  createElement,
12
12
  createRef,
13
13
  isValidElement,
14
- } from 'preact';
14
+ } from 'preact'
15
15
  import {
16
16
  useCallback,
17
17
  useContext,
@@ -24,9 +24,9 @@ import {
24
24
  useReducer,
25
25
  useRef,
26
26
  useState,
27
- } from 'preact/hooks';
28
- import { useOptimistic, useTransition } from './hooks-extra';
29
- import { useActionState } from './action-state';
27
+ } from 'preact/hooks'
28
+ import { useOptimistic, useTransition } from './hooks-extra'
29
+ import { useActionState } from './action-state'
30
30
 
31
31
  export {
32
32
  Component,
@@ -50,24 +50,24 @@ export {
50
50
  useActionState,
51
51
  useOptimistic,
52
52
  useTransition,
53
- };
54
- export { ViewTransition, addTransitionType } from './view-transition';
53
+ }
54
+ export { ViewTransition, addTransitionType } from './view-transition'
55
55
 
56
56
  // Same passthrough semantics preact/compat gives these.
57
- export const StrictMode = Fragment;
58
- export const startTransition = (callback: () => void) => callback();
59
- export const useDeferredValue = <T>(value: T): T => value;
60
- export const useInsertionEffect = useLayoutEffect;
61
- export const version = '19.0.0';
57
+ export const StrictMode = Fragment
58
+ export const startTransition = (callback: () => void) => callback()
59
+ export const useDeferredValue = <T>(value: T): T => value
60
+ export const useInsertionEffect = useLayoutEffect
61
+ export const version = '19.0.0'
62
62
 
63
63
  export function cache<Args extends unknown[], Result>(
64
64
  fn: (...args: Args) => Result,
65
65
  ): (...args: Args) => Result {
66
- return (...args: Args) => fn(...args);
66
+ return (...args: Args) => fn(...args)
67
67
  }
68
68
 
69
69
  export function cacheSignal() {
70
- return null;
70
+ return null
71
71
  }
72
72
 
73
73
  // No default export: the surface scan already forces the full tier for any app doing
@@ -45,15 +45,15 @@ export {
45
45
  useSyncExternalStore,
46
46
  useTransition,
47
47
  version,
48
- } from './preact';
49
- export { ViewTransition, addTransitionType } from './view-transition';
48
+ } from './preact'
49
+ export { ViewTransition, addTransitionType } from './view-transition'
50
50
 
51
51
  export function cache<Args extends unknown[], Result>(
52
52
  fn: (...args: Args) => Result,
53
53
  ): (...args: Args) => Result {
54
- return (...args: Args) => fn(...args);
54
+ return (...args: Args) => fn(...args)
55
55
  }
56
56
 
57
57
  export function cacheSignal() {
58
- return null;
58
+ return null
59
59
  }
@@ -14,27 +14,27 @@
14
14
  // runtime. The remaining exports are only emitted in development/validation builds; pnext ships the
15
15
  // production runtime, so they are minimal stubs to keep any stray import resolvable.
16
16
 
17
- import { useMemo } from 'preact/compat';
17
+ import { useMemo } from 'preact/compat'
18
18
 
19
- const $empty = Symbol.for('react.memo_cache_sentinel');
19
+ const $empty = Symbol.for('react.memo_cache_sentinel')
20
20
 
21
21
  /** React Compiler memo-cache allocator (production fallback over preact useMemo). */
22
22
  export function c(size: number): unknown[] {
23
23
  return useMemo<unknown[]>(() => {
24
- const cache: unknown[] = new Array<unknown>(size);
25
- for (let index = 0; index < size; index++) cache[index] = $empty;
26
- (cache as unknown as Record<symbol, boolean>)[$empty] = true;
27
- return cache;
28
- }, []);
24
+ const cache: unknown[] = new Array<unknown>(size)
25
+ for (let index = 0; index < size; index++) cache[index] = $empty
26
+ ;(cache as unknown as Record<symbol, boolean>)[$empty] = true
27
+ return cache
28
+ }, [])
29
29
  }
30
30
 
31
31
  /** Reset a memo-cache array back to sentinels (dev-only in upstream). */
32
32
  export function $reset(cache: unknown[]): void {
33
- for (let index = 0; index < cache.length; index++) cache[index] = $empty;
33
+ for (let index = 0; index < cache.length; index++) cache[index] = $empty
34
34
  }
35
35
 
36
36
  export function $makeReadOnly<T>(value: T): T {
37
- return value;
37
+ return value
38
38
  }
39
39
 
40
40
  // Dispatcher guards / structural check are dev-only validation hooks; ship as
@@ -47,11 +47,11 @@ export function $structuralCheck(): void {
47
47
  /* no-op: dev-only structural equality check */
48
48
  }
49
49
 
50
- export const renderCounterRegistry = new Map<string, Set<{ count: number }>>();
50
+ export const renderCounterRegistry = new Map<string, Set<{ count: number }>>()
51
51
 
52
52
  export function clearRenderCounterRegistry(): void {
53
53
  for (const counters of renderCounterRegistry.values()) {
54
- for (const counter of counters) counter.count = 0;
54
+ for (const counter of counters) counter.count = 0
55
55
  }
56
56
  }
57
57