nitro 3.0.0 → 3.0.1-alpha.1

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 (293) hide show
  1. package/dist/_build/common.mjs +68 -0
  2. package/dist/_build/common2.mjs +772 -0
  3. package/dist/_build/rolldown.mjs +206 -0
  4. package/dist/_build/rollup.mjs +289 -0
  5. package/dist/_build/vite.build.mjs +56 -0
  6. package/dist/_build/vite.plugin.mjs +768 -0
  7. package/dist/_chunks/ANM1K1bE.mjs +304 -0
  8. package/dist/_chunks/B-D1JOIz.mjs +1355 -0
  9. package/dist/_chunks/BX9-zVkM.mjs +59 -0
  10. package/dist/_chunks/Bqks5huO.mjs +31 -0
  11. package/dist/_chunks/C7CbzoI1.mjs +39 -0
  12. package/dist/_dev.d.mts +12 -0
  13. package/dist/_dev.mjs +705 -0
  14. package/dist/_libs/acorn.mjs +5034 -0
  15. package/dist/_libs/c12.mjs +2858 -0
  16. package/dist/_libs/chokidar.mjs +1561 -0
  17. package/dist/_libs/citty.mjs +333 -0
  18. package/dist/_libs/commondir.mjs +22 -0
  19. package/dist/_libs/compatx.mjs +46 -0
  20. package/dist/_libs/confbox.mjs +2920 -0
  21. package/dist/_libs/deepmerge.mjs +86 -0
  22. package/dist/_libs/dot-prop.mjs +138 -0
  23. package/dist/_libs/duplexer.mjs +71 -0
  24. package/dist/_libs/escape-string-regexp.mjs +8 -0
  25. package/dist/_libs/estree-walker.mjs +330 -0
  26. package/dist/_libs/etag.mjs +80 -0
  27. package/dist/_libs/fdir.mjs +514 -0
  28. package/dist/_libs/function-bind.mjs +63 -0
  29. package/dist/_libs/gen-mapping.mjs +612 -0
  30. package/dist/_libs/giget.mjs +19289 -0
  31. package/dist/_libs/gzip-size.mjs +21 -0
  32. package/dist/_libs/hasown.mjs +14 -0
  33. package/dist/_libs/httpxy.mjs +410 -0
  34. package/dist/_libs/is-core-module.mjs +220 -0
  35. package/dist/_libs/is-module.mjs +13 -0
  36. package/dist/_libs/is-reference.mjs +32 -0
  37. package/dist/_libs/js-tokens.mjs +382 -0
  38. package/dist/_libs/klona.mjs +38 -0
  39. package/dist/_libs/knitwork.mjs +124 -0
  40. package/dist/_libs/local-pkg.mjs +1686 -0
  41. package/dist/_libs/magic-string.mjs +939 -0
  42. package/dist/_libs/mime.mjs +1391 -0
  43. package/dist/_libs/node-fetch-native.mjs +173 -0
  44. package/dist/_libs/path-parse.mjs +47 -0
  45. package/dist/_libs/pathe.mjs +41 -0
  46. package/dist/_libs/picomatch.mjs +1673 -0
  47. package/dist/_libs/plugin-alias.mjs +64 -0
  48. package/dist/_libs/plugin-commonjs.mjs +1491 -0
  49. package/dist/_libs/plugin-inject.mjs +135 -0
  50. package/dist/_libs/plugin-json.mjs +36 -0
  51. package/dist/_libs/plugin-node-resolve.mjs +1553 -0
  52. package/dist/_libs/plugin-replace.mjs +104 -0
  53. package/dist/_libs/pretty-bytes.mjs +116 -0
  54. package/dist/_libs/remapping.mjs +117 -0
  55. package/dist/_libs/rou3.mjs +319 -0
  56. package/dist/_libs/std-env.mjs +158 -0
  57. package/dist/_libs/strip-literal.mjs +51 -0
  58. package/dist/_libs/tinyglobby.mjs +292 -0
  59. package/dist/_libs/tsconfck.mjs +832 -0
  60. package/dist/_libs/ultrahtml.mjs +138 -0
  61. package/dist/_libs/unimport.mjs +3520 -0
  62. package/dist/_libs/untyped.mjs +271 -0
  63. package/dist/_libs/unwasm.mjs +5836 -0
  64. package/dist/_libs/vite-plugin-fullstack.mjs +561 -0
  65. package/dist/_presets.mjs +1752 -0
  66. package/dist/builder.d.mts +63 -0
  67. package/dist/builder.mjs +33 -0
  68. package/dist/cli/_chunks/build.mjs +48 -0
  69. package/dist/cli/_chunks/common.mjs +15 -0
  70. package/dist/cli/_chunks/detect-acorn.mjs +12 -0
  71. package/dist/cli/_chunks/dev.mjs +68 -0
  72. package/dist/cli/_chunks/dist.mjs +3 -0
  73. package/dist/cli/_chunks/dist2.mjs +3 -0
  74. package/dist/cli/_chunks/dist3.mjs +3 -0
  75. package/dist/cli/_chunks/dist4.mjs +4 -0
  76. package/dist/cli/_chunks/dist5.mjs +4 -0
  77. package/dist/cli/_chunks/esm.mjs +3 -0
  78. package/dist/cli/_chunks/json5.mjs +4 -0
  79. package/dist/cli/_chunks/jsonc.mjs +4 -0
  80. package/dist/cli/_chunks/list.mjs +27 -0
  81. package/dist/cli/_chunks/multipart-parser.mjs +6 -0
  82. package/dist/cli/_chunks/prepare.mjs +19 -0
  83. package/dist/cli/_chunks/run.mjs +55 -0
  84. package/dist/cli/_chunks/task.mjs +16 -0
  85. package/dist/cli/_chunks/toml.mjs +4 -0
  86. package/dist/cli/_chunks/yaml.mjs +4 -0
  87. package/dist/cli/index.d.mts +1 -1
  88. package/dist/cli/index.mjs +20 -476
  89. package/dist/node_modules/@poppinss/dumper/build/formatters/html/main.js +1 -1
  90. package/dist/node_modules/@poppinss/dumper/package.json +1 -1
  91. package/dist/node_modules/@sindresorhus/is/distribution/index.js +1 -1
  92. package/dist/node_modules/@sindresorhus/is/package.json +1 -1
  93. package/dist/node_modules/@speed-highlight/core/dist/index.js +2 -2
  94. package/dist/node_modules/@speed-highlight/core/dist/terminal.js +2 -2
  95. package/dist/node_modules/@speed-highlight/core/package.json +7 -3
  96. package/dist/node_modules/cookie-es/dist/index.mjs +262 -0
  97. package/dist/node_modules/cookie-es/package.json +37 -0
  98. package/dist/node_modules/hookable/dist/index.mjs +243 -266
  99. package/dist/node_modules/hookable/package.json +29 -26
  100. package/dist/node_modules/rendu/dist/index.mjs +380 -0
  101. package/dist/node_modules/rendu/package.json +47 -0
  102. package/dist/node_modules/youch/build/{chunk-VE4LENUR.js → chunk-F4I6KX4R.js} +2 -1
  103. package/dist/node_modules/youch/build/{chunk-JAN2TFI2.js → chunk-YYEJ3AGB.js} +4 -1
  104. package/dist/node_modules/youch/build/index.js +16 -8
  105. package/dist/node_modules/youch/build/public/error_stack/script.js +20 -22
  106. package/dist/node_modules/youch/build/public/header/script.js +0 -2
  107. package/dist/node_modules/youch/build/public/layout/script.js +0 -8
  108. package/dist/node_modules/youch/build/public/layout/style.css +4 -0
  109. package/dist/node_modules/youch/package.json +16 -17
  110. package/dist/presets/_nitro/runtime/nitro-dev.d.mts +1 -0
  111. package/dist/presets/_nitro/runtime/nitro-dev.mjs +48 -42
  112. package/dist/presets/_nitro/runtime/nitro-prerenderer.d.mts +2 -2
  113. package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +10 -14
  114. package/dist/presets/_nitro/runtime/service-worker.d.mts +1 -0
  115. package/dist/presets/_nitro/runtime/service-worker.mjs +15 -12
  116. package/dist/presets/aws-amplify/runtime/aws-amplify.d.mts +1 -0
  117. package/dist/presets/aws-amplify/runtime/aws-amplify.mjs +7 -6
  118. package/dist/presets/aws-lambda/runtime/_utils.d.mts +8 -13
  119. package/dist/presets/aws-lambda/runtime/_utils.mjs +95 -81
  120. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.d.mts +1 -2
  121. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.mjs +26 -28
  122. package/dist/presets/aws-lambda/runtime/aws-lambda.mjs +8 -8
  123. package/dist/presets/azure/runtime/_utils.mjs +43 -43
  124. package/dist/presets/azure/runtime/azure-swa.d.mts +2 -2
  125. package/dist/presets/azure/runtime/azure-swa.mjs +24 -22
  126. package/dist/presets/bun/runtime/bun.d.mts +2 -0
  127. package/dist/presets/bun/runtime/bun.mjs +34 -21
  128. package/dist/presets/cloudflare/runtime/_module-handler.d.mts +10 -7
  129. package/dist/presets/cloudflare/runtime/_module-handler.mjs +80 -88
  130. package/dist/presets/cloudflare/runtime/cloudflare-durable.d.mts +6 -14
  131. package/dist/presets/cloudflare/runtime/cloudflare-durable.mjs +60 -63
  132. package/dist/presets/cloudflare/runtime/cloudflare-module.d.mts +1 -7
  133. package/dist/presets/cloudflare/runtime/cloudflare-module.mjs +14 -16
  134. package/dist/presets/cloudflare/runtime/cloudflare-pages.d.mts +12 -12
  135. package/dist/presets/cloudflare/runtime/cloudflare-pages.mjs +40 -42
  136. package/dist/presets/cloudflare/runtime/plugin.dev.d.mts +2 -2
  137. package/dist/presets/cloudflare/runtime/plugin.dev.mjs +89 -82
  138. package/dist/presets/cloudflare/runtime/shims/workers.dev.mjs +27 -0
  139. package/dist/presets/deno/runtime/deno-deploy.d.mts +4 -0
  140. package/dist/presets/deno/runtime/deno-deploy.mjs +15 -12
  141. package/dist/presets/deno/runtime/deno-server.d.mts +0 -3
  142. package/dist/presets/deno/runtime/deno-server.mjs +32 -52
  143. package/dist/presets/netlify/runtime/netlify-edge.d.mts +2 -1
  144. package/dist/presets/netlify/runtime/netlify-edge.mjs +15 -12
  145. package/dist/presets/netlify/runtime/netlify.mjs +12 -18
  146. package/dist/presets/node/runtime/node-cluster.d.mts +3 -1
  147. package/dist/presets/node/runtime/node-cluster.mjs +50 -54
  148. package/dist/presets/node/runtime/node-middleware.d.mts +2 -3
  149. package/dist/presets/node/runtime/node-middleware.mjs +9 -8
  150. package/dist/presets/node/runtime/node-server.mjs +37 -34
  151. package/dist/presets/standard/runtime/server.d.mts +1 -3
  152. package/dist/presets/standard/runtime/server.mjs +2 -4
  153. package/dist/presets/stormkit/runtime/stormkit.d.mts +13 -13
  154. package/dist/presets/stormkit/runtime/stormkit.mjs +21 -21
  155. package/dist/presets/vercel/runtime/vercel.node.d.mts +3 -0
  156. package/dist/presets/vercel/runtime/vercel.node.mjs +15 -0
  157. package/dist/presets/vercel/runtime/{vercel.d.mts → vercel.web.d.mts} +3 -3
  158. package/dist/presets/vercel/runtime/vercel.web.mjs +20 -0
  159. package/dist/presets/winterjs/runtime/winterjs.d.mts +2 -0
  160. package/dist/presets/winterjs/runtime/winterjs.mjs +73 -69
  161. package/dist/presets/zeabur/runtime/zeabur.d.mts +1 -1
  162. package/dist/presets/zeabur/runtime/zeabur.mjs +1 -1
  163. package/dist/runtime/app.d.mts +1 -0
  164. package/dist/runtime/app.mjs +1 -0
  165. package/dist/runtime/cache.d.mts +1 -0
  166. package/dist/runtime/cache.mjs +1 -0
  167. package/dist/runtime/config.d.mts +3 -0
  168. package/dist/runtime/config.mjs +4 -0
  169. package/dist/runtime/context.d.mts +1 -0
  170. package/dist/runtime/context.mjs +1 -0
  171. package/dist/runtime/database.d.mts +1 -0
  172. package/dist/runtime/database.mjs +1 -0
  173. package/dist/runtime/internal/app.d.mts +11 -1
  174. package/dist/runtime/internal/app.mjs +188 -140
  175. package/dist/runtime/internal/cache.d.mts +9 -5
  176. package/dist/runtime/internal/cache.mjs +248 -219
  177. package/dist/runtime/internal/context.d.mts +9 -9
  178. package/dist/runtime/internal/context.mjs +17 -10
  179. package/dist/runtime/internal/database.mjs +8 -10
  180. package/dist/runtime/internal/error/dev.d.mts +5 -4
  181. package/dist/runtime/internal/error/dev.mjs +106 -105
  182. package/dist/runtime/internal/error/hooks.d.mts +1 -0
  183. package/dist/runtime/internal/error/hooks.mjs +9 -0
  184. package/dist/runtime/internal/error/prod.d.mts +5 -4
  185. package/dist/runtime/internal/error/prod.mjs +51 -59
  186. package/dist/runtime/internal/error/utils.d.mts +4 -4
  187. package/dist/runtime/internal/error/utils.mjs +1 -1
  188. package/dist/runtime/internal/meta.d.mts +1 -1
  189. package/dist/runtime/internal/meta.mjs +1 -1
  190. package/dist/runtime/internal/plugin.d.mts +2 -2
  191. package/dist/runtime/internal/plugin.mjs +1 -1
  192. package/dist/runtime/internal/route-rules.d.mts +8 -8
  193. package/dist/runtime/internal/route-rules.mjs +54 -52
  194. package/dist/runtime/internal/routes/dev-tasks.d.mts +1 -2
  195. package/dist/runtime/internal/routes/dev-tasks.mjs +16 -18
  196. package/dist/runtime/internal/routes/openapi.d.mts +1 -0
  197. package/dist/runtime/internal/routes/openapi.mjs +81 -87
  198. package/dist/runtime/internal/routes/renderer-template.d.mts +1 -1
  199. package/dist/runtime/internal/routes/renderer-template.dev.d.mts +1 -2
  200. package/dist/runtime/internal/routes/renderer-template.dev.mjs +15 -17
  201. package/dist/runtime/internal/routes/renderer-template.mjs +1 -1
  202. package/dist/runtime/internal/routes/scalar.d.mts +1 -0
  203. package/dist/runtime/internal/routes/scalar.mjs +22 -23
  204. package/dist/runtime/internal/routes/swagger.d.mts +1 -0
  205. package/dist/runtime/internal/routes/swagger.mjs +9 -11
  206. package/dist/runtime/internal/runtime-config.d.mts +4 -4
  207. package/dist/runtime/internal/runtime-config.mjs +40 -35
  208. package/dist/runtime/internal/static.mjs +63 -74
  209. package/dist/runtime/internal/storage.mjs +2 -2
  210. package/dist/runtime/internal/task.d.mts +6 -6
  211. package/dist/runtime/internal/task.mjs +56 -60
  212. package/dist/runtime/internal/vite/dev-entry.mjs +11 -1
  213. package/dist/runtime/internal/vite/dev-worker.mjs +9 -57
  214. package/dist/runtime/internal/vite/ssr-renderer.mjs +3 -1
  215. package/{lib/runtime-meta.d.mts → dist/runtime/meta.d.mts} +1 -1
  216. package/dist/runtime/meta.mjs +26 -0
  217. package/dist/runtime/nitro.d.mts +12 -0
  218. package/dist/runtime/nitro.mjs +32 -0
  219. package/dist/runtime/runtime-config.d.mts +1 -0
  220. package/dist/runtime/runtime-config.mjs +1 -0
  221. package/dist/runtime/storage.d.mts +1 -0
  222. package/dist/runtime/storage.mjs +1 -0
  223. package/dist/runtime/task.d.mts +1 -0
  224. package/dist/runtime/task.mjs +1 -0
  225. package/dist/runtime/vite-runtime.d.mts +8 -0
  226. package/dist/runtime/vite-runtime.mjs +9 -0
  227. package/dist/types/index.d.mts +2625 -2297
  228. package/dist/types/index.mjs +1 -1
  229. package/dist/vite.d.mts +49 -51
  230. package/dist/vite.mjs +44 -68
  231. package/lib/tsconfig.json +27 -0
  232. package/package.json +86 -76
  233. package/dist/_chunks/app.mjs +0 -19797
  234. package/dist/_chunks/build.mjs +0 -84
  235. package/dist/_chunks/build2.mjs +0 -318
  236. package/dist/_chunks/build3.mjs +0 -6452
  237. package/dist/_chunks/detect-acorn.mjs +0 -503
  238. package/dist/_chunks/index.mjs +0 -22242
  239. package/dist/_chunks/index2.mjs +0 -297
  240. package/dist/_chunks/index3.mjs +0 -1058
  241. package/dist/_chunks/index4.mjs +0 -1206
  242. package/dist/_chunks/info.mjs +0 -11157
  243. package/dist/_chunks/json5.mjs +0 -68
  244. package/dist/_chunks/jsonc.mjs +0 -51
  245. package/dist/_chunks/pathe.M-eThtNZ.mjs +0 -204
  246. package/dist/_chunks/plugin.mjs +0 -960
  247. package/dist/_chunks/server.mjs +0 -254
  248. package/dist/_chunks/snapshot.mjs +0 -284
  249. package/dist/_chunks/toml.mjs +0 -259
  250. package/dist/_chunks/yaml.mjs +0 -86
  251. package/dist/cli/build.mjs +0 -54
  252. package/dist/cli/common.mjs +0 -13
  253. package/dist/cli/dev.mjs +0 -95
  254. package/dist/cli/index2.mjs +0 -17
  255. package/dist/cli/list.mjs +0 -34
  256. package/dist/cli/prepare.mjs +0 -24
  257. package/dist/cli/run.mjs +0 -60
  258. package/dist/index.d.mts +0 -52
  259. package/dist/index.mjs +0 -55
  260. package/dist/node_modules/cookie/dist/index.js +0 -239
  261. package/dist/node_modules/cookie/package.json +0 -42
  262. package/dist/node_modules/klona/dist/index.mjs +0 -81
  263. package/dist/node_modules/klona/full/index.mjs +0 -53
  264. package/dist/node_modules/klona/package.json +0 -74
  265. package/dist/node_modules/std-env/dist/index.mjs +0 -1
  266. package/dist/node_modules/std-env/package.json +0 -46
  267. package/dist/presets/vercel/runtime/vercel.mjs +0 -17
  268. package/dist/presets.mjs +0 -2460
  269. package/dist/runtime/index.d.mts +0 -11
  270. package/dist/runtime/index.mjs +0 -17
  271. package/dist/runtime/internal/debug.d.mts +0 -2
  272. package/dist/runtime/internal/debug.mjs +0 -5
  273. package/dist/runtime/internal/empty.d.mts +0 -0
  274. package/dist/runtime/internal/index.d.mts +0 -3
  275. package/dist/runtime/internal/index.mjs +0 -3
  276. package/dist/runtime/internal/lib/http-graceful-shutdown.d.mts +0 -16
  277. package/dist/runtime/internal/lib/http-graceful-shutdown.mjs +0 -213
  278. package/dist/runtime/internal/renderer.d.mts +0 -3
  279. package/dist/runtime/internal/renderer.mjs +0 -36
  280. package/dist/runtime/internal/shutdown.d.mts +0 -9
  281. package/dist/runtime/internal/shutdown.mjs +0 -34
  282. package/dist/runtime/internal/utils.d.mts +0 -1
  283. package/dist/runtime/internal/utils.mjs +0 -15
  284. package/dist/runtime/internal/vite/dev-entry.d.mts +0 -1
  285. package/dist/runtime/internal/vite/dev-worker.d.mts +0 -1
  286. package/dist/runtime/internal/vite/prod-setup.d.mts +0 -4
  287. package/dist/runtime/internal/vite/prod-setup.mjs +0 -55
  288. package/dist/runtime/internal/vite/ssr-renderer.d.mts +0 -4
  289. package/lib/config.d.mts +0 -9
  290. package/lib/config.mjs +0 -5
  291. package/lib/meta.d.mts +0 -5
  292. package/lib/meta.mjs +0 -21
  293. package/lib/runtime-meta.mjs +0 -38
@@ -1,153 +1,201 @@
1
1
  import { H3Core, toRequest } from "h3";
2
- import { createHooks } from "hookable";
2
+ import { HookableCore } from "hookable";
3
3
  import { nitroAsyncContext } from "./context.mjs";
4
+ // IMPORTANT: virtual imports and user code should be imported last to avoid initialization order issues
4
5
  import errorHandler from "#nitro-internal-virtual/error-handler";
5
6
  import { plugins } from "#nitro-internal-virtual/plugins";
6
- import {
7
- findRoute,
8
- findRouteRules,
9
- globalMiddleware,
10
- findRoutedMiddleware
11
- } from "#nitro-internal-virtual/routing";
7
+ import { findRoute, findRouteRules, globalMiddleware, findRoutedMiddleware } from "#nitro-internal-virtual/routing";
8
+ import { hasRouteRules, hasRoutedMiddleware, hasGlobalMiddleware, hasRoutes, hasHooks, hasPlugins } from "#nitro-internal-virtual/feature-flags";
12
9
  export function useNitroApp() {
13
- return useNitroApp.__instance__ ??= initNitroApp();
10
+ return useNitroApp.__instance__ ??= initNitroApp();
11
+ }
12
+ export function useNitroHooks() {
13
+ const nitroApp = useNitroApp();
14
+ const hooks = nitroApp.hooks;
15
+ if (hooks) {
16
+ return hooks;
17
+ }
18
+ return nitroApp.hooks = new HookableCore();
19
+ }
20
+ export function serverFetch(resource, init, context) {
21
+ const req = toRequest(resource, init);
22
+ req.context = {
23
+ ...req.context,
24
+ ...context
25
+ };
26
+ const appHandler = useNitroApp().fetch;
27
+ try {
28
+ return Promise.resolve(appHandler(req));
29
+ } catch (error) {
30
+ return Promise.reject(error);
31
+ }
32
+ }
33
+ export async function resolveWebsocketHooks(req) {
34
+ // https://github.com/h3js/h3/blob/c11ca743d476e583b3b47de1717e6aae92114357/src/utils/ws.ts#L37
35
+ const hooks = (await serverFetch(req)).crossws;
36
+ return hooks || {};
37
+ }
38
+ export function fetch(resource, init, context) {
39
+ if (typeof resource === "string" && resource.charCodeAt(0) === 47) {
40
+ return serverFetch(resource, init, context);
41
+ }
42
+ resource = resource._request || resource;
43
+ return fetch(resource, init);
14
44
  }
15
45
  function initNitroApp() {
16
- const nitroApp = createNitroApp();
17
- for (const plugin of plugins) {
18
- try {
19
- plugin(nitroApp);
20
- } catch (error) {
21
- nitroApp.captureError(error, { tags: ["plugin"] });
22
- throw error;
23
- }
24
- }
25
- return nitroApp;
46
+ const nitroApp = createNitroApp();
47
+ if (hasPlugins) {
48
+ for (const plugin of plugins) {
49
+ try {
50
+ plugin(nitroApp);
51
+ } catch (error) {
52
+ nitroApp.captureError?.(error, { tags: ["plugin"] });
53
+ throw error;
54
+ }
55
+ }
56
+ }
57
+ globalThis.__nitro__ = nitroApp;
58
+ return nitroApp;
26
59
  }
27
60
  function createNitroApp() {
28
- const hooks = createHooks();
29
- const captureError = (error, errorCtx) => {
30
- const promise = hooks.callHookParallel("error", error, errorCtx).catch((hookError) => {
31
- console.error("Error while capturing another error", hookError);
32
- });
33
- if (errorCtx?.event) {
34
- const errors = errorCtx.event.req.context?.nitro?.errors;
35
- if (errors) {
36
- errors.push({ error, context: errorCtx });
37
- }
38
- if (typeof errorCtx.event.req.waitUntil === "function") {
39
- errorCtx.event.req.waitUntil(promise);
40
- }
41
- }
42
- };
43
- const h3App = createH3App(captureError);
44
- let fetchHandler = async (req) => {
45
- req.context ??= {};
46
- req.context.nitro = req.context.nitro || { errors: [] };
47
- const event = { req };
48
- const nitroApp = useNitroApp();
49
- await nitroApp.hooks.callHook("request", event).catch((error) => {
50
- captureError(error, { event, tags: ["request"] });
51
- });
52
- const response = await h3App.request(req, void 0, req.context);
53
- await nitroApp.hooks.callHook("response", response, event).catch((error) => {
54
- captureError(error, { event, tags: ["request", "response"] });
55
- });
56
- return response;
57
- };
58
- if (import.meta._asyncContext) {
59
- const originalFetchHandler = fetchHandler;
60
- fetchHandler = (req) => {
61
- const asyncCtx = { request: req };
62
- return nitroAsyncContext.callAsync(
63
- asyncCtx,
64
- () => originalFetchHandler(req)
65
- );
66
- };
67
- }
68
- const requestHandler = (input, init, context) => {
69
- const req = toRequest(input, init);
70
- req.context = { ...req.context, ...context };
71
- return Promise.resolve(fetchHandler(req));
72
- };
73
- const originalFetch = globalThis.fetch;
74
- const nitroFetch = (input, init) => {
75
- if (typeof input === "string" && input.startsWith("/")) {
76
- return requestHandler(input, init);
77
- }
78
- if (input instanceof Request && "_request" in input) {
79
- input = input._request;
80
- }
81
- return originalFetch(input, init);
82
- };
83
- globalThis.fetch = nitroFetch;
84
- const app = {
85
- _h3: h3App,
86
- hooks,
87
- fetch: requestHandler,
88
- captureError
89
- };
90
- return app;
61
+ const hooks = hasHooks ? new HookableCore() : undefined;
62
+ const captureError = (error, errorCtx) => {
63
+ const promise = hasHooks && hooks.callHook("error", error, errorCtx)?.catch?.((hookError) => {
64
+ console.error("Error while capturing another error", hookError);
65
+ });
66
+ if (errorCtx?.event) {
67
+ const errors = errorCtx.event.req.context?.nitro?.errors;
68
+ if (errors) {
69
+ errors.push({
70
+ error,
71
+ context: errorCtx
72
+ });
73
+ }
74
+ if (hasHooks && typeof errorCtx.event.req.waitUntil === "function") {
75
+ errorCtx.event.req.waitUntil(promise);
76
+ }
77
+ }
78
+ };
79
+ const h3App = createH3App({ onError(error, event) {
80
+ hasHooks && captureError(error, { event });
81
+ return errorHandler(error, event);
82
+ } });
83
+ if (hasHooks) {
84
+ h3App.config.onRequest = (event) => {
85
+ return hooks.callHook("request", event)?.catch?.((error) => {
86
+ captureError(error, {
87
+ event,
88
+ tags: ["request"]
89
+ });
90
+ });
91
+ };
92
+ h3App.config.onResponse = (res, event) => {
93
+ return hooks.callHook("response", res, event)?.catch?.((error) => {
94
+ captureError(error, {
95
+ event,
96
+ tags: ["response"]
97
+ });
98
+ });
99
+ };
100
+ }
101
+ let appHandler = (req) => {
102
+ req.context ||= {};
103
+ req.context.nitro = req.context.nitro || { errors: [] };
104
+ return h3App.fetch(req);
105
+ };
106
+ // Experimental async context support
107
+ if (import.meta._asyncContext) {
108
+ const originalHandler = appHandler;
109
+ appHandler = (req) => {
110
+ const asyncCtx = { request: req };
111
+ return nitroAsyncContext.callAsync(asyncCtx, () => originalHandler(req));
112
+ };
113
+ }
114
+ const app = {
115
+ fetch: appHandler,
116
+ h3: h3App,
117
+ hooks,
118
+ captureError
119
+ };
120
+ return app;
91
121
  }
92
- function createH3App(captureError) {
93
- const DEBUG_MODE = ["1", "true", "TRUE"].includes(process.env.DEBUG + "");
94
- const h3App = new H3Core({
95
- debug: DEBUG_MODE,
96
- onError: (error, event) => {
97
- captureError(error, { event, tags: ["request"] });
98
- return errorHandler(error, event);
99
- }
100
- });
101
- h3App._findRoute = (event) => findRoute(event.req.method, event.url.pathname);
102
- h3App._getMiddleware = (event, route) => {
103
- const pathname = event.url.pathname;
104
- const method = event.req.method;
105
- const { routeRules, routeRuleMiddleware } = getRouteRules(method, pathname);
106
- event.context.routeRules = routeRules;
107
- return [
108
- ...routeRuleMiddleware,
109
- ...globalMiddleware,
110
- ...findRoutedMiddleware(method, pathname).map((r) => r.data),
111
- ...route?.data?.middleware || []
112
- ].filter(Boolean);
113
- };
114
- return h3App;
122
+ function createH3App(config) {
123
+ // Create H3 app
124
+ const h3App = new H3Core(config);
125
+ // Compiled route matching
126
+ hasRoutes && (h3App["~findRoute"] = (event) => findRoute(event.req.method, event.url.pathname));
127
+ hasGlobalMiddleware && h3App["~middleware"].push(...globalMiddleware);
128
+ if (hasRouteRules || hasRoutedMiddleware) {
129
+ h3App["~getMiddleware"] = (event, route) => {
130
+ const needsRouting = hasRouteRules || hasRoutedMiddleware;
131
+ const pathname = needsRouting ? event.url.pathname : undefined;
132
+ const method = needsRouting ? event.req.method : undefined;
133
+ const middleware = [];
134
+ if (hasRouteRules) {
135
+ const routeRules = getRouteRules(method, pathname);
136
+ event.context.routeRules = routeRules?.routeRules;
137
+ if (routeRules?.routeRuleMiddleware.length) {
138
+ middleware.push(...routeRules.routeRuleMiddleware);
139
+ }
140
+ }
141
+ hasGlobalMiddleware && middleware.push(...h3App["~middleware"]);
142
+ hasRoutedMiddleware && middleware.push(...findRoutedMiddleware(method, pathname).map((r) => r.data));
143
+ if (hasRoutes && route?.data?.middleware?.length) {
144
+ middleware.push(...route.data.middleware);
145
+ }
146
+ return middleware;
147
+ };
148
+ }
149
+ return h3App;
115
150
  }
116
151
  function getRouteRules(method, pathname) {
117
- const m = findRouteRules(method, pathname);
118
- if (!m?.length) {
119
- return { routeRuleMiddleware: [] };
120
- }
121
- const routeRules = {};
122
- for (const layer of m) {
123
- for (const rule of layer.data) {
124
- const currentRule = routeRules[rule.name];
125
- if (currentRule) {
126
- if (rule.options === false) {
127
- delete routeRules[rule.name];
128
- continue;
129
- }
130
- if (typeof currentRule.options === "object" && typeof rule.options === "object") {
131
- currentRule.options = { ...currentRule.options, ...rule.options };
132
- } else {
133
- currentRule.options = rule.options;
134
- }
135
- currentRule.route = rule.route;
136
- currentRule.params = { ...currentRule.params, ...layer.params };
137
- } else if (rule.options !== false) {
138
- routeRules[rule.name] = { ...rule, params: layer.params };
139
- }
140
- }
141
- }
142
- const middleware = [];
143
- for (const rule of Object.values(routeRules)) {
144
- if (rule.options === false || !rule.handler) {
145
- continue;
146
- }
147
- middleware.push(rule.handler(rule));
148
- }
149
- return {
150
- routeRules,
151
- routeRuleMiddleware: middleware
152
- };
152
+ const m = findRouteRules(method, pathname);
153
+ if (!m?.length) {
154
+ return { routeRuleMiddleware: [] };
155
+ }
156
+ const routeRules = {};
157
+ for (const layer of m) {
158
+ for (const rule of layer.data) {
159
+ const currentRule = routeRules[rule.name];
160
+ if (currentRule) {
161
+ if (rule.options === false) {
162
+ // Remove/Reset existing rule with `false` value
163
+ delete routeRules[rule.name];
164
+ continue;
165
+ }
166
+ if (typeof currentRule.options === "object" && typeof rule.options === "object") {
167
+ // Merge nested rule objects
168
+ currentRule.options = {
169
+ ...currentRule.options,
170
+ ...rule.options
171
+ };
172
+ } else {
173
+ // Override rule if non object
174
+ currentRule.options = rule.options;
175
+ }
176
+ // Routing (route and params)
177
+ currentRule.route = rule.route;
178
+ currentRule.params = {
179
+ ...currentRule.params,
180
+ ...layer.params
181
+ };
182
+ } else if (rule.options !== false) {
183
+ routeRules[rule.name] = {
184
+ ...rule,
185
+ params: layer.params
186
+ };
187
+ }
188
+ }
189
+ }
190
+ const middleware = [];
191
+ for (const rule of Object.values(routeRules)) {
192
+ if (rule.options === false || !rule.handler) {
193
+ continue;
194
+ }
195
+ middleware.push(rule.handler(rule));
196
+ }
197
+ return {
198
+ routeRules,
199
+ routeRuleMiddleware: middleware
200
+ };
153
201
  }
@@ -1,7 +1,11 @@
1
1
  import type { EventHandler } from "h3";
2
2
  import type { CacheOptions, CachedEventHandlerOptions } from "nitro/types";
3
- export declare function defineCachedFunction<T, ArgsT extends unknown[] = any[]>(fn: (...args: ArgsT) => T | Promise<T>, opts?: CacheOptions<T, ArgsT>): (...args: ArgsT) => Promise<T>;
4
- export declare function cachedFunction<T, ArgsT extends unknown[] = any[]>(fn: (...args: ArgsT) => T | Promise<T>, opts?: CacheOptions<T>): (...args: ArgsT) => Promise<T | undefined>;
5
- export declare function defineCachedEventHandler(handler: EventHandler, opts?: CachedEventHandlerOptions): EventHandler;
6
- export declare const cachedEventHandler: typeof defineCachedEventHandler;
7
- export declare const defineCachedHandler: typeof defineCachedEventHandler;
3
+ export declare function defineCachedFunction<
4
+ T,
5
+ ArgsT extends unknown[] = any[]
6
+ >(fn: (...args: ArgsT) => T | Promise<T>, opts?: CacheOptions<T, ArgsT>): (...args: ArgsT) => Promise<T>;
7
+ export declare function cachedFunction<
8
+ T,
9
+ ArgsT extends unknown[] = any[]
10
+ >(fn: (...args: ArgsT) => T | Promise<T>, opts?: CacheOptions<T>): (...args: ArgsT) => Promise<T | undefined>;
11
+ export declare function defineCachedHandler(handler: EventHandler, opts?: CachedEventHandlerOptions): EventHandler;