@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,271 @@
1
+ // @bun
2
+ import { join as __pnextJoin } from "node:path";
3
+ const __PNEXT_PACKAGE_ROOT__ = __pnextJoin(import.meta.dirname, "../../..");
4
+ import {
5
+ attachRelease,
6
+ locateRelease,
7
+ readBuildIndex,
8
+ releaseConfig
9
+ } from "./index-tqn2qnnn.js";
10
+ import {
11
+ setLegacyRequestAPIs
12
+ } from "./index-grta8ap3.js";
13
+ import {
14
+ setCacheComponents
15
+ } from "./index-kresp2n8.js";
16
+ import {
17
+ findWorkspaceRoot
18
+ } from "./index-pym1cezq.js";
19
+ import {
20
+ __require
21
+ } from "./index-rt9qq1va.js";
22
+
23
+ // src/config.ts
24
+ import { existsSync, realpathSync } from "fs";
25
+ import { fileURLToPath, pathToFileURL } from "url";
26
+ import path2 from "path";
27
+
28
+ // src/env.ts
29
+ import { readFile, stat } from "fs/promises";
30
+ import path from "path";
31
+ import { parse } from "dotenv";
32
+ async function loadEnv(root, options = {}) {
33
+ const nodeEnvKey = "NODE_ENV";
34
+ const env = process.env;
35
+ if (!env[nodeEnvKey])
36
+ env[nodeEnvKey] = options.dev ? "development" : "production";
37
+ const mode = process.env[nodeEnvKey] ?? "production";
38
+ const loadedEnvFiles = [];
39
+ for (const file of envFilesForMode(mode)) {
40
+ const filePath = path.join(root, file);
41
+ if (!await isEnvFile(filePath))
42
+ continue;
43
+ const parsed = parse(await readFile(filePath, "utf8"));
44
+ const env2 = expandEnv(parsed);
45
+ for (const [key, value] of Object.entries(env2)) {
46
+ if (process.env[key] === undefined)
47
+ process.env[key] = value;
48
+ }
49
+ loadedEnvFiles.push({ path: file, env: env2 });
50
+ }
51
+ return { mode, loadedEnvFiles };
52
+ }
53
+ function envFilesForMode(mode) {
54
+ return [
55
+ `.env.${mode}.local`,
56
+ mode === "test" ? undefined : ".env.local",
57
+ `.env.${mode}`,
58
+ ".env"
59
+ ].filter((file) => Boolean(file));
60
+ }
61
+ async function isEnvFile(file) {
62
+ try {
63
+ const info = await stat(file);
64
+ return info.isFile();
65
+ } catch (error) {
66
+ if (error.code === "ENOENT")
67
+ return false;
68
+ throw error;
69
+ }
70
+ }
71
+ function expandEnv(parsed) {
72
+ const env = {};
73
+ for (const [key, value] of Object.entries(parsed)) {
74
+ env[key] = expandValue(value, { ...parsed, ...env });
75
+ }
76
+ return env;
77
+ }
78
+ function expandValue(value, parsed) {
79
+ let result = value;
80
+ for (let index = searchLastEnvReference(result), attempts = 0;index !== -1 && attempts < 100; index = searchLastEnvReference(result), attempts += 1) {
81
+ const match = result.slice(index).match(/^\$({?)([\w]+)(?::-([^}]*))?}?/);
82
+ if (!match)
83
+ break;
84
+ const token = match[0] ?? "";
85
+ const braced = match[1] ?? "";
86
+ const key = match[2] ?? "";
87
+ const fallback = match[3] ?? "";
88
+ const hasClosingBrace = braced ? token.endsWith("}") : true;
89
+ if (!hasClosingBrace)
90
+ break;
91
+ const replacement = process.env[key] || fallback || parsed[key] || "";
92
+ result = `${result.slice(0, index)}${replacement}${result.slice(index + token.length)}`;
93
+ }
94
+ return result.replace(/\\\$/g, "$");
95
+ }
96
+ function searchLastEnvReference(value) {
97
+ const matches = [...value.matchAll(/(?<!\\)\$/g)];
98
+ return matches.length > 0 ? matches.at(-1)?.index ?? -1 : -1;
99
+ }
100
+
101
+ // src/types.ts
102
+ var PREFETCH_MODES = ["visible", "intent", "load", false];
103
+
104
+ // src/config.ts
105
+ var DEFAULT_OUT_DIR = ".pnext";
106
+ var defaultConfig = {
107
+ outDir: DEFAULT_OUT_DIR,
108
+ basePath: ""
109
+ };
110
+ var configSource;
111
+ function registerConfigSource(source) {
112
+ configSource = source;
113
+ }
114
+ async function resolveConfigSource(config, root, options) {
115
+ if (!config.compat?.next)
116
+ return {};
117
+ if (!configSource) {
118
+ await import("./config-n2z7yxps.js").then((module) => module.registerConfigSource());
119
+ }
120
+ if (!configSource)
121
+ return {};
122
+ return configSource(root, options);
123
+ }
124
+ async function loadConfig(rootInput = process.cwd(), options = {}) {
125
+ const root = canonicalRoot(path2.resolve(rootInput));
126
+ const released = options.serve ? locateRelease(root, DEFAULT_OUT_DIR) : undefined;
127
+ if (released)
128
+ return loadReleasedConfig(root, released, options);
129
+ await loadEnv(root, options);
130
+ const configPath = path2.join(root, "pnext.config.ts");
131
+ const loadedConfig = existsSync(configPath) ? await import(pathToFileHref(configPath)) : {};
132
+ const config = {
133
+ ...loadedConfig.default ?? {},
134
+ ...process.env.PNEXT_COMPAT === "next" ? {
135
+ compat: {
136
+ ...loadedConfig.default?.compat ?? {},
137
+ next: loadedConfig.default?.compat?.next || true
138
+ }
139
+ } : {}
140
+ };
141
+ validateConfig(config);
142
+ setLegacyRequestAPIs(typeof config.compat?.next === "object" && config.compat.next.legacyRequestAPIs === true);
143
+ setCacheComponents(false);
144
+ const sourceOverrides = stripUndefined(await resolveConfigSource(config, root, options));
145
+ const merged = { ...defaultConfig, ...config, ...sourceOverrides };
146
+ const outRootPath = path2.resolve(root, merged.outDir);
147
+ const appPath = await resolveAppPath(root, config, options.dev ? undefined : path2.join(outRootPath, "pnext-pages-compat"));
148
+ const workspaceRoot = canonicalRoot(config.workspaceRoot ? path2.resolve(root, config.workspaceRoot) : findWorkspaceRoot(root) ?? root);
149
+ return {
150
+ ...config,
151
+ trailingSlash: merged.trailingSlash ?? config.trailingSlash,
152
+ productionBrowserSourceMaps: merged.productionBrowserSourceMaps ?? config.productionBrowserSourceMaps,
153
+ skipTrailingSlashRedirect: merged.skipTrailingSlashRedirect ?? config.skipTrailingSlashRedirect,
154
+ appDir: path2.relative(root, appPath),
155
+ publicDir: "public",
156
+ outDir: merged.outDir,
157
+ basePath: merged.basePath,
158
+ assetPrefix: merged.assetPrefix ?? merged.basePath,
159
+ root,
160
+ workspaceRoot,
161
+ appPath,
162
+ publicPath: path2.resolve(root, "public"),
163
+ outPath: options.dev ? path2.join(outRootPath, devOutSegment) : outRootPath,
164
+ outRootPath,
165
+ typesPath: path2.join(outRootPath, "types"),
166
+ checksPath: path2.join(outRootPath, "typecheck", "checks")
167
+ };
168
+ }
169
+ async function loadReleasedConfig(root, outPath, options) {
170
+ const index = readBuildIndex(outPath);
171
+ const config = releaseConfig(index.config, root, outPath);
172
+ await loadEnv(root, options);
173
+ setLegacyRequestAPIs(typeof config.compat?.next === "object" && config.compat.next.legacyRequestAPIs === true);
174
+ setCacheComponents(false);
175
+ await resolveConfigSource(config, root, {
176
+ ...options,
177
+ bundle: index.nextConfig ? path2.resolve(outPath, index.nextConfig) : null,
178
+ handlers: Object.fromEntries(Object.entries(index.compat?.cacheHandlers ?? {}).map(([name, file]) => [
179
+ name,
180
+ path2.resolve(outPath, file)
181
+ ]))
182
+ });
183
+ attachRelease(config, index);
184
+ return config;
185
+ }
186
+ var enumFields = [
187
+ ["prefetch", PREFETCH_MODES]
188
+ ];
189
+ function validateConfig(config) {
190
+ for (const [field, allowed] of enumFields) {
191
+ const value = config[field];
192
+ if (value === undefined || allowed.includes(value))
193
+ continue;
194
+ const list = allowed.map((v) => typeof v === "string" ? `'${v}'` : String(v)).join(", ");
195
+ throw new Error(`Invalid pnext config: '${field}' must be one of ${list} (received ${JSON.stringify(value)}).`);
196
+ }
197
+ }
198
+ var devOutSegment = "dev";
199
+ function canonicalRoot(dir) {
200
+ try {
201
+ return realpathSync(dir);
202
+ } catch {
203
+ return dir;
204
+ }
205
+ }
206
+ function stripUndefined(value) {
207
+ return Object.fromEntries(Object.entries(value).filter(([, v]) => v !== undefined));
208
+ }
209
+ function pathToFileHref(filePath) {
210
+ return pathToFileURL(path2.resolve(filePath)).href;
211
+ }
212
+ function publicEnvDefines() {
213
+ const publicEnv = Object.fromEntries([
214
+ ["NODE_ENV", "production"],
215
+ ...Object.entries(process.env).filter(([key]) => key.startsWith("NEXT_PUBLIC_") || key.startsWith("PNEXT_PUBLIC_"))
216
+ ]);
217
+ return {
218
+ "process.env": JSON.stringify(publicEnv),
219
+ ...Object.fromEntries(Object.entries(publicEnv).map(([key, value]) => [
220
+ `process.env.${key}`,
221
+ JSON.stringify(value)
222
+ ]))
223
+ };
224
+ }
225
+ var frameworkRuntimeAliases;
226
+ function frameworkRuntimeAliasEntries() {
227
+ frameworkRuntimeAliases ??= {
228
+ preact: resolveRuntimeModule("preact"),
229
+ "preact/hooks": resolveRuntimeModule("preact/hooks"),
230
+ "preact/compat": resolveRuntimeModule("preact/compat"),
231
+ "preact/compat/client": resolveRuntimeModule("preact/compat/client"),
232
+ "preact/jsx-runtime": resolveRuntimeModule("preact/jsx-runtime"),
233
+ "preact/jsx-dev-runtime": resolveRuntimeModule("preact/jsx-dev-runtime"),
234
+ "react-compiler-runtime": resolveRuntimeModule("react-compiler-runtime")
235
+ };
236
+ return frameworkRuntimeAliases;
237
+ }
238
+ function resolveRuntimeModule(specifier) {
239
+ return fileURLToPath(import.meta.resolve(specifier));
240
+ }
241
+ function pnextAliases(target) {
242
+ if (target !== "client")
243
+ return {};
244
+ return {
245
+ "@wular/pnext/cache": path2.resolve(__PNEXT_PACKAGE_ROOT__ + "/src", "api/client-cache.ts")
246
+ };
247
+ }
248
+ async function resolveAppPath(root, config, pagesBase) {
249
+ const rootApp = path2.join(root, "app");
250
+ if (config.compat?.next) {
251
+ const pagesPath = path2.join(root, "pages");
252
+ const hasPages = existsSync(pagesPath);
253
+ if (existsSync(rootApp)) {
254
+ if (hasPages) {
255
+ const { materializePagesApp: materializePagesApp2 } = await import("./router-k1reahfn.js");
256
+ const hybrid = await materializePagesApp2(root, pagesBase);
257
+ if (hybrid)
258
+ return hybrid;
259
+ }
260
+ return rootApp;
261
+ }
262
+ const { materializePagesApp } = await import("./router-k1reahfn.js");
263
+ const pagesApp = await materializePagesApp(root, pagesBase);
264
+ if (pagesApp)
265
+ return pagesApp;
266
+ } else if (existsSync(rootApp))
267
+ return rootApp;
268
+ return path2.join(root, "src", "app");
269
+ }
270
+
271
+ export { DEFAULT_OUT_DIR, registerConfigSource, loadConfig, devOutSegment, pathToFileHref, publicEnvDefines, frameworkRuntimeAliasEntries, pnextAliases };
@@ -0,0 +1,30 @@
1
+ // @bun
2
+ // src/compat/next/preferred-region.ts
3
+ import { readFileSync } from "fs";
4
+ var PREFERRED_REGION_RE = /\bexport\s+const\s+preferredRegion\s*=\s*(\[[^\]]*\]|['"][^'"]*['"])/;
5
+ function preferredRegionForRoute(route) {
6
+ for (const file of routeSources(route)) {
7
+ let source;
8
+ try {
9
+ source = readFileSync(file, "utf8");
10
+ } catch {
11
+ continue;
12
+ }
13
+ const match = PREFERRED_REGION_RE.exec(source);
14
+ if (!match?.[1])
15
+ continue;
16
+ return parsePreferredRegion(match[1]);
17
+ }
18
+ return;
19
+ }
20
+ function routeSources(route) {
21
+ return [...new Set([route.file, ...route.sourceFiles])].filter(Boolean);
22
+ }
23
+ function parsePreferredRegion(literal) {
24
+ if (literal.startsWith("[")) {
25
+ return Array.from(literal.matchAll(/['"]([^'"]*)['"]/g), (m) => m[1] ?? "");
26
+ }
27
+ return [literal.slice(1, -1)];
28
+ }
29
+
30
+ export { preferredRegionForRoute };
@@ -0,0 +1,100 @@
1
+ // @bun
2
+ import {
3
+ useSyncExternalStore
4
+ } from "./index-tgcakdxc.js";
5
+ import {
6
+ useActionState
7
+ } from "./index-68m3mwbd.js";
8
+ import {
9
+ registerResourceHint
10
+ } from "./index-yhxkxghe.js";
11
+
12
+ // src/compat/react/dom.ts
13
+ import ReactCompat from "preact/compat";
14
+ var ReactDomCompat = Object.assign(ReactCompat, {
15
+ preload,
16
+ preconnect,
17
+ prefetchDNS,
18
+ preinit
19
+ });
20
+ var dom_default = ReactDomCompat;
21
+ var render = ReactCompat.render;
22
+ var hydrate = ReactCompat.hydrate;
23
+ var createPortal = ReactCompat.createPortal;
24
+ var findDOMNode = ReactCompat.findDOMNode;
25
+ var flushSync = ReactCompat.flushSync;
26
+ var unmountComponentAtNode = ReactCompat.unmountComponentAtNode;
27
+ var unstable_batchedUpdates = ReactCompat.unstable_batchedUpdates;
28
+ var version = ReactCompat.version;
29
+ function preload(href, options) {
30
+ registerResourceHint({
31
+ rel: "preload",
32
+ url: href,
33
+ ...options?.as ? { as: options.as } : {},
34
+ ...options?.type ? { type: options.type } : {},
35
+ ...options?.fetchPriority ? { fetchPriority: options.fetchPriority } : {},
36
+ ...options?.media ? { media: options.media } : {},
37
+ ...options?.nonce ? { nonce: options.nonce } : {},
38
+ ...options?.crossOrigin ? { crossOrigin: options.crossOrigin } : {}
39
+ });
40
+ }
41
+ function preconnect(href, options) {
42
+ registerResourceHint({
43
+ rel: "preconnect",
44
+ url: href,
45
+ ...options?.crossOrigin ? { crossOrigin: options.crossOrigin } : {}
46
+ });
47
+ }
48
+ function prefetchDNS(href) {
49
+ registerResourceHint({ rel: "dns-prefetch", url: href });
50
+ }
51
+ function preinit(href, options) {
52
+ registerResourceHint({
53
+ rel: "preload",
54
+ url: href,
55
+ ...options?.as ? { as: options.as } : {},
56
+ ...options?.crossOrigin ? { crossOrigin: options.crossOrigin } : {}
57
+ });
58
+ }
59
+ var useFormState = useActionState;
60
+ var NOT_PENDING = {
61
+ pending: false,
62
+ data: null,
63
+ method: null,
64
+ action: null
65
+ };
66
+ var pendingStack = [];
67
+ var listeners = new Set;
68
+ var storeVersion = 0;
69
+ function __pnextPushFormStatus(status) {
70
+ pendingStack.push(status);
71
+ notify();
72
+ return () => {
73
+ const index = pendingStack.indexOf(status);
74
+ if (index !== -1)
75
+ pendingStack.splice(index, 1);
76
+ notify();
77
+ };
78
+ }
79
+ function notify() {
80
+ storeVersion += 1;
81
+ for (const listener of [...listeners])
82
+ listener();
83
+ }
84
+ function subscribe(listener) {
85
+ listeners.add(listener);
86
+ return () => {
87
+ listeners.delete(listener);
88
+ };
89
+ }
90
+ function useFormStatus() {
91
+ useSyncExternalStore(subscribe, () => storeVersion, () => storeVersion);
92
+ return pendingStack.length > 0 ? pendingStack[pendingStack.length - 1] : NOT_PENDING;
93
+ }
94
+ function requestFormReset(form) {
95
+ if (form && typeof form.reset === "function")
96
+ form.reset();
97
+ }
98
+ Object.assign(ReactDomCompat, { useFormState, useFormStatus, requestFormReset });
99
+
100
+ export { render, hydrate, createPortal, findDOMNode, flushSync, unmountComponentAtNode, unstable_batchedUpdates, version, preload, preconnect, prefetchDNS, preinit, useFormState, __pnextPushFormStatus, useFormStatus, requestFormReset, dom_default };
@@ -0,0 +1,152 @@
1
+ // @bun
2
+ import {
3
+ nextCompatEnabled
4
+ } from "./index-web361b8.js";
5
+ import {
6
+ cssModuleScopePath,
7
+ ensureDir,
8
+ readText
9
+ } from "./index-20ppawv7.js";
10
+ import {
11
+ productionRelease
12
+ } from "./index-tqn2qnnn.js";
13
+ import {
14
+ getCssExtensions
15
+ } from "./index-zqpqyg8p.js";
16
+ import {
17
+ __require
18
+ } from "./index-rt9qq1va.js";
19
+
20
+ // src/utils/asset-hash.ts
21
+ import { createHash } from "crypto";
22
+ function assetContentHash(bytes) {
23
+ return createHash("sha256").update(bytes).digest("hex").slice(0, 16);
24
+ }
25
+ function hashedAssetName(name, bytes) {
26
+ const hash = assetContentHash(bytes);
27
+ const dot = name.lastIndexOf(".");
28
+ return dot <= 0 ? `${name}-${hash}` : `${name.slice(0, dot)}-${hash}${name.slice(dot)}`;
29
+ }
30
+
31
+ // src/css/assets.ts
32
+ import { existsSync } from "fs";
33
+ import { readFile, writeFile } from "fs/promises";
34
+ import path from "path";
35
+ var build;
36
+ async function globalCssHref(config) {
37
+ const sources = productionRelease(config)?.globalCss ?? (await (build ??= import("./build-spy3dxp4.js"))).globalCssSources(config);
38
+ return sources.length > 0 ? assetHref(config, "global.css") : undefined;
39
+ }
40
+ var emittedAssets = new Map;
41
+ function recordEmittedAsset(outPath, logical, emitted) {
42
+ const names = emittedAssets.get(outPath) ?? new Map;
43
+ names.set(logical, emitted);
44
+ emittedAssets.set(outPath, names);
45
+ }
46
+ function publishEmittedAssets(outPath, names) {
47
+ if (!names)
48
+ return;
49
+ for (const [logical, emitted] of Object.entries(names))
50
+ recordEmittedAsset(outPath, logical, emitted);
51
+ }
52
+ function emittedAssetNames(outPath) {
53
+ return Object.fromEntries(emittedAssets.get(outPath) ?? []);
54
+ }
55
+ function clearEmittedAssets(outPath) {
56
+ emittedAssets.delete(outPath);
57
+ }
58
+ function emittedAssetName(config, name) {
59
+ if (!config?.outPath)
60
+ return name;
61
+ return emittedAssets.get(config.outPath)?.get(name) ?? name;
62
+ }
63
+ function assetPathname(config, name) {
64
+ const emitted = emittedAssetName(config, name);
65
+ return nextCompatEnabled(config ?? {}) ? `/_next/static/${emitted}` : `/assets/${emitted}`;
66
+ }
67
+ function assetHref(config, name) {
68
+ return withAssetPrefix(config, assetPathname(config, name));
69
+ }
70
+ function routeCssAssetNames(route) {
71
+ if (route.cssImports.length === 0)
72
+ return [];
73
+ return route.cssAssets?.length ? route.cssAssets : [`${route.id}.css`];
74
+ }
75
+ function routeCssHref(route, config) {
76
+ const assets = routeCssAssetNames(route);
77
+ if (assets.length === 0)
78
+ return;
79
+ return assets.map((asset) => assetHref(config, asset));
80
+ }
81
+ async function emitFontCssStylesheet(config, routeId, fontCss, baseAsset, options) {
82
+ const outDir = path.join(config.outPath, options.dev ? "cache" : "public", "assets");
83
+ await ensureDir(outDir);
84
+ const baseFile = baseAsset ? path.join(outDir, baseAsset) : undefined;
85
+ const baseCss = baseFile && existsSync(baseFile) ? await readFile(baseFile, "utf8") : "";
86
+ const contents = [fontCss, baseCss].filter(Boolean).join(`
87
+ `);
88
+ const logicalName = baseAsset ? baseAsset.replace(/-[0-9a-f]{16}(?=\.css$)/, "") : `${routeId}.css`;
89
+ const name = hashedAssetName(logicalName, contents);
90
+ const file = path.join(outDir, name);
91
+ if (!existsSync(file) || await readFile(file, "utf8") !== contents)
92
+ await writeFile(file, contents);
93
+ return name;
94
+ }
95
+ function withAssetPrefix(config, href) {
96
+ const prefix = config?.assetPrefix;
97
+ if (!prefix)
98
+ return href;
99
+ return `${prefix.replace(/\/$/, "")}${href}`;
100
+ }
101
+ var cssRuntimeRegistered = false;
102
+ function registerCssRuntime() {
103
+ if (cssRuntimeRegistered)
104
+ return;
105
+ cssRuntimeRegistered = true;
106
+ Bun.plugin({
107
+ name: "pnext-css-runtime",
108
+ setup(plugin) {
109
+ plugin.onLoad({ filter: /\.(?:css|scss|sass)$/ }, async ({ path: file }) => isCssModuleFile(file) ? {
110
+ exports: { default: await cssModuleMapping(file) },
111
+ loader: "object"
112
+ } : {
113
+ contents: "export default undefined;",
114
+ loader: "js"
115
+ });
116
+ }
117
+ });
118
+ }
119
+ function isCssModuleFile(file) {
120
+ return /\.module\.(?:css|scss|sass)$/.test(file);
121
+ }
122
+ async function cssModuleMapping(file) {
123
+ const compatMapping = getCssExtensions().resolveCssModule(file);
124
+ if (compatMapping)
125
+ return compatMapping;
126
+ const source = await readText(file);
127
+ const classNames = cssClassNames(source);
128
+ return Object.fromEntries([...classNames].map((className) => [className, cssModuleClassName(file, className)]));
129
+ }
130
+ function cssClassNames(source) {
131
+ const classNames = new Set;
132
+ const classPattern = /(^|[^\\])\.(-?[_a-zA-Z][\w-]*)/g;
133
+ let match;
134
+ while (match = classPattern.exec(source)) {
135
+ if (match[2])
136
+ classNames.add(match[2]);
137
+ }
138
+ return classNames;
139
+ }
140
+ function cssModuleClassName(file, className) {
141
+ const base = path.basename(file).replace(/\.module\.css$/, "").replace(/[^_a-zA-Z0-9]/g, "_");
142
+ const hash = pathHash(cssModuleScopePath(file));
143
+ return `${base}_${className}_${hash}`;
144
+ }
145
+ function pathHash(file) {
146
+ let hash = 5381;
147
+ for (const char of file)
148
+ hash = (hash << 5) + hash ^ char.charCodeAt(0);
149
+ return (hash >>> 0).toString(36).slice(0, 5);
150
+ }
151
+
152
+ export { assetContentHash, hashedAssetName, globalCssHref, recordEmittedAsset, publishEmittedAssets, emittedAssetNames, clearEmittedAssets, emittedAssetName, assetPathname, assetHref, routeCssAssetNames, routeCssHref, emitFontCssStylesheet, withAssetPrefix, registerCssRuntime, isCssModuleFile, cssModuleMapping, cssClassNames, cssModuleClassName };
@@ -0,0 +1,57 @@
1
+ // @bun
2
+ import { join as __pnextJoin } from "node:path";
3
+ const __PNEXT_PACKAGE_ROOT__ = __pnextJoin(import.meta.dirname, "../../..");
4
+ // src/runtime/prebundle.ts
5
+ import { readFileSync } from "fs";
6
+ import path from "path";
7
+ import { fileURLToPath } from "url";
8
+ var runtimeEntryFiles = ["cli/start.ts", "index.ts", "internal.ts", "client/reference.ts"];
9
+ var runtimeEntryDirs = ["api", "compat/next", "compat/react"];
10
+ var PREBUNDLE_STAMP = path.join("dist", "server", "generation.json");
11
+ var prebundle = typeof { version: "0.1.7", fingerprint: "3e1b3462bd8a29ed", entries: ["cli/index", "cli/start", "client/reference", "api/client-cache", "compat/next/canonical-url", "compat/next/link-transform", "compat/next/client-navigation", "compat/next/og", "compat/next/link", "compat/next/usage", "compat/next/client-script", "compat/next/headers", "compat/next/custom-server", "compat/next/legacy-image", "compat/next/router", "compat/next/navigation", "compat/next/dist/server/web/spec-extension/unstable-no-store", "compat/next/dist/server/web/spec-extension/unstable-cache", "compat/next/dist/server/web/spec-extension/revalidate", "compat/next/dist/client/components/app-router-headers", "compat/next/web-vitals", "compat/next/root-params", "compat/next/route-state", "compat/next/server-only", "compat/next/client-server", "compat/next/legacy-request-apis", "compat/next/redirects", "compat/next/resource-hints", "compat/next/svgr", "compat/next/client-only", "compat/next/image/props", "compat/next/image/optimizer", "compat/next/image/validate", "compat/next/image/shared", "compat/next/image/patterns", "compat/next/image/config", "compat/next/image/client", "compat/next/image/static-metadata", "compat/next/user-agent", "compat/next/client-cache", "compat/next/head", "compat/next/dynamic", "compat/next/telemetry", "compat/next/offline", "compat/next/cache", "compat/next/constants", "compat/next/error", "compat/next/script", "compat/next/index", "compat/next/font/shared", "compat/next/font/runtime", "compat/next/font/google", "compat/next/font/cache", "compat/next/font/runtime-client", "compat/next/font/local", "compat/next/font/index", "compat/next/config-loader", "compat/next/config", "compat/next/image", "compat/next/server", "compat/next/rewrites", "compat/next/preferred-region", "compat/next/config-headers", "compat/next/form", "compat/react/dom", "compat/react/hooks-extra", "compat/react/react-server", "compat/react/dom-client", "compat/react/style-values", "compat/react/compiler-runtime", "compat/react/router-shim", "compat/react/dom-server", "compat/react/dom-react-server", "compat/react/server-component-use", "compat/react/action-state", "compat/react/client", "compat/react/client-lite", "compat/react/server-inserted-html", "compat/react/parity", "compat/react/preact", "compat/react/use", "compat/react/view-transition", "compat/react/internals", "compat/react/server"] } === "object" ? { version: "0.1.7", fingerprint: "3e1b3462bd8a29ed", entries: ["cli/index", "cli/start", "client/reference", "api/client-cache", "compat/next/canonical-url", "compat/next/link-transform", "compat/next/client-navigation", "compat/next/og", "compat/next/link", "compat/next/usage", "compat/next/client-script", "compat/next/headers", "compat/next/custom-server", "compat/next/legacy-image", "compat/next/router", "compat/next/navigation", "compat/next/dist/server/web/spec-extension/unstable-no-store", "compat/next/dist/server/web/spec-extension/unstable-cache", "compat/next/dist/server/web/spec-extension/revalidate", "compat/next/dist/client/components/app-router-headers", "compat/next/web-vitals", "compat/next/root-params", "compat/next/route-state", "compat/next/server-only", "compat/next/client-server", "compat/next/legacy-request-apis", "compat/next/redirects", "compat/next/resource-hints", "compat/next/svgr", "compat/next/client-only", "compat/next/image/props", "compat/next/image/optimizer", "compat/next/image/validate", "compat/next/image/shared", "compat/next/image/patterns", "compat/next/image/config", "compat/next/image/client", "compat/next/image/static-metadata", "compat/next/user-agent", "compat/next/client-cache", "compat/next/head", "compat/next/dynamic", "compat/next/telemetry", "compat/next/offline", "compat/next/cache", "compat/next/constants", "compat/next/error", "compat/next/script", "compat/next/index", "compat/next/font/shared", "compat/next/font/runtime", "compat/next/font/google", "compat/next/font/cache", "compat/next/font/runtime-client", "compat/next/font/local", "compat/next/font/index", "compat/next/config-loader", "compat/next/config", "compat/next/image", "compat/next/server", "compat/next/rewrites", "compat/next/preferred-region", "compat/next/config-headers", "compat/next/form", "compat/react/dom", "compat/react/hooks-extra", "compat/react/react-server", "compat/react/dom-client", "compat/react/style-values", "compat/react/compiler-runtime", "compat/react/router-shim", "compat/react/dom-server", "compat/react/dom-react-server", "compat/react/server-component-use", "compat/react/action-state", "compat/react/client", "compat/react/client-lite", "compat/react/server-inserted-html", "compat/react/parity", "compat/react/preact", "compat/react/use", "compat/react/view-transition", "compat/react/internals", "compat/react/server"] } : undefined;
12
+ var packageRoot = path.resolve(__PNEXT_PACKAGE_ROOT__ + "/src/runtime", "..", "..");
13
+ var srcRoot = path.join(packageRoot, "src") + path.sep;
14
+ var distRoot = path.join(packageRoot, "dist", "server");
15
+ var entries = new Set(prebundle?.entries);
16
+ function packageVersion(root) {
17
+ return JSON.parse(readFileSync(path.join(root, "package.json"), "utf8")).version;
18
+ }
19
+ function readPrebundleStamp(frameworkRoot, fingerprint) {
20
+ let stamp;
21
+ try {
22
+ stamp = JSON.parse(readFileSync(path.join(frameworkRoot, PREBUNDLE_STAMP), "utf8"));
23
+ } catch {
24
+ return;
25
+ }
26
+ return stamp.fingerprint === fingerprint && stamp.version === packageVersion(frameworkRoot) ? stamp : undefined;
27
+ }
28
+ function prebundledFile(file) {
29
+ if (!prebundle || !file.startsWith(srcRoot))
30
+ return file;
31
+ const entry = file.slice(srcRoot.length).replace(/\.tsx?$/, "");
32
+ return entries.has(entry) ? path.join(distRoot, `${entry}.js`) : file;
33
+ }
34
+ var registered = false;
35
+ function registerPrebundleResolve() {
36
+ if (!prebundle || registered)
37
+ return;
38
+ registered = true;
39
+ const escaped = srcRoot.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
40
+ Bun.plugin({
41
+ name: "pnext-prebundle",
42
+ setup(build) {
43
+ build.onResolve({ filter: new RegExp(`^(?:file://)?${escaped}.*\\.tsx?$`) }, (args) => {
44
+ const file = args.path.startsWith("file:") ? fileURLToPath(args.path) : args.path;
45
+ const target = prebundledFile(file);
46
+ return target === file ? undefined : { path: target };
47
+ });
48
+ build.onResolve({ filter: /^\.\.?\/.*\/src\/.*\.tsx?$/ }, (args) => {
49
+ const file = path.resolve(path.dirname(args.importer), args.path);
50
+ const target = prebundledFile(file);
51
+ return target === file ? undefined : { path: target };
52
+ });
53
+ }
54
+ });
55
+ }
56
+
57
+ export { runtimeEntryFiles, runtimeEntryDirs, readPrebundleStamp, prebundledFile, registerPrebundleResolve };
@@ -0,0 +1,47 @@
1
+ // @bun
2
+ // src/utils/html.ts
3
+ function escapeHtml(value) {
4
+ return stringifyHtmlValue(value).replace(/[&<>"']/g, (char) => {
5
+ switch (char) {
6
+ case "&":
7
+ return "&amp;";
8
+ case "<":
9
+ return "&lt;";
10
+ case ">":
11
+ return "&gt;";
12
+ case '"':
13
+ return "&quot;";
14
+ case "'":
15
+ return "&#x27;";
16
+ default:
17
+ return char;
18
+ }
19
+ });
20
+ }
21
+ function stringifyHtmlValue(value) {
22
+ if (value === undefined || value === null)
23
+ return "";
24
+ if (typeof value === "string")
25
+ return value;
26
+ if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") {
27
+ return String(value);
28
+ }
29
+ if (value instanceof URL)
30
+ return value.href;
31
+ if (value instanceof Date)
32
+ return value.toISOString();
33
+ if (typeof value !== "object")
34
+ return "";
35
+ const stringifier = value.toString;
36
+ if (!stringifier || stringifier === Object.prototype.toString)
37
+ return "";
38
+ const stringified = stringifier.call(value);
39
+ if (typeof stringified === "string")
40
+ return stringified;
41
+ if (typeof stringified === "number" || typeof stringified === "boolean" || typeof stringified === "bigint") {
42
+ return String(stringified);
43
+ }
44
+ return "";
45
+ }
46
+
47
+ export { escapeHtml, stringifyHtmlValue };