@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,296 @@
1
+ // @bun
2
+ import {
3
+ readDirListing,
4
+ toPosixPath
5
+ } from "./index-20ppawv7.js";
6
+
7
+ // src/routing/slots.ts
8
+ import path from "path";
9
+ import { safeDecode } from "../../../src/utils/decode.ts";
10
+ var pageExtensions = ["tsx", "ts", "jsx", "js", "mjs"];
11
+ var interceptionMarkers = ["(..)(..)", "(...)", "(..)", "(.)"];
12
+ var interceptionLevels = {
13
+ "(.)": 0,
14
+ "(..)": 1,
15
+ "(..)(..)": 2,
16
+ "(...)": Number.POSITIVE_INFINITY
17
+ };
18
+ function interceptionMarkerOf(segment) {
19
+ return interceptionMarkers.find((marker) => segment.startsWith(marker) && segment.length > marker.length);
20
+ }
21
+ function interceptionMarkerLevels(marker) {
22
+ return interceptionLevels[marker];
23
+ }
24
+ function isSlotSegment(name) {
25
+ return name.startsWith("@");
26
+ }
27
+ function isGroupSegment(name) {
28
+ return name.startsWith("(") && name.endsWith(")") && !interceptionMarkerOf(name);
29
+ }
30
+ function slotConventionFile(dir, base) {
31
+ const { files } = readDirListing(dir);
32
+ for (const extension of pageExtensions) {
33
+ if (files.has(`${base}.${extension}`))
34
+ return path.join(dir, `${base}.${extension}`);
35
+ }
36
+ return;
37
+ }
38
+ function childDirectories(dir) {
39
+ return readDirListing(dir).dirs;
40
+ }
41
+ function slotDirectoriesIn(dir) {
42
+ return childDirectories(dir).filter(isSlotSegment).map((name) => path.join(dir, name));
43
+ }
44
+ function consumedSegments(appPath, dir) {
45
+ const relative = path.relative(appPath, dir);
46
+ if (relative.startsWith(".."))
47
+ return 0;
48
+ let consumed = 0;
49
+ for (const name of relative.split(path.sep).filter(Boolean)) {
50
+ if (isGroupSegment(name) || isSlotSegment(name))
51
+ continue;
52
+ const marker = interceptionMarkerOf(name);
53
+ const bare = marker ? name.slice(marker.length) : name;
54
+ if (/^\[\[?\.\.\./.test(bare))
55
+ return Number.POSITIVE_INFINITY;
56
+ consumed += 1;
57
+ }
58
+ return consumed;
59
+ }
60
+ function matchSegments(dir, segments, options = {}, params = {}, dirs = []) {
61
+ const children = childDirectories(dir);
62
+ const groups = children.filter(isGroupSegment);
63
+ if (segments.length === 0) {
64
+ const page = slotConventionFile(dir, "page");
65
+ if (page)
66
+ return { file: page, dirs, params };
67
+ for (const group of groups) {
68
+ const match = matchSegments(path.join(dir, group), [], options, params, [...dirs, group]);
69
+ if (match)
70
+ return match;
71
+ }
72
+ for (const name of children) {
73
+ const param = optionalCatchAllName(bareName(name, options));
74
+ if (!param)
75
+ continue;
76
+ const match = matchSegments(path.join(dir, name), [], options, { ...params, [param]: [] }, [
77
+ ...dirs,
78
+ name
79
+ ]);
80
+ if (match)
81
+ return match;
82
+ }
83
+ if (options.markersAsSegments && (slotConventionFile(dir, "layout") || children.some(isSlotSegment))) {
84
+ return { dirs, params };
85
+ }
86
+ return null;
87
+ }
88
+ const [head, ...rest] = segments;
89
+ for (const name of children) {
90
+ if (bareName(name, options) !== head)
91
+ continue;
92
+ const match = matchSegments(path.join(dir, name), rest, options, params, [...dirs, name]);
93
+ if (match)
94
+ return match;
95
+ }
96
+ for (const group of groups) {
97
+ const match = matchSegments(path.join(dir, group), segments, options, params, [...dirs, group]);
98
+ if (match)
99
+ return match;
100
+ }
101
+ for (const name of children) {
102
+ const param = dynamicParamName(bareName(name, options));
103
+ if (!param)
104
+ continue;
105
+ const match = matchSegments(path.join(dir, name), rest, options, { ...params, [param]: safeDecode(head) }, [...dirs, name]);
106
+ if (match)
107
+ return match;
108
+ }
109
+ for (const name of children) {
110
+ const bare = bareName(name, options);
111
+ const param = catchAllName(bare) ?? optionalCatchAllName(bare);
112
+ if (!param)
113
+ continue;
114
+ const match = matchSegments(path.join(dir, name), [], options, { ...params, [param]: segments.map(safeDecode) }, [...dirs, name]);
115
+ if (match)
116
+ return match;
117
+ }
118
+ return null;
119
+ }
120
+ function bareName(name, options) {
121
+ if (isSlotSegment(name))
122
+ return "\x00";
123
+ const marker = interceptionMarkerOf(name);
124
+ if (!marker)
125
+ return name;
126
+ return options.markersAsSegments ? name.slice(marker.length) : "\x00";
127
+ }
128
+ function dynamicParamName(name) {
129
+ const match = /^\[([^\].]+)\]$/.exec(name);
130
+ return match?.[1];
131
+ }
132
+ function catchAllName(name) {
133
+ const match = /^\[\.\.\.([^\]]+)\]$/.exec(name);
134
+ return match?.[1];
135
+ }
136
+ function optionalCatchAllName(name) {
137
+ const match = /^\[\[\.\.\.([^\]]+)\]\]$/.exec(name);
138
+ return match?.[1];
139
+ }
140
+ function childrenDefaultFile(dir, segments) {
141
+ let current = dir;
142
+ let best = slotConventionFile(current, "default");
143
+ for (const segment of segments) {
144
+ const next = childSegmentDir(current, segment);
145
+ if (!next)
146
+ break;
147
+ current = next;
148
+ best = slotConventionFile(current, "default") ?? best;
149
+ }
150
+ return best;
151
+ }
152
+ function childSegmentDir(dir, segment) {
153
+ const children = childDirectories(dir);
154
+ if (children.includes(segment))
155
+ return path.join(dir, segment);
156
+ for (const group of children.filter(isGroupSegment)) {
157
+ const nested = childSegmentDir(path.join(dir, group), segment);
158
+ if (nested)
159
+ return nested;
160
+ }
161
+ const dynamic = children.find((name) => dynamicParamName(name));
162
+ if (dynamic)
163
+ return path.join(dir, dynamic);
164
+ return;
165
+ }
166
+ function slotInterceptorUnits(appPath, slotDir) {
167
+ const owner = routeTokensForDir(appPath, path.dirname(slotDir));
168
+ if (!owner)
169
+ return [];
170
+ const units = [];
171
+ collectInterceptorUnits(slotDir, owner, [], units);
172
+ return units;
173
+ }
174
+ function collectInterceptorUnits(dir, owner, inner, units) {
175
+ for (const name of childDirectories(dir)) {
176
+ const child = path.join(dir, name);
177
+ if (isSlotSegment(name) || isGroupSegment(name)) {
178
+ collectInterceptorUnits(child, owner, inner, units);
179
+ continue;
180
+ }
181
+ const marker = interceptionMarkerOf(name);
182
+ if (marker) {
183
+ const bare = name.slice(marker.length);
184
+ const levels = interceptionLevels[marker];
185
+ const context = [...owner, ...inner];
186
+ const kept = levels === Number.POSITIVE_INFINITY ? [] : context.slice(0, Math.max(0, context.length - levels));
187
+ const target = [...kept, segmentToken(bare)];
188
+ units.push({
189
+ dir: child,
190
+ targetSegments: target.map((token) => token.route),
191
+ targetPattern: target.map((token) => token.pattern).join("/"),
192
+ params: target.filter((token) => token.param).map((token) => ({ name: token.param, catchAll: Boolean(token.catchAll) })),
193
+ catchAllTail: Boolean(target[target.length - 1]?.catchAll)
194
+ });
195
+ continue;
196
+ }
197
+ collectInterceptorUnits(child, owner, [...inner, segmentToken(name)], units);
198
+ }
199
+ }
200
+ function routeTokensForDir(appPath, dir) {
201
+ const relative = path.relative(appPath, dir);
202
+ if (relative.startsWith(".."))
203
+ return;
204
+ let tokens = [];
205
+ for (const name of toPosixPath(relative).split("/").filter(Boolean)) {
206
+ if (isGroupSegment(name) || isSlotSegment(name))
207
+ continue;
208
+ const marker = interceptionMarkerOf(name);
209
+ if (marker) {
210
+ const levels = interceptionLevels[marker];
211
+ tokens = levels === Number.POSITIVE_INFINITY ? [] : tokens.slice(0, Math.max(0, tokens.length - levels));
212
+ tokens.push(segmentToken(name.slice(marker.length)));
213
+ continue;
214
+ }
215
+ tokens.push(segmentToken(name));
216
+ }
217
+ return tokens;
218
+ }
219
+ function segmentToken(name) {
220
+ const optional = optionalCatchAllName(name);
221
+ if (optional)
222
+ return { route: `:${optional}*`, pattern: "(.*)", param: optional, catchAll: true };
223
+ const catchAll = catchAllName(name);
224
+ if (catchAll)
225
+ return { route: `:${catchAll}*`, pattern: "(.*)", param: catchAll, catchAll: true };
226
+ const param = dynamicParamName(name);
227
+ if (param)
228
+ return { route: `:${param}`, pattern: "([^/]+)", param };
229
+ return { route: name, pattern: escapeRegex(name) };
230
+ }
231
+ function matchSlotInterceptor(appPath, slotDir, pathname) {
232
+ const segments = pathnameSegments(pathname);
233
+ const markerOwner = markerOwnerTokens(appPath, slotDir);
234
+ if (markerOwner) {
235
+ const params = matchTargetTokens(markerOwner, pathname);
236
+ if (params) {
237
+ const rest = markerOwner.at(-1)?.catchAll ? [] : segments.slice(markerOwner.length);
238
+ const inner = matchSegments(slotDir, rest, { markersAsSegments: true }, params, []);
239
+ if (inner)
240
+ return inner;
241
+ }
242
+ }
243
+ const units = slotInterceptorUnits(appPath, slotDir).sort((a, b) => Number(a.catchAllTail) - Number(b.catchAllTail) || b.targetSegments.length - a.targetSegments.length || a.params.length - b.params.length);
244
+ for (const unit of units) {
245
+ const regex = new RegExp(`^/${unit.targetPattern}(?:/(.*))?$`);
246
+ const match = regex.exec(pathname.replace(/\/+$/, "") || "/");
247
+ if (!match)
248
+ continue;
249
+ const params = {};
250
+ unit.params.forEach((param, index) => {
251
+ const value = match[index + 1] ?? "";
252
+ params[param.name] = param.catchAll ? value.split("/").filter(Boolean).map(safeDecode) : safeDecode(value);
253
+ });
254
+ const rest = unit.catchAllTail ? [] : segments.slice(unit.targetSegments.length);
255
+ const inner = matchSegments(unit.dir, rest, { markersAsSegments: true }, params, []);
256
+ if (inner) {
257
+ return {
258
+ file: inner.file,
259
+ dirs: [path.basename(unit.dir), ...inner.dirs],
260
+ params: inner.params
261
+ };
262
+ }
263
+ }
264
+ return null;
265
+ }
266
+ function markerOwnerTokens(appPath, slotDir) {
267
+ const relative = path.relative(appPath, slotDir);
268
+ if (relative.startsWith(".."))
269
+ return null;
270
+ const segments = toPosixPath(relative).split("/").filter(Boolean);
271
+ const markerIndex = segments.findIndex((segment) => Boolean(interceptionMarkerOf(segment)));
272
+ if (markerIndex === -1)
273
+ return null;
274
+ return routeTokensForDir(appPath, path.join(appPath, ...segments.slice(0, markerIndex + 1))) ?? null;
275
+ }
276
+ function matchTargetTokens(tokens, pathname) {
277
+ const pattern = tokens.map((token) => token.pattern).join("/");
278
+ const regex = new RegExp(`^/${pattern}(?:/.*)?$`);
279
+ const match = regex.exec(pathname.replace(/\/+$/, "") || "/");
280
+ if (!match)
281
+ return null;
282
+ const params = {};
283
+ tokens.filter((token) => token.param).forEach((token, index) => {
284
+ const value = match[index + 1] ?? "";
285
+ params[token.param] = token.catchAll ? value.split("/").filter(Boolean).map(safeDecode) : safeDecode(value);
286
+ });
287
+ return params;
288
+ }
289
+ function pathnameSegments(pathname) {
290
+ return pathname.split("?")[0].split("/").filter(Boolean);
291
+ }
292
+ function escapeRegex(value) {
293
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
294
+ }
295
+
296
+ export { interceptionMarkerOf, interceptionMarkerLevels, isSlotSegment, isGroupSegment, slotConventionFile, slotDirectoriesIn, consumedSegments, matchSegments, childrenDefaultFile, matchSlotInterceptor, pathnameSegments };
@@ -0,0 +1,39 @@
1
+ // @bun
2
+ // src/resolve/package-json.ts
3
+ import { existsSync, readFileSync } from "fs";
4
+ import path from "path";
5
+ var packageJsonCache = new Map;
6
+ var workspaceRootCache = new Map;
7
+ function readPackageJson(root) {
8
+ const existing = packageJsonCache.get(root);
9
+ if (existing)
10
+ return existing;
11
+ const config = readJson(path.join(root, "package.json")) ?? {};
12
+ packageJsonCache.set(root, config);
13
+ return config;
14
+ }
15
+ function findWorkspaceRoot(root) {
16
+ const key = path.resolve(root);
17
+ if (workspaceRootCache.has(key))
18
+ return workspaceRootCache.get(key);
19
+ let dir = key;
20
+ while (true) {
21
+ if (readPackageJson(dir).workspaces || existsSync(path.join(dir, "pnpm-workspace.yaml"))) {
22
+ workspaceRootCache.set(key, dir);
23
+ return dir;
24
+ }
25
+ const parent = path.dirname(dir);
26
+ if (parent === dir) {
27
+ workspaceRootCache.set(key, undefined);
28
+ return;
29
+ }
30
+ dir = parent;
31
+ }
32
+ }
33
+ function readJson(file) {
34
+ if (!existsSync(file))
35
+ return;
36
+ return JSON.parse(readFileSync(file, "utf8"));
37
+ }
38
+
39
+ export { readPackageJson, findWorkspaceRoot };
@@ -0,0 +1,100 @@
1
+ // @bun
2
+ import {
3
+ bold,
4
+ cyan,
5
+ dim,
6
+ green
7
+ } from "./index-6kp9r0d9.js";
8
+
9
+ // src/cli/serve/ui.ts
10
+ import { networkInterfaces } from "os";
11
+ function browserHost(hostname) {
12
+ if (hostname === "::" || hostname === "::1")
13
+ return "[::1]";
14
+ if (["0.0.0.0", "127.0.0.1"].includes(hostname))
15
+ return "localhost";
16
+ return hostname;
17
+ }
18
+ function printServerReady({ mode, hostname, port, elapsedMs }) {
19
+ const rows = [["Local:", cyan(`http://${browserHost(hostname)}:${port}`)]];
20
+ const lan = hostname === "::" ? "[::]" : wildcard(hostname) ? lanAddress() : undefined;
21
+ if (lan)
22
+ rows.push(["Network:", cyan(`http://${lan}:${port}`)]);
23
+ const ready = elapsedMs === undefined ? `${green("\u2713")} ${bold("Ready")}` : `${green("\u2713")} ${bold("Ready")} ${dim(`in ${Math.round(elapsedMs)}ms`)}`;
24
+ const pad = Math.max(...rows.map(([label]) => label.length));
25
+ console.log("");
26
+ console.log(`\u26A1 ${bold("pnext")} ${dim(mode)}`);
27
+ for (const [label, value] of rows) {
28
+ console.log(` ${dim("-")} ${dim(label.padEnd(pad))} ${value}`);
29
+ }
30
+ console.log("");
31
+ console.log(ready);
32
+ console.log("");
33
+ }
34
+ function wildcard(hostname) {
35
+ return hostname === "0.0.0.0" || hostname === "::";
36
+ }
37
+ async function ensurePortFree(port, hostname, options = {}) {
38
+ const attempts = options.attempts ?? 1;
39
+ const delayMs = options.delayMs ?? 300;
40
+ const candidates = wildcard(hostname) || hostname === "localhost" ? ["127.0.0.1", "::1"] : [hostname];
41
+ for (const candidate of candidates) {
42
+ let inUse = await portInUse(candidate, port);
43
+ for (let attempt = 1;inUse && attempt < attempts; attempt += 1) {
44
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
45
+ inUse = await portInUse(candidate, port);
46
+ }
47
+ if (inUse) {
48
+ throw new Error(`Port ${port} is already in use on ${candidate} (another pnext dev/start or process). ` + `Stop it or pass --port. To find it:` + ` lsof -nP -iTCP:${port} -sTCP:LISTEN`);
49
+ }
50
+ }
51
+ }
52
+ function portInUse(hostname, port) {
53
+ return new Promise((resolve) => {
54
+ const timer = setTimeout(() => resolve(false), 300);
55
+ Bun.connect({
56
+ hostname,
57
+ port,
58
+ socket: {
59
+ open(socket) {
60
+ clearTimeout(timer);
61
+ socket.end();
62
+ resolve(true);
63
+ },
64
+ data() {},
65
+ connectError() {
66
+ clearTimeout(timer);
67
+ resolve(false);
68
+ },
69
+ error() {
70
+ clearTimeout(timer);
71
+ resolve(false);
72
+ }
73
+ }
74
+ }).catch(() => {
75
+ clearTimeout(timer);
76
+ resolve(false);
77
+ });
78
+ });
79
+ }
80
+ function lanAddress() {
81
+ for (const addresses of Object.values(networkInterfaces())) {
82
+ for (const address of addresses ?? []) {
83
+ if (address.family === "IPv4" && !address.internal)
84
+ return address.address;
85
+ }
86
+ }
87
+ return;
88
+ }
89
+ function openBrowser(url) {
90
+ const browser = process.env.BROWSER;
91
+ if (browser === "none" || process.env.CI || false)
92
+ return;
93
+ const browserArgs = process.env.BROWSER_ARGS?.split(/\s+/).filter(Boolean) ?? [];
94
+ const command = browser ? process.platform === "darwin" ? ["open", "-a", browser, ...browserArgs, url] : [browser, ...browserArgs, url] : process.platform === "darwin" ? ["open", url] : process.platform === "win32" ? ["cmd", "/c", "start", "", url] : ["xdg-open", url];
95
+ try {
96
+ Bun.spawn(command, { stdout: "ignore", stderr: "ignore", stdin: "ignore" }).unref();
97
+ } catch {}
98
+ }
99
+
100
+ export { browserHost, printServerReady, ensurePortFree, openBrowser };
@@ -0,0 +1,54 @@
1
+ // @bun
2
+ // src/utils/code.ts
3
+ function escapeRegex(value) {
4
+ return value.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&");
5
+ }
6
+ function specifierSniffTokens(keys) {
7
+ const heads = [
8
+ ...new Set([...keys].map((key) => {
9
+ const head = key.split("/").slice(0, key.startsWith("@") ? 2 : 1).join("/");
10
+ return head.replace(/\*.*$/, "");
11
+ }))
12
+ ];
13
+ return heads.filter((head) => !heads.some((other) => other !== head && head.startsWith(other)));
14
+ }
15
+ function uniqueIdentifier(source, base, ...used) {
16
+ const usedNames = new Set(used);
17
+ let name = base;
18
+ let index = 0;
19
+ while (source.includes(name) || usedNames.has(name)) {
20
+ index += 1;
21
+ name = `${base}${index}`;
22
+ }
23
+ return name;
24
+ }
25
+ function isIdentifier(value) {
26
+ return /^[A-Za-z_$][\w$]*$/.test(value);
27
+ }
28
+ function esbuildEntryExportNames(code) {
29
+ const scope = entryCommonJsScope(code);
30
+ const assignments = [
31
+ ...scope.matchAll(/module\.exports\s*=\s*(?:[A-Za-z_$][\w$]*\s*\(\s*)?([A-Za-z_$][\w$]*)\s*\)?\s*[;\n]/g)
32
+ ];
33
+ const entryVar = assignments.at(-1)?.[1];
34
+ if (!entryVar)
35
+ return [];
36
+ const exportCall = new RegExp(`[A-Za-z_$][\\w$]*\\(\\s*${escapeRegex(entryVar)}\\s*,\\s*\\{([\\s\\S]*?)\\}\\s*\\)`).exec(scope);
37
+ if (!exportCall?.[1])
38
+ return [];
39
+ return [
40
+ ...exportCall[1].matchAll(/(?:^|,)\s*(?:["']([^"']+)["']|([A-Za-z_$][\w$]*))\s*:\s*\(\s*\)\s*=>/g)
41
+ ].map((match) => match[1] ?? match[2]).filter((name) => Boolean(name && isIdentifier(name)));
42
+ }
43
+ function entryCommonJsScope(code) {
44
+ const wrapper = /(^|\n)export default ([A-Za-z_$][\w$]*)\(\)/.exec(code)?.[2];
45
+ if (!wrapper)
46
+ return code;
47
+ const start = code.lastIndexOf(`var ${wrapper} = `);
48
+ return start === -1 ? code : code.slice(start);
49
+ }
50
+ function stripComments(source) {
51
+ return source.replace(/\/\*[\s\S]*?\*\//g, "").replace(/(^|[^:])\/\/.*$/gm, "$1");
52
+ }
53
+
54
+ export { escapeRegex, specifierSniffTokens, uniqueIdentifier, isIdentifier, esbuildEntryExportNames, stripComments };
@@ -0,0 +1,110 @@
1
+ // @bun
2
+ import {
3
+ getNextConfig
4
+ } from "./index-6e4fqv30.js";
5
+
6
+ // src/compat/mdx/compile.ts
7
+ import { existsSync } from "fs";
8
+ import { createRequire } from "module";
9
+ import path from "path";
10
+ import { pathToFileURL } from "url";
11
+ var cachedModule;
12
+ async function loadMdx() {
13
+ if (cachedModule !== undefined)
14
+ return cachedModule;
15
+ try {
16
+ const specifier = "@mdx-js/mdx";
17
+ cachedModule = await import(specifier);
18
+ } catch {
19
+ cachedModule = null;
20
+ }
21
+ return cachedModule;
22
+ }
23
+ function mdxOptionsFromConfig() {
24
+ const config = getNextConfig();
25
+ return config.mdxOptions ?? {};
26
+ }
27
+ function resolveMdxComponents(root) {
28
+ const bases = [root, path.join(root, "src")];
29
+ const names = [
30
+ "mdx-components.tsx",
31
+ "mdx-components.ts",
32
+ "mdx-components.jsx",
33
+ "mdx-components.js",
34
+ "mdx-components.mjs"
35
+ ];
36
+ for (const base of bases) {
37
+ for (const name of names) {
38
+ const candidate = path.join(base, name);
39
+ if (existsSync(candidate))
40
+ return candidate;
41
+ }
42
+ }
43
+ return;
44
+ }
45
+ function interopDefault(module) {
46
+ return module?.default ?? module;
47
+ }
48
+ var UNRESOLVED_PLUGIN = Symbol("pnext.mdx.unresolved-plugin");
49
+ async function resolvePlugin(entry, resolveFrom) {
50
+ if (typeof entry === "function")
51
+ return entry;
52
+ if (typeof entry === "string") {
53
+ return loadPlugin(entry, resolveFrom);
54
+ }
55
+ if (Array.isArray(entry) && typeof entry[0] === "string") {
56
+ const tuple = entry;
57
+ const plugin = await loadPlugin(tuple[0], resolveFrom);
58
+ if (plugin === UNRESOLVED_PLUGIN)
59
+ return UNRESOLVED_PLUGIN;
60
+ return [plugin, ...tuple.slice(1)];
61
+ }
62
+ return entry;
63
+ }
64
+ async function loadPlugin(name, resolveFrom) {
65
+ let resolved;
66
+ try {
67
+ resolved = resolveFrom.resolve(name);
68
+ } catch {
69
+ console.warn(`pnext: MDX plugin '${name}' is configured but not installed; skipping it. Install it to apply this remark/rehype/recma plugin.`);
70
+ return UNRESOLVED_PLUGIN;
71
+ }
72
+ try {
73
+ return interopDefault(await import(pathToFileURL(resolved).href));
74
+ } catch (error) {
75
+ console.warn(`pnext: MDX plugin '${name}' failed to load and was skipped: ${error instanceof Error ? error.message : String(error)}. ` + "Ensure it is installed in the app\u2019s node_modules (not only Bun\u2019s auto-install cache).");
76
+ return UNRESOLVED_PLUGIN;
77
+ }
78
+ }
79
+ async function resolvePlugins(plugins, resolveFrom) {
80
+ const resolved = await Promise.all(plugins.map((entry) => resolvePlugin(entry, resolveFrom)));
81
+ return resolved.filter((entry) => entry !== UNRESOLVED_PLUGIN);
82
+ }
83
+ async function compileMdx(source, filePath, root) {
84
+ const mdx = await loadMdx();
85
+ if (!mdx) {
86
+ throw new Error("MDX support requires the '@mdx-js/mdx' package. Install it to render .mdx files.");
87
+ }
88
+ const userOptions = mdxOptionsFromConfig();
89
+ const provider = resolveMdxComponents(root);
90
+ const resolveFrom = createRequire(path.join(root, "noop.js"));
91
+ const [remarkPlugins, rehypePlugins, recmaPlugins] = await Promise.all([
92
+ resolvePlugins(userOptions.remarkPlugins ?? [], resolveFrom),
93
+ resolvePlugins(userOptions.rehypePlugins ?? [], resolveFrom),
94
+ resolvePlugins(userOptions.recmaPlugins ?? [], resolveFrom)
95
+ ]);
96
+ const compiled = await mdx.compile({ value: source, path: filePath }, {
97
+ jsx: true,
98
+ jsxImportSource: "preact",
99
+ format: "mdx",
100
+ development: false,
101
+ remarkPlugins,
102
+ rehypePlugins,
103
+ recmaPlugins,
104
+ ...userOptions.remarkRehypeOptions ? { remarkRehypeOptions: userOptions.remarkRehypeOptions } : {},
105
+ ...userOptions.providerImportSource ? { providerImportSource: userOptions.providerImportSource } : provider ? { providerImportSource: provider } : {}
106
+ });
107
+ return { code: compiled.toString() };
108
+ }
109
+
110
+ export { mdxOptionsFromConfig, resolveMdxComponents, compileMdx };