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