[{"data":1,"prerenderedAt":4749},["ShallowReactive",2],{"navigation":3,"-docs-routing":402,"-docs-routing-surround":4745},[4,93,226,232,387,399],{"title":5,"path":6,"stem":7,"children":8,"icon":92},"","\u002Fdocs","1.docs\u002F1.index",[9,12,17,22,27,32,37,42,47,52,57,62,67,72,77,82,87],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-compass",{"title":13,"path":14,"stem":15,"icon":16},"Quick Start","\u002Fdocs\u002Fquick-start","1.docs\u002F2.quick-start","i-lucide-zap",{"title":18,"path":19,"stem":20,"icon":21},"Renderer","\u002Fdocs\u002Frenderer","1.docs\u002F4.renderer","ri:layout-masonry-line",{"title":23,"path":24,"stem":25,"icon":26},"Routing","\u002Fdocs\u002Frouting","1.docs\u002F5.routing","ri:direction-line",{"title":28,"path":29,"stem":30,"icon":31},"Assets","\u002Fdocs\u002Fassets","1.docs\u002F50.assets","ri:image-2-line",{"title":33,"path":34,"stem":35,"icon":36},"Configuration","\u002Fdocs\u002Fconfiguration","1.docs\u002F50.configuration","ri:settings-3-line",{"title":38,"path":39,"stem":40,"icon":41},"Database","\u002Fdocs\u002Fdatabase","1.docs\u002F50.database","ri:database-2-line",{"title":43,"path":44,"stem":45,"icon":46},"Lifecycle","\u002Fdocs\u002Flifecycle","1.docs\u002F50.lifecycle","i-lucide-layers",{"title":48,"path":49,"stem":50,"icon":51},"OpenAPI","\u002Fdocs\u002Fopenapi","1.docs\u002F50.openapi","ri:contract-line",{"title":53,"path":54,"stem":55,"icon":56},"Plugins","\u002Fdocs\u002Fplugins","1.docs\u002F50.plugins","ri:plug-line",{"title":58,"path":59,"stem":60,"icon":61},"Tasks","\u002Fdocs\u002Ftasks","1.docs\u002F50.tasks","codicon:run-all",{"title":63,"path":64,"stem":65,"icon":66},"WebSocket","\u002Fdocs\u002Fwebsocket","1.docs\u002F50.websocket","ri:broadcast-fill",{"title":68,"path":69,"stem":70,"icon":71},"Server Entry","\u002Fdocs\u002Fserver-entry","1.docs\u002F6.server-entry","ri:server-line",{"title":73,"path":74,"stem":75,"icon":76},"Cache","\u002Fdocs\u002Fcache","1.docs\u002F7.cache","ri:speed-line",{"title":78,"path":79,"stem":80,"icon":81},"KV Storage","\u002Fdocs\u002Fstorage","1.docs\u002F8.storage","carbon:datastore",{"title":83,"path":84,"stem":85,"icon":86},"Migration Guide","\u002Fdocs\u002Fmigration","1.docs\u002F99.migration","ri:arrow-right-up-line",{"title":88,"path":89,"stem":90,"icon":91},"Nightly Channel","\u002Fdocs\u002Fnightly","1.docs\u002F99.nightly","ri:moon-fill","i-lucide-book-open",{"title":94,"path":95,"stem":96,"children":97,"icon":99},"Deploy","\u002Fdeploy","2.deploy\u002F0.index",[98,100,121],{"title":94,"path":95,"stem":96,"icon":99},"ri:upload-cloud-2-line",{"title":101,"path":102,"stem":103,"children":104,"page":120},"Runtimes","\u002Fdeploy\u002Fruntimes","2.deploy\u002F10.runtimes",[105,110,115],{"title":106,"path":107,"stem":108,"icon":109},"Node.js","\u002Fdeploy\u002Fruntimes\u002Fnode","2.deploy\u002F10.runtimes\u002F1.node","akar-icons:node-fill",{"title":111,"path":112,"stem":113,"icon":114},"Bun","\u002Fdeploy\u002Fruntimes\u002Fbun","2.deploy\u002F10.runtimes\u002Fbun","simple-icons:bun",{"title":116,"path":117,"stem":118,"icon":119},"Deno","\u002Fdeploy\u002Fruntimes\u002Fdeno","2.deploy\u002F10.runtimes\u002Fdeno","simple-icons:deno",false,{"title":122,"path":123,"stem":124,"children":125,"page":120},"Providers","\u002Fdeploy\u002Fproviders","2.deploy\u002F20.providers",[126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,214,218,222],{"title":127,"path":128,"stem":129},"Alwaysdata","\u002Fdeploy\u002Fproviders\u002Falwaysdata","2.deploy\u002F20.providers\u002Falwaysdata",{"title":131,"path":132,"stem":133},"AWS Lambda","\u002Fdeploy\u002Fproviders\u002Faws","2.deploy\u002F20.providers\u002Faws",{"title":135,"path":136,"stem":137},"AWS Amplify","\u002Fdeploy\u002Fproviders\u002Faws-amplify","2.deploy\u002F20.providers\u002Faws-amplify",{"title":139,"path":140,"stem":141},"Azure","\u002Fdeploy\u002Fproviders\u002Fazure","2.deploy\u002F20.providers\u002Fazure",{"title":143,"path":144,"stem":145},"Cleavr","\u002Fdeploy\u002Fproviders\u002Fcleavr","2.deploy\u002F20.providers\u002Fcleavr",{"title":147,"path":148,"stem":149},"Cloudflare","\u002Fdeploy\u002Fproviders\u002Fcloudflare","2.deploy\u002F20.providers\u002Fcloudflare",{"title":151,"path":152,"stem":153},"Deno Deploy","\u002Fdeploy\u002Fproviders\u002Fdeno-deploy","2.deploy\u002F20.providers\u002Fdeno-deploy",{"title":155,"path":156,"stem":157},"DigitalOcean","\u002Fdeploy\u002Fproviders\u002Fdigitalocean","2.deploy\u002F20.providers\u002Fdigitalocean",{"title":159,"path":160,"stem":161},"EdgeOne Pages","\u002Fdeploy\u002Fproviders\u002Fedgeone","2.deploy\u002F20.providers\u002Fedgeone",{"title":163,"path":164,"stem":165},"Firebase","\u002Fdeploy\u002Fproviders\u002Ffirebase","2.deploy\u002F20.providers\u002Ffirebase",{"title":167,"path":168,"stem":169},"Flightcontrol","\u002Fdeploy\u002Fproviders\u002Fflightcontrol","2.deploy\u002F20.providers\u002Fflightcontrol",{"title":171,"path":172,"stem":173},"Genezio","\u002Fdeploy\u002Fproviders\u002Fgenezio","2.deploy\u002F20.providers\u002Fgenezio",{"title":175,"path":176,"stem":177},"GitHub Pages","\u002Fdeploy\u002Fproviders\u002Fgithub-pages","2.deploy\u002F20.providers\u002Fgithub-pages",{"title":179,"path":180,"stem":181},"GitLab Pages","\u002Fdeploy\u002Fproviders\u002Fgitlab-pages","2.deploy\u002F20.providers\u002Fgitlab-pages",{"title":183,"path":184,"stem":185},"Heroku","\u002Fdeploy\u002Fproviders\u002Fheroku","2.deploy\u002F20.providers\u002Fheroku",{"title":187,"path":188,"stem":189},"IIS","\u002Fdeploy\u002Fproviders\u002Fiis","2.deploy\u002F20.providers\u002Fiis",{"title":191,"path":192,"stem":193},"Koyeb","\u002Fdeploy\u002Fproviders\u002Fkoyeb","2.deploy\u002F20.providers\u002Fkoyeb",{"title":195,"path":196,"stem":197},"Netlify","\u002Fdeploy\u002Fproviders\u002Fnetlify","2.deploy\u002F20.providers\u002Fnetlify",{"title":199,"path":200,"stem":201},"Platform.sh","\u002Fdeploy\u002Fproviders\u002Fplatform-sh","2.deploy\u002F20.providers\u002Fplatform-sh",{"title":203,"path":204,"stem":205},"Render.com","\u002Fdeploy\u002Fproviders\u002Frender","2.deploy\u002F20.providers\u002Frender",{"title":207,"path":208,"stem":209},"StormKit","\u002Fdeploy\u002Fproviders\u002Fstormkit","2.deploy\u002F20.providers\u002Fstormkit",{"title":211,"path":212,"stem":213},"Vercel","\u002Fdeploy\u002Fproviders\u002Fvercel","2.deploy\u002F20.providers\u002Fvercel",{"title":215,"path":216,"stem":217},"Zeabur","\u002Fdeploy\u002Fproviders\u002Fzeabur","2.deploy\u002F20.providers\u002Fzeabur",{"title":219,"path":220,"stem":221},"Zephyr Cloud","\u002Fdeploy\u002Fproviders\u002Fzephyr","2.deploy\u002F20.providers\u002Fzephyr",{"title":223,"path":224,"stem":225},"Zerops","\u002Fdeploy\u002Fproviders\u002Fzerops","2.deploy\u002F20.providers\u002Fzerops",{"title":227,"path":228,"stem":229,"children":230,"icon":36},"Config","\u002Fconfig","3.config\u002F0.index",[231],{"title":227,"path":228,"stem":229,"icon":36},{"title":233,"path":234,"stem":235,"children":236,"icon":238},"Examples","\u002Fexamples","4.examples\u002F0.index",[237,239,244,249,254,259,263,268,273,278,283,288,293,297,302,306,310,315,320,325,330,335,340,345,350,355,359,364,369,373,378,383],{"title":233,"path":234,"stem":235,"icon":238},"i-lucide-folder-code",{"title":240,"path":241,"stem":242,"icon":243},"API Routes","\u002Fexamples\u002Fapi-routes","4.examples\u002Fapi-routes","i-lucide-route",{"title":245,"path":246,"stem":247,"icon":248},"Auto Imports","\u002Fexamples\u002Fauto-imports","4.examples\u002Fauto-imports","i-lucide-import",{"title":250,"path":251,"stem":252,"icon":253},"Cached Handler","\u002Fexamples\u002Fcached-handler","4.examples\u002Fcached-handler","i-lucide-clock",{"title":255,"path":256,"stem":257,"icon":258},"Custom Error Handler","\u002Fexamples\u002Fcustom-error-handler","4.examples\u002Fcustom-error-handler","i-lucide-alert-circle",{"title":38,"path":260,"stem":261,"icon":262},"\u002Fexamples\u002Fdatabase","4.examples\u002Fdatabase","i-lucide-database",{"title":264,"path":265,"stem":266,"icon":267},"Elysia","\u002Fexamples\u002Felysia","4.examples\u002Felysia","i-skill-icons-elysia-dark",{"title":269,"path":270,"stem":271,"icon":272},"Express","\u002Fexamples\u002Fexpress","4.examples\u002Fexpress","i-simple-icons-express",{"title":274,"path":275,"stem":276,"icon":277},"Fastify","\u002Fexamples\u002Ffastify","4.examples\u002Ffastify","i-simple-icons-fastify",{"title":279,"path":280,"stem":281,"icon":282},"Hello World","\u002Fexamples\u002Fhello-world","4.examples\u002Fhello-world","i-lucide-sparkles",{"title":284,"path":285,"stem":286,"icon":287},"Hono","\u002Fexamples\u002Fhono","4.examples\u002Fhono","i-logos-hono",{"title":289,"path":290,"stem":291,"icon":292},"Import Alias","\u002Fexamples\u002Fimport-alias","4.examples\u002Fimport-alias","i-lucide-at-sign",{"title":294,"path":295,"stem":296,"icon":46},"Middleware","\u002Fexamples\u002Fmiddleware","4.examples\u002Fmiddleware",{"title":298,"path":299,"stem":300,"icon":301},"Mono JSX","\u002Fexamples\u002Fmono-jsx","4.examples\u002Fmono-jsx","i-lucide-brackets",{"title":303,"path":304,"stem":305,"icon":301},"Nano JSX","\u002Fexamples\u002Fnano-jsx","4.examples\u002Fnano-jsx",{"title":53,"path":307,"stem":308,"icon":309},"\u002Fexamples\u002Fplugins","4.examples\u002Fplugins","i-lucide-plug",{"title":311,"path":312,"stem":313,"icon":314},"Custom Renderer","\u002Fexamples\u002Frenderer","4.examples\u002Frenderer","i-lucide-code",{"title":316,"path":317,"stem":318,"icon":319},"Runtime Config","\u002Fexamples\u002Fruntime-config","4.examples\u002Fruntime-config","i-lucide-settings",{"title":321,"path":322,"stem":323,"icon":324},"Server Fetch","\u002Fexamples\u002Fserver-fetch","4.examples\u002Fserver-fetch","i-lucide-arrow-right-left",{"title":326,"path":327,"stem":328,"icon":329},"Shiki","\u002Fexamples\u002Fshiki","4.examples\u002Fshiki","i-lucide-highlighter",{"title":331,"path":332,"stem":333,"icon":334},"Virtual Routes","\u002Fexamples\u002Fvirtual-routes","4.examples\u002Fvirtual-routes","i-lucide-box",{"title":336,"path":337,"stem":338,"icon":339},"Vite Nitro Plugin","\u002Fexamples\u002Fvite-nitro-plugin","4.examples\u002Fvite-nitro-plugin","i-logos-vitejs",{"title":341,"path":342,"stem":343,"icon":344},"Vite RSC","\u002Fexamples\u002Fvite-rsc","4.examples\u002Fvite-rsc","i-logos-react",{"title":346,"path":347,"stem":348,"icon":349},"Vite SSR HTML","\u002Fexamples\u002Fvite-ssr-html","4.examples\u002Fvite-ssr-html","i-logos-html-5",{"title":351,"path":352,"stem":353,"icon":354},"SSR with Preact","\u002Fexamples\u002Fvite-ssr-preact","4.examples\u002Fvite-ssr-preact","i-logos-preact",{"title":356,"path":357,"stem":358,"icon":344},"SSR with React","\u002Fexamples\u002Fvite-ssr-react","4.examples\u002Fvite-ssr-react",{"title":360,"path":361,"stem":362,"icon":363},"SSR with SolidJS","\u002Fexamples\u002Fvite-ssr-solid","4.examples\u002Fvite-ssr-solid","i-logos-solidjs-icon",{"title":365,"path":366,"stem":367,"icon":368},"SSR with TanStack Router","\u002Fexamples\u002Fvite-ssr-tsr-react","4.examples\u002Fvite-ssr-tsr-react","i-simple-icons-tanstack",{"title":370,"path":371,"stem":372,"icon":368},"SSR with TanStack Start","\u002Fexamples\u002Fvite-ssr-tss-react","4.examples\u002Fvite-ssr-tss-react",{"title":374,"path":375,"stem":376,"icon":377},"SSR with Vue Router","\u002Fexamples\u002Fvite-ssr-vue-router","4.examples\u002Fvite-ssr-vue-router","i-logos-vue",{"title":379,"path":380,"stem":381,"icon":382},"Vite + tRPC","\u002Fexamples\u002Fvite-trpc","4.examples\u002Fvite-trpc","i-simple-icons-trpc",{"title":63,"path":384,"stem":385,"icon":386},"\u002Fexamples\u002Fwebsocket","4.examples\u002Fwebsocket","i-lucide-radio",{"title":388,"path":389,"stem":390,"children":391},"Blog","\u002Fblog","9.blog",[392,395],{"title":388,"path":389,"stem":393,"icon":394},"9.blog\u002Findex","i-lucide-file-text",{"title":396,"path":397,"stem":398,"icon":394},"Nitro v3 Beta is here!","\u002Fblog\u002Fv3-beta","9.blog\u002F1.v3-beta",{"title":5,"path":400,"stem":401},"\u002F","index",{"id":403,"title":23,"body":404,"description":4740,"extension":2121,"meta":4741,"navigation":4742,"path":24,"seo":4743,"stem":25,"__hash__":4744},"content\u002F1.docs\u002F5.routing.md",{"type":405,"value":406,"toc":4699,"icon":26},"minimark",[407,412,429,585,589,606,614,622,625,674,679,690,693,735,741,746,755,758,812,816,820,843,926,933,943,947,959,1045,1049,1059,1132,1137,1146,1150,1161,1191,1387,1391,1394,1400,1461,1465,1484,1487,1511,1524,1528,1535,1617,1621,1627,1633,1639,1764,1767,1883,1889,1894,1975,1978,2101,2103,2106,2111,2117,2153,2157,2160,2224,2235,2243,2247,2254,2260,2377,2384,2388,2391,2415,2418,2442,2475,2479,2482,2485,2488,2573,2577,2591,2665,2675,2679,2687,2698,2707,2711,2721,2731,2735,2738,2754,2769,2780,2787,2994,2998,3001,3008,3106,3110,3113,3214,3241,3244,3247,3322,3326,3359,3372,3390,3479,3482,3489,3588,3591,3594,3730,3734,3737,3846,3850,3863,4003,4020,4024,4027,4093,4097,4100,4215,4219,4390,4394,4401,4480,4484,4487,4695],[408,409,411],"h2",{"id":410},"request-handler","Request handler",[413,414,415,416,420,421,428],"p",{},"Nitro request handler is a function accepting an ",[417,418,419],"code",{},"event"," object, which is a ",[422,423,427],"a",{"href":424,"rel":425},"https:\u002F\u002Fh3.dev\u002Fguide\u002Fapi\u002Fh3event#h3event-properties",[426],"nofollow","H3Event"," object.",[430,431,432,522],"code-group",{},[433,434,439],"pre",{"className":435,"code":436,"filename":437,"language":438,"meta":5,"style":5},"language-ts shiki shiki-themes github-light github-dark github-dark","import type { H3Event } from \"nitro\";\n\nexport default (event: H3Event) => {\n  return \"world\";\n}\n","Single function","ts",[417,440,441,467,474,505,516],{"__ignoreMap":5},[442,443,446,450,453,457,460,464],"span",{"class":444,"line":445},"line",1,[442,447,449],{"class":448},"so5gQ","import",[442,451,452],{"class":448}," type",[442,454,456],{"class":455},"slsVL"," { H3Event } ",[442,458,459],{"class":448},"from",[442,461,463],{"class":462},"sfrk1"," \"nitro\"",[442,465,466],{"class":455},";\n",[442,468,470],{"class":444,"line":469},2,[442,471,473],{"emptyLinePlaceholder":472},true,"\n",[442,475,477,480,483,486,489,492,496,499,502],{"class":444,"line":476},3,[442,478,479],{"class":448},"export",[442,481,482],{"class":448}," default",[442,484,485],{"class":455}," (",[442,487,419],{"class":488},"sQHwn",[442,490,491],{"class":448},":",[442,493,495],{"class":494},"shcOC"," H3Event",[442,497,498],{"class":455},") ",[442,500,501],{"class":448},"=>",[442,503,504],{"class":455}," {\n",[442,506,508,511,514],{"class":444,"line":507},4,[442,509,510],{"class":448},"  return",[442,512,513],{"class":462}," \"world\"",[442,515,466],{"class":455},[442,517,519],{"class":444,"line":518},5,[442,520,521],{"class":455},"}\n",[433,523,526],{"className":435,"code":524,"filename":525,"language":438,"meta":5,"style":5},"import { defineHandler } from \"nitro\";\n\n\u002F\u002F For better type inference\nexport default defineHandler((event) => {\n  return \"world\";\n});\n","defineHandler",[417,527,528,541,545,551,571,579],{"__ignoreMap":5},[442,529,530,532,535,537,539],{"class":444,"line":445},[442,531,449],{"class":448},[442,533,534],{"class":455}," { defineHandler } ",[442,536,459],{"class":448},[442,538,463],{"class":462},[442,540,466],{"class":455},[442,542,543],{"class":444,"line":469},[442,544,473],{"emptyLinePlaceholder":472},[442,546,547],{"class":444,"line":476},[442,548,550],{"class":549},"sCsY4","\u002F\u002F For better type inference\n",[442,552,553,555,557,560,563,565,567,569],{"class":444,"line":507},[442,554,479],{"class":448},[442,556,482],{"class":448},[442,558,559],{"class":494}," defineHandler",[442,561,562],{"class":455},"((",[442,564,419],{"class":488},[442,566,498],{"class":455},[442,568,501],{"class":448},[442,570,504],{"class":455},[442,572,573,575,577],{"class":444,"line":518},[442,574,510],{"class":448},[442,576,513],{"class":462},[442,578,466],{"class":455},[442,580,582],{"class":444,"line":581},6,[442,583,584],{"class":455},"});\n",[408,586,588],{"id":587},"filesystem-routing","Filesystem routing",[413,590,591,592,597,598,601,602,605],{},"Nitro supports file-based routing for your API routes (files are automatically mapped to ",[422,593,596],{"href":594,"rel":595},"https:\u002F\u002Fh3.dev\u002Fguide\u002Fbasics\u002Frouting",[426],"h3 routes","). Defining a route is as simple as creating a file inside the ",[417,599,600],{},"api\u002F"," or ",[417,603,604],{},"routes\u002F"," directory.",[413,607,608,609,613],{},"You can only define one handler per files and you can ",[422,610,612],{"href":611},"#specific-request-method","append the HTTP method"," to the filename to define a specific request method.",[433,615,620],{"className":616,"code":618,"language":619},[617],"language-text","routes\u002F\n  api\u002F\n    test.ts      \u003C-- \u002Fapi\u002Ftest\n  hello.get.ts   \u003C-- \u002Fhello (GET only)\n  hello.post.ts  \u003C-- \u002Fhello (POST only)\nvite.config.ts\n","text",[417,621,618],{"__ignoreMap":5},[413,623,624],{},"You can nest routes by creating subdirectories.",[433,626,630],{"className":627,"code":628,"language":629,"meta":5,"style":5},"language-txt shiki shiki-themes github-light github-dark github-dark","routes\u002F\n  api\u002F\n    [org]\u002F\n      [repo]\u002F\n        index.ts   \u003C-- \u002Fapi\u002F:org\u002F:repo\n        issues.ts  \u003C-- \u002Fapi\u002F:org\u002F:repo\u002Fissues\n      index.ts     \u003C-- \u002Fapi\u002F:org\npackage.json\n","txt",[417,631,632,637,642,647,652,657,662,668],{"__ignoreMap":5},[442,633,634],{"class":444,"line":445},[442,635,636],{},"routes\u002F\n",[442,638,639],{"class":444,"line":469},[442,640,641],{},"  api\u002F\n",[442,643,644],{"class":444,"line":476},[442,645,646],{},"    [org]\u002F\n",[442,648,649],{"class":444,"line":507},[442,650,651],{},"      [repo]\u002F\n",[442,653,654],{"class":444,"line":518},[442,655,656],{},"        index.ts   \u003C-- \u002Fapi\u002F:org\u002F:repo\n",[442,658,659],{"class":444,"line":581},[442,660,661],{},"        issues.ts  \u003C-- \u002Fapi\u002F:org\u002F:repo\u002Fissues\n",[442,663,665],{"class":444,"line":664},7,[442,666,667],{},"      index.ts     \u003C-- \u002Fapi\u002F:org\n",[442,669,671],{"class":444,"line":670},8,[442,672,673],{},"package.json\n",[675,676,678],"h4",{"id":677},"route-groups","Route Groups",[413,680,681,682,685,686,689],{},"In some cases, you may want to group a set of routes together in a way which doesn't affect file-based routing. For this purpose, you can put files in a folder which is wrapped in parentheses ",[417,683,684],{},"("," and ",[417,687,688],{},")",".",[413,691,692],{},"For example:",[433,694,696],{"className":627,"code":695,"language":629,"meta":5,"style":5},"routes\u002F\n  api\u002F\n    (admin)\u002F\n      users.ts   \u003C-- \u002Fapi\u002Fusers\n      reports.ts \u003C-- \u002Fapi\u002Freports\n    (public)\u002F\n      index.ts   \u003C-- \u002Fapi\npackage.json\n",[417,697,698,702,706,711,716,721,726,731],{"__ignoreMap":5},[442,699,700],{"class":444,"line":445},[442,701,636],{},[442,703,704],{"class":444,"line":469},[442,705,641],{},[442,707,708],{"class":444,"line":476},[442,709,710],{},"    (admin)\u002F\n",[442,712,713],{"class":444,"line":507},[442,714,715],{},"      users.ts   \u003C-- \u002Fapi\u002Fusers\n",[442,717,718],{"class":444,"line":518},[442,719,720],{},"      reports.ts \u003C-- \u002Fapi\u002Freports\n",[442,722,723],{"class":444,"line":581},[442,724,725],{},"    (public)\u002F\n",[442,727,728],{"class":444,"line":664},[442,729,730],{},"      index.ts   \u003C-- \u002Fapi\n",[442,732,733],{"class":444,"line":670},[442,734,673],{},[736,737,738],"note",{},[413,739,740],{}," The route groups are not part of the route definition and are only used for organization purposes.",[742,743,745],"h3",{"id":744},"static-routes","Static routes",[413,747,748,749,601,751,754],{},"First, create a file in ",[417,750,604],{},[417,752,753],{},"routes\u002Fapi\u002F"," directory. The filename will be the route path.",[413,756,757],{},"Then, export a fetch-compatible function:",[433,759,762],{"className":435,"code":760,"filename":761,"language":438,"meta":5,"style":5},"import { defineHandler } from \"nitro\";\n\nexport default defineHandler(() => {\n  return { hello: \"API\" };\n});\n","routes\u002Fapi\u002Ftest.ts",[417,763,764,776,780,795,808],{"__ignoreMap":5},[442,765,766,768,770,772,774],{"class":444,"line":445},[442,767,449],{"class":448},[442,769,534],{"class":455},[442,771,459],{"class":448},[442,773,463],{"class":462},[442,775,466],{"class":455},[442,777,778],{"class":444,"line":469},[442,779,473],{"emptyLinePlaceholder":472},[442,781,782,784,786,788,791,793],{"class":444,"line":476},[442,783,479],{"class":448},[442,785,482],{"class":448},[442,787,559],{"class":494},[442,789,790],{"class":455},"(() ",[442,792,501],{"class":448},[442,794,504],{"class":455},[442,796,797,799,802,805],{"class":444,"line":507},[442,798,510],{"class":448},[442,800,801],{"class":455}," { hello: ",[442,803,804],{"class":462},"\"API\"",[442,806,807],{"class":455}," };\n",[442,809,810],{"class":444,"line":518},[442,811,584],{"class":455},[742,813,815],{"id":814},"dynamic-routes","Dynamic routes",[675,817,819],{"id":818},"single-param","Single param",[413,821,822,823,826,827,830,831,834,835,842],{},"To define a route with params, use the ",[417,824,825],{},"[\u003Cparam>]"," syntax where ",[417,828,829],{},"\u003Cparam>"," is the name of the param. The param will be available in the ",[417,832,833],{},"event.context.params"," object or using the ",[422,836,839],{"href":837,"rel":838},"https:\u002F\u002Fh3.dev\u002Futils\u002Frequest#getrouterparamevent-name-opts-decode",[426],[417,840,841],{},"getRouterParam"," utility.",[433,844,847],{"className":435,"code":845,"filename":846,"language":438,"meta":5,"style":5},"import { defineHandler } from \"nitro\";\n\nexport default defineHandler((event) => {\n  const { name } = event.context.params;\n\n  return `Hello ${name}!`;\n});\n","routes\u002Fhello\u002F[name].ts",[417,848,849,861,865,883,904,908,922],{"__ignoreMap":5},[442,850,851,853,855,857,859],{"class":444,"line":445},[442,852,449],{"class":448},[442,854,534],{"class":455},[442,856,459],{"class":448},[442,858,463],{"class":462},[442,860,466],{"class":455},[442,862,863],{"class":444,"line":469},[442,864,473],{"emptyLinePlaceholder":472},[442,866,867,869,871,873,875,877,879,881],{"class":444,"line":476},[442,868,479],{"class":448},[442,870,482],{"class":448},[442,872,559],{"class":494},[442,874,562],{"class":455},[442,876,419],{"class":488},[442,878,498],{"class":455},[442,880,501],{"class":448},[442,882,504],{"class":455},[442,884,885,888,891,895,898,901],{"class":444,"line":507},[442,886,887],{"class":448},"  const",[442,889,890],{"class":455}," { ",[442,892,894],{"class":893},"suiK_","name",[442,896,897],{"class":455}," } ",[442,899,900],{"class":448},"=",[442,902,903],{"class":455}," event.context.params;\n",[442,905,906],{"class":444,"line":518},[442,907,473],{"emptyLinePlaceholder":472},[442,909,910,912,915,917,920],{"class":444,"line":581},[442,911,510],{"class":448},[442,913,914],{"class":462}," `Hello ${",[442,916,894],{"class":455},[442,918,919],{"class":462},"}!`",[442,921,466],{"class":455},[442,923,924],{"class":444,"line":664},[442,925,584],{"class":455},[413,927,928,929,932],{},"Call the route with the param ",[417,930,931],{},"\u002Fhello\u002Fnitro",", you will get:",[433,934,937],{"className":627,"code":935,"filename":936,"language":629,"meta":5,"style":5},"Hello nitro!\n","Response",[417,938,939],{"__ignoreMap":5},[442,940,941],{"class":444,"line":445},[442,942,935],{},[675,944,946],{"id":945},"multiple-params","Multiple params",[413,948,949,950,953,954,958],{},"You can define multiple params in a route using ",[417,951,952],{},"[\u003Cparam1>]\u002F[\u003Cparam2>]"," syntax where each param is a folder. You ",[955,956,957],"strong",{},"cannot"," define multiple params in a single filename of folder.",[433,960,963],{"className":435,"code":961,"filename":962,"language":438,"meta":5,"style":5},"import { defineHandler } from \"nitro\";\n\nexport default defineHandler((event) => {\n  const { name, age } = event.context.params;\n\n  return `Hello ${name}! You are ${age} years old.`;\n});\n","routes\u002Fhello\u002F[name]\u002F[age].ts",[417,964,965,977,981,999,1019,1023,1041],{"__ignoreMap":5},[442,966,967,969,971,973,975],{"class":444,"line":445},[442,968,449],{"class":448},[442,970,534],{"class":455},[442,972,459],{"class":448},[442,974,463],{"class":462},[442,976,466],{"class":455},[442,978,979],{"class":444,"line":469},[442,980,473],{"emptyLinePlaceholder":472},[442,982,983,985,987,989,991,993,995,997],{"class":444,"line":476},[442,984,479],{"class":448},[442,986,482],{"class":448},[442,988,559],{"class":494},[442,990,562],{"class":455},[442,992,419],{"class":488},[442,994,498],{"class":455},[442,996,501],{"class":448},[442,998,504],{"class":455},[442,1000,1001,1003,1005,1007,1010,1013,1015,1017],{"class":444,"line":507},[442,1002,887],{"class":448},[442,1004,890],{"class":455},[442,1006,894],{"class":893},[442,1008,1009],{"class":455},", ",[442,1011,1012],{"class":893},"age",[442,1014,897],{"class":455},[442,1016,900],{"class":448},[442,1018,903],{"class":455},[442,1020,1021],{"class":444,"line":518},[442,1022,473],{"emptyLinePlaceholder":472},[442,1024,1025,1027,1029,1031,1034,1036,1039],{"class":444,"line":581},[442,1026,510],{"class":448},[442,1028,914],{"class":462},[442,1030,894],{"class":455},[442,1032,1033],{"class":462},"}! You are ${",[442,1035,1012],{"class":455},[442,1037,1038],{"class":462},"} years old.`",[442,1040,466],{"class":455},[442,1042,1043],{"class":444,"line":664},[442,1044,584],{"class":455},[675,1046,1048],{"id":1047},"catch-all-params","Catch-all params",[413,1050,1051,1052,1055,1056,1058],{},"You can capture all the remaining parts of a URL using ",[417,1053,1054],{},"[...\u003Cparam>]"," syntax. This will include the ",[417,1057,400],{}," in the param.",[433,1060,1062],{"className":435,"code":845,"filename":1061,"language":438,"meta":5,"style":5},"routes\u002Fhello\u002F[...name].ts",[417,1063,1064,1076,1080,1098,1112,1116,1128],{"__ignoreMap":5},[442,1065,1066,1068,1070,1072,1074],{"class":444,"line":445},[442,1067,449],{"class":448},[442,1069,534],{"class":455},[442,1071,459],{"class":448},[442,1073,463],{"class":462},[442,1075,466],{"class":455},[442,1077,1078],{"class":444,"line":469},[442,1079,473],{"emptyLinePlaceholder":472},[442,1081,1082,1084,1086,1088,1090,1092,1094,1096],{"class":444,"line":476},[442,1083,479],{"class":448},[442,1085,482],{"class":448},[442,1087,559],{"class":494},[442,1089,562],{"class":455},[442,1091,419],{"class":488},[442,1093,498],{"class":455},[442,1095,501],{"class":448},[442,1097,504],{"class":455},[442,1099,1100,1102,1104,1106,1108,1110],{"class":444,"line":507},[442,1101,887],{"class":448},[442,1103,890],{"class":455},[442,1105,894],{"class":893},[442,1107,897],{"class":455},[442,1109,900],{"class":448},[442,1111,903],{"class":455},[442,1113,1114],{"class":444,"line":518},[442,1115,473],{"emptyLinePlaceholder":472},[442,1117,1118,1120,1122,1124,1126],{"class":444,"line":581},[442,1119,510],{"class":448},[442,1121,914],{"class":462},[442,1123,894],{"class":455},[442,1125,919],{"class":462},[442,1127,466],{"class":455},[442,1129,1130],{"class":444,"line":664},[442,1131,584],{"class":455},[413,1133,928,1134,932],{},[417,1135,1136],{},"\u002Fhello\u002Fnitro\u002Fis\u002Fhot",[433,1138,1140],{"className":627,"code":1139,"filename":936,"language":629,"meta":5,"style":5},"Hello nitro\u002Fis\u002Fhot!\n",[417,1141,1142],{"__ignoreMap":5},[442,1143,1144],{"class":444,"line":445},[442,1145,1139],{},[742,1147,1149],{"id":1148},"specific-request-method","Specific request method",[413,1151,1152,1153,1156,1157,1160],{},"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 ",[417,1154,1155],{},"hello.get.ts"," will only match for ",[417,1158,1159],{},"GET"," requests. You can use any HTTP method you want.",[413,1162,1163,1164,1009,1167,1009,1170,1009,1173,1009,1176,1009,1179,1009,1182,1009,1185,1009,1188,689],{},"Supported methods: ",[417,1165,1166],{},"get",[417,1168,1169],{},"post",[417,1171,1172],{},"put",[417,1174,1175],{},"delete",[417,1177,1178],{},"patch",[417,1180,1181],{},"head",[417,1183,1184],{},"options",[417,1186,1187],{},"connect",[417,1189,1190],{},"trace",[430,1192,1193,1287],{},[433,1194,1198],{"className":1195,"code":1196,"filename":1159,"language":1197,"meta":5,"style":5},"language-js shiki shiki-themes github-light github-dark github-dark","\u002F\u002F routes\u002Fusers\u002F[id].get.ts\nimport { defineHandler } from \"nitro\";\n\nexport default defineHandler(async (event) => {\n  const { id } = event.context.params;\n\n  \u002F\u002F Do something with id\n\n  return `User profile!`;\n});\n","js",[417,1199,1200,1205,1217,1221,1244,1259,1263,1268,1272,1282],{"__ignoreMap":5},[442,1201,1202],{"class":444,"line":445},[442,1203,1204],{"class":549},"\u002F\u002F routes\u002Fusers\u002F[id].get.ts\n",[442,1206,1207,1209,1211,1213,1215],{"class":444,"line":469},[442,1208,449],{"class":448},[442,1210,534],{"class":455},[442,1212,459],{"class":448},[442,1214,463],{"class":462},[442,1216,466],{"class":455},[442,1218,1219],{"class":444,"line":476},[442,1220,473],{"emptyLinePlaceholder":472},[442,1222,1223,1225,1227,1229,1231,1234,1236,1238,1240,1242],{"class":444,"line":507},[442,1224,479],{"class":448},[442,1226,482],{"class":448},[442,1228,559],{"class":494},[442,1230,684],{"class":455},[442,1232,1233],{"class":448},"async",[442,1235,485],{"class":455},[442,1237,419],{"class":488},[442,1239,498],{"class":455},[442,1241,501],{"class":448},[442,1243,504],{"class":455},[442,1245,1246,1248,1250,1253,1255,1257],{"class":444,"line":518},[442,1247,887],{"class":448},[442,1249,890],{"class":455},[442,1251,1252],{"class":893},"id",[442,1254,897],{"class":455},[442,1256,900],{"class":448},[442,1258,903],{"class":455},[442,1260,1261],{"class":444,"line":581},[442,1262,473],{"emptyLinePlaceholder":472},[442,1264,1265],{"class":444,"line":664},[442,1266,1267],{"class":549},"  \u002F\u002F Do something with id\n",[442,1269,1270],{"class":444,"line":670},[442,1271,473],{"emptyLinePlaceholder":472},[442,1273,1275,1277,1280],{"class":444,"line":1274},9,[442,1276,510],{"class":448},[442,1278,1279],{"class":462}," `User profile!`",[442,1281,466],{"class":455},[442,1283,1285],{"class":444,"line":1284},10,[442,1286,584],{"class":455},[433,1288,1291],{"className":1195,"code":1289,"filename":1290,"language":1197,"meta":5,"style":5},"\u002F\u002F routes\u002Fusers.post.ts\nimport { defineHandler } from \"nitro\";\n\nexport default defineHandler(async (event) => {\n  const body = await event.req.json();\n\n  \u002F\u002F Do something with body like saving it to a database\n\n  return { updated: true };\n});\n","POST",[417,1292,1293,1298,1310,1314,1336,1358,1362,1367,1371,1383],{"__ignoreMap":5},[442,1294,1295],{"class":444,"line":445},[442,1296,1297],{"class":549},"\u002F\u002F routes\u002Fusers.post.ts\n",[442,1299,1300,1302,1304,1306,1308],{"class":444,"line":469},[442,1301,449],{"class":448},[442,1303,534],{"class":455},[442,1305,459],{"class":448},[442,1307,463],{"class":462},[442,1309,466],{"class":455},[442,1311,1312],{"class":444,"line":476},[442,1313,473],{"emptyLinePlaceholder":472},[442,1315,1316,1318,1320,1322,1324,1326,1328,1330,1332,1334],{"class":444,"line":507},[442,1317,479],{"class":448},[442,1319,482],{"class":448},[442,1321,559],{"class":494},[442,1323,684],{"class":455},[442,1325,1233],{"class":448},[442,1327,485],{"class":455},[442,1329,419],{"class":488},[442,1331,498],{"class":455},[442,1333,501],{"class":448},[442,1335,504],{"class":455},[442,1337,1338,1340,1343,1346,1349,1352,1355],{"class":444,"line":518},[442,1339,887],{"class":448},[442,1341,1342],{"class":893}," body",[442,1344,1345],{"class":448}," =",[442,1347,1348],{"class":448}," await",[442,1350,1351],{"class":455}," event.req.",[442,1353,1354],{"class":494},"json",[442,1356,1357],{"class":455},"();\n",[442,1359,1360],{"class":444,"line":581},[442,1361,473],{"emptyLinePlaceholder":472},[442,1363,1364],{"class":444,"line":664},[442,1365,1366],{"class":549},"  \u002F\u002F Do something with body like saving it to a database\n",[442,1368,1369],{"class":444,"line":670},[442,1370,473],{"emptyLinePlaceholder":472},[442,1372,1373,1375,1378,1381],{"class":444,"line":1274},[442,1374,510],{"class":448},[442,1376,1377],{"class":455}," { updated: ",[442,1379,1380],{"class":893},"true",[442,1382,807],{"class":455},[442,1384,1385],{"class":444,"line":1284},[442,1386,584],{"class":455},[742,1388,1390],{"id":1389},"catch-all-route","Catch-all route",[413,1392,1393],{},"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.",[413,1395,1396,1397,689],{},"To create a catch-all route, create a file named ",[417,1398,1399],{},"[...].ts",[433,1401,1404],{"className":435,"code":1402,"filename":1403,"language":438,"meta":5,"style":5},"import { defineHandler } from \"nitro\";\n\nexport default defineHandler((event) => {\n  return `Hello ${event.url}!`;\n});\n","routes\u002F[...].ts",[417,1405,1406,1418,1422,1440,1457],{"__ignoreMap":5},[442,1407,1408,1410,1412,1414,1416],{"class":444,"line":445},[442,1409,449],{"class":448},[442,1411,534],{"class":455},[442,1413,459],{"class":448},[442,1415,463],{"class":462},[442,1417,466],{"class":455},[442,1419,1420],{"class":444,"line":469},[442,1421,473],{"emptyLinePlaceholder":472},[442,1423,1424,1426,1428,1430,1432,1434,1436,1438],{"class":444,"line":476},[442,1425,479],{"class":448},[442,1427,482],{"class":448},[442,1429,559],{"class":494},[442,1431,562],{"class":455},[442,1433,419],{"class":488},[442,1435,498],{"class":455},[442,1437,501],{"class":448},[442,1439,504],{"class":455},[442,1441,1442,1444,1446,1448,1450,1453,1455],{"class":444,"line":507},[442,1443,510],{"class":448},[442,1445,914],{"class":462},[442,1447,419],{"class":455},[442,1449,689],{"class":462},[442,1451,1452],{"class":455},"url",[442,1454,919],{"class":462},[442,1456,466],{"class":455},[442,1458,1459],{"class":444,"line":518},[442,1460,584],{"class":455},[742,1462,1464],{"id":1463},"environment-specific-handlers","Environment specific handlers",[413,1466,1467,1468,1009,1471,601,1474,1477,1478,601,1481,689],{},"You can specify for a route that will only be included in specific builds by adding a ",[417,1469,1470],{},".dev",[417,1472,1473],{},".prod",[417,1475,1476],{},".prerender"," suffix to the file name, for example: ",[417,1479,1480],{},"routes\u002Ftest.get.dev.ts",[417,1482,1483],{},"routes\u002Ftest.get.prod.ts",[413,1485,1486],{},"The suffix is placed after the method suffix (if any):",[433,1488,1490],{"className":627,"code":1489,"language":629,"meta":5,"style":5},"routes\u002F\n  env\u002F\n    index.dev.ts       \u003C-- \u002Fenv (dev only)\n    index.get.prod.ts  \u003C-- \u002Fenv (GET, prod only)\n",[417,1491,1492,1496,1501,1506],{"__ignoreMap":5},[442,1493,1494],{"class":444,"line":445},[442,1495,636],{},[442,1497,1498],{"class":444,"line":469},[442,1499,1500],{},"  env\u002F\n",[442,1502,1503],{"class":444,"line":476},[442,1504,1505],{},"    index.dev.ts       \u003C-- \u002Fenv (dev only)\n",[442,1507,1508],{"class":444,"line":507},[442,1509,1510],{},"    index.get.prod.ts  \u003C-- \u002Fenv (GET, prod only)\n",[1512,1513,1514],"tip",{},[413,1515,1516,1517,1523],{},"\nYou can specify multiple environments or specify a preset name as environment using programmatic registration of routes via ",[422,1518,1520],{"href":1519},"#routes-config",[417,1521,1522],{},"routes"," config.",[742,1525,1527],{"id":1526},"ignoring-files","Ignoring files",[413,1529,1530,1531,1534],{},"You can use the ",[417,1532,1533],{},"ignore"," config option to exclude files from route scanning. It accepts an array of glob patterns relative to the server directory.",[433,1536,1539],{"className":435,"code":1537,"filename":1538,"language":438,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  ignore: [\n    \"routes\u002Fapi\u002F**\u002F_*\",   \u002F\u002F Ignore files starting with _ in api\u002F\n    \"middleware\u002F_*.ts\",    \u002F\u002F Ignore middleware starting with _\n    \"routes\u002F_*.ts\",       \u002F\u002F Ignore root routes starting with _\n  ],\n});\n","nitro.config.ts",[417,1540,1541,1554,1558,1570,1575,1586,1597,1608,1613],{"__ignoreMap":5},[442,1542,1543,1545,1548,1550,1552],{"class":444,"line":445},[442,1544,449],{"class":448},[442,1546,1547],{"class":455}," { defineConfig } ",[442,1549,459],{"class":448},[442,1551,463],{"class":462},[442,1553,466],{"class":455},[442,1555,1556],{"class":444,"line":469},[442,1557,473],{"emptyLinePlaceholder":472},[442,1559,1560,1562,1564,1567],{"class":444,"line":476},[442,1561,479],{"class":448},[442,1563,482],{"class":448},[442,1565,1566],{"class":494}," defineConfig",[442,1568,1569],{"class":455},"({\n",[442,1571,1572],{"class":444,"line":507},[442,1573,1574],{"class":455},"  ignore: [\n",[442,1576,1577,1580,1583],{"class":444,"line":518},[442,1578,1579],{"class":462},"    \"routes\u002Fapi\u002F**\u002F_*\"",[442,1581,1582],{"class":455},",   ",[442,1584,1585],{"class":549},"\u002F\u002F Ignore files starting with _ in api\u002F\n",[442,1587,1588,1591,1594],{"class":444,"line":581},[442,1589,1590],{"class":462},"    \"middleware\u002F_*.ts\"",[442,1592,1593],{"class":455},",    ",[442,1595,1596],{"class":549},"\u002F\u002F Ignore middleware starting with _\n",[442,1598,1599,1602,1605],{"class":444,"line":664},[442,1600,1601],{"class":462},"    \"routes\u002F_*.ts\"",[442,1603,1604],{"class":455},",       ",[442,1606,1607],{"class":549},"\u002F\u002F Ignore root routes starting with _\n",[442,1609,1610],{"class":444,"line":670},[442,1611,1612],{"class":455},"  ],\n",[442,1614,1615],{"class":444,"line":1274},[442,1616,584],{"class":455},[408,1618,1620],{"id":1619},"programmatic-route-handlers","Programmatic route handlers",[413,1622,1623,1624,1626],{},"In addition to filesystem routing, you can register route handlers programmatically using the ",[417,1625,1522],{}," config option.",[742,1628,1630,1632],{"id":1629},"routes-config",[417,1631,1522],{}," config",[413,1634,1635,1636,1638],{},"The ",[417,1637,1522],{}," option allows you to map route patterns to handlers:",[433,1640,1642],{"className":435,"code":1641,"filename":1538,"language":438,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  routes: {\n    \"\u002Fapi\u002Fhello\": \".\u002Fserver\u002Froutes\u002Fapi\u002Fhello.ts\",\n    \"\u002Fapi\u002Fcustom\": {\n      handler: \".\u002Fserver\u002Froutes\u002Fapi\u002Fhello.ts\",\n      method: \"POST\",\n      lazy: true,\n    },\n    \"\u002Fvirtual\": {\n      handler: \"#virtual-route\",\n    },\n  },\n});\n",[417,1643,1644,1656,1660,1670,1675,1689,1697,1706,1716,1725,1730,1738,1748,1753,1759],{"__ignoreMap":5},[442,1645,1646,1648,1650,1652,1654],{"class":444,"line":445},[442,1647,449],{"class":448},[442,1649,1547],{"class":455},[442,1651,459],{"class":448},[442,1653,463],{"class":462},[442,1655,466],{"class":455},[442,1657,1658],{"class":444,"line":469},[442,1659,473],{"emptyLinePlaceholder":472},[442,1661,1662,1664,1666,1668],{"class":444,"line":476},[442,1663,479],{"class":448},[442,1665,482],{"class":448},[442,1667,1566],{"class":494},[442,1669,1569],{"class":455},[442,1671,1672],{"class":444,"line":507},[442,1673,1674],{"class":455},"  routes: {\n",[442,1676,1677,1680,1683,1686],{"class":444,"line":518},[442,1678,1679],{"class":462},"    \"\u002Fapi\u002Fhello\"",[442,1681,1682],{"class":455},": ",[442,1684,1685],{"class":462},"\".\u002Fserver\u002Froutes\u002Fapi\u002Fhello.ts\"",[442,1687,1688],{"class":455},",\n",[442,1690,1691,1694],{"class":444,"line":581},[442,1692,1693],{"class":462},"    \"\u002Fapi\u002Fcustom\"",[442,1695,1696],{"class":455},": {\n",[442,1698,1699,1702,1704],{"class":444,"line":664},[442,1700,1701],{"class":455},"      handler: ",[442,1703,1685],{"class":462},[442,1705,1688],{"class":455},[442,1707,1708,1711,1714],{"class":444,"line":670},[442,1709,1710],{"class":455},"      method: ",[442,1712,1713],{"class":462},"\"POST\"",[442,1715,1688],{"class":455},[442,1717,1718,1721,1723],{"class":444,"line":1274},[442,1719,1720],{"class":455},"      lazy: ",[442,1722,1380],{"class":893},[442,1724,1688],{"class":455},[442,1726,1727],{"class":444,"line":1284},[442,1728,1729],{"class":455},"    },\n",[442,1731,1733,1736],{"class":444,"line":1732},11,[442,1734,1735],{"class":462},"    \"\u002Fvirtual\"",[442,1737,1696],{"class":455},[442,1739,1741,1743,1746],{"class":444,"line":1740},12,[442,1742,1701],{"class":455},[442,1744,1745],{"class":462},"\"#virtual-route\"",[442,1747,1688],{"class":455},[442,1749,1751],{"class":444,"line":1750},13,[442,1752,1729],{"class":455},[442,1754,1756],{"class":444,"line":1755},14,[442,1757,1758],{"class":455},"  },\n",[442,1760,1762],{"class":444,"line":1761},15,[442,1763,584],{"class":455},[413,1765,1766],{},"Each route entry can be a simple string (handler path) or an object with the following options:",[1768,1769,1770,1786],"table",{},[1771,1772,1773],"thead",{},[1774,1775,1776,1780,1783],"tr",{},[1777,1778,1779],"th",{},"Option",[1777,1781,1782],{},"Type",[1777,1784,1785],{},"Description",[1787,1788,1789,1805,1824,1839,1858],"tbody",{},[1774,1790,1791,1797,1802],{},[1792,1793,1794],"td",{},[417,1795,1796],{},"handler",[1792,1798,1799],{},[417,1800,1801],{},"string",[1792,1803,1804],{},"Path to event handler file or virtual module ID",[1774,1806,1807,1812,1816],{},[1792,1808,1809],{},[417,1810,1811],{},"method",[1792,1813,1814],{},[417,1815,1801],{},[1792,1817,1818,1819,1009,1821,1823],{},"HTTP method to match (",[417,1820,1166],{},[417,1822,1169],{},", etc.)",[1774,1825,1826,1831,1836],{},[1792,1827,1828],{},[417,1829,1830],{},"lazy",[1792,1832,1833],{},[417,1834,1835],{},"boolean",[1792,1837,1838],{},"Use lazy loading to import handler",[1774,1840,1841,1846,1851],{},[1792,1842,1843],{},[417,1844,1845],{},"format",[1792,1847,1848],{},[417,1849,1850],{},"\"web\" | \"node\"",[1792,1852,1853,1854,1857],{},"Handler type. ",[417,1855,1856],{},"\"node\""," handlers are converted to web-compatible",[1774,1859,1860,1865,1870],{},[1792,1861,1862],{},[417,1863,1864],{},"env",[1792,1866,1867],{},[417,1868,1869],{},"string | string[]",[1792,1871,1872,1873,1009,1876,1009,1879,1882],{},"Environments to include this handler (",[417,1874,1875],{},"\"dev\"",[417,1877,1878],{},"\"prod\"",[417,1880,1881],{},"\"prerender\"",", or a preset name)",[742,1884,1886,1632],{"id":1885},"handlers-config",[417,1887,1888],{},"handlers",[413,1890,1635,1891,1893],{},[417,1892,1888],{}," array is useful for registering middleware with control over route matching:",[433,1895,1897],{"className":435,"code":1896,"filename":1538,"language":438,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  handlers: [\n    {\n      route: \"\u002Fapi\u002F**\",\n      handler: \".\u002Fserver\u002Fmiddleware\u002Fapi-auth.ts\",\n      middleware: true,\n    },\n  ],\n});\n",[417,1898,1899,1911,1915,1925,1930,1935,1945,1954,1963,1967,1971],{"__ignoreMap":5},[442,1900,1901,1903,1905,1907,1909],{"class":444,"line":445},[442,1902,449],{"class":448},[442,1904,1547],{"class":455},[442,1906,459],{"class":448},[442,1908,463],{"class":462},[442,1910,466],{"class":455},[442,1912,1913],{"class":444,"line":469},[442,1914,473],{"emptyLinePlaceholder":472},[442,1916,1917,1919,1921,1923],{"class":444,"line":476},[442,1918,479],{"class":448},[442,1920,482],{"class":448},[442,1922,1566],{"class":494},[442,1924,1569],{"class":455},[442,1926,1927],{"class":444,"line":507},[442,1928,1929],{"class":455},"  handlers: [\n",[442,1931,1932],{"class":444,"line":518},[442,1933,1934],{"class":455},"    {\n",[442,1936,1937,1940,1943],{"class":444,"line":581},[442,1938,1939],{"class":455},"      route: ",[442,1941,1942],{"class":462},"\"\u002Fapi\u002F**\"",[442,1944,1688],{"class":455},[442,1946,1947,1949,1952],{"class":444,"line":664},[442,1948,1701],{"class":455},[442,1950,1951],{"class":462},"\".\u002Fserver\u002Fmiddleware\u002Fapi-auth.ts\"",[442,1953,1688],{"class":455},[442,1955,1956,1959,1961],{"class":444,"line":670},[442,1957,1958],{"class":455},"      middleware: ",[442,1960,1380],{"class":893},[442,1962,1688],{"class":455},[442,1964,1965],{"class":444,"line":1274},[442,1966,1729],{"class":455},[442,1968,1969],{"class":444,"line":1284},[442,1970,1612],{"class":455},[442,1972,1973],{"class":444,"line":1732},[442,1974,584],{"class":455},[413,1976,1977],{},"Each handler entry supports the following options:",[1768,1979,1980,1990],{},[1771,1981,1982],{},[1774,1983,1984,1986,1988],{},[1777,1985,1779],{},[1777,1987,1782],{},[1777,1989,1785],{},[1787,1991,1992,2015,2027,2043,2057,2069,2083],{},[1774,1993,1994,1999,2003],{},[1792,1995,1996],{},[417,1997,1998],{},"route",[1792,2000,2001],{},[417,2002,1801],{},[1792,2004,2005,2006,1009,2009,1009,2012,688],{},"HTTP pathname pattern (e.g., ",[417,2007,2008],{},"\u002Ftest",[417,2010,2011],{},"\u002Fapi\u002F:id",[417,2013,2014],{},"\u002Fblog\u002F**",[1774,2016,2017,2021,2025],{},[1792,2018,2019],{},[417,2020,1796],{},[1792,2022,2023],{},[417,2024,1801],{},[1792,2026,1804],{},[1774,2028,2029,2033,2037],{},[1792,2030,2031],{},[417,2032,1811],{},[1792,2034,2035],{},[417,2036,1801],{},[1792,2038,1818,2039,1009,2041,1823],{},[417,2040,1166],{},[417,2042,1169],{},[1774,2044,2045,2050,2054],{},[1792,2046,2047],{},[417,2048,2049],{},"middleware",[1792,2051,2052],{},[417,2053,1835],{},[1792,2055,2056],{},"Run handler as middleware before route handlers",[1774,2058,2059,2063,2067],{},[1792,2060,2061],{},[417,2062,1830],{},[1792,2064,2065],{},[417,2066,1835],{},[1792,2068,1838],{},[1774,2070,2071,2075,2079],{},[1792,2072,2073],{},[417,2074,1845],{},[1792,2076,2077],{},[417,2078,1850],{},[1792,2080,1853,2081,1857],{},[417,2082,1856],{},[1774,2084,2085,2089,2093],{},[1792,2086,2087],{},[417,2088,1864],{},[1792,2090,2091],{},[417,2092,1869],{},[1792,2094,1872,2095,1009,2097,1009,2099,1882],{},[417,2096,1875],{},[417,2098,1878],{},[417,2100,1881],{},[408,2102,294],{"id":2049},[413,2104,2105],{},"Nitro route middleware can hook into the request lifecycle.",[1512,2107,2108],{},[413,2109,2110],{},"A middleware can modify the request before it is processed, not after.",[413,2112,2113,2114,605],{},"Middleware are auto-registered within the ",[417,2115,2116],{},"middleware\u002F",[433,2118,2122],{"className":2119,"code":2120,"language":2121,"meta":5,"style":5},"language-md shiki shiki-themes github-light github-dark github-dark","middleware\u002F\n  auth.ts\n  logger.ts\n  ...\nroutes\u002F\n  hello.ts\n","md",[417,2123,2124,2129,2134,2139,2144,2148],{"__ignoreMap":5},[442,2125,2126],{"class":444,"line":445},[442,2127,2128],{"class":455},"middleware\u002F\n",[442,2130,2131],{"class":444,"line":469},[442,2132,2133],{"class":455},"  auth.ts\n",[442,2135,2136],{"class":444,"line":476},[442,2137,2138],{"class":455},"  logger.ts\n",[442,2140,2141],{"class":444,"line":507},[442,2142,2143],{"class":455},"  ...\n",[442,2145,2146],{"class":444,"line":518},[442,2147,636],{"class":455},[442,2149,2150],{"class":444,"line":581},[442,2151,2152],{"class":455},"  hello.ts\n",[742,2154,2156],{"id":2155},"simple-middleware","Simple middleware",[413,2158,2159],{},"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.",[433,2161,2164],{"className":435,"code":2162,"filename":2163,"language":438,"meta":5,"style":5},"import { defineHandler } from \"nitro\";\n\nexport default defineHandler((event) => {\n  \u002F\u002F Extends or modify the event\n  event.context.user = { name: \"Nitro\" };\n});\n","middleware\u002Fauth.ts",[417,2165,2166,2178,2182,2200,2205,2220],{"__ignoreMap":5},[442,2167,2168,2170,2172,2174,2176],{"class":444,"line":445},[442,2169,449],{"class":448},[442,2171,534],{"class":455},[442,2173,459],{"class":448},[442,2175,463],{"class":462},[442,2177,466],{"class":455},[442,2179,2180],{"class":444,"line":469},[442,2181,473],{"emptyLinePlaceholder":472},[442,2183,2184,2186,2188,2190,2192,2194,2196,2198],{"class":444,"line":476},[442,2185,479],{"class":448},[442,2187,482],{"class":448},[442,2189,559],{"class":494},[442,2191,562],{"class":455},[442,2193,419],{"class":488},[442,2195,498],{"class":455},[442,2197,501],{"class":448},[442,2199,504],{"class":455},[442,2201,2202],{"class":444,"line":507},[442,2203,2204],{"class":549},"  \u002F\u002F Extends or modify the event\n",[442,2206,2207,2210,2212,2215,2218],{"class":444,"line":518},[442,2208,2209],{"class":455},"  event.context.user ",[442,2211,900],{"class":448},[442,2213,2214],{"class":455}," { name: ",[442,2216,2217],{"class":462},"\"Nitro\"",[442,2219,807],{"class":455},[442,2221,2222],{"class":444,"line":581},[442,2223,584],{"class":455},[413,2225,2226,2227,2229,2230,689],{},"Middleware in ",[417,2228,2116],{}," directory are automatically registered for all routes. If you want to register a middleware for a specific route, see ",[422,2231,2234],{"href":2232,"rel":2233},"https:\u002F\u002Fh3.dev\u002Fguide\u002Fbasics\u002Fhandler#object-syntax",[426],"Object Syntax Event Handler",[736,2236,2237],{},[413,2238,2239,2240],{},"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 ",[955,2241,2242],{},"this is not recommended to do!",[742,2244,2246],{"id":2245},"route-meta","Route Meta",[413,2248,2249,2250,2253],{},"You can define route handler meta at build-time using ",[417,2251,2252],{},"defineRouteMeta"," macro in the event handler files.",[2255,2256,2257],"important",{},[413,2258,2259],{},"\nThis feature is currently experimental.",[433,2261,2263],{"className":435,"code":2262,"filename":761,"language":438,"meta":5,"style":5},"import { defineRouteMeta } from \"nitro\";\nimport { defineHandler } from \"nitro\";\n\ndefineRouteMeta({\n  openAPI: {\n    tags: [\"test\"],\n    description: \"Test route description\",\n    parameters: [{ in: \"query\", name: \"test\", required: true }],\n  },\n});\n\nexport default defineHandler(() => \"OK\");\n",[417,2264,2265,2278,2290,2294,2300,2305,2316,2326,2347,2351,2355,2359],{"__ignoreMap":5},[442,2266,2267,2269,2272,2274,2276],{"class":444,"line":445},[442,2268,449],{"class":448},[442,2270,2271],{"class":455}," { defineRouteMeta } ",[442,2273,459],{"class":448},[442,2275,463],{"class":462},[442,2277,466],{"class":455},[442,2279,2280,2282,2284,2286,2288],{"class":444,"line":469},[442,2281,449],{"class":448},[442,2283,534],{"class":455},[442,2285,459],{"class":448},[442,2287,463],{"class":462},[442,2289,466],{"class":455},[442,2291,2292],{"class":444,"line":476},[442,2293,473],{"emptyLinePlaceholder":472},[442,2295,2296,2298],{"class":444,"line":507},[442,2297,2252],{"class":494},[442,2299,1569],{"class":455},[442,2301,2302],{"class":444,"line":518},[442,2303,2304],{"class":455},"  openAPI: {\n",[442,2306,2307,2310,2313],{"class":444,"line":581},[442,2308,2309],{"class":455},"    tags: [",[442,2311,2312],{"class":462},"\"test\"",[442,2314,2315],{"class":455},"],\n",[442,2317,2318,2321,2324],{"class":444,"line":664},[442,2319,2320],{"class":455},"    description: ",[442,2322,2323],{"class":462},"\"Test route description\"",[442,2325,1688],{"class":455},[442,2327,2328,2331,2334,2337,2339,2342,2344],{"class":444,"line":670},[442,2329,2330],{"class":455},"    parameters: [{ in: ",[442,2332,2333],{"class":462},"\"query\"",[442,2335,2336],{"class":455},", name: ",[442,2338,2312],{"class":462},[442,2340,2341],{"class":455},", required: ",[442,2343,1380],{"class":893},[442,2345,2346],{"class":455}," }],\n",[442,2348,2349],{"class":444,"line":1274},[442,2350,1758],{"class":455},[442,2352,2353],{"class":444,"line":1284},[442,2354,584],{"class":455},[442,2356,2357],{"class":444,"line":1732},[442,2358,473],{"emptyLinePlaceholder":472},[442,2360,2361,2363,2365,2367,2369,2371,2374],{"class":444,"line":1740},[442,2362,479],{"class":448},[442,2364,482],{"class":448},[442,2366,559],{"class":494},[442,2368,790],{"class":455},[442,2370,501],{"class":448},[442,2372,2373],{"class":462}," \"OK\"",[442,2375,2376],{"class":455},");\n",[2378,2379,2381],"read-more",{"to":2380},"https:\u002F\u002Fswagger.io\u002Fspecification\u002Fv3\u002F",[413,2382,2383],{},"This feature is currently usable to specify OpenAPI meta. See swagger specification for available OpenAPI options.",[742,2385,2387],{"id":2386},"execution-order","Execution order",[413,2389,2390],{},"Middleware are executed in directory listing order.",[433,2392,2394],{"className":2119,"code":2393,"language":2121,"meta":5,"style":5},"middleware\u002F\n  auth.ts \u003C-- First\n  logger.ts \u003C-- Second\n  ... \u003C-- Third\n",[417,2395,2396,2400,2405,2410],{"__ignoreMap":5},[442,2397,2398],{"class":444,"line":445},[442,2399,2128],{"class":455},[442,2401,2402],{"class":444,"line":469},[442,2403,2404],{"class":455},"  auth.ts \u003C-- First\n",[442,2406,2407],{"class":444,"line":476},[442,2408,2409],{"class":455},"  logger.ts \u003C-- Second\n",[442,2411,2412],{"class":444,"line":507},[442,2413,2414],{"class":455},"  ... \u003C-- Third\n",[413,2416,2417],{},"Prefix middleware with a number to control their execution order.",[433,2419,2421],{"className":2119,"code":2420,"language":2121,"meta":5,"style":5},"middleware\u002F\n  1.logger.ts \u003C-- First\n  2.auth.ts \u003C-- Second\n  3.... \u003C-- Third\n",[417,2422,2423,2427,2432,2437],{"__ignoreMap":5},[442,2424,2425],{"class":444,"line":445},[442,2426,2128],{"class":455},[442,2428,2429],{"class":444,"line":469},[442,2430,2431],{"class":455},"  1.logger.ts \u003C-- First\n",[442,2433,2434],{"class":444,"line":476},[442,2435,2436],{"class":455},"  2.auth.ts \u003C-- Second\n",[442,2438,2439],{"class":444,"line":507},[442,2440,2441],{"class":455},"  3.... \u003C-- Third\n",[736,2443,2444],{},[413,2445,2446,2447,1009,2450,685,2453,2456,2457,2459,2460,2462,2463,2466,2467,2470,2471,2474],{},"Remember that file names are sorted as strings, thus for example if you have 3 files ",[417,2448,2449],{},"1.filename.ts",[417,2451,2452],{},"2.filename.ts",[417,2454,2455],{},"10.filename.ts",", the ",[417,2458,2455],{}," will come after the ",[417,2461,2449],{},". To avoid this, prefix ",[417,2464,2465],{},"1-9"," with a ",[417,2468,2469],{},"0"," like ",[417,2472,2473],{},"01",", if you have more than 10 middleware in the same directory.",[742,2476,2478],{"id":2477},"request-filtering","Request filtering",[413,2480,2481],{},"Middleware are executed on every request.",[413,2483,2484],{},"Apply custom logic to scope them to specific conditions.",[413,2486,2487],{},"For example, you can use the URL to apply a middleware to a specific route:",[433,2489,2491],{"className":435,"code":2490,"filename":2163,"language":438,"meta":5,"style":5},"import { defineHandler } from \"nitro\";\n\nexport default defineHandler((event) => {\n  \u002F\u002F Will only execute for \u002Fauth route\n  if (event.url.pathname.startsWith('\u002Fauth')) {\n    event.context.user = { name: \"Nitro\" };\n  }\n});\n",[417,2492,2493,2505,2509,2527,2532,2551,2564,2569],{"__ignoreMap":5},[442,2494,2495,2497,2499,2501,2503],{"class":444,"line":445},[442,2496,449],{"class":448},[442,2498,534],{"class":455},[442,2500,459],{"class":448},[442,2502,463],{"class":462},[442,2504,466],{"class":455},[442,2506,2507],{"class":444,"line":469},[442,2508,473],{"emptyLinePlaceholder":472},[442,2510,2511,2513,2515,2517,2519,2521,2523,2525],{"class":444,"line":476},[442,2512,479],{"class":448},[442,2514,482],{"class":448},[442,2516,559],{"class":494},[442,2518,562],{"class":455},[442,2520,419],{"class":488},[442,2522,498],{"class":455},[442,2524,501],{"class":448},[442,2526,504],{"class":455},[442,2528,2529],{"class":444,"line":507},[442,2530,2531],{"class":549},"  \u002F\u002F Will only execute for \u002Fauth route\n",[442,2533,2534,2537,2540,2543,2545,2548],{"class":444,"line":518},[442,2535,2536],{"class":448},"  if",[442,2538,2539],{"class":455}," (event.url.pathname.",[442,2541,2542],{"class":494},"startsWith",[442,2544,684],{"class":455},[442,2546,2547],{"class":462},"'\u002Fauth'",[442,2549,2550],{"class":455},")) {\n",[442,2552,2553,2556,2558,2560,2562],{"class":444,"line":581},[442,2554,2555],{"class":455},"    event.context.user ",[442,2557,900],{"class":448},[442,2559,2214],{"class":455},[442,2561,2217],{"class":462},[442,2563,807],{"class":455},[442,2565,2566],{"class":444,"line":664},[442,2567,2568],{"class":455},"  }\n",[442,2570,2571],{"class":444,"line":670},[442,2572,584],{"class":455},[742,2574,2576],{"id":2575},"route-scoped-middleware","Route-scoped middleware",[413,2578,2579,2580,2585,2586,2588,2589,491],{},"You can register middleware for specific route patterns using the ",[422,2581,2583],{"href":2582},"#handlers-config",[417,2584,1888],{}," config with the ",[417,2587,2049],{}," option and a specific ",[417,2590,1998],{},[433,2592,2593],{"className":435,"code":1896,"filename":1538,"language":438,"meta":5,"style":5},[417,2594,2595,2607,2611,2621,2625,2629,2637,2645,2653,2657,2661],{"__ignoreMap":5},[442,2596,2597,2599,2601,2603,2605],{"class":444,"line":445},[442,2598,449],{"class":448},[442,2600,1547],{"class":455},[442,2602,459],{"class":448},[442,2604,463],{"class":462},[442,2606,466],{"class":455},[442,2608,2609],{"class":444,"line":469},[442,2610,473],{"emptyLinePlaceholder":472},[442,2612,2613,2615,2617,2619],{"class":444,"line":476},[442,2614,479],{"class":448},[442,2616,482],{"class":448},[442,2618,1566],{"class":494},[442,2620,1569],{"class":455},[442,2622,2623],{"class":444,"line":507},[442,2624,1929],{"class":455},[442,2626,2627],{"class":444,"line":518},[442,2628,1934],{"class":455},[442,2630,2631,2633,2635],{"class":444,"line":581},[442,2632,1939],{"class":455},[442,2634,1942],{"class":462},[442,2636,1688],{"class":455},[442,2638,2639,2641,2643],{"class":444,"line":664},[442,2640,1701],{"class":455},[442,2642,1951],{"class":462},[442,2644,1688],{"class":455},[442,2646,2647,2649,2651],{"class":444,"line":670},[442,2648,1958],{"class":455},[442,2650,1380],{"class":893},[442,2652,1688],{"class":455},[442,2654,2655],{"class":444,"line":1274},[442,2656,1729],{"class":455},[442,2658,2659],{"class":444,"line":1284},[442,2660,1612],{"class":455},[442,2662,2663],{"class":444,"line":1732},[442,2664,584],{"class":455},[413,2666,2667,2668,2670,2671,2674],{},"Unlike global middleware (registered in the ",[417,2669,2116],{}," directory which match ",[417,2672,2673],{},"\u002F**","), route-scoped middleware only run for requests matching the specified pattern.",[408,2676,2678],{"id":2677},"error-handling","Error handling",[413,2680,1530,2681,2686],{},[422,2682,2685],{"href":2683,"rel":2684},"https:\u002F\u002Fh3.dev\u002Fguide\u002Fbasics\u002Ferror",[426],"utilities available in H3"," to handle errors in both routes and middlewares.",[413,2688,2689,2690,2693,2694,2697],{},"The way errors are sent back to the client depends on the environment. In development, requests with an ",[417,2691,2692],{},"Accept"," header of ",[417,2695,2696],{},"text\u002Fhtml"," (such as browsers) will receive a HTML error page. In production, errors are always sent in JSON.",[413,2699,2700,2701,601,2703,2706],{},"This behaviour can be overridden by some request properties (e.g.: ",[417,2702,2692],{},[417,2704,2705],{},"User-Agent"," headers).",[408,2708,2710],{"id":2709},"code-splitting","Code splitting",[413,2712,2713,2714,2717,2718,689],{},"Nitro creates a separate chunk for each route handler. Chunks load on-demand when first requested, so ",[417,2715,2716],{},"\u002Fapi\u002Fusers"," doesn't load code for ",[417,2719,2720],{},"\u002Fapi\u002Fposts",[413,2722,2723,2724,2730],{},"See ",[422,2725,2727],{"href":2726},"\u002Fconfig#inlinedynamicimports",[417,2728,2729],{},"inlineDynamicImports"," to bundle everything into a single file.",[408,2732,2734],{"id":2733},"route-rules","Route rules",[413,2736,2737],{},"Nitro allows you to add logic at the top-level for each route of your configuration. It can be used for redirecting, proxying, caching, authentication, and adding headers to routes.",[413,2739,2740,2741,2746,2747,689],{},"It is a map from route pattern (following ",[422,2742,2745],{"href":2743,"rel":2744},"https:\u002F\u002Fgithub.com\u002Fh3js\u002Frou3",[426],"rou3",") to route options and based on ",[422,2748,2751],{"href":2749,"rel":2750},"https:\u002F\u002Fgithub.com\u002Fh3js\u002Fh3-rules",[426],[417,2752,2753],{},"h3-rules",[413,2755,2756,2757,2760,2761,2764,2765,2768],{},"When ",[417,2758,2759],{},"cache"," option is set, handlers matching pattern will be automatically wrapped with ",[417,2762,2763],{},"defineCachedHandler",". See the ",[422,2766,2767],{"href":74},"cache guide"," to learn more about this function.",[736,2770,2771],{},[413,2772,2773,2776,2777],{},[417,2774,2775],{},"swr: true|number"," is shortcut for ",[417,2778,2779],{},"cache: { swr: true, maxAge: number }",[413,2781,2782,2783,2786],{},"You can set route rules in the ",[417,2784,2785],{},"nitro.routeRules"," options.",[433,2788,2790],{"className":435,"code":2789,"filename":1538,"language":438,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  routeRules: {\n    '\u002Fblog\u002F**': { swr: true },\n    '\u002Fblog2\u002F**': { swr: 600 },\n    '\u002Fblog3\u002F**': { static: true },\n    '\u002Fblog4\u002F**': { cache: { \u002F* cache options*\u002F } },\n    '\u002Fassets\u002F**': { headers: { 'cache-control': 's-maxage=0' } },\n    '\u002Fapi\u002Fv1\u002F**': { cors: true, headers: { 'access-control-allow-methods': 'GET' } },\n    '\u002Fold-page': { redirect: '\u002Fnew-page' },\n    '\u002Fold-page\u002F**': { redirect: '\u002Fnew-page\u002F**' },\n    '\u002Fproxy\u002Fexample': { proxy: 'https:\u002F\u002Fexample.com' },\n    '\u002Fproxy\u002F**': { proxy: '\u002Fapi\u002F**' },\n    '\u002Fadmin\u002F**': { basicAuth: { username: 'admin', password: 'supersecret' } },\n  }\n});\n",[417,2791,2792,2804,2808,2818,2823,2836,2848,2860,2874,2892,2915,2928,2940,2953,2965,2984,2989],{"__ignoreMap":5},[442,2793,2794,2796,2798,2800,2802],{"class":444,"line":445},[442,2795,449],{"class":448},[442,2797,1547],{"class":455},[442,2799,459],{"class":448},[442,2801,463],{"class":462},[442,2803,466],{"class":455},[442,2805,2806],{"class":444,"line":469},[442,2807,473],{"emptyLinePlaceholder":472},[442,2809,2810,2812,2814,2816],{"class":444,"line":476},[442,2811,479],{"class":448},[442,2813,482],{"class":448},[442,2815,1566],{"class":494},[442,2817,1569],{"class":455},[442,2819,2820],{"class":444,"line":507},[442,2821,2822],{"class":455},"  routeRules: {\n",[442,2824,2825,2828,2831,2833],{"class":444,"line":518},[442,2826,2827],{"class":462},"    '\u002Fblog\u002F**'",[442,2829,2830],{"class":455},": { swr: ",[442,2832,1380],{"class":893},[442,2834,2835],{"class":455}," },\n",[442,2837,2838,2841,2843,2846],{"class":444,"line":581},[442,2839,2840],{"class":462},"    '\u002Fblog2\u002F**'",[442,2842,2830],{"class":455},[442,2844,2845],{"class":893},"600",[442,2847,2835],{"class":455},[442,2849,2850,2853,2856,2858],{"class":444,"line":664},[442,2851,2852],{"class":462},"    '\u002Fblog3\u002F**'",[442,2854,2855],{"class":455},": { static: ",[442,2857,1380],{"class":893},[442,2859,2835],{"class":455},[442,2861,2862,2865,2868,2871],{"class":444,"line":670},[442,2863,2864],{"class":462},"    '\u002Fblog4\u002F**'",[442,2866,2867],{"class":455},": { cache: { ",[442,2869,2870],{"class":549},"\u002F* cache options*\u002F",[442,2872,2873],{"class":455}," } },\n",[442,2875,2876,2879,2882,2885,2887,2890],{"class":444,"line":1274},[442,2877,2878],{"class":462},"    '\u002Fassets\u002F**'",[442,2880,2881],{"class":455},": { headers: { ",[442,2883,2884],{"class":462},"'cache-control'",[442,2886,1682],{"class":455},[442,2888,2889],{"class":462},"'s-maxage=0'",[442,2891,2873],{"class":455},[442,2893,2894,2897,2900,2902,2905,2908,2910,2913],{"class":444,"line":1284},[442,2895,2896],{"class":462},"    '\u002Fapi\u002Fv1\u002F**'",[442,2898,2899],{"class":455},": { cors: ",[442,2901,1380],{"class":893},[442,2903,2904],{"class":455},", headers: { ",[442,2906,2907],{"class":462},"'access-control-allow-methods'",[442,2909,1682],{"class":455},[442,2911,2912],{"class":462},"'GET'",[442,2914,2873],{"class":455},[442,2916,2917,2920,2923,2926],{"class":444,"line":1732},[442,2918,2919],{"class":462},"    '\u002Fold-page'",[442,2921,2922],{"class":455},": { redirect: ",[442,2924,2925],{"class":462},"'\u002Fnew-page'",[442,2927,2835],{"class":455},[442,2929,2930,2933,2935,2938],{"class":444,"line":1740},[442,2931,2932],{"class":462},"    '\u002Fold-page\u002F**'",[442,2934,2922],{"class":455},[442,2936,2937],{"class":462},"'\u002Fnew-page\u002F**'",[442,2939,2835],{"class":455},[442,2941,2942,2945,2948,2951],{"class":444,"line":1750},[442,2943,2944],{"class":462},"    '\u002Fproxy\u002Fexample'",[442,2946,2947],{"class":455},": { proxy: ",[442,2949,2950],{"class":462},"'https:\u002F\u002Fexample.com'",[442,2952,2835],{"class":455},[442,2954,2955,2958,2960,2963],{"class":444,"line":1755},[442,2956,2957],{"class":462},"    '\u002Fproxy\u002F**'",[442,2959,2947],{"class":455},[442,2961,2962],{"class":462},"'\u002Fapi\u002F**'",[442,2964,2835],{"class":455},[442,2966,2967,2970,2973,2976,2979,2982],{"class":444,"line":1761},[442,2968,2969],{"class":462},"    '\u002Fadmin\u002F**'",[442,2971,2972],{"class":455},": { basicAuth: { username: ",[442,2974,2975],{"class":462},"'admin'",[442,2977,2978],{"class":455},", password: ",[442,2980,2981],{"class":462},"'supersecret'",[442,2983,2873],{"class":455},[442,2985,2987],{"class":444,"line":2986},16,[442,2988,2568],{"class":455},[442,2990,2992],{"class":444,"line":2991},17,[442,2993,584],{"class":455},[742,2995,2997],{"id":2996},"rule-merging-and-overrides","Rule merging and overrides",[413,2999,3000],{},"Route rules are matched from least specific to most specific. When multiple rules match a request, their options are merged, with more specific rules taking precedence.",[413,3002,3003,3004,3007],{},"You can use ",[417,3005,3006],{},"false"," to disable a rule that was set by a more general pattern:",[433,3009,3011],{"className":435,"code":3010,"filename":1538,"language":438,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  routeRules: {\n    '\u002Fapi\u002Fcached\u002F**': { swr: true },\n    '\u002Fapi\u002Fcached\u002Fno-cache': { cache: false, swr: false },\n    '\u002Fadmin\u002F**': { basicAuth: { username: 'admin', password: 'secret' } },\n    '\u002Fadmin\u002Fpublic\u002F**': { basicAuth: false },\n  }\n});\n",[417,3012,3013,3025,3029,3039,3043,3054,3071,3086,3098,3102],{"__ignoreMap":5},[442,3014,3015,3017,3019,3021,3023],{"class":444,"line":445},[442,3016,449],{"class":448},[442,3018,1547],{"class":455},[442,3020,459],{"class":448},[442,3022,463],{"class":462},[442,3024,466],{"class":455},[442,3026,3027],{"class":444,"line":469},[442,3028,473],{"emptyLinePlaceholder":472},[442,3030,3031,3033,3035,3037],{"class":444,"line":476},[442,3032,479],{"class":448},[442,3034,482],{"class":448},[442,3036,1566],{"class":494},[442,3038,1569],{"class":455},[442,3040,3041],{"class":444,"line":507},[442,3042,2822],{"class":455},[442,3044,3045,3048,3050,3052],{"class":444,"line":518},[442,3046,3047],{"class":462},"    '\u002Fapi\u002Fcached\u002F**'",[442,3049,2830],{"class":455},[442,3051,1380],{"class":893},[442,3053,2835],{"class":455},[442,3055,3056,3059,3062,3064,3067,3069],{"class":444,"line":581},[442,3057,3058],{"class":462},"    '\u002Fapi\u002Fcached\u002Fno-cache'",[442,3060,3061],{"class":455},": { cache: ",[442,3063,3006],{"class":893},[442,3065,3066],{"class":455},", swr: ",[442,3068,3006],{"class":893},[442,3070,2835],{"class":455},[442,3072,3073,3075,3077,3079,3081,3084],{"class":444,"line":664},[442,3074,2969],{"class":462},[442,3076,2972],{"class":455},[442,3078,2975],{"class":462},[442,3080,2978],{"class":455},[442,3082,3083],{"class":462},"'secret'",[442,3085,2873],{"class":455},[442,3087,3088,3091,3094,3096],{"class":444,"line":670},[442,3089,3090],{"class":462},"    '\u002Fadmin\u002Fpublic\u002F**'",[442,3092,3093],{"class":455},": { basicAuth: ",[442,3095,3006],{"class":893},[442,3097,2835],{"class":455},[442,3099,3100],{"class":444,"line":1274},[442,3101,2568],{"class":455},[442,3103,3104],{"class":444,"line":1284},[442,3105,584],{"class":455},[742,3107,3109],{"id":3108},"method-scoped-rules","Method-scoped rules",[413,3111,3112],{},"Prefix a rule key with an uppercase HTTP method (followed by a space) to scope it to requests using that method. Keys without a method prefix apply to every method. A method-scoped rule is merged on top of the method-agnostic rules that match the same path, so you can layer method-specific behavior over shared defaults:",[433,3114,3116],{"className":435,"code":3115,"filename":1538,"language":438,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  routeRules: {\n    \u002F\u002F Applies to every method\n    '\u002Fapi\u002F**': { headers: { 'x-api': 'true' } },\n    \u002F\u002F Only POST requests to \u002Fapi\u002F** additionally require auth\n    'POST \u002Fapi\u002F**': { basicAuth: { username: 'admin', password: 'secret' } },\n    \u002F\u002F Cache GET requests to \u002Ffeed only\n    'GET \u002Ffeed': { swr: 600 },\n  }\n});\n",[417,3117,3118,3130,3134,3144,3148,3153,3170,3175,3190,3195,3206,3210],{"__ignoreMap":5},[442,3119,3120,3122,3124,3126,3128],{"class":444,"line":445},[442,3121,449],{"class":448},[442,3123,1547],{"class":455},[442,3125,459],{"class":448},[442,3127,463],{"class":462},[442,3129,466],{"class":455},[442,3131,3132],{"class":444,"line":469},[442,3133,473],{"emptyLinePlaceholder":472},[442,3135,3136,3138,3140,3142],{"class":444,"line":476},[442,3137,479],{"class":448},[442,3139,482],{"class":448},[442,3141,1566],{"class":494},[442,3143,1569],{"class":455},[442,3145,3146],{"class":444,"line":507},[442,3147,2822],{"class":455},[442,3149,3150],{"class":444,"line":518},[442,3151,3152],{"class":549},"    \u002F\u002F Applies to every method\n",[442,3154,3155,3158,3160,3163,3165,3168],{"class":444,"line":581},[442,3156,3157],{"class":462},"    '\u002Fapi\u002F**'",[442,3159,2881],{"class":455},[442,3161,3162],{"class":462},"'x-api'",[442,3164,1682],{"class":455},[442,3166,3167],{"class":462},"'true'",[442,3169,2873],{"class":455},[442,3171,3172],{"class":444,"line":664},[442,3173,3174],{"class":549},"    \u002F\u002F Only POST requests to \u002Fapi\u002F** additionally require auth\n",[442,3176,3177,3180,3182,3184,3186,3188],{"class":444,"line":670},[442,3178,3179],{"class":462},"    'POST \u002Fapi\u002F**'",[442,3181,2972],{"class":455},[442,3183,2975],{"class":462},[442,3185,2978],{"class":455},[442,3187,3083],{"class":462},[442,3189,2873],{"class":455},[442,3191,3192],{"class":444,"line":1274},[442,3193,3194],{"class":549},"    \u002F\u002F Cache GET requests to \u002Ffeed only\n",[442,3196,3197,3200,3202,3204],{"class":444,"line":1284},[442,3198,3199],{"class":462},"    'GET \u002Ffeed'",[442,3201,2830],{"class":455},[442,3203,2845],{"class":893},[442,3205,2835],{"class":455},[442,3207,3208],{"class":444,"line":1732},[442,3209,2568],{"class":455},[442,3211,3212],{"class":444,"line":1740},[442,3213,584],{"class":455},[736,3215,3216],{},[413,3217,3218,3219,3222,3223,3226,3227,3230,3231,400,3234,400,3237,3240],{},"Method matching is resolved per request by the server runtime. Platform-native static generation (e.g. Netlify\u002FCloudflare ",[417,3220,3221],{},"_headers"," & ",[417,3224,3225],{},"_redirects",", Vercel ",[417,3228,3229],{},"config.json",") does not split by method, so prefer method-agnostic keys for ",[417,3232,3233],{},"headers",[417,3235,3236],{},"redirect",[417,3238,3239],{},"proxy"," rules you expect a platform to emit into its static config.",[742,3242,3243],{"id":3233},"Headers",[413,3245,3246],{},"Set custom response headers for matching routes:",[433,3248,3250],{"className":435,"code":3249,"filename":1538,"language":438,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  routeRules: {\n    '\u002Fapi\u002F**': { headers: { 'cache-control': 's-maxage=60' } },\n    '**': { headers: { 'x-powered-by': 'Nitro' } },\n  }\n});\n",[417,3251,3252,3264,3268,3278,3282,3297,3314,3318],{"__ignoreMap":5},[442,3253,3254,3256,3258,3260,3262],{"class":444,"line":445},[442,3255,449],{"class":448},[442,3257,1547],{"class":455},[442,3259,459],{"class":448},[442,3261,463],{"class":462},[442,3263,466],{"class":455},[442,3265,3266],{"class":444,"line":469},[442,3267,473],{"emptyLinePlaceholder":472},[442,3269,3270,3272,3274,3276],{"class":444,"line":476},[442,3271,479],{"class":448},[442,3273,482],{"class":448},[442,3275,1566],{"class":494},[442,3277,1569],{"class":455},[442,3279,3280],{"class":444,"line":507},[442,3281,2822],{"class":455},[442,3283,3284,3286,3288,3290,3292,3295],{"class":444,"line":518},[442,3285,3157],{"class":462},[442,3287,2881],{"class":455},[442,3289,2884],{"class":462},[442,3291,1682],{"class":455},[442,3293,3294],{"class":462},"'s-maxage=60'",[442,3296,2873],{"class":455},[442,3298,3299,3302,3304,3307,3309,3312],{"class":444,"line":581},[442,3300,3301],{"class":462},"    '**'",[442,3303,2881],{"class":455},[442,3305,3306],{"class":462},"'x-powered-by'",[442,3308,1682],{"class":455},[442,3310,3311],{"class":462},"'Nitro'",[442,3313,2873],{"class":455},[442,3315,3316],{"class":444,"line":664},[442,3317,2568],{"class":455},[442,3319,3320],{"class":444,"line":670},[442,3321,584],{"class":455},[742,3323,3325],{"id":3324},"cors","CORS",[413,3327,3328,3329,3331,3332,3335,3336,3339,3340,685,3343,3346,3347,3350,3351,3354,3355,3358],{},"Handle CORS at runtime with the ",[417,3330,3324],{}," rule. ",[417,3333,3334],{},"cors: true"," applies permissive defaults (origin, methods, and allowed headers ",[417,3337,3338],{},"*","): a simple request gets ",[417,3341,3342],{},"access-control-allow-origin: *",[417,3344,3345],{},"access-control-expose-headers: *",", and an ",[417,3348,3349],{},"OPTIONS"," preflight is answered directly (",[417,3352,3353],{},"204",") with the matching ",[417,3356,3357],{},"access-control-allow-*"," headers.",[736,3360,3361],{},[413,3362,3363,3364,3371],{},"\nCORS is applied by the running server (h3's ",[422,3365,3368],{"href":3366,"rel":3367},"https:\u002F\u002Fh3.dev\u002Futils\u002Fsecurity#handlecorsevent-options",[426],[417,3369,3370],{},"handleCors","), and not from the static\u002FCDN config.\nOn platforms that can serve prerendered\u002Fstatic assets straight from the edge, CORS headers are only added when the request reaches the server handler.",[413,3373,3374,3375,1009,3378,3381,3382,3385,3386,3389],{},"Pass an object for finer control — an origin allowlist, ",[417,3376,3377],{},"credentials",[417,3379,3380],{},"maxAge",", etc. (h3 ",[417,3383,3384],{},"CorsOptions","). Combining ",[417,3387,3388],{},"credentials: true"," with a wildcard origin is invalid and throws at build time:",[433,3391,3393],{"className":435,"code":3392,"filename":1538,"language":438,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  routeRules: {\n    \u002F\u002F Permissive defaults\n    '\u002Fapi\u002Fpublic\u002F**': { cors: true },\n    \u002F\u002F Restrict to specific origins with credentials\n    '\u002Fapi\u002Fv1\u002F**': {\n      cors: { origin: ['https:\u002F\u002Fapp.example.com'], credentials: true },\n    },\n  }\n});\n",[417,3394,3395,3407,3411,3421,3425,3430,3441,3446,3452,3467,3471,3475],{"__ignoreMap":5},[442,3396,3397,3399,3401,3403,3405],{"class":444,"line":445},[442,3398,449],{"class":448},[442,3400,1547],{"class":455},[442,3402,459],{"class":448},[442,3404,463],{"class":462},[442,3406,466],{"class":455},[442,3408,3409],{"class":444,"line":469},[442,3410,473],{"emptyLinePlaceholder":472},[442,3412,3413,3415,3417,3419],{"class":444,"line":476},[442,3414,479],{"class":448},[442,3416,482],{"class":448},[442,3418,1566],{"class":494},[442,3420,1569],{"class":455},[442,3422,3423],{"class":444,"line":507},[442,3424,2822],{"class":455},[442,3426,3427],{"class":444,"line":518},[442,3428,3429],{"class":549},"    \u002F\u002F Permissive defaults\n",[442,3431,3432,3435,3437,3439],{"class":444,"line":581},[442,3433,3434],{"class":462},"    '\u002Fapi\u002Fpublic\u002F**'",[442,3436,2899],{"class":455},[442,3438,1380],{"class":893},[442,3440,2835],{"class":455},[442,3442,3443],{"class":444,"line":664},[442,3444,3445],{"class":549},"    \u002F\u002F Restrict to specific origins with credentials\n",[442,3447,3448,3450],{"class":444,"line":670},[442,3449,2896],{"class":462},[442,3451,1696],{"class":455},[442,3453,3454,3457,3460,3463,3465],{"class":444,"line":1274},[442,3455,3456],{"class":455},"      cors: { origin: [",[442,3458,3459],{"class":462},"'https:\u002F\u002Fapp.example.com'",[442,3461,3462],{"class":455},"], credentials: ",[442,3464,1380],{"class":893},[442,3466,2835],{"class":455},[442,3468,3469],{"class":444,"line":1284},[442,3470,1729],{"class":455},[442,3472,3473],{"class":444,"line":1732},[442,3474,2568],{"class":455},[442,3476,3477],{"class":444,"line":1740},[442,3478,584],{"class":455},[742,3480,3481],{"id":3236},"Redirect",[413,3483,3484,3485,3488],{},"Redirect matching routes to another URL. Use a string for a simple redirect (defaults to ",[417,3486,3487],{},"307"," status), or an object for more control:",[433,3490,3492],{"className":435,"code":3491,"filename":1538,"language":438,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  routeRules: {\n    \u002F\u002F Simple redirect (307 status)\n    '\u002Fold-page': { redirect: '\u002Fnew-page' },\n    \u002F\u002F Redirect with custom status\n    '\u002Flegacy': { redirect: { to: 'https:\u002F\u002Fexample.com\u002F', status: 308 } },\n    \u002F\u002F Wildcard redirect — preserves the path after the pattern\n    '\u002Fold-blog\u002F**': { redirect: 'https:\u002F\u002Fblog.example.com\u002F**' },\n  }\n});\n",[417,3493,3494,3506,3510,3520,3524,3529,3539,3544,3563,3568,3580,3584],{"__ignoreMap":5},[442,3495,3496,3498,3500,3502,3504],{"class":444,"line":445},[442,3497,449],{"class":448},[442,3499,1547],{"class":455},[442,3501,459],{"class":448},[442,3503,463],{"class":462},[442,3505,466],{"class":455},[442,3507,3508],{"class":444,"line":469},[442,3509,473],{"emptyLinePlaceholder":472},[442,3511,3512,3514,3516,3518],{"class":444,"line":476},[442,3513,479],{"class":448},[442,3515,482],{"class":448},[442,3517,1566],{"class":494},[442,3519,1569],{"class":455},[442,3521,3522],{"class":444,"line":507},[442,3523,2822],{"class":455},[442,3525,3526],{"class":444,"line":518},[442,3527,3528],{"class":549},"    \u002F\u002F Simple redirect (307 status)\n",[442,3530,3531,3533,3535,3537],{"class":444,"line":581},[442,3532,2919],{"class":462},[442,3534,2922],{"class":455},[442,3536,2925],{"class":462},[442,3538,2835],{"class":455},[442,3540,3541],{"class":444,"line":664},[442,3542,3543],{"class":549},"    \u002F\u002F Redirect with custom status\n",[442,3545,3546,3549,3552,3555,3558,3561],{"class":444,"line":670},[442,3547,3548],{"class":462},"    '\u002Flegacy'",[442,3550,3551],{"class":455},": { redirect: { to: ",[442,3553,3554],{"class":462},"'https:\u002F\u002Fexample.com\u002F'",[442,3556,3557],{"class":455},", status: ",[442,3559,3560],{"class":893},"308",[442,3562,2873],{"class":455},[442,3564,3565],{"class":444,"line":1274},[442,3566,3567],{"class":549},"    \u002F\u002F Wildcard redirect — preserves the path after the pattern\n",[442,3569,3570,3573,3575,3578],{"class":444,"line":1284},[442,3571,3572],{"class":462},"    '\u002Fold-blog\u002F**'",[442,3574,2922],{"class":455},[442,3576,3577],{"class":462},"'https:\u002F\u002Fblog.example.com\u002F**'",[442,3579,2835],{"class":455},[442,3581,3582],{"class":444,"line":1732},[442,3583,2568],{"class":455},[442,3585,3586],{"class":444,"line":1740},[442,3587,584],{"class":455},[742,3589,3590],{"id":3239},"Proxy",[413,3592,3593],{},"Proxy requests to another URL. Supports both internal and external targets:",[433,3595,3597],{"className":435,"code":3596,"filename":1538,"language":438,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  routeRules: {\n    \u002F\u002F Proxy to exact URL\n    '\u002Fapi\u002Fproxy\u002Fexample': { proxy: 'https:\u002F\u002Fexample.com' },\n    \u002F\u002F Proxy to internal route\n    '\u002Fapi\u002Fproxy\u002F**': { proxy: '\u002Fapi\u002Fecho' },\n    \u002F\u002F Wildcard proxy — preserves the path after the pattern\n    '\u002Fcdn\u002F**': { proxy: 'https:\u002F\u002Fcdn.jsdelivr.net\u002F**' },\n    \u002F\u002F Proxy with options\n    '\u002Fexternal\u002F**': {\n      proxy: {\n        to: 'https:\u002F\u002Fapi.example.com\u002F**',\n        \u002F\u002F Additional H3 proxy options...\n      },\n    },\n  }\n});\n",[417,3598,3599,3611,3615,3625,3629,3634,3645,3650,3662,3667,3679,3684,3691,3696,3706,3711,3716,3720,3725],{"__ignoreMap":5},[442,3600,3601,3603,3605,3607,3609],{"class":444,"line":445},[442,3602,449],{"class":448},[442,3604,1547],{"class":455},[442,3606,459],{"class":448},[442,3608,463],{"class":462},[442,3610,466],{"class":455},[442,3612,3613],{"class":444,"line":469},[442,3614,473],{"emptyLinePlaceholder":472},[442,3616,3617,3619,3621,3623],{"class":444,"line":476},[442,3618,479],{"class":448},[442,3620,482],{"class":448},[442,3622,1566],{"class":494},[442,3624,1569],{"class":455},[442,3626,3627],{"class":444,"line":507},[442,3628,2822],{"class":455},[442,3630,3631],{"class":444,"line":518},[442,3632,3633],{"class":549},"    \u002F\u002F Proxy to exact URL\n",[442,3635,3636,3639,3641,3643],{"class":444,"line":581},[442,3637,3638],{"class":462},"    '\u002Fapi\u002Fproxy\u002Fexample'",[442,3640,2947],{"class":455},[442,3642,2950],{"class":462},[442,3644,2835],{"class":455},[442,3646,3647],{"class":444,"line":664},[442,3648,3649],{"class":549},"    \u002F\u002F Proxy to internal route\n",[442,3651,3652,3655,3657,3660],{"class":444,"line":670},[442,3653,3654],{"class":462},"    '\u002Fapi\u002Fproxy\u002F**'",[442,3656,2947],{"class":455},[442,3658,3659],{"class":462},"'\u002Fapi\u002Fecho'",[442,3661,2835],{"class":455},[442,3663,3664],{"class":444,"line":1274},[442,3665,3666],{"class":549},"    \u002F\u002F Wildcard proxy — preserves the path after the pattern\n",[442,3668,3669,3672,3674,3677],{"class":444,"line":1284},[442,3670,3671],{"class":462},"    '\u002Fcdn\u002F**'",[442,3673,2947],{"class":455},[442,3675,3676],{"class":462},"'https:\u002F\u002Fcdn.jsdelivr.net\u002F**'",[442,3678,2835],{"class":455},[442,3680,3681],{"class":444,"line":1732},[442,3682,3683],{"class":549},"    \u002F\u002F Proxy with options\n",[442,3685,3686,3689],{"class":444,"line":1740},[442,3687,3688],{"class":462},"    '\u002Fexternal\u002F**'",[442,3690,1696],{"class":455},[442,3692,3693],{"class":444,"line":1750},[442,3694,3695],{"class":455},"      proxy: {\n",[442,3697,3698,3701,3704],{"class":444,"line":1755},[442,3699,3700],{"class":455},"        to: ",[442,3702,3703],{"class":462},"'https:\u002F\u002Fapi.example.com\u002F**'",[442,3705,1688],{"class":455},[442,3707,3708],{"class":444,"line":1761},[442,3709,3710],{"class":549},"        \u002F\u002F Additional H3 proxy options...\n",[442,3712,3713],{"class":444,"line":2986},[442,3714,3715],{"class":455},"      },\n",[442,3717,3718],{"class":444,"line":2991},[442,3719,1729],{"class":455},[442,3721,3723],{"class":444,"line":3722},18,[442,3724,2568],{"class":455},[442,3726,3728],{"class":444,"line":3727},19,[442,3729,584],{"class":455},[742,3731,3733],{"id":3732},"basic-auth","Basic auth",[413,3735,3736],{},"Protect routes with HTTP Basic Authentication:",[433,3738,3740],{"className":435,"code":3739,"filename":1538,"language":438,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  routeRules: {\n    '\u002Fadmin\u002F**': {\n      basicAuth: {\n        username: 'admin',\n        password: 'supersecret',\n        realm: 'Admin Area',  \u002F\u002F Optional, shown in the browser prompt\n      },\n    },\n    \u002F\u002F Disable basic auth for a sub-path\n    '\u002Fadmin\u002Fpublic\u002F**': { basicAuth: false },\n  }\n});\n",[417,3741,3742,3754,3758,3768,3772,3778,3783,3792,3801,3815,3819,3823,3828,3838,3842],{"__ignoreMap":5},[442,3743,3744,3746,3748,3750,3752],{"class":444,"line":445},[442,3745,449],{"class":448},[442,3747,1547],{"class":455},[442,3749,459],{"class":448},[442,3751,463],{"class":462},[442,3753,466],{"class":455},[442,3755,3756],{"class":444,"line":469},[442,3757,473],{"emptyLinePlaceholder":472},[442,3759,3760,3762,3764,3766],{"class":444,"line":476},[442,3761,479],{"class":448},[442,3763,482],{"class":448},[442,3765,1566],{"class":494},[442,3767,1569],{"class":455},[442,3769,3770],{"class":444,"line":507},[442,3771,2822],{"class":455},[442,3773,3774,3776],{"class":444,"line":518},[442,3775,2969],{"class":462},[442,3777,1696],{"class":455},[442,3779,3780],{"class":444,"line":581},[442,3781,3782],{"class":455},"      basicAuth: {\n",[442,3784,3785,3788,3790],{"class":444,"line":664},[442,3786,3787],{"class":455},"        username: ",[442,3789,2975],{"class":462},[442,3791,1688],{"class":455},[442,3793,3794,3797,3799],{"class":444,"line":670},[442,3795,3796],{"class":455},"        password: ",[442,3798,2981],{"class":462},[442,3800,1688],{"class":455},[442,3802,3803,3806,3809,3812],{"class":444,"line":1274},[442,3804,3805],{"class":455},"        realm: ",[442,3807,3808],{"class":462},"'Admin Area'",[442,3810,3811],{"class":455},",  ",[442,3813,3814],{"class":549},"\u002F\u002F Optional, shown in the browser prompt\n",[442,3816,3817],{"class":444,"line":1284},[442,3818,3715],{"class":455},[442,3820,3821],{"class":444,"line":1732},[442,3822,1729],{"class":455},[442,3824,3825],{"class":444,"line":1740},[442,3826,3827],{"class":549},"    \u002F\u002F Disable basic auth for a sub-path\n",[442,3829,3830,3832,3834,3836],{"class":444,"line":1750},[442,3831,3090],{"class":462},[442,3833,3093],{"class":455},[442,3835,3006],{"class":893},[442,3837,2835],{"class":455},[442,3839,3840],{"class":444,"line":1755},[442,3841,2568],{"class":455},[442,3843,3844],{"class":444,"line":1761},[442,3845,584],{"class":455},[742,3847,3849],{"id":3848},"caching-swr-static","Caching (SWR \u002F Static)",[413,3851,3852,3853,1009,3855,3858,3859,3862],{},"Control caching behavior with ",[417,3854,2759],{},[417,3856,3857],{},"swr",", or ",[417,3860,3861],{},"static"," options:",[433,3864,3866],{"className":435,"code":3865,"filename":1538,"language":438,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  routeRules: {\n    \u002F\u002F Enable stale-while-revalidate caching\n    '\u002Fblog\u002F**': { swr: true },\n    \u002F\u002F SWR with maxAge in seconds\n    '\u002Fblog\u002Fposts\u002F**': { swr: 600 },\n    \u002F\u002F Full cache options\n    '\u002Fapi\u002Fdata\u002F**': {\n      cache: {\n        maxAge: 60,\n        swr: true,\n        \u002F\u002F ...other cache options\n      },\n    },\n    \u002F\u002F Disable caching\n    '\u002Fapi\u002Frealtime\u002F**': { cache: false },\n  }\n});\n",[417,3867,3868,3880,3884,3894,3898,3903,3913,3918,3929,3934,3941,3946,3956,3965,3970,3974,3978,3983,3994,3998],{"__ignoreMap":5},[442,3869,3870,3872,3874,3876,3878],{"class":444,"line":445},[442,3871,449],{"class":448},[442,3873,1547],{"class":455},[442,3875,459],{"class":448},[442,3877,463],{"class":462},[442,3879,466],{"class":455},[442,3881,3882],{"class":444,"line":469},[442,3883,473],{"emptyLinePlaceholder":472},[442,3885,3886,3888,3890,3892],{"class":444,"line":476},[442,3887,479],{"class":448},[442,3889,482],{"class":448},[442,3891,1566],{"class":494},[442,3893,1569],{"class":455},[442,3895,3896],{"class":444,"line":507},[442,3897,2822],{"class":455},[442,3899,3900],{"class":444,"line":518},[442,3901,3902],{"class":549},"    \u002F\u002F Enable stale-while-revalidate caching\n",[442,3904,3905,3907,3909,3911],{"class":444,"line":581},[442,3906,2827],{"class":462},[442,3908,2830],{"class":455},[442,3910,1380],{"class":893},[442,3912,2835],{"class":455},[442,3914,3915],{"class":444,"line":664},[442,3916,3917],{"class":549},"    \u002F\u002F SWR with maxAge in seconds\n",[442,3919,3920,3923,3925,3927],{"class":444,"line":670},[442,3921,3922],{"class":462},"    '\u002Fblog\u002Fposts\u002F**'",[442,3924,2830],{"class":455},[442,3926,2845],{"class":893},[442,3928,2835],{"class":455},[442,3930,3931],{"class":444,"line":1274},[442,3932,3933],{"class":549},"    \u002F\u002F Full cache options\n",[442,3935,3936,3939],{"class":444,"line":1284},[442,3937,3938],{"class":462},"    '\u002Fapi\u002Fdata\u002F**'",[442,3940,1696],{"class":455},[442,3942,3943],{"class":444,"line":1732},[442,3944,3945],{"class":455},"      cache: {\n",[442,3947,3948,3951,3954],{"class":444,"line":1740},[442,3949,3950],{"class":455},"        maxAge: ",[442,3952,3953],{"class":893},"60",[442,3955,1688],{"class":455},[442,3957,3958,3961,3963],{"class":444,"line":1750},[442,3959,3960],{"class":455},"        swr: ",[442,3962,1380],{"class":893},[442,3964,1688],{"class":455},[442,3966,3967],{"class":444,"line":1755},[442,3968,3969],{"class":549},"        \u002F\u002F ...other cache options\n",[442,3971,3972],{"class":444,"line":1761},[442,3973,3715],{"class":455},[442,3975,3976],{"class":444,"line":2986},[442,3977,1729],{"class":455},[442,3979,3980],{"class":444,"line":2991},[442,3981,3982],{"class":549},"    \u002F\u002F Disable caching\n",[442,3984,3985,3988,3990,3992],{"class":444,"line":3722},[442,3986,3987],{"class":462},"    '\u002Fapi\u002Frealtime\u002F**'",[442,3989,3061],{"class":455},[442,3991,3006],{"class":893},[442,3993,2835],{"class":455},[442,3995,3996],{"class":444,"line":3727},[442,3997,2568],{"class":455},[442,3999,4001],{"class":444,"line":4000},20,[442,4002,584],{"class":455},[1512,4004,4005],{},[413,4006,4007,4010,4011,685,4014,4010,4017,689],{},[417,4008,4009],{},"swr: true"," is a shortcut for ",[417,4012,4013],{},"cache: { swr: true }",[417,4015,4016],{},"swr: \u003Cnumber>",[417,4018,4019],{},"cache: { swr: true, maxAge: \u003Cnumber> }",[742,4021,4023],{"id":4022},"prerender","Prerender",[413,4025,4026],{},"Mark routes for prerendering at build time:",[433,4028,4030],{"className":435,"code":4029,"filename":1538,"language":438,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  routeRules: {\n    '\u002Fabout': { prerender: true },\n    '\u002Fdynamic\u002F**': { prerender: false },\n  }\n});\n",[417,4031,4032,4044,4048,4058,4062,4074,4085,4089],{"__ignoreMap":5},[442,4033,4034,4036,4038,4040,4042],{"class":444,"line":445},[442,4035,449],{"class":448},[442,4037,1547],{"class":455},[442,4039,459],{"class":448},[442,4041,463],{"class":462},[442,4043,466],{"class":455},[442,4045,4046],{"class":444,"line":469},[442,4047,473],{"emptyLinePlaceholder":472},[442,4049,4050,4052,4054,4056],{"class":444,"line":476},[442,4051,479],{"class":448},[442,4053,482],{"class":448},[442,4055,1566],{"class":494},[442,4057,1569],{"class":455},[442,4059,4060],{"class":444,"line":507},[442,4061,2822],{"class":455},[442,4063,4064,4067,4070,4072],{"class":444,"line":518},[442,4065,4066],{"class":462},"    '\u002Fabout'",[442,4068,4069],{"class":455},": { prerender: ",[442,4071,1380],{"class":893},[442,4073,2835],{"class":455},[442,4075,4076,4079,4081,4083],{"class":444,"line":581},[442,4077,4078],{"class":462},"    '\u002Fdynamic\u002F**'",[442,4080,4069],{"class":455},[442,4082,3006],{"class":893},[442,4084,2835],{"class":455},[442,4086,4087],{"class":444,"line":664},[442,4088,2568],{"class":455},[442,4090,4091],{"class":444,"line":670},[442,4092,584],{"class":455},[742,4094,4096],{"id":4095},"isr-vercel","ISR (Vercel)",[413,4098,4099],{},"Configure Incremental Static Regeneration for Vercel deployments:",[433,4101,4103],{"className":435,"code":4102,"filename":1538,"language":438,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  routeRules: {\n    '\u002Fisr\u002F**': { isr: true },\n    '\u002Fisr-ttl\u002F**': { isr: 60 },\n    '\u002Fisr-custom\u002F**': {\n      isr: {\n        expiration: 60,\n        allowQuery: ['q'],\n        group: 1,\n      },\n    },\n  }\n});\n",[417,4104,4105,4117,4121,4131,4135,4147,4158,4165,4170,4179,4189,4199,4203,4207,4211],{"__ignoreMap":5},[442,4106,4107,4109,4111,4113,4115],{"class":444,"line":445},[442,4108,449],{"class":448},[442,4110,1547],{"class":455},[442,4112,459],{"class":448},[442,4114,463],{"class":462},[442,4116,466],{"class":455},[442,4118,4119],{"class":444,"line":469},[442,4120,473],{"emptyLinePlaceholder":472},[442,4122,4123,4125,4127,4129],{"class":444,"line":476},[442,4124,479],{"class":448},[442,4126,482],{"class":448},[442,4128,1566],{"class":494},[442,4130,1569],{"class":455},[442,4132,4133],{"class":444,"line":507},[442,4134,2822],{"class":455},[442,4136,4137,4140,4143,4145],{"class":444,"line":518},[442,4138,4139],{"class":462},"    '\u002Fisr\u002F**'",[442,4141,4142],{"class":455},": { isr: ",[442,4144,1380],{"class":893},[442,4146,2835],{"class":455},[442,4148,4149,4152,4154,4156],{"class":444,"line":581},[442,4150,4151],{"class":462},"    '\u002Fisr-ttl\u002F**'",[442,4153,4142],{"class":455},[442,4155,3953],{"class":893},[442,4157,2835],{"class":455},[442,4159,4160,4163],{"class":444,"line":664},[442,4161,4162],{"class":462},"    '\u002Fisr-custom\u002F**'",[442,4164,1696],{"class":455},[442,4166,4167],{"class":444,"line":670},[442,4168,4169],{"class":455},"      isr: {\n",[442,4171,4172,4175,4177],{"class":444,"line":1274},[442,4173,4174],{"class":455},"        expiration: ",[442,4176,3953],{"class":893},[442,4178,1688],{"class":455},[442,4180,4181,4184,4187],{"class":444,"line":1284},[442,4182,4183],{"class":455},"        allowQuery: [",[442,4185,4186],{"class":462},"'q'",[442,4188,2315],{"class":455},[442,4190,4191,4194,4197],{"class":444,"line":1732},[442,4192,4193],{"class":455},"        group: ",[442,4195,4196],{"class":893},"1",[442,4198,1688],{"class":455},[442,4200,4201],{"class":444,"line":1740},[442,4202,3715],{"class":455},[442,4204,4205],{"class":444,"line":1750},[442,4206,1729],{"class":455},[442,4208,4209],{"class":444,"line":1755},[442,4210,2568],{"class":455},[442,4212,4213],{"class":444,"line":1761},[442,4214,584],{"class":455},[742,4216,4218],{"id":4217},"route-rules-reference","Route rules reference",[1768,4220,4221,4231],{},[1771,4222,4223],{},[1774,4224,4225,4227,4229],{},[1777,4226,1779],{},[1777,4228,1782],{},[1777,4230,1785],{},[1787,4232,4233,4247,4263,4277,4299,4315,4334,4347,4362,4375],{},[1774,4234,4235,4239,4244],{},[1792,4236,4237],{},[417,4238,3233],{},[1792,4240,4241],{},[417,4242,4243],{},"Record\u003Cstring, string>",[1792,4245,4246],{},"Custom response headers",[1774,4248,4249,4253,4258],{},[1792,4250,4251],{},[417,4252,3236],{},[1792,4254,4255],{},[417,4256,4257],{},"string | { to: string, status?: number }",[1792,4259,4260,4261,688],{},"Redirect to another URL (default status: ",[417,4262,3487],{},[1774,4264,4265,4269,4274],{},[1792,4266,4267],{},[417,4268,3239],{},[1792,4270,4271],{},[417,4272,4273],{},"string | { to: string, ...proxyOptions }",[1792,4275,4276],{},"Proxy requests to another URL",[1774,4278,4279,4283,4288],{},[1792,4280,4281],{},[417,4282,3324],{},[1792,4284,4285],{},[417,4286,4287],{},"boolean | CorsOptions",[1792,4289,4290,4291,485,4296,4298],{},"Handle CORS via h3's ",[422,4292,4294],{"href":3366,"rel":4293},[426],[417,4295,3370],{},[417,4297,1380],{}," = permissive)",[1774,4300,4301,4305,4310],{},[1792,4302,4303],{},[417,4304,2759],{},[1792,4306,4307],{},[417,4308,4309],{},"object | false",[1792,4311,4312,4313,688],{},"Cache options (see ",[422,4314,2767],{"href":74},[1774,4316,4317,4321,4326],{},[1792,4318,4319],{},[417,4320,3857],{},[1792,4322,4323],{},[417,4324,4325],{},"boolean | number",[1792,4327,4328,4329,485,4331,4333],{},"Shortcut for ",[417,4330,2779],{},[417,4332,3006],{}," resets an inherited cache rule)",[1774,4335,4336,4340,4344],{},[1792,4337,4338],{},[417,4339,3861],{},[1792,4341,4342],{},[417,4343,4325],{},[1792,4345,4346],{},"Shortcut for static caching",[1774,4348,4349,4354,4359],{},[1792,4350,4351],{},[417,4352,4353],{},"basicAuth",[1792,4355,4356],{},[417,4357,4358],{},"{ username, password, realm? } | false",[1792,4360,4361],{},"HTTP Basic Authentication",[1774,4363,4364,4368,4372],{},[1792,4365,4366],{},[417,4367,4022],{},[1792,4369,4370],{},[417,4371,1835],{},[1792,4373,4374],{},"Enable\u002Fdisable prerendering",[1774,4376,4377,4382,4387],{},[1792,4378,4379],{},[417,4380,4381],{},"isr",[1792,4383,4384],{},[417,4385,4386],{},"boolean | number | object",[1792,4388,4389],{},"Incremental Static Regeneration (Vercel)",[742,4391,4393],{"id":4392},"runtime-route-rules","Runtime route rules",[413,4395,4396,4397,4400],{},"Route rules can be provided through ",[417,4398,4399],{},"runtimeConfig",", allowing overrides via environment variables without rebuilding:",[433,4402,4404],{"className":435,"code":4403,"filename":1538,"language":438,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  runtimeConfig: {\n    nitro: {\n      routeRules: {\n        '\u002Fapi\u002F**': { headers: { 'x-env': 'production' } },\n      },\n    },\n  },\n});\n",[417,4405,4406,4418,4422,4432,4437,4442,4447,4464,4468,4472,4476],{"__ignoreMap":5},[442,4407,4408,4410,4412,4414,4416],{"class":444,"line":445},[442,4409,449],{"class":448},[442,4411,1547],{"class":455},[442,4413,459],{"class":448},[442,4415,463],{"class":462},[442,4417,466],{"class":455},[442,4419,4420],{"class":444,"line":469},[442,4421,473],{"emptyLinePlaceholder":472},[442,4423,4424,4426,4428,4430],{"class":444,"line":476},[442,4425,479],{"class":448},[442,4427,482],{"class":448},[442,4429,1566],{"class":494},[442,4431,1569],{"class":455},[442,4433,4434],{"class":444,"line":507},[442,4435,4436],{"class":455},"  runtimeConfig: {\n",[442,4438,4439],{"class":444,"line":518},[442,4440,4441],{"class":455},"    nitro: {\n",[442,4443,4444],{"class":444,"line":581},[442,4445,4446],{"class":455},"      routeRules: {\n",[442,4448,4449,4452,4454,4457,4459,4462],{"class":444,"line":664},[442,4450,4451],{"class":462},"        '\u002Fapi\u002F**'",[442,4453,2881],{"class":455},[442,4455,4456],{"class":462},"'x-env'",[442,4458,1682],{"class":455},[442,4460,4461],{"class":462},"'production'",[442,4463,2873],{"class":455},[442,4465,4466],{"class":444,"line":670},[442,4467,3715],{"class":455},[442,4469,4470],{"class":444,"line":1274},[442,4471,1729],{"class":455},[442,4473,4474],{"class":444,"line":1284},[442,4475,1758],{"class":455},[442,4477,4478],{"class":444,"line":1732},[442,4479,584],{"class":455},[408,4481,4483],{"id":4482},"config-reference","Config reference",[413,4485,4486],{},"These config options control routing behavior:",[1768,4488,4489,4502],{},[1771,4490,4491],{},[1774,4492,4493,4495,4497,4500],{},[1777,4494,1779],{},[1777,4496,1782],{},[1777,4498,4499],{},"Default",[1777,4501,1785],{},[1787,4503,4504,4523,4545,4564,4583,4602,4622,4641,4659,4678],{},[1774,4505,4506,4511,4515,4520],{},[1792,4507,4508],{},[417,4509,4510],{},"baseURL",[1792,4512,4513],{},[417,4514,1801],{},[1792,4516,4517],{},[417,4518,4519],{},"\"\u002F\"",[1792,4521,4522],{},"Base URL for all routes",[1774,4524,4525,4530,4534,4539],{},[1792,4526,4527],{},[417,4528,4529],{},"apiBaseURL",[1792,4531,4532],{},[417,4533,1801],{},[1792,4535,4536],{},[417,4537,4538],{},"\"\u002Fapi\"",[1792,4540,4541,4542,4544],{},"Base URL for routes in the ",[417,4543,600],{}," directory",[1774,4546,4547,4552,4556,4561],{},[1792,4548,4549],{},[417,4550,4551],{},"apiDir",[1792,4553,4554],{},[417,4555,1801],{},[1792,4557,4558],{},[417,4559,4560],{},"\"api\"",[1792,4562,4563],{},"Directory name for API routes",[1774,4565,4566,4571,4575,4580],{},[1792,4567,4568],{},[417,4569,4570],{},"routesDir",[1792,4572,4573],{},[417,4574,1801],{},[1792,4576,4577],{},[417,4578,4579],{},"\"routes\"",[1792,4581,4582],{},"Directory name for file-based routes",[1774,4584,4585,4590,4595,4599],{},[1792,4586,4587],{},[417,4588,4589],{},"serverDir",[1792,4591,4592],{},[417,4593,4594],{},"string | false",[1792,4596,4597],{},[417,4598,3006],{},[1792,4600,4601],{},"Server directory for scanning routes, middleware, plugins, etc.",[1774,4603,4604,4609,4614,4619],{},[1792,4605,4606],{},[417,4607,4608],{},"scanDirs",[1792,4610,4611],{},[417,4612,4613],{},"string[]",[1792,4615,4616],{},[417,4617,4618],{},"[]",[1792,4620,4621],{},"Additional directories to scan for routes",[1774,4623,4624,4628,4633,4638],{},[1792,4625,4626],{},[417,4627,1522],{},[1792,4629,4630],{},[417,4631,4632],{},"Record\u003Cstring, string | handler>",[1792,4634,4635],{},[417,4636,4637],{},"{}",[1792,4639,4640],{},"Route-to-handler mapping",[1774,4642,4643,4647,4652,4656],{},[1792,4644,4645],{},[417,4646,1888],{},[1792,4648,4649],{},[417,4650,4651],{},"NitroEventHandler[]",[1792,4653,4654],{},[417,4655,4618],{},[1792,4657,4658],{},"Programmatic handler registration (mainly for middleware)",[1774,4660,4661,4666,4671,4675],{},[1792,4662,4663],{},[417,4664,4665],{},"routeRules",[1792,4667,4668],{},[417,4669,4670],{},"Record\u003Cstring, NitroRouteConfig>",[1792,4672,4673],{},[417,4674,4637],{},[1792,4676,4677],{},"Route rules for matching patterns",[1774,4679,4680,4684,4688,4692],{},[1792,4681,4682],{},[417,4683,1533],{},[1792,4685,4686],{},[417,4687,4613],{},[1792,4689,4690],{},[417,4691,4618],{},[1792,4693,4694],{},"Glob patterns to ignore during file scanning",[4696,4697,4698],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}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 pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}",{"title":5,"searchDepth":469,"depth":469,"links":4700},[4701,4702,4710,4716,4723,4724,4725,4739],{"id":410,"depth":469,"text":411},{"id":587,"depth":469,"text":588,"children":4703},[4704,4705,4706,4707,4708,4709],{"id":744,"depth":476,"text":745},{"id":814,"depth":476,"text":815},{"id":1148,"depth":476,"text":1149},{"id":1389,"depth":476,"text":1390},{"id":1463,"depth":476,"text":1464},{"id":1526,"depth":476,"text":1527},{"id":1619,"depth":469,"text":1620,"children":4711},[4712,4714],{"id":1629,"depth":476,"text":4713},"routes config",{"id":1885,"depth":476,"text":4715},"handlers config",{"id":2049,"depth":469,"text":294,"children":4717},[4718,4719,4720,4721,4722],{"id":2155,"depth":476,"text":2156},{"id":2245,"depth":476,"text":2246},{"id":2386,"depth":476,"text":2387},{"id":2477,"depth":476,"text":2478},{"id":2575,"depth":476,"text":2576},{"id":2677,"depth":469,"text":2678},{"id":2709,"depth":469,"text":2710},{"id":2733,"depth":469,"text":2734,"children":4726},[4727,4728,4729,4730,4731,4732,4733,4734,4735,4736,4737,4738],{"id":2996,"depth":476,"text":2997},{"id":3108,"depth":476,"text":3109},{"id":3233,"depth":476,"text":3243},{"id":3324,"depth":476,"text":3325},{"id":3236,"depth":476,"text":3481},{"id":3239,"depth":476,"text":3590},{"id":3732,"depth":476,"text":3733},{"id":3848,"depth":476,"text":3849},{"id":4022,"depth":476,"text":4023},{"id":4095,"depth":476,"text":4096},{"id":4217,"depth":476,"text":4218},{"id":4392,"depth":476,"text":4393},{"id":4482,"depth":469,"text":4483},"Nitro supports filesystem routing to automatically map files to routes. By combining code-splitting with compiled routes, it removes the need for a runtime router, leaving only minimal compiled logic.",{"icon":26},{"icon":26},{"title":23,"description":4740},"RyxxymiTmsmAlb7wzr5rFvUmY1ZxaNj3sfNfI52KIFw",[4746,4748],{"title":18,"path":19,"stem":20,"description":4747,"icon":21,"children":-1},"Use a renderer to handle all unmatched routes with custom HTML or a templating system.",{"title":28,"path":29,"stem":30,"description":5,"icon":31,"children":-1},1783807211735]