[{"data":1,"prerenderedAt":2107},["ShallowReactive",2],{"navigation":3,"-docs-openapi":407,"-docs-openapi-surround":2102},[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":48,"body":409,"description":2096,"extension":2097,"meta":2098,"navigation":2099,"path":49,"seo":2100,"stem":50,"__hash__":2101},"content\u002F1.docs\u002F50.openapi.md",{"type":410,"value":411,"toc":2081,"icon":51},"minimark",[412,441,447,452,455,544,547,596,600,616,751,759,764,778,999,1009,1013,1020,1222,1226,1240,1514,1525,1529,1532,1573,1583,1586,1592,1690,1695,1701,1760,1765,1775,1778,1815,1820,1823,1906,1915,1959,1964,1968,1973,2010,2058,2071,2077],[413,414,415,416,420,421,428,429,434,435,440],"p",{},"Nitro scans all route handlers, extracts metadata defined with ",[417,418,419],"code",{},"defineRouteMeta",", and generates an ",[422,423,427],"a",{"href":424,"rel":425},"https:\u002F\u002Fspec.openapis.org\u002Foas\u002Fv3.1.0",[426],"nofollow","OpenAPI 3.1.0"," specification. Built-in UIs powered by ",[422,430,433],{"href":431,"rel":432},"https:\u002F\u002Fscalar.com\u002F",[426],"Scalar"," and ",[422,436,439],{"href":437,"rel":438},"https:\u002F\u002Fswagger.io\u002Ftools\u002Fswagger-ui\u002F",[426],"Swagger UI"," let you explore and test your API directly in the browser.",[442,443,444],"important",{},[413,445,446],{},"\nOpenAPI support is currently experimental.",[448,449,451],"h2",{"id":450},"enable-openapi","Enable OpenAPI",[413,453,454],{},"Enable OpenAPI in your Nitro configuration:",[456,457,458],"code-group",{},[459,460,465],"pre",{"className":461,"code":462,"filename":463,"language":464,"meta":5,"style":5},"language-ts shiki shiki-themes github-light github-dark github-dark","import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  experimental: {\n    openAPI: true,\n  },\n});\n","nitro.config.ts","ts",[417,466,467,490,497,513,519,532,538],{"__ignoreMap":5},[468,469,472,476,480,483,487],"span",{"class":470,"line":471},"line",1,[468,473,475],{"class":474},"so5gQ","import",[468,477,479],{"class":478},"slsVL"," { defineConfig } ",[468,481,482],{"class":474},"from",[468,484,486],{"class":485},"sfrk1"," \"nitro\"",[468,488,489],{"class":478},";\n",[468,491,493],{"class":470,"line":492},2,[468,494,496],{"emptyLinePlaceholder":495},true,"\n",[468,498,500,503,506,510],{"class":470,"line":499},3,[468,501,502],{"class":474},"export",[468,504,505],{"class":474}," default",[468,507,509],{"class":508},"shcOC"," defineConfig",[468,511,512],{"class":478},"({\n",[468,514,516],{"class":470,"line":515},4,[468,517,518],{"class":478},"  experimental: {\n",[468,520,522,525,529],{"class":470,"line":521},5,[468,523,524],{"class":478},"    openAPI: ",[468,526,528],{"class":527},"suiK_","true",[468,530,531],{"class":478},",\n",[468,533,535],{"class":470,"line":534},6,[468,536,537],{"class":478},"  },\n",[468,539,541],{"class":470,"line":540},7,[468,542,543],{"class":478},"});\n",[413,545,546],{},"Once enabled, the following endpoints become available during development:",[548,549,550,563],"table",{},[551,552,553],"thead",{},[554,555,556,560],"tr",{},[557,558,559],"th",{},"Endpoint",[557,561,562],{},"Description",[564,565,566,577,587],"tbody",{},[554,567,568,574],{},[569,570,571],"td",{},[417,572,573],{},"\u002F_openapi.json",[569,575,576],{},"OpenAPI 3.1.0 JSON specification",[554,578,579,584],{},[569,580,581],{},[417,582,583],{},"\u002F_scalar",[569,585,586],{},"Scalar API reference UI",[554,588,589,594],{},[569,590,591],{},[417,592,593],{},"\u002F_swagger",[569,595,439],{},[448,597,599],{"id":598},"route-metadata","Route Metadata",[413,601,602,603,605,606,609,610,615],{},"Use the ",[417,604,419],{}," macro in route handler files to provide OpenAPI metadata for each route. The ",[417,607,608],{},"openAPI"," property accepts a standard OpenAPI ",[422,611,614],{"href":612,"rel":613},"https:\u002F\u002Fspec.openapis.org\u002Foas\u002Fv3.1.0#operation-object",[426],"Operation Object",".",[459,617,620],{"className":461,"code":618,"filename":619,"language":464,"meta":5,"style":5},"import { defineRouteMeta, defineHandler } from \"nitro\";\n\ndefineRouteMeta({\n  openAPI: {\n    tags: [\"greeting\"],\n    description: \"Returns a greeting message\",\n    responses: {\n      200: { description: \"Successful greeting\" },\n    },\n  },\n});\n\nexport default defineHandler(() => {\n  return { message: \"Hello, world!\" };\n});\n","routes\u002Fapi\u002Fhello.ts",[417,621,622,635,639,645,650,661,671,676,691,697,702,707,712,731,746],{"__ignoreMap":5},[468,623,624,626,629,631,633],{"class":470,"line":471},[468,625,475],{"class":474},[468,627,628],{"class":478}," { defineRouteMeta, defineHandler } ",[468,630,482],{"class":474},[468,632,486],{"class":485},[468,634,489],{"class":478},[468,636,637],{"class":470,"line":492},[468,638,496],{"emptyLinePlaceholder":495},[468,640,641,643],{"class":470,"line":499},[468,642,419],{"class":508},[468,644,512],{"class":478},[468,646,647],{"class":470,"line":515},[468,648,649],{"class":478},"  openAPI: {\n",[468,651,652,655,658],{"class":470,"line":521},[468,653,654],{"class":478},"    tags: [",[468,656,657],{"class":485},"\"greeting\"",[468,659,660],{"class":478},"],\n",[468,662,663,666,669],{"class":470,"line":534},[468,664,665],{"class":478},"    description: ",[468,667,668],{"class":485},"\"Returns a greeting message\"",[468,670,531],{"class":478},[468,672,673],{"class":470,"line":540},[468,674,675],{"class":478},"    responses: {\n",[468,677,679,682,685,688],{"class":470,"line":678},8,[468,680,681],{"class":527},"      200",[468,683,684],{"class":478},": { description: ",[468,686,687],{"class":485},"\"Successful greeting\"",[468,689,690],{"class":478}," },\n",[468,692,694],{"class":470,"line":693},9,[468,695,696],{"class":478},"    },\n",[468,698,700],{"class":470,"line":699},10,[468,701,537],{"class":478},[468,703,705],{"class":470,"line":704},11,[468,706,543],{"class":478},[468,708,710],{"class":470,"line":709},12,[468,711,496],{"emptyLinePlaceholder":495},[468,713,715,717,719,722,725,728],{"class":470,"line":714},13,[468,716,502],{"class":474},[468,718,505],{"class":474},[468,720,721],{"class":508}," defineHandler",[468,723,724],{"class":478},"(() ",[468,726,727],{"class":474},"=>",[468,729,730],{"class":478}," {\n",[468,732,734,737,740,743],{"class":470,"line":733},14,[468,735,736],{"class":474},"  return",[468,738,739],{"class":478}," { message: ",[468,741,742],{"class":485},"\"Hello, world!\"",[468,744,745],{"class":478}," };\n",[468,747,749],{"class":470,"line":748},15,[468,750,543],{"class":478},[752,753,754],"note",{},[413,755,756,758],{},[417,757,419],{}," is a build-time macro. The metadata is statically extracted during the build and does not add any runtime overhead to your handlers.",[760,761,763],"h3",{"id":762},"parameters","Parameters",[413,765,766,767,770,771,774,775,777],{},"Route parameters (",[417,768,769],{},":id",", ",[417,772,773],{},"[id]",") are automatically converted to OpenAPI path parameters. You can define additional query or header parameters in the ",[417,776,762],{}," array:",[459,779,782],{"className":461,"code":780,"filename":781,"language":464,"meta":5,"style":5},"import { defineRouteMeta, defineHandler } from \"nitro\";\n\ndefineRouteMeta({\n  openAPI: {\n    tags: [\"users\"],\n    description: \"Get a user by their ID\",\n    parameters: [\n      {\n        in: \"query\",\n        name: \"include\",\n        description: \"Comma-separated list of related resources to include\",\n        schema: { type: \"string\" },\n      },\n    ],\n    responses: {\n      200: { description: \"User found\" },\n      404: { description: \"User not found\" },\n    },\n  },\n});\n\nexport default defineHandler((event) => {\n  const { id } = event.context.params;\n  return { id, name: \"Alice\" };\n});\n","routes\u002Fapi\u002Fusers\u002F[id].get.ts",[417,783,784,796,800,806,810,819,828,833,838,848,858,868,878,883,888,892,904,917,922,927,932,937,960,981,994],{"__ignoreMap":5},[468,785,786,788,790,792,794],{"class":470,"line":471},[468,787,475],{"class":474},[468,789,628],{"class":478},[468,791,482],{"class":474},[468,793,486],{"class":485},[468,795,489],{"class":478},[468,797,798],{"class":470,"line":492},[468,799,496],{"emptyLinePlaceholder":495},[468,801,802,804],{"class":470,"line":499},[468,803,419],{"class":508},[468,805,512],{"class":478},[468,807,808],{"class":470,"line":515},[468,809,649],{"class":478},[468,811,812,814,817],{"class":470,"line":521},[468,813,654],{"class":478},[468,815,816],{"class":485},"\"users\"",[468,818,660],{"class":478},[468,820,821,823,826],{"class":470,"line":534},[468,822,665],{"class":478},[468,824,825],{"class":485},"\"Get a user by their ID\"",[468,827,531],{"class":478},[468,829,830],{"class":470,"line":540},[468,831,832],{"class":478},"    parameters: [\n",[468,834,835],{"class":470,"line":678},[468,836,837],{"class":478},"      {\n",[468,839,840,843,846],{"class":470,"line":693},[468,841,842],{"class":478},"        in: ",[468,844,845],{"class":485},"\"query\"",[468,847,531],{"class":478},[468,849,850,853,856],{"class":470,"line":699},[468,851,852],{"class":478},"        name: ",[468,854,855],{"class":485},"\"include\"",[468,857,531],{"class":478},[468,859,860,863,866],{"class":470,"line":704},[468,861,862],{"class":478},"        description: ",[468,864,865],{"class":485},"\"Comma-separated list of related resources to include\"",[468,867,531],{"class":478},[468,869,870,873,876],{"class":470,"line":709},[468,871,872],{"class":478},"        schema: { type: ",[468,874,875],{"class":485},"\"string\"",[468,877,690],{"class":478},[468,879,880],{"class":470,"line":714},[468,881,882],{"class":478},"      },\n",[468,884,885],{"class":470,"line":733},[468,886,887],{"class":478},"    ],\n",[468,889,890],{"class":470,"line":748},[468,891,675],{"class":478},[468,893,895,897,899,902],{"class":470,"line":894},16,[468,896,681],{"class":527},[468,898,684],{"class":478},[468,900,901],{"class":485},"\"User found\"",[468,903,690],{"class":478},[468,905,907,910,912,915],{"class":470,"line":906},17,[468,908,909],{"class":527},"      404",[468,911,684],{"class":478},[468,913,914],{"class":485},"\"User not found\"",[468,916,690],{"class":478},[468,918,920],{"class":470,"line":919},18,[468,921,696],{"class":478},[468,923,925],{"class":470,"line":924},19,[468,926,537],{"class":478},[468,928,930],{"class":470,"line":929},20,[468,931,543],{"class":478},[468,933,935],{"class":470,"line":934},21,[468,936,496],{"emptyLinePlaceholder":495},[468,938,940,942,944,946,949,953,956,958],{"class":470,"line":939},22,[468,941,502],{"class":474},[468,943,505],{"class":474},[468,945,721],{"class":508},[468,947,948],{"class":478},"((",[468,950,952],{"class":951},"sQHwn","event",[468,954,955],{"class":478},") ",[468,957,727],{"class":474},[468,959,730],{"class":478},[468,961,963,966,969,972,975,978],{"class":470,"line":962},23,[468,964,965],{"class":474},"  const",[468,967,968],{"class":478}," { ",[468,970,971],{"class":527},"id",[468,973,974],{"class":478}," } ",[468,976,977],{"class":474},"=",[468,979,980],{"class":478}," event.context.params;\n",[468,982,984,986,989,992],{"class":470,"line":983},24,[468,985,736],{"class":474},[468,987,988],{"class":478}," { id, name: ",[468,990,991],{"class":485},"\"Alice\"",[468,993,745],{"class":478},[468,995,997],{"class":470,"line":996},25,[468,998,543],{"class":478},[413,1000,1001,1002,1004,1005,1008],{},"In this example, the ",[417,1003,971],{}," path parameter is automatically inferred from the route pattern. Only the additional ",[417,1006,1007],{},"include"," query parameter needs to be declared.",[760,1010,1012],{"id":1011},"response-schemas","Response Schemas",[413,1014,1015,1016,1019],{},"Define response content types and schemas using the standard OpenAPI ",[417,1017,1018],{},"responses"," object:",[459,1021,1024],{"className":461,"code":1022,"filename":1023,"language":464,"meta":5,"style":5},"import { defineRouteMeta, defineHandler } from \"nitro\";\n\ndefineRouteMeta({\n  openAPI: {\n    description: \"Returns the current server status\",\n    responses: {\n      200: {\n        description: \"Server status\",\n        content: {\n          \"application\u002Fjson\": {\n            schema: {\n              type: \"object\",\n              properties: {\n                status: { type: \"string\", enum: [\"healthy\", \"degraded\"] },\n                uptime: { type: \"number\" },\n              },\n            },\n          },\n        },\n      },\n    },\n  },\n});\n\nexport default defineHandler(() => {\n  return { status: \"healthy\", uptime: process.uptime() };\n});\n","routes\u002Fapi\u002Fstatus.ts",[417,1025,1026,1038,1042,1048,1052,1061,1065,1072,1081,1086,1093,1098,1108,1113,1134,1144,1149,1154,1159,1164,1168,1172,1176,1180,1184,1198,1217],{"__ignoreMap":5},[468,1027,1028,1030,1032,1034,1036],{"class":470,"line":471},[468,1029,475],{"class":474},[468,1031,628],{"class":478},[468,1033,482],{"class":474},[468,1035,486],{"class":485},[468,1037,489],{"class":478},[468,1039,1040],{"class":470,"line":492},[468,1041,496],{"emptyLinePlaceholder":495},[468,1043,1044,1046],{"class":470,"line":499},[468,1045,419],{"class":508},[468,1047,512],{"class":478},[468,1049,1050],{"class":470,"line":515},[468,1051,649],{"class":478},[468,1053,1054,1056,1059],{"class":470,"line":521},[468,1055,665],{"class":478},[468,1057,1058],{"class":485},"\"Returns the current server status\"",[468,1060,531],{"class":478},[468,1062,1063],{"class":470,"line":534},[468,1064,675],{"class":478},[468,1066,1067,1069],{"class":470,"line":540},[468,1068,681],{"class":527},[468,1070,1071],{"class":478},": {\n",[468,1073,1074,1076,1079],{"class":470,"line":678},[468,1075,862],{"class":478},[468,1077,1078],{"class":485},"\"Server status\"",[468,1080,531],{"class":478},[468,1082,1083],{"class":470,"line":693},[468,1084,1085],{"class":478},"        content: {\n",[468,1087,1088,1091],{"class":470,"line":699},[468,1089,1090],{"class":485},"          \"application\u002Fjson\"",[468,1092,1071],{"class":478},[468,1094,1095],{"class":470,"line":704},[468,1096,1097],{"class":478},"            schema: {\n",[468,1099,1100,1103,1106],{"class":470,"line":709},[468,1101,1102],{"class":478},"              type: ",[468,1104,1105],{"class":485},"\"object\"",[468,1107,531],{"class":478},[468,1109,1110],{"class":470,"line":714},[468,1111,1112],{"class":478},"              properties: {\n",[468,1114,1115,1118,1120,1123,1126,1128,1131],{"class":470,"line":733},[468,1116,1117],{"class":478},"                status: { type: ",[468,1119,875],{"class":485},[468,1121,1122],{"class":478},", enum: [",[468,1124,1125],{"class":485},"\"healthy\"",[468,1127,770],{"class":478},[468,1129,1130],{"class":485},"\"degraded\"",[468,1132,1133],{"class":478},"] },\n",[468,1135,1136,1139,1142],{"class":470,"line":748},[468,1137,1138],{"class":478},"                uptime: { type: ",[468,1140,1141],{"class":485},"\"number\"",[468,1143,690],{"class":478},[468,1145,1146],{"class":470,"line":894},[468,1147,1148],{"class":478},"              },\n",[468,1150,1151],{"class":470,"line":906},[468,1152,1153],{"class":478},"            },\n",[468,1155,1156],{"class":470,"line":919},[468,1157,1158],{"class":478},"          },\n",[468,1160,1161],{"class":470,"line":924},[468,1162,1163],{"class":478},"        },\n",[468,1165,1166],{"class":470,"line":929},[468,1167,882],{"class":478},[468,1169,1170],{"class":470,"line":934},[468,1171,696],{"class":478},[468,1173,1174],{"class":470,"line":939},[468,1175,537],{"class":478},[468,1177,1178],{"class":470,"line":962},[468,1179,543],{"class":478},[468,1181,1182],{"class":470,"line":983},[468,1183,496],{"emptyLinePlaceholder":495},[468,1185,1186,1188,1190,1192,1194,1196],{"class":470,"line":996},[468,1187,502],{"class":474},[468,1189,505],{"class":474},[468,1191,721],{"class":508},[468,1193,724],{"class":478},[468,1195,727],{"class":474},[468,1197,730],{"class":478},[468,1199,1201,1203,1206,1208,1211,1214],{"class":470,"line":1200},26,[468,1202,736],{"class":474},[468,1204,1205],{"class":478}," { status: ",[468,1207,1125],{"class":485},[468,1209,1210],{"class":478},", uptime: process.",[468,1212,1213],{"class":508},"uptime",[468,1215,1216],{"class":478},"() };\n",[468,1218,1220],{"class":470,"line":1219},27,[468,1221,543],{"class":478},[760,1223,1225],{"id":1224},"global-components","Global Components",[413,1227,602,1228,1231,1232,1235,1236,1239],{},[417,1229,1230],{},"$global"," property to define reusable schemas that are hoisted to the top-level ",[417,1233,1234],{},"components"," section of the OpenAPI specification. This lets you reference shared schemas with ",[417,1237,1238],{},"$ref"," across multiple routes.",[459,1241,1244],{"className":461,"code":1242,"filename":1243,"language":464,"meta":5,"style":5},"import { defineRouteMeta, defineHandler } from \"nitro\";\n\ndefineRouteMeta({\n  openAPI: {\n    tags: [\"users\"],\n    description: \"List all users\",\n    responses: {\n      200: {\n        description: \"List of users\",\n        content: {\n          \"application\u002Fjson\": {\n            schema: {\n              type: \"array\",\n              items: { $ref: \"#\u002Fcomponents\u002Fschemas\u002FUser\" },\n            },\n          },\n        },\n      },\n    },\n    $global: {\n      components: {\n        schemas: {\n          User: {\n            type: \"object\",\n            properties: {\n              id: { type: \"string\" },\n              name: { type: \"string\" },\n              email: { type: \"string\", format: \"email\" },\n            },\n          },\n        },\n      },\n    },\n  },\n});\n\nexport default defineHandler(() => {\n  return [{ id: \"1\", name: \"Alice\", email: \"alice@example.com\" }];\n});\n","routes\u002Fapi\u002Fusers.get.ts",[417,1245,1246,1258,1262,1268,1272,1280,1289,1293,1299,1308,1312,1318,1322,1331,1341,1345,1349,1353,1357,1361,1366,1371,1376,1381,1390,1395,1404,1413,1429,1434,1439,1444,1449,1454,1459,1464,1469,1484,1509],{"__ignoreMap":5},[468,1247,1248,1250,1252,1254,1256],{"class":470,"line":471},[468,1249,475],{"class":474},[468,1251,628],{"class":478},[468,1253,482],{"class":474},[468,1255,486],{"class":485},[468,1257,489],{"class":478},[468,1259,1260],{"class":470,"line":492},[468,1261,496],{"emptyLinePlaceholder":495},[468,1263,1264,1266],{"class":470,"line":499},[468,1265,419],{"class":508},[468,1267,512],{"class":478},[468,1269,1270],{"class":470,"line":515},[468,1271,649],{"class":478},[468,1273,1274,1276,1278],{"class":470,"line":521},[468,1275,654],{"class":478},[468,1277,816],{"class":485},[468,1279,660],{"class":478},[468,1281,1282,1284,1287],{"class":470,"line":534},[468,1283,665],{"class":478},[468,1285,1286],{"class":485},"\"List all users\"",[468,1288,531],{"class":478},[468,1290,1291],{"class":470,"line":540},[468,1292,675],{"class":478},[468,1294,1295,1297],{"class":470,"line":678},[468,1296,681],{"class":527},[468,1298,1071],{"class":478},[468,1300,1301,1303,1306],{"class":470,"line":693},[468,1302,862],{"class":478},[468,1304,1305],{"class":485},"\"List of users\"",[468,1307,531],{"class":478},[468,1309,1310],{"class":470,"line":699},[468,1311,1085],{"class":478},[468,1313,1314,1316],{"class":470,"line":704},[468,1315,1090],{"class":485},[468,1317,1071],{"class":478},[468,1319,1320],{"class":470,"line":709},[468,1321,1097],{"class":478},[468,1323,1324,1326,1329],{"class":470,"line":714},[468,1325,1102],{"class":478},[468,1327,1328],{"class":485},"\"array\"",[468,1330,531],{"class":478},[468,1332,1333,1336,1339],{"class":470,"line":733},[468,1334,1335],{"class":478},"              items: { $ref: ",[468,1337,1338],{"class":485},"\"#\u002Fcomponents\u002Fschemas\u002FUser\"",[468,1340,690],{"class":478},[468,1342,1343],{"class":470,"line":748},[468,1344,1153],{"class":478},[468,1346,1347],{"class":470,"line":894},[468,1348,1158],{"class":478},[468,1350,1351],{"class":470,"line":906},[468,1352,1163],{"class":478},[468,1354,1355],{"class":470,"line":919},[468,1356,882],{"class":478},[468,1358,1359],{"class":470,"line":924},[468,1360,696],{"class":478},[468,1362,1363],{"class":470,"line":929},[468,1364,1365],{"class":478},"    $global: {\n",[468,1367,1368],{"class":470,"line":934},[468,1369,1370],{"class":478},"      components: {\n",[468,1372,1373],{"class":470,"line":939},[468,1374,1375],{"class":478},"        schemas: {\n",[468,1377,1378],{"class":470,"line":962},[468,1379,1380],{"class":478},"          User: {\n",[468,1382,1383,1386,1388],{"class":470,"line":983},[468,1384,1385],{"class":478},"            type: ",[468,1387,1105],{"class":485},[468,1389,531],{"class":478},[468,1391,1392],{"class":470,"line":996},[468,1393,1394],{"class":478},"            properties: {\n",[468,1396,1397,1400,1402],{"class":470,"line":1200},[468,1398,1399],{"class":478},"              id: { type: ",[468,1401,875],{"class":485},[468,1403,690],{"class":478},[468,1405,1406,1409,1411],{"class":470,"line":1219},[468,1407,1408],{"class":478},"              name: { type: ",[468,1410,875],{"class":485},[468,1412,690],{"class":478},[468,1414,1416,1419,1421,1424,1427],{"class":470,"line":1415},28,[468,1417,1418],{"class":478},"              email: { type: ",[468,1420,875],{"class":485},[468,1422,1423],{"class":478},", format: ",[468,1425,1426],{"class":485},"\"email\"",[468,1428,690],{"class":478},[468,1430,1432],{"class":470,"line":1431},29,[468,1433,1153],{"class":478},[468,1435,1437],{"class":470,"line":1436},30,[468,1438,1158],{"class":478},[468,1440,1442],{"class":470,"line":1441},31,[468,1443,1163],{"class":478},[468,1445,1447],{"class":470,"line":1446},32,[468,1448,882],{"class":478},[468,1450,1452],{"class":470,"line":1451},33,[468,1453,696],{"class":478},[468,1455,1457],{"class":470,"line":1456},34,[468,1458,537],{"class":478},[468,1460,1462],{"class":470,"line":1461},35,[468,1463,543],{"class":478},[468,1465,1467],{"class":470,"line":1466},36,[468,1468,496],{"emptyLinePlaceholder":495},[468,1470,1472,1474,1476,1478,1480,1482],{"class":470,"line":1471},37,[468,1473,502],{"class":474},[468,1475,505],{"class":474},[468,1477,721],{"class":508},[468,1479,724],{"class":478},[468,1481,727],{"class":474},[468,1483,730],{"class":478},[468,1485,1487,1489,1492,1495,1498,1500,1503,1506],{"class":470,"line":1486},38,[468,1488,736],{"class":474},[468,1490,1491],{"class":478}," [{ id: ",[468,1493,1494],{"class":485},"\"1\"",[468,1496,1497],{"class":478},", name: ",[468,1499,991],{"class":485},[468,1501,1502],{"class":478},", email: ",[468,1504,1505],{"class":485},"\"alice@example.com\"",[468,1507,1508],{"class":478}," }];\n",[468,1510,1512],{"class":470,"line":1511},39,[468,1513,543],{"class":478},[413,1515,1516,1517,1520,1521,1524],{},"Once defined, the ",[417,1518,1519],{},"User"," schema can be referenced from any other route with ",[417,1522,1523],{},"{ $ref: \"#\u002Fcomponents\u002Fschemas\u002FUser\" }"," without re-declaring it.",[760,1526,1528],{"id":1527},"automatic-tagging","Automatic Tagging",[413,1530,1531],{},"Routes are automatically tagged based on their path prefix:",[548,1533,1534,1544],{},[551,1535,1536],{},[554,1537,1538,1541],{},[557,1539,1540],{},"Route prefix",[557,1542,1543],{},"Tag",[564,1545,1546,1555,1565],{},[554,1547,1548,1553],{},[569,1549,1550],{},[417,1551,1552],{},"\u002Fapi\u002F",[569,1554,240],{},[554,1556,1557,1562],{},[569,1558,1559],{},[417,1560,1561],{},"\u002F_",[569,1563,1564],{},"Internal",[554,1566,1567,1570],{},[569,1568,1569],{},"Other",[569,1571,1572],{},"App Routes",[413,1574,1575,1576,1579,1580,1582],{},"You can override this by specifying ",[417,1577,1578],{},"tags"," in the ",[417,1581,608],{}," metadata.",[448,1584,33],{"id":1585},"configuration",[413,1587,1588,1589,1591],{},"Configure OpenAPI behavior with the top-level ",[417,1590,608],{}," option:",[459,1593,1595],{"className":461,"code":1594,"filename":463,"language":464,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  experimental: {\n    openAPI: true,\n  },\n  openAPI: {\n    meta: {\n      title: \"My API\",\n      description: \"My awesome API\",\n      version: \"2.0.0\",\n    },\n  },\n});\n",[417,1596,1597,1609,1613,1623,1627,1635,1639,1643,1648,1658,1668,1678,1682,1686],{"__ignoreMap":5},[468,1598,1599,1601,1603,1605,1607],{"class":470,"line":471},[468,1600,475],{"class":474},[468,1602,479],{"class":478},[468,1604,482],{"class":474},[468,1606,486],{"class":485},[468,1608,489],{"class":478},[468,1610,1611],{"class":470,"line":492},[468,1612,496],{"emptyLinePlaceholder":495},[468,1614,1615,1617,1619,1621],{"class":470,"line":499},[468,1616,502],{"class":474},[468,1618,505],{"class":474},[468,1620,509],{"class":508},[468,1622,512],{"class":478},[468,1624,1625],{"class":470,"line":515},[468,1626,518],{"class":478},[468,1628,1629,1631,1633],{"class":470,"line":521},[468,1630,524],{"class":478},[468,1632,528],{"class":527},[468,1634,531],{"class":478},[468,1636,1637],{"class":470,"line":534},[468,1638,537],{"class":478},[468,1640,1641],{"class":470,"line":540},[468,1642,649],{"class":478},[468,1644,1645],{"class":470,"line":678},[468,1646,1647],{"class":478},"    meta: {\n",[468,1649,1650,1653,1656],{"class":470,"line":693},[468,1651,1652],{"class":478},"      title: ",[468,1654,1655],{"class":485},"\"My API\"",[468,1657,531],{"class":478},[468,1659,1660,1663,1666],{"class":470,"line":699},[468,1661,1662],{"class":478},"      description: ",[468,1664,1665],{"class":485},"\"My awesome API\"",[468,1667,531],{"class":478},[468,1669,1670,1673,1676],{"class":470,"line":704},[468,1671,1672],{"class":478},"      version: ",[468,1674,1675],{"class":485},"\"2.0.0\"",[468,1677,531],{"class":478},[468,1679,1680],{"class":470,"line":709},[468,1681,696],{"class":478},[468,1683,1684],{"class":470,"line":714},[468,1685,537],{"class":478},[468,1687,1688],{"class":470,"line":733},[468,1689,543],{"class":478},[760,1691,1693],{"id":1692},"meta",[417,1694,1692],{},[413,1696,1697,1698,1019],{},"Set the API metadata that appears in the specification's ",[417,1699,1700],{},"info",[548,1702,1703,1715],{},[551,1704,1705],{},[554,1706,1707,1710,1713],{},[557,1708,1709],{},"Property",[557,1711,1712],{},"Default",[557,1714,562],{},[564,1716,1717,1732,1745],{},[554,1718,1719,1724,1729],{},[569,1720,1721],{},[417,1722,1723],{},"title",[569,1725,1726],{},[417,1727,1728],{},"\"Nitro Server Routes\"",[569,1730,1731],{},"API title",[554,1733,1734,1739,1742],{},[569,1735,1736],{},[417,1737,1738],{},"description",[569,1740,1741],{},"—",[569,1743,1744],{},"API description",[554,1746,1747,1752,1757],{},[569,1748,1749],{},[417,1750,1751],{},"version",[569,1753,1754],{},[417,1755,1756],{},"\"1.0.0\"",[569,1758,1759],{},"API version",[760,1761,1763],{"id":1762},"route",[417,1764,1762],{},[1766,1767,1768],"ul",{},[1769,1770,1771,1772],"li",{},"Default: ",[417,1773,1774],{},"\"\u002F_openapi.json\"",[413,1776,1777],{},"Override the path where the OpenAPI JSON specification is served:",[459,1779,1781],{"className":461,"code":1780,"filename":463,"language":464,"meta":5,"style":5},"export default defineConfig({\n  openAPI: {\n    route: \"\u002F_docs\u002Fopenapi.json\",\n  },\n});\n",[417,1782,1783,1793,1797,1807,1811],{"__ignoreMap":5},[468,1784,1785,1787,1789,1791],{"class":470,"line":471},[468,1786,502],{"class":474},[468,1788,505],{"class":474},[468,1790,509],{"class":508},[468,1792,512],{"class":478},[468,1794,1795],{"class":470,"line":492},[468,1796,649],{"class":478},[468,1798,1799,1802,1805],{"class":470,"line":499},[468,1800,1801],{"class":478},"    route: ",[468,1803,1804],{"class":485},"\"\u002F_docs\u002Fopenapi.json\"",[468,1806,531],{"class":478},[468,1808,1809],{"class":470,"line":515},[468,1810,537],{"class":478},[468,1812,1813],{"class":470,"line":521},[468,1814,543],{"class":478},[760,1816,1818],{"id":1817},"ui",[417,1819,1817],{},[413,1821,1822],{},"Configure or disable the built-in API documentation UIs:",[459,1824,1826],{"className":461,"code":1825,"filename":463,"language":464,"meta":5,"style":5},"export default defineConfig({\n  openAPI: {\n    ui: {\n      scalar: {\n        route: \"\u002F_docs\u002Fscalar\",\n        theme: \"purple\",\n      },\n      swagger: {\n        route: \"\u002F_docs\u002Fswagger\",\n      },\n    },\n  },\n});\n",[417,1827,1828,1838,1842,1847,1852,1862,1872,1876,1881,1890,1894,1898,1902],{"__ignoreMap":5},[468,1829,1830,1832,1834,1836],{"class":470,"line":471},[468,1831,502],{"class":474},[468,1833,505],{"class":474},[468,1835,509],{"class":508},[468,1837,512],{"class":478},[468,1839,1840],{"class":470,"line":492},[468,1841,649],{"class":478},[468,1843,1844],{"class":470,"line":499},[468,1845,1846],{"class":478},"    ui: {\n",[468,1848,1849],{"class":470,"line":515},[468,1850,1851],{"class":478},"      scalar: {\n",[468,1853,1854,1857,1860],{"class":470,"line":521},[468,1855,1856],{"class":478},"        route: ",[468,1858,1859],{"class":485},"\"\u002F_docs\u002Fscalar\"",[468,1861,531],{"class":478},[468,1863,1864,1867,1870],{"class":470,"line":534},[468,1865,1866],{"class":478},"        theme: ",[468,1868,1869],{"class":485},"\"purple\"",[468,1871,531],{"class":478},[468,1873,1874],{"class":470,"line":540},[468,1875,882],{"class":478},[468,1877,1878],{"class":470,"line":678},[468,1879,1880],{"class":478},"      swagger: {\n",[468,1882,1883,1885,1888],{"class":470,"line":693},[468,1884,1856],{"class":478},[468,1886,1887],{"class":485},"\"\u002F_docs\u002Fswagger\"",[468,1889,531],{"class":478},[468,1891,1892],{"class":470,"line":699},[468,1893,882],{"class":478},[468,1895,1896],{"class":470,"line":704},[468,1897,696],{"class":478},[468,1899,1900],{"class":470,"line":709},[468,1901,537],{"class":478},[468,1903,1904],{"class":470,"line":714},[468,1905,543],{"class":478},[413,1907,1908,1909,1914],{},"Set either UI to ",[417,1910,1911],{"className":461,"language":464,"style":5},[468,1912,1913],{"class":527},"false"," to disable it:",[459,1916,1918],{"className":461,"code":1917,"filename":463,"language":464,"meta":5,"style":5},"export default defineConfig({\n  openAPI: {\n    ui: {\n      swagger: false,\n    },\n  },\n});\n",[417,1919,1920,1930,1934,1938,1947,1951,1955],{"__ignoreMap":5},[468,1921,1922,1924,1926,1928],{"class":470,"line":471},[468,1923,502],{"class":474},[468,1925,505],{"class":474},[468,1927,509],{"class":508},[468,1929,512],{"class":478},[468,1931,1932],{"class":470,"line":492},[468,1933,649],{"class":478},[468,1935,1936],{"class":470,"line":499},[468,1937,1846],{"class":478},[468,1939,1940,1943,1945],{"class":470,"line":515},[468,1941,1942],{"class":478},"      swagger: ",[468,1944,1913],{"class":527},[468,1946,531],{"class":478},[468,1948,1949],{"class":470,"line":521},[468,1950,696],{"class":478},[468,1952,1953],{"class":470,"line":534},[468,1954,537],{"class":478},[468,1956,1957],{"class":470,"line":540},[468,1958,543],{"class":478},[1960,1961],"read-more",{"title":1962,"to":1963},"Scalar Configuration","https:\u002F\u002Fgithub.com\u002Fscalar\u002Fscalar",[448,1965,1967],{"id":1966},"production","Production",[413,1969,1970,1971,1591],{},"By default, OpenAPI endpoints are only available during development. To enable them in production, set the ",[417,1972,1966],{},[459,1974,1976],{"className":461,"code":1975,"filename":463,"language":464,"meta":5,"style":5},"export default defineConfig({\n  openAPI: {\n    production: \"runtime\",\n  },\n});\n",[417,1977,1978,1988,1992,2002,2006],{"__ignoreMap":5},[468,1979,1980,1982,1984,1986],{"class":470,"line":471},[468,1981,502],{"class":474},[468,1983,505],{"class":474},[468,1985,509],{"class":508},[468,1987,512],{"class":478},[468,1989,1990],{"class":470,"line":492},[468,1991,649],{"class":478},[468,1993,1994,1997,2000],{"class":470,"line":499},[468,1995,1996],{"class":478},"    production: ",[468,1998,1999],{"class":485},"\"runtime\"",[468,2001,531],{"class":478},[468,2003,2004],{"class":470,"line":515},[468,2005,537],{"class":478},[468,2007,2008],{"class":470,"line":521},[468,2009,543],{"class":478},[548,2011,2012,2022],{},[551,2013,2014],{},[554,2015,2016,2019],{},[557,2017,2018],{},"Value",[557,2020,2021],{},"Behavior",[564,2023,2024,2035,2046],{},[554,2025,2026,2032],{},[569,2027,2028],{},[417,2029,2030],{"className":461,"language":464,"style":5},[468,2031,1913],{"class":527},[569,2033,2034],{},"Disabled in production (default)",[554,2036,2037,2043],{},[569,2038,2039],{},[417,2040,2041],{"className":461,"language":464,"style":5},[468,2042,1999],{"class":485},[569,2044,2045],{},"Specification is generated at runtime on each request",[554,2047,2048,2055],{},[569,2049,2050],{},[417,2051,2052],{"className":461,"language":464,"style":5},[468,2053,2054],{"class":485},"\"prerender\"",[569,2056,2057],{},"Specification is generated at build time and served as a static file",[413,2059,2060,2061,2065,2066,2070],{},"Use ",[417,2062,2063],{"className":461,"language":464,"style":5},[468,2064,2054],{"class":485}," when the specification does not change between deployments for the best performance. Use ",[417,2067,2068],{"className":461,"language":464,"style":5},[468,2069,1999],{"class":485}," if you need dynamic server information or middleware access.",[2072,2073,2074],"warning",{},[413,2075,2076],{},"If you enable OpenAPI in production, make sure to protect the endpoints with appropriate authentication or access control.",[2078,2079,2080],"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 .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}",{"title":5,"searchDepth":492,"depth":492,"links":2082},[2083,2084,2090,2095],{"id":450,"depth":492,"text":451},{"id":598,"depth":492,"text":599,"children":2085},[2086,2087,2088,2089],{"id":762,"depth":499,"text":763},{"id":1011,"depth":499,"text":1012},{"id":1224,"depth":499,"text":1225},{"id":1527,"depth":499,"text":1528},{"id":1585,"depth":492,"text":33,"children":2091},[2092,2093,2094],{"id":1692,"depth":499,"text":1692},{"id":1762,"depth":499,"text":1762},{"id":1817,"depth":499,"text":1817},{"id":1966,"depth":492,"text":1967},"Nitro can automatically generate an OpenAPI specification from your route handlers and serve interactive API documentation.","md",{"icon":51},{"icon":51},{"title":48,"description":2096},"xL105YPH5gYXFtmPPUx2bpWe0rQkHTv_vy3kG98OjTA",[2103,2105],{"title":43,"path":44,"stem":45,"description":2104,"icon":46,"children":-1},"Understand how Nitro runs and serves incoming requests to your application.",{"title":53,"path":54,"stem":55,"description":2106,"icon":56,"children":-1},"Use plugins to extend Nitro's runtime behavior.",1784141548620]