@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
@@ -18,8 +18,8 @@ Use Server Components for data loading and non-interactive UI:
18
18
 
19
19
  ```tsx
20
20
  export default async function Page() {
21
- const post = await getPost();
22
- return <article>{post.title}</article>;
21
+ const post = await getPost()
22
+ return <article>{post.title}</article>
23
23
  }
24
24
  ```
25
25
 
@@ -36,14 +36,14 @@ Apps using `compat.next` can also import `cookies()` and `headers()` from `next/
36
36
  Use the root `layout.tsx` to own `<html>` and `<body>`:
37
37
 
38
38
  ```tsx
39
- import type { LayoutProps } from '@wular/pnext';
39
+ import type { LayoutProps } from '@wular/pnext'
40
40
 
41
41
  export default function Layout({ children }: LayoutProps) {
42
42
  return (
43
43
  <html lang="en">
44
44
  <body>{children}</body>
45
45
  </html>
46
- );
46
+ )
47
47
  }
48
48
  ```
49
49
 
@@ -59,11 +59,11 @@ Pages and layouts can export core build-time `metadata`, `metadata()`, `viewport
59
59
  Use server-only `cache()` to dedupe repeated server work during one render or route-handler request:
60
60
 
61
61
  ```tsx
62
- import { cache } from '@wular/pnext/cache';
62
+ import { cache } from '@wular/pnext/cache'
63
63
 
64
64
  export const getPost = cache(async (id: string) => {
65
- return db.post.findUnique({ where: { id } });
66
- });
65
+ return db.post.findUnique({ where: { id } })
66
+ })
67
67
  ```
68
68
 
69
69
  Calls to the same cached function with the same arguments share the result inside the current request. The cache is cleared between requests, so it does not share data across users, is not a persistent data cache, and should not be imported from Client Components.
@@ -74,22 +74,22 @@ Add `"use client"` to components that need browser APIs, hooks, or event handler
74
74
 
75
75
  ```tsx
76
76
  // app/counter.tsx
77
- 'use client';
77
+ 'use client'
78
78
 
79
- import { useState } from 'preact/hooks';
79
+ import { useState } from 'preact/hooks'
80
80
 
81
81
  export function Counter({ initial }: { initial: number }) {
82
- const [count, setCount] = useState(initial);
83
- return <button onClick={() => setCount(count + 1)}>Count {count}</button>;
82
+ const [count, setCount] = useState(initial)
83
+ return <button onClick={() => setCount(count + 1)}>Count {count}</button>
84
84
  }
85
85
  ```
86
86
 
87
87
  ```tsx
88
88
  // app/page.tsx
89
- import { Counter } from './counter';
89
+ import { Counter } from './counter'
90
90
 
91
91
  export default function Page() {
92
- return <Counter initial={0} />;
92
+ return <Counter initial={0} />
93
93
  }
94
94
  ```
95
95
 
@@ -108,11 +108,11 @@ If the whole page needs browser-only behavior, put `"use client"` at the top of
108
108
  Wrap slower server content in `<Suspense>` to show fallback HTML while the server finishes rendering the rest. The pnext renderer resolves these boundaries itself, so core apps use pnext's own `Suspense` — no `preact/compat` involved. Apps with `compat.react` can keep importing React's `Suspense`; both identities are recognized.
109
109
 
110
110
  ```tsx
111
- import { Suspense } from '@wular/pnext';
111
+ import { Suspense } from '@wular/pnext'
112
112
 
113
113
  async function Comments() {
114
- const comments = await getComments();
115
- return <CommentList comments={comments} />;
114
+ const comments = await getComments()
115
+ return <CommentList comments={comments} />
116
116
  }
117
117
 
118
118
  export default function Page() {
@@ -120,7 +120,7 @@ export default function Page() {
120
120
  <Suspense fallback={<p>Loading comments...</p>}>
121
121
  <Comments />
122
122
  </Suspense>
123
- );
123
+ )
124
124
  }
125
125
  ```
126
126
 
@@ -39,10 +39,10 @@ Pages receive explicit props:
39
39
 
40
40
  ```ts
41
41
  type PageProps<P = Record<string, string | string[]>> = {
42
- params: Promise<P>;
43
- searchParams: Promise<Record<string, string | string[] | undefined>>;
44
- request?: NextRequest;
45
- };
42
+ params: Promise<P>
43
+ searchParams: Promise<Record<string, string | string[] | undefined>>
44
+ request?: NextRequest
45
+ }
46
46
  ```
47
47
 
48
48
  Request data is read from `props.request`.
@@ -52,15 +52,15 @@ Request data is read from `props.request`.
52
52
  Route handlers use the Next-compatible `(request, context)` shape:
53
53
 
54
54
  ```ts
55
- import type { RouteContext } from '#gen/app/api/users/[id]/route';
56
- import type { NextRequest } from '@wular/pnext/server';
55
+ import type { RouteContext } from '#gen/app/api/users/[id]/route'
56
+ import type { NextRequest } from '@wular/pnext/server'
57
57
 
58
58
  export async function GET(request: NextRequest, { params }: RouteContext) {
59
- const { id } = await params;
59
+ const { id } = await params
60
60
  return Response.json({
61
61
  id,
62
62
  q: request.nextUrl.searchParams.get('q'),
63
- });
63
+ })
64
64
  }
65
65
  ```
66
66
 
@@ -86,8 +86,8 @@ Route segment config overrides the inference. Hydration is controlled by `"use c
86
86
  Pages, layouts, and route handlers can export segment config. Values must be literals — they are read from the source, not evaluated.
87
87
 
88
88
  ```ts
89
- export const dynamic = 'force-dynamic';
90
- export const maxDuration = 60;
89
+ export const dynamic = 'force-dynamic'
90
+ export const maxDuration = 60
91
91
  ```
92
92
 
93
93
  Recognized: `dynamic` (`auto` | `force-dynamic` | `force-static` | `error`), `revalidate` (a non-negative number or `false`), `fetchCache`, `dynamicParams`, `runtime` (`edge` | `nodejs`), `prefetch`, and `maxDuration`.
@@ -101,17 +101,17 @@ When building with `pnext build --adapter vercel`, `maxDuration` is copied to th
101
101
  `proxy.ts` and `middleware.ts` run before static files, pages, and route handlers. Use `proxy.ts` for new code. `middleware.ts` is supported for compatibility. If both exist, `proxy.ts` wins.
102
102
 
103
103
  ```ts
104
- import { NextResponse, type NextRequest } from '@wular/pnext/server';
104
+ import { NextResponse, type NextRequest } from '@wular/pnext/server'
105
105
 
106
106
  export const config = {
107
107
  matcher: ['/admin/:path*'],
108
- };
108
+ }
109
109
 
110
110
  export function proxy(request: NextRequest) {
111
111
  if (!request.cookies.has('session')) {
112
- return NextResponse.redirect(new URL('/login', request.url));
112
+ return NextResponse.redirect(new URL('/login', request.url))
113
113
  }
114
- return NextResponse.next();
114
+ return NextResponse.next()
115
115
  }
116
116
  ```
117
117
 
@@ -155,13 +155,13 @@ Use `params()` on a dynamic route to choose params that `pnext build` should wri
155
155
  Requests outside the returned list keep using dynamic rendering.
156
156
 
157
157
  ```tsx
158
- import type { PageProps, StaticParams } from '#gen/app/users/[id]/page';
158
+ import type { PageProps, StaticParams } from '#gen/app/users/[id]/page'
159
159
 
160
160
  export function params(): StaticParams {
161
- return [{ id: 'ada' }, { id: 'grace' }];
161
+ return [{ id: 'ada' }, { id: 'grace' }]
162
162
  }
163
163
 
164
164
  export default async function Page({ params }: PageProps) {
165
- return <p>{(await params).id}</p>;
165
+ return <p>{(await params).id}</p>
166
166
  }
167
167
  ```
@@ -8,14 +8,14 @@ Import generated types for the current route. pnext validates those exports agai
8
8
 
9
9
  ```tsx
10
10
  // app/users/[id]/page.tsx
11
- import type { PageProps, StaticParams } from '#gen/app/users/[id]/page';
11
+ import type { PageProps, StaticParams } from '#gen/app/users/[id]/page'
12
12
 
13
13
  export function params(): StaticParams {
14
- return [{ id: 'ada' }];
14
+ return [{ id: 'ada' }]
15
15
  }
16
16
 
17
17
  export default async function Page({ params }: PageProps) {
18
- return <p>{(await params).id}</p>;
18
+ return <p>{(await params).id}</p>
19
19
  }
20
20
  ```
21
21
 
@@ -23,11 +23,11 @@ Route handlers use generated `RouteContext` for the second argument:
23
23
 
24
24
  ```ts
25
25
  // app/users/[id]/route.ts
26
- import type { RouteContext } from '#gen/app/users/[id]/route';
27
- import type { NextRequest } from '@wular/pnext/server';
26
+ import type { RouteContext } from '#gen/app/users/[id]/route'
27
+ import type { NextRequest } from '@wular/pnext/server'
28
28
 
29
29
  export async function GET(request: NextRequest, { params }: RouteContext) {
30
- return Response.json({ id: (await params).id });
30
+ return Response.json({ id: (await params).id })
31
31
  }
32
32
  ```
33
33
 
@@ -36,10 +36,14 @@ export async function GET(request: NextRequest, { params }: RouteContext) {
36
36
  Typed links use typed `href` and `params`:
37
37
 
38
38
  ```tsx
39
- import { Link } from '@wular/pnext/link';
39
+ import { Link } from '@wular/pnext/link'
40
40
 
41
41
  export function Nav() {
42
- return <Link href="/users/[id]" params={{ id: 'ada' }}>Ada</Link>;
42
+ return (
43
+ <Link href="/users/[id]" params={{ id: 'ada' }}>
44
+ Ada
45
+ </Link>
46
+ )
43
47
  }
44
48
  ```
45
49
 
package/src/api/cache.ts CHANGED
@@ -1,80 +1,79 @@
1
- import { currentCacheScope, type CacheNode } from '../cache/context';
1
+ import { currentCacheScope, type CacheNode } from '../request/cache'
2
2
 
3
3
  export function cache<Args extends unknown[], Result>(
4
4
  fn: (...args: Args) => Result,
5
5
  ): (...args: Args) => Result {
6
6
  return (...args: Args) => {
7
- const scope = currentCacheScope();
8
- if (!scope) return fn(...args);
7
+ const scope = currentCacheScope()
8
+ if (!scope) return fn(...args)
9
9
 
10
- let root = scope.functions.get(fn);
10
+ let root = scope.functions.get(fn)
11
11
  if (!root) {
12
- root = cacheNode();
13
- scope.functions.set(fn, root);
12
+ root = cacheNode()
13
+ scope.functions.set(fn, root)
14
14
  }
15
15
 
16
- const node = cacheNodeForArgs(root, args);
17
- const record = node.record;
16
+ const node = cacheNodeForArgs(root, args)
17
+ const record = node.record
18
18
  if (record) {
19
19
  if (record.status === 'rejected') {
20
20
  if (record.async) {
21
21
  return Promise.resolve().then(() => {
22
- throw record.error;
23
- }) as Result;
22
+ throw record.error
23
+ }) as Result
24
24
  }
25
- throw record.error;
25
+ throw record.error
26
26
  }
27
- if (record.status === 'resolved' && record.async) return Promise.resolve(record.value) as Result;
28
- return record.value as Result;
27
+ if (record.status === 'resolved' && record.async)
28
+ return Promise.resolve(record.value) as Result
29
+ return record.value as Result
29
30
  }
30
31
 
31
32
  try {
32
- const value = fn(...args);
33
+ const value = fn(...args)
33
34
  if (isPromiseLike(value)) {
34
35
  const promise = Promise.resolve(value).then(
35
36
  result => {
36
- node.record = { status: 'resolved', value: result, async: true };
37
- return result;
37
+ node.record = { status: 'resolved', value: result, async: true }
38
+ return result
38
39
  },
39
40
  error => {
40
- node.record = { status: 'rejected', error, async: true };
41
- throw error;
41
+ node.record = { status: 'rejected', error, async: true }
42
+ throw error
42
43
  },
43
- );
44
- node.record = { status: 'pending', value: promise };
45
- return promise as Result;
44
+ )
45
+ node.record = { status: 'pending', value: promise }
46
+ return promise as Result
46
47
  }
47
48
 
48
- node.record = { status: 'resolved', value, async: false };
49
- return value;
49
+ node.record = { status: 'resolved', value, async: false }
50
+ return value
50
51
  } catch (error) {
51
- node.record = { status: 'rejected', error, async: false };
52
- throw error;
52
+ node.record = { status: 'rejected', error, async: false }
53
+ throw error
53
54
  }
54
- };
55
+ }
55
56
  }
56
57
 
57
58
  function cacheNode(): CacheNode {
58
- return { children: new Map() };
59
+ return { children: new Map() }
59
60
  }
60
61
 
61
62
  function cacheNodeForArgs(root: CacheNode, args: unknown[]) {
62
- let node = root;
63
+ let node = root
63
64
  for (const arg of args) {
64
- let child = node.children.get(arg);
65
+ let child = node.children.get(arg)
65
66
  if (!child) {
66
- child = cacheNode();
67
- node.children.set(arg, child);
67
+ child = cacheNode()
68
+ node.children.set(arg, child)
68
69
  }
69
- node = child;
70
+ node = child
70
71
  }
71
- return node;
72
+ return node
72
73
  }
73
74
 
74
75
  function isPromiseLike(value: unknown): value is PromiseLike<unknown> {
75
76
  return (
76
- (typeof value === 'object' || typeof value === 'function') &&
77
- value !== null &&
78
- 'then' in value
79
- );
77
+ (typeof value === 'object' || typeof value === 'function') && value !== null && 'then' in value
78
+ )
80
79
  }
@@ -1,9 +1,9 @@
1
1
  export function cache<Args extends unknown[], Result>(
2
2
  fn: (...args: Args) => Result,
3
3
  ): (...args: Args) => Result {
4
- return (...args: Args) => fn(...args);
4
+ return (...args: Args) => fn(...args)
5
5
  }
6
6
 
7
7
  export function cacheSignal() {
8
- return null;
8
+ return null
9
9
  }