nitro 3.0.1-alpha.1 → 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 (383) hide show
  1. package/LICENSE +6 -0
  2. package/README.md +4 -2
  3. package/dist/THIRD-PARTY-LICENSES.md +1646 -0
  4. package/dist/_build/common.mjs +29347 -54
  5. package/dist/_build/rolldown.mjs +53 -86
  6. package/dist/_build/rollup.mjs +42 -137
  7. package/dist/_build/vite.build.mjs +12 -50
  8. package/dist/_chunks/{B-D1JOIz.mjs → nitro.mjs} +211 -407
  9. package/dist/_chunks/nitro2.mjs +102 -0
  10. package/dist/_chunks/nitro3.mjs +129 -0
  11. package/dist/_chunks/utils.mjs +272 -0
  12. package/dist/{_chunks/Bqks5huO.mjs → _common.mjs} +11 -7
  13. package/dist/_dev.mjs +140 -326
  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+readdirp+chokidar.d.mts +230 -0
  23. package/dist/_libs/citty.mjs +141 -113
  24. package/dist/_libs/{plugin-commonjs.mjs → commondir+is-reference.mjs} +79 -259
  25. package/dist/_libs/compatx.d.mts +47 -0
  26. package/dist/_libs/compatx.mjs +1 -2
  27. package/dist/_libs/esbuild.d.mts +20 -0
  28. package/dist/_libs/escape-string-regexp.mjs +1 -2
  29. package/dist/_libs/estree+pluginutils.d.mts +241 -0
  30. package/dist/_libs/estree-walker.mjs +1 -147
  31. package/dist/_libs/exsolve.d.mts +1 -0
  32. package/dist/_libs/{plugin-node-resolve.mjs → hasown+resolve+deepmerge.mjs} +612 -216
  33. package/dist/_libs/httpxy.d.mts +82 -0
  34. package/dist/_libs/httpxy.mjs +299 -38
  35. package/dist/_libs/js-tokens.d.mts +1 -0
  36. package/dist/_libs/klona.mjs +1 -2
  37. package/dist/_libs/magic-string.d.mts +220 -0
  38. package/dist/_libs/mlly.d.mts +57 -0
  39. package/dist/_libs/nypm+tinyexec.mjs +845 -0
  40. package/dist/_libs/perfect-debounce.mjs +88 -0
  41. package/dist/_libs/pkg-types.d.mts +23 -0
  42. package/dist/_libs/plugin-alias.mjs +4 -4
  43. package/dist/_libs/plugin-inject.mjs +3 -7
  44. package/dist/_libs/plugin-json.mjs +3 -5
  45. package/dist/_libs/{vite-plugin-fullstack.mjs → pluginutils.mjs} +241 -156
  46. package/dist/_libs/{chokidar.mjs → readdirp+chokidar.mjs} +268 -223
  47. package/dist/_libs/remapping.mjs +2 -4
  48. package/dist/_libs/{gen-mapping.mjs → resolve-uri+gen-mapping.mjs} +16 -186
  49. package/dist/_libs/rou3.d.mts +44 -0
  50. package/dist/_libs/rou3.mjs +231 -54
  51. package/dist/_libs/std-env.d.mts +12 -0
  52. package/dist/_libs/strip-literal.d.mts +1 -0
  53. package/dist/_libs/tsconfck.mjs +20 -39
  54. package/dist/_libs/ultrahtml.mjs +3 -14
  55. package/dist/_libs/unimport+unplugin.mjs +1684 -0
  56. package/dist/_libs/unplugin+unimport.d.mts +423 -0
  57. package/dist/_libs/unwasm.d.mts +29 -0
  58. package/dist/_presets.mjs +475 -468
  59. package/dist/builder.d.mts +8 -7
  60. package/dist/builder.mjs +7 -25
  61. package/dist/cli/_chunks/build.mjs +22 -23
  62. package/dist/cli/_chunks/common.mjs +1 -2
  63. package/dist/cli/_chunks/deploy.mjs +40 -0
  64. package/dist/cli/_chunks/dev.mjs +9 -15
  65. package/dist/cli/_chunks/docs.mjs +30 -0
  66. package/dist/cli/_chunks/list.mjs +4 -6
  67. package/dist/cli/_chunks/prepare.mjs +2 -4
  68. package/dist/cli/_chunks/preview.mjs +51 -0
  69. package/dist/cli/_chunks/run.mjs +7 -9
  70. package/dist/cli/_chunks/task.mjs +1 -3
  71. package/dist/cli/index.mjs +5 -4
  72. package/dist/node_modules/@poppinss/colors/build/index.js +130 -160
  73. package/dist/node_modules/@poppinss/colors/package.json +20 -18
  74. package/dist/node_modules/@poppinss/dumper/build/formatters/html/main.js +8 -0
  75. package/dist/node_modules/@poppinss/dumper/package.json +1 -1
  76. package/dist/node_modules/@poppinss/exception/build/index.js +36 -55
  77. package/dist/node_modules/@poppinss/exception/package.json +19 -16
  78. package/dist/node_modules/@sindresorhus/is/distribution/index.js +46 -5
  79. package/dist/node_modules/@sindresorhus/is/package.json +1 -1
  80. package/dist/node_modules/@speed-highlight/core/dist/index.js +1 -1
  81. package/dist/node_modules/@speed-highlight/core/dist/terminal.js +1 -1
  82. package/dist/node_modules/@speed-highlight/core/package.json +2 -2
  83. package/dist/node_modules/croner/dist/croner.js +1 -1
  84. package/dist/node_modules/croner/package.json +11 -1
  85. package/dist/node_modules/ufo/dist/index.mjs +16 -9
  86. package/dist/node_modules/ufo/package.json +15 -14
  87. package/dist/node_modules/unctx/package.json +16 -16
  88. package/dist/node_modules/youch/build/helpers-B9BQYaS6.js +23 -0
  89. package/dist/node_modules/youch/build/index.js +204 -352
  90. package/dist/node_modules/youch/build/public/error_info/script.js +1 -1
  91. package/dist/node_modules/youch/build/public/error_info/style.css +1 -0
  92. package/dist/node_modules/youch/build/public/error_metadata/style.css +3 -0
  93. package/dist/node_modules/youch/build/public/error_stack/style.css +2 -3
  94. package/dist/node_modules/youch/build/public_dir-C5bujZKB.js +25 -0
  95. package/dist/node_modules/youch/build/src/templates/error_cause/main.js +44 -0
  96. package/dist/node_modules/youch/build/src/templates/error_info/main.js +72 -0
  97. package/dist/node_modules/youch/build/src/templates/error_metadata/main.js +65 -0
  98. package/dist/node_modules/youch/build/src/templates/error_stack/main.js +152 -0
  99. package/dist/node_modules/youch/build/src/templates/error_stack_source/main.js +46 -0
  100. package/dist/node_modules/youch/build/src/templates/header/main.js +24 -0
  101. package/dist/node_modules/youch/build/src/templates/layout/main.js +27 -0
  102. package/dist/node_modules/youch/package.json +34 -31
  103. package/dist/presets/_nitro/runtime/nitro-dev.mjs +13 -61
  104. package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +2 -1
  105. package/dist/presets/_nitro/runtime/service-worker.mjs +2 -3
  106. package/dist/presets/aws-amplify/runtime/aws-amplify.mjs +1 -1
  107. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.mjs +11 -11
  108. package/dist/presets/aws-lambda/runtime/aws-lambda.mjs +1 -1
  109. package/dist/presets/azure/runtime/azure-swa.mjs +1 -1
  110. package/dist/presets/bun/runtime/bun.mjs +11 -11
  111. package/dist/presets/cloudflare/runtime/_module-handler.mjs +19 -17
  112. package/dist/presets/cloudflare/runtime/cloudflare-durable.mjs +17 -16
  113. package/dist/presets/cloudflare/runtime/cloudflare-module.mjs +8 -9
  114. package/dist/presets/cloudflare/runtime/cloudflare-pages.mjs +12 -18
  115. package/dist/presets/deno/runtime/deno-deploy.mjs +4 -5
  116. package/dist/presets/deno/runtime/deno-server.mjs +9 -9
  117. package/dist/presets/netlify/runtime/netlify-edge.mjs +3 -3
  118. package/dist/presets/netlify/runtime/netlify.mjs +3 -1
  119. package/dist/presets/node/runtime/node-cluster.mjs +8 -8
  120. package/dist/presets/node/runtime/node-middleware.mjs +4 -5
  121. package/dist/presets/node/runtime/node-server.mjs +8 -8
  122. package/dist/presets/standard/runtime/server.mjs +1 -1
  123. package/dist/presets/stormkit/runtime/stormkit.mjs +1 -2
  124. package/dist/presets/vercel/runtime/cron-handler.mjs +25 -0
  125. package/dist/presets/vercel/runtime/isr.mjs +19 -0
  126. package/dist/presets/vercel/runtime/vercel.node.mjs +16 -7
  127. package/dist/presets/vercel/runtime/vercel.web.mjs +14 -11
  128. package/dist/presets/winterjs/runtime/winterjs.mjs +1 -1
  129. package/dist/presets/zeabur/runtime/zeabur.mjs +1 -1
  130. package/dist/presets/zephyr/runtime/server.mjs +3 -0
  131. package/dist/runtime/app.d.mts +1 -1
  132. package/dist/runtime/app.mjs +1 -1
  133. package/dist/runtime/internal/app.d.mts +7 -3
  134. package/dist/runtime/internal/app.mjs +29 -22
  135. package/dist/runtime/internal/cache.d.mts +0 -4
  136. package/dist/runtime/internal/cache.mjs +32 -256
  137. package/dist/runtime/internal/context.d.mts +3 -1
  138. package/dist/runtime/internal/database.mjs +1 -1
  139. package/dist/runtime/internal/error/dev.d.mts +5 -5
  140. package/dist/runtime/internal/error/dev.mjs +39 -41
  141. package/dist/runtime/internal/error/hooks.d.mts +1 -1
  142. package/dist/runtime/internal/error/prod.d.mts +2 -5
  143. package/dist/runtime/internal/error/prod.mjs +19 -33
  144. package/dist/runtime/internal/error/utils.d.mts +4 -4
  145. package/dist/runtime/internal/meta.d.mts +1 -1
  146. package/dist/runtime/internal/plugin.d.mts +2 -2
  147. package/dist/runtime/internal/route-rules.d.mts +9 -8
  148. package/dist/runtime/internal/route-rules.mjs +9 -1
  149. package/dist/runtime/internal/routes/dev-tasks.d.mts +3 -2
  150. package/dist/runtime/internal/routes/dev-tasks.mjs +7 -3
  151. package/dist/runtime/internal/routes/openapi.d.mts +0 -1
  152. package/dist/runtime/internal/routes/openapi.mjs +3 -3
  153. package/dist/runtime/internal/routes/renderer-template.d.mts +1 -1
  154. package/dist/runtime/internal/routes/renderer-template.dev.d.mts +2 -1
  155. package/dist/runtime/internal/routes/renderer-template.dev.mjs +1 -1
  156. package/dist/runtime/internal/routes/renderer-template.mjs +1 -1
  157. package/dist/runtime/internal/routes/scalar.d.mts +0 -1
  158. package/dist/runtime/internal/routes/scalar.mjs +4 -4
  159. package/dist/runtime/internal/routes/swagger.d.mts +0 -1
  160. package/dist/runtime/internal/routes/swagger.mjs +3 -3
  161. package/dist/runtime/internal/runtime-config.d.mts +1 -1
  162. package/dist/runtime/internal/runtime-config.mjs +8 -8
  163. package/dist/runtime/internal/static.mjs +6 -5
  164. package/dist/runtime/internal/storage.mjs +1 -1
  165. package/dist/runtime/internal/task.d.mts +3 -1
  166. package/dist/runtime/internal/task.mjs +3 -3
  167. package/dist/runtime/internal/vite/dev-entry.mjs +8 -6
  168. package/dist/runtime/internal/vite/dev-worker.mjs +166 -216
  169. package/dist/runtime/meta.d.mts +1 -1
  170. package/dist/runtime/meta.mjs +2 -1
  171. package/dist/runtime/nitro.d.mts +2 -3
  172. package/dist/runtime/nitro.mjs +3 -1
  173. package/dist/runtime/virtual/_runtime_warn.d.mts +1 -0
  174. package/dist/runtime/virtual/_runtime_warn.mjs +5 -0
  175. package/dist/runtime/virtual/database.d.mts +8 -0
  176. package/dist/runtime/virtual/database.mjs +2 -0
  177. package/dist/runtime/virtual/error-handler.d.mts +6 -0
  178. package/dist/runtime/virtual/error-handler.mjs +9 -0
  179. package/dist/runtime/virtual/feature-flags.d.mts +7 -0
  180. package/dist/runtime/virtual/feature-flags.mjs +7 -0
  181. package/dist/runtime/virtual/plugins.d.mts +3 -0
  182. package/dist/runtime/virtual/plugins.mjs +2 -0
  183. package/dist/{presets/_nitro/runtime/nitro-prerenderer.d.mts → runtime/virtual/polyfills.d.mts} +1 -1
  184. package/dist/runtime/virtual/polyfills.mjs +2 -0
  185. package/dist/runtime/virtual/public-assets.d.mts +9 -0
  186. package/dist/runtime/virtual/public-assets.mjs +8 -0
  187. package/dist/runtime/virtual/renderer-template.d.mts +4 -0
  188. package/dist/runtime/virtual/renderer-template.mjs +7 -0
  189. package/dist/runtime/virtual/routing-meta.d.mts +7 -0
  190. package/dist/runtime/virtual/routing-meta.mjs +2 -0
  191. package/dist/runtime/virtual/routing.d.mts +8 -0
  192. package/dist/runtime/virtual/routing.mjs +11 -0
  193. package/dist/runtime/virtual/runtime-config.d.mts +3 -0
  194. package/dist/runtime/virtual/runtime-config.mjs +5 -0
  195. package/dist/runtime/virtual/server-assets.d.mts +7 -0
  196. package/dist/runtime/virtual/server-assets.mjs +12 -0
  197. package/dist/runtime/virtual/storage.d.mts +3 -0
  198. package/dist/runtime/virtual/storage.mjs +5 -0
  199. package/dist/runtime/virtual/tasks.d.mts +10 -0
  200. package/dist/runtime/virtual/tasks.mjs +3 -0
  201. package/dist/runtime/{vite-runtime.d.mts → vite.d.mts} +1 -1
  202. package/dist/types/index.d.mts +315 -443
  203. package/dist/types/index.mjs +1 -1
  204. package/dist/vite.d.mts +10 -15
  205. package/dist/vite.mjs +733 -37
  206. package/lib/vite.types.d.mts +26 -0
  207. package/lib/vite.types.mjs +2 -0
  208. package/package.json +129 -85
  209. package/skills/nitro/SKILL.md +10 -0
  210. package/skills/nitro/docs/TOC.md +83 -0
  211. package/skills/nitro/docs/_navigation.json +679 -0
  212. package/skills/nitro/docs/config/index.md +1147 -0
  213. package/skills/nitro/docs/deploy/index.md +64 -0
  214. package/skills/nitro/docs/deploy/providers/alwaysdata.md +50 -0
  215. package/skills/nitro/docs/deploy/providers/aws-amplify.md +81 -0
  216. package/skills/nitro/docs/deploy/providers/aws.md +47 -0
  217. package/skills/nitro/docs/deploy/providers/azure.md +72 -0
  218. package/skills/nitro/docs/deploy/providers/cleavr.md +33 -0
  219. package/skills/nitro/docs/deploy/providers/cloudflare.md +375 -0
  220. package/skills/nitro/docs/deploy/providers/deno-deploy.md +66 -0
  221. package/skills/nitro/docs/deploy/providers/digitalocean.md +46 -0
  222. package/skills/nitro/docs/deploy/providers/firebase.md +32 -0
  223. package/skills/nitro/docs/deploy/providers/flightcontrol.md +67 -0
  224. package/skills/nitro/docs/deploy/providers/genezio.md +67 -0
  225. package/skills/nitro/docs/deploy/providers/github-pages.md +68 -0
  226. package/skills/nitro/docs/deploy/providers/gitlab-pages.md +37 -0
  227. package/skills/nitro/docs/deploy/providers/heroku.md +84 -0
  228. package/skills/nitro/docs/deploy/providers/iis.md +38 -0
  229. package/skills/nitro/docs/deploy/providers/koyeb.md +109 -0
  230. package/skills/nitro/docs/deploy/providers/netlify.md +47 -0
  231. package/skills/nitro/docs/deploy/providers/platform-sh.md +37 -0
  232. package/skills/nitro/docs/deploy/providers/render.md +37 -0
  233. package/skills/nitro/docs/deploy/providers/stormkit.md +24 -0
  234. package/skills/nitro/docs/deploy/providers/vercel.md +179 -0
  235. package/skills/nitro/docs/deploy/providers/zeabur.md +19 -0
  236. package/skills/nitro/docs/deploy/providers/zephyr.md +99 -0
  237. package/skills/nitro/docs/deploy/providers/zerops.md +102 -0
  238. package/skills/nitro/docs/deploy/runtimes/bun.md +15 -0
  239. package/skills/nitro/docs/deploy/runtimes/deno.md +19 -0
  240. package/skills/nitro/docs/deploy/runtimes/node.md +63 -0
  241. package/skills/nitro/docs/docs/assets.md +166 -0
  242. package/skills/nitro/docs/docs/cache.md +408 -0
  243. package/skills/nitro/docs/docs/configuration.md +256 -0
  244. package/skills/nitro/docs/docs/database.md +185 -0
  245. package/skills/nitro/docs/docs/index.md +56 -0
  246. package/skills/nitro/docs/docs/lifecycle.md +204 -0
  247. package/skills/nitro/docs/docs/migration.md +215 -0
  248. package/skills/nitro/docs/docs/nightly.md +31 -0
  249. package/skills/nitro/docs/docs/plugins.md +164 -0
  250. package/skills/nitro/docs/docs/quick-start.md +110 -0
  251. package/skills/nitro/docs/docs/renderer.md +322 -0
  252. package/skills/nitro/docs/docs/routing.md +711 -0
  253. package/skills/nitro/docs/docs/server-entry.md +239 -0
  254. package/skills/nitro/docs/docs/storage.md +261 -0
  255. package/skills/nitro/docs/docs/tasks.md +277 -0
  256. package/skills/nitro/docs/examples/api-routes.md +145 -0
  257. package/skills/nitro/docs/examples/auto-imports.md +93 -0
  258. package/skills/nitro/docs/examples/cached-handler.md +81 -0
  259. package/skills/nitro/docs/examples/custom-error-handler.md +98 -0
  260. package/skills/nitro/docs/examples/database.md +157 -0
  261. package/skills/nitro/docs/examples/elysia.md +70 -0
  262. package/skills/nitro/docs/examples/express.md +78 -0
  263. package/skills/nitro/docs/examples/fastify.md +79 -0
  264. package/skills/nitro/docs/examples/hello-world.md +68 -0
  265. package/skills/nitro/docs/examples/hono.md +74 -0
  266. package/skills/nitro/docs/examples/import-alias.md +100 -0
  267. package/skills/nitro/docs/examples/index.md +3 -0
  268. package/skills/nitro/docs/examples/middleware.md +91 -0
  269. package/skills/nitro/docs/examples/mono-jsx.md +68 -0
  270. package/skills/nitro/docs/examples/nano-jsx.md +70 -0
  271. package/skills/nitro/docs/examples/plugins.md +91 -0
  272. package/skills/nitro/docs/examples/renderer.md +113 -0
  273. package/skills/nitro/docs/examples/runtime-config.md +97 -0
  274. package/skills/nitro/docs/examples/server-fetch.md +87 -0
  275. package/skills/nitro/docs/examples/shiki.md +198 -0
  276. package/skills/nitro/docs/examples/virtual-routes.md +74 -0
  277. package/skills/nitro/docs/examples/vite-nitro-plugin.md +79 -0
  278. package/skills/nitro/docs/examples/vite-rsc.md +1041 -0
  279. package/skills/nitro/docs/examples/vite-ssr-html.md +217 -0
  280. package/skills/nitro/docs/examples/vite-ssr-preact.md +247 -0
  281. package/skills/nitro/docs/examples/vite-ssr-react.md +226 -0
  282. package/skills/nitro/docs/examples/vite-ssr-solid.md +256 -0
  283. package/skills/nitro/docs/examples/vite-ssr-tsr-react.md +442 -0
  284. package/skills/nitro/docs/examples/vite-ssr-tss-react.md +444 -0
  285. package/skills/nitro/docs/examples/vite-ssr-vue-router.md +616 -0
  286. package/skills/nitro/docs/examples/vite-trpc.md +335 -0
  287. package/skills/nitro/docs/examples/websocket.md +282 -0
  288. package/skills/nitro/docs/index.md +121 -0
  289. package/dist/_build/common2.mjs +0 -772
  290. package/dist/_build/vite.plugin.mjs +0 -768
  291. package/dist/_chunks/ANM1K1bE.mjs +0 -304
  292. package/dist/_chunks/BX9-zVkM.mjs +0 -59
  293. package/dist/_chunks/C7CbzoI1.mjs +0 -39
  294. package/dist/_libs/acorn.mjs +0 -5034
  295. package/dist/_libs/c12.mjs +0 -2858
  296. package/dist/_libs/commondir.mjs +0 -22
  297. package/dist/_libs/confbox.mjs +0 -2920
  298. package/dist/_libs/deepmerge.mjs +0 -86
  299. package/dist/_libs/dot-prop.mjs +0 -138
  300. package/dist/_libs/duplexer.mjs +0 -71
  301. package/dist/_libs/etag.mjs +0 -80
  302. package/dist/_libs/fdir.mjs +0 -514
  303. package/dist/_libs/function-bind.mjs +0 -63
  304. package/dist/_libs/giget.mjs +0 -19289
  305. package/dist/_libs/gzip-size.mjs +0 -21
  306. package/dist/_libs/hasown.mjs +0 -14
  307. package/dist/_libs/is-core-module.mjs +0 -220
  308. package/dist/_libs/is-module.mjs +0 -13
  309. package/dist/_libs/is-reference.mjs +0 -32
  310. package/dist/_libs/js-tokens.mjs +0 -382
  311. package/dist/_libs/knitwork.mjs +0 -124
  312. package/dist/_libs/local-pkg.mjs +0 -1686
  313. package/dist/_libs/magic-string.mjs +0 -939
  314. package/dist/_libs/mime.mjs +0 -1391
  315. package/dist/_libs/node-fetch-native.mjs +0 -173
  316. package/dist/_libs/path-parse.mjs +0 -47
  317. package/dist/_libs/pathe.mjs +0 -41
  318. package/dist/_libs/picomatch.mjs +0 -1673
  319. package/dist/_libs/plugin-replace.mjs +0 -104
  320. package/dist/_libs/pretty-bytes.mjs +0 -116
  321. package/dist/_libs/std-env.mjs +0 -158
  322. package/dist/_libs/strip-literal.mjs +0 -51
  323. package/dist/_libs/tinyglobby.mjs +0 -292
  324. package/dist/_libs/unimport.mjs +0 -3520
  325. package/dist/_libs/untyped.mjs +0 -271
  326. package/dist/_libs/unwasm.mjs +0 -5836
  327. package/dist/cli/_chunks/detect-acorn.mjs +0 -12
  328. package/dist/cli/_chunks/dist.mjs +0 -3
  329. package/dist/cli/_chunks/dist2.mjs +0 -3
  330. package/dist/cli/_chunks/dist3.mjs +0 -3
  331. package/dist/cli/_chunks/dist4.mjs +0 -4
  332. package/dist/cli/_chunks/dist5.mjs +0 -4
  333. package/dist/cli/_chunks/esm.mjs +0 -3
  334. package/dist/cli/_chunks/json5.mjs +0 -4
  335. package/dist/cli/_chunks/jsonc.mjs +0 -4
  336. package/dist/cli/_chunks/multipart-parser.mjs +0 -6
  337. package/dist/cli/_chunks/toml.mjs +0 -4
  338. package/dist/cli/_chunks/yaml.mjs +0 -4
  339. package/dist/node_modules/hookable/dist/index.mjs +0 -267
  340. package/dist/node_modules/hookable/package.json +0 -52
  341. package/dist/node_modules/kleur/index.js +0 -110
  342. package/dist/node_modules/youch/build/chunk-4L7RY2JA.js +0 -42
  343. package/dist/node_modules/youch/build/chunk-4XB2BYKC.js +0 -85
  344. package/dist/node_modules/youch/build/chunk-4YEN7HVQ.js +0 -61
  345. package/dist/node_modules/youch/build/chunk-EUJBVOYB.js +0 -83
  346. package/dist/node_modules/youch/build/chunk-F4I6KX4R.js +0 -46
  347. package/dist/node_modules/youch/build/chunk-HFSXRSKS.js +0 -85
  348. package/dist/node_modules/youch/build/chunk-OSUFJZHZ.js +0 -6
  349. package/dist/node_modules/youch/build/chunk-PINJDICN.js +0 -72
  350. package/dist/node_modules/youch/build/chunk-PUHGL6HA.js +0 -41
  351. package/dist/node_modules/youch/build/chunk-YYEJ3AGB.js +0 -225
  352. package/dist/presets/_nitro/runtime/nitro-dev.d.mts +0 -2
  353. package/dist/presets/_nitro/runtime/service-worker.d.mts +0 -2
  354. package/dist/presets/aws-amplify/runtime/aws-amplify.d.mts +0 -2
  355. package/dist/presets/aws-lambda/runtime/_utils.d.mts +0 -13
  356. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.d.mts +0 -2
  357. package/dist/presets/aws-lambda/runtime/aws-lambda.d.mts +0 -3
  358. package/dist/presets/azure/runtime/_utils.d.mts +0 -2
  359. package/dist/presets/azure/runtime/azure-swa.d.mts +0 -5
  360. package/dist/presets/bun/runtime/bun.d.mts +0 -3
  361. package/dist/presets/cloudflare/runtime/_module-handler.d.mts +0 -16
  362. package/dist/presets/cloudflare/runtime/cloudflare-durable.d.mts +0 -11
  363. package/dist/presets/cloudflare/runtime/cloudflare-module.d.mts +0 -3
  364. package/dist/presets/cloudflare/runtime/cloudflare-pages.d.mts +0 -20
  365. package/dist/presets/cloudflare/runtime/plugin.dev.d.mts +0 -3
  366. package/dist/presets/deno/runtime/deno-deploy.d.mts +0 -5
  367. package/dist/presets/deno/runtime/deno-server.d.mts +0 -3
  368. package/dist/presets/netlify/runtime/netlify-edge.d.mts +0 -4
  369. package/dist/presets/netlify/runtime/netlify.d.mts +0 -3
  370. package/dist/presets/node/runtime/node-cluster.d.mts +0 -3
  371. package/dist/presets/node/runtime/node-middleware.d.mts +0 -3
  372. package/dist/presets/node/runtime/node-server.d.mts +0 -3
  373. package/dist/presets/standard/runtime/server.d.mts +0 -3
  374. package/dist/presets/stormkit/runtime/stormkit.d.mts +0 -21
  375. package/dist/presets/vercel/runtime/vercel.node.d.mts +0 -3
  376. package/dist/presets/vercel/runtime/vercel.web.d.mts +0 -8
  377. package/dist/presets/winterjs/runtime/winterjs.d.mts +0 -3
  378. package/dist/presets/zeabur/runtime/zeabur.d.mts +0 -3
  379. package/lib/deps/ofetch.mjs +0 -1
  380. package/lib/deps/ofetch.mts +0 -1
  381. /package/dist/runtime/{vite-runtime.mjs → vite.mjs} +0 -0
  382. /package/lib/{deps/h3.d.mts → h3.d.mts} +0 -0
  383. /package/lib/{deps/h3.mjs → h3.mjs} +0 -0
package/dist/_dev.mjs CHANGED
@@ -1,220 +1,17 @@
1
- import { S as extname$1, k as resolve$1, n as debounce, w as join$1 } from "./_libs/c12.mjs";
2
- import { n as T, r as a } from "./_libs/std-env.mjs";
3
- import { t as src_default } from "./_libs/mime.mjs";
4
- import { r as writeDevBuildInfo } from "./_build/common.mjs";
5
- import { n as createProxyServer } from "./_libs/httpxy.mjs";
6
- import { i as watch$1 } from "./_libs/chokidar.mjs";
7
- import consola$1 from "consola";
1
+ import { A as src_default, H as v, V as m, ct as join$1, dt as resolve$1, g as writeDevBuildInfo, ot as extname$1 } from "./_build/common.mjs";
2
+ import { n as watch$1 } from "./_libs/readdirp+chokidar.mjs";
3
+ import { t as debounce } from "./_libs/perfect-debounce.mjs";
4
+ import { t as createProxyServer } from "./_libs/httpxy.mjs";
5
+ import consola from "consola";
6
+ import { createReadStream } from "node:fs";
7
+ import { readFile, stat as stat$1 } from "node:fs/promises";
8
8
  import { dirname, resolve } from "node:path";
9
- import { createReadStream, existsSync } from "node:fs";
10
9
  import { joinURL } from "ufo";
11
- import { readFile, rm, stat } from "node:fs/promises";
12
10
  import { createBrotliCompress, createGzip } from "node:zlib";
13
- import { Worker } from "node:worker_threads";
11
+ import { RunnerManager, loadRunner } from "env-runner";
14
12
  import { H3, HTTPError, defineHandler, fromNodeHandler, getRequestIP, getRequestURL, serveStatic, toEventHandler } from "h3";
15
- import { Agent } from "undici";
16
13
  import { serve } from "srvx/node";
17
- import { ErrorParser } from "youch-core";
18
- import { Youch } from "youch";
19
- import { SourceMapConsumer } from "source-map";
20
14
  import { FastResponse } from "srvx";
21
-
22
- //#region src/dev/proxy.ts
23
- function createHTTPProxy(defaults = {}) {
24
- const proxy = createProxyServer(defaults);
25
- proxy.on("proxyReq", (proxyReq, req) => {
26
- if (!proxyReq.hasHeader("x-forwarded-for")) {
27
- const address = req.socket.remoteAddress;
28
- if (address) proxyReq.appendHeader("x-forwarded-for", address);
29
- }
30
- if (!proxyReq.hasHeader("x-forwarded-port")) {
31
- if (req?.socket?.localPort) proxyReq.setHeader("x-forwarded-port", req.socket.localPort);
32
- }
33
- if (!proxyReq.hasHeader("x-forwarded-Proto")) {
34
- const encrypted = (req?.connection)?.encrypted;
35
- proxyReq.setHeader("x-forwarded-proto", encrypted ? "https" : "http");
36
- }
37
- });
38
- return {
39
- proxy,
40
- async handleEvent(event, opts) {
41
- try {
42
- return await fromNodeHandler((req, res) => proxy.web(req, res, opts))(event);
43
- } catch (error) {
44
- event.res.headers.set("refresh", "3");
45
- throw new HTTPError({
46
- status: 503,
47
- message: "Dev server is unavailable.",
48
- cause: error
49
- });
50
- }
51
- }
52
- };
53
- }
54
- function fetchAddress(addr, input, inputInit) {
55
- let url;
56
- let init;
57
- if (input instanceof Request) {
58
- url = new URL(input.url);
59
- init = {
60
- method: input.method,
61
- headers: input.headers,
62
- body: input.body,
63
- ...inputInit
64
- };
65
- } else {
66
- url = new URL(input);
67
- init = inputInit;
68
- }
69
- init = {
70
- duplex: "half",
71
- redirect: "manual",
72
- ...init
73
- };
74
- if (addr.socketPath) {
75
- url.protocol = "http:";
76
- return fetch(url, {
77
- ...init,
78
- ...fetchSocketOptions(addr.socketPath)
79
- });
80
- }
81
- const origin = `http://${addr.host}${addr.port ? `:${addr.port}` : ""}`;
82
- const outURL = new URL(url.pathname + url.search, origin);
83
- return fetch(outURL, init);
84
- }
85
- function fetchSocketOptions(socketPath) {
86
- if ("Bun" in globalThis) return { unix: socketPath };
87
- if ("Deno" in globalThis) return { client: Deno.createHttpClient({
88
- transport: "unix",
89
- path: socketPath
90
- }) };
91
- return { dispatcher: new Agent({ connect: { socketPath } }) };
92
- }
93
-
94
- //#endregion
95
- //#region src/dev/worker.ts
96
- var NodeDevWorker = class {
97
- closed = false;
98
- #name;
99
- #entry;
100
- #data;
101
- #hooks;
102
- #worker;
103
- #address;
104
- #proxy;
105
- #messageListeners;
106
- constructor(opts) {
107
- this.#name = opts.name;
108
- this.#entry = opts.entry;
109
- this.#data = opts.data;
110
- this.#hooks = opts.hooks;
111
- this.#proxy = createHTTPProxy();
112
- this.#messageListeners = /* @__PURE__ */ new Set();
113
- this.#initWorker();
114
- }
115
- get ready() {
116
- return Boolean(!this.closed && this.#address && this.#proxy && this.#worker);
117
- }
118
- async fetch(input, init) {
119
- for (let i = 0; i < 5 && !(this.#address && this.#proxy); i++) await new Promise((r) => setTimeout(r, 100 * Math.pow(2, i)));
120
- if (!(this.#address && this.#proxy)) return new Response("Dev worker is unavailable", { status: 503 });
121
- return fetchAddress(this.#address, input, init);
122
- }
123
- upgrade(req, socket, head) {
124
- if (!this.ready) return;
125
- return this.#proxy.proxy.ws(req, socket, {
126
- target: this.#address,
127
- xfwd: true
128
- }, head).catch((error) => {
129
- consola$1.error("WebSocket proxy error:", error);
130
- });
131
- }
132
- sendMessage(message) {
133
- if (!this.#worker) throw new Error("Dev worker should be initialized before sending messages.");
134
- this.#worker.postMessage(message);
135
- }
136
- onMessage(listener) {
137
- this.#messageListeners.add(listener);
138
- }
139
- offMessage(listener) {
140
- this.#messageListeners.delete(listener);
141
- }
142
- async close(cause) {
143
- if (this.closed) return;
144
- this.closed = true;
145
- this.#hooks.onClose?.(this, cause);
146
- this.#hooks = {};
147
- const onError = (error) => consola$1.error(error);
148
- await this.#closeWorker().catch(onError);
149
- await this.#closeProxy().catch(onError);
150
- await this.#closeSocket().catch(onError);
151
- }
152
- [Symbol.for("nodejs.util.inspect.custom")]() {
153
- const status = this.closed ? "closed" : this.ready ? "ready" : "pending";
154
- return `NodeDevWorker#${this.#name}(${status})`;
155
- }
156
- #initWorker() {
157
- if (!existsSync(this.#entry)) {
158
- this.close(`worker entry not found in "${this.#entry}".`);
159
- return;
160
- }
161
- const worker = new Worker(this.#entry, {
162
- env: { ...process.env },
163
- workerData: {
164
- name: this.#name,
165
- ...this.#data
166
- }
167
- });
168
- worker.once("exit", (code) => {
169
- worker._exitCode = code;
170
- this.close(`worker exited with code ${code}`);
171
- });
172
- worker.once("error", (error) => {
173
- consola$1.error(`Worker error:`, error);
174
- this.close(error);
175
- });
176
- worker.on("message", (message) => {
177
- if (message?.address) {
178
- this.#address = message.address;
179
- this.#hooks.onReady?.(this, this.#address);
180
- }
181
- for (const listener of this.#messageListeners) listener(message);
182
- });
183
- this.#worker = worker;
184
- }
185
- async #closeProxy() {
186
- this.#proxy?.proxy?.close(() => {});
187
- this.#proxy = void 0;
188
- }
189
- async #closeSocket() {
190
- const socketPath = this.#address?.socketPath;
191
- if (socketPath && socketPath[0] !== "\0" && !socketPath.startsWith(String.raw`\\.\pipe`)) await rm(socketPath).catch(() => {});
192
- this.#address = void 0;
193
- }
194
- async #closeWorker() {
195
- if (!this.#worker) return;
196
- this.#worker.postMessage({ event: "shutdown" });
197
- if (!this.#worker._exitCode && !a && !T) await new Promise((resolve$2) => {
198
- const gracefulShutdownTimeoutMs = Number.parseInt(process.env.NITRO_SHUTDOWN_TIMEOUT || "", 10) || 5e3;
199
- const timeout = setTimeout(() => {
200
- if (process.env.DEBUG) consola$1.warn(`force closing dev worker...`);
201
- }, gracefulShutdownTimeoutMs);
202
- this.#worker?.on("message", (message) => {
203
- if (message.event === "exit") {
204
- clearTimeout(timeout);
205
- resolve$2();
206
- }
207
- });
208
- });
209
- this.#worker.removeAllListeners();
210
- await this.#worker.terminate().catch((error) => {
211
- consola$1.error(error);
212
- });
213
- this.#worker = void 0;
214
- }
215
- };
216
-
217
- //#endregion
218
15
  //#region src/dev/vfs.ts
219
16
  function createVFSHandler(nitro) {
220
17
  return defineHandler(async (event) => {
@@ -224,24 +21,19 @@ function createVFSHandler(nitro) {
224
21
  statusText: `Forbidden IP: "${ip || "?"}"`,
225
22
  status: 403
226
23
  });
227
- const vfsEntries = {
228
- ...nitro.vfs,
229
- ...nitro.options.virtual
230
- };
231
24
  const url = event.context.params?._ || "";
232
25
  const isJson = url.endsWith(".json") || event.req.headers.get("accept")?.includes("application/json");
233
26
  const id = decodeURIComponent(url.replace(/^(\.json)?\/?/, "") || "");
234
- if (id && !(id in vfsEntries)) throw new HTTPError({
27
+ if (id && !nitro.vfs.has(id)) throw new HTTPError({
235
28
  message: "File not found",
236
29
  status: 404
237
30
  });
238
- let content = id ? vfsEntries[id] : void 0;
239
- if (typeof content === "function") content = await content();
31
+ const content = id ? await nitro.vfs.get(id)?.render() : void 0;
240
32
  if (isJson) return {
241
33
  rootDir: nitro.options.rootDir,
242
- entries: Object.keys(vfsEntries).map((id$1) => ({
243
- id: id$1,
244
- path: "/_vfs.json/" + encodeURIComponent(id$1)
34
+ entries: [...nitro.vfs.keys()].map((id) => ({
35
+ id,
36
+ path: "/_vfs.json/" + encodeURIComponent(id)
245
37
  })),
246
38
  current: id ? {
247
39
  id,
@@ -249,7 +41,7 @@ function createVFSHandler(nitro) {
249
41
  } : null
250
42
  };
251
43
  const directories = { [nitro.options.rootDir]: {} };
252
- const fpaths = Object.keys(vfsEntries);
44
+ const fpaths = [...nitro.vfs.keys()];
253
45
  for (const item of fpaths) {
254
46
  const segments = item.replace(nitro.options.rootDir, "").split("/").filter(Boolean);
255
47
  let currentDir = item.startsWith(nitro.options.rootDir) ? directories[nitro.options.rootDir] : directories;
@@ -258,8 +50,8 @@ function createVFSHandler(nitro) {
258
50
  currentDir = currentDir[segment];
259
51
  }
260
52
  }
261
- const generateHTML = (directory, path$1 = []) => Object.entries(directory).map(([fname, value = {}]) => {
262
- const subpath = [...path$1, fname];
53
+ const generateHTML = (directory, path = []) => Object.entries(directory).map(([fname, value = {}]) => {
54
+ const subpath = [...path, fname];
263
55
  const key = subpath.join("/");
264
56
  const encodedUrl = encodeURIComponent(key);
265
57
  const linkClass = url === `/${encodedUrl}` ? "bg-gray-700 text-white" : "hover:bg-gray-800 text-gray-200";
@@ -350,22 +142,20 @@ const editorTemplate = (options) => `
350
142
  }, 0);
351
143
  <\/script>
352
144
  `;
353
-
354
145
  //#endregion
355
146
  //#region src/runtime/internal/error/utils.ts
356
147
  function defineNitroErrorHandler(handler) {
357
148
  return handler;
358
149
  }
359
-
360
150
  //#endregion
361
151
  //#region src/runtime/internal/error/dev.ts
362
- var dev_default = defineNitroErrorHandler(async function defaultNitroErrorHandler(error, event) {
152
+ const errorHandler = defineNitroErrorHandler(async function defaultNitroErrorHandler(error, event) {
363
153
  const res = await defaultHandler(error, event);
364
154
  return new FastResponse(typeof res.body === "string" ? res.body : JSON.stringify(res.body, null, 2), res);
365
155
  });
366
156
  async function defaultHandler(error, event, opts) {
367
- const isSensitive = error.unhandled;
368
- const status = error.status || 500;
157
+ const unhandled = error.unhandled ?? !HTTPError.isError(error);
158
+ const { status = 500, statusText = "" } = unhandled ? {} : error;
369
159
  const url = getRequestURL(event, {
370
160
  xForwardedHost: true,
371
161
  xForwardedProto: true
@@ -375,58 +165,63 @@ async function defaultHandler(error, event, opts) {
375
165
  if (/^\/[^/]/.test(baseURL) && !url.pathname.startsWith(baseURL)) return {
376
166
  status: 302,
377
167
  statusText: "Found",
378
- headers: { location: `${baseURL}${url.pathname.slice(1)}${url.search}` },
168
+ headers: new Headers({ location: `${baseURL}${url.pathname.slice(1)}${url.search}` }),
379
169
  body: `Redirecting...`
380
170
  };
381
171
  }
382
- await loadStackTrace(error).catch(consola$1.error);
172
+ await loadStackTrace(error).catch(consola.error);
173
+ const { Youch } = await import("youch");
383
174
  const youch = new Youch();
384
- if (isSensitive && !opts?.silent) {
385
- const tags = [error.unhandled && "[unhandled]"].filter(Boolean).join(" ");
386
- const ansiError = await (await youch.toANSI(error)).replaceAll(process.cwd(), ".");
387
- consola$1.error(`[request error] ${tags} [${event.req.method}] ${url}\n\n`, ansiError);
175
+ if (unhandled && !opts?.silent) {
176
+ const ansiError = (await youch.toANSI(error)).replaceAll(process.cwd(), ".");
177
+ consola.error(`[request error] [${event.req.method}] ${url}\n\n`, ansiError);
388
178
  }
389
- const useJSON = opts?.json || !event.req.headers.get("accept")?.includes("text/html");
390
- const headers = {
391
- "content-type": useJSON ? "application/json" : "text/html",
392
- "x-content-type-options": "nosniff",
393
- "x-frame-options": "DENY",
394
- "referrer-policy": "no-referrer",
395
- "content-security-policy": "script-src 'self' 'unsafe-inline'; object-src 'none'; base-uri 'self';"
396
- };
397
- if (status === 404 || !event.res.headers.has("cache-control")) headers["cache-control"] = "no-cache";
398
- const body = useJSON ? {
399
- error: true,
400
- url,
401
- status,
402
- statusText: error.statusText,
403
- message: error.message,
404
- data: error.data,
405
- stack: error.stack?.split("\n").map((line) => line.trim())
406
- } : await youch.toHTML(error, { request: {
407
- url: url.href,
408
- method: event.req.method,
409
- headers: Object.fromEntries(event.req.headers.entries())
410
- } });
179
+ const useJSON = opts?.json ?? !event.req.headers.get("accept")?.includes("text/html");
180
+ const headers = new Headers(unhandled ? {} : error.headers);
181
+ if (useJSON) {
182
+ headers.set("Content-Type", "application/json; charset=utf-8");
183
+ const jsonBody = typeof error.toJSON === "function" ? error.toJSON() : {
184
+ status,
185
+ statusText,
186
+ message: error.message
187
+ };
188
+ return {
189
+ status,
190
+ statusText,
191
+ headers,
192
+ body: {
193
+ error: true,
194
+ stack: error.stack?.split("\n").map((line) => line.trim()),
195
+ ...jsonBody
196
+ }
197
+ };
198
+ }
199
+ headers.set("Content-Type", "text/html; charset=utf-8");
411
200
  return {
412
201
  status,
413
- statusText: error.statusText,
202
+ statusText: unhandled ? "" : error.statusText,
414
203
  headers,
415
- body
204
+ body: await youch.toHTML(error, { request: {
205
+ url: url.href,
206
+ method: event.req.method,
207
+ headers: Object.fromEntries(event.req.headers.entries())
208
+ } })
416
209
  };
417
210
  }
418
211
  async function loadStackTrace(error) {
419
212
  if (!(error instanceof Error)) return;
213
+ const { ErrorParser } = await import("youch-core");
420
214
  const parsed = await new ErrorParser().defineSourceLoader(sourceLoader).parse(error);
421
215
  const stack = error.message + "\n" + parsed.frames.map((frame) => fmtFrame(frame)).join("\n");
422
216
  Object.defineProperty(error, "stack", { value: stack });
423
- if (error.cause) await loadStackTrace(error.cause).catch(consola$1.error);
217
+ if (error.cause) await loadStackTrace(error.cause).catch(consola.error);
424
218
  }
425
219
  async function sourceLoader(frame) {
426
220
  if (!frame.fileName || frame.fileType !== "fs" || frame.type === "native") return;
427
221
  if (frame.type === "app") {
428
222
  const rawSourceMap = await readFile(`${frame.fileName}.map`, "utf8").catch(() => {});
429
223
  if (rawSourceMap) {
224
+ const { SourceMapConsumer } = await import("source-map");
430
225
  const originalPosition = (await new SourceMapConsumer(rawSourceMap)).originalPositionFor({
431
226
  line: frame.lineNumber,
432
227
  column: frame.columnNumber
@@ -446,7 +241,6 @@ function fmtFrame(frame) {
446
241
  const src = `${frame.fileName || ""}:${frame.lineNumber}:${frame.columnNumber})`;
447
242
  return frame.functionName ? `at ${frame.functionName} (${src}` : `at ${src}`;
448
243
  }
449
-
450
244
  //#endregion
451
245
  //#region src/dev/app.ts
452
246
  var NitroDevApp = class {
@@ -461,9 +255,9 @@ var NitroDevApp = class {
461
255
  const app = new H3({
462
256
  debug: true,
463
257
  onError: async (error, event) => {
464
- const errorHandler = this.nitro.options.devErrorHandler || dev_default;
258
+ const errorHandler$1 = this.nitro.options.devErrorHandler || errorHandler;
465
259
  await loadStackTrace(error).catch(() => {});
466
- return errorHandler(error, event, { defaultHandler });
260
+ return errorHandler$1(error, event, { defaultHandler });
467
261
  }
468
262
  });
469
263
  for (const h of this.nitro.options.devHandlers) {
@@ -506,11 +300,11 @@ function serveStaticDir(event, opts) {
506
300
  return serveStatic(event, {
507
301
  fallthrough: opts.fallthrough,
508
302
  getMeta: async (id) => {
509
- const path$1 = r(id);
510
- if (!path$1) return;
511
- const s = await stat(path$1).catch(() => null);
303
+ const path = r(id);
304
+ if (!path) return;
305
+ const s = await stat$1(path).catch(() => null);
512
306
  if (!s?.isFile()) return;
513
- const ext = extname$1(path$1);
307
+ const ext = extname$1(path);
514
308
  return {
515
309
  size: s.size,
516
310
  mtime: s.mtime,
@@ -518,9 +312,9 @@ function serveStaticDir(event, opts) {
518
312
  };
519
313
  },
520
314
  getContents(id) {
521
- const path$1 = r(id);
522
- if (!path$1) return;
523
- const stream = createReadStream(path$1);
315
+ const path = r(id);
316
+ if (!path) return;
317
+ const stream = createReadStream(path);
524
318
  const acceptEncoding = event.req.headers.get("accept-encoding") || "";
525
319
  if (acceptEncoding.includes("br")) {
526
320
  event.res.headers.set("Content-Encoding", "br");
@@ -537,7 +331,29 @@ function serveStaticDir(event, opts) {
537
331
  }
538
332
  });
539
333
  }
540
-
334
+ function createHTTPProxy(defaults = {}) {
335
+ const proxy = createProxyServer({
336
+ xfwd: true,
337
+ ...defaults
338
+ });
339
+ return {
340
+ proxy,
341
+ async handleEvent(event, opts) {
342
+ try {
343
+ return await fromNodeHandler((req, res) => {
344
+ return proxy.web(req, res, opts);
345
+ })(event);
346
+ } catch (error) {
347
+ event.res.headers.set("refresh", "3");
348
+ throw new HTTPError({
349
+ status: 503,
350
+ message: "Dev server is unavailable.",
351
+ cause: error
352
+ });
353
+ }
354
+ }
355
+ };
356
+ }
541
357
  //#endregion
542
358
  //#region src/dev/server.ts
543
359
  function createDevServer(nitro) {
@@ -548,17 +364,21 @@ var NitroDevServer = class NitroDevServer extends NitroDevApp {
548
364
  #workerData = {};
549
365
  #listeners = [];
550
366
  #watcher;
551
- #workers = [];
367
+ #manager;
552
368
  #workerIdCtr = 0;
553
369
  #workerError;
370
+ #workerRetries = 0;
554
371
  #building = true;
555
372
  #buildError;
556
- #messageListeners = /* @__PURE__ */ new Set();
373
+ #reloadPromise;
557
374
  constructor(nitro) {
558
375
  super(nitro, async (event) => {
559
- const worker = await this.#getWorker();
560
- if (!worker) return this.#generateError();
561
- return worker.fetch(event.req);
376
+ if (this.#building) await this.#waitForBuild();
377
+ if (this.#reloadPromise) await this.#reloadPromise;
378
+ if (this.#buildError) return this.#generateError();
379
+ const response = await this.#manager.fetch(event.req);
380
+ if (response.status === 503 && !this.#manager.ready) return this.#generateError();
381
+ return response;
562
382
  });
563
383
  for (const key of Object.getOwnPropertyNames(NitroDevServer.prototype)) {
564
384
  const value = this[key];
@@ -566,6 +386,20 @@ var NitroDevServer = class NitroDevServer extends NitroDevApp {
566
386
  }
567
387
  nitro.fetch = this.fetch.bind(this);
568
388
  this.#entry = resolve$1(nitro.options.output.dir, nitro.options.output.serverDir, "index.mjs");
389
+ this.#manager = new RunnerManager();
390
+ this.#manager.onReady(async (_runner, addr) => {
391
+ this.#workerRetries = 0;
392
+ writeDevBuildInfo(this.nitro, addr).catch((error) => {
393
+ this.nitro.logger.warn(`Failed to write dev build info: ${error instanceof Error ? error.message : String(error)}`);
394
+ });
395
+ });
396
+ this.#manager.onClose((_runner, cause) => {
397
+ this.#workerError = cause;
398
+ if (this.#workerRetries++ < 3) {
399
+ this.nitro.logger.info("Restarting dev worker...", cause ? `Cause: ${cause}` : "");
400
+ this.reload();
401
+ } else this.nitro.logger.error("Dev worker failed after 3 retries.", cause ? `Last cause: ${cause}` : "");
402
+ });
569
403
  nitro.hooks.hook("close", () => this.close());
570
404
  nitro.hooks.hook("dev:start", () => {
571
405
  this.#building = true;
@@ -581,21 +415,24 @@ var NitroDevServer = class NitroDevServer extends NitroDevApp {
581
415
  nitro.hooks.hook("dev:error", (cause) => {
582
416
  this.#buildError = cause;
583
417
  this.#building = false;
584
- for (const worker of this.#workers) worker.close();
585
418
  });
586
- if (nitro.options.devServer.watch.length > 0) {
419
+ const devWatch = nitro.options.devServer.watch;
420
+ if (devWatch && devWatch.length > 0) {
587
421
  const debouncedReload = debounce(() => this.reload());
588
- this.#watcher = watch$1(nitro.options.devServer.watch, nitro.options.watchOptions);
422
+ this.#watcher = watch$1(devWatch, nitro.options.watchOptions);
589
423
  this.#watcher.on("add", debouncedReload).on("change", debouncedReload);
590
424
  }
591
425
  }
592
426
  async upgrade(req, socket, head) {
593
- const worker = await this.#getWorker();
594
- if (!worker) throw new HTTPError({
595
- status: 503,
596
- statusText: "No worker available."
427
+ if (!this.#manager.upgrade) throw new HTTPError({
428
+ status: 501,
429
+ statusText: "Worker does not support upgrades."
597
430
  });
598
- return worker.upgrade(req, socket, head);
431
+ return this.#manager.upgrade({ node: {
432
+ req,
433
+ socket,
434
+ head
435
+ } });
599
436
  }
600
437
  listen(opts) {
601
438
  const server = serve({
@@ -612,64 +449,42 @@ var NitroDevServer = class NitroDevServer extends NitroDevApp {
612
449
  Promise.all(this.#listeners.map((l) => l.close())).then(() => {
613
450
  this.#listeners = [];
614
451
  }),
615
- Promise.all(this.#workers.map((w) => w.close())).then(() => {
616
- this.#workers = [];
617
- }),
452
+ this.#manager.close(),
618
453
  Promise.resolve(this.#watcher?.close()).then(() => {
619
454
  this.#watcher = void 0;
620
455
  })
621
456
  ].map((p) => p.catch((error) => {
622
- consola$1.error(error);
457
+ consola.error(error);
623
458
  })));
624
459
  }
625
460
  reload() {
626
- for (const worker$1 of this.#workers) worker$1.close();
627
- const worker = new NodeDevWorker({
461
+ const nextReload = (this.#reloadPromise ?? Promise.resolve()).catch(() => {}).then(() => this.#reload());
462
+ this.#reloadPromise = nextReload.finally(() => {
463
+ if (this.#reloadPromise === nextReload) this.#reloadPromise = void 0;
464
+ });
465
+ }
466
+ async #reload() {
467
+ const runner = await loadRunner(this.nitro.options.devServer.runner || process.env.NITRO_DEV_RUNNER || "node-worker", {
628
468
  name: `Nitro_${this.#workerIdCtr++}`,
629
- entry: this.#entry,
630
469
  data: {
631
- ...this.#workerData,
632
- globals: {
633
- __NITRO_RUNTIME_CONFIG__: this.nitro.options.runtimeConfig,
634
- ...this.#workerData.globals
635
- }
636
- },
637
- hooks: {
638
- onClose: (worker$1, cause) => {
639
- this.#workerError = cause;
640
- const index = this.#workers.indexOf(worker$1);
641
- if (index !== -1) this.#workers.splice(index, 1);
642
- },
643
- onReady: async (_worker, addr) => {
644
- writeDevBuildInfo(this.nitro, addr).catch(() => {});
645
- }
470
+ entry: this.#entry,
471
+ ...this.#workerData
646
472
  }
647
473
  });
648
- if (!worker.closed) {
649
- for (const listener of this.#messageListeners) worker.onMessage(listener);
650
- this.#workers.unshift(worker);
651
- }
474
+ await this.#manager.reload(runner);
652
475
  }
653
476
  sendMessage(message) {
654
- for (const worker of this.#workers) if (!worker.closed) worker.sendMessage(message);
477
+ this.#manager.sendMessage(message);
655
478
  }
656
479
  onMessage(listener) {
657
- this.#messageListeners.add(listener);
658
- for (const worker of this.#workers) worker.onMessage(listener);
480
+ this.#manager.onMessage(listener);
659
481
  }
660
482
  offMessage(listener) {
661
- this.#messageListeners.delete(listener);
662
- for (const worker of this.#workers) worker.offMessage(listener);
483
+ this.#manager.offMessage(listener);
663
484
  }
664
- async #getWorker() {
665
- let retry = 0;
666
- const maxRetries = a || T ? 100 : 10;
667
- while (this.#building || ++retry < maxRetries) {
668
- if ((this.#workers.length === 0 || this.#buildError) && !this.#building) return;
669
- const activeWorker = this.#workers.find((w) => w.ready);
670
- if (activeWorker) return activeWorker;
671
- await new Promise((resolve$2) => setTimeout(resolve$2, 600));
672
- }
485
+ async #waitForBuild() {
486
+ const timeout = v || m ? 6e4 : 6e3;
487
+ await this.#manager.waitForReady(timeout);
673
488
  }
674
489
  #generateError() {
675
490
  const error = this.#buildError || this.#workerError;
@@ -700,6 +515,5 @@ var NitroDevServer = class NitroDevServer extends NitroDevApp {
700
515
  });
701
516
  }
702
517
  };
703
-
704
518
  //#endregion
705
- export { NodeDevWorker as i, createDevServer as n, NitroDevApp as r, NitroDevServer as t };
519
+ export { createDevServer as n, NitroDevApp as r, NitroDevServer as t };
@@ -0,0 +1,3 @@
1
+ import { a as loadDotenv } from "./c12+rc9.mjs";
2
+ import "../_build/common.mjs";
3
+ export { loadDotenv };
@@ -0,0 +1,2 @@
1
+ import { t as mergeAssets } from "./pluginutils.mjs";
2
+ export { mergeAssets };
@@ -0,0 +1,3 @@
1
+ import "../_build/common.mjs";
2
+ import { t as inject } from "./plugin-inject.mjs";
3
+ export { inject as default };
@@ -0,0 +1,2 @@
1
+ import { n as utils_exports, t as dist_exports } from "./c12+rc9.mjs";
2
+ export { dist_exports as n, utils_exports as t };
@@ -0,0 +1,3 @@
1
+ import "../_build/common.mjs";
2
+ import { n as addDevDependency } from "./nypm+tinyexec.mjs";
3
+ export { addDevDependency };
@@ -0,0 +1,4 @@
1
+ import "../_build/common.mjs";
2
+ import "./estree-walker.mjs";
3
+ import { a as detectImportsAcorn } from "./unimport+unplugin.mjs";
4
+ export { detectImportsAcorn };
@@ -0,0 +1,5 @@
1
+ import "../_build/common.mjs";
2
+ import { r as unplugin } from "./unimport+unplugin.mjs";
3
+ import "./resolve-uri+gen-mapping.mjs";
4
+ import "./remapping.mjs";
5
+ export { unplugin as default };