nitro 3.0.1-alpha.2 → 3.0.260311-beta

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