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