h3 2.0.1-rc.2 → 2.0.1-rc.21

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 (51) hide show
  1. package/bin/h3.mjs +35 -0
  2. package/dist/THIRD-PARTY-LICENSES.md +70 -0
  3. package/dist/_entries/bun.d.mts +3 -8
  4. package/dist/_entries/bun.mjs +3 -9
  5. package/dist/_entries/cloudflare.d.mts +4 -9
  6. package/dist/_entries/cloudflare.mjs +3 -9
  7. package/dist/_entries/deno.d.mts +3 -8
  8. package/dist/_entries/deno.mjs +3 -9
  9. package/dist/_entries/generic.d.mts +3 -8
  10. package/dist/_entries/generic.mjs +3 -9
  11. package/dist/_entries/node.d.mts +3 -8
  12. package/dist/_entries/node.mjs +3 -12
  13. package/dist/_entries/service-worker.d.mts +3 -8
  14. package/dist/_entries/service-worker.mjs +3 -9
  15. package/dist/docs/0.guide/0.index/index.md +117 -0
  16. package/dist/docs/0.guide/1.basics/0.lifecycle.md +68 -0
  17. package/dist/docs/0.guide/1.basics/1.routing.md +92 -0
  18. package/dist/docs/0.guide/1.basics/2.middleware.md +97 -0
  19. package/dist/docs/0.guide/1.basics/3.handler.md +165 -0
  20. package/dist/docs/0.guide/1.basics/4.response.md +162 -0
  21. package/dist/docs/0.guide/1.basics/5.error.md +117 -0
  22. package/dist/docs/0.guide/1.basics/6.nested-apps.md +57 -0
  23. package/dist/docs/0.guide/2.api/0.h3.md +145 -0
  24. package/dist/docs/0.guide/2.api/1.h3event.md +113 -0
  25. package/dist/docs/0.guide/3.advanced/0.plugins.md +50 -0
  26. package/dist/docs/0.guide/3.advanced/1.websocket.md +124 -0
  27. package/dist/docs/0.guide/3.advanced/2.nightly.md +13 -0
  28. package/dist/docs/1.utils/0.index/index.md +46 -0
  29. package/dist/docs/1.utils/1.request.md +355 -0
  30. package/dist/docs/1.utils/2.response.md +144 -0
  31. package/dist/docs/1.utils/3.cookie.md +33 -0
  32. package/dist/docs/1.utils/4.security.md +109 -0
  33. package/dist/docs/1.utils/5.proxy.md +31 -0
  34. package/dist/docs/1.utils/6.mcp.md +71 -0
  35. package/dist/docs/1.utils/7.more.md +78 -0
  36. package/dist/docs/1.utils/8.community.md +42 -0
  37. package/dist/docs/2.examples/0.index/index.md +16 -0
  38. package/dist/docs/2.examples/1.handle-cookie.md +67 -0
  39. package/dist/docs/2.examples/2.handle-session.md +130 -0
  40. package/dist/docs/2.examples/3.serve-static-assets.md +66 -0
  41. package/dist/docs/2.examples/4.stream-response.md +76 -0
  42. package/dist/docs/2.examples/5.validate-data.md +193 -0
  43. package/dist/docs/3.migration/0.index/index.md +200 -0
  44. package/dist/docs/README.md +35 -0
  45. package/dist/{h3.mjs → h3-CRCltuUf.mjs} +915 -1218
  46. package/dist/h3-D76FUMrE.d.mts +833 -0
  47. package/dist/h3-DagAgogP.mjs +4 -0
  48. package/dist/{h3.d.mts → h3-DiSMXP1G.d.mts} +320 -656
  49. package/dist/tracing.d.mts +24 -0
  50. package/dist/tracing.mjs +76 -0
  51. package/package.json +56 -44
@@ -1,10 +1,6 @@
1
- import { H3, H3Core, H3Error, H3Event, HTTPError, HTTPResponse, appendCorsHeaders, appendCorsPreflightHeaders, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertMethod, basicAuth, callMiddleware, clearResponseHeaders, clearSession, createApp, createError, createEventStream, createRouter, defaultContentType, defineEventHandler, defineHandler, defineLazyEventHandler, defineMiddleware, defineNodeHandler, defineNodeListener, defineNodeMiddleware, definePlugin, defineRoute, defineValidatedHandler, defineWebSocket, defineWebSocketHandler, deleteChunkedCookie, deleteCookie, dynamicEventHandler, eventHandler, fetchWithEvent, freezeApp, fromNodeHandler, fromNodeMiddleware, fromWebHandler, getBodyStream, getChunkedCookie, getCookie, getEventContext, getHeader, getHeaders, getMethod, getProxyRequestHeaders, getQuery, getRequestFingerprint, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestPath, getRequestProtocol, getRequestURL, getRequestWebStream, getResponseHeader, getResponseHeaders, getResponseStatus, getResponseStatusText, getRouterParam, getRouterParams, getSession, getValidatedQuery, getValidatedRouterParams, handleCacheHeaders, handleCors, html, isCorsOriginAllowed, isError, isEvent, isHTTPEvent, isMethod, isPreflightRequest, iterable, lazyEventHandler, mockEvent, noContent, onError, onRequest, onResponse, parseCookies, proxy, proxyRequest, readBody, readFormData, readFormDataBody, readMultipartFormData, readRawBody, readValidatedBody, redirect, removeResponseHeader, requireBasicAuth, sanitizeStatusCode, sanitizeStatusMessage, sealSession, sendIterable, sendNoContent, sendProxy, sendRedirect, sendStream, sendWebResponse, serveStatic, setChunkedCookie, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, setResponseStatus, toEventHandler, toNodeListener, toRequest, toResponse, toWebHandler, unsealSession, updateSession, useBase, useSession, withBase, writeEarlyHints } from "../h3.mjs";
1
+ import { $ as basicAuth, $t as defineLazyEventHandler, A as readFormDataBody, An as freezeApp, At as bodyLimit, B as setHeader, Bt as redirect, C as getResponseHeader, Cn as toMiddleware, Ct as parseCookies, D as isError, Dn as sanitizeStatusCode, Dt as getProxyRequestHeaders, E as getResponseStatusText, En as HTTPError, Et as fetchWithEvent, F as sendNoContent, Ft as readBody, Gt as defineNodeHandler, H as setResponseHeader, Ht as writeEarlyHints, I as sendProxy, It as readValidatedBody, J as defineJsonRpcHandler, Jt as fromWebHandler, K as toNodeListener, Kt as defineNodeMiddleware, L as sendRedirect, Lt as html, M as readRawBody, Mt as onRequest, N as removeResponseHeader, Nt as onResponse, O as lazyEventHandler, On as sanitizeStatusMessage, Ot as proxy, P as sendIterable, Pt as assertBodySize, Q as getRequestFingerprint, Qt as defineHandler, R as sendStream, Rt as iterable, S as getRequestWebStream, Sn as defineMiddleware, St as getValidatedCookies, T as getResponseStatus, Tn as toResponse, Tt as setCookie, U as setResponseHeaders, Ut as defineRoute, V as setHeaders, Vt as redirectBack, W as setResponseStatus, Wt as removeRoute, X as defineWebSocket, Xt as H3, Y as defineJsonRpcWebSocketHandler, Yt as toWebHandler, Z as defineWebSocketHandler, Zt as H3Core, _ as getHeaders, _n as getEventContext, _t as createEventStream, a as appendResponseHeaders, an as getRequestHost, at as isCorsOriginAllowed, b as getRequestHeaders, bn as mockEvent, bt as getChunkedCookie, c as createError, cn as getRequestURL, ct as sealSession, d as defineEventHandler, dn as getValidatedQuery, dt as useSession, en as defineValidatedHandler, et as requireBasicAuth, f as defineNodeListener, fn as getValidatedRouterParams, ft as withBase, g as getHeader, gn as toRequest, gt as withServerTiming, h as getBodyStream, hn as requestWithURL, ht as setServerTiming, i as appendResponseHeader, in as getQuery, it as isPreflightRequest, j as readMultipartFormData, jt as onError, k as readFormData, kn as H3Event, kt as proxyRequest, l as createRouter, ln as getRouterParam, lt as unsealSession, m as fromNodeMiddleware, mn as requestWithBaseURL, mt as handleCacheHeaders, n as appendHeader, nn as toEventHandler, nt as appendCorsPreflightHeaders, o as clearResponseHeaders, on as getRequestIP, ot as clearSession, p as eventHandler, pn as isMethod, pt as serveStatic, q as useBase, qt as fromNodeHandler, r as appendHeaders, rn as assertMethod, rt as handleCors, s as createApp, sn as getRequestProtocol, st as getSession, t as H3Error, tn as dynamicEventHandler, tt as appendCorsHeaders, u as defaultContentType, un as getRouterParams, ut as updateSession, v as getMethod, vn as isEvent, vt as deleteChunkedCookie, w as getResponseHeaders, wn as HTTPResponse, wt as setChunkedCookie, x as getRequestPath, xn as callMiddleware, xt as getCookie, y as getRequestHeader, yn as isHTTPEvent, yt as deleteCookie, z as sendWebResponse, zt as noContent } from "../h3-CRCltuUf.mjs";
2
+ import { t as definePlugin } from "../h3-DagAgogP.mjs";
2
3
  import { serve as serve$1, toNodeHandler as toNodeHandler$1 } from "srvx/node";
3
-
4
- //#region src/_entries/node.ts
5
- /**
6
- * Serve the H3 app.
7
- */
8
4
  function serve(app, options) {
9
5
  freezeApp(app);
10
6
  return serve$1({
@@ -12,12 +8,7 @@ function serve(app, options) {
12
8
  ...options
13
9
  });
14
10
  }
15
- /**
16
- * Convert H3 app instance to a NodeHandler with (IncomingMessage, ServerResponse) => void signature.
17
- */
18
11
  function toNodeHandler(app) {
19
12
  return toNodeHandler$1(app.fetch);
20
13
  }
21
-
22
- //#endregion
23
- export { H3, H3Core, H3Error, H3Event, HTTPError, HTTPResponse, appendCorsHeaders, appendCorsPreflightHeaders, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertMethod, basicAuth, callMiddleware, clearResponseHeaders, clearSession, createApp, createError, createEventStream, createRouter, defaultContentType, defineEventHandler, defineHandler, defineLazyEventHandler, defineMiddleware, defineNodeHandler, defineNodeListener, defineNodeMiddleware, definePlugin, defineRoute, defineValidatedHandler, defineWebSocket, defineWebSocketHandler, deleteChunkedCookie, deleteCookie, dynamicEventHandler, eventHandler, fetchWithEvent, fromNodeHandler, fromNodeMiddleware, fromWebHandler, getBodyStream, getChunkedCookie, getCookie, getEventContext, getHeader, getHeaders, getMethod, getProxyRequestHeaders, getQuery, getRequestFingerprint, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestPath, getRequestProtocol, getRequestURL, getRequestWebStream, getResponseHeader, getResponseHeaders, getResponseStatus, getResponseStatusText, getRouterParam, getRouterParams, getSession, getValidatedQuery, getValidatedRouterParams, handleCacheHeaders, handleCors, html, isCorsOriginAllowed, isError, isEvent, isHTTPEvent, isMethod, isPreflightRequest, iterable, lazyEventHandler, mockEvent, noContent, onError, onRequest, onResponse, parseCookies, proxy, proxyRequest, readBody, readFormData, readFormDataBody, readMultipartFormData, readRawBody, readValidatedBody, redirect, removeResponseHeader, requireBasicAuth, sanitizeStatusCode, sanitizeStatusMessage, sealSession, sendIterable, sendNoContent, sendProxy, sendRedirect, sendStream, sendWebResponse, serve, serveStatic, setChunkedCookie, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, setResponseStatus, toEventHandler, toNodeHandler, toNodeListener, toRequest, toResponse, toWebHandler, unsealSession, updateSession, useBase, useSession, withBase, writeEarlyHints };
14
+ export { H3, H3Core, H3Error, H3Event, HTTPError, HTTPResponse, appendCorsHeaders, appendCorsPreflightHeaders, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertBodySize, assertMethod, basicAuth, bodyLimit, callMiddleware, clearResponseHeaders, clearSession, createApp, createError, createEventStream, createRouter, defaultContentType, defineEventHandler, defineHandler, defineJsonRpcHandler, defineJsonRpcWebSocketHandler, defineLazyEventHandler, defineMiddleware, defineNodeHandler, defineNodeListener, defineNodeMiddleware, definePlugin, defineRoute, defineValidatedHandler, defineWebSocket, defineWebSocketHandler, deleteChunkedCookie, deleteCookie, dynamicEventHandler, eventHandler, fetchWithEvent, fromNodeHandler, fromNodeMiddleware, fromWebHandler, getBodyStream, getChunkedCookie, getCookie, getEventContext, getHeader, getHeaders, getMethod, getProxyRequestHeaders, getQuery, getRequestFingerprint, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestPath, getRequestProtocol, getRequestURL, getRequestWebStream, getResponseHeader, getResponseHeaders, getResponseStatus, getResponseStatusText, getRouterParam, getRouterParams, getSession, getValidatedCookies, getValidatedQuery, getValidatedRouterParams, handleCacheHeaders, handleCors, html, isCorsOriginAllowed, isError, isEvent, isHTTPEvent, isMethod, isPreflightRequest, iterable, lazyEventHandler, mockEvent, noContent, onError, onRequest, onResponse, parseCookies, proxy, proxyRequest, readBody, readFormData, readFormDataBody, readMultipartFormData, readRawBody, readValidatedBody, redirect, redirectBack, removeResponseHeader, removeRoute, requestWithBaseURL, requestWithURL, requireBasicAuth, sanitizeStatusCode, sanitizeStatusMessage, sealSession, sendIterable, sendNoContent, sendProxy, sendRedirect, sendStream, sendWebResponse, serve, serveStatic, setChunkedCookie, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, setResponseStatus, setServerTiming, toEventHandler, toMiddleware, toNodeHandler, toNodeListener, toRequest, toResponse, toWebHandler, unsealSession, updateSession, useBase, useSession, withBase, withServerTiming, writeEarlyHints };
@@ -1,11 +1,6 @@
1
- import { BasicAuthOptions, CacheConditions, CorsOptions, DynamicEventHandler, ErrorBody, ErrorDetails, ErrorInput, EventHandler, EventHandlerFetch, EventHandlerObject, EventHandlerRequest, EventHandlerResponse, EventHandlerWithFetch, EventStreamMessage, EventStreamOptions, FetchHandler, FetchableObject, H3$1 as H3, H3Config, H3Core$1 as H3Core, H3Error$1 as H3Error, H3Event$1 as H3Event, H3EventContext, H3Plugin, H3Route, H3RouteMeta, HTTPError$1 as HTTPError, HTTPEvent, HTTPHandler, HTTPMethod, HTTPResponse$1 as HTTPResponse, InferEventInput, LazyEventHandler, Middleware, MiddlewareOptions, NodeHandler, NodeMiddleware, PreparedResponse, ProxyOptions, RequestFingerprintOptions, RouteDefinition, RouteOptions, ServeStaticOptions, Session, SessionConfig, SessionData, SessionManager, StaticAssetMeta, TypedServerRequest, WebSocketHooks, WebSocketMessage, WebSocketPeer, appendCorsHeaders$1 as appendCorsHeaders, appendCorsPreflightHeaders$1 as appendCorsPreflightHeaders, appendHeader$1 as appendHeader, appendHeaders$1 as appendHeaders, appendResponseHeader$1 as appendResponseHeader, appendResponseHeaders$1 as appendResponseHeaders, assertMethod$1 as assertMethod, basicAuth$1 as basicAuth, callMiddleware$1 as callMiddleware, clearResponseHeaders$1 as clearResponseHeaders, clearSession$1 as clearSession, createApp$1 as createApp, createError$1 as createError, createEventStream$1 as createEventStream, createRouter$1 as createRouter, defaultContentType$1 as defaultContentType, defineEventHandler$1 as defineEventHandler, defineHandler$1 as defineHandler, defineLazyEventHandler$1 as defineLazyEventHandler, defineMiddleware$1 as defineMiddleware, defineNodeHandler$1 as defineNodeHandler, defineNodeListener$1 as defineNodeListener, defineNodeMiddleware$1 as defineNodeMiddleware, definePlugin$1 as definePlugin, defineRoute$1 as defineRoute, defineValidatedHandler$1 as defineValidatedHandler, defineWebSocket$1 as defineWebSocket, defineWebSocketHandler$1 as defineWebSocketHandler, deleteChunkedCookie$1 as deleteChunkedCookie, deleteCookie$1 as deleteCookie, dynamicEventHandler$1 as dynamicEventHandler, eventHandler$1 as eventHandler, fetchWithEvent$1 as fetchWithEvent, fromNodeHandler$1 as fromNodeHandler, fromNodeMiddleware$1 as fromNodeMiddleware, fromWebHandler$1 as fromWebHandler, getBodyStream$1 as getBodyStream, getChunkedCookie$1 as getChunkedCookie, getCookie$1 as getCookie, getEventContext$1 as getEventContext, getHeader$1 as getHeader, getHeaders$1 as getHeaders, getMethod$1 as getMethod, getProxyRequestHeaders$1 as getProxyRequestHeaders, getQuery$1 as getQuery, getRequestFingerprint$1 as getRequestFingerprint, getRequestHeader$1 as getRequestHeader, getRequestHeaders$1 as getRequestHeaders, getRequestHost$1 as getRequestHost, getRequestIP$1 as getRequestIP, getRequestPath$1 as getRequestPath, getRequestProtocol$1 as getRequestProtocol, getRequestURL$1 as getRequestURL, getRequestWebStream$1 as getRequestWebStream, getResponseHeader$1 as getResponseHeader, getResponseHeaders$1 as getResponseHeaders, getResponseStatus$1 as getResponseStatus, getResponseStatusText$1 as getResponseStatusText, getRouterParam$1 as getRouterParam, getRouterParams$1 as getRouterParams, getSession$1 as getSession, getValidatedQuery$1 as getValidatedQuery, getValidatedRouterParams$1 as getValidatedRouterParams, handleCacheHeaders$1 as handleCacheHeaders, handleCors$1 as handleCors, html$1 as html, isCorsOriginAllowed$1 as isCorsOriginAllowed, isError$1 as isError, isEvent$1 as isEvent, isHTTPEvent$1 as isHTTPEvent, isMethod$1 as isMethod, isPreflightRequest$1 as isPreflightRequest, iterable$1 as iterable, lazyEventHandler$1 as lazyEventHandler, mockEvent$1 as mockEvent, noContent$1 as noContent, onError$1 as onError, onRequest$1 as onRequest, onResponse$1 as onResponse, parseCookies$1 as parseCookies, proxy$1 as proxy, proxyRequest$1 as proxyRequest, readBody$1 as readBody, readFormData$1 as readFormData, readFormDataBody$1 as readFormDataBody, readMultipartFormData$1 as readMultipartFormData, readRawBody$1 as readRawBody, readValidatedBody$1 as readValidatedBody, redirect$1 as redirect, removeResponseHeader$1 as removeResponseHeader, requireBasicAuth$1 as requireBasicAuth, sanitizeStatusCode$1 as sanitizeStatusCode, sanitizeStatusMessage$1 as sanitizeStatusMessage, sealSession$1 as sealSession, sendIterable$1 as sendIterable, sendNoContent$1 as sendNoContent, sendProxy$1 as sendProxy, sendRedirect$1 as sendRedirect, sendStream$1 as sendStream, sendWebResponse$1 as sendWebResponse, serveStatic$1 as serveStatic, setChunkedCookie$1 as setChunkedCookie, setCookie$1 as setCookie, setHeader$1 as setHeader, setHeaders$1 as setHeaders, setResponseHeader$1 as setResponseHeader, setResponseHeaders$1 as setResponseHeaders, setResponseStatus$1 as setResponseStatus, toEventHandler$1 as toEventHandler, toNodeHandler$1 as toNodeHandler, toNodeListener$1 as toNodeListener, toRequest$1 as toRequest, toResponse$1 as toResponse, toWebHandler$1 as toWebHandler, unsealSession$1 as unsealSession, updateSession$1 as updateSession, useBase$1 as useBase, useSession$1 as useSession, withBase$1 as withBase, writeEarlyHints$1 as writeEarlyHints } from "../h3.mjs";
1
+ import { A as FetchHandler, B as SessionConfig, C as DynamicEventHandler, D as EventHandlerRequest, E as EventHandlerObject, F as Middleware, G as sealSession, H as SessionManager, I as TypedServerRequest, J as useSession, K as unsealSession, M as HTTPHandler, N as InferEventInput, O as EventHandlerResponse, P as LazyEventHandler, S as HTTPError, T as EventHandlerFetch, U as clearSession, V as SessionData, W as getSession, _ as RouterContext, a as H3EventContext, b as ErrorDetails, c as H3CoreConfig, d as H3RouteMeta, f as HTTPMethod, g as RouteOptions, h as PreparedResponse, i as HTTPEvent, j as FetchableObject, k as EventHandlerWithFetch, l as H3Plugin, m as MiddlewareOptions, n as H3Core, p as MatchedRoute, q as updateSession, r as H3Event, s as H3Config, t as H3, u as H3Route, v as definePlugin, w as EventHandler, x as ErrorInput, y as ErrorBody, z as Session } from "../h3-D76FUMrE.mjs";
2
+ import { $ as JsonRpcWebSocketMethod, $t as noContent, A as readFormDataBody, An as defineMiddleware, At as createEventStream, B as setHeader, Bn as mockEvent, Bt as readBody, C as getResponseHeader, Cn as defineNodeMiddleware, Ct as handleCacheHeaders, D as isError, Dn as HTTPResponse, Dt as withServerTiming, E as getResponseStatusText, En as toWebHandler, Et as setServerTiming, F as sendNoContent, Fn as dynamicEventHandler, Ft as getValidatedCookies, G as toNodeHandler, Gt as proxy, H as setResponseHeader, Ht as ProxyOptions, I as sendProxy, In as toEventHandler, It as parseCookies, J as JsonRpcError, Jt as onError, K as toNodeListener, Kt as proxyRequest, L as sendRedirect, Ln as getEventContext, Lt as setChunkedCookie, M as readRawBody, Mn as defineHandler, Mt as deleteCookie, N as removeResponseHeader, Nn as defineLazyEventHandler, Nt as getChunkedCookie, O as lazyEventHandler, On as toResponse, Ot as EventStreamMessage, P as sendIterable, Pn as defineValidatedHandler, Pt as getCookie, Q as JsonRpcResponse, Qt as iterable, R as sendStream, Rn as isEvent, Rt as setCookie, S as getRequestWebStream, Sn as defineNodeHandler, St as CacheConditions, T as getResponseStatus, Tn as fromWebHandler, Tt as sanitizeStatusMessage, U as setResponseHeaders, Ut as fetchWithEvent, V as setHeaders, Vt as readValidatedBody, W as setResponseStatus, Wt as getProxyRequestHeaders, X as JsonRpcParams, Xt as onResponse, Y as JsonRpcMethod, Yt as onRequest, Z as JsonRpcRequest, Zt as html, _ as getHeaders, _n as RouteDefinition, _t as isCorsOriginAllowed, a as appendResponseHeaders, an as getRequestHost, at as defineWebSocket, b as getRequestHeaders, bn as NodeHandler, bt as StaticAssetMeta, c as createError, cn as getRequestURL, ct as getRequestFingerprint, d as defineEventHandler, dn as getValidatedQuery, dt as requireBasicAuth, en as redirect, et as defineJsonRpcHandler, f as defineNodeListener, fn as getValidatedRouterParams, ft as CorsOptions, g as getHeader, gn as toRequest, gt as isPreflightRequest, h as getBodyStream, hn as requestWithURL, ht as handleCors, i as appendResponseHeader, in as getQuery, it as WebSocketPeer, j as readMultipartFormData, jn as toMiddleware, jt as deleteChunkedCookie, k as readFormData, kn as callMiddleware, kt as EventStreamOptions, l as createRouter, ln as getRouterParam, lt as BasicAuthOptions, m as fromNodeMiddleware, mn as requestWithBaseURL, mt as appendCorsPreflightHeaders, n as appendHeader, nn as writeEarlyHints, nt as WebSocketHooks, o as clearResponseHeaders, on as getRequestIP, ot as defineWebSocketHandler, p as eventHandler, pn as isMethod, pt as appendCorsHeaders, q as useBase, qt as bodyLimit, r as appendHeaders, rn as assertMethod, rt as WebSocketMessage, s as createApp, sn as getRequestProtocol, st as RequestFingerprintOptions, t as H3Error, tn as redirectBack, tt as defineJsonRpcWebSocketHandler, u as defaultContentType, un as getRouterParams, ut as basicAuth, v as getMethod, vn as defineRoute, vt as withBase, w as getResponseHeaders, wn as fromNodeHandler, wt as sanitizeStatusCode, x as getRequestPath, xn as NodeMiddleware, xt as serveStatic, y as getRequestHeader, yn as removeRoute, yt as ServeStaticOptions, z as sendWebResponse, zn as isHTTPEvent, zt as assertBodySize } from "../h3-DiSMXP1G.mjs";
2
3
  import { Server, ServerOptions } from "srvx";
3
4
 
4
- //#region src/_entries/service-worker.d.ts
5
-
6
- /**
7
- * Serve the H3 app.
8
- */
9
5
  declare function serve(app: H3, options?: Omit<ServerOptions, "fetch">): Server;
10
- //#endregion
11
- export { BasicAuthOptions, CacheConditions, CorsOptions, DynamicEventHandler, ErrorBody, ErrorDetails, ErrorInput, EventHandler, EventHandlerFetch, EventHandlerObject, EventHandlerRequest, EventHandlerResponse, EventHandlerWithFetch, EventStreamMessage, EventStreamOptions, FetchHandler, FetchableObject, H3, H3Config, H3Core, H3Error, H3Event, H3EventContext, H3Plugin, H3Route, H3RouteMeta, HTTPError, HTTPEvent, HTTPHandler, HTTPMethod, HTTPResponse, InferEventInput, LazyEventHandler, Middleware, MiddlewareOptions, NodeHandler, NodeMiddleware, PreparedResponse, ProxyOptions, RequestFingerprintOptions, RouteDefinition, RouteOptions, ServeStaticOptions, Session, SessionConfig, SessionData, SessionManager, StaticAssetMeta, TypedServerRequest, WebSocketHooks, WebSocketMessage, WebSocketPeer, appendCorsHeaders, appendCorsPreflightHeaders, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertMethod, basicAuth, callMiddleware, clearResponseHeaders, clearSession, createApp, createError, createEventStream, createRouter, defaultContentType, defineEventHandler, defineHandler, defineLazyEventHandler, defineMiddleware, defineNodeHandler, defineNodeListener, defineNodeMiddleware, definePlugin, defineRoute, defineValidatedHandler, defineWebSocket, defineWebSocketHandler, deleteChunkedCookie, deleteCookie, dynamicEventHandler, eventHandler, fetchWithEvent, fromNodeHandler, fromNodeMiddleware, fromWebHandler, getBodyStream, getChunkedCookie, getCookie, getEventContext, getHeader, getHeaders, getMethod, getProxyRequestHeaders, getQuery, getRequestFingerprint, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestPath, getRequestProtocol, getRequestURL, getRequestWebStream, getResponseHeader, getResponseHeaders, getResponseStatus, getResponseStatusText, getRouterParam, getRouterParams, getSession, getValidatedQuery, getValidatedRouterParams, handleCacheHeaders, handleCors, html, isCorsOriginAllowed, isError, isEvent, isHTTPEvent, isMethod, isPreflightRequest, iterable, lazyEventHandler, mockEvent, noContent, onError, onRequest, onResponse, parseCookies, proxy, proxyRequest, readBody, readFormData, readFormDataBody, readMultipartFormData, readRawBody, readValidatedBody, redirect, removeResponseHeader, requireBasicAuth, sanitizeStatusCode, sanitizeStatusMessage, sealSession, sendIterable, sendNoContent, sendProxy, sendRedirect, sendStream, sendWebResponse, serve, serveStatic, setChunkedCookie, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, setResponseStatus, toEventHandler, toNodeHandler, toNodeListener, toRequest, toResponse, toWebHandler, unsealSession, updateSession, useBase, useSession, withBase, writeEarlyHints };
6
+ export { BasicAuthOptions, CacheConditions, CorsOptions, DynamicEventHandler, ErrorBody, ErrorDetails, ErrorInput, EventHandler, EventHandlerFetch, EventHandlerObject, EventHandlerRequest, EventHandlerResponse, EventHandlerWithFetch, EventStreamMessage, EventStreamOptions, FetchHandler, FetchableObject, H3, H3Config, H3Core, H3CoreConfig, H3Error, H3Event, H3EventContext, H3Plugin, H3Route, H3RouteMeta, HTTPError, HTTPEvent, HTTPHandler, HTTPMethod, HTTPResponse, InferEventInput, JsonRpcError, JsonRpcMethod, JsonRpcParams, JsonRpcRequest, JsonRpcResponse, JsonRpcWebSocketMethod, LazyEventHandler, MatchedRoute, Middleware, MiddlewareOptions, NodeHandler, NodeMiddleware, PreparedResponse, ProxyOptions, RequestFingerprintOptions, RouteDefinition, RouteOptions, RouterContext, ServeStaticOptions, Session, SessionConfig, SessionData, SessionManager, StaticAssetMeta, TypedServerRequest, WebSocketHooks, WebSocketMessage, WebSocketPeer, appendCorsHeaders, appendCorsPreflightHeaders, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertBodySize, assertMethod, basicAuth, bodyLimit, callMiddleware, clearResponseHeaders, clearSession, createApp, createError, createEventStream, createRouter, defaultContentType, defineEventHandler, defineHandler, defineJsonRpcHandler, defineJsonRpcWebSocketHandler, defineLazyEventHandler, defineMiddleware, defineNodeHandler, defineNodeListener, defineNodeMiddleware, definePlugin, defineRoute, defineValidatedHandler, defineWebSocket, defineWebSocketHandler, deleteChunkedCookie, deleteCookie, dynamicEventHandler, eventHandler, fetchWithEvent, fromNodeHandler, fromNodeMiddleware, fromWebHandler, getBodyStream, getChunkedCookie, getCookie, getEventContext, getHeader, getHeaders, getMethod, getProxyRequestHeaders, getQuery, getRequestFingerprint, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestPath, getRequestProtocol, getRequestURL, getRequestWebStream, getResponseHeader, getResponseHeaders, getResponseStatus, getResponseStatusText, getRouterParam, getRouterParams, getSession, getValidatedCookies, getValidatedQuery, getValidatedRouterParams, handleCacheHeaders, handleCors, html, isCorsOriginAllowed, isError, isEvent, isHTTPEvent, isMethod, isPreflightRequest, iterable, lazyEventHandler, mockEvent, noContent, onError, onRequest, onResponse, parseCookies, proxy, proxyRequest, readBody, readFormData, readFormDataBody, readMultipartFormData, readRawBody, readValidatedBody, redirect, redirectBack, removeResponseHeader, removeRoute, requestWithBaseURL, requestWithURL, requireBasicAuth, sanitizeStatusCode, sanitizeStatusMessage, sealSession, sendIterable, sendNoContent, sendProxy, sendRedirect, sendStream, sendWebResponse, serve, serveStatic, setChunkedCookie, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, setResponseStatus, setServerTiming, toEventHandler, toMiddleware, toNodeHandler, toNodeListener, toRequest, toResponse, toWebHandler, unsealSession, updateSession, useBase, useSession, withBase, withServerTiming, writeEarlyHints };
@@ -1,10 +1,6 @@
1
- import { H3, H3Core, H3Error, H3Event, HTTPError, HTTPResponse, appendCorsHeaders, appendCorsPreflightHeaders, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertMethod, basicAuth, callMiddleware, clearResponseHeaders, clearSession, createApp, createError, createEventStream, createRouter, defaultContentType, defineEventHandler, defineHandler, defineLazyEventHandler, defineMiddleware, defineNodeHandler, defineNodeListener, defineNodeMiddleware, definePlugin, defineRoute, defineValidatedHandler, defineWebSocket, defineWebSocketHandler, deleteChunkedCookie, deleteCookie, dynamicEventHandler, eventHandler, fetchWithEvent, freezeApp, fromNodeHandler, fromNodeMiddleware, fromWebHandler, getBodyStream, getChunkedCookie, getCookie, getEventContext, getHeader, getHeaders, getMethod, getProxyRequestHeaders, getQuery, getRequestFingerprint, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestPath, getRequestProtocol, getRequestURL, getRequestWebStream, getResponseHeader, getResponseHeaders, getResponseStatus, getResponseStatusText, getRouterParam, getRouterParams, getSession, getValidatedQuery, getValidatedRouterParams, handleCacheHeaders, handleCors, html, isCorsOriginAllowed, isError, isEvent, isHTTPEvent, isMethod, isPreflightRequest, iterable, lazyEventHandler, mockEvent, noContent, onError, onRequest, onResponse, parseCookies, proxy, proxyRequest, readBody, readFormData, readFormDataBody, readMultipartFormData, readRawBody, readValidatedBody, redirect, removeResponseHeader, requireBasicAuth, sanitizeStatusCode, sanitizeStatusMessage, sealSession, sendIterable, sendNoContent, sendProxy, sendRedirect, sendStream, sendWebResponse, serveStatic, setChunkedCookie, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, setResponseStatus, toEventHandler, toNodeHandler, toNodeListener, toRequest, toResponse, toWebHandler, unsealSession, updateSession, useBase, useSession, withBase, writeEarlyHints } from "../h3.mjs";
1
+ import { $ as basicAuth, $t as defineLazyEventHandler, A as readFormDataBody, An as freezeApp, At as bodyLimit, B as setHeader, Bt as redirect, C as getResponseHeader, Cn as toMiddleware, Ct as parseCookies, D as isError, Dn as sanitizeStatusCode, Dt as getProxyRequestHeaders, E as getResponseStatusText, En as HTTPError, Et as fetchWithEvent, F as sendNoContent, Ft as readBody, G as toNodeHandler, Gt as defineNodeHandler, H as setResponseHeader, Ht as writeEarlyHints, I as sendProxy, It as readValidatedBody, J as defineJsonRpcHandler, Jt as fromWebHandler, K as toNodeListener, Kt as defineNodeMiddleware, L as sendRedirect, Lt as html, M as readRawBody, Mt as onRequest, N as removeResponseHeader, Nt as onResponse, O as lazyEventHandler, On as sanitizeStatusMessage, Ot as proxy, P as sendIterable, Pt as assertBodySize, Q as getRequestFingerprint, Qt as defineHandler, R as sendStream, Rt as iterable, S as getRequestWebStream, Sn as defineMiddleware, St as getValidatedCookies, T as getResponseStatus, Tn as toResponse, Tt as setCookie, U as setResponseHeaders, Ut as defineRoute, V as setHeaders, Vt as redirectBack, W as setResponseStatus, Wt as removeRoute, X as defineWebSocket, Xt as H3, Y as defineJsonRpcWebSocketHandler, Yt as toWebHandler, Z as defineWebSocketHandler, Zt as H3Core, _ as getHeaders, _n as getEventContext, _t as createEventStream, a as appendResponseHeaders, an as getRequestHost, at as isCorsOriginAllowed, b as getRequestHeaders, bn as mockEvent, bt as getChunkedCookie, c as createError, cn as getRequestURL, ct as sealSession, d as defineEventHandler, dn as getValidatedQuery, dt as useSession, en as defineValidatedHandler, et as requireBasicAuth, f as defineNodeListener, fn as getValidatedRouterParams, ft as withBase, g as getHeader, gn as toRequest, gt as withServerTiming, h as getBodyStream, hn as requestWithURL, ht as setServerTiming, i as appendResponseHeader, in as getQuery, it as isPreflightRequest, j as readMultipartFormData, jt as onError, k as readFormData, kn as H3Event, kt as proxyRequest, l as createRouter, ln as getRouterParam, lt as unsealSession, m as fromNodeMiddleware, mn as requestWithBaseURL, mt as handleCacheHeaders, n as appendHeader, nn as toEventHandler, nt as appendCorsPreflightHeaders, o as clearResponseHeaders, on as getRequestIP, ot as clearSession, p as eventHandler, pn as isMethod, pt as serveStatic, q as useBase, qt as fromNodeHandler, r as appendHeaders, rn as assertMethod, rt as handleCors, s as createApp, sn as getRequestProtocol, st as getSession, t as H3Error, tn as dynamicEventHandler, tt as appendCorsHeaders, u as defaultContentType, un as getRouterParams, ut as updateSession, v as getMethod, vn as isEvent, vt as deleteChunkedCookie, w as getResponseHeaders, wn as HTTPResponse, wt as setChunkedCookie, x as getRequestPath, xn as callMiddleware, xt as getCookie, y as getRequestHeader, yn as isHTTPEvent, yt as deleteCookie, z as sendWebResponse, zt as noContent } from "../h3-CRCltuUf.mjs";
2
+ import { t as definePlugin } from "../h3-DagAgogP.mjs";
2
3
  import { serve as serve$1 } from "srvx/service-worker";
3
-
4
- //#region src/_entries/service-worker.ts
5
- /**
6
- * Serve the H3 app.
7
- */
8
4
  function serve(app, options) {
9
5
  freezeApp(app);
10
6
  return serve$1({
@@ -12,6 +8,4 @@ function serve(app, options) {
12
8
  ...options
13
9
  });
14
10
  }
15
-
16
- //#endregion
17
- export { H3, H3Core, H3Error, H3Event, HTTPError, HTTPResponse, appendCorsHeaders, appendCorsPreflightHeaders, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertMethod, basicAuth, callMiddleware, clearResponseHeaders, clearSession, createApp, createError, createEventStream, createRouter, defaultContentType, defineEventHandler, defineHandler, defineLazyEventHandler, defineMiddleware, defineNodeHandler, defineNodeListener, defineNodeMiddleware, definePlugin, defineRoute, defineValidatedHandler, defineWebSocket, defineWebSocketHandler, deleteChunkedCookie, deleteCookie, dynamicEventHandler, eventHandler, fetchWithEvent, fromNodeHandler, fromNodeMiddleware, fromWebHandler, getBodyStream, getChunkedCookie, getCookie, getEventContext, getHeader, getHeaders, getMethod, getProxyRequestHeaders, getQuery, getRequestFingerprint, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestPath, getRequestProtocol, getRequestURL, getRequestWebStream, getResponseHeader, getResponseHeaders, getResponseStatus, getResponseStatusText, getRouterParam, getRouterParams, getSession, getValidatedQuery, getValidatedRouterParams, handleCacheHeaders, handleCors, html, isCorsOriginAllowed, isError, isEvent, isHTTPEvent, isMethod, isPreflightRequest, iterable, lazyEventHandler, mockEvent, noContent, onError, onRequest, onResponse, parseCookies, proxy, proxyRequest, readBody, readFormData, readFormDataBody, readMultipartFormData, readRawBody, readValidatedBody, redirect, removeResponseHeader, requireBasicAuth, sanitizeStatusCode, sanitizeStatusMessage, sealSession, sendIterable, sendNoContent, sendProxy, sendRedirect, sendStream, sendWebResponse, serve, serveStatic, setChunkedCookie, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, setResponseStatus, toEventHandler, toNodeHandler, toNodeListener, toRequest, toResponse, toWebHandler, unsealSession, updateSession, useBase, useSession, withBase, writeEarlyHints };
11
+ export { H3, H3Core, H3Error, H3Event, HTTPError, HTTPResponse, appendCorsHeaders, appendCorsPreflightHeaders, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertBodySize, assertMethod, basicAuth, bodyLimit, callMiddleware, clearResponseHeaders, clearSession, createApp, createError, createEventStream, createRouter, defaultContentType, defineEventHandler, defineHandler, defineJsonRpcHandler, defineJsonRpcWebSocketHandler, defineLazyEventHandler, defineMiddleware, defineNodeHandler, defineNodeListener, defineNodeMiddleware, definePlugin, defineRoute, defineValidatedHandler, defineWebSocket, defineWebSocketHandler, deleteChunkedCookie, deleteCookie, dynamicEventHandler, eventHandler, fetchWithEvent, fromNodeHandler, fromNodeMiddleware, fromWebHandler, getBodyStream, getChunkedCookie, getCookie, getEventContext, getHeader, getHeaders, getMethod, getProxyRequestHeaders, getQuery, getRequestFingerprint, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestPath, getRequestProtocol, getRequestURL, getRequestWebStream, getResponseHeader, getResponseHeaders, getResponseStatus, getResponseStatusText, getRouterParam, getRouterParams, getSession, getValidatedCookies, getValidatedQuery, getValidatedRouterParams, handleCacheHeaders, handleCors, html, isCorsOriginAllowed, isError, isEvent, isHTTPEvent, isMethod, isPreflightRequest, iterable, lazyEventHandler, mockEvent, noContent, onError, onRequest, onResponse, parseCookies, proxy, proxyRequest, readBody, readFormData, readFormDataBody, readMultipartFormData, readRawBody, readValidatedBody, redirect, redirectBack, removeResponseHeader, removeRoute, requestWithBaseURL, requestWithURL, requireBasicAuth, sanitizeStatusCode, sanitizeStatusMessage, sealSession, sendIterable, sendNoContent, sendProxy, sendRedirect, sendStream, sendWebResponse, serve, serveStatic, setChunkedCookie, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, setResponseStatus, setServerTiming, toEventHandler, toMiddleware, toNodeHandler, toNodeListener, toRequest, toResponse, toWebHandler, unsealSession, updateSession, useBase, useSession, withBase, withServerTiming, writeEarlyHints };
@@ -0,0 +1,117 @@
1
+ # Getting Started
2
+
3
+ > Get started with H3.
4
+
5
+ > [!IMPORTANT]
6
+ > You are currently reading H3 v2 docs. See [v1.h3.dev](https://v1.h3.dev/) for legacy docs.
7
+
8
+ ## Overview
9
+
10
+ ⚡ H3 (short for H(TTP), pronounced as /eɪtʃθriː/, like h-3) is a lightweight, fast, and composable server framework for modern JavaScript runtimes. It is based on web standard primitives such as [Request](https://developer.mozilla.org/en-US/docs/Web/API/Request), [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response), [URL](https://developer.mozilla.org/en-US/docs/Web/API/URL), and [Headers](https://developer.mozilla.org/en-US/docs/Web/API/Headers). You can integrate H3 with any compatible runtime or [mount](/guide/api/h3#h3mount) other web-compatible handlers to H3 with almost no added latency.
11
+
12
+ H3 is designed to be extendable and composable. Instead of providing one big core, you start with a lightweight [H3 instance](/guide/api/h3) and then import built-in, tree-shakable [utilities](/utils) or bring your own for more functionality.
13
+ Composable utilities has several advantages:
14
+
15
+ - The server only includes used code and runs them exactly where is needed.
16
+ - Application size can scale better. Usage of utilities is explicit and clean, with less global impact.
17
+ - H3 is minimally opinionated and won't limit your choices.
18
+ All utilities, share an [H3Event](/guide/api/h3event) context.
19
+
20
+ <read-more></read-more>
21
+
22
+ ## Quick Start
23
+
24
+ > [!TIP]
25
+ > You try H3 online [on ⚡️ Stackblitz ](https://stackblitz.com/github/h3js/h3/tree/main/playground?file=server.mjs).
26
+
27
+ Install `h3` as a dependency:
28
+
29
+ <pm-install></pm-install>
30
+
31
+ Create a new file for server entry:
32
+
33
+ ```ts [server.mjs]
34
+ import { H3, serve } from "h3";
35
+
36
+ const app = new H3().get("/", (event) => "⚡️ Tadaa!");
37
+
38
+ serve(app, { port: 3000 });
39
+ ```
40
+
41
+ Then, run the server using your favorite runtime:
42
+
43
+ <code-group>
44
+
45
+ ```bash [node]
46
+ node --watch ./server.mjs
47
+ ```
48
+
49
+ ```bash [deno]
50
+ deno run -A --watch ./server.mjs
51
+ ```
52
+
53
+ ```bash [bun]
54
+ bun run --watch server.mjs
55
+ ```
56
+ </code-group>
57
+
58
+ And tadaa! We have a web server running locally.
59
+
60
+ ### What Happened?
61
+
62
+ Okay, let's now break down our hello world example.
63
+
64
+ We first created an [H3](/guide/api/h3) app instance using `new H3()`:
65
+
66
+ ```ts
67
+ const app = new H3();
68
+ ```
69
+
70
+ [H3](/guide/api/h3) is a tiny class capable of [matching routes](/guide/basics/routing), [generating responses](/guide/basics/response) and calling [middleware](/guide/basics/middleware) and [global hooks](/guide/api/h3#global-hooks).
71
+
72
+ Then we add a route for handling HTTP GET requests to `/` path.
73
+
74
+ ```ts
75
+ app.get("/", (event) => {
76
+ return { message: "⚡️ Tadaa!" };
77
+ });
78
+ ```
79
+
80
+ <read-more></read-more>
81
+
82
+ We simply returned an object. H3 automatically [converts](/guide/basics/response#response-types) values into web responses.
83
+
84
+ <read-more></read-more>
85
+
86
+ Finally, we use `serve` method to start the server listener. Using `serve` method you can easily start an H3 server in various runtimes.
87
+
88
+ ```js
89
+ serve(app, { port: 3000 });
90
+ ```
91
+
92
+ > [!TIP]
93
+ > The `serve` method is powered by [💥 srvx](https://srvx.h3.dev/), a runtime-agnostic universal server listener based on web standards that works seamlessly with [Deno](https://deno.com/), [Node.js](https://nodejs.org/) and [Bun](https://bun.sh/).
94
+
95
+ We also have [`app.fetch`](/guide/api/h3#h3fetch) which can be directly used to run H3 apps in any web-compatible runtime or even directly called for testing purposes.
96
+
97
+ <read-more></read-more>
98
+
99
+ ```js
100
+ import { H3, serve } from "h3";
101
+
102
+ const app = new H3().get("/", () => "⚡️ Tadaa!");
103
+
104
+ // Test without listening
105
+ const response = await app.request("/");
106
+ console.log(await response.text());
107
+ ```
108
+
109
+ You can directly import `h3` library from CDN alternatively. This method can be used for Bun, Deno and other runtimes such as Cloudflare Workers.
110
+
111
+ ```js
112
+ import { H3 } from "https://esm.sh/h3";
113
+
114
+ const app = new H3().get("/", () => "⚡️ Tadaa!");
115
+
116
+ export const fetch = app.fetch;
117
+ ```
@@ -0,0 +1,68 @@
1
+ # Request Lifecycle
2
+
3
+ > H3 dispatches incoming web requests to final web responses.
4
+
5
+ Below is an overview of what happens in a H3 server from when an HTTP request arrives until a response is generated.
6
+
7
+ ## 1. Incoming Request
8
+
9
+ When An HTTP request is made by Browser or [fetch()](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API), server fetch handler receives a [Request](https://developer.mozilla.org/en-US/docs/Web/API/Request) object.
10
+
11
+ ```mermaid
12
+ %%{init: {'theme':'neutral'}}%%
13
+ flowchart LR
14
+ A1["<code>fetch(request)</code>"] --> A2["<code>server.fetch(request)</code>"]
15
+
16
+ click A2 "/guide/api/h3#h3fetch"
17
+ ```
18
+
19
+ > [!TIP]
20
+ > ​[💥 Srvx](https://srvx.h3.dev) provides unified `server.fetch` interface and adds [Node.js compatibility](https://srvx.h3.dev/guide/node).
21
+
22
+ ## 2. Accept Request
23
+
24
+ H3 Initializes an [`H3Event`](/guide/api/h3event) instance from incoming request, calls [`onRequest`](/guide/api/h3#global-hooks) global hook and finally [`H3.handler`](/guide/api/h3#h3handler) with the initialized event.
25
+
26
+ ```mermaid
27
+ %%{init: {'theme':'neutral'}}%%
28
+ flowchart LR
29
+ B1["<code>new H3Event(request)</code>"] --> B2["<code>onRequest(event)</code>"] --> B3["<code>h3.handler(event)</code>"]
30
+
31
+ click B1 "/guide/api/h3event"
32
+ click B2 "/guide/api/h3#global-hooks"
33
+ click B3 "/guide/api/h3#apphandler"
34
+ ```
35
+
36
+ ## 3. Dispatch Request
37
+
38
+ H3 [matches route](/guide/basics/routing) based on `request.url` and `request.method`, calls global [middleware](/guide/basics/middleware) and finally matched route handler function with event.
39
+
40
+ ```mermaid
41
+ %%{init: {'theme':'neutral'}}%%
42
+ sequenceDiagram
43
+ participant MiddlewareA as Middleware1(event, next)
44
+ participant MiddlewareB as Middleware2(event, next)
45
+ participant Route as RouteHandler(event)
46
+
47
+ MiddlewareA->>+MiddlewareB: await next()
48
+ MiddlewareB->>+Route: await next()
49
+ Route-->>-MiddlewareB: rawBody
50
+ MiddlewareB-->>-MiddlewareA: rawBody
51
+
52
+ ```
53
+
54
+ > [!TIP]
55
+ > 🚀 Internally, H3 uses srvx `FastURL` instead of `new URL(req.url).pathname`.
56
+
57
+ ## 4. Send Response
58
+
59
+ H3 [converts](/guide/basics/response#response-types) returned value and [prepared headers](/guide/basics/response#preparing-response) into a [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response), calls [`onResponse`](/guide/api/h3#global-hooks) global hook and finally returns response back to the server fetch handler.
60
+
61
+ ```mermaid
62
+ %%{init: {'theme':'neutral'}}%%
63
+ flowchart LR
64
+ D1["Returned Value => Response"] --> D2["<code>onResponse(response)</code>"] --> D3["Response"]
65
+
66
+ click D1 "/guide/basics/response"
67
+ click D2 "/guide/api/h3#global-hooks"
68
+ ```
@@ -0,0 +1,92 @@
1
+ # Routing
2
+
3
+ > Each request is matched to one (most specific) route handler.
4
+
5
+ ## Adding Routes
6
+
7
+ You can register route [handlers](/guide/basics/handler) to [H3 instance](/guide/api/h3) using [`H3.on`](/guide/api/h3#h3on), [`H3.[method]`](/guide/api/h3#h3method), or [`H3.all`](/guide/api/h3#h3all).
8
+
9
+ > [!TIP]
10
+ > Router is powered by [🌳 Rou3](https://github.com/h3js/rou3), an ultra-fast and tiny route matcher engine.
11
+
12
+ **Example:** Register a route to match requests to the `/hello` endpoint with HTTP **GET** method.
13
+
14
+ - Using [`H3.[method]`](/guide/api/h3#h3method)
15
+
16
+ ```js
17
+ app.get("/hello", () => "Hello world!");
18
+ ```
19
+
20
+ - Using [`H3.on`](/guide/api/h3#h3on)
21
+
22
+ ```js
23
+ app.on("GET", "/hello", () => "Hello world!");
24
+ ```
25
+
26
+
27
+ You can register multiple event handlers for the same route with different methods:
28
+
29
+ ```js
30
+ app
31
+ .get("/hello", () => "GET Hello world!")
32
+ .post("/hello", () => "POST Hello world!")
33
+ .all("/hello", () => "Any other method!");
34
+ ```
35
+
36
+ You can also use [`H3.all`](/guide/api/h3#h3all) method to register a route accepting any HTTP method:
37
+
38
+ ```js
39
+ app.all("/hello", (event) => `This is a ${event.req.method} request!`);
40
+ ```
41
+
42
+ ## Dynamic Routes
43
+
44
+ You can define dynamic route parameters using `:` prefix:
45
+
46
+ ```js
47
+ // [GET] /hello/Bob => "Hello, Bob!"
48
+ app.get("/hello/:name", (event) => {
49
+ return `Hello, ${event.context.params.name}!`;
50
+ });
51
+ ```
52
+
53
+ Instead of named parameters, you can use `*` for unnamed **optional** parameters:
54
+
55
+ ```js
56
+ app.get("/hello/*", (event) => `Hello!`);
57
+ ```
58
+
59
+ ## Wildcard Routes
60
+
61
+ Adding `/hello/:name` route will match `/hello/world` or `/hello/123`. But it will not match `/hello/foo/bar`.
62
+ When you need to match multiple levels of sub routes, you can use `**` prefix:
63
+
64
+ ```js
65
+ app.get("/hello/**", (event) => `Hello ${event.context.params._}!`);
66
+ ```
67
+
68
+ This will match `/hello`, `/hello/world`, `/hello/123`, `/hello/world/123`, etc.
69
+
70
+ > [!NOTE]
71
+ > Param `_` will store the full wildcard content as a single string.
72
+
73
+ ## Route Meta
74
+
75
+ You can define optional route meta when registering them, accessible from any middleware.
76
+
77
+ ```js
78
+ import { H3 } from "h3";
79
+
80
+ const app = new H3();
81
+
82
+ app.use((event) => {
83
+ console.log(event.context.matchedRoute?.meta); // { auth: true }
84
+ });
85
+
86
+ app.get("/", (event) => "Hi!", { meta: { auth: true } });
87
+ ```
88
+
89
+ <read-more>
90
+
91
+ It is also possible to add route meta when defining them using `defineHandler` object syntax.
92
+ </read-more>
@@ -0,0 +1,97 @@
1
+ # Middleware
2
+
3
+ > Intercept request, response and errors using H3 middleware.
4
+
5
+ > [!IMPORTANT]
6
+ > We recommend using composable utilities whenever possible. Global middleware can complicate application logic, making it less predictable and harder to understand.
7
+
8
+ Global middleware run on each request before route handler and act as wrappers to intercept request, response and errors.
9
+
10
+ <read-more></read-more>
11
+
12
+ You can register global middleware to [app instance](/guide/api/h3) using the [`H3.use`](/guide/api/h3#h3use).
13
+
14
+ **Example:** Register a global middleware that logs every request.
15
+
16
+ ```js
17
+ app.use((event) => {
18
+ console.log(event);
19
+ });
20
+ ```
21
+
22
+ **Example:** Register a global middleware that matches certain requests.
23
+
24
+ ```js
25
+ app.use(
26
+ "/blog/**",
27
+ (event, next) => {
28
+ console.log("[alert] POST request on /blog paths!");
29
+ },
30
+ {
31
+ method: "POST",
32
+ // match: (event) => event.req.method === "POST",
33
+ },
34
+ );
35
+ ```
36
+
37
+ You can register middleware with `next` argument to intercept return values of next middleware and handler.
38
+
39
+ ```js
40
+ app.use(async (event, next) => {
41
+ const rawBody = await next();
42
+ // [intercept response]
43
+ return rawBody;
44
+ });
45
+ ```
46
+
47
+ Example below, always responds with `Middleware 1`.
48
+
49
+ ```js
50
+ app
51
+ .use(() => "Middleware 1")
52
+ .use(() => "Middleware 2")
53
+ .get("/", "Hello");
54
+ ```
55
+
56
+ > [!IMPORTANT]
57
+ > If middleware returns a value other than `undefined` or the result of `next()`, it immediately intercepts request handling and sends a response.
58
+
59
+ When adding routes, you can register middleware that only run with them.
60
+
61
+ ```js
62
+ import { basicAuth } from "h3";
63
+
64
+ app.get(
65
+ "/secret",
66
+ (event) => {
67
+ /* ... */
68
+ },
69
+ {
70
+ middleware: [basicAuth({ password: "test" })],
71
+ },
72
+ );
73
+ ```
74
+
75
+ For convenience, H3 provides middleware factory functions `onRequest`, `onResponse`, and `onError`:
76
+
77
+ ```js
78
+ import { onRequest, onResponse, onError } from "h3";
79
+
80
+ app.use(
81
+ onRequest((event) => {
82
+ console.log(`[${event.req.method}] ${event.url.pathname}`);
83
+ }),
84
+ );
85
+
86
+ app.use(
87
+ onResponse((response, event) => {
88
+ console.log(`[${event.req.method}] ${event.url.pathname} ~>`, response.status);
89
+ }),
90
+ );
91
+
92
+ app.use(
93
+ onError((error, event) => {
94
+ console.log(`[${event.req.method}] ${event.url.pathname} !! ${error.message}`);
95
+ }),
96
+ );
97
+ ```