nitro 3.0.1-alpha.2 → 3.0.260415-beta

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 (297) hide show
  1. package/LICENSE +6 -0
  2. package/README.md +2 -2
  3. package/dist/THIRD-PARTY-LICENSES.md +1646 -0
  4. package/dist/_build/common.mjs +7261 -3812
  5. package/dist/_build/rolldown.mjs +32 -42
  6. package/dist/_build/rollup.mjs +28 -48
  7. package/dist/_build/vite.build.mjs +10 -10
  8. package/dist/_chunks/nitro.mjs +102 -327
  9. package/dist/_chunks/nitro2.mjs +8 -9
  10. package/dist/_chunks/nitro3.mjs +136 -0
  11. package/dist/_chunks/nitro4.mjs +127 -0
  12. package/dist/_chunks/utils.mjs +40 -29
  13. package/dist/_common.mjs +13 -25
  14. package/dist/_dev.d.mts +0 -3
  15. package/dist/{_chunks/dev.mjs → _dev.mjs} +132 -330
  16. package/dist/_libs/_.mjs +2 -0
  17. package/dist/_libs/_2.mjs +2 -0
  18. package/dist/_libs/_3.mjs +2 -0
  19. package/dist/_libs/_4.mjs +2 -0
  20. package/dist/_libs/_5.mjs +2 -0
  21. package/dist/_libs/_6.mjs +2 -0
  22. package/dist/_libs/_7.mjs +2 -0
  23. package/dist/_libs/c12+rc9.mjs +814 -0
  24. package/dist/_libs/{c12+giget+readdirp+chokidar.d.mts → c12+readdirp+chokidar.d.mts} +49 -40
  25. package/dist/_libs/citty.mjs +142 -41
  26. package/dist/_libs/commondir+is-reference.mjs +60 -56
  27. package/dist/_libs/compatx.d.mts +0 -2
  28. package/dist/_libs/compatx.mjs +1 -4
  29. package/dist/_libs/esbuild.d.mts +0 -1
  30. package/dist/_libs/escape-string-regexp.mjs +1 -4
  31. package/dist/_libs/{pluginutils+plugin-commonjs.d.mts → estree+pluginutils.d.mts} +0 -5
  32. package/dist/_libs/estree-walker.mjs +4 -92
  33. package/dist/_libs/exsolve.d.mts +1 -0
  34. package/dist/_libs/hasown+resolve+deepmerge.mjs +160 -246
  35. package/dist/_libs/httpxy.d.mts +20 -13
  36. package/dist/_libs/httpxy.mjs +519 -95
  37. package/dist/_libs/js-tokens.d.mts +1 -0
  38. package/dist/_libs/klona.mjs +1 -4
  39. package/dist/_libs/magic-string.d.mts +0 -2
  40. package/dist/_libs/mlly.d.mts +0 -2
  41. package/dist/_libs/nypm+tinyexec.mjs +822 -0
  42. package/dist/_libs/perfect-debounce.mjs +68 -0
  43. package/dist/_libs/pkg-types.d.mts +0 -3
  44. package/dist/_libs/plugin-alias.mjs +1 -5
  45. package/dist/_libs/plugin-inject.mjs +1 -7
  46. package/dist/_libs/plugin-json.mjs +1 -5
  47. package/dist/_libs/pluginutils.mjs +3 -35
  48. package/dist/_libs/readdirp+chokidar.mjs +187 -365
  49. package/dist/_libs/remapping.mjs +1 -5
  50. package/dist/_libs/resolve-uri+gen-mapping.mjs +15 -53
  51. package/dist/_libs/rou3.d.mts +1 -4
  52. package/dist/_libs/rou3.mjs +223 -78
  53. package/dist/_libs/std-env.d.mts +8 -2
  54. package/dist/_libs/strip-literal.d.mts +1 -0
  55. package/dist/_libs/tsconfck.mjs +21 -334
  56. package/dist/_libs/ultrahtml.mjs +3 -16
  57. package/dist/_libs/unimport+unplugin.mjs +244 -388
  58. package/dist/_libs/unplugin+unimport.d.mts +5 -15
  59. package/dist/_libs/unwasm.d.mts +0 -3
  60. package/dist/_presets.mjs +576 -488
  61. package/dist/builder.d.mts +5 -25
  62. package/dist/builder.mjs +3 -8
  63. package/dist/cli/_chunks/build.mjs +22 -25
  64. package/dist/cli/_chunks/common.mjs +1 -4
  65. package/dist/cli/_chunks/deploy.mjs +37 -0
  66. package/dist/cli/_chunks/dev.mjs +6 -11
  67. package/dist/cli/_chunks/docs.mjs +28 -0
  68. package/dist/cli/_chunks/list.mjs +4 -8
  69. package/dist/cli/_chunks/prepare.mjs +2 -6
  70. package/dist/cli/_chunks/preview.mjs +48 -0
  71. package/dist/cli/_chunks/run.mjs +7 -11
  72. package/dist/cli/_chunks/task.mjs +1 -5
  73. package/dist/cli/index.mjs +5 -6
  74. package/dist/docs/0.docs/0.index/index.md +56 -0
  75. package/dist/docs/0.docs/1.quick-start.md +110 -0
  76. package/dist/docs/0.docs/10.lifecycle.md +204 -0
  77. package/dist/docs/0.docs/11.openapi.md +291 -0
  78. package/dist/docs/0.docs/12.plugins.md +164 -0
  79. package/dist/docs/0.docs/13.tasks.md +277 -0
  80. package/dist/docs/0.docs/14.websocket.md +386 -0
  81. package/dist/docs/0.docs/15.migration.md +213 -0
  82. package/dist/docs/0.docs/16.nightly.md +31 -0
  83. package/dist/docs/0.docs/2.renderer.md +322 -0
  84. package/dist/docs/0.docs/3.routing.md +711 -0
  85. package/dist/docs/0.docs/4.server-entry.md +239 -0
  86. package/dist/docs/0.docs/5.cache.md +408 -0
  87. package/dist/docs/0.docs/6.storage.md +261 -0
  88. package/dist/docs/0.docs/7.assets.md +166 -0
  89. package/dist/docs/0.docs/8.configuration.md +256 -0
  90. package/dist/docs/0.docs/9.database.md +185 -0
  91. package/dist/docs/1.deploy/0.index/index.md +64 -0
  92. package/dist/docs/1.deploy/1.runtimes/0.node.md +63 -0
  93. package/dist/docs/1.deploy/1.runtimes/1.bun.md +15 -0
  94. package/dist/docs/1.deploy/1.runtimes/2.deno.md +19 -0
  95. package/dist/docs/1.deploy/2.providers/0.alwaysdata.md +50 -0
  96. package/dist/docs/1.deploy/2.providers/1.aws.md +47 -0
  97. package/dist/docs/1.deploy/2.providers/10.flightcontrol.md +67 -0
  98. package/dist/docs/1.deploy/2.providers/11.genezio.md +67 -0
  99. package/dist/docs/1.deploy/2.providers/12.github-pages.md +68 -0
  100. package/dist/docs/1.deploy/2.providers/13.gitlab-pages.md +37 -0
  101. package/dist/docs/1.deploy/2.providers/14.heroku.md +84 -0
  102. package/dist/docs/1.deploy/2.providers/15.iis.md +38 -0
  103. package/dist/docs/1.deploy/2.providers/16.koyeb.md +109 -0
  104. package/dist/docs/1.deploy/2.providers/17.netlify.md +47 -0
  105. package/dist/docs/1.deploy/2.providers/18.platform-sh.md +37 -0
  106. package/dist/docs/1.deploy/2.providers/19.render.md +37 -0
  107. package/dist/docs/1.deploy/2.providers/2.aws-amplify.md +81 -0
  108. package/dist/docs/1.deploy/2.providers/20.stormkit.md +24 -0
  109. package/dist/docs/1.deploy/2.providers/21.vercel.md +270 -0
  110. package/dist/docs/1.deploy/2.providers/22.zeabur.md +19 -0
  111. package/dist/docs/1.deploy/2.providers/23.zephyr.md +99 -0
  112. package/dist/docs/1.deploy/2.providers/24.zerops.md +102 -0
  113. package/dist/docs/1.deploy/2.providers/3.azure.md +72 -0
  114. package/dist/docs/1.deploy/2.providers/4.cleavr.md +33 -0
  115. package/dist/docs/1.deploy/2.providers/5.cloudflare.md +369 -0
  116. package/dist/docs/1.deploy/2.providers/6.deno-deploy.md +66 -0
  117. package/dist/docs/1.deploy/2.providers/7.digitalocean.md +46 -0
  118. package/dist/docs/1.deploy/2.providers/8.edgeone.md +20 -0
  119. package/dist/docs/1.deploy/2.providers/9.firebase.md +32 -0
  120. package/dist/docs/2.config/0.index/index.md +1221 -0
  121. package/dist/docs/3.examples/0.index/index.md +3 -0
  122. package/dist/docs/3.examples/1.api-routes.md +145 -0
  123. package/dist/docs/3.examples/10.hono.md +74 -0
  124. package/dist/docs/3.examples/11.import-alias.md +97 -0
  125. package/dist/docs/3.examples/12.middleware.md +91 -0
  126. package/dist/docs/3.examples/13.mono-jsx.md +68 -0
  127. package/dist/docs/3.examples/14.nano-jsx.md +70 -0
  128. package/dist/docs/3.examples/15.plugins.md +91 -0
  129. package/dist/docs/3.examples/16.renderer.md +113 -0
  130. package/dist/docs/3.examples/17.runtime-config.md +97 -0
  131. package/dist/docs/3.examples/18.server-fetch.md +87 -0
  132. package/dist/docs/3.examples/19.shiki.md +198 -0
  133. package/dist/docs/3.examples/2.auto-imports.md +92 -0
  134. package/dist/docs/3.examples/20.virtual-routes.md +74 -0
  135. package/dist/docs/3.examples/21.vite-nitro-plugin.md +79 -0
  136. package/dist/docs/3.examples/22.vite-rsc.md +1041 -0
  137. package/dist/docs/3.examples/23.vite-ssr-html.md +217 -0
  138. package/dist/docs/3.examples/24.vite-ssr-preact.md +247 -0
  139. package/dist/docs/3.examples/25.vite-ssr-react.md +226 -0
  140. package/dist/docs/3.examples/26.vite-ssr-solid.md +256 -0
  141. package/dist/docs/3.examples/27.vite-ssr-tsr-react.md +442 -0
  142. package/dist/docs/3.examples/28.vite-ssr-tss-react.md +444 -0
  143. package/dist/docs/3.examples/29.vite-ssr-vue-router.md +617 -0
  144. package/dist/docs/3.examples/3.cached-handler.md +81 -0
  145. package/dist/docs/3.examples/30.vite-trpc.md +335 -0
  146. package/dist/docs/3.examples/31.websocket.md +282 -0
  147. package/dist/docs/3.examples/4.custom-error-handler.md +98 -0
  148. package/dist/docs/3.examples/5.database.md +157 -0
  149. package/dist/docs/3.examples/6.elysia.md +70 -0
  150. package/dist/docs/3.examples/7.express.md +78 -0
  151. package/dist/docs/3.examples/8.fastify.md +79 -0
  152. package/dist/docs/3.examples/9.hello-world.md +68 -0
  153. package/dist/docs/README.md +86 -0
  154. package/dist/docs/index.md +121 -0
  155. package/dist/node_modules/@poppinss/dumper/build/formatters/html/main.js +8 -0
  156. package/dist/node_modules/@poppinss/dumper/package.json +1 -1
  157. package/dist/node_modules/@speed-highlight/core/dist/index.js +4 -4
  158. package/dist/node_modules/@speed-highlight/core/dist/terminal.js +2 -2
  159. package/dist/node_modules/@speed-highlight/core/package.json +1 -1
  160. package/dist/node_modules/cookie-es/dist/index.mjs +299 -250
  161. package/dist/node_modules/cookie-es/package.json +26 -23
  162. package/dist/node_modules/croner/dist/croner.js +1 -1
  163. package/dist/node_modules/croner/package.json +11 -1
  164. package/dist/node_modules/defu/dist/defu.mjs +2 -2
  165. package/dist/node_modules/defu/package.json +33 -28
  166. package/dist/node_modules/rendu/dist/_chunks/libs/cookie-es.mjs +151 -0
  167. package/dist/node_modules/rendu/dist/index.mjs +5 -112
  168. package/dist/node_modules/rendu/package.json +25 -24
  169. package/dist/node_modules/youch/build/helpers-B9BQYaS6.js +23 -0
  170. package/dist/node_modules/youch/build/index.js +204 -351
  171. package/dist/node_modules/youch/build/public/error_info/script.js +1 -1
  172. package/dist/node_modules/youch/build/public_dir-C5bujZKB.js +25 -0
  173. package/dist/node_modules/youch/build/src/templates/error_cause/main.js +44 -0
  174. package/dist/node_modules/youch/build/src/templates/error_info/main.js +72 -0
  175. package/dist/node_modules/youch/build/src/templates/error_metadata/main.js +65 -0
  176. package/dist/node_modules/youch/build/src/templates/error_stack/main.js +152 -0
  177. package/dist/node_modules/youch/build/src/templates/error_stack_source/main.js +46 -0
  178. package/dist/node_modules/youch/build/src/templates/header/main.js +24 -0
  179. package/dist/node_modules/youch/build/src/templates/layout/main.js +27 -0
  180. package/dist/node_modules/youch/package.json +35 -32
  181. package/dist/presets/_nitro/runtime/nitro-dev.mjs +12 -57
  182. package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +1 -0
  183. package/dist/presets/_nitro/runtime/service-worker.mjs +1 -2
  184. package/dist/presets/aws-lambda/runtime/_utils.mjs +6 -6
  185. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.mjs +3 -1
  186. package/dist/presets/azure/runtime/_utils.mjs +5 -5
  187. package/dist/presets/azure/runtime/azure-swa.mjs +5 -5
  188. package/dist/presets/bun/runtime/bun.mjs +9 -6
  189. package/dist/presets/cloudflare/runtime/_module-handler.mjs +1 -1
  190. package/dist/presets/cloudflare/runtime/cloudflare-durable.mjs +4 -4
  191. package/dist/presets/cloudflare/runtime/cloudflare-module.mjs +3 -3
  192. package/dist/presets/cloudflare/runtime/cloudflare-pages.mjs +2 -2
  193. package/dist/presets/cloudflare/runtime/plugin.dev.mjs +10 -21
  194. package/dist/presets/deno/runtime/deno-deploy.mjs +4 -4
  195. package/dist/presets/deno/runtime/deno-server.mjs +9 -6
  196. package/dist/presets/edgeone/runtime/edgeone.mjs +10 -0
  197. package/dist/presets/netlify/runtime/netlify-edge.mjs +2 -3
  198. package/dist/presets/netlify/runtime/netlify.mjs +1 -1
  199. package/dist/presets/node/runtime/node-cluster.mjs +5 -4
  200. package/dist/presets/node/runtime/node-middleware.mjs +1 -1
  201. package/dist/presets/node/runtime/node-server.mjs +8 -5
  202. package/dist/presets/stormkit/runtime/stormkit.mjs +1 -2
  203. package/dist/presets/vercel/runtime/cron-handler.mjs +25 -0
  204. package/dist/presets/vercel/runtime/queue-handler.mjs +21 -0
  205. package/dist/presets/vercel/runtime/vercel.node.mjs +3 -3
  206. package/dist/presets/vercel/runtime/vercel.web.mjs +3 -5
  207. package/dist/presets/winterjs/runtime/winterjs.mjs +10 -10
  208. package/dist/presets/zephyr/runtime/server.mjs +3 -0
  209. package/dist/runtime/internal/app.mjs +12 -11
  210. package/dist/runtime/internal/cache.d.mts +0 -4
  211. package/dist/runtime/internal/cache.mjs +32 -256
  212. package/dist/runtime/internal/context.d.mts +3 -1
  213. package/dist/runtime/internal/context.mjs +1 -9
  214. package/dist/runtime/internal/error/dev.d.mts +5 -4
  215. package/dist/runtime/internal/error/dev.mjs +47 -49
  216. package/dist/runtime/internal/error/hooks.d.mts +1 -1
  217. package/dist/runtime/internal/error/prod.d.mts +2 -5
  218. package/dist/runtime/internal/error/prod.mjs +19 -33
  219. package/dist/runtime/internal/error/utils.d.mts +4 -4
  220. package/dist/runtime/internal/meta.d.mts +1 -1
  221. package/dist/runtime/internal/plugin.d.mts +2 -2
  222. package/dist/runtime/internal/route-rules.d.mts +11 -4
  223. package/dist/runtime/internal/route-rules.mjs +15 -5
  224. package/dist/runtime/internal/routes/dev-tasks.d.mts +3 -2
  225. package/dist/runtime/internal/routes/dev-tasks.mjs +15 -10
  226. package/dist/runtime/internal/routes/openapi.mjs +2 -2
  227. package/dist/runtime/internal/routes/renderer-template.d.mts +1 -1
  228. package/dist/runtime/internal/routes/renderer-template.dev.d.mts +2 -1
  229. package/dist/runtime/internal/routes/scalar.mjs +3 -3
  230. package/dist/runtime/internal/routes/swagger.mjs +7 -4
  231. package/dist/runtime/internal/runtime-config.d.mts +1 -1
  232. package/dist/runtime/internal/runtime-config.mjs +2 -2
  233. package/dist/runtime/internal/static.mjs +5 -4
  234. package/dist/runtime/internal/task.d.mts +3 -1
  235. package/dist/runtime/internal/task.mjs +7 -7
  236. package/dist/runtime/internal/vite/dev-entry.mjs +6 -3
  237. package/dist/runtime/internal/vite/dev-worker.mjs +264 -0
  238. package/dist/runtime/meta.d.mts +1 -0
  239. package/dist/runtime/meta.mjs +2 -0
  240. package/dist/runtime/nitro.d.mts +2 -0
  241. package/dist/runtime/nitro.mjs +4 -2
  242. package/dist/runtime/virtual/error-handler.mjs +1 -1
  243. package/dist/runtime/virtual/renderer-template.mjs +1 -1
  244. package/dist/runtime/virtual/server-assets.d.mts +2 -1
  245. package/dist/runtime/virtual/tracing.d.mts +5 -0
  246. package/dist/runtime/virtual/tracing.mjs +1 -0
  247. package/dist/runtime/vite.d.mts +1 -1
  248. package/dist/types/index.d.mts +215 -195
  249. package/dist/types/index.mjs +1 -11
  250. package/dist/vite.d.mts +3 -8
  251. package/dist/vite.mjs +285 -253
  252. package/lib/tsconfig.json +3 -5
  253. package/package.json +97 -80
  254. package/dist/_libs/confbox.mjs +0 -2509
  255. package/dist/_libs/nypm+giget+tinyexec.mjs +0 -3603
  256. package/dist/_libs/rc9+c12+dotenv.mjs +0 -972
  257. package/dist/node_modules/hookable/dist/index.mjs +0 -266
  258. package/dist/node_modules/hookable/package.json +0 -52
  259. package/dist/node_modules/youch/build/chunk-4L7RY2JA.js +0 -42
  260. package/dist/node_modules/youch/build/chunk-7QV3D5YX.js +0 -83
  261. package/dist/node_modules/youch/build/chunk-AUGPHE32.js +0 -39
  262. package/dist/node_modules/youch/build/chunk-CM7DWJNZ.js +0 -44
  263. package/dist/node_modules/youch/build/chunk-EJH674NB.js +0 -223
  264. package/dist/node_modules/youch/build/chunk-OIJ3WD7L.js +0 -81
  265. package/dist/node_modules/youch/build/chunk-P36L72PL.js +0 -87
  266. package/dist/node_modules/youch/build/chunk-PE3GG3TN.js +0 -65
  267. package/dist/node_modules/youch/build/chunk-X53OIOJH.js +0 -70
  268. package/dist/presets/_nitro/runtime/nitro-dev.d.mts +0 -2
  269. package/dist/presets/_nitro/runtime/nitro-prerenderer.d.mts +0 -3
  270. package/dist/presets/_nitro/runtime/service-worker.d.mts +0 -2
  271. package/dist/presets/aws-amplify/runtime/aws-amplify.d.mts +0 -2
  272. package/dist/presets/aws-lambda/runtime/_utils.d.mts +0 -8
  273. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.d.mts +0 -2
  274. package/dist/presets/aws-lambda/runtime/aws-lambda.d.mts +0 -3
  275. package/dist/presets/azure/runtime/_utils.d.mts +0 -2
  276. package/dist/presets/azure/runtime/azure-swa.d.mts +0 -5
  277. package/dist/presets/bun/runtime/bun.d.mts +0 -3
  278. package/dist/presets/cloudflare/runtime/_module-handler.d.mts +0 -16
  279. package/dist/presets/cloudflare/runtime/cloudflare-durable.d.mts +0 -11
  280. package/dist/presets/cloudflare/runtime/cloudflare-module.d.mts +0 -3
  281. package/dist/presets/cloudflare/runtime/cloudflare-pages.d.mts +0 -20
  282. package/dist/presets/cloudflare/runtime/plugin.dev.d.mts +0 -3
  283. package/dist/presets/deno/runtime/deno-deploy.d.mts +0 -5
  284. package/dist/presets/deno/runtime/deno-server.d.mts +0 -3
  285. package/dist/presets/netlify/runtime/netlify-edge.d.mts +0 -3
  286. package/dist/presets/netlify/runtime/netlify.d.mts +0 -4
  287. package/dist/presets/node/runtime/node-cluster.d.mts +0 -3
  288. package/dist/presets/node/runtime/node-middleware.d.mts +0 -3
  289. package/dist/presets/node/runtime/node-server.d.mts +0 -3
  290. package/dist/presets/standard/runtime/server.d.mts +0 -3
  291. package/dist/presets/stormkit/runtime/stormkit.d.mts +0 -21
  292. package/dist/presets/vercel/runtime/isr.d.mts +0 -2
  293. package/dist/presets/vercel/runtime/vercel.node.d.mts +0 -3
  294. package/dist/presets/vercel/runtime/vercel.web.d.mts +0 -8
  295. package/dist/presets/winterjs/runtime/winterjs.d.mts +0 -2
  296. package/dist/presets/zeabur/runtime/zeabur.d.mts +0 -3
  297. package/dist/runtime/internal/vite/node-runner.mjs +0 -359
package/dist/_presets.mjs CHANGED
@@ -1,19 +1,17 @@
1
- import "./_common.mjs";
2
- import { $ as resolveModulePath, G as findFile, I as prettyPath$1, J as readGitConfig, K as findNearestFile, N as glob, R as writeFile$2, U as p, V as a, X as h, Y as readPackageJSON, at as join$1, ct as resolve$1, nt as dirname$1, st as relative$1, z as K } from "./_build/common.mjs";
3
- import { i as gr, n as Q } from "./_libs/confbox.mjs";
1
+ import { B as f, F as prettyPath$1, G as findNearestFile, H as v, J as readPackageJSON, L as writeFile$2, M as glob, R, W as findFile, Y as i, Z as a, at as dirname$1, ct as join$1, dt as resolve$1, et as r, nt as resolveModulePath, q as readGitConfig, ut as relative$1 } from "./_build/common.mjs";
4
2
  import { r as resolveCompatibilityDatesFromEnv, t as formatCompatibilityDate } from "./_libs/compatx.mjs";
3
+ import { t as Router } from "./_chunks/nitro3.mjs";
4
+ import { t as importDep } from "./_chunks/utils.mjs";
5
5
  import { builtinModules } from "node:module";
6
- import consola$1 from "consola";
6
+ import consola from "consola";
7
+ import { presetsDir, runtimeDir, version } from "nitro/meta";
7
8
  import { existsSync, promises } from "node:fs";
8
9
  import fsp, { readFile, writeFile } from "node:fs/promises";
9
10
  import { dirname, extname, relative, resolve } from "node:path";
10
11
  import { defu } from "defu";
11
12
  import { hasProtocol, joinURL, withLeadingSlash, withTrailingSlash, withoutLeadingSlash } from "ufo";
12
- import { presetsDir, runtimeDir, version } from "nitro/meta";
13
13
  import { colors } from "consola/utils";
14
14
  import { kebabCase } from "scule";
15
-
16
- //#region src/presets/_utils/preset.ts
17
15
  function defineNitroPreset(preset, meta) {
18
16
  if (typeof preset !== "function" && preset.entry && preset.entry.startsWith(".")) preset.entry = resolve(presetsDir, preset.entry);
19
17
  return {
@@ -21,10 +19,7 @@ function defineNitroPreset(preset, meta) {
21
19
  _meta: meta
22
20
  };
23
21
  }
24
-
25
- //#endregion
26
- //#region src/presets/_nitro/base-worker.ts
27
- const baseWorker = defineNitroPreset({
22
+ var base_worker_default = [defineNitroPreset({
28
23
  entry: null,
29
24
  node: false,
30
25
  minify: true,
@@ -34,12 +29,8 @@ const baseWorker = defineNitroPreset({
34
29
  generatedCode: { symbols: true }
35
30
  } },
36
31
  inlineDynamicImports: true
37
- }, { name: "base-worker" });
38
- var base_worker_default = [baseWorker];
39
-
40
- //#endregion
41
- //#region src/presets/_nitro/nitro-dev.ts
42
- const nitroDev = defineNitroPreset({
32
+ }, { name: "base-worker" })];
33
+ var nitro_dev_default = [defineNitroPreset({
43
34
  entry: "./_nitro/runtime/nitro-dev",
44
35
  output: {
45
36
  dir: "{{ buildDir }}/dev",
@@ -58,84 +49,63 @@ const nitroDev = defineNitroPreset({
58
49
  }, {
59
50
  name: "nitro-dev",
60
51
  dev: true
61
- });
62
- var nitro_dev_default = [nitroDev];
63
-
64
- //#endregion
65
- //#region src/presets/_nitro/nitro-prerender.ts
66
- const nitroPrerender = defineNitroPreset({
52
+ })];
53
+ var nitro_prerender_default = [defineNitroPreset({
67
54
  entry: "./_nitro/runtime/nitro-prerenderer",
68
55
  serveStatic: true,
69
56
  output: { serverDir: "{{ buildDir }}/prerender" },
70
57
  externals: { noTrace: true }
71
- }, { name: "nitro-prerender" });
72
- var nitro_prerender_default = [nitroPrerender];
73
-
74
- //#endregion
75
- //#region src/presets/_nitro/preset.ts
76
- var preset_default$26 = [
58
+ }, { name: "nitro-prerender" })];
59
+ var preset_default$28 = [
77
60
  ...base_worker_default,
78
61
  ...nitro_dev_default,
79
62
  ...nitro_prerender_default
80
63
  ];
81
-
82
- //#endregion
83
- //#region src/presets/_static/preset.ts
84
- const _static = defineNitroPreset({
85
- static: true,
86
- output: {
87
- dir: "{{ rootDir }}/.output",
88
- publicDir: "{{ output.dir }}/public"
89
- },
90
- prerender: { crawlLinks: true },
91
- commands: { preview: "npx serve ./public" }
92
- }, {
93
- name: "static",
94
- static: true
95
- });
96
- const githubPages = defineNitroPreset({
97
- extends: "static",
98
- commands: { deploy: "npx gh-pages --dotfiles -d ./public" },
99
- prerender: { routes: ["/", "/404.html"] },
100
- hooks: { async compiled(nitro) {
101
- await fsp.writeFile(join$1(nitro.options.output.publicDir, ".nojekyll"), "");
102
- } }
103
- }, {
104
- name: "github-pages",
105
- static: true
106
- });
107
- const gitlabPages = defineNitroPreset({
108
- extends: "static",
109
- prerender: { routes: ["/", "/404.html"] }
110
- }, {
111
- name: "gitlab-pages",
112
- static: true
113
- });
114
- var preset_default$25 = [
115
- _static,
116
- githubPages,
117
- gitlabPages
64
+ var preset_default$27 = [
65
+ defineNitroPreset({
66
+ static: true,
67
+ output: {
68
+ dir: "{{ rootDir }}/.output",
69
+ publicDir: "{{ output.dir }}/public"
70
+ },
71
+ prerender: { crawlLinks: true },
72
+ commands: { preview: "npx serve ./public" }
73
+ }, {
74
+ name: "static",
75
+ static: true
76
+ }),
77
+ defineNitroPreset({
78
+ extends: "static",
79
+ commands: { deploy: "npx gh-pages --dotfiles -d ./public" },
80
+ prerender: { routes: ["/", "/404.html"] },
81
+ hooks: { async compiled(nitro) {
82
+ await fsp.writeFile(join$1(nitro.options.output.publicDir, ".nojekyll"), "");
83
+ } }
84
+ }, {
85
+ name: "github-pages",
86
+ static: true
87
+ }),
88
+ defineNitroPreset({
89
+ extends: "static",
90
+ prerender: { routes: ["/", "/404.html"] }
91
+ }, {
92
+ name: "gitlab-pages",
93
+ static: true
94
+ })
118
95
  ];
119
-
120
- //#endregion
121
- //#region src/presets/alwaysdata/preset.ts
122
- const alwaysdata = defineNitroPreset({
96
+ var preset_default$26 = [defineNitroPreset({
123
97
  extends: "node-server",
124
98
  serveStatic: true,
125
99
  commands: { deploy: "rsync -rRt --info=progress2 ./ [account]@ssh-[account].alwaysdata.net:www/my-app" }
126
- }, { name: "alwaysdata" });
127
- var preset_default$24 = [alwaysdata];
128
-
129
- //#endregion
130
- //#region src/presets/aws-amplify/utils.ts
100
+ }, { name: "alwaysdata" })];
131
101
  async function writeAmplifyFiles(nitro) {
132
102
  const outDir = nitro.options.output.dir;
133
103
  const routes = [];
134
104
  let hasWildcardPublicAsset = false;
135
105
  if (nitro.options.awsAmplify?.imageOptimization && !nitro.options.static) {
136
- const { path: path$1, cacheControl } = nitro.options.awsAmplify?.imageOptimization || {};
137
- if (path$1) routes.push({
138
- path: path$1,
106
+ const { path, cacheControl } = nitro.options.awsAmplify?.imageOptimization || {};
107
+ if (path) routes.push({
108
+ path,
139
109
  target: {
140
110
  kind: "ImageOptimization",
141
111
  cacheControl
@@ -188,10 +158,7 @@ async function writeAmplifyFiles(nitro) {
188
158
  await writeFile(resolve(outDir, "deploy-manifest.json"), JSON.stringify(deployManifest, null, 2));
189
159
  if (!nitro.options.static) await writeFile(resolve(outDir, "compute/default/server.js"), `import("./index.mjs")`);
190
160
  }
191
-
192
- //#endregion
193
- //#region src/presets/aws-amplify/preset.ts
194
- const awsAmplify = defineNitroPreset({
161
+ var preset_default$25 = [defineNitroPreset({
195
162
  entry: "./aws-amplify/runtime/aws-amplify",
196
163
  manifest: { deploymentId: process.env.AWS_JOB_ID },
197
164
  serveStatic: true,
@@ -207,34 +174,23 @@ const awsAmplify = defineNitroPreset({
207
174
  }, {
208
175
  name: "aws-amplify",
209
176
  stdName: "aws_amplify"
210
- });
211
- var preset_default$23 = [awsAmplify];
212
-
213
- //#endregion
214
- //#region src/presets/aws-lambda/preset.ts
215
- const awsLambda = defineNitroPreset({
177
+ })];
178
+ var preset_default$24 = [defineNitroPreset({
216
179
  entry: "./aws-lambda/runtime/aws-lambda",
217
180
  awsLambda: { streaming: false },
218
181
  hooks: { "rollup:before": (nitro, rollupConfig) => {
219
182
  if (nitro.options.awsLambda?.streaming) rollupConfig.input += "-streaming";
220
183
  } }
221
- }, { name: "aws-lambda" });
222
- var preset_default$22 = [awsLambda];
223
-
224
- //#endregion
225
- //#region src/presets/_utils/fs.ts
226
- function prettyPath(p$1, highlight = true) {
227
- p$1 = relative$1(process.cwd(), p$1);
228
- return highlight ? colors.cyan(p$1) : p$1;
184
+ }, { name: "aws-lambda" })];
185
+ function prettyPath(p, highlight = true) {
186
+ p = relative$1(process.cwd(), p);
187
+ return highlight ? colors.cyan(p) : p;
229
188
  }
230
189
  async function writeFile$1(file, contents, log = false) {
231
190
  await fsp.mkdir(dirname$1(file), { recursive: true });
232
191
  await fsp.writeFile(file, contents, typeof contents === "string" ? "utf8" : void 0);
233
- if (log) consola$1.info("Generated", prettyPath(file));
192
+ if (log) consola.info("Generated", prettyPath(file));
234
193
  }
235
-
236
- //#endregion
237
- //#region src/presets/azure/utils.ts
238
194
  async function writeSWARoutes(nitro) {
239
195
  const host = { version: "2.0" };
240
196
  const supportedNodeVersions = new Set(["20", "22"]);
@@ -321,10 +277,7 @@ async function writeSWARoutes(nitro) {
321
277
  await writeFile$1(resolve$1(nitro.options.output.publicDir, relativePrefix ? `${relativePrefix}/index.html` : "index.html"), "");
322
278
  }
323
279
  }
324
-
325
- //#endregion
326
- //#region src/presets/azure/preset.ts
327
- const azureSWA = defineNitroPreset({
280
+ var preset_default$23 = [defineNitroPreset({
328
281
  entry: "./azure/runtime/azure-swa",
329
282
  output: {
330
283
  serverDir: "{{ output.dir }}/server/functions",
@@ -337,37 +290,20 @@ const azureSWA = defineNitroPreset({
337
290
  }, {
338
291
  name: "azure-swa",
339
292
  stdName: "azure_static"
340
- });
341
- var preset_default$21 = [azureSWA];
342
-
343
- //#endregion
344
- //#region src/presets/bun/preset.ts
345
- const bun = defineNitroPreset({
293
+ })];
294
+ var preset_default$22 = [defineNitroPreset({
346
295
  entry: "./bun/runtime/bun",
347
296
  serveStatic: true,
348
- exportConditions: [
349
- "bun",
350
- "node",
351
- "import",
352
- "default"
353
- ],
297
+ exportConditions: ["bun"],
354
298
  commands: { preview: "bun run ./server/index.mjs" }
355
- }, { name: "bun" });
356
- var preset_default$20 = [bun];
357
-
358
- //#endregion
359
- //#region src/presets/cleavr/preset.ts
360
- const cleavr = defineNitroPreset({
299
+ }, { name: "bun" })];
300
+ var preset_default$21 = [defineNitroPreset({
361
301
  extends: "node-server",
362
302
  serveStatic: true
363
303
  }, {
364
304
  name: "cleavr",
365
305
  stdName: "cleavr"
366
- });
367
- var preset_default$19 = [cleavr];
368
-
369
- //#endregion
370
- //#region src/presets/cloudflare/unenv/node-compat.ts
306
+ })];
371
307
  const builtnNodeModules$1 = [
372
308
  "node:_http_agent",
373
309
  "node:_http_client",
@@ -419,9 +355,6 @@ const builtnNodeModules$1 = [
419
355
  "node:util/types",
420
356
  "node:zlib"
421
357
  ];
422
-
423
- //#endregion
424
- //#region src/presets/cloudflare/unenv/preset.ts
425
358
  const unenvCfNodeCompat = {
426
359
  meta: { name: "nitro:cloudflare-node-compat" },
427
360
  external: builtnNodeModules$1,
@@ -443,9 +376,6 @@ const unenvCfExternals = {
443
376
  "cloudflare:workflows"
444
377
  ]
445
378
  };
446
-
447
- //#endregion
448
- //#region src/presets/cloudflare/utils.ts
449
379
  async function writeCFRoutes(nitro) {
450
380
  const _cfPagesConfig = nitro.options.cloudflare?.pages || {};
451
381
  const routes = {
@@ -472,22 +402,22 @@ async function writeCFRoutes(nitro) {
472
402
  "_worker.js",
473
403
  "_worker.js.map",
474
404
  "nitro.json",
475
- ...routes.exclude.map((path$1) => withoutLeadingSlash(path$1.replace(/\/\*$/, "/**")))
405
+ ...routes.exclude.map((path) => withoutLeadingSlash(path.replace(/\/\*$/, "/**")))
476
406
  ]
477
407
  });
478
408
  routes.exclude.push(...publicAssetFiles.map((i) => withLeadingSlash(i).replace(/\/index\.html$/, "").replace(/\.html$/, "") || "/").sort(comparePaths));
479
409
  routes.exclude.splice(100 - routes.include.length);
480
410
  await writeRoutes();
481
411
  }
482
- function comparePaths(a$1, b) {
483
- return a$1.split("/").length - b.split("/").length || a$1.localeCompare(b);
412
+ function comparePaths(a, b) {
413
+ return a.split("/").length - b.split("/").length || a.localeCompare(b);
484
414
  }
485
415
  async function writeCFHeaders(nitro, outdir) {
486
416
  const headersPath = join$1(outdir === "public" ? nitro.options.output.publicDir : nitro.options.output.dir, "_headers");
487
417
  const contents = [];
488
- const rules = Object.entries(nitro.options.routeRules).sort((a$1, b) => b[0].split(/\/(?!\*)/).length - a$1[0].split(/\/(?!\*)/).length);
489
- for (const [path$1, routeRules] of rules.filter(([_, routeRules$1]) => routeRules$1.headers)) {
490
- const headers = [joinURL(nitro.options.baseURL, path$1.replace("/**", "/*")), ...Object.entries({ ...routeRules.headers }).map(([header, value]) => ` ${header}: ${value}`)].join("\n");
418
+ const rules = Object.entries(nitro.options.routeRules).sort((a, b) => b[0].split(/\/(?!\*)/).length - a[0].split(/\/(?!\*)/).length);
419
+ for (const [path, routeRules] of rules.filter(([_, routeRules]) => routeRules.headers)) {
420
+ const headers = [joinURL(nitro.options.baseURL, path.replace("/**", "/*")), ...Object.entries({ ...routeRules.headers }).map(([header, value]) => ` ${header}: ${value}`)].join("\n");
491
421
  contents.push(headers);
492
422
  }
493
423
  if (existsSync(headersPath)) {
@@ -504,8 +434,8 @@ async function writeCFHeaders(nitro, outdir) {
504
434
  async function writeCFPagesRedirects(nitro) {
505
435
  const redirectsPath = join$1(nitro.options.output.dir, "_redirects");
506
436
  const contents = [existsSync(join$1(nitro.options.output.publicDir, "404.html")) ? `${joinURL(nitro.options.baseURL, "/*")} ${joinURL(nitro.options.baseURL, "/404.html")} 404` : ""];
507
- const rules = Object.entries(nitro.options.routeRules).sort((a$1, b) => a$1[0].split(/\/(?!\*)/).length - b[0].split(/\/(?!\*)/).length);
508
- for (const [key, routeRules] of rules.filter(([_, routeRules$1]) => routeRules$1.redirect)) {
437
+ const rules = Object.entries(nitro.options.routeRules).sort((a, b) => a[0].split(/\/(?!\*)/).length - b[0].split(/\/(?!\*)/).length);
438
+ for (const [key, routeRules] of rules.filter(([_, routeRules]) => routeRules.redirect)) {
509
439
  const code = routeRules.redirect.status;
510
440
  const from = joinURL(nitro.options.baseURL, key.replace("/**", "/*"));
511
441
  const to = hasProtocol(routeRules.redirect.to, { acceptRelative: true }) ? routeRules.redirect.to : joinURL(nitro.options.baseURL, routeRules.redirect.to);
@@ -526,12 +456,16 @@ async function enableNodeCompat(nitro) {
526
456
  nitro.options.cloudflare ??= {};
527
457
  nitro.options.cloudflare.deployConfig ??= true;
528
458
  nitro.options.cloudflare.nodeCompat ??= true;
529
- if (nitro.options.cloudflare.nodeCompat) nitro.options.unenv.push(unenvCfNodeCompat);
459
+ if (nitro.options.cloudflare.nodeCompat) {
460
+ nitro.options.rolldownConfig ??= {};
461
+ nitro.options.rolldownConfig.platform ??= "node";
462
+ nitro.options.unenv.push(unenvCfNodeCompat);
463
+ }
530
464
  }
531
465
  const extensionParsers = {
532
- ".json": h,
533
- ".jsonc": h,
534
- ".toml": Q
466
+ ".json": r,
467
+ ".jsonc": r,
468
+ ".toml": i
535
469
  };
536
470
  async function readWranglerConfig(nitro) {
537
471
  const configPath = await findNearestFile([
@@ -581,6 +515,12 @@ async function writeWranglerConfig(nitro, cfTarget) {
581
515
  globs: ["**/*.mjs", "**/*.js"]
582
516
  });
583
517
  }
518
+ if (nitro.options.experimental.tasks && Object.keys(nitro.options.scheduledTasks || {}).length > 0 && cfTarget !== "pages") {
519
+ const schedules = Object.keys(nitro.options.scheduledTasks);
520
+ wranglerConfig.triggers = defu(wranglerConfig.triggers, { crons: [] });
521
+ const existingCrons = new Set(wranglerConfig.triggers.crons);
522
+ for (const schedule of schedules) if (!existingCrons.has(schedule)) wranglerConfig.triggers.crons.push(schedule);
523
+ }
584
524
  await writeFile$1(wranglerConfigPath, JSON.stringify(wranglerConfig, null, 2), true);
585
525
  const configPath = join$1(nitro.options.rootDir, ".wrangler/deploy/config.json");
586
526
  await writeFile$1(configPath, JSON.stringify({ configPath: relative(dirname(configPath), wranglerConfigPath) }), true);
@@ -591,9 +531,6 @@ async function generateWorkerName(nitro) {
591
531
  const subpath = relative(nitro.options.workspaceDir, nitro.options.rootDir);
592
532
  return `${gitRepo || pkgName}/${subpath}`.toLowerCase().replace(/[^a-zA-Z0-9-]/g, "-").replace(/-$/, "");
593
533
  }
594
-
595
- //#endregion
596
- //#region src/presets/cloudflare/dev.ts
597
534
  async function cloudflareDevModule(nitro) {
598
535
  if (!nitro.options.dev) return;
599
536
  nitro.options.unenv.push({
@@ -635,9 +572,6 @@ async function cloudflareDevModule(nitro) {
635
572
  extensions: [".mjs", ".ts"]
636
573
  }));
637
574
  }
638
-
639
- //#endregion
640
- //#region src/presets/cloudflare/entry-exports.ts
641
575
  const RESOLVE_EXTENSIONS = [
642
576
  ".ts",
643
577
  ".js",
@@ -665,13 +599,27 @@ function resolveExportsEntry(nitro) {
665
599
  else if (entry && !nitro.options.cloudflare?.exports) nitro.logger.info(`Detected \`${prettyPath$1(entry)}\` as Cloudflare entrypoint.`);
666
600
  return entry;
667
601
  }
668
-
669
- //#endregion
670
- //#region src/presets/cloudflare/preset.ts
602
+ function guardCreateRequire() {
603
+ return {
604
+ name: "nitro:cloudflare-guard-createRequire",
605
+ generateBundle(_options, bundle) {
606
+ for (const chunk of Object.values(bundle)) if (chunk.type === "chunk" && chunk.code?.includes("createRequire(import.meta.url)")) chunk.code = chunk.code.replace(/createRequire\(import\.meta\.url\)/g, "createRequire(import.meta.url || \"file:///\")");
607
+ }
608
+ };
609
+ }
610
+ const BARE_NODE_IMPORT_RE = /^import\s*['"]node:[^'"]+['"];?\s*$/gm;
611
+ function stripBareNodeImports() {
612
+ return {
613
+ name: "nitro:cloudflare-strip-bare-node-imports",
614
+ generateBundle(_options, bundle) {
615
+ for (const chunk of Object.values(bundle)) if (chunk.type === "chunk" && chunk.code.includes("node:")) chunk.code = chunk.code.replace(BARE_NODE_IMPORT_RE, "");
616
+ }
617
+ };
618
+ }
671
619
  const cloudflarePages = defineNitroPreset({
672
620
  extends: "base-worker",
673
621
  entry: "./cloudflare/runtime/cloudflare-pages",
674
- exportConditions: ["workerd"],
622
+ exportConditions: ["workerd", "worker"],
675
623
  minify: false,
676
624
  commands: {
677
625
  preview: "npx wrangler --cwd ./ pages dev",
@@ -687,11 +635,14 @@ const cloudflarePages = defineNitroPreset({
687
635
  lazy: false,
688
636
  esmImport: true
689
637
  },
690
- rollupConfig: { output: {
691
- entryFileNames: "index.js",
692
- format: "esm",
693
- inlineDynamicImports: false
694
- } },
638
+ rollupConfig: {
639
+ output: {
640
+ entryFileNames: "index.js",
641
+ format: "esm",
642
+ inlineDynamicImports: false
643
+ },
644
+ plugins: [guardCreateRequire(), stripBareNodeImports()]
645
+ },
695
646
  hooks: {
696
647
  "build:before": async (nitro) => {
697
648
  nitro.options.unenv.push(unenvCfExternals);
@@ -741,59 +692,57 @@ const cloudflareDev = defineNitroPreset({
741
692
  compatibilityDate: "2025-07-13",
742
693
  dev: true
743
694
  });
744
- const cloudflareModule = defineNitroPreset({
745
- extends: "base-worker",
746
- entry: "./cloudflare/runtime/cloudflare-module",
747
- output: { publicDir: "{{ output.dir }}/public/{{ baseURL }}" },
748
- exportConditions: ["workerd"],
749
- minify: false,
750
- commands: {
751
- preview: "npx wrangler --cwd ./ dev",
752
- deploy: "npx wrangler --cwd ./ deploy"
753
- },
754
- rollupConfig: { output: {
755
- format: "esm",
756
- exports: "named",
757
- inlineDynamicImports: false
758
- } },
759
- wasm: {
760
- lazy: false,
761
- esmImport: true
762
- },
763
- hooks: {
764
- "build:before": async (nitro) => {
765
- nitro.options.unenv.push(unenvCfExternals);
766
- await enableNodeCompat(nitro);
767
- await setupEntryExports(nitro);
768
- },
769
- async compiled(nitro) {
770
- await writeWranglerConfig(nitro, "module");
771
- await writeCFHeaders(nitro, "public");
772
- await writeFile$1(resolve$1(nitro.options.output.dir, "package.json"), JSON.stringify({
773
- private: true,
774
- main: "./server/index.mjs"
775
- }, null, 2));
776
- await writeFile$1(resolve$1(nitro.options.output.dir, "package-lock.json"), JSON.stringify({ lockfileVersion: 1 }, null, 2));
777
- }
778
- }
779
- }, {
780
- name: "cloudflare-module",
781
- stdName: "cloudflare_workers"
782
- });
783
- const cloudflareDurable = defineNitroPreset({
784
- extends: "cloudflare-module",
785
- entry: "./cloudflare/runtime/cloudflare-durable"
786
- }, { name: "cloudflare-durable" });
787
- var preset_default$18 = [
695
+ var preset_default$20 = [
788
696
  cloudflarePages,
789
697
  cloudflarePagesStatic,
790
- cloudflareModule,
791
- cloudflareDurable,
698
+ defineNitroPreset({
699
+ extends: "base-worker",
700
+ entry: "./cloudflare/runtime/cloudflare-module",
701
+ output: { publicDir: "{{ output.dir }}/public/{{ baseURL }}" },
702
+ exportConditions: ["workerd", "worker"],
703
+ minify: false,
704
+ commands: {
705
+ preview: "npx wrangler --cwd ./ dev",
706
+ deploy: "npx wrangler --cwd ./ deploy"
707
+ },
708
+ rollupConfig: {
709
+ output: {
710
+ format: "esm",
711
+ exports: "named",
712
+ inlineDynamicImports: false
713
+ },
714
+ plugins: [guardCreateRequire(), stripBareNodeImports()]
715
+ },
716
+ wasm: {
717
+ lazy: false,
718
+ esmImport: true
719
+ },
720
+ hooks: {
721
+ "build:before": async (nitro) => {
722
+ nitro.options.unenv.push(unenvCfExternals);
723
+ await enableNodeCompat(nitro);
724
+ await setupEntryExports(nitro);
725
+ },
726
+ async compiled(nitro) {
727
+ await writeWranglerConfig(nitro, "module");
728
+ await writeCFHeaders(nitro, "public");
729
+ await writeFile$1(resolve$1(nitro.options.output.dir, "package.json"), JSON.stringify({
730
+ private: true,
731
+ main: "./server/index.mjs"
732
+ }, null, 2));
733
+ await writeFile$1(resolve$1(nitro.options.output.dir, "package-lock.json"), JSON.stringify({ lockfileVersion: 1 }, null, 2));
734
+ }
735
+ }
736
+ }, {
737
+ name: "cloudflare-module",
738
+ stdName: "cloudflare_workers"
739
+ }),
740
+ defineNitroPreset({
741
+ extends: "cloudflare-module",
742
+ entry: "./cloudflare/runtime/cloudflare-durable"
743
+ }, { name: "cloudflare-durable" }),
792
744
  cloudflareDev
793
745
  ];
794
-
795
- //#endregion
796
- //#region src/presets/deno/unenv/node-compat.ts
797
746
  const builtnNodeModules = [
798
747
  "node:_http_agent",
799
748
  "node:_http_common",
@@ -863,9 +812,6 @@ const builtnNodeModules = [
863
812
  "node:worker_threads",
864
813
  "node:zlib"
865
814
  ];
866
-
867
- //#endregion
868
- //#region src/presets/deno/unenv/preset.ts
869
815
  const unenvDeno = {
870
816
  meta: { name: "nitro:deno" },
871
817
  external: builtnNodeModules.map((m) => `node:${m}`),
@@ -878,10 +824,7 @@ const unenvDeno = {
878
824
  Buffer: ["node:buffer", "Buffer"]
879
825
  }
880
826
  };
881
-
882
- //#endregion
883
- //#region src/presets/deno/preset.ts
884
- const denoDeploy = defineNitroPreset({
827
+ var preset_default$19 = [defineNitroPreset({
885
828
  entry: "./deno/runtime/deno-deploy",
886
829
  manifest: { deploymentId: process.env.DENO_DEPLOYMENT_ID },
887
830
  exportConditions: ["deno"],
@@ -889,7 +832,7 @@ const denoDeploy = defineNitroPreset({
889
832
  serveStatic: "deno",
890
833
  commands: {
891
834
  preview: "",
892
- deploy: "cd ./ && deployctl deploy --project=<project_name> server/index.ts"
835
+ deploy: "cd ./ && deno run -A jsr:@deno/deployctl deploy server/index.ts"
893
836
  },
894
837
  unenv: unenvDeno,
895
838
  rollupConfig: {
@@ -901,8 +844,7 @@ const denoDeploy = defineNitroPreset({
901
844
  format: "esm"
902
845
  }
903
846
  }
904
- }, { name: "deno-deploy" });
905
- const denoServer = defineNitroPreset({
847
+ }, { name: "deno-deploy" }), defineNitroPreset({
906
848
  entry: "./deno/runtime/deno-server",
907
849
  serveStatic: true,
908
850
  exportConditions: ["deno"],
@@ -917,25 +859,88 @@ const denoServer = defineNitroPreset({
917
859
  }, {
918
860
  aliases: ["deno"],
919
861
  name: "deno-server"
920
- });
921
- var preset_default$17 = [denoDeploy, denoServer];
922
-
923
- //#endregion
924
- //#region src/presets/digitalocean/preset.ts
925
- const digitalOcean = defineNitroPreset({
862
+ })];
863
+ var preset_default$18 = [defineNitroPreset({
926
864
  extends: "node-server",
927
865
  serveStatic: true
928
- }, { name: "digital-ocean" });
929
- var preset_default$16 = [digitalOcean];
930
-
931
- //#endregion
932
- //#region src/presets/firebase/preset.ts
933
- const firebaseAppHosting = defineNitroPreset({
866
+ }, { name: "digital-ocean" })];
867
+ function routeToRegex(route, baseURL = "/") {
868
+ return "^" + joinURL(baseURL, route).replace(/\*\*|\*|:[^/]+/g, (m) => {
869
+ if (m === "**") return "(.*)";
870
+ return "([^/]+)";
871
+ }) + "$";
872
+ }
873
+ async function writeEdgeOneConfig(nitro) {
874
+ nitro.routing.sync();
875
+ const baseURL = nitro.options.baseURL || "/";
876
+ const config = {
877
+ version: 3,
878
+ routes: []
879
+ };
880
+ const rules = Object.entries(nitro.options.routeRules || {}).sort((a, b) => a[0].split(/\/(?!\*)/).length - b[0].split(/\/(?!\*)/).length);
881
+ config.routes.push(...rules.filter(([_, routeRules]) => routeRules.redirect || routeRules.headers).map(([path, routeRules]) => {
882
+ const route = { src: routeToRegex(path, baseURL) };
883
+ if (routeRules.redirect) {
884
+ route.status = routeRules.redirect.status || 302;
885
+ route.headers = { Location: joinURL(baseURL, routeRules.redirect.to.replace("/**", "/$1")) };
886
+ }
887
+ if (routeRules.headers) {
888
+ route.headers = {
889
+ ...route.headers,
890
+ ...routeRules.headers
891
+ };
892
+ if (!routeRules.redirect) route.continue = true;
893
+ }
894
+ return route;
895
+ }));
896
+ config.routes.push({ handle: "filesystem" });
897
+ const apiRoutes = nitro.routing.routes.routes.filter((route) => {
898
+ const handler = Array.isArray(route.data) ? route.data[0] : route.data;
899
+ return handler && !handler.middleware && route.route !== "/**";
900
+ }).map((route) => ({
901
+ path: route.route,
902
+ method: route.method || "*"
903
+ }));
904
+ for (const route of apiRoutes) {
905
+ const sourceRoute = { src: routeToRegex(route.path, baseURL) };
906
+ if (route.method !== "*") sourceRoute.methods = [route.method.toUpperCase()];
907
+ config.routes.push(sourceRoute);
908
+ }
909
+ const ssrRoutes = [...new Set([...nitro.options.ssrRoutes || [], ...[...nitro.scannedHandlers, ...nitro.options.handlers].filter((h) => !h.middleware && h.route && h.route !== "/**").map((h) => h.route)])];
910
+ for (const route of ssrRoutes) {
911
+ if (apiRoutes.some((r) => r.path === route)) continue;
912
+ config.routes.push({ src: routeToRegex(route, baseURL) });
913
+ }
914
+ config.routes.push({ src: "^" + joinURL(baseURL, "/(.*)") + "$" });
915
+ if (baseURL !== "/") config.routes.push({ src: "^/(.*)$" });
916
+ const configContent = JSON.stringify(config, null, 2);
917
+ await writeFile$2(join$1(nitro.options.output.serverDir, "config.json"), configContent, true);
918
+ return { apiRoutes };
919
+ }
920
+ var preset_default$17 = [defineNitroPreset({
921
+ extends: "node-server",
922
+ entry: "./edgeone/runtime/edgeone",
923
+ serveStatic: false,
924
+ output: {
925
+ dir: "{{ rootDir }}/.edgeone",
926
+ serverDir: "{{ output.dir }}/cloud-functions/ssr-node",
927
+ publicDir: "{{ output.dir }}/assets/{{ baseURL }}"
928
+ },
929
+ rollupConfig: { output: { entryFileNames: "handler.js" } },
930
+ hooks: { async compiled(nitro) {
931
+ await writeEdgeOneConfig(nitro);
932
+ } }
933
+ }, {
934
+ name: "edgeone-pages",
935
+ aliases: ["edgeone"],
936
+ stdName: "edgeone_pages"
937
+ })];
938
+ var preset_default$16 = [defineNitroPreset({
934
939
  extends: "node-server",
935
940
  serveStatic: true,
936
941
  hooks: { async compiled(nitro) {
937
942
  const serverEntry = join$1(nitro.options.output.serverDir, "index.mjs");
938
- await writeFile$1(join$1(nitro.options.rootDir, ".apphosting/bundle.yaml"), gr({
943
+ await writeFile$1(join$1(nitro.options.rootDir, ".apphosting/bundle.yaml"), a({
939
944
  version: "v1",
940
945
  runConfig: {
941
946
  runCommand: `node ${relative$1(nitro.options.rootDir, serverEntry)}`,
@@ -953,32 +958,16 @@ const firebaseAppHosting = defineNitroPreset({
953
958
  }, {
954
959
  name: "firebase-app-hosting",
955
960
  stdName: "firebase_app_hosting"
956
- });
957
- var preset_default$15 = [firebaseAppHosting];
958
-
959
- //#endregion
960
- //#region src/presets/flightcontrol/preset.ts
961
- const flightControl = defineNitroPreset({
961
+ })];
962
+ var preset_default$15 = [defineNitroPreset({
962
963
  extends: "node-server",
963
964
  serveStatic: true
964
- }, { name: "flight-control" });
965
- var preset_default$14 = [flightControl];
966
-
967
- //#endregion
968
- //#region src/presets/genezio/preset.ts
969
- const genezio = defineNitroPreset({ extends: "aws_lambda" }, { name: "genezio" });
970
- var preset_default$13 = [genezio];
971
-
972
- //#endregion
973
- //#region src/presets/heroku/preset.ts
974
- const heroku = defineNitroPreset({
965
+ }, { name: "flight-control" })];
966
+ var preset_default$14 = [defineNitroPreset({ extends: "aws_lambda" }, { name: "genezio" })];
967
+ var preset_default$13 = [defineNitroPreset({
975
968
  extends: "node-server",
976
969
  serveStatic: true
977
- }, { name: "heroku" });
978
- var preset_default$12 = [heroku];
979
-
980
- //#endregion
981
- //#region src/presets/iis/utils.ts
970
+ }, { name: "heroku" })];
982
971
  async function writeIISFiles(nitro) {
983
972
  await writeFile$1(resolve$1(nitro.options.output.dir, "web.config"), await iisXmlTemplate(nitro));
984
973
  }
@@ -993,7 +982,7 @@ async function writeIISNodeFiles(nitro) {
993
982
  `);
994
983
  }
995
984
  async function iisnodeXmlTemplate(nitro) {
996
- const path$1 = resolve$1(nitro.options.rootDir, "web.config");
985
+ const path = resolve$1(nitro.options.rootDir, "web.config");
997
986
  const originalString = `<?xml version="1.0" encoding="utf-8"?>
998
987
  <!--
999
988
  This configuration file is required if iisnode is used to run node processes behind
@@ -1059,8 +1048,8 @@ async function iisnodeXmlTemplate(nitro) {
1059
1048
  </system.webServer>
1060
1049
  </configuration>
1061
1050
  `;
1062
- if (existsSync(path$1)) {
1063
- const fileString = await readFile(path$1, "utf8");
1051
+ if (existsSync(path)) {
1052
+ const fileString = await readFile(path, "utf8");
1064
1053
  const originalWebConfig = await parseXmlDoc(originalString);
1065
1054
  const fileWebConfig = await parseXmlDoc(fileString);
1066
1055
  if (nitro.options.iis?.mergeConfig && !nitro.options.iis.overrideConfig) return buildNewXmlDoc(defu(fileWebConfig, originalWebConfig));
@@ -1069,7 +1058,7 @@ async function iisnodeXmlTemplate(nitro) {
1069
1058
  return originalString;
1070
1059
  }
1071
1060
  async function iisXmlTemplate(nitro) {
1072
- const path$1 = resolve$1(nitro.options.rootDir, "web.config");
1061
+ const path = resolve$1(nitro.options.rootDir, "web.config");
1073
1062
  const originalString = `<?xml version="1.0" encoding="UTF-8"?>
1074
1063
  <configuration>
1075
1064
  <system.webServer>
@@ -1085,8 +1074,8 @@ async function iisXmlTemplate(nitro) {
1085
1074
  </system.webServer>
1086
1075
  </configuration>
1087
1076
  `;
1088
- if (existsSync(path$1)) {
1089
- const fileString = await readFile(path$1, "utf8");
1077
+ if (existsSync(path)) {
1078
+ const fileString = await readFile(path, "utf8");
1090
1079
  const originalWebConfig = await parseXmlDoc(originalString);
1091
1080
  const fileWebConfig = await parseXmlDoc(fileString);
1092
1081
  if (nitro.options.iis?.mergeConfig && !nitro.options.iis.overrideConfig) return buildNewXmlDoc(defu(fileWebConfig, originalWebConfig));
@@ -1108,35 +1097,23 @@ async function buildNewXmlDoc(xmlObj) {
1108
1097
  const { Builder } = await import("xml2js");
1109
1098
  return new Builder().buildObject({ ...xmlObj });
1110
1099
  }
1111
-
1112
- //#endregion
1113
- //#region src/presets/iis/preset.ts
1114
- const iisHandler = defineNitroPreset({
1100
+ var preset_default$12 = [defineNitroPreset({
1115
1101
  extends: "node-server",
1116
1102
  serveStatic: true,
1117
1103
  hooks: { async compiled(nitro) {
1118
1104
  await writeIISFiles(nitro);
1119
1105
  } }
1120
- }, { name: "iis-handler" });
1121
- const iisNode = defineNitroPreset({
1106
+ }, { name: "iis-handler" }), defineNitroPreset({
1122
1107
  extends: "node-server",
1123
1108
  serveStatic: true,
1124
1109
  hooks: { async compiled(nitro) {
1125
1110
  await writeIISNodeFiles(nitro);
1126
1111
  } }
1127
- }, { name: "iis-node" });
1128
- var preset_default$11 = [iisHandler, iisNode];
1129
-
1130
- //#endregion
1131
- //#region src/presets/koyeb/preset.ts
1132
- const koyeb = defineNitroPreset({
1112
+ }, { name: "iis-node" })];
1113
+ var preset_default$11 = [defineNitroPreset({
1133
1114
  extends: "node-server",
1134
1115
  serveStatic: true
1135
- }, { name: "koyeb" });
1136
- var preset_default$10 = [koyeb];
1137
-
1138
- //#endregion
1139
- //#region src/presets/netlify/utils.ts
1116
+ }, { name: "koyeb" })];
1140
1117
  async function writeRedirects(nitro) {
1141
1118
  const redirectsPath = join$1(nitro.options.output.publicDir, "_redirects");
1142
1119
  let contents = "";
@@ -1144,8 +1121,8 @@ async function writeRedirects(nitro) {
1144
1121
  const staticFallback = existsSync(join$1(nitro.options.output.publicDir, "404.html")) ? "/* /404.html 404" : "";
1145
1122
  contents += staticFallback;
1146
1123
  }
1147
- const rules = Object.entries(nitro.options.routeRules).sort((a$1, b) => a$1[0].split(/\/(?!\*)/).length - b[0].split(/\/(?!\*)/).length);
1148
- for (const [key, routeRules] of rules.filter(([_, routeRules$1]) => routeRules$1.redirect)) {
1124
+ const rules = Object.entries(nitro.options.routeRules).sort((a, b) => a[0].split(/\/(?!\*)/).length - b[0].split(/\/(?!\*)/).length);
1125
+ for (const [key, routeRules] of rules.filter(([_, routeRules]) => routeRules.redirect)) {
1149
1126
  let code = routeRules.redirect.status;
1150
1127
  if (code === 307) code = 302;
1151
1128
  if (code === 308) code = 301;
@@ -1165,9 +1142,9 @@ async function writeRedirects(nitro) {
1165
1142
  async function writeHeaders(nitro) {
1166
1143
  const headersPath = join$1(nitro.options.output.publicDir, "_headers");
1167
1144
  let contents = "";
1168
- const rules = Object.entries(nitro.options.routeRules).sort((a$1, b) => b[0].split(/\/(?!\*)/).length - a$1[0].split(/\/(?!\*)/).length);
1169
- for (const [path$1, routeRules] of rules.filter(([_, routeRules$1]) => routeRules$1.headers)) {
1170
- const headers = [path$1.replace("/**", "/*"), ...Object.entries({ ...routeRules.headers }).map(([header, value]) => ` ${header}: ${value}`)].join("\n");
1145
+ const rules = Object.entries(nitro.options.routeRules).sort((a, b) => b[0].split(/\/(?!\*)/).length - a[0].split(/\/(?!\*)/).length);
1146
+ for (const [path, routeRules] of rules.filter(([_, routeRules]) => routeRules.headers)) {
1147
+ const headers = [path.replace("/**", "/*"), ...Object.entries({ ...routeRules.headers }).map(([header, value]) => ` ${header}: ${value}`)].join("\n");
1171
1148
  contents += headers + "\n";
1172
1149
  }
1173
1150
  if (existsSync(headersPath)) {
@@ -1182,7 +1159,7 @@ async function writeHeaders(nitro) {
1182
1159
  await promises.writeFile(headersPath, contents);
1183
1160
  }
1184
1161
  function getStaticPaths(publicAssets, baseURL) {
1185
- return ["/.netlify/*", ...publicAssets.filter((a$1) => a$1.fallthrough !== true && a$1.baseURL && a$1.baseURL !== "/").map((a$1) => joinURL(baseURL, a$1.baseURL, "*"))];
1162
+ return ["/.netlify/*", ...publicAssets.filter((a) => a.fallthrough !== true && a.baseURL && a.baseURL !== "/").map((a) => joinURL(baseURL, a.baseURL, "*"))];
1186
1163
  }
1187
1164
  function generateNetlifyFunction(nitro) {
1188
1165
  return `
@@ -1201,95 +1178,86 @@ export const config = {
1201
1178
  function getGeneratorString(nitro) {
1202
1179
  return `${nitro.options.framework.name}@${nitro.options.framework.version}`;
1203
1180
  }
1204
-
1205
- //#endregion
1206
- //#region src/presets/netlify/preset.ts
1207
- const netlify = defineNitroPreset({
1208
- entry: "./netlify/runtime/netlify",
1209
- manifest: { deploymentId: process.env.DEPLOY_ID },
1210
- output: {
1211
- dir: "{{ rootDir }}/.netlify/functions-internal",
1212
- publicDir: "{{ rootDir }}/dist/{{ baseURL }}"
1213
- },
1214
- prerender: { autoSubfolderIndex: false },
1215
- rollupConfig: { output: { entryFileNames: "main.mjs" } },
1216
- hooks: { async compiled(nitro) {
1217
- await writeHeaders(nitro);
1218
- await writeRedirects(nitro);
1219
- await promises.writeFile(join$1(nitro.options.output.dir, "server", "server.mjs"), generateNetlifyFunction(nitro));
1220
- if (nitro.options.netlify?.images) {
1221
- nitro.options.netlify.config ||= {};
1222
- nitro.options.netlify.config.images ||= nitro.options.netlify?.images;
1223
- }
1224
- if (Object.keys(nitro.options.netlify?.config || {}).length > 0) {
1225
- const configPath = join$1(nitro.options.output.dir, "../deploy/v1/config.json");
1226
- await promises.mkdir(dirname$1(configPath), { recursive: true });
1227
- await promises.writeFile(configPath, JSON.stringify(nitro.options.netlify?.config), "utf8");
1228
- }
1229
- } }
1230
- }, {
1231
- name: "netlify",
1232
- stdName: "netlify"
1233
- });
1234
- const netlifyEdge = defineNitroPreset({
1235
- extends: "base-worker",
1236
- entry: "./netlify/runtime/netlify-edge",
1237
- manifest: { deploymentId: process.env.DEPLOY_ID },
1238
- exportConditions: ["netlify"],
1239
- output: {
1240
- serverDir: "{{ rootDir }}/.netlify/edge-functions/server",
1241
- publicDir: "{{ rootDir }}/dist/{{ baseURL }}"
1242
- },
1243
- prerender: { autoSubfolderIndex: false },
1244
- rollupConfig: { output: {
1245
- entryFileNames: "server.js",
1246
- format: "esm"
1247
- } },
1248
- unenv: unenvDeno,
1249
- hooks: { async compiled(nitro) {
1250
- await writeHeaders(nitro);
1251
- await writeRedirects(nitro);
1252
- const manifest = {
1253
- version: 1,
1254
- functions: [{
1255
- path: "/*",
1256
- excludedPath: getStaticPaths(nitro.options.publicAssets, nitro.options.baseURL),
1257
- name: "edge server handler",
1258
- function: "server",
1259
- generator: getGeneratorString(nitro)
1260
- }]
1261
- };
1262
- const manifestPath = join$1(nitro.options.rootDir, ".netlify/edge-functions/manifest.json");
1263
- await promises.mkdir(dirname$1(manifestPath), { recursive: true });
1264
- await promises.writeFile(manifestPath, JSON.stringify(manifest, null, 2));
1265
- } }
1266
- }, { name: "netlify-edge" });
1267
- const netlifyStatic = defineNitroPreset({
1268
- extends: "static",
1269
- manifest: { deploymentId: process.env.DEPLOY_ID },
1270
- output: {
1271
- dir: "{{ rootDir }}/dist",
1272
- publicDir: "{{ rootDir }}/dist/{{ baseURL }}"
1273
- },
1274
- prerender: { autoSubfolderIndex: false },
1275
- commands: { preview: "npx serve ./" },
1276
- hooks: { async compiled(nitro) {
1277
- await writeHeaders(nitro);
1278
- await writeRedirects(nitro);
1279
- } }
1280
- }, {
1281
- name: "netlify-static",
1282
- stdName: "netlify",
1283
- static: true
1284
- });
1285
- var preset_default$9 = [
1286
- netlify,
1287
- netlifyEdge,
1288
- netlifyStatic
1181
+ var preset_default$10 = [
1182
+ defineNitroPreset({
1183
+ entry: "./netlify/runtime/netlify",
1184
+ manifest: { deploymentId: process.env.DEPLOY_ID },
1185
+ output: {
1186
+ dir: "{{ rootDir }}/.netlify/functions-internal",
1187
+ publicDir: "{{ rootDir }}/dist/{{ baseURL }}"
1188
+ },
1189
+ prerender: { autoSubfolderIndex: false },
1190
+ rollupConfig: { output: { entryFileNames: "main.mjs" } },
1191
+ hooks: { async compiled(nitro) {
1192
+ await writeHeaders(nitro);
1193
+ await writeRedirects(nitro);
1194
+ await promises.writeFile(join$1(nitro.options.output.dir, "server", "server.mjs"), generateNetlifyFunction(nitro));
1195
+ if (nitro.options.netlify?.images) {
1196
+ nitro.options.netlify.config ||= {};
1197
+ nitro.options.netlify.config.images ||= nitro.options.netlify?.images;
1198
+ }
1199
+ if (Object.keys(nitro.options.netlify?.config || {}).length > 0) {
1200
+ const configPath = join$1(nitro.options.output.dir, "../deploy/v1/config.json");
1201
+ await promises.mkdir(dirname$1(configPath), { recursive: true });
1202
+ await promises.writeFile(configPath, JSON.stringify(nitro.options.netlify?.config), "utf8");
1203
+ }
1204
+ } }
1205
+ }, {
1206
+ name: "netlify",
1207
+ stdName: "netlify"
1208
+ }),
1209
+ defineNitroPreset({
1210
+ extends: "base-worker",
1211
+ entry: "./netlify/runtime/netlify-edge",
1212
+ manifest: { deploymentId: process.env.DEPLOY_ID },
1213
+ exportConditions: ["netlify"],
1214
+ output: {
1215
+ serverDir: "{{ rootDir }}/.netlify/edge-functions/server",
1216
+ publicDir: "{{ rootDir }}/dist/{{ baseURL }}"
1217
+ },
1218
+ prerender: { autoSubfolderIndex: false },
1219
+ rollupConfig: { output: {
1220
+ entryFileNames: "server.js",
1221
+ format: "esm"
1222
+ } },
1223
+ unenv: unenvDeno,
1224
+ hooks: { async compiled(nitro) {
1225
+ await writeHeaders(nitro);
1226
+ await writeRedirects(nitro);
1227
+ const manifest = {
1228
+ version: 1,
1229
+ functions: [{
1230
+ path: "/*",
1231
+ excludedPath: getStaticPaths(nitro.options.publicAssets, nitro.options.baseURL),
1232
+ name: "edge server handler",
1233
+ function: "server",
1234
+ generator: getGeneratorString(nitro)
1235
+ }]
1236
+ };
1237
+ const manifestPath = join$1(nitro.options.rootDir, ".netlify/edge-functions/manifest.json");
1238
+ await promises.mkdir(dirname$1(manifestPath), { recursive: true });
1239
+ await promises.writeFile(manifestPath, JSON.stringify(manifest, null, 2));
1240
+ } }
1241
+ }, { name: "netlify-edge" }),
1242
+ defineNitroPreset({
1243
+ extends: "static",
1244
+ manifest: { deploymentId: process.env.DEPLOY_ID },
1245
+ output: {
1246
+ dir: "{{ rootDir }}/dist",
1247
+ publicDir: "{{ rootDir }}/dist/{{ baseURL }}"
1248
+ },
1249
+ prerender: { autoSubfolderIndex: false },
1250
+ commands: { preview: "npx serve ./" },
1251
+ hooks: { async compiled(nitro) {
1252
+ await writeHeaders(nitro);
1253
+ await writeRedirects(nitro);
1254
+ } }
1255
+ }, {
1256
+ name: "netlify-static",
1257
+ stdName: "netlify",
1258
+ static: true
1259
+ })
1289
1260
  ];
1290
-
1291
- //#endregion
1292
- //#region src/presets/node/cluster.ts
1293
1261
  const nodeCluster = defineNitroPreset({
1294
1262
  extends: "node-server",
1295
1263
  serveStatic: true,
@@ -1321,43 +1289,27 @@ if (cluster.isPrimary) {
1321
1289
  }
1322
1290
  `;
1323
1291
  }
1324
-
1325
- //#endregion
1326
- //#region src/presets/node/preset.ts
1327
- const nodeServer = defineNitroPreset({
1328
- entry: "./node/runtime/node-server",
1329
- serveStatic: true,
1330
- commands: { preview: "node ./server/index.mjs" }
1331
- }, {
1332
- name: "node-server",
1333
- aliases: ["node"]
1334
- });
1335
- const nodeMiddleware = defineNitroPreset({ entry: "./node/runtime/node-middleware" }, { name: "node-middleware" });
1336
- var preset_default$8 = [
1337
- nodeServer,
1292
+ var preset_default$9 = [
1293
+ defineNitroPreset({
1294
+ entry: "./node/runtime/node-server",
1295
+ serveStatic: true,
1296
+ commands: { preview: "node ./server/index.mjs" }
1297
+ }, {
1298
+ name: "node-server",
1299
+ aliases: ["node"]
1300
+ }),
1338
1301
  nodeCluster,
1339
- nodeMiddleware
1302
+ defineNitroPreset({ entry: "./node/runtime/node-middleware" }, { name: "node-middleware" })
1340
1303
  ];
1341
-
1342
- //#endregion
1343
- //#region src/presets/platform.sh/preset.ts
1344
- const platformSh = defineNitroPreset({
1304
+ var preset_default$8 = [defineNitroPreset({
1345
1305
  extends: "node-server",
1346
1306
  serveStatic: true
1347
- }, { name: "platform-sh" });
1348
- var preset_default$7 = [platformSh];
1349
-
1350
- //#endregion
1351
- //#region src/presets/render.com/preset.ts
1352
- const renderCom = defineNitroPreset({
1307
+ }, { name: "platform-sh" })];
1308
+ var preset_default$7 = [defineNitroPreset({
1353
1309
  extends: "node-server",
1354
1310
  serveStatic: true
1355
- }, { name: "render-com" });
1356
- var preset_default$6 = [renderCom];
1357
-
1358
- //#endregion
1359
- //#region src/presets/standard/preset.ts
1360
- const standard = defineNitroPreset({
1311
+ }, { name: "render-com" })];
1312
+ var preset_default$6 = [defineNitroPreset({
1361
1313
  entry: "./standard/runtime/server",
1362
1314
  serveStatic: false,
1363
1315
  output: { publicDir: "{{ output.dir }}/public/{{ baseURL }}" },
@@ -1367,14 +1319,11 @@ const standard = defineNitroPreset({
1367
1319
  "srvx/bun": "srvx/bun",
1368
1320
  "srvx/deno": "srvx/deno",
1369
1321
  "srvx/node": "srvx/node",
1370
- "srvx/generic": "srvx/generic"
1322
+ "srvx/generic": "srvx/generic",
1323
+ "srvx/tracing": "srvx/tracing"
1371
1324
  }
1372
- }, { name: "standard" });
1373
- var preset_default$5 = [standard];
1374
-
1375
- //#endregion
1376
- //#region src/presets/stormkit/preset.ts
1377
- const stormkit = defineNitroPreset({
1325
+ }, { name: "standard" })];
1326
+ var preset_default$5 = [defineNitroPreset({
1378
1327
  entry: "./stormkit/runtime/stormkit",
1379
1328
  output: {
1380
1329
  dir: "{{ rootDir }}/.stormkit",
@@ -1383,16 +1332,22 @@ const stormkit = defineNitroPreset({
1383
1332
  }, {
1384
1333
  name: "stormkit",
1385
1334
  stdName: "stormkit"
1386
- });
1387
- var preset_default$4 = [stormkit];
1388
-
1389
- //#endregion
1390
- //#region src/presets/vercel/runtime/isr.ts
1335
+ })];
1391
1336
  const ISR_URL_PARAM = "__isr_route";
1392
-
1393
- //#endregion
1394
- //#region src/presets/vercel/utils.ts
1395
- const SUPPORTED_NODE_VERSIONS = [20, 22];
1337
+ const SUPPORTED_NODE_VERSIONS = [
1338
+ 20,
1339
+ 22,
1340
+ 24
1341
+ ];
1342
+ const UNSUPPORTED_PROXY_OPTIONS = [
1343
+ "headers",
1344
+ "forwardHeaders",
1345
+ "filterHeaders",
1346
+ "fetchOptions",
1347
+ "cookieDomainRewrite",
1348
+ "cookiePathRewrite",
1349
+ "onResponse"
1350
+ ];
1396
1351
  const FALLBACK_ROUTE = "/__server";
1397
1352
  const ISR_SUFFIX = "-isr";
1398
1353
  const SAFE_FS_CHAR_RE = /[^a-zA-Z0-9_.[\]/]/g;
@@ -1405,29 +1360,58 @@ async function generateFunctionFiles(nitro) {
1405
1360
  const buildConfigPath = resolve$1(nitro.options.output.dir, "config.json");
1406
1361
  const buildConfig = generateBuildConfig(nitro, o11Routes);
1407
1362
  await writeFile$1(buildConfigPath, JSON.stringify(buildConfig, null, 2));
1408
- const functionConfigPath = resolve$1(nitro.options.output.serverDir, ".vc-config.json");
1409
- const functionConfig = {
1363
+ const baseFunctionConfig = {
1410
1364
  handler: "index.mjs",
1411
1365
  launcherType: "Nodejs",
1412
1366
  shouldAddHelpers: false,
1413
1367
  supportsResponseStreaming: true,
1414
1368
  ...nitro.options.vercel?.functions
1415
1369
  };
1416
- await writeFile$1(functionConfigPath, JSON.stringify(functionConfig, null, 2));
1370
+ if (Array.isArray(baseFunctionConfig.experimentalTriggers) && baseFunctionConfig.experimentalTriggers.length > 0) nitro.logger.warn("`experimentalTriggers` on the base `vercel.functions` config applies to the catch-all function and is likely not what you want. Routes with queue triggers are not accessible on the web. Use `vercel.functionRules` to attach triggers to specific routes instead.");
1371
+ await writeFile$1(resolve$1(nitro.options.output.serverDir, ".vc-config.json"), JSON.stringify(baseFunctionConfig, null, 2));
1372
+ const functionRules = nitro.options.vercel?.functionRules;
1373
+ const hasRouteFunctionConfig = functionRules && Object.keys(functionRules).length > 0;
1374
+ let routeFuncRouter;
1375
+ if (hasRouteFunctionConfig) {
1376
+ routeFuncRouter = new Router();
1377
+ routeFuncRouter._update(Object.entries(functionRules).map(([route, data]) => ({
1378
+ route,
1379
+ method: "",
1380
+ data
1381
+ })));
1382
+ }
1383
+ const isrFuncDirs = /* @__PURE__ */ new Set();
1417
1384
  for (const [key, value] of Object.entries(nitro.options.routeRules)) {
1418
1385
  if (!value.isr) continue;
1419
1386
  const funcPrefix = resolve$1(nitro.options.output.serverDir, "..", normalizeRouteDest(key) + ISR_SUFFIX);
1420
1387
  await fsp.mkdir(dirname$1(funcPrefix), { recursive: true });
1421
- await fsp.symlink("./" + relative$1(dirname$1(funcPrefix), nitro.options.output.serverDir), funcPrefix + ".func", "junction");
1388
+ const matchData = routeFuncRouter?.match("", key);
1389
+ if (matchData) {
1390
+ isrFuncDirs.add(resolve$1(nitro.options.output.serverDir, "..", normalizeRouteDest(key) + ".func"));
1391
+ await createFunctionDirWithCustomConfig(funcPrefix + ".func", nitro.options.output.serverDir, baseFunctionConfig, matchData, normalizeRouteDest(key) + ISR_SUFFIX);
1392
+ } else await fsp.symlink("./" + relative$1(dirname$1(funcPrefix), nitro.options.output.serverDir), funcPrefix + ".func", "junction");
1422
1393
  await writePrerenderConfig(funcPrefix + ".prerender-config.json", value.isr, nitro.options.vercel?.config?.bypassToken);
1423
1394
  }
1395
+ const createdFuncDirs = /* @__PURE__ */ new Set();
1396
+ if (hasRouteFunctionConfig) for (const [pattern, overrides] of Object.entries(functionRules)) {
1397
+ const funcDir = resolve$1(nitro.options.output.serverDir, "..", normalizeRouteDest(pattern) + ".func");
1398
+ if (isrFuncDirs.has(funcDir)) continue;
1399
+ await createFunctionDirWithCustomConfig(funcDir, nitro.options.output.serverDir, baseFunctionConfig, overrides, normalizeRouteDest(pattern));
1400
+ createdFuncDirs.add(funcDir);
1401
+ }
1424
1402
  if (o11Routes.length === 0) return;
1425
- const _getRouteRules = (path$1) => defu({}, ...nitro.routing.routeRules.matchAll("", path$1).reverse());
1403
+ const _getRouteRules = (path) => defu({}, ...nitro.routing.routeRules.matchAll("", path).reverse());
1426
1404
  for (const route of o11Routes) {
1427
1405
  if (_getRouteRules(route.src).isr) continue;
1428
1406
  const funcPrefix = resolve$1(nitro.options.output.serverDir, "..", route.dest);
1429
- await fsp.mkdir(dirname$1(funcPrefix), { recursive: true });
1430
- await fsp.symlink("./" + relative$1(dirname$1(funcPrefix), nitro.options.output.serverDir), funcPrefix + ".func", "junction");
1407
+ const funcDir = funcPrefix + ".func";
1408
+ if (createdFuncDirs.has(funcDir)) continue;
1409
+ const matchData = routeFuncRouter?.match("", route.src);
1410
+ if (matchData) await createFunctionDirWithCustomConfig(funcDir, nitro.options.output.serverDir, baseFunctionConfig, matchData, route.dest);
1411
+ else {
1412
+ await fsp.mkdir(dirname$1(funcPrefix), { recursive: true });
1413
+ await fsp.symlink("./" + relative$1(dirname$1(funcPrefix), nitro.options.output.serverDir), funcDir, "junction");
1414
+ }
1431
1415
  }
1432
1416
  }
1433
1417
  async function generateStaticFiles(nitro) {
@@ -1436,13 +1420,18 @@ async function generateStaticFiles(nitro) {
1436
1420
  await writeFile$1(buildConfigPath, JSON.stringify(buildConfig, null, 2));
1437
1421
  }
1438
1422
  function generateBuildConfig(nitro, o11Routes) {
1439
- const rules = Object.entries(nitro.options.routeRules).sort((a$1, b) => b[0].split(/\/(?!\*)/).length - a$1[0].split(/\/(?!\*)/).length);
1423
+ const rules = Object.entries(nitro.options.routeRules).sort((a, b) => b[0].split(/\/(?!\*)/).length - a[0].split(/\/(?!\*)/).length);
1424
+ const cdnProxyPaths = new Set(rules.filter(([_, routeRules]) => routeRules.proxy && canUseVercelRewrite(routeRules.proxy)).map(([path]) => path));
1440
1425
  const config = defu(nitro.options.vercel?.config, {
1441
1426
  version: 3,
1427
+ framework: {
1428
+ name: nitro.options.framework.name,
1429
+ version: nitro.options.framework.version
1430
+ },
1442
1431
  overrides: { ...Object.fromEntries((nitro._prerenderedRoutes?.filter((r) => r.fileName !== r.route) || []).map(({ route, fileName }) => [withoutLeadingSlash(fileName), { path: route.replace(/^\//, "") }])) },
1443
1432
  routes: [
1444
- ...rules.filter(([_, routeRules]) => routeRules.redirect || routeRules.headers).map(([path$1, routeRules]) => {
1445
- let route = { src: path$1.replace("/**", "/(.*)") };
1433
+ ...rules.filter(([path, routeRules]) => (routeRules.redirect || routeRules.headers) && !cdnProxyPaths.has(path)).map(([path, routeRules]) => {
1434
+ let route = { src: path.replace("/**", "/(.*)") };
1446
1435
  if (routeRules.redirect) route = defu(route, {
1447
1436
  status: routeRules.redirect.status,
1448
1437
  headers: { Location: routeRules.redirect.to.replace("/**", "/$1") }
@@ -1450,6 +1439,15 @@ function generateBuildConfig(nitro, o11Routes) {
1450
1439
  if (routeRules.headers) route = defu(route, { headers: routeRules.headers });
1451
1440
  return route;
1452
1441
  }),
1442
+ ...rules.filter(([path]) => cdnProxyPaths.has(path)).map(([path, routeRules]) => {
1443
+ const proxy = routeRules.proxy;
1444
+ const route = {
1445
+ src: path.replace("/**", "/(.*)"),
1446
+ dest: proxy.to.replace("/**", "/$1")
1447
+ };
1448
+ if (routeRules.headers) route.headers = routeRules.headers;
1449
+ return route;
1450
+ }),
1453
1451
  ...nitro.options.vercel?.skewProtection && nitro.options.manifest?.deploymentId ? [{
1454
1452
  src: "/.*",
1455
1453
  has: [{
@@ -1468,6 +1466,13 @@ function generateBuildConfig(nitro, o11Routes) {
1468
1466
  { handle: "filesystem" }
1469
1467
  ]
1470
1468
  });
1469
+ if (nitro.options.experimental.tasks && Object.keys(nitro.options.scheduledTasks || {}).length > 0) {
1470
+ const cronPath = nitro.options.vercel.cronHandlerRoute || "/_vercel/cron";
1471
+ config.crons = [...Object.keys(nitro.options.scheduledTasks).map((schedule) => ({
1472
+ path: cronPath,
1473
+ schedule
1474
+ })), ...config.crons || []];
1475
+ }
1471
1476
  if (nitro.options.static) return config;
1472
1477
  config.routes.push(...nitro.options.routeRules["/"]?.isr ? [{
1473
1478
  src: `(?<${ISR_URL_PARAM}>/)`,
@@ -1482,7 +1487,10 @@ function generateBuildConfig(nitro, o11Routes) {
1482
1487
  src,
1483
1488
  dest: withLeadingSlash(normalizeRouteDest(key) + ISR_SUFFIX + `?${ISR_URL_PARAM}=$${ISR_URL_PARAM}`)
1484
1489
  };
1485
- }), ...(o11Routes || []).map((route) => ({
1490
+ }), ...nitro.options.vercel?.functionRules ? Object.keys(nitro.options.vercel.functionRules).map((pattern) => ({
1491
+ src: joinURL(nitro.options.baseURL, normalizeRouteSrc(pattern)),
1492
+ dest: withLeadingSlash(normalizeRouteDest(pattern))
1493
+ })) : [], ...(o11Routes || []).map((route) => ({
1486
1494
  src: joinURL(nitro.options.baseURL, route.src),
1487
1495
  dest: withLeadingSlash(route.dest)
1488
1496
  })), ...nitro.options.routeRules["/**"]?.isr ? [] : [{
@@ -1506,7 +1514,7 @@ function deprecateSWR(nitro) {
1506
1514
  hasLegacyOptions = true;
1507
1515
  }
1508
1516
  }
1509
- if (hasLegacyOptions && !a) nitro.logger.warn("Nitro now uses `isr` option to configure ISR behavior on Vercel. Backwards-compatible support for `static` and `swr` options within the Vercel Build Options API will be removed in the future versions. Set `future.nativeSWR: true` nitro config disable this warning.");
1517
+ if (hasLegacyOptions && !v) nitro.logger.warn("Nitro now uses `isr` option to configure ISR behavior on Vercel. Backwards-compatible support for `static` and `swr` options within the Vercel Build Options API will be removed in the future versions. Set `future.nativeSWR: true` nitro config disable this warning.");
1510
1518
  }
1511
1519
  async function resolveVercelRuntime(nitro) {
1512
1520
  let runtime = nitro.options.vercel?.functions?.runtime;
@@ -1514,7 +1522,7 @@ async function resolveVercelRuntime(nitro) {
1514
1522
  if ((await readVercelConfig(nitro.options.rootDir)).bunVersion || "Bun" in globalThis) runtime = "bun1.x";
1515
1523
  else {
1516
1524
  const systemNodeVersion = getSystemNodeVersion();
1517
- runtime = `nodejs${SUPPORTED_NODE_VERSIONS.find((version$1) => version$1 >= systemNodeVersion) ?? SUPPORTED_NODE_VERSIONS.at(-1)}.x`;
1525
+ runtime = `nodejs${SUPPORTED_NODE_VERSIONS.find((version) => version >= systemNodeVersion) ?? SUPPORTED_NODE_VERSIONS.at(-1)}.x`;
1518
1526
  }
1519
1527
  nitro.options.vercel ??= {};
1520
1528
  nitro.options.vercel.functions ??= {};
@@ -1528,9 +1536,15 @@ async function readVercelConfig(rootDir) {
1528
1536
  function _hasProp(obj, prop) {
1529
1537
  return obj && typeof obj === "object" && prop in obj;
1530
1538
  }
1539
+ function canUseVercelRewrite(proxy) {
1540
+ if (!proxy?.to) return false;
1541
+ if (!/^https?:\/\//.test(proxy.to.replace(/\/\*\*$/, ""))) return false;
1542
+ for (const key of UNSUPPORTED_PROXY_OPTIONS) if (proxy[key] !== void 0) return false;
1543
+ return true;
1544
+ }
1531
1545
  function getObservabilityRoutes(nitro) {
1532
1546
  if ((nitro.options.compatibilityDate.vercel || nitro.options.compatibilityDate.default) < "2025-07-15") return [];
1533
- const routePatterns = [...new Set([...nitro.options.ssrRoutes || [], ...[...nitro.scannedHandlers, ...nitro.options.handlers].filter((h$1) => !h$1.middleware && h$1.route).map((h$1) => h$1.route)])];
1547
+ const routePatterns = [...new Set([...nitro.options.ssrRoutes || [], ...[...nitro.scannedHandlers, ...nitro.options.handlers].filter((h) => !h.middleware && h.route).map((h) => h.route)])];
1534
1548
  const staticRoutes = [];
1535
1549
  const dynamicRoutes = [];
1536
1550
  const catchAllRoutes = [];
@@ -1544,7 +1558,7 @@ function getObservabilityRoutes(nitro) {
1544
1558
  ];
1545
1559
  }
1546
1560
  function normalizeRoutes(routes) {
1547
- return routes.sort((a$1, b) => b.localeCompare(a$1)).map((route) => ({
1561
+ return routes.sort((a, b) => b.localeCompare(a)).map((route) => ({
1548
1562
  src: normalizeRouteSrc(route),
1549
1563
  dest: normalizeRouteDest(route)
1550
1564
  }));
@@ -1571,6 +1585,25 @@ function normalizeRouteDest(route) {
1571
1585
  return segment;
1572
1586
  }).map((segment) => segment.replace(SAFE_FS_CHAR_RE, "-")).join("/") || "index";
1573
1587
  }
1588
+ function sanitizeConsumerName(functionPath) {
1589
+ let result = "";
1590
+ for (const char of functionPath) if (char === "_") result += "__";
1591
+ else if (char === "/") result += "_S";
1592
+ else if (char === ".") result += "_D";
1593
+ else if (/[A-Za-z0-9-]/.test(char)) result += char;
1594
+ else result += "_" + char.charCodeAt(0).toString(16).toUpperCase().padStart(2, "0");
1595
+ return result;
1596
+ }
1597
+ async function createFunctionDirWithCustomConfig(funcDir, serverDir, baseFunctionConfig, overrides, functionPath) {
1598
+ await fsp.cp(serverDir, funcDir, { recursive: true });
1599
+ const mergedConfig = defu(overrides, baseFunctionConfig);
1600
+ for (const [key, value] of Object.entries(overrides)) if (Array.isArray(value)) mergedConfig[key] = value;
1601
+ const triggers = mergedConfig.experimentalTriggers;
1602
+ if (Array.isArray(triggers)) {
1603
+ for (const trigger of triggers) if (trigger.type === "queue/v2beta" && !trigger.consumer) trigger.consumer = sanitizeConsumerName(functionPath);
1604
+ }
1605
+ await writeFile$1(resolve$1(funcDir, ".vc-config.json"), JSON.stringify(mergedConfig, null, 2));
1606
+ }
1574
1607
  async function writePrerenderConfig(filename, isrConfig, bypassToken) {
1575
1608
  if (typeof isrConfig === "number") isrConfig = { expiration: isrConfig };
1576
1609
  else if (isrConfig === true) isrConfig = { expiration: false };
@@ -1580,16 +1613,16 @@ async function writePrerenderConfig(filename, isrConfig, bypassToken) {
1580
1613
  bypassToken,
1581
1614
  ...isrConfig
1582
1615
  };
1583
- if (prerenderConfig.allowQuery && !prerenderConfig.allowQuery.includes(ISR_URL_PARAM)) prerenderConfig.allowQuery.push(ISR_URL_PARAM);
1616
+ if (prerenderConfig.allowQuery && !prerenderConfig.allowQuery.includes("__isr_route")) prerenderConfig.allowQuery.push(ISR_URL_PARAM);
1584
1617
  await writeFile$1(filename, JSON.stringify(prerenderConfig, null, 2));
1585
1618
  }
1586
-
1587
- //#endregion
1588
- //#region src/presets/vercel/preset.ts
1589
- const vercel = defineNitroPreset({
1619
+ var preset_default$4 = [defineNitroPreset({
1590
1620
  entry: "./vercel/runtime/vercel.{format}",
1591
1621
  manifest: { deploymentId: process.env.VERCEL_DEPLOYMENT_ID },
1592
- vercel: { skewProtection: !!process.env.VERCEL_SKEW_PROTECTION_ENABLED },
1622
+ vercel: {
1623
+ skewProtection: !!process.env.VERCEL_SKEW_PROTECTION_ENABLED,
1624
+ cronHandlerRoute: "/_vercel/cron"
1625
+ },
1593
1626
  output: {
1594
1627
  dir: "{{ rootDir }}/.vercel/output",
1595
1628
  serverDir: "{{ output.dir }}/functions/__server.func",
@@ -1606,9 +1639,40 @@ const vercel = defineNitroPreset({
1606
1639
  if (runtime.startsWith("bun") && !nitro.options.exportConditions.includes("bun")) nitro.options.exportConditions.push("bun");
1607
1640
  logger.info(`Using \`${runtime}\` runtime.`);
1608
1641
  let serverFormat = nitro.options.vercel?.entryFormat;
1609
- if (!serverFormat) serverFormat = nitro.routing.routes.routes.flatMap((r) => r.data).some((h$1) => h$1.format === "node") ? "node" : "web";
1642
+ if (!serverFormat) serverFormat = nitro.routing.routes.routes.flatMap((r) => r.data).some((h) => h.format === "node") ? "node" : "web";
1610
1643
  logger.info(`Using \`${serverFormat}\` entry format.`);
1611
1644
  nitro.options.entry = nitro.options.entry.replace("{format}", serverFormat);
1645
+ if (nitro.options.experimental.tasks && Object.keys(nitro.options.scheduledTasks || {}).length > 0) nitro.options.handlers.push({
1646
+ route: nitro.options.vercel.cronHandlerRoute || "/_vercel/cron",
1647
+ lazy: true,
1648
+ handler: join$1(presetsDir, "vercel/runtime/cron-handler")
1649
+ });
1650
+ const queues = nitro.options.vercel?.queues;
1651
+ if (queues?.triggers?.length) {
1652
+ await importDep({
1653
+ id: "@vercel/queue",
1654
+ dir: nitro.options.rootDir,
1655
+ reason: "Vercel Queues"
1656
+ });
1657
+ const handlerRoute = queues.handlerRoute || "/_vercel/queues/consumer";
1658
+ nitro.options.handlers.push({
1659
+ route: handlerRoute,
1660
+ lazy: true,
1661
+ handler: join$1(presetsDir, "vercel/runtime/queue-handler")
1662
+ });
1663
+ const queueTriggers = queues.triggers.map(({ topic, ...opts }) => ({
1664
+ type: "queue/v2beta",
1665
+ topic,
1666
+ ...opts
1667
+ }));
1668
+ nitro.options.vercel ??= {};
1669
+ nitro.options.vercel.functionRules ??= {};
1670
+ const existingRule = nitro.options.vercel.functionRules[handlerRoute];
1671
+ nitro.options.vercel.functionRules[handlerRoute] = {
1672
+ ...existingRule,
1673
+ experimentalTriggers: [...existingRule?.experimentalTriggers || [], ...queueTriggers]
1674
+ };
1675
+ }
1612
1676
  },
1613
1677
  "rollup:before": (nitro) => {
1614
1678
  deprecateSWR(nitro);
@@ -1620,8 +1684,7 @@ const vercel = defineNitroPreset({
1620
1684
  }, {
1621
1685
  name: "vercel",
1622
1686
  stdName: "vercel"
1623
- });
1624
- const vercelStatic = defineNitroPreset({
1687
+ }), defineNitroPreset({
1625
1688
  extends: "static",
1626
1689
  manifest: { deploymentId: process.env.VERCEL_DEPLOYMENT_ID },
1627
1690
  vercel: { skewProtection: !!process.env.VERCEL_SKEW_PROTECTION_ENABLED },
@@ -1642,24 +1705,16 @@ const vercelStatic = defineNitroPreset({
1642
1705
  name: "vercel-static",
1643
1706
  stdName: "vercel",
1644
1707
  static: true
1645
- });
1646
- var preset_default$3 = [vercel, vercelStatic];
1647
-
1648
- //#endregion
1649
- //#region src/presets/winterjs/preset.ts
1650
- const winterjs = defineNitroPreset({
1708
+ })];
1709
+ var preset_default$3 = [defineNitroPreset({
1651
1710
  extends: "base-worker",
1652
1711
  entry: "./winterjs/runtime/winterjs",
1653
1712
  minify: false,
1654
1713
  serveStatic: "inline",
1655
1714
  wasm: { lazy: true },
1656
1715
  commands: { preview: "wasmer run wasmer/winterjs --forward-host-env --net --mapdir app:./ app/server/index.mjs" }
1657
- }, { name: "winterjs" });
1658
- var preset_default$2 = [winterjs];
1659
-
1660
- //#endregion
1661
- //#region src/presets/zeabur/preset.ts
1662
- const zeabur = defineNitroPreset({
1716
+ }, { name: "winterjs" })];
1717
+ var preset_default$2 = [defineNitroPreset({
1663
1718
  entry: "./zeabur/runtime/zeabur",
1664
1719
  output: {
1665
1720
  dir: "{{ rootDir }}/.zeabur/output",
@@ -1685,8 +1740,7 @@ const zeabur = defineNitroPreset({
1685
1740
  }, {
1686
1741
  name: "zeabur",
1687
1742
  stdName: "zeabur"
1688
- });
1689
- const zeaburStatic = defineNitroPreset({
1743
+ }), defineNitroPreset({
1690
1744
  extends: "static",
1691
1745
  output: {
1692
1746
  dir: "{{ rootDir }}/.zeabur/output",
@@ -1696,16 +1750,57 @@ const zeaburStatic = defineNitroPreset({
1696
1750
  }, {
1697
1751
  name: "zeabur-static",
1698
1752
  static: true
1699
- });
1700
- var preset_default$1 = [zeabur, zeaburStatic];
1701
-
1702
- //#endregion
1703
- //#region src/presets/zerops/preset.ts
1704
- const zerops = defineNitroPreset({
1753
+ })];
1754
+ const LOGGER_TAG = "zephyr-nitro-preset";
1755
+ var preset_default$1 = [defineNitroPreset({
1756
+ extends: "base-worker",
1757
+ entry: "./zephyr/runtime/server",
1758
+ output: { publicDir: "{{ output.dir }}/client/{{ baseURL }}" },
1759
+ exportConditions: ["node"],
1760
+ minify: false,
1761
+ rollupConfig: { output: {
1762
+ format: "esm",
1763
+ exports: "named",
1764
+ inlineDynamicImports: false
1765
+ } },
1766
+ wasm: {
1767
+ lazy: false,
1768
+ esmImport: true
1769
+ },
1770
+ hooks: {
1771
+ "build:before": (nitro) => {
1772
+ nitro.options.unenv.push(unenvCfExternals, unenvCfNodeCompat);
1773
+ },
1774
+ compiled: async (nitro) => {
1775
+ try {
1776
+ if (!globalThis.__nitroDeploying__ && !nitro.options.zephyr?.deployOnBuild) {
1777
+ nitro.logger.info(`[${LOGGER_TAG}] Zephyr deploy skipped on build.`);
1778
+ return;
1779
+ }
1780
+ const { deploymentUrl } = await (await importDep({
1781
+ id: "zephyr-agent",
1782
+ reason: "deploying to Zephyr",
1783
+ dir: nitro.options.rootDir
1784
+ })).uploadOutputToZephyr({
1785
+ rootDir: nitro.options.rootDir,
1786
+ outputDir: nitro.options.output.dir,
1787
+ baseURL: nitro.options.baseURL,
1788
+ publicDir: resolve$1(nitro.options.output.dir, nitro.options.output.publicDir)
1789
+ });
1790
+ if (deploymentUrl) nitro.logger.success(`[${LOGGER_TAG}] Zephyr deployment succeeded: ${deploymentUrl}`);
1791
+ else nitro.logger.success(`[${LOGGER_TAG}] Zephyr deployment succeeded.`);
1792
+ globalThis.__nitroDeployed__ = true;
1793
+ } catch (error) {
1794
+ if (error instanceof Error) throw error;
1795
+ throw new TypeError(`[${LOGGER_TAG}] ${String(error)}`);
1796
+ }
1797
+ }
1798
+ }
1799
+ }, { name: "zephyr" })];
1800
+ var preset_default = [defineNitroPreset({
1705
1801
  extends: "node-server",
1706
1802
  serveStatic: true
1707
- }, { name: "zerops" });
1708
- const zeropsStatic = defineNitroPreset({
1803
+ }, { name: "zerops" }), defineNitroPreset({
1709
1804
  extends: "static",
1710
1805
  output: {
1711
1806
  dir: "{{ rootDir }}/.zerops/output",
@@ -1714,12 +1809,10 @@ const zeropsStatic = defineNitroPreset({
1714
1809
  }, {
1715
1810
  name: "zerops-static",
1716
1811
  static: true
1717
- });
1718
- var preset_default = [zerops, zeropsStatic];
1719
-
1720
- //#endregion
1721
- //#region src/presets/_all.gen.ts
1812
+ })];
1722
1813
  var _all_gen_default = [
1814
+ ...preset_default$28,
1815
+ ...preset_default$27,
1723
1816
  ...preset_default$26,
1724
1817
  ...preset_default$25,
1725
1818
  ...preset_default$24,
@@ -1748,9 +1841,6 @@ var _all_gen_default = [
1748
1841
  ...preset_default$1,
1749
1842
  ...preset_default
1750
1843
  ];
1751
-
1752
- //#endregion
1753
- //#region src/presets/_resolve.ts
1754
1844
  const _stdProviderMap = {
1755
1845
  aws_amplify: "aws",
1756
1846
  azure_static: "azure",
@@ -1758,35 +1848,35 @@ const _stdProviderMap = {
1758
1848
  };
1759
1849
  async function resolvePreset(name, opts = {}) {
1760
1850
  if (name === ".") return;
1761
- const _name = kebabCase(name) || p;
1851
+ const _name = kebabCase(name) || f;
1762
1852
  const _compatDates = opts.compatibilityDate ? resolveCompatibilityDatesFromEnv(opts.compatibilityDate) : false;
1763
- const matches = _all_gen_default.filter((preset$1) => {
1853
+ const matches = _all_gen_default.filter((preset) => {
1764
1854
  if (![
1765
- preset$1._meta.name,
1766
- preset$1._meta.stdName,
1767
- ...preset$1._meta.aliases || []
1855
+ preset._meta.name,
1856
+ preset._meta.stdName,
1857
+ ...preset._meta.aliases || []
1768
1858
  ].filter(Boolean).includes(_name)) return false;
1769
- if (opts.dev && !preset$1._meta.dev || !opts.dev && preset$1._meta.dev) return false;
1859
+ if (opts.dev && !preset._meta.dev || !opts.dev && preset._meta.dev) return false;
1770
1860
  if (_compatDates) {
1771
- const _date = _compatDates[_stdProviderMap[preset$1._meta.stdName]] || _compatDates[preset$1._meta.stdName] || _compatDates[preset$1._meta.name] || _compatDates.default;
1772
- if (_date && preset$1._meta.compatibilityDate && new Date(preset$1._meta.compatibilityDate) > new Date(_date)) return false;
1861
+ const _date = _compatDates[_stdProviderMap[preset._meta.stdName]] || _compatDates[preset._meta.stdName] || _compatDates[preset._meta.name] || _compatDates.default;
1862
+ if (_date && preset._meta.compatibilityDate && new Date(preset._meta.compatibilityDate) > new Date(_date)) return false;
1773
1863
  }
1774
1864
  return true;
1775
- }).sort((a$1, b) => {
1776
- const aDate = new Date(a$1._meta.compatibilityDate || 0);
1865
+ }).sort((a, b) => {
1866
+ const aDate = new Date(a._meta.compatibilityDate || 0);
1777
1867
  return new Date(b._meta.compatibilityDate || 0) > aDate ? 1 : -1;
1778
1868
  });
1779
- const preset = matches.find((p$1) => (p$1._meta.static || false) === (opts?.static || false)) || matches[0];
1869
+ const preset = matches.find((p) => (p._meta.static || false) === (opts?.static || false)) || matches[0];
1780
1870
  if (typeof preset === "function") return preset();
1781
1871
  if (!name && !preset) {
1782
1872
  if (opts?.static) return resolvePreset("static", opts);
1783
1873
  return resolvePreset({
1784
1874
  deno: "deno",
1785
1875
  bun: "bun"
1786
- }[K] || "node", opts);
1876
+ }[R] || "node", opts);
1787
1877
  }
1788
1878
  if (name && !preset) {
1789
- const options = _all_gen_default.filter((p$1) => p$1._meta.name === name || p$1._meta.stdName === name || p$1._meta.aliases?.includes(name)).sort((a$1, b) => (a$1._meta.compatibilityDate || 0) > (b._meta.compatibilityDate || 0) ? 1 : -1);
1879
+ const options = _all_gen_default.filter((p) => p._meta.name === name || p._meta.stdName === name || p._meta.aliases?.includes(name)).sort((a, b) => (a._meta.compatibilityDate || 0) > (b._meta.compatibilityDate || 0) ? 1 : -1);
1790
1880
  if (options.length > 0) {
1791
1881
  let msg = `Preset "${name}" cannot be resolved with current compatibilityDate: ${formatCompatibilityDate(_compatDates || "")}.\n\n`;
1792
1882
  for (const option of options) msg += `\n- ${option._meta.name} (requires compatibilityDate >= ${option._meta.compatibilityDate})`;
@@ -1797,6 +1887,4 @@ async function resolvePreset(name, opts = {}) {
1797
1887
  }
1798
1888
  return preset;
1799
1889
  }
1800
-
1801
- //#endregion
1802
- export { resolvePreset };
1890
+ export { resolvePreset };