[{"data":1,"prerenderedAt":826},["ShallowReactive",2],{"navigation":3,"-utils-more":189,"-utils-more-surround":821},[4,91,138,166,173],{"title":5,"path":6,"stem":7,"children":8,"icon":90},"Guide","/guide","1.guide/0.index",[9,12,53,69],{"title":10,"path":6,"stem":7,"icon":11},"Getting Started","pixel:play",{"title":5,"icon":13,"path":14,"stem":15,"children":16,"page":52},"ph:book-open-duotone","/guide/basics","1.guide/1.basics",[17,22,27,32,37,42,47],{"title":18,"path":19,"stem":20,"icon":21},"Request Lifecycle","/guide/basics/lifecycle","1.guide/1.basics/1.lifecycle","icon-park-outline:handle-round",{"title":23,"path":24,"stem":25,"icon":26},"Routing","/guide/basics/routing","1.guide/1.basics/2.routing","solar:routing-bold",{"title":28,"path":29,"stem":30,"icon":31},"Middleware","/guide/basics/middleware","1.guide/1.basics/3.middleware","mdi:middleware-outline",{"title":33,"path":34,"stem":35,"icon":36},"Event Handlers","/guide/basics/handler","1.guide/1.basics/4.handler","mdi:function",{"title":38,"path":39,"stem":40,"icon":41},"Sending Response","/guide/basics/response","1.guide/1.basics/5.response","tabler:json",{"title":43,"path":44,"stem":45,"icon":46},"Error Handling","/guide/basics/error","1.guide/1.basics/6.error","tabler:error-404",{"title":48,"path":49,"stem":50,"icon":51},"Nested Apps","/guide/basics/nested-apps","1.guide/1.basics/7.nested-apps","material-symbols-light:layers-outline",false,{"title":54,"icon":55,"path":56,"stem":57,"children":58,"page":52},"API","material-symbols-light:api-rounded","/guide/api","1.guide/900.api",[59,64],{"title":60,"path":61,"stem":62,"icon":63},"H3","/guide/api/h3","1.guide/900.api/1.h3","material-symbols:bolt-rounded",{"title":65,"path":66,"stem":67,"icon":68},"H3Event","/guide/api/h3event","1.guide/900.api/2.h3event","material-symbols:data-object-rounded",{"title":70,"icon":71,"path":72,"stem":73,"children":74,"page":52},"Advanced","hugeicons:more-01","/guide/advanced","1.guide/901.advanced",[75,80,85],{"title":76,"path":77,"stem":78,"icon":79},"Plugins","/guide/advanced/plugins","1.guide/901.advanced/1.plugins","clarity:plugin-line",{"title":81,"path":82,"stem":83,"icon":84},"WebSockets","/guide/advanced/websocket","1.guide/901.advanced/2.websocket","hugeicons:live-streaming-02",{"title":86,"path":87,"stem":88,"icon":89},"Nightly Builds","/guide/advanced/nightly","1.guide/901.advanced/9.nightly","game-icons:barn-owl","i-ph:book-open-duotone",{"title":92,"path":93,"stem":94,"children":95,"icon":97},"Utils","/utils","2.utils/0.index",[96,98,103,108,113,118,123,128,133],{"title":92,"path":93,"stem":94,"icon":97},"ph:function-bold",{"title":99,"path":100,"stem":101,"icon":102},"Request","/utils/request","2.utils/1.request","material-symbols-light:input",{"title":104,"path":105,"stem":106,"icon":107},"Response","/utils/response","2.utils/2.response","material-symbols-light:output",{"title":109,"path":110,"stem":111,"icon":112},"Cookie","/utils/cookie","2.utils/3.cookie","material-symbols:cookie-outline",{"title":114,"path":115,"stem":116,"icon":117},"Security","/utils/security","2.utils/4.security","wpf:key-security",{"title":119,"path":120,"stem":121,"icon":122},"Proxy","/utils/proxy","2.utils/5.proxy","arcticons:super-proxy",{"title":124,"path":125,"stem":126,"icon":127},"MCP","/utils/mcp","2.utils/6.mcp","material-symbols:swap-calls",{"title":129,"path":130,"stem":131,"icon":132},"More utils","/utils/more","2.utils/9.more","mingcute:plus-line",{"title":134,"path":135,"stem":136,"icon":137},"Community","/utils/community","2.utils/99.community","lets-icons:external",{"title":139,"path":140,"stem":141,"children":142,"icon":144},"Examples","/examples","4.examples/0.index",[143,145,150,154,158,162],{"title":139,"path":140,"stem":141,"icon":144},"ph:code",{"title":146,"path":147,"stem":148,"icon":149},"Cookies","/examples/handle-cookie","4.examples/handle-cookie","ph:arrow-right",{"title":151,"path":152,"stem":153,"icon":149},"Sessions","/examples/handle-session","4.examples/handle-session",{"title":155,"path":156,"stem":157,"icon":149},"Static Assets","/examples/serve-static-assets","4.examples/serve-static-assets",{"title":159,"path":160,"stem":161,"icon":149},"Stream Response","/examples/stream-response","4.examples/stream-response",{"title":163,"path":164,"stem":165,"icon":149},"Validate Data","/examples/validate-data","4.examples/validate-data",{"title":167,"path":168,"stem":169,"children":170,"icon":172},"Migration","/migration","5.migration/0.index",[171],{"title":167,"path":168,"stem":169,"icon":172},"icons8:up-round",{"title":174,"path":175,"stem":176,"children":177},"Blog","/blog","99.blog",[178,181,185],{"title":174,"path":175,"stem":179,"icon":180},"99.blog/index","i-lucide-file-text",{"title":182,"path":183,"stem":184,"icon":180},"H3 1.8 - Towards the Edge of the Web","/blog/v1.8","99.blog/1.v1.8",{"title":186,"path":187,"stem":188,"icon":180},"H3 v2 beta","/blog/v2-beta","99.blog/2.v2-beta",{"id":190,"title":129,"body":191,"description":814,"extension":815,"meta":816,"navigation":818,"path":130,"seo":819,"stem":131,"__hash__":820},"content/2.utils/9.more.md",{"type":192,"value":193,"toc":787,"icon":132},"minimark",[194,199,207,211,217,325,329,335,342,348,351,357,364,370,373,379,382,393,399,402,405,411,414,420,423,426,430,436,439,443,558,564,567,581,591,595,669,673,755,759,765,771,777,783],[195,196,198],"h2",{"id":197},"base","Base",[200,201,203],"h3",{"id":202},"withbasebase-input",[204,205,206],"code",{},"withBase(base, input)",[208,209,210],"p",{},"Returns a new event handler that removes the base url of the event before calling the original handler.",[208,212,213],{},[214,215,216],"strong",{},"Example:",[218,219,224],"pre",{"className":220,"code":221,"language":222,"meta":223,"style":223},"language-ts shiki shiki-themes github-light github-dark github-dark","const api = new H3()\n .get(\"/\", () => \"Hello API!\");\nconst app = new H3();\n .use(\"/api/**\", withBase(\"/api\", api.handler));\n","ts","",[204,225,226,253,281,298],{"__ignoreMap":223},[227,228,231,235,239,242,245,249],"span",{"class":229,"line":230},"line",1,[227,232,234],{"class":233},"so5gQ","const",[227,236,238],{"class":237},"suiK_"," api",[227,240,241],{"class":233}," =",[227,243,244],{"class":233}," new",[227,246,248],{"class":247},"shcOC"," H3",[227,250,252],{"class":251},"slsVL","()\n",[227,254,256,259,262,265,269,272,275,278],{"class":229,"line":255},2,[227,257,258],{"class":251}," .",[227,260,261],{"class":247},"get",[227,263,264],{"class":251},"(",[227,266,268],{"class":267},"sfrk1","\"/\"",[227,270,271],{"class":251},", () ",[227,273,274],{"class":233},"=>",[227,276,277],{"class":267}," \"Hello API!\"",[227,279,280],{"class":251},");\n",[227,282,284,286,289,291,293,295],{"class":229,"line":283},3,[227,285,234],{"class":233},[227,287,288],{"class":237}," app",[227,290,241],{"class":233},[227,292,244],{"class":233},[227,294,248],{"class":247},[227,296,297],{"class":251},"();\n",[227,299,301,303,306,308,311,314,317,319,322],{"class":229,"line":300},4,[227,302,258],{"class":251},[227,304,305],{"class":247},"use",[227,307,264],{"class":251},[227,309,310],{"class":267},"\"/api/**\"",[227,312,313],{"class":251},", ",[227,315,316],{"class":247},"withBase",[227,318,264],{"class":251},[227,320,321],{"class":267},"\"/api\"",[227,323,324],{"class":251},", api.handler));\n",[195,326,328],{"id":327},"event","Event",[200,330,332],{"id":331},"geteventcontextevent",[204,333,334],{},"getEventContext(event)",[208,336,337,338,341],{},"Gets the context of the event, if it does not exists, initializes a new context on ",[204,339,340],{},"req.context",".",[200,343,345],{"id":344},"iseventinput",[204,346,347],{},"isEvent(input)",[208,349,350],{},"Checks if the input is an H3Event object.",[200,352,354],{"id":353},"ishttpeventinput",[204,355,356],{},"isHTTPEvent(input)",[208,358,359,360,363],{},"Checks if the input is an object with ",[204,361,362],{},"{ req: Request }"," signature.",[200,365,367],{"id":366},"mockevent_request-options",[204,368,369],{},"mockEvent(_request, options?)",[195,371,28],{"id":372},"middleware",[200,374,376],{"id":375},"bodylimitlimit",[204,377,378],{},"bodyLimit(limit)",[208,380,381],{},"Define a middleware that checks whether request body size is within specified limit.",[208,383,384,385,388,389,392],{},"If body size exceeds the limit, throws a ",[204,386,387],{},"413"," Request Entity Too Large response error. If you need custom handling for this case, use ",[204,390,391],{},"assertBodySize"," instead.",[200,394,396],{"id":395},"onerrorhook",[204,397,398],{},"onError(hook)",[208,400,401],{},"Define a middleware that runs when an error occurs.",[208,403,404],{},"You can return a new Response from the handler to gracefully handle the error.",[200,406,408],{"id":407},"onrequesthook",[204,409,410],{},"onRequest(hook)",[208,412,413],{},"Define a middleware that runs on each request.",[200,415,417],{"id":416},"onresponsehook",[204,418,419],{},"onResponse(hook)",[208,421,422],{},"Define a middleware that runs after Response is generated.",[208,424,425],{},"You can return a new Response from the handler to replace the original response.",[195,427,429],{"id":428},"websocket","WebSocket",[200,431,433],{"id":432},"definewebsockethooks",[204,434,435],{},"defineWebSocket(hooks)",[208,437,438],{},"Define WebSocket hooks.",[208,440,441],{},[214,442,216],{},[218,444,446],{"className":220,"code":445,"language":222,"meta":223,"style":223},"const hooks = defineWebSocket({\n  open: (peer) => peer.send(\"Welcome!\"),\n  message: (peer, message) => peer.send(message.text()),\n  close: (peer) => console.log(\"closed\", peer),\n});\n",[204,447,448,463,494,525,552],{"__ignoreMap":223},[227,449,450,452,455,457,460],{"class":229,"line":230},[227,451,234],{"class":233},[227,453,454],{"class":237}," hooks",[227,456,241],{"class":233},[227,458,459],{"class":247}," defineWebSocket",[227,461,462],{"class":251},"({\n",[227,464,465,468,471,475,478,480,483,486,488,491],{"class":229,"line":255},[227,466,467],{"class":247},"  open",[227,469,470],{"class":251},": (",[227,472,474],{"class":473},"sQHwn","peer",[227,476,477],{"class":251},") ",[227,479,274],{"class":233},[227,481,482],{"class":251}," peer.",[227,484,485],{"class":247},"send",[227,487,264],{"class":251},[227,489,490],{"class":267},"\"Welcome!\"",[227,492,493],{"class":251},"),\n",[227,495,496,499,501,503,505,508,510,512,514,516,519,522],{"class":229,"line":283},[227,497,498],{"class":247},"  message",[227,500,470],{"class":251},[227,502,474],{"class":473},[227,504,313],{"class":251},[227,506,507],{"class":473},"message",[227,509,477],{"class":251},[227,511,274],{"class":233},[227,513,482],{"class":251},[227,515,485],{"class":247},[227,517,518],{"class":251},"(message.",[227,520,521],{"class":247},"text",[227,523,524],{"class":251},"()),\n",[227,526,527,530,532,534,536,538,541,544,546,549],{"class":229,"line":300},[227,528,529],{"class":247},"  close",[227,531,470],{"class":251},[227,533,474],{"class":473},[227,535,477],{"class":251},[227,537,274],{"class":233},[227,539,540],{"class":251}," console.",[227,542,543],{"class":247},"log",[227,545,264],{"class":251},[227,547,548],{"class":267},"\"closed\"",[227,550,551],{"class":251},", peer),\n",[227,553,555],{"class":229,"line":554},5,[227,556,557],{"class":251},"});\n",[200,559,561],{"id":560},"definewebsockethandlerhttp",[204,562,563],{},"defineWebSocketHandler(http?)",[208,565,566],{},"Define WebSocket event handler.",[208,568,569,570,573,574,577,578,341],{},"By default, non-upgrade (plain HTTP) requests receive a ",[204,571,572],{},"426 Upgrade Required"," response. Pass an ",[204,575,576],{},"http"," handler to serve those requests instead, allowing the same route to handle both WebSocket upgrades and regular HTTP requests. WebSocket upgrade requests always go to ",[204,579,580],{},"hooks",[208,582,583,584,586,587,590],{},"Note: the ",[204,585,576],{}," handler only handles non-upgrade requests. To reject or customize the upgrade handshake itself, use the crossws ",[204,588,589],{},"upgrade"," hook instead.",[208,592,593],{},[214,594,216],{},[218,596,598],{"className":220,"code":597,"language":222,"meta":223,"style":223},"// WebSocket-only route (non-upgrade requests get `426 Upgrade Required`)\napp.get(\n  \"/_ws\",\n  defineWebSocketHandler({\n    message: (peer, message) => peer.send(message.text()),\n  }),\n);\n",[204,599,600,606,616,624,631,658,664],{"__ignoreMap":223},[227,601,602],{"class":229,"line":230},[227,603,605],{"class":604},"sCsY4","// WebSocket-only route (non-upgrade requests get `426 Upgrade Required`)\n",[227,607,608,611,613],{"class":229,"line":255},[227,609,610],{"class":251},"app.",[227,612,261],{"class":247},[227,614,615],{"class":251},"(\n",[227,617,618,621],{"class":229,"line":283},[227,619,620],{"class":267},"  \"/_ws\"",[227,622,623],{"class":251},",\n",[227,625,626,629],{"class":229,"line":300},[227,627,628],{"class":247},"  defineWebSocketHandler",[227,630,462],{"class":251},[227,632,633,636,638,640,642,644,646,648,650,652,654,656],{"class":229,"line":554},[227,634,635],{"class":247},"    message",[227,637,470],{"class":251},[227,639,474],{"class":473},[227,641,313],{"class":251},[227,643,507],{"class":473},[227,645,477],{"class":251},[227,647,274],{"class":233},[227,649,482],{"class":251},[227,651,485],{"class":247},[227,653,518],{"class":251},[227,655,521],{"class":247},[227,657,524],{"class":251},[227,659,661],{"class":229,"line":660},6,[227,662,663],{"class":251},"  }),\n",[227,665,667],{"class":229,"line":666},7,[227,668,280],{"class":251},[208,670,671],{},[214,672,216],{},[218,674,676],{"className":220,"code":675,"language":222,"meta":223,"style":223},"// Handle both WebSocket upgrades and plain HTTP on the same route\napp.get(\n  \"/_ws\",\n  defineWebSocketHandler(\n    { message: (peer, message) => peer.send(message.text()) },\n    () => \"Send a WebSocket upgrade request to connect.\",\n  ),\n);\n",[204,677,678,683,691,697,703,733,745,750],{"__ignoreMap":223},[227,679,680],{"class":229,"line":230},[227,681,682],{"class":604},"// Handle both WebSocket upgrades and plain HTTP on the same route\n",[227,684,685,687,689],{"class":229,"line":255},[227,686,610],{"class":251},[227,688,261],{"class":247},[227,690,615],{"class":251},[227,692,693,695],{"class":229,"line":283},[227,694,620],{"class":267},[227,696,623],{"class":251},[227,698,699,701],{"class":229,"line":300},[227,700,628],{"class":247},[227,702,615],{"class":251},[227,704,705,708,710,712,714,716,718,720,722,724,726,728,730],{"class":229,"line":554},[227,706,707],{"class":251},"    { ",[227,709,507],{"class":247},[227,711,470],{"class":251},[227,713,474],{"class":473},[227,715,313],{"class":251},[227,717,507],{"class":473},[227,719,477],{"class":251},[227,721,274],{"class":233},[227,723,482],{"class":251},[227,725,485],{"class":247},[227,727,518],{"class":251},[227,729,521],{"class":247},[227,731,732],{"class":251},"()) },\n",[227,734,735,738,740,743],{"class":229,"line":660},[227,736,737],{"class":251},"    () ",[227,739,274],{"class":233},[227,741,742],{"class":267}," \"Send a WebSocket upgrade request to connect.\"",[227,744,623],{"class":251},[227,746,747],{"class":229,"line":666},[227,748,749],{"class":251},"  ),\n",[227,751,753],{"class":229,"line":752},8,[227,754,280],{"class":251},[195,756,758],{"id":757},"adapters","Adapters",[200,760,762],{"id":761},"definenodehandlerhandler",[204,763,764],{},"defineNodeHandler(handler)",[200,766,768],{"id":767},"definenodemiddlewarehandler",[204,769,770],{},"defineNodeMiddleware(handler)",[200,772,774],{"id":773},"fromnodehandlerhandler",[204,775,776],{},"fromNodeHandler(handler)",[200,778,780],{"id":779},"fromwebhandlerhandler",[204,781,782],{},"fromWebHandler(handler)",[784,785,786],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":223,"searchDepth":255,"depth":255,"links":788},[789,792,798,804,808],{"id":197,"depth":255,"text":198,"children":790},[791],{"id":202,"depth":283,"text":206},{"id":327,"depth":255,"text":328,"children":793},[794,795,796,797],{"id":331,"depth":283,"text":334},{"id":344,"depth":283,"text":347},{"id":353,"depth":283,"text":356},{"id":366,"depth":283,"text":369},{"id":372,"depth":255,"text":28,"children":799},[800,801,802,803],{"id":375,"depth":283,"text":378},{"id":395,"depth":283,"text":398},{"id":407,"depth":283,"text":410},{"id":416,"depth":283,"text":419},{"id":428,"depth":255,"text":429,"children":805},[806,807],{"id":432,"depth":283,"text":435},{"id":560,"depth":283,"text":563},{"id":757,"depth":255,"text":758,"children":809},[810,811,812,813],{"id":761,"depth":283,"text":764},{"id":767,"depth":283,"text":770},{"id":773,"depth":283,"text":776},{"id":779,"depth":283,"text":782},"More H3 utilities.","md",{"automd":817,"icon":132},true,{"icon":132},{"title":129,"description":814},"U6aSUyh-MNLHYqdK74K4WjzGQOhvycTCFfj-KI_GmlQ",[822,824],{"title":124,"path":125,"stem":126,"description":823,"icon":127,"children":-1},"H3 MCP related utils.",{"title":134,"path":135,"stem":136,"description":825,"icon":137,"children":-1},"H3 utils from community.",1783115412126]