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.
- package/LICENSE +6 -0
- package/README.md +2 -2
- package/dist/THIRD-PARTY-LICENSES.md +1646 -0
- package/dist/_build/common.mjs +7261 -3812
- package/dist/_build/rolldown.mjs +32 -42
- package/dist/_build/rollup.mjs +28 -48
- package/dist/_build/vite.build.mjs +10 -10
- package/dist/_chunks/nitro.mjs +102 -327
- package/dist/_chunks/nitro2.mjs +8 -9
- package/dist/_chunks/nitro3.mjs +136 -0
- package/dist/_chunks/nitro4.mjs +127 -0
- package/dist/_chunks/utils.mjs +40 -29
- package/dist/_common.mjs +13 -25
- package/dist/_dev.d.mts +0 -3
- package/dist/{_chunks/dev.mjs → _dev.mjs} +132 -330
- package/dist/_libs/_.mjs +2 -0
- package/dist/_libs/_2.mjs +2 -0
- package/dist/_libs/_3.mjs +2 -0
- package/dist/_libs/_4.mjs +2 -0
- package/dist/_libs/_5.mjs +2 -0
- package/dist/_libs/_6.mjs +2 -0
- package/dist/_libs/_7.mjs +2 -0
- package/dist/_libs/c12+rc9.mjs +814 -0
- package/dist/_libs/{c12+giget+readdirp+chokidar.d.mts → c12+readdirp+chokidar.d.mts} +49 -40
- package/dist/_libs/citty.mjs +142 -41
- package/dist/_libs/commondir+is-reference.mjs +60 -56
- package/dist/_libs/compatx.d.mts +0 -2
- package/dist/_libs/compatx.mjs +1 -4
- package/dist/_libs/esbuild.d.mts +0 -1
- package/dist/_libs/escape-string-regexp.mjs +1 -4
- package/dist/_libs/{pluginutils+plugin-commonjs.d.mts → estree+pluginutils.d.mts} +0 -5
- package/dist/_libs/estree-walker.mjs +4 -92
- package/dist/_libs/exsolve.d.mts +1 -0
- package/dist/_libs/hasown+resolve+deepmerge.mjs +160 -246
- package/dist/_libs/httpxy.d.mts +20 -13
- package/dist/_libs/httpxy.mjs +519 -95
- package/dist/_libs/js-tokens.d.mts +1 -0
- package/dist/_libs/klona.mjs +1 -4
- package/dist/_libs/magic-string.d.mts +0 -2
- package/dist/_libs/mlly.d.mts +0 -2
- package/dist/_libs/nypm+tinyexec.mjs +822 -0
- package/dist/_libs/perfect-debounce.mjs +68 -0
- package/dist/_libs/pkg-types.d.mts +0 -3
- package/dist/_libs/plugin-alias.mjs +1 -5
- package/dist/_libs/plugin-inject.mjs +1 -7
- package/dist/_libs/plugin-json.mjs +1 -5
- package/dist/_libs/pluginutils.mjs +3 -35
- package/dist/_libs/readdirp+chokidar.mjs +187 -365
- package/dist/_libs/remapping.mjs +1 -5
- package/dist/_libs/resolve-uri+gen-mapping.mjs +15 -53
- package/dist/_libs/rou3.d.mts +1 -4
- package/dist/_libs/rou3.mjs +223 -78
- package/dist/_libs/std-env.d.mts +8 -2
- package/dist/_libs/strip-literal.d.mts +1 -0
- package/dist/_libs/tsconfck.mjs +21 -334
- package/dist/_libs/ultrahtml.mjs +3 -16
- package/dist/_libs/unimport+unplugin.mjs +244 -388
- package/dist/_libs/unplugin+unimport.d.mts +5 -15
- package/dist/_libs/unwasm.d.mts +0 -3
- package/dist/_presets.mjs +576 -488
- package/dist/builder.d.mts +5 -25
- package/dist/builder.mjs +3 -8
- package/dist/cli/_chunks/build.mjs +22 -25
- package/dist/cli/_chunks/common.mjs +1 -4
- package/dist/cli/_chunks/deploy.mjs +37 -0
- package/dist/cli/_chunks/dev.mjs +6 -11
- package/dist/cli/_chunks/docs.mjs +28 -0
- package/dist/cli/_chunks/list.mjs +4 -8
- package/dist/cli/_chunks/prepare.mjs +2 -6
- package/dist/cli/_chunks/preview.mjs +48 -0
- package/dist/cli/_chunks/run.mjs +7 -11
- package/dist/cli/_chunks/task.mjs +1 -5
- package/dist/cli/index.mjs +5 -6
- package/dist/docs/0.docs/0.index/index.md +56 -0
- package/dist/docs/0.docs/1.quick-start.md +110 -0
- package/dist/docs/0.docs/10.lifecycle.md +204 -0
- package/dist/docs/0.docs/11.openapi.md +291 -0
- package/dist/docs/0.docs/12.plugins.md +164 -0
- package/dist/docs/0.docs/13.tasks.md +277 -0
- package/dist/docs/0.docs/14.websocket.md +386 -0
- package/dist/docs/0.docs/15.migration.md +213 -0
- package/dist/docs/0.docs/16.nightly.md +31 -0
- package/dist/docs/0.docs/2.renderer.md +322 -0
- package/dist/docs/0.docs/3.routing.md +711 -0
- package/dist/docs/0.docs/4.server-entry.md +239 -0
- package/dist/docs/0.docs/5.cache.md +408 -0
- package/dist/docs/0.docs/6.storage.md +261 -0
- package/dist/docs/0.docs/7.assets.md +166 -0
- package/dist/docs/0.docs/8.configuration.md +256 -0
- package/dist/docs/0.docs/9.database.md +185 -0
- package/dist/docs/1.deploy/0.index/index.md +64 -0
- package/dist/docs/1.deploy/1.runtimes/0.node.md +63 -0
- package/dist/docs/1.deploy/1.runtimes/1.bun.md +15 -0
- package/dist/docs/1.deploy/1.runtimes/2.deno.md +19 -0
- package/dist/docs/1.deploy/2.providers/0.alwaysdata.md +50 -0
- package/dist/docs/1.deploy/2.providers/1.aws.md +47 -0
- package/dist/docs/1.deploy/2.providers/10.flightcontrol.md +67 -0
- package/dist/docs/1.deploy/2.providers/11.genezio.md +67 -0
- package/dist/docs/1.deploy/2.providers/12.github-pages.md +68 -0
- package/dist/docs/1.deploy/2.providers/13.gitlab-pages.md +37 -0
- package/dist/docs/1.deploy/2.providers/14.heroku.md +84 -0
- package/dist/docs/1.deploy/2.providers/15.iis.md +38 -0
- package/dist/docs/1.deploy/2.providers/16.koyeb.md +109 -0
- package/dist/docs/1.deploy/2.providers/17.netlify.md +47 -0
- package/dist/docs/1.deploy/2.providers/18.platform-sh.md +37 -0
- package/dist/docs/1.deploy/2.providers/19.render.md +37 -0
- package/dist/docs/1.deploy/2.providers/2.aws-amplify.md +81 -0
- package/dist/docs/1.deploy/2.providers/20.stormkit.md +24 -0
- package/dist/docs/1.deploy/2.providers/21.vercel.md +270 -0
- package/dist/docs/1.deploy/2.providers/22.zeabur.md +19 -0
- package/dist/docs/1.deploy/2.providers/23.zephyr.md +99 -0
- package/dist/docs/1.deploy/2.providers/24.zerops.md +102 -0
- package/dist/docs/1.deploy/2.providers/3.azure.md +72 -0
- package/dist/docs/1.deploy/2.providers/4.cleavr.md +33 -0
- package/dist/docs/1.deploy/2.providers/5.cloudflare.md +369 -0
- package/dist/docs/1.deploy/2.providers/6.deno-deploy.md +66 -0
- package/dist/docs/1.deploy/2.providers/7.digitalocean.md +46 -0
- package/dist/docs/1.deploy/2.providers/8.edgeone.md +20 -0
- package/dist/docs/1.deploy/2.providers/9.firebase.md +32 -0
- package/dist/docs/2.config/0.index/index.md +1221 -0
- package/dist/docs/3.examples/0.index/index.md +3 -0
- package/dist/docs/3.examples/1.api-routes.md +145 -0
- package/dist/docs/3.examples/10.hono.md +74 -0
- package/dist/docs/3.examples/11.import-alias.md +97 -0
- package/dist/docs/3.examples/12.middleware.md +91 -0
- package/dist/docs/3.examples/13.mono-jsx.md +68 -0
- package/dist/docs/3.examples/14.nano-jsx.md +70 -0
- package/dist/docs/3.examples/15.plugins.md +91 -0
- package/dist/docs/3.examples/16.renderer.md +113 -0
- package/dist/docs/3.examples/17.runtime-config.md +97 -0
- package/dist/docs/3.examples/18.server-fetch.md +87 -0
- package/dist/docs/3.examples/19.shiki.md +198 -0
- package/dist/docs/3.examples/2.auto-imports.md +92 -0
- package/dist/docs/3.examples/20.virtual-routes.md +74 -0
- package/dist/docs/3.examples/21.vite-nitro-plugin.md +79 -0
- package/dist/docs/3.examples/22.vite-rsc.md +1041 -0
- package/dist/docs/3.examples/23.vite-ssr-html.md +217 -0
- package/dist/docs/3.examples/24.vite-ssr-preact.md +247 -0
- package/dist/docs/3.examples/25.vite-ssr-react.md +226 -0
- package/dist/docs/3.examples/26.vite-ssr-solid.md +256 -0
- package/dist/docs/3.examples/27.vite-ssr-tsr-react.md +442 -0
- package/dist/docs/3.examples/28.vite-ssr-tss-react.md +444 -0
- package/dist/docs/3.examples/29.vite-ssr-vue-router.md +617 -0
- package/dist/docs/3.examples/3.cached-handler.md +81 -0
- package/dist/docs/3.examples/30.vite-trpc.md +335 -0
- package/dist/docs/3.examples/31.websocket.md +282 -0
- package/dist/docs/3.examples/4.custom-error-handler.md +98 -0
- package/dist/docs/3.examples/5.database.md +157 -0
- package/dist/docs/3.examples/6.elysia.md +70 -0
- package/dist/docs/3.examples/7.express.md +78 -0
- package/dist/docs/3.examples/8.fastify.md +79 -0
- package/dist/docs/3.examples/9.hello-world.md +68 -0
- package/dist/docs/README.md +86 -0
- package/dist/docs/index.md +121 -0
- package/dist/node_modules/@poppinss/dumper/build/formatters/html/main.js +8 -0
- package/dist/node_modules/@poppinss/dumper/package.json +1 -1
- package/dist/node_modules/@speed-highlight/core/dist/index.js +4 -4
- package/dist/node_modules/@speed-highlight/core/dist/terminal.js +2 -2
- package/dist/node_modules/@speed-highlight/core/package.json +1 -1
- package/dist/node_modules/cookie-es/dist/index.mjs +299 -250
- package/dist/node_modules/cookie-es/package.json +26 -23
- package/dist/node_modules/croner/dist/croner.js +1 -1
- package/dist/node_modules/croner/package.json +11 -1
- package/dist/node_modules/defu/dist/defu.mjs +2 -2
- package/dist/node_modules/defu/package.json +33 -28
- package/dist/node_modules/rendu/dist/_chunks/libs/cookie-es.mjs +151 -0
- package/dist/node_modules/rendu/dist/index.mjs +5 -112
- package/dist/node_modules/rendu/package.json +25 -24
- package/dist/node_modules/youch/build/helpers-B9BQYaS6.js +23 -0
- package/dist/node_modules/youch/build/index.js +204 -351
- package/dist/node_modules/youch/build/public/error_info/script.js +1 -1
- package/dist/node_modules/youch/build/public_dir-C5bujZKB.js +25 -0
- package/dist/node_modules/youch/build/src/templates/error_cause/main.js +44 -0
- package/dist/node_modules/youch/build/src/templates/error_info/main.js +72 -0
- package/dist/node_modules/youch/build/src/templates/error_metadata/main.js +65 -0
- package/dist/node_modules/youch/build/src/templates/error_stack/main.js +152 -0
- package/dist/node_modules/youch/build/src/templates/error_stack_source/main.js +46 -0
- package/dist/node_modules/youch/build/src/templates/header/main.js +24 -0
- package/dist/node_modules/youch/build/src/templates/layout/main.js +27 -0
- package/dist/node_modules/youch/package.json +35 -32
- package/dist/presets/_nitro/runtime/nitro-dev.mjs +12 -57
- package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +1 -0
- package/dist/presets/_nitro/runtime/service-worker.mjs +1 -2
- package/dist/presets/aws-lambda/runtime/_utils.mjs +6 -6
- package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.mjs +3 -1
- package/dist/presets/azure/runtime/_utils.mjs +5 -5
- package/dist/presets/azure/runtime/azure-swa.mjs +5 -5
- package/dist/presets/bun/runtime/bun.mjs +9 -6
- package/dist/presets/cloudflare/runtime/_module-handler.mjs +1 -1
- package/dist/presets/cloudflare/runtime/cloudflare-durable.mjs +4 -4
- package/dist/presets/cloudflare/runtime/cloudflare-module.mjs +3 -3
- package/dist/presets/cloudflare/runtime/cloudflare-pages.mjs +2 -2
- package/dist/presets/cloudflare/runtime/plugin.dev.mjs +10 -21
- package/dist/presets/deno/runtime/deno-deploy.mjs +4 -4
- package/dist/presets/deno/runtime/deno-server.mjs +9 -6
- package/dist/presets/edgeone/runtime/edgeone.mjs +10 -0
- package/dist/presets/netlify/runtime/netlify-edge.mjs +2 -3
- package/dist/presets/netlify/runtime/netlify.mjs +1 -1
- package/dist/presets/node/runtime/node-cluster.mjs +5 -4
- package/dist/presets/node/runtime/node-middleware.mjs +1 -1
- package/dist/presets/node/runtime/node-server.mjs +8 -5
- package/dist/presets/stormkit/runtime/stormkit.mjs +1 -2
- package/dist/presets/vercel/runtime/cron-handler.mjs +25 -0
- package/dist/presets/vercel/runtime/queue-handler.mjs +21 -0
- package/dist/presets/vercel/runtime/vercel.node.mjs +3 -3
- package/dist/presets/vercel/runtime/vercel.web.mjs +3 -5
- package/dist/presets/winterjs/runtime/winterjs.mjs +10 -10
- package/dist/presets/zephyr/runtime/server.mjs +3 -0
- package/dist/runtime/internal/app.mjs +12 -11
- package/dist/runtime/internal/cache.d.mts +0 -4
- package/dist/runtime/internal/cache.mjs +32 -256
- package/dist/runtime/internal/context.d.mts +3 -1
- package/dist/runtime/internal/context.mjs +1 -9
- package/dist/runtime/internal/error/dev.d.mts +5 -4
- package/dist/runtime/internal/error/dev.mjs +47 -49
- package/dist/runtime/internal/error/hooks.d.mts +1 -1
- package/dist/runtime/internal/error/prod.d.mts +2 -5
- package/dist/runtime/internal/error/prod.mjs +19 -33
- package/dist/runtime/internal/error/utils.d.mts +4 -4
- package/dist/runtime/internal/meta.d.mts +1 -1
- package/dist/runtime/internal/plugin.d.mts +2 -2
- package/dist/runtime/internal/route-rules.d.mts +11 -4
- package/dist/runtime/internal/route-rules.mjs +15 -5
- package/dist/runtime/internal/routes/dev-tasks.d.mts +3 -2
- package/dist/runtime/internal/routes/dev-tasks.mjs +15 -10
- package/dist/runtime/internal/routes/openapi.mjs +2 -2
- package/dist/runtime/internal/routes/renderer-template.d.mts +1 -1
- package/dist/runtime/internal/routes/renderer-template.dev.d.mts +2 -1
- package/dist/runtime/internal/routes/scalar.mjs +3 -3
- package/dist/runtime/internal/routes/swagger.mjs +7 -4
- package/dist/runtime/internal/runtime-config.d.mts +1 -1
- package/dist/runtime/internal/runtime-config.mjs +2 -2
- package/dist/runtime/internal/static.mjs +5 -4
- package/dist/runtime/internal/task.d.mts +3 -1
- package/dist/runtime/internal/task.mjs +7 -7
- package/dist/runtime/internal/vite/dev-entry.mjs +6 -3
- package/dist/runtime/internal/vite/dev-worker.mjs +264 -0
- package/dist/runtime/meta.d.mts +1 -0
- package/dist/runtime/meta.mjs +2 -0
- package/dist/runtime/nitro.d.mts +2 -0
- package/dist/runtime/nitro.mjs +4 -2
- package/dist/runtime/virtual/error-handler.mjs +1 -1
- package/dist/runtime/virtual/renderer-template.mjs +1 -1
- package/dist/runtime/virtual/server-assets.d.mts +2 -1
- package/dist/runtime/virtual/tracing.d.mts +5 -0
- package/dist/runtime/virtual/tracing.mjs +1 -0
- package/dist/runtime/vite.d.mts +1 -1
- package/dist/types/index.d.mts +215 -195
- package/dist/types/index.mjs +1 -11
- package/dist/vite.d.mts +3 -8
- package/dist/vite.mjs +285 -253
- package/lib/tsconfig.json +3 -5
- package/package.json +97 -80
- package/dist/_libs/confbox.mjs +0 -2509
- package/dist/_libs/nypm+giget+tinyexec.mjs +0 -3603
- package/dist/_libs/rc9+c12+dotenv.mjs +0 -972
- package/dist/node_modules/hookable/dist/index.mjs +0 -266
- package/dist/node_modules/hookable/package.json +0 -52
- package/dist/node_modules/youch/build/chunk-4L7RY2JA.js +0 -42
- package/dist/node_modules/youch/build/chunk-7QV3D5YX.js +0 -83
- package/dist/node_modules/youch/build/chunk-AUGPHE32.js +0 -39
- package/dist/node_modules/youch/build/chunk-CM7DWJNZ.js +0 -44
- package/dist/node_modules/youch/build/chunk-EJH674NB.js +0 -223
- package/dist/node_modules/youch/build/chunk-OIJ3WD7L.js +0 -81
- package/dist/node_modules/youch/build/chunk-P36L72PL.js +0 -87
- package/dist/node_modules/youch/build/chunk-PE3GG3TN.js +0 -65
- package/dist/node_modules/youch/build/chunk-X53OIOJH.js +0 -70
- package/dist/presets/_nitro/runtime/nitro-dev.d.mts +0 -2
- package/dist/presets/_nitro/runtime/nitro-prerenderer.d.mts +0 -3
- package/dist/presets/_nitro/runtime/service-worker.d.mts +0 -2
- package/dist/presets/aws-amplify/runtime/aws-amplify.d.mts +0 -2
- package/dist/presets/aws-lambda/runtime/_utils.d.mts +0 -8
- package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.d.mts +0 -2
- package/dist/presets/aws-lambda/runtime/aws-lambda.d.mts +0 -3
- package/dist/presets/azure/runtime/_utils.d.mts +0 -2
- package/dist/presets/azure/runtime/azure-swa.d.mts +0 -5
- package/dist/presets/bun/runtime/bun.d.mts +0 -3
- package/dist/presets/cloudflare/runtime/_module-handler.d.mts +0 -16
- package/dist/presets/cloudflare/runtime/cloudflare-durable.d.mts +0 -11
- package/dist/presets/cloudflare/runtime/cloudflare-module.d.mts +0 -3
- package/dist/presets/cloudflare/runtime/cloudflare-pages.d.mts +0 -20
- package/dist/presets/cloudflare/runtime/plugin.dev.d.mts +0 -3
- package/dist/presets/deno/runtime/deno-deploy.d.mts +0 -5
- package/dist/presets/deno/runtime/deno-server.d.mts +0 -3
- package/dist/presets/netlify/runtime/netlify-edge.d.mts +0 -3
- package/dist/presets/netlify/runtime/netlify.d.mts +0 -4
- package/dist/presets/node/runtime/node-cluster.d.mts +0 -3
- package/dist/presets/node/runtime/node-middleware.d.mts +0 -3
- package/dist/presets/node/runtime/node-server.d.mts +0 -3
- package/dist/presets/standard/runtime/server.d.mts +0 -3
- package/dist/presets/stormkit/runtime/stormkit.d.mts +0 -21
- package/dist/presets/vercel/runtime/isr.d.mts +0 -2
- package/dist/presets/vercel/runtime/vercel.node.d.mts +0 -3
- package/dist/presets/vercel/runtime/vercel.web.d.mts +0 -8
- package/dist/presets/winterjs/runtime/winterjs.d.mts +0 -2
- package/dist/presets/zeabur/runtime/zeabur.d.mts +0 -3
- package/dist/runtime/internal/vite/node-runner.mjs +0 -359
package/dist/_presets.mjs
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
import "./
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
|
137
|
-
if (path
|
|
138
|
-
path
|
|
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$
|
|
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
|
-
|
|
223
|
-
|
|
224
|
-
|
|
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
|
|
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$
|
|
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$
|
|
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
|
|
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
|
|
483
|
-
return a
|
|
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
|
|
489
|
-
for (const [path
|
|
490
|
-
const headers = [joinURL(nitro.options.baseURL, path
|
|
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
|
|
508
|
-
for (const [key, routeRules] of rules.filter(([_, routeRules
|
|
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)
|
|
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":
|
|
533
|
-
".jsonc":
|
|
534
|
-
".toml":
|
|
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
|
-
|
|
670
|
-
|
|
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: {
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
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
|
-
|
|
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
|
-
|
|
791
|
-
|
|
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
|
|
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$
|
|
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
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
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"),
|
|
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 = [
|
|
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 = [
|
|
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
|
|
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
|
|
1063
|
-
const fileString = await readFile(path
|
|
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
|
|
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
|
|
1089
|
-
const fileString = await readFile(path
|
|
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 = [
|
|
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
|
|
1148
|
-
for (const [key, routeRules] of rules.filter(([_, routeRules
|
|
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
|
|
1169
|
-
for (const [path
|
|
1170
|
-
const headers = [path
|
|
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
|
|
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
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
nitro.options.netlify
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
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
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
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
|
-
|
|
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 = [
|
|
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 = [
|
|
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 = [
|
|
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
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
1430
|
-
|
|
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
|
|
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(([
|
|
1445
|
-
let route = { src: path
|
|
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
|
-
}), ...
|
|
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 && !
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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: {
|
|
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
|
|
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 = [
|
|
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 = [
|
|
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
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
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) ||
|
|
1851
|
+
const _name = kebabCase(name) || f;
|
|
1762
1852
|
const _compatDates = opts.compatibilityDate ? resolveCompatibilityDatesFromEnv(opts.compatibilityDate) : false;
|
|
1763
|
-
const matches = _all_gen_default.filter((preset
|
|
1853
|
+
const matches = _all_gen_default.filter((preset) => {
|
|
1764
1854
|
if (![
|
|
1765
|
-
preset
|
|
1766
|
-
preset
|
|
1767
|
-
...preset
|
|
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
|
|
1859
|
+
if (opts.dev && !preset._meta.dev || !opts.dev && preset._meta.dev) return false;
|
|
1770
1860
|
if (_compatDates) {
|
|
1771
|
-
const _date = _compatDates[_stdProviderMap[preset
|
|
1772
|
-
if (_date && preset
|
|
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
|
|
1776
|
-
const aDate = new Date(a
|
|
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
|
|
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
|
-
}[
|
|
1876
|
+
}[R] || "node", opts);
|
|
1787
1877
|
}
|
|
1788
1878
|
if (name && !preset) {
|
|
1789
|
-
const options = _all_gen_default.filter((p
|
|
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 };
|