[{"data":1,"prerenderedAt":1743},["ShallowReactive",2],{"navigation":3,"-utils-request":184,"-utils-request-surround":1739},[4,91,133,161,168],{"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},"H3 Utils","/utils","2.utils/0.index",[96,98,103,108,113,118,123,128],{"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},"More utils","/utils/more","2.utils/9.more","mingcute:plus-line",{"title":129,"path":130,"stem":131,"icon":132},"Community","/utils/community","2.utils/99.community","lets-icons:external",{"title":134,"path":135,"stem":136,"children":137,"icon":139},"Examples","/examples","4.examples/0.index",[138,140,145,149,153,157],{"title":134,"path":135,"stem":136,"icon":139},"ph:code",{"title":141,"path":142,"stem":143,"icon":144},"Cookies","/examples/handle-cookie","4.examples/handle-cookie","ph:arrow-right",{"title":146,"path":147,"stem":148,"icon":144},"Sessions","/examples/handle-session","4.examples/handle-session",{"title":150,"path":151,"stem":152,"icon":144},"Static Assets","/examples/serve-static-assets","4.examples/serve-static-assets",{"title":154,"path":155,"stem":156,"icon":144},"Stream Response","/examples/stream-response","4.examples/stream-response",{"title":158,"path":159,"stem":160,"icon":144},"Validate Data","/examples/validate-data","4.examples/validate-data",{"title":162,"path":163,"stem":164,"children":165,"icon":167},"Migration guide for v1 to v2","/migration","5.migration/0.index",[166],{"title":162,"path":163,"stem":164,"icon":167},"icons8:up-round",{"title":169,"path":170,"stem":171,"children":172,"page":-1},"Blog","/blog","99.blog",[173,176,180],{"title":169,"path":170,"stem":174,"icon":175},"99.blog/index","i-lucide-file-text",{"title":177,"path":178,"stem":179,"icon":175},"H3 1.8 - Towards the Edge of the Web","/blog/v1.8","99.blog/1.v1.8",{"title":181,"path":182,"stem":183,"icon":175},"H3 v2 beta","/blog/v2-beta","99.blog/2.v2-beta",{"id":185,"title":99,"body":186,"description":1732,"extension":1733,"meta":1734,"navigation":1736,"path":100,"seo":1737,"stem":101,"__hash__":1738},"content/2.utils/1.request.md",{"type":187,"value":188,"toc":1709,"icon":102},"minimark",[189,194,202,206,212,292,298,305,312,316,411,415,565,569,575,586,590,596,603,606,623,627,677,683,686,690,737,743,746,758,761,765,811,817,820,830,836,840,886,892,895,908,911,915,961,967,970,978,988,992,1038,1044,1047,1059,1063,1111,1117,1120,1130,1134,1180,1186,1189,1194,1198,1287,1291,1385,1391,1394,1402,1407,1411,1493,1497,1584,1590,1593,1603,1607,1696,1702,1705],[190,191,193],"h2",{"id":192},"body","Body",[195,196,198],"h3",{"id":197},"readbodyevent",[199,200,201],"code",{},"readBody(event)",[203,204,205],"p",{},"Reads request body and tries to parse using JSON.parse or URLSearchParams.",[203,207,208],{},[209,210,211],"strong",{},"Example:",[213,214,219],"pre",{"className":215,"code":216,"language":217,"meta":218,"style":218},"language-ts shiki shiki-themes github-light github-dark github-dark","app.get(\"/\", async (event) => {\n  const body = await readBody(event);\n});\n","ts","",[199,220,221,264,286],{"__ignoreMap":218},[222,223,226,230,234,237,241,244,248,251,255,258,261],"span",{"class":224,"line":225},"line",1,[222,227,229],{"class":228},"slsVL","app.",[222,231,233],{"class":232},"shcOC","get",[222,235,236],{"class":228},"(",[222,238,240],{"class":239},"sfrk1","\"/\"",[222,242,243],{"class":228},", ",[222,245,247],{"class":246},"so5gQ","async",[222,249,250],{"class":228}," (",[222,252,254],{"class":253},"sQHwn","event",[222,256,257],{"class":228},") ",[222,259,260],{"class":246},"=>",[222,262,263],{"class":228}," {\n",[222,265,267,270,274,277,280,283],{"class":224,"line":266},2,[222,268,269],{"class":246},"  const",[222,271,273],{"class":272},"suiK_"," body",[222,275,276],{"class":246}," =",[222,278,279],{"class":246}," await",[222,281,282],{"class":232}," readBody",[222,284,285],{"class":228},"(event);\n",[222,287,289],{"class":224,"line":288},3,[222,290,291],{"class":228},"});\n",[195,293,295],{"id":294},"readvalidatedbodyevent-validate",[199,296,297],{},"readValidatedBody(event, validate)",[203,299,300,301,304],{},"Tries to read the request body via ",[199,302,303],{},"readBody",", then uses the provided validation schema or function and either throws a validation error or returns the result.",[203,306,307,308,311],{},"You can use a simple function to validate the body or use a Standard-Schema compatible library like ",[199,309,310],{},"zod"," to define a schema.",[203,313,314],{},[209,315,211],{},[213,317,319],{"className":215,"code":318,"language":217,"meta":218,"style":218},"app.get(\"/\", async (event) => {\n  const body = await readValidatedBody(event, (body) => {\n    return typeof body === \"object\" && body !== null;\n  });\n});\n",[199,320,321,345,369,400,406],{"__ignoreMap":218},[222,322,323,325,327,329,331,333,335,337,339,341,343],{"class":224,"line":225},[222,324,229],{"class":228},[222,326,233],{"class":232},[222,328,236],{"class":228},[222,330,240],{"class":239},[222,332,243],{"class":228},[222,334,247],{"class":246},[222,336,250],{"class":228},[222,338,254],{"class":253},[222,340,257],{"class":228},[222,342,260],{"class":246},[222,344,263],{"class":228},[222,346,347,349,351,353,355,358,361,363,365,367],{"class":224,"line":266},[222,348,269],{"class":246},[222,350,273],{"class":272},[222,352,276],{"class":246},[222,354,279],{"class":246},[222,356,357],{"class":232}," readValidatedBody",[222,359,360],{"class":228},"(event, (",[222,362,192],{"class":253},[222,364,257],{"class":228},[222,366,260],{"class":246},[222,368,263],{"class":228},[222,370,371,374,377,380,383,386,389,391,394,397],{"class":224,"line":288},[222,372,373],{"class":246},"    return",[222,375,376],{"class":246}," typeof",[222,378,379],{"class":228}," body ",[222,381,382],{"class":246},"===",[222,384,385],{"class":239}," \"object\"",[222,387,388],{"class":246}," &&",[222,390,379],{"class":228},[222,392,393],{"class":246},"!==",[222,395,396],{"class":272}," null",[222,398,399],{"class":228},";\n",[222,401,403],{"class":224,"line":402},4,[222,404,405],{"class":228},"  });\n",[222,407,409],{"class":224,"line":408},5,[222,410,291],{"class":228},[203,412,413],{},[209,414,211],{},[213,416,418],{"className":215,"code":417,"language":217,"meta":218,"style":218},"import { z } from \"zod\";\napp.get(\"/\", async (event) => {\n  const objectSchema = z.object({\n    name: z.string().min(3).max(20),\n    age: z.number({ coerce: true }).positive().int(),\n  });\n  const body = await readValidatedBody(event, objectSchema);\n});\n",[199,419,420,436,460,478,511,539,544,560],{"__ignoreMap":218},[222,421,422,425,428,431,434],{"class":224,"line":225},[222,423,424],{"class":246},"import",[222,426,427],{"class":228}," { z } ",[222,429,430],{"class":246},"from",[222,432,433],{"class":239}," \"zod\"",[222,435,399],{"class":228},[222,437,438,440,442,444,446,448,450,452,454,456,458],{"class":224,"line":266},[222,439,229],{"class":228},[222,441,233],{"class":232},[222,443,236],{"class":228},[222,445,240],{"class":239},[222,447,243],{"class":228},[222,449,247],{"class":246},[222,451,250],{"class":228},[222,453,254],{"class":253},[222,455,257],{"class":228},[222,457,260],{"class":246},[222,459,263],{"class":228},[222,461,462,464,467,469,472,475],{"class":224,"line":288},[222,463,269],{"class":246},[222,465,466],{"class":272}," objectSchema",[222,468,276],{"class":246},[222,470,471],{"class":228}," z.",[222,473,474],{"class":232},"object",[222,476,477],{"class":228},"({\n",[222,479,480,483,486,489,492,494,497,500,503,505,508],{"class":224,"line":402},[222,481,482],{"class":228},"    name: z.",[222,484,485],{"class":232},"string",[222,487,488],{"class":228},"().",[222,490,491],{"class":232},"min",[222,493,236],{"class":228},[222,495,496],{"class":272},"3",[222,498,499],{"class":228},").",[222,501,502],{"class":232},"max",[222,504,236],{"class":228},[222,506,507],{"class":272},"20",[222,509,510],{"class":228},"),\n",[222,512,513,516,519,522,525,528,531,533,536],{"class":224,"line":408},[222,514,515],{"class":228},"    age: z.",[222,517,518],{"class":232},"number",[222,520,521],{"class":228},"({ coerce: ",[222,523,524],{"class":272},"true",[222,526,527],{"class":228}," }).",[222,529,530],{"class":232},"positive",[222,532,488],{"class":228},[222,534,535],{"class":232},"int",[222,537,538],{"class":228},"(),\n",[222,540,542],{"class":224,"line":541},6,[222,543,405],{"class":228},[222,545,547,549,551,553,555,557],{"class":224,"line":546},7,[222,548,269],{"class":246},[222,550,273],{"class":272},[222,552,276],{"class":246},[222,554,279],{"class":246},[222,556,357],{"class":232},[222,558,559],{"class":228},"(event, objectSchema);\n",[222,561,563],{"class":224,"line":562},8,[222,564,291],{"class":228},[190,566,568],{"id":567},"cache","Cache",[195,570,572],{"id":571},"handlecacheheadersevent-opts",[199,573,574],{},"handleCacheHeaders(event, opts)",[203,576,577,578,581,582,585],{},"Check request caching headers (",[199,579,580],{},"If-Modified-Since",") and add caching headers (Last-Modified, Cache-Control) Note: ",[199,583,584],{},"public"," cache control will be added by default",[190,587,589],{"id":588},"more-request-utils","More Request Utils",[195,591,593],{"id":592},"assertmethodevent-expected-allowhead",[199,594,595],{},"assertMethod(event, expected, allowHead?)",[203,597,598,599,602],{},"Asserts that the incoming request method is of the expected type using ",[199,600,601],{},"isMethod",".",[203,604,605],{},"If the method is not allowed, it will throw a 405 error with the message \"HTTP method is not allowed\".",[203,607,608,609,612,613,615,616,619,620,602],{},"If ",[199,610,611],{},"allowHead"," is ",[199,614,524],{},", it will allow ",[199,617,618],{},"HEAD"," requests to pass if the expected method is ",[199,621,622],{},"GET",[203,624,625],{},[209,626,211],{},[213,628,630],{"className":215,"code":629,"language":217,"meta":218,"style":218},"app.get(\"/\", (event) => {\n  assertMethod(event, \"GET\");\n  // Handle GET request, otherwise throw 405 error\n});\n",[199,631,632,653,667,673],{"__ignoreMap":218},[222,633,634,636,638,640,642,645,647,649,651],{"class":224,"line":225},[222,635,229],{"class":228},[222,637,233],{"class":232},[222,639,236],{"class":228},[222,641,240],{"class":239},[222,643,644],{"class":228},", (",[222,646,254],{"class":253},[222,648,257],{"class":228},[222,650,260],{"class":246},[222,652,263],{"class":228},[222,654,655,658,661,664],{"class":224,"line":266},[222,656,657],{"class":232},"  assertMethod",[222,659,660],{"class":228},"(event, ",[222,662,663],{"class":239},"\"GET\"",[222,665,666],{"class":228},");\n",[222,668,669],{"class":224,"line":288},[222,670,672],{"class":671},"sCsY4","  // Handle GET request, otherwise throw 405 error\n",[222,674,675],{"class":224,"line":402},[222,676,291],{"class":228},[195,678,680],{"id":679},"getqueryevent",[199,681,682],{},"getQuery(event)",[203,684,685],{},"Get parsed query string object from the request URL.",[203,687,688],{},[209,689,211],{},[213,691,693],{"className":215,"code":692,"language":217,"meta":218,"style":218},"app.get(\"/\", (event) => {\n  const query = getQuery(event); // { key: \"value\", key2: [\"value1\", \"value2\"] }\n});\n",[199,694,695,715,733],{"__ignoreMap":218},[222,696,697,699,701,703,705,707,709,711,713],{"class":224,"line":225},[222,698,229],{"class":228},[222,700,233],{"class":232},[222,702,236],{"class":228},[222,704,240],{"class":239},[222,706,644],{"class":228},[222,708,254],{"class":253},[222,710,257],{"class":228},[222,712,260],{"class":246},[222,714,263],{"class":228},[222,716,717,719,722,724,727,730],{"class":224,"line":266},[222,718,269],{"class":246},[222,720,721],{"class":272}," query",[222,723,276],{"class":246},[222,725,726],{"class":232}," getQuery",[222,728,729],{"class":228},"(event); ",[222,731,732],{"class":671},"// { key: \"value\", key2: [\"value1\", \"value2\"] }\n",[222,734,735],{"class":224,"line":288},[222,736,291],{"class":228},[195,738,740],{"id":739},"getrequesthostevent-opts-xforwardedhost",[199,741,742],{},"getRequestHost(event, opts: { xForwardedHost? })",[203,744,745],{},"Get the request hostname.",[203,747,608,748,612,751,753,754,757],{},[199,749,750],{},"xForwardedHost",[199,752,524],{},", it will use the ",[199,755,756],{},"x-forwarded-host"," header if it exists.",[203,759,760],{},"If no host header is found, it will default to \"localhost\".",[203,762,763],{},[209,764,211],{},[213,766,768],{"className":215,"code":767,"language":217,"meta":218,"style":218},"app.get(\"/\", (event) => {\n  const host = getRequestHost(event); // \"example.com\"\n});\n",[199,769,770,790,807],{"__ignoreMap":218},[222,771,772,774,776,778,780,782,784,786,788],{"class":224,"line":225},[222,773,229],{"class":228},[222,775,233],{"class":232},[222,777,236],{"class":228},[222,779,240],{"class":239},[222,781,644],{"class":228},[222,783,254],{"class":253},[222,785,257],{"class":228},[222,787,260],{"class":246},[222,789,263],{"class":228},[222,791,792,794,797,799,802,804],{"class":224,"line":266},[222,793,269],{"class":246},[222,795,796],{"class":272}," host",[222,798,276],{"class":246},[222,800,801],{"class":232}," getRequestHost",[222,803,729],{"class":228},[222,805,806],{"class":671},"// \"example.com\"\n",[222,808,809],{"class":224,"line":288},[222,810,291],{"class":228},[195,812,814],{"id":813},"getrequestipevent",[199,815,816],{},"getRequestIP(event)",[203,818,819],{},"Try to get the client IP address from the incoming request.",[203,821,608,822,612,825,753,827,757],{},[199,823,824],{},"xForwardedFor",[199,826,524],{},[199,828,829],{},"x-forwarded-for",[203,831,832,833,602],{},"If IP cannot be determined, it will default to ",[199,834,835],{},"undefined",[203,837,838],{},[209,839,211],{},[213,841,843],{"className":215,"code":842,"language":217,"meta":218,"style":218},"app.get(\"/\", (event) => {\n  const ip = getRequestIP(event); // \"192.0.2.0\"\n});\n",[199,844,845,865,882],{"__ignoreMap":218},[222,846,847,849,851,853,855,857,859,861,863],{"class":224,"line":225},[222,848,229],{"class":228},[222,850,233],{"class":232},[222,852,236],{"class":228},[222,854,240],{"class":239},[222,856,644],{"class":228},[222,858,254],{"class":253},[222,860,257],{"class":228},[222,862,260],{"class":246},[222,864,263],{"class":228},[222,866,867,869,872,874,877,879],{"class":224,"line":266},[222,868,269],{"class":246},[222,870,871],{"class":272}," ip",[222,873,276],{"class":246},[222,875,876],{"class":232}," getRequestIP",[222,878,729],{"class":228},[222,880,881],{"class":671},"// \"192.0.2.0\"\n",[222,883,884],{"class":224,"line":288},[222,885,291],{"class":228},[195,887,889],{"id":888},"getrequestprotocolevent-opts-xforwardedproto",[199,890,891],{},"getRequestProtocol(event, opts: { xForwardedProto? })",[203,893,894],{},"Get the request protocol.",[203,896,608,897,900,901,904,905,602],{},[199,898,899],{},"x-forwarded-proto"," header is set to \"https\", it will return \"https\". You can disable this behavior by setting ",[199,902,903],{},"xForwardedProto"," to ",[199,906,907],{},"false",[203,909,910],{},"If protocol cannot be determined, it will default to \"http\".",[203,912,913],{},[209,914,211],{},[213,916,918],{"className":215,"code":917,"language":217,"meta":218,"style":218},"app.get(\"/\", (event) => {\n  const protocol = getRequestProtocol(event); // \"https\"\n});\n",[199,919,920,940,957],{"__ignoreMap":218},[222,921,922,924,926,928,930,932,934,936,938],{"class":224,"line":225},[222,923,229],{"class":228},[222,925,233],{"class":232},[222,927,236],{"class":228},[222,929,240],{"class":239},[222,931,644],{"class":228},[222,933,254],{"class":253},[222,935,257],{"class":228},[222,937,260],{"class":246},[222,939,263],{"class":228},[222,941,942,944,947,949,952,954],{"class":224,"line":266},[222,943,269],{"class":246},[222,945,946],{"class":272}," protocol",[222,948,276],{"class":246},[222,950,951],{"class":232}," getRequestProtocol",[222,953,729],{"class":228},[222,955,956],{"class":671},"// \"https\"\n",[222,958,959],{"class":224,"line":288},[222,960,291],{"class":228},[195,962,964],{"id":963},"getrequesturlevent-opts-xforwardedhost-xforwardedproto",[199,965,966],{},"getRequestURL(event, opts: { xForwardedHost?, xForwardedProto? })",[203,968,969],{},"Generated the full incoming request URL.",[203,971,608,972,612,974,753,976,757],{},[199,973,750],{},[199,975,524],{},[199,977,756],{},[203,979,608,980,612,982,984,985,987],{},[199,981,903],{},[199,983,907],{},", it will not use the ",[199,986,899],{}," header.",[203,989,990],{},[209,991,211],{},[213,993,995],{"className":215,"code":994,"language":217,"meta":218,"style":218},"app.get(\"/\", (event) => {\n  const url = getRequestURL(event); // \"https://example.com/path\"\n});\n",[199,996,997,1017,1034],{"__ignoreMap":218},[222,998,999,1001,1003,1005,1007,1009,1011,1013,1015],{"class":224,"line":225},[222,1000,229],{"class":228},[222,1002,233],{"class":232},[222,1004,236],{"class":228},[222,1006,240],{"class":239},[222,1008,644],{"class":228},[222,1010,254],{"class":253},[222,1012,257],{"class":228},[222,1014,260],{"class":246},[222,1016,263],{"class":228},[222,1018,1019,1021,1024,1026,1029,1031],{"class":224,"line":266},[222,1020,269],{"class":246},[222,1022,1023],{"class":272}," url",[222,1025,276],{"class":246},[222,1027,1028],{"class":232}," getRequestURL",[222,1030,729],{"class":228},[222,1032,1033],{"class":671},"// \"https://example.com/path\"\n",[222,1035,1036],{"class":224,"line":288},[222,1037,291],{"class":228},[195,1039,1041],{"id":1040},"getrouterparamevent-name-opts-decode",[199,1042,1043],{},"getRouterParam(event, name, opts: { decode? })",[203,1045,1046],{},"Get a matched route param by name.",[203,1048,608,1049,1052,1053,1055,1056,602],{},[199,1050,1051],{},"decode"," option is ",[199,1054,524],{},", it will decode the matched route param using ",[199,1057,1058],{},"decodeURI",[203,1060,1061],{},[209,1062,211],{},[213,1064,1066],{"className":215,"code":1065,"language":217,"meta":218,"style":218},"app.get(\"/\", (event) => {\n  const param = getRouterParam(event, \"key\");\n});\n",[199,1067,1068,1088,1107],{"__ignoreMap":218},[222,1069,1070,1072,1074,1076,1078,1080,1082,1084,1086],{"class":224,"line":225},[222,1071,229],{"class":228},[222,1073,233],{"class":232},[222,1075,236],{"class":228},[222,1077,240],{"class":239},[222,1079,644],{"class":228},[222,1081,254],{"class":253},[222,1083,257],{"class":228},[222,1085,260],{"class":246},[222,1087,263],{"class":228},[222,1089,1090,1092,1095,1097,1100,1102,1105],{"class":224,"line":266},[222,1091,269],{"class":246},[222,1093,1094],{"class":272}," param",[222,1096,276],{"class":246},[222,1098,1099],{"class":232}," getRouterParam",[222,1101,660],{"class":228},[222,1103,1104],{"class":239},"\"key\"",[222,1106,666],{"class":228},[222,1108,1109],{"class":224,"line":288},[222,1110,291],{"class":228},[195,1112,1114],{"id":1113},"getrouterparamsevent-opts-decode",[199,1115,1116],{},"getRouterParams(event, opts: { decode? })",[203,1118,1119],{},"Get matched route params.",[203,1121,608,1122,1052,1124,1126,1127,602],{},[199,1123,1051],{},[199,1125,524],{},", it will decode the matched route params using ",[199,1128,1129],{},"decodeURIComponent",[203,1131,1132],{},[209,1133,211],{},[213,1135,1137],{"className":215,"code":1136,"language":217,"meta":218,"style":218},"app.get(\"/\", (event) => {\n  const params = getRouterParams(event); // { key: \"value\" }\n});\n",[199,1138,1139,1159,1176],{"__ignoreMap":218},[222,1140,1141,1143,1145,1147,1149,1151,1153,1155,1157],{"class":224,"line":225},[222,1142,229],{"class":228},[222,1144,233],{"class":232},[222,1146,236],{"class":228},[222,1148,240],{"class":239},[222,1150,644],{"class":228},[222,1152,254],{"class":253},[222,1154,257],{"class":228},[222,1156,260],{"class":246},[222,1158,263],{"class":228},[222,1160,1161,1163,1166,1168,1171,1173],{"class":224,"line":266},[222,1162,269],{"class":246},[222,1164,1165],{"class":272}," params",[222,1167,276],{"class":246},[222,1169,1170],{"class":232}," getRouterParams",[222,1172,729],{"class":228},[222,1174,1175],{"class":671},"// { key: \"value\" }\n",[222,1177,1178],{"class":224,"line":288},[222,1179,291],{"class":228},[195,1181,1183],{"id":1182},"getvalidatedqueryevent-validate",[199,1184,1185],{},"getValidatedQuery(event, validate)",[203,1187,1188],{},"Get the query param from the request URL validated with validate function.",[203,1190,1191,1192,311],{},"You can use a simple function to validate the query object or use a Standard-Schema compatible library like ",[199,1193,310],{},[203,1195,1196],{},[209,1197,211],{},[213,1199,1201],{"className":215,"code":1200,"language":217,"meta":218,"style":218},"app.get(\"/\", async (event) => {\n  const query = await getValidatedQuery(event, (data) => {\n    return \"key\" in data && typeof data.key === \"string\";\n  });\n});\n",[199,1202,1203,1227,1251,1279,1283],{"__ignoreMap":218},[222,1204,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225],{"class":224,"line":225},[222,1206,229],{"class":228},[222,1208,233],{"class":232},[222,1210,236],{"class":228},[222,1212,240],{"class":239},[222,1214,243],{"class":228},[222,1216,247],{"class":246},[222,1218,250],{"class":228},[222,1220,254],{"class":253},[222,1222,257],{"class":228},[222,1224,260],{"class":246},[222,1226,263],{"class":228},[222,1228,1229,1231,1233,1235,1237,1240,1242,1245,1247,1249],{"class":224,"line":266},[222,1230,269],{"class":246},[222,1232,721],{"class":272},[222,1234,276],{"class":246},[222,1236,279],{"class":246},[222,1238,1239],{"class":232}," getValidatedQuery",[222,1241,360],{"class":228},[222,1243,1244],{"class":253},"data",[222,1246,257],{"class":228},[222,1248,260],{"class":246},[222,1250,263],{"class":228},[222,1252,1253,1255,1258,1261,1264,1267,1269,1272,1274,1277],{"class":224,"line":288},[222,1254,373],{"class":246},[222,1256,1257],{"class":239}," \"key\"",[222,1259,1260],{"class":246}," in",[222,1262,1263],{"class":228}," data ",[222,1265,1266],{"class":246},"&&",[222,1268,376],{"class":246},[222,1270,1271],{"class":228}," data.key ",[222,1273,382],{"class":246},[222,1275,1276],{"class":239}," \"string\"",[222,1278,399],{"class":228},[222,1280,1281],{"class":224,"line":402},[222,1282,405],{"class":228},[222,1284,1285],{"class":224,"line":408},[222,1286,291],{"class":228},[203,1288,1289],{},[209,1290,211],{},[213,1292,1294],{"className":215,"code":1293,"language":217,"meta":218,"style":218},"import { z } from \"zod\";\napp.get(\"/\", async (event) => {\n  const query = await getValidatedQuery(\n    event,\n    z.object({\n      key: z.string(),\n    }),\n  );\n});\n",[199,1295,1296,1308,1332,1347,1352,1361,1370,1375,1380],{"__ignoreMap":218},[222,1297,1298,1300,1302,1304,1306],{"class":224,"line":225},[222,1299,424],{"class":246},[222,1301,427],{"class":228},[222,1303,430],{"class":246},[222,1305,433],{"class":239},[222,1307,399],{"class":228},[222,1309,1310,1312,1314,1316,1318,1320,1322,1324,1326,1328,1330],{"class":224,"line":266},[222,1311,229],{"class":228},[222,1313,233],{"class":232},[222,1315,236],{"class":228},[222,1317,240],{"class":239},[222,1319,243],{"class":228},[222,1321,247],{"class":246},[222,1323,250],{"class":228},[222,1325,254],{"class":253},[222,1327,257],{"class":228},[222,1329,260],{"class":246},[222,1331,263],{"class":228},[222,1333,1334,1336,1338,1340,1342,1344],{"class":224,"line":288},[222,1335,269],{"class":246},[222,1337,721],{"class":272},[222,1339,276],{"class":246},[222,1341,279],{"class":246},[222,1343,1239],{"class":232},[222,1345,1346],{"class":228},"(\n",[222,1348,1349],{"class":224,"line":402},[222,1350,1351],{"class":228},"    event,\n",[222,1353,1354,1357,1359],{"class":224,"line":408},[222,1355,1356],{"class":228},"    z.",[222,1358,474],{"class":232},[222,1360,477],{"class":228},[222,1362,1363,1366,1368],{"class":224,"line":541},[222,1364,1365],{"class":228},"      key: z.",[222,1367,485],{"class":232},[222,1369,538],{"class":228},[222,1371,1372],{"class":224,"line":546},[222,1373,1374],{"class":228},"    }),\n",[222,1376,1377],{"class":224,"line":562},[222,1378,1379],{"class":228},"  );\n",[222,1381,1383],{"class":224,"line":1382},9,[222,1384,291],{"class":228},[195,1386,1388],{"id":1387},"getvalidatedrouterparamsevent-validate-opts-decode",[199,1389,1390],{},"getValidatedRouterParams(event, validate, opts: { decode? })",[203,1392,1393],{},"Get matched route params and validate with validate function.",[203,1395,608,1396,1052,1398,1126,1400,602],{},[199,1397,1051],{},[199,1399,524],{},[199,1401,1058],{},[203,1403,1404,1405,311],{},"You can use a simple function to validate the params object or use a Standard-Schema compatible library like ",[199,1406,310],{},[203,1408,1409],{},[209,1410,211],{},[213,1412,1414],{"className":215,"code":1413,"language":217,"meta":218,"style":218},"app.get(\"/\", async (event) => {\n  const params = await getValidatedRouterParams(event, (data) => {\n    return \"key\" in data && typeof data.key === \"string\";\n  });\n});\n",[199,1415,1416,1440,1463,1485,1489],{"__ignoreMap":218},[222,1417,1418,1420,1422,1424,1426,1428,1430,1432,1434,1436,1438],{"class":224,"line":225},[222,1419,229],{"class":228},[222,1421,233],{"class":232},[222,1423,236],{"class":228},[222,1425,240],{"class":239},[222,1427,243],{"class":228},[222,1429,247],{"class":246},[222,1431,250],{"class":228},[222,1433,254],{"class":253},[222,1435,257],{"class":228},[222,1437,260],{"class":246},[222,1439,263],{"class":228},[222,1441,1442,1444,1446,1448,1450,1453,1455,1457,1459,1461],{"class":224,"line":266},[222,1443,269],{"class":246},[222,1445,1165],{"class":272},[222,1447,276],{"class":246},[222,1449,279],{"class":246},[222,1451,1452],{"class":232}," getValidatedRouterParams",[222,1454,360],{"class":228},[222,1456,1244],{"class":253},[222,1458,257],{"class":228},[222,1460,260],{"class":246},[222,1462,263],{"class":228},[222,1464,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483],{"class":224,"line":288},[222,1466,373],{"class":246},[222,1468,1257],{"class":239},[222,1470,1260],{"class":246},[222,1472,1263],{"class":228},[222,1474,1266],{"class":246},[222,1476,376],{"class":246},[222,1478,1271],{"class":228},[222,1480,382],{"class":246},[222,1482,1276],{"class":239},[222,1484,399],{"class":228},[222,1486,1487],{"class":224,"line":402},[222,1488,405],{"class":228},[222,1490,1491],{"class":224,"line":408},[222,1492,291],{"class":228},[203,1494,1495],{},[209,1496,211],{},[213,1498,1500],{"className":215,"code":1499,"language":217,"meta":218,"style":218},"import { z } from \"zod\";\napp.get(\"/\", async (event) => {\n  const params = await getValidatedRouterParams(\n    event,\n    z.object({\n      key: z.string(),\n    }),\n  );\n});\n",[199,1501,1502,1514,1538,1552,1556,1564,1572,1576,1580],{"__ignoreMap":218},[222,1503,1504,1506,1508,1510,1512],{"class":224,"line":225},[222,1505,424],{"class":246},[222,1507,427],{"class":228},[222,1509,430],{"class":246},[222,1511,433],{"class":239},[222,1513,399],{"class":228},[222,1515,1516,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536],{"class":224,"line":266},[222,1517,229],{"class":228},[222,1519,233],{"class":232},[222,1521,236],{"class":228},[222,1523,240],{"class":239},[222,1525,243],{"class":228},[222,1527,247],{"class":246},[222,1529,250],{"class":228},[222,1531,254],{"class":253},[222,1533,257],{"class":228},[222,1535,260],{"class":246},[222,1537,263],{"class":228},[222,1539,1540,1542,1544,1546,1548,1550],{"class":224,"line":288},[222,1541,269],{"class":246},[222,1543,1165],{"class":272},[222,1545,276],{"class":246},[222,1547,279],{"class":246},[222,1549,1452],{"class":232},[222,1551,1346],{"class":228},[222,1553,1554],{"class":224,"line":402},[222,1555,1351],{"class":228},[222,1557,1558,1560,1562],{"class":224,"line":408},[222,1559,1356],{"class":228},[222,1561,474],{"class":232},[222,1563,477],{"class":228},[222,1565,1566,1568,1570],{"class":224,"line":541},[222,1567,1365],{"class":228},[222,1569,485],{"class":232},[222,1571,538],{"class":228},[222,1573,1574],{"class":224,"line":546},[222,1575,1374],{"class":228},[222,1577,1578],{"class":224,"line":562},[222,1579,1379],{"class":228},[222,1581,1582],{"class":224,"line":1382},[222,1583,291],{"class":228},[195,1585,1587],{"id":1586},"ismethodevent-expected-allowhead",[199,1588,1589],{},"isMethod(event, expected, allowHead?)",[203,1591,1592],{},"Checks if the incoming request method is of the expected type.",[203,1594,608,1595,612,1597,615,1599,619,1601,602],{},[199,1596,611],{},[199,1598,524],{},[199,1600,618],{},[199,1602,622],{},[203,1604,1605],{},[209,1606,211],{},[213,1608,1610],{"className":215,"code":1609,"language":217,"meta":218,"style":218},"app.get(\"/\", (event) => {\n  if (isMethod(event, \"GET\")) {\n    // Handle GET request\n  } else if (isMethod(event, [\"POST\", \"PUT\"])) {\n    // Handle POST or PUT request\n  }\n});\n",[199,1611,1612,1632,1648,1653,1682,1687,1692],{"__ignoreMap":218},[222,1613,1614,1616,1618,1620,1622,1624,1626,1628,1630],{"class":224,"line":225},[222,1615,229],{"class":228},[222,1617,233],{"class":232},[222,1619,236],{"class":228},[222,1621,240],{"class":239},[222,1623,644],{"class":228},[222,1625,254],{"class":253},[222,1627,257],{"class":228},[222,1629,260],{"class":246},[222,1631,263],{"class":228},[222,1633,1634,1637,1639,1641,1643,1645],{"class":224,"line":266},[222,1635,1636],{"class":246},"  if",[222,1638,250],{"class":228},[222,1640,601],{"class":232},[222,1642,660],{"class":228},[222,1644,663],{"class":239},[222,1646,1647],{"class":228},")) {\n",[222,1649,1650],{"class":224,"line":288},[222,1651,1652],{"class":671},"    // Handle GET request\n",[222,1654,1655,1658,1661,1664,1666,1668,1671,1674,1676,1679],{"class":224,"line":402},[222,1656,1657],{"class":228},"  } ",[222,1659,1660],{"class":246},"else",[222,1662,1663],{"class":246}," if",[222,1665,250],{"class":228},[222,1667,601],{"class":232},[222,1669,1670],{"class":228},"(event, [",[222,1672,1673],{"class":239},"\"POST\"",[222,1675,243],{"class":228},[222,1677,1678],{"class":239},"\"PUT\"",[222,1680,1681],{"class":228},"])) {\n",[222,1683,1684],{"class":224,"line":408},[222,1685,1686],{"class":671},"    // Handle POST or PUT request\n",[222,1688,1689],{"class":224,"line":541},[222,1690,1691],{"class":228},"  }\n",[222,1693,1694],{"class":224,"line":546},[222,1695,291],{"class":228},[195,1697,1699],{"id":1698},"getrequestfingerprintevent-opts",[199,1700,1701],{},"getRequestFingerprint(event, opts)",[203,1703,1704],{},"Get a unique fingerprint for the incoming request.",[1706,1707,1708],"style",{},"html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}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 .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":218,"searchDepth":266,"depth":266,"links":1710},[1711,1715,1718],{"id":192,"depth":266,"text":193,"children":1712},[1713,1714],{"id":197,"depth":288,"text":201},{"id":294,"depth":288,"text":297},{"id":567,"depth":266,"text":568,"children":1716},[1717],{"id":571,"depth":288,"text":574},{"id":588,"depth":266,"text":589,"children":1719},[1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731],{"id":592,"depth":288,"text":595},{"id":679,"depth":288,"text":682},{"id":739,"depth":288,"text":742},{"id":813,"depth":288,"text":816},{"id":888,"depth":288,"text":891},{"id":963,"depth":288,"text":966},{"id":1040,"depth":288,"text":1043},{"id":1113,"depth":288,"text":1116},{"id":1182,"depth":288,"text":1185},{"id":1387,"depth":288,"text":1390},{"id":1586,"depth":288,"text":1589},{"id":1698,"depth":288,"text":1701},"H3 request utilities.","md",{"automd":1735,"icon":102},true,{"icon":102},{"title":99,"description":1732},"8heG86SQgqCNH9YF8Djm9A1WgvqRbUzUdHTAHW561Wg",[1740,1741],{"title":92,"path":93,"stem":94,"description":218,"icon":97,"children":-1},{"title":104,"path":105,"stem":106,"description":1742,"icon":107,"children":-1},"H3 response utilities.",1754496085406]