[{"data":1,"prerenderedAt":3119},["ShallowReactive",2],{"navigation":3,"-utils-request":193,"-utils-request-surround":3115},[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":99,"body":195,"description":3108,"extension":3109,"meta":3110,"navigation":3112,"path":100,"seo":3113,"stem":101,"__hash__":3114},"content/2.utils/1.request.md",{"type":196,"value":197,"toc":3075,"icon":102},"minimark",[198,203,211,215,222,228,343,349,352,371,375,426,430,485,491,498,505,509,617,621,771,775,994,1002,1019,1025,1035,1048,1052,1117,1123,1133,1153,1181,1192,1227,1231,1312,1316,1411,1417,1426,1429,1456,1474,1478,1550,1554,1560,1571,1575,1581,1587,1594,1610,1614,1660,1666,1669,1673,1720,1726,1729,1741,1744,1748,1794,1800,1803,1813,1819,1823,1869,1875,1878,1891,1894,1898,1944,1950,1953,1961,1971,1975,2021,2027,2030,2058,2062,2110,2116,2119,2136,2140,2186,2192,2195,2200,2204,2296,2300,2389,2393,2527,2533,2536,2552,2557,2561,2644,2648,2735,2739,2907,2913,2916,2926,2930,3018,3024,3027,3033,3036,3043,3049,3056,3059,3062,3068,3071],[199,200,202],"h2",{"id":201},"body","Body",[204,205,207],"h3",{"id":206},"assertbodysizeevent-limit",[208,209,210],"code",{},"assertBodySize(event, limit)",[212,213,214],"p",{},"Asserts that request body size is within the specified limit.",[212,216,217,218,221],{},"If body size exceeds the limit, throws a ",[208,219,220],{},"413"," Request Entity Too Large response error.",[212,223,224],{},[225,226,227],"strong",{},"Example:",[229,230,235],"pre",{"className":231,"code":232,"language":233,"meta":234,"style":234},"language-ts shiki shiki-themes github-light github-dark github-dark","app.get(\"/\", async (event) => {\n  await assertBodySize(event, 10 * 1024 * 1024); // 10MB\n  const data = await event.req.formData();\n});\n","ts","",[208,236,237,280,313,337],{"__ignoreMap":234},[238,239,242,246,250,253,257,260,264,267,271,274,277],"span",{"class":240,"line":241},"line",1,[238,243,245],{"class":244},"slsVL","app.",[238,247,249],{"class":248},"shcOC","get",[238,251,252],{"class":244},"(",[238,254,256],{"class":255},"sfrk1","\"/\"",[238,258,259],{"class":244},", ",[238,261,263],{"class":262},"so5gQ","async",[238,265,266],{"class":244}," (",[238,268,270],{"class":269},"sQHwn","event",[238,272,273],{"class":244},") ",[238,275,276],{"class":262},"=>",[238,278,279],{"class":244}," {\n",[238,281,283,286,289,292,296,299,302,304,306,309],{"class":240,"line":282},2,[238,284,285],{"class":262},"  await",[238,287,288],{"class":248}," assertBodySize",[238,290,291],{"class":244},"(event, ",[238,293,295],{"class":294},"suiK_","10",[238,297,298],{"class":262}," *",[238,300,301],{"class":294}," 1024",[238,303,298],{"class":262},[238,305,301],{"class":294},[238,307,308],{"class":244},"); ",[238,310,312],{"class":311},"sCsY4","// 10MB\n",[238,314,316,319,322,325,328,331,334],{"class":240,"line":315},3,[238,317,318],{"class":262},"  const",[238,320,321],{"class":294}," data",[238,323,324],{"class":262}," =",[238,326,327],{"class":262}," await",[238,329,330],{"class":244}," event.req.",[238,332,333],{"class":248},"formData",[238,335,336],{"class":244},"();\n",[238,338,340],{"class":240,"line":339},4,[238,341,342],{"class":244},"});\n",[204,344,346],{"id":345},"readbodyevent-options",[208,347,348],{},"readBody(event, options?)",[212,350,351],{},"Reads request body and tries to parse using JSON.parse or URLSearchParams.",[212,353,354,355,358,359,362,363,366,367,370],{},"By default the body is parsed as JSON (falling back to URL-encoded parsing when the ",[208,356,357],{},"Content-Type"," is ",[208,360,361],{},"application/x-www-form-urlencoded","). Other body types, such as ",[208,364,365],{},"multipart/form-data",", must be opted into explicitly via ",[208,368,369],{},"options.type"," and are never auto-detected from the request headers.",[212,372,373],{},[225,374,227],{},[229,376,378],{"className":231,"code":377,"language":233,"meta":234,"style":234},"app.post(\"/\", async (event) => {\n  const body = await readBody(event);\n});\n",[208,379,380,405,422],{"__ignoreMap":234},[238,381,382,384,387,389,391,393,395,397,399,401,403],{"class":240,"line":241},[238,383,245],{"class":244},[238,385,386],{"class":248},"post",[238,388,252],{"class":244},[238,390,256],{"class":255},[238,392,259],{"class":244},[238,394,263],{"class":262},[238,396,266],{"class":244},[238,398,270],{"class":269},[238,400,273],{"class":244},[238,402,276],{"class":262},[238,404,279],{"class":244},[238,406,407,409,412,414,416,419],{"class":240,"line":282},[238,408,318],{"class":262},[238,410,411],{"class":294}," body",[238,413,324],{"class":262},[238,415,327],{"class":262},[238,417,418],{"class":248}," readBody",[238,420,421],{"class":244},"(event);\n",[238,423,424],{"class":240,"line":315},[238,425,342],{"class":244},[212,427,428],{},[225,429,227],{},[229,431,433],{"className":231,"code":432,"language":233,"meta":234,"style":234},"app.post(\"/upload\", async (event) => {\n  const body = await readBody(event, { type: \"formData\" });\n});\n",[208,434,435,460,481],{"__ignoreMap":234},[238,436,437,439,441,443,446,448,450,452,454,456,458],{"class":240,"line":241},[238,438,245],{"class":244},[238,440,386],{"class":248},[238,442,252],{"class":244},[238,444,445],{"class":255},"\"/upload\"",[238,447,259],{"class":244},[238,449,263],{"class":262},[238,451,266],{"class":244},[238,453,270],{"class":269},[238,455,273],{"class":244},[238,457,276],{"class":262},[238,459,279],{"class":244},[238,461,462,464,466,468,470,472,475,478],{"class":240,"line":282},[238,463,318],{"class":262},[238,465,411],{"class":294},[238,467,324],{"class":262},[238,469,327],{"class":262},[238,471,418],{"class":248},[238,473,474],{"class":244},"(event, { type: ",[238,476,477],{"class":255},"\"formData\"",[238,479,480],{"class":244}," });\n",[238,482,483],{"class":240,"line":315},[238,484,342],{"class":244},[204,486,488],{"id":487},"readvalidatedbodyevent-validate",[208,489,490],{},"readValidatedBody(event, validate)",[212,492,493,494,497],{},"Tries to read the request body via ",[208,495,496],{},"readBody",", then uses the provided validation schema or function and either throws a validation error or returns the result.",[212,499,500,501,504],{},"You can use a simple function to validate the body or use a Standard-Schema compatible library like ",[208,502,503],{},"zod"," to define a schema.",[212,506,507],{},[225,508,227],{},[229,510,512],{"className":231,"code":511,"language":233,"meta":234,"style":234},"function validateBody(body: any) {\n  return typeof body === \"object\" && body !== null;\n}\napp.post(\"/\", async (event) => {\n  const body = await readValidatedBody(event, validateBody);\n});\n",[208,513,514,535,566,571,595,612],{"__ignoreMap":234},[238,515,516,519,522,524,526,529,532],{"class":240,"line":241},[238,517,518],{"class":262},"function",[238,520,521],{"class":248}," validateBody",[238,523,252],{"class":244},[238,525,201],{"class":269},[238,527,528],{"class":262},":",[238,530,531],{"class":294}," any",[238,533,534],{"class":244},") {\n",[238,536,537,540,543,546,549,552,555,557,560,563],{"class":240,"line":282},[238,538,539],{"class":262},"  return",[238,541,542],{"class":262}," typeof",[238,544,545],{"class":244}," body ",[238,547,548],{"class":262},"===",[238,550,551],{"class":255}," \"object\"",[238,553,554],{"class":262}," &&",[238,556,545],{"class":244},[238,558,559],{"class":262},"!==",[238,561,562],{"class":294}," null",[238,564,565],{"class":244},";\n",[238,567,568],{"class":240,"line":315},[238,569,570],{"class":244},"}\n",[238,572,573,575,577,579,581,583,585,587,589,591,593],{"class":240,"line":339},[238,574,245],{"class":244},[238,576,386],{"class":248},[238,578,252],{"class":244},[238,580,256],{"class":255},[238,582,259],{"class":244},[238,584,263],{"class":262},[238,586,266],{"class":244},[238,588,270],{"class":269},[238,590,273],{"class":244},[238,592,276],{"class":262},[238,594,279],{"class":244},[238,596,598,600,602,604,606,609],{"class":240,"line":597},5,[238,599,318],{"class":262},[238,601,411],{"class":294},[238,603,324],{"class":262},[238,605,327],{"class":262},[238,607,608],{"class":248}," readValidatedBody",[238,610,611],{"class":244},"(event, validateBody);\n",[238,613,615],{"class":240,"line":614},6,[238,616,342],{"class":244},[212,618,619],{},[225,620,227],{},[229,622,624],{"className":231,"code":623,"language":233,"meta":234,"style":234},"import { z } from \"zod\";\nconst objectSchema = z.object({\n  name: z.string().min(3).max(20),\n  age: z.number({ coerce: true }).positive().int(),\n});\napp.post(\"/\", async (event) => {\n  const body = await readValidatedBody(event, objectSchema);\n});\n",[208,625,626,642,661,694,722,726,750,766],{"__ignoreMap":234},[238,627,628,631,634,637,640],{"class":240,"line":241},[238,629,630],{"class":262},"import",[238,632,633],{"class":244}," { z } ",[238,635,636],{"class":262},"from",[238,638,639],{"class":255}," \"zod\"",[238,641,565],{"class":244},[238,643,644,647,650,652,655,658],{"class":240,"line":282},[238,645,646],{"class":262},"const",[238,648,649],{"class":294}," objectSchema",[238,651,324],{"class":262},[238,653,654],{"class":244}," z.",[238,656,657],{"class":248},"object",[238,659,660],{"class":244},"({\n",[238,662,663,666,669,672,675,677,680,683,686,688,691],{"class":240,"line":315},[238,664,665],{"class":244},"  name: z.",[238,667,668],{"class":248},"string",[238,670,671],{"class":244},"().",[238,673,674],{"class":248},"min",[238,676,252],{"class":244},[238,678,679],{"class":294},"3",[238,681,682],{"class":244},").",[238,684,685],{"class":248},"max",[238,687,252],{"class":244},[238,689,690],{"class":294},"20",[238,692,693],{"class":244},"),\n",[238,695,696,699,702,705,708,711,714,716,719],{"class":240,"line":339},[238,697,698],{"class":244},"  age: z.",[238,700,701],{"class":248},"number",[238,703,704],{"class":244},"({ coerce: ",[238,706,707],{"class":294},"true",[238,709,710],{"class":244}," }).",[238,712,713],{"class":248},"positive",[238,715,671],{"class":244},[238,717,718],{"class":248},"int",[238,720,721],{"class":244},"(),\n",[238,723,724],{"class":240,"line":597},[238,725,342],{"class":244},[238,727,728,730,732,734,736,738,740,742,744,746,748],{"class":240,"line":614},[238,729,245],{"class":244},[238,731,386],{"class":248},[238,733,252],{"class":244},[238,735,256],{"class":255},[238,737,259],{"class":244},[238,739,263],{"class":262},[238,741,266],{"class":244},[238,743,270],{"class":269},[238,745,273],{"class":244},[238,747,276],{"class":262},[238,749,279],{"class":244},[238,751,753,755,757,759,761,763],{"class":240,"line":752},7,[238,754,318],{"class":262},[238,756,411],{"class":294},[238,758,324],{"class":262},[238,760,327],{"class":262},[238,762,608],{"class":248},[238,764,765],{"class":244},"(event, objectSchema);\n",[238,767,769],{"class":240,"line":768},8,[238,770,342],{"class":244},[212,772,773],{},[225,774,227],{},[229,776,778],{"className":231,"code":777,"language":233,"meta":234,"style":234},"import * as v from \"valibot\";\napp.post(\"/\", async (event) => {\n  const body = await readValidatedBody(\n    event,\n    v.object({\n      name: v.pipe(v.string(), v.minLength(3), v.maxLength(20)),\n      age: v.pipe(v.number(), v.integer(), v.minValue(1)),\n    }),\n    {\n      onError: ({ issues }) => ({\n        statusText: \"Custom validation error\",\n        message: v.summarize(issues),\n      }),\n    },\n  );\n});\n",[208,779,780,799,823,838,843,852,888,916,921,927,947,959,971,977,983,989],{"__ignoreMap":234},[238,781,782,784,786,789,792,794,797],{"class":240,"line":241},[238,783,630],{"class":262},[238,785,298],{"class":294},[238,787,788],{"class":262}," as",[238,790,791],{"class":244}," v ",[238,793,636],{"class":262},[238,795,796],{"class":255}," \"valibot\"",[238,798,565],{"class":244},[238,800,801,803,805,807,809,811,813,815,817,819,821],{"class":240,"line":282},[238,802,245],{"class":244},[238,804,386],{"class":248},[238,806,252],{"class":244},[238,808,256],{"class":255},[238,810,259],{"class":244},[238,812,263],{"class":262},[238,814,266],{"class":244},[238,816,270],{"class":269},[238,818,273],{"class":244},[238,820,276],{"class":262},[238,822,279],{"class":244},[238,824,825,827,829,831,833,835],{"class":240,"line":315},[238,826,318],{"class":262},[238,828,411],{"class":294},[238,830,324],{"class":262},[238,832,327],{"class":262},[238,834,608],{"class":248},[238,836,837],{"class":244},"(\n",[238,839,840],{"class":240,"line":339},[238,841,842],{"class":244},"    event,\n",[238,844,845,848,850],{"class":240,"line":597},[238,846,847],{"class":244},"    v.",[238,849,657],{"class":248},[238,851,660],{"class":244},[238,853,854,857,860,863,865,868,871,873,875,878,881,883,885],{"class":240,"line":614},[238,855,856],{"class":244},"      name: v.",[238,858,859],{"class":248},"pipe",[238,861,862],{"class":244},"(v.",[238,864,668],{"class":248},[238,866,867],{"class":244},"(), v.",[238,869,870],{"class":248},"minLength",[238,872,252],{"class":244},[238,874,679],{"class":294},[238,876,877],{"class":244},"), v.",[238,879,880],{"class":248},"maxLength",[238,882,252],{"class":244},[238,884,690],{"class":294},[238,886,887],{"class":244},")),\n",[238,889,890,893,895,897,899,901,904,906,909,911,914],{"class":240,"line":752},[238,891,892],{"class":244},"      age: v.",[238,894,859],{"class":248},[238,896,862],{"class":244},[238,898,701],{"class":248},[238,900,867],{"class":244},[238,902,903],{"class":248},"integer",[238,905,867],{"class":244},[238,907,908],{"class":248},"minValue",[238,910,252],{"class":244},[238,912,913],{"class":294},"1",[238,915,887],{"class":244},[238,917,918],{"class":240,"line":768},[238,919,920],{"class":244},"    }),\n",[238,922,924],{"class":240,"line":923},9,[238,925,926],{"class":244},"    {\n",[238,928,930,933,936,939,942,944],{"class":240,"line":929},10,[238,931,932],{"class":248},"      onError",[238,934,935],{"class":244},": ({ ",[238,937,938],{"class":269},"issues",[238,940,941],{"class":244}," }) ",[238,943,276],{"class":262},[238,945,946],{"class":244}," ({\n",[238,948,950,953,956],{"class":240,"line":949},11,[238,951,952],{"class":244},"        statusText: ",[238,954,955],{"class":255},"\"Custom validation error\"",[238,957,958],{"class":244},",\n",[238,960,962,965,968],{"class":240,"line":961},12,[238,963,964],{"class":244},"        message: v.",[238,966,967],{"class":248},"summarize",[238,969,970],{"class":244},"(issues),\n",[238,972,974],{"class":240,"line":973},13,[238,975,976],{"class":244},"      }),\n",[238,978,980],{"class":240,"line":979},14,[238,981,982],{"class":244},"    },\n",[238,984,986],{"class":240,"line":985},15,[238,987,988],{"class":244},"  );\n",[238,990,992],{"class":240,"line":991},16,[238,993,342],{"class":244},[199,995,997,998,1001],{"id":996},"query-http-query-method","Query (HTTP ",[208,999,1000],{},"QUERY"," method)",[212,1003,1004,1005,1015,1016,1018],{},"Utilities for the ",[1006,1007,1011,1012,1014],"a",{"href":1008,"rel":1009},"https://www.rfc-editor.org/rfc/rfc10008",[1010],"nofollow","HTTP ",[208,1013,1000],{}," method (RFC 10008)",": advertise the query formats a resource accepts and validate the request ",[208,1017,357],{},".",[204,1020,1022],{"id":1021},"appendacceptqueryevent-mediatypes",[208,1023,1024],{},"appendAcceptQuery(event, mediaTypes)",[212,1026,1027,1028,1031,1032,1034],{},"Advertise the query formats a resource accepts by setting the ",[208,1029,1030],{},"Accept-Query"," response header (RFC 10008, HTTP ",[208,1033,1000],{}," method).",[212,1036,1037,1038,1043,1044,1047],{},"The media types are serialized as a ",[1006,1039,1042],{"href":1040,"rel":1041},"https://www.rfc-editor.org/rfc/rfc8941",[1010],"Structured Fields"," List: the base media type becomes a token and any ",[208,1045,1046],{},";name=value"," parameters are emitted with their values as quoted strings.",[212,1049,1050],{},[225,1051,227],{},[229,1053,1055],{"className":231,"code":1054,"language":233,"meta":234,"style":234},"app.query(\"/search\", (event) => {\n  appendAcceptQuery(event, [\"application/sql;charset=UTF-8\", \"application/jsonpath\"]);\n  // Accept-Query: application/sql;charset=\"UTF-8\", application/jsonpath\n  return handleSearch(event);\n});\n",[208,1056,1057,1080,1099,1104,1113],{"__ignoreMap":234},[238,1058,1059,1061,1064,1066,1069,1072,1074,1076,1078],{"class":240,"line":241},[238,1060,245],{"class":244},[238,1062,1063],{"class":248},"query",[238,1065,252],{"class":244},[238,1067,1068],{"class":255},"\"/search\"",[238,1070,1071],{"class":244},", (",[238,1073,270],{"class":269},[238,1075,273],{"class":244},[238,1077,276],{"class":262},[238,1079,279],{"class":244},[238,1081,1082,1085,1088,1091,1093,1096],{"class":240,"line":282},[238,1083,1084],{"class":248},"  appendAcceptQuery",[238,1086,1087],{"class":244},"(event, [",[238,1089,1090],{"class":255},"\"application/sql;charset=UTF-8\"",[238,1092,259],{"class":244},[238,1094,1095],{"class":255},"\"application/jsonpath\"",[238,1097,1098],{"class":244},"]);\n",[238,1100,1101],{"class":240,"line":315},[238,1102,1103],{"class":311},"  // Accept-Query: application/sql;charset=\"UTF-8\", application/jsonpath\n",[238,1105,1106,1108,1111],{"class":240,"line":339},[238,1107,539],{"class":262},[238,1109,1110],{"class":248}," handleSearch",[238,1112,421],{"class":244},[238,1114,1115],{"class":240,"line":597},[238,1116,342],{"class":244},[204,1118,1120],{"id":1119},"definequeryhandler",[208,1121,1122],{},"defineQueryHandler()",[212,1124,1125,1126,1128,1129,1132],{},"Define an HTTP ",[208,1127,1000],{}," method handler (RFC 10008) with the accepted query ",[208,1130,1131],{},"formats"," enforced and advertised.",[212,1134,1135,1136,1138,1139,1142,1143,1145,1146,1149,1150,1152],{},"The ",[208,1137,1131],{}," array lists the accepted query media types (wildcards like ",[208,1140,1141],{},"application/*"," are supported). On every response — including error responses — they are advertised via the ",[208,1144,1030],{}," header. The handler receives the matched request media type as ",[208,1147,1148],{},"format"," (lower-cased, without parameters) and the query text as ",[208,1151,1063],{},", read from the request body.",[212,1154,1155,1156,1159,1160,1162,1163,1166,1167,1169,1170,1173,1174,1176,1177,1180],{},"Requests are rejected with ",[208,1157,1158],{},"405"," (non-",[208,1161,1000],{}," method), ",[208,1164,1165],{},"400"," (missing ",[208,1168,357],{},"), ",[208,1171,1172],{},"422"," (malformed ",[208,1175,357],{},"), or ",[208,1178,1179],{},"415"," (unsupported query format).",[212,1182,1183,1184,1187,1188,1191],{},"Set ",[208,1185,1186],{},"body: false"," to opt out of reading the request body: the handler then receives only ",[208,1189,1190],{},"{ format }"," and reads the body itself (e.g. as a stream or with a custom parser).",[212,1193,1194,1195,1197,1198,1201,1202,1205,1206,1208,1209,1212,1213,1215,1216,1219,1220,1222,1223,1226],{},"With the ",[208,1196,249],{}," option, the same handler also serves an equivalent, HTTP-cacheable GET (RFC 10008 §2.3): the query is read from the ",[208,1199,1200],{},"?q="," URL search param and the format from ",[208,1203,1204],{},"?f="," (both names configurable), the handler receives the resolved ",[208,1207,1063],{}," on both paths, and successful QUERY responses advertise the equivalent GET via ",[208,1210,1211],{},"Content-Location"," — preserving existing search params, and skipped when the URL would exceed 2048 chars. The handler gates the method itself (",[208,1214,1158],{}," for anything else), so a single ",[208,1217,1218],{},"app.all"," route serves QUERY, GET, and HEAD. GET-path rejections are ",[208,1221,1165],{},". Pass ",[208,1224,1225],{},"get: true"," for the default param names, a string to set the query param, or an object to set both.",[212,1228,1229],{},[225,1230,227],{},[229,1232,1234],{"className":231,"code":1233,"language":233,"meta":234,"style":234},"app.query(\n  \"/books\",\n  defineQueryHandler({\n    formats: [\"application/sql\", \"application/jsonpath\"],\n    handler: (event, { format, query }) => runQuery(format, query),\n  }),\n);\n",[208,1235,1236,1244,1251,1258,1273,1302,1307],{"__ignoreMap":234},[238,1237,1238,1240,1242],{"class":240,"line":241},[238,1239,245],{"class":244},[238,1241,1063],{"class":248},[238,1243,837],{"class":244},[238,1245,1246,1249],{"class":240,"line":282},[238,1247,1248],{"class":255},"  \"/books\"",[238,1250,958],{"class":244},[238,1252,1253,1256],{"class":240,"line":315},[238,1254,1255],{"class":248},"  defineQueryHandler",[238,1257,660],{"class":244},[238,1259,1260,1263,1266,1268,1270],{"class":240,"line":339},[238,1261,1262],{"class":244},"    formats: [",[238,1264,1265],{"class":255},"\"application/sql\"",[238,1267,259],{"class":244},[238,1269,1095],{"class":255},[238,1271,1272],{"class":244},"],\n",[238,1274,1275,1278,1281,1283,1286,1288,1290,1292,1294,1296,1299],{"class":240,"line":597},[238,1276,1277],{"class":248},"    handler",[238,1279,1280],{"class":244},": (",[238,1282,270],{"class":269},[238,1284,1285],{"class":244},", { ",[238,1287,1148],{"class":269},[238,1289,259],{"class":244},[238,1291,1063],{"class":269},[238,1293,941],{"class":244},[238,1295,276],{"class":262},[238,1297,1298],{"class":248}," runQuery",[238,1300,1301],{"class":244},"(format, query),\n",[238,1303,1304],{"class":240,"line":614},[238,1305,1306],{"class":244},"  }),\n",[238,1308,1309],{"class":240,"line":752},[238,1310,1311],{"class":244},");\n",[212,1313,1314],{},[225,1315,227],{},[229,1317,1319],{"className":231,"code":1318,"language":233,"meta":234,"style":234},"const searchBooks = defineQueryHandler({\n  formats: [\"application/sql\", \"application/jsonpath\"],\n  get: true,\n  handler: (event, { format, query }) => runQuery(format, query),\n});\napp.all(\"/books\", searchBooks);\n// QUERY /books     -> 200 + Content-Location: /books?q=\u003Cquery>&f=\u003Cformat>\n// GET /books?q=... -> same result, ordinary HTTP caching applies\n",[208,1320,1321,1335,1348,1357,1382,1386,1401,1406],{"__ignoreMap":234},[238,1322,1323,1325,1328,1330,1333],{"class":240,"line":241},[238,1324,646],{"class":262},[238,1326,1327],{"class":294}," searchBooks",[238,1329,324],{"class":262},[238,1331,1332],{"class":248}," defineQueryHandler",[238,1334,660],{"class":244},[238,1336,1337,1340,1342,1344,1346],{"class":240,"line":282},[238,1338,1339],{"class":244},"  formats: [",[238,1341,1265],{"class":255},[238,1343,259],{"class":244},[238,1345,1095],{"class":255},[238,1347,1272],{"class":244},[238,1349,1350,1353,1355],{"class":240,"line":315},[238,1351,1352],{"class":244},"  get: ",[238,1354,707],{"class":294},[238,1356,958],{"class":244},[238,1358,1359,1362,1364,1366,1368,1370,1372,1374,1376,1378,1380],{"class":240,"line":339},[238,1360,1361],{"class":248},"  handler",[238,1363,1280],{"class":244},[238,1365,270],{"class":269},[238,1367,1285],{"class":244},[238,1369,1148],{"class":269},[238,1371,259],{"class":244},[238,1373,1063],{"class":269},[238,1375,941],{"class":244},[238,1377,276],{"class":262},[238,1379,1298],{"class":248},[238,1381,1301],{"class":244},[238,1383,1384],{"class":240,"line":597},[238,1385,342],{"class":244},[238,1387,1388,1390,1393,1395,1398],{"class":240,"line":614},[238,1389,245],{"class":244},[238,1391,1392],{"class":248},"all",[238,1394,252],{"class":244},[238,1396,1397],{"class":255},"\"/books\"",[238,1399,1400],{"class":244},", searchBooks);\n",[238,1402,1403],{"class":240,"line":752},[238,1404,1405],{"class":311},"// QUERY /books     -> 200 + Content-Location: /books?q=\u003Cquery>&f=\u003Cformat>\n",[238,1407,1408],{"class":240,"line":768},[238,1409,1410],{"class":311},"// GET /books?q=... -> same result, ordinary HTTP caching applies\n",[204,1412,1414],{"id":1413},"requirecontenttypeevent-acceptedtypes",[208,1415,1416],{},"requireContentType(event, acceptedTypes)",[212,1418,1419,1420,1422,1423,1425],{},"Assert that the request ",[208,1421,357],{}," is present and one of the accepted media types, following the requirements of RFC 10008 for the HTTP ",[208,1424,1000],{}," method.",[212,1427,1428],{},"Throws:",[1430,1431,1432,1442,1450],"ul",{},[1433,1434,1435,1438,1439,1441],"li",{},[208,1436,1437],{},"400 Bad Request"," if the ",[208,1440,357],{}," header is missing.",[1433,1443,1444,1438,1447,1449],{},[208,1445,1446],{},"422 Unprocessable Content",[208,1448,357],{}," header is malformed.",[1433,1451,1452,1455],{},[208,1453,1454],{},"415 Unsupported Media Type"," if the media type is not accepted.",[212,1457,1458,1459,1462,1463,1466,1467,1470,1471,1018],{},"Accepted types may use wildcards: ",[208,1460,1461],{},"*"," / ",[208,1464,1465],{},"*&#47;*"," match anything and ",[208,1468,1469],{},"type/*"," matches any subtype of ",[208,1472,1473],{},"type",[212,1475,1476],{},[225,1477,227],{},[229,1479,1481],{"className":231,"code":1480,"language":233,"meta":234,"style":234},"app.query(\"/search\", async (event) => {\n  requireContentType(event, [\"application/sql\", \"application/jsonpath\"]);\n  const body = await readBody(event, { type: \"text\" });\n  // ...\n});\n",[208,1482,1483,1507,1522,1541,1546],{"__ignoreMap":234},[238,1484,1485,1487,1489,1491,1493,1495,1497,1499,1501,1503,1505],{"class":240,"line":241},[238,1486,245],{"class":244},[238,1488,1063],{"class":248},[238,1490,252],{"class":244},[238,1492,1068],{"class":255},[238,1494,259],{"class":244},[238,1496,263],{"class":262},[238,1498,266],{"class":244},[238,1500,270],{"class":269},[238,1502,273],{"class":244},[238,1504,276],{"class":262},[238,1506,279],{"class":244},[238,1508,1509,1512,1514,1516,1518,1520],{"class":240,"line":282},[238,1510,1511],{"class":248},"  requireContentType",[238,1513,1087],{"class":244},[238,1515,1265],{"class":255},[238,1517,259],{"class":244},[238,1519,1095],{"class":255},[238,1521,1098],{"class":244},[238,1523,1524,1526,1528,1530,1532,1534,1536,1539],{"class":240,"line":315},[238,1525,318],{"class":262},[238,1527,411],{"class":294},[238,1529,324],{"class":262},[238,1531,327],{"class":262},[238,1533,418],{"class":248},[238,1535,474],{"class":244},[238,1537,1538],{"class":255},"\"text\"",[238,1540,480],{"class":244},[238,1542,1543],{"class":240,"line":339},[238,1544,1545],{"class":311},"  // ...\n",[238,1547,1548],{"class":240,"line":597},[238,1549,342],{"class":244},[199,1551,1553],{"id":1552},"cache","Cache",[204,1555,1557],{"id":1556},"handlecacheheadersevent-opts",[208,1558,1559],{},"handleCacheHeaders(event, opts)",[212,1561,1562,1563,1566,1567,1570],{},"Check request caching headers (",[208,1564,1565],{},"If-Modified-Since",") and add caching headers (Last-Modified, Cache-Control) Note: ",[208,1568,1569],{},"public"," cache control will be added by default",[199,1572,1574],{"id":1573},"more-request-utils","More Request Utils",[204,1576,1578],{"id":1577},"assertmethodevent-expected-allowhead",[208,1579,1580],{},"assertMethod(event, expected, allowHead?)",[212,1582,1583,1584,1018],{},"Asserts that the incoming request method is of the expected type using ",[208,1585,1586],{},"isMethod",[212,1588,1589,1590,1593],{},"If the method is not allowed, it will throw a 405 error and include an ",[208,1591,1592],{},"Allow"," response header listing the permitted methods, as required by RFC 9110.",[212,1595,1596,1597,358,1600,1602,1603,1606,1607,1018],{},"If ",[208,1598,1599],{},"allowHead",[208,1601,707],{},", it will allow ",[208,1604,1605],{},"HEAD"," requests to pass if the expected method is ",[208,1608,1609],{},"GET",[212,1611,1612],{},[225,1613,227],{},[229,1615,1617],{"className":231,"code":1616,"language":233,"meta":234,"style":234},"app.get(\"/\", (event) => {\n  assertMethod(event, \"GET\");\n  // Handle GET request, otherwise throw 405 error\n});\n",[208,1618,1619,1639,1651,1656],{"__ignoreMap":234},[238,1620,1621,1623,1625,1627,1629,1631,1633,1635,1637],{"class":240,"line":241},[238,1622,245],{"class":244},[238,1624,249],{"class":248},[238,1626,252],{"class":244},[238,1628,256],{"class":255},[238,1630,1071],{"class":244},[238,1632,270],{"class":269},[238,1634,273],{"class":244},[238,1636,276],{"class":262},[238,1638,279],{"class":244},[238,1640,1641,1644,1646,1649],{"class":240,"line":282},[238,1642,1643],{"class":248},"  assertMethod",[238,1645,291],{"class":244},[238,1647,1648],{"class":255},"\"GET\"",[238,1650,1311],{"class":244},[238,1652,1653],{"class":240,"line":315},[238,1654,1655],{"class":311},"  // Handle GET request, otherwise throw 405 error\n",[238,1657,1658],{"class":240,"line":339},[238,1659,342],{"class":244},[204,1661,1663],{"id":1662},"getqueryevent",[208,1664,1665],{},"getQuery(event)",[212,1667,1668],{},"Get parsed query string object from the request URL.",[212,1670,1671],{},[225,1672,227],{},[229,1674,1676],{"className":231,"code":1675,"language":233,"meta":234,"style":234},"app.get(\"/\", (event) => {\n  const query = getQuery(event); // { key: \"value\", key2: [\"value1\", \"value2\"] }\n});\n",[208,1677,1678,1698,1716],{"__ignoreMap":234},[238,1679,1680,1682,1684,1686,1688,1690,1692,1694,1696],{"class":240,"line":241},[238,1681,245],{"class":244},[238,1683,249],{"class":248},[238,1685,252],{"class":244},[238,1687,256],{"class":255},[238,1689,1071],{"class":244},[238,1691,270],{"class":269},[238,1693,273],{"class":244},[238,1695,276],{"class":262},[238,1697,279],{"class":244},[238,1699,1700,1702,1705,1707,1710,1713],{"class":240,"line":282},[238,1701,318],{"class":262},[238,1703,1704],{"class":294}," query",[238,1706,324],{"class":262},[238,1708,1709],{"class":248}," getQuery",[238,1711,1712],{"class":244},"(event); ",[238,1714,1715],{"class":311},"// { key: \"value\", key2: [\"value1\", \"value2\"] }\n",[238,1717,1718],{"class":240,"line":315},[238,1719,342],{"class":244},[204,1721,1723],{"id":1722},"getrequesthostevent-opts-xforwardedhost",[208,1724,1725],{},"getRequestHost(event, opts: { xForwardedHost? })",[212,1727,1728],{},"Get the request hostname.",[212,1730,1596,1731,358,1734,1736,1737,1740],{},[208,1732,1733],{},"xForwardedHost",[208,1735,707],{},", it will use the ",[208,1738,1739],{},"x-forwarded-host"," header if it exists.",[212,1742,1743],{},"If no host header is found, it will return an empty string.",[212,1745,1746],{},[225,1747,227],{},[229,1749,1751],{"className":231,"code":1750,"language":233,"meta":234,"style":234},"app.get(\"/\", (event) => {\n  const host = getRequestHost(event); // \"example.com\"\n});\n",[208,1752,1753,1773,1790],{"__ignoreMap":234},[238,1754,1755,1757,1759,1761,1763,1765,1767,1769,1771],{"class":240,"line":241},[238,1756,245],{"class":244},[238,1758,249],{"class":248},[238,1760,252],{"class":244},[238,1762,256],{"class":255},[238,1764,1071],{"class":244},[238,1766,270],{"class":269},[238,1768,273],{"class":244},[238,1770,276],{"class":262},[238,1772,279],{"class":244},[238,1774,1775,1777,1780,1782,1785,1787],{"class":240,"line":282},[238,1776,318],{"class":262},[238,1778,1779],{"class":294}," host",[238,1781,324],{"class":262},[238,1783,1784],{"class":248}," getRequestHost",[238,1786,1712],{"class":244},[238,1788,1789],{"class":311},"// \"example.com\"\n",[238,1791,1792],{"class":240,"line":315},[238,1793,342],{"class":244},[204,1795,1797],{"id":1796},"getrequestipevent",[208,1798,1799],{},"getRequestIP(event)",[212,1801,1802],{},"Try to get the client IP address from the incoming request.",[212,1804,1596,1805,358,1808,1736,1810,1740],{},[208,1806,1807],{},"xForwardedFor",[208,1809,707],{},[208,1811,1812],{},"x-forwarded-for",[212,1814,1815,1816,1018],{},"If IP cannot be determined, it will default to ",[208,1817,1818],{},"undefined",[212,1820,1821],{},[225,1822,227],{},[229,1824,1826],{"className":231,"code":1825,"language":233,"meta":234,"style":234},"app.get(\"/\", (event) => {\n  const ip = getRequestIP(event); // \"192.0.2.0\"\n});\n",[208,1827,1828,1848,1865],{"__ignoreMap":234},[238,1829,1830,1832,1834,1836,1838,1840,1842,1844,1846],{"class":240,"line":241},[238,1831,245],{"class":244},[238,1833,249],{"class":248},[238,1835,252],{"class":244},[238,1837,256],{"class":255},[238,1839,1071],{"class":244},[238,1841,270],{"class":269},[238,1843,273],{"class":244},[238,1845,276],{"class":262},[238,1847,279],{"class":244},[238,1849,1850,1852,1855,1857,1860,1862],{"class":240,"line":282},[238,1851,318],{"class":262},[238,1853,1854],{"class":294}," ip",[238,1856,324],{"class":262},[238,1858,1859],{"class":248}," getRequestIP",[238,1861,1712],{"class":244},[238,1863,1864],{"class":311},"// \"192.0.2.0\"\n",[238,1866,1867],{"class":240,"line":315},[238,1868,342],{"class":244},[204,1870,1872],{"id":1871},"getrequestprotocolevent-opts-xforwardedproto",[208,1873,1874],{},"getRequestProtocol(event, opts: { xForwardedProto? })",[212,1876,1877],{},"Get the request protocol.",[212,1879,1596,1880,1883,1884,1887,1888,1018],{},[208,1881,1882],{},"x-forwarded-proto"," header is set to \"https\", it will return \"https\". If the header contains a comma-separated list of protocols, the first entry is used. You can disable this behavior by setting ",[208,1885,1886],{},"xForwardedProto"," to ",[208,1889,1890],{},"false",[212,1892,1893],{},"If protocol cannot be determined, it will default to \"http\".",[212,1895,1896],{},[225,1897,227],{},[229,1899,1901],{"className":231,"code":1900,"language":233,"meta":234,"style":234},"app.get(\"/\", (event) => {\n  const protocol = getRequestProtocol(event); // \"https\"\n});\n",[208,1902,1903,1923,1940],{"__ignoreMap":234},[238,1904,1905,1907,1909,1911,1913,1915,1917,1919,1921],{"class":240,"line":241},[238,1906,245],{"class":244},[238,1908,249],{"class":248},[238,1910,252],{"class":244},[238,1912,256],{"class":255},[238,1914,1071],{"class":244},[238,1916,270],{"class":269},[238,1918,273],{"class":244},[238,1920,276],{"class":262},[238,1922,279],{"class":244},[238,1924,1925,1927,1930,1932,1935,1937],{"class":240,"line":282},[238,1926,318],{"class":262},[238,1928,1929],{"class":294}," protocol",[238,1931,324],{"class":262},[238,1933,1934],{"class":248}," getRequestProtocol",[238,1936,1712],{"class":244},[238,1938,1939],{"class":311},"// \"https\"\n",[238,1941,1942],{"class":240,"line":315},[238,1943,342],{"class":244},[204,1945,1947],{"id":1946},"getrequesturlevent-opts-xforwardedhost-xforwardedproto",[208,1948,1949],{},"getRequestURL(event, opts: { xForwardedHost?, xForwardedProto? })",[212,1951,1952],{},"Generated the full incoming request URL.",[212,1954,1596,1955,358,1957,1736,1959,1740],{},[208,1956,1733],{},[208,1958,707],{},[208,1960,1739],{},[212,1962,1596,1963,358,1965,1967,1968,1970],{},[208,1964,1886],{},[208,1966,1890],{},", it will not use the ",[208,1969,1882],{}," header.",[212,1972,1973],{},[225,1974,227],{},[229,1976,1978],{"className":231,"code":1977,"language":233,"meta":234,"style":234},"app.get(\"/\", (event) => {\n  const url = getRequestURL(event); // \"https://example.com/path\"\n});\n",[208,1979,1980,2000,2017],{"__ignoreMap":234},[238,1981,1982,1984,1986,1988,1990,1992,1994,1996,1998],{"class":240,"line":241},[238,1983,245],{"class":244},[238,1985,249],{"class":248},[238,1987,252],{"class":244},[238,1989,256],{"class":255},[238,1991,1071],{"class":244},[238,1993,270],{"class":269},[238,1995,273],{"class":244},[238,1997,276],{"class":262},[238,1999,279],{"class":244},[238,2001,2002,2004,2007,2009,2012,2014],{"class":240,"line":282},[238,2003,318],{"class":262},[238,2005,2006],{"class":294}," url",[238,2008,324],{"class":262},[238,2010,2011],{"class":248}," getRequestURL",[238,2013,1712],{"class":244},[238,2015,2016],{"class":311},"// \"https://example.com/path\"\n",[238,2018,2019],{"class":240,"line":315},[238,2020,342],{"class":244},[204,2022,2024],{"id":2023},"getrouterparamevent-name-opts-decode",[208,2025,2026],{},"getRouterParam(event, name, opts: { decode? })",[212,2028,2029],{},"Get a matched route param by name.",[212,2031,1596,2032,2035,2036,2038,2039,2042,2043,259,2046,2049,2050,2053,2054,2057],{},[208,2033,2034],{},"decode"," option is ",[208,2037,707],{},", it will decode the matched route param (like ",[208,2040,2041],{},"decodeURIComponent","), except encoded path separators (",[208,2044,2045],{},"%2f",[208,2047,2048],{},"%5c",") are kept encoded so decoding can never reintroduce a ",[208,2051,2052],{},"/"," or ",[208,2055,2056],{},"\\"," the router never matched.",[212,2059,2060],{},[225,2061,227],{},[229,2063,2065],{"className":231,"code":2064,"language":233,"meta":234,"style":234},"app.get(\"/\", (event) => {\n  const param = getRouterParam(event, \"key\");\n});\n",[208,2066,2067,2087,2106],{"__ignoreMap":234},[238,2068,2069,2071,2073,2075,2077,2079,2081,2083,2085],{"class":240,"line":241},[238,2070,245],{"class":244},[238,2072,249],{"class":248},[238,2074,252],{"class":244},[238,2076,256],{"class":255},[238,2078,1071],{"class":244},[238,2080,270],{"class":269},[238,2082,273],{"class":244},[238,2084,276],{"class":262},[238,2086,279],{"class":244},[238,2088,2089,2091,2094,2096,2099,2101,2104],{"class":240,"line":282},[238,2090,318],{"class":262},[238,2092,2093],{"class":294}," param",[238,2095,324],{"class":262},[238,2097,2098],{"class":248}," getRouterParam",[238,2100,291],{"class":244},[238,2102,2103],{"class":255},"\"key\"",[238,2105,1311],{"class":244},[238,2107,2108],{"class":240,"line":315},[238,2109,342],{"class":244},[204,2111,2113],{"id":2112},"getrouterparamsevent-opts-decode",[208,2114,2115],{},"getRouterParams(event, opts: { decode? })",[212,2117,2118],{},"Get matched route params.",[212,2120,1596,2121,2035,2123,2125,2126,2042,2128,259,2130,2049,2132,2053,2134,2057],{},[208,2122,2034],{},[208,2124,707],{},", it will decode the matched route params (like ",[208,2127,2041],{},[208,2129,2045],{},[208,2131,2048],{},[208,2133,2052],{},[208,2135,2056],{},[212,2137,2138],{},[225,2139,227],{},[229,2141,2143],{"className":231,"code":2142,"language":233,"meta":234,"style":234},"app.get(\"/\", (event) => {\n  const params = getRouterParams(event); // { key: \"value\" }\n});\n",[208,2144,2145,2165,2182],{"__ignoreMap":234},[238,2146,2147,2149,2151,2153,2155,2157,2159,2161,2163],{"class":240,"line":241},[238,2148,245],{"class":244},[238,2150,249],{"class":248},[238,2152,252],{"class":244},[238,2154,256],{"class":255},[238,2156,1071],{"class":244},[238,2158,270],{"class":269},[238,2160,273],{"class":244},[238,2162,276],{"class":262},[238,2164,279],{"class":244},[238,2166,2167,2169,2172,2174,2177,2179],{"class":240,"line":282},[238,2168,318],{"class":262},[238,2170,2171],{"class":294}," params",[238,2173,324],{"class":262},[238,2175,2176],{"class":248}," getRouterParams",[238,2178,1712],{"class":244},[238,2180,2181],{"class":311},"// { key: \"value\" }\n",[238,2183,2184],{"class":240,"line":315},[238,2185,342],{"class":244},[204,2187,2189],{"id":2188},"getvalidatedqueryevent-validate",[208,2190,2191],{},"getValidatedQuery(event, validate)",[212,2193,2194],{},"Get the query param from the request URL validated with validate function.",[212,2196,2197,2198,504],{},"You can use a simple function to validate the query object or use a Standard-Schema compatible library like ",[208,2199,503],{},[212,2201,2202],{},[225,2203,227],{},[229,2205,2207],{"className":231,"code":2206,"language":233,"meta":234,"style":234},"app.get(\"/\", async (event) => {\n  const query = await getValidatedQuery(event, (data) => {\n    return \"key\" in data && typeof data.key === \"string\";\n  });\n});\n",[208,2208,2209,2233,2258,2287,2292],{"__ignoreMap":234},[238,2210,2211,2213,2215,2217,2219,2221,2223,2225,2227,2229,2231],{"class":240,"line":241},[238,2212,245],{"class":244},[238,2214,249],{"class":248},[238,2216,252],{"class":244},[238,2218,256],{"class":255},[238,2220,259],{"class":244},[238,2222,263],{"class":262},[238,2224,266],{"class":244},[238,2226,270],{"class":269},[238,2228,273],{"class":244},[238,2230,276],{"class":262},[238,2232,279],{"class":244},[238,2234,2235,2237,2239,2241,2243,2246,2249,2252,2254,2256],{"class":240,"line":282},[238,2236,318],{"class":262},[238,2238,1704],{"class":294},[238,2240,324],{"class":262},[238,2242,327],{"class":262},[238,2244,2245],{"class":248}," getValidatedQuery",[238,2247,2248],{"class":244},"(event, (",[238,2250,2251],{"class":269},"data",[238,2253,273],{"class":244},[238,2255,276],{"class":262},[238,2257,279],{"class":244},[238,2259,2260,2263,2266,2269,2272,2275,2277,2280,2282,2285],{"class":240,"line":315},[238,2261,2262],{"class":262},"    return",[238,2264,2265],{"class":255}," \"key\"",[238,2267,2268],{"class":262}," in",[238,2270,2271],{"class":244}," data ",[238,2273,2274],{"class":262},"&&",[238,2276,542],{"class":262},[238,2278,2279],{"class":244}," data.key ",[238,2281,548],{"class":262},[238,2283,2284],{"class":255}," \"string\"",[238,2286,565],{"class":244},[238,2288,2289],{"class":240,"line":339},[238,2290,2291],{"class":244},"  });\n",[238,2293,2294],{"class":240,"line":597},[238,2295,342],{"class":244},[212,2297,2298],{},[225,2299,227],{},[229,2301,2303],{"className":231,"code":2302,"language":233,"meta":234,"style":234},"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",[208,2304,2305,2317,2341,2355,2359,2368,2377,2381,2385],{"__ignoreMap":234},[238,2306,2307,2309,2311,2313,2315],{"class":240,"line":241},[238,2308,630],{"class":262},[238,2310,633],{"class":244},[238,2312,636],{"class":262},[238,2314,639],{"class":255},[238,2316,565],{"class":244},[238,2318,2319,2321,2323,2325,2327,2329,2331,2333,2335,2337,2339],{"class":240,"line":282},[238,2320,245],{"class":244},[238,2322,249],{"class":248},[238,2324,252],{"class":244},[238,2326,256],{"class":255},[238,2328,259],{"class":244},[238,2330,263],{"class":262},[238,2332,266],{"class":244},[238,2334,270],{"class":269},[238,2336,273],{"class":244},[238,2338,276],{"class":262},[238,2340,279],{"class":244},[238,2342,2343,2345,2347,2349,2351,2353],{"class":240,"line":315},[238,2344,318],{"class":262},[238,2346,1704],{"class":294},[238,2348,324],{"class":262},[238,2350,327],{"class":262},[238,2352,2245],{"class":248},[238,2354,837],{"class":244},[238,2356,2357],{"class":240,"line":339},[238,2358,842],{"class":244},[238,2360,2361,2364,2366],{"class":240,"line":597},[238,2362,2363],{"class":244},"    z.",[238,2365,657],{"class":248},[238,2367,660],{"class":244},[238,2369,2370,2373,2375],{"class":240,"line":614},[238,2371,2372],{"class":244},"      key: z.",[238,2374,668],{"class":248},[238,2376,721],{"class":244},[238,2378,2379],{"class":240,"line":752},[238,2380,920],{"class":244},[238,2382,2383],{"class":240,"line":768},[238,2384,988],{"class":244},[238,2386,2387],{"class":240,"line":923},[238,2388,342],{"class":244},[212,2390,2391],{},[225,2392,227],{},[229,2394,2396],{"className":231,"code":2395,"language":233,"meta":234,"style":234},"import * as v from \"valibot\";\napp.get(\"/\", async (event) => {\n  const params = await getValidatedQuery(\n    event,\n    v.object({\n      key: v.string(),\n    }),\n    {\n      onError: ({ issues }) => ({\n        statusText: \"Custom validation error\",\n        message: v.summarize(issues),\n      }),\n    },\n  );\n});\n",[208,2397,2398,2414,2438,2452,2456,2464,2473,2477,2481,2495,2503,2511,2515,2519,2523],{"__ignoreMap":234},[238,2399,2400,2402,2404,2406,2408,2410,2412],{"class":240,"line":241},[238,2401,630],{"class":262},[238,2403,298],{"class":294},[238,2405,788],{"class":262},[238,2407,791],{"class":244},[238,2409,636],{"class":262},[238,2411,796],{"class":255},[238,2413,565],{"class":244},[238,2415,2416,2418,2420,2422,2424,2426,2428,2430,2432,2434,2436],{"class":240,"line":282},[238,2417,245],{"class":244},[238,2419,249],{"class":248},[238,2421,252],{"class":244},[238,2423,256],{"class":255},[238,2425,259],{"class":244},[238,2427,263],{"class":262},[238,2429,266],{"class":244},[238,2431,270],{"class":269},[238,2433,273],{"class":244},[238,2435,276],{"class":262},[238,2437,279],{"class":244},[238,2439,2440,2442,2444,2446,2448,2450],{"class":240,"line":315},[238,2441,318],{"class":262},[238,2443,2171],{"class":294},[238,2445,324],{"class":262},[238,2447,327],{"class":262},[238,2449,2245],{"class":248},[238,2451,837],{"class":244},[238,2453,2454],{"class":240,"line":339},[238,2455,842],{"class":244},[238,2457,2458,2460,2462],{"class":240,"line":597},[238,2459,847],{"class":244},[238,2461,657],{"class":248},[238,2463,660],{"class":244},[238,2465,2466,2469,2471],{"class":240,"line":614},[238,2467,2468],{"class":244},"      key: v.",[238,2470,668],{"class":248},[238,2472,721],{"class":244},[238,2474,2475],{"class":240,"line":752},[238,2476,920],{"class":244},[238,2478,2479],{"class":240,"line":768},[238,2480,926],{"class":244},[238,2482,2483,2485,2487,2489,2491,2493],{"class":240,"line":923},[238,2484,932],{"class":248},[238,2486,935],{"class":244},[238,2488,938],{"class":269},[238,2490,941],{"class":244},[238,2492,276],{"class":262},[238,2494,946],{"class":244},[238,2496,2497,2499,2501],{"class":240,"line":929},[238,2498,952],{"class":244},[238,2500,955],{"class":255},[238,2502,958],{"class":244},[238,2504,2505,2507,2509],{"class":240,"line":949},[238,2506,964],{"class":244},[238,2508,967],{"class":248},[238,2510,970],{"class":244},[238,2512,2513],{"class":240,"line":961},[238,2514,976],{"class":244},[238,2516,2517],{"class":240,"line":973},[238,2518,982],{"class":244},[238,2520,2521],{"class":240,"line":979},[238,2522,988],{"class":244},[238,2524,2525],{"class":240,"line":985},[238,2526,342],{"class":244},[204,2528,2530],{"id":2529},"getvalidatedrouterparamsevent-validate",[208,2531,2532],{},"getValidatedRouterParams(event, validate)",[212,2534,2535],{},"Get matched route params and validate with validate function.",[212,2537,1596,2538,2035,2540,2125,2542,2042,2544,259,2546,2049,2548,2053,2550,2057],{},[208,2539,2034],{},[208,2541,707],{},[208,2543,2041],{},[208,2545,2045],{},[208,2547,2048],{},[208,2549,2052],{},[208,2551,2056],{},[212,2553,2554,2555,504],{},"You can use a simple function to validate the params object or use a Standard-Schema compatible library like ",[208,2556,503],{},[212,2558,2559],{},[225,2560,227],{},[229,2562,2564],{"className":231,"code":2563,"language":233,"meta":234,"style":234},"app.get(\"/:key\", async (event) => {\n  const params = await getValidatedRouterParams(event, (data) => {\n    return \"key\" in data && typeof data.key === \"string\";\n  });\n});\n",[208,2565,2566,2591,2614,2636,2640],{"__ignoreMap":234},[238,2567,2568,2570,2572,2574,2577,2579,2581,2583,2585,2587,2589],{"class":240,"line":241},[238,2569,245],{"class":244},[238,2571,249],{"class":248},[238,2573,252],{"class":244},[238,2575,2576],{"class":255},"\"/:key\"",[238,2578,259],{"class":244},[238,2580,263],{"class":262},[238,2582,266],{"class":244},[238,2584,270],{"class":269},[238,2586,273],{"class":244},[238,2588,276],{"class":262},[238,2590,279],{"class":244},[238,2592,2593,2595,2597,2599,2601,2604,2606,2608,2610,2612],{"class":240,"line":282},[238,2594,318],{"class":262},[238,2596,2171],{"class":294},[238,2598,324],{"class":262},[238,2600,327],{"class":262},[238,2602,2603],{"class":248}," getValidatedRouterParams",[238,2605,2248],{"class":244},[238,2607,2251],{"class":269},[238,2609,273],{"class":244},[238,2611,276],{"class":262},[238,2613,279],{"class":244},[238,2615,2616,2618,2620,2622,2624,2626,2628,2630,2632,2634],{"class":240,"line":315},[238,2617,2262],{"class":262},[238,2619,2265],{"class":255},[238,2621,2268],{"class":262},[238,2623,2271],{"class":244},[238,2625,2274],{"class":262},[238,2627,542],{"class":262},[238,2629,2279],{"class":244},[238,2631,548],{"class":262},[238,2633,2284],{"class":255},[238,2635,565],{"class":244},[238,2637,2638],{"class":240,"line":339},[238,2639,2291],{"class":244},[238,2641,2642],{"class":240,"line":597},[238,2643,342],{"class":244},[212,2645,2646],{},[225,2647,227],{},[229,2649,2651],{"className":231,"code":2650,"language":233,"meta":234,"style":234},"import { z } from \"zod\";\napp.get(\"/:key\", async (event) => {\n  const params = await getValidatedRouterParams(\n    event,\n    z.object({\n      key: z.string(),\n    }),\n  );\n});\n",[208,2652,2653,2665,2689,2703,2707,2715,2723,2727,2731],{"__ignoreMap":234},[238,2654,2655,2657,2659,2661,2663],{"class":240,"line":241},[238,2656,630],{"class":262},[238,2658,633],{"class":244},[238,2660,636],{"class":262},[238,2662,639],{"class":255},[238,2664,565],{"class":244},[238,2666,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687],{"class":240,"line":282},[238,2668,245],{"class":244},[238,2670,249],{"class":248},[238,2672,252],{"class":244},[238,2674,2576],{"class":255},[238,2676,259],{"class":244},[238,2678,263],{"class":262},[238,2680,266],{"class":244},[238,2682,270],{"class":269},[238,2684,273],{"class":244},[238,2686,276],{"class":262},[238,2688,279],{"class":244},[238,2690,2691,2693,2695,2697,2699,2701],{"class":240,"line":315},[238,2692,318],{"class":262},[238,2694,2171],{"class":294},[238,2696,324],{"class":262},[238,2698,327],{"class":262},[238,2700,2603],{"class":248},[238,2702,837],{"class":244},[238,2704,2705],{"class":240,"line":339},[238,2706,842],{"class":244},[238,2708,2709,2711,2713],{"class":240,"line":597},[238,2710,2363],{"class":244},[238,2712,657],{"class":248},[238,2714,660],{"class":244},[238,2716,2717,2719,2721],{"class":240,"line":614},[238,2718,2372],{"class":244},[238,2720,668],{"class":248},[238,2722,721],{"class":244},[238,2724,2725],{"class":240,"line":752},[238,2726,920],{"class":244},[238,2728,2729],{"class":240,"line":768},[238,2730,988],{"class":244},[238,2732,2733],{"class":240,"line":923},[238,2734,342],{"class":244},[212,2736,2737],{},[225,2738,227],{},[229,2740,2742],{"className":231,"code":2741,"language":233,"meta":234,"style":234},"import * as v from \"valibot\";\napp.get(\"/:key\", async (event) => {\n  const params = await getValidatedRouterParams(\n    event,\n    v.object({\n      key: v.pipe(v.string(), v.picklist([\"route-1\", \"route-2\", \"route-3\"])),\n    }),\n    {\n      decode: true,\n      onError: ({ issues }) => ({\n        statusText: \"Custom validation error\",\n        message: v.summarize(issues),\n      }),\n    },\n  );\n});\n",[208,2743,2744,2760,2784,2798,2802,2810,2844,2848,2852,2861,2875,2883,2891,2895,2899,2903],{"__ignoreMap":234},[238,2745,2746,2748,2750,2752,2754,2756,2758],{"class":240,"line":241},[238,2747,630],{"class":262},[238,2749,298],{"class":294},[238,2751,788],{"class":262},[238,2753,791],{"class":244},[238,2755,636],{"class":262},[238,2757,796],{"class":255},[238,2759,565],{"class":244},[238,2761,2762,2764,2766,2768,2770,2772,2774,2776,2778,2780,2782],{"class":240,"line":282},[238,2763,245],{"class":244},[238,2765,249],{"class":248},[238,2767,252],{"class":244},[238,2769,2576],{"class":255},[238,2771,259],{"class":244},[238,2773,263],{"class":262},[238,2775,266],{"class":244},[238,2777,270],{"class":269},[238,2779,273],{"class":244},[238,2781,276],{"class":262},[238,2783,279],{"class":244},[238,2785,2786,2788,2790,2792,2794,2796],{"class":240,"line":315},[238,2787,318],{"class":262},[238,2789,2171],{"class":294},[238,2791,324],{"class":262},[238,2793,327],{"class":262},[238,2795,2603],{"class":248},[238,2797,837],{"class":244},[238,2799,2800],{"class":240,"line":339},[238,2801,842],{"class":244},[238,2803,2804,2806,2808],{"class":240,"line":597},[238,2805,847],{"class":244},[238,2807,657],{"class":248},[238,2809,660],{"class":244},[238,2811,2812,2814,2816,2818,2820,2822,2825,2828,2831,2833,2836,2838,2841],{"class":240,"line":614},[238,2813,2468],{"class":244},[238,2815,859],{"class":248},[238,2817,862],{"class":244},[238,2819,668],{"class":248},[238,2821,867],{"class":244},[238,2823,2824],{"class":248},"picklist",[238,2826,2827],{"class":244},"([",[238,2829,2830],{"class":255},"\"route-1\"",[238,2832,259],{"class":244},[238,2834,2835],{"class":255},"\"route-2\"",[238,2837,259],{"class":244},[238,2839,2840],{"class":255},"\"route-3\"",[238,2842,2843],{"class":244},"])),\n",[238,2845,2846],{"class":240,"line":752},[238,2847,920],{"class":244},[238,2849,2850],{"class":240,"line":768},[238,2851,926],{"class":244},[238,2853,2854,2857,2859],{"class":240,"line":923},[238,2855,2856],{"class":244},"      decode: ",[238,2858,707],{"class":294},[238,2860,958],{"class":244},[238,2862,2863,2865,2867,2869,2871,2873],{"class":240,"line":929},[238,2864,932],{"class":248},[238,2866,935],{"class":244},[238,2868,938],{"class":269},[238,2870,941],{"class":244},[238,2872,276],{"class":262},[238,2874,946],{"class":244},[238,2876,2877,2879,2881],{"class":240,"line":949},[238,2878,952],{"class":244},[238,2880,955],{"class":255},[238,2882,958],{"class":244},[238,2884,2885,2887,2889],{"class":240,"line":961},[238,2886,964],{"class":244},[238,2888,967],{"class":248},[238,2890,970],{"class":244},[238,2892,2893],{"class":240,"line":973},[238,2894,976],{"class":244},[238,2896,2897],{"class":240,"line":979},[238,2898,982],{"class":244},[238,2900,2901],{"class":240,"line":985},[238,2902,988],{"class":244},[238,2904,2905],{"class":240,"line":991},[238,2906,342],{"class":244},[204,2908,2910],{"id":2909},"ismethodevent-expected-allowhead",[208,2911,2912],{},"isMethod(event, expected, allowHead?)",[212,2914,2915],{},"Checks if the incoming request method is of the expected type.",[212,2917,1596,2918,358,2920,1602,2922,1606,2924,1018],{},[208,2919,1599],{},[208,2921,707],{},[208,2923,1605],{},[208,2925,1609],{},[212,2927,2928],{},[225,2929,227],{},[229,2931,2933],{"className":231,"code":2932,"language":233,"meta":234,"style":234},"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",[208,2934,2935,2955,2971,2976,3004,3009,3014],{"__ignoreMap":234},[238,2936,2937,2939,2941,2943,2945,2947,2949,2951,2953],{"class":240,"line":241},[238,2938,245],{"class":244},[238,2940,249],{"class":248},[238,2942,252],{"class":244},[238,2944,256],{"class":255},[238,2946,1071],{"class":244},[238,2948,270],{"class":269},[238,2950,273],{"class":244},[238,2952,276],{"class":262},[238,2954,279],{"class":244},[238,2956,2957,2960,2962,2964,2966,2968],{"class":240,"line":282},[238,2958,2959],{"class":262},"  if",[238,2961,266],{"class":244},[238,2963,1586],{"class":248},[238,2965,291],{"class":244},[238,2967,1648],{"class":255},[238,2969,2970],{"class":244},")) {\n",[238,2972,2973],{"class":240,"line":315},[238,2974,2975],{"class":311},"    // Handle GET request\n",[238,2977,2978,2981,2984,2987,2989,2991,2993,2996,2998,3001],{"class":240,"line":339},[238,2979,2980],{"class":244},"  } ",[238,2982,2983],{"class":262},"else",[238,2985,2986],{"class":262}," if",[238,2988,266],{"class":244},[238,2990,1586],{"class":248},[238,2992,1087],{"class":244},[238,2994,2995],{"class":255},"\"POST\"",[238,2997,259],{"class":244},[238,2999,3000],{"class":255},"\"PUT\"",[238,3002,3003],{"class":244},"])) {\n",[238,3005,3006],{"class":240,"line":597},[238,3007,3008],{"class":311},"    // Handle POST or PUT request\n",[238,3010,3011],{"class":240,"line":614},[238,3012,3013],{"class":244},"  }\n",[238,3015,3016],{"class":240,"line":752},[238,3017,342],{"class":244},[204,3019,3021],{"id":3020},"requestwithbaseurlreq-base",[208,3022,3023],{},"requestWithBaseURL(req, base)",[212,3025,3026],{},"Create a lightweight request proxy with the base path stripped from the URL pathname.",[204,3028,3030],{"id":3029},"requestwithurlreq-url",[208,3031,3032],{},"requestWithURL(req, url)",[212,3034,3035],{},"Create a lightweight request proxy that overrides only the URL.",[212,3037,3038,3039,3042],{},"Avoids cloning the original request (no ",[208,3040,3041],{},"new Request()"," allocation).",[204,3044,3046],{"id":3045},"torequestinput-options",[208,3047,3048],{},"toRequest(input, options?)",[212,3050,3051,3052,1018],{},"Convert input into a web ",[1006,3053,99],{"href":3054,"rel":3055},"https://developer.mozilla.org/en-US/docs/Web/API/Request",[1010],[212,3057,3058],{},"If input is a relative URL, it will be normalized into a full path based on headers.",[212,3060,3061],{},"If input is already a Request and no options are provided, it will be returned as-is.",[204,3063,3065],{"id":3064},"getrequestfingerprintevent-opts",[208,3066,3067],{},"getRequestFingerprint(event, opts)",[212,3069,3070],{},"Get a unique fingerprint for the incoming request.",[3072,3073,3074],"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 pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}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);}",{"title":234,"searchDepth":282,"depth":282,"links":3076},[3077,3082,3088,3091],{"id":201,"depth":282,"text":202,"children":3078},[3079,3080,3081],{"id":206,"depth":315,"text":210},{"id":345,"depth":315,"text":348},{"id":487,"depth":315,"text":490},{"id":996,"depth":282,"text":3083,"children":3084},"Query (HTTP QUERY method)",[3085,3086,3087],{"id":1021,"depth":315,"text":1024},{"id":1119,"depth":315,"text":1122},{"id":1413,"depth":315,"text":1416},{"id":1552,"depth":282,"text":1553,"children":3089},[3090],{"id":1556,"depth":315,"text":1559},{"id":1573,"depth":282,"text":1574,"children":3092},[3093,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107],{"id":1577,"depth":315,"text":1580},{"id":1662,"depth":315,"text":1665},{"id":1722,"depth":315,"text":1725},{"id":1796,"depth":315,"text":1799},{"id":1871,"depth":315,"text":1874},{"id":1946,"depth":315,"text":1949},{"id":2023,"depth":315,"text":2026},{"id":2112,"depth":315,"text":2115},{"id":2188,"depth":315,"text":2191},{"id":2529,"depth":315,"text":2532},{"id":2909,"depth":315,"text":2912},{"id":3020,"depth":315,"text":3023},{"id":3029,"depth":315,"text":3032},{"id":3045,"depth":315,"text":3048},{"id":3064,"depth":315,"text":3067},"H3 request utilities.","md",{"automd":3111,"icon":102},true,{"icon":102},{"title":99,"description":3108},"z97RJjzsY62rryC_oG-alrIQU-ohi_9sPVomqiMbb6Q",[3116,3117],{"title":92,"path":93,"stem":94,"description":234,"icon":97,"children":-1},{"title":104,"path":105,"stem":106,"description":3118,"icon":107,"children":-1},"H3 response utilities.",1783690730078]