nitro-nightly 4.0.0-20251010-091516-7cafddba → 4.0.0-20251030-121649-98b56dfe
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/dist/_build/common.mjs +763 -0
- package/dist/_build/rolldown.mjs +216 -0
- package/dist/_build/rollup.mjs +359 -0
- package/dist/_build/vite.build.mjs +67 -0
- package/dist/_build/vite.plugin.mjs +747 -0
- package/dist/_chunks/B-7HiF0V.mjs +1303 -0
- package/dist/_chunks/B3asVbT4.mjs +151 -0
- package/dist/_chunks/B5ooyfLk.mjs +372 -0
- package/dist/_chunks/DXMHy5ca.mjs +43 -0
- package/dist/_dev.d.mts +12 -0
- package/dist/_dev.mjs +675 -0
- package/dist/_libs/acorn.mjs +5034 -0
- package/dist/_libs/c12.mjs +2798 -0
- package/dist/_libs/chokidar.mjs +1560 -0
- package/dist/_libs/citty.mjs +333 -0
- package/dist/_libs/commondir.mjs +22 -0
- package/dist/_libs/compatx.mjs +46 -0
- package/dist/_libs/confbox.mjs +2920 -0
- package/dist/_libs/debug.mjs +848 -0
- package/dist/_libs/deepmerge.mjs +86 -0
- package/dist/_libs/depd.mjs +314 -0
- package/dist/_libs/dot-prop.mjs +138 -0
- package/dist/_libs/duplexer.mjs +71 -0
- package/dist/_libs/ee-first.mjs +68 -0
- package/dist/_libs/encodeurl.mjs +49 -0
- package/dist/_libs/escape-html.mjs +58 -0
- package/dist/_libs/escape-string-regexp.mjs +8 -0
- package/dist/_libs/estree-walker.mjs +330 -0
- package/dist/_libs/etag.mjs +75 -0
- package/dist/_libs/fdir.mjs +514 -0
- package/dist/_libs/fresh.mjs +85 -0
- package/dist/_libs/function-bind.mjs +63 -0
- package/dist/_libs/gen-mapping.mjs +612 -0
- package/dist/_libs/giget.mjs +19076 -0
- package/dist/_libs/gzip-size.mjs +21 -0
- package/dist/_libs/hasown.mjs +14 -0
- package/dist/_libs/http-errors.mjs +436 -0
- package/dist/_libs/httpxy.mjs +410 -0
- package/dist/_libs/is-core-module.mjs +220 -0
- package/dist/_libs/is-module.mjs +13 -0
- package/dist/_libs/is-reference.mjs +32 -0
- package/dist/_libs/js-tokens.mjs +382 -0
- package/dist/_libs/klona.mjs +90 -0
- package/dist/_libs/knitwork.mjs +124 -0
- package/dist/_libs/local-pkg.mjs +1686 -0
- package/dist/_libs/magic-string.mjs +939 -0
- package/dist/_libs/mime-db.mjs +7642 -0
- package/dist/_libs/mime-types.mjs +162 -0
- package/dist/_libs/mime.mjs +1391 -0
- package/dist/_libs/node-fetch-native.mjs +173 -0
- package/dist/_libs/on-finished.mjs +170 -0
- package/dist/_libs/parseurl.mjs +103 -0
- package/dist/_libs/path-parse.mjs +47 -0
- package/dist/_libs/pathe.mjs +41 -0
- package/dist/_libs/picomatch.mjs +1673 -0
- package/dist/_libs/plugin-alias.mjs +64 -0
- package/dist/_libs/plugin-commonjs.mjs +1489 -0
- package/dist/_libs/plugin-inject.mjs +135 -0
- package/dist/_libs/plugin-json.mjs +36 -0
- package/dist/_libs/plugin-node-resolve.mjs +1553 -0
- package/dist/_libs/plugin-replace.mjs +104 -0
- package/dist/_libs/pretty-bytes.mjs +116 -0
- package/dist/_libs/range-parser.mjs +102 -0
- package/dist/_libs/remapping.mjs +117 -0
- package/dist/_libs/rou3.mjs +311 -0
- package/dist/_libs/send.mjs +857 -0
- package/dist/_libs/serve-static.mjs +124 -0
- package/dist/_libs/std-env.mjs +158 -0
- package/dist/_libs/strip-literal.mjs +51 -0
- package/dist/_libs/tinyglobby.mjs +292 -0
- package/dist/_libs/ultrahtml.mjs +138 -0
- package/dist/_libs/unimport.mjs +3520 -0
- package/dist/_libs/untyped.mjs +271 -0
- package/dist/_libs/unwasm.mjs +5825 -0
- package/dist/_libs/vite-plugin-fullstack.mjs +561 -0
- package/dist/_presets.mjs +1723 -0
- package/dist/builder.d.mts +54 -0
- package/dist/builder.mjs +45 -0
- package/dist/cli/_chunks/build.mjs +43 -0
- package/dist/cli/_chunks/common.mjs +15 -0
- package/dist/cli/_chunks/detect-acorn.mjs +12 -0
- package/dist/cli/_chunks/dev.mjs +79 -0
- package/dist/cli/_chunks/dist.mjs +3 -0
- package/dist/cli/_chunks/dist2.mjs +4 -0
- package/dist/cli/_chunks/esm.mjs +3 -0
- package/dist/cli/_chunks/json5.mjs +4 -0
- package/dist/cli/_chunks/jsonc.mjs +4 -0
- package/dist/cli/_chunks/list.mjs +27 -0
- package/dist/cli/_chunks/multipart-parser.mjs +6 -0
- package/dist/cli/_chunks/prepare.mjs +19 -0
- package/dist/cli/_chunks/run.mjs +55 -0
- package/dist/cli/_chunks/task.mjs +16 -0
- package/dist/cli/_chunks/toml.mjs +4 -0
- package/dist/cli/_chunks/yaml.mjs +4 -0
- package/dist/cli/index.d.mts +1 -1
- package/dist/cli/index.mjs +20 -476
- package/dist/node_modules/@speed-highlight/core/dist/index.js +1 -1
- package/dist/node_modules/@speed-highlight/core/dist/terminal.js +1 -1
- package/dist/node_modules/@speed-highlight/core/package.json +7 -3
- package/dist/node_modules/cookie-es/dist/index.mjs +262 -0
- package/dist/node_modules/cookie-es/package.json +37 -0
- package/dist/node_modules/hookable/dist/index.mjs +243 -266
- package/dist/node_modules/hookable/package.json +29 -26
- package/dist/node_modules/rendu/dist/index.mjs +380 -0
- package/dist/node_modules/rendu/package.json +47 -0
- package/dist/presets/_nitro/runtime/nitro-dev.d.mts +1 -0
- package/dist/presets/_nitro/runtime/nitro-dev.mjs +44 -38
- package/dist/presets/_nitro/runtime/nitro-prerenderer.d.mts +2 -2
- package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +9 -12
- package/dist/presets/_nitro/runtime/service-worker.d.mts +1 -0
- package/dist/presets/_nitro/runtime/service-worker.mjs +14 -11
- package/dist/presets/aws-amplify/runtime/aws-amplify.d.mts +1 -0
- package/dist/presets/aws-amplify/runtime/aws-amplify.mjs +6 -5
- package/dist/presets/aws-lambda/runtime/_utils.d.mts +8 -13
- package/dist/presets/aws-lambda/runtime/_utils.mjs +95 -81
- package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.d.mts +1 -2
- package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.mjs +25 -27
- package/dist/presets/aws-lambda/runtime/aws-lambda.mjs +7 -7
- package/dist/presets/azure/runtime/_utils.mjs +43 -43
- package/dist/presets/azure/runtime/azure-swa.d.mts +2 -2
- package/dist/presets/azure/runtime/azure-swa.mjs +22 -21
- package/dist/presets/bun/runtime/bun.d.mts +1 -0
- package/dist/presets/bun/runtime/bun.mjs +18 -17
- package/dist/presets/cloudflare/runtime/_module-handler.d.mts +10 -7
- package/dist/presets/cloudflare/runtime/_module-handler.mjs +79 -87
- package/dist/presets/cloudflare/runtime/cloudflare-durable.d.mts +6 -14
- package/dist/presets/cloudflare/runtime/cloudflare-durable.mjs +55 -61
- package/dist/presets/cloudflare/runtime/cloudflare-module.d.mts +1 -7
- package/dist/presets/cloudflare/runtime/cloudflare-module.mjs +12 -14
- package/dist/presets/cloudflare/runtime/cloudflare-pages.d.mts +12 -12
- package/dist/presets/cloudflare/runtime/cloudflare-pages.mjs +35 -39
- package/dist/presets/cloudflare/runtime/plugin.dev.d.mts +2 -2
- package/dist/presets/cloudflare/runtime/plugin.dev.mjs +89 -82
- package/dist/presets/cloudflare/runtime/shims/workers.dev.mjs +27 -0
- package/dist/presets/deno/runtime/deno-deploy.d.mts +1 -0
- package/dist/presets/deno/runtime/deno-deploy.mjs +12 -11
- package/dist/presets/deno/runtime/deno-server.d.mts +2 -1
- package/dist/presets/deno/runtime/deno-server.mjs +31 -39
- package/dist/presets/netlify/runtime/netlify-edge.d.mts +2 -1
- package/dist/presets/netlify/runtime/netlify-edge.mjs +14 -11
- package/dist/presets/netlify/runtime/netlify.mjs +11 -17
- package/dist/presets/node/runtime/node-cluster.mjs +49 -48
- package/dist/presets/node/runtime/node-middleware.d.mts +3 -2
- package/dist/presets/node/runtime/node-middleware.mjs +7 -6
- package/dist/presets/node/runtime/node-server.mjs +34 -24
- package/dist/presets/standard/runtime/server.d.mts +1 -3
- package/dist/presets/standard/runtime/server.mjs +1 -3
- package/dist/presets/stormkit/runtime/stormkit.d.mts +13 -13
- package/dist/presets/stormkit/runtime/stormkit.mjs +20 -20
- package/dist/presets/vercel/runtime/vercel.d.mts +3 -3
- package/dist/presets/vercel/runtime/vercel.mjs +15 -14
- package/dist/presets/winterjs/runtime/winterjs.d.mts +2 -0
- package/dist/presets/winterjs/runtime/winterjs.mjs +72 -68
- package/dist/presets/zeabur/runtime/zeabur.d.mts +1 -1
- package/dist/runtime/index.d.mts +13 -2
- package/dist/runtime/index.mjs +13 -8
- package/dist/runtime/internal/app.d.mts +3 -1
- package/dist/runtime/internal/app.mjs +179 -140
- package/dist/runtime/internal/cache.d.mts +10 -4
- package/dist/runtime/internal/cache.mjs +247 -216
- package/dist/runtime/internal/context.d.mts +9 -9
- package/dist/runtime/internal/context.mjs +17 -10
- package/dist/runtime/internal/database.mjs +8 -10
- package/dist/runtime/internal/error/dev.d.mts +5 -4
- package/dist/runtime/internal/error/dev.mjs +106 -105
- package/dist/runtime/internal/error/prod.d.mts +5 -4
- package/dist/runtime/internal/error/prod.mjs +51 -59
- package/dist/runtime/internal/error/utils.d.mts +4 -4
- package/dist/runtime/internal/error/utils.mjs +1 -1
- package/dist/runtime/internal/index.d.mts +2 -0
- package/dist/runtime/internal/index.mjs +2 -0
- package/dist/runtime/internal/lib/http-graceful-shutdown.d.mts +14 -14
- package/dist/runtime/internal/lib/http-graceful-shutdown.mjs +248 -209
- package/dist/runtime/internal/meta.d.mts +1 -1
- package/dist/runtime/internal/meta.mjs +1 -1
- package/dist/runtime/internal/plugin.d.mts +2 -2
- package/dist/runtime/internal/plugin.mjs +1 -1
- package/dist/runtime/internal/renderer.mjs +40 -32
- package/dist/runtime/internal/route-rules.d.mts +8 -8
- package/dist/runtime/internal/route-rules.mjs +53 -51
- package/dist/runtime/internal/routes/dev-tasks.d.mts +1 -2
- package/dist/runtime/internal/routes/dev-tasks.mjs +15 -17
- package/dist/runtime/internal/routes/openapi.d.mts +1 -0
- package/dist/runtime/internal/routes/openapi.mjs +81 -87
- package/dist/runtime/internal/routes/renderer-template.d.mts +1 -1
- package/dist/runtime/internal/routes/renderer-template.dev.d.mts +1 -2
- package/dist/runtime/internal/routes/renderer-template.dev.mjs +10 -17
- package/dist/runtime/internal/routes/renderer-template.mjs +1 -1
- package/dist/runtime/internal/routes/scalar.d.mts +1 -0
- package/dist/runtime/internal/routes/scalar.mjs +22 -23
- package/dist/runtime/internal/routes/swagger.d.mts +1 -0
- package/dist/runtime/internal/routes/swagger.mjs +9 -11
- package/dist/runtime/internal/runtime-config.d.mts +4 -4
- package/dist/runtime/internal/runtime-config.mjs +40 -35
- package/dist/runtime/internal/shutdown.d.mts +2 -8
- package/dist/runtime/internal/shutdown.mjs +32 -30
- package/dist/runtime/internal/static.mjs +63 -74
- package/dist/runtime/internal/storage.mjs +2 -2
- package/dist/runtime/internal/task.d.mts +6 -6
- package/dist/runtime/internal/task.mjs +56 -60
- package/dist/runtime/internal/utils.d.mts +1 -1
- package/dist/runtime/internal/utils.mjs +4 -10
- package/dist/types/index.d.mts +2594 -2286
- package/dist/types/index.mjs +1 -1
- package/dist/vite.d.mts +56 -47
- package/dist/vite.mjs +55 -68
- package/lib/index.d.mts +1 -0
- package/lib/index.mjs +1 -0
- package/lib/runtime/meta.mjs +35 -0
- package/package.json +49 -50
- package/dist/_chunks/app.mjs +0 -19797
- package/dist/_chunks/build.mjs +0 -84
- package/dist/_chunks/build2.mjs +0 -318
- package/dist/_chunks/build3.mjs +0 -6452
- package/dist/_chunks/detect-acorn.mjs +0 -503
- package/dist/_chunks/index.mjs +0 -22242
- package/dist/_chunks/index2.mjs +0 -297
- package/dist/_chunks/index3.mjs +0 -1058
- package/dist/_chunks/index4.mjs +0 -1206
- package/dist/_chunks/info.mjs +0 -11157
- package/dist/_chunks/json5.mjs +0 -68
- package/dist/_chunks/jsonc.mjs +0 -51
- package/dist/_chunks/pathe.M-eThtNZ.mjs +0 -204
- package/dist/_chunks/plugin.mjs +0 -960
- package/dist/_chunks/server.mjs +0 -254
- package/dist/_chunks/snapshot.mjs +0 -284
- package/dist/_chunks/toml.mjs +0 -259
- package/dist/_chunks/yaml.mjs +0 -86
- package/dist/cli/build.mjs +0 -54
- package/dist/cli/common.mjs +0 -13
- package/dist/cli/dev.mjs +0 -95
- package/dist/cli/index2.mjs +0 -17
- package/dist/cli/list.mjs +0 -34
- package/dist/cli/prepare.mjs +0 -24
- package/dist/cli/run.mjs +0 -60
- package/dist/index.d.mts +0 -52
- package/dist/index.mjs +0 -55
- package/dist/node_modules/klona/dist/index.mjs +0 -81
- package/dist/node_modules/klona/full/index.mjs +0 -53
- package/dist/node_modules/klona/package.json +0 -74
- package/dist/node_modules/std-env/dist/index.mjs +0 -1
- package/dist/node_modules/std-env/package.json +0 -46
- package/dist/presets.mjs +0 -2460
- package/dist/runtime/internal/debug.d.mts +0 -2
- package/dist/runtime/internal/debug.mjs +0 -5
- package/dist/runtime/internal/empty.d.mts +0 -0
- package/dist/runtime/internal/vite/dev-entry.d.mts +0 -1
- package/dist/runtime/internal/vite/dev-worker.d.mts +0 -1
- package/dist/runtime/internal/vite/prod-setup.d.mts +0 -4
- package/dist/runtime/internal/vite/ssr-renderer.d.mts +0 -4
- package/lib/runtime-meta.mjs +0 -38
- /package/lib/{runtime-meta.d.mts → runtime/meta.d.mts} +0 -0
package/dist/_chunks/plugin.mjs
DELETED
|
@@ -1,960 +0,0 @@
|
|
|
1
|
-
import { s as sanitizeFilePath, f as formatCompatibilityDate, d as copyPublicAssets, a as scanHandlers, r as resolveModulePath, e as prettyPath, i as createNitro, j as prepare } from './index.mjs';
|
|
2
|
-
import { fileURLToPath } from 'node:url';
|
|
3
|
-
import { colors } from 'consola/utils';
|
|
4
|
-
import { defu } from 'defu';
|
|
5
|
-
import 'ufo';
|
|
6
|
-
import { existsSync, watch as watch$1 } from 'node:fs';
|
|
7
|
-
import { readFile, rm, mkdir, writeFile, readlink } from 'node:fs/promises';
|
|
8
|
-
import 'node:zlib';
|
|
9
|
-
import 'node:worker_threads';
|
|
10
|
-
import consola from 'consola';
|
|
11
|
-
import 'std-env';
|
|
12
|
-
import 'h3';
|
|
13
|
-
import 'undici';
|
|
14
|
-
import 'nitro/meta';
|
|
15
|
-
import { NodeRequest, sendNodeResponse } from 'srvx/node';
|
|
16
|
-
import { d as debounce, w as watch, a as NodeDevWorker, c as createProxyServer, N as NitroDevApp } from './app.mjs';
|
|
17
|
-
import 'klona/full';
|
|
18
|
-
import { runtimeDir, runtimeDependencies } from 'nitro/runtime/meta';
|
|
19
|
-
import 'ofetch';
|
|
20
|
-
import { a as alias, i as inject } from './index2.mjs';
|
|
21
|
-
import { b as baseBuildConfig, d as baseBuildPlugins, r as replace, e as writeBuildInfo } from './info.mjs';
|
|
22
|
-
import { r as resolve, d as dirname, n as normalize, b as basename, a as relative, j as join, i as isAbsolute } from './pathe.M-eThtNZ.mjs';
|
|
23
|
-
import 'hookable';
|
|
24
|
-
import 'jiti';
|
|
25
|
-
import 'klona';
|
|
26
|
-
import 'unstorage';
|
|
27
|
-
import 'ohash';
|
|
28
|
-
import { resolve as resolve$1, join as join$1 } from 'node:path';
|
|
29
|
-
import 'youch-core';
|
|
30
|
-
import 'youch';
|
|
31
|
-
import 'source-map';
|
|
32
|
-
import 'srvx';
|
|
33
|
-
import { DevEnvironment } from 'vite';
|
|
34
|
-
import { getRandomPort } from 'get-port-please';
|
|
35
|
-
import { spawn } from 'node:child_process';
|
|
36
|
-
|
|
37
|
-
const getViteRollupConfig = (ctx) => {
|
|
38
|
-
const nitro = ctx.nitro;
|
|
39
|
-
const base = baseBuildConfig(nitro);
|
|
40
|
-
const chunkNamePrefixes = [
|
|
41
|
-
[nitro.options.buildDir, "build"],
|
|
42
|
-
[base.buildServerDir, "app"],
|
|
43
|
-
[runtimeDir, "nitro"],
|
|
44
|
-
[base.presetsDir, "nitro"],
|
|
45
|
-
["\0raw:", "raw"],
|
|
46
|
-
["\0nitro-wasm:", "wasm"],
|
|
47
|
-
["\0", "virtual"]
|
|
48
|
-
];
|
|
49
|
-
function getChunkGroup(id) {
|
|
50
|
-
if (id.startsWith(runtimeDir) || id.startsWith(base.presetsDir)) {
|
|
51
|
-
return "nitro";
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
let config = {
|
|
55
|
-
input: nitro.options.entry,
|
|
56
|
-
external: [...base.env.external],
|
|
57
|
-
plugins: [
|
|
58
|
-
ctx.pluginConfig.experimental?.virtualBundle && virtualBundlePlugin(ctx._serviceBundles),
|
|
59
|
-
...baseBuildPlugins(nitro, base),
|
|
60
|
-
alias({ entries: base.aliases }),
|
|
61
|
-
replace({ preventAssignment: true, values: base.replacements }),
|
|
62
|
-
inject(base.env.inject)
|
|
63
|
-
].filter(Boolean),
|
|
64
|
-
treeshake: {
|
|
65
|
-
moduleSideEffects(id) {
|
|
66
|
-
const normalizedId = normalize(id);
|
|
67
|
-
const idWithoutNodeModules = normalizedId.split("node_modules/").pop();
|
|
68
|
-
if (!idWithoutNodeModules) {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
if (normalizedId.startsWith(runtimeDir) || idWithoutNodeModules.startsWith(runtimeDir)) {
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
return nitro.options.moduleSideEffects.some(
|
|
75
|
-
(m) => normalizedId.startsWith(m) || idWithoutNodeModules.startsWith(m)
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
output: {
|
|
80
|
-
dir: nitro.options.output.serverDir,
|
|
81
|
-
entryFileNames: "index.mjs",
|
|
82
|
-
chunkFileNames(chunk) {
|
|
83
|
-
const id = normalize(chunk.moduleIds.at(-1) || "");
|
|
84
|
-
for (const [dir, name] of chunkNamePrefixes) {
|
|
85
|
-
if (id.startsWith(dir)) {
|
|
86
|
-
return `chunks/${name}/[name].mjs`;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
const routeHandler = nitro.options.handlers.find(
|
|
90
|
-
(h) => id.startsWith(h.handler)
|
|
91
|
-
) || nitro.scannedHandlers.find((h) => id.startsWith(h.handler));
|
|
92
|
-
if (routeHandler?.route) {
|
|
93
|
-
const path = routeHandler.route.replace(/:([^/]+)/g, "_$1").replace(/\/[^/]+$/g, "") || "/";
|
|
94
|
-
return `chunks/routes/${path}/[name].mjs`.replace(/\/+/g, "/");
|
|
95
|
-
}
|
|
96
|
-
const taskHandler = Object.entries(nitro.options.tasks).find(
|
|
97
|
-
([_, task]) => task.handler === id
|
|
98
|
-
);
|
|
99
|
-
if (taskHandler) {
|
|
100
|
-
return `chunks/tasks/[name].mjs`;
|
|
101
|
-
}
|
|
102
|
-
return `chunks/_/[name].mjs`;
|
|
103
|
-
},
|
|
104
|
-
manualChunks(id) {
|
|
105
|
-
return getChunkGroup(id);
|
|
106
|
-
},
|
|
107
|
-
inlineDynamicImports: nitro.options.inlineDynamicImports,
|
|
108
|
-
format: "esm",
|
|
109
|
-
exports: "auto",
|
|
110
|
-
intro: "",
|
|
111
|
-
outro: "",
|
|
112
|
-
generatedCode: {
|
|
113
|
-
constBindings: true
|
|
114
|
-
},
|
|
115
|
-
sanitizeFileName: sanitizeFilePath,
|
|
116
|
-
sourcemapExcludeSources: true,
|
|
117
|
-
sourcemapIgnoreList(relativePath) {
|
|
118
|
-
return relativePath.includes("node_modules");
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
};
|
|
122
|
-
config = defu(nitro.options.rollupConfig, config);
|
|
123
|
-
if (config.output.inlineDynamicImports) {
|
|
124
|
-
delete config.output.manualChunks;
|
|
125
|
-
}
|
|
126
|
-
return { config, base };
|
|
127
|
-
};
|
|
128
|
-
function virtualBundlePlugin(bundles) {
|
|
129
|
-
let _modules = null;
|
|
130
|
-
const getModules = () => {
|
|
131
|
-
if (_modules) {
|
|
132
|
-
return _modules;
|
|
133
|
-
}
|
|
134
|
-
_modules = /* @__PURE__ */ new Map();
|
|
135
|
-
for (const bundle of Object.values(bundles)) {
|
|
136
|
-
for (const [fileName, content] of Object.entries(bundle)) {
|
|
137
|
-
if (content.type === "chunk") {
|
|
138
|
-
const virtualModule = {
|
|
139
|
-
code: content.code,
|
|
140
|
-
map: null
|
|
141
|
-
};
|
|
142
|
-
const maybeMap = bundle[`${fileName}.map`];
|
|
143
|
-
if (maybeMap && maybeMap.type === "asset") {
|
|
144
|
-
virtualModule.map = maybeMap.source;
|
|
145
|
-
}
|
|
146
|
-
_modules.set(fileName, virtualModule);
|
|
147
|
-
_modules.set(resolve(fileName), virtualModule);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
return _modules;
|
|
152
|
-
};
|
|
153
|
-
return {
|
|
154
|
-
name: "virtual-bundle",
|
|
155
|
-
resolveId(id, importer) {
|
|
156
|
-
const modules = getModules();
|
|
157
|
-
if (modules.has(id)) {
|
|
158
|
-
return resolve(id);
|
|
159
|
-
}
|
|
160
|
-
if (importer) {
|
|
161
|
-
const resolved = resolve(dirname(importer), id);
|
|
162
|
-
if (modules.has(resolved)) {
|
|
163
|
-
return resolved;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return null;
|
|
167
|
-
},
|
|
168
|
-
load(id) {
|
|
169
|
-
const modules = getModules();
|
|
170
|
-
const m = modules.get(id);
|
|
171
|
-
if (!m) {
|
|
172
|
-
return null;
|
|
173
|
-
}
|
|
174
|
-
return m;
|
|
175
|
-
}
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
const BuilderNames = {
|
|
180
|
-
nitro: colors.magenta("Nitro"),
|
|
181
|
-
client: colors.green("Client"),
|
|
182
|
-
ssr: colors.blue("SSR")
|
|
183
|
-
};
|
|
184
|
-
async function buildEnvironments(ctx, builder) {
|
|
185
|
-
const nitro = ctx.nitro;
|
|
186
|
-
for (const [envName, env] of Object.entries(builder.environments)) {
|
|
187
|
-
const fmtName = BuilderNames[envName] || (envName.length <= 3 ? envName.toUpperCase() : envName[0].toUpperCase() + envName.slice(1));
|
|
188
|
-
if (envName === "nitro" || !env.config.build.rollupOptions.input || env.isBuilt) {
|
|
189
|
-
if (!["nitro", "ssr", "client"].includes(envName)) {
|
|
190
|
-
nitro.logger.info(
|
|
191
|
-
env.isBuilt ? `Skipping ${fmtName} (already built)` : `Skipping ${fmtName} (no input defined)`
|
|
192
|
-
);
|
|
193
|
-
}
|
|
194
|
-
continue;
|
|
195
|
-
}
|
|
196
|
-
console.log();
|
|
197
|
-
nitro.logger.start(`Building [${fmtName}]`);
|
|
198
|
-
await builder.build(env);
|
|
199
|
-
}
|
|
200
|
-
const nitroOptions = ctx.nitro.options;
|
|
201
|
-
const clientInput = builder.environments.client?.config?.build?.rollupOptions?.input;
|
|
202
|
-
if (nitroOptions.renderer?.template && nitroOptions.renderer?.template === clientInput) {
|
|
203
|
-
const outputPath = resolve(
|
|
204
|
-
nitroOptions.output.publicDir,
|
|
205
|
-
basename(clientInput)
|
|
206
|
-
);
|
|
207
|
-
if (existsSync(outputPath)) {
|
|
208
|
-
const html = await readFile(outputPath, "utf8").then(
|
|
209
|
-
(r) => r.replace(
|
|
210
|
-
"<!--ssr-outlet-->",
|
|
211
|
-
`{{{ fetch($REQUEST, { viteEnv: "ssr" }) }}}`
|
|
212
|
-
)
|
|
213
|
-
);
|
|
214
|
-
await rm(outputPath);
|
|
215
|
-
const tmp = resolve(nitroOptions.buildDir, "vite/index.html");
|
|
216
|
-
await mkdir(dirname(tmp), { recursive: true });
|
|
217
|
-
await writeFile(tmp, html, "utf8");
|
|
218
|
-
nitroOptions.renderer.template = tmp;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
console.log();
|
|
222
|
-
const buildInfo = [
|
|
223
|
-
["preset", nitro.options.preset],
|
|
224
|
-
["compatibility", formatCompatibilityDate(nitro.options.compatibilityDate)]
|
|
225
|
-
].filter((e) => e[1]);
|
|
226
|
-
nitro.logger.start(
|
|
227
|
-
`Building [${BuilderNames.nitro}] ${colors.dim(`(${buildInfo.map(([k, v]) => `${k}: \`${v}\``).join(", ")})`)}`
|
|
228
|
-
);
|
|
229
|
-
await copyPublicAssets(nitro);
|
|
230
|
-
await nitro.hooks.callHook(
|
|
231
|
-
"rollup:before",
|
|
232
|
-
nitro,
|
|
233
|
-
builder.environments.nitro.config.build.rollupOptions
|
|
234
|
-
);
|
|
235
|
-
await builder.build(builder.environments.nitro);
|
|
236
|
-
await nitro.close();
|
|
237
|
-
await nitro.hooks.callHook("compiled", nitro);
|
|
238
|
-
await writeBuildInfo(nitro);
|
|
239
|
-
const rOutput = relative(process.cwd(), nitro.options.output.dir);
|
|
240
|
-
const rewriteRelativePaths = (input) => {
|
|
241
|
-
return input.replace(/([\s:])\.\/(\S*)/g, `$1${rOutput}/$2`);
|
|
242
|
-
};
|
|
243
|
-
console.log();
|
|
244
|
-
if (nitro.options.commands.preview) {
|
|
245
|
-
nitro.logger.success(
|
|
246
|
-
`You can preview this build using \`${rewriteRelativePaths(
|
|
247
|
-
nitro.options.commands.preview
|
|
248
|
-
)}\``
|
|
249
|
-
);
|
|
250
|
-
}
|
|
251
|
-
if (nitro.options.commands.deploy) {
|
|
252
|
-
nitro.logger.success(
|
|
253
|
-
`You can deploy this build using \`${rewriteRelativePaths(
|
|
254
|
-
nitro.options.commands.deploy
|
|
255
|
-
)}\``
|
|
256
|
-
);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
function prodSetup(ctx) {
|
|
260
|
-
const services = ctx.pluginConfig.services || {};
|
|
261
|
-
const serviceNames = Object.keys(services);
|
|
262
|
-
const serviceEntries = serviceNames.map((name) => {
|
|
263
|
-
let entry;
|
|
264
|
-
if (ctx.pluginConfig.experimental?.virtualBundle) {
|
|
265
|
-
entry = ctx._entryPoints[name];
|
|
266
|
-
} else {
|
|
267
|
-
entry = resolve(
|
|
268
|
-
ctx.nitro.options.buildDir,
|
|
269
|
-
"vite/services",
|
|
270
|
-
name,
|
|
271
|
-
ctx._entryPoints[name]
|
|
272
|
-
);
|
|
273
|
-
}
|
|
274
|
-
return [name, entry];
|
|
275
|
-
});
|
|
276
|
-
return (
|
|
277
|
-
/* js */
|
|
278
|
-
`
|
|
279
|
-
import { setupVite } from "${resolve(runtimeDir, "internal/vite/prod-setup.mjs")}";
|
|
280
|
-
|
|
281
|
-
const manifest = ${JSON.stringify(ctx._manifest || {})};
|
|
282
|
-
|
|
283
|
-
function lazyService(loader) {
|
|
284
|
-
let promise, mod
|
|
285
|
-
return {
|
|
286
|
-
fetch(req) {
|
|
287
|
-
if (mod) { return mod.fetch(req) }
|
|
288
|
-
if (!promise) {
|
|
289
|
-
promise = loader().then(_mod => (mod = _mod.default || _mod))
|
|
290
|
-
}
|
|
291
|
-
return promise.then(mod => mod.fetch(req))
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
const services = {
|
|
297
|
-
${serviceEntries.map(
|
|
298
|
-
([name, entry]) => (
|
|
299
|
-
/* js */
|
|
300
|
-
`[${JSON.stringify(name)}]: lazyService(() => import(${JSON.stringify(entry)}))`
|
|
301
|
-
)
|
|
302
|
-
).join(",\n")}
|
|
303
|
-
};
|
|
304
|
-
|
|
305
|
-
setupVite({ manifest, services });
|
|
306
|
-
`
|
|
307
|
-
);
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
function createFetchableDevEnvironment(name, config, devServer, entry) {
|
|
311
|
-
const transport = createTransport(name, devServer);
|
|
312
|
-
const context = { hot: true, transport };
|
|
313
|
-
return new FetchableDevEnvironment(name, config, context, devServer, entry);
|
|
314
|
-
}
|
|
315
|
-
class FetchableDevEnvironment extends DevEnvironment {
|
|
316
|
-
devServer;
|
|
317
|
-
constructor(name, config, context, devServer, entry) {
|
|
318
|
-
super(name, config, context);
|
|
319
|
-
this.devServer = devServer;
|
|
320
|
-
this.devServer.sendMessage({
|
|
321
|
-
type: "custom",
|
|
322
|
-
event: "nitro:vite-env",
|
|
323
|
-
data: { name, entry }
|
|
324
|
-
});
|
|
325
|
-
}
|
|
326
|
-
async dispatchFetch(request) {
|
|
327
|
-
return this.devServer.fetch(request);
|
|
328
|
-
}
|
|
329
|
-
async init(...args) {
|
|
330
|
-
await this.devServer.init?.();
|
|
331
|
-
return super.init(...args);
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
function createTransport(name, hooks) {
|
|
335
|
-
const listeners = /* @__PURE__ */ new WeakMap();
|
|
336
|
-
return {
|
|
337
|
-
send: (data) => hooks.sendMessage({ ...data, viteEnv: name }),
|
|
338
|
-
on: (event, handler) => {
|
|
339
|
-
if (event === "connection") return;
|
|
340
|
-
const listener = (value) => {
|
|
341
|
-
if (value?.type === "custom" && value.event === event && value.viteEnv === name) {
|
|
342
|
-
handler(value.data, {
|
|
343
|
-
send: (payload) => hooks.sendMessage({ ...payload, viteEnv: name })
|
|
344
|
-
});
|
|
345
|
-
}
|
|
346
|
-
};
|
|
347
|
-
listeners.set(handler, listener);
|
|
348
|
-
hooks.onMessage(listener);
|
|
349
|
-
},
|
|
350
|
-
off: (event, handler) => {
|
|
351
|
-
if (event === "connection") return;
|
|
352
|
-
const listener = listeners.get(handler);
|
|
353
|
-
if (listener) {
|
|
354
|
-
hooks.offMessage(listener);
|
|
355
|
-
listeners.delete(handler);
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
};
|
|
359
|
-
}
|
|
360
|
-
async function configureViteDevServer(ctx, server) {
|
|
361
|
-
const nitro = ctx.nitro;
|
|
362
|
-
const nitroEnv = server.environments.nitro;
|
|
363
|
-
const nitroConfigFile = nitro.options._c12.configFile;
|
|
364
|
-
if (nitroConfigFile) {
|
|
365
|
-
server.config.configFileDependencies.push(nitroConfigFile);
|
|
366
|
-
}
|
|
367
|
-
const reload = debounce(async () => {
|
|
368
|
-
await scanHandlers(nitro);
|
|
369
|
-
nitro.routing.sync();
|
|
370
|
-
nitroEnv.moduleGraph.invalidateAll();
|
|
371
|
-
nitroEnv.hot.send({ type: "full-reload" });
|
|
372
|
-
});
|
|
373
|
-
const scanDirs = nitro.options.scanDirs.flatMap((dir) => [
|
|
374
|
-
join(dir, nitro.options.apiDir || "api"),
|
|
375
|
-
join(dir, nitro.options.routesDir || "routes"),
|
|
376
|
-
join(dir, "middleware"),
|
|
377
|
-
join(dir, "plugins"),
|
|
378
|
-
join(dir, "modules")
|
|
379
|
-
]);
|
|
380
|
-
const watchReloadEvents = /* @__PURE__ */ new Set(["add", "addDir", "unlink", "unlinkDir"]);
|
|
381
|
-
const scanDirsWatcher = watch(scanDirs, {
|
|
382
|
-
ignoreInitial: true
|
|
383
|
-
}).on("all", (event, path, stat) => {
|
|
384
|
-
if (watchReloadEvents.has(event)) {
|
|
385
|
-
reload();
|
|
386
|
-
}
|
|
387
|
-
});
|
|
388
|
-
const srcDirWatcher = watch$1(
|
|
389
|
-
nitro.options.srcDir,
|
|
390
|
-
{ persistent: false },
|
|
391
|
-
(_event, filename) => {
|
|
392
|
-
if (filename && /^server\.[mc]?[jt]sx?$/.test(filename)) {
|
|
393
|
-
reload();
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
);
|
|
397
|
-
nitro.hooks.hook("close", () => {
|
|
398
|
-
scanDirsWatcher.close();
|
|
399
|
-
srcDirWatcher.close();
|
|
400
|
-
});
|
|
401
|
-
const hostIPC = {
|
|
402
|
-
async transformHTML(html) {
|
|
403
|
-
return server.transformIndexHtml("/", html).then(
|
|
404
|
-
(r) => r.replace(
|
|
405
|
-
"<!--ssr-outlet-->",
|
|
406
|
-
`{{{ fetch($REQUEST, { viteEnv: "ssr" }) }}}`
|
|
407
|
-
)
|
|
408
|
-
);
|
|
409
|
-
}
|
|
410
|
-
};
|
|
411
|
-
nitroEnv.devServer.onMessage(async (payload) => {
|
|
412
|
-
if (payload.type === "custom" && payload.event === "nitro:vite-invoke") {
|
|
413
|
-
const methodName = payload.data.name;
|
|
414
|
-
const res = await hostIPC[methodName](payload.data.data).then((data) => ({ data })).catch((error) => ({ error }));
|
|
415
|
-
nitroEnv.devServer.sendMessage({
|
|
416
|
-
type: "custom",
|
|
417
|
-
event: "nitro:vite-invoke-response",
|
|
418
|
-
data: { id: payload.data.id, data: res }
|
|
419
|
-
});
|
|
420
|
-
}
|
|
421
|
-
});
|
|
422
|
-
const nitroDevMiddleware = async (nodeReq, nodeRes, next) => {
|
|
423
|
-
if (/^\/@(?:vite|fs|id)\//.test(nodeReq.url) || nodeReq._nitroHandled) {
|
|
424
|
-
return next();
|
|
425
|
-
}
|
|
426
|
-
nodeReq._nitroHandled = true;
|
|
427
|
-
const req = new NodeRequest({ req: nodeReq, res: nodeRes });
|
|
428
|
-
const devAppRes = await ctx.devApp.fetch(req);
|
|
429
|
-
if (nodeRes.writableEnded || nodeRes.headersSent) {
|
|
430
|
-
return;
|
|
431
|
-
}
|
|
432
|
-
if (devAppRes.status !== 404) {
|
|
433
|
-
return await sendNodeResponse(nodeRes, devAppRes);
|
|
434
|
-
}
|
|
435
|
-
const envRes = await nitroEnv.dispatchFetch(req);
|
|
436
|
-
if (nodeRes.writableEnded || nodeRes.headersSent) {
|
|
437
|
-
return;
|
|
438
|
-
}
|
|
439
|
-
if (envRes.status !== 404) {
|
|
440
|
-
return await sendNodeResponse(nodeRes, envRes);
|
|
441
|
-
}
|
|
442
|
-
return next();
|
|
443
|
-
};
|
|
444
|
-
server.middlewares.use(function nitroDevMiddlewarePre(req, res, next) {
|
|
445
|
-
const fetchDest = req.headers["sec-fetch-dest"];
|
|
446
|
-
if (fetchDest) {
|
|
447
|
-
res.setHeader("vary", "sec-fetch-dest");
|
|
448
|
-
}
|
|
449
|
-
if (!fetchDest || /^(document|iframe|frame|empty)$/.test(fetchDest)) {
|
|
450
|
-
nitroDevMiddleware(req, res, next);
|
|
451
|
-
} else {
|
|
452
|
-
next();
|
|
453
|
-
}
|
|
454
|
-
});
|
|
455
|
-
return () => {
|
|
456
|
-
server.middlewares.use(nitroDevMiddleware);
|
|
457
|
-
};
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
function createDevWorker(ctx) {
|
|
461
|
-
return new NodeDevWorker({
|
|
462
|
-
name: "nitro-vite",
|
|
463
|
-
entry: resolve$1(runtimeDir, "internal/vite/dev-worker.mjs"),
|
|
464
|
-
hooks: {},
|
|
465
|
-
data: {
|
|
466
|
-
server: true,
|
|
467
|
-
globals: {
|
|
468
|
-
__NITRO_RUNTIME_CONFIG__: ctx.nitro.options.runtimeConfig
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
});
|
|
472
|
-
}
|
|
473
|
-
function createNitroEnvironment(ctx) {
|
|
474
|
-
return {
|
|
475
|
-
consumer: "server",
|
|
476
|
-
build: {
|
|
477
|
-
rollupOptions: ctx.rollupConfig.config,
|
|
478
|
-
minify: ctx.nitro.options.minify,
|
|
479
|
-
emptyOutDir: false,
|
|
480
|
-
commonjsOptions: {
|
|
481
|
-
strictRequires: "auto",
|
|
482
|
-
// TODO: set to true (default) in v3
|
|
483
|
-
esmExternals: (id) => !id.startsWith("unenv/"),
|
|
484
|
-
requireReturnsDefault: "auto",
|
|
485
|
-
...ctx.nitro.options.commonJS
|
|
486
|
-
}
|
|
487
|
-
},
|
|
488
|
-
resolve: {
|
|
489
|
-
noExternal: ctx.nitro.options.dev ? (
|
|
490
|
-
// Workaround for dev: external dependencies are not resolvable with respect to nodeModulePaths
|
|
491
|
-
new RegExp(runtimeDependencies.join("|"))
|
|
492
|
-
) : (
|
|
493
|
-
// Workaround for build: externals tracing is unstable
|
|
494
|
-
ctx.nitro.options.noExternals === false ? void 0 : true
|
|
495
|
-
),
|
|
496
|
-
// prettier-ignore
|
|
497
|
-
conditions: ctx.nitro.options.exportConditions,
|
|
498
|
-
externalConditions: ctx.nitro.options.exportConditions
|
|
499
|
-
},
|
|
500
|
-
dev: {
|
|
501
|
-
createEnvironment: (envName, envConfig) => createFetchableDevEnvironment(
|
|
502
|
-
envName,
|
|
503
|
-
envConfig,
|
|
504
|
-
ctx.devWorker,
|
|
505
|
-
resolve$1(runtimeDir, "internal/vite/dev-entry.mjs")
|
|
506
|
-
)
|
|
507
|
-
}
|
|
508
|
-
};
|
|
509
|
-
}
|
|
510
|
-
function createServiceEnvironment(ctx, name, serviceConfig) {
|
|
511
|
-
return {
|
|
512
|
-
consumer: "server",
|
|
513
|
-
build: {
|
|
514
|
-
rollupOptions: { input: serviceConfig.entry },
|
|
515
|
-
minify: ctx.nitro.options.minify,
|
|
516
|
-
outDir: join$1(ctx.nitro.options.buildDir, "vite", "services", name),
|
|
517
|
-
emptyOutDir: true
|
|
518
|
-
},
|
|
519
|
-
resolve: {
|
|
520
|
-
noExternal: ctx.nitro.options.dev ? void 0 : true,
|
|
521
|
-
conditions: ctx.nitro.options.exportConditions,
|
|
522
|
-
externalConditions: ctx.nitro.options.exportConditions
|
|
523
|
-
},
|
|
524
|
-
dev: {
|
|
525
|
-
createEnvironment: (envName, envConfig) => createFetchableDevEnvironment(
|
|
526
|
-
envName,
|
|
527
|
-
envConfig,
|
|
528
|
-
ctx.devWorker,
|
|
529
|
-
tryResolve(serviceConfig.entry)
|
|
530
|
-
)
|
|
531
|
-
}
|
|
532
|
-
};
|
|
533
|
-
}
|
|
534
|
-
function createServiceEnvironments(ctx) {
|
|
535
|
-
return Object.fromEntries(
|
|
536
|
-
Object.entries(ctx.pluginConfig.services || {}).map(([name, config]) => [
|
|
537
|
-
name,
|
|
538
|
-
createServiceEnvironment(ctx, name, config)
|
|
539
|
-
])
|
|
540
|
-
);
|
|
541
|
-
}
|
|
542
|
-
function tryResolve(id) {
|
|
543
|
-
if (/^[~#/\0]/.test(id) || isAbsolute(id)) {
|
|
544
|
-
return id;
|
|
545
|
-
}
|
|
546
|
-
const resolved = resolveModulePath(id, {
|
|
547
|
-
suffixes: ["", "/index"],
|
|
548
|
-
extensions: ["", ".ts", ".mjs", ".cjs", ".js", ".mts", ".cts"],
|
|
549
|
-
try: true
|
|
550
|
-
});
|
|
551
|
-
return resolved || id;
|
|
552
|
-
}
|
|
553
|
-
|
|
554
|
-
function nitroPreviewPlugin(ctx) {
|
|
555
|
-
return {
|
|
556
|
-
name: "nitro:preview",
|
|
557
|
-
apply: (_config, configEnv) => !!configEnv.isPreview,
|
|
558
|
-
config(config) {
|
|
559
|
-
return {
|
|
560
|
-
preview: {
|
|
561
|
-
port: config.preview?.port || 3e3
|
|
562
|
-
}
|
|
563
|
-
};
|
|
564
|
-
},
|
|
565
|
-
async configurePreviewServer(server) {
|
|
566
|
-
const buildInfoPath = resolve(
|
|
567
|
-
server.config.root,
|
|
568
|
-
"node_modules/.nitro/last-build",
|
|
569
|
-
"nitro.json"
|
|
570
|
-
);
|
|
571
|
-
if (!existsSync(buildInfoPath)) {
|
|
572
|
-
console.warn(
|
|
573
|
-
`[nitro] No build found. Please build your project before previewing.`
|
|
574
|
-
);
|
|
575
|
-
return;
|
|
576
|
-
}
|
|
577
|
-
const realBuildDir = await readlink("node_modules/.nitro/last-build");
|
|
578
|
-
const buildInfo = JSON.parse(
|
|
579
|
-
await readFile(buildInfoPath, "utf8")
|
|
580
|
-
);
|
|
581
|
-
const info = [
|
|
582
|
-
["Build Directory:", prettyPath(realBuildDir)],
|
|
583
|
-
["Date:", buildInfo.date && new Date(buildInfo.date).toLocaleString()],
|
|
584
|
-
["Nitro Version:", buildInfo.versions.nitro],
|
|
585
|
-
["Nitro Preset:", buildInfo.preset],
|
|
586
|
-
buildInfo.framework?.name !== "nitro" && [
|
|
587
|
-
"Framework:",
|
|
588
|
-
buildInfo.framework?.name + (buildInfo.framework?.version ? ` (v${buildInfo.framework.version})` : "")
|
|
589
|
-
]
|
|
590
|
-
].filter((i) => i && i[1]);
|
|
591
|
-
consola.box({
|
|
592
|
-
title: " [Build Info] ",
|
|
593
|
-
message: info.map((i) => `- ${i[0]} ${i[1]}`).join("\n")
|
|
594
|
-
});
|
|
595
|
-
if (!buildInfo.commands?.preview) {
|
|
596
|
-
consola.warn("[nitro] No preview command found for this preset..");
|
|
597
|
-
return;
|
|
598
|
-
}
|
|
599
|
-
const randomPort = await getRandomPort();
|
|
600
|
-
consola.info(`Spawning preview server...`);
|
|
601
|
-
const [command, ...args] = buildInfo.commands.preview.split(" ");
|
|
602
|
-
let child;
|
|
603
|
-
consola.info(buildInfo.commands?.preview);
|
|
604
|
-
child = spawn(command, args, {
|
|
605
|
-
stdio: "inherit",
|
|
606
|
-
cwd: realBuildDir,
|
|
607
|
-
env: {
|
|
608
|
-
...process.env,
|
|
609
|
-
PORT: String(randomPort)
|
|
610
|
-
}
|
|
611
|
-
});
|
|
612
|
-
process.on("exit", () => {
|
|
613
|
-
child?.kill();
|
|
614
|
-
child = void 0;
|
|
615
|
-
});
|
|
616
|
-
child.on("exit", (code) => {
|
|
617
|
-
if (code && code !== 0) {
|
|
618
|
-
consola.error(`[nitro] Preview server exited with code ${code}`);
|
|
619
|
-
}
|
|
620
|
-
});
|
|
621
|
-
const proxy = createProxyServer({
|
|
622
|
-
target: `http://localhost:${randomPort}`
|
|
623
|
-
});
|
|
624
|
-
server.middlewares.use((req, res, next) => {
|
|
625
|
-
if (child && !child.killed) {
|
|
626
|
-
proxy.web(req, res).catch(next);
|
|
627
|
-
} else {
|
|
628
|
-
res.end(`Nitro preview server is not running.`);
|
|
629
|
-
}
|
|
630
|
-
});
|
|
631
|
-
}
|
|
632
|
-
};
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
const DEFAULT_EXTENSIONS = [".ts", ".js", ".mts", ".mjs", ".tsx", ".jsx"];
|
|
636
|
-
function nitro(pluginConfig = {}) {
|
|
637
|
-
const ctx = {
|
|
638
|
-
pluginConfig,
|
|
639
|
-
_entryPoints: {},
|
|
640
|
-
_manifest: {},
|
|
641
|
-
_serviceBundles: {}
|
|
642
|
-
};
|
|
643
|
-
return [
|
|
644
|
-
nitroPlugin(ctx),
|
|
645
|
-
nitroServicePlugin(ctx),
|
|
646
|
-
nitroPreviewPlugin(),
|
|
647
|
-
nitroRollupPlugins(ctx)
|
|
648
|
-
];
|
|
649
|
-
}
|
|
650
|
-
function nitroPlugin(ctx) {
|
|
651
|
-
return [
|
|
652
|
-
{
|
|
653
|
-
name: "nitro:main",
|
|
654
|
-
// Opt-in this plugin into the shared plugins pipeline
|
|
655
|
-
sharedDuringBuild: true,
|
|
656
|
-
// Only apply this plugin during build or dev
|
|
657
|
-
apply: (config, configEnv) => !configEnv.isPreview,
|
|
658
|
-
// Extend vite config before it's resolved
|
|
659
|
-
async config(userConfig, configEnv) {
|
|
660
|
-
ctx.nitro = ctx.pluginConfig._nitro || await createNitro({
|
|
661
|
-
dev: configEnv.mode === "development",
|
|
662
|
-
rootDir: userConfig.root,
|
|
663
|
-
...defu(ctx.pluginConfig.config, userConfig.nitro)
|
|
664
|
-
});
|
|
665
|
-
if (!ctx.pluginConfig.services?.ssr) {
|
|
666
|
-
ctx.pluginConfig.services ??= {};
|
|
667
|
-
if (userConfig.environments?.ssr === void 0) {
|
|
668
|
-
const ssrEntry = resolveModulePath("./entry-server", {
|
|
669
|
-
from: ["", "app", "src"].flatMap(
|
|
670
|
-
(d) => ctx.nitro.options.scanDirs.map((s) => join(s, d) + "/")
|
|
671
|
-
),
|
|
672
|
-
extensions: DEFAULT_EXTENSIONS,
|
|
673
|
-
try: true
|
|
674
|
-
});
|
|
675
|
-
if (ssrEntry) {
|
|
676
|
-
ctx.pluginConfig.services.ssr = { entry: ssrEntry };
|
|
677
|
-
ctx.nitro.logger.info(
|
|
678
|
-
`Using \`${prettyPath(ssrEntry)}\` as vite ssr entry.`
|
|
679
|
-
);
|
|
680
|
-
}
|
|
681
|
-
} else {
|
|
682
|
-
let ssrEntry = getEntry(
|
|
683
|
-
userConfig.environments.ssr.build?.rollupOptions?.input
|
|
684
|
-
);
|
|
685
|
-
if (typeof ssrEntry === "string") {
|
|
686
|
-
ssrEntry = resolveModulePath(ssrEntry, {
|
|
687
|
-
from: ctx.nitro.options.scanDirs,
|
|
688
|
-
extensions: DEFAULT_EXTENSIONS,
|
|
689
|
-
suffixes: ["", "/index"],
|
|
690
|
-
try: true
|
|
691
|
-
}) || ssrEntry;
|
|
692
|
-
ctx.pluginConfig.services.ssr = { entry: ssrEntry };
|
|
693
|
-
} else {
|
|
694
|
-
this.error(`Invalid input type for SSR entry point.`);
|
|
695
|
-
}
|
|
696
|
-
}
|
|
697
|
-
}
|
|
698
|
-
if (!ctx.nitro.options.renderer?.entry && !ctx.nitro.options.renderer?.template && ctx.pluginConfig.services.ssr?.entry) {
|
|
699
|
-
ctx.nitro.options.renderer ??= {};
|
|
700
|
-
ctx.nitro.options.renderer.entry = resolve(
|
|
701
|
-
runtimeDir,
|
|
702
|
-
"internal/vite/ssr-renderer"
|
|
703
|
-
);
|
|
704
|
-
}
|
|
705
|
-
const publicDistDir = ctx._publicDistDir = userConfig.build?.outDir || resolve(ctx.nitro.options.buildDir, "vite/public");
|
|
706
|
-
ctx.nitro.options.publicAssets.push({
|
|
707
|
-
dir: publicDistDir,
|
|
708
|
-
maxAge: 0,
|
|
709
|
-
baseURL: "/",
|
|
710
|
-
fallthrough: true
|
|
711
|
-
});
|
|
712
|
-
if (!ctx.nitro.options.dev) {
|
|
713
|
-
ctx.nitro.options.unenv.push({
|
|
714
|
-
meta: { name: "nitro-vite" },
|
|
715
|
-
polyfill: ["#nitro-vite-setup"]
|
|
716
|
-
});
|
|
717
|
-
}
|
|
718
|
-
await ctx.nitro.hooks.callHook("build:before", ctx.nitro);
|
|
719
|
-
ctx.rollupConfig = await getViteRollupConfig(ctx);
|
|
720
|
-
if (ctx.nitro.options.dev && !ctx.devWorker) {
|
|
721
|
-
ctx.devWorker = createDevWorker(ctx);
|
|
722
|
-
}
|
|
723
|
-
if (ctx.nitro.options.dev && !ctx.devApp) {
|
|
724
|
-
ctx.devApp = new NitroDevApp(ctx.nitro);
|
|
725
|
-
}
|
|
726
|
-
return {
|
|
727
|
-
// Don't include HTML middlewares
|
|
728
|
-
appType: userConfig.appType || "custom",
|
|
729
|
-
// Add Nitro as a Vite environment
|
|
730
|
-
environments: {
|
|
731
|
-
client: {
|
|
732
|
-
consumer: userConfig.environments?.client?.consumer ?? "client",
|
|
733
|
-
build: {
|
|
734
|
-
rollupOptions: {
|
|
735
|
-
input: userConfig.environments?.client?.build?.rollupOptions?.input ?? ctx.nitro.options.renderer?.template
|
|
736
|
-
}
|
|
737
|
-
}
|
|
738
|
-
},
|
|
739
|
-
...createServiceEnvironments(ctx),
|
|
740
|
-
nitro: createNitroEnvironment(ctx)
|
|
741
|
-
},
|
|
742
|
-
resolve: {
|
|
743
|
-
// TODO: environment specific aliases not working
|
|
744
|
-
// https://github.com/vitejs/vite/pull/17583 (seems not effective)
|
|
745
|
-
alias: ctx.rollupConfig.base.aliases
|
|
746
|
-
},
|
|
747
|
-
build: {
|
|
748
|
-
// TODO: Support server environment emitted assets
|
|
749
|
-
assetsInlineLimit: 4096 * 4
|
|
750
|
-
},
|
|
751
|
-
builder: {
|
|
752
|
-
/// Share the config instance among environments to align with the behavior of dev server
|
|
753
|
-
sharedConfigBuild: true
|
|
754
|
-
},
|
|
755
|
-
server: {
|
|
756
|
-
port: Number.parseInt(process.env.PORT || "") || userConfig.server?.port || ctx.nitro.options.devServer?.port || 3e3
|
|
757
|
-
}
|
|
758
|
-
};
|
|
759
|
-
},
|
|
760
|
-
configResolved(config) {
|
|
761
|
-
if (config.command === "build") {
|
|
762
|
-
for (const env of Object.values(config.environments)) {
|
|
763
|
-
if (env.consumer === "client") {
|
|
764
|
-
const { assetsDir } = env.build;
|
|
765
|
-
const rule = ctx.nitro.options.routeRules[`/${assetsDir}/**`] ??= {};
|
|
766
|
-
if (!rule.headers?.["cache-control"]) {
|
|
767
|
-
rule.headers = {
|
|
768
|
-
...rule.headers,
|
|
769
|
-
"cache-control": `public, max-age=31536000, immutable`
|
|
770
|
-
};
|
|
771
|
-
}
|
|
772
|
-
}
|
|
773
|
-
}
|
|
774
|
-
}
|
|
775
|
-
ctx.nitro.routing.sync();
|
|
776
|
-
},
|
|
777
|
-
buildApp: {
|
|
778
|
-
order: "post",
|
|
779
|
-
handler(builder) {
|
|
780
|
-
return buildEnvironments(ctx, builder);
|
|
781
|
-
}
|
|
782
|
-
},
|
|
783
|
-
generateBundle: {
|
|
784
|
-
handler(_options, bundle) {
|
|
785
|
-
const { root } = this.environment.config;
|
|
786
|
-
const services = ctx.pluginConfig.services || {};
|
|
787
|
-
const serviceNames = Object.keys(services);
|
|
788
|
-
const isRegisteredService = serviceNames.includes(
|
|
789
|
-
this.environment.name
|
|
790
|
-
);
|
|
791
|
-
let entryFile;
|
|
792
|
-
for (const [_name, file] of Object.entries(bundle)) {
|
|
793
|
-
if (file.type === "chunk") {
|
|
794
|
-
if (isRegisteredService && file.isEntry) {
|
|
795
|
-
if (entryFile !== void 0) {
|
|
796
|
-
this.error(
|
|
797
|
-
`Multiple entry points found for service "${this.environment.name}". Only one entry point is allowed.`
|
|
798
|
-
);
|
|
799
|
-
}
|
|
800
|
-
entryFile = file.fileName;
|
|
801
|
-
}
|
|
802
|
-
const filteredModuleIds = file.moduleIds.filter(
|
|
803
|
-
(id) => id.startsWith(root)
|
|
804
|
-
);
|
|
805
|
-
for (const id of filteredModuleIds) {
|
|
806
|
-
const originalFile = relative(root, id);
|
|
807
|
-
ctx._manifest[originalFile] = { file: file.fileName };
|
|
808
|
-
}
|
|
809
|
-
}
|
|
810
|
-
}
|
|
811
|
-
if (isRegisteredService) {
|
|
812
|
-
if (entryFile === void 0) {
|
|
813
|
-
this.error(
|
|
814
|
-
`No entry point found for service "${this.environment.name}".`
|
|
815
|
-
);
|
|
816
|
-
}
|
|
817
|
-
ctx._entryPoints[this.environment.name] = entryFile;
|
|
818
|
-
ctx._serviceBundles[this.environment.name] = bundle;
|
|
819
|
-
}
|
|
820
|
-
}
|
|
821
|
-
},
|
|
822
|
-
// Modify environment configs before it's resolved.
|
|
823
|
-
configEnvironment(name, config) {
|
|
824
|
-
if (config.consumer === "client") {
|
|
825
|
-
config.build.emptyOutDir = false;
|
|
826
|
-
config.build.outDir = ctx.nitro.options.output.publicDir;
|
|
827
|
-
}
|
|
828
|
-
const services = ctx.pluginConfig.services || {};
|
|
829
|
-
const serviceNames = Object.keys(services);
|
|
830
|
-
if (serviceNames.includes(name) && ctx.pluginConfig.experimental?.virtualBundle) {
|
|
831
|
-
config.build ??= {};
|
|
832
|
-
config.build.write = config.build.write ?? false;
|
|
833
|
-
}
|
|
834
|
-
},
|
|
835
|
-
// Extend Vite dev server with Nitro middleware
|
|
836
|
-
configureServer: (server) => configureViteDevServer(ctx, server)
|
|
837
|
-
},
|
|
838
|
-
{
|
|
839
|
-
name: "nitro:prepare",
|
|
840
|
-
buildApp: {
|
|
841
|
-
// clean the output directory before any environment is built
|
|
842
|
-
order: "pre",
|
|
843
|
-
async handler() {
|
|
844
|
-
const nitro2 = ctx.nitro;
|
|
845
|
-
await prepare(nitro2);
|
|
846
|
-
}
|
|
847
|
-
}
|
|
848
|
-
}
|
|
849
|
-
];
|
|
850
|
-
}
|
|
851
|
-
function nitroServicePlugin(ctx) {
|
|
852
|
-
return {
|
|
853
|
-
name: "nitro:service",
|
|
854
|
-
enforce: "pre",
|
|
855
|
-
// Only apply this plugin to the nitro environment
|
|
856
|
-
applyToEnvironment: (env) => env.name === "nitro",
|
|
857
|
-
resolveId: {
|
|
858
|
-
async handler(id, importer, options) {
|
|
859
|
-
if (id === "#nitro-vite-setup") {
|
|
860
|
-
return { id, moduleSideEffects: true };
|
|
861
|
-
}
|
|
862
|
-
if (id === "#nitro-vite-services") {
|
|
863
|
-
return id;
|
|
864
|
-
}
|
|
865
|
-
if (runtimeDependencies.some(
|
|
866
|
-
(dep) => id === dep || id.startsWith(`${dep}/`)
|
|
867
|
-
)) {
|
|
868
|
-
const resolved = await this.resolve(id, importer, {
|
|
869
|
-
...options,
|
|
870
|
-
skipSelf: true
|
|
871
|
-
});
|
|
872
|
-
return resolved || resolveModulePath(id, {
|
|
873
|
-
from: ctx.nitro.options.nodeModulesDirs,
|
|
874
|
-
conditions: ctx.nitro.options.exportConditions,
|
|
875
|
-
try: true
|
|
876
|
-
});
|
|
877
|
-
}
|
|
878
|
-
if (importer?.startsWith("\0virtual:#nitro-internal-virtual")) {
|
|
879
|
-
const internalRes = await this.resolve(id, import.meta.url, {
|
|
880
|
-
...options,
|
|
881
|
-
custom: { ...options.custom, skipNoExternals: true }
|
|
882
|
-
});
|
|
883
|
-
if (internalRes) {
|
|
884
|
-
return internalRes;
|
|
885
|
-
}
|
|
886
|
-
const resolvedFromRoot = await this.resolve(
|
|
887
|
-
id,
|
|
888
|
-
ctx.nitro.options.rootDir,
|
|
889
|
-
{ ...options, custom: { ...options.custom, skipNoExternals: true } }
|
|
890
|
-
);
|
|
891
|
-
if (resolvedFromRoot) {
|
|
892
|
-
return resolvedFromRoot;
|
|
893
|
-
}
|
|
894
|
-
const ids = [id];
|
|
895
|
-
if (!/^[./@#]/.test(id)) {
|
|
896
|
-
ids.push(`./${id}`);
|
|
897
|
-
}
|
|
898
|
-
for (const _id of ids) {
|
|
899
|
-
const resolved = resolveModulePath(_id, {
|
|
900
|
-
from: process.cwd(),
|
|
901
|
-
extensions: DEFAULT_EXTENSIONS,
|
|
902
|
-
suffixes: ["", "/index"],
|
|
903
|
-
try: true
|
|
904
|
-
});
|
|
905
|
-
if (resolved) {
|
|
906
|
-
return resolved;
|
|
907
|
-
}
|
|
908
|
-
}
|
|
909
|
-
}
|
|
910
|
-
}
|
|
911
|
-
},
|
|
912
|
-
load: {
|
|
913
|
-
async handler(id) {
|
|
914
|
-
if (id === "#nitro-vite-setup") {
|
|
915
|
-
return prodSetup(ctx);
|
|
916
|
-
}
|
|
917
|
-
}
|
|
918
|
-
}
|
|
919
|
-
};
|
|
920
|
-
}
|
|
921
|
-
function nitroRollupPlugins(ctx) {
|
|
922
|
-
const createHookCaller = (hook, order) => {
|
|
923
|
-
const handler = async function(...args) {
|
|
924
|
-
for (const plugin of ctx.rollupConfig.config.plugins) {
|
|
925
|
-
if (typeof plugin[hook] !== "function") continue;
|
|
926
|
-
const res = await plugin[hook].call(this, ...args);
|
|
927
|
-
if (res) {
|
|
928
|
-
if (hook === "resolveId" && res.id?.startsWith?.("file://")) {
|
|
929
|
-
res.id = fileURLToPath(res.id);
|
|
930
|
-
}
|
|
931
|
-
return res;
|
|
932
|
-
}
|
|
933
|
-
}
|
|
934
|
-
};
|
|
935
|
-
Object.defineProperty(handler, "name", { value: hook });
|
|
936
|
-
return order ? { order, handler } : handler;
|
|
937
|
-
};
|
|
938
|
-
return {
|
|
939
|
-
name: "nitro:rollup-hooks",
|
|
940
|
-
applyToEnvironment: (env) => env.name === "nitro",
|
|
941
|
-
buildStart: createHookCaller("buildStart", "pre"),
|
|
942
|
-
resolveId: createHookCaller("resolveId", "pre"),
|
|
943
|
-
load: createHookCaller("load", "pre"),
|
|
944
|
-
transform: createHookCaller("transform", "post"),
|
|
945
|
-
renderChunk: createHookCaller("renderChunk", "post"),
|
|
946
|
-
generateBundle: createHookCaller("generateBundle", "post"),
|
|
947
|
-
buildEnd: createHookCaller("buildEnd", "post")
|
|
948
|
-
};
|
|
949
|
-
}
|
|
950
|
-
function getEntry(input) {
|
|
951
|
-
if (typeof input === "string") {
|
|
952
|
-
return input;
|
|
953
|
-
} else if (Array.isArray(input) && input.length > 0) {
|
|
954
|
-
return input[0];
|
|
955
|
-
} else if (input && "index" in input) {
|
|
956
|
-
return input.index;
|
|
957
|
-
}
|
|
958
|
-
}
|
|
959
|
-
|
|
960
|
-
export { nitro as n };
|