@wular/pnext 0.0.3 → 0.0.6

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