[{"data":1,"prerenderedAt":830},["ShallowReactive",2],{"navigation":3,"-utils-more":193,"-utils-more-surround":825},[4,91,138,170,177],{"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,166],{"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},"HTTP QUERY Method","/examples/handle-query","4.examples/handle-query",{"title":155,"path":156,"stem":157,"icon":149},"Sessions","/examples/handle-session","4.examples/handle-session",{"title":159,"path":160,"stem":161,"icon":149},"Static Assets","/examples/serve-static-assets","4.examples/serve-static-assets",{"title":163,"path":164,"stem":165,"icon":149},"Stream Response","/examples/stream-response","4.examples/stream-response",{"title":167,"path":168,"stem":169,"icon":149},"Validate Data","/examples/validate-data","4.examples/validate-data",{"title":171,"path":172,"stem":173,"children":174,"icon":176},"Migration","/migration","5.migration/0.index",[175],{"title":171,"path":172,"stem":173,"icon":176},"icons8:up-round",{"title":178,"path":179,"stem":180,"children":181},"Blog","/blog","99.blog",[182,185,189],{"title":178,"path":179,"stem":183,"icon":184},"99.blog/index","i-lucide-file-text",{"title":186,"path":187,"stem":188,"icon":184},"H3 1.8 - Towards the Edge of the Web","/blog/v1.8","99.blog/1.v1.8",{"title":190,"path":191,"stem":192,"icon":184},"H3 v2 beta","/blog/v2-beta","99.blog/2.v2-beta",{"id":194,"title":129,"body":195,"description":818,"extension":819,"meta":820,"navigation":822,"path":130,"seo":823,"stem":131,"__hash__":824},"content/2.utils/9.more.md",{"type":196,"value":197,"toc":791,"icon":132},"minimark",[198,203,211,215,221,329,333,339,346,352,355,361,368,374,377,383,386,397,403,406,409,415,418,424,427,430,434,440,443,447,562,568,571,585,595,599,673,677,759,763,769,775,781,787],[199,200,202],"h2",{"id":201},"base","Base",[204,205,207],"h3",{"id":206},"withbasebase-input",[208,209,210],"code",{},"withBase(base, input)",[212,213,214],"p",{},"Returns a new event handler that removes the base url of the event before calling the original handler.",[212,216,217],{},[218,219,220],"strong",{},"Example:",[222,223,228],"pre",{"className":224,"code":225,"language":226,"meta":227,"style":227},"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","",[208,229,230,257,285,302],{"__ignoreMap":227},[231,232,235,239,243,246,249,253],"span",{"class":233,"line":234},"line",1,[231,236,238],{"class":237},"so5gQ","const",[231,240,242],{"class":241},"suiK_"," api",[231,244,245],{"class":237}," =",[231,247,248],{"class":237}," new",[231,250,252],{"class":251},"shcOC"," H3",[231,254,256],{"class":255},"slsVL","()\n",[231,258,260,263,266,269,273,276,279,282],{"class":233,"line":259},2,[231,261,262],{"class":255}," .",[231,264,265],{"class":251},"get",[231,267,268],{"class":255},"(",[231,270,272],{"class":271},"sfrk1","\"/\"",[231,274,275],{"class":255},", () ",[231,277,278],{"class":237},"=>",[231,280,281],{"class":271}," \"Hello API!\"",[231,283,284],{"class":255},");\n",[231,286,288,290,293,295,297,299],{"class":233,"line":287},3,[231,289,238],{"class":237},[231,291,292],{"class":241}," app",[231,294,245],{"class":237},[231,296,248],{"class":237},[231,298,252],{"class":251},[231,300,301],{"class":255},"();\n",[231,303,305,307,310,312,315,318,321,323,326],{"class":233,"line":304},4,[231,306,262],{"class":255},[231,308,309],{"class":251},"use",[231,311,268],{"class":255},[231,313,314],{"class":271},"\"/api/**\"",[231,316,317],{"class":255},", ",[231,319,320],{"class":251},"withBase",[231,322,268],{"class":255},[231,324,325],{"class":271},"\"/api\"",[231,327,328],{"class":255},", api.handler));\n",[199,330,332],{"id":331},"event","Event",[204,334,336],{"id":335},"geteventcontextevent",[208,337,338],{},"getEventContext(event)",[212,340,341,342,345],{},"Gets the context of the event, if it does not exists, initializes a new context on ",[208,343,344],{},"req.context",".",[204,347,349],{"id":348},"iseventinput",[208,350,351],{},"isEvent(input)",[212,353,354],{},"Checks if the input is an H3Event object.",[204,356,358],{"id":357},"ishttpeventinput",[208,359,360],{},"isHTTPEvent(input)",[212,362,363,364,367],{},"Checks if the input is an object with ",[208,365,366],{},"{ req: Request }"," signature.",[204,369,371],{"id":370},"mockevent_request-options",[208,372,373],{},"mockEvent(_request, options?)",[199,375,28],{"id":376},"middleware",[204,378,380],{"id":379},"bodylimitlimit",[208,381,382],{},"bodyLimit(limit)",[212,384,385],{},"Define a middleware that checks whether request body size is within specified limit.",[212,387,388,389,392,393,396],{},"If body size exceeds the limit, throws a ",[208,390,391],{},"413"," Request Entity Too Large response error. If you need custom handling for this case, use ",[208,394,395],{},"assertBodySize"," instead.",[204,398,400],{"id":399},"onerrorhook",[208,401,402],{},"onError(hook)",[212,404,405],{},"Define a middleware that runs when an error occurs.",[212,407,408],{},"You can return a new Response from the handler to gracefully handle the error.",[204,410,412],{"id":411},"onrequesthook",[208,413,414],{},"onRequest(hook)",[212,416,417],{},"Define a middleware that runs on each request.",[204,419,421],{"id":420},"onresponsehook",[208,422,423],{},"onResponse(hook)",[212,425,426],{},"Define a middleware that runs after Response is generated.",[212,428,429],{},"You can return a new Response from the handler to replace the original response.",[199,431,433],{"id":432},"websocket","WebSocket",[204,435,437],{"id":436},"definewebsockethooks",[208,438,439],{},"defineWebSocket(hooks)",[212,441,442],{},"Define WebSocket hooks.",[212,444,445],{},[218,446,220],{},[222,448,450],{"className":224,"code":449,"language":226,"meta":227,"style":227},"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",[208,451,452,467,498,529,556],{"__ignoreMap":227},[231,453,454,456,459,461,464],{"class":233,"line":234},[231,455,238],{"class":237},[231,457,458],{"class":241}," hooks",[231,460,245],{"class":237},[231,462,463],{"class":251}," defineWebSocket",[231,465,466],{"class":255},"({\n",[231,468,469,472,475,479,482,484,487,490,492,495],{"class":233,"line":259},[231,470,471],{"class":251},"  open",[231,473,474],{"class":255},": (",[231,476,478],{"class":477},"sQHwn","peer",[231,480,481],{"class":255},") ",[231,483,278],{"class":237},[231,485,486],{"class":255}," peer.",[231,488,489],{"class":251},"send",[231,491,268],{"class":255},[231,493,494],{"class":271},"\"Welcome!\"",[231,496,497],{"class":255},"),\n",[231,499,500,503,505,507,509,512,514,516,518,520,523,526],{"class":233,"line":287},[231,501,502],{"class":251},"  message",[231,504,474],{"class":255},[231,506,478],{"class":477},[231,508,317],{"class":255},[231,510,511],{"class":477},"message",[231,513,481],{"class":255},[231,515,278],{"class":237},[231,517,486],{"class":255},[231,519,489],{"class":251},[231,521,522],{"class":255},"(message.",[231,524,525],{"class":251},"text",[231,527,528],{"class":255},"()),\n",[231,530,531,534,536,538,540,542,545,548,550,553],{"class":233,"line":304},[231,532,533],{"class":251},"  close",[231,535,474],{"class":255},[231,537,478],{"class":477},[231,539,481],{"class":255},[231,541,278],{"class":237},[231,543,544],{"class":255}," console.",[231,546,547],{"class":251},"log",[231,549,268],{"class":255},[231,551,552],{"class":271},"\"closed\"",[231,554,555],{"class":255},", peer),\n",[231,557,559],{"class":233,"line":558},5,[231,560,561],{"class":255},"});\n",[204,563,565],{"id":564},"definewebsockethandlerhttp",[208,566,567],{},"defineWebSocketHandler(http?)",[212,569,570],{},"Define WebSocket event handler.",[212,572,573,574,577,578,581,582,345],{},"By default, non-upgrade (plain HTTP) requests receive a ",[208,575,576],{},"426 Upgrade Required"," response. Pass an ",[208,579,580],{},"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 ",[208,583,584],{},"hooks",[212,586,587,588,590,591,594],{},"Note: the ",[208,589,580],{}," handler only handles non-upgrade requests. To reject or customize the upgrade handshake itself, use the crossws ",[208,592,593],{},"upgrade"," hook instead.",[212,596,597],{},[218,598,220],{},[222,600,602],{"className":224,"code":601,"language":226,"meta":227,"style":227},"// 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",[208,603,604,610,620,628,635,662,668],{"__ignoreMap":227},[231,605,606],{"class":233,"line":234},[231,607,609],{"class":608},"sCsY4","// WebSocket-only route (non-upgrade requests get `426 Upgrade Required`)\n",[231,611,612,615,617],{"class":233,"line":259},[231,613,614],{"class":255},"app.",[231,616,265],{"class":251},[231,618,619],{"class":255},"(\n",[231,621,622,625],{"class":233,"line":287},[231,623,624],{"class":271},"  \"/_ws\"",[231,626,627],{"class":255},",\n",[231,629,630,633],{"class":233,"line":304},[231,631,632],{"class":251},"  defineWebSocketHandler",[231,634,466],{"class":255},[231,636,637,640,642,644,646,648,650,652,654,656,658,660],{"class":233,"line":558},[231,638,639],{"class":251},"    message",[231,641,474],{"class":255},[231,643,478],{"class":477},[231,645,317],{"class":255},[231,647,511],{"class":477},[231,649,481],{"class":255},[231,651,278],{"class":237},[231,653,486],{"class":255},[231,655,489],{"class":251},[231,657,522],{"class":255},[231,659,525],{"class":251},[231,661,528],{"class":255},[231,663,665],{"class":233,"line":664},6,[231,666,667],{"class":255},"  }),\n",[231,669,671],{"class":233,"line":670},7,[231,672,284],{"class":255},[212,674,675],{},[218,676,220],{},[222,678,680],{"className":224,"code":679,"language":226,"meta":227,"style":227},"// 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",[208,681,682,687,695,701,707,737,749,754],{"__ignoreMap":227},[231,683,684],{"class":233,"line":234},[231,685,686],{"class":608},"// Handle both WebSocket upgrades and plain HTTP on the same route\n",[231,688,689,691,693],{"class":233,"line":259},[231,690,614],{"class":255},[231,692,265],{"class":251},[231,694,619],{"class":255},[231,696,697,699],{"class":233,"line":287},[231,698,624],{"class":271},[231,700,627],{"class":255},[231,702,703,705],{"class":233,"line":304},[231,704,632],{"class":251},[231,706,619],{"class":255},[231,708,709,712,714,716,718,720,722,724,726,728,730,732,734],{"class":233,"line":558},[231,710,711],{"class":255},"    { ",[231,713,511],{"class":251},[231,715,474],{"class":255},[231,717,478],{"class":477},[231,719,317],{"class":255},[231,721,511],{"class":477},[231,723,481],{"class":255},[231,725,278],{"class":237},[231,727,486],{"class":255},[231,729,489],{"class":251},[231,731,522],{"class":255},[231,733,525],{"class":251},[231,735,736],{"class":255},"()) },\n",[231,738,739,742,744,747],{"class":233,"line":664},[231,740,741],{"class":255},"    () ",[231,743,278],{"class":237},[231,745,746],{"class":271}," \"Send a WebSocket upgrade request to connect.\"",[231,748,627],{"class":255},[231,750,751],{"class":233,"line":670},[231,752,753],{"class":255},"  ),\n",[231,755,757],{"class":233,"line":756},8,[231,758,284],{"class":255},[199,760,762],{"id":761},"adapters","Adapters",[204,764,766],{"id":765},"definenodehandlerhandler",[208,767,768],{},"defineNodeHandler(handler)",[204,770,772],{"id":771},"definenodemiddlewarehandler",[208,773,774],{},"defineNodeMiddleware(handler)",[204,776,778],{"id":777},"fromnodehandlerhandler",[208,779,780],{},"fromNodeHandler(handler)",[204,782,784],{"id":783},"fromwebhandlerhandler",[208,785,786],{},"fromWebHandler(handler)",[788,789,790],"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":227,"searchDepth":259,"depth":259,"links":792},[793,796,802,808,812],{"id":201,"depth":259,"text":202,"children":794},[795],{"id":206,"depth":287,"text":210},{"id":331,"depth":259,"text":332,"children":797},[798,799,800,801],{"id":335,"depth":287,"text":338},{"id":348,"depth":287,"text":351},{"id":357,"depth":287,"text":360},{"id":370,"depth":287,"text":373},{"id":376,"depth":259,"text":28,"children":803},[804,805,806,807],{"id":379,"depth":287,"text":382},{"id":399,"depth":287,"text":402},{"id":411,"depth":287,"text":414},{"id":420,"depth":287,"text":423},{"id":432,"depth":259,"text":433,"children":809},[810,811],{"id":436,"depth":287,"text":439},{"id":564,"depth":287,"text":567},{"id":761,"depth":259,"text":762,"children":813},[814,815,816,817],{"id":765,"depth":287,"text":768},{"id":771,"depth":287,"text":774},{"id":777,"depth":287,"text":780},{"id":783,"depth":287,"text":786},"More H3 utilities.","md",{"automd":821,"icon":132},true,{"icon":132},{"title":129,"description":818},"U6aSUyh-MNLHYqdK74K4WjzGQOhvycTCFfj-KI_GmlQ",[826,828],{"title":124,"path":125,"stem":126,"description":827,"icon":127,"children":-1},"H3 MCP related utils.",{"title":134,"path":135,"stem":136,"description":829,"icon":137,"children":-1},"H3 utils from community.",1783690730174]