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