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.
- package/LICENSE +6 -0
- package/README.md +2 -2
- package/dist/THIRD-PARTY-LICENSES.md +1646 -0
- package/dist/_build/common.mjs +6977 -2556
- package/dist/_build/rolldown.mjs +32 -31
- package/dist/_build/rollup.mjs +28 -35
- package/dist/_build/vite.build.mjs +10 -8
- package/dist/_chunks/nitro.mjs +80 -112
- package/dist/_chunks/nitro2.mjs +8 -7
- package/dist/_chunks/nitro3.mjs +129 -0
- package/dist/_chunks/utils.mjs +42 -24
- package/dist/_common.mjs +14 -24
- package/dist/{_chunks/dev.mjs → _dev.mjs} +132 -320
- package/dist/_libs/_.mjs +3 -0
- package/dist/_libs/_2.mjs +2 -0
- package/dist/_libs/_3.mjs +3 -0
- package/dist/_libs/_4.mjs +2 -0
- package/dist/_libs/_5.mjs +3 -0
- package/dist/_libs/_6.mjs +4 -0
- package/dist/_libs/_7.mjs +5 -0
- package/dist/_libs/c12+rc9.mjs +812 -0
- package/dist/_libs/{c12+giget+readdirp+chokidar.d.mts → c12+readdirp+chokidar.d.mts} +52 -36
- package/dist/_libs/citty.mjs +10 -12
- package/dist/_libs/commondir+is-reference.mjs +60 -49
- package/dist/_libs/compatx.mjs +1 -2
- package/dist/_libs/esbuild.d.mts +1 -1
- package/dist/_libs/escape-string-regexp.mjs +1 -2
- package/dist/_libs/{pluginutils+plugin-commonjs.d.mts → estree+pluginutils.d.mts} +2 -2
- package/dist/_libs/estree-walker.mjs +1 -4
- package/dist/_libs/exsolve.d.mts +1 -0
- package/dist/_libs/hasown+resolve+deepmerge.mjs +146 -169
- package/dist/_libs/httpxy.d.mts +12 -9
- package/dist/_libs/httpxy.mjs +299 -43
- package/dist/_libs/js-tokens.d.mts +1 -0
- package/dist/_libs/klona.mjs +1 -2
- package/dist/_libs/mlly.d.mts +1 -1
- package/dist/_libs/nypm+tinyexec.mjs +845 -0
- package/dist/_libs/perfect-debounce.mjs +88 -0
- package/dist/_libs/plugin-alias.mjs +2 -4
- package/dist/_libs/plugin-inject.mjs +2 -6
- package/dist/_libs/plugin-json.mjs +2 -4
- package/dist/_libs/pluginutils.mjs +5 -11
- package/dist/_libs/readdirp+chokidar.mjs +187 -192
- package/dist/_libs/remapping.mjs +1 -3
- package/dist/_libs/resolve-uri+gen-mapping.mjs +15 -21
- package/dist/_libs/rou3.d.mts +3 -2
- package/dist/_libs/rou3.mjs +225 -51
- package/dist/_libs/std-env.d.mts +10 -2
- package/dist/_libs/strip-literal.d.mts +1 -0
- package/dist/_libs/tsconfck.mjs +21 -40
- package/dist/_libs/ultrahtml.mjs +3 -14
- package/dist/_libs/unimport+unplugin.mjs +250 -351
- package/dist/_libs/unplugin+unimport.d.mts +7 -10
- package/dist/_presets.mjs +389 -432
- package/dist/builder.d.mts +5 -4
- package/dist/builder.mjs +12 -6
- package/dist/cli/_chunks/build.mjs +22 -23
- package/dist/cli/_chunks/common.mjs +1 -2
- package/dist/cli/_chunks/deploy.mjs +40 -0
- package/dist/cli/_chunks/dev.mjs +9 -9
- package/dist/cli/_chunks/docs.mjs +30 -0
- package/dist/cli/_chunks/list.mjs +4 -6
- package/dist/cli/_chunks/prepare.mjs +2 -4
- package/dist/cli/_chunks/preview.mjs +51 -0
- package/dist/cli/_chunks/run.mjs +7 -9
- package/dist/cli/_chunks/task.mjs +1 -3
- package/dist/cli/index.mjs +5 -4
- 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/croner/dist/croner.js +1 -1
- package/dist/node_modules/croner/package.json +11 -1
- 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 +34 -31
- package/dist/presets/_nitro/runtime/nitro-dev.mjs +9 -56
- package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +1 -0
- package/dist/presets/_nitro/runtime/service-worker.mjs +0 -1
- package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.mjs +3 -1
- package/dist/presets/bun/runtime/bun.mjs +4 -3
- package/dist/presets/deno/runtime/deno-server.mjs +4 -3
- package/dist/presets/netlify/runtime/netlify-edge.mjs +0 -1
- package/dist/presets/netlify/runtime/netlify.mjs +1 -1
- package/dist/presets/node/runtime/node-cluster.mjs +3 -2
- package/dist/presets/node/runtime/node-server.mjs +3 -2
- package/dist/presets/stormkit/runtime/stormkit.mjs +0 -1
- package/dist/presets/vercel/runtime/cron-handler.mjs +25 -0
- package/dist/presets/vercel/runtime/vercel.web.mjs +2 -4
- package/dist/presets/zephyr/runtime/server.mjs +3 -0
- 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/error/dev.d.mts +5 -4
- package/dist/runtime/internal/error/dev.mjs +38 -40
- 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 +9 -4
- package/dist/runtime/internal/route-rules.mjs +9 -1
- package/dist/runtime/internal/routes/dev-tasks.d.mts +3 -2
- package/dist/runtime/internal/routes/dev-tasks.mjs +6 -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/runtime-config.d.mts +1 -1
- package/dist/runtime/internal/static.mjs +5 -4
- package/dist/runtime/internal/task.d.mts +3 -1
- package/dist/runtime/internal/task.mjs +2 -2
- package/dist/runtime/internal/vite/dev-entry.mjs +6 -3
- package/dist/runtime/internal/vite/dev-worker.mjs +264 -0
- package/dist/runtime/meta.mjs +1 -0
- package/dist/runtime/nitro.d.mts +2 -0
- package/dist/runtime/nitro.mjs +2 -0
- package/dist/runtime/virtual/error-handler.mjs +1 -1
- package/dist/runtime/virtual/server-assets.d.mts +2 -1
- package/dist/runtime/vite.d.mts +1 -1
- package/dist/types/index.d.mts +68 -117
- package/dist/types/index.mjs +1 -11
- package/dist/vite.d.mts +3 -3
- package/dist/vite.mjs +236 -233
- package/package.json +83 -68
- package/skills/nitro/SKILL.md +10 -0
- package/skills/nitro/docs/TOC.md +83 -0
- package/skills/nitro/docs/_navigation.json +679 -0
- package/skills/nitro/docs/config/index.md +1147 -0
- package/skills/nitro/docs/deploy/index.md +64 -0
- package/skills/nitro/docs/deploy/providers/alwaysdata.md +50 -0
- package/skills/nitro/docs/deploy/providers/aws-amplify.md +81 -0
- package/skills/nitro/docs/deploy/providers/aws.md +47 -0
- package/skills/nitro/docs/deploy/providers/azure.md +72 -0
- package/skills/nitro/docs/deploy/providers/cleavr.md +33 -0
- package/skills/nitro/docs/deploy/providers/cloudflare.md +375 -0
- package/skills/nitro/docs/deploy/providers/deno-deploy.md +66 -0
- package/skills/nitro/docs/deploy/providers/digitalocean.md +46 -0
- package/skills/nitro/docs/deploy/providers/firebase.md +32 -0
- package/skills/nitro/docs/deploy/providers/flightcontrol.md +67 -0
- package/skills/nitro/docs/deploy/providers/genezio.md +67 -0
- package/skills/nitro/docs/deploy/providers/github-pages.md +68 -0
- package/skills/nitro/docs/deploy/providers/gitlab-pages.md +37 -0
- package/skills/nitro/docs/deploy/providers/heroku.md +84 -0
- package/skills/nitro/docs/deploy/providers/iis.md +38 -0
- package/skills/nitro/docs/deploy/providers/koyeb.md +109 -0
- package/skills/nitro/docs/deploy/providers/netlify.md +47 -0
- package/skills/nitro/docs/deploy/providers/platform-sh.md +37 -0
- package/skills/nitro/docs/deploy/providers/render.md +37 -0
- package/skills/nitro/docs/deploy/providers/stormkit.md +24 -0
- package/skills/nitro/docs/deploy/providers/vercel.md +179 -0
- package/skills/nitro/docs/deploy/providers/zeabur.md +19 -0
- package/skills/nitro/docs/deploy/providers/zephyr.md +99 -0
- package/skills/nitro/docs/deploy/providers/zerops.md +102 -0
- package/skills/nitro/docs/deploy/runtimes/bun.md +15 -0
- package/skills/nitro/docs/deploy/runtimes/deno.md +19 -0
- package/skills/nitro/docs/deploy/runtimes/node.md +63 -0
- package/skills/nitro/docs/docs/assets.md +166 -0
- package/skills/nitro/docs/docs/cache.md +408 -0
- package/skills/nitro/docs/docs/configuration.md +256 -0
- package/skills/nitro/docs/docs/database.md +185 -0
- package/skills/nitro/docs/docs/index.md +56 -0
- package/skills/nitro/docs/docs/lifecycle.md +204 -0
- package/skills/nitro/docs/docs/migration.md +215 -0
- package/skills/nitro/docs/docs/nightly.md +31 -0
- package/skills/nitro/docs/docs/plugins.md +164 -0
- package/skills/nitro/docs/docs/quick-start.md +110 -0
- package/skills/nitro/docs/docs/renderer.md +322 -0
- package/skills/nitro/docs/docs/routing.md +711 -0
- package/skills/nitro/docs/docs/server-entry.md +239 -0
- package/skills/nitro/docs/docs/storage.md +261 -0
- package/skills/nitro/docs/docs/tasks.md +277 -0
- package/skills/nitro/docs/examples/api-routes.md +145 -0
- package/skills/nitro/docs/examples/auto-imports.md +93 -0
- package/skills/nitro/docs/examples/cached-handler.md +81 -0
- package/skills/nitro/docs/examples/custom-error-handler.md +98 -0
- package/skills/nitro/docs/examples/database.md +157 -0
- package/skills/nitro/docs/examples/elysia.md +70 -0
- package/skills/nitro/docs/examples/express.md +78 -0
- package/skills/nitro/docs/examples/fastify.md +79 -0
- package/skills/nitro/docs/examples/hello-world.md +68 -0
- package/skills/nitro/docs/examples/hono.md +74 -0
- package/skills/nitro/docs/examples/import-alias.md +100 -0
- package/skills/nitro/docs/examples/index.md +3 -0
- package/skills/nitro/docs/examples/middleware.md +91 -0
- package/skills/nitro/docs/examples/mono-jsx.md +68 -0
- package/skills/nitro/docs/examples/nano-jsx.md +70 -0
- package/skills/nitro/docs/examples/plugins.md +91 -0
- package/skills/nitro/docs/examples/renderer.md +113 -0
- package/skills/nitro/docs/examples/runtime-config.md +97 -0
- package/skills/nitro/docs/examples/server-fetch.md +87 -0
- package/skills/nitro/docs/examples/shiki.md +198 -0
- package/skills/nitro/docs/examples/virtual-routes.md +74 -0
- package/skills/nitro/docs/examples/vite-nitro-plugin.md +79 -0
- package/skills/nitro/docs/examples/vite-rsc.md +1041 -0
- package/skills/nitro/docs/examples/vite-ssr-html.md +217 -0
- package/skills/nitro/docs/examples/vite-ssr-preact.md +247 -0
- package/skills/nitro/docs/examples/vite-ssr-react.md +226 -0
- package/skills/nitro/docs/examples/vite-ssr-solid.md +256 -0
- package/skills/nitro/docs/examples/vite-ssr-tsr-react.md +442 -0
- package/skills/nitro/docs/examples/vite-ssr-tss-react.md +444 -0
- package/skills/nitro/docs/examples/vite-ssr-vue-router.md +616 -0
- package/skills/nitro/docs/examples/vite-trpc.md +335 -0
- package/skills/nitro/docs/examples/websocket.md +282 -0
- package/skills/nitro/docs/index.md +121 -0
- 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/vite.mjs
CHANGED
|
@@ -1,79 +1,91 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
import {
|
|
3
|
-
import { i as debounce } from "./_libs/rc9+c12+dotenv.mjs";
|
|
1
|
+
import "./_libs/c12+rc9.mjs";
|
|
2
|
+
import { D as copyPublicAssets, E as prepare, F as prettyPath, H as v, V as m, at as dirname$1, ct as join$1, d as libChunkName, dt as resolve$1, f as baseBuildConfig, h as writeBuildInfo, it as basename$1, l as NODE_MODULES_RE, n as baseBuildPlugins, nt as resolveModulePath, st as isAbsolute$1, u as getChunkName } from "./_build/common.mjs";
|
|
4
3
|
import { t as formatCompatibilityDate } from "./_libs/compatx.mjs";
|
|
5
|
-
import
|
|
4
|
+
import "./_libs/klona.mjs";
|
|
5
|
+
import { i as createNitro, r as prerender } from "./_chunks/nitro.mjs";
|
|
6
|
+
import "./_libs/escape-string-regexp.mjs";
|
|
6
7
|
import "./_libs/tsconfck.mjs";
|
|
7
8
|
import { n as scanHandlers } from "./_chunks/nitro2.mjs";
|
|
8
|
-
import
|
|
9
|
+
import "./_libs/rou3.mjs";
|
|
9
10
|
import { n as watch$1 } from "./_libs/readdirp+chokidar.mjs";
|
|
11
|
+
import { t as debounce } from "./_libs/perfect-debounce.mjs";
|
|
12
|
+
import "./_libs/httpxy.mjs";
|
|
13
|
+
import { r as NitroDevApp } from "./_dev.mjs";
|
|
14
|
+
import "./_libs/ultrahtml.mjs";
|
|
15
|
+
import { t as startPreview } from "./_chunks/nitro3.mjs";
|
|
10
16
|
import { n as assetsPlugin } from "./_libs/pluginutils.mjs";
|
|
11
|
-
import consola$1 from "consola";
|
|
12
17
|
import { existsSync, watch } from "node:fs";
|
|
13
18
|
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
14
19
|
import { join, resolve } from "node:path";
|
|
15
20
|
import { defu } from "defu";
|
|
16
21
|
import { runtimeDependencies, runtimeDir } from "nitro/meta";
|
|
17
22
|
import { colors } from "consola/utils";
|
|
18
|
-
import {
|
|
23
|
+
import { RunnerManager, loadRunner } from "env-runner";
|
|
19
24
|
import { NodeRequest, sendNodeResponse } from "srvx/node";
|
|
25
|
+
import "node:http";
|
|
20
26
|
import { DevEnvironment } from "vite";
|
|
21
|
-
import {
|
|
22
|
-
|
|
27
|
+
import { createViteHotChannel } from "env-runner/vite";
|
|
23
28
|
//#region src/build/vite/bundler.ts
|
|
24
29
|
const getBundlerConfig = async (ctx) => {
|
|
25
|
-
const nitro
|
|
26
|
-
const base = baseBuildConfig(nitro
|
|
30
|
+
const nitro = ctx.nitro;
|
|
31
|
+
const base = baseBuildConfig(nitro);
|
|
27
32
|
const commonConfig = {
|
|
28
|
-
input: nitro
|
|
33
|
+
input: nitro.options.entry,
|
|
29
34
|
external: [...base.env.external],
|
|
30
|
-
plugins: [...await baseBuildPlugins(nitro
|
|
35
|
+
plugins: [...await baseBuildPlugins(nitro, base)].filter(Boolean),
|
|
31
36
|
treeshake: { moduleSideEffects(id) {
|
|
32
|
-
return nitro
|
|
37
|
+
return nitro.options.moduleSideEffects.some((p) => id.startsWith(p));
|
|
33
38
|
} },
|
|
34
39
|
onwarn(warning, warn) {
|
|
35
40
|
if (!base.ignoreWarningCodes.has(warning.code || "")) warn(warning);
|
|
36
41
|
},
|
|
37
42
|
output: {
|
|
38
|
-
dir: nitro
|
|
43
|
+
dir: nitro.options.output.serverDir,
|
|
39
44
|
format: "esm",
|
|
40
45
|
entryFileNames: "index.mjs",
|
|
41
|
-
chunkFileNames: (chunk) => getChunkName(chunk, nitro
|
|
42
|
-
inlineDynamicImports: nitro
|
|
46
|
+
chunkFileNames: (chunk) => getChunkName(chunk, nitro),
|
|
47
|
+
inlineDynamicImports: nitro.options.inlineDynamicImports,
|
|
43
48
|
sourcemapIgnoreList: (id) => id.includes("node_modules")
|
|
44
49
|
}
|
|
45
50
|
};
|
|
46
|
-
if (ctx._isRolldown)
|
|
47
|
-
|
|
48
|
-
rollupConfig: void 0,
|
|
49
|
-
rolldownConfig: defu({
|
|
51
|
+
if (ctx._isRolldown) {
|
|
52
|
+
const rolldownConfig = defu({
|
|
50
53
|
transform: { inject: base.env.inject },
|
|
51
54
|
output: { codeSplitting: { groups: [{
|
|
52
55
|
test: NODE_MODULES_RE,
|
|
53
56
|
name: (id) => libChunkName(id)
|
|
54
57
|
}] } }
|
|
55
|
-
}, nitro
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
}, nitro.options.rolldownConfig, nitro.options.rollupConfig, commonConfig);
|
|
59
|
+
const outputConfig = rolldownConfig.output;
|
|
60
|
+
if (outputConfig.inlineDynamicImports || outputConfig.format === "iife") {
|
|
61
|
+
delete outputConfig.inlineDynamicImports;
|
|
62
|
+
outputConfig.codeSplitting = false;
|
|
63
|
+
}
|
|
60
64
|
return {
|
|
61
65
|
base,
|
|
62
|
-
rolldownConfig
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
66
|
+
rolldownConfig
|
|
67
|
+
};
|
|
68
|
+
} else {
|
|
69
|
+
const inject = (await import("./_libs/_3.mjs")).default;
|
|
70
|
+
const alias = (await import("./_libs/plugin-alias.mjs").then((n) => n.n)).default;
|
|
71
|
+
const rollupConfig = defu({
|
|
72
|
+
plugins: [inject(base.env.inject), alias({ entries: base.aliases })],
|
|
73
|
+
output: {
|
|
74
|
+
sourcemapExcludeSources: true,
|
|
75
|
+
generatedCode: { constBindings: true },
|
|
76
|
+
manualChunks(id) {
|
|
77
|
+
if (NODE_MODULES_RE.test(id)) return libChunkName(id);
|
|
71
78
|
}
|
|
72
|
-
}
|
|
79
|
+
}
|
|
80
|
+
}, nitro.options.rolldownConfig, nitro.options.rollupConfig, commonConfig);
|
|
81
|
+
const outputConfig = rollupConfig.output;
|
|
82
|
+
if (outputConfig.inlineDynamicImports || outputConfig.format === "iife") delete outputConfig.manualChunks;
|
|
83
|
+
return {
|
|
84
|
+
base,
|
|
85
|
+
rollupConfig
|
|
73
86
|
};
|
|
74
87
|
}
|
|
75
88
|
};
|
|
76
|
-
|
|
77
89
|
//#endregion
|
|
78
90
|
//#region src/build/vite/prod.ts
|
|
79
91
|
const BuilderNames = {
|
|
@@ -82,7 +94,7 @@ const BuilderNames = {
|
|
|
82
94
|
ssr: colors.blue("SSR")
|
|
83
95
|
};
|
|
84
96
|
async function buildEnvironments(ctx, builder) {
|
|
85
|
-
const nitro
|
|
97
|
+
const nitro = ctx.nitro;
|
|
86
98
|
for (const [envName, env] of Object.entries(builder.environments)) {
|
|
87
99
|
const fmtName = BuilderNames[envName] || (envName.length <= 3 ? envName.toUpperCase() : envName[0].toUpperCase() + envName.slice(1));
|
|
88
100
|
if (envName === "nitro" || !env.config.build.rollupOptions.input || env.isBuilt) {
|
|
@@ -90,11 +102,11 @@ async function buildEnvironments(ctx, builder) {
|
|
|
90
102
|
"nitro",
|
|
91
103
|
"ssr",
|
|
92
104
|
"client"
|
|
93
|
-
].includes(envName)) nitro
|
|
105
|
+
].includes(envName)) nitro.logger.info(env.isBuilt ? `Skipping ${fmtName} (already built)` : `Skipping ${fmtName} (no input defined)`);
|
|
94
106
|
continue;
|
|
95
107
|
}
|
|
96
|
-
if (!
|
|
97
|
-
nitro
|
|
108
|
+
if (!v && !m) console.log();
|
|
109
|
+
nitro.logger.start(`Building [${fmtName}]`);
|
|
98
110
|
await builder.build(env);
|
|
99
111
|
}
|
|
100
112
|
const nitroOptions = ctx.nitro.options;
|
|
@@ -111,13 +123,13 @@ async function buildEnvironments(ctx, builder) {
|
|
|
111
123
|
}
|
|
112
124
|
}
|
|
113
125
|
await builder.writeAssetsManifest?.();
|
|
114
|
-
if (!
|
|
115
|
-
const buildInfo = [["preset", nitro
|
|
116
|
-
nitro
|
|
117
|
-
await copyPublicAssets(nitro
|
|
126
|
+
if (!v && !m) console.log();
|
|
127
|
+
const buildInfo = [["preset", nitro.options.preset], ["compatibility", formatCompatibilityDate(nitro.options.compatibilityDate)]].filter((e) => e[1]);
|
|
128
|
+
nitro.logger.start(`Building [${BuilderNames.nitro}] ${colors.dim(`(${buildInfo.map(([k, v]) => `${k}: \`${v}\``).join(", ")})`)}`);
|
|
129
|
+
await copyPublicAssets(nitro);
|
|
118
130
|
const assetDirs = new Set(Object.values(builder.environments).filter((env) => env.config.consumer === "client").map((env) => env.config.build.assetsDir).filter(Boolean));
|
|
119
131
|
for (const assetsDir of assetDirs) {
|
|
120
|
-
if (!existsSync(resolve$1(nitro
|
|
132
|
+
if (!existsSync(resolve$1(nitro.options.output.publicDir, assetsDir))) continue;
|
|
121
133
|
const rule = ctx.nitro.options.routeRules[`/${assetsDir}/**`] ??= {};
|
|
122
134
|
if (!rule.headers?.["cache-control"]) rule.headers = {
|
|
123
135
|
...rule.headers,
|
|
@@ -125,17 +137,14 @@ async function buildEnvironments(ctx, builder) {
|
|
|
125
137
|
};
|
|
126
138
|
}
|
|
127
139
|
ctx.nitro.routing.sync();
|
|
128
|
-
await
|
|
129
|
-
await
|
|
130
|
-
await nitro
|
|
131
|
-
await
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
if (!a && !T) console.log();
|
|
137
|
-
if (nitro$1.options.commands.preview) nitro$1.logger.success(`You can preview this build using \`${rewriteRelativePaths(nitro$1.options.commands.preview)}\``);
|
|
138
|
-
if (nitro$1.options.commands.deploy) nitro$1.logger.success(`You can deploy this build using \`${rewriteRelativePaths(nitro$1.options.commands.deploy)}\``);
|
|
140
|
+
await prerender(nitro);
|
|
141
|
+
const output = await builder.build(builder.environments.nitro);
|
|
142
|
+
await nitro.close();
|
|
143
|
+
await nitro.hooks.callHook("compiled", nitro);
|
|
144
|
+
await writeBuildInfo(nitro, output);
|
|
145
|
+
if (!v && !m) console.log();
|
|
146
|
+
nitro.logger.success("You can preview this build using `npx vite preview`");
|
|
147
|
+
if (nitro.options.commands.deploy) nitro.logger.success("You can deploy this build using `npx nitro deploy --prebuilt`");
|
|
139
148
|
}
|
|
140
149
|
function prodSetup(ctx) {
|
|
141
150
|
return `
|
|
@@ -161,83 +170,69 @@ ${Object.keys(ctx.services).map((name) => {
|
|
|
161
170
|
globalThis.__nitro_vite_envs__ = services;
|
|
162
171
|
`;
|
|
163
172
|
}
|
|
164
|
-
|
|
165
173
|
//#endregion
|
|
166
174
|
//#region src/build/vite/dev.ts
|
|
167
|
-
function createFetchableDevEnvironment(name, config, devServer, entry) {
|
|
175
|
+
function createFetchableDevEnvironment(name, config, devServer, entry, opts) {
|
|
168
176
|
return new FetchableDevEnvironment(name, config, {
|
|
169
177
|
hot: true,
|
|
170
|
-
transport:
|
|
171
|
-
}, devServer, entry);
|
|
178
|
+
transport: createViteHotChannel(devServer, name)
|
|
179
|
+
}, devServer, entry, opts);
|
|
172
180
|
}
|
|
173
181
|
var FetchableDevEnvironment = class extends DevEnvironment {
|
|
174
182
|
devServer;
|
|
175
|
-
|
|
183
|
+
#entry;
|
|
184
|
+
#preventExternalize;
|
|
185
|
+
constructor(name, config, context, devServer, entry, opts) {
|
|
176
186
|
super(name, config, context);
|
|
177
187
|
this.devServer = devServer;
|
|
178
|
-
this
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
}
|
|
188
|
+
this.#entry = entry;
|
|
189
|
+
this.#preventExternalize = opts?.preventExternalize ?? false;
|
|
190
|
+
}
|
|
191
|
+
async fetchModule(id, importer, options) {
|
|
192
|
+
if (this.#preventExternalize && !id.startsWith("file://") && importer && id[0] !== "." && id[0] !== "/") {
|
|
193
|
+
const resolved = await this.pluginContainer.resolveId(id, importer);
|
|
194
|
+
if (resolved && !resolved.external) return super.fetchModule(resolved.id, importer, options);
|
|
195
|
+
}
|
|
196
|
+
return super.fetchModule(id, importer, options);
|
|
186
197
|
}
|
|
187
198
|
async dispatchFetch(request) {
|
|
188
199
|
return this.devServer.fetch(request);
|
|
189
200
|
}
|
|
190
201
|
async init(...args) {
|
|
191
202
|
await this.devServer.init?.();
|
|
192
|
-
|
|
203
|
+
await super.init(...args);
|
|
204
|
+
this.devServer.sendMessage({
|
|
205
|
+
type: "custom",
|
|
206
|
+
event: "nitro:vite-env",
|
|
207
|
+
data: {
|
|
208
|
+
name: this.name,
|
|
209
|
+
entry: this.#entry
|
|
210
|
+
}
|
|
211
|
+
});
|
|
193
212
|
}
|
|
194
213
|
};
|
|
195
|
-
function createTransport(name, hooks) {
|
|
196
|
-
const listeners = /* @__PURE__ */ new WeakMap();
|
|
197
|
-
return {
|
|
198
|
-
send: (data) => hooks.sendMessage({
|
|
199
|
-
...data,
|
|
200
|
-
viteEnv: name
|
|
201
|
-
}),
|
|
202
|
-
on: (event, handler) => {
|
|
203
|
-
if (event === "connection") return;
|
|
204
|
-
const listener = (value) => {
|
|
205
|
-
if (value?.type === "custom" && value.event === event && value.viteEnv === name) handler(value.data, { send: (payload) => hooks.sendMessage({
|
|
206
|
-
...payload,
|
|
207
|
-
viteEnv: name
|
|
208
|
-
}) });
|
|
209
|
-
};
|
|
210
|
-
listeners.set(handler, listener);
|
|
211
|
-
hooks.onMessage(listener);
|
|
212
|
-
},
|
|
213
|
-
off: (event, handler) => {
|
|
214
|
-
if (event === "connection") return;
|
|
215
|
-
const listener = listeners.get(handler);
|
|
216
|
-
if (listener) {
|
|
217
|
-
hooks.offMessage(listener);
|
|
218
|
-
listeners.delete(handler);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
214
|
async function configureViteDevServer(ctx, server) {
|
|
224
|
-
const nitro
|
|
225
|
-
const nitroEnv
|
|
226
|
-
const nitroConfigFile = nitro
|
|
215
|
+
const nitro = ctx.nitro;
|
|
216
|
+
const nitroEnv = server.environments.nitro;
|
|
217
|
+
const nitroConfigFile = nitro.options._c12.configFile;
|
|
227
218
|
if (nitroConfigFile) server.config.configFileDependencies.push(nitroConfigFile);
|
|
228
|
-
if (nitro
|
|
229
|
-
if (req.
|
|
230
|
-
getEnvRunner(ctx).upgrade?.(
|
|
219
|
+
if (nitro.options.features.websocket ?? nitro.options.experimental.websocket) server.httpServer.on("upgrade", (req, socket, head) => {
|
|
220
|
+
if (req.headers["sec-websocket-protocol"]?.startsWith("vite-")) return;
|
|
221
|
+
getEnvRunner(ctx).upgrade?.({ node: {
|
|
222
|
+
req,
|
|
223
|
+
socket,
|
|
224
|
+
head
|
|
225
|
+
} });
|
|
231
226
|
});
|
|
232
227
|
const reload = debounce(async () => {
|
|
233
|
-
await scanHandlers(nitro
|
|
234
|
-
nitro
|
|
235
|
-
nitroEnv
|
|
236
|
-
nitroEnv
|
|
228
|
+
await scanHandlers(nitro);
|
|
229
|
+
nitro.routing.sync();
|
|
230
|
+
nitroEnv.moduleGraph.invalidateAll();
|
|
231
|
+
nitroEnv.hot.send({ type: "full-reload" });
|
|
237
232
|
});
|
|
238
|
-
const scanDirs = nitro
|
|
239
|
-
join$1(dir, nitro
|
|
240
|
-
join$1(dir, nitro
|
|
233
|
+
const scanDirs = nitro.options.scanDirs.flatMap((dir) => [
|
|
234
|
+
join$1(dir, nitro.options.apiDir || "api"),
|
|
235
|
+
join$1(dir, nitro.options.routesDir || "routes"),
|
|
241
236
|
join$1(dir, "middleware"),
|
|
242
237
|
join$1(dir, "plugins"),
|
|
243
238
|
join$1(dir, "modules")
|
|
@@ -248,29 +243,27 @@ async function configureViteDevServer(ctx, server) {
|
|
|
248
243
|
"unlink",
|
|
249
244
|
"unlinkDir"
|
|
250
245
|
]);
|
|
251
|
-
const scanDirsWatcher = watch$1(scanDirs, { ignoreInitial: true }).on("all", (event, path
|
|
246
|
+
const scanDirsWatcher = watch$1(scanDirs, { ignoreInitial: true }).on("all", (event, path, stat) => {
|
|
252
247
|
if (watchReloadEvents.has(event)) reload();
|
|
253
248
|
});
|
|
254
|
-
const rootDirWatcher = watch(nitro
|
|
249
|
+
const rootDirWatcher = watch(nitro.options.rootDir, { persistent: false }, (_event, filename) => {
|
|
255
250
|
if (filename && /^server\.[mc]?[jt]sx?$/.test(filename)) reload();
|
|
256
251
|
});
|
|
257
|
-
nitro
|
|
252
|
+
nitro.hooks.hook("close", () => {
|
|
258
253
|
scanDirsWatcher.close();
|
|
259
254
|
rootDirWatcher.close();
|
|
260
255
|
});
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
data: res
|
|
273
|
-
}
|
|
256
|
+
nitroEnv.devServer.onMessage(async (message) => {
|
|
257
|
+
if (message?.__rpc === "transformHTML") try {
|
|
258
|
+
const html = (await server.transformIndexHtml("/", message.data)).replace("<!--ssr-outlet-->", `{{{ globalThis.__nitro_vite_envs__?.["ssr"]?.fetch($REQUEST) || "" }}}`);
|
|
259
|
+
nitroEnv.devServer.sendMessage({
|
|
260
|
+
__rpc_id: message.__rpc_id,
|
|
261
|
+
data: html
|
|
262
|
+
});
|
|
263
|
+
} catch (error) {
|
|
264
|
+
nitroEnv.devServer.sendMessage({
|
|
265
|
+
__rpc_id: message.__rpc_id,
|
|
266
|
+
error: error instanceof Error ? error.message : String(error)
|
|
274
267
|
});
|
|
275
268
|
}
|
|
276
269
|
});
|
|
@@ -285,7 +278,7 @@ async function configureViteDevServer(ctx, server) {
|
|
|
285
278
|
const devAppRes = await ctx.devApp.fetch(req);
|
|
286
279
|
if (nodeRes.writableEnded || nodeRes.headersSent) return;
|
|
287
280
|
if (devAppRes.status !== 404) return await sendNodeResponse(nodeRes, devAppRes);
|
|
288
|
-
const envRes = await nitroEnv
|
|
281
|
+
const envRes = await nitroEnv.dispatchFetch(req);
|
|
289
282
|
if (nodeRes.writableEnded || nodeRes.headersSent) return;
|
|
290
283
|
return await sendNodeResponse(nodeRes, envRes);
|
|
291
284
|
} catch (error) {
|
|
@@ -302,17 +295,10 @@ async function configureViteDevServer(ctx, server) {
|
|
|
302
295
|
server.middlewares.use(nitroDevMiddleware);
|
|
303
296
|
};
|
|
304
297
|
}
|
|
305
|
-
|
|
306
298
|
//#endregion
|
|
307
299
|
//#region src/build/vite/env.ts
|
|
308
|
-
function getEnvRunner(ctx) {
|
|
309
|
-
return ctx._envRunner ??= new NodeEnvRunner({
|
|
310
|
-
name: "nitro-vite",
|
|
311
|
-
entry: resolve(runtimeDir, "internal/vite/node-runner.mjs"),
|
|
312
|
-
data: { server: true }
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
300
|
function createNitroEnvironment(ctx) {
|
|
301
|
+
const isWorkerdRunner = _isWorkerdRunner(ctx);
|
|
316
302
|
return {
|
|
317
303
|
consumer: "server",
|
|
318
304
|
build: {
|
|
@@ -321,22 +307,34 @@ function createNitroEnvironment(ctx) {
|
|
|
321
307
|
minify: ctx.nitro.options.minify,
|
|
322
308
|
emptyOutDir: false,
|
|
323
309
|
sourcemap: ctx.nitro.options.sourcemap,
|
|
324
|
-
commonjsOptions: ctx.nitro.options.commonJS
|
|
310
|
+
commonjsOptions: ctx.nitro.options.commonJS,
|
|
311
|
+
copyPublicDir: false
|
|
325
312
|
},
|
|
326
313
|
resolve: {
|
|
327
|
-
noExternal: ctx.nitro.options.dev ? [
|
|
314
|
+
noExternal: ctx.nitro.options.dev ? isWorkerdRunner ? true : [
|
|
328
315
|
/^nitro$/,
|
|
329
|
-
|
|
316
|
+
new RegExp(`^(${runtimeDependencies.join("|")})$`),
|
|
330
317
|
...ctx.bundlerConfig.base.noExternal
|
|
331
318
|
] : true,
|
|
332
|
-
conditions:
|
|
319
|
+
conditions: isWorkerdRunner ? [
|
|
320
|
+
"workerd",
|
|
321
|
+
"worker",
|
|
322
|
+
...ctx.nitro.options.exportConditions.filter((c) => c !== "node")
|
|
323
|
+
] : ctx.nitro.options.exportConditions,
|
|
333
324
|
externalConditions: ctx.nitro.options.exportConditions?.filter((c) => !/browser|wasm|module/.test(c))
|
|
334
325
|
},
|
|
335
326
|
define: { "process.env.NODE_ENV": JSON.stringify(ctx.nitro.options.dev ? "development" : "production") },
|
|
336
|
-
dev: { createEnvironment: (envName, envConfig) =>
|
|
327
|
+
dev: { createEnvironment: (envName, envConfig) => {
|
|
328
|
+
const entry = resolve(runtimeDir, "internal/vite/dev-entry.mjs");
|
|
329
|
+
const env = createFetchableDevEnvironment(envName, envConfig, getEnvRunner(ctx), entry, { preventExternalize: isWorkerdRunner });
|
|
330
|
+
ctx._transformRequest = (id) => env.transformRequest(id);
|
|
331
|
+
(ctx._viteEnvs ??= /* @__PURE__ */ new Map()).set(envName, entry);
|
|
332
|
+
return env;
|
|
333
|
+
} }
|
|
337
334
|
};
|
|
338
335
|
}
|
|
339
336
|
function createServiceEnvironment(ctx, name, serviceConfig) {
|
|
337
|
+
const isWorkerdRunner = _isWorkerdRunner(ctx);
|
|
340
338
|
return {
|
|
341
339
|
consumer: "server",
|
|
342
340
|
build: {
|
|
@@ -344,18 +342,79 @@ function createServiceEnvironment(ctx, name, serviceConfig) {
|
|
|
344
342
|
minify: ctx.nitro.options.minify,
|
|
345
343
|
sourcemap: ctx.nitro.options.sourcemap,
|
|
346
344
|
outDir: join(ctx.nitro.options.buildDir, "vite/services", name),
|
|
347
|
-
emptyOutDir: true
|
|
345
|
+
emptyOutDir: true,
|
|
346
|
+
copyPublicDir: false
|
|
348
347
|
},
|
|
349
348
|
resolve: {
|
|
350
|
-
|
|
349
|
+
...isWorkerdRunner ? { noExternal: true } : {},
|
|
350
|
+
conditions: isWorkerdRunner ? [
|
|
351
|
+
"workerd",
|
|
352
|
+
"worker",
|
|
353
|
+
...ctx.nitro.options.exportConditions.filter((c) => c !== "node")
|
|
354
|
+
] : ctx.nitro.options.exportConditions,
|
|
351
355
|
externalConditions: ctx.nitro.options.exportConditions?.filter((c) => !/browser|wasm|module/.test(c))
|
|
352
356
|
},
|
|
353
|
-
dev: { createEnvironment: (envName, envConfig) =>
|
|
357
|
+
dev: { createEnvironment: (envName, envConfig) => {
|
|
358
|
+
const entry = tryResolve(serviceConfig.entry);
|
|
359
|
+
(ctx._viteEnvs ??= /* @__PURE__ */ new Map()).set(envName, entry);
|
|
360
|
+
return createFetchableDevEnvironment(envName, envConfig, getEnvRunner(ctx), entry, { preventExternalize: isWorkerdRunner });
|
|
361
|
+
} }
|
|
354
362
|
};
|
|
355
363
|
}
|
|
356
364
|
function createServiceEnvironments(ctx) {
|
|
357
365
|
return Object.fromEntries(Object.entries(ctx.services).map(([name, config]) => [name, createServiceEnvironment(ctx, name, config)]));
|
|
358
366
|
}
|
|
367
|
+
async function initEnvRunner(ctx) {
|
|
368
|
+
if (ctx._envRunner) return ctx._envRunner;
|
|
369
|
+
if (!ctx._initPromise) ctx._initPromise = (async () => {
|
|
370
|
+
const manager = new RunnerManager();
|
|
371
|
+
let _retries = 0;
|
|
372
|
+
manager.onClose((_runner, cause) => {
|
|
373
|
+
if (_retries++ < 3) {
|
|
374
|
+
ctx.nitro.logger.info("Restarting env runner...", cause ? `Cause: ${cause}` : "");
|
|
375
|
+
_loadRunner(ctx, manager);
|
|
376
|
+
} else ctx.nitro.logger.error("Env runner failed after 3 retries.", cause ? `Last cause: ${cause}` : "");
|
|
377
|
+
});
|
|
378
|
+
manager.onReady(() => {
|
|
379
|
+
_retries = 0;
|
|
380
|
+
if (ctx._viteEnvs) for (const [name, entry] of ctx._viteEnvs) manager.sendMessage({
|
|
381
|
+
type: "custom",
|
|
382
|
+
event: "nitro:vite-env",
|
|
383
|
+
data: {
|
|
384
|
+
name,
|
|
385
|
+
entry
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
});
|
|
389
|
+
await _loadRunner(ctx, manager);
|
|
390
|
+
ctx._envRunner = manager;
|
|
391
|
+
return manager;
|
|
392
|
+
})();
|
|
393
|
+
return await ctx._initPromise;
|
|
394
|
+
}
|
|
395
|
+
function getEnvRunner(ctx) {
|
|
396
|
+
if (!ctx._envRunner) throw new Error("Env runner not initialized. Call initEnvRunner() first.");
|
|
397
|
+
return ctx._envRunner;
|
|
398
|
+
}
|
|
399
|
+
async function _loadRunner(ctx, manager) {
|
|
400
|
+
const runnerName = ctx.nitro.options.devServer.runner || process.env.NITRO_DEV_RUNNER || "node-worker";
|
|
401
|
+
const entry = resolve(runtimeDir, "internal/vite/dev-worker.mjs");
|
|
402
|
+
let runner;
|
|
403
|
+
if (runnerName === "miniflare") {
|
|
404
|
+
const { MiniflareEnvRunner } = await import("env-runner/runners/miniflare");
|
|
405
|
+
runner = new MiniflareEnvRunner({
|
|
406
|
+
name: "nitro-vite",
|
|
407
|
+
data: { entry }
|
|
408
|
+
});
|
|
409
|
+
} else runner = await loadRunner(runnerName, {
|
|
410
|
+
name: "nitro-vite",
|
|
411
|
+
data: { entry }
|
|
412
|
+
});
|
|
413
|
+
await manager.reload(runner);
|
|
414
|
+
}
|
|
415
|
+
function _isWorkerdRunner(ctx) {
|
|
416
|
+
return (ctx.nitro.options.devServer.runner || process.env.NITRO_DEV_RUNNER || "node-worker") === "miniflare";
|
|
417
|
+
}
|
|
359
418
|
function tryResolve(id) {
|
|
360
419
|
if (/^[~#/\0]/.test(id) || isAbsolute$1(id)) return id;
|
|
361
420
|
return resolveModulePath(id, {
|
|
@@ -372,7 +431,6 @@ function tryResolve(id) {
|
|
|
372
431
|
try: true
|
|
373
432
|
}) || id;
|
|
374
433
|
}
|
|
375
|
-
|
|
376
434
|
//#endregion
|
|
377
435
|
//#region src/build/vite/preview.ts
|
|
378
436
|
function nitroPreviewPlugin(ctx) {
|
|
@@ -383,87 +441,27 @@ function nitroPreviewPlugin(ctx) {
|
|
|
383
441
|
return { preview: { port: config.preview?.port || 3e3 } };
|
|
384
442
|
},
|
|
385
443
|
async configurePreviewServer(server) {
|
|
386
|
-
const
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
["Build Directory:", prettyPath(outputDir)],
|
|
390
|
-
["Date:", buildInfo.date && new Date(buildInfo.date).toLocaleString()],
|
|
391
|
-
["Nitro Version:", buildInfo.versions.nitro],
|
|
392
|
-
["Nitro Preset:", buildInfo.preset],
|
|
393
|
-
buildInfo.framework?.name !== "nitro" && ["Framework:", buildInfo.framework?.name + (buildInfo.framework?.version ? ` (v${buildInfo.framework.version})` : "")]
|
|
394
|
-
].filter((i) => i && i[1]);
|
|
395
|
-
consola$1.box({
|
|
396
|
-
title: " [Build Info] ",
|
|
397
|
-
message: info.map((i) => `- ${i[0]} ${i[1]}`).join("\n")
|
|
398
|
-
});
|
|
399
|
-
if (!buildInfo.commands?.preview) {
|
|
400
|
-
consola$1.warn("No nitro build preview command found for this preset.");
|
|
401
|
-
return;
|
|
402
|
-
}
|
|
403
|
-
const dotEnvEntries = await loadPreviewDotEnv(server.config.root);
|
|
404
|
-
if (dotEnvEntries.length > 0) consola$1.box({
|
|
405
|
-
title: " [Environment Variables] ",
|
|
406
|
-
message: [
|
|
407
|
-
"Loaded variables from .env files (preview mode only).",
|
|
408
|
-
"Set platform environment variables for production:",
|
|
409
|
-
...dotEnvEntries.map(([key, val]) => ` - ${key}`)
|
|
410
|
-
].join("\n")
|
|
411
|
-
});
|
|
412
|
-
const [command, ...args] = buildInfo.commands.preview.split(" ");
|
|
413
|
-
consola$1.info(`Spawning preview server...`);
|
|
414
|
-
consola$1.info(buildInfo.commands?.preview);
|
|
415
|
-
console.log("");
|
|
416
|
-
const { getRandomPort, waitForPort } = await import("get-port-please");
|
|
417
|
-
const randomPort = await getRandomPort();
|
|
418
|
-
const child = spawn(command, args, {
|
|
419
|
-
stdio: "inherit",
|
|
420
|
-
cwd: outputDir,
|
|
421
|
-
env: {
|
|
422
|
-
...process.env,
|
|
423
|
-
...Object.fromEntries(dotEnvEntries),
|
|
424
|
-
PORT: String(randomPort)
|
|
425
|
-
}
|
|
426
|
-
});
|
|
427
|
-
const killChild = (signal) => {
|
|
428
|
-
if (child && !child.killed) child.kill(signal);
|
|
429
|
-
};
|
|
430
|
-
for (const sig of ["SIGINT", "SIGHUP"]) process.once(sig, () => {
|
|
431
|
-
consola$1.info(`Stopping preview server...`);
|
|
432
|
-
killChild(sig);
|
|
433
|
-
process.exit();
|
|
444
|
+
const preview = await startPreview({
|
|
445
|
+
rootDir: server.config.root,
|
|
446
|
+
loader: { nodeServer: server.httpServer }
|
|
434
447
|
});
|
|
435
|
-
server.httpServer.once("close", () => {
|
|
436
|
-
|
|
448
|
+
server.httpServer.once("close", async () => {
|
|
449
|
+
await preview.close();
|
|
437
450
|
});
|
|
438
|
-
|
|
439
|
-
|
|
451
|
+
const { NodeRequest, sendNodeResponse } = await import("srvx/node");
|
|
452
|
+
server.middlewares.use(async (req, res, next) => {
|
|
453
|
+
const nodeReq = new NodeRequest({
|
|
454
|
+
req,
|
|
455
|
+
res
|
|
456
|
+
});
|
|
457
|
+
await sendNodeResponse(res, await preview.fetch(nodeReq)).catch(next);
|
|
440
458
|
});
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
server.middlewares.use((req, res, next) => {
|
|
444
|
-
if (child && !child.killed) proxy.web(req, res).catch(next);
|
|
445
|
-
else res.end(`Nitro preview server is not running.`);
|
|
446
|
-
});
|
|
447
|
-
await waitForPort(randomPort, {
|
|
448
|
-
retries: 20,
|
|
449
|
-
delay: 500
|
|
459
|
+
if (preview.upgrade) server.httpServer.on("upgrade", (req, socket, head) => {
|
|
460
|
+
preview.upgrade(req, socket, head);
|
|
450
461
|
});
|
|
451
462
|
}
|
|
452
463
|
};
|
|
453
464
|
}
|
|
454
|
-
async function loadPreviewDotEnv(root) {
|
|
455
|
-
const { loadDotenv } = await import("./_libs/rc9+c12+dotenv.mjs").then((n) => n.t);
|
|
456
|
-
const env = await loadDotenv({
|
|
457
|
-
cwd: root,
|
|
458
|
-
fileName: [
|
|
459
|
-
".env.preview",
|
|
460
|
-
".env.production",
|
|
461
|
-
".env"
|
|
462
|
-
]
|
|
463
|
-
});
|
|
464
|
-
return Object.entries(env).filter(([_key, val]) => val);
|
|
465
|
-
}
|
|
466
|
-
|
|
467
465
|
//#endregion
|
|
468
466
|
//#region src/build/vite/plugin.ts
|
|
469
467
|
const DEFAULT_EXTENSIONS = [
|
|
@@ -476,6 +474,7 @@ const DEFAULT_EXTENSIONS = [
|
|
|
476
474
|
];
|
|
477
475
|
const debug = process.env.NITRO_DEBUG ? (...args) => console.log("[nitro]", ...args) : () => {};
|
|
478
476
|
function nitro(pluginConfig = {}) {
|
|
477
|
+
if (globalThis.__nitro_build__) return [];
|
|
479
478
|
const ctx = createContext(pluginConfig);
|
|
480
479
|
return [
|
|
481
480
|
nitroInit(ctx),
|
|
@@ -531,6 +530,7 @@ function nitroEnv(ctx) {
|
|
|
531
530
|
debug("[env] Configuring client environment", name === "client" ? "" : ` (${name})`);
|
|
532
531
|
config.build.emptyOutDir = false;
|
|
533
532
|
config.build.outDir = useNitro(ctx).options.output.publicDir;
|
|
533
|
+
config.build.copyPublicDir ??= false;
|
|
534
534
|
return;
|
|
535
535
|
}
|
|
536
536
|
if (name === "nitro" || ctx.services[name]) return;
|
|
@@ -597,19 +597,21 @@ function nitroMain(ctx) {
|
|
|
597
597
|
return configureViteDevServer(ctx, server);
|
|
598
598
|
},
|
|
599
599
|
async hotUpdate({ server, modules, timestamp }) {
|
|
600
|
+
if (ctx.pluginConfig.experimental?.vite?.serverReload === false) return;
|
|
600
601
|
const env = this.environment;
|
|
601
|
-
if (
|
|
602
|
-
const clientEnvs = Object.values(server.environments).filter((env
|
|
603
|
-
|
|
602
|
+
if (env.config.consumer === "client") return;
|
|
603
|
+
const clientEnvs = Object.values(server.environments).filter((env) => env.config.consumer === "client");
|
|
604
|
+
const serverOnlyModules = [];
|
|
605
|
+
const sharedModules = [];
|
|
604
606
|
const invalidated = /* @__PURE__ */ new Set();
|
|
605
|
-
for (const mod of modules) if (mod.id && !clientEnvs.some((env
|
|
606
|
-
|
|
607
|
+
for (const mod of modules) if (mod.id && !clientEnvs.some((env) => env.moduleGraph.getModuleById(mod.id))) {
|
|
608
|
+
serverOnlyModules.push(mod);
|
|
607
609
|
env.moduleGraph.invalidateModule(mod, invalidated, timestamp, false);
|
|
608
|
-
}
|
|
609
|
-
if (
|
|
610
|
+
} else sharedModules.push(mod);
|
|
611
|
+
if (serverOnlyModules.length > 0) {
|
|
610
612
|
env.hot.send({ type: "full-reload" });
|
|
611
|
-
server.ws.send({ type: "full-reload" });
|
|
612
|
-
return
|
|
613
|
+
if (sharedModules.length === 0 && serverOnlyModules.some((m) => m.environment !== "ssr")) server.ws.send({ type: "full-reload" });
|
|
614
|
+
return sharedModules;
|
|
613
615
|
}
|
|
614
616
|
}
|
|
615
617
|
};
|
|
@@ -672,7 +674,9 @@ async function setupNitroContext(ctx, configEnv, userConfig) {
|
|
|
672
674
|
};
|
|
673
675
|
nitroConfig.modules ??= [];
|
|
674
676
|
for (const plugin of flattenPlugins(userConfig.plugins || [])) if (plugin.nitro) nitroConfig.modules.push(plugin.nitro);
|
|
675
|
-
|
|
677
|
+
const dotenvFileNames = [".env", ".env.local"];
|
|
678
|
+
if (configEnv.mode) dotenvFileNames.push(`.env.${configEnv.mode}`, `.env.${configEnv.mode}.local`);
|
|
679
|
+
ctx.nitro = ctx.pluginConfig._nitro || await createNitro(nitroConfig, { dotenv: { fileName: dotenvFileNames } });
|
|
676
680
|
if (!ctx.services?.ssr) if (userConfig.environments?.ssr === void 0) {
|
|
677
681
|
const ssrEntry = resolveModulePath("./entry-server", {
|
|
678
682
|
from: [
|
|
@@ -717,7 +721,7 @@ async function setupNitroContext(ctx, configEnv, userConfig) {
|
|
|
717
721
|
await ctx.nitro.hooks.callHook("build:before", ctx.nitro);
|
|
718
722
|
ctx.bundlerConfig = await getBundlerConfig(ctx);
|
|
719
723
|
await ctx.nitro.hooks.callHook("rollup:before", ctx.nitro, ctx.bundlerConfig.rollupConfig || ctx.bundlerConfig.rolldownConfig);
|
|
720
|
-
if (ctx.nitro.options.dev)
|
|
724
|
+
if (ctx.nitro.options.dev) await initEnvRunner(ctx);
|
|
721
725
|
ctx.nitro.fetch = (req) => getEnvRunner(ctx).fetch(req);
|
|
722
726
|
if (ctx.nitro.options.dev && !ctx.devApp) ctx.devApp = new NitroDevApp(ctx.nitro);
|
|
723
727
|
ctx.nitro.hooks.hook("close", async () => {
|
|
@@ -732,6 +736,5 @@ function getEntry(input) {
|
|
|
732
736
|
function flattenPlugins(plugins) {
|
|
733
737
|
return plugins.flatMap((plugin) => Array.isArray(plugin) ? flattenPlugins(plugin) : [plugin]).filter((p) => p && !(p instanceof Promise));
|
|
734
738
|
}
|
|
735
|
-
|
|
736
739
|
//#endregion
|
|
737
|
-
export { nitro };
|
|
740
|
+
export { nitro };
|