[{"data":1,"prerenderedAt":2747},["ShallowReactive",2],{"navigation":3,"-docs-utils":445,"-docs-utils-surround":2742},[4,123,260,266,430,442],{"title":5,"path":6,"stem":7,"children":8,"icon":122},"","\u002Fdocs","1.docs\u002F1.index",[9,12,17,22,27,32,37,42,47,52,57,62,67,72,77,82,87,92,97,102,107,112,117],{"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},"Prerendering","\u002Fdocs\u002Fprerendering","1.docs\u002F50.prerendering","ri:file-copy-2-line",{"title":63,"path":64,"stem":65,"icon":66},"Tasks","\u002Fdocs\u002Ftasks","1.docs\u002F50.tasks","codicon:run-all",{"title":68,"path":69,"stem":70,"icon":71},"WebSocket","\u002Fdocs\u002Fwebsocket","1.docs\u002F50.websocket","ri:broadcast-fill",{"title":73,"path":74,"stem":75,"icon":76},"Modules","\u002Fdocs\u002Fmodules","1.docs\u002F55.modules","i-lucide-puzzle",{"title":78,"path":79,"stem":80,"icon":81},"Server Entry","\u002Fdocs\u002Fserver-entry","1.docs\u002F6.server-entry","ri:server-line",{"title":83,"path":84,"stem":85,"icon":86},"CLI","\u002Fdocs\u002Fcli","1.docs\u002F60.cli","i-lucide-terminal",{"title":88,"path":89,"stem":90,"icon":91},"Vite","\u002Fdocs\u002Fvite","1.docs\u002F61.vite","i-logos-vitejs",{"title":93,"path":94,"stem":95,"icon":96},"Utils","\u002Fdocs\u002Futils","1.docs\u002F62.utils","i-lucide-braces",{"title":98,"path":99,"stem":100,"icon":101},"TypeScript","\u002Fdocs\u002Ftypescript","1.docs\u002F63.typescript","i-logos-typescript-icon",{"title":103,"path":104,"stem":105,"icon":106},"Cache","\u002Fdocs\u002Fcache","1.docs\u002F7.cache","ri:speed-line",{"title":108,"path":109,"stem":110,"icon":111},"KV Storage","\u002Fdocs\u002Fstorage","1.docs\u002F8.storage","carbon:datastore",{"title":113,"path":114,"stem":115,"icon":116},"Migration Guide","\u002Fdocs\u002Fmigration","1.docs\u002F99.migration","ri:arrow-right-up-line",{"title":118,"path":119,"stem":120,"icon":121},"Nightly Channel","\u002Fdocs\u002Fnightly","1.docs\u002F99.nightly","ri:moon-fill","i-lucide-book-open",{"title":124,"path":125,"stem":126,"children":127,"icon":129},"Deploy","\u002Fdeploy","2.deploy\u002F0.index",[128,130,155],{"title":124,"path":125,"stem":126,"icon":129},"ri:upload-cloud-2-line",{"title":131,"path":132,"stem":133,"children":134,"page":154},"Runtimes","\u002Fdeploy\u002Fruntimes","2.deploy\u002F10.runtimes",[135,140,145,150],{"title":136,"path":137,"stem":138,"icon":139},"Node.js","\u002Fdeploy\u002Fruntimes\u002Fnode","2.deploy\u002F10.runtimes\u002F1.node","akar-icons:node-fill",{"title":141,"path":142,"stem":143,"icon":144},"Bun","\u002Fdeploy\u002Fruntimes\u002Fbun","2.deploy\u002F10.runtimes\u002Fbun","simple-icons:bun",{"title":146,"path":147,"stem":148,"icon":149},"Deno","\u002Fdeploy\u002Fruntimes\u002Fdeno","2.deploy\u002F10.runtimes\u002Fdeno","simple-icons:deno",{"title":151,"path":152,"stem":153},"Standard","\u002Fdeploy\u002Fruntimes\u002Fstandard","2.deploy\u002F10.runtimes\u002Fstandard",false,{"title":156,"path":157,"stem":158,"children":159,"page":154},"Providers","\u002Fdeploy\u002Fproviders","2.deploy\u002F20.providers",[160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256],{"title":161,"path":162,"stem":163},"Alwaysdata","\u002Fdeploy\u002Fproviders\u002Falwaysdata","2.deploy\u002F20.providers\u002Falwaysdata",{"title":165,"path":166,"stem":167},"AWS Lambda","\u002Fdeploy\u002Fproviders\u002Faws","2.deploy\u002F20.providers\u002Faws",{"title":169,"path":170,"stem":171},"AWS Amplify","\u002Fdeploy\u002Fproviders\u002Faws-amplify","2.deploy\u002F20.providers\u002Faws-amplify",{"title":173,"path":174,"stem":175},"Azure","\u002Fdeploy\u002Fproviders\u002Fazure","2.deploy\u002F20.providers\u002Fazure",{"title":177,"path":178,"stem":179},"Cleavr","\u002Fdeploy\u002Fproviders\u002Fcleavr","2.deploy\u002F20.providers\u002Fcleavr",{"title":181,"path":182,"stem":183},"Cloudflare","\u002Fdeploy\u002Fproviders\u002Fcloudflare","2.deploy\u002F20.providers\u002Fcloudflare",{"title":185,"path":186,"stem":187},"Deno Deploy","\u002Fdeploy\u002Fproviders\u002Fdeno-deploy","2.deploy\u002F20.providers\u002Fdeno-deploy",{"title":189,"path":190,"stem":191},"DigitalOcean","\u002Fdeploy\u002Fproviders\u002Fdigitalocean","2.deploy\u002F20.providers\u002Fdigitalocean",{"title":193,"path":194,"stem":195},"EdgeOne Pages","\u002Fdeploy\u002Fproviders\u002Fedgeone","2.deploy\u002F20.providers\u002Fedgeone",{"title":197,"path":198,"stem":199},"Firebase","\u002Fdeploy\u002Fproviders\u002Ffirebase","2.deploy\u002F20.providers\u002Ffirebase",{"title":201,"path":202,"stem":203},"Flightcontrol","\u002Fdeploy\u002Fproviders\u002Fflightcontrol","2.deploy\u002F20.providers\u002Fflightcontrol",{"title":205,"path":206,"stem":207},"Genezio","\u002Fdeploy\u002Fproviders\u002Fgenezio","2.deploy\u002F20.providers\u002Fgenezio",{"title":209,"path":210,"stem":211},"GitHub Pages","\u002Fdeploy\u002Fproviders\u002Fgithub-pages","2.deploy\u002F20.providers\u002Fgithub-pages",{"title":213,"path":214,"stem":215},"GitLab Pages","\u002Fdeploy\u002Fproviders\u002Fgitlab-pages","2.deploy\u002F20.providers\u002Fgitlab-pages",{"title":217,"path":218,"stem":219},"Heroku","\u002Fdeploy\u002Fproviders\u002Fheroku","2.deploy\u002F20.providers\u002Fheroku",{"title":221,"path":222,"stem":223},"IIS","\u002Fdeploy\u002Fproviders\u002Fiis","2.deploy\u002F20.providers\u002Fiis",{"title":225,"path":226,"stem":227},"Koyeb","\u002Fdeploy\u002Fproviders\u002Fkoyeb","2.deploy\u002F20.providers\u002Fkoyeb",{"title":229,"path":230,"stem":231},"Netlify","\u002Fdeploy\u002Fproviders\u002Fnetlify","2.deploy\u002F20.providers\u002Fnetlify",{"title":233,"path":234,"stem":235},"Platform.sh","\u002Fdeploy\u002Fproviders\u002Fplatform-sh","2.deploy\u002F20.providers\u002Fplatform-sh",{"title":237,"path":238,"stem":239},"Render.com","\u002Fdeploy\u002Fproviders\u002Frender","2.deploy\u002F20.providers\u002Frender",{"title":241,"path":242,"stem":243},"Stormkit","\u002Fdeploy\u002Fproviders\u002Fstormkit","2.deploy\u002F20.providers\u002Fstormkit",{"title":245,"path":246,"stem":247},"Vercel","\u002Fdeploy\u002Fproviders\u002Fvercel","2.deploy\u002F20.providers\u002Fvercel",{"title":249,"path":250,"stem":251},"Zeabur","\u002Fdeploy\u002Fproviders\u002Fzeabur","2.deploy\u002F20.providers\u002Fzeabur",{"title":253,"path":254,"stem":255},"Zephyr Cloud","\u002Fdeploy\u002Fproviders\u002Fzephyr","2.deploy\u002F20.providers\u002Fzephyr",{"title":257,"path":258,"stem":259},"Zerops","\u002Fdeploy\u002Fproviders\u002Fzerops","2.deploy\u002F20.providers\u002Fzerops",{"title":261,"path":262,"stem":263,"children":264,"icon":36},"Config","\u002Fconfig","3.config\u002F0.index",[265],{"title":261,"path":262,"stem":263,"icon":36},{"title":267,"path":268,"stem":269,"children":270,"icon":272},"Examples","\u002Fexamples","4.examples\u002F0.index",[271,273,278,283,288,293,297,302,307,312,317,322,327,331,336,340,344,349,354,359,364,369,374,379,383,388,393,398,402,407,412,416,421,426],{"title":267,"path":268,"stem":269,"icon":272},"i-lucide-folder-code",{"title":274,"path":275,"stem":276,"icon":277},"API Routes","\u002Fexamples\u002Fapi-routes","4.examples\u002Fapi-routes","i-lucide-route",{"title":279,"path":280,"stem":281,"icon":282},"Auto Imports","\u002Fexamples\u002Fauto-imports","4.examples\u002Fauto-imports","i-lucide-import",{"title":284,"path":285,"stem":286,"icon":287},"Cached Handler","\u002Fexamples\u002Fcached-handler","4.examples\u002Fcached-handler","i-lucide-clock",{"title":289,"path":290,"stem":291,"icon":292},"Custom Error Handler","\u002Fexamples\u002Fcustom-error-handler","4.examples\u002Fcustom-error-handler","i-lucide-alert-circle",{"title":38,"path":294,"stem":295,"icon":296},"\u002Fexamples\u002Fdatabase","4.examples\u002Fdatabase","i-lucide-database",{"title":298,"path":299,"stem":300,"icon":301},"Elysia","\u002Fexamples\u002Felysia","4.examples\u002Felysia","i-skill-icons-elysia-dark",{"title":303,"path":304,"stem":305,"icon":306},"Express","\u002Fexamples\u002Fexpress","4.examples\u002Fexpress","i-simple-icons-express",{"title":308,"path":309,"stem":310,"icon":311},"Fastify","\u002Fexamples\u002Ffastify","4.examples\u002Ffastify","i-simple-icons-fastify",{"title":313,"path":314,"stem":315,"icon":316},"Hello World","\u002Fexamples\u002Fhello-world","4.examples\u002Fhello-world","i-lucide-sparkles",{"title":318,"path":319,"stem":320,"icon":321},"Hono","\u002Fexamples\u002Fhono","4.examples\u002Fhono","i-logos-hono",{"title":323,"path":324,"stem":325,"icon":326},"Import Alias","\u002Fexamples\u002Fimport-alias","4.examples\u002Fimport-alias","i-lucide-at-sign",{"title":328,"path":329,"stem":330,"icon":46},"Middleware","\u002Fexamples\u002Fmiddleware","4.examples\u002Fmiddleware",{"title":332,"path":333,"stem":334,"icon":335},"Mono JSX","\u002Fexamples\u002Fmono-jsx","4.examples\u002Fmono-jsx","i-lucide-brackets",{"title":337,"path":338,"stem":339,"icon":335},"Nano JSX","\u002Fexamples\u002Fnano-jsx","4.examples\u002Fnano-jsx",{"title":53,"path":341,"stem":342,"icon":343},"\u002Fexamples\u002Fplugins","4.examples\u002Fplugins","i-lucide-plug",{"title":345,"path":346,"stem":347,"icon":348},"Custom Renderer","\u002Fexamples\u002Frenderer","4.examples\u002Frenderer","i-lucide-code",{"title":350,"path":351,"stem":352,"icon":353},"Runtime Config","\u002Fexamples\u002Fruntime-config","4.examples\u002Fruntime-config","i-lucide-settings",{"title":355,"path":356,"stem":357,"icon":358},"Server Fetch","\u002Fexamples\u002Fserver-fetch","4.examples\u002Fserver-fetch","i-lucide-arrow-right-left",{"title":360,"path":361,"stem":362,"icon":363},"Shiki","\u002Fexamples\u002Fshiki","4.examples\u002Fshiki","i-lucide-highlighter",{"title":365,"path":366,"stem":367,"icon":368},"Takumi","\u002Fexamples\u002Ftakumi","4.examples\u002Ftakumi","i-lucide-image",{"title":370,"path":371,"stem":372,"icon":373},"Tracing","\u002Fexamples\u002Ftracing","4.examples\u002Ftracing","i-lucide-activity",{"title":375,"path":376,"stem":377,"icon":378},"Virtual Routes","\u002Fexamples\u002Fvirtual-routes","4.examples\u002Fvirtual-routes","i-lucide-box",{"title":380,"path":381,"stem":382,"icon":91},"Vite Nitro Plugin","\u002Fexamples\u002Fvite-nitro-plugin","4.examples\u002Fvite-nitro-plugin",{"title":384,"path":385,"stem":386,"icon":387},"Vite RSC","\u002Fexamples\u002Fvite-rsc","4.examples\u002Fvite-rsc","i-logos-react",{"title":389,"path":390,"stem":391,"icon":392},"Vite SSR HTML","\u002Fexamples\u002Fvite-ssr-html","4.examples\u002Fvite-ssr-html","i-logos-html-5",{"title":394,"path":395,"stem":396,"icon":397},"SSR with Preact","\u002Fexamples\u002Fvite-ssr-preact","4.examples\u002Fvite-ssr-preact","i-logos-preact",{"title":399,"path":400,"stem":401,"icon":387},"SSR with React","\u002Fexamples\u002Fvite-ssr-react","4.examples\u002Fvite-ssr-react",{"title":403,"path":404,"stem":405,"icon":406},"SSR with SolidJS","\u002Fexamples\u002Fvite-ssr-solid","4.examples\u002Fvite-ssr-solid","i-logos-solidjs-icon",{"title":408,"path":409,"stem":410,"icon":411},"SSR with TanStack Router","\u002Fexamples\u002Fvite-ssr-tsr-react","4.examples\u002Fvite-ssr-tsr-react","i-simple-icons-tanstack",{"title":413,"path":414,"stem":415,"icon":411},"SSR with TanStack Start","\u002Fexamples\u002Fvite-ssr-tss-react","4.examples\u002Fvite-ssr-tss-react",{"title":417,"path":418,"stem":419,"icon":420},"SSR with Vue Router","\u002Fexamples\u002Fvite-ssr-vue-router","4.examples\u002Fvite-ssr-vue-router","i-logos-vue",{"title":422,"path":423,"stem":424,"icon":425},"Vite + tRPC","\u002Fexamples\u002Fvite-trpc","4.examples\u002Fvite-trpc","i-simple-icons-trpc",{"title":68,"path":427,"stem":428,"icon":429},"\u002Fexamples\u002Fwebsocket","4.examples\u002Fwebsocket","i-lucide-radio",{"title":431,"path":432,"stem":433,"children":434},"Blog","\u002Fblog","9.blog",[435,438],{"title":431,"path":432,"stem":436,"icon":437},"9.blog\u002Findex","i-lucide-file-text",{"title":439,"path":440,"stem":441,"icon":437},"Nitro v3 Beta is here!","\u002Fblog\u002Fv3-beta","9.blog\u002F1.v3-beta",{"title":5,"path":443,"stem":444},"\u002F","index",{"id":446,"title":447,"body":448,"description":2736,"extension":2737,"meta":2738,"navigation":2739,"path":94,"seo":2740,"stem":95,"__hash__":2741},"content\u002F1.docs\u002F62.utils.md","Server Utilities",{"type":449,"value":450,"toc":2716,"icon":96},"minimark",[451,465,470,799,803,806,1010,1024,1167,1172,1177,1270,1285,1340,1344,1354,1458,1462,1468,1558,1565,1571,1600,1705,1716,1722,1754,1827,1833,1839,1877,1926,1932,1938,1982,2048,2054,2060,2091,2130,2136,2175,2229,2239,2245,2248,2340,2399,2405,2430,2467,2487,2493,2522,2532,2538,2565,2587,2593,2617,2678,2691,2695,2712],[452,453,454,455,459,460,464],"p",{},"Nitro has ",[456,457,458],"strong",{},"no auto-imports",": every utility must be explicitly imported from the main ",[461,462,463],"code",{},"nitro"," entry or one of its subpaths. This page maps each export to its import path.",[466,467,469],"h2",{"id":468},"quick-reference","Quick reference",[471,472,473,486],"table",{},[474,475,476],"thead",{},[477,478,479,483],"tr",{},[480,481,482],"th",{},"What you want to do",[480,484,485],{},"Import",[487,488,489,517,535,553,572,590,608,626,644,663,682,701,720,739,758,780],"tbody",{},[477,490,491,495],{},[492,493,494],"td",{},"Define an event handler",[492,496,497],{},[461,498,501,506,510,513],{"className":499,"language":500,"style":5},"language-ts shiki shiki-themes github-light github-dark github-dark","ts",[502,503,505],"span",{"class":504},"so5gQ","import",[502,507,509],{"class":508},"slsVL"," { defineHandler } ",[502,511,512],{"class":504},"from",[502,514,516],{"class":515},"sfrk1"," \"nitro\"",[477,518,519,522],{},[492,520,521],{},"Define a middleware",[492,523,524],{},[461,525,526,528,531,533],{"className":499,"language":500,"style":5},[502,527,505],{"class":504},[502,529,530],{"class":508}," { defineMiddleware } ",[502,532,512],{"class":504},[502,534,516],{"class":515},[477,536,537,540],{},[492,538,539],{},"Throw an HTTP error",[492,541,542],{},[461,543,544,546,549,551],{"className":499,"language":500,"style":5},[502,545,505],{"class":504},[502,547,548],{"class":508}," { HTTPError } ",[502,550,512],{"class":504},[502,552,516],{"class":515},[477,554,555,558],{},[492,556,557],{},"Read the body, query, cookies, ...",[492,559,560],{},[461,561,562,564,567,569],{"className":499,"language":500,"style":5},[502,563,505],{"class":504},[502,565,566],{"class":508}," { readBody, getQuery } ",[502,568,512],{"class":504},[502,570,571],{"class":515}," \"nitro\u002Fh3\"",[477,573,574,577],{},[492,575,576],{},"Call your own routes internally",[492,578,579],{},[461,580,581,583,586,588],{"className":499,"language":500,"style":5},[502,582,505],{"class":504},[502,584,585],{"class":508}," { serverFetch } ",[502,587,512],{"class":504},[502,589,516],{"class":515},[477,591,592,595],{},[492,593,594],{},"Handle WebSocket connections",[492,596,597],{},[461,598,599,601,604,606],{"className":499,"language":500,"style":5},[502,600,505],{"class":504},[502,602,603],{"class":508}," { defineWebSocketHandler } ",[502,605,512],{"class":504},[502,607,516],{"class":515},[477,609,610,613],{},[492,611,612],{},"Add a runtime plugin",[492,614,615],{},[461,616,617,619,622,624],{"className":499,"language":500,"style":5},[502,618,505],{"class":504},[502,620,621],{"class":508}," { definePlugin } ",[502,623,512],{"class":504},[502,625,516],{"class":515},[477,627,628,631],{},[492,629,630],{},"Customize the error response",[492,632,633],{},[461,634,635,637,640,642],{"className":499,"language":500,"style":5},[502,636,505],{"class":504},[502,638,639],{"class":508}," { defineErrorHandler } ",[502,641,512],{"class":504},[502,643,516],{"class":515},[477,645,646,649],{},[492,647,648],{},"Cache a handler or function",[492,650,651],{},[461,652,653,655,658,660],{"className":499,"language":500,"style":5},[502,654,505],{"class":504},[502,656,657],{"class":508}," { defineCachedHandler, defineCachedFunction } ",[502,659,512],{"class":504},[502,661,662],{"class":515}," \"nitro\u002Fcache\"",[477,664,665,668],{},[492,666,667],{},"Read\u002Fwrite key-value storage",[492,669,670],{},[461,671,672,674,677,679],{"className":499,"language":500,"style":5},[502,673,505],{"class":504},[502,675,676],{"class":508}," { useStorage } ",[502,678,512],{"class":504},[502,680,681],{"class":515}," \"nitro\u002Fstorage\"",[477,683,684,687],{},[492,685,686],{},"Query a SQL database",[492,688,689],{},[461,690,691,693,696,698],{"className":499,"language":500,"style":5},[502,692,505],{"class":504},[502,694,695],{"class":508}," { useDatabase } ",[502,697,512],{"class":504},[502,699,700],{"class":515}," \"nitro\u002Fdatabase\"",[477,702,703,706],{},[492,704,705],{},"Access runtime config",[492,707,708],{},[461,709,710,712,715,717],{"className":499,"language":500,"style":5},[502,711,505],{"class":504},[502,713,714],{"class":508}," { useRuntimeConfig } ",[502,716,512],{"class":504},[502,718,719],{"class":515}," \"nitro\u002Fruntime-config\"",[477,721,722,725],{},[492,723,724],{},"Define and run tasks",[492,726,727],{},[461,728,729,731,734,736],{"className":499,"language":500,"style":5},[502,730,505],{"class":504},[502,732,733],{"class":508}," { defineTask, runTask } ",[502,735,512],{"class":504},[502,737,738],{"class":515}," \"nitro\u002Ftask\"",[477,740,741,744],{},[492,742,743],{},"Access the app instance and hooks",[492,745,746],{},[461,747,748,750,753,755],{"className":499,"language":500,"style":5},[502,749,505],{"class":504},[502,751,752],{"class":508}," { useNitroApp, useNitroHooks } ",[502,754,512],{"class":504},[502,756,757],{"class":515}," \"nitro\u002Fapp\"",[477,759,760,767],{},[492,761,762,763,766],{},"Configure Nitro (",[461,764,765],{},"nitro.config.ts",")",[492,768,769],{},[461,770,771,773,776,778],{"className":499,"language":500,"style":5},[502,772,505],{"class":504},[502,774,775],{"class":508}," { defineConfig } ",[502,777,512],{"class":504},[502,779,516],{"class":515},[477,781,782,785],{},[492,783,784],{},"Use Nitro as a Vite plugin",[492,786,787],{},[461,788,789,791,794,796],{"className":499,"language":500,"style":5},[502,790,505],{"class":504},[502,792,793],{"class":508}," { nitro } ",[502,795,512],{"class":504},[502,797,798],{"class":515}," \"nitro\u002Fvite\"",[466,800,801],{"id":463},[461,802,463],{},[452,804,805],{},"The main entry contains everything you need for day-to-day route handlers.",[471,807,808,818],{},[474,809,810],{},[477,811,812,815],{},[480,813,814],{},"Export",[480,816,817],{},"Description",[487,819,820,835,850,863,876,891,908,922,960,970,984,994],{},[477,821,822,827],{},[492,823,824],{},[461,825,826],{},"defineHandler",[492,828,829,830,834],{},"Define an event handler for a ",[831,832,833],"a",{"href":24},"route or middleware file",".",[477,836,837,842],{},[492,838,839],{},[461,840,841],{},"defineMiddleware",[492,843,844,845,849],{},"Define a ",[831,846,848],{"href":847},"\u002Fdocs\u002Frouting#middleware","middleware"," that runs before route handlers.",[477,851,852,857],{},[492,853,854],{},[461,855,856],{},"defineWebSocketHandler",[492,858,844,859,862],{},[831,860,861],{"href":69},"WebSocket handler"," for a route file.",[477,864,865,870],{},[492,866,867],{},[461,868,869],{},"definePlugin",[492,871,844,872,875],{},[831,873,874],{"href":54},"runtime plugin"," that runs on server startup.",[477,877,878,883],{},[492,879,880],{},[461,881,882],{},"defineErrorHandler",[492,884,885,886,890],{},"Define a custom ",[831,887,889],{"href":888},"\u002Fconfig#errorhandler","error handler"," to replace the built-in error page.",[477,892,893,898],{},[492,894,895],{},[461,896,897],{},"defineConfig",[492,899,900,901,904,905,907],{},"Define Nitro ",[831,902,903],{"href":34},"configuration"," (used in ",[461,906,765],{},", not in runtime code).",[477,909,910,915],{},[492,911,912],{},[461,913,914],{},"defineRouteMeta",[492,916,917,918,921],{},"Attach route metadata such as ",[831,919,920],{"href":49},"OpenAPI specs"," (build-time macro).",[477,923,924,929],{},[492,925,926],{},[461,927,928],{},"HTTPError",[492,930,931,932,834],{},"Throw HTTP errors with a status code: ",[461,933,934,937,940,944,947,950,953,957],{"className":499,"language":500,"style":5},[502,935,936],{"class":504},"throw",[502,938,939],{"class":504}," new",[502,941,943],{"class":942},"shcOC"," HTTPError",[502,945,946],{"class":508},"(",[502,948,949],{"class":515},"\"Not found\"",[502,951,952],{"class":508},", { status: ",[502,954,956],{"class":955},"suiK_","404",[502,958,959],{"class":508}," })",[477,961,962,967],{},[492,963,964],{},[461,965,966],{},"HTTPResponse",[492,968,969],{},"Return a body with a custom status and headers from a handler.",[477,971,972,977],{},[492,973,974],{},[461,975,976],{},"html",[492,978,979,980,983],{},"Tagged template literal returning an HTML response (",[461,981,982],{},"text\u002Fhtml"," content type).",[477,985,986,991],{},[492,987,988],{},[461,989,990],{},"serverFetch",[492,992,993],{},"Call your own routes internally, without a network round-trip.",[477,995,996,1001],{},[492,997,998],{},[461,999,1000],{},"fetch",[492,1002,1003,1004,1006,1007,1009],{},"Like global ",[461,1005,1000],{},", but paths starting with ",[461,1008,443],{}," are routed to your own server.",[452,1011,1012,1013,1016,1017,1020,1021,834],{},"Commonly used types are also exported: ",[461,1014,1015],{},"H3Event",", ",[461,1018,1019],{},"EventHandlerRequest",", and ",[461,1022,1023],{},"EventHandlerWithFetch",[1025,1026,1029],"pre",{"className":499,"code":1027,"filename":1028,"language":500,"meta":5,"style":5},"import { defineHandler, HTTPError } from \"nitro\";\n\nexport default defineHandler((event) => {\n  const name = event.url.searchParams.get(\"name\");\n  if (!name) {\n    throw new HTTPError(\"Missing name\", { status: 400 });\n  }\n  return { hello: name };\n});\n","server\u002Froutes\u002Fhello.ts",[461,1030,1031,1047,1054,1082,1108,1123,1146,1152,1161],{"__ignoreMap":5},[502,1032,1035,1037,1040,1042,1044],{"class":1033,"line":1034},"line",1,[502,1036,505],{"class":504},[502,1038,1039],{"class":508}," { defineHandler, HTTPError } ",[502,1041,512],{"class":504},[502,1043,516],{"class":515},[502,1045,1046],{"class":508},";\n",[502,1048,1050],{"class":1033,"line":1049},2,[502,1051,1053],{"emptyLinePlaceholder":1052},true,"\n",[502,1055,1057,1060,1063,1066,1069,1073,1076,1079],{"class":1033,"line":1056},3,[502,1058,1059],{"class":504},"export",[502,1061,1062],{"class":504}," default",[502,1064,1065],{"class":942}," defineHandler",[502,1067,1068],{"class":508},"((",[502,1070,1072],{"class":1071},"sQHwn","event",[502,1074,1075],{"class":508},") ",[502,1077,1078],{"class":504},"=>",[502,1080,1081],{"class":508}," {\n",[502,1083,1085,1088,1091,1094,1097,1100,1102,1105],{"class":1033,"line":1084},4,[502,1086,1087],{"class":504},"  const",[502,1089,1090],{"class":955}," name",[502,1092,1093],{"class":504}," =",[502,1095,1096],{"class":508}," event.url.searchParams.",[502,1098,1099],{"class":942},"get",[502,1101,946],{"class":508},[502,1103,1104],{"class":515},"\"name\"",[502,1106,1107],{"class":508},");\n",[502,1109,1111,1114,1117,1120],{"class":1033,"line":1110},5,[502,1112,1113],{"class":504},"  if",[502,1115,1116],{"class":508}," (",[502,1118,1119],{"class":504},"!",[502,1121,1122],{"class":508},"name) {\n",[502,1124,1126,1129,1131,1133,1135,1138,1140,1143],{"class":1033,"line":1125},6,[502,1127,1128],{"class":504},"    throw",[502,1130,939],{"class":504},[502,1132,943],{"class":942},[502,1134,946],{"class":508},[502,1136,1137],{"class":515},"\"Missing name\"",[502,1139,952],{"class":508},[502,1141,1142],{"class":955},"400",[502,1144,1145],{"class":508}," });\n",[502,1147,1149],{"class":1033,"line":1148},7,[502,1150,1151],{"class":508},"  }\n",[502,1153,1155,1158],{"class":1033,"line":1154},8,[502,1156,1157],{"class":504},"  return",[502,1159,1160],{"class":508}," { hello: name };\n",[502,1162,1164],{"class":1033,"line":1163},9,[502,1165,1166],{"class":508},"});\n",[1168,1169,1171],"h3",{"id":1170},"internal-fetch","Internal fetch",[452,1173,1174,1176],{},[461,1175,990],{}," calls a route of your own app directly — the request goes through the Nitro app (route rules, middleware, plugins) without touching the network:",[1025,1178,1181],{"className":499,"code":1179,"filename":1180,"language":500,"meta":5,"style":5},"import { defineHandler, serverFetch } from \"nitro\";\n\nexport default defineHandler(async () => {\n  const res = await serverFetch(\"\u002Fapi\u002Fstats\"); \u002F\u002F returns a web Response\n  return { stats: await res.json() };\n});\n","server\u002Froutes\u002Fsummary.ts",[461,1182,1183,1196,1200,1220,1247,1266],{"__ignoreMap":5},[502,1184,1185,1187,1190,1192,1194],{"class":1033,"line":1034},[502,1186,505],{"class":504},[502,1188,1189],{"class":508}," { defineHandler, serverFetch } ",[502,1191,512],{"class":504},[502,1193,516],{"class":515},[502,1195,1046],{"class":508},[502,1197,1198],{"class":1033,"line":1049},[502,1199,1053],{"emptyLinePlaceholder":1052},[502,1201,1202,1204,1206,1208,1210,1213,1216,1218],{"class":1033,"line":1056},[502,1203,1059],{"class":504},[502,1205,1062],{"class":504},[502,1207,1065],{"class":942},[502,1209,946],{"class":508},[502,1211,1212],{"class":504},"async",[502,1214,1215],{"class":508}," () ",[502,1217,1078],{"class":504},[502,1219,1081],{"class":508},[502,1221,1222,1224,1227,1229,1232,1235,1237,1240,1243],{"class":1033,"line":1084},[502,1223,1087],{"class":504},[502,1225,1226],{"class":955}," res",[502,1228,1093],{"class":504},[502,1230,1231],{"class":504}," await",[502,1233,1234],{"class":942}," serverFetch",[502,1236,946],{"class":508},[502,1238,1239],{"class":515},"\"\u002Fapi\u002Fstats\"",[502,1241,1242],{"class":508},"); ",[502,1244,1246],{"class":1245},"sCsY4","\u002F\u002F returns a web Response\n",[502,1248,1249,1251,1254,1257,1260,1263],{"class":1033,"line":1110},[502,1250,1157],{"class":504},[502,1252,1253],{"class":508}," { stats: ",[502,1255,1256],{"class":504},"await",[502,1258,1259],{"class":508}," res.",[502,1261,1262],{"class":942},"json",[502,1264,1265],{"class":508},"() };\n",[502,1267,1268],{"class":1033,"line":1125},[502,1269,1166],{"class":508},[452,1271,1272,1273,1275,1276,1278,1279,1281,1282,1284],{},"The ",[461,1274,1000],{}," export is a universal variant: absolute paths (starting with ",[461,1277,443],{},") are handled internally via ",[461,1280,990],{},", everything else falls back to global ",[461,1283,1000],{},":",[1025,1286,1288],{"className":499,"code":1287,"language":500,"meta":5,"style":5},"import { fetch } from \"nitro\";\n\nawait fetch(\"\u002Fapi\u002Fhello\"); \u002F\u002F handled by your own server\nawait fetch(\"https:\u002F\u002Fexample.com\"); \u002F\u002F regular network fetch\n",[461,1289,1290,1303,1307,1324],{"__ignoreMap":5},[502,1291,1292,1294,1297,1299,1301],{"class":1033,"line":1034},[502,1293,505],{"class":504},[502,1295,1296],{"class":508}," { fetch } ",[502,1298,512],{"class":504},[502,1300,516],{"class":515},[502,1302,1046],{"class":508},[502,1304,1305],{"class":1033,"line":1049},[502,1306,1053],{"emptyLinePlaceholder":1052},[502,1308,1309,1311,1314,1316,1319,1321],{"class":1033,"line":1056},[502,1310,1256],{"class":504},[502,1312,1313],{"class":942}," fetch",[502,1315,946],{"class":508},[502,1317,1318],{"class":515},"\"\u002Fapi\u002Fhello\"",[502,1320,1242],{"class":508},[502,1322,1323],{"class":1245},"\u002F\u002F handled by your own server\n",[502,1325,1326,1328,1330,1332,1335,1337],{"class":1033,"line":1084},[502,1327,1256],{"class":504},[502,1329,1313],{"class":942},[502,1331,946],{"class":508},[502,1333,1334],{"class":515},"\"https:\u002F\u002Fexample.com\"",[502,1336,1242],{"class":508},[502,1338,1339],{"class":1245},"\u002F\u002F regular network fetch\n",[1168,1341,1343],{"id":1342},"error-handler","Error handler",[452,1345,1346,1347,1353],{},"Point the ",[831,1348,1349,1352],{"href":888},[461,1350,1351],{},"errorHandler"," config"," to a file that exports a custom error handler:",[1025,1355,1358],{"className":499,"code":1356,"filename":1357,"language":500,"meta":5,"style":5},"import { defineErrorHandler } from \"nitro\";\n\nexport default defineErrorHandler((error, event) => {\n  return new Response(`[custom error] ${error.message}`, {\n    status: error.status,\n    headers: { \"Content-Type\": \"text\u002Fplain\" },\n  });\n});\n","error.ts",[461,1359,1360,1372,1376,1400,1427,1432,1449,1454],{"__ignoreMap":5},[502,1361,1362,1364,1366,1368,1370],{"class":1033,"line":1034},[502,1363,505],{"class":504},[502,1365,639],{"class":508},[502,1367,512],{"class":504},[502,1369,516],{"class":515},[502,1371,1046],{"class":508},[502,1373,1374],{"class":1033,"line":1049},[502,1375,1053],{"emptyLinePlaceholder":1052},[502,1377,1378,1380,1382,1385,1387,1390,1392,1394,1396,1398],{"class":1033,"line":1056},[502,1379,1059],{"class":504},[502,1381,1062],{"class":504},[502,1383,1384],{"class":942}," defineErrorHandler",[502,1386,1068],{"class":508},[502,1388,1389],{"class":1071},"error",[502,1391,1016],{"class":508},[502,1393,1072],{"class":1071},[502,1395,1075],{"class":508},[502,1397,1078],{"class":504},[502,1399,1081],{"class":508},[502,1401,1402,1404,1406,1409,1411,1414,1416,1418,1421,1424],{"class":1033,"line":1084},[502,1403,1157],{"class":504},[502,1405,939],{"class":504},[502,1407,1408],{"class":942}," Response",[502,1410,946],{"class":508},[502,1412,1413],{"class":515},"`[custom error] ${",[502,1415,1389],{"class":508},[502,1417,834],{"class":515},[502,1419,1420],{"class":508},"message",[502,1422,1423],{"class":515},"}`",[502,1425,1426],{"class":508},", {\n",[502,1428,1429],{"class":1033,"line":1110},[502,1430,1431],{"class":508},"    status: error.status,\n",[502,1433,1434,1437,1440,1443,1446],{"class":1033,"line":1125},[502,1435,1436],{"class":508},"    headers: { ",[502,1438,1439],{"class":515},"\"Content-Type\"",[502,1441,1442],{"class":508},": ",[502,1444,1445],{"class":515},"\"text\u002Fplain\"",[502,1447,1448],{"class":508}," },\n",[502,1450,1451],{"class":1033,"line":1148},[502,1452,1453],{"class":508},"  });\n",[502,1455,1456],{"class":1033,"line":1154},[502,1457,1166],{"class":508},[1168,1459,1461],{"id":1460},"runtime-plugins","Runtime plugins",[452,1463,1464,1465,1284],{},"Plugins run once on server startup and can hook into the ",[831,1466,1467],{"href":44},"runtime lifecycle",[1025,1469,1472],{"className":499,"code":1470,"filename":1471,"language":500,"meta":5,"style":5},"import { definePlugin } from \"nitro\";\n\nexport default definePlugin((nitroApp) => {\n  nitroApp.hooks.hook(\"request\", (event) => {\n    console.log(\"request:\", event.url.pathname);\n  });\n});\n","server\u002Fplugins\u002Flog.ts",[461,1473,1474,1486,1490,1510,1534,1550,1554],{"__ignoreMap":5},[502,1475,1476,1478,1480,1482,1484],{"class":1033,"line":1034},[502,1477,505],{"class":504},[502,1479,621],{"class":508},[502,1481,512],{"class":504},[502,1483,516],{"class":515},[502,1485,1046],{"class":508},[502,1487,1488],{"class":1033,"line":1049},[502,1489,1053],{"emptyLinePlaceholder":1052},[502,1491,1492,1494,1496,1499,1501,1504,1506,1508],{"class":1033,"line":1056},[502,1493,1059],{"class":504},[502,1495,1062],{"class":504},[502,1497,1498],{"class":942}," definePlugin",[502,1500,1068],{"class":508},[502,1502,1503],{"class":1071},"nitroApp",[502,1505,1075],{"class":508},[502,1507,1078],{"class":504},[502,1509,1081],{"class":508},[502,1511,1512,1515,1518,1520,1523,1526,1528,1530,1532],{"class":1033,"line":1084},[502,1513,1514],{"class":508},"  nitroApp.hooks.",[502,1516,1517],{"class":942},"hook",[502,1519,946],{"class":508},[502,1521,1522],{"class":515},"\"request\"",[502,1524,1525],{"class":508},", (",[502,1527,1072],{"class":1071},[502,1529,1075],{"class":508},[502,1531,1078],{"class":504},[502,1533,1081],{"class":508},[502,1535,1536,1539,1542,1544,1547],{"class":1033,"line":1110},[502,1537,1538],{"class":508},"    console.",[502,1540,1541],{"class":942},"log",[502,1543,946],{"class":508},[502,1545,1546],{"class":515},"\"request:\"",[502,1548,1549],{"class":508},", event.url.pathname);\n",[502,1551,1552],{"class":1033,"line":1125},[502,1553,1453],{"class":508},[502,1555,1556],{"class":1033,"line":1148},[502,1557,1166],{"class":508},[452,1559,1560,1561,1564],{},"See the ",[831,1562,1563],{"href":54},"plugins guide"," for more.",[466,1566,1568],{"id":1567},"nitroh3",[461,1569,1570],{},"nitro\u002Fh3",[452,1572,1573,1574,1580,1581,1016,1584,1016,1587,1016,1590,1016,1593,1016,1596,1599],{},"Re-exports all ",[831,1575,1579],{"href":1576,"rel":1577},"https:\u002F\u002Fh3.dev",[1578],"nofollow","H3 v2"," utilities: ",[461,1582,1583],{},"readBody",[461,1585,1586],{},"getQuery",[461,1588,1589],{},"getCookie",[461,1591,1592],{},"setCookie",[461,1594,1595],{},"proxy",[461,1597,1598],{},"redirect",", and many more.",[1025,1601,1604],{"className":499,"code":1602,"filename":1603,"language":500,"meta":5,"style":5},"import { defineHandler } from \"nitro\";\nimport { readBody, getCookie } from \"nitro\u002Fh3\";\n\nexport default defineHandler(async (event) => {\n  const body = await readBody(event);\n  const session = getCookie(event, \"session\");\n  return { body, session };\n});\n","server\u002Froutes\u002Fform.post.ts",[461,1605,1606,1618,1631,1635,1657,1674,1694,1701],{"__ignoreMap":5},[502,1607,1608,1610,1612,1614,1616],{"class":1033,"line":1034},[502,1609,505],{"class":504},[502,1611,509],{"class":508},[502,1613,512],{"class":504},[502,1615,516],{"class":515},[502,1617,1046],{"class":508},[502,1619,1620,1622,1625,1627,1629],{"class":1033,"line":1049},[502,1621,505],{"class":504},[502,1623,1624],{"class":508}," { readBody, getCookie } ",[502,1626,512],{"class":504},[502,1628,571],{"class":515},[502,1630,1046],{"class":508},[502,1632,1633],{"class":1033,"line":1056},[502,1634,1053],{"emptyLinePlaceholder":1052},[502,1636,1637,1639,1641,1643,1645,1647,1649,1651,1653,1655],{"class":1033,"line":1084},[502,1638,1059],{"class":504},[502,1640,1062],{"class":504},[502,1642,1065],{"class":942},[502,1644,946],{"class":508},[502,1646,1212],{"class":504},[502,1648,1116],{"class":508},[502,1650,1072],{"class":1071},[502,1652,1075],{"class":508},[502,1654,1078],{"class":504},[502,1656,1081],{"class":508},[502,1658,1659,1661,1664,1666,1668,1671],{"class":1033,"line":1110},[502,1660,1087],{"class":504},[502,1662,1663],{"class":955}," body",[502,1665,1093],{"class":504},[502,1667,1231],{"class":504},[502,1669,1670],{"class":942}," readBody",[502,1672,1673],{"class":508},"(event);\n",[502,1675,1676,1678,1681,1683,1686,1689,1692],{"class":1033,"line":1125},[502,1677,1087],{"class":504},[502,1679,1680],{"class":955}," session",[502,1682,1093],{"class":504},[502,1684,1685],{"class":942}," getCookie",[502,1687,1688],{"class":508},"(event, ",[502,1690,1691],{"class":515},"\"session\"",[502,1693,1107],{"class":508},[502,1695,1696,1698],{"class":1033,"line":1148},[502,1697,1157],{"class":504},[502,1699,1700],{"class":508}," { body, session };\n",[502,1702,1703],{"class":1033,"line":1154},[502,1704,1166],{"class":508},[1706,1707,1708],"note",{},[452,1709,1560,1710,1715],{},[831,1711,1714],{"href":1712,"rel":1713},"https:\u002F\u002Fh3.dev\u002Futils",[1578],"H3 utilities documentation"," for the full list.",[466,1717,1719],{"id":1718},"nitrocache",[461,1720,1721],{},"nitro\u002Fcache",[471,1723,1724,1732],{},[474,1725,1726],{},[477,1727,1728,1730],{},[480,1729,814],{},[480,1731,817],{},[487,1733,1734,1744],{},[477,1735,1736,1741],{},[492,1737,1738],{},[461,1739,1740],{},"defineCachedHandler",[492,1742,1743],{},"Wrap an event handler with caching.",[477,1745,1746,1751],{},[492,1747,1748],{},[461,1749,1750],{},"defineCachedFunction",[492,1752,1753],{},"Cache the result of any (async) function.",[1025,1755,1757],{"className":499,"code":1756,"language":500,"meta":5,"style":5},"import { defineCachedHandler } from \"nitro\u002Fcache\";\n\nexport default defineCachedHandler(() => `Generated at ${new Date().toISOString()}`, {\n  maxAge: 60,\n});\n",[461,1758,1759,1772,1776,1812,1823],{"__ignoreMap":5},[502,1760,1761,1763,1766,1768,1770],{"class":1033,"line":1034},[502,1762,505],{"class":504},[502,1764,1765],{"class":508}," { defineCachedHandler } ",[502,1767,512],{"class":504},[502,1769,662],{"class":515},[502,1771,1046],{"class":508},[502,1773,1774],{"class":1033,"line":1049},[502,1775,1053],{"emptyLinePlaceholder":1052},[502,1777,1778,1780,1782,1785,1788,1790,1793,1796,1799,1802,1805,1808,1810],{"class":1033,"line":1056},[502,1779,1059],{"class":504},[502,1781,1062],{"class":504},[502,1783,1784],{"class":942}," defineCachedHandler",[502,1786,1787],{"class":508},"(() ",[502,1789,1078],{"class":504},[502,1791,1792],{"class":515}," `Generated at ${",[502,1794,1795],{"class":504},"new",[502,1797,1798],{"class":942}," Date",[502,1800,1801],{"class":515},"().",[502,1803,1804],{"class":942},"toISOString",[502,1806,1807],{"class":515},"()",[502,1809,1423],{"class":515},[502,1811,1426],{"class":508},[502,1813,1814,1817,1820],{"class":1033,"line":1084},[502,1815,1816],{"class":508},"  maxAge: ",[502,1818,1819],{"class":955},"60",[502,1821,1822],{"class":508},",\n",[502,1824,1825],{"class":1033,"line":1110},[502,1826,1166],{"class":508},[452,1828,1560,1829,1832],{},[831,1830,1831],{"href":104},"cache guide"," for options, cache keys, and invalidation.",[466,1834,1836],{"id":1835},"nitrostorage",[461,1837,1838],{},"nitro\u002Fstorage",[471,1840,1841,1849],{},[474,1842,1843],{},[477,1844,1845,1847],{},[480,1846,814],{},[480,1848,817],{},[487,1850,1851],{},[477,1852,1853,1858],{},[492,1854,1855],{},[461,1856,1857],{},"useStorage",[492,1859,1860,1861,1864,1865,1876],{},"Access the key-value ",[831,1862,1863],{"href":109},"storage layer",", optionally scoped to a base (e.g. ",[461,1866,1867,1869,1871,1874],{"className":499,"language":500,"style":5},[502,1868,1857],{"class":942},[502,1870,946],{"class":508},[502,1872,1873],{"class":515},"\"data\"",[502,1875,766],{"class":508},").",[1025,1878,1880],{"className":499,"code":1879,"language":500,"meta":5,"style":5},"import { useStorage } from \"nitro\u002Fstorage\";\n\nawait useStorage(\"data\").set(\"visits\", 42);\n",[461,1881,1882,1894,1898],{"__ignoreMap":5},[502,1883,1884,1886,1888,1890,1892],{"class":1033,"line":1034},[502,1885,505],{"class":504},[502,1887,676],{"class":508},[502,1889,512],{"class":504},[502,1891,681],{"class":515},[502,1893,1046],{"class":508},[502,1895,1896],{"class":1033,"line":1049},[502,1897,1053],{"emptyLinePlaceholder":1052},[502,1899,1900,1902,1905,1907,1909,1911,1914,1916,1919,1921,1924],{"class":1033,"line":1056},[502,1901,1256],{"class":504},[502,1903,1904],{"class":942}," useStorage",[502,1906,946],{"class":508},[502,1908,1873],{"class":515},[502,1910,1876],{"class":508},[502,1912,1913],{"class":942},"set",[502,1915,946],{"class":508},[502,1917,1918],{"class":515},"\"visits\"",[502,1920,1016],{"class":508},[502,1922,1923],{"class":955},"42",[502,1925,1107],{"class":508},[452,1927,1560,1928,1931],{},[831,1929,1930],{"href":109},"KV storage guide"," for mountpoints and drivers.",[466,1933,1935],{"id":1934},"nitrodatabase",[461,1936,1937],{},"nitro\u002Fdatabase",[471,1939,1940,1948],{},[474,1941,1942],{},[477,1943,1944,1946],{},[480,1945,814],{},[480,1947,817],{},[487,1949,1950],{},[477,1951,1952,1957],{},[492,1953,1954],{},[461,1955,1956],{},"useDatabase",[492,1958,1959,1960,1963,1964,1970,1971,1876],{},"Access a configured SQL ",[831,1961,1962],{"href":39},"database"," connection (default: ",[461,1965,1966,1968],{"className":499,"language":500,"style":5},[502,1967,1956],{"class":942},[502,1969,1807],{"class":508},", named: ",[461,1972,1973,1975,1977,1980],{"className":499,"language":500,"style":5},[502,1974,1956],{"class":942},[502,1976,946],{"class":508},[502,1978,1979],{"class":515},"\"users\"",[502,1981,766],{"class":508},[1025,1983,1985],{"className":499,"code":1984,"language":500,"meta":5,"style":5},"import { useDatabase } from \"nitro\u002Fdatabase\";\n\nconst db = useDatabase();\nconst { rows } = await db.sql`SELECT * FROM users`;\n",[461,1986,1987,1999,2003,2019],{"__ignoreMap":5},[502,1988,1989,1991,1993,1995,1997],{"class":1033,"line":1034},[502,1990,505],{"class":504},[502,1992,695],{"class":508},[502,1994,512],{"class":504},[502,1996,700],{"class":515},[502,1998,1046],{"class":508},[502,2000,2001],{"class":1033,"line":1049},[502,2002,1053],{"emptyLinePlaceholder":1052},[502,2004,2005,2008,2011,2013,2016],{"class":1033,"line":1056},[502,2006,2007],{"class":504},"const",[502,2009,2010],{"class":955}," db",[502,2012,1093],{"class":504},[502,2014,2015],{"class":942}," useDatabase",[502,2017,2018],{"class":508},"();\n",[502,2020,2021,2023,2026,2029,2032,2035,2037,2040,2043,2046],{"class":1033,"line":1084},[502,2022,2007],{"class":504},[502,2024,2025],{"class":508}," { ",[502,2027,2028],{"class":955},"rows",[502,2030,2031],{"class":508}," } ",[502,2033,2034],{"class":504},"=",[502,2036,1231],{"class":504},[502,2038,2039],{"class":508}," db.",[502,2041,2042],{"class":942},"sql",[502,2044,2045],{"class":515},"`SELECT * FROM users`",[502,2047,1046],{"class":508},[452,2049,1560,2050,2053],{},[831,2051,2052],{"href":39},"database guide"," for connectors and configuration.",[466,2055,2057],{"id":2056},"nitroruntime-config",[461,2058,2059],{},"nitro\u002Fruntime-config",[471,2061,2062,2070],{},[474,2063,2064],{},[477,2065,2066,2068],{},[480,2067,814],{},[480,2069,817],{},[487,2071,2072],{},[477,2073,2074,2079],{},[492,2075,2076],{},[461,2077,2078],{},"useRuntimeConfig",[492,2080,2081,2082,2086,2087,2090],{},"Access ",[831,2083,2085],{"href":2084},"\u002Fdocs\u002Fconfiguration#runtime-configuration","runtime configuration",", overridable with ",[461,2088,2089],{},"NITRO_*"," environment variables.",[1025,2092,2094],{"className":499,"code":2093,"language":500,"meta":5,"style":5},"import { useRuntimeConfig } from \"nitro\u002Fruntime-config\";\n\nconst { apiToken } = useRuntimeConfig();\n",[461,2095,2096,2108,2112],{"__ignoreMap":5},[502,2097,2098,2100,2102,2104,2106],{"class":1033,"line":1034},[502,2099,505],{"class":504},[502,2101,714],{"class":508},[502,2103,512],{"class":504},[502,2105,719],{"class":515},[502,2107,1046],{"class":508},[502,2109,2110],{"class":1033,"line":1049},[502,2111,1053],{"emptyLinePlaceholder":1052},[502,2113,2114,2116,2118,2121,2123,2125,2128],{"class":1033,"line":1056},[502,2115,2007],{"class":504},[502,2117,2025],{"class":508},[502,2119,2120],{"class":955},"apiToken",[502,2122,2031],{"class":508},[502,2124,2034],{"class":504},[502,2126,2127],{"class":942}," useRuntimeConfig",[502,2129,2018],{"class":508},[466,2131,2133],{"id":2132},"nitrotask",[461,2134,2135],{},"nitro\u002Ftask",[471,2137,2138,2146],{},[474,2139,2140],{},[477,2141,2142,2144],{},[480,2143,814],{},[480,2145,817],{},[487,2147,2148,2165],{},[477,2149,2150,2155],{},[492,2151,2152],{},[461,2153,2154],{},"defineTask",[492,2156,844,2157,2160,2161,2164],{},[831,2158,2159],{"href":64},"task"," in a ",[461,2162,2163],{},"server\u002Ftasks\u002F"," file.",[477,2166,2167,2172],{},[492,2168,2169],{},[461,2170,2171],{},"runTask",[492,2173,2174],{},"Run a task by name from anywhere in your server code.",[1025,2176,2178],{"className":499,"code":2177,"language":500,"meta":5,"style":5},"import { runTask } from \"nitro\u002Ftask\";\n\nconst { result } = await runTask(\"db:migrate\", { payload: { force: true } });\n",[461,2179,2180,2193,2197],{"__ignoreMap":5},[502,2181,2182,2184,2187,2189,2191],{"class":1033,"line":1034},[502,2183,505],{"class":504},[502,2185,2186],{"class":508}," { runTask } ",[502,2188,512],{"class":504},[502,2190,738],{"class":515},[502,2192,1046],{"class":508},[502,2194,2195],{"class":1033,"line":1049},[502,2196,1053],{"emptyLinePlaceholder":1052},[502,2198,2199,2201,2203,2206,2208,2210,2212,2215,2217,2220,2223,2226],{"class":1033,"line":1056},[502,2200,2007],{"class":504},[502,2202,2025],{"class":508},[502,2204,2205],{"class":955},"result",[502,2207,2031],{"class":508},[502,2209,2034],{"class":504},[502,2211,1231],{"class":504},[502,2213,2214],{"class":942}," runTask",[502,2216,946],{"class":508},[502,2218,2219],{"class":515},"\"db:migrate\"",[502,2221,2222],{"class":508},", { payload: { force: ",[502,2224,2225],{"class":955},"true",[502,2227,2228],{"class":508}," } });\n",[452,2230,1560,2231,2234,2235,2238],{},[831,2232,2233],{"href":64},"tasks guide"," — tasks are experimental and require the ",[461,2236,2237],{},"experimental.tasks"," flag.",[466,2240,2242],{"id":2241},"nitroapp",[461,2243,2244],{},"nitro\u002Fapp",[452,2246,2247],{},"Lower-level access to the running Nitro app.",[471,2249,2250,2258],{},[474,2251,2252],{},[477,2253,2254,2256],{},[480,2255,814],{},[480,2257,817],{},[487,2259,2260,2279,2294,2325],{},[477,2261,2262,2267],{},[492,2263,2264],{},[461,2265,2266],{},"useNitroApp",[492,2268,2269,2270,1116,2273,1016,2275,2278],{},"Access the current ",[831,2271,2272],{"href":44},"Nitro app instance",[461,2274,1000],{},[461,2276,2277],{},"hooks",", ...).",[477,2280,2281,2286],{},[492,2282,2283],{},[461,2284,2285],{},"useNitroHooks",[492,2287,2288,2289,2293],{},"Access the ",[831,2290,2292],{"href":2291},"\u002Fdocs\u002Fplugins#nitro-runtime-hooks","runtime hooks"," instance to register hooks outside of plugins.",[477,2295,2296,2301],{},[492,2297,2298],{},[461,2299,2300],{},"getRouteRules",[492,2302,2303,2304,2308,2309,834],{},"Get the resolved ",[831,2305,2307],{"href":2306},"\u002Fdocs\u002Frouting#route-rules","route rules"," for a method and pathname: ",[461,2310,2311,2313,2315,2318,2320,2323],{"className":499,"language":500,"style":5},[502,2312,2300],{"class":942},[502,2314,946],{"class":508},[502,2316,2317],{"class":515},"\"GET\"",[502,2319,1016],{"class":508},[502,2321,2322],{"class":515},"\"\u002Fblog\u002Fpost\"",[502,2324,766],{"class":508},[477,2326,2327,2333],{},[492,2328,2329,1016,2331],{},[461,2330,990],{},[461,2332,1000],{},[492,2334,2335,2336,834],{},"Same as the ",[831,2337,2339],{"href":2338},"#internal-fetch","main entry exports",[1025,2341,2343],{"className":499,"code":2342,"language":500,"meta":5,"style":5},"import { useNitroHooks } from \"nitro\u002Fapp\";\n\nuseNitroHooks().hook(\"error\", (error) => {\n  console.error(error);\n});\n",[461,2344,2345,2358,2362,2385,2395],{"__ignoreMap":5},[502,2346,2347,2349,2352,2354,2356],{"class":1033,"line":1034},[502,2348,505],{"class":504},[502,2350,2351],{"class":508}," { useNitroHooks } ",[502,2353,512],{"class":504},[502,2355,757],{"class":515},[502,2357,1046],{"class":508},[502,2359,2360],{"class":1033,"line":1049},[502,2361,1053],{"emptyLinePlaceholder":1052},[502,2363,2364,2366,2368,2370,2372,2375,2377,2379,2381,2383],{"class":1033,"line":1056},[502,2365,2285],{"class":942},[502,2367,1801],{"class":508},[502,2369,1517],{"class":942},[502,2371,946],{"class":508},[502,2373,2374],{"class":515},"\"error\"",[502,2376,1525],{"class":508},[502,2378,1389],{"class":1071},[502,2380,1075],{"class":508},[502,2382,1078],{"class":504},[502,2384,1081],{"class":508},[502,2386,2387,2390,2392],{"class":1033,"line":1084},[502,2388,2389],{"class":508},"  console.",[502,2391,1389],{"class":942},[502,2393,2394],{"class":508},"(error);\n",[502,2396,2397],{"class":1033,"line":1110},[502,2398,1166],{"class":508},[466,2400,2402],{"id":2401},"nitrocontext",[461,2403,2404],{},"nitro\u002Fcontext",[471,2406,2407,2415],{},[474,2408,2409],{},[477,2410,2411,2413],{},[480,2412,814],{},[480,2414,817],{},[487,2416,2417],{},[477,2418,2419,2424],{},[492,2420,2421],{},[461,2422,2423],{},"useRequest",[492,2425,2426,2427,2429],{},"Access the current request from anywhere within the request lifecycle, without passing ",[461,2428,1072],{}," around.",[1025,2431,2433],{"className":499,"code":2432,"language":500,"meta":5,"style":5},"import { useRequest } from \"nitro\u002Fcontext\";\n\nconst request = useRequest();\n",[461,2434,2435,2449,2453],{"__ignoreMap":5},[502,2436,2437,2439,2442,2444,2447],{"class":1033,"line":1034},[502,2438,505],{"class":504},[502,2440,2441],{"class":508}," { useRequest } ",[502,2443,512],{"class":504},[502,2445,2446],{"class":515}," \"nitro\u002Fcontext\"",[502,2448,1046],{"class":508},[502,2450,2451],{"class":1033,"line":1049},[502,2452,1053],{"emptyLinePlaceholder":1052},[502,2454,2455,2457,2460,2462,2465],{"class":1033,"line":1056},[502,2456,2007],{"class":504},[502,2458,2459],{"class":955}," request",[502,2461,1093],{"class":504},[502,2463,2464],{"class":942}," useRequest",[502,2466,2018],{"class":508},[2468,2469,2470],"warning",{},[452,2471,2472,2474,2475,2482,2483,2486],{},[461,2473,2423],{}," is experimental: it requires the ",[461,2476,2477,2480],{"className":499,"language":500,"style":5},[502,2478,2479],{"class":508},"experimental.asyncContext: ",[502,2481,2225],{"class":955}," config flag and only works on runtimes with ",[461,2484,2485],{},"AsyncLocalStorage"," support (Node.js and compatible runtimes).",[466,2488,2490],{"id":2489},"nitroconfig",[461,2491,2492],{},"nitro\u002Fconfig",[471,2494,2495,2503],{},[474,2496,2497],{},[477,2498,2499,2501],{},[480,2500,814],{},[480,2502,817],{},[487,2504,2505],{},[477,2506,2507,2511],{},[492,2508,2509],{},[461,2510,897],{},[492,2512,2335,2513,2515,2516,2518,2519,1876],{},[461,2514,897],{}," export from the main ",[461,2517,463],{}," entry (also aliased as ",[461,2520,2521],{},"defineNitroConfig",[452,2523,2524,2525,2527,2528,2531],{},"Prefer importing ",[461,2526,897],{}," from ",[461,2529,2530],{},"\"nitro\""," directly.",[466,2533,2535],{"id":2534},"nitrotypes",[461,2536,2537],{},"nitro\u002Ftypes",[452,2539,2540,2541,1016,2544,1016,2547,1016,2550,1016,2553,1016,2556,1016,2559,1020,2562,834],{},"Type-only entry with all public Nitro types, including ",[461,2542,2543],{},"NitroConfig",[461,2545,2546],{},"Nitro",[461,2548,2549],{},"NitroApp",[461,2551,2552],{},"NitroAppPlugin",[461,2554,2555],{},"NitroErrorHandler",[461,2557,2558],{},"NitroRuntimeConfig",[461,2560,2561],{},"NitroRuntimeHooks",[461,2563,2564],{},"Task",[1025,2566,2568],{"className":499,"code":2567,"language":500,"meta":5,"style":5},"import type { NitroRuntimeConfig } from \"nitro\u002Ftypes\";\n",[461,2569,2570],{"__ignoreMap":5},[502,2571,2572,2574,2577,2580,2582,2585],{"class":1033,"line":1034},[502,2573,505],{"class":504},[502,2575,2576],{"class":504}," type",[502,2578,2579],{"class":508}," { NitroRuntimeConfig } ",[502,2581,512],{"class":504},[502,2583,2584],{"class":515}," \"nitro\u002Ftypes\"",[502,2586,1046],{"class":508},[466,2588,2590],{"id":2589},"nitrovite",[461,2591,2592],{},"nitro\u002Fvite",[471,2594,2595,2603],{},[474,2596,2597],{},[477,2598,2599,2601],{},[480,2600,814],{},[480,2602,817],{},[487,2604,2605],{},[477,2606,2607,2611],{},[492,2608,2609],{},[461,2610,463],{},[492,2612,2613,2614,834],{},"The Nitro ",[831,2615,2616],{"href":89},"Vite plugin",[1025,2618,2621],{"className":499,"code":2619,"filename":2620,"language":500,"meta":5,"style":5},"import { defineConfig } from \"vite\";\nimport { nitro } from \"nitro\u002Fvite\";\n\nexport default defineConfig({\n  plugins: [nitro()],\n});\n","vite.config.ts",[461,2622,2623,2636,2648,2652,2664,2674],{"__ignoreMap":5},[502,2624,2625,2627,2629,2631,2634],{"class":1033,"line":1034},[502,2626,505],{"class":504},[502,2628,775],{"class":508},[502,2630,512],{"class":504},[502,2632,2633],{"class":515}," \"vite\"",[502,2635,1046],{"class":508},[502,2637,2638,2640,2642,2644,2646],{"class":1033,"line":1049},[502,2639,505],{"class":504},[502,2641,793],{"class":508},[502,2643,512],{"class":504},[502,2645,798],{"class":515},[502,2647,1046],{"class":508},[502,2649,2650],{"class":1033,"line":1056},[502,2651,1053],{"emptyLinePlaceholder":1052},[502,2653,2654,2656,2658,2661],{"class":1033,"line":1084},[502,2655,1059],{"class":504},[502,2657,1062],{"class":504},[502,2659,2660],{"class":942}," defineConfig",[502,2662,2663],{"class":508},"({\n",[502,2665,2666,2669,2671],{"class":1033,"line":1110},[502,2667,2668],{"class":508},"  plugins: [",[502,2670,463],{"class":942},[502,2672,2673],{"class":508},"()],\n",[502,2675,2676],{"class":1033,"line":1125},[502,2677,1166],{"class":508},[452,2679,1272,2680,2683,2684,2687,2688,834],{},[461,2681,2682],{},"NitroPluginConfig"," and ",[461,2685,2686],{},"ServiceConfig"," types are also exported. See the ",[831,2689,2690],{"href":89},"Vite integration guide",[466,2692,2694],{"id":2693},"other-entries","Other entries",[452,2696,2697,2698,2701,2702,1016,2705,1016,2708,2711],{},"The remaining subpaths (",[461,2699,2700],{},"nitro\u002Fmeta"," for package version and paths, ",[461,2703,2704],{},"nitro\u002Fbuilder",[461,2706,2707],{},"nitro\u002Fvite\u002Fruntime",[461,2709,2710],{},"nitro\u002Ftsconfig",") are internal and rarely needed in application code.",[2713,2714,2715],"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 .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 .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 pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":5,"searchDepth":1049,"depth":1049,"links":2717},[2718,2719,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735],{"id":468,"depth":1049,"text":469},{"id":463,"depth":1049,"text":463,"children":2720},[2721,2722,2723],{"id":1170,"depth":1056,"text":1171},{"id":1342,"depth":1056,"text":1343},{"id":1460,"depth":1056,"text":1461},{"id":1567,"depth":1049,"text":1570},{"id":1718,"depth":1049,"text":1721},{"id":1835,"depth":1049,"text":1838},{"id":1934,"depth":1049,"text":1937},{"id":2056,"depth":1049,"text":2059},{"id":2132,"depth":1049,"text":2135},{"id":2241,"depth":1049,"text":2244},{"id":2401,"depth":1049,"text":2404},{"id":2489,"depth":1049,"text":2492},{"id":2534,"depth":1049,"text":2537},{"id":2589,"depth":1049,"text":2592},{"id":2693,"depth":1049,"text":2694},"A reference of everything you can import from nitro and its subpaths in your server code.","md",{"icon":96},{"title":93,"icon":96},{"title":447,"description":2736},"VAgJbKU8aWyoxfu0P6umxXRQwCcGq0V_mlTkokXZGH0",[2743,2745],{"title":88,"path":89,"stem":90,"description":2744,"icon":91,"children":-1},"Use Nitro as a Vite plugin to build full-stack applications, and choose the builder that bundles your server.",{"title":98,"path":99,"stem":100,"description":2746,"icon":101,"children":-1},"Nitro is TypeScript-first: write your config, handlers, and server code in TypeScript with zero setup.",1784019071989]