@wular/pnext 0.0.4 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (395) hide show
  1. package/README.md +22 -16
  2. package/bin/pnext +6 -1
  3. package/config/lint/base.js +7 -7
  4. package/config/ts/base.json +2 -4
  5. package/config/ts/react.json +2 -6
  6. package/package.json +23 -2
  7. package/reference/compat.md +87 -22
  8. package/reference/config.md +40 -93
  9. package/reference/css.md +42 -33
  10. package/reference/dev.md +26 -33
  11. package/reference/env.md +18 -20
  12. package/reference/getting-started.md +132 -0
  13. package/reference/metadata.md +31 -46
  14. package/reference/navigation.md +65 -105
  15. package/reference/performance.md +21 -142
  16. package/reference/rendering.md +78 -75
  17. package/reference/routing.md +97 -107
  18. package/reference/typegen.md +27 -29
  19. package/src/api/cache.ts +36 -37
  20. package/src/api/client-cache.ts +2 -2
  21. package/src/api/client-navigation.ts +121 -114
  22. package/src/api/dynamic.tsx +58 -55
  23. package/src/api/link.tsx +52 -53
  24. package/src/api/navigation.ts +59 -58
  25. package/src/api/server.ts +152 -144
  26. package/src/api/suspense.ts +4 -4
  27. package/src/cli/adapters/vercel-warm.ts +126 -121
  28. package/src/cli/adapters/vercel.ts +437 -443
  29. package/src/cli/analyze.ts +333 -144
  30. package/src/cli/{named-bin.ts → boot/named-bin.ts} +37 -37
  31. package/src/cli/{boot-trace.ts → boot/trace.ts} +10 -10
  32. package/src/cli/build.ts +976 -978
  33. package/src/cli/create.ts +72 -64
  34. package/src/cli/dev.ts +116 -116
  35. package/src/cli/index.ts +94 -85
  36. package/src/cli/migrate/package-json.ts +73 -71
  37. package/src/cli/migrate/report.ts +32 -33
  38. package/src/cli/migrate/{index.ts → run.ts} +48 -49
  39. package/src/cli/migrate/scan.ts +46 -46
  40. package/src/cli/migrate/spinner.ts +9 -9
  41. package/src/cli/migrate/tsconfig.ts +35 -35
  42. package/src/cli/{server-entry.ts → serve/entry.ts} +57 -57
  43. package/src/cli/{request-pipeline.ts → serve/pipeline.ts} +386 -394
  44. package/src/cli/{serve-ui.ts → serve/ui.ts} +47 -47
  45. package/src/cli/start.ts +65 -66
  46. package/src/{typegen.ts → cli/typegen.ts} +59 -59
  47. package/src/client/build.ts +802 -768
  48. package/src/client/chunk-fold.ts +245 -240
  49. package/src/client/{paths.ts → chunk-name.ts} +6 -6
  50. package/src/client/entry.ts +162 -147
  51. package/src/client/prebuilt.ts +231 -223
  52. package/src/client/profile.ts +29 -29
  53. package/src/client/react-compiler.ts +20 -15
  54. package/src/client/{compat-surface.ts → react-tier.ts} +64 -64
  55. package/src/client/reference-stub.ts +51 -51
  56. package/src/client/reference.ts +19 -19
  57. package/src/{api → client}/router/events.ts +32 -17
  58. package/src/{api → client}/router/history.ts +16 -16
  59. package/src/{api → client}/router/hub.ts +52 -53
  60. package/src/{api/router.ts → client/router/index.ts} +61 -60
  61. package/src/{api → client}/router/policies.ts +24 -24
  62. package/src/{api → client}/router/runtime.ts +2022 -1995
  63. package/src/{api → client}/router/types.ts +98 -98
  64. package/src/compat/actions/client-plugin.ts +42 -43
  65. package/src/compat/actions/client-stub.ts +14 -14
  66. package/src/compat/actions/{action-client.ts → client.ts} +194 -193
  67. package/src/compat/actions/config.ts +63 -64
  68. package/src/compat/actions/detect.ts +68 -68
  69. package/src/compat/actions/discovery.ts +105 -105
  70. package/src/compat/actions/{action-dispatch.ts → dispatch.ts} +277 -274
  71. package/src/compat/actions/early-submit.ts +1 -1
  72. package/src/compat/actions/endpoint.ts +198 -198
  73. package/src/compat/actions/extensions.ts +811 -0
  74. package/src/compat/actions/flight.ts +23 -23
  75. package/src/compat/actions/form-state.ts +34 -34
  76. package/src/compat/actions/hoist.ts +382 -236
  77. package/src/compat/actions/ids.ts +7 -12
  78. package/src/compat/actions/index.ts +8 -8
  79. package/src/compat/actions/instances.ts +46 -46
  80. package/src/compat/actions/origin.ts +47 -48
  81. package/src/compat/actions/protocol.ts +22 -22
  82. package/src/compat/actions/registry.ts +19 -19
  83. package/src/compat/{misc/action-return.ts → actions/return.ts} +60 -57
  84. package/src/compat/actions/rewrite.ts +125 -125
  85. package/src/compat/actions/{action-router.ts → router.ts} +10 -10
  86. package/src/compat/actions/serve.ts +132 -136
  87. package/src/compat/actions/server-tag.ts +4 -4
  88. package/src/compat/actions/{action-shared.ts → shared.ts} +34 -34
  89. package/src/compat/actions/unrecognized-error.ts +4 -4
  90. package/src/compat/{index.ts → aliases.ts} +112 -109
  91. package/src/compat/bundler/bun-externals.ts +18 -18
  92. package/src/compat/bundler/cjs-exports.ts +271 -223
  93. package/src/compat/bundler/config.ts +116 -111
  94. package/src/compat/bundler/externals.ts +12 -12
  95. package/src/compat/bundler/import-meta-url.ts +19 -19
  96. package/src/compat/bundler/modularize-imports.ts +36 -33
  97. package/src/compat/bundler/new-url-asset.ts +22 -24
  98. package/src/compat/bundler/optimize-package-imports.ts +111 -107
  99. package/src/compat/bundler/polyfill.ts +28 -28
  100. package/src/compat/bundler/react-compiler.ts +35 -29
  101. package/src/compat/bundler/react-profiler.tsx +11 -11
  102. package/src/compat/bundler/relay-transform.ts +48 -47
  103. package/src/compat/bundler/require-context.ts +119 -113
  104. package/src/compat/bundler/resolve-extensions.ts +19 -19
  105. package/src/compat/bundler/source-cache.ts +25 -25
  106. package/src/compat/bundler/static-imports.ts +7 -7
  107. package/src/compat/bundler/symlink-imports.ts +46 -46
  108. package/src/compat/bundler/tsconfig-paths.ts +13 -15
  109. package/src/compat/bundler/wasm.ts +58 -60
  110. package/src/compat/bundler/webpack-loaders.ts +254 -241
  111. package/src/compat/bundler/worker.ts +101 -104
  112. package/src/compat/cache/build-flags.ts +29 -29
  113. package/src/compat/cache/build-prerender-errors.ts +40 -44
  114. package/src/compat/cache/custom-handler.ts +60 -53
  115. package/src/compat/cache/fetch-patch.ts +240 -240
  116. package/src/compat/cache/handler.ts +27 -31
  117. package/src/compat/cache/modern-handler.ts +148 -126
  118. package/src/compat/cache/resume-data-cache.ts +47 -45
  119. package/src/compat/cache/revalidate.ts +233 -232
  120. package/src/compat/cache/runtime-error.ts +35 -35
  121. package/src/compat/cache/use-cache-transform.ts +442 -417
  122. package/src/compat/cache/use-cache.ts +650 -614
  123. package/src/compat/cache-control.ts +140 -142
  124. package/src/compat/client/base-path.ts +21 -20
  125. package/src/compat/client/css-order.ts +18 -18
  126. package/src/compat/client/errors/bare-boundary.ts +11 -11
  127. package/src/compat/client/errors/control-flow.ts +23 -23
  128. package/src/compat/client/errors/error-boundary.ts +61 -61
  129. package/src/compat/client/errors/global-error.ts +101 -91
  130. package/src/compat/client/errors/install.ts +71 -72
  131. package/src/compat/client/errors/lazy.ts +23 -23
  132. package/src/compat/client/errors/primitive-throw.ts +47 -45
  133. package/src/compat/client/errors/soft-refresh.ts +4 -4
  134. package/src/compat/client/link-status.ts +33 -33
  135. package/src/compat/client/{nav-compat-runtime.ts → nav-runtime.ts} +20 -20
  136. package/src/compat/client/{nav-compat.ts → nav.ts} +12 -13
  137. package/src/compat/client/navigation-scroll.ts +63 -63
  138. package/src/compat/client/optimistic-routing.ts +93 -88
  139. package/src/compat/client/prefetch-cache.ts +23 -24
  140. package/src/compat/client/route-announcer.ts +35 -35
  141. package/src/compat/client/segment-cache-policy.ts +20 -20
  142. package/src/compat/client/segment-cache.ts +309 -315
  143. package/src/compat/client/segment-prefetch.ts +127 -132
  144. package/src/compat/client/trailing-slash.ts +5 -4
  145. package/src/compat/css/chunking.ts +113 -116
  146. package/src/compat/css/inline-css.ts +21 -21
  147. package/src/compat/css/lightningcss.ts +37 -38
  148. package/src/compat/css/modules.ts +161 -175
  149. package/src/compat/css/nonce.ts +7 -7
  150. package/src/compat/css/sass-plugin.ts +18 -21
  151. package/src/compat/css/sass.ts +150 -152
  152. package/src/compat/css/styled-jsx-runtime.ts +27 -27
  153. package/src/compat/css/styled-jsx.ts +21 -21
  154. package/src/compat/edge-runtime.ts +27 -27
  155. package/src/compat/{adapter → export}/build-complete.ts +72 -75
  156. package/src/compat/export/client.ts +29 -31
  157. package/src/compat/export/{index.ts → emit.ts} +111 -110
  158. package/src/compat/export/standalone.ts +62 -54
  159. package/src/compat/image-optimizer/cache.ts +51 -49
  160. package/src/compat/image-optimizer/detect.ts +52 -52
  161. package/src/compat/image-optimizer/{index.ts → optimize.ts} +189 -194
  162. package/src/compat/image-optimizer/source.ts +77 -80
  163. package/src/compat/lifecycle/after-scope.ts +26 -26
  164. package/src/compat/lifecycle/after.ts +48 -45
  165. package/src/compat/lifecycle/error-funnel.ts +98 -102
  166. package/src/compat/lifecycle/error-serialize.ts +30 -26
  167. package/src/compat/lifecycle/error-ui.ts +67 -32
  168. package/src/compat/lifecycle/instrumentation-client.ts +36 -38
  169. package/src/compat/lifecycle/instrumentation.ts +85 -85
  170. package/src/compat/lifecycle/node-console.ts +11 -11
  171. package/src/compat/lifecycle/testmode.ts +160 -132
  172. package/src/compat/mdx/compile.ts +60 -57
  173. package/src/compat/mdx/plugin.ts +11 -11
  174. package/src/compat/mdx/{next-mdx-stub.ts → stub.ts} +5 -5
  175. package/src/compat/{metadata-route-artifacts.ts → metadata-artifacts.ts} +195 -191
  176. package/src/compat/metadata.ts +75 -81
  177. package/src/compat/next/cache.ts +68 -69
  178. package/src/compat/next/canonical-url.ts +9 -9
  179. package/src/compat/next/client-cache.ts +19 -19
  180. package/src/compat/next/client-navigation.ts +112 -116
  181. package/src/compat/next/client-only.ts +1 -1
  182. package/src/compat/next/client-script.tsx +99 -93
  183. package/src/compat/next/client-server.ts +10 -10
  184. package/src/compat/next/config-loader.ts +176 -173
  185. package/src/compat/next/config.ts +7 -7
  186. package/src/compat/next/constants.cjs +6 -6
  187. package/src/compat/next/constants.ts +6 -6
  188. package/src/compat/next/custom-server.ts +26 -24
  189. package/src/compat/next/dist/client/components/app-router-headers.ts +21 -21
  190. package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +3 -4
  191. package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -1
  192. package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -1
  193. package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -1
  194. package/src/compat/next/dynamic.tsx +21 -18
  195. package/src/compat/next/error.tsx +52 -52
  196. package/src/compat/next/font/cache.ts +74 -74
  197. package/src/compat/next/font/google.ts +2 -2
  198. package/src/compat/next/font/index.ts +1 -1
  199. package/src/compat/next/font/local.ts +3 -3
  200. package/src/compat/next/font/runtime-client.ts +17 -15
  201. package/src/compat/next/font/runtime.ts +443 -408
  202. package/src/compat/next/font/shared.ts +120 -108
  203. package/src/compat/next/form.tsx +63 -63
  204. package/src/compat/next/head.tsx +2 -2
  205. package/src/compat/next/headers.ts +103 -95
  206. package/src/compat/next/image/client.tsx +220 -0
  207. package/src/compat/next/image/config.ts +56 -58
  208. package/src/compat/next/image/optimizer.ts +40 -36
  209. package/src/compat/next/image/patterns.ts +37 -40
  210. package/src/compat/next/{image-props.ts → image/props.ts} +208 -202
  211. package/src/compat/next/image/shared.ts +65 -57
  212. package/src/compat/next/image/static-metadata.ts +98 -107
  213. package/src/compat/next/image/validate.ts +79 -88
  214. package/src/compat/next/image.tsx +19 -23
  215. package/src/compat/next/index.ts +1 -1
  216. package/src/compat/next/legacy-image.tsx +59 -60
  217. package/src/compat/next/{link-validation-transform.ts → link-transform.ts} +95 -96
  218. package/src/compat/next/link.tsx +158 -158
  219. package/src/compat/next/navigation.cjs +12 -3
  220. package/src/compat/next/navigation.ts +48 -50
  221. package/src/compat/next/offline.ts +27 -27
  222. package/src/compat/next/og.ts +121 -124
  223. package/src/compat/next/preferred-region.ts +13 -14
  224. package/src/compat/next/redirects.ts +58 -56
  225. package/src/compat/next/resource-hints.ts +73 -76
  226. package/src/compat/next/rewrites.ts +130 -133
  227. package/src/compat/next/root-params.ts +45 -45
  228. package/src/compat/next/{optimistic-route-state.ts → route-state.ts} +52 -52
  229. package/src/compat/next/router.cjs +4 -2
  230. package/src/compat/next/router.ts +58 -61
  231. package/src/compat/next/script.tsx +108 -108
  232. package/src/compat/next/server-only.ts +1 -1
  233. package/src/compat/next/server.ts +19 -19
  234. package/src/compat/next/svgr.ts +18 -17
  235. package/src/compat/next/telemetry.ts +24 -24
  236. package/src/compat/next/{image-usage.ts → usage.ts} +70 -39
  237. package/src/compat/next/user-agent.ts +53 -49
  238. package/src/compat/next/web-vitals.ts +22 -24
  239. package/src/compat/otel/api.ts +41 -41
  240. package/src/compat/otel/client-trace-metadata.ts +25 -27
  241. package/src/compat/otel/fetch-span.ts +29 -29
  242. package/src/compat/otel/tracer.ts +331 -331
  243. package/src/compat/pages/api.ts +456 -0
  244. package/src/compat/pages/client-plugin.ts +36 -36
  245. package/src/compat/pages/router-state.ts +34 -34
  246. package/src/compat/pages/{index.ts → router.ts} +130 -135
  247. package/src/compat/ppr/io.ts +12 -12
  248. package/src/compat/ppr/missing-root-params.ts +34 -38
  249. package/src/compat/ppr/root-params-scan.ts +66 -66
  250. package/src/compat/ppr/root-params-transform.ts +24 -26
  251. package/src/compat/ppr/root-params.ts +30 -30
  252. package/src/compat/ppr/segment-config-incompat.ts +6 -7
  253. package/src/compat/protocol.ts +71 -70
  254. package/src/compat/react/action-state.ts +47 -48
  255. package/src/compat/react/client-lite.ts +15 -15
  256. package/src/compat/react/client.ts +4 -4
  257. package/src/compat/react/compiler-runtime.ts +11 -11
  258. package/src/compat/react/dom-client.ts +44 -44
  259. package/src/compat/react/dom-react-server.ts +10 -16
  260. package/src/compat/react/dom-server.ts +10 -10
  261. package/src/compat/react/dom.ts +52 -52
  262. package/src/compat/react/hooks-extra.ts +34 -35
  263. package/src/compat/react/parity.ts +64 -61
  264. package/src/compat/react/preact.ts +81 -82
  265. package/src/compat/react/react-server.ts +28 -28
  266. package/src/compat/react/router-shim.ts +1 -1
  267. package/src/compat/react/server-component-use.ts +8 -8
  268. package/src/compat/react/server-inserted-html.ts +30 -31
  269. package/src/compat/react/server.ts +53 -55
  270. package/src/compat/react/use.ts +32 -32
  271. package/src/compat/react/view-transition.ts +20 -20
  272. package/src/compat/register/actions.ts +35 -824
  273. package/src/compat/register/boot.ts +41 -41
  274. package/src/compat/register/build-tier.ts +5 -5
  275. package/src/compat/register/build.ts +74 -70
  276. package/src/compat/register/bundler.ts +161 -156
  277. package/src/compat/register/cache.ts +20 -20
  278. package/src/compat/register/client-errors.ts +3 -3
  279. package/src/compat/register/config.ts +6 -6
  280. package/src/compat/register/css-extras.ts +30 -34
  281. package/src/compat/register/edge-runtime.ts +3 -3
  282. package/src/compat/register/errors.ts +10 -12
  283. package/src/compat/register/export.ts +16 -16
  284. package/src/compat/register/font.ts +11 -11
  285. package/src/compat/register/hooks.ts +2 -2
  286. package/src/compat/register/image.ts +40 -40
  287. package/src/compat/register/index.ts +59 -62
  288. package/src/compat/register/instrumentation-client.ts +10 -10
  289. package/src/compat/register/lifecycle.ts +25 -28
  290. package/src/compat/register/mdx.ts +10 -10
  291. package/src/compat/register/middleware.ts +226 -16
  292. package/src/compat/register/otel.ts +80 -88
  293. package/src/compat/register/pages-api.ts +10 -463
  294. package/src/compat/register/ppr.ts +16 -16
  295. package/src/compat/register/protocol.ts +17 -18
  296. package/src/compat/register/proxy.ts +49 -51
  297. package/src/compat/register/render.ts +79 -76
  298. package/src/compat/register/routing.ts +162 -159
  299. package/src/compat/register/segment.ts +24 -1897
  300. package/src/compat/register/static-image.ts +3 -3
  301. package/src/compat/register/{misc.ts → taint.ts} +9 -9
  302. package/src/compat/register/typed-routes.ts +14 -14
  303. package/src/compat/register/{usecache.ts → use-cache.ts} +39 -39
  304. package/src/compat/register/validation.ts +18 -18
  305. package/src/compat/segment/loading-boundary.ts +43 -45
  306. package/src/compat/segment/page-slot.ts +69 -69
  307. package/src/compat/segment/serve.ts +1884 -0
  308. package/src/compat/segment/tree.ts +113 -112
  309. package/src/compat/segment/vary-key.ts +38 -38
  310. package/src/compat/segment/vary-params.ts +138 -142
  311. package/src/compat/static-params.ts +14 -12
  312. package/src/compat/tsconfig-defaults.ts +87 -91
  313. package/src/compat/typecheck/{index.ts → check.ts} +234 -212
  314. package/src/compat/typecheck/worker.ts +15 -12
  315. package/src/compat/typed-routes/{index.ts → generate.ts} +36 -36
  316. package/src/compat/typed-routes/manifest.ts +174 -170
  317. package/src/compat/typed-routes/typegen.ts +127 -110
  318. package/src/compat/validation/errors.ts +16 -19
  319. package/src/compat/validation/prerender-diagnostics.ts +521 -504
  320. package/src/compat/validation/{index.ts → validate.ts} +647 -648
  321. package/src/compat-bootstrap.ts +16 -16
  322. package/src/config.ts +86 -69
  323. package/src/css/build.ts +230 -227
  324. package/src/css/postcss.ts +79 -80
  325. package/src/css/worker.ts +14 -15
  326. package/src/dev/client-actions.ts +10 -10
  327. package/src/dev/client-chunk-store.ts +27 -27
  328. package/src/dev/{client-key-cache.ts → restart/client-key.ts} +76 -76
  329. package/src/dev/{restart-cache.ts → restart/enabled.ts} +1 -1
  330. package/src/dev/{global-css-cache.ts → restart/global-css.ts} +91 -83
  331. package/src/dev/{node-module-bundle-cache.ts → restart/node-modules.ts} +24 -24
  332. package/src/dev/{route-bundle-key-cache.ts → restart/route-bundle-key.ts} +53 -53
  333. package/src/dev/{route-facts-cache.ts → restart/route-facts.ts} +82 -82
  334. package/src/dev/server.ts +804 -820
  335. package/src/env.ts +46 -43
  336. package/src/extensions.ts +491 -478
  337. package/src/index.ts +8 -8
  338. package/src/internal.ts +20 -23
  339. package/src/{islands → render}/boundary-error.ts +3 -3
  340. package/src/render/hooks.ts +71 -71
  341. package/src/render/island-context.ts +14 -14
  342. package/src/render/metadata.ts +310 -310
  343. package/src/{ppr-postpone.ts → render/postpone.ts} +5 -5
  344. package/src/{ppr.ts → render/ppr.ts} +244 -245
  345. package/src/render/renderer.ts +2087 -2082
  346. package/src/render/resource-hints.ts +16 -17
  347. package/src/render/slots.tsx +224 -235
  348. package/src/{islands → render}/static-children.ts +9 -12
  349. package/src/{islands → render}/static-slots.ts +37 -37
  350. package/src/{cache/context.ts → request/cache.ts} +20 -20
  351. package/src/request/context.ts +107 -107
  352. package/src/{dynamic/source.ts → resolve/dynamic.ts} +139 -139
  353. package/src/resolve/engine.ts +90 -77
  354. package/src/resolve/imports.ts +475 -463
  355. package/src/resolve/scan-facts.ts +318 -296
  356. package/src/resolve/source-text.ts +37 -37
  357. package/src/{dynamic → resolve}/tree-shake.ts +132 -128
  358. package/src/routing/forwarded.ts +19 -19
  359. package/src/routing/handler.ts +84 -91
  360. package/src/routing/href.ts +87 -70
  361. package/src/routing/{metadata.ts → metadata-files.ts} +403 -401
  362. package/src/{proxy.ts → routing/proxy.ts} +306 -312
  363. package/src/routing/{request-runtime.ts → request-environment.ts} +10 -10
  364. package/src/routing/routes.ts +827 -815
  365. package/src/routing/slots.ts +164 -160
  366. package/src/runtime/loader.ts +954 -0
  367. package/src/{dev → runtime}/module-cache.ts +309 -287
  368. package/src/{dev → runtime}/module-generations.ts +9 -9
  369. package/src/{dev → runtime}/module-transform.ts +81 -72
  370. package/src/{dev/imports.ts → runtime/modules.ts} +934 -847
  371. package/src/runtime/{server.ts → vendor-build.ts} +848 -1696
  372. package/src/runtime/vendor.ts +428 -406
  373. package/src/styles.d.ts +9 -0
  374. package/src/types.ts +324 -335
  375. package/src/utils/ansi.ts +5 -5
  376. package/src/utils/{source.ts → code.ts} +15 -12
  377. package/src/utils/content-type.ts +3 -3
  378. package/src/utils/decode.ts +2 -2
  379. package/src/utils/dev-profile.ts +13 -13
  380. package/src/utils/error-log.ts +6 -6
  381. package/src/utils/esbuild.ts +18 -18
  382. package/src/utils/fs-cache.ts +13 -13
  383. package/src/utils/fs.ts +57 -49
  384. package/src/utils/html.ts +20 -24
  385. package/src/utils/native-require.ts +8 -8
  386. package/src/utils/serialize.ts +139 -146
  387. package/src/utils/verbose.ts +18 -18
  388. package/reference/overview.md +0 -35
  389. package/src/cli/analyze-print.ts +0 -181
  390. package/src/compat/middleware/manifest.ts +0 -210
  391. package/src/compat/next/image-client.tsx +0 -215
  392. package/src/compat/next/link-usage.ts +0 -29
  393. package/src/css/index.ts +0 -2
  394. package/src/render/index.ts +0 -1
  395. package/src/style-modules.d.ts +0 -9
package/src/index.ts CHANGED
@@ -16,12 +16,12 @@ export type {
16
16
  ServerComponent,
17
17
  StaticParams,
18
18
  Viewport,
19
- } from './types';
20
- export type { PNextMetadataExport, PNextViewportExport } from './internal';
19
+ } from './types'
20
+ export type { PNextMetadataExport, PNextViewportExport } from './internal'
21
21
 
22
- export { Link } from './api/link';
23
- export { dynamic } from './api/dynamic';
24
- export { Suspense, type SuspenseProps } from './api/suspense';
22
+ export { Link } from './api/link'
23
+ export { dynamic } from './api/dynamic'
24
+ export { Suspense, type SuspenseProps } from './api/suspense'
25
25
  export {
26
26
  href,
27
27
  notFound,
@@ -29,6 +29,6 @@ export {
29
29
  PNextNotFoundError,
30
30
  PNextRedirectError,
31
31
  redirect,
32
- } from './api/navigation';
33
- export type { HrefOptions, RedirectOptions, RedirectStatus } from './api/navigation';
34
- export { NextResponse } from './api/server';
32
+ } from './api/navigation'
33
+ export type { HrefOptions, RedirectOptions, RedirectStatus } from './api/navigation'
34
+ export { NextResponse } from './api/server'
package/src/internal.ts CHANGED
@@ -6,38 +6,35 @@ import type {
6
6
  ServerComponent,
7
7
  StaticParams,
8
8
  Viewport,
9
- } from './types';
9
+ } from './types'
10
10
 
11
- export type PNextMetadataExport = Metadata | (() => Metadata | Promise<Metadata>);
12
- export type PNextViewportExport = Viewport | (() => Viewport | Promise<Viewport>);
11
+ export type PNextMetadataExport = Metadata | (() => Metadata | Promise<Metadata>)
12
+ export type PNextViewportExport = Viewport | (() => Viewport | Promise<Viewport>)
13
13
 
14
14
  export interface PNextPageModule<Route extends RoutePath> {
15
- default: ServerComponent<PageProps<Route>>;
16
- params?: () => StaticParams<Route>;
17
- metadata?: PNextMetadataExport;
18
- viewport?: PNextViewportExport;
15
+ default: ServerComponent<PageProps<Route>>
16
+ params?: () => StaticParams<Route>
17
+ metadata?: PNextMetadataExport
18
+ viewport?: PNextViewportExport
19
19
  }
20
20
 
21
21
  export interface PNextLayoutModule {
22
- default?: ServerComponent<LayoutProps>;
23
- metadata?: PNextMetadataExport;
24
- viewport?: PNextViewportExport;
22
+ default?: ServerComponent<LayoutProps>
23
+ metadata?: PNextMetadataExport
24
+ viewport?: PNextViewportExport
25
25
  }
26
26
 
27
27
  type NextHandler = {
28
- bivarianceHack(
29
- request: never,
30
- context: never,
31
- ): Response | Promise<Response>;
32
- }['bivarianceHack'];
28
+ bivarianceHack(request: never, context: never): Response | Promise<Response>
29
+ }['bivarianceHack']
33
30
 
34
31
  export interface PNextRouteHandlerModule<Route extends RoutePath> {
35
- GET?: NextHandler;
36
- POST?: NextHandler;
37
- PUT?: NextHandler;
38
- PATCH?: NextHandler;
39
- DELETE?: NextHandler;
40
- OPTIONS?: NextHandler;
41
- HEAD?: NextHandler;
42
- params?: () => StaticParams<Route>;
32
+ GET?: NextHandler
33
+ POST?: NextHandler
34
+ PUT?: NextHandler
35
+ PATCH?: NextHandler
36
+ DELETE?: NextHandler
37
+ OPTIONS?: NextHandler
38
+ HEAD?: NextHandler
39
+ params?: () => StaticParams<Route>
43
40
  }
@@ -3,6 +3,6 @@
3
3
  * boundary: the client entry turns it back into a throw at hydration, so the
4
4
  * island's own error boundary catches it.
5
5
  */
6
- export const ISLAND_BOUNDARY_ERROR_ELEMENT = 'pnext-boundary-error';
7
- export const ISLAND_BOUNDARY_ERROR_MESSAGE_ATTRIBUTE = 'data-pnext-error-message';
8
- export const ISLAND_BOUNDARY_ERROR_DIGEST_ATTRIBUTE = 'data-pnext-error-digest';
6
+ export const ISLAND_BOUNDARY_ERROR_ELEMENT = 'pnext-boundary-error'
7
+ export const ISLAND_BOUNDARY_ERROR_MESSAGE_ATTRIBUTE = 'data-pnext-error-message'
8
+ export const ISLAND_BOUNDARY_ERROR_DIGEST_ATTRIBUTE = 'data-pnext-error-digest'
@@ -10,25 +10,25 @@
10
10
  // inverted - core never imports compat. Types stay structural so core carries no type dependency on any
11
11
  // compat module.
12
12
 
13
- import type { ResolvedConfig } from '../config';
14
- import type { Metadata, MetadataLink, PageProps, Viewport } from '../types';
15
- import { restoreWithExtensionHost } from '../extensions';
13
+ import type { ResolvedConfig } from '../config'
14
+ import type { Metadata, MetadataLink, PageProps, Viewport } from '../types'
15
+ import { restoreWithExtensionHost } from '../extensions'
16
16
 
17
17
  // ---------------------------------------------------------------------------
18
18
  // Compat enablement gates (pure config reads; kept in core so render never
19
- // imports compat/index just to branch on the mode). MUST stay in sync with
20
- // compat/index.ts reactCompatEnabled / nextCompatEnabled and the inlined gate
19
+ // imports compat/aliases just to branch on the mode). MUST stay in sync with
20
+ // compat/aliases.ts reactCompatEnabled / nextCompatEnabled and the inlined gate
21
21
  // in compat-bootstrap.ts.
22
22
  // ---------------------------------------------------------------------------
23
23
 
24
24
  /** Next compat is on (server actions, next/* modules, authInterrupts). */
25
25
  export function nextCompatEnabled(config: ResolvedConfig): boolean {
26
- return Boolean(config.compat?.next);
26
+ return Boolean(config.compat?.next)
27
27
  }
28
28
 
29
29
  /** React compat is on (next implies react; react/react-dom aliasing, use() replay). */
30
30
  export function reactCompatEnabled(config: ResolvedConfig): boolean {
31
- return Boolean(config.compat?.next || config.compat?.react || config.compat?.reactCompiler);
31
+ return Boolean(config.compat?.next || config.compat?.react || config.compat?.reactCompiler)
32
32
  }
33
33
 
34
34
  // ---------------------------------------------------------------------------
@@ -38,8 +38,8 @@ export function reactCompatEnabled(config: ResolvedConfig): boolean {
38
38
 
39
39
  /** Resolved next/font CSS + preload links for a render (mirrors ResolvedFontAssets). */
40
40
  export interface RenderFontAssets {
41
- css: string;
42
- preloads: MetadataLink[];
41
+ css: string
42
+ preloads: MetadataLink[]
43
43
  }
44
44
 
45
45
  export interface FontExtensions {
@@ -48,7 +48,7 @@ export interface FontExtensions {
48
48
  * register their definitions. Compat installs the AsyncLocalStorage scope
49
49
  * (compat/next/font/runtime runWithFontScope). Default: run untouched.
50
50
  */
51
- runWithFontScope: <T>(callback: () => T) => T;
51
+ runWithFontScope: <T>(callback: () => T) => T
52
52
 
53
53
  /**
54
54
  * Emit the CSS + preload links for the fonts registered during the current
@@ -57,7 +57,7 @@ export interface FontExtensions {
57
57
  collectFontAssets: (
58
58
  config: ResolvedConfig,
59
59
  options: { dev?: boolean },
60
- ) => Promise<RenderFontAssets>;
60
+ ) => Promise<RenderFontAssets>
61
61
 
62
62
  /**
63
63
  * Resolve every font declared by modules loaded so far, without waiting for a render to register
@@ -65,21 +65,21 @@ export interface FontExtensions {
65
65
  * render, so it serializes behind everything. Called off the request's critical path, it lands in
66
66
  * the same memo the render reads. Default: none.
67
67
  */
68
- prewarmFontAssets: (config: ResolvedConfig, options: { dev?: boolean }) => Promise<void>;
68
+ prewarmFontAssets: (config: ResolvedConfig, options: { dev?: boolean }) => Promise<void>
69
69
  }
70
70
 
71
71
  const fontExtensions: FontExtensions = {
72
72
  runWithFontScope: callback => callback(),
73
73
  collectFontAssets: () => Promise.resolve({ css: '', preloads: [] }),
74
74
  prewarmFontAssets: () => Promise.resolve(),
75
- };
75
+ }
76
76
 
77
77
  export function getFontExtensions(): FontExtensions {
78
- return fontExtensions;
78
+ return fontExtensions
79
79
  }
80
80
 
81
81
  export function setFontExtensions(overrides: Partial<FontExtensions>): void {
82
- Object.assign(fontExtensions, overrides);
82
+ Object.assign(fontExtensions, overrides)
83
83
  }
84
84
 
85
85
  // Suspense identity - compat apps render React's Suspense (preact/compat), which streaming must recognize
@@ -91,29 +91,29 @@ export interface SuspenseExtensions {
91
91
  * Lazily resolve the compat Suspense component type (preact/compat) once, so the streaming tree walker can
92
92
  * treat it as a boundary. Default is a noop - core streaming uses its own Suspense marker only.
93
93
  */
94
- ensureCompatSuspense: (config: ResolvedConfig) => Promise<void>;
94
+ ensureCompatSuspense: (config: ResolvedConfig) => Promise<void>
95
95
  /** The resolved compat Suspense type, or undefined for a pure-core render. */
96
- compatSuspenseType: () => unknown;
96
+ compatSuspenseType: () => unknown
97
97
  }
98
98
 
99
99
  const suspenseExtensions: SuspenseExtensions = {
100
100
  ensureCompatSuspense: () => Promise.resolve(),
101
101
  compatSuspenseType: () => undefined,
102
- };
102
+ }
103
103
 
104
104
  export function getSuspenseExtensions(): SuspenseExtensions {
105
- return suspenseExtensions;
105
+ return suspenseExtensions
106
106
  }
107
107
 
108
108
  export function setSuspenseExtensions(overrides: Partial<SuspenseExtensions>): void {
109
- Object.assign(suspenseExtensions, overrides);
109
+ Object.assign(suspenseExtensions, overrides)
110
110
  }
111
111
 
112
112
  export interface StreamRouteExtensions {
113
113
  canStreamRoute: (input: {
114
- config: ResolvedConfig;
115
- route: { client?: boolean; stream?: unknown };
116
- }) => boolean;
114
+ config: ResolvedConfig
115
+ route: { client?: boolean; stream?: unknown }
116
+ }) => boolean
117
117
  /**
118
118
  * True when the route must stream through a SINGLE preact render (suspending
119
119
  * in place) rather than the out-of-order resolve walk, because an ancestor
@@ -121,88 +121,88 @@ export interface StreamRouteExtensions {
121
121
  * rendered replacement chunk would lose. See renderClientPageStreamShell.
122
122
  */
123
123
  inlineSuspenseStream: (input: {
124
- config: ResolvedConfig;
125
- route: { client?: boolean; stream?: unknown };
126
- }) => boolean;
124
+ config: ResolvedConfig
125
+ route: { client?: boolean; stream?: unknown }
126
+ }) => boolean
127
127
  }
128
128
 
129
129
  const streamRouteExtensions: StreamRouteExtensions = {
130
130
  canStreamRoute: () => true,
131
131
  inlineSuspenseStream: () => false,
132
- };
132
+ }
133
133
 
134
134
  export function getStreamRouteExtensions(): StreamRouteExtensions {
135
- return streamRouteExtensions;
135
+ return streamRouteExtensions
136
136
  }
137
137
 
138
138
  export function setStreamRouteExtensions(overrides: Partial<StreamRouteExtensions>): void {
139
- Object.assign(streamRouteExtensions, overrides);
139
+ Object.assign(streamRouteExtensions, overrides)
140
140
  }
141
141
 
142
142
  export interface StreamBoundaryExtensions {
143
- onStreamBoundaryError: (error: unknown) => void | Promise<void>;
143
+ onStreamBoundaryError: (error: unknown) => void | Promise<void>
144
144
  }
145
145
 
146
146
  const streamBoundaryExtensions: StreamBoundaryExtensions = {
147
147
  onStreamBoundaryError: () => undefined,
148
- };
148
+ }
149
149
 
150
150
  export function getStreamBoundaryExtensions(): StreamBoundaryExtensions {
151
- return streamBoundaryExtensions;
151
+ return streamBoundaryExtensions
152
152
  }
153
153
 
154
154
  export function setStreamBoundaryExtensions(overrides: Partial<StreamBoundaryExtensions>): void {
155
- Object.assign(streamBoundaryExtensions, overrides);
155
+ Object.assign(streamBoundaryExtensions, overrides)
156
156
  }
157
157
 
158
158
  export function reportStreamBoundaryError(error: unknown): void {
159
159
  try {
160
- const result = streamBoundaryExtensions.onStreamBoundaryError(error);
160
+ const result = streamBoundaryExtensions.onStreamBoundaryError(error)
161
161
  if (isThenable(result)) {
162
162
  void Promise.resolve(result).catch(reportError => {
163
- console.error('stream boundary error hook failed:', reportError);
164
- });
163
+ console.error('stream boundary error hook failed:', reportError)
164
+ })
165
165
  }
166
166
  } catch (reportError) {
167
- console.error('stream boundary error hook failed:', reportError);
167
+ console.error('stream boundary error hook failed:', reportError)
168
168
  }
169
169
  }
170
170
 
171
171
  function isThenable(value: unknown): value is PromiseLike<unknown> {
172
- return typeof (value as { then?: unknown } | null | undefined)?.then === 'function';
172
+ return typeof (value as { then?: unknown } | null | undefined)?.then === 'function'
173
173
  }
174
174
 
175
175
  // Metadata resolver - core handles static/build-time metadata. Compat registers request-time/streaming-
176
176
  // compatible metadata resolvers here without adding a core-to-compat import edge.
177
177
 
178
178
  export interface MetadataExtensions {
179
- enabled: (config: ResolvedConfig) => boolean;
180
- hasRuntimeMetadata: (module: Record<string, unknown>) => boolean;
179
+ enabled: (config: ResolvedConfig) => boolean
180
+ hasRuntimeMetadata: (module: Record<string, unknown>) => boolean
181
181
  readModuleMetadata: (
182
182
  module: Record<string, unknown>,
183
183
  props: PageProps,
184
184
  parent: Metadata,
185
185
  modulePath?: string,
186
- ) => Promise<Metadata | undefined>;
186
+ ) => Promise<Metadata | undefined>
187
187
  readModuleViewport: (
188
188
  module: Record<string, unknown>,
189
189
  props: PageProps,
190
- ) => Promise<Viewport | undefined>;
191
- shouldRenderMetadataInBody: (input: { config: ResolvedConfig; request?: Request }) => boolean;
190
+ ) => Promise<Viewport | undefined>
191
+ shouldRenderMetadataInBody: (input: { config: ResolvedConfig; request?: Request }) => boolean
192
192
  }
193
193
 
194
- const metadataExtensions: Partial<MetadataExtensions> = {};
194
+ const metadataExtensions: Partial<MetadataExtensions> = {}
195
195
 
196
196
  export function getMetadataExtensions(): Partial<MetadataExtensions> {
197
- return metadataExtensions;
197
+ return metadataExtensions
198
198
  }
199
199
 
200
200
  export function getActiveMetadataExtensions(config: ResolvedConfig): Partial<MetadataExtensions> {
201
- return metadataExtensions.enabled?.(config) ? metadataExtensions : {};
201
+ return metadataExtensions.enabled?.(config) ? metadataExtensions : {}
202
202
  }
203
203
 
204
204
  export function setMetadataExtensions(overrides: Partial<MetadataExtensions>): void {
205
- Object.assign(metadataExtensions, overrides);
205
+ Object.assign(metadataExtensions, overrides)
206
206
  }
207
207
 
208
208
  // ---------------------------------------------------------------------------
@@ -212,14 +212,14 @@ export function setMetadataExtensions(overrides: Partial<MetadataExtensions>): v
212
212
 
213
213
  export interface DocumentScriptExtensions {
214
214
  /** Optional precedence assigned to renderer-managed stylesheet links. */
215
- stylesheetPrecedence: (config: ResolvedConfig) => string | undefined;
215
+ stylesheetPrecedence: (config: ResolvedConfig) => string | undefined
216
216
 
217
217
  /**
218
218
  * Inline scripts compat injects near the end of the document body, before the
219
219
  * props/route/client scripts. Compat (react) returns Next's window.next router
220
220
  * shim. Default: '' (core injects no compat scripts).
221
221
  */
222
- documentBodyScripts: (config: ResolvedConfig) => string;
222
+ documentBodyScripts: (config: ResolvedConfig) => string
223
223
 
224
224
  /**
225
225
  * Inline tags compat injects into the document `<head>` once per document
@@ -229,23 +229,23 @@ export interface DocumentScriptExtensions {
229
229
  * (otel) composes clientTraceMetadata `<meta>` tags here. Default: '' (core
230
230
  * injects no compat head tags).
231
231
  */
232
- documentHeadTags?: (config: ResolvedConfig, ctx: { dynamic: boolean; rsc: boolean }) => string;
232
+ documentHeadTags?: (config: ResolvedConfig, ctx: { dynamic: boolean; rsc: boolean }) => string
233
233
 
234
234
  /** Tags collected after the document shell has flushed. */
235
- streamInsertedHTML?: () => string;
235
+ streamInsertedHTML?: () => string
236
236
  }
237
237
 
238
238
  const documentScriptExtensions: DocumentScriptExtensions = {
239
239
  stylesheetPrecedence: () => undefined,
240
240
  documentBodyScripts: () => '',
241
- };
241
+ }
242
242
 
243
243
  export function getDocumentScriptExtensions(): DocumentScriptExtensions {
244
- return documentScriptExtensions;
244
+ return documentScriptExtensions
245
245
  }
246
246
 
247
247
  export function setDocumentScriptExtensions(overrides: Partial<DocumentScriptExtensions>): void {
248
- Object.assign(documentScriptExtensions, overrides);
248
+ Object.assign(documentScriptExtensions, overrides)
249
249
  }
250
250
 
251
251
  // ---------------------------------------------------------------------------
@@ -254,7 +254,7 @@ export function setDocumentScriptExtensions(overrides: Partial<DocumentScriptExt
254
254
  // ---------------------------------------------------------------------------
255
255
 
256
256
  export interface StaticParamsExtensions {
257
- normalizeModule: (module: Record<string, unknown>) => Record<string, unknown>;
257
+ normalizeModule: (module: Record<string, unknown>) => Record<string, unknown>
258
258
  }
259
259
 
260
260
  const staticParamsExtensions: StaticParamsExtensions = {
@@ -262,14 +262,14 @@ const staticParamsExtensions: StaticParamsExtensions = {
262
262
  typeof module.params === 'function' || typeof module.generateStaticParams !== 'function'
263
263
  ? module
264
264
  : { ...module, params: module.generateStaticParams },
265
- };
265
+ }
266
266
 
267
267
  export function getStaticParamsExtensions(): StaticParamsExtensions {
268
- return staticParamsExtensions;
268
+ return staticParamsExtensions
269
269
  }
270
270
 
271
271
  export function setStaticParamsExtensions(overrides: Partial<StaticParamsExtensions>): void {
272
- Object.assign(staticParamsExtensions, overrides);
272
+ Object.assign(staticParamsExtensions, overrides)
273
273
  }
274
274
 
275
275
  // Server-action module tagging - when a server render imports a 'use server' module, compat tags each
@@ -287,7 +287,7 @@ export interface ActionModuleExtensions {
287
287
  tagActionModulesForRender: (
288
288
  config: ResolvedConfig,
289
289
  importModule: (file: string) => Promise<Record<string, unknown>>,
290
- ) => Promise<void>;
290
+ ) => Promise<void>
291
291
 
292
292
  /**
293
293
  * Tag the exports of a freshly imported module when it is a discovered action
@@ -298,20 +298,20 @@ export interface ActionModuleExtensions {
298
298
  config: ResolvedConfig,
299
299
  file: string,
300
300
  module: Record<string, unknown>,
301
- ) => void;
301
+ ) => void
302
302
  }
303
303
 
304
304
  const actionModuleExtensions: ActionModuleExtensions = {
305
305
  tagActionModulesForRender: () => Promise.resolve(),
306
306
  tagActionModuleExports: () => undefined,
307
- };
307
+ }
308
308
 
309
309
  export function getActionModuleExtensions(): ActionModuleExtensions {
310
- return actionModuleExtensions;
310
+ return actionModuleExtensions
311
311
  }
312
312
 
313
313
  export function setActionModuleExtensions(overrides: Partial<ActionModuleExtensions>): void {
314
- Object.assign(actionModuleExtensions, overrides);
314
+ Object.assign(actionModuleExtensions, overrides)
315
315
  }
316
316
 
317
317
  // Render span seam - compat (otel) wraps the render-body and route-resolution phases in OpenTelemetry
@@ -325,14 +325,14 @@ export interface RenderSpanExtensions {
325
325
  * `render route (app) <route>` span (`AppRender.getBodyResult`). `route` is
326
326
  * the route PATTERN. Default: run `fn` untouched.
327
327
  */
328
- withRenderBodySpan: <T>(route: string, fn: () => Promise<T>) => Promise<T>;
328
+ withRenderBodySpan: <T>(route: string, fn: () => Promise<T>) => Promise<T>
329
329
 
330
330
  /**
331
331
  * Wrap route-component resolution (page module import) so compat emits the
332
332
  * `resolve page components` span (`NextNodeServer.findPageComponents`,
333
333
  * sibling of the render-body span under the root). Default: run `fn`.
334
334
  */
335
- withFindPageComponentsSpan: <T>(route: string, fn: () => Promise<T>) => Promise<T>;
335
+ withFindPageComponentsSpan: <T>(route: string, fn: () => Promise<T>) => Promise<T>
336
336
 
337
337
  /**
338
338
  * Emit a cheap leaf `resolve segment modules` span
@@ -341,14 +341,14 @@ export interface RenderSpanExtensions {
341
341
  * `__PAGE__` for the leaf page or the dynamic/literal dir label for a layout.
342
342
  * Default: noop.
343
343
  */
344
- emitResolveSegmentSpan: (segment: string) => void;
344
+ emitResolveSegmentSpan: (segment: string) => void
345
345
 
346
346
  /**
347
347
  * Wrap a route-handler invocation so compat emits the
348
348
  * `executing api route (app) <route>` span (`AppRouteRouteHandlers.
349
349
  * runHandler`). `route` is the core route PATTERN. Default: run `fn`.
350
350
  */
351
- withRouteHandlerSpan: <T>(route: string, fn: () => Promise<T>) => Promise<T>;
351
+ withRouteHandlerSpan: <T>(route: string, fn: () => Promise<T>) => Promise<T>
352
352
  }
353
353
 
354
354
  const renderSpanExtensions: RenderSpanExtensions = {
@@ -356,14 +356,14 @@ const renderSpanExtensions: RenderSpanExtensions = {
356
356
  withFindPageComponentsSpan: (_route, fn) => fn(),
357
357
  emitResolveSegmentSpan: () => undefined,
358
358
  withRouteHandlerSpan: (_route, fn) => fn(),
359
- };
359
+ }
360
360
 
361
361
  export function getRenderSpanExtensions(): RenderSpanExtensions {
362
- return renderSpanExtensions;
362
+ return renderSpanExtensions
363
363
  }
364
364
 
365
365
  export function setRenderSpanExtensions(overrides: Partial<RenderSpanExtensions>): void {
366
- Object.assign(renderSpanExtensions, overrides);
366
+ Object.assign(renderSpanExtensions, overrides)
367
367
  }
368
368
 
369
369
  // Compat populates every registry above at the bootstrap seam, exactly as it
@@ -380,5 +380,5 @@ for (const registry of [
380
380
  actionModuleExtensions,
381
381
  renderSpanExtensions,
382
382
  ]) {
383
- restoreWithExtensionHost(registry);
383
+ restoreWithExtensionHost(registry)
384
384
  }
@@ -1,15 +1,15 @@
1
- import { createContext, type Context } from 'preact';
1
+ import { createContext, type Context } from 'preact'
2
2
 
3
3
  // Island SSR runs prebundled client chunks — a separate module graph with its own copy of this file, so
4
4
  // a plain createContext() would mint two identity-mismatched contexts. Resolve one shared instance.
5
5
  function sharedContext<T>(key: string, defaultValue: T): Context<T> {
6
- const registry = globalThis as typeof globalThis & Record<symbol, Context<unknown>>;
7
- const symbol = Symbol.for(key);
8
- const existing = registry[symbol];
9
- if (existing) return existing as Context<T>;
10
- const context = createContext<T>(defaultValue);
11
- registry[symbol] = context as Context<unknown>;
12
- return context;
6
+ const registry = globalThis as typeof globalThis & Record<symbol, Context<unknown>>
7
+ const symbol = Symbol.for(key)
8
+ const existing = registry[symbol]
9
+ if (existing) return existing as Context<T>
10
+ const context = createContext<T>(defaultValue)
11
+ registry[symbol] = context as Context<unknown>
12
+ return context
13
13
  }
14
14
 
15
15
  // ---------------------------------------------------------------------------
@@ -33,17 +33,17 @@ function sharedContext<T>(key: string, defaultValue: T): Context<T> {
33
33
 
34
34
  export interface LayoutSegmentSnapshot {
35
35
  /** Segments consumed AT or ABOVE the owning layout's directory. */
36
- depth: number;
36
+ depth: number
37
37
  /** Resolved URL segments below the owning layout (server-side truth). */
38
- segments: string[];
38
+ segments: string[]
39
39
  /** Resolved segments per parallel-route slot key (server-side truth). */
40
- slots: Record<string, string[]>;
40
+ slots: Record<string, string[]>
41
41
  }
42
42
 
43
43
  export const LayoutSegmentContext = sharedContext<LayoutSegmentSnapshot | null>(
44
44
  'pnext.layoutSegmentContext',
45
45
  null,
46
- );
46
+ )
47
47
 
48
48
  // Per-island params snapshot (CORE seam for compat useParams).
49
49
  //
@@ -57,9 +57,9 @@ export const LayoutSegmentContext = sharedContext<LayoutSegmentSnapshot | null>(
57
57
  // Kept in core (imports only `preact`) so both the renderer's SSR wrap and the entry's client mount
58
58
  // reference the SAME context object, exactly like LayoutSegmentContext above.
59
59
 
60
- export type RouteParamsSnapshot = Record<string, string | string[]>;
60
+ export type RouteParamsSnapshot = Record<string, string | string[]>
61
61
 
62
62
  export const RouteParamsContext = sharedContext<RouteParamsSnapshot | null>(
63
63
  'pnext.routeParamsContext',
64
64
  null,
65
- );
65
+ )