@wular/pnext 0.1.6 → 0.1.8

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 (337) hide show
  1. package/bin/pnext +9 -2
  2. package/dist/server/_chunks/aliases-pycbtjt1.js +46 -0
  3. package/dist/server/_chunks/analyze-4d9e00g9.js +449 -0
  4. package/dist/server/_chunks/boot-bhemypxz.js +38 -0
  5. package/dist/server/_chunks/build-c991dv65.js +86 -0
  6. package/dist/server/_chunks/build-kh5e3x48.js +3341 -0
  7. package/dist/server/_chunks/build-tier-0a96kmx3.js +2456 -0
  8. package/dist/server/_chunks/compile-040r79gj.js +22 -0
  9. package/dist/server/_chunks/config-0tvz03a6.js +24 -0
  10. package/dist/server/_chunks/config-27rj7830.js +36 -0
  11. package/dist/server/_chunks/create-9rvwshsp.js +135 -0
  12. package/dist/server/_chunks/dev-ex9exynt.js +220 -0
  13. package/dist/server/_chunks/esbuild-yyktfrtt.js +15 -0
  14. package/dist/server/_chunks/generate-myw9hef7.js +22 -0
  15. package/dist/server/_chunks/index-0r5eqfc7.js +279 -0
  16. package/dist/server/_chunks/index-0yjv5v47.js +105 -0
  17. package/dist/server/_chunks/index-11xpbfej.js +17 -0
  18. package/dist/server/_chunks/index-141vcwk6.js +109 -0
  19. package/dist/server/_chunks/index-1pzm1hdy.js +4130 -0
  20. package/dist/server/_chunks/index-29pq0kax.js +590 -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-38xpdxwd.js +194 -0
  24. package/dist/server/_chunks/index-3e075kny.js +128 -0
  25. package/dist/server/_chunks/index-3ycf5ckv.js +472 -0
  26. package/dist/server/_chunks/index-4399bvd2.js +18 -0
  27. package/dist/server/_chunks/index-4da76t62.js +297 -0
  28. package/dist/server/_chunks/index-4t92hdxd.js +172 -0
  29. package/dist/server/_chunks/index-4zzebszd.js +10 -0
  30. package/dist/server/_chunks/index-52k54ykj.js +95 -0
  31. package/dist/server/_chunks/index-5hr4062s.js +70 -0
  32. package/dist/server/_chunks/index-68m3mwbd.js +84 -0
  33. package/dist/server/_chunks/index-6b009mt0.js +56 -0
  34. package/dist/server/_chunks/index-6gex3pfa.js +15 -0
  35. package/dist/server/_chunks/index-6kp9r0d9.js +11 -0
  36. package/dist/server/_chunks/index-6q7zvrap.js +134 -0
  37. package/dist/server/_chunks/index-71885zaq.js +284 -0
  38. package/dist/server/_chunks/index-73z4esab.js +38 -0
  39. package/dist/server/_chunks/index-79ngvam8.js +60 -0
  40. package/dist/server/_chunks/index-7wc9n8be.js +25 -0
  41. package/dist/server/_chunks/index-8ct7rqy3.js +198 -0
  42. package/dist/server/_chunks/index-8kcxdfya.js +206 -0
  43. package/dist/server/_chunks/index-9ch50vtq.js +18 -0
  44. package/dist/server/_chunks/index-9f49w76j.js +213 -0
  45. package/dist/server/_chunks/index-9hz3s0m8.js +851 -0
  46. package/dist/server/_chunks/index-akkrvjn6.js +535 -0
  47. package/dist/server/_chunks/index-b6wtkdp4.js +24 -0
  48. package/dist/server/_chunks/index-b7j671dj.js +207 -0
  49. package/dist/server/_chunks/index-bcws5eh2.js +35 -0
  50. package/dist/server/_chunks/index-bzd2ef7t.js +10 -0
  51. package/dist/server/_chunks/index-cjgqs13g.js +65 -0
  52. package/dist/server/_chunks/index-ckkdpht5.js +41 -0
  53. package/dist/server/_chunks/index-cn86z041.js +296 -0
  54. package/dist/server/_chunks/index-cvr4z22m.js +92 -0
  55. package/dist/server/_chunks/index-cyfednwb.js +87 -0
  56. package/dist/server/_chunks/index-d158y67j.js +152 -0
  57. package/dist/server/_chunks/index-d1jsmhhk.js +955 -0
  58. package/dist/server/_chunks/index-dg0f05zs.js +199 -0
  59. package/dist/server/_chunks/index-dgr390q7.js +9438 -0
  60. package/dist/server/_chunks/index-drwv61cc.js +185 -0
  61. package/dist/server/_chunks/index-e3a6yx84.js +18 -0
  62. package/dist/server/_chunks/index-e88tyv35.js +45 -0
  63. package/dist/server/_chunks/index-en7n9f7m.js +22 -0
  64. package/dist/server/_chunks/index-entm8bmz.js +28 -0
  65. package/dist/server/_chunks/index-evhd413j.js +57 -0
  66. package/dist/server/_chunks/index-ezgj0tr1.js +88 -0
  67. package/dist/server/_chunks/index-fjv96re1.js +5295 -0
  68. package/dist/server/_chunks/index-fn1chkkd.js +214 -0
  69. package/dist/server/_chunks/index-fp8r0sqs.js +64 -0
  70. package/dist/server/_chunks/index-gcmj16xy.js +92 -0
  71. package/dist/server/_chunks/index-gkndxkxf.js +736 -0
  72. package/dist/server/_chunks/index-grta8ap3.js +238 -0
  73. package/dist/server/_chunks/index-h2a70tg4.js +7 -0
  74. package/dist/server/_chunks/index-h4xy648y.js +51 -0
  75. package/dist/server/_chunks/index-hdbwtdv2.js +352 -0
  76. package/dist/server/_chunks/index-he6n2bvp.js +1270 -0
  77. package/dist/server/_chunks/index-j0m1jxqa.js +1253 -0
  78. package/dist/server/_chunks/index-j2zrcp1k.js +66 -0
  79. package/dist/server/_chunks/index-j681c48a.js +2530 -0
  80. package/dist/server/_chunks/index-jbj7ehef.js +50 -0
  81. package/dist/server/_chunks/index-jcsjq3d1.js +20 -0
  82. package/dist/server/_chunks/index-jks0x0a1.js +14 -0
  83. package/dist/server/_chunks/index-jn9rbhrx.js +1599 -0
  84. package/dist/server/_chunks/index-jt8e1pje.js +12 -0
  85. package/dist/server/_chunks/index-kdhxpwyq.js +483 -0
  86. package/dist/server/_chunks/index-knp0s912.js +7 -0
  87. package/dist/server/_chunks/index-kqyy1d4f.js +50 -0
  88. package/dist/server/_chunks/index-kresp2n8.js +445 -0
  89. package/dist/server/_chunks/index-m63czgq5.js +590 -0
  90. package/dist/server/_chunks/index-ms9v9tnx.js +31 -0
  91. package/dist/server/_chunks/index-n4hxpng2.js +11 -0
  92. package/dist/server/_chunks/index-n629dy38.js +1071 -0
  93. package/dist/server/_chunks/index-nf3df4jy.js +266 -0
  94. package/dist/server/_chunks/index-nqh3xhdc.js +57 -0
  95. package/dist/server/_chunks/index-pym1cezq.js +39 -0
  96. package/dist/server/_chunks/index-q3r9z8mq.js +213 -0
  97. package/dist/server/_chunks/index-q738kkhj.js +100 -0
  98. package/dist/server/_chunks/index-qcrvt6er.js +112 -0
  99. package/dist/server/_chunks/index-qjj6gddn.js +54 -0
  100. package/dist/server/_chunks/index-qpwsgt3a.js +158 -0
  101. package/dist/server/_chunks/index-r97ptz1q.js +97 -0
  102. package/dist/server/_chunks/index-ras0sdab.js +26 -0
  103. package/dist/server/_chunks/index-rcs322t1.js +19 -0
  104. package/dist/server/_chunks/index-rgj5mx84.js +101 -0
  105. package/dist/server/_chunks/index-rjegyfx4.js +1435 -0
  106. package/dist/server/_chunks/index-rt9qq1va.js +4 -0
  107. package/dist/server/_chunks/index-rthrsed5.js +356 -0
  108. package/dist/server/_chunks/index-sq3kvz3g.js +200 -0
  109. package/dist/server/_chunks/index-stbk3jhn.js +31 -0
  110. package/dist/server/_chunks/index-tf4j19ge.js +130 -0
  111. package/dist/server/_chunks/index-tgcakdxc.js +125 -0
  112. package/dist/server/_chunks/index-tgsfjmep.js +74 -0
  113. package/dist/server/_chunks/index-tq1f96v7.js +51 -0
  114. package/dist/server/_chunks/index-tq3b39a5.js +107 -0
  115. package/dist/server/_chunks/index-typcbcsv.js +819 -0
  116. package/dist/server/_chunks/index-v1ags1na.js +132 -0
  117. package/dist/server/_chunks/index-vmr35jjw.js +170 -0
  118. package/dist/server/_chunks/index-vvq7rqtn.js +329 -0
  119. package/dist/server/_chunks/index-vz0km5qk.js +33 -0
  120. package/dist/server/_chunks/index-w6h8m6vp.js +138 -0
  121. package/dist/server/_chunks/index-web361b8.js +138 -0
  122. package/dist/server/_chunks/index-wm36rj4v.js +311 -0
  123. package/dist/server/_chunks/index-x0y005nh.js +283 -0
  124. package/dist/server/_chunks/index-x2m17v9c.js +6166 -0
  125. package/dist/server/_chunks/index-x3yn4ywm.js +22 -0
  126. package/dist/server/_chunks/index-x9c55pzy.js +871 -0
  127. package/dist/server/_chunks/index-xh1nbk46.js +1299 -0
  128. package/dist/server/_chunks/index-xvj80c3a.js +30 -0
  129. package/dist/server/_chunks/index-xywjg2vc.js +100 -0
  130. package/dist/server/_chunks/index-y4d02znn.js +66 -0
  131. package/dist/server/_chunks/index-y7mzvq2q.js +110 -0
  132. package/dist/server/_chunks/index-ye9hmsvf.js +47 -0
  133. package/dist/server/_chunks/index-yhxkxghe.js +56 -0
  134. package/dist/server/_chunks/index-yrjkqtfj.js +86 -0
  135. package/dist/server/_chunks/index-z88qv16t.js +11 -0
  136. package/dist/server/_chunks/index-zfrwq472.js +154 -0
  137. package/dist/server/_chunks/index-zqpqyg8p.js +666 -0
  138. package/dist/server/_chunks/loader-5en7wpt5.js +80 -0
  139. package/dist/server/_chunks/modules-t92favpj.js +76 -0
  140. package/dist/server/_chunks/pipeline-4t9q43ht.js +836 -0
  141. package/dist/server/_chunks/production-385bw8df.js +55 -0
  142. package/dist/server/_chunks/proxy-config-60gprphe.js +23 -0
  143. package/dist/server/_chunks/proxy-gfhmktbk.js +35 -0
  144. package/dist/server/_chunks/router-xnrva921.js +501 -0
  145. package/dist/server/_chunks/routes-ht868pdc.js +66 -0
  146. package/dist/server/_chunks/run-d40d63ag.js +697 -0
  147. package/dist/server/_chunks/server-2p8fgqq2.js +1839 -0
  148. package/dist/server/_chunks/tsconfig-defaults-bcn34eqb.js +21 -0
  149. package/dist/server/_chunks/typegen-dvtcjtaw.js +37 -0
  150. package/dist/server/api/client-cache.js +14 -0
  151. package/dist/server/cli/index.js +375 -0
  152. package/dist/server/cli/start.js +158 -0
  153. package/dist/server/client/reference.js +16 -0
  154. package/dist/server/compat/next/cache.js +56 -0
  155. package/dist/server/compat/next/canonical-url.js +13 -0
  156. package/dist/server/compat/next/client-cache.js +57 -0
  157. package/dist/server/compat/next/client-navigation.js +232 -0
  158. package/dist/server/compat/next/client-only.js +1 -0
  159. package/dist/server/compat/next/client-script.js +178 -0
  160. package/dist/server/compat/next/client-server.js +34 -0
  161. package/dist/server/compat/next/config-headers.js +34 -0
  162. package/dist/server/compat/next/config-loader.js +25 -0
  163. package/dist/server/compat/next/config.js +10 -0
  164. package/dist/server/compat/next/constants.js +18 -0
  165. package/dist/server/compat/next/custom-server.js +10 -0
  166. package/dist/server/compat/next/dist/client/components/app-router-headers.js +48 -0
  167. package/dist/server/compat/next/dist/server/web/spec-extension/revalidate.js +27 -0
  168. package/dist/server/compat/next/dist/server/web/spec-extension/unstable-cache.js +25 -0
  169. package/dist/server/compat/next/dist/server/web/spec-extension/unstable-no-store.js +25 -0
  170. package/dist/server/compat/next/dynamic.js +21 -0
  171. package/dist/server/compat/next/error.js +112 -0
  172. package/dist/server/compat/next/font/cache.js +16 -0
  173. package/dist/server/compat/next/font/google.js +3 -0
  174. package/dist/server/compat/next/font/index.js +1 -0
  175. package/dist/server/compat/next/font/local.js +24 -0
  176. package/dist/server/compat/next/font/runtime-client.js +33 -0
  177. package/dist/server/compat/next/font/runtime.js +43 -0
  178. package/dist/server/compat/next/font/shared.js +22 -0
  179. package/dist/server/compat/next/form.js +129 -0
  180. package/dist/server/compat/next/head.js +10 -0
  181. package/dist/server/compat/next/headers.js +30 -0
  182. package/dist/server/compat/next/image/client.js +11 -0
  183. package/dist/server/compat/next/image/config.js +18 -0
  184. package/dist/server/compat/next/image/optimizer.js +25 -0
  185. package/dist/server/compat/next/image/patterns.js +12 -0
  186. package/dist/server/compat/next/image/props.js +16 -0
  187. package/dist/server/compat/next/image/shared.js +86 -0
  188. package/dist/server/compat/next/image/static-metadata.js +32 -0
  189. package/dist/server/compat/next/image/validate.js +8 -0
  190. package/dist/server/compat/next/image.js +59 -0
  191. package/dist/server/compat/next/index.js +1 -0
  192. package/dist/server/compat/next/legacy-image.js +78 -0
  193. package/dist/server/compat/next/legacy-request-apis.js +24 -0
  194. package/dist/server/compat/next/link-transform.js +15 -0
  195. package/dist/server/compat/next/link.js +14 -0
  196. package/dist/server/compat/next/navigation.js +191 -0
  197. package/dist/server/compat/next/offline.js +45 -0
  198. package/dist/server/compat/next/og.js +8 -0
  199. package/dist/server/compat/next/preferred-region.js +8 -0
  200. package/dist/server/compat/next/redirects.js +32 -0
  201. package/dist/server/compat/next/resource-hints.js +30 -0
  202. package/dist/server/compat/next/rewrites.js +43 -0
  203. package/dist/server/compat/next/root-params.js +121 -0
  204. package/dist/server/compat/next/route-state.js +23 -0
  205. package/dist/server/compat/next/router.js +103 -0
  206. package/dist/server/compat/next/script.js +37 -0
  207. package/dist/server/compat/next/server-only.js +1 -0
  208. package/dist/server/compat/next/server.js +131 -0
  209. package/dist/server/compat/next/svgr.js +14 -0
  210. package/dist/server/compat/next/telemetry.js +10 -0
  211. package/dist/server/compat/next/usage.js +13 -0
  212. package/dist/server/compat/next/user-agent.js +12 -0
  213. package/dist/server/compat/next/web-vitals.js +35 -0
  214. package/dist/server/compat/react/action-state.js +11 -0
  215. package/dist/server/compat/react/client-lite.js +83 -0
  216. package/dist/server/compat/react/client.js +131 -0
  217. package/dist/server/compat/react/compiler-runtime.js +42 -0
  218. package/dist/server/compat/react/dom-client.js +106 -0
  219. package/dist/server/compat/react/dom-react-server.js +37 -0
  220. package/dist/server/compat/react/dom-server.js +40 -0
  221. package/dist/server/compat/react/dom.js +52 -0
  222. package/dist/server/compat/react/hooks-extra.js +12 -0
  223. package/dist/server/compat/react/internals.js +14 -0
  224. package/dist/server/compat/react/parity.js +11 -0
  225. package/dist/server/compat/react/preact.js +113 -0
  226. package/dist/server/compat/react/react-server.js +133 -0
  227. package/dist/server/compat/react/router-shim.js +8 -0
  228. package/dist/server/compat/react/server-component-use.js +14 -0
  229. package/dist/server/compat/react/server-inserted-html.js +14 -0
  230. package/dist/server/compat/react/server.js +194 -0
  231. package/dist/server/compat/react/style-values.js +10 -0
  232. package/dist/server/compat/react/use.js +10 -0
  233. package/dist/server/compat/react/view-transition.js +12 -0
  234. package/dist/server/generation.json +1 -0
  235. package/package.json +4 -1
  236. package/reference/compat.md +1 -1
  237. package/reference/config.md +2 -2
  238. package/reference/dev.md +1 -1
  239. package/reference/getting-started.md +1 -1
  240. package/reference/rendering.md +4 -4
  241. package/src/api/dynamic.tsx +86 -4
  242. package/src/api/server.ts +24 -6
  243. package/src/cli/adapters/vercel-warm.ts +327 -62
  244. package/src/cli/adapters/vercel.ts +164 -1054
  245. package/src/cli/analyze.ts +3 -2
  246. package/src/cli/build/cache.ts +6 -6
  247. package/src/cli/build.ts +78 -45
  248. package/src/cli/index.ts +21 -3
  249. package/src/cli/serve/immutable.ts +31 -0
  250. package/src/cli/serve/pipeline.ts +97 -93
  251. package/src/cli/serve/standalone-worker.ts +8 -0
  252. package/src/cli/serve/standalone.ts +703 -0
  253. package/src/cli/start.ts +31 -8
  254. package/src/client/build.ts +1 -1
  255. package/src/client/chunk-fold.ts +19 -6
  256. package/src/client/react-tier.ts +3 -2
  257. package/src/client/reference-stub.ts +23 -36
  258. package/src/compat/actions/client-plugin.ts +4 -2
  259. package/src/compat/actions/config.ts +6 -5
  260. package/src/compat/actions/extensions.ts +5 -5
  261. package/src/compat/aliases.ts +8 -1
  262. package/src/compat/bundler/config.ts +88 -0
  263. package/src/compat/bundler/optimize-package-imports.ts +86 -26
  264. package/src/compat/bundler/relay-transform.ts +15 -3
  265. package/src/compat/bundler/require-context.ts +2 -1
  266. package/src/compat/bundler/webpack-loaders.ts +3 -2
  267. package/src/compat/bundler/worker.ts +2 -2
  268. package/src/compat/cache-control.ts +16 -8
  269. package/src/compat/css/inline-css.ts +1 -1
  270. package/src/compat/css/modules.ts +18 -5
  271. package/src/compat/export/build-complete.ts +1 -1
  272. package/src/compat/export/emit.ts +4 -4
  273. package/src/compat/export/standalone.ts +30 -65
  274. package/src/compat/image-optimizer/optimize.ts +1 -1
  275. package/src/compat/lifecycle/error-funnel.ts +1 -1
  276. package/src/compat/lifecycle/instrumentation-client.ts +4 -3
  277. package/src/compat/lifecycle/instrumentation.ts +117 -24
  278. package/src/compat/lifecycle/testmode.ts +3 -2
  279. package/src/compat/metadata-artifacts.ts +1 -1
  280. package/src/compat/next/config-loader.ts +140 -13
  281. package/src/compat/next/dynamic.tsx +10 -23
  282. package/src/compat/next/font/cache.ts +2 -1
  283. package/src/compat/next/font/runtime.ts +23 -3
  284. package/src/compat/next/og.ts +3 -3
  285. package/src/compat/next/usage.ts +3 -2
  286. package/src/compat/pages/api.ts +83 -14
  287. package/src/compat/pages/router.ts +30 -14
  288. package/src/compat/register/bundler.ts +3 -1
  289. package/src/compat/register/image.ts +1 -1
  290. package/src/compat/register/middleware.ts +1 -1
  291. package/src/compat/register/otel.ts +5 -9
  292. package/src/compat/register/render.ts +3 -1
  293. package/src/compat/register/use-cache.ts +3 -1
  294. package/src/compat/release.ts +46 -0
  295. package/src/compat/segment/serve.ts +1 -1
  296. package/src/compat/typecheck/check.ts +6 -4
  297. package/src/compat/validation/validate.ts +10 -7
  298. package/src/config.ts +76 -9
  299. package/src/css/assets.ts +213 -0
  300. package/src/css/build.ts +190 -247
  301. package/src/dev/client-chunk-store.ts +2 -1
  302. package/src/dev/restart/client-key.ts +2 -1
  303. package/src/dev/restart/global-css.ts +2 -1
  304. package/src/dev/restart/route-bundle-key.ts +2 -1
  305. package/src/dev/restart/route-facts.ts +2 -1
  306. package/src/dev/server.ts +34 -14
  307. package/src/extensions.ts +4 -0
  308. package/src/out-paths.ts +10 -0
  309. package/src/render/hooks.ts +13 -0
  310. package/src/render/renderer.ts +53 -33
  311. package/src/request/context.ts +9 -0
  312. package/src/resolve/dynamic.ts +7 -1
  313. package/src/resolve/engine.ts +2 -12
  314. package/src/resolve/imports.ts +12 -52
  315. package/src/resolve/package-json.ts +56 -0
  316. package/src/resolve/scan-facts.ts +250 -1
  317. package/src/routing/href.ts +10 -3
  318. package/src/routing/match.ts +287 -0
  319. package/src/routing/metadata-files.ts +20 -6
  320. package/src/routing/proxy-config.ts +137 -0
  321. package/src/routing/proxy.ts +35 -134
  322. package/src/routing/routes.ts +22 -281
  323. package/src/runtime/fingerprint.ts +23 -8
  324. package/src/runtime/load.ts +170 -0
  325. package/src/runtime/loader.ts +218 -44
  326. package/src/runtime/module-cache.ts +15 -1
  327. package/src/runtime/modules.ts +405 -82
  328. package/src/runtime/prebundle.ts +101 -0
  329. package/src/runtime/production.ts +456 -0
  330. package/src/runtime/release-graph.ts +342 -0
  331. package/src/runtime/vendor-build.ts +750 -17
  332. package/src/runtime/vendor.ts +16 -3
  333. package/src/types.ts +4 -3
  334. package/src/utils/directive.ts +40 -0
  335. package/src/utils/fs.ts +95 -4
  336. package/src/utils/resource-query.ts +12 -0
  337. package/src/cli/serve/entry.ts +0 -45
@@ -0,0 +1,297 @@
1
+ // @bun
2
+ import { join as __pnextJoin } from "node:path";
3
+ const __PNEXT_PACKAGE_ROOT__ = __pnextJoin(import.meta.dirname, "../../..");
4
+ import {
5
+ frozenDirListing
6
+ } from "./index-hdbwtdv2.js";
7
+
8
+ // src/utils/fs.ts
9
+ import { existsSync, readdirSync, readFileSync } from "fs";
10
+ import { mkdir, readdir, rename, rm, stat, readFile, writeFile } from "fs/promises";
11
+ import path from "path";
12
+ import { fileURLToPath } from "url";
13
+ var atomicWriteSequence = 0;
14
+ async function writeFileAtomic(file, contents, tempDirectory) {
15
+ const suffix = `${process.pid.toString(36)}.${(++atomicWriteSequence).toString(36)}.tmp`;
16
+ let temp = tempDirectory ? path.join(tempDirectory, `.${path.basename(path.dirname(file))}-${path.basename(file)}.${suffix}`) : `${file}.${suffix}`;
17
+ try {
18
+ await writeFile(temp, contents);
19
+ } catch (error) {
20
+ if (!tempDirectory)
21
+ throw error;
22
+ temp = `${file}.${suffix}`;
23
+ await writeFile(temp, contents);
24
+ }
25
+ try {
26
+ await rename(temp, file);
27
+ } catch (error) {
28
+ if (!existsSync(file))
29
+ throw error;
30
+ }
31
+ }
32
+ async function listFiles(root) {
33
+ if (!existsSync(root))
34
+ return [];
35
+ const entries = await readdir(root, { withFileTypes: true });
36
+ const branches = await Promise.all(entries.map((entry) => {
37
+ const entryPath = path.join(root, entry.name);
38
+ if (entry.isDirectory())
39
+ return listFiles(entryPath);
40
+ return Promise.resolve(entry.isFile() ? [entryPath] : []);
41
+ }));
42
+ return branches.flat();
43
+ }
44
+ var dirListings;
45
+ function withDirCache(run) {
46
+ if (dirListings)
47
+ return run();
48
+ dirListings = new Map;
49
+ try {
50
+ return run();
51
+ } finally {
52
+ dirListings = undefined;
53
+ }
54
+ }
55
+ function readDirListing(dir) {
56
+ const frozen = frozenDirListing(dir);
57
+ if (frozen)
58
+ return frozen;
59
+ const cached = dirListings?.get(dir);
60
+ if (cached)
61
+ return cached;
62
+ let listing;
63
+ try {
64
+ const entries = readdirSync(dir, { withFileTypes: true });
65
+ listing = {
66
+ files: new Set(entries.filter((entry) => !entry.isDirectory()).map((entry) => entry.name)),
67
+ dirs: entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort()
68
+ };
69
+ } catch {
70
+ listing = { files: new Set, dirs: [] };
71
+ }
72
+ dirListings?.set(dir, listing);
73
+ return listing;
74
+ }
75
+ var maxExactNameMisses = 1024;
76
+ function exactNameIndex(dir) {
77
+ let entries = [];
78
+ try {
79
+ entries = readdirSync(dir, { withFileTypes: true });
80
+ } catch {}
81
+ const entry = entries.find((item) => !item.isSymbolicLink() && hasCase(item.name));
82
+ const probe = entry ? path.join(dir, entry.name) : dir;
83
+ const name = path.basename(probe);
84
+ if (!hasCase(name))
85
+ return;
86
+ return existsSync(path.join(path.dirname(probe), flipCase(name))) ? { dirs: new Map, misses: new Set } : undefined;
87
+ }
88
+ function flipCase(name) {
89
+ return name === name.toUpperCase() ? name.toLowerCase() : name.toUpperCase();
90
+ }
91
+ function hasCase(name) {
92
+ return flipCase(name) !== name;
93
+ }
94
+ function hasExactName(names, root, relative) {
95
+ let dir = root;
96
+ for (const name of relative.split(path.sep)) {
97
+ const file = `${dir}${path.sep}${name}`;
98
+ const listing = dirNames(names, dir);
99
+ if (!listing)
100
+ return false;
101
+ if (!listing.has(name)) {
102
+ if (names.misses.has(file))
103
+ return false;
104
+ const fresh = dirNames(names, dir, true);
105
+ if (!fresh?.has(name)) {
106
+ if (fresh) {
107
+ if (names.misses.size >= maxExactNameMisses)
108
+ names.misses.clear();
109
+ names.misses.add(file);
110
+ }
111
+ return false;
112
+ }
113
+ }
114
+ dir = file;
115
+ }
116
+ return true;
117
+ }
118
+ function dirNames(names, dir, refresh = false) {
119
+ let entries = refresh ? undefined : names.dirs.get(dir);
120
+ if (!entries) {
121
+ try {
122
+ entries = new Set(readdirSync(dir));
123
+ } catch {
124
+ return;
125
+ }
126
+ names.dirs.set(dir, entries);
127
+ }
128
+ return entries;
129
+ }
130
+ function listFilesSync(root) {
131
+ if (!existsSync(root))
132
+ return [];
133
+ const out = [];
134
+ for (const entry of readdirSync(root, { withFileTypes: true })) {
135
+ const entryPath = path.join(root, entry.name);
136
+ if (entry.isDirectory())
137
+ out.push(...listFilesSync(entryPath));
138
+ else if (entry.isFile())
139
+ out.push(entryPath);
140
+ }
141
+ return out;
142
+ }
143
+ async function ensureEmptyDir(dir, keep = []) {
144
+ if (keep.length === 0) {
145
+ await rm(dir, { recursive: true, force: true });
146
+ await mkdir(dir, { recursive: true });
147
+ return;
148
+ }
149
+ await mkdir(dir, { recursive: true });
150
+ const preserved = new Set(keep);
151
+ const entries = await readdir(dir).catch(() => []);
152
+ await Promise.all(entries.filter((entry) => !preserved.has(entry)).map((entry) => rm(path.join(dir, entry), { recursive: true, force: true })));
153
+ }
154
+ async function ensureDir(dir) {
155
+ await mkdir(dir, { recursive: true });
156
+ }
157
+ async function writeText(file, value) {
158
+ await ensureDir(path.dirname(file));
159
+ await writeFile(file, value);
160
+ }
161
+ async function readText(file) {
162
+ return readFile(file, "utf8");
163
+ }
164
+ function toPosixPath(value) {
165
+ return value.split(path.sep).join("/");
166
+ }
167
+ function cssModuleScopePath(file) {
168
+ const normalized = toPosixPath(file);
169
+ const appIndex = normalized.lastIndexOf("/app/");
170
+ if (appIndex !== -1)
171
+ return normalized.slice(appIndex + 1);
172
+ let dir = path.dirname(file);
173
+ let fallback;
174
+ while (true) {
175
+ const packageFile = path.join(dir, "package.json");
176
+ if (existsSync(packageFile) || existsSync(path.join(dir, "pnext.config.ts")) || existsSync(path.join(dir, "node_modules"))) {
177
+ const relative = toPosixPath(path.relative(dir, file));
178
+ try {
179
+ const { name } = JSON.parse(readFileSync(packageFile, "utf8"));
180
+ if (typeof name === "string")
181
+ return `${name}/${relative}`;
182
+ } catch {}
183
+ fallback ??= relative;
184
+ }
185
+ const parent = path.dirname(dir);
186
+ if (parent === dir)
187
+ return fallback ?? path.basename(file);
188
+ dir = parent;
189
+ }
190
+ }
191
+ function pnextVersionRange() {
192
+ const pkgPath = fileURLToPath(new URL("../../package.json", Bun.pathToFileURL(__PNEXT_PACKAGE_ROOT__ + "/src/utils/fs.ts").href));
193
+ const { version } = JSON.parse(readFileSync(pkgPath, "utf8"));
194
+ return `^${version}`;
195
+ }
196
+ function pnextOptionalDependencyRange(name) {
197
+ const pkgPath = fileURLToPath(new URL("../../package.json", Bun.pathToFileURL(__PNEXT_PACKAGE_ROOT__ + "/src/utils/fs.ts").href));
198
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
199
+ return pkg.optionalDependencies?.[name];
200
+ }
201
+ function includeTypes(config, files, defaults) {
202
+ if (!("include" in config)) {
203
+ config.include = [...files, ...defaults];
204
+ return files;
205
+ }
206
+ const include = config.include;
207
+ if (!Array.isArray(include))
208
+ return [];
209
+ const added = files.filter((file) => !include.includes(file));
210
+ include.push(...added);
211
+ return added;
212
+ }
213
+ var frameworkRoot = path.resolve(__PNEXT_PACKAGE_ROOT__ + "/src/utils", "..", "..");
214
+ var frameworkPrefix = "pnext:";
215
+ function serializeBuildManifest(data) {
216
+ const { root, appDir, outDir } = data;
217
+ const relative = (file) => {
218
+ const inRoot = toPosixPath(path.relative(root, file));
219
+ if (!inRoot.startsWith(".."))
220
+ return inRoot;
221
+ const inFramework = toPosixPath(path.relative(frameworkRoot, file));
222
+ return inFramework.startsWith("..") ? inRoot : `${frameworkPrefix}${inFramework}`;
223
+ };
224
+ const stored = {
225
+ ...mapSourcePaths(data, relative),
226
+ root: toPosixPath(path.relative(outDir, root)) || ".",
227
+ appDir: toPosixPath(path.relative(root, appDir)),
228
+ outDir: "."
229
+ };
230
+ return `${JSON.stringify(stored, null, 2)}
231
+ `;
232
+ }
233
+ function resolveManifest(data, outPath, root, framework = frameworkRoot) {
234
+ if (path.isAbsolute(data.root))
235
+ return data;
236
+ const absolute = (file) => file.startsWith(frameworkPrefix) ? path.join(framework, file.slice(frameworkPrefix.length)) : path.join(root, file);
237
+ return {
238
+ ...mapSourcePaths(data, absolute),
239
+ root,
240
+ appDir: absolute(data.appDir),
241
+ outDir: outPath
242
+ };
243
+ }
244
+ var sourcePathFields = [
245
+ "file",
246
+ "sourceFiles",
247
+ "cssImports",
248
+ "templateFiles",
249
+ "forbiddenFiles",
250
+ "unauthorizedFiles",
251
+ "slotDirs",
252
+ "slotDir",
253
+ "syntheticSlotDir",
254
+ "childrenDefault",
255
+ "serverActionFile",
256
+ "globalErrorFile"
257
+ ];
258
+ function mapSourcePaths(data, map) {
259
+ function owner(value) {
260
+ if (!value)
261
+ return value;
262
+ const mapped2 = { ...value };
263
+ for (const key of sourcePathFields) {
264
+ const field = value[key];
265
+ if (field !== undefined)
266
+ mapped2[key] = Array.isArray(field) ? field.map(map) : map(field);
267
+ }
268
+ return mapped2;
269
+ }
270
+ const mapped = owner(data);
271
+ mapped.routes = data.routes.map((route) => ({
272
+ ...owner(route),
273
+ clientReferences: route.clientReferences.map(owner),
274
+ ...route.interception && { interception: owner(route.interception) }
275
+ }));
276
+ if (data.staticMetadataFiles)
277
+ mapped.staticMetadataFiles = data.staticMetadataFiles.map(owner);
278
+ if (data.staticRouteMetadata) {
279
+ mapped.staticRouteMetadata = Object.fromEntries(Object.entries(data.staticRouteMetadata).map(([route, entry]) => [
280
+ route,
281
+ {
282
+ ...entry,
283
+ favicon: owner(entry.favicon),
284
+ manifest: owner(entry.manifest),
285
+ icons: entry.icons.map(owner),
286
+ appleIcons: entry.appleIcons.map(owner),
287
+ rootIcons: entry.rootIcons.map(owner)
288
+ }
289
+ ]));
290
+ }
291
+ if (data.staticModuleMetadata) {
292
+ mapped.staticModuleMetadata = Object.fromEntries(Object.entries(data.staticModuleMetadata).map(([file, metadata]) => [map(file), metadata]));
293
+ }
294
+ return mapped;
295
+ }
296
+
297
+ export { writeFileAtomic, listFiles, withDirCache, readDirListing, exactNameIndex, hasExactName, listFilesSync, ensureEmptyDir, ensureDir, writeText, readText, toPosixPath, cssModuleScopePath, pnextVersionRange, pnextOptionalDependencyRange, includeTypes, serializeBuildManifest, resolveManifest };
@@ -0,0 +1,172 @@
1
+ // @bun
2
+ import {
3
+ getImagesConfig,
4
+ resolveImageProps
5
+ } from "./index-rthrsed5.js";
6
+
7
+ // src/compat/next/image/client.tsx
8
+ import {
9
+ forwardRef,
10
+ useCallback,
11
+ useEffect,
12
+ useLayoutEffect,
13
+ useRef,
14
+ useState
15
+ } from "preact/compat";
16
+ import { jsx, jsxs, Fragment } from "preact/jsx-runtime";
17
+ "use client";
18
+ var useSettleEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
19
+ function hydrating() {
20
+ return typeof window !== "undefined" && !window.__NEXT_HYDRATED;
21
+ }
22
+ function handleLoading(img, placeholder, onLoadRef, onLoadingCompleteRef, setBlurComplete) {
23
+ if (!img)
24
+ return;
25
+ const src = img.src;
26
+ const marker = img;
27
+ if (marker["data-loaded-src"] === src)
28
+ return;
29
+ marker["data-loaded-src"] = src;
30
+ const p = "decode" in img ? img.decode() : Promise.resolve();
31
+ p.catch(() => {
32
+ return;
33
+ }).then(() => {
34
+ if (!img.parentElement || !img.isConnected)
35
+ return;
36
+ if (placeholder !== "empty")
37
+ setBlurComplete(true);
38
+ if (onLoadRef.current) {
39
+ const event = new Event("load");
40
+ Object.defineProperty(event, "target", { writable: false, value: img });
41
+ let prevented = false;
42
+ let stopped = false;
43
+ onLoadRef.current({
44
+ ...event,
45
+ nativeEvent: event,
46
+ currentTarget: img,
47
+ target: img,
48
+ isDefaultPrevented: () => prevented,
49
+ isPropagationStopped: () => stopped,
50
+ persist: () => {
51
+ return;
52
+ },
53
+ preventDefault: () => {
54
+ prevented = true;
55
+ event.preventDefault();
56
+ },
57
+ stopPropagation: () => {
58
+ stopped = true;
59
+ event.stopPropagation();
60
+ }
61
+ });
62
+ }
63
+ if (onLoadingCompleteRef.current)
64
+ onLoadingCompleteRef.current(img);
65
+ });
66
+ }
67
+ function useMergedRef(refA, refB) {
68
+ const cleanupA = useRef(null);
69
+ const cleanupB = useRef(null);
70
+ return useCallback((current) => {
71
+ if (current === null) {
72
+ cleanupA.current?.();
73
+ cleanupA.current = null;
74
+ cleanupB.current?.();
75
+ cleanupB.current = null;
76
+ } else {
77
+ if (refA)
78
+ cleanupA.current = applyRef(refA, current);
79
+ if (refB)
80
+ cleanupB.current = applyRef(refB, current);
81
+ }
82
+ }, [refA, refB]);
83
+ }
84
+ function applyRef(ref, current) {
85
+ if (typeof ref === "function") {
86
+ const cleanup = ref(current);
87
+ return typeof cleanup === "function" ? cleanup : () => ref(null);
88
+ }
89
+ ref.current = current;
90
+ return () => {
91
+ ref.current = null;
92
+ };
93
+ }
94
+ var Image = forwardRef(function Image2({ __pnextConfig, ...imageProps }, forwardedRef) {
95
+ const config = __pnextConfig ?? getImagesConfig();
96
+ const [blurComplete, setBlurComplete] = useState(false);
97
+ const [showAltText, setShowAltText] = useState(false);
98
+ const { props, meta } = resolveImageProps(imageProps, config, blurComplete, showAltText);
99
+ const { onLoad, onError, onLoadingComplete } = imageProps;
100
+ const onLoadRef = useRef(onLoad);
101
+ useEffect(() => {
102
+ onLoadRef.current = onLoad;
103
+ }, [onLoad]);
104
+ const onLoadingCompleteRef = useRef(onLoadingComplete);
105
+ useEffect(() => {
106
+ onLoadingCompleteRef.current = onLoadingComplete;
107
+ }, [onLoadingComplete]);
108
+ const placeholder = meta.placeholder;
109
+ const renderedSrc = typeof props.src === "string" ? props.src : "";
110
+ const insertedImgRef = useRef(null);
111
+ const settledSrcRef = useRef(undefined);
112
+ const swallowErrorRef = useRef(false);
113
+ useSettleEffect(() => {
114
+ const img = insertedImgRef.current;
115
+ if (img === null || settledSrcRef.current === renderedSrc)
116
+ return;
117
+ settledSrcRef.current = renderedSrc;
118
+ if (onError) {
119
+ if (img.complete) {
120
+ const currentSrc = img.src;
121
+ img.src = currentSrc;
122
+ } else if (hydrating()) {
123
+ swallowErrorRef.current = true;
124
+ img.addEventListener("error", () => {
125
+ swallowErrorRef.current = false;
126
+ const failedSrc = img.src;
127
+ img.src = failedSrc;
128
+ }, { once: true });
129
+ }
130
+ }
131
+ const settle = () => handleLoading(img, placeholder, onLoadRef, onLoadingCompleteRef, setBlurComplete);
132
+ if (img.complete)
133
+ settle();
134
+ }, [renderedSrc, placeholder, onError]);
135
+ const ref = useMergedRef(forwardedRef, insertedImgRef);
136
+ const extra = imageProps;
137
+ const preloadLink = meta.preload ? /* @__PURE__ */ jsx("link", {
138
+ rel: "preload",
139
+ as: "image",
140
+ href: meta.imgAttributes.srcSet ? undefined : meta.imgAttributes.src,
141
+ ...{
142
+ imagesrcset: meta.imgAttributes.srcSet,
143
+ imagesizes: meta.imgAttributes.sizes,
144
+ crossOrigin: extra.crossOrigin,
145
+ referrerPolicy: extra.referrerPolicy,
146
+ fetchpriority: extra.fetchPriority
147
+ }
148
+ }) : null;
149
+ return /* @__PURE__ */ jsxs(Fragment, {
150
+ children: [
151
+ preloadLink,
152
+ /* @__PURE__ */ jsx("img", {
153
+ ...props,
154
+ "data-nimg": meta.fill ? "fill" : "1",
155
+ ref,
156
+ onLoad: (event) => {
157
+ handleLoading(event.currentTarget, placeholder, onLoadRef, onLoadingCompleteRef, setBlurComplete);
158
+ },
159
+ onError: (event) => {
160
+ setShowAltText(true);
161
+ if (placeholder !== "empty")
162
+ setBlurComplete(true);
163
+ if (swallowErrorRef.current)
164
+ return;
165
+ onError?.(event);
166
+ }
167
+ })
168
+ ]
169
+ });
170
+ });
171
+ var client_default = Image;
172
+ export { Image, client_default };
@@ -0,0 +1,10 @@
1
+ // @bun
2
+ // src/compat/next/constants.ts
3
+ var PHASE_EXPORT = "phase-export";
4
+ var PHASE_PRODUCTION_BUILD = "phase-production-build";
5
+ var PHASE_PRODUCTION_SERVER = "phase-production-server";
6
+ var PHASE_DEVELOPMENT_SERVER = "phase-development-server";
7
+ var PHASE_TEST = "phase-test";
8
+ var PHASE_INFO = "phase-info";
9
+
10
+ export { PHASE_EXPORT, PHASE_PRODUCTION_BUILD, PHASE_PRODUCTION_SERVER, PHASE_DEVELOPMENT_SERVER, PHASE_TEST, PHASE_INFO };
@@ -0,0 +1,95 @@
1
+ // @bun
2
+ import {
3
+ getRequestRuntime
4
+ } from "./index-z88qv16t.js";
5
+ import {
6
+ getNextConfig
7
+ } from "./index-m63czgq5.js";
8
+
9
+ // src/compat/next/route-state.ts
10
+ function publicSegments(route) {
11
+ if (route === "index" || route === "/")
12
+ return [];
13
+ return route.split("/").filter(Boolean);
14
+ }
15
+ function isDynamicSegment(segment) {
16
+ return segment.startsWith(":");
17
+ }
18
+ function staticSiblingNames(routes, pattern) {
19
+ for (let index = pattern.length - 1;index >= 0; index--) {
20
+ if (isDynamicSegment(pattern[index]))
21
+ return staticSiblingNamesAt(routes, pattern, index);
22
+ }
23
+ return [];
24
+ }
25
+ function staticSiblingNamesBySegment(routes, pattern) {
26
+ const result = {};
27
+ for (let index = 0;index < pattern.length; index++) {
28
+ if (!isDynamicSegment(pattern[index]))
29
+ continue;
30
+ const siblings = staticSiblingNamesAt(routes, pattern, index);
31
+ result[String(index)] = siblings;
32
+ }
33
+ return result;
34
+ }
35
+ function staticSiblingNamesAt(routes, pattern, level) {
36
+ if (!isDynamicSegment(pattern[level]))
37
+ return [];
38
+ const names = new Set;
39
+ for (const route of routes) {
40
+ if (route.kind !== "page" || route.interception)
41
+ continue;
42
+ const segments = publicSegments(route.route);
43
+ if (segments.length <= level)
44
+ continue;
45
+ let compatible = true;
46
+ for (let index = 0;index < level; index++) {
47
+ const own = pattern[index];
48
+ const other = segments[index];
49
+ if (isDynamicSegment(own) || isDynamicSegment(other))
50
+ continue;
51
+ if (own !== other) {
52
+ compatible = false;
53
+ break;
54
+ }
55
+ }
56
+ if (!compatible)
57
+ continue;
58
+ const name = segments[level];
59
+ if (!isDynamicSegment(name))
60
+ names.add(name);
61
+ }
62
+ return [...names].sort();
63
+ }
64
+ function paramsPrerendered(route, params) {
65
+ const sets = route.prerenderedParams;
66
+ if (!sets?.length)
67
+ return false;
68
+ if (Object.keys(params).length !== (route.params ?? []).length)
69
+ return false;
70
+ return sets.some((set) => {
71
+ const names = Object.keys(set);
72
+ return names.length === Object.keys(params).length && names.every((name) => String(set[name]) === String(params[name]));
73
+ });
74
+ }
75
+ function nextClientRouteState(route, state) {
76
+ const pattern = state.route.split("/").filter(Boolean);
77
+ const routes = getRequestRuntime()?.routes;
78
+ if (!routes)
79
+ return state;
80
+ const staticChildrenBySegment = staticSiblingNamesBySegment(routes, pattern);
81
+ const staticChildren = staticSiblingNames(routes, pattern);
82
+ const globalEager = getNextConfig().partialPrefetching === "unstable_eager";
83
+ const declared = route.segmentConfig?.prefetch;
84
+ const partiallyEnumerated = route.stream?.hasLoadingBoundary === true && !paramsPrerendered(route, state.params);
85
+ const prefetchKind = declared === "unstable_eager" || declared === undefined && (globalEager || route.hasStaticParams && !route.usesRequest && !partiallyEnumerated) ? "eager" : declared === "allow-runtime" || declared === "partial" ? "shell" : undefined;
86
+ return {
87
+ ...state,
88
+ ...staticChildren.length > 0 ? { staticChildren } : {},
89
+ ...Object.keys(staticChildrenBySegment).length > 0 ? { staticChildrenBySegment } : {},
90
+ ...prefetchKind ? { prefetchKind } : {},
91
+ ...declared === "allow-runtime" ? { runtimePrefetch: true } : {}
92
+ };
93
+ }
94
+
95
+ export { staticSiblingNames, staticSiblingNamesBySegment, nextClientRouteState };
@@ -0,0 +1,70 @@
1
+ // @bun
2
+ // src/routing/forwarded.ts
3
+ var FORWARDED_HOST = "x-forwarded-host";
4
+ var FORWARDED_PORT = "x-forwarded-port";
5
+ var FORWARDED_PROTO = "x-forwarded-proto";
6
+ var FORWARDED_FOR = "x-forwarded-for";
7
+ function withForwardedHeaders(request, peer) {
8
+ const headers = request.headers;
9
+ const hasHost = headers.has(FORWARDED_HOST);
10
+ const hasPort = headers.has(FORWARDED_PORT);
11
+ const hasProto = headers.has(FORWARDED_PROTO);
12
+ const hasFor = headers.has(FORWARDED_FOR);
13
+ if (hasHost && hasPort && hasProto && (hasFor || !peer))
14
+ return request;
15
+ let url;
16
+ try {
17
+ url = new URL(request.url);
18
+ } catch {
19
+ return request;
20
+ }
21
+ const host = headers.get("host") ?? url.host;
22
+ const proto = url.protocol.replace(":", "");
23
+ const port = url.port;
24
+ const next = new Headers(headers);
25
+ if (!hasHost)
26
+ next.set(FORWARDED_HOST, host);
27
+ if (!hasPort)
28
+ next.set(FORWARDED_PORT, port);
29
+ if (!hasProto)
30
+ next.set(FORWARDED_PROTO, proto);
31
+ if (!hasFor && peer) {
32
+ const address = peer.requestIP(request)?.address;
33
+ if (address)
34
+ next.set(FORWARDED_FOR, address);
35
+ }
36
+ return new Request(request, { headers: next });
37
+ }
38
+
39
+ // src/utils/content-type.ts
40
+ import path from "path";
41
+ var contentTypes = {
42
+ ".avif": "image/avif",
43
+ ".bmp": "image/bmp",
44
+ ".css": "text/css; charset=utf-8",
45
+ ".eot": "application/vnd.ms-fontobject",
46
+ ".gif": "image/gif",
47
+ ".htm": "text/html; charset=utf-8",
48
+ ".html": "text/html; charset=utf-8",
49
+ ".ico": "image/x-icon",
50
+ ".jpeg": "image/jpeg",
51
+ ".jpg": "image/jpeg",
52
+ ".js": "text/javascript; charset=utf-8",
53
+ ".json": "application/json; charset=utf-8",
54
+ ".mjs": "text/javascript; charset=utf-8",
55
+ ".otf": "font/otf",
56
+ ".png": "image/png",
57
+ ".svg": "image/svg+xml",
58
+ ".tif": "image/tiff",
59
+ ".tiff": "image/tiff",
60
+ ".ttf": "font/ttf",
61
+ ".wasm": "application/wasm",
62
+ ".webp": "image/webp",
63
+ ".woff": "font/woff",
64
+ ".woff2": "font/woff2"
65
+ };
66
+ function contentType(file) {
67
+ return contentTypes[path.extname(file).toLowerCase()] ?? "application/octet-stream";
68
+ }
69
+
70
+ export { withForwardedHeaders, contentType };