nitro 3.0.1-alpha.2 → 3.0.260311-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 (255) 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 +6977 -2556
  5. package/dist/_build/rolldown.mjs +32 -31
  6. package/dist/_build/rollup.mjs +28 -35
  7. package/dist/_build/vite.build.mjs +10 -8
  8. package/dist/_chunks/nitro.mjs +80 -112
  9. package/dist/_chunks/nitro2.mjs +8 -7
  10. package/dist/_chunks/nitro3.mjs +129 -0
  11. package/dist/_chunks/utils.mjs +42 -24
  12. package/dist/_common.mjs +14 -24
  13. package/dist/{_chunks/dev.mjs → _dev.mjs} +132 -320
  14. package/dist/_libs/_.mjs +3 -0
  15. package/dist/_libs/_2.mjs +2 -0
  16. package/dist/_libs/_3.mjs +3 -0
  17. package/dist/_libs/_4.mjs +2 -0
  18. package/dist/_libs/_5.mjs +3 -0
  19. package/dist/_libs/_6.mjs +4 -0
  20. package/dist/_libs/_7.mjs +5 -0
  21. package/dist/_libs/c12+rc9.mjs +812 -0
  22. package/dist/_libs/{c12+giget+readdirp+chokidar.d.mts → c12+readdirp+chokidar.d.mts} +52 -36
  23. package/dist/_libs/citty.mjs +10 -12
  24. package/dist/_libs/commondir+is-reference.mjs +60 -49
  25. package/dist/_libs/compatx.mjs +1 -2
  26. package/dist/_libs/esbuild.d.mts +1 -1
  27. package/dist/_libs/escape-string-regexp.mjs +1 -2
  28. package/dist/_libs/{pluginutils+plugin-commonjs.d.mts → estree+pluginutils.d.mts} +2 -2
  29. package/dist/_libs/estree-walker.mjs +1 -4
  30. package/dist/_libs/exsolve.d.mts +1 -0
  31. package/dist/_libs/hasown+resolve+deepmerge.mjs +146 -169
  32. package/dist/_libs/httpxy.d.mts +12 -9
  33. package/dist/_libs/httpxy.mjs +299 -43
  34. package/dist/_libs/js-tokens.d.mts +1 -0
  35. package/dist/_libs/klona.mjs +1 -2
  36. package/dist/_libs/mlly.d.mts +1 -1
  37. package/dist/_libs/nypm+tinyexec.mjs +845 -0
  38. package/dist/_libs/perfect-debounce.mjs +88 -0
  39. package/dist/_libs/plugin-alias.mjs +2 -4
  40. package/dist/_libs/plugin-inject.mjs +2 -6
  41. package/dist/_libs/plugin-json.mjs +2 -4
  42. package/dist/_libs/pluginutils.mjs +5 -11
  43. package/dist/_libs/readdirp+chokidar.mjs +187 -192
  44. package/dist/_libs/remapping.mjs +1 -3
  45. package/dist/_libs/resolve-uri+gen-mapping.mjs +15 -21
  46. package/dist/_libs/rou3.d.mts +3 -2
  47. package/dist/_libs/rou3.mjs +225 -51
  48. package/dist/_libs/std-env.d.mts +10 -2
  49. package/dist/_libs/strip-literal.d.mts +1 -0
  50. package/dist/_libs/tsconfck.mjs +21 -40
  51. package/dist/_libs/ultrahtml.mjs +3 -14
  52. package/dist/_libs/unimport+unplugin.mjs +250 -351
  53. package/dist/_libs/unplugin+unimport.d.mts +7 -10
  54. package/dist/_presets.mjs +389 -432
  55. package/dist/builder.d.mts +5 -4
  56. package/dist/builder.mjs +12 -6
  57. package/dist/cli/_chunks/build.mjs +22 -23
  58. package/dist/cli/_chunks/common.mjs +1 -2
  59. package/dist/cli/_chunks/deploy.mjs +40 -0
  60. package/dist/cli/_chunks/dev.mjs +9 -9
  61. package/dist/cli/_chunks/docs.mjs +30 -0
  62. package/dist/cli/_chunks/list.mjs +4 -6
  63. package/dist/cli/_chunks/prepare.mjs +2 -4
  64. package/dist/cli/_chunks/preview.mjs +51 -0
  65. package/dist/cli/_chunks/run.mjs +7 -9
  66. package/dist/cli/_chunks/task.mjs +1 -3
  67. package/dist/cli/index.mjs +5 -4
  68. package/dist/node_modules/@poppinss/dumper/build/formatters/html/main.js +8 -0
  69. package/dist/node_modules/@poppinss/dumper/package.json +1 -1
  70. package/dist/node_modules/croner/dist/croner.js +1 -1
  71. package/dist/node_modules/croner/package.json +11 -1
  72. package/dist/node_modules/youch/build/helpers-B9BQYaS6.js +23 -0
  73. package/dist/node_modules/youch/build/index.js +204 -351
  74. package/dist/node_modules/youch/build/public/error_info/script.js +1 -1
  75. package/dist/node_modules/youch/build/public_dir-C5bujZKB.js +25 -0
  76. package/dist/node_modules/youch/build/src/templates/error_cause/main.js +44 -0
  77. package/dist/node_modules/youch/build/src/templates/error_info/main.js +72 -0
  78. package/dist/node_modules/youch/build/src/templates/error_metadata/main.js +65 -0
  79. package/dist/node_modules/youch/build/src/templates/error_stack/main.js +152 -0
  80. package/dist/node_modules/youch/build/src/templates/error_stack_source/main.js +46 -0
  81. package/dist/node_modules/youch/build/src/templates/header/main.js +24 -0
  82. package/dist/node_modules/youch/build/src/templates/layout/main.js +27 -0
  83. package/dist/node_modules/youch/package.json +34 -31
  84. package/dist/presets/_nitro/runtime/nitro-dev.mjs +9 -56
  85. package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +1 -0
  86. package/dist/presets/_nitro/runtime/service-worker.mjs +0 -1
  87. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.mjs +3 -1
  88. package/dist/presets/bun/runtime/bun.mjs +4 -3
  89. package/dist/presets/deno/runtime/deno-server.mjs +4 -3
  90. package/dist/presets/netlify/runtime/netlify-edge.mjs +0 -1
  91. package/dist/presets/netlify/runtime/netlify.mjs +1 -1
  92. package/dist/presets/node/runtime/node-cluster.mjs +3 -2
  93. package/dist/presets/node/runtime/node-server.mjs +3 -2
  94. package/dist/presets/stormkit/runtime/stormkit.mjs +0 -1
  95. package/dist/presets/vercel/runtime/cron-handler.mjs +25 -0
  96. package/dist/presets/vercel/runtime/vercel.web.mjs +2 -4
  97. package/dist/presets/zephyr/runtime/server.mjs +3 -0
  98. package/dist/runtime/internal/cache.d.mts +0 -4
  99. package/dist/runtime/internal/cache.mjs +32 -256
  100. package/dist/runtime/internal/context.d.mts +3 -1
  101. package/dist/runtime/internal/error/dev.d.mts +5 -4
  102. package/dist/runtime/internal/error/dev.mjs +38 -40
  103. package/dist/runtime/internal/error/hooks.d.mts +1 -1
  104. package/dist/runtime/internal/error/prod.d.mts +2 -5
  105. package/dist/runtime/internal/error/prod.mjs +19 -33
  106. package/dist/runtime/internal/error/utils.d.mts +4 -4
  107. package/dist/runtime/internal/meta.d.mts +1 -1
  108. package/dist/runtime/internal/plugin.d.mts +2 -2
  109. package/dist/runtime/internal/route-rules.d.mts +9 -4
  110. package/dist/runtime/internal/route-rules.mjs +9 -1
  111. package/dist/runtime/internal/routes/dev-tasks.d.mts +3 -2
  112. package/dist/runtime/internal/routes/dev-tasks.mjs +6 -2
  113. package/dist/runtime/internal/routes/renderer-template.d.mts +1 -1
  114. package/dist/runtime/internal/routes/renderer-template.dev.d.mts +2 -1
  115. package/dist/runtime/internal/runtime-config.d.mts +1 -1
  116. package/dist/runtime/internal/static.mjs +5 -4
  117. package/dist/runtime/internal/task.d.mts +3 -1
  118. package/dist/runtime/internal/task.mjs +2 -2
  119. package/dist/runtime/internal/vite/dev-entry.mjs +6 -3
  120. package/dist/runtime/internal/vite/dev-worker.mjs +264 -0
  121. package/dist/runtime/meta.mjs +1 -0
  122. package/dist/runtime/nitro.d.mts +2 -0
  123. package/dist/runtime/nitro.mjs +2 -0
  124. package/dist/runtime/virtual/error-handler.mjs +1 -1
  125. package/dist/runtime/virtual/server-assets.d.mts +2 -1
  126. package/dist/runtime/vite.d.mts +1 -1
  127. package/dist/types/index.d.mts +68 -117
  128. package/dist/types/index.mjs +1 -11
  129. package/dist/vite.d.mts +3 -3
  130. package/dist/vite.mjs +236 -233
  131. package/package.json +83 -68
  132. package/skills/nitro/SKILL.md +10 -0
  133. package/skills/nitro/docs/TOC.md +83 -0
  134. package/skills/nitro/docs/_navigation.json +679 -0
  135. package/skills/nitro/docs/config/index.md +1147 -0
  136. package/skills/nitro/docs/deploy/index.md +64 -0
  137. package/skills/nitro/docs/deploy/providers/alwaysdata.md +50 -0
  138. package/skills/nitro/docs/deploy/providers/aws-amplify.md +81 -0
  139. package/skills/nitro/docs/deploy/providers/aws.md +47 -0
  140. package/skills/nitro/docs/deploy/providers/azure.md +72 -0
  141. package/skills/nitro/docs/deploy/providers/cleavr.md +33 -0
  142. package/skills/nitro/docs/deploy/providers/cloudflare.md +375 -0
  143. package/skills/nitro/docs/deploy/providers/deno-deploy.md +66 -0
  144. package/skills/nitro/docs/deploy/providers/digitalocean.md +46 -0
  145. package/skills/nitro/docs/deploy/providers/firebase.md +32 -0
  146. package/skills/nitro/docs/deploy/providers/flightcontrol.md +67 -0
  147. package/skills/nitro/docs/deploy/providers/genezio.md +67 -0
  148. package/skills/nitro/docs/deploy/providers/github-pages.md +68 -0
  149. package/skills/nitro/docs/deploy/providers/gitlab-pages.md +37 -0
  150. package/skills/nitro/docs/deploy/providers/heroku.md +84 -0
  151. package/skills/nitro/docs/deploy/providers/iis.md +38 -0
  152. package/skills/nitro/docs/deploy/providers/koyeb.md +109 -0
  153. package/skills/nitro/docs/deploy/providers/netlify.md +47 -0
  154. package/skills/nitro/docs/deploy/providers/platform-sh.md +37 -0
  155. package/skills/nitro/docs/deploy/providers/render.md +37 -0
  156. package/skills/nitro/docs/deploy/providers/stormkit.md +24 -0
  157. package/skills/nitro/docs/deploy/providers/vercel.md +179 -0
  158. package/skills/nitro/docs/deploy/providers/zeabur.md +19 -0
  159. package/skills/nitro/docs/deploy/providers/zephyr.md +99 -0
  160. package/skills/nitro/docs/deploy/providers/zerops.md +102 -0
  161. package/skills/nitro/docs/deploy/runtimes/bun.md +15 -0
  162. package/skills/nitro/docs/deploy/runtimes/deno.md +19 -0
  163. package/skills/nitro/docs/deploy/runtimes/node.md +63 -0
  164. package/skills/nitro/docs/docs/assets.md +166 -0
  165. package/skills/nitro/docs/docs/cache.md +408 -0
  166. package/skills/nitro/docs/docs/configuration.md +256 -0
  167. package/skills/nitro/docs/docs/database.md +185 -0
  168. package/skills/nitro/docs/docs/index.md +56 -0
  169. package/skills/nitro/docs/docs/lifecycle.md +204 -0
  170. package/skills/nitro/docs/docs/migration.md +215 -0
  171. package/skills/nitro/docs/docs/nightly.md +31 -0
  172. package/skills/nitro/docs/docs/plugins.md +164 -0
  173. package/skills/nitro/docs/docs/quick-start.md +110 -0
  174. package/skills/nitro/docs/docs/renderer.md +322 -0
  175. package/skills/nitro/docs/docs/routing.md +711 -0
  176. package/skills/nitro/docs/docs/server-entry.md +239 -0
  177. package/skills/nitro/docs/docs/storage.md +261 -0
  178. package/skills/nitro/docs/docs/tasks.md +277 -0
  179. package/skills/nitro/docs/examples/api-routes.md +145 -0
  180. package/skills/nitro/docs/examples/auto-imports.md +93 -0
  181. package/skills/nitro/docs/examples/cached-handler.md +81 -0
  182. package/skills/nitro/docs/examples/custom-error-handler.md +98 -0
  183. package/skills/nitro/docs/examples/database.md +157 -0
  184. package/skills/nitro/docs/examples/elysia.md +70 -0
  185. package/skills/nitro/docs/examples/express.md +78 -0
  186. package/skills/nitro/docs/examples/fastify.md +79 -0
  187. package/skills/nitro/docs/examples/hello-world.md +68 -0
  188. package/skills/nitro/docs/examples/hono.md +74 -0
  189. package/skills/nitro/docs/examples/import-alias.md +100 -0
  190. package/skills/nitro/docs/examples/index.md +3 -0
  191. package/skills/nitro/docs/examples/middleware.md +91 -0
  192. package/skills/nitro/docs/examples/mono-jsx.md +68 -0
  193. package/skills/nitro/docs/examples/nano-jsx.md +70 -0
  194. package/skills/nitro/docs/examples/plugins.md +91 -0
  195. package/skills/nitro/docs/examples/renderer.md +113 -0
  196. package/skills/nitro/docs/examples/runtime-config.md +97 -0
  197. package/skills/nitro/docs/examples/server-fetch.md +87 -0
  198. package/skills/nitro/docs/examples/shiki.md +198 -0
  199. package/skills/nitro/docs/examples/virtual-routes.md +74 -0
  200. package/skills/nitro/docs/examples/vite-nitro-plugin.md +79 -0
  201. package/skills/nitro/docs/examples/vite-rsc.md +1041 -0
  202. package/skills/nitro/docs/examples/vite-ssr-html.md +217 -0
  203. package/skills/nitro/docs/examples/vite-ssr-preact.md +247 -0
  204. package/skills/nitro/docs/examples/vite-ssr-react.md +226 -0
  205. package/skills/nitro/docs/examples/vite-ssr-solid.md +256 -0
  206. package/skills/nitro/docs/examples/vite-ssr-tsr-react.md +442 -0
  207. package/skills/nitro/docs/examples/vite-ssr-tss-react.md +444 -0
  208. package/skills/nitro/docs/examples/vite-ssr-vue-router.md +616 -0
  209. package/skills/nitro/docs/examples/vite-trpc.md +335 -0
  210. package/skills/nitro/docs/examples/websocket.md +282 -0
  211. package/skills/nitro/docs/index.md +121 -0
  212. package/dist/_libs/confbox.mjs +0 -2509
  213. package/dist/_libs/nypm+giget+tinyexec.mjs +0 -3603
  214. package/dist/_libs/rc9+c12+dotenv.mjs +0 -972
  215. package/dist/node_modules/hookable/dist/index.mjs +0 -266
  216. package/dist/node_modules/hookable/package.json +0 -52
  217. package/dist/node_modules/youch/build/chunk-4L7RY2JA.js +0 -42
  218. package/dist/node_modules/youch/build/chunk-7QV3D5YX.js +0 -83
  219. package/dist/node_modules/youch/build/chunk-AUGPHE32.js +0 -39
  220. package/dist/node_modules/youch/build/chunk-CM7DWJNZ.js +0 -44
  221. package/dist/node_modules/youch/build/chunk-EJH674NB.js +0 -223
  222. package/dist/node_modules/youch/build/chunk-OIJ3WD7L.js +0 -81
  223. package/dist/node_modules/youch/build/chunk-P36L72PL.js +0 -87
  224. package/dist/node_modules/youch/build/chunk-PE3GG3TN.js +0 -65
  225. package/dist/node_modules/youch/build/chunk-X53OIOJH.js +0 -70
  226. package/dist/presets/_nitro/runtime/nitro-dev.d.mts +0 -2
  227. package/dist/presets/_nitro/runtime/nitro-prerenderer.d.mts +0 -3
  228. package/dist/presets/_nitro/runtime/service-worker.d.mts +0 -2
  229. package/dist/presets/aws-amplify/runtime/aws-amplify.d.mts +0 -2
  230. package/dist/presets/aws-lambda/runtime/_utils.d.mts +0 -8
  231. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.d.mts +0 -2
  232. package/dist/presets/aws-lambda/runtime/aws-lambda.d.mts +0 -3
  233. package/dist/presets/azure/runtime/_utils.d.mts +0 -2
  234. package/dist/presets/azure/runtime/azure-swa.d.mts +0 -5
  235. package/dist/presets/bun/runtime/bun.d.mts +0 -3
  236. package/dist/presets/cloudflare/runtime/_module-handler.d.mts +0 -16
  237. package/dist/presets/cloudflare/runtime/cloudflare-durable.d.mts +0 -11
  238. package/dist/presets/cloudflare/runtime/cloudflare-module.d.mts +0 -3
  239. package/dist/presets/cloudflare/runtime/cloudflare-pages.d.mts +0 -20
  240. package/dist/presets/cloudflare/runtime/plugin.dev.d.mts +0 -3
  241. package/dist/presets/deno/runtime/deno-deploy.d.mts +0 -5
  242. package/dist/presets/deno/runtime/deno-server.d.mts +0 -3
  243. package/dist/presets/netlify/runtime/netlify-edge.d.mts +0 -3
  244. package/dist/presets/netlify/runtime/netlify.d.mts +0 -4
  245. package/dist/presets/node/runtime/node-cluster.d.mts +0 -3
  246. package/dist/presets/node/runtime/node-middleware.d.mts +0 -3
  247. package/dist/presets/node/runtime/node-server.d.mts +0 -3
  248. package/dist/presets/standard/runtime/server.d.mts +0 -3
  249. package/dist/presets/stormkit/runtime/stormkit.d.mts +0 -21
  250. package/dist/presets/vercel/runtime/isr.d.mts +0 -2
  251. package/dist/presets/vercel/runtime/vercel.node.d.mts +0 -3
  252. package/dist/presets/vercel/runtime/vercel.web.d.mts +0 -8
  253. package/dist/presets/winterjs/runtime/winterjs.d.mts +0 -2
  254. package/dist/presets/zeabur/runtime/zeabur.d.mts +0 -3
  255. package/dist/runtime/internal/vite/node-runner.mjs +0 -359
package/dist/_presets.mjs CHANGED
@@ -1,18 +1,16 @@
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 importDep } from "./_chunks/utils.mjs";
5
4
  import { builtinModules } from "node:module";
6
- import consola$1 from "consola";
5
+ import consola from "consola";
7
6
  import { existsSync, promises } from "node:fs";
8
7
  import fsp, { readFile, writeFile } from "node:fs/promises";
9
8
  import { dirname, extname, relative, resolve } from "node:path";
10
9
  import { defu } from "defu";
11
- import { hasProtocol, joinURL, withLeadingSlash, withTrailingSlash, withoutLeadingSlash } from "ufo";
12
10
  import { presetsDir, runtimeDir, version } from "nitro/meta";
11
+ import { hasProtocol, joinURL, withLeadingSlash, withTrailingSlash, withoutLeadingSlash } from "ufo";
13
12
  import { colors } from "consola/utils";
14
13
  import { kebabCase } from "scule";
15
-
16
14
  //#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);
@@ -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,74 +49,57 @@ 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
-
58
+ }, { name: "nitro-prerender" })];
74
59
  //#endregion
75
60
  //#region src/presets/_nitro/preset.ts
76
- var preset_default$26 = [
61
+ var preset_default$27 = [
77
62
  ...base_worker_default,
78
63
  ...nitro_dev_default,
79
64
  ...nitro_prerender_default
80
65
  ];
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
66
+ var preset_default$26 = [
67
+ defineNitroPreset({
68
+ static: true,
69
+ output: {
70
+ dir: "{{ rootDir }}/.output",
71
+ publicDir: "{{ output.dir }}/public"
72
+ },
73
+ prerender: { crawlLinks: true },
74
+ commands: { preview: "npx serve ./public" }
75
+ }, {
76
+ name: "static",
77
+ static: true
78
+ }),
79
+ defineNitroPreset({
80
+ extends: "static",
81
+ commands: { deploy: "npx gh-pages --dotfiles -d ./public" },
82
+ prerender: { routes: ["/", "/404.html"] },
83
+ hooks: { async compiled(nitro) {
84
+ await fsp.writeFile(join$1(nitro.options.output.publicDir, ".nojekyll"), "");
85
+ } }
86
+ }, {
87
+ name: "github-pages",
88
+ static: true
89
+ }),
90
+ defineNitroPreset({
91
+ extends: "static",
92
+ prerender: { routes: ["/", "/404.html"] }
93
+ }, {
94
+ name: "gitlab-pages",
95
+ static: true
96
+ })
118
97
  ];
119
-
120
- //#endregion
121
- //#region src/presets/alwaysdata/preset.ts
122
- const alwaysdata = defineNitroPreset({
98
+ var preset_default$25 = [defineNitroPreset({
123
99
  extends: "node-server",
124
100
  serveStatic: true,
125
101
  commands: { deploy: "rsync -rRt --info=progress2 ./ [account]@ssh-[account].alwaysdata.net:www/my-app" }
126
- }, { name: "alwaysdata" });
127
- var preset_default$24 = [alwaysdata];
128
-
102
+ }, { name: "alwaysdata" })];
129
103
  //#endregion
130
104
  //#region src/presets/aws-amplify/utils.ts
131
105
  async function writeAmplifyFiles(nitro) {
@@ -133,9 +107,9 @@ async function writeAmplifyFiles(nitro) {
133
107
  const routes = [];
134
108
  let hasWildcardPublicAsset = false;
135
109
  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,
110
+ const { path, cacheControl } = nitro.options.awsAmplify?.imageOptimization || {};
111
+ if (path) routes.push({
112
+ path,
139
113
  target: {
140
114
  kind: "ImageOptimization",
141
115
  cacheControl
@@ -188,10 +162,7 @@ async function writeAmplifyFiles(nitro) {
188
162
  await writeFile(resolve(outDir, "deploy-manifest.json"), JSON.stringify(deployManifest, null, 2));
189
163
  if (!nitro.options.static) await writeFile(resolve(outDir, "compute/default/server.js"), `import("./index.mjs")`);
190
164
  }
191
-
192
- //#endregion
193
- //#region src/presets/aws-amplify/preset.ts
194
- const awsAmplify = defineNitroPreset({
165
+ var preset_default$24 = [defineNitroPreset({
195
166
  entry: "./aws-amplify/runtime/aws-amplify",
196
167
  manifest: { deploymentId: process.env.AWS_JOB_ID },
197
168
  serveStatic: true,
@@ -207,32 +178,25 @@ const awsAmplify = defineNitroPreset({
207
178
  }, {
208
179
  name: "aws-amplify",
209
180
  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({
181
+ })];
182
+ var preset_default$23 = [defineNitroPreset({
216
183
  entry: "./aws-lambda/runtime/aws-lambda",
217
184
  awsLambda: { streaming: false },
218
185
  hooks: { "rollup:before": (nitro, rollupConfig) => {
219
186
  if (nitro.options.awsLambda?.streaming) rollupConfig.input += "-streaming";
220
187
  } }
221
- }, { name: "aws-lambda" });
222
- var preset_default$22 = [awsLambda];
223
-
188
+ }, { name: "aws-lambda" })];
224
189
  //#endregion
225
190
  //#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;
191
+ function prettyPath(p, highlight = true) {
192
+ p = relative$1(process.cwd(), p);
193
+ return highlight ? colors.cyan(p) : p;
229
194
  }
230
195
  async function writeFile$1(file, contents, log = false) {
231
196
  await fsp.mkdir(dirname$1(file), { recursive: true });
232
197
  await fsp.writeFile(file, contents, typeof contents === "string" ? "utf8" : void 0);
233
- if (log) consola$1.info("Generated", prettyPath(file));
198
+ if (log) consola.info("Generated", prettyPath(file));
234
199
  }
235
-
236
200
  //#endregion
237
201
  //#region src/presets/azure/utils.ts
238
202
  async function writeSWARoutes(nitro) {
@@ -321,10 +285,7 @@ async function writeSWARoutes(nitro) {
321
285
  await writeFile$1(resolve$1(nitro.options.output.publicDir, relativePrefix ? `${relativePrefix}/index.html` : "index.html"), "");
322
286
  }
323
287
  }
324
-
325
- //#endregion
326
- //#region src/presets/azure/preset.ts
327
- const azureSWA = defineNitroPreset({
288
+ var preset_default$22 = [defineNitroPreset({
328
289
  entry: "./azure/runtime/azure-swa",
329
290
  output: {
330
291
  serverDir: "{{ output.dir }}/server/functions",
@@ -337,35 +298,20 @@ const azureSWA = defineNitroPreset({
337
298
  }, {
338
299
  name: "azure-swa",
339
300
  stdName: "azure_static"
340
- });
341
- var preset_default$21 = [azureSWA];
342
-
343
- //#endregion
344
- //#region src/presets/bun/preset.ts
345
- const bun = defineNitroPreset({
301
+ })];
302
+ var preset_default$21 = [defineNitroPreset({
346
303
  entry: "./bun/runtime/bun",
347
304
  serveStatic: true,
348
- exportConditions: [
349
- "bun",
350
- "node",
351
- "import",
352
- "default"
353
- ],
305
+ exportConditions: ["bun"],
354
306
  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({
307
+ }, { name: "bun" })];
308
+ var preset_default$20 = [defineNitroPreset({
361
309
  extends: "node-server",
362
310
  serveStatic: true
363
311
  }, {
364
312
  name: "cleavr",
365
313
  stdName: "cleavr"
366
- });
367
- var preset_default$19 = [cleavr];
368
-
314
+ })];
369
315
  //#endregion
370
316
  //#region src/presets/cloudflare/unenv/node-compat.ts
371
317
  const builtnNodeModules$1 = [
@@ -419,7 +365,6 @@ const builtnNodeModules$1 = [
419
365
  "node:util/types",
420
366
  "node:zlib"
421
367
  ];
422
-
423
368
  //#endregion
424
369
  //#region src/presets/cloudflare/unenv/preset.ts
425
370
  const unenvCfNodeCompat = {
@@ -443,7 +388,6 @@ const unenvCfExternals = {
443
388
  "cloudflare:workflows"
444
389
  ]
445
390
  };
446
-
447
391
  //#endregion
448
392
  //#region src/presets/cloudflare/utils.ts
449
393
  async function writeCFRoutes(nitro) {
@@ -472,22 +416,22 @@ async function writeCFRoutes(nitro) {
472
416
  "_worker.js",
473
417
  "_worker.js.map",
474
418
  "nitro.json",
475
- ...routes.exclude.map((path$1) => withoutLeadingSlash(path$1.replace(/\/\*$/, "/**")))
419
+ ...routes.exclude.map((path) => withoutLeadingSlash(path.replace(/\/\*$/, "/**")))
476
420
  ]
477
421
  });
478
422
  routes.exclude.push(...publicAssetFiles.map((i) => withLeadingSlash(i).replace(/\/index\.html$/, "").replace(/\.html$/, "") || "/").sort(comparePaths));
479
423
  routes.exclude.splice(100 - routes.include.length);
480
424
  await writeRoutes();
481
425
  }
482
- function comparePaths(a$1, b) {
483
- return a$1.split("/").length - b.split("/").length || a$1.localeCompare(b);
426
+ function comparePaths(a, b) {
427
+ return a.split("/").length - b.split("/").length || a.localeCompare(b);
484
428
  }
485
429
  async function writeCFHeaders(nitro, outdir) {
486
430
  const headersPath = join$1(outdir === "public" ? nitro.options.output.publicDir : nitro.options.output.dir, "_headers");
487
431
  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");
432
+ const rules = Object.entries(nitro.options.routeRules).sort((a, b) => b[0].split(/\/(?!\*)/).length - a[0].split(/\/(?!\*)/).length);
433
+ for (const [path, routeRules] of rules.filter(([_, routeRules]) => routeRules.headers)) {
434
+ const headers = [joinURL(nitro.options.baseURL, path.replace("/**", "/*")), ...Object.entries({ ...routeRules.headers }).map(([header, value]) => ` ${header}: ${value}`)].join("\n");
491
435
  contents.push(headers);
492
436
  }
493
437
  if (existsSync(headersPath)) {
@@ -504,8 +448,8 @@ async function writeCFHeaders(nitro, outdir) {
504
448
  async function writeCFPagesRedirects(nitro) {
505
449
  const redirectsPath = join$1(nitro.options.output.dir, "_redirects");
506
450
  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)) {
451
+ const rules = Object.entries(nitro.options.routeRules).sort((a, b) => a[0].split(/\/(?!\*)/).length - b[0].split(/\/(?!\*)/).length);
452
+ for (const [key, routeRules] of rules.filter(([_, routeRules]) => routeRules.redirect)) {
509
453
  const code = routeRules.redirect.status;
510
454
  const from = joinURL(nitro.options.baseURL, key.replace("/**", "/*"));
511
455
  const to = hasProtocol(routeRules.redirect.to, { acceptRelative: true }) ? routeRules.redirect.to : joinURL(nitro.options.baseURL, routeRules.redirect.to);
@@ -529,9 +473,9 @@ async function enableNodeCompat(nitro) {
529
473
  if (nitro.options.cloudflare.nodeCompat) nitro.options.unenv.push(unenvCfNodeCompat);
530
474
  }
531
475
  const extensionParsers = {
532
- ".json": h,
533
- ".jsonc": h,
534
- ".toml": Q
476
+ ".json": r,
477
+ ".jsonc": r,
478
+ ".toml": i
535
479
  };
536
480
  async function readWranglerConfig(nitro) {
537
481
  const configPath = await findNearestFile([
@@ -581,6 +525,12 @@ async function writeWranglerConfig(nitro, cfTarget) {
581
525
  globs: ["**/*.mjs", "**/*.js"]
582
526
  });
583
527
  }
528
+ if (nitro.options.experimental.tasks && Object.keys(nitro.options.scheduledTasks || {}).length > 0 && cfTarget !== "pages") {
529
+ const schedules = Object.keys(nitro.options.scheduledTasks);
530
+ wranglerConfig.triggers = defu(wranglerConfig.triggers, { crons: [] });
531
+ const existingCrons = new Set(wranglerConfig.triggers.crons);
532
+ for (const schedule of schedules) if (!existingCrons.has(schedule)) wranglerConfig.triggers.crons.push(schedule);
533
+ }
584
534
  await writeFile$1(wranglerConfigPath, JSON.stringify(wranglerConfig, null, 2), true);
585
535
  const configPath = join$1(nitro.options.rootDir, ".wrangler/deploy/config.json");
586
536
  await writeFile$1(configPath, JSON.stringify({ configPath: relative(dirname(configPath), wranglerConfigPath) }), true);
@@ -591,7 +541,6 @@ async function generateWorkerName(nitro) {
591
541
  const subpath = relative(nitro.options.workspaceDir, nitro.options.rootDir);
592
542
  return `${gitRepo || pkgName}/${subpath}`.toLowerCase().replace(/[^a-zA-Z0-9-]/g, "-").replace(/-$/, "");
593
543
  }
594
-
595
544
  //#endregion
596
545
  //#region src/presets/cloudflare/dev.ts
597
546
  async function cloudflareDevModule(nitro) {
@@ -635,7 +584,6 @@ async function cloudflareDevModule(nitro) {
635
584
  extensions: [".mjs", ".ts"]
636
585
  }));
637
586
  }
638
-
639
587
  //#endregion
640
588
  //#region src/presets/cloudflare/entry-exports.ts
641
589
  const RESOLVE_EXTENSIONS = [
@@ -665,7 +613,6 @@ function resolveExportsEntry(nitro) {
665
613
  else if (entry && !nitro.options.cloudflare?.exports) nitro.logger.info(`Detected \`${prettyPath$1(entry)}\` as Cloudflare entrypoint.`);
666
614
  return entry;
667
615
  }
668
-
669
616
  //#endregion
670
617
  //#region src/presets/cloudflare/preset.ts
671
618
  const cloudflarePages = defineNitroPreset({
@@ -741,57 +688,54 @@ const cloudflareDev = defineNitroPreset({
741
688
  compatibilityDate: "2025-07-13",
742
689
  dev: true
743
690
  });
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 = [
691
+ var preset_default$19 = [
788
692
  cloudflarePages,
789
693
  cloudflarePagesStatic,
790
- cloudflareModule,
791
- cloudflareDurable,
694
+ defineNitroPreset({
695
+ extends: "base-worker",
696
+ entry: "./cloudflare/runtime/cloudflare-module",
697
+ output: { publicDir: "{{ output.dir }}/public/{{ baseURL }}" },
698
+ exportConditions: ["workerd"],
699
+ minify: false,
700
+ commands: {
701
+ preview: "npx wrangler --cwd ./ dev",
702
+ deploy: "npx wrangler --cwd ./ deploy"
703
+ },
704
+ rollupConfig: { output: {
705
+ format: "esm",
706
+ exports: "named",
707
+ inlineDynamicImports: false
708
+ } },
709
+ wasm: {
710
+ lazy: false,
711
+ esmImport: true
712
+ },
713
+ hooks: {
714
+ "build:before": async (nitro) => {
715
+ nitro.options.unenv.push(unenvCfExternals);
716
+ await enableNodeCompat(nitro);
717
+ await setupEntryExports(nitro);
718
+ },
719
+ async compiled(nitro) {
720
+ await writeWranglerConfig(nitro, "module");
721
+ await writeCFHeaders(nitro, "public");
722
+ await writeFile$1(resolve$1(nitro.options.output.dir, "package.json"), JSON.stringify({
723
+ private: true,
724
+ main: "./server/index.mjs"
725
+ }, null, 2));
726
+ await writeFile$1(resolve$1(nitro.options.output.dir, "package-lock.json"), JSON.stringify({ lockfileVersion: 1 }, null, 2));
727
+ }
728
+ }
729
+ }, {
730
+ name: "cloudflare-module",
731
+ stdName: "cloudflare_workers"
732
+ }),
733
+ defineNitroPreset({
734
+ extends: "cloudflare-module",
735
+ entry: "./cloudflare/runtime/cloudflare-durable"
736
+ }, { name: "cloudflare-durable" }),
792
737
  cloudflareDev
793
738
  ];
794
-
795
739
  //#endregion
796
740
  //#region src/presets/deno/unenv/node-compat.ts
797
741
  const builtnNodeModules = [
@@ -863,7 +807,6 @@ const builtnNodeModules = [
863
807
  "node:worker_threads",
864
808
  "node:zlib"
865
809
  ];
866
-
867
810
  //#endregion
868
811
  //#region src/presets/deno/unenv/preset.ts
869
812
  const unenvDeno = {
@@ -878,10 +821,7 @@ const unenvDeno = {
878
821
  Buffer: ["node:buffer", "Buffer"]
879
822
  }
880
823
  };
881
-
882
- //#endregion
883
- //#region src/presets/deno/preset.ts
884
- const denoDeploy = defineNitroPreset({
824
+ var preset_default$18 = [defineNitroPreset({
885
825
  entry: "./deno/runtime/deno-deploy",
886
826
  manifest: { deploymentId: process.env.DENO_DEPLOYMENT_ID },
887
827
  exportConditions: ["deno"],
@@ -889,7 +829,7 @@ const denoDeploy = defineNitroPreset({
889
829
  serveStatic: "deno",
890
830
  commands: {
891
831
  preview: "",
892
- deploy: "cd ./ && deployctl deploy --project=<project_name> server/index.ts"
832
+ deploy: "cd ./ && deno run -A jsr:@deno/deployctl deploy server/index.ts"
893
833
  },
894
834
  unenv: unenvDeno,
895
835
  rollupConfig: {
@@ -901,8 +841,7 @@ const denoDeploy = defineNitroPreset({
901
841
  format: "esm"
902
842
  }
903
843
  }
904
- }, { name: "deno-deploy" });
905
- const denoServer = defineNitroPreset({
844
+ }, { name: "deno-deploy" }), defineNitroPreset({
906
845
  entry: "./deno/runtime/deno-server",
907
846
  serveStatic: true,
908
847
  exportConditions: ["deno"],
@@ -917,25 +856,17 @@ const denoServer = defineNitroPreset({
917
856
  }, {
918
857
  aliases: ["deno"],
919
858
  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({
859
+ })];
860
+ var preset_default$17 = [defineNitroPreset({
926
861
  extends: "node-server",
927
862
  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({
863
+ }, { name: "digital-ocean" })];
864
+ var preset_default$16 = [defineNitroPreset({
934
865
  extends: "node-server",
935
866
  serveStatic: true,
936
867
  hooks: { async compiled(nitro) {
937
868
  const serverEntry = join$1(nitro.options.output.serverDir, "index.mjs");
938
- await writeFile$1(join$1(nitro.options.rootDir, ".apphosting/bundle.yaml"), gr({
869
+ await writeFile$1(join$1(nitro.options.rootDir, ".apphosting/bundle.yaml"), a({
939
870
  version: "v1",
940
871
  runConfig: {
941
872
  runCommand: `node ${relative$1(nitro.options.rootDir, serverEntry)}`,
@@ -953,30 +884,16 @@ const firebaseAppHosting = defineNitroPreset({
953
884
  }, {
954
885
  name: "firebase-app-hosting",
955
886
  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({
887
+ })];
888
+ var preset_default$15 = [defineNitroPreset({
962
889
  extends: "node-server",
963
890
  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({
891
+ }, { name: "flight-control" })];
892
+ var preset_default$14 = [defineNitroPreset({ extends: "aws_lambda" }, { name: "genezio" })];
893
+ var preset_default$13 = [defineNitroPreset({
975
894
  extends: "node-server",
976
895
  serveStatic: true
977
- }, { name: "heroku" });
978
- var preset_default$12 = [heroku];
979
-
896
+ }, { name: "heroku" })];
980
897
  //#endregion
981
898
  //#region src/presets/iis/utils.ts
982
899
  async function writeIISFiles(nitro) {
@@ -993,7 +910,7 @@ async function writeIISNodeFiles(nitro) {
993
910
  `);
994
911
  }
995
912
  async function iisnodeXmlTemplate(nitro) {
996
- const path$1 = resolve$1(nitro.options.rootDir, "web.config");
913
+ const path = resolve$1(nitro.options.rootDir, "web.config");
997
914
  const originalString = `<?xml version="1.0" encoding="utf-8"?>
998
915
  <!--
999
916
  This configuration file is required if iisnode is used to run node processes behind
@@ -1059,8 +976,8 @@ async function iisnodeXmlTemplate(nitro) {
1059
976
  </system.webServer>
1060
977
  </configuration>
1061
978
  `;
1062
- if (existsSync(path$1)) {
1063
- const fileString = await readFile(path$1, "utf8");
979
+ if (existsSync(path)) {
980
+ const fileString = await readFile(path, "utf8");
1064
981
  const originalWebConfig = await parseXmlDoc(originalString);
1065
982
  const fileWebConfig = await parseXmlDoc(fileString);
1066
983
  if (nitro.options.iis?.mergeConfig && !nitro.options.iis.overrideConfig) return buildNewXmlDoc(defu(fileWebConfig, originalWebConfig));
@@ -1069,7 +986,7 @@ async function iisnodeXmlTemplate(nitro) {
1069
986
  return originalString;
1070
987
  }
1071
988
  async function iisXmlTemplate(nitro) {
1072
- const path$1 = resolve$1(nitro.options.rootDir, "web.config");
989
+ const path = resolve$1(nitro.options.rootDir, "web.config");
1073
990
  const originalString = `<?xml version="1.0" encoding="UTF-8"?>
1074
991
  <configuration>
1075
992
  <system.webServer>
@@ -1085,8 +1002,8 @@ async function iisXmlTemplate(nitro) {
1085
1002
  </system.webServer>
1086
1003
  </configuration>
1087
1004
  `;
1088
- if (existsSync(path$1)) {
1089
- const fileString = await readFile(path$1, "utf8");
1005
+ if (existsSync(path)) {
1006
+ const fileString = await readFile(path, "utf8");
1090
1007
  const originalWebConfig = await parseXmlDoc(originalString);
1091
1008
  const fileWebConfig = await parseXmlDoc(fileString);
1092
1009
  if (nitro.options.iis?.mergeConfig && !nitro.options.iis.overrideConfig) return buildNewXmlDoc(defu(fileWebConfig, originalWebConfig));
@@ -1108,33 +1025,23 @@ async function buildNewXmlDoc(xmlObj) {
1108
1025
  const { Builder } = await import("xml2js");
1109
1026
  return new Builder().buildObject({ ...xmlObj });
1110
1027
  }
1111
-
1112
- //#endregion
1113
- //#region src/presets/iis/preset.ts
1114
- const iisHandler = defineNitroPreset({
1028
+ var preset_default$12 = [defineNitroPreset({
1115
1029
  extends: "node-server",
1116
1030
  serveStatic: true,
1117
1031
  hooks: { async compiled(nitro) {
1118
1032
  await writeIISFiles(nitro);
1119
1033
  } }
1120
- }, { name: "iis-handler" });
1121
- const iisNode = defineNitroPreset({
1034
+ }, { name: "iis-handler" }), defineNitroPreset({
1122
1035
  extends: "node-server",
1123
1036
  serveStatic: true,
1124
1037
  hooks: { async compiled(nitro) {
1125
1038
  await writeIISNodeFiles(nitro);
1126
1039
  } }
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({
1040
+ }, { name: "iis-node" })];
1041
+ var preset_default$11 = [defineNitroPreset({
1133
1042
  extends: "node-server",
1134
1043
  serveStatic: true
1135
- }, { name: "koyeb" });
1136
- var preset_default$10 = [koyeb];
1137
-
1044
+ }, { name: "koyeb" })];
1138
1045
  //#endregion
1139
1046
  //#region src/presets/netlify/utils.ts
1140
1047
  async function writeRedirects(nitro) {
@@ -1144,8 +1051,8 @@ async function writeRedirects(nitro) {
1144
1051
  const staticFallback = existsSync(join$1(nitro.options.output.publicDir, "404.html")) ? "/* /404.html 404" : "";
1145
1052
  contents += staticFallback;
1146
1053
  }
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)) {
1054
+ const rules = Object.entries(nitro.options.routeRules).sort((a, b) => a[0].split(/\/(?!\*)/).length - b[0].split(/\/(?!\*)/).length);
1055
+ for (const [key, routeRules] of rules.filter(([_, routeRules]) => routeRules.redirect)) {
1149
1056
  let code = routeRules.redirect.status;
1150
1057
  if (code === 307) code = 302;
1151
1058
  if (code === 308) code = 301;
@@ -1165,9 +1072,9 @@ async function writeRedirects(nitro) {
1165
1072
  async function writeHeaders(nitro) {
1166
1073
  const headersPath = join$1(nitro.options.output.publicDir, "_headers");
1167
1074
  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");
1075
+ const rules = Object.entries(nitro.options.routeRules).sort((a, b) => b[0].split(/\/(?!\*)/).length - a[0].split(/\/(?!\*)/).length);
1076
+ for (const [path, routeRules] of rules.filter(([_, routeRules]) => routeRules.headers)) {
1077
+ const headers = [path.replace("/**", "/*"), ...Object.entries({ ...routeRules.headers }).map(([header, value]) => ` ${header}: ${value}`)].join("\n");
1171
1078
  contents += headers + "\n";
1172
1079
  }
1173
1080
  if (existsSync(headersPath)) {
@@ -1182,7 +1089,7 @@ async function writeHeaders(nitro) {
1182
1089
  await promises.writeFile(headersPath, contents);
1183
1090
  }
1184
1091
  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, "*"))];
1092
+ return ["/.netlify/*", ...publicAssets.filter((a) => a.fallthrough !== true && a.baseURL && a.baseURL !== "/").map((a) => joinURL(baseURL, a.baseURL, "*"))];
1186
1093
  }
1187
1094
  function generateNetlifyFunction(nitro) {
1188
1095
  return `
@@ -1201,93 +1108,86 @@ export const config = {
1201
1108
  function getGeneratorString(nitro) {
1202
1109
  return `${nitro.options.framework.name}@${nitro.options.framework.version}`;
1203
1110
  }
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
1111
+ var preset_default$10 = [
1112
+ defineNitroPreset({
1113
+ entry: "./netlify/runtime/netlify",
1114
+ manifest: { deploymentId: process.env.DEPLOY_ID },
1115
+ output: {
1116
+ dir: "{{ rootDir }}/.netlify/functions-internal",
1117
+ publicDir: "{{ rootDir }}/dist/{{ baseURL }}"
1118
+ },
1119
+ prerender: { autoSubfolderIndex: false },
1120
+ rollupConfig: { output: { entryFileNames: "main.mjs" } },
1121
+ hooks: { async compiled(nitro) {
1122
+ await writeHeaders(nitro);
1123
+ await writeRedirects(nitro);
1124
+ await promises.writeFile(join$1(nitro.options.output.dir, "server", "server.mjs"), generateNetlifyFunction(nitro));
1125
+ if (nitro.options.netlify?.images) {
1126
+ nitro.options.netlify.config ||= {};
1127
+ nitro.options.netlify.config.images ||= nitro.options.netlify?.images;
1128
+ }
1129
+ if (Object.keys(nitro.options.netlify?.config || {}).length > 0) {
1130
+ const configPath = join$1(nitro.options.output.dir, "../deploy/v1/config.json");
1131
+ await promises.mkdir(dirname$1(configPath), { recursive: true });
1132
+ await promises.writeFile(configPath, JSON.stringify(nitro.options.netlify?.config), "utf8");
1133
+ }
1134
+ } }
1135
+ }, {
1136
+ name: "netlify",
1137
+ stdName: "netlify"
1138
+ }),
1139
+ defineNitroPreset({
1140
+ extends: "base-worker",
1141
+ entry: "./netlify/runtime/netlify-edge",
1142
+ manifest: { deploymentId: process.env.DEPLOY_ID },
1143
+ exportConditions: ["netlify"],
1144
+ output: {
1145
+ serverDir: "{{ rootDir }}/.netlify/edge-functions/server",
1146
+ publicDir: "{{ rootDir }}/dist/{{ baseURL }}"
1147
+ },
1148
+ prerender: { autoSubfolderIndex: false },
1149
+ rollupConfig: { output: {
1150
+ entryFileNames: "server.js",
1151
+ format: "esm"
1152
+ } },
1153
+ unenv: unenvDeno,
1154
+ hooks: { async compiled(nitro) {
1155
+ await writeHeaders(nitro);
1156
+ await writeRedirects(nitro);
1157
+ const manifest = {
1158
+ version: 1,
1159
+ functions: [{
1160
+ path: "/*",
1161
+ excludedPath: getStaticPaths(nitro.options.publicAssets, nitro.options.baseURL),
1162
+ name: "edge server handler",
1163
+ function: "server",
1164
+ generator: getGeneratorString(nitro)
1165
+ }]
1166
+ };
1167
+ const manifestPath = join$1(nitro.options.rootDir, ".netlify/edge-functions/manifest.json");
1168
+ await promises.mkdir(dirname$1(manifestPath), { recursive: true });
1169
+ await promises.writeFile(manifestPath, JSON.stringify(manifest, null, 2));
1170
+ } }
1171
+ }, { name: "netlify-edge" }),
1172
+ defineNitroPreset({
1173
+ extends: "static",
1174
+ manifest: { deploymentId: process.env.DEPLOY_ID },
1175
+ output: {
1176
+ dir: "{{ rootDir }}/dist",
1177
+ publicDir: "{{ rootDir }}/dist/{{ baseURL }}"
1178
+ },
1179
+ prerender: { autoSubfolderIndex: false },
1180
+ commands: { preview: "npx serve ./" },
1181
+ hooks: { async compiled(nitro) {
1182
+ await writeHeaders(nitro);
1183
+ await writeRedirects(nitro);
1184
+ } }
1185
+ }, {
1186
+ name: "netlify-static",
1187
+ stdName: "netlify",
1188
+ static: true
1189
+ })
1289
1190
  ];
1290
-
1291
1191
  //#endregion
1292
1192
  //#region src/presets/node/cluster.ts
1293
1193
  const nodeCluster = defineNitroPreset({
@@ -1321,43 +1221,27 @@ if (cluster.isPrimary) {
1321
1221
  }
1322
1222
  `;
1323
1223
  }
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,
1224
+ var preset_default$9 = [
1225
+ defineNitroPreset({
1226
+ entry: "./node/runtime/node-server",
1227
+ serveStatic: true,
1228
+ commands: { preview: "node ./server/index.mjs" }
1229
+ }, {
1230
+ name: "node-server",
1231
+ aliases: ["node"]
1232
+ }),
1338
1233
  nodeCluster,
1339
- nodeMiddleware
1234
+ defineNitroPreset({ entry: "./node/runtime/node-middleware" }, { name: "node-middleware" })
1340
1235
  ];
1341
-
1342
- //#endregion
1343
- //#region src/presets/platform.sh/preset.ts
1344
- const platformSh = defineNitroPreset({
1236
+ var preset_default$8 = [defineNitroPreset({
1345
1237
  extends: "node-server",
1346
1238
  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({
1239
+ }, { name: "platform-sh" })];
1240
+ var preset_default$7 = [defineNitroPreset({
1353
1241
  extends: "node-server",
1354
1242
  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({
1243
+ }, { name: "render-com" })];
1244
+ var preset_default$6 = [defineNitroPreset({
1361
1245
  entry: "./standard/runtime/server",
1362
1246
  serveStatic: false,
1363
1247
  output: { publicDir: "{{ output.dir }}/public/{{ baseURL }}" },
@@ -1369,12 +1253,8 @@ const standard = defineNitroPreset({
1369
1253
  "srvx/node": "srvx/node",
1370
1254
  "srvx/generic": "srvx/generic"
1371
1255
  }
1372
- }, { name: "standard" });
1373
- var preset_default$5 = [standard];
1374
-
1375
- //#endregion
1376
- //#region src/presets/stormkit/preset.ts
1377
- const stormkit = defineNitroPreset({
1256
+ }, { name: "standard" })];
1257
+ var preset_default$5 = [defineNitroPreset({
1378
1258
  entry: "./stormkit/runtime/stormkit",
1379
1259
  output: {
1380
1260
  dir: "{{ rootDir }}/.stormkit",
@@ -1383,16 +1263,26 @@ const stormkit = defineNitroPreset({
1383
1263
  }, {
1384
1264
  name: "stormkit",
1385
1265
  stdName: "stormkit"
1386
- });
1387
- var preset_default$4 = [stormkit];
1388
-
1266
+ })];
1389
1267
  //#endregion
1390
1268
  //#region src/presets/vercel/runtime/isr.ts
1391
1269
  const ISR_URL_PARAM = "__isr_route";
1392
-
1393
1270
  //#endregion
1394
1271
  //#region src/presets/vercel/utils.ts
1395
- const SUPPORTED_NODE_VERSIONS = [20, 22];
1272
+ const SUPPORTED_NODE_VERSIONS = [
1273
+ 20,
1274
+ 22,
1275
+ 24
1276
+ ];
1277
+ const UNSUPPORTED_PROXY_OPTIONS = [
1278
+ "headers",
1279
+ "forwardHeaders",
1280
+ "filterHeaders",
1281
+ "fetchOptions",
1282
+ "cookieDomainRewrite",
1283
+ "cookiePathRewrite",
1284
+ "onResponse"
1285
+ ];
1396
1286
  const FALLBACK_ROUTE = "/__server";
1397
1287
  const ISR_SUFFIX = "-isr";
1398
1288
  const SAFE_FS_CHAR_RE = /[^a-zA-Z0-9_.[\]/]/g;
@@ -1422,7 +1312,7 @@ async function generateFunctionFiles(nitro) {
1422
1312
  await writePrerenderConfig(funcPrefix + ".prerender-config.json", value.isr, nitro.options.vercel?.config?.bypassToken);
1423
1313
  }
1424
1314
  if (o11Routes.length === 0) return;
1425
- const _getRouteRules = (path$1) => defu({}, ...nitro.routing.routeRules.matchAll("", path$1).reverse());
1315
+ const _getRouteRules = (path) => defu({}, ...nitro.routing.routeRules.matchAll("", path).reverse());
1426
1316
  for (const route of o11Routes) {
1427
1317
  if (_getRouteRules(route.src).isr) continue;
1428
1318
  const funcPrefix = resolve$1(nitro.options.output.serverDir, "..", route.dest);
@@ -1436,13 +1326,18 @@ async function generateStaticFiles(nitro) {
1436
1326
  await writeFile$1(buildConfigPath, JSON.stringify(buildConfig, null, 2));
1437
1327
  }
1438
1328
  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);
1329
+ const rules = Object.entries(nitro.options.routeRules).sort((a, b) => b[0].split(/\/(?!\*)/).length - a[0].split(/\/(?!\*)/).length);
1330
+ const cdnProxyPaths = new Set(rules.filter(([_, routeRules]) => routeRules.proxy && canUseVercelRewrite(routeRules.proxy)).map(([path]) => path));
1440
1331
  const config = defu(nitro.options.vercel?.config, {
1441
1332
  version: 3,
1333
+ framework: {
1334
+ name: nitro.options.framework.name,
1335
+ version: nitro.options.framework.version
1336
+ },
1442
1337
  overrides: { ...Object.fromEntries((nitro._prerenderedRoutes?.filter((r) => r.fileName !== r.route) || []).map(({ route, fileName }) => [withoutLeadingSlash(fileName), { path: route.replace(/^\//, "") }])) },
1443
1338
  routes: [
1444
- ...rules.filter(([_, routeRules]) => routeRules.redirect || routeRules.headers).map(([path$1, routeRules]) => {
1445
- let route = { src: path$1.replace("/**", "/(.*)") };
1339
+ ...rules.filter(([path, routeRules]) => (routeRules.redirect || routeRules.headers) && !cdnProxyPaths.has(path)).map(([path, routeRules]) => {
1340
+ let route = { src: path.replace("/**", "/(.*)") };
1446
1341
  if (routeRules.redirect) route = defu(route, {
1447
1342
  status: routeRules.redirect.status,
1448
1343
  headers: { Location: routeRules.redirect.to.replace("/**", "/$1") }
@@ -1450,6 +1345,15 @@ function generateBuildConfig(nitro, o11Routes) {
1450
1345
  if (routeRules.headers) route = defu(route, { headers: routeRules.headers });
1451
1346
  return route;
1452
1347
  }),
1348
+ ...rules.filter(([path]) => cdnProxyPaths.has(path)).map(([path, routeRules]) => {
1349
+ const proxy = routeRules.proxy;
1350
+ const route = {
1351
+ src: path.replace("/**", "/(.*)"),
1352
+ dest: proxy.to.replace("/**", "/$1")
1353
+ };
1354
+ if (routeRules.headers) route.headers = routeRules.headers;
1355
+ return route;
1356
+ }),
1453
1357
  ...nitro.options.vercel?.skewProtection && nitro.options.manifest?.deploymentId ? [{
1454
1358
  src: "/.*",
1455
1359
  has: [{
@@ -1468,6 +1372,13 @@ function generateBuildConfig(nitro, o11Routes) {
1468
1372
  { handle: "filesystem" }
1469
1373
  ]
1470
1374
  });
1375
+ if (nitro.options.experimental.tasks && Object.keys(nitro.options.scheduledTasks || {}).length > 0) {
1376
+ const cronPath = nitro.options.vercel.cronHandlerRoute || "/_vercel/cron";
1377
+ config.crons = [...Object.keys(nitro.options.scheduledTasks).map((schedule) => ({
1378
+ path: cronPath,
1379
+ schedule
1380
+ })), ...config.crons || []];
1381
+ }
1471
1382
  if (nitro.options.static) return config;
1472
1383
  config.routes.push(...nitro.options.routeRules["/"]?.isr ? [{
1473
1384
  src: `(?<${ISR_URL_PARAM}>/)`,
@@ -1506,7 +1417,7 @@ function deprecateSWR(nitro) {
1506
1417
  hasLegacyOptions = true;
1507
1418
  }
1508
1419
  }
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.");
1420
+ 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
1421
  }
1511
1422
  async function resolveVercelRuntime(nitro) {
1512
1423
  let runtime = nitro.options.vercel?.functions?.runtime;
@@ -1514,7 +1425,7 @@ async function resolveVercelRuntime(nitro) {
1514
1425
  if ((await readVercelConfig(nitro.options.rootDir)).bunVersion || "Bun" in globalThis) runtime = "bun1.x";
1515
1426
  else {
1516
1427
  const systemNodeVersion = getSystemNodeVersion();
1517
- runtime = `nodejs${SUPPORTED_NODE_VERSIONS.find((version$1) => version$1 >= systemNodeVersion) ?? SUPPORTED_NODE_VERSIONS.at(-1)}.x`;
1428
+ runtime = `nodejs${SUPPORTED_NODE_VERSIONS.find((version) => version >= systemNodeVersion) ?? SUPPORTED_NODE_VERSIONS.at(-1)}.x`;
1518
1429
  }
1519
1430
  nitro.options.vercel ??= {};
1520
1431
  nitro.options.vercel.functions ??= {};
@@ -1528,9 +1439,20 @@ async function readVercelConfig(rootDir) {
1528
1439
  function _hasProp(obj, prop) {
1529
1440
  return obj && typeof obj === "object" && prop in obj;
1530
1441
  }
1442
+ /**
1443
+ * Check if a proxy rule can be offloaded to a Vercel CDN rewrite.
1444
+ * A proxy is eligible when it targets an external URL and uses no
1445
+ * ProxyOptions that Vercel's routing layer cannot handle at the edge.
1446
+ */
1447
+ function canUseVercelRewrite(proxy) {
1448
+ if (!proxy?.to) return false;
1449
+ if (!/^https?:\/\//.test(proxy.to.replace(/\/\*\*$/, ""))) return false;
1450
+ for (const key of UNSUPPORTED_PROXY_OPTIONS) if (proxy[key] !== void 0) return false;
1451
+ return true;
1452
+ }
1531
1453
  function getObservabilityRoutes(nitro) {
1532
1454
  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)])];
1455
+ const routePatterns = [...new Set([...nitro.options.ssrRoutes || [], ...[...nitro.scannedHandlers, ...nitro.options.handlers].filter((h) => !h.middleware && h.route).map((h) => h.route)])];
1534
1456
  const staticRoutes = [];
1535
1457
  const dynamicRoutes = [];
1536
1458
  const catchAllRoutes = [];
@@ -1544,7 +1466,7 @@ function getObservabilityRoutes(nitro) {
1544
1466
  ];
1545
1467
  }
1546
1468
  function normalizeRoutes(routes) {
1547
- return routes.sort((a$1, b) => b.localeCompare(a$1)).map((route) => ({
1469
+ return routes.sort((a, b) => b.localeCompare(a)).map((route) => ({
1548
1470
  src: normalizeRouteSrc(route),
1549
1471
  dest: normalizeRouteDest(route)
1550
1472
  }));
@@ -1580,16 +1502,16 @@ async function writePrerenderConfig(filename, isrConfig, bypassToken) {
1580
1502
  bypassToken,
1581
1503
  ...isrConfig
1582
1504
  };
1583
- if (prerenderConfig.allowQuery && !prerenderConfig.allowQuery.includes(ISR_URL_PARAM)) prerenderConfig.allowQuery.push(ISR_URL_PARAM);
1505
+ if (prerenderConfig.allowQuery && !prerenderConfig.allowQuery.includes("__isr_route")) prerenderConfig.allowQuery.push(ISR_URL_PARAM);
1584
1506
  await writeFile$1(filename, JSON.stringify(prerenderConfig, null, 2));
1585
1507
  }
1586
-
1587
- //#endregion
1588
- //#region src/presets/vercel/preset.ts
1589
- const vercel = defineNitroPreset({
1508
+ var preset_default$4 = [defineNitroPreset({
1590
1509
  entry: "./vercel/runtime/vercel.{format}",
1591
1510
  manifest: { deploymentId: process.env.VERCEL_DEPLOYMENT_ID },
1592
- vercel: { skewProtection: !!process.env.VERCEL_SKEW_PROTECTION_ENABLED },
1511
+ vercel: {
1512
+ skewProtection: !!process.env.VERCEL_SKEW_PROTECTION_ENABLED,
1513
+ cronHandlerRoute: "/_vercel/cron"
1514
+ },
1593
1515
  output: {
1594
1516
  dir: "{{ rootDir }}/.vercel/output",
1595
1517
  serverDir: "{{ output.dir }}/functions/__server.func",
@@ -1606,9 +1528,14 @@ const vercel = defineNitroPreset({
1606
1528
  if (runtime.startsWith("bun") && !nitro.options.exportConditions.includes("bun")) nitro.options.exportConditions.push("bun");
1607
1529
  logger.info(`Using \`${runtime}\` runtime.`);
1608
1530
  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";
1531
+ if (!serverFormat) serverFormat = nitro.routing.routes.routes.flatMap((r) => r.data).some((h) => h.format === "node") ? "node" : "web";
1610
1532
  logger.info(`Using \`${serverFormat}\` entry format.`);
1611
1533
  nitro.options.entry = nitro.options.entry.replace("{format}", serverFormat);
1534
+ if (nitro.options.experimental.tasks && Object.keys(nitro.options.scheduledTasks || {}).length > 0) nitro.options.handlers.push({
1535
+ route: nitro.options.vercel.cronHandlerRoute || "/_vercel/cron",
1536
+ lazy: true,
1537
+ handler: join$1(presetsDir, "vercel/runtime/cron-handler")
1538
+ });
1612
1539
  },
1613
1540
  "rollup:before": (nitro) => {
1614
1541
  deprecateSWR(nitro);
@@ -1620,8 +1547,7 @@ const vercel = defineNitroPreset({
1620
1547
  }, {
1621
1548
  name: "vercel",
1622
1549
  stdName: "vercel"
1623
- });
1624
- const vercelStatic = defineNitroPreset({
1550
+ }), defineNitroPreset({
1625
1551
  extends: "static",
1626
1552
  manifest: { deploymentId: process.env.VERCEL_DEPLOYMENT_ID },
1627
1553
  vercel: { skewProtection: !!process.env.VERCEL_SKEW_PROTECTION_ENABLED },
@@ -1642,24 +1568,16 @@ const vercelStatic = defineNitroPreset({
1642
1568
  name: "vercel-static",
1643
1569
  stdName: "vercel",
1644
1570
  static: true
1645
- });
1646
- var preset_default$3 = [vercel, vercelStatic];
1647
-
1648
- //#endregion
1649
- //#region src/presets/winterjs/preset.ts
1650
- const winterjs = defineNitroPreset({
1571
+ })];
1572
+ var preset_default$3 = [defineNitroPreset({
1651
1573
  extends: "base-worker",
1652
1574
  entry: "./winterjs/runtime/winterjs",
1653
1575
  minify: false,
1654
1576
  serveStatic: "inline",
1655
1577
  wasm: { lazy: true },
1656
1578
  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({
1579
+ }, { name: "winterjs" })];
1580
+ var preset_default$2 = [defineNitroPreset({
1663
1581
  entry: "./zeabur/runtime/zeabur",
1664
1582
  output: {
1665
1583
  dir: "{{ rootDir }}/.zeabur/output",
@@ -1685,8 +1603,7 @@ const zeabur = defineNitroPreset({
1685
1603
  }, {
1686
1604
  name: "zeabur",
1687
1605
  stdName: "zeabur"
1688
- });
1689
- const zeaburStatic = defineNitroPreset({
1606
+ }), defineNitroPreset({
1690
1607
  extends: "static",
1691
1608
  output: {
1692
1609
  dir: "{{ rootDir }}/.zeabur/output",
@@ -1696,16 +1613,59 @@ const zeaburStatic = defineNitroPreset({
1696
1613
  }, {
1697
1614
  name: "zeabur-static",
1698
1615
  static: true
1699
- });
1700
- var preset_default$1 = [zeabur, zeaburStatic];
1701
-
1616
+ })];
1702
1617
  //#endregion
1703
- //#region src/presets/zerops/preset.ts
1704
- const zerops = defineNitroPreset({
1618
+ //#region src/presets/zephyr/preset.ts
1619
+ const LOGGER_TAG = "zephyr-nitro-preset";
1620
+ var preset_default$1 = [defineNitroPreset({
1621
+ extends: "base-worker",
1622
+ entry: "./zephyr/runtime/server",
1623
+ output: { publicDir: "{{ output.dir }}/client/{{ baseURL }}" },
1624
+ exportConditions: ["node"],
1625
+ minify: false,
1626
+ rollupConfig: { output: {
1627
+ format: "esm",
1628
+ exports: "named",
1629
+ inlineDynamicImports: false
1630
+ } },
1631
+ wasm: {
1632
+ lazy: false,
1633
+ esmImport: true
1634
+ },
1635
+ hooks: {
1636
+ "build:before": (nitro) => {
1637
+ nitro.options.unenv.push(unenvCfExternals, unenvCfNodeCompat);
1638
+ },
1639
+ compiled: async (nitro) => {
1640
+ try {
1641
+ if (!globalThis.__nitroDeploying__ && !nitro.options.zephyr?.deployOnBuild) {
1642
+ nitro.logger.info(`[${LOGGER_TAG}] Zephyr deploy skipped on build.`);
1643
+ return;
1644
+ }
1645
+ const { deploymentUrl } = await (await importDep({
1646
+ id: "zephyr-agent",
1647
+ reason: "deploying to Zephyr",
1648
+ dir: nitro.options.rootDir
1649
+ })).uploadOutputToZephyr({
1650
+ rootDir: nitro.options.rootDir,
1651
+ outputDir: nitro.options.output.dir,
1652
+ baseURL: nitro.options.baseURL,
1653
+ publicDir: resolve$1(nitro.options.output.dir, nitro.options.output.publicDir)
1654
+ });
1655
+ if (deploymentUrl) nitro.logger.success(`[${LOGGER_TAG}] Zephyr deployment succeeded: ${deploymentUrl}`);
1656
+ else nitro.logger.success(`[${LOGGER_TAG}] Zephyr deployment succeeded.`);
1657
+ globalThis.__nitroDeployed__ = true;
1658
+ } catch (error) {
1659
+ if (error instanceof Error) throw error;
1660
+ throw new TypeError(`[${LOGGER_TAG}] ${String(error)}`);
1661
+ }
1662
+ }
1663
+ }
1664
+ }, { name: "zephyr" })];
1665
+ var preset_default = [defineNitroPreset({
1705
1666
  extends: "node-server",
1706
1667
  serveStatic: true
1707
- }, { name: "zerops" });
1708
- const zeropsStatic = defineNitroPreset({
1668
+ }, { name: "zerops" }), defineNitroPreset({
1709
1669
  extends: "static",
1710
1670
  output: {
1711
1671
  dir: "{{ rootDir }}/.zerops/output",
@@ -1714,12 +1674,11 @@ const zeropsStatic = defineNitroPreset({
1714
1674
  }, {
1715
1675
  name: "zerops-static",
1716
1676
  static: true
1717
- });
1718
- var preset_default = [zerops, zeropsStatic];
1719
-
1677
+ })];
1720
1678
  //#endregion
1721
1679
  //#region src/presets/_all.gen.ts
1722
1680
  var _all_gen_default = [
1681
+ ...preset_default$27,
1723
1682
  ...preset_default$26,
1724
1683
  ...preset_default$25,
1725
1684
  ...preset_default$24,
@@ -1748,7 +1707,6 @@ var _all_gen_default = [
1748
1707
  ...preset_default$1,
1749
1708
  ...preset_default
1750
1709
  ];
1751
-
1752
1710
  //#endregion
1753
1711
  //#region src/presets/_resolve.ts
1754
1712
  const _stdProviderMap = {
@@ -1758,35 +1716,35 @@ const _stdProviderMap = {
1758
1716
  };
1759
1717
  async function resolvePreset(name, opts = {}) {
1760
1718
  if (name === ".") return;
1761
- const _name = kebabCase(name) || p;
1719
+ const _name = kebabCase(name) || f;
1762
1720
  const _compatDates = opts.compatibilityDate ? resolveCompatibilityDatesFromEnv(opts.compatibilityDate) : false;
1763
- const matches = _all_gen_default.filter((preset$1) => {
1721
+ const matches = _all_gen_default.filter((preset) => {
1764
1722
  if (![
1765
- preset$1._meta.name,
1766
- preset$1._meta.stdName,
1767
- ...preset$1._meta.aliases || []
1723
+ preset._meta.name,
1724
+ preset._meta.stdName,
1725
+ ...preset._meta.aliases || []
1768
1726
  ].filter(Boolean).includes(_name)) return false;
1769
- if (opts.dev && !preset$1._meta.dev || !opts.dev && preset$1._meta.dev) return false;
1727
+ if (opts.dev && !preset._meta.dev || !opts.dev && preset._meta.dev) return false;
1770
1728
  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;
1729
+ const _date = _compatDates[_stdProviderMap[preset._meta.stdName]] || _compatDates[preset._meta.stdName] || _compatDates[preset._meta.name] || _compatDates.default;
1730
+ if (_date && preset._meta.compatibilityDate && new Date(preset._meta.compatibilityDate) > new Date(_date)) return false;
1773
1731
  }
1774
1732
  return true;
1775
- }).sort((a$1, b) => {
1776
- const aDate = new Date(a$1._meta.compatibilityDate || 0);
1733
+ }).sort((a, b) => {
1734
+ const aDate = new Date(a._meta.compatibilityDate || 0);
1777
1735
  return new Date(b._meta.compatibilityDate || 0) > aDate ? 1 : -1;
1778
1736
  });
1779
- const preset = matches.find((p$1) => (p$1._meta.static || false) === (opts?.static || false)) || matches[0];
1737
+ const preset = matches.find((p) => (p._meta.static || false) === (opts?.static || false)) || matches[0];
1780
1738
  if (typeof preset === "function") return preset();
1781
1739
  if (!name && !preset) {
1782
1740
  if (opts?.static) return resolvePreset("static", opts);
1783
1741
  return resolvePreset({
1784
1742
  deno: "deno",
1785
1743
  bun: "bun"
1786
- }[K] || "node", opts);
1744
+ }[R] || "node", opts);
1787
1745
  }
1788
1746
  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);
1747
+ 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
1748
  if (options.length > 0) {
1791
1749
  let msg = `Preset "${name}" cannot be resolved with current compatibilityDate: ${formatCompatibilityDate(_compatDates || "")}.\n\n`;
1792
1750
  for (const option of options) msg += `\n- ${option._meta.name} (requires compatibilityDate >= ${option._meta.compatibilityDate})`;
@@ -1797,6 +1755,5 @@ async function resolvePreset(name, opts = {}) {
1797
1755
  }
1798
1756
  return preset;
1799
1757
  }
1800
-
1801
1758
  //#endregion
1802
- export { resolvePreset };
1759
+ export { resolvePreset };