@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,206 @@
1
+ // @bun
2
+ import { join as __pnextJoin } from "node:path";
3
+ const __PNEXT_PACKAGE_ROOT__ = __pnextJoin(import.meta.dirname, "../../..");
4
+ // src/compat/next/custom-server.ts
5
+ import { existsSync, lstatSync, readFileSync } from "fs";
6
+ import { mkdir, rm, writeFile } from "fs/promises";
7
+ import path from "path";
8
+ var SERVER_ENTRY_NAMES = ["server.js", "server.mjs", "server.cjs", "server.ts"];
9
+ var SHIM_VERSION = "0.0.0-pnext-custom-server";
10
+ function hasCustomServerEntry(root) {
11
+ for (const name of SERVER_ENTRY_NAMES) {
12
+ const file = path.join(root, name);
13
+ if (!existsSync(file))
14
+ continue;
15
+ try {
16
+ const source = readFileSync(file, "utf8");
17
+ if (/(?:require\(\s*['"]next['"]\s*\)|from\s+['"]next['"])/.test(source))
18
+ return true;
19
+ } catch {}
20
+ }
21
+ return false;
22
+ }
23
+ async function emitCustomServerShim(config) {
24
+ if (!hasCustomServerEntry(config.root))
25
+ return;
26
+ const target = path.join(config.root, "node_modules", "next");
27
+ try {
28
+ const stat = lstatSync(target);
29
+ if (!stat.isSymbolicLink() && !isEmittedShim(target))
30
+ return;
31
+ await rm(target, { recursive: true, force: true });
32
+ } catch {}
33
+ await mkdir(target, { recursive: true });
34
+ await writeFile(path.join(target, "package.json"), `${JSON.stringify({ name: "next", version: SHIM_VERSION, main: "index.cjs" }, null, 2)}
35
+ `);
36
+ await writeFile(path.join(target, "index.cjs"), customServerShimSource());
37
+ }
38
+ function isEmittedShim(target) {
39
+ try {
40
+ const pkg = JSON.parse(readFileSync(path.join(target, "package.json"), "utf8"));
41
+ return pkg.version === SHIM_VERSION;
42
+ } catch {
43
+ return false;
44
+ }
45
+ }
46
+ function customServerShimSource() {
47
+ const cliPath = path.resolve(__PNEXT_PACKAGE_ROOT__ + "/src/compat/next", "..", "..", "cli", "index.ts");
48
+ return `'use strict';
49
+ // pnext custom-server shim for require('next') / import next from 'next'.
50
+ // Generated by pnext build; see src/compat/next/custom-server.ts.
51
+ const { spawn } = require('node:child_process');
52
+
53
+ const PNEXT_CLI = ${JSON.stringify(cliPath)};
54
+ const HOP_BY_HOP = new Set([
55
+ 'connection', 'keep-alive', 'proxy-authenticate', 'proxy-authorization',
56
+ 'te', 'trailer', 'transfer-encoding', 'upgrade', 'host', 'accept-encoding',
57
+ ]);
58
+
59
+ function createServer(options = {}) {
60
+ const dev = Boolean(options.dev);
61
+ const hostname = options.hostname || 'localhost';
62
+ const port = options.port || 3000;
63
+ let child;
64
+ let childExited;
65
+ let internalPort;
66
+
67
+ async function prepare() {
68
+ if (internalPort) return;
69
+ child = spawn(
70
+ 'bun',
71
+ ['--conditions=react-server', PNEXT_CLI, dev ? 'dev' : 'start', '--port', '0', '--hostname', '127.0.0.1'],
72
+ {
73
+ cwd: process.cwd(),
74
+ env: { ...process.env, BROWSER: 'none', NODE_ENV: dev ? 'development' : 'production' },
75
+ stdio: ['ignore', 'pipe', 'pipe'],
76
+ }
77
+ );
78
+ childExited = new Promise((resolve) => child.once('exit', resolve));
79
+ internalPort = await new Promise((resolve, reject) => {
80
+ const timer = setTimeout(
81
+ () => reject(new Error('pnext custom-server: timed out waiting for the pnext server to start')),
82
+ 60000
83
+ );
84
+ let buffer = '';
85
+ // Echo the child's logs line by line, relabelling its "- Local: <internal>"
86
+ // ready banner: log scanners on THIS process's stdout (the Next e2e harness
87
+ // parses that exact line for the app URL) must not pick up the internal
88
+ // port, or every request would bypass the custom server. Line buffering
89
+ // keeps a coalesced/split chunk from slipping the raw banner through.
90
+ const echoLines = (out) => {
91
+ let tail = '';
92
+ const write = (text) => {
93
+ const merged = tail + text;
94
+ const cut = merged.lastIndexOf('\\n') + 1;
95
+ tail = merged.slice(cut);
96
+ if (cut === 0) return;
97
+ out.write(merged.slice(0, cut).replace(/-(\\s*)(Local|Network):/g, '[pnext internal]$1$2:'));
98
+ };
99
+ child.once('exit', () => { if (tail) { const rest = tail; tail = ''; out.write(rest); } });
100
+ return write;
101
+ };
102
+ const echoOut = echoLines(process.stdout);
103
+ const echoErr = echoLines(process.stderr);
104
+ const scan = (chunk, echo) => {
105
+ const text = chunk.toString('utf8');
106
+ echo(text);
107
+ if (internalPort) return;
108
+ buffer = (buffer + text).slice(-4096);
109
+ const match = /-\\s*Local:\\s+https?:\\/\\/[^:\\s]+:(\\d+)/.exec(buffer);
110
+ if (match) {
111
+ clearTimeout(timer);
112
+ resolve(Number(match[1]));
113
+ }
114
+ };
115
+ child.stdout.on('data', (chunk) => scan(chunk, echoOut));
116
+ child.stderr.on('data', (chunk) => scan(chunk, echoErr));
117
+ child.once('exit', (code) => {
118
+ clearTimeout(timer);
119
+ reject(new Error('pnext custom-server: the pnext server exited during startup (code ' + code + ')'));
120
+ });
121
+ });
122
+ }
123
+
124
+ async function handleRequest(req, res) {
125
+ if (!internalPort) throw new Error('pnext custom-server: prepare() must complete before handling requests');
126
+ const target = new URL(req.url || '/', 'http://127.0.0.1:' + internalPort);
127
+ const headers = {};
128
+ for (const [name, value] of Object.entries(req.headers)) {
129
+ if (value === undefined || HOP_BY_HOP.has(name)) continue;
130
+ headers[name] = Array.isArray(value) ? value.join(', ') : value;
131
+ }
132
+ if (req.headers.host) headers['x-forwarded-host'] = req.headers.host;
133
+ headers['x-forwarded-proto'] = 'http';
134
+ const method = (req.method || 'GET').toUpperCase();
135
+ const hasBody = method !== 'GET' && method !== 'HEAD';
136
+ const response = await fetch(target, {
137
+ method,
138
+ headers,
139
+ body: hasBody ? req : undefined,
140
+ duplex: hasBody ? 'half' : undefined,
141
+ redirect: 'manual',
142
+ });
143
+ res.statusCode = response.status;
144
+ for (const [name, value] of response.headers) {
145
+ if (['content-encoding', 'content-length', 'transfer-encoding', 'set-cookie'].includes(name)) continue;
146
+ if (name === 'location') {
147
+ // Rewrite child-origin absolute redirects back to a relative target so
148
+ // the browser stays on the custom server's host/port.
149
+ try {
150
+ const url = new URL(value);
151
+ if (url.hostname === '127.0.0.1' && Number(url.port) === internalPort) {
152
+ res.setHeader(name, url.pathname + url.search + url.hash);
153
+ continue;
154
+ }
155
+ } catch {}
156
+ }
157
+ res.setHeader(name, value);
158
+ }
159
+ const setCookies = typeof response.headers.getSetCookie === 'function' ? response.headers.getSetCookie() : [];
160
+ if (setCookies.length > 0) {
161
+ const existing = res.getHeader('set-cookie');
162
+ const merged = existing === undefined ? setCookies : [].concat(existing, setCookies);
163
+ res.setHeader('set-cookie', merged);
164
+ }
165
+ if (response.body) {
166
+ for await (const chunk of response.body) res.write(chunk);
167
+ }
168
+ res.end();
169
+ }
170
+
171
+ async function close() {
172
+ if (!child || child.exitCode !== null) return;
173
+ // Graceful: the pnext server stops accepting connections, drains pending
174
+ // after() callbacks, then exits 0. Escalate to SIGKILL only on a hang.
175
+ child.kill('SIGTERM');
176
+ await Promise.race([
177
+ childExited,
178
+ new Promise((resolve) => setTimeout(resolve, 15000).unref()),
179
+ ]);
180
+ if (child.exitCode === null) child.kill('SIGKILL');
181
+ }
182
+
183
+ return {
184
+ hostname,
185
+ port,
186
+ prepare,
187
+ close,
188
+ getRequestHandler: () => (req, res) => handleRequest(req, res).catch((error) => {
189
+ console.error('pnext custom-server: request failed:', error);
190
+ if (!res.headersSent) res.statusCode = 500;
191
+ res.end('Internal Server Error');
192
+ }),
193
+ getUpgradeHandler: () => (_req, socket) => { socket.destroy(); },
194
+ setAssetPrefix: () => {},
195
+ logError: (...args) => console.error(...args),
196
+ render: async (req, res) => { await handleRequest(req, res); },
197
+ renderToHTML: async () => { throw new Error('renderToHTML is not supported by the pnext custom server'); },
198
+ };
199
+ }
200
+
201
+ module.exports = createServer;
202
+ module.exports.default = createServer;
203
+ `;
204
+ }
205
+
206
+ export { hasCustomServerEntry, emitCustomServerShim };
@@ -0,0 +1,274 @@
1
+ // @bun
2
+ import {
3
+ clientReferenceId
4
+ } from "./index-ras0sdab.js";
5
+ import {
6
+ dynamicCallFacts,
7
+ rewriteFacts
8
+ } from "./index-z4z9zv3b.js";
9
+
10
+ // src/resolve/dynamic.ts
11
+ function sourceHasDynamicImport(source) {
12
+ return source.includes("@wular/pnext") || source.includes("next/dynamic");
13
+ }
14
+ function pnextDynamicImportNames(source, file = "module.tsx") {
15
+ const names = new Set;
16
+ if (!sourceHasDynamicImport(source))
17
+ return names;
18
+ for (const statement of rewriteFacts(file, source).imports) {
19
+ const { specifier } = statement;
20
+ const pnext = specifier === "@wular/pnext" || specifier === "@wular/pnext/dynamic";
21
+ const nextDynamic = specifier === "next/dynamic" || /compat\/next\/dynamic(?:\.tsx)?$/.test(specifier);
22
+ if (!pnext && !nextDynamic)
23
+ continue;
24
+ for (const binding of statement.bindings) {
25
+ if (binding.type)
26
+ continue;
27
+ if (pnext ? binding.imported === "dynamic" : binding.imported === "default") {
28
+ names.add(binding.local);
29
+ }
30
+ }
31
+ }
32
+ return names;
33
+ }
34
+ function dynamicCallsFromSource(source, dynamicNames) {
35
+ const calls = [];
36
+ if (dynamicNames.size === 0)
37
+ return calls;
38
+ let index = 0;
39
+ while ((index = nextDynamicCallIndex(source, dynamicNames, index)) !== -1) {
40
+ const name = dynamicNameAt(source, dynamicNames, index);
41
+ if (!name) {
42
+ index += 1;
43
+ continue;
44
+ }
45
+ const before = source[index - 1];
46
+ const after = source[index + name.length];
47
+ if (before && /[\w$]/.test(before) || after && /[\w$]/.test(after)) {
48
+ index += name.length;
49
+ continue;
50
+ }
51
+ const open = source.indexOf("(", index + name.length);
52
+ if (open === -1 || source.slice(index + name.length, open).trim()) {
53
+ index += name.length;
54
+ continue;
55
+ }
56
+ const close = matchingParen(source, open);
57
+ if (close === -1) {
58
+ index = open + 1;
59
+ continue;
60
+ }
61
+ calls.push({
62
+ index,
63
+ name,
64
+ open,
65
+ close,
66
+ source: source.slice(index, close + 1)
67
+ });
68
+ index = close + 1;
69
+ }
70
+ return calls;
71
+ }
72
+ function rewriteLiteralDynamicCalls(source, file) {
73
+ const dynamicNames = pnextDynamicImportNames(source, file);
74
+ if (dynamicNames.size === 0)
75
+ return source;
76
+ const facts = dynamicCallFacts(source, file);
77
+ const edits = [];
78
+ for (const call of dynamicCallsFromSource(source, dynamicNames)) {
79
+ const fact = factForCall(facts, call);
80
+ if (!fact?.literal)
81
+ continue;
82
+ edits.push({
83
+ start: fact.specifierStart,
84
+ end: fact.specifierEnd,
85
+ value: `() => import(${source.slice(fact.specifierStart, fact.specifierEnd)})`
86
+ });
87
+ }
88
+ if (edits.length === 0)
89
+ return source;
90
+ let next = source;
91
+ for (const edit of edits.reverse()) {
92
+ next = `${next.slice(0, edit.start)}${edit.value}${next.slice(edit.end)}`;
93
+ }
94
+ return next;
95
+ }
96
+ function rewriteDynamicCallTargets(source, resolve, file) {
97
+ const dynamicNames = pnextDynamicImportNames(source, file);
98
+ if (dynamicNames.size === 0)
99
+ return source;
100
+ const facts = dynamicCallFacts(source, file);
101
+ const edits = [];
102
+ for (const call of dynamicCallsFromSource(source, dynamicNames)) {
103
+ const target = loaderImportTargetForCall(call, facts);
104
+ if (!target)
105
+ continue;
106
+ const file2 = resolve(target.specifier);
107
+ if (!file2)
108
+ continue;
109
+ const args = source.slice(call.open + 1, call.close);
110
+ const argCount = topLevelArgCount(args);
111
+ if (argCount < 1 || argCount > 2)
112
+ continue;
113
+ const id = `c-${clientReferenceId(file2, target.exportName)}`;
114
+ const literal = JSON.stringify({ file: file2, exportName: target.exportName, id });
115
+ const separator = /,\s*$/.test(args) ? "" : ", ";
116
+ edits.push({
117
+ at: call.close,
118
+ value: `${separator}${argCount === 1 ? "undefined, " : ""}${literal}`
119
+ });
120
+ }
121
+ if (edits.length === 0)
122
+ return source;
123
+ let next = source;
124
+ for (const edit of edits.reverse()) {
125
+ next = `${next.slice(0, edit.at)}${edit.value}${next.slice(edit.at)}`;
126
+ }
127
+ return next;
128
+ }
129
+ function factForCall(facts, call) {
130
+ return facts.find((fact) => fact.start === call.index);
131
+ }
132
+ function loaderImportTargetForCall(call, facts) {
133
+ const fact = factForCall(facts, call);
134
+ return fact && !fact.literal ? fact : undefined;
135
+ }
136
+ function devDynamicSplitEnabled() {
137
+ return process.env.PNEXT_DYNAMIC_SPLIT !== "0";
138
+ }
139
+ function rewriteDeferredDynamicImports(source, file, resolve, href) {
140
+ const dynamicNames = pnextDynamicImportNames(source, file);
141
+ if (dynamicNames.size === 0)
142
+ return source;
143
+ const deferred = deferredDynamicImportSpecifiers(source, file);
144
+ if (deferred.size === 0)
145
+ return source;
146
+ const facts = dynamicCallFacts(source, file);
147
+ const edits = [];
148
+ for (const call of dynamicCallsFromSource(source, dynamicNames)) {
149
+ const target = loaderImportTargetForCall(call, facts);
150
+ if (!target || !deferred.has(target.specifier))
151
+ continue;
152
+ const resolved = resolve(target.specifier);
153
+ if (!resolved)
154
+ continue;
155
+ const url = href({ file: resolved, exportName: target.exportName });
156
+ if (!url)
157
+ continue;
158
+ edits.push({ start: target.specifierStart + 1, end: target.specifierEnd - 1, value: url });
159
+ }
160
+ if (edits.length === 0)
161
+ return source;
162
+ let next = source;
163
+ for (const edit of edits.sort((a, b) => b.start - a.start)) {
164
+ next = `${next.slice(0, edit.start)}${edit.value}${next.slice(edit.end)}`;
165
+ }
166
+ return next;
167
+ }
168
+ function deferredDynamicImportSpecifiers(source, file) {
169
+ const deferred = new Set;
170
+ const dynamicNames = pnextDynamicImportNames(source, file);
171
+ if (dynamicNames.size === 0)
172
+ return deferred;
173
+ const optionConsts = new Map;
174
+ const constPattern = /const\s+([A-Za-z_$][\w$]*)\s*=\s*({[\s\S]*?})\s*(?:as\s+const\s*)?;/g;
175
+ let constMatch;
176
+ while (constMatch = constPattern.exec(source)) {
177
+ if (constMatch[1] && constMatch[2])
178
+ optionConsts.set(constMatch[1], constMatch[2]);
179
+ }
180
+ const facts = dynamicCallFacts(source, file);
181
+ for (const call of dynamicCallsFromSource(source, dynamicNames)) {
182
+ const target = loaderImportTargetForCall(call, facts);
183
+ if (!target)
184
+ continue;
185
+ const tail = source.slice(target.loaderEnd, call.close);
186
+ let options = tail;
187
+ for (const identifier of tail.match(/[A-Za-z_$][\w$]*/g) ?? []) {
188
+ const named = optionConsts.get(identifier);
189
+ if (named)
190
+ options += `
191
+ ${named}`;
192
+ }
193
+ const ssrFalse = /\bssr\s*:\s*false\b/.test(options);
194
+ const visible = /\bload\s*:\s*['"]visible['"]/.test(options) && !/\bssr\s*:\s*true\b/.test(options);
195
+ if (ssrFalse || visible)
196
+ deferred.add(target.specifier);
197
+ }
198
+ return deferred;
199
+ }
200
+ function topLevelArgCount(args) {
201
+ let count = 0;
202
+ let depth = 0;
203
+ let quote = null;
204
+ let sawArg = false;
205
+ for (let index = 0;index < args.length; index += 1) {
206
+ const char = args[index];
207
+ if (quote) {
208
+ if (char === quote && args[index - 1] !== "\\")
209
+ quote = null;
210
+ continue;
211
+ }
212
+ if (char === '"' || char === "'" || char === "`") {
213
+ quote = char;
214
+ sawArg = true;
215
+ continue;
216
+ }
217
+ if (char === "(" || char === "[" || char === "{")
218
+ depth += 1;
219
+ if (char === ")" || char === "]" || char === "}")
220
+ depth -= 1;
221
+ if (char === "," && depth === 0) {
222
+ if (sawArg)
223
+ count += 1;
224
+ sawArg = false;
225
+ continue;
226
+ }
227
+ if (!/\s/.test(char ?? ""))
228
+ sawArg = true;
229
+ }
230
+ return sawArg ? count + 1 : count;
231
+ }
232
+ function matchingParen(source, open) {
233
+ let depth = 0;
234
+ let quote = null;
235
+ for (let index = open;index < source.length; index += 1) {
236
+ const char = source[index];
237
+ const previous = source[index - 1];
238
+ if (quote) {
239
+ if (char === quote && previous !== "\\")
240
+ quote = null;
241
+ continue;
242
+ }
243
+ if (char === '"' || char === "'" || char === "`") {
244
+ quote = char;
245
+ continue;
246
+ }
247
+ if (char === "(")
248
+ depth += 1;
249
+ if (char === ")") {
250
+ depth -= 1;
251
+ if (depth === 0)
252
+ return index;
253
+ }
254
+ }
255
+ return -1;
256
+ }
257
+ function nextDynamicCallIndex(source, dynamicNames, fromIndex) {
258
+ let next = -1;
259
+ for (const name of dynamicNames) {
260
+ const index = source.indexOf(name, fromIndex);
261
+ if (index !== -1 && (next === -1 || index < next))
262
+ next = index;
263
+ }
264
+ return next;
265
+ }
266
+ function dynamicNameAt(source, dynamicNames, index) {
267
+ for (const name of dynamicNames) {
268
+ if (source.startsWith(name, index))
269
+ return name;
270
+ }
271
+ return;
272
+ }
273
+
274
+ export { sourceHasDynamicImport, pnextDynamicImportNames, dynamicCallsFromSource, rewriteLiteralDynamicCalls, rewriteDynamicCallTargets, devDynamicSplitEnabled, rewriteDeferredDynamicImports, deferredDynamicImportSpecifiers };
@@ -0,0 +1,18 @@
1
+ // @bun
2
+ // src/compat/react/view-transition.ts
3
+ import { Fragment, h } from "preact";
4
+ function ViewTransition({ children }) {
5
+ return h(Fragment, null, children);
6
+ }
7
+ ViewTransition.displayName = "ViewTransition";
8
+ var pendingTransitionTypes = [];
9
+ function addTransitionType(type) {
10
+ if (typeof type !== "string" || pendingTransitionTypes.includes(type))
11
+ return;
12
+ pendingTransitionTypes.push(type);
13
+ }
14
+ function takeTransitionTypes() {
15
+ return pendingTransitionTypes.splice(0, pendingTransitionTypes.length);
16
+ }
17
+
18
+ export { ViewTransition, addTransitionType, takeTransitionTypes };
@@ -0,0 +1,28 @@
1
+ // @bun
2
+ import {
3
+ insideDataCacheProducer
4
+ } from "./index-9n2914ww.js";
5
+ import {
6
+ cacheComponents,
7
+ hangingPromise,
8
+ isPrerendering
9
+ } from "./index-kresp2n8.js";
10
+
11
+ // src/compat/ppr/io.ts
12
+ function resolvedIo() {
13
+ const promise = Promise.resolve();
14
+ promise.status = "fulfilled";
15
+ promise.value = undefined;
16
+ return promise;
17
+ }
18
+ function io() {
19
+ if (!cacheComponents())
20
+ return resolvedIo();
21
+ if (insideDataCacheProducer())
22
+ return resolvedIo();
23
+ if (isPrerendering())
24
+ return hangingPromise("io()");
25
+ return resolvedIo();
26
+ }
27
+
28
+ export { io };