@wular/pnext 0.1.5 → 0.1.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 (302) hide show
  1. package/bin/pnext +9 -2
  2. package/dist/server/_chunks/aliases-j47a10ce.js +44 -0
  3. package/dist/server/_chunks/analyze-arswqe6s.js +445 -0
  4. package/dist/server/_chunks/boot-af0mv3dy.js +36 -0
  5. package/dist/server/_chunks/build-spy3dxp4.js +84 -0
  6. package/dist/server/_chunks/build-t9h0hec3.js +3550 -0
  7. package/dist/server/_chunks/build-tier-m7yvqz61.js +2472 -0
  8. package/dist/server/_chunks/compile-53j02j27.js +22 -0
  9. package/dist/server/_chunks/config-1yzwexq6.js +27 -0
  10. package/dist/server/_chunks/config-n2z7yxps.js +22 -0
  11. package/dist/server/_chunks/create-meec9hs6.js +134 -0
  12. package/dist/server/_chunks/dev-fjmqg6en.js +220 -0
  13. package/dist/server/_chunks/esbuild-yyktfrtt.js +15 -0
  14. package/dist/server/_chunks/generate-n9sh6hzt.js +21 -0
  15. package/dist/server/_chunks/index-0374j2b9.js +66 -0
  16. package/dist/server/_chunks/index-06nyqntx.js +213 -0
  17. package/dist/server/_chunks/index-1011cscr.js +5263 -0
  18. package/dist/server/_chunks/index-11sfk4hb.js +170 -0
  19. package/dist/server/_chunks/index-20ppawv7.js +297 -0
  20. package/dist/server/_chunks/index-2dv4y4wd.js +1065 -0
  21. package/dist/server/_chunks/index-2vz0wzdn.js +59 -0
  22. package/dist/server/_chunks/index-2wfv4kvx.js +182 -0
  23. package/dist/server/_chunks/index-357na4a8.js +109 -0
  24. package/dist/server/_chunks/index-3b3at80h.js +109 -0
  25. package/dist/server/_chunks/index-3tf1xjsp.js +6166 -0
  26. package/dist/server/_chunks/index-3xbr4eyv.js +105 -0
  27. package/dist/server/_chunks/index-4399bvd2.js +18 -0
  28. package/dist/server/_chunks/index-4hgjrqh7.js +851 -0
  29. package/dist/server/_chunks/index-4q2gbfwk.js +2530 -0
  30. package/dist/server/_chunks/index-4t92hdxd.js +172 -0
  31. package/dist/server/_chunks/index-4zzebszd.js +10 -0
  32. package/dist/server/_chunks/index-5gyr4emz.js +107 -0
  33. package/dist/server/_chunks/index-5hr4062s.js +70 -0
  34. package/dist/server/_chunks/index-68m3mwbd.js +84 -0
  35. package/dist/server/_chunks/index-6b009mt0.js +56 -0
  36. package/dist/server/_chunks/index-6e4fqv30.js +588 -0
  37. package/dist/server/_chunks/index-6gex3pfa.js +15 -0
  38. package/dist/server/_chunks/index-6kp9r0d9.js +11 -0
  39. package/dist/server/_chunks/index-6q7zvrap.js +134 -0
  40. package/dist/server/_chunks/index-73z4esab.js +38 -0
  41. package/dist/server/_chunks/index-79ngvam8.js +60 -0
  42. package/dist/server/_chunks/index-7wc9n8be.js +25 -0
  43. package/dist/server/_chunks/index-8k7pfejn.js +1599 -0
  44. package/dist/server/_chunks/index-8kcxdfya.js +206 -0
  45. package/dist/server/_chunks/index-91x12ykq.js +274 -0
  46. package/dist/server/_chunks/index-9ch50vtq.js +18 -0
  47. package/dist/server/_chunks/index-9hx2641q.js +28 -0
  48. package/dist/server/_chunks/index-9n2914ww.js +535 -0
  49. package/dist/server/_chunks/index-9ych9ma8.js +207 -0
  50. package/dist/server/_chunks/index-b6wtkdp4.js +24 -0
  51. package/dist/server/_chunks/index-bcws5eh2.js +35 -0
  52. package/dist/server/_chunks/index-c0g2wf3z.js +92 -0
  53. package/dist/server/_chunks/index-cf4rvxv6.js +95 -0
  54. package/dist/server/_chunks/index-cjgqs13g.js +65 -0
  55. package/dist/server/_chunks/index-ckkdpht5.js +41 -0
  56. package/dist/server/_chunks/index-cyfednwb.js +87 -0
  57. package/dist/server/_chunks/index-danncfhy.js +311 -0
  58. package/dist/server/_chunks/index-dg0f05zs.js +199 -0
  59. package/dist/server/_chunks/index-e3a6yx84.js +18 -0
  60. package/dist/server/_chunks/index-e88tyv35.js +45 -0
  61. package/dist/server/_chunks/index-eajaspjk.js +1253 -0
  62. package/dist/server/_chunks/index-eeaanp2e.js +483 -0
  63. package/dist/server/_chunks/index-egykcqg3.js +101 -0
  64. package/dist/server/_chunks/index-en7n9f7m.js +22 -0
  65. package/dist/server/_chunks/index-ezgj0tr1.js +88 -0
  66. package/dist/server/_chunks/index-fkp000p1.js +590 -0
  67. package/dist/server/_chunks/index-fn1chkkd.js +214 -0
  68. package/dist/server/_chunks/index-fp8r0sqs.js +64 -0
  69. package/dist/server/_chunks/index-ggk2j965.js +9432 -0
  70. package/dist/server/_chunks/index-grta8ap3.js +238 -0
  71. package/dist/server/_chunks/index-h2a70tg4.js +7 -0
  72. package/dist/server/_chunks/index-h4xy648y.js +51 -0
  73. package/dist/server/_chunks/index-hkdfj58q.js +92 -0
  74. package/dist/server/_chunks/index-j2zrcp1k.js +66 -0
  75. package/dist/server/_chunks/index-jcsjq3d1.js +20 -0
  76. package/dist/server/_chunks/index-jepjvcrf.js +198 -0
  77. package/dist/server/_chunks/index-jks0x0a1.js +14 -0
  78. package/dist/server/_chunks/index-jx7bqvw1.js +57 -0
  79. package/dist/server/_chunks/index-k1g3epw0.js +1299 -0
  80. package/dist/server/_chunks/index-knp0s912.js +7 -0
  81. package/dist/server/_chunks/index-kq8kpzye.js +472 -0
  82. package/dist/server/_chunks/index-kqyy1d4f.js +50 -0
  83. package/dist/server/_chunks/index-kresp2n8.js +445 -0
  84. package/dist/server/_chunks/index-ms9v9tnx.js +31 -0
  85. package/dist/server/_chunks/index-n4hxpng2.js +11 -0
  86. package/dist/server/_chunks/index-ncnes8c6.js +17 -0
  87. package/dist/server/_chunks/index-nqh3xhdc.js +57 -0
  88. package/dist/server/_chunks/index-nyrba2kr.js +4130 -0
  89. package/dist/server/_chunks/index-p77b4kcx.js +296 -0
  90. package/dist/server/_chunks/index-pym1cezq.js +39 -0
  91. package/dist/server/_chunks/index-q738kkhj.js +100 -0
  92. package/dist/server/_chunks/index-qjj6gddn.js +54 -0
  93. package/dist/server/_chunks/index-qm6kmhqs.js +110 -0
  94. package/dist/server/_chunks/index-qn4z5s3c.js +819 -0
  95. package/dist/server/_chunks/index-qpwsgt3a.js +158 -0
  96. package/dist/server/_chunks/index-r97ptz1q.js +97 -0
  97. package/dist/server/_chunks/index-ras0sdab.js +26 -0
  98. package/dist/server/_chunks/index-rcs322t1.js +19 -0
  99. package/dist/server/_chunks/index-rn8dyr1f.js +126 -0
  100. package/dist/server/_chunks/index-rt9qq1va.js +4 -0
  101. package/dist/server/_chunks/index-rthrsed5.js +356 -0
  102. package/dist/server/_chunks/index-sctcgyvv.js +185 -0
  103. package/dist/server/_chunks/index-sjpckxqn.js +213 -0
  104. package/dist/server/_chunks/index-sq3kvz3g.js +200 -0
  105. package/dist/server/_chunks/index-stbk3jhn.js +31 -0
  106. package/dist/server/_chunks/index-sv8m6789.js +266 -0
  107. package/dist/server/_chunks/index-tgcakdxc.js +125 -0
  108. package/dist/server/_chunks/index-tgsfjmep.js +74 -0
  109. package/dist/server/_chunks/index-tq0pc7eg.js +154 -0
  110. package/dist/server/_chunks/index-tq1f96v7.js +51 -0
  111. package/dist/server/_chunks/index-tqn2qnnn.js +241 -0
  112. package/dist/server/_chunks/index-tvqkq6e6.js +128 -0
  113. package/dist/server/_chunks/index-v1ags1na.js +132 -0
  114. package/dist/server/_chunks/index-vvmmknm1.js +1431 -0
  115. package/dist/server/_chunks/index-vvq7rqtn.js +329 -0
  116. package/dist/server/_chunks/index-vz0km5qk.js +33 -0
  117. package/dist/server/_chunks/index-w6h8m6vp.js +138 -0
  118. package/dist/server/_chunks/index-web361b8.js +138 -0
  119. package/dist/server/_chunks/index-wpfhfbs4.js +194 -0
  120. package/dist/server/_chunks/index-x0y005nh.js +283 -0
  121. package/dist/server/_chunks/index-x3yn4ywm.js +22 -0
  122. package/dist/server/_chunks/index-x93hv0sc.js +271 -0
  123. package/dist/server/_chunks/index-xvj80c3a.js +30 -0
  124. package/dist/server/_chunks/index-xywjg2vc.js +100 -0
  125. package/dist/server/_chunks/index-y2jr2n72.js +152 -0
  126. package/dist/server/_chunks/index-y36a0ybw.js +57 -0
  127. package/dist/server/_chunks/index-ye9hmsvf.js +47 -0
  128. package/dist/server/_chunks/index-yhxkxghe.js +56 -0
  129. package/dist/server/_chunks/index-ym67zqxp.js +130 -0
  130. package/dist/server/_chunks/index-ytjvpbm2.js +736 -0
  131. package/dist/server/_chunks/index-yz54pxrh.js +960 -0
  132. package/dist/server/_chunks/index-z4z9zv3b.js +733 -0
  133. package/dist/server/_chunks/index-z84ab1w0.js +1270 -0
  134. package/dist/server/_chunks/index-z88qv16t.js +11 -0
  135. package/dist/server/_chunks/index-zqpqyg8p.js +666 -0
  136. package/dist/server/_chunks/loader-7yw0j98z.js +78 -0
  137. package/dist/server/_chunks/modules-jn8bmbn8.js +74 -0
  138. package/dist/server/_chunks/pipeline-yy9jhydf.js +832 -0
  139. package/dist/server/_chunks/production-jar9ztm3.js +44 -0
  140. package/dist/server/_chunks/proxy-config-j84dgksn.js +21 -0
  141. package/dist/server/_chunks/proxy-w1d0wmsn.js +33 -0
  142. package/dist/server/_chunks/router-k1reahfn.js +498 -0
  143. package/dist/server/_chunks/routes-2s277fc6.js +64 -0
  144. package/dist/server/_chunks/run-pvd8bs1t.js +696 -0
  145. package/dist/server/_chunks/server-mt4a994c.js +1835 -0
  146. package/dist/server/_chunks/tsconfig-defaults-1nb3308g.js +20 -0
  147. package/dist/server/_chunks/typegen-0qr0459b.js +35 -0
  148. package/dist/server/api/client-cache.js +14 -0
  149. package/dist/server/cli/index.js +378 -0
  150. package/dist/server/cli/start.js +137 -0
  151. package/dist/server/client/reference.js +16 -0
  152. package/dist/server/compat/next/cache.js +56 -0
  153. package/dist/server/compat/next/canonical-url.js +13 -0
  154. package/dist/server/compat/next/client-cache.js +57 -0
  155. package/dist/server/compat/next/client-navigation.js +232 -0
  156. package/dist/server/compat/next/client-only.js +1 -0
  157. package/dist/server/compat/next/client-script.js +178 -0
  158. package/dist/server/compat/next/client-server.js +34 -0
  159. package/dist/server/compat/next/config-headers.js +32 -0
  160. package/dist/server/compat/next/config-loader.js +25 -0
  161. package/dist/server/compat/next/config.js +10 -0
  162. package/dist/server/compat/next/constants.js +18 -0
  163. package/dist/server/compat/next/custom-server.js +10 -0
  164. package/dist/server/compat/next/dist/client/components/app-router-headers.js +48 -0
  165. package/dist/server/compat/next/dist/server/web/spec-extension/revalidate.js +27 -0
  166. package/dist/server/compat/next/dist/server/web/spec-extension/unstable-cache.js +25 -0
  167. package/dist/server/compat/next/dist/server/web/spec-extension/unstable-no-store.js +25 -0
  168. package/dist/server/compat/next/dynamic.js +32 -0
  169. package/dist/server/compat/next/error.js +112 -0
  170. package/dist/server/compat/next/font/cache.js +14 -0
  171. package/dist/server/compat/next/font/google.js +3 -0
  172. package/dist/server/compat/next/font/index.js +1 -0
  173. package/dist/server/compat/next/font/local.js +22 -0
  174. package/dist/server/compat/next/font/runtime-client.js +33 -0
  175. package/dist/server/compat/next/font/runtime.js +41 -0
  176. package/dist/server/compat/next/font/shared.js +22 -0
  177. package/dist/server/compat/next/form.js +129 -0
  178. package/dist/server/compat/next/head.js +10 -0
  179. package/dist/server/compat/next/headers.js +30 -0
  180. package/dist/server/compat/next/image/client.js +11 -0
  181. package/dist/server/compat/next/image/config.js +18 -0
  182. package/dist/server/compat/next/image/optimizer.js +25 -0
  183. package/dist/server/compat/next/image/patterns.js +12 -0
  184. package/dist/server/compat/next/image/props.js +16 -0
  185. package/dist/server/compat/next/image/shared.js +86 -0
  186. package/dist/server/compat/next/image/static-metadata.js +32 -0
  187. package/dist/server/compat/next/image/validate.js +8 -0
  188. package/dist/server/compat/next/image.js +59 -0
  189. package/dist/server/compat/next/index.js +1 -0
  190. package/dist/server/compat/next/legacy-image.js +78 -0
  191. package/dist/server/compat/next/legacy-request-apis.js +24 -0
  192. package/dist/server/compat/next/link-transform.js +14 -0
  193. package/dist/server/compat/next/link.js +14 -0
  194. package/dist/server/compat/next/navigation.js +190 -0
  195. package/dist/server/compat/next/offline.js +45 -0
  196. package/dist/server/compat/next/og.js +8 -0
  197. package/dist/server/compat/next/preferred-region.js +8 -0
  198. package/dist/server/compat/next/redirects.js +30 -0
  199. package/dist/server/compat/next/resource-hints.js +30 -0
  200. package/dist/server/compat/next/rewrites.js +41 -0
  201. package/dist/server/compat/next/root-params.js +121 -0
  202. package/dist/server/compat/next/route-state.js +23 -0
  203. package/dist/server/compat/next/router.js +103 -0
  204. package/dist/server/compat/next/script.js +37 -0
  205. package/dist/server/compat/next/server-only.js +1 -0
  206. package/dist/server/compat/next/server.js +131 -0
  207. package/dist/server/compat/next/svgr.js +14 -0
  208. package/dist/server/compat/next/telemetry.js +10 -0
  209. package/dist/server/compat/next/usage.js +13 -0
  210. package/dist/server/compat/next/user-agent.js +12 -0
  211. package/dist/server/compat/next/web-vitals.js +35 -0
  212. package/dist/server/compat/react/action-state.js +11 -0
  213. package/dist/server/compat/react/client-lite.js +83 -0
  214. package/dist/server/compat/react/client.js +131 -0
  215. package/dist/server/compat/react/compiler-runtime.js +42 -0
  216. package/dist/server/compat/react/dom-client.js +106 -0
  217. package/dist/server/compat/react/dom-react-server.js +37 -0
  218. package/dist/server/compat/react/dom-server.js +40 -0
  219. package/dist/server/compat/react/dom.js +52 -0
  220. package/dist/server/compat/react/hooks-extra.js +12 -0
  221. package/dist/server/compat/react/internals.js +14 -0
  222. package/dist/server/compat/react/parity.js +11 -0
  223. package/dist/server/compat/react/preact.js +113 -0
  224. package/dist/server/compat/react/react-server.js +133 -0
  225. package/dist/server/compat/react/router-shim.js +8 -0
  226. package/dist/server/compat/react/server-component-use.js +14 -0
  227. package/dist/server/compat/react/server-inserted-html.js +14 -0
  228. package/dist/server/compat/react/server.js +194 -0
  229. package/dist/server/compat/react/style-values.js +10 -0
  230. package/dist/server/compat/react/use.js +10 -0
  231. package/dist/server/compat/react/view-transition.js +12 -0
  232. package/dist/server/generation.json +1 -0
  233. package/package.json +4 -1
  234. package/src/api/dynamic.tsx +2 -0
  235. package/src/api/server.ts +24 -6
  236. package/src/cli/adapters/vercel-warm.ts +315 -61
  237. package/src/cli/adapters/vercel.ts +348 -71
  238. package/src/cli/build.ts +58 -33
  239. package/src/cli/index.ts +23 -10
  240. package/src/cli/serve/entry.ts +21 -159
  241. package/src/cli/serve/immutable.ts +31 -0
  242. package/src/cli/serve/pipeline.ts +82 -84
  243. package/src/cli/start.ts +3 -1
  244. package/src/client/chunk-fold.ts +19 -6
  245. package/src/client/react-tier.ts +3 -2
  246. package/src/client/reference-stub.ts +21 -2
  247. package/src/compat/actions/client-plugin.ts +4 -2
  248. package/src/compat/actions/config.ts +6 -5
  249. package/src/compat/actions/extensions.ts +2 -3
  250. package/src/compat/aliases.ts +8 -1
  251. package/src/compat/bundler/config.ts +88 -0
  252. package/src/compat/bundler/optimize-package-imports.ts +86 -26
  253. package/src/compat/bundler/relay-transform.ts +15 -3
  254. package/src/compat/cache-control.ts +16 -8
  255. package/src/compat/css/modules.ts +18 -5
  256. package/src/compat/lifecycle/error-funnel.ts +1 -1
  257. package/src/compat/lifecycle/instrumentation.ts +117 -24
  258. package/src/compat/lifecycle/testmode.ts +3 -2
  259. package/src/compat/next/config-loader.ts +137 -13
  260. package/src/compat/next/font/runtime.ts +22 -2
  261. package/src/compat/next/og.ts +3 -3
  262. package/src/compat/next/usage.ts +3 -2
  263. package/src/compat/pages/api.ts +83 -14
  264. package/src/compat/pages/router.ts +30 -14
  265. package/src/compat/register/bundler.ts +3 -1
  266. package/src/compat/register/middleware.ts +1 -1
  267. package/src/compat/register/otel.ts +5 -9
  268. package/src/compat/register/render.ts +3 -1
  269. package/src/compat/register/use-cache.ts +3 -1
  270. package/src/compat/release.ts +46 -0
  271. package/src/compat/segment/serve.ts +1 -1
  272. package/src/compat/validation/validate.ts +10 -7
  273. package/src/config.ts +51 -7
  274. package/src/css/assets.ts +213 -0
  275. package/src/css/build.ts +174 -238
  276. package/src/dev/server.ts +27 -8
  277. package/src/extensions.ts +4 -0
  278. package/src/render/hooks.ts +13 -0
  279. package/src/render/renderer.ts +52 -32
  280. package/src/request/context.ts +9 -0
  281. package/src/resolve/dynamic.ts +3 -1
  282. package/src/resolve/imports.ts +12 -52
  283. package/src/resolve/package-json.ts +56 -0
  284. package/src/resolve/scan-facts.ts +65 -0
  285. package/src/routing/href.ts +10 -3
  286. package/src/routing/match.ts +287 -0
  287. package/src/routing/metadata-files.ts +19 -5
  288. package/src/routing/proxy-config.ts +137 -0
  289. package/src/routing/proxy.ts +35 -134
  290. package/src/routing/routes.ts +22 -281
  291. package/src/runtime/fingerprint.ts +23 -8
  292. package/src/runtime/load.ts +170 -0
  293. package/src/runtime/loader.ts +215 -43
  294. package/src/runtime/module-cache.ts +13 -0
  295. package/src/runtime/modules.ts +370 -81
  296. package/src/runtime/prebundle.ts +81 -0
  297. package/src/runtime/production.ts +391 -0
  298. package/src/runtime/release-graph.ts +334 -0
  299. package/src/runtime/vendor-build.ts +724 -13
  300. package/src/runtime/vendor.ts +16 -3
  301. package/src/types.ts +2 -0
  302. package/src/utils/fs.ts +89 -3
@@ -0,0 +1,590 @@
1
+ // @bun
2
+ import {
3
+ consumedSegments,
4
+ isGroupSegment,
5
+ isSlotSegment,
6
+ matchSegments,
7
+ matchSlotInterceptor,
8
+ pathnameSegments,
9
+ slotConventionFile,
10
+ slotDirectoriesIn
11
+ } from "./index-p77b4kcx.js";
12
+ import {
13
+ toPosixPath
14
+ } from "./index-20ppawv7.js";
15
+ import {
16
+ getRenderExtensions
17
+ } from "./index-zqpqyg8p.js";
18
+
19
+ // src/render/slots.tsx
20
+ import { AsyncLocalStorage } from "async_hooks";
21
+ import { basename, join, relative, sep } from "path";
22
+ import { h } from "preact";
23
+ import { Suspense } from "../../../src/api/suspense.ts";
24
+
25
+ // src/utils/serialize.ts
26
+ var TYPED_ARRAY_MARKER = "$$pnext_typed_array";
27
+ var ARRAY_BUFFER_MARKER = "$$pnext_array_buffer";
28
+ var MAP_MARKER = "$$pnext_map";
29
+ var SET_MARKER = "$$pnext_set";
30
+ var REF_MARKER = "$$pnext_ref";
31
+ var PROMISE_MARKER_KEY = "__pnextPromise";
32
+ function isTypedArray(value) {
33
+ return ArrayBuffer.isView(value) && !(value instanceof DataView);
34
+ }
35
+ function bytesToBase64(bytes) {
36
+ if (typeof Buffer !== "undefined")
37
+ return Buffer.from(bytes).toString("base64");
38
+ let binary = "";
39
+ for (const byte of bytes)
40
+ binary += String.fromCharCode(byte);
41
+ return btoa(binary);
42
+ }
43
+ function encodeTypedArray(value) {
44
+ const bytes = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
45
+ return { [TYPED_ARRAY_MARKER]: { type: value.constructor.name, data: bytesToBase64(bytes) } };
46
+ }
47
+ function encodeArrayBuffer(value) {
48
+ return { [ARRAY_BUFFER_MARKER]: bytesToBase64(new Uint8Array(value)) };
49
+ }
50
+ function encodeBinary(value, ancestors = new Map, path = []) {
51
+ if (value === null || typeof value !== "object")
52
+ return value;
53
+ if (isTypedArray(value))
54
+ return encodeTypedArray(value);
55
+ if (value instanceof ArrayBuffer)
56
+ return encodeArrayBuffer(value);
57
+ const ancestorPath = ancestors.get(value);
58
+ if (ancestorPath)
59
+ return { [REF_MARKER]: ancestorPath };
60
+ ancestors.set(value, path);
61
+ const encoded = encodeContainer(value, ancestors, path);
62
+ ancestors.delete(value);
63
+ return encoded;
64
+ }
65
+ function encodeContainer(value, ancestors, path) {
66
+ if (Array.isArray(value)) {
67
+ return value.map((item, index) => encodeBinary(item, ancestors, [...path, String(index)]));
68
+ }
69
+ if (value instanceof Map) {
70
+ return {
71
+ [MAP_MARKER]: [...value.entries()].map(([k, v]) => [
72
+ encodeBinary(k, ancestors),
73
+ encodeBinary(v, ancestors)
74
+ ])
75
+ };
76
+ }
77
+ if (value instanceof Set) {
78
+ return { [SET_MARKER]: [...value].map((item) => encodeBinary(item, ancestors)) };
79
+ }
80
+ if (Object.getPrototypeOf(value) !== Object.prototype)
81
+ return value;
82
+ const out = {};
83
+ for (const [key, item] of Object.entries(value)) {
84
+ out[key] = encodeBinary(item, ancestors, [...path, key]);
85
+ }
86
+ return out;
87
+ }
88
+ function revivePromiseMarkers(props, sync) {
89
+ return reviveMarkers(props, new Set, sync);
90
+ }
91
+ var SYNC_PROP_KEYS = new Set(["params", "searchParams"]);
92
+ function reviveMarkers(value, seen, sync, key) {
93
+ if (value === null || typeof value !== "object" || seen.has(value))
94
+ return value;
95
+ if (PROMISE_MARKER_KEY in value) {
96
+ const resolved = value[PROMISE_MARKER_KEY];
97
+ const promise = fulfilledPromise(resolved);
98
+ if (!sync || !key || !SYNC_PROP_KEYS.has(key))
99
+ return promise;
100
+ if (resolved === null || typeof resolved !== "object")
101
+ return promise;
102
+ return sync(promise, key, resolved);
103
+ }
104
+ seen.add(value);
105
+ if (Array.isArray(value)) {
106
+ for (let index = 0;index < value.length; index++) {
107
+ value[index] = reviveMarkers(value[index], seen, sync);
108
+ }
109
+ return value;
110
+ }
111
+ if (Object.getPrototypeOf(value) !== Object.prototype)
112
+ return value;
113
+ const target = value;
114
+ for (const name of Object.keys(target)) {
115
+ target[name] = reviveMarkers(target[name], seen, sync, name);
116
+ }
117
+ return value;
118
+ }
119
+ function fulfilledPromise(value) {
120
+ const promise = Promise.resolve(value);
121
+ promise.status = "fulfilled";
122
+ promise.value = value;
123
+ return promise;
124
+ }
125
+ function isElementLike(value) {
126
+ if (value === null || typeof value !== "object")
127
+ return false;
128
+ return value.constructor === undefined && "type" in value && "props" in value;
129
+ }
130
+ function assertSerializable(value, path = "props", seen = new Set, allowElements = false) {
131
+ if (value == null)
132
+ return;
133
+ if (allowElements && isElementLike(value))
134
+ return;
135
+ const type = typeof value;
136
+ if (type === "string" || type === "number" || type === "boolean")
137
+ return;
138
+ if (type === "function" || type === "symbol" || type === "bigint" || type === "undefined") {
139
+ throw new Error(`${path} is not serializable: ${type}`);
140
+ }
141
+ if (isTypedArray(value) || value instanceof ArrayBuffer)
142
+ return;
143
+ if (value instanceof Date || value instanceof URL) {
144
+ throw new Error(`${path} must be a plain JSON value`);
145
+ }
146
+ if (typeof value.then === "function") {
147
+ throw new Error(`${path} is a Promise: a promise prop must be reachable at the top level of the props or nested in plain objects/arrays/Maps/Sets - one held by a class instance cannot be awaited or serialized, and server actions take no promises at all`);
148
+ }
149
+ if (typeof value !== "object")
150
+ return;
151
+ if (seen.has(value))
152
+ return;
153
+ seen.add(value);
154
+ if (Array.isArray(value)) {
155
+ value.forEach((item, index) => assertSerializable(item, `${path}[${index}]`, seen, allowElements));
156
+ return;
157
+ }
158
+ if (value instanceof Map) {
159
+ let index = 0;
160
+ for (const [key, item] of value.entries()) {
161
+ assertSerializable(key, `${path}<Map key ${index}>`, seen);
162
+ assertSerializable(item, `${path}<Map value ${index}>`, seen);
163
+ index++;
164
+ }
165
+ return;
166
+ }
167
+ if (value instanceof Set) {
168
+ let index = 0;
169
+ for (const item of value) {
170
+ assertSerializable(item, `${path}<Set item ${index}>`, seen);
171
+ index++;
172
+ }
173
+ return;
174
+ }
175
+ if (Object.getPrototypeOf(value) !== Object.prototype) {
176
+ throw new Error(`${path} must be a plain object`);
177
+ }
178
+ for (const [key, item] of Object.entries(value)) {
179
+ assertSerializable(item, `${path}.${key}`, seen, allowElements);
180
+ }
181
+ }
182
+ var TAINT_REGISTRY_KEY = "__pnext_tainted_values__";
183
+ function taintRegistry() {
184
+ const host = globalThis;
185
+ const existing = host[TAINT_REGISTRY_KEY];
186
+ if (existing)
187
+ return existing;
188
+ const created = new Map;
189
+ host[TAINT_REGISTRY_KEY] = created;
190
+ return created;
191
+ }
192
+ function taintObjectReference(messages, value) {
193
+ taintRegistry().set(value, messages);
194
+ }
195
+ function assertNotTainted(value, seen = new Set) {
196
+ const registry = taintRegistry();
197
+ if (registry.size === 0)
198
+ return;
199
+ if (value === null || typeof value !== "object")
200
+ return;
201
+ const messages = registry.get(value);
202
+ if (messages !== undefined) {
203
+ throw new Error(messages.prod);
204
+ }
205
+ if (seen.has(value))
206
+ return;
207
+ seen.add(value);
208
+ if (Array.isArray(value)) {
209
+ for (const item of value)
210
+ assertNotTainted(item, seen);
211
+ return;
212
+ }
213
+ if (value instanceof Map) {
214
+ for (const [key, item] of value.entries()) {
215
+ assertNotTainted(key, seen);
216
+ assertNotTainted(item, seen);
217
+ }
218
+ return;
219
+ }
220
+ if (value instanceof Set) {
221
+ for (const item of value)
222
+ assertNotTainted(item, seen);
223
+ return;
224
+ }
225
+ const proto = Object.getPrototypeOf(value);
226
+ if (proto !== Object.prototype && proto !== null)
227
+ return;
228
+ for (const item of Object.values(value))
229
+ assertNotTainted(item, seen);
230
+ }
231
+ function serializeProps(value, options) {
232
+ assertNotTainted(value);
233
+ assertSerializable(value, "props", new Set, options?.allowElements);
234
+ return JSON.stringify(encodeBinary(value)).replace(/[<>&\u2028\u2029]/g, (char) => {
235
+ switch (char) {
236
+ case "<":
237
+ return "\\u003c";
238
+ case ">":
239
+ return "\\u003e";
240
+ case "&":
241
+ return "\\u0026";
242
+ case "\u2028":
243
+ return "\\u2028";
244
+ case "\u2029":
245
+ return "\\u2029";
246
+ default:
247
+ return char;
248
+ }
249
+ });
250
+ }
251
+
252
+ // src/render/slots.tsx
253
+ function createSlotContext(options, deps) {
254
+ const urlPath = trimPathname(options.nav?.targetPath ?? options.url.pathname);
255
+ const childrenPath = trimPathname(options.nav?.childrenPath ?? options.url.pathname);
256
+ const urlSearch = stripRscSearch(options.url.search);
257
+ const childrenSearch = options.nav?.soft && childrenPath !== trimPathname(options.url.pathname) ? options.nav?.state?.childrenSearch ?? "" : urlSearch;
258
+ return {
259
+ options,
260
+ deps,
261
+ appPath: options.config.appPath,
262
+ urlPath,
263
+ urlSegments: pathnameSegments(urlPath),
264
+ urlSearch,
265
+ childrenPath,
266
+ childrenSegments: pathnameSegments(childrenPath),
267
+ childrenSearch,
268
+ soft: Boolean(options.nav?.soft),
269
+ statePaths: options.nav?.state?.slots ?? {},
270
+ stateOut: options.slotStateOut ?? {},
271
+ matches: []
272
+ };
273
+ }
274
+ function trimPathname(pathname) {
275
+ return pathname.length > 1 ? pathname.replace(/\/+$/, "") || "/" : pathname;
276
+ }
277
+ function sourceParts(source) {
278
+ const queryIndex = source.indexOf("?");
279
+ if (queryIndex === -1)
280
+ return { path: trimPathname(source), search: "" };
281
+ return {
282
+ path: trimPathname(source.slice(0, queryIndex)),
283
+ search: source.slice(queryIndex)
284
+ };
285
+ }
286
+ function stripRscSearch(search) {
287
+ if (!search.includes("_rsc"))
288
+ return search;
289
+ const params = new URLSearchParams(search);
290
+ params.delete("_rsc");
291
+ const stripped = params.toString();
292
+ return stripped ? `?${stripped}` : "";
293
+ }
294
+ async function renderDirSlots(context, dir) {
295
+ const slotDirs = slotDirectoriesIn(dir);
296
+ if (slotDirs.length === 0)
297
+ return {};
298
+ const consumed = consumedSegments(context.appPath, dir);
299
+ const effectiveConsumed = Number.isFinite(consumed) ? consumed : context.childrenSegments.length;
300
+ const props = {};
301
+ for (const slotDir of slotDirs) {
302
+ const content = await resolveSlotContent(context, slotDir, effectiveConsumed);
303
+ props[basename(slotDir).slice(1)] = content == null ? null : wrapSlotBoundary(content);
304
+ }
305
+ return props;
306
+ }
307
+ async function resolveSlotContent(context, slotDir, consumed) {
308
+ const key = toPosixPath(relative(context.appPath, slotDir));
309
+ if (context.soft && context.urlPath !== context.childrenPath) {
310
+ const intercepted = matchSlotInterceptor(context.appPath, slotDir, context.urlPath);
311
+ if (intercepted) {
312
+ context.stateOut[key] = context.urlPath + context.urlSearch;
313
+ return renderSlotMatch(context, slotDir, intercepted, context.urlSearch);
314
+ }
315
+ }
316
+ const sources = [];
317
+ const pushSource = (path, search) => {
318
+ if (!sources.some((source) => source.path === path))
319
+ sources.push({ path, search });
320
+ };
321
+ const rawStateSource = context.statePaths[key];
322
+ const stateSource = rawStateSource ? sourceParts(rawStateSource) : undefined;
323
+ const preserveForInterception = context.soft && context.urlPath !== context.childrenPath && context.options.route.slotDirs?.some((dir) => Boolean(matchSlotInterceptor(context.appPath, dir, context.urlPath)));
324
+ if (preserveForInterception && stateSource && segmentsSharePrefix(pathnameSegments(stateSource.path), context.childrenSegments, consumed)) {
325
+ pushSource(stateSource.path, stateSource.search);
326
+ }
327
+ if (segmentsSharePrefix(context.urlSegments, context.childrenSegments, consumed)) {
328
+ pushSource(context.urlPath, context.urlSearch);
329
+ }
330
+ if (context.soft && stateSource && segmentsSharePrefix(pathnameSegments(stateSource.path), context.childrenSegments, consumed)) {
331
+ pushSource(stateSource.path, stateSource.search);
332
+ }
333
+ if (context.childrenPath !== context.urlPath) {
334
+ pushSource(context.childrenPath, context.childrenSearch);
335
+ }
336
+ for (const source of sources) {
337
+ const intercepted = context.soft && source.path !== context.urlPath ? matchSlotInterceptor(context.appPath, slotDir, source.path) : null;
338
+ const match = intercepted ?? matchSegments(slotDir, pathnameSegments(source.path).slice(consumed));
339
+ if (!match)
340
+ continue;
341
+ context.stateOut[key] = source.path + source.search;
342
+ return renderSlotMatch(context, slotDir, match, source.search);
343
+ }
344
+ const defaultFile = slotConventionFile(slotDir, "default");
345
+ if (!defaultFile)
346
+ return null;
347
+ return renderSlotComponent(context, defaultFile, {});
348
+ }
349
+ async function renderSlotMatch(context, slotDir, match, sourceSearch) {
350
+ let tree = match.file ? await renderSlotComponent(context, match.file, match.params, sourceSearch) : null;
351
+ const chain = [slotDir];
352
+ for (const name of match.dirs)
353
+ chain.push(join(chain[chain.length - 1], name));
354
+ context.matches.push({
355
+ slotDir,
356
+ ...match.file ? { pageFile: match.file } : {},
357
+ layoutFiles: chain.flatMap((dir) => slotConventionFile(dir, "layout") ?? []),
358
+ params: match.params
359
+ });
360
+ for (const dir of [...chain].reverse()) {
361
+ const loadingFile = slotConventionFile(dir, "loading");
362
+ if (loadingFile) {
363
+ const module2 = await context.deps.importModule(loadingFile, context.options);
364
+ const Loading = context.deps.markServerReference(module2.default);
365
+ if (Loading) {
366
+ tree = h(Suspense, { fallback: h(Loading, {}) }, tree);
367
+ }
368
+ }
369
+ const layoutFile = slotConventionFile(dir, "layout");
370
+ if (!layoutFile)
371
+ continue;
372
+ const module = await context.deps.importModule(layoutFile, context.options);
373
+ const Layout = context.deps.markServerReference(module.default);
374
+ if (!Layout)
375
+ continue;
376
+ const nestedSlots = await renderDirSlots(context, dir);
377
+ tree = h(Layout, {
378
+ ...slotPageProps(context, match.params, sourceSearch),
379
+ ...nestedSlots,
380
+ children: tree
381
+ });
382
+ }
383
+ return wrapSlotParamsScope({ ...context.options.params ?? {}, ...match.params }, tree);
384
+ }
385
+ var paramsScopeSymbol = Symbol.for("pnext.paramsScope");
386
+ var PARAMS_SCOPE_PROP = "__pnextParams";
387
+ var paramsSnapshotStorage = new AsyncLocalStorage;
388
+ var ParamsScopeMarker = (props) => props.children;
389
+ ParamsScopeMarker[paramsScopeSymbol] = true;
390
+ var slotBoundarySymbol = Symbol.for("pnext.slotBoundary");
391
+ var SlotBoundaryMarker = (props) => props.children;
392
+ SlotBoundaryMarker[slotBoundarySymbol] = true;
393
+ function wrapSlotBoundary(content) {
394
+ return h(SlotBoundaryMarker, null, content);
395
+ }
396
+ function currentParamsSnapshot() {
397
+ return paramsSnapshotStorage.getStore();
398
+ }
399
+ function runInParamsScope(params, fn) {
400
+ return paramsSnapshotStorage.run(params, fn);
401
+ }
402
+ function paramsScopeParams(props) {
403
+ return props[PARAMS_SCOPE_PROP] ?? {};
404
+ }
405
+ function wrapSlotParamsScope(params, tree) {
406
+ return h(ParamsScopeMarker, { [PARAMS_SCOPE_PROP]: params }, tree);
407
+ }
408
+ async function renderSlotComponent(context, file, params, sourceSearch) {
409
+ const props = slotPageProps(context, params, sourceSearch);
410
+ const reference = context.options.route.clientReferences.find((item) => item.file === file && item.exportName === "default");
411
+ if (reference) {
412
+ const Component2 = context.options.clientComponents?.get(reference.id) ?? context.deps.clientReferenceStub(reference);
413
+ return h(Component2, {
414
+ params: promiseMarker(await props.params),
415
+ searchParams: promiseMarker(await props.searchParams)
416
+ });
417
+ }
418
+ const module = await context.deps.importModule(file, context.options);
419
+ const Component = context.deps.markServerReference(module.default);
420
+ if (!Component)
421
+ return null;
422
+ return h(Component, props);
423
+ }
424
+ function promiseMarker(value) {
425
+ return { [PROMISE_MARKER_KEY]: value ?? null };
426
+ }
427
+ var PROMISE_PLACEHOLDER_KEY = "__pnextParams";
428
+ function promisePlaceholderMarker(kind) {
429
+ return { [PROMISE_MARKER_KEY]: null, [PROMISE_PLACEHOLDER_KEY]: kind };
430
+ }
431
+ function promisePlaceholderJson(kind) {
432
+ return `{"${PROMISE_MARKER_KEY}":null,"${PROMISE_PLACEHOLDER_KEY}":"${kind}"}`;
433
+ }
434
+ function revivePromiseProps(props) {
435
+ return revivePromiseMarkers({ ...props }, getRenderExtensions().legacySyncProps);
436
+ }
437
+ function slotPageProps(context, params, sourceSearch) {
438
+ const base = context.deps.createPageProps(context.options);
439
+ const baseSearch = context.soft && context.childrenPath !== trimPathname(context.options.url.pathname) ? context.childrenSearch : context.urlSearch;
440
+ return {
441
+ ...base,
442
+ params: Promise.resolve({ ...context.options.params ?? {}, ...params }),
443
+ ...sourceSearch !== undefined && sourceSearch !== baseSearch ? { searchParams: fulfilledPromise2(searchParamsObject(sourceSearch)) } : {}
444
+ };
445
+ }
446
+ function searchParamsObject(search) {
447
+ const result = {};
448
+ new URLSearchParams(search).forEach((value, key) => {
449
+ if (key === "_rsc")
450
+ return;
451
+ const current = result[key];
452
+ if (current === undefined)
453
+ result[key] = value;
454
+ else if (Array.isArray(current))
455
+ current.push(value);
456
+ else
457
+ result[key] = [current, value];
458
+ });
459
+ return result;
460
+ }
461
+ function fulfilledPromise2(value) {
462
+ const promise = Promise.resolve(value);
463
+ promise.status = "fulfilled";
464
+ promise.value = value;
465
+ return promise;
466
+ }
467
+ function segmentsSharePrefix(a, b, length) {
468
+ for (let index = 0;index < length; index += 1) {
469
+ if (a[index] !== b[index])
470
+ return false;
471
+ }
472
+ return true;
473
+ }
474
+ var layoutSegmentStorage = new AsyncLocalStorage;
475
+ function runInLayoutSegmentScope(segments, fn, scope = {}) {
476
+ return layoutSegmentStorage.run({ segments, ...scope }, fn);
477
+ }
478
+ function currentLayoutSegmentSnapshot() {
479
+ const scope = layoutSegmentStorage.getStore();
480
+ if (!scope)
481
+ return;
482
+ const slots = {};
483
+ let depth = 0;
484
+ if (scope.appPath && scope.layoutDir) {
485
+ depth = layoutSegmentDepth(scope.appPath, scope.layoutDir);
486
+ const owner = toPosixPath(relative(scope.appPath, scope.layoutDir));
487
+ const prefix = owner ? `${owner}/@` : "@";
488
+ for (const [dir, path] of Object.entries(scope.slots ?? {})) {
489
+ if (!dir.startsWith(prefix))
490
+ continue;
491
+ const key = dir.slice(prefix.length);
492
+ if (key.includes("/"))
493
+ continue;
494
+ slots[key] = pathnameSegments(path);
495
+ }
496
+ }
497
+ return { depth, segments: scope.segments, slots };
498
+ }
499
+ function hasLayoutSegmentScope() {
500
+ return layoutSegmentStorage.getStore() !== undefined;
501
+ }
502
+ function currentLayoutSegments(slotKey) {
503
+ const scope = layoutSegmentStorage.getStore();
504
+ if (!scope)
505
+ return [];
506
+ if (!slotKey)
507
+ return scope.segments;
508
+ if (!scope.appPath || !scope.layoutDir)
509
+ return [];
510
+ const owner = toPosixPath(relative(scope.appPath, scope.layoutDir));
511
+ const slotPath = scope.slots?.[owner ? `${owner}/@${slotKey}` : `@${slotKey}`];
512
+ return slotPath ? pathnameSegments(slotPath) : [];
513
+ }
514
+ function fullLayoutSegments(appPath, leafDir, params) {
515
+ const relativeDir = relative(appPath, leafDir);
516
+ if (relativeDir.startsWith(".."))
517
+ return [];
518
+ const segments = [];
519
+ for (const name of relativeDir.split(sep).filter(Boolean)) {
520
+ if (isSlotSegment(name))
521
+ continue;
522
+ if (isGroupSegment(name)) {
523
+ segments.push(name);
524
+ continue;
525
+ }
526
+ const optional = /^\[\[\.\.\.([^\]]+)\]\]$/.exec(name);
527
+ const catchAll = optional ?? /^\[\.\.\.([^\]]+)\]$/.exec(name);
528
+ if (catchAll?.[1]) {
529
+ const value = params[catchAll[1]];
530
+ const joined = Array.isArray(value) ? value.join("/") : value ?? "";
531
+ if (joined)
532
+ segments.push(joined);
533
+ continue;
534
+ }
535
+ const dynamic = /^\[([^\].]+)\]$/.exec(name);
536
+ if (dynamic?.[1]) {
537
+ const value = params[dynamic[1]];
538
+ segments.push(Array.isArray(value) ? value.join("/") : String(value ?? ""));
539
+ continue;
540
+ }
541
+ segments.push(name);
542
+ }
543
+ return segments;
544
+ }
545
+ function layoutParamsForDir(appPath, layoutDir, params) {
546
+ const relativeDir = relative(appPath, layoutDir);
547
+ if (relativeDir.startsWith(".."))
548
+ return {};
549
+ const scoped = {};
550
+ for (const name of relativeDir.split(sep).filter(Boolean)) {
551
+ if (isSlotSegment(name) || isGroupSegment(name))
552
+ continue;
553
+ const optional = /^\[\[\.\.\.([^\]]+)\]\]$/.exec(name);
554
+ if (optional?.[1]) {
555
+ const value = params[optional[1]];
556
+ if (value !== undefined && (Array.isArray(value) ? value.length > 0 : value != null)) {
557
+ scoped[optional[1]] = value;
558
+ }
559
+ continue;
560
+ }
561
+ const catchAll = /^\[\.\.\.([^\]]+)\]$/.exec(name);
562
+ if (catchAll?.[1]) {
563
+ const value = params[catchAll[1]];
564
+ if (value !== undefined)
565
+ scoped[catchAll[1]] = value;
566
+ continue;
567
+ }
568
+ const dynamic = /^\[([^\].]+)\]$/.exec(name);
569
+ if (dynamic?.[1]) {
570
+ const value = params[dynamic[1]];
571
+ if (value !== undefined)
572
+ scoped[dynamic[1]] = value;
573
+ }
574
+ }
575
+ return scoped;
576
+ }
577
+ function layoutSegmentDepth(appPath, layoutDir) {
578
+ const relativeDir = relative(appPath, layoutDir);
579
+ if (relativeDir.startsWith("..") || relativeDir === "")
580
+ return 0;
581
+ let depth = 0;
582
+ for (const name of relativeDir.split(sep).filter(Boolean)) {
583
+ if (isSlotSegment(name))
584
+ continue;
585
+ depth += 1;
586
+ }
587
+ return depth;
588
+ }
589
+
590
+ export { isElementLike, taintObjectReference, assertNotTainted, serializeProps, createSlotContext, renderDirSlots, paramsScopeSymbol, slotBoundarySymbol, currentParamsSnapshot, runInParamsScope, paramsScopeParams, promiseMarker, promisePlaceholderMarker, promisePlaceholderJson, revivePromiseProps, runInLayoutSegmentScope, currentLayoutSegmentSnapshot, hasLayoutSegmentScope, currentLayoutSegments, fullLayoutSegments, layoutParamsForDir, layoutSegmentDepth };