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
@@ -1,3 +0,0 @@
1
- import "#nitro/virtual/polyfills";
2
- export declare const middleware: unknown;
3
- export declare const handleUpgrade: unknown;
@@ -1,3 +0,0 @@
1
- import "#nitro/virtual/polyfills";
2
- declare const _default: {};
3
- export default _default;
@@ -1,3 +0,0 @@
1
- import "#nitro/virtual/polyfills";
2
- declare const _default: {};
3
- export default _default;
@@ -1,21 +0,0 @@
1
- import "#nitro/virtual/polyfills";
2
- import type { Handler } from "aws-lambda";
3
- type StormkitEvent = {
4
- url: string;
5
- path: string;
6
- method: string;
7
- body?: string;
8
- query?: Record<string, Array<string>>;
9
- headers?: Record<string, string>;
10
- rawHeaders?: Array<string>;
11
- };
12
- type StormkitResponse = {
13
- headers?: Record<string, string>;
14
- body?: string;
15
- buffer?: string;
16
- statusCode: number;
17
- errorMessage?: string;
18
- errorStack?: string;
19
- };
20
- export declare const handler: Handler<StormkitEvent, StormkitResponse>;
21
- export {};
@@ -1,2 +0,0 @@
1
- export declare const ISR_URL_PARAM = "__isr_route";
2
- export declare function isrRouteRewrite(reqUrl: string, xNowRouteMatches: string | null): [pathname: string, search: string] | undefined;
@@ -1,3 +0,0 @@
1
- import "#nitro/virtual/polyfills";
2
- import type { NodeServerRequest, NodeServerResponse } from "srvx";
3
- export default function nodeHandler(req: NodeServerRequest, res: NodeServerResponse);
@@ -1,8 +0,0 @@
1
- import "#nitro/virtual/polyfills";
2
- import type { ServerRequest } from "srvx";
3
- declare const _default: {
4
- fetch(req: ServerRequest, context: {
5
- waitUntil: (promise: Promise<any>) => void;
6
- });
7
- };
8
- export default _default;
@@ -1,2 +0,0 @@
1
- import "#nitro/virtual/polyfills";
2
- export {};
@@ -1,3 +0,0 @@
1
- import "#nitro/virtual/polyfills";
2
- declare const _default;
3
- export default _default;
@@ -1,359 +0,0 @@
1
- import { parentPort, threadId, workerData } from "node:worker_threads";
2
- import { Agent } from "undici";
3
- import { ModuleRunner, ESModulesEvaluator } from "vite/module-runner";
4
- import { getSocketAddress, isSocketSupported } from "get-port-please";
5
-
6
- // ----- Environment runners -----
7
-
8
- const envs = (globalThis.__nitro_vite_envs__ ??= {
9
- nitro: undefined,
10
- ssr: undefined,
11
- });
12
-
13
- class EnvRunner {
14
- constructor({ name, entry }) {
15
- this.name = name;
16
- this.entryPath = entry;
17
-
18
- this.entry = undefined;
19
- this.entryError = undefined;
20
-
21
- // Create Vite Module Runner
22
- // https://vite.dev/guide/api-environment-runtimes.html#modulerunner
23
- this.runnerHooks = {};
24
- this.runner = new ModuleRunner(
25
- {
26
- transport: {
27
- connect({ onMessage, onDisconnection }) {
28
- parentPort.on("message", (payload) => {
29
- if (payload?.type === "custom" && payload.viteEnv === name) {
30
- onMessage(payload);
31
- }
32
- });
33
- parentPort.on("close", onDisconnection);
34
- },
35
- send(payload) {
36
- parentPort.postMessage({ ...payload, viteEnv: name });
37
- },
38
- },
39
- },
40
- new ESModulesEvaluator(),
41
- process.env.NITRO_DEBUG ? console.debug : undefined
42
- );
43
-
44
- this.reload();
45
- }
46
-
47
- async reload() {
48
- try {
49
- this.entry = await this.runner.import(this.entryPath);
50
- this.entryError = undefined;
51
- } catch (error) {
52
- console.error(error);
53
- this.entryError = error;
54
- }
55
- }
56
-
57
- async fetch(req, init) {
58
- if (this.entryError) {
59
- return renderError(req, this.entryError);
60
- }
61
- for (let i = 0; i < 5 && !(this.entry || this.entryError); i++) {
62
- await new Promise((r) => setTimeout(r, 100 * Math.pow(2, i)));
63
- }
64
- if (this.entryError) {
65
- return renderError(req, this.entryError);
66
- }
67
- if (!this.entry) {
68
- throw httpError(503, `Vite environment "${this.name}" is unavailable`);
69
- }
70
- try {
71
- const entryFetch = this.entry.fetch || this.entry.default?.fetch;
72
- if (!entryFetch) {
73
- throw httpError(
74
- 500,
75
- `No fetch handler exported from ${this.entryPath}`
76
- );
77
- }
78
- return await entryFetch(req, init);
79
- } catch (error) {
80
- return renderError(req, error);
81
- }
82
- }
83
- }
84
-
85
- // ----- RPC listeners -----
86
-
87
- const viteHostRequests = new Map();
88
-
89
- async function requestToViteHost(
90
- name,
91
- data,
92
- id = Math.random().toString(16).slice(2),
93
- timeout = 3000
94
- ) {
95
- setTimeout(() => {
96
- if (viteHostRequests.has(id)) {
97
- viteHostRequests.delete(id);
98
- reject(new Error(`Request to vite host timed out (${name}:${id})`));
99
- }
100
- }, timeout);
101
- let resolve, reject;
102
- const promise = new Promise((_resolve, _reject) => {
103
- resolve = (value) => {
104
- viteHostRequests.delete(id);
105
- return _resolve(value);
106
- };
107
- reject = (err) => {
108
- viteHostRequests.delete(id);
109
- return _reject(err);
110
- };
111
- });
112
- viteHostRequests.set(id, { resolve, reject });
113
- parentPort.postMessage({
114
- type: "custom",
115
- event: "nitro:vite-invoke",
116
- data: { name, id, data },
117
- });
118
- return promise;
119
- }
120
-
121
- parentPort.on("message", (payload) => {
122
- if (payload?.type !== "custom") {
123
- return;
124
- }
125
- switch (payload.event) {
126
- case "nitro:vite-server-addr": {
127
- viteServerAddr = payload.data;
128
- break;
129
- }
130
- case "nitro:vite-env": {
131
- const { name, entry } = payload.data;
132
- if (envs[name]) {
133
- console.error(`Vite environment "${name}" already registered!`);
134
- } else {
135
- envs[name] = new EnvRunner({ name, entry });
136
- }
137
- break;
138
- }
139
- case "nitro:vite-invoke-response": {
140
- const { id, data: response } = payload.data;
141
- const req = viteHostRequests.get(id);
142
- if (req) {
143
- if (response.error) {
144
- req.reject(response.error);
145
- } else {
146
- req.resolve(response.data);
147
- }
148
- }
149
- break;
150
- }
151
- }
152
- });
153
-
154
- // Trap unhandled errors to avoid worker crash
155
- process.on("unhandledRejection", (error) => console.error(error));
156
- process.on("uncaughtException", (error) => console.error(error));
157
-
158
- // ----- RSC Support -----
159
-
160
- // define __VITE_ENVIRONMENT_RUNNER_IMPORT__ for RSC support
161
- // https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-rsc/README.md#__vite_environment_runner_import__
162
-
163
- globalThis.__VITE_ENVIRONMENT_RUNNER_IMPORT__ = async function (
164
- environmentName,
165
- id
166
- ) {
167
- const env = envs[environmentName];
168
- if (!env) {
169
- throw new Error(`Vite environment "${environmentName}" is not registered`);
170
- }
171
- return env.runner.import(id);
172
- };
173
-
174
- // ----- Server -----
175
-
176
- async function reload() {
177
- try {
178
- await Promise.all(Object.values(envs).map((env) => env?.reload()));
179
- } catch (error) {
180
- console.error(error);
181
- }
182
- }
183
-
184
- // eslint-disable-next-line unicorn/prefer-top-level-await
185
- reload();
186
-
187
- if (workerData.server) {
188
- const { createServer } = await import("node:http");
189
- const { toNodeHandler } = await import("srvx/node");
190
- const server = createServer(
191
- toNodeHandler(async (req, init) => {
192
- const viteEnv =
193
- init?.viteEnv || req?.headers.get("x-vite-env") || "nitro"; // TODO
194
- const env = envs[viteEnv];
195
- if (!env) {
196
- return renderError(
197
- req,
198
- httpError(500, `Unknown vite environment "${viteEnv}"`)
199
- );
200
- }
201
- return env.fetch(req, init);
202
- })
203
- );
204
-
205
- server.on("upgrade", (req, socket, head) => {
206
- const handleUpgrade = envs["nitro"]?.entry?.handleUpgrade;
207
- handleUpgrade?.(req, socket, head);
208
- });
209
-
210
- parentPort.on("message", async (message) => {
211
- if (message?.type === "full-reload") {
212
- await reload();
213
- } else if (message?.event === "shutdown") {
214
- server.close(() => {
215
- parentPort.postMessage({ event: "exit" });
216
- });
217
- }
218
- });
219
- await listen(server);
220
- const address = server.address();
221
- parentPort?.postMessage({
222
- event: "listen",
223
- address:
224
- typeof address === "string"
225
- ? { socketPath: address }
226
- : { host: "localhost", port: address?.port },
227
- });
228
- }
229
-
230
- // ----- HTML Transform -----
231
-
232
- globalThis.__transform_html__ = async function (html) {
233
- html = await requestToViteHost("transformHTML", html).catch((error) => {
234
- console.warn("Failed to transform HTML via Vite:", error);
235
- return html;
236
- });
237
- return html;
238
- };
239
-
240
- // ----- Error handling -----
241
-
242
- function httpError(status, message) {
243
- const error = new Error(message || `HTTP Error ${status}`);
244
- error.status = status;
245
- error.name = "NitroViteError";
246
- return error;
247
- }
248
-
249
- async function renderError(req, error) {
250
- if (req.headers.get("accept")?.includes("application/json")) {
251
- return new Response(
252
- JSON.stringify(
253
- {
254
- status: error.status || 500,
255
- name: error.name || "Error",
256
- message: error.message,
257
- stack: (error.stack || "")
258
- .split("\n")
259
- .splice(1)
260
- .map((l) => l.trim()),
261
- },
262
- null,
263
- 2
264
- ),
265
- {
266
- status: error.status || 500,
267
- headers: {
268
- "Content-Type": "application/json",
269
- "Cache-Control": "no-store, max-age=0, must-revalidate",
270
- Pragma: "no-cache",
271
- Expires: "0",
272
- },
273
- }
274
- );
275
- }
276
- const { Youch } = await import("youch");
277
- const youch = new Youch();
278
- return new Response(await youch.toHTML(error), {
279
- status: error.status || 500,
280
- headers: {
281
- "Content-Type": "text/html",
282
- "Cache-Control": "no-store, max-age=0, must-revalidate",
283
- Pragma: "no-cache",
284
- Expires: "0",
285
- },
286
- });
287
- }
288
-
289
- // ----- Internal Utils -----
290
-
291
- async function listen(server) {
292
- const listenAddr = (await isSocketSupported())
293
- ? getSocketAddress({
294
- name: `nitro-vite-${threadId}`,
295
- pid: true,
296
- random: true,
297
- })
298
- : { port: 0, host: "localhost" };
299
- return new Promise((resolve, reject) => {
300
- try {
301
- server.listen(listenAddr, () => resolve());
302
- } catch (error) {
303
- reject(error);
304
- }
305
- });
306
- }
307
-
308
- function fetchAddress(addr, input, inputInit) {
309
- let url;
310
- let init;
311
- if (input instanceof Request) {
312
- url = new URL(input.url);
313
- init = {
314
- method: input.method,
315
- headers: input.headers,
316
- body: input.body,
317
- ...inputInit,
318
- };
319
- } else {
320
- url = new URL(input);
321
- init = inputInit;
322
- }
323
- init = {
324
- duplex: "half",
325
- redirect: "manual",
326
- ...init,
327
- };
328
- if (addr.socketPath) {
329
- url.protocol = "http:";
330
- return fetch(url, {
331
- ...init,
332
- ...fetchSocketOptions(addr.socketPath),
333
- });
334
- }
335
- const origin = `http://${addr.host}${addr.port ? `:${addr.port}` : ""}`;
336
- const outURL = new URL(url.pathname + url.search, origin);
337
- return fetch(outURL, init);
338
- }
339
-
340
- function fetchSocketOptions(socketPath) {
341
- if ("Bun" in globalThis) {
342
- // https://bun.sh/guides/http/fetch-unix
343
- return { unix: socketPath };
344
- }
345
- if ("Deno" in globalThis) {
346
- // https://github.com/denoland/deno/pull/29154
347
- return {
348
- client: Deno.createHttpClient({
349
- // @ts-expect-error Missing types?
350
- transport: "unix",
351
- path: socketPath,
352
- }),
353
- };
354
- }
355
- // https://github.com/nodejs/undici/issues/2970
356
- return {
357
- dispatcher: new Agent({ connect: { socketPath } }),
358
- };
359
- }