[{"data":1,"prerenderedAt":1951},["ShallowReactive",2],{"navigation":3,"-guide-routing":225,"-guide-routing-surround":1946},[4,76,219],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Docs","/guide","1.guide/0.index",[9,11,16,21,26,31,36,41,46,51,56,61,66,71],{"title":5,"path":6,"stem":7,"icon":10},"ph:book-open-duotone",{"title":12,"path":13,"stem":14,"icon":15},"Server Utils","/guide/utils","1.guide/1.utils","ri:tools-line",{"title":17,"path":18,"stem":19,"icon":20},"Tasks","/guide/tasks","1.guide/10.tasks","codicon:run-all",{"title":22,"path":23,"stem":24,"icon":25},"Server Routes","/guide/routing","1.guide/2.routing","ri:direction-line",{"title":27,"path":28,"stem":29,"icon":30},"WebSocket","/guide/websocket","1.guide/3.websocket","cib:socket-io",{"title":32,"path":33,"stem":34,"icon":35},"KV Storage","/guide/storage","1.guide/4.storage","carbon:datastore",{"title":37,"path":38,"stem":39,"icon":40},"SQL Database","/guide/database","1.guide/5.database","ri:database-2-line",{"title":42,"path":43,"stem":44,"icon":45},"Cache","/guide/cache","1.guide/6.cache","ri:speed-line",{"title":47,"path":48,"stem":49,"icon":50},"Fetch","/guide/fetch","1.guide/7.fetch","ri:global-line",{"title":52,"path":53,"stem":54,"icon":55},"Assets","/guide/assets","1.guide/8.assets","ri:image-2-line",{"title":57,"path":58,"stem":59,"icon":60},"Plugins","/guide/plugins","1.guide/9.plugins","ri:plug-line",{"title":62,"path":63,"stem":64,"icon":65},"Configuration","/guide/configuration","1.guide/97.configuration","ri:settings-3-line",{"title":67,"path":68,"stem":69,"icon":70},"TypeScript","/guide/typescript","1.guide/98.typescript","tabler:brand-typescript",{"title":72,"path":73,"stem":74,"icon":75},"Nightly Channel","/guide/nightly","1.guide/99.nightly","ri:moon-fill",{"title":77,"path":78,"stem":79,"children":80,"icon":82},"Deploy","/deploy","2.deploy/0.index",[81,83,87,113,118],{"title":77,"path":78,"stem":79,"icon":82},"ri:upload-cloud-2-line",{"title":84,"path":85,"stem":86,"icon":50},"Edge Workers","/deploy/workers","2.deploy/1.workers",{"title":88,"path":89,"stem":90,"children":91,"page":112},"Runtimes","/deploy/runtimes","2.deploy/10.runtimes",[92,97,102,107],{"title":93,"path":94,"stem":95,"icon":96},"Node.js","/deploy/runtimes/node","2.deploy/10.runtimes/1.node","akar-icons:node-fill",{"title":98,"path":99,"stem":100,"icon":101},"WinterJS","/deploy/runtimes/_winterjs","2.deploy/10.runtimes/_winterjs","game-icons:cold-heart",{"title":103,"path":104,"stem":105,"icon":106},"Bun","/deploy/runtimes/bun","2.deploy/10.runtimes/bun","simple-icons:bun",{"title":108,"path":109,"stem":110,"icon":111},"Deno","/deploy/runtimes/deno","2.deploy/10.runtimes/deno","simple-icons:deno",false,{"title":114,"path":115,"stem":116,"icon":117},"Custom Preset","/deploy/custom-presets","2.deploy/2.custom-presets","ri:file-code-line",{"title":119,"path":120,"stem":121,"children":122,"page":112},"Providers","/deploy/providers","2.deploy/20.providers",[123,127,131,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191,195,199,203,207,211,215],{"title":124,"path":125,"stem":126},"Alwaysdata","/deploy/providers/alwaysdata","2.deploy/20.providers/alwaysdata",{"title":128,"path":129,"stem":130},"AWS Lambda","/deploy/providers/aws","2.deploy/20.providers/aws",{"title":132,"path":133,"stem":134},"AWS Amplify","/deploy/providers/aws-amplify","2.deploy/20.providers/aws-amplify",{"title":136,"path":137,"stem":138},"Azure","/deploy/providers/azure","2.deploy/20.providers/azure",{"title":140,"path":141,"stem":142},"Cleavr","/deploy/providers/cleavr","2.deploy/20.providers/cleavr",{"title":144,"path":145,"stem":146},"Cloudflare","/deploy/providers/cloudflare","2.deploy/20.providers/cloudflare",{"title":148,"path":149,"stem":150},"Deno Deploy","/deploy/providers/deno-deploy","2.deploy/20.providers/deno-deploy",{"title":152,"path":153,"stem":154},"DigitalOcean","/deploy/providers/digitalocean","2.deploy/20.providers/digitalocean",{"title":156,"path":157,"stem":158},"Edgio","/deploy/providers/edgio","2.deploy/20.providers/edgio",{"title":160,"path":161,"stem":162},"Firebase","/deploy/providers/firebase","2.deploy/20.providers/firebase",{"title":164,"path":165,"stem":166},"Flightcontrol","/deploy/providers/flightcontrol","2.deploy/20.providers/flightcontrol",{"title":168,"path":169,"stem":170},"Genezio","/deploy/providers/genezio","2.deploy/20.providers/genezio",{"title":172,"path":173,"stem":174},"GitHub Pages","/deploy/providers/github-pages","2.deploy/20.providers/github-pages",{"title":176,"path":177,"stem":178},"GitLab Pages","/deploy/providers/gitlab-pages","2.deploy/20.providers/gitlab-pages",{"title":180,"path":181,"stem":182},"Heroku","/deploy/providers/heroku","2.deploy/20.providers/heroku",{"title":184,"path":185,"stem":186},"IIS","/deploy/providers/iis","2.deploy/20.providers/iis",{"title":188,"path":189,"stem":190},"Koyeb","/deploy/providers/koyeb","2.deploy/20.providers/koyeb",{"title":192,"path":193,"stem":194},"Netlify","/deploy/providers/netlify","2.deploy/20.providers/netlify",{"title":196,"path":197,"stem":198},"Platform.sh","/deploy/providers/platform-sh","2.deploy/20.providers/platform-sh",{"title":200,"path":201,"stem":202},"Render.com","/deploy/providers/render","2.deploy/20.providers/render",{"title":204,"path":205,"stem":206},"StormKit","/deploy/providers/stormkit","2.deploy/20.providers/stormkit",{"title":208,"path":209,"stem":210},"Vercel","/deploy/providers/vercel","2.deploy/20.providers/vercel",{"title":212,"path":213,"stem":214},"Zeabur","/deploy/providers/zeabur","2.deploy/20.providers/zeabur",{"title":216,"path":217,"stem":218},"Zerops","/deploy/providers/zerops","2.deploy/20.providers/zerops",{"title":220,"path":221,"stem":222,"children":223,"icon":65},"Config","/config","3.config/0.index",[224],{"title":220,"path":221,"stem":222,"icon":65},{"id":226,"title":22,"body":227,"description":1941,"extension":285,"meta":1942,"navigation":1943,"path":23,"seo":1944,"stem":24,"__hash__":1945},"content/1.guide/2.routing.md",{"type":228,"value":229,"toc":1923,"icon":25},"minimark",[230,235,247,250,254,272,280,334,337,400,405,413,420,470,474,479,503,576,583,595,599,611,692,696,707,762,767,776,780,791,951,955,958,970,1025,1029,1049,1059,1063,1066,1071,1074,1080,1122,1126,1129,1179,1190,1199,1203,1210,1216,1308,1314,1318,1321,1349,1352,1380,1414,1418,1421,1424,1427,1501,1505,1514,1540,1550,1554,1557,1566,1581,1592,1603,1919],[231,232,234],"h2",{"id":233},"event-handlers","Event handlers",[236,237,238,239,246],"p",{},"An ",[240,241,245],"a",{"href":242,"rel":243},"https://v1.h3.dev/guide/event-handler",[244],"nofollow","event handler"," is a function that will be bound to a route and executed when the route is matched by the router for an incoming request.",[248,249],"read-more",{"to":242},[231,251,253],{"id":252},"filesystem-routing","Filesystem routing",[236,255,256,257,262,263,267,268,271],{},"Nitro supports file-based routing for your API routes (files are automatically mapped to ",[240,258,261],{"href":259,"rel":260},"https://v1.h3.dev/guide/router",[244],"h3 routes","). Defining a route is as simple as creating a file inside the ",[264,265,266],"code",{},"server/api/"," or ",[264,269,270],{},"server/routes/"," directory.",[236,273,274,275,279],{},"You can only define one handler per files and you can ",[240,276,278],{"href":277},"#specific-request-method","append the HTTP method"," to the filename to define a specific request method.",[281,282,287],"pre",{"className":283,"code":284,"language":285,"meta":286,"style":286},"language-md shiki shiki-themes github-light github-dark github-dark","server/\n  api/\n    test.ts      \u003C-- /api/test\n  routes/\n    hello.get.ts     \u003C-- GET /hello\n    hello.post.ts    \u003C-- POST /hello\nnitro.config.ts\n","md","",[264,288,289,298,304,310,316,322,328],{"__ignoreMap":286},[290,291,294],"span",{"class":292,"line":293},"line",1,[290,295,297],{"class":296},"slsVL","server/\n",[290,299,301],{"class":292,"line":300},2,[290,302,303],{"class":296},"  api/\n",[290,305,307],{"class":292,"line":306},3,[290,308,309],{"class":296},"    test.ts      \u003C-- /api/test\n",[290,311,313],{"class":292,"line":312},4,[290,314,315],{"class":296},"  routes/\n",[290,317,319],{"class":292,"line":318},5,[290,320,321],{"class":296},"    hello.get.ts     \u003C-- GET /hello\n",[290,323,325],{"class":292,"line":324},6,[290,326,327],{"class":296},"    hello.post.ts    \u003C-- POST /hello\n",[290,329,331],{"class":292,"line":330},7,[290,332,333],{"class":296},"nitro.config.ts\n",[236,335,336],{},"You can nest routes by creating subdirectories.",[281,338,340],{"className":283,"code":339,"language":285,"meta":286,"style":286},"server/\n  routes/\n    communities/\n      index.get.ts\n      index.post.ts\n      [id]/\n        index.get.ts\n        index.post.ts\n    hello.get.ts\n    hello.post.ts\n",[264,341,342,346,350,355,360,365,377,382,388,394],{"__ignoreMap":286},[290,343,344],{"class":292,"line":293},[290,345,297],{"class":296},[290,347,348],{"class":292,"line":300},[290,349,315],{"class":296},[290,351,352],{"class":292,"line":306},[290,353,354],{"class":296},"    communities/\n",[290,356,357],{"class":292,"line":312},[290,358,359],{"class":296},"      index.get.ts\n",[290,361,362],{"class":292,"line":318},[290,363,364],{"class":296},"      index.post.ts\n",[290,366,367,370,374],{"class":292,"line":324},[290,368,369],{"class":296},"      [",[290,371,373],{"class":372},"sg6f7","id",[290,375,376],{"class":296},"]/\n",[290,378,379],{"class":292,"line":330},[290,380,381],{"class":296},"        index.get.ts\n",[290,383,385],{"class":292,"line":384},8,[290,386,387],{"class":296},"        index.post.ts\n",[290,389,391],{"class":292,"line":390},9,[290,392,393],{"class":296},"    hello.get.ts\n",[290,395,397],{"class":292,"line":396},10,[290,398,399],{"class":296},"    hello.post.ts\n",[401,402,404],"h3",{"id":403},"simple-routes","Simple routes",[236,406,407,408,267,410,412],{},"First, create a file in ",[264,409,270],{},[264,411,266],{}," directory. The filename will be the route path.",[236,414,415,416,419],{},"Then, export a function wrapped in ",[264,417,418],{},"defineEventHandler"," that will be executed when the route is matched.",[281,421,426],{"className":422,"code":423,"filename":424,"language":425,"meta":286,"style":286},"language-ts shiki shiki-themes github-light github-dark github-dark","export default defineEventHandler(() => {\n  return { hello: 'API' }\n})\n","server/api/test.ts","ts",[264,427,428,450,465],{"__ignoreMap":286},[290,429,430,434,437,441,444,447],{"class":292,"line":293},[290,431,433],{"class":432},"so5gQ","export",[290,435,436],{"class":432}," default",[290,438,440],{"class":439},"shcOC"," defineEventHandler",[290,442,443],{"class":296},"(() ",[290,445,446],{"class":432},"=>",[290,448,449],{"class":296}," {\n",[290,451,452,455,458,462],{"class":292,"line":300},[290,453,454],{"class":432},"  return",[290,456,457],{"class":296}," { hello: ",[290,459,461],{"class":460},"sfrk1","'API'",[290,463,464],{"class":296}," }\n",[290,466,467],{"class":292,"line":306},[290,468,469],{"class":296},"})\n",[401,471,473],{"id":472},"route-with-params","Route with params",[475,476,478],"h4",{"id":477},"single-param","Single param",[236,480,481,482,485,486,489,490,493,494,497,498,502],{},"To define a route with params, use the ",[264,483,484],{},"[\u003Cparam>]"," syntax where ",[264,487,488],{},"\u003Cparam>"," is the name of the param. The param will be available in the ",[264,491,492],{},"event.context.params"," object or using the ",[264,495,496],{},"getRouterParam"," utility from ",[240,499,401],{"href":500,"rel":501},"https://v1.h3.dev",[244],".",[281,504,507],{"className":422,"code":505,"filename":506,"language":425,"meta":286,"style":286},"export default defineEventHandler(event => {\n  const name = getRouterParam(event, 'name')\n\n  return `Hello ${name}!`\n})\n","server/routes/hello/[name].ts",[264,508,509,529,553,559,572],{"__ignoreMap":286},[290,510,511,513,515,517,520,524,527],{"class":292,"line":293},[290,512,433],{"class":432},[290,514,436],{"class":432},[290,516,440],{"class":439},[290,518,519],{"class":296},"(",[290,521,523],{"class":522},"sQHwn","event",[290,525,526],{"class":432}," =>",[290,528,449],{"class":296},[290,530,531,534,538,541,544,547,550],{"class":292,"line":300},[290,532,533],{"class":432},"  const",[290,535,537],{"class":536},"suiK_"," name",[290,539,540],{"class":432}," =",[290,542,543],{"class":439}," getRouterParam",[290,545,546],{"class":296},"(event, ",[290,548,549],{"class":460},"'name'",[290,551,552],{"class":296},")\n",[290,554,555],{"class":292,"line":306},[290,556,558],{"emptyLinePlaceholder":557},true,"\n",[290,560,561,563,566,569],{"class":292,"line":312},[290,562,454],{"class":432},[290,564,565],{"class":460}," `Hello ${",[290,567,568],{"class":296},"name",[290,570,571],{"class":460},"}!`\n",[290,573,574],{"class":292,"line":318},[290,575,469],{"class":296},[236,577,578,579,582],{},"Call the route with the param ",[264,580,581],{},"/hello/nitro",", you will get:",[281,584,589],{"className":585,"code":586,"filename":587,"language":588,"meta":286,"style":286},"language-txt shiki shiki-themes github-light github-dark github-dark","Hello nitro!\n","Response","txt",[264,590,591],{"__ignoreMap":286},[290,592,593],{"class":292,"line":293},[290,594,586],{},[475,596,598],{"id":597},"multiple-params","Multiple params",[236,600,601,602,605,606,610],{},"You can define multiple params in a route using ",[264,603,604],{},"[\u003Cparam1>]/[\u003Cparam2>]"," syntax where each param is a folder. You ",[607,608,609],"strong",{},"cannot"," define multiple params in a single filename of folder.",[281,612,615],{"className":422,"code":613,"filename":614,"language":425,"meta":286,"style":286},"export default defineEventHandler(event => {\n  const name = getRouterParam(event, 'name')\n  const age = getRouterParam(event, 'age')\n\n  return `Hello ${name}! You are ${age} years old.`\n})\n","server/routes/hello/[name]/[age].ts",[264,616,617,633,649,667,671,688],{"__ignoreMap":286},[290,618,619,621,623,625,627,629,631],{"class":292,"line":293},[290,620,433],{"class":432},[290,622,436],{"class":432},[290,624,440],{"class":439},[290,626,519],{"class":296},[290,628,523],{"class":522},[290,630,526],{"class":432},[290,632,449],{"class":296},[290,634,635,637,639,641,643,645,647],{"class":292,"line":300},[290,636,533],{"class":432},[290,638,537],{"class":536},[290,640,540],{"class":432},[290,642,543],{"class":439},[290,644,546],{"class":296},[290,646,549],{"class":460},[290,648,552],{"class":296},[290,650,651,653,656,658,660,662,665],{"class":292,"line":306},[290,652,533],{"class":432},[290,654,655],{"class":536}," age",[290,657,540],{"class":432},[290,659,543],{"class":439},[290,661,546],{"class":296},[290,663,664],{"class":460},"'age'",[290,666,552],{"class":296},[290,668,669],{"class":292,"line":312},[290,670,558],{"emptyLinePlaceholder":557},[290,672,673,675,677,679,682,685],{"class":292,"line":318},[290,674,454],{"class":432},[290,676,565],{"class":460},[290,678,568],{"class":296},[290,680,681],{"class":460},"}! You are ${",[290,683,684],{"class":296},"age",[290,686,687],{"class":460},"} years old.`\n",[290,689,690],{"class":292,"line":324},[290,691,469],{"class":296},[475,693,695],{"id":694},"catch-all-params","Catch all params",[236,697,698,699,702,703,706],{},"You can capture all the remaining parts of a URL using ",[264,700,701],{},"[...\u003Cparam>]"," syntax. This will include the ",[264,704,705],{},"/"," in the param.",[281,708,710],{"className":422,"code":505,"filename":709,"language":425,"meta":286,"style":286},"server/routes/hello/[...name].ts",[264,711,712,728,744,748,758],{"__ignoreMap":286},[290,713,714,716,718,720,722,724,726],{"class":292,"line":293},[290,715,433],{"class":432},[290,717,436],{"class":432},[290,719,440],{"class":439},[290,721,519],{"class":296},[290,723,523],{"class":522},[290,725,526],{"class":432},[290,727,449],{"class":296},[290,729,730,732,734,736,738,740,742],{"class":292,"line":300},[290,731,533],{"class":432},[290,733,537],{"class":536},[290,735,540],{"class":432},[290,737,543],{"class":439},[290,739,546],{"class":296},[290,741,549],{"class":460},[290,743,552],{"class":296},[290,745,746],{"class":292,"line":306},[290,747,558],{"emptyLinePlaceholder":557},[290,749,750,752,754,756],{"class":292,"line":312},[290,751,454],{"class":432},[290,753,565],{"class":460},[290,755,568],{"class":296},[290,757,571],{"class":460},[290,759,760],{"class":292,"line":318},[290,761,469],{"class":296},[236,763,578,764,582],{},[264,765,766],{},"/hello/nitro/is/hot",[281,768,770],{"className":585,"code":769,"filename":587,"language":588,"meta":286,"style":286},"Hello nitro/is/hot!\n",[264,771,772],{"__ignoreMap":286},[290,773,774],{"class":292,"line":293},[290,775,769],{},[401,777,779],{"id":778},"specific-request-method","Specific request method",[236,781,782,783,786,787,790],{},"You can append the HTTP method to the filename to force the route to be matched only for a specific HTTP request method, for example ",[264,784,785],{},"hello.get.ts"," will only match for ",[264,788,789],{},"GET"," requests. You can use any HTTP method you want.",[792,793,794,874],"code-group",{},[281,795,799],{"className":796,"code":797,"filename":789,"language":798,"meta":286,"style":286},"language-js shiki shiki-themes github-light github-dark github-dark","// server/routes/users/[id].get.ts\nexport default defineEventHandler(async (event) => {\n  const id = getRouterParam(event, 'id')\n\n  // Do something with id\n\n  return `User profile!`\n})\n","js",[264,800,801,807,832,850,854,859,863,870],{"__ignoreMap":286},[290,802,803],{"class":292,"line":293},[290,804,806],{"class":805},"sCsY4","// server/routes/users/[id].get.ts\n",[290,808,809,811,813,815,817,820,823,825,828,830],{"class":292,"line":300},[290,810,433],{"class":432},[290,812,436],{"class":432},[290,814,440],{"class":439},[290,816,519],{"class":296},[290,818,819],{"class":432},"async",[290,821,822],{"class":296}," (",[290,824,523],{"class":522},[290,826,827],{"class":296},") ",[290,829,446],{"class":432},[290,831,449],{"class":296},[290,833,834,836,839,841,843,845,848],{"class":292,"line":306},[290,835,533],{"class":432},[290,837,838],{"class":536}," id",[290,840,540],{"class":432},[290,842,543],{"class":439},[290,844,546],{"class":296},[290,846,847],{"class":460},"'id'",[290,849,552],{"class":296},[290,851,852],{"class":292,"line":312},[290,853,558],{"emptyLinePlaceholder":557},[290,855,856],{"class":292,"line":318},[290,857,858],{"class":805},"  // Do something with id\n",[290,860,861],{"class":292,"line":324},[290,862,558],{"emptyLinePlaceholder":557},[290,864,865,867],{"class":292,"line":330},[290,866,454],{"class":432},[290,868,869],{"class":460}," `User profile!`\n",[290,871,872],{"class":292,"line":384},[290,873,469],{"class":296},[281,875,878],{"className":796,"code":876,"filename":877,"language":798,"meta":286,"style":286},"// server/routes/users.post.ts\nexport default defineEventHandler(async event => {\n  const body = await readBody(event)\n\n  // Do something with body like saving it to a database\n\n  return { updated: true }\n})\n","POST",[264,879,880,885,904,922,926,931,935,947],{"__ignoreMap":286},[290,881,882],{"class":292,"line":293},[290,883,884],{"class":805},"// server/routes/users.post.ts\n",[290,886,887,889,891,893,895,897,900,902],{"class":292,"line":300},[290,888,433],{"class":432},[290,890,436],{"class":432},[290,892,440],{"class":439},[290,894,519],{"class":296},[290,896,819],{"class":432},[290,898,899],{"class":522}," event",[290,901,526],{"class":432},[290,903,449],{"class":296},[290,905,906,908,911,913,916,919],{"class":292,"line":306},[290,907,533],{"class":432},[290,909,910],{"class":536}," body",[290,912,540],{"class":432},[290,914,915],{"class":432}," await",[290,917,918],{"class":439}," readBody",[290,920,921],{"class":296},"(event)\n",[290,923,924],{"class":292,"line":312},[290,925,558],{"emptyLinePlaceholder":557},[290,927,928],{"class":292,"line":318},[290,929,930],{"class":805},"  // Do something with body like saving it to a database\n",[290,932,933],{"class":292,"line":324},[290,934,558],{"emptyLinePlaceholder":557},[290,936,937,939,942,945],{"class":292,"line":330},[290,938,454],{"class":432},[290,940,941],{"class":296}," { updated: ",[290,943,944],{"class":536},"true",[290,946,464],{"class":296},[290,948,949],{"class":292,"line":384},[290,950,469],{"class":296},[401,952,954],{"id":953},"catch-all-route","Catch all route",[236,956,957],{},"You can create a special route that will match all routes that are not matched by any other route. This is useful for creating a default route.",[236,959,960,961,964,965,267,967,969],{},"To create a catch all route, create a file named ",[264,962,963],{},"[...].ts"," in the ",[264,966,270],{},[264,968,266],{}," directory or in any subdirectory.",[281,971,974],{"className":422,"code":972,"filename":973,"language":425,"meta":286,"style":286},"export default defineEventHandler(event => {\n  const url = getRequestURL(event)\n\n  return `Hello ${url}!`\n})\n","server/routes/[...].ts",[264,975,976,992,1006,1010,1021],{"__ignoreMap":286},[290,977,978,980,982,984,986,988,990],{"class":292,"line":293},[290,979,433],{"class":432},[290,981,436],{"class":432},[290,983,440],{"class":439},[290,985,519],{"class":296},[290,987,523],{"class":522},[290,989,526],{"class":432},[290,991,449],{"class":296},[290,993,994,996,999,1001,1004],{"class":292,"line":300},[290,995,533],{"class":432},[290,997,998],{"class":536}," url",[290,1000,540],{"class":432},[290,1002,1003],{"class":439}," getRequestURL",[290,1005,921],{"class":296},[290,1007,1008],{"class":292,"line":306},[290,1009,558],{"emptyLinePlaceholder":557},[290,1011,1012,1014,1016,1019],{"class":292,"line":312},[290,1013,454],{"class":432},[290,1015,565],{"class":460},[290,1017,1018],{"class":296},"url",[290,1020,571],{"class":460},[290,1022,1023],{"class":292,"line":318},[290,1024,469],{"class":296},[401,1026,1028],{"id":1027},"environment-specific-handlers","Environment specific handlers",[236,1030,1031,1032,1035,1036,267,1039,1042,1043,267,1046,502],{},"You can specify for a route that will only be included in specific builds by adding a ",[264,1033,1034],{},".dev",", ",[264,1037,1038],{},".prod",[264,1040,1041],{},".prerender"," suffix to the file name, for example: ",[264,1044,1045],{},"routes/test.get.dev.ts",[264,1047,1048],{},"routes/test.get.prod.ts",[1050,1051,1052],"tip",{},[236,1053,1054,1055,1058],{},"\nYou can specify multiple environments or specify a preset name as environment using programmatic registration of routes via ",[264,1056,1057],{},"handlers[]"," config.",[231,1060,1062],{"id":1061},"middleware","Middleware",[236,1064,1065],{},"Nitro route middleware can hook into the request lifecycle.",[1050,1067,1068],{},[236,1069,1070],{},"A middleware can modify the request before it is processed, not after.",[248,1072],{"to":1073},"https://v1.h3.dev/guide/event-handler#middleware",[236,1075,1076,1077,271],{},"Middleware are auto-registered within the ",[264,1078,1079],{},"server/middleware/",[281,1081,1083],{"className":283,"code":1082,"language":285,"meta":286,"style":286},"server/\n  routes/\n    hello.ts\n  middleware/\n    auth.ts\n    logger.ts\n    ...\nnitro.config.ts\n",[264,1084,1085,1089,1093,1098,1103,1108,1113,1118],{"__ignoreMap":286},[290,1086,1087],{"class":292,"line":293},[290,1088,297],{"class":296},[290,1090,1091],{"class":292,"line":300},[290,1092,315],{"class":296},[290,1094,1095],{"class":292,"line":306},[290,1096,1097],{"class":296},"    hello.ts\n",[290,1099,1100],{"class":292,"line":312},[290,1101,1102],{"class":296},"  middleware/\n",[290,1104,1105],{"class":292,"line":318},[290,1106,1107],{"class":296},"    auth.ts\n",[290,1109,1110],{"class":292,"line":324},[290,1111,1112],{"class":296},"    logger.ts\n",[290,1114,1115],{"class":292,"line":330},[290,1116,1117],{"class":296},"    ...\n",[290,1119,1120],{"class":292,"line":384},[290,1121,333],{"class":296},[401,1123,1125],{"id":1124},"simple-middleware","Simple middleware",[236,1127,1128],{},"Middleware are defined exactly like route handlers with the only exception that they should not return anything.\nReturning from middleware behaves like returning from a request - the value will be returned as a response and further code will not be ran.",[281,1130,1133],{"className":422,"code":1131,"filename":1132,"language":425,"meta":286,"style":286},"export default defineEventHandler((event) => {\n  // Extends or modify the event\n  event.context.user = { name: 'Nitro' }\n})\n","server/middleware/auth.ts",[264,1134,1135,1154,1159,1175],{"__ignoreMap":286},[290,1136,1137,1139,1141,1143,1146,1148,1150,1152],{"class":292,"line":293},[290,1138,433],{"class":432},[290,1140,436],{"class":432},[290,1142,440],{"class":439},[290,1144,1145],{"class":296},"((",[290,1147,523],{"class":522},[290,1149,827],{"class":296},[290,1151,446],{"class":432},[290,1153,449],{"class":296},[290,1155,1156],{"class":292,"line":300},[290,1157,1158],{"class":805},"  // Extends or modify the event\n",[290,1160,1161,1164,1167,1170,1173],{"class":292,"line":306},[290,1162,1163],{"class":296},"  event.context.user ",[290,1165,1166],{"class":432},"=",[290,1168,1169],{"class":296}," { name: ",[290,1171,1172],{"class":460},"'Nitro'",[290,1174,464],{"class":296},[290,1176,1177],{"class":292,"line":312},[290,1178,469],{"class":296},[236,1180,1181,1182,1184,1185,502],{},"Middleware in ",[264,1183,1079],{}," directory are automatically registered for all routes. If you want to register a middleware for a specific route, see ",[240,1186,1189],{"href":1187,"rel":1188},"https://v1.h3.dev/guide/event-handler#object-syntax",[244],"Object Syntax Event Handler",[1191,1192,1193],"note",{},[236,1194,1195,1196],{},"Returning anything from a middleware will close the request and should be avoided! Any returned value from middleware will be the response and further code will not be executed however ",[607,1197,1198],{},"this is not recommended to do!",[401,1200,1202],{"id":1201},"route-meta","Route Meta",[236,1204,1205,1206,1209],{},"You can define route handler meta at build-time using ",[264,1207,1208],{},"defineRouteMeta"," macro in the event handler files.",[1211,1212,1213],"important",{},[236,1214,1215],{},"\n🚧 This feature is currently experimental.",[281,1217,1219],{"className":422,"code":1218,"filename":424,"language":425,"meta":286,"style":286},"defineRouteMeta({\n  openAPI: {\n    tags: [\"test\"],\n    description: \"Test route description\",\n    parameters: [{ in: \"query\", name: \"test\", required: true }],\n  },\n});\n\nexport default defineEventHandler(() => \"OK\");\n",[264,1220,1221,1228,1233,1244,1255,1276,1281,1286,1290],{"__ignoreMap":286},[290,1222,1223,1225],{"class":292,"line":293},[290,1224,1208],{"class":439},[290,1226,1227],{"class":296},"({\n",[290,1229,1230],{"class":292,"line":300},[290,1231,1232],{"class":296},"  openAPI: {\n",[290,1234,1235,1238,1241],{"class":292,"line":306},[290,1236,1237],{"class":296},"    tags: [",[290,1239,1240],{"class":460},"\"test\"",[290,1242,1243],{"class":296},"],\n",[290,1245,1246,1249,1252],{"class":292,"line":312},[290,1247,1248],{"class":296},"    description: ",[290,1250,1251],{"class":460},"\"Test route description\"",[290,1253,1254],{"class":296},",\n",[290,1256,1257,1260,1263,1266,1268,1271,1273],{"class":292,"line":318},[290,1258,1259],{"class":296},"    parameters: [{ in: ",[290,1261,1262],{"class":460},"\"query\"",[290,1264,1265],{"class":296},", name: ",[290,1267,1240],{"class":460},[290,1269,1270],{"class":296},", required: ",[290,1272,944],{"class":536},[290,1274,1275],{"class":296}," }],\n",[290,1277,1278],{"class":292,"line":324},[290,1279,1280],{"class":296},"  },\n",[290,1282,1283],{"class":292,"line":330},[290,1284,1285],{"class":296},"});\n",[290,1287,1288],{"class":292,"line":384},[290,1289,558],{"emptyLinePlaceholder":557},[290,1291,1292,1294,1296,1298,1300,1302,1305],{"class":292,"line":390},[290,1293,433],{"class":432},[290,1295,436],{"class":432},[290,1297,440],{"class":439},[290,1299,443],{"class":296},[290,1301,446],{"class":432},[290,1303,1304],{"class":460}," \"OK\"",[290,1306,1307],{"class":296},");\n",[248,1309,1311],{"to":1310},"https://swagger.io/specification/v3/",[236,1312,1313],{},"This feature is currently usable to specify OpenAPI meta. See swagger specification for available OpenAPI options.",[401,1315,1317],{"id":1316},"execution-order","Execution order",[236,1319,1320],{},"Middleware are executed in directory listing order.",[281,1322,1324],{"className":283,"code":1323,"language":285,"meta":286,"style":286},"server/\n  middleware/\n    auth.ts \u003C-- First\n    logger.ts \u003C-- Second\n    ... \u003C-- Third\n",[264,1325,1326,1330,1334,1339,1344],{"__ignoreMap":286},[290,1327,1328],{"class":292,"line":293},[290,1329,297],{"class":296},[290,1331,1332],{"class":292,"line":300},[290,1333,1102],{"class":296},[290,1335,1336],{"class":292,"line":306},[290,1337,1338],{"class":296},"    auth.ts \u003C-- First\n",[290,1340,1341],{"class":292,"line":312},[290,1342,1343],{"class":296},"    logger.ts \u003C-- Second\n",[290,1345,1346],{"class":292,"line":318},[290,1347,1348],{"class":296},"    ... \u003C-- Third\n",[236,1350,1351],{},"Prefix middleware with a number to control their execution order.",[281,1353,1355],{"className":283,"code":1354,"language":285,"meta":286,"style":286},"server/\n  middleware/\n    1.logger.ts \u003C-- First\n    2.auth.ts \u003C-- Second\n    3.... \u003C-- Third\n",[264,1356,1357,1361,1365,1370,1375],{"__ignoreMap":286},[290,1358,1359],{"class":292,"line":293},[290,1360,297],{"class":296},[290,1362,1363],{"class":292,"line":300},[290,1364,1102],{"class":296},[290,1366,1367],{"class":292,"line":306},[290,1368,1369],{"class":296},"    1.logger.ts \u003C-- First\n",[290,1371,1372],{"class":292,"line":312},[290,1373,1374],{"class":296},"    2.auth.ts \u003C-- Second\n",[290,1376,1377],{"class":292,"line":318},[290,1378,1379],{"class":296},"    3.... \u003C-- Third\n",[1191,1381,1382],{},[236,1383,1384,1385,1035,1388,1391,1392,1395,1396,1398,1399,1401,1402,1405,1406,1409,1410,1413],{},"Remember that file names are sorted as strings, thus for example if you have 3 files ",[264,1386,1387],{},"1.filename.ts",[264,1389,1390],{},"2.filename.ts"," and ",[264,1393,1394],{},"10.filename.ts",", the ",[264,1397,1394],{}," will come after the ",[264,1400,1387],{},". To avoid this, prefix ",[264,1403,1404],{},"1-9"," with a ",[264,1407,1408],{},"0"," like ",[264,1411,1412],{},"01",", if you have more than 10 middleware in the same directory.",[401,1415,1417],{"id":1416},"request-filtering","Request filtering",[236,1419,1420],{},"Middleware are executed on every request.",[236,1422,1423],{},"Apply custom logic to scope them to specific conditions.",[236,1425,1426],{},"For example, you can use the URL to apply a middleware to a specific route:",[281,1428,1430],{"className":422,"code":1429,"filename":1132,"language":425,"meta":286,"style":286},"export default defineEventHandler((event) => {\n  // Will only execute for /auth route\n  if (getRequestURL(event).pathname.startsWith('/auth')) {\n    event.context.user = { name: 'Nitro' }\n  }\n})\n",[264,1431,1432,1450,1455,1479,1492,1497],{"__ignoreMap":286},[290,1433,1434,1436,1438,1440,1442,1444,1446,1448],{"class":292,"line":293},[290,1435,433],{"class":432},[290,1437,436],{"class":432},[290,1439,440],{"class":439},[290,1441,1145],{"class":296},[290,1443,523],{"class":522},[290,1445,827],{"class":296},[290,1447,446],{"class":432},[290,1449,449],{"class":296},[290,1451,1452],{"class":292,"line":300},[290,1453,1454],{"class":805},"  // Will only execute for /auth route\n",[290,1456,1457,1460,1462,1465,1468,1471,1473,1476],{"class":292,"line":306},[290,1458,1459],{"class":432},"  if",[290,1461,822],{"class":296},[290,1463,1464],{"class":439},"getRequestURL",[290,1466,1467],{"class":296},"(event).pathname.",[290,1469,1470],{"class":439},"startsWith",[290,1472,519],{"class":296},[290,1474,1475],{"class":460},"'/auth'",[290,1477,1478],{"class":296},")) {\n",[290,1480,1481,1484,1486,1488,1490],{"class":292,"line":312},[290,1482,1483],{"class":296},"    event.context.user ",[290,1485,1166],{"class":432},[290,1487,1169],{"class":296},[290,1489,1172],{"class":460},[290,1491,464],{"class":296},[290,1493,1494],{"class":292,"line":318},[290,1495,1496],{"class":296},"  }\n",[290,1498,1499],{"class":292,"line":324},[290,1500,469],{"class":296},[231,1502,1504],{"id":1503},"error-handling","Error handling",[236,1506,1507,1508,1513],{},"You can use the ",[240,1509,1512],{"href":1510,"rel":1511},"https://v1.h3.dev/guide/event-handler#error-handling",[244],"utilities available in H3"," to handle errors in both routes and middlewares.",[236,1515,1516,1517,1520,1521,1524,1525,1528,1529,267,1532,1535,1536,1539],{},"The way errors are sent back to the client depends on the route's path. For most routes ",[264,1518,1519],{},"Content-Type"," is set to ",[264,1522,1523],{},"text/html"," by default and a simple html error page is delivered. If the route starts with ",[264,1526,1527],{},"/api/"," (either because it is placed in ",[264,1530,1531],{},"api/",[264,1533,1534],{},"routes/api/",") the default will change to ",[264,1537,1538],{},"application/json"," and a JSON object will be sent.",[236,1541,1542,1543,267,1546,1549],{},"This behaviour can be overridden by some request properties (e.g.: ",[264,1544,1545],{},"Accept",[264,1547,1548],{},"User-Agent"," headers).",[231,1551,1553],{"id":1552},"route-rules","Route Rules",[236,1555,1556],{},"Nitro allows you to add logic at the top-level for each route of your configuration. It can be used for redirecting, proxying, caching and adding headers to routes.",[236,1558,1559,1560,1565],{},"It is a map from route pattern (following ",[240,1561,1564],{"href":1562,"rel":1563},"https://github.com/unjs/rou3/tree/radix3#route-matcher",[244],"radix3",") to route options.",[236,1567,1568,1569,1572,1573,1576,1577,1580],{},"When ",[264,1570,1571],{},"cache"," option is set, handlers matching pattern will be automatically wrapped with ",[264,1574,1575],{},"defineCachedEventHandler",". See the ",[240,1578,1579],{"href":43},"cache guide"," to learn more about this function.",[1191,1582,1583],{},[236,1584,1585,1588,1589],{},[264,1586,1587],{},"swr: true|number"," is shortcut for ",[264,1590,1591],{},"cache: { swr: true, maxAge: number }",[236,1593,1594,1595,1598,1599,1602],{},"You can set route rules in ",[264,1596,1597],{},"nitro.config.ts"," using the ",[264,1600,1601],{},"routeRules"," option.",[792,1604,1605,1778],{},[281,1606,1608],{"className":422,"code":1607,"filename":1597,"language":425,"meta":286,"style":286},"export default defineNitroConfig({\n  routeRules: {\n    '/blog/**': { swr: true },\n    '/blog/**': { swr: 600 },\n    '/blog/**': { static: true },\n    '/blog/**': { cache: { /* cache options*/ } },\n    '/assets/**': { headers: { 'cache-control': 's-maxage=0' } },\n    '/api/v1/**': { cors: true, headers: { 'access-control-allow-methods': 'GET' } },\n    '/old-page': { redirect: '/new-page' },\n    '/old-page/**': { redirect: '/new-page/**' },\n    '/proxy/example': { proxy: 'https://example.com' },\n    '/proxy/**': { proxy: '/api/**' },\n  }\n})\n",[264,1609,1610,1621,1626,1639,1650,1661,1674,1693,1716,1729,1741,1755,1768,1773],{"__ignoreMap":286},[290,1611,1612,1614,1616,1619],{"class":292,"line":293},[290,1613,433],{"class":432},[290,1615,436],{"class":432},[290,1617,1618],{"class":439}," defineNitroConfig",[290,1620,1227],{"class":296},[290,1622,1623],{"class":292,"line":300},[290,1624,1625],{"class":296},"  routeRules: {\n",[290,1627,1628,1631,1634,1636],{"class":292,"line":306},[290,1629,1630],{"class":460},"    '/blog/**'",[290,1632,1633],{"class":296},": { swr: ",[290,1635,944],{"class":536},[290,1637,1638],{"class":296}," },\n",[290,1640,1641,1643,1645,1648],{"class":292,"line":312},[290,1642,1630],{"class":460},[290,1644,1633],{"class":296},[290,1646,1647],{"class":536},"600",[290,1649,1638],{"class":296},[290,1651,1652,1654,1657,1659],{"class":292,"line":318},[290,1653,1630],{"class":460},[290,1655,1656],{"class":296},": { static: ",[290,1658,944],{"class":536},[290,1660,1638],{"class":296},[290,1662,1663,1665,1668,1671],{"class":292,"line":324},[290,1664,1630],{"class":460},[290,1666,1667],{"class":296},": { cache: { ",[290,1669,1670],{"class":805},"/* cache options*/",[290,1672,1673],{"class":296}," } },\n",[290,1675,1676,1679,1682,1685,1688,1691],{"class":292,"line":330},[290,1677,1678],{"class":460},"    '/assets/**'",[290,1680,1681],{"class":296},": { headers: { ",[290,1683,1684],{"class":460},"'cache-control'",[290,1686,1687],{"class":296},": ",[290,1689,1690],{"class":460},"'s-maxage=0'",[290,1692,1673],{"class":296},[290,1694,1695,1698,1701,1703,1706,1709,1711,1714],{"class":292,"line":384},[290,1696,1697],{"class":460},"    '/api/v1/**'",[290,1699,1700],{"class":296},": { cors: ",[290,1702,944],{"class":536},[290,1704,1705],{"class":296},", headers: { ",[290,1707,1708],{"class":460},"'access-control-allow-methods'",[290,1710,1687],{"class":296},[290,1712,1713],{"class":460},"'GET'",[290,1715,1673],{"class":296},[290,1717,1718,1721,1724,1727],{"class":292,"line":390},[290,1719,1720],{"class":460},"    '/old-page'",[290,1722,1723],{"class":296},": { redirect: ",[290,1725,1726],{"class":460},"'/new-page'",[290,1728,1638],{"class":296},[290,1730,1731,1734,1736,1739],{"class":292,"line":396},[290,1732,1733],{"class":460},"    '/old-page/**'",[290,1735,1723],{"class":296},[290,1737,1738],{"class":460},"'/new-page/**'",[290,1740,1638],{"class":296},[290,1742,1744,1747,1750,1753],{"class":292,"line":1743},11,[290,1745,1746],{"class":460},"    '/proxy/example'",[290,1748,1749],{"class":296},": { proxy: ",[290,1751,1752],{"class":460},"'https://example.com'",[290,1754,1638],{"class":296},[290,1756,1758,1761,1763,1766],{"class":292,"line":1757},12,[290,1759,1760],{"class":460},"    '/proxy/**'",[290,1762,1749],{"class":296},[290,1764,1765],{"class":460},"'/api/**'",[290,1767,1638],{"class":296},[290,1769,1771],{"class":292,"line":1770},13,[290,1772,1496],{"class":296},[290,1774,1776],{"class":292,"line":1775},14,[290,1777,469],{"class":296},[281,1779,1782],{"className":422,"code":1780,"filename":1781,"language":425,"meta":286,"style":286},"export default defineNuxtConfig({\n  routeRules: {\n    '/blog/**': { swr: true },\n    '/blog/**': { swr: 600 },\n    '/blog/**': { static: true },\n    '/blog/**': { cache: { /* cache options*/ } },\n    '/assets/**': { headers: { 'cache-control': 's-maxage=0' } },\n    '/api/v1/**': { cors: true, headers: { 'access-control-allow-methods': 'GET' } },\n    '/old-page': { redirect: '/new-page' },\n    '/old-page/**': { redirect: '/new-page/**' },\n    '/proxy/example': { proxy: 'https://example.com' },\n    '/proxy/**': { proxy: '/api/**' },\n  }\n})\n","nuxt.config.ts",[264,1783,1784,1795,1799,1809,1819,1829,1839,1853,1871,1881,1891,1901,1911,1915],{"__ignoreMap":286},[290,1785,1786,1788,1790,1793],{"class":292,"line":293},[290,1787,433],{"class":432},[290,1789,436],{"class":432},[290,1791,1792],{"class":439}," defineNuxtConfig",[290,1794,1227],{"class":296},[290,1796,1797],{"class":292,"line":300},[290,1798,1625],{"class":296},[290,1800,1801,1803,1805,1807],{"class":292,"line":306},[290,1802,1630],{"class":460},[290,1804,1633],{"class":296},[290,1806,944],{"class":536},[290,1808,1638],{"class":296},[290,1810,1811,1813,1815,1817],{"class":292,"line":312},[290,1812,1630],{"class":460},[290,1814,1633],{"class":296},[290,1816,1647],{"class":536},[290,1818,1638],{"class":296},[290,1820,1821,1823,1825,1827],{"class":292,"line":318},[290,1822,1630],{"class":460},[290,1824,1656],{"class":296},[290,1826,944],{"class":536},[290,1828,1638],{"class":296},[290,1830,1831,1833,1835,1837],{"class":292,"line":324},[290,1832,1630],{"class":460},[290,1834,1667],{"class":296},[290,1836,1670],{"class":805},[290,1838,1673],{"class":296},[290,1840,1841,1843,1845,1847,1849,1851],{"class":292,"line":330},[290,1842,1678],{"class":460},[290,1844,1681],{"class":296},[290,1846,1684],{"class":460},[290,1848,1687],{"class":296},[290,1850,1690],{"class":460},[290,1852,1673],{"class":296},[290,1854,1855,1857,1859,1861,1863,1865,1867,1869],{"class":292,"line":384},[290,1856,1697],{"class":460},[290,1858,1700],{"class":296},[290,1860,944],{"class":536},[290,1862,1705],{"class":296},[290,1864,1708],{"class":460},[290,1866,1687],{"class":296},[290,1868,1713],{"class":460},[290,1870,1673],{"class":296},[290,1872,1873,1875,1877,1879],{"class":292,"line":390},[290,1874,1720],{"class":460},[290,1876,1723],{"class":296},[290,1878,1726],{"class":460},[290,1880,1638],{"class":296},[290,1882,1883,1885,1887,1889],{"class":292,"line":396},[290,1884,1733],{"class":460},[290,1886,1723],{"class":296},[290,1888,1738],{"class":460},[290,1890,1638],{"class":296},[290,1892,1893,1895,1897,1899],{"class":292,"line":1743},[290,1894,1746],{"class":460},[290,1896,1749],{"class":296},[290,1898,1752],{"class":460},[290,1900,1638],{"class":296},[290,1902,1903,1905,1907,1909],{"class":292,"line":1757},[290,1904,1760],{"class":460},[290,1906,1749],{"class":296},[290,1908,1765],{"class":460},[290,1910,1638],{"class":296},[290,1912,1913],{"class":292,"line":1770},[290,1914,1496],{"class":296},[290,1916,1917],{"class":292,"line":1775},[290,1918,469],{"class":296},[1920,1921,1922],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .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 pre.shiki code .sg6f7, html code.shiki .sg6f7{--shiki-light:#032F62;--shiki-light-text-decoration:underline;--shiki-default:#DBEDFF;--shiki-default-text-decoration:underline;--shiki-dark:#DBEDFF;--shiki-dark-text-decoration:underline}",{"title":286,"searchDepth":300,"depth":300,"links":1924},[1925,1926,1933,1939,1940],{"id":233,"depth":300,"text":234},{"id":252,"depth":300,"text":253,"children":1927},[1928,1929,1930,1931,1932],{"id":403,"depth":306,"text":404},{"id":472,"depth":306,"text":473},{"id":778,"depth":306,"text":779},{"id":953,"depth":306,"text":954},{"id":1027,"depth":306,"text":1028},{"id":1061,"depth":300,"text":1062,"children":1934},[1935,1936,1937,1938],{"id":1124,"depth":306,"text":1125},{"id":1201,"depth":306,"text":1202},{"id":1316,"depth":306,"text":1317},{"id":1416,"depth":306,"text":1417},{"id":1503,"depth":300,"text":1504},{"id":1552,"depth":300,"text":1553},"Nitro supports filesystem routing to automatically map files to h3 routes.",{"icon":25},{"icon":25},{"title":22,"description":1941},"bKbGWuoEiiSZ3eo2nSFqyIGNoJ-_QEE66bD5tHdi0r8",[1947,1949],{"title":17,"path":18,"stem":19,"description":1948,"icon":20,"children":-1},"Nitro tasks allow on-off operations in runtime.",{"title":27,"path":28,"stem":29,"description":1950,"icon":30,"children":-1},"Nitro natively supports a cross platform WebSocket API",1775119634438]