@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
@@ -1,21 +1,18 @@
1
- import { h, type ComponentChildren } from 'preact';
1
+ import { h, type ComponentChildren } from 'preact'
2
2
 
3
- export const ISLAND_STATIC_CHILDREN_ATTRIBUTE = 'data-pnext-static-children';
3
+ export const ISLAND_STATIC_CHILDREN_ATTRIBUTE = 'data-pnext-static-children'
4
4
 
5
- export function islandStaticChildren(
6
- id: string,
7
- children: ComponentChildren,
8
- ) {
9
- if (!hasIslandStaticChildren(children)) return undefined;
5
+ export function islandStaticChildren(id: string, children: ComponentChildren) {
6
+ if (!hasIslandStaticChildren(children)) return undefined
10
7
  return h(
11
8
  'pnext-static-children',
12
9
  { [ISLAND_STATIC_CHILDREN_ATTRIBUTE]: id, style: { display: 'contents' } },
13
10
  children,
14
- );
11
+ )
15
12
  }
16
13
 
17
14
  function hasIslandStaticChildren(children: ComponentChildren) {
18
- return Array.isArray(children) ? children.length > 0 : children != null && children !== false;
15
+ return Array.isArray(children) ? children.length > 0 : children != null && children !== false
19
16
  }
20
17
 
21
18
  /**
@@ -25,13 +22,13 @@ function hasIslandStaticChildren(children: ComponentChildren) {
25
22
  export function plainIslandChildren(
26
23
  children: ComponentChildren,
27
24
  ): string | number | (string | number)[] | undefined {
28
- if (typeof children === 'string' || typeof children === 'number') return children;
25
+ if (typeof children === 'string' || typeof children === 'number') return children
29
26
  if (
30
27
  Array.isArray(children) &&
31
28
  children.length > 0 &&
32
29
  children.every(child => typeof child === 'string' || typeof child === 'number')
33
30
  ) {
34
- return children as (string | number)[];
31
+ return children as (string | number)[]
35
32
  }
36
- return undefined;
33
+ return undefined
37
34
  }
@@ -1,10 +1,10 @@
1
- import { h, type VNode } from 'preact';
2
- import { isElementLike } from '../utils/serialize';
1
+ import { h, type VNode } from 'preact'
2
+ import { isElementLike } from '../utils/serialize'
3
3
 
4
- export const ISLAND_STATIC_SLOT_ATTRIBUTE = 'data-pnext-static-slot';
5
- export const ISLAND_STATIC_SLOT_MARKER = '$$pnext_slot';
4
+ export const ISLAND_STATIC_SLOT_ATTRIBUTE = 'data-pnext-static-slot'
5
+ export const ISLAND_STATIC_SLOT_MARKER = '$$pnext_slot'
6
6
 
7
- type Props = Record<string, unknown>;
7
+ type Props = Record<string, unknown>
8
8
 
9
9
  /**
10
10
  * Element-valued island props travel exactly like element children: the SSR pass wraps each one in a
@@ -13,7 +13,7 @@ type Props = Record<string, unknown>;
13
13
  * plain objects are covered; anything else (Map/Set values, class instances) is left alone.
14
14
  */
15
15
  export function islandStaticSlotProps(id: string, props: Props, mode: 'ssr' | 'wire'): Props {
16
- return mapSlots(props, id, mode, [], new Set()) as Props;
16
+ return mapSlots(props, id, mode, [], new Set()) as Props
17
17
  }
18
18
 
19
19
  function mapSlots(
@@ -24,38 +24,38 @@ function mapSlots(
24
24
  seen: Set<object>,
25
25
  ): unknown {
26
26
  if (isElementLike(value)) {
27
- const slot = `${id}:${path.join('.')}`;
28
- if (mode === 'wire') return { [ISLAND_STATIC_SLOT_MARKER]: slot };
27
+ const slot = `${id}:${path.join('.')}`
28
+ if (mode === 'wire') return { [ISLAND_STATIC_SLOT_MARKER]: slot }
29
29
  return h(
30
30
  'pnext-static-slot',
31
31
  { [ISLAND_STATIC_SLOT_ATTRIBUTE]: slot, style: { display: 'contents' } },
32
32
  value as VNode,
33
- );
33
+ )
34
34
  }
35
- if (value === null || typeof value !== 'object') return value;
35
+ if (value === null || typeof value !== 'object') return value
36
36
  // Cyclic props are supported by the serializer; never walk a container twice.
37
- if (seen.has(value)) return value;
38
- if (!Array.isArray(value) && Object.getPrototypeOf(value) !== Object.prototype) return value;
39
- seen.add(value);
40
- let changed = false;
37
+ if (seen.has(value)) return value
38
+ if (!Array.isArray(value) && Object.getPrototypeOf(value) !== Object.prototype) return value
39
+ seen.add(value)
40
+ let changed = false
41
41
  const entries = Array.isArray(value)
42
42
  ? value.map((item, index) => [String(index), item] as const)
43
- : Object.entries(value);
43
+ : Object.entries(value)
44
44
  const mapped = entries.map(([key, item]) => {
45
- const next = mapSlots(item, id, mode, [...path, key], seen);
46
- if (next !== item) changed = true;
47
- return [key, next] as const;
48
- });
49
- seen.delete(value);
45
+ const next = mapSlots(item, id, mode, [...path, key], seen)
46
+ if (next !== item) changed = true
47
+ return [key, next] as const
48
+ })
49
+ seen.delete(value)
50
50
  // Untouched branches keep their identity (the taint check compares by identity).
51
- if (!changed) return value;
52
- if (Array.isArray(value)) return mapped.map(([, item]) => item);
53
- return Object.fromEntries(mapped);
51
+ if (!changed) return value
52
+ if (Array.isArray(value)) return mapped.map(([, item]) => item)
53
+ return Object.fromEntries(mapped)
54
54
  }
55
55
 
56
56
  /** Cheap gate on the raw props attribute so islands with no element props skip the revive walk. */
57
57
  export function hasIslandStaticSlots(raw: string) {
58
- return raw.includes(ISLAND_STATIC_SLOT_MARKER);
58
+ return raw.includes(ISLAND_STATIC_SLOT_MARKER)
59
59
  }
60
60
 
61
61
  /**
@@ -69,7 +69,7 @@ export async function reviveIslandStaticSlots(
69
69
  root: ParentNode,
70
70
  toChildren: (node: ParentNode) => unknown,
71
71
  ): Promise<Props> {
72
- return (await reviveSlots(props, root, toChildren, new Set())) as Props;
72
+ return (await reviveSlots(props, root, toChildren, new Set())) as Props
73
73
  }
74
74
 
75
75
  async function reviveSlots(
@@ -78,29 +78,29 @@ async function reviveSlots(
78
78
  toChildren: (node: ParentNode) => unknown,
79
79
  seen: Set<object>,
80
80
  ): Promise<unknown> {
81
- if (value === null || typeof value !== 'object' || seen.has(value)) return value;
82
- const marker = (value as Props)[ISLAND_STATIC_SLOT_MARKER];
81
+ if (value === null || typeof value !== 'object' || seen.has(value)) return value
82
+ const marker = (value as Props)[ISLAND_STATIC_SLOT_MARKER]
83
83
  if (typeof marker === 'string') {
84
- const node = root.querySelector(`[${ISLAND_STATIC_SLOT_ATTRIBUTE}="${cssEscape(marker)}"]`);
84
+ const node = root.querySelector(`[${ISLAND_STATIC_SLOT_ATTRIBUTE}="${cssEscape(marker)}"]`)
85
85
  // No server markup for this slot (the island never rendered the prop, or it was skipped for
86
86
  // SSR): nothing to adopt, so the prop arrives null rather than as an empty host.
87
- if (!node) return null;
87
+ if (!node) return null
88
88
  return h(
89
89
  'pnext-static-slot',
90
90
  { [ISLAND_STATIC_SLOT_ATTRIBUTE]: marker, style: { display: 'contents' } },
91
91
  (await toChildren(node)) as VNode,
92
- );
92
+ )
93
93
  }
94
- const proto = Object.getPrototypeOf(value) as object | null;
95
- if (!Array.isArray(value) && proto !== Object.prototype && proto !== null) return value;
96
- seen.add(value);
97
- const target = value as Props;
94
+ const proto = Object.getPrototypeOf(value) as object | null
95
+ if (!Array.isArray(value) && proto !== Object.prototype && proto !== null) return value
96
+ seen.add(value)
97
+ const target = value as Props
98
98
  for (const key of Object.keys(target)) {
99
- target[key] = await reviveSlots(target[key], root, toChildren, seen);
99
+ target[key] = await reviveSlots(target[key], root, toChildren, seen)
100
100
  }
101
- return value;
101
+ return value
102
102
  }
103
103
 
104
104
  function cssEscape(value: string) {
105
- return value.replace(/["\\]/g, '\\$&');
105
+ return value.replace(/["\\]/g, '\\$&')
106
106
  }
@@ -1,34 +1,34 @@
1
- import { AsyncLocalStorage } from 'node:async_hooks';
1
+ import { AsyncLocalStorage } from 'node:async_hooks'
2
2
 
3
3
  export interface CacheNode {
4
- children: Map<unknown, CacheNode>;
5
- record?: CacheRecord;
4
+ children: Map<unknown, CacheNode>
5
+ record?: CacheRecord
6
6
  }
7
7
 
8
8
  export type CacheRecord =
9
9
  | { status: 'pending'; value: Promise<unknown> }
10
10
  | { status: 'resolved'; value: unknown; async: boolean }
11
- | { status: 'rejected'; error: unknown; async: boolean };
11
+ | { status: 'rejected'; error: unknown; async: boolean }
12
12
 
13
13
  export interface CacheScope {
14
- functions: WeakMap<object, CacheNode>;
15
- fetches?: Map<string, Promise<unknown>>;
14
+ functions: WeakMap<object, CacheNode>
15
+ fetches?: Map<string, Promise<unknown>>
16
16
  /**
17
17
  * Lazily-created controller backing React.cacheSignal() in a request render. The signal stays live
18
18
  * for the whole render - including deferred/streamed Suspense boundaries that resolve after the
19
19
  * shell has flushed - so a slow cache component's bounded polling is never cut short. A build
20
20
  * prerender uses the prerender scope's signal instead, which aborts at completePrerender().
21
21
  */
22
- controller?: AbortController;
22
+ controller?: AbortController
23
23
  }
24
24
 
25
25
  // globalThis-anchored: the prebundled server entry inlines its own copy of this module.
26
- const CACHE_SCOPE_STORAGE = Symbol.for('pnext.cacheScopeStorage');
26
+ const CACHE_SCOPE_STORAGE = Symbol.for('pnext.cacheScopeStorage')
27
27
  const storage = ((globalThis as Record<PropertyKey, unknown>)[CACHE_SCOPE_STORAGE] ??=
28
- new AsyncLocalStorage<CacheScope>()) as AsyncLocalStorage<CacheScope>;
28
+ new AsyncLocalStorage<CacheScope>()) as AsyncLocalStorage<CacheScope>
29
29
 
30
30
  export function currentCacheScope() {
31
- return storage.getStore();
31
+ return storage.getStore()
32
32
  }
33
33
 
34
34
  /**
@@ -38,16 +38,16 @@ export function currentCacheScope() {
38
38
  * boundary's polling. Build prerenders get a deterministically-aborting signal from the prerender scope.
39
39
  */
40
40
  export function currentCacheSignal(): AbortSignal | null {
41
- const scope = storage.getStore();
42
- if (!scope) return null;
43
- if (!scope.controller) scope.controller = new AbortController();
44
- return scope.controller.signal;
41
+ const scope = storage.getStore()
42
+ if (!scope) return null
43
+ if (!scope.controller) scope.controller = new AbortController()
44
+ return scope.controller.signal
45
45
  }
46
46
 
47
47
  export function runWithCacheScope<T>(callback: () => T): T {
48
- const existing = storage.getStore();
49
- if (existing) return callback();
50
- return storage.run({ functions: new WeakMap() }, callback);
48
+ const existing = storage.getStore()
49
+ if (existing) return callback()
50
+ return storage.run({ functions: new WeakMap() }, callback)
51
51
  }
52
52
 
53
53
  /**
@@ -58,7 +58,7 @@ export function runWithCacheScope<T>(callback: () => T): T {
58
58
  * Returns an identity wrapper when no scope is active.
59
59
  */
60
60
  export function captureCacheScope(): <T>(fn: () => T) => T {
61
- const scope = storage.getStore();
62
- if (!scope) return fn => fn();
63
- return fn => storage.run(scope, fn);
61
+ const scope = storage.getStore()
62
+ if (!scope) return fn => fn()
63
+ return fn => storage.run(scope, fn)
64
64
  }