nitro 3.0.1-alpha.0 → 3.0.1-alpha.2

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 (316) hide show
  1. package/README.md +2 -0
  2. package/dist/_build/common.mjs +24940 -0
  3. package/dist/_build/rolldown.mjs +172 -0
  4. package/dist/_build/rollup.mjs +201 -0
  5. package/dist/_build/vite.build.mjs +16 -0
  6. package/dist/_chunks/dev.mjs +707 -0
  7. package/dist/_chunks/nitro.mjs +1191 -0
  8. package/dist/_chunks/nitro2.mjs +101 -0
  9. package/dist/_chunks/utils.mjs +254 -0
  10. package/dist/_common.mjs +45 -0
  11. package/dist/_dev.d.mts +12 -0
  12. package/dist/_libs/c12+giget+readdirp+chokidar.d.mts +214 -0
  13. package/dist/_libs/citty.mjs +363 -0
  14. package/dist/_libs/commondir+is-reference.mjs +1300 -0
  15. package/dist/_libs/compatx.d.mts +47 -0
  16. package/dist/_libs/compatx.mjs +46 -0
  17. package/dist/_libs/confbox.mjs +2509 -0
  18. package/dist/_libs/esbuild.d.mts +20 -0
  19. package/dist/_libs/escape-string-regexp.mjs +8 -0
  20. package/dist/_libs/estree-walker.mjs +187 -0
  21. package/dist/_libs/hasown+resolve+deepmerge.mjs +1972 -0
  22. package/dist/_libs/httpxy.d.mts +79 -0
  23. package/dist/_libs/httpxy.mjs +415 -0
  24. package/dist/_libs/klona.mjs +38 -0
  25. package/dist/_libs/magic-string.d.mts +220 -0
  26. package/dist/_libs/mlly.d.mts +57 -0
  27. package/dist/_libs/nypm+giget+tinyexec.mjs +3603 -0
  28. package/dist/_libs/pkg-types.d.mts +23 -0
  29. package/dist/_libs/plugin-alias.mjs +66 -0
  30. package/dist/_libs/plugin-inject.mjs +135 -0
  31. package/dist/_libs/plugin-json.mjs +36 -0
  32. package/dist/_libs/pluginutils+plugin-commonjs.d.mts +241 -0
  33. package/dist/_libs/pluginutils.mjs +652 -0
  34. package/dist/_libs/rc9+c12+dotenv.mjs +972 -0
  35. package/dist/_libs/readdirp+chokidar.mjs +1611 -0
  36. package/dist/_libs/remapping.mjs +117 -0
  37. package/dist/_libs/resolve-uri+gen-mapping.mjs +448 -0
  38. package/dist/_libs/rou3.d.mts +43 -0
  39. package/dist/_libs/rou3.mjs +322 -0
  40. package/dist/_libs/std-env.d.mts +4 -0
  41. package/dist/_libs/tsconfck.mjs +832 -0
  42. package/dist/_libs/ultrahtml.mjs +138 -0
  43. package/dist/_libs/unimport+unplugin.mjs +1785 -0
  44. package/dist/_libs/unplugin+unimport.d.mts +426 -0
  45. package/dist/_libs/unwasm.d.mts +29 -0
  46. package/dist/_presets.mjs +1802 -0
  47. package/dist/builder.d.mts +63 -0
  48. package/dist/builder.mjs +9 -0
  49. package/dist/cli/_chunks/build.mjs +48 -0
  50. package/dist/cli/_chunks/common.mjs +15 -0
  51. package/dist/cli/_chunks/dev.mjs +62 -0
  52. package/dist/cli/_chunks/list.mjs +27 -0
  53. package/dist/cli/_chunks/prepare.mjs +19 -0
  54. package/dist/cli/_chunks/run.mjs +55 -0
  55. package/dist/cli/_chunks/task.mjs +16 -0
  56. package/dist/cli/index.d.mts +1 -1
  57. package/dist/cli/index.mjs +20 -476
  58. package/dist/node_modules/@poppinss/colors/build/index.js +130 -160
  59. package/dist/node_modules/@poppinss/colors/package.json +20 -18
  60. package/dist/node_modules/@poppinss/dumper/build/formatters/html/main.js +1 -1
  61. package/dist/node_modules/@poppinss/dumper/package.json +1 -1
  62. package/dist/node_modules/@poppinss/exception/build/index.js +36 -55
  63. package/dist/node_modules/@poppinss/exception/package.json +19 -16
  64. package/dist/node_modules/@sindresorhus/is/distribution/index.js +47 -6
  65. package/dist/node_modules/@sindresorhus/is/package.json +1 -1
  66. package/dist/node_modules/@speed-highlight/core/dist/index.js +2 -2
  67. package/dist/node_modules/@speed-highlight/core/dist/terminal.js +2 -2
  68. package/dist/node_modules/@speed-highlight/core/package.json +8 -4
  69. package/dist/node_modules/cookie-es/dist/index.mjs +262 -0
  70. package/dist/node_modules/cookie-es/package.json +37 -0
  71. package/dist/node_modules/hookable/dist/index.mjs +244 -268
  72. package/dist/node_modules/hookable/package.json +29 -26
  73. package/dist/node_modules/rendu/dist/index.mjs +380 -0
  74. package/dist/node_modules/rendu/package.json +47 -0
  75. package/dist/node_modules/ufo/dist/index.mjs +16 -9
  76. package/dist/node_modules/ufo/package.json +15 -14
  77. package/dist/node_modules/unctx/package.json +16 -16
  78. package/dist/node_modules/youch/build/{chunk-4XB2BYKC.js → chunk-7QV3D5YX.js} +2 -4
  79. package/dist/node_modules/youch/build/{chunk-PUHGL6HA.js → chunk-AUGPHE32.js} +2 -4
  80. package/dist/node_modules/youch/build/{chunk-VE4LENUR.js → chunk-CM7DWJNZ.js} +4 -5
  81. package/dist/node_modules/youch/build/{chunk-JAN2TFI2.js → chunk-EJH674NB.js} +6 -5
  82. package/dist/node_modules/youch/build/{chunk-EUJBVOYB.js → chunk-OIJ3WD7L.js} +2 -4
  83. package/dist/node_modules/youch/build/{chunk-HFSXRSKS.js → chunk-P36L72PL.js} +5 -3
  84. package/dist/node_modules/youch/build/{chunk-4YEN7HVQ.js → chunk-PE3GG3TN.js} +5 -1
  85. package/dist/node_modules/youch/build/{chunk-PINJDICN.js → chunk-X53OIOJH.js} +2 -4
  86. package/dist/node_modules/youch/build/index.js +22 -15
  87. package/dist/node_modules/youch/build/public/error_info/style.css +1 -0
  88. package/dist/node_modules/youch/build/public/error_metadata/style.css +3 -0
  89. package/dist/node_modules/youch/build/public/error_stack/script.js +20 -22
  90. package/dist/node_modules/youch/build/public/error_stack/style.css +2 -3
  91. package/dist/node_modules/youch/build/public/header/script.js +0 -2
  92. package/dist/node_modules/youch/build/public/layout/script.js +0 -8
  93. package/dist/node_modules/youch/build/public/layout/style.css +4 -0
  94. package/dist/node_modules/youch/package.json +16 -17
  95. package/dist/presets/_nitro/runtime/nitro-dev.d.mts +2 -1
  96. package/dist/presets/_nitro/runtime/nitro-dev.mjs +47 -42
  97. package/dist/presets/_nitro/runtime/nitro-prerenderer.d.mts +3 -3
  98. package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +11 -15
  99. package/dist/presets/_nitro/runtime/service-worker.d.mts +2 -1
  100. package/dist/presets/_nitro/runtime/service-worker.mjs +17 -14
  101. package/dist/presets/aws-amplify/runtime/aws-amplify.d.mts +2 -1
  102. package/dist/presets/aws-amplify/runtime/aws-amplify.mjs +8 -7
  103. package/dist/presets/aws-lambda/runtime/_utils.d.mts +3 -13
  104. package/dist/presets/aws-lambda/runtime/_utils.mjs +95 -81
  105. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.d.mts +2 -3
  106. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.mjs +25 -29
  107. package/dist/presets/aws-lambda/runtime/aws-lambda.d.mts +1 -1
  108. package/dist/presets/aws-lambda/runtime/aws-lambda.mjs +9 -9
  109. package/dist/presets/azure/runtime/_utils.mjs +43 -43
  110. package/dist/presets/azure/runtime/azure-swa.d.mts +3 -3
  111. package/dist/presets/azure/runtime/azure-swa.mjs +25 -23
  112. package/dist/presets/bun/runtime/bun.d.mts +3 -1
  113. package/dist/presets/bun/runtime/bun.mjs +34 -22
  114. package/dist/presets/cloudflare/runtime/_module-handler.d.mts +12 -9
  115. package/dist/presets/cloudflare/runtime/_module-handler.mjs +84 -90
  116. package/dist/presets/cloudflare/runtime/cloudflare-durable.d.mts +7 -15
  117. package/dist/presets/cloudflare/runtime/cloudflare-durable.mjs +62 -64
  118. package/dist/presets/cloudflare/runtime/cloudflare-module.d.mts +2 -8
  119. package/dist/presets/cloudflare/runtime/cloudflare-module.mjs +15 -18
  120. package/dist/presets/cloudflare/runtime/cloudflare-pages.d.mts +13 -13
  121. package/dist/presets/cloudflare/runtime/cloudflare-pages.mjs +35 -43
  122. package/dist/presets/cloudflare/runtime/plugin.dev.d.mts +2 -2
  123. package/dist/presets/cloudflare/runtime/plugin.dev.mjs +89 -82
  124. package/dist/presets/cloudflare/runtime/shims/workers.dev.mjs +27 -0
  125. package/dist/presets/deno/runtime/deno-deploy.d.mts +5 -1
  126. package/dist/presets/deno/runtime/deno-deploy.mjs +15 -13
  127. package/dist/presets/deno/runtime/deno-server.d.mts +1 -4
  128. package/dist/presets/deno/runtime/deno-server.mjs +32 -53
  129. package/dist/presets/netlify/runtime/netlify-edge.d.mts +2 -2
  130. package/dist/presets/netlify/runtime/netlify-edge.mjs +18 -14
  131. package/dist/presets/netlify/runtime/netlify.d.mts +3 -2
  132. package/dist/presets/netlify/runtime/netlify.mjs +15 -19
  133. package/dist/presets/node/runtime/node-cluster.d.mts +3 -1
  134. package/dist/presets/node/runtime/node-cluster.mjs +49 -54
  135. package/dist/presets/node/runtime/node-middleware.d.mts +3 -4
  136. package/dist/presets/node/runtime/node-middleware.mjs +9 -9
  137. package/dist/presets/node/runtime/node-server.d.mts +1 -1
  138. package/dist/presets/node/runtime/node-server.mjs +36 -34
  139. package/dist/presets/standard/runtime/server.d.mts +2 -4
  140. package/dist/presets/standard/runtime/server.mjs +3 -5
  141. package/dist/presets/stormkit/runtime/stormkit.d.mts +14 -14
  142. package/dist/presets/stormkit/runtime/stormkit.mjs +22 -22
  143. package/dist/presets/vercel/runtime/isr.d.mts +2 -0
  144. package/dist/presets/vercel/runtime/isr.mjs +19 -0
  145. package/dist/presets/vercel/runtime/vercel.node.d.mts +3 -0
  146. package/dist/presets/vercel/runtime/vercel.node.mjs +24 -0
  147. package/dist/presets/vercel/runtime/vercel.web.d.mts +8 -0
  148. package/dist/presets/vercel/runtime/vercel.web.mjs +25 -0
  149. package/dist/presets/winterjs/runtime/winterjs.d.mts +2 -1
  150. package/dist/presets/winterjs/runtime/winterjs.mjs +74 -70
  151. package/dist/presets/zeabur/runtime/zeabur.d.mts +2 -2
  152. package/dist/presets/zeabur/runtime/zeabur.mjs +2 -2
  153. package/dist/runtime/app.d.mts +1 -0
  154. package/dist/runtime/app.mjs +1 -0
  155. package/dist/runtime/cache.d.mts +1 -0
  156. package/dist/runtime/cache.mjs +1 -0
  157. package/dist/runtime/config.d.mts +3 -0
  158. package/dist/runtime/config.mjs +4 -0
  159. package/dist/runtime/context.d.mts +1 -0
  160. package/dist/runtime/context.mjs +1 -0
  161. package/dist/runtime/database.d.mts +1 -0
  162. package/dist/runtime/database.mjs +1 -0
  163. package/dist/runtime/internal/app.d.mts +15 -1
  164. package/dist/runtime/internal/app.mjs +199 -144
  165. package/dist/runtime/internal/cache.d.mts +9 -5
  166. package/dist/runtime/internal/cache.mjs +248 -219
  167. package/dist/runtime/internal/context.d.mts +9 -9
  168. package/dist/runtime/internal/context.mjs +17 -10
  169. package/dist/runtime/internal/database.mjs +9 -11
  170. package/dist/runtime/internal/error/dev.d.mts +4 -4
  171. package/dist/runtime/internal/error/dev.mjs +106 -105
  172. package/dist/runtime/internal/error/hooks.d.mts +1 -0
  173. package/dist/runtime/internal/error/hooks.mjs +9 -0
  174. package/dist/runtime/internal/error/prod.d.mts +5 -4
  175. package/dist/runtime/internal/error/prod.mjs +51 -59
  176. package/dist/runtime/internal/error/utils.d.mts +4 -4
  177. package/dist/runtime/internal/error/utils.mjs +1 -1
  178. package/dist/runtime/internal/meta.d.mts +1 -1
  179. package/dist/runtime/internal/meta.mjs +1 -1
  180. package/dist/runtime/internal/plugin.d.mts +2 -2
  181. package/dist/runtime/internal/plugin.mjs +1 -1
  182. package/dist/runtime/internal/route-rules.d.mts +4 -8
  183. package/dist/runtime/internal/route-rules.mjs +54 -52
  184. package/dist/runtime/internal/routes/dev-tasks.d.mts +1 -2
  185. package/dist/runtime/internal/routes/dev-tasks.mjs +17 -19
  186. package/dist/runtime/internal/routes/openapi.mjs +82 -88
  187. package/dist/runtime/internal/routes/renderer-template.d.mts +1 -1
  188. package/dist/runtime/internal/routes/renderer-template.dev.d.mts +1 -2
  189. package/dist/runtime/internal/routes/renderer-template.dev.mjs +15 -17
  190. package/dist/runtime/internal/routes/renderer-template.mjs +2 -2
  191. package/dist/runtime/internal/routes/scalar.mjs +22 -23
  192. package/dist/runtime/internal/routes/swagger.mjs +9 -11
  193. package/dist/runtime/internal/runtime-config.d.mts +4 -4
  194. package/dist/runtime/internal/runtime-config.mjs +44 -39
  195. package/dist/runtime/internal/static.mjs +63 -74
  196. package/dist/runtime/internal/storage.mjs +3 -3
  197. package/dist/runtime/internal/task.d.mts +6 -6
  198. package/dist/runtime/internal/task.mjs +57 -61
  199. package/dist/runtime/internal/vite/dev-entry.mjs +11 -2
  200. package/dist/runtime/internal/vite/{dev-worker.mjs → node-runner.mjs} +54 -57
  201. package/dist/runtime/internal/vite/ssr-renderer.mjs +3 -1
  202. package/{lib/runtime-meta.d.mts → dist/runtime/meta.d.mts} +2 -2
  203. package/dist/runtime/meta.mjs +26 -0
  204. package/dist/runtime/nitro.d.mts +9 -0
  205. package/dist/runtime/nitro.mjs +32 -0
  206. package/dist/runtime/runtime-config.d.mts +1 -0
  207. package/dist/runtime/runtime-config.mjs +1 -0
  208. package/dist/runtime/storage.d.mts +1 -0
  209. package/dist/runtime/storage.mjs +1 -0
  210. package/dist/runtime/task.d.mts +1 -0
  211. package/dist/runtime/task.mjs +1 -0
  212. package/dist/runtime/virtual/_runtime_warn.mjs +5 -0
  213. package/dist/runtime/virtual/database.d.mts +8 -0
  214. package/dist/runtime/virtual/database.mjs +2 -0
  215. package/dist/runtime/virtual/error-handler.d.mts +6 -0
  216. package/dist/runtime/virtual/error-handler.mjs +9 -0
  217. package/dist/runtime/virtual/feature-flags.d.mts +7 -0
  218. package/dist/runtime/virtual/feature-flags.mjs +7 -0
  219. package/dist/runtime/virtual/plugins.d.mts +3 -0
  220. package/dist/runtime/virtual/plugins.mjs +2 -0
  221. package/dist/runtime/virtual/polyfills.d.mts +3 -0
  222. package/dist/runtime/virtual/polyfills.mjs +2 -0
  223. package/dist/runtime/virtual/public-assets.d.mts +9 -0
  224. package/dist/runtime/virtual/public-assets.mjs +8 -0
  225. package/dist/runtime/virtual/renderer-template.d.mts +4 -0
  226. package/dist/runtime/virtual/renderer-template.mjs +7 -0
  227. package/dist/runtime/virtual/routing-meta.d.mts +7 -0
  228. package/dist/runtime/virtual/routing-meta.mjs +2 -0
  229. package/dist/runtime/virtual/routing.d.mts +8 -0
  230. package/dist/runtime/virtual/routing.mjs +11 -0
  231. package/dist/runtime/virtual/runtime-config.d.mts +3 -0
  232. package/dist/runtime/virtual/runtime-config.mjs +5 -0
  233. package/dist/runtime/virtual/server-assets.d.mts +6 -0
  234. package/dist/runtime/virtual/server-assets.mjs +12 -0
  235. package/dist/runtime/virtual/storage.d.mts +3 -0
  236. package/dist/runtime/virtual/storage.mjs +5 -0
  237. package/dist/runtime/virtual/tasks.d.mts +10 -0
  238. package/dist/runtime/virtual/tasks.mjs +3 -0
  239. package/dist/runtime/vite.d.mts +8 -0
  240. package/dist/runtime/vite.mjs +9 -0
  241. package/dist/types/index.d.mts +2561 -2312
  242. package/dist/types/index.mjs +10 -0
  243. package/dist/vite.d.mts +44 -51
  244. package/dist/vite.mjs +737 -68
  245. package/lib/tsconfig.json +27 -0
  246. package/lib/vite.types.d.mts +26 -0
  247. package/lib/vite.types.mjs +2 -0
  248. package/package.json +118 -101
  249. package/dist/_chunks/app.mjs +0 -19797
  250. package/dist/_chunks/build.mjs +0 -84
  251. package/dist/_chunks/build2.mjs +0 -318
  252. package/dist/_chunks/build3.mjs +0 -6452
  253. package/dist/_chunks/detect-acorn.mjs +0 -503
  254. package/dist/_chunks/index.mjs +0 -22242
  255. package/dist/_chunks/index2.mjs +0 -297
  256. package/dist/_chunks/index3.mjs +0 -1058
  257. package/dist/_chunks/index4.mjs +0 -1206
  258. package/dist/_chunks/info.mjs +0 -11157
  259. package/dist/_chunks/json5.mjs +0 -68
  260. package/dist/_chunks/jsonc.mjs +0 -51
  261. package/dist/_chunks/pathe.M-eThtNZ.mjs +0 -204
  262. package/dist/_chunks/plugin.mjs +0 -960
  263. package/dist/_chunks/server.mjs +0 -254
  264. package/dist/_chunks/snapshot.mjs +0 -284
  265. package/dist/_chunks/toml.mjs +0 -259
  266. package/dist/_chunks/yaml.mjs +0 -86
  267. package/dist/cli/build.mjs +0 -54
  268. package/dist/cli/common.mjs +0 -13
  269. package/dist/cli/dev.mjs +0 -95
  270. package/dist/cli/index2.mjs +0 -17
  271. package/dist/cli/list.mjs +0 -34
  272. package/dist/cli/prepare.mjs +0 -24
  273. package/dist/cli/run.mjs +0 -60
  274. package/dist/index.d.mts +0 -52
  275. package/dist/index.mjs +0 -55
  276. package/dist/node_modules/cookie/dist/index.js +0 -239
  277. package/dist/node_modules/cookie/package.json +0 -42
  278. package/dist/node_modules/kleur/index.js +0 -110
  279. package/dist/node_modules/klona/dist/index.mjs +0 -81
  280. package/dist/node_modules/klona/full/index.mjs +0 -53
  281. package/dist/node_modules/klona/package.json +0 -74
  282. package/dist/node_modules/std-env/dist/index.mjs +0 -1
  283. package/dist/node_modules/std-env/package.json +0 -46
  284. package/dist/node_modules/youch/build/chunk-OSUFJZHZ.js +0 -6
  285. package/dist/presets/vercel/runtime/vercel.d.mts +0 -8
  286. package/dist/presets/vercel/runtime/vercel.mjs +0 -17
  287. package/dist/presets.mjs +0 -2460
  288. package/dist/runtime/index.d.mts +0 -11
  289. package/dist/runtime/index.mjs +0 -17
  290. package/dist/runtime/internal/debug.d.mts +0 -2
  291. package/dist/runtime/internal/debug.mjs +0 -5
  292. package/dist/runtime/internal/empty.d.mts +0 -0
  293. package/dist/runtime/internal/index.d.mts +0 -3
  294. package/dist/runtime/internal/index.mjs +0 -3
  295. package/dist/runtime/internal/lib/http-graceful-shutdown.d.mts +0 -16
  296. package/dist/runtime/internal/lib/http-graceful-shutdown.mjs +0 -213
  297. package/dist/runtime/internal/renderer.d.mts +0 -3
  298. package/dist/runtime/internal/renderer.mjs +0 -36
  299. package/dist/runtime/internal/shutdown.d.mts +0 -9
  300. package/dist/runtime/internal/shutdown.mjs +0 -34
  301. package/dist/runtime/internal/utils.d.mts +0 -1
  302. package/dist/runtime/internal/utils.mjs +0 -15
  303. package/dist/runtime/internal/vite/dev-entry.d.mts +0 -1
  304. package/dist/runtime/internal/vite/prod-setup.d.mts +0 -4
  305. package/dist/runtime/internal/vite/prod-setup.mjs +0 -55
  306. package/dist/runtime/internal/vite/ssr-renderer.d.mts +0 -4
  307. package/lib/config.d.mts +0 -9
  308. package/lib/config.mjs +0 -5
  309. package/lib/deps/ofetch.mjs +0 -1
  310. package/lib/deps/ofetch.mts +0 -1
  311. package/lib/meta.d.mts +0 -5
  312. package/lib/meta.mjs +0 -21
  313. package/lib/runtime-meta.mjs +0 -38
  314. /package/dist/runtime/{internal/vite/dev-worker.d.mts → virtual/_runtime_warn.d.mts} +0 -0
  315. /package/lib/{deps/h3.d.mts → h3.d.mts} +0 -0
  316. /package/lib/{deps/h3.mjs → h3.mjs} +0 -0
@@ -7,116 +7,117 @@ import { Youch } from "youch";
7
7
  import { SourceMapConsumer } from "source-map";
8
8
  import { defineNitroErrorHandler } from "./utils.mjs";
9
9
  import { FastResponse } from "srvx";
10
- export default defineNitroErrorHandler(
11
- async function defaultNitroErrorHandler(error, event) {
12
- const res = await defaultHandler(error, event);
13
- return new FastResponse(
14
- typeof res.body === "string" ? res.body : JSON.stringify(res.body, null, 2),
15
- res
16
- );
17
- }
18
- );
10
+ export default defineNitroErrorHandler(async function defaultNitroErrorHandler(error, event) {
11
+ const res = await defaultHandler(error, event);
12
+ return new FastResponse(typeof res.body === "string" ? res.body : JSON.stringify(res.body, null, 2), res);
13
+ });
19
14
  export async function defaultHandler(error, event, opts) {
20
- const isSensitive = error.unhandled;
21
- const status = error.status || 500;
22
- const url = getRequestURL(event, { xForwardedHost: true, xForwardedProto: true });
23
- if (status === 404) {
24
- const baseURL = import.meta.baseURL || "/";
25
- if (/^\/[^/]/.test(baseURL) && !url.pathname.startsWith(baseURL)) {
26
- const redirectTo = `${baseURL}${url.pathname.slice(1)}${url.search}`;
27
- return {
28
- status: 302,
29
- statusText: "Found",
30
- headers: { location: redirectTo },
31
- body: `Redirecting...`
32
- };
33
- }
34
- }
35
- await loadStackTrace(error).catch(consola.error);
36
- const youch = new Youch();
37
- if (isSensitive && !opts?.silent) {
38
- const tags = [error.unhandled && "[unhandled]"].filter(Boolean).join(" ");
39
- const ansiError = await (await youch.toANSI(error)).replaceAll(process.cwd(), ".");
40
- consola.error(
41
- `[request error] ${tags} [${event.req.method}] ${url}
42
-
43
- `,
44
- ansiError
45
- );
46
- }
47
- const useJSON = opts?.json || !event.req.headers.get("accept")?.includes("text/html");
48
- const headers = {
49
- "content-type": useJSON ? "application/json" : "text/html",
50
- // Prevent browser from guessing the MIME types of resources.
51
- "x-content-type-options": "nosniff",
52
- // Prevent error page from being embedded in an iframe
53
- "x-frame-options": "DENY",
54
- // Prevent browsers from sending the Referer header
55
- "referrer-policy": "no-referrer",
56
- // Disable the execution of any js
57
- "content-security-policy": "script-src 'self' 'unsafe-inline'; object-src 'none'; base-uri 'self';"
58
- };
59
- if (status === 404 || !event.res.headers.has("cache-control")) {
60
- headers["cache-control"] = "no-cache";
61
- }
62
- const body = useJSON ? {
63
- error: true,
64
- url,
65
- status,
66
- statusText: error.statusText,
67
- message: error.message,
68
- data: error.data,
69
- stack: error.stack?.split("\n").map((line) => line.trim())
70
- } : await youch.toHTML(error, {
71
- request: {
72
- url: url.href,
73
- method: event.req.method,
74
- headers: Object.fromEntries(event.req.headers.entries())
75
- }
76
- });
77
- return {
78
- status,
79
- statusText: error.statusText,
80
- headers,
81
- body
82
- };
15
+ const isSensitive = error.unhandled;
16
+ const status = error.status || 500;
17
+ // prettier-ignore
18
+ const url = getRequestURL(event, {
19
+ xForwardedHost: true,
20
+ xForwardedProto: true
21
+ });
22
+ // Redirects with base URL
23
+ if (status === 404) {
24
+ const baseURL = import.meta.baseURL || "/";
25
+ if (/^\/[^/]/.test(baseURL) && !url.pathname.startsWith(baseURL)) {
26
+ const redirectTo = `${baseURL}${url.pathname.slice(1)}${url.search}`;
27
+ return {
28
+ status: 302,
29
+ statusText: "Found",
30
+ headers: { location: redirectTo },
31
+ body: `Redirecting...`
32
+ };
33
+ }
34
+ }
35
+ // Load stack trace with source maps
36
+ await loadStackTrace(error).catch(consola.error);
37
+ // https://github.com/poppinss/youch
38
+ const youch = new Youch();
39
+ // Console output
40
+ if (isSensitive && !opts?.silent) {
41
+ // prettier-ignore
42
+ const tags = [error.unhandled && "[unhandled]"].filter(Boolean).join(" ");
43
+ const ansiError = await (await youch.toANSI(error)).replaceAll(process.cwd(), ".");
44
+ consola.error(`[request error] ${tags} [${event.req.method}] ${url}\n\n`, ansiError);
45
+ }
46
+ // Use HTML response only when user-agent expects it (browsers)
47
+ const useJSON = opts?.json ?? !event.req.headers.get("accept")?.includes("text/html");
48
+ // Prepare headers
49
+ const headers = {
50
+ "content-type": useJSON ? "application/json" : "text/html",
51
+ "x-content-type-options": "nosniff",
52
+ "x-frame-options": "DENY",
53
+ "referrer-policy": "no-referrer",
54
+ "content-security-policy": "script-src 'self' 'unsafe-inline'; object-src 'none'; base-uri 'self';"
55
+ };
56
+ if (status === 404 || !event.res.headers.has("cache-control")) {
57
+ headers["cache-control"] = "no-cache";
58
+ }
59
+ // Prepare body
60
+ const body = useJSON ? {
61
+ error: true,
62
+ url,
63
+ status,
64
+ statusText: error.statusText,
65
+ message: error.message,
66
+ data: error.data,
67
+ stack: error.stack?.split("\n").map((line) => line.trim())
68
+ } : await youch.toHTML(error, { request: {
69
+ url: url.href,
70
+ method: event.req.method,
71
+ headers: Object.fromEntries(event.req.headers.entries())
72
+ } });
73
+ return {
74
+ status,
75
+ statusText: error.statusText,
76
+ headers,
77
+ body
78
+ };
83
79
  }
80
+ // ---- Source Map support ----
84
81
  export async function loadStackTrace(error) {
85
- if (!(error instanceof Error)) {
86
- return;
87
- }
88
- const parsed = await new ErrorParser().defineSourceLoader(sourceLoader).parse(error);
89
- const stack = error.message + "\n" + parsed.frames.map((frame) => fmtFrame(frame)).join("\n");
90
- Object.defineProperty(error, "stack", { value: stack });
91
- if (error.cause) {
92
- await loadStackTrace(error.cause).catch(consola.error);
93
- }
82
+ if (!(error instanceof Error)) {
83
+ return;
84
+ }
85
+ const parsed = await new ErrorParser().defineSourceLoader(sourceLoader).parse(error);
86
+ const stack = error.message + "\n" + parsed.frames.map((frame) => fmtFrame(frame)).join("\n");
87
+ Object.defineProperty(error, "stack", { value: stack });
88
+ if (error.cause) {
89
+ await loadStackTrace(error.cause).catch(consola.error);
90
+ }
94
91
  }
95
92
  async function sourceLoader(frame) {
96
- if (!frame.fileName || frame.fileType !== "fs" || frame.type === "native") {
97
- return;
98
- }
99
- if (frame.type === "app") {
100
- const rawSourceMap = await readFile(`${frame.fileName}.map`, "utf8").catch(() => {
101
- });
102
- if (rawSourceMap) {
103
- const consumer = await new SourceMapConsumer(rawSourceMap);
104
- const originalPosition = consumer.originalPositionFor({ line: frame.lineNumber, column: frame.columnNumber });
105
- if (originalPosition.source && originalPosition.line) {
106
- frame.fileName = resolve(dirname(frame.fileName), originalPosition.source);
107
- frame.lineNumber = originalPosition.line;
108
- frame.columnNumber = originalPosition.column || 0;
109
- }
110
- }
111
- }
112
- const contents = await readFile(frame.fileName, "utf8").catch(() => {
113
- });
114
- return contents ? { contents } : void 0;
93
+ if (!frame.fileName || frame.fileType !== "fs" || frame.type === "native") {
94
+ return;
95
+ }
96
+ if (frame.type === "app") {
97
+ // prettier-ignore
98
+ const rawSourceMap = await readFile(`${frame.fileName}.map`, "utf8").catch(() => {});
99
+ if (rawSourceMap) {
100
+ const consumer = await new SourceMapConsumer(rawSourceMap);
101
+ // prettier-ignore
102
+ const originalPosition = consumer.originalPositionFor({
103
+ line: frame.lineNumber,
104
+ column: frame.columnNumber
105
+ });
106
+ if (originalPosition.source && originalPosition.line) {
107
+ // prettier-ignore
108
+ frame.fileName = resolve(dirname(frame.fileName), originalPosition.source);
109
+ frame.lineNumber = originalPosition.line;
110
+ frame.columnNumber = originalPosition.column || 0;
111
+ }
112
+ }
113
+ }
114
+ const contents = await readFile(frame.fileName, "utf8").catch(() => {});
115
+ return contents ? { contents } : undefined;
115
116
  }
116
117
  function fmtFrame(frame) {
117
- if (frame.type === "native") {
118
- return frame.raw;
119
- }
120
- const src = `${frame.fileName || ""}:${frame.lineNumber}:${frame.columnNumber})`;
121
- return frame.functionName ? `at ${frame.functionName} (${src}` : `at ${src}`;
118
+ if (frame.type === "native") {
119
+ return frame.raw;
120
+ }
121
+ const src = `${frame.fileName || ""}:${frame.lineNumber}:${frame.columnNumber})`;
122
+ return frame.functionName ? `at ${frame.functionName} (${src}` : `at ${src}`;
122
123
  }
@@ -0,0 +1 @@
1
+ export declare function trapUnhandledErrors();
@@ -0,0 +1,9 @@
1
+ import { useNitroApp } from "../app.mjs";
2
+ function _captureError(error, type) {
3
+ console.error(`[${type}]`, error);
4
+ useNitroApp().captureError?.(error, { tags: [type] });
5
+ }
6
+ export function trapUnhandledErrors() {
7
+ process.on("unhandledRejection", (error) => _captureError(error, "unhandledRejection"));
8
+ process.on("uncaughtException", (error) => _captureError(error, "uncaughtException"));
9
+ }
@@ -1,8 +1,9 @@
1
1
  import type { HTTPError, HTTPEvent } from "h3";
2
2
  import type { InternalHandlerResponse } from "./utils.mjs";
3
- declare const _default: NitroErrorHandler;
4
- export default _default;
3
+ import type { NitroErrorHandler } from "nitro/types";
4
+ declare const errorHandler: NitroErrorHandler;
5
+ export default errorHandler;
5
6
  export declare function defaultHandler(error: HTTPError, event: HTTPEvent, opts?: {
6
- silent?: boolean;
7
- json?: boolean;
7
+ silent?: boolean;
8
+ json?: boolean;
8
9
  }): InternalHandlerResponse;
@@ -1,62 +1,54 @@
1
- import { getRequestURL } from "h3";
2
- import { defineNitroErrorHandler } from "./utils.mjs";
3
1
  import { FastResponse } from "srvx";
4
- export default defineNitroErrorHandler(
5
- function defaultNitroErrorHandler(error, event) {
6
- const res = defaultHandler(error, event);
7
- return new FastResponse(JSON.stringify(res.body, null, 2), res);
8
- }
9
- );
2
+ const errorHandler = (error, event) => {
3
+ const res = defaultHandler(error, event);
4
+ return new FastResponse(typeof res.body === "string" ? res.body : JSON.stringify(res.body, null, 2), res);
5
+ };
6
+ export default errorHandler;
10
7
  export function defaultHandler(error, event, opts) {
11
- const isSensitive = error.unhandled;
12
- const status = error.status || 500;
13
- const url = getRequestURL(event, { xForwardedHost: true, xForwardedProto: true });
14
- if (status === 404) {
15
- const baseURL = import.meta.baseURL || "/";
16
- if (/^\/[^/]/.test(baseURL) && !url.pathname.startsWith(baseURL)) {
17
- const redirectTo = `${baseURL}${url.pathname.slice(1)}${url.search}`;
18
- return {
19
- status: 302,
20
- statusText: "Found",
21
- headers: { location: redirectTo },
22
- body: `Redirecting...`
23
- };
24
- }
25
- }
26
- if (isSensitive && !opts?.silent) {
27
- const tags = [error.unhandled && "[unhandled]"].filter(Boolean).join(" ");
28
- console.error(
29
- `[request error] ${tags} [${event.req.method}] ${url}
30
- `,
31
- error
32
- );
33
- }
34
- const headers = {
35
- "content-type": "application/json",
36
- // Prevent browser from guessing the MIME types of resources.
37
- "x-content-type-options": "nosniff",
38
- // Prevent error page from being embedded in an iframe
39
- "x-frame-options": "DENY",
40
- // Prevent browsers from sending the Referer header
41
- "referrer-policy": "no-referrer",
42
- // Disable the execution of any js
43
- "content-security-policy": "script-src 'none'; frame-ancestors 'none';"
44
- };
45
- if (status === 404 || !event.res.headers.has("cache-control")) {
46
- headers["cache-control"] = "no-cache";
47
- }
48
- const body = {
49
- error: true,
50
- url: url.href,
51
- status,
52
- statusText: error.statusText,
53
- message: isSensitive ? "Server Error" : error.message,
54
- data: isSensitive ? void 0 : error.data
55
- };
56
- return {
57
- status,
58
- statusText: error.statusText,
59
- headers,
60
- body
61
- };
8
+ const isSensitive = error.unhandled;
9
+ const status = error.status || 500;
10
+ const url = event.url || new URL(event.req.url);
11
+ if (status === 404) {
12
+ const baseURL = import.meta.baseURL || "/";
13
+ if (/^\/[^/]/.test(baseURL) && !url.pathname.startsWith(baseURL)) {
14
+ const redirectTo = `${baseURL}${url.pathname.slice(1)}${url.search}`;
15
+ return {
16
+ status: 302,
17
+ statusText: "Found",
18
+ headers: { location: redirectTo },
19
+ body: `Redirecting...`
20
+ };
21
+ }
22
+ }
23
+ // Console output
24
+ if (isSensitive && !opts?.silent) {
25
+ // prettier-ignore
26
+ const tags = [error.unhandled && "[unhandled]"].filter(Boolean).join(" ");
27
+ console.error(`[request error] ${tags} [${event.req.method}] ${url}\n`, error);
28
+ }
29
+ // Send response
30
+ const headers = {
31
+ "content-type": "application/json",
32
+ "x-content-type-options": "nosniff",
33
+ "x-frame-options": "DENY",
34
+ "referrer-policy": "no-referrer",
35
+ "content-security-policy": "script-src 'none'; frame-ancestors 'none';"
36
+ };
37
+ if (status === 404 || !event.res.headers.has("cache-control")) {
38
+ headers["cache-control"] = "no-cache";
39
+ }
40
+ const body = {
41
+ error: true,
42
+ url: url.href,
43
+ status,
44
+ statusText: error.statusText,
45
+ message: isSensitive ? "Server Error" : error.message,
46
+ data: isSensitive ? undefined : error.data
47
+ };
48
+ return {
49
+ status,
50
+ statusText: error.statusText,
51
+ headers,
52
+ body
53
+ };
62
54
  }
@@ -1,8 +1,8 @@
1
1
  import type { NitroErrorHandler } from "nitro/types";
2
2
  export declare function defineNitroErrorHandler(handler: NitroErrorHandler): NitroErrorHandler;
3
3
  export type InternalHandlerResponse = {
4
- status: number;
5
- statusText: string | undefined;
6
- headers: Record<string, string>;
7
- body: string | Record<string, any>;
4
+ status: number;
5
+ statusText: string | undefined;
6
+ headers: Record<string, string>;
7
+ body: string | Record<string, any>;
8
8
  };
@@ -1,3 +1,3 @@
1
1
  export function defineNitroErrorHandler(handler) {
2
- return handler;
2
+ return handler;
3
3
  }
@@ -1,2 +1,2 @@
1
1
  import type { NitroRouteMeta } from "nitro/types";
2
- export declare function defineRouteMeta(meta: NitroRouteMeta): NitroRouteMeta;
2
+ export declare function defineRouteMeta(meta: NitroRouteMeta);
@@ -1,3 +1,3 @@
1
1
  export function defineRouteMeta(meta) {
2
- return meta;
2
+ return meta;
3
3
  }
@@ -1,3 +1,3 @@
1
1
  import type { NitroAppPlugin } from "nitro/types";
2
- export declare function defineNitroPlugin(def: NitroAppPlugin): NitroAppPlugin;
3
- export declare const nitroPlugin: typeof defineNitroPlugin;
2
+ export declare function defineNitroPlugin(def: NitroAppPlugin);
3
+ export declare const nitroPlugin: unknown;
@@ -1,4 +1,4 @@
1
1
  export function defineNitroPlugin(def) {
2
- return def;
2
+ return def;
3
3
  }
4
4
  export const nitroPlugin = defineNitroPlugin;
@@ -1,8 +1,4 @@
1
- import type { Middleware } from "h3";
2
- import type { MatchedRouteRule, NitroRouteRules } from "nitro/types";
3
- type RouteRuleCtor<T extends keyof NitroRouteRules> = (m: MatchedRouteRule<T>) => Middleware;
4
- export declare const headers: RouteRuleCtor<"headers">;
5
- export declare const redirect: RouteRuleCtor<"redirect">;
6
- export declare const proxy: RouteRuleCtor<"proxy">;
7
- export declare const cache: RouteRuleCtor<"cache">;
8
- export {};
1
+ export declare const headers: unknown;
2
+ export declare const redirect: unknown;
3
+ export declare const proxy: unknown;
4
+ export declare const cache: unknown;
@@ -1,62 +1,64 @@
1
1
  import { proxyRequest, redirect as sendRedirect } from "h3";
2
2
  import { joinURL, withQuery, withoutBase } from "ufo";
3
- import { defineCachedEventHandler } from "./cache.mjs";
3
+ import { defineCachedHandler } from "./cache.mjs";
4
+ // Headers route rule
4
5
  export const headers = ((m) => function headersRouteRule(event) {
5
- for (const [key, value] of Object.entries(m.options || {})) {
6
- event.res.headers.set(key, value);
7
- }
6
+ for (const [key, value] of Object.entries(m.options || {})) {
7
+ event.res.headers.set(key, value);
8
+ }
8
9
  });
10
+ // Redirect route rule
9
11
  export const redirect = ((m) => function redirectRouteRule(event) {
10
- let target = m.options?.to;
11
- if (!target) {
12
- return;
13
- }
14
- if (target.endsWith("/**")) {
15
- let targetPath = event.url.pathname + event.url.search;
16
- const strpBase = m.options._redirectStripBase;
17
- if (strpBase) {
18
- targetPath = withoutBase(targetPath, strpBase);
19
- }
20
- target = joinURL(target.slice(0, -3), targetPath);
21
- } else if (event.url.search) {
22
- target = withQuery(target, Object.fromEntries(event.url.searchParams));
23
- }
24
- return sendRedirect(target, m.options?.status);
12
+ let target = m.options?.to;
13
+ if (!target) {
14
+ return;
15
+ }
16
+ if (target.endsWith("/**")) {
17
+ let targetPath = event.url.pathname + event.url.search;
18
+ const strpBase = m.options._redirectStripBase;
19
+ if (strpBase) {
20
+ targetPath = withoutBase(targetPath, strpBase);
21
+ }
22
+ target = joinURL(target.slice(0, -3), targetPath);
23
+ } else if (event.url.search) {
24
+ target = withQuery(target, Object.fromEntries(event.url.searchParams));
25
+ }
26
+ return sendRedirect(target, m.options?.status);
25
27
  });
28
+ // Proxy route rule
26
29
  export const proxy = ((m) => function proxyRouteRule(event) {
27
- let target = m.options?.to;
28
- if (!target) {
29
- return;
30
- }
31
- if (target.endsWith("/**")) {
32
- let targetPath = event.url.pathname + event.url.search;
33
- const strpBase = m.options._proxyStripBase;
34
- if (strpBase) {
35
- targetPath = withoutBase(targetPath, strpBase);
36
- }
37
- target = joinURL(target.slice(0, -3), targetPath);
38
- } else if (event.url.search) {
39
- target = withQuery(target, Object.fromEntries(event.url.searchParams));
40
- }
41
- return proxyRequest(event, target, {
42
- ...m.options
43
- });
30
+ let target = m.options?.to;
31
+ if (!target) {
32
+ return;
33
+ }
34
+ if (target.endsWith("/**")) {
35
+ let targetPath = event.url.pathname + event.url.search;
36
+ const strpBase = m.options._proxyStripBase;
37
+ if (strpBase) {
38
+ targetPath = withoutBase(targetPath, strpBase);
39
+ }
40
+ target = joinURL(target.slice(0, -3), targetPath);
41
+ } else if (event.url.search) {
42
+ target = withQuery(target, Object.fromEntries(event.url.searchParams));
43
+ }
44
+ return proxyRequest(event, target, { ...m.options });
44
45
  });
46
+ // Cache route rule
45
47
  export const cache = ((m) => function cacheRouteRule(event, next) {
46
- if (!event.context.matchedRoute) {
47
- return next();
48
- }
49
- const cachedHandlers = globalThis.__nitroCachedHandlers ??= /* @__PURE__ */ new Map();
50
- const { handler, route } = event.context.matchedRoute;
51
- const key = `${m.route}:${route}`;
52
- let cachedHandler = cachedHandlers.get(key);
53
- if (!cachedHandler) {
54
- cachedHandler = defineCachedEventHandler(handler, {
55
- group: "nitro/route-rules",
56
- name: key,
57
- ...m.options
58
- });
59
- cachedHandlers.set(key, cachedHandler);
60
- }
61
- return cachedHandler(event);
48
+ if (!event.context.matchedRoute) {
49
+ return next();
50
+ }
51
+ const cachedHandlers = globalThis.__nitroCachedHandlers ??= new Map();
52
+ const { handler, route } = event.context.matchedRoute;
53
+ const key = `${m.route}:${route}`;
54
+ let cachedHandler = cachedHandlers.get(key);
55
+ if (!cachedHandler) {
56
+ cachedHandler = defineCachedHandler(handler, {
57
+ group: "nitro/route-rules",
58
+ name: key,
59
+ ...m.options
60
+ });
61
+ cachedHandlers.set(key, cachedHandler);
62
+ }
63
+ return cachedHandler(event);
62
64
  });
@@ -1,3 +1,2 @@
1
- import { H3 } from "h3";
2
- declare const _default: H3;
1
+ declare const _default;
3
2
  export default _default;
@@ -1,23 +1,21 @@
1
1
  import { H3 } from "h3";
2
- import { runTask } from "nitro/runtime";
3
- import { scheduledTasks, tasks } from "#nitro-internal-virtual/tasks";
2
+ import { runTask } from "../task.mjs";
3
+ import { scheduledTasks, tasks } from "#nitro/virtual/tasks";
4
4
  export default new H3().get("/_nitro/tasks", async () => {
5
- const _tasks = await Promise.all(
6
- Object.entries(tasks).map(async ([name, task]) => {
7
- const _task = await task.resolve?.();
8
- return [name, { description: _task?.meta?.description }];
9
- })
10
- );
11
- return {
12
- tasks: Object.fromEntries(_tasks),
13
- scheduledTasks
14
- };
5
+ const _tasks = await Promise.all(Object.entries(tasks).map(async ([name, task]) => {
6
+ const _task = await task.resolve?.();
7
+ return [name, { description: _task?.meta?.description }];
8
+ }));
9
+ return {
10
+ tasks: Object.fromEntries(_tasks),
11
+ scheduledTasks
12
+ };
15
13
  }).get("/_nitro/tasks/:name", async (event) => {
16
- const name = event.context.params?.name;
17
- const body = await event.req.json().catch(() => ({}));
18
- const payload = {
19
- ...Object.fromEntries(event.url.searchParams.entries()),
20
- ...body
21
- };
22
- return await runTask(name, { payload });
14
+ const name = event.context.params?.name;
15
+ const body = await event.req.json().catch(() => ({}));
16
+ const payload = {
17
+ ...Object.fromEntries(event.url.searchParams.entries()),
18
+ ...body
19
+ };
20
+ return await runTask(name, { payload });
23
21
  });