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.
Files changed (252) hide show
  1. package/dist/_build/common.mjs +763 -0
  2. package/dist/_build/rolldown.mjs +216 -0
  3. package/dist/_build/rollup.mjs +359 -0
  4. package/dist/_build/vite.build.mjs +67 -0
  5. package/dist/_build/vite.plugin.mjs +747 -0
  6. package/dist/_chunks/B-7HiF0V.mjs +1303 -0
  7. package/dist/_chunks/B3asVbT4.mjs +151 -0
  8. package/dist/_chunks/B5ooyfLk.mjs +372 -0
  9. package/dist/_chunks/DXMHy5ca.mjs +43 -0
  10. package/dist/_dev.d.mts +12 -0
  11. package/dist/_dev.mjs +675 -0
  12. package/dist/_libs/acorn.mjs +5034 -0
  13. package/dist/_libs/c12.mjs +2798 -0
  14. package/dist/_libs/chokidar.mjs +1560 -0
  15. package/dist/_libs/citty.mjs +333 -0
  16. package/dist/_libs/commondir.mjs +22 -0
  17. package/dist/_libs/compatx.mjs +46 -0
  18. package/dist/_libs/confbox.mjs +2920 -0
  19. package/dist/_libs/debug.mjs +848 -0
  20. package/dist/_libs/deepmerge.mjs +86 -0
  21. package/dist/_libs/depd.mjs +314 -0
  22. package/dist/_libs/dot-prop.mjs +138 -0
  23. package/dist/_libs/duplexer.mjs +71 -0
  24. package/dist/_libs/ee-first.mjs +68 -0
  25. package/dist/_libs/encodeurl.mjs +49 -0
  26. package/dist/_libs/escape-html.mjs +58 -0
  27. package/dist/_libs/escape-string-regexp.mjs +8 -0
  28. package/dist/_libs/estree-walker.mjs +330 -0
  29. package/dist/_libs/etag.mjs +75 -0
  30. package/dist/_libs/fdir.mjs +514 -0
  31. package/dist/_libs/fresh.mjs +85 -0
  32. package/dist/_libs/function-bind.mjs +63 -0
  33. package/dist/_libs/gen-mapping.mjs +612 -0
  34. package/dist/_libs/giget.mjs +19076 -0
  35. package/dist/_libs/gzip-size.mjs +21 -0
  36. package/dist/_libs/hasown.mjs +14 -0
  37. package/dist/_libs/http-errors.mjs +436 -0
  38. package/dist/_libs/httpxy.mjs +410 -0
  39. package/dist/_libs/is-core-module.mjs +220 -0
  40. package/dist/_libs/is-module.mjs +13 -0
  41. package/dist/_libs/is-reference.mjs +32 -0
  42. package/dist/_libs/js-tokens.mjs +382 -0
  43. package/dist/_libs/klona.mjs +90 -0
  44. package/dist/_libs/knitwork.mjs +124 -0
  45. package/dist/_libs/local-pkg.mjs +1686 -0
  46. package/dist/_libs/magic-string.mjs +939 -0
  47. package/dist/_libs/mime-db.mjs +7642 -0
  48. package/dist/_libs/mime-types.mjs +162 -0
  49. package/dist/_libs/mime.mjs +1391 -0
  50. package/dist/_libs/node-fetch-native.mjs +173 -0
  51. package/dist/_libs/on-finished.mjs +170 -0
  52. package/dist/_libs/parseurl.mjs +103 -0
  53. package/dist/_libs/path-parse.mjs +47 -0
  54. package/dist/_libs/pathe.mjs +41 -0
  55. package/dist/_libs/picomatch.mjs +1673 -0
  56. package/dist/_libs/plugin-alias.mjs +64 -0
  57. package/dist/_libs/plugin-commonjs.mjs +1489 -0
  58. package/dist/_libs/plugin-inject.mjs +135 -0
  59. package/dist/_libs/plugin-json.mjs +36 -0
  60. package/dist/_libs/plugin-node-resolve.mjs +1553 -0
  61. package/dist/_libs/plugin-replace.mjs +104 -0
  62. package/dist/_libs/pretty-bytes.mjs +116 -0
  63. package/dist/_libs/range-parser.mjs +102 -0
  64. package/dist/_libs/remapping.mjs +117 -0
  65. package/dist/_libs/rou3.mjs +311 -0
  66. package/dist/_libs/send.mjs +857 -0
  67. package/dist/_libs/serve-static.mjs +124 -0
  68. package/dist/_libs/std-env.mjs +158 -0
  69. package/dist/_libs/strip-literal.mjs +51 -0
  70. package/dist/_libs/tinyglobby.mjs +292 -0
  71. package/dist/_libs/ultrahtml.mjs +138 -0
  72. package/dist/_libs/unimport.mjs +3520 -0
  73. package/dist/_libs/untyped.mjs +271 -0
  74. package/dist/_libs/unwasm.mjs +5825 -0
  75. package/dist/_libs/vite-plugin-fullstack.mjs +561 -0
  76. package/dist/_presets.mjs +1723 -0
  77. package/dist/builder.d.mts +54 -0
  78. package/dist/builder.mjs +45 -0
  79. package/dist/cli/_chunks/build.mjs +43 -0
  80. package/dist/cli/_chunks/common.mjs +15 -0
  81. package/dist/cli/_chunks/detect-acorn.mjs +12 -0
  82. package/dist/cli/_chunks/dev.mjs +79 -0
  83. package/dist/cli/_chunks/dist.mjs +3 -0
  84. package/dist/cli/_chunks/dist2.mjs +4 -0
  85. package/dist/cli/_chunks/esm.mjs +3 -0
  86. package/dist/cli/_chunks/json5.mjs +4 -0
  87. package/dist/cli/_chunks/jsonc.mjs +4 -0
  88. package/dist/cli/_chunks/list.mjs +27 -0
  89. package/dist/cli/_chunks/multipart-parser.mjs +6 -0
  90. package/dist/cli/_chunks/prepare.mjs +19 -0
  91. package/dist/cli/_chunks/run.mjs +55 -0
  92. package/dist/cli/_chunks/task.mjs +16 -0
  93. package/dist/cli/_chunks/toml.mjs +4 -0
  94. package/dist/cli/_chunks/yaml.mjs +4 -0
  95. package/dist/cli/index.d.mts +1 -1
  96. package/dist/cli/index.mjs +20 -476
  97. package/dist/node_modules/@speed-highlight/core/dist/index.js +1 -1
  98. package/dist/node_modules/@speed-highlight/core/dist/terminal.js +1 -1
  99. package/dist/node_modules/@speed-highlight/core/package.json +7 -3
  100. package/dist/node_modules/cookie-es/dist/index.mjs +262 -0
  101. package/dist/node_modules/cookie-es/package.json +37 -0
  102. package/dist/node_modules/hookable/dist/index.mjs +243 -266
  103. package/dist/node_modules/hookable/package.json +29 -26
  104. package/dist/node_modules/rendu/dist/index.mjs +380 -0
  105. package/dist/node_modules/rendu/package.json +47 -0
  106. package/dist/presets/_nitro/runtime/nitro-dev.d.mts +1 -0
  107. package/dist/presets/_nitro/runtime/nitro-dev.mjs +44 -38
  108. package/dist/presets/_nitro/runtime/nitro-prerenderer.d.mts +2 -2
  109. package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +9 -12
  110. package/dist/presets/_nitro/runtime/service-worker.d.mts +1 -0
  111. package/dist/presets/_nitro/runtime/service-worker.mjs +14 -11
  112. package/dist/presets/aws-amplify/runtime/aws-amplify.d.mts +1 -0
  113. package/dist/presets/aws-amplify/runtime/aws-amplify.mjs +6 -5
  114. package/dist/presets/aws-lambda/runtime/_utils.d.mts +8 -13
  115. package/dist/presets/aws-lambda/runtime/_utils.mjs +95 -81
  116. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.d.mts +1 -2
  117. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.mjs +25 -27
  118. package/dist/presets/aws-lambda/runtime/aws-lambda.mjs +7 -7
  119. package/dist/presets/azure/runtime/_utils.mjs +43 -43
  120. package/dist/presets/azure/runtime/azure-swa.d.mts +2 -2
  121. package/dist/presets/azure/runtime/azure-swa.mjs +22 -21
  122. package/dist/presets/bun/runtime/bun.d.mts +1 -0
  123. package/dist/presets/bun/runtime/bun.mjs +18 -17
  124. package/dist/presets/cloudflare/runtime/_module-handler.d.mts +10 -7
  125. package/dist/presets/cloudflare/runtime/_module-handler.mjs +79 -87
  126. package/dist/presets/cloudflare/runtime/cloudflare-durable.d.mts +6 -14
  127. package/dist/presets/cloudflare/runtime/cloudflare-durable.mjs +55 -61
  128. package/dist/presets/cloudflare/runtime/cloudflare-module.d.mts +1 -7
  129. package/dist/presets/cloudflare/runtime/cloudflare-module.mjs +12 -14
  130. package/dist/presets/cloudflare/runtime/cloudflare-pages.d.mts +12 -12
  131. package/dist/presets/cloudflare/runtime/cloudflare-pages.mjs +35 -39
  132. package/dist/presets/cloudflare/runtime/plugin.dev.d.mts +2 -2
  133. package/dist/presets/cloudflare/runtime/plugin.dev.mjs +89 -82
  134. package/dist/presets/cloudflare/runtime/shims/workers.dev.mjs +27 -0
  135. package/dist/presets/deno/runtime/deno-deploy.d.mts +1 -0
  136. package/dist/presets/deno/runtime/deno-deploy.mjs +12 -11
  137. package/dist/presets/deno/runtime/deno-server.d.mts +2 -1
  138. package/dist/presets/deno/runtime/deno-server.mjs +31 -39
  139. package/dist/presets/netlify/runtime/netlify-edge.d.mts +2 -1
  140. package/dist/presets/netlify/runtime/netlify-edge.mjs +14 -11
  141. package/dist/presets/netlify/runtime/netlify.mjs +11 -17
  142. package/dist/presets/node/runtime/node-cluster.mjs +49 -48
  143. package/dist/presets/node/runtime/node-middleware.d.mts +3 -2
  144. package/dist/presets/node/runtime/node-middleware.mjs +7 -6
  145. package/dist/presets/node/runtime/node-server.mjs +34 -24
  146. package/dist/presets/standard/runtime/server.d.mts +1 -3
  147. package/dist/presets/standard/runtime/server.mjs +1 -3
  148. package/dist/presets/stormkit/runtime/stormkit.d.mts +13 -13
  149. package/dist/presets/stormkit/runtime/stormkit.mjs +20 -20
  150. package/dist/presets/vercel/runtime/vercel.d.mts +3 -3
  151. package/dist/presets/vercel/runtime/vercel.mjs +15 -14
  152. package/dist/presets/winterjs/runtime/winterjs.d.mts +2 -0
  153. package/dist/presets/winterjs/runtime/winterjs.mjs +72 -68
  154. package/dist/presets/zeabur/runtime/zeabur.d.mts +1 -1
  155. package/dist/runtime/index.d.mts +13 -2
  156. package/dist/runtime/index.mjs +13 -8
  157. package/dist/runtime/internal/app.d.mts +3 -1
  158. package/dist/runtime/internal/app.mjs +179 -140
  159. package/dist/runtime/internal/cache.d.mts +10 -4
  160. package/dist/runtime/internal/cache.mjs +247 -216
  161. package/dist/runtime/internal/context.d.mts +9 -9
  162. package/dist/runtime/internal/context.mjs +17 -10
  163. package/dist/runtime/internal/database.mjs +8 -10
  164. package/dist/runtime/internal/error/dev.d.mts +5 -4
  165. package/dist/runtime/internal/error/dev.mjs +106 -105
  166. package/dist/runtime/internal/error/prod.d.mts +5 -4
  167. package/dist/runtime/internal/error/prod.mjs +51 -59
  168. package/dist/runtime/internal/error/utils.d.mts +4 -4
  169. package/dist/runtime/internal/error/utils.mjs +1 -1
  170. package/dist/runtime/internal/index.d.mts +2 -0
  171. package/dist/runtime/internal/index.mjs +2 -0
  172. package/dist/runtime/internal/lib/http-graceful-shutdown.d.mts +14 -14
  173. package/dist/runtime/internal/lib/http-graceful-shutdown.mjs +248 -209
  174. package/dist/runtime/internal/meta.d.mts +1 -1
  175. package/dist/runtime/internal/meta.mjs +1 -1
  176. package/dist/runtime/internal/plugin.d.mts +2 -2
  177. package/dist/runtime/internal/plugin.mjs +1 -1
  178. package/dist/runtime/internal/renderer.mjs +40 -32
  179. package/dist/runtime/internal/route-rules.d.mts +8 -8
  180. package/dist/runtime/internal/route-rules.mjs +53 -51
  181. package/dist/runtime/internal/routes/dev-tasks.d.mts +1 -2
  182. package/dist/runtime/internal/routes/dev-tasks.mjs +15 -17
  183. package/dist/runtime/internal/routes/openapi.d.mts +1 -0
  184. package/dist/runtime/internal/routes/openapi.mjs +81 -87
  185. package/dist/runtime/internal/routes/renderer-template.d.mts +1 -1
  186. package/dist/runtime/internal/routes/renderer-template.dev.d.mts +1 -2
  187. package/dist/runtime/internal/routes/renderer-template.dev.mjs +10 -17
  188. package/dist/runtime/internal/routes/renderer-template.mjs +1 -1
  189. package/dist/runtime/internal/routes/scalar.d.mts +1 -0
  190. package/dist/runtime/internal/routes/scalar.mjs +22 -23
  191. package/dist/runtime/internal/routes/swagger.d.mts +1 -0
  192. package/dist/runtime/internal/routes/swagger.mjs +9 -11
  193. package/dist/runtime/internal/runtime-config.d.mts +4 -4
  194. package/dist/runtime/internal/runtime-config.mjs +40 -35
  195. package/dist/runtime/internal/shutdown.d.mts +2 -8
  196. package/dist/runtime/internal/shutdown.mjs +32 -30
  197. package/dist/runtime/internal/static.mjs +63 -74
  198. package/dist/runtime/internal/storage.mjs +2 -2
  199. package/dist/runtime/internal/task.d.mts +6 -6
  200. package/dist/runtime/internal/task.mjs +56 -60
  201. package/dist/runtime/internal/utils.d.mts +1 -1
  202. package/dist/runtime/internal/utils.mjs +4 -10
  203. package/dist/types/index.d.mts +2594 -2286
  204. package/dist/types/index.mjs +1 -1
  205. package/dist/vite.d.mts +56 -47
  206. package/dist/vite.mjs +55 -68
  207. package/lib/index.d.mts +1 -0
  208. package/lib/index.mjs +1 -0
  209. package/lib/runtime/meta.mjs +35 -0
  210. package/package.json +49 -50
  211. package/dist/_chunks/app.mjs +0 -19797
  212. package/dist/_chunks/build.mjs +0 -84
  213. package/dist/_chunks/build2.mjs +0 -318
  214. package/dist/_chunks/build3.mjs +0 -6452
  215. package/dist/_chunks/detect-acorn.mjs +0 -503
  216. package/dist/_chunks/index.mjs +0 -22242
  217. package/dist/_chunks/index2.mjs +0 -297
  218. package/dist/_chunks/index3.mjs +0 -1058
  219. package/dist/_chunks/index4.mjs +0 -1206
  220. package/dist/_chunks/info.mjs +0 -11157
  221. package/dist/_chunks/json5.mjs +0 -68
  222. package/dist/_chunks/jsonc.mjs +0 -51
  223. package/dist/_chunks/pathe.M-eThtNZ.mjs +0 -204
  224. package/dist/_chunks/plugin.mjs +0 -960
  225. package/dist/_chunks/server.mjs +0 -254
  226. package/dist/_chunks/snapshot.mjs +0 -284
  227. package/dist/_chunks/toml.mjs +0 -259
  228. package/dist/_chunks/yaml.mjs +0 -86
  229. package/dist/cli/build.mjs +0 -54
  230. package/dist/cli/common.mjs +0 -13
  231. package/dist/cli/dev.mjs +0 -95
  232. package/dist/cli/index2.mjs +0 -17
  233. package/dist/cli/list.mjs +0 -34
  234. package/dist/cli/prepare.mjs +0 -24
  235. package/dist/cli/run.mjs +0 -60
  236. package/dist/index.d.mts +0 -52
  237. package/dist/index.mjs +0 -55
  238. package/dist/node_modules/klona/dist/index.mjs +0 -81
  239. package/dist/node_modules/klona/full/index.mjs +0 -53
  240. package/dist/node_modules/klona/package.json +0 -74
  241. package/dist/node_modules/std-env/dist/index.mjs +0 -1
  242. package/dist/node_modules/std-env/package.json +0 -46
  243. package/dist/presets.mjs +0 -2460
  244. package/dist/runtime/internal/debug.d.mts +0 -2
  245. package/dist/runtime/internal/debug.mjs +0 -5
  246. package/dist/runtime/internal/empty.d.mts +0 -0
  247. package/dist/runtime/internal/vite/dev-entry.d.mts +0 -1
  248. package/dist/runtime/internal/vite/dev-worker.d.mts +0 -1
  249. package/dist/runtime/internal/vite/prod-setup.d.mts +0 -4
  250. package/dist/runtime/internal/vite/ssr-renderer.d.mts +0 -4
  251. package/lib/runtime-meta.mjs +0 -38
  252. /package/lib/{runtime-meta.d.mts → runtime/meta.d.mts} +0 -0
@@ -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 };