[{"data":1,"prerenderedAt":2251},["ShallowReactive",2],{"navigation":3,"-deploy-providers-vercel":445,"-deploy-providers-vercel-surround":2246},[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":245,"body":447,"description":2240,"extension":2241,"meta":2242,"navigation":2243,"path":246,"seo":2244,"stem":247,"__hash__":2245},"content\u002F2.deploy\u002F20.providers\u002Fvercel.md",{"type":448,"value":449,"toc":2214},"minimark",[450,462,467,479,484,487,520,528,533,541,545,556,560,563,579,673,683,725,729,745,754,762,915,932,936,949,1020,1024,1031,1054,1058,1064,1103,1115,1119,1123,1140,1237,1241,1245,1259,1263,1266,1277,1390,1394,1404,1534,1538,1544,1672,1676,1682,1805,1809,1831,1838,1842,1857,1861,1867,1928,1932,1935,1938,2030,2034,2037,2044,2121,2210],[451,452,453,457,458],"p",{},[454,455,456],"strong",{},"Preset:"," ",[459,460,461],"code",{},"vercel",[463,464],"read-more",{"title":465,"to":466},"Vercel Framework Support","https:\u002F\u002Fvercel.com\u002Fdocs\u002Fframeworks",[468,469,470],"note",{},[451,471,472,473,478],{},"Integration with this provider is possible with ",[474,475,477],"a",{"href":476},"\u002Fdeploy\u002F#zero-config-providers","zero configuration",".",[480,481,483],"h2",{"id":482},"getting-started","Getting started",[451,485,486],{},"Deploying to Vercel comes with the following features, among others:",[488,489,490,499,506,513],"ul",{},[491,492,493],"li",{},[474,494,498],{"href":495,"rel":496},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fdeployments\u002Fenvironments",[497],"nofollow","Preview deployments",[491,500,501],{},[474,502,505],{"href":503,"rel":504},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffluid-compute",[497],"Fluid compute",[491,507,508],{},[474,509,512],{"href":510,"rel":511},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fobservability",[497],"Observability",[491,514,515],{},[474,516,519],{"href":517,"rel":518},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fvercel-firewall",[497],"Vercel Firewall",[451,521,522,523,478],{},"Learn more in ",[474,524,527],{"href":525,"rel":526},"https:\u002F\u002Fvercel.com\u002Fdocs",[497],"the Vercel documentation",[529,530,532],"h3",{"id":531},"deploy-with-git","Deploy with Git",[451,534,535,536,478],{},"Vercel supports Nitro with zero configuration. ",[474,537,540],{"href":538,"rel":539},"https:\u002F\u002Fvercel.com\u002Fnew\u002Fclone?repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fvercel%2Ftree%2Fmain%2Fexamples%2Fnitro",[497],"Deploy Nitro to Vercel now",[480,542,544],{"id":543},"api-routes","API routes",[451,546,547,548,551,552,555],{},"Nitro's top-level ",[459,549,550],{},"\u002Fapi"," directory isn't compatible with Vercel. Use the ",[459,553,554],{},"routes\u002Fapi\u002F"," directory instead.",[480,557,559],{"id":558},"bun-runtime","Bun runtime",[463,561],{"title":245,"to":562},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffunctions\u002Fruntimes\u002Fbun",[451,564,565,566,570,571,574,575,578],{},"You can use ",[474,567,141],{"href":568,"rel":569},"https:\u002F\u002Fbun.com",[497]," instead of Node.js by specifying the runtime using the ",[459,572,573],{},"vercel.functions"," key inside ",[459,576,577],{},"nitro.config",":",[580,581,586],"pre",{"className":582,"code":583,"filename":584,"language":585,"meta":5,"style":5},"language-ts shiki shiki-themes github-light github-dark github-dark","import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  vercel: {\n    functions: {\n      runtime: \"bun1.x\"\n    }\n  }\n})\n","nitro.config.ts","ts",[459,587,588,611,618,634,640,646,655,661,667],{"__ignoreMap":5},[589,590,593,597,601,604,608],"span",{"class":591,"line":592},"line",1,[589,594,596],{"class":595},"so5gQ","import",[589,598,600],{"class":599},"slsVL"," { defineConfig } ",[589,602,603],{"class":595},"from",[589,605,607],{"class":606},"sfrk1"," \"nitro\"",[589,609,610],{"class":599},";\n",[589,612,614],{"class":591,"line":613},2,[589,615,617],{"emptyLinePlaceholder":616},true,"\n",[589,619,621,624,627,631],{"class":591,"line":620},3,[589,622,623],{"class":595},"export",[589,625,626],{"class":595}," default",[589,628,630],{"class":629},"shcOC"," defineConfig",[589,632,633],{"class":599},"({\n",[589,635,637],{"class":591,"line":636},4,[589,638,639],{"class":599},"  vercel: {\n",[589,641,643],{"class":591,"line":642},5,[589,644,645],{"class":599},"    functions: {\n",[589,647,649,652],{"class":591,"line":648},6,[589,650,651],{"class":599},"      runtime: ",[589,653,654],{"class":606},"\"bun1.x\"\n",[589,656,658],{"class":591,"line":657},7,[589,659,660],{"class":599},"    }\n",[589,662,664],{"class":591,"line":663},8,[589,665,666],{"class":599},"  }\n",[589,668,670],{"class":591,"line":669},9,[589,671,672],{"class":599},"})\n",[451,674,675,676,679,680,578],{},"Alternatively, Nitro also detects Bun automatically if you specify a ",[459,677,678],{},"bunVersion"," property in your ",[459,681,682],{},"vercel.json",[580,684,688],{"className":685,"code":686,"filename":682,"language":687,"meta":5,"style":5},"language-json shiki shiki-themes github-light github-dark github-dark","{\n  \"$schema\": \"https:\u002F\u002Fopenapi.vercel.sh\u002Fvercel.json\",\n  \"bunVersion\": \"1.x\"\n}\n","json",[459,689,690,695,710,720],{"__ignoreMap":5},[589,691,692],{"class":591,"line":592},[589,693,694],{"class":599},"{\n",[589,696,697,701,704,707],{"class":591,"line":613},[589,698,700],{"class":699},"suiK_","  \"$schema\"",[589,702,703],{"class":599},": ",[589,705,706],{"class":606},"\"https:\u002F\u002Fopenapi.vercel.sh\u002Fvercel.json\"",[589,708,709],{"class":599},",\n",[589,711,712,715,717],{"class":591,"line":620},[589,713,714],{"class":699},"  \"bunVersion\"",[589,716,703],{"class":599},[589,718,719],{"class":606},"\"1.x\"\n",[589,721,722],{"class":591,"line":636},[589,723,724],{"class":599},"}\n",[480,726,728],{"id":727},"per-route-function-configuration","Per-route function configuration",[451,730,731,732,735,736,741,742,744],{},"Use ",[459,733,734],{},"vercel.functionRules"," to override ",[474,737,740],{"href":738,"rel":739},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fbuild-output-api\u002Fprimitives#serverless-function-configuration",[497],"serverless function settings"," for specific routes. Each key is a route pattern and its value is a partial function configuration object that gets merged with the base ",[459,743,573],{}," config.",[468,746,747],{},[451,748,749,750,753],{},"Array properties (e.g., ",[459,751,752],{},"regions",") from route config replace the base config arrays rather than merging with them.",[451,755,756,757,478],{},"This is useful when certain routes need different resource limits, regions, or features like ",[474,758,761],{"href":759,"rel":760},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fqueues",[497],"Vercel Queues triggers",[580,763,765],{"className":582,"code":764,"filename":584,"language":585,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  vercel: {\n    functionRules: {\n      \"\u002Fapi\u002Fheavy-computation\": {\n        maxDuration: 800,\n        memory: 4096,\n      },\n      \"\u002Fapi\u002Fregional\": {\n        regions: [\"lhr1\", \"cdg1\"],\n      },\n      \"\u002Fapi\u002Fqueues\u002Fprocess-order\": {\n        experimentalTriggers: [{ type: \"queue\u002Fv2beta\", topic: \"orders\" }],\n      },\n    },\n  },\n});\n",[459,766,767,779,783,793,797,802,810,820,830,835,843,861,866,874,892,897,903,909],{"__ignoreMap":5},[589,768,769,771,773,775,777],{"class":591,"line":592},[589,770,596],{"class":595},[589,772,600],{"class":599},[589,774,603],{"class":595},[589,776,607],{"class":606},[589,778,610],{"class":599},[589,780,781],{"class":591,"line":613},[589,782,617],{"emptyLinePlaceholder":616},[589,784,785,787,789,791],{"class":591,"line":620},[589,786,623],{"class":595},[589,788,626],{"class":595},[589,790,630],{"class":629},[589,792,633],{"class":599},[589,794,795],{"class":591,"line":636},[589,796,639],{"class":599},[589,798,799],{"class":591,"line":642},[589,800,801],{"class":599},"    functionRules: {\n",[589,803,804,807],{"class":591,"line":648},[589,805,806],{"class":606},"      \"\u002Fapi\u002Fheavy-computation\"",[589,808,809],{"class":599},": {\n",[589,811,812,815,818],{"class":591,"line":657},[589,813,814],{"class":599},"        maxDuration: ",[589,816,817],{"class":699},"800",[589,819,709],{"class":599},[589,821,822,825,828],{"class":591,"line":663},[589,823,824],{"class":599},"        memory: ",[589,826,827],{"class":699},"4096",[589,829,709],{"class":599},[589,831,832],{"class":591,"line":669},[589,833,834],{"class":599},"      },\n",[589,836,838,841],{"class":591,"line":837},10,[589,839,840],{"class":606},"      \"\u002Fapi\u002Fregional\"",[589,842,809],{"class":599},[589,844,846,849,852,855,858],{"class":591,"line":845},11,[589,847,848],{"class":599},"        regions: [",[589,850,851],{"class":606},"\"lhr1\"",[589,853,854],{"class":599},", ",[589,856,857],{"class":606},"\"cdg1\"",[589,859,860],{"class":599},"],\n",[589,862,864],{"class":591,"line":863},12,[589,865,834],{"class":599},[589,867,869,872],{"class":591,"line":868},13,[589,870,871],{"class":606},"      \"\u002Fapi\u002Fqueues\u002Fprocess-order\"",[589,873,809],{"class":599},[589,875,877,880,883,886,889],{"class":591,"line":876},14,[589,878,879],{"class":599},"        experimentalTriggers: [{ type: ",[589,881,882],{"class":606},"\"queue\u002Fv2beta\"",[589,884,885],{"class":599},", topic: ",[589,887,888],{"class":606},"\"orders\"",[589,890,891],{"class":599}," }],\n",[589,893,895],{"class":591,"line":894},15,[589,896,834],{"class":599},[589,898,900],{"class":591,"line":899},16,[589,901,902],{"class":599},"    },\n",[589,904,906],{"class":591,"line":905},17,[589,907,908],{"class":599},"  },\n",[589,910,912],{"class":591,"line":911},18,[589,913,914],{"class":599},"});\n",[451,916,917,918,923,924,927,928,931],{},"Route patterns support wildcards via ",[474,919,922],{"href":920,"rel":921},"https:\u002F\u002Fgithub.com\u002Fh3js\u002Frou3",[497],"rou3"," matching (e.g., ",[459,925,926],{},"\u002Fapi\u002Fslow\u002F**"," matches all routes under ",[459,929,930],{},"\u002Fapi\u002Fslow\u002F",").",[480,933,935],{"id":934},"proxy-route-rules","Proxy route rules",[451,937,938,939,942,943,948],{},"Nitro automatically optimizes ",[459,940,941],{},"proxy"," route rules on Vercel by generating ",[474,944,947],{"href":945,"rel":946},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Frewrites",[497],"CDN-level rewrites"," at build time. This means matching requests are proxied at the edge without invoking a serverless function, reducing latency and cost.",[580,950,952],{"className":582,"code":951,"filename":584,"language":585,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  routeRules: {\n    \u002F\u002F Proxied at CDN level — no function invocation\n    \"\u002Fapi\u002F**\": {\n      proxy: \"https:\u002F\u002Fapi.example.com\u002F**\",\n    },\n  },\n});\n",[459,953,954,966,970,980,985,991,998,1008,1012,1016],{"__ignoreMap":5},[589,955,956,958,960,962,964],{"class":591,"line":592},[589,957,596],{"class":595},[589,959,600],{"class":599},[589,961,603],{"class":595},[589,963,607],{"class":606},[589,965,610],{"class":599},[589,967,968],{"class":591,"line":613},[589,969,617],{"emptyLinePlaceholder":616},[589,971,972,974,976,978],{"class":591,"line":620},[589,973,623],{"class":595},[589,975,626],{"class":595},[589,977,630],{"class":629},[589,979,633],{"class":599},[589,981,982],{"class":591,"line":636},[589,983,984],{"class":599},"  routeRules: {\n",[589,986,987],{"class":591,"line":642},[589,988,990],{"class":989},"sCsY4","    \u002F\u002F Proxied at CDN level — no function invocation\n",[589,992,993,996],{"class":591,"line":648},[589,994,995],{"class":606},"    \"\u002Fapi\u002F**\"",[589,997,809],{"class":599},[589,999,1000,1003,1006],{"class":591,"line":657},[589,1001,1002],{"class":599},"      proxy: ",[589,1004,1005],{"class":606},"\"https:\u002F\u002Fapi.example.com\u002F**\"",[589,1007,709],{"class":599},[589,1009,1010],{"class":591,"line":663},[589,1011,902],{"class":599},[589,1013,1014],{"class":591,"line":669},[589,1015,908],{"class":599},[589,1017,1018],{"class":591,"line":837},[589,1019,914],{"class":599},[529,1021,1023],{"id":1022},"when-cdn-rewrites-apply","When CDN rewrites apply",[451,1025,1026,1027,1030],{},"A proxy rule is offloaded to a Vercel CDN rewrite when ",[454,1028,1029],{},"all"," of the following are true:",[488,1032,1033,1047],{},[491,1034,1035,1036,1039,1040,1043,1044,931],{},"The target is an ",[454,1037,1038],{},"external URL"," (starts with ",[459,1041,1042],{},"http:\u002F\u002F"," or ",[459,1045,1046],{},"https:\u002F\u002F",[491,1048,1049,1050,1053],{},"No advanced ",[459,1051,1052],{},"ProxyOptions"," are set on the rule.",[529,1055,1057],{"id":1056},"fallback-to-runtime-proxy","Fallback to runtime proxy",[451,1059,1060,1061,1063],{},"When the proxy rule uses any of the following ",[459,1062,1052],{},", Nitro keeps it as a runtime proxy handled by the serverless function:",[488,1065,1066,1072,1082,1088,1097],{},[491,1067,1068,1071],{},[459,1069,1070],{},"headers"," — custom headers on the outgoing request to the upstream",[491,1073,1074,1077,1078,1081],{},[459,1075,1076],{},"forwardHeaders"," \u002F ",[459,1079,1080],{},"filterHeaders"," — header filtering",[491,1083,1084,1087],{},[459,1085,1086],{},"fetchOptions"," — custom fetch options",[491,1089,1090,1077,1093,1096],{},[459,1091,1092],{},"cookieDomainRewrite",[459,1094,1095],{},"cookiePathRewrite"," — cookie manipulation",[491,1098,1099,1102],{},[459,1100,1101],{},"onResponse"," — response callback",[468,1104,1105],{},[451,1106,1107,1108,1110,1111,1114],{},"Response headers defined on the route rule via the ",[459,1109,1070],{}," option are still applied to CDN-level rewrites. Only request-level ",[459,1112,1113],{},"ProxyOptions.headers"," (sent to the upstream) require a runtime proxy.",[480,1116,1118],{"id":1117},"scheduled-tasks-cron-jobs","Scheduled tasks (Cron Jobs)",[463,1120],{"title":1121,"to":1122},"Vercel Cron Jobs","https:\u002F\u002Fvercel.com\u002Fdocs\u002Fcron-jobs",[451,1124,1125,1126,1132,1133,1136,1137,1139],{},"Nitro automatically converts your ",[474,1127,1129],{"href":1128},"\u002Fdocs\u002Ftasks#scheduled-tasks",[459,1130,1131],{},"scheduledTasks"," configuration into ",[474,1134,1121],{"href":1122,"rel":1135},[497]," at build time. Define your schedules in your Nitro config and deploy — no manual ",[459,1138,682],{}," cron configuration required.",[580,1141,1143],{"className":582,"code":1142,"filename":584,"language":585,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  experimental: {\n    tasks: true\n  },\n  scheduledTasks: {\n    \u002F\u002F Run `cms:update` every hour\n    '0 * * * *': ['cms:update'],\n    \u002F\u002F Run `db:cleanup` every day at midnight\n    '0 0 * * *': ['db:cleanup']\n  }\n})\n",[459,1144,1145,1157,1161,1171,1176,1184,1188,1193,1198,1211,1216,1229,1233],{"__ignoreMap":5},[589,1146,1147,1149,1151,1153,1155],{"class":591,"line":592},[589,1148,596],{"class":595},[589,1150,600],{"class":599},[589,1152,603],{"class":595},[589,1154,607],{"class":606},[589,1156,610],{"class":599},[589,1158,1159],{"class":591,"line":613},[589,1160,617],{"emptyLinePlaceholder":616},[589,1162,1163,1165,1167,1169],{"class":591,"line":620},[589,1164,623],{"class":595},[589,1166,626],{"class":595},[589,1168,630],{"class":629},[589,1170,633],{"class":599},[589,1172,1173],{"class":591,"line":636},[589,1174,1175],{"class":599},"  experimental: {\n",[589,1177,1178,1181],{"class":591,"line":642},[589,1179,1180],{"class":599},"    tasks: ",[589,1182,1183],{"class":699},"true\n",[589,1185,1186],{"class":591,"line":648},[589,1187,908],{"class":599},[589,1189,1190],{"class":591,"line":657},[589,1191,1192],{"class":599},"  scheduledTasks: {\n",[589,1194,1195],{"class":591,"line":663},[589,1196,1197],{"class":989},"    \u002F\u002F Run `cms:update` every hour\n",[589,1199,1200,1203,1206,1209],{"class":591,"line":669},[589,1201,1202],{"class":606},"    '0 * * * *'",[589,1204,1205],{"class":599},": [",[589,1207,1208],{"class":606},"'cms:update'",[589,1210,860],{"class":599},[589,1212,1213],{"class":591,"line":837},[589,1214,1215],{"class":989},"    \u002F\u002F Run `db:cleanup` every day at midnight\n",[589,1217,1218,1221,1223,1226],{"class":591,"line":845},[589,1219,1220],{"class":606},"    '0 0 * * *'",[589,1222,1205],{"class":599},[589,1224,1225],{"class":606},"'db:cleanup'",[589,1227,1228],{"class":599},"]\n",[589,1230,1231],{"class":591,"line":863},[589,1232,666],{"class":599},[589,1234,1235],{"class":591,"line":868},[589,1236,672],{"class":599},[529,1238,1240],{"id":1239},"secure-cron-job-endpoints","Secure cron job endpoints",[463,1242],{"title":1243,"to":1244},"Securing cron jobs","https:\u002F\u002Fvercel.com\u002Fdocs\u002Fcron-jobs\u002Fmanage-cron-jobs#securing-cron-jobs",[451,1246,1247,1248,1251,1252,1254,1255,1258],{},"To prevent unauthorized access to the cron handler, set a ",[459,1249,1250],{},"CRON_SECRET"," environment variable in your Vercel project settings. When ",[459,1253,1250],{}," is set, Nitro validates the ",[459,1256,1257],{},"Authorization"," header on every cron invocation.",[480,1260,1262],{"id":1261},"queues","Queues",[463,1264],{"title":1265,"to":759},"Vercel Queues",[451,1267,1268,1269,1272,1273,1276],{},"Nitro integrates with ",[474,1270,1265],{"href":759,"rel":1271},[497]," to process messages asynchronously. Define your queue topics in the Nitro config and handle incoming messages with the ",[459,1274,1275],{},"vercel:queue"," runtime hook.",[580,1278,1280],{"className":582,"code":1279,"filename":584,"language":585,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  \u002F\u002F Standalone Nitro scans `serverDir` for routes and plugins\n  serverDir: \".\u002Fserver\",\n  vercel: {\n    queues: {\n      triggers: [\n        \u002F\u002F Only `topic` is required\n        { topic: \"notifications\" },\n        { topic: \"orders\", retryAfterSeconds: 60, initialDelaySeconds: 5 },\n      ],\n    },\n  },\n});\n",[459,1281,1282,1294,1298,1308,1313,1323,1327,1332,1337,1342,1353,1373,1378,1382,1386],{"__ignoreMap":5},[589,1283,1284,1286,1288,1290,1292],{"class":591,"line":592},[589,1285,596],{"class":595},[589,1287,600],{"class":599},[589,1289,603],{"class":595},[589,1291,607],{"class":606},[589,1293,610],{"class":599},[589,1295,1296],{"class":591,"line":613},[589,1297,617],{"emptyLinePlaceholder":616},[589,1299,1300,1302,1304,1306],{"class":591,"line":620},[589,1301,623],{"class":595},[589,1303,626],{"class":595},[589,1305,630],{"class":629},[589,1307,633],{"class":599},[589,1309,1310],{"class":591,"line":636},[589,1311,1312],{"class":989},"  \u002F\u002F Standalone Nitro scans `serverDir` for routes and plugins\n",[589,1314,1315,1318,1321],{"class":591,"line":642},[589,1316,1317],{"class":599},"  serverDir: ",[589,1319,1320],{"class":606},"\".\u002Fserver\"",[589,1322,709],{"class":599},[589,1324,1325],{"class":591,"line":648},[589,1326,639],{"class":599},[589,1328,1329],{"class":591,"line":657},[589,1330,1331],{"class":599},"    queues: {\n",[589,1333,1334],{"class":591,"line":663},[589,1335,1336],{"class":599},"      triggers: [\n",[589,1338,1339],{"class":591,"line":669},[589,1340,1341],{"class":989},"        \u002F\u002F Only `topic` is required\n",[589,1343,1344,1347,1350],{"class":591,"line":837},[589,1345,1346],{"class":599},"        { topic: ",[589,1348,1349],{"class":606},"\"notifications\"",[589,1351,1352],{"class":599}," },\n",[589,1354,1355,1357,1359,1362,1365,1368,1371],{"class":591,"line":845},[589,1356,1346],{"class":599},[589,1358,888],{"class":606},[589,1360,1361],{"class":599},", retryAfterSeconds: ",[589,1363,1364],{"class":699},"60",[589,1366,1367],{"class":599},", initialDelaySeconds: ",[589,1369,1370],{"class":699},"5",[589,1372,1352],{"class":599},[589,1374,1375],{"class":591,"line":863},[589,1376,1377],{"class":599},"      ],\n",[589,1379,1380],{"class":591,"line":868},[589,1381,902],{"class":599},[589,1383,1384],{"class":591,"line":876},[589,1385,908],{"class":599},[589,1387,1388],{"class":591,"line":894},[589,1389,914],{"class":599},[529,1391,1393],{"id":1392},"handling-messages","Handling messages",[451,1395,1396,1397,1399,1400,1403],{},"Use the ",[459,1398,1275],{}," hook in a ",[474,1401,1402],{"href":54},"Nitro plugin"," to process incoming queue messages:",[580,1405,1408],{"className":582,"code":1406,"filename":1407,"language":585,"meta":5,"style":5},"import { definePlugin } from \"nitro\";\n\nexport default definePlugin((nitroApp) => {\n  nitroApp.hooks.hook(\"vercel:queue\", ({ message, metadata, send }) => {\n    console.log(`[${metadata.topicName}] Message ${metadata.messageId}:`, message);\n  });\n});\n","server\u002Fplugins\u002Fqueues.ts",[459,1409,1410,1423,1427,1452,1489,1525,1530],{"__ignoreMap":5},[589,1411,1412,1414,1417,1419,1421],{"class":591,"line":592},[589,1413,596],{"class":595},[589,1415,1416],{"class":599}," { definePlugin } ",[589,1418,603],{"class":595},[589,1420,607],{"class":606},[589,1422,610],{"class":599},[589,1424,1425],{"class":591,"line":613},[589,1426,617],{"emptyLinePlaceholder":616},[589,1428,1429,1431,1433,1436,1439,1443,1446,1449],{"class":591,"line":620},[589,1430,623],{"class":595},[589,1432,626],{"class":595},[589,1434,1435],{"class":629}," definePlugin",[589,1437,1438],{"class":599},"((",[589,1440,1442],{"class":1441},"sQHwn","nitroApp",[589,1444,1445],{"class":599},") ",[589,1447,1448],{"class":595},"=>",[589,1450,1451],{"class":599}," {\n",[589,1453,1454,1457,1460,1463,1466,1469,1472,1474,1477,1479,1482,1485,1487],{"class":591,"line":636},[589,1455,1456],{"class":599},"  nitroApp.hooks.",[589,1458,1459],{"class":629},"hook",[589,1461,1462],{"class":599},"(",[589,1464,1465],{"class":606},"\"vercel:queue\"",[589,1467,1468],{"class":599},", ({ ",[589,1470,1471],{"class":1441},"message",[589,1473,854],{"class":599},[589,1475,1476],{"class":1441},"metadata",[589,1478,854],{"class":599},[589,1480,1481],{"class":1441},"send",[589,1483,1484],{"class":599}," }) ",[589,1486,1448],{"class":595},[589,1488,1451],{"class":599},[589,1490,1491,1494,1497,1499,1502,1504,1506,1509,1512,1514,1516,1519,1522],{"class":591,"line":642},[589,1492,1493],{"class":599},"    console.",[589,1495,1496],{"class":629},"log",[589,1498,1462],{"class":599},[589,1500,1501],{"class":606},"`[${",[589,1503,1476],{"class":599},[589,1505,478],{"class":606},[589,1507,1508],{"class":599},"topicName",[589,1510,1511],{"class":606},"}] Message ${",[589,1513,1476],{"class":599},[589,1515,478],{"class":606},[589,1517,1518],{"class":599},"messageId",[589,1520,1521],{"class":606},"}:`",[589,1523,1524],{"class":599},", message);\n",[589,1526,1527],{"class":591,"line":648},[589,1528,1529],{"class":599},"  });\n",[589,1531,1532],{"class":591,"line":657},[589,1533,914],{"class":599},[529,1535,1537],{"id":1536},"running-tasks-from-queue-messages","Running tasks from queue messages",[451,1539,1540,1541,578],{},"You can use queue messages to trigger ",[474,1542,1543],{"href":64},"Nitro tasks",[580,1545,1547],{"className":582,"code":1546,"filename":1407,"language":585,"meta":5,"style":5},"import { definePlugin } from \"nitro\";\nimport { runTask } from \"nitro\u002Ftask\";\n\nexport default definePlugin((nitroApp) => {\n  nitroApp.hooks.hook(\"vercel:queue\", async ({ message, metadata }) => {\n    if (metadata.topicName === \"orders\") {\n      await runTask(\"orders:fulfill\", { payload: message });\n    }\n  });\n});\n",[459,1548,1549,1561,1575,1579,1597,1627,1644,1660,1664,1668],{"__ignoreMap":5},[589,1550,1551,1553,1555,1557,1559],{"class":591,"line":592},[589,1552,596],{"class":595},[589,1554,1416],{"class":599},[589,1556,603],{"class":595},[589,1558,607],{"class":606},[589,1560,610],{"class":599},[589,1562,1563,1565,1568,1570,1573],{"class":591,"line":613},[589,1564,596],{"class":595},[589,1566,1567],{"class":599}," { runTask } ",[589,1569,603],{"class":595},[589,1571,1572],{"class":606}," \"nitro\u002Ftask\"",[589,1574,610],{"class":599},[589,1576,1577],{"class":591,"line":620},[589,1578,617],{"emptyLinePlaceholder":616},[589,1580,1581,1583,1585,1587,1589,1591,1593,1595],{"class":591,"line":636},[589,1582,623],{"class":595},[589,1584,626],{"class":595},[589,1586,1435],{"class":629},[589,1588,1438],{"class":599},[589,1590,1442],{"class":1441},[589,1592,1445],{"class":599},[589,1594,1448],{"class":595},[589,1596,1451],{"class":599},[589,1598,1599,1601,1603,1605,1607,1609,1612,1615,1617,1619,1621,1623,1625],{"class":591,"line":642},[589,1600,1456],{"class":599},[589,1602,1459],{"class":629},[589,1604,1462],{"class":599},[589,1606,1465],{"class":606},[589,1608,854],{"class":599},[589,1610,1611],{"class":595},"async",[589,1613,1614],{"class":599}," ({ ",[589,1616,1471],{"class":1441},[589,1618,854],{"class":599},[589,1620,1476],{"class":1441},[589,1622,1484],{"class":599},[589,1624,1448],{"class":595},[589,1626,1451],{"class":599},[589,1628,1629,1632,1635,1638,1641],{"class":591,"line":648},[589,1630,1631],{"class":595},"    if",[589,1633,1634],{"class":599}," (metadata.topicName ",[589,1636,1637],{"class":595},"===",[589,1639,1640],{"class":606}," \"orders\"",[589,1642,1643],{"class":599},") {\n",[589,1645,1646,1649,1652,1654,1657],{"class":591,"line":657},[589,1647,1648],{"class":595},"      await",[589,1650,1651],{"class":629}," runTask",[589,1653,1462],{"class":599},[589,1655,1656],{"class":606},"\"orders:fulfill\"",[589,1658,1659],{"class":599},", { payload: message });\n",[589,1661,1662],{"class":591,"line":663},[589,1663,660],{"class":599},[589,1665,1666],{"class":591,"line":669},[589,1667,1529],{"class":599},[589,1669,1670],{"class":591,"line":837},[589,1671,914],{"class":599},[529,1673,1675],{"id":1674},"sending-messages","Sending messages",[451,1677,1396,1678,1681],{},[459,1679,1680],{},"@vercel\u002Fqueue"," package directly to send messages to a topic:",[580,1683,1686],{"className":582,"code":1684,"filename":1685,"language":585,"meta":5,"style":5},"import { defineHandler } from \"nitro\";\nimport { send } from \"@vercel\u002Fqueue\";\n\nexport default defineHandler(async (event) => {\n  const order = await event.req.json();\n  const { messageId } = await send(\"orders\", order);\n  return { messageId };\n});\n","server\u002Froutes\u002Fapi\u002Forders.post.ts",[459,1687,1688,1701,1715,1719,1744,1766,1793,1801],{"__ignoreMap":5},[589,1689,1690,1692,1695,1697,1699],{"class":591,"line":592},[589,1691,596],{"class":595},[589,1693,1694],{"class":599}," { defineHandler } ",[589,1696,603],{"class":595},[589,1698,607],{"class":606},[589,1700,610],{"class":599},[589,1702,1703,1705,1708,1710,1713],{"class":591,"line":613},[589,1704,596],{"class":595},[589,1706,1707],{"class":599}," { send } ",[589,1709,603],{"class":595},[589,1711,1712],{"class":606}," \"@vercel\u002Fqueue\"",[589,1714,610],{"class":599},[589,1716,1717],{"class":591,"line":620},[589,1718,617],{"emptyLinePlaceholder":616},[589,1720,1721,1723,1725,1728,1730,1732,1735,1738,1740,1742],{"class":591,"line":636},[589,1722,623],{"class":595},[589,1724,626],{"class":595},[589,1726,1727],{"class":629}," defineHandler",[589,1729,1462],{"class":599},[589,1731,1611],{"class":595},[589,1733,1734],{"class":599}," (",[589,1736,1737],{"class":1441},"event",[589,1739,1445],{"class":599},[589,1741,1448],{"class":595},[589,1743,1451],{"class":599},[589,1745,1746,1749,1752,1755,1758,1761,1763],{"class":591,"line":642},[589,1747,1748],{"class":595},"  const",[589,1750,1751],{"class":699}," order",[589,1753,1754],{"class":595}," =",[589,1756,1757],{"class":595}," await",[589,1759,1760],{"class":599}," event.req.",[589,1762,687],{"class":629},[589,1764,1765],{"class":599},"();\n",[589,1767,1768,1770,1773,1775,1778,1781,1783,1786,1788,1790],{"class":591,"line":648},[589,1769,1748],{"class":595},[589,1771,1772],{"class":599}," { ",[589,1774,1518],{"class":699},[589,1776,1777],{"class":599}," } ",[589,1779,1780],{"class":595},"=",[589,1782,1757],{"class":595},[589,1784,1785],{"class":629}," send",[589,1787,1462],{"class":599},[589,1789,888],{"class":606},[589,1791,1792],{"class":599},", order);\n",[589,1794,1795,1798],{"class":591,"line":657},[589,1796,1797],{"class":595},"  return",[589,1799,1800],{"class":599}," { messageId };\n",[589,1802,1803],{"class":591,"line":663},[589,1804,914],{"class":599},[529,1806,1808],{"id":1807},"local-development","Local development",[451,1810,1811,1812,1815,1816,1819,1820,1822,1823,1826,1827,1830],{},"Queues work in ",[459,1813,1814],{},"nitro dev"," — ",[459,1817,1818],{},"send()"," delivers messages straight to your ",[459,1821,1275],{}," hook, so you can iterate without deploying. Pull your Vercel environment first with ",[459,1824,1825],{},"vercel link"," and ",[459,1828,1829],{},"vercel env pull"," so the SDK can authenticate.",[451,1832,1833,1834,1837],{},"If your hook throws, the message is retried locally. Retries honor ",[459,1835,1836],{},"retryAfterSeconds"," from each trigger when set.",[480,1839,1841],{"id":1840},"custom-build-output-configuration","Custom build output configuration",[451,1843,1844,1845,1850,1851,574,1854,1856],{},"You can provide additional ",[474,1846,1849],{"href":1847,"rel":1848},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fbuild-output-api\u002Fv3",[497],"build output configuration"," using the ",[459,1852,1853],{},"vercel.config",[459,1855,577],{},". It will be merged with the built-in auto-generated config.",[480,1858,1860],{"id":1859},"other-preset-options","Other preset options",[451,1862,1863,1864,1866],{},"Additional options are available under the ",[459,1865,461],{}," key in your Nitro config:",[488,1868,1869,1890,1900,1916],{},[491,1870,1871,1874,1875,1878,1879,1882,1883,1886,1887,931],{},[459,1872,1873],{},"entryFormat",": Handler format for Vercel Functions. ",[459,1876,1877],{},"\"web\""," (default) or ",[459,1880,1881],{},"\"node\""," — the ",[459,1884,1885],{},"node"," format enables compatibility with Node.js specific APIs (e.g., ",[459,1888,1889],{},"req.runtime.node",[491,1891,1892,1894,1895,1899],{},[459,1893,752],{},": List of ",[474,1896,752],{"href":1897,"rel":1898},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fconcepts\u002Ffunctions\u002Fedge-functions#edge-function-regions",[497]," for edge functions.",[491,1901,1902,1905,1906,1909,1910,1915],{},[459,1903,1904],{},"skewProtection",": Set to ",[459,1907,1908],{},"false"," to disable the Nitro ",[474,1911,1914],{"href":1912,"rel":1913},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fskew-protection",[497],"skew protection"," integration (enabled by default when skew protection is enabled in the Vercel dashboard).",[491,1917,1918,1921,1922,1924,1925,931],{},[459,1919,1920],{},"cronHandlerRoute",": Route path for the Vercel cron handler endpoint used with ",[459,1923,1131],{}," (default: ",[459,1926,1927],{},"\"\u002F_vercel\u002Fcron\"",[480,1929,1931],{"id":1930},"on-demand-incremental-static-regeneration-isr","On-demand incremental static regeneration (ISR)",[451,1933,1934],{},"On-demand revalidation lets you purge the cache for an ISR route whenever you want, without waiting for the interval used by background revalidation.",[451,1936,1937],{},"To revalidate a page on demand:",[1939,1940,1942,1960,2023],"steps",{"level":1941},"4",[1943,1944,1945,1946],"h4",{},"Create an environment variable to store a revalidation secret",[488,1947,1948],{},[491,1949,1950,1951,1043,1954,1959],{},"You can use the command ",[459,1952,1953],{},"openssl rand -base64 32",[474,1955,1958],{"href":1956,"rel":1957},"https:\u002F\u002Fgenerate-secret.vercel.app\u002F32",[497],"Generate a Secret"," to generate a random value.",[1943,1961,1962,1963],{},"Update your configuration:",[580,1964,1966],{"className":582,"code":1965,"filename":584,"language":585,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  vercel: {\n    config: {\n      bypassToken: process.env.VERCEL_BYPASS_TOKEN\n    }\n  }\n})\n",[459,1967,1968,1980,1984,1994,1998,2003,2011,2015,2019],{"__ignoreMap":5},[589,1969,1970,1972,1974,1976,1978],{"class":591,"line":592},[589,1971,596],{"class":595},[589,1973,600],{"class":599},[589,1975,603],{"class":595},[589,1977,607],{"class":606},[589,1979,610],{"class":599},[589,1981,1982],{"class":591,"line":613},[589,1983,617],{"emptyLinePlaceholder":616},[589,1985,1986,1988,1990,1992],{"class":591,"line":620},[589,1987,623],{"class":595},[589,1989,626],{"class":595},[589,1991,630],{"class":629},[589,1993,633],{"class":599},[589,1995,1996],{"class":591,"line":636},[589,1997,639],{"class":599},[589,1999,2000],{"class":591,"line":642},[589,2001,2002],{"class":599},"    config: {\n",[589,2004,2005,2008],{"class":591,"line":648},[589,2006,2007],{"class":599},"      bypassToken: process.env.",[589,2009,2010],{"class":699},"VERCEL_BYPASS_TOKEN\n",[589,2012,2013],{"class":591,"line":657},[589,2014,660],{"class":599},[589,2016,2017],{"class":591,"line":663},[589,2018,666],{"class":599},[589,2020,2021],{"class":591,"line":669},[589,2022,672],{"class":599},[1943,2024,2025,2026,2029],{},"To revalidate a path to a Prerender Function on demand, make a GET or HEAD request to that path with an ",[459,2027,2028],{},"x-prerender-revalidate: \u003CbypassToken>"," header. When the Prerender Function endpoint is accessed with this header set, the cache is revalidated, and the next request to that function should return a fresh response.",[529,2031,2033],{"id":2032},"fine-grained-isr-config-via-route-rules","Fine-grained ISR config via route rules",[451,2035,2036],{},"By default, query params affect cache keys but are not passed to the route handler unless specified.",[451,2038,2039,2040,2043],{},"You can pass an options object to the ",[459,2041,2042],{},"isr"," route rule to configure caching behavior:",[488,2045,2046,2059,2065,2094,2111],{},[491,2047,2048,2051,2052,2054,2055,2058],{},[459,2049,2050],{},"expiration",": Expiration time (in seconds) before the cached asset is re-generated by invoking the Serverless Function. Setting the value to ",[459,2053,1908],{}," (or the ",[459,2056,2057],{},"isr: true"," route rule) means it never expires.",[491,2060,2061,2064],{},[459,2062,2063],{},"group",": Group number of the asset. Prerendered assets with the same group number are all re-validated at the same time.",[491,2066,2067,2070,2071],{},[459,2068,2069],{},"allowQuery",": List of query string parameter names that are cached independently.\n",[488,2072,2073,2076,2083],{},[491,2074,2075],{},"If an empty array, query values are not considered for caching.",[491,2077,2078,2079,2082],{},"If ",[459,2080,2081],{},"undefined",", each unique query value is cached independently.",[491,2084,2085,2086,2089,2090,2093],{},"For wildcard ",[459,2087,2088],{},"\u002F**"," route rules, ",[459,2091,2092],{},"url"," is always added.",[491,2095,2096,2099,2100,2103,2104,2107,2108,2110],{},[459,2097,2098],{},"passQuery",": When ",[459,2101,2102],{},"true",", the query string is present on the ",[459,2105,2106],{},"request"," argument passed to the invoked function. The ",[459,2109,2069],{}," filter still applies.",[491,2112,2113,2099,2116,2118,2119,931],{},[459,2114,2115],{},"exposeErrBody",[459,2117,2102],{},", expose the response body regardless of status code, including error status codes (default: ",[459,2120,1908],{},[580,2122,2124],{"className":582,"code":2123,"filename":584,"language":585,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  routeRules: {\n    \"\u002Fproducts\u002F**\": {\n      isr: {\n        allowQuery: [\"q\"],\n        passQuery: true,\n        exposeErrBody: true\n      },\n    },\n  },\n});\n",[459,2125,2126,2138,2142,2152,2156,2163,2168,2178,2187,2194,2198,2202,2206],{"__ignoreMap":5},[589,2127,2128,2130,2132,2134,2136],{"class":591,"line":592},[589,2129,596],{"class":595},[589,2131,600],{"class":599},[589,2133,603],{"class":595},[589,2135,607],{"class":606},[589,2137,610],{"class":599},[589,2139,2140],{"class":591,"line":613},[589,2141,617],{"emptyLinePlaceholder":616},[589,2143,2144,2146,2148,2150],{"class":591,"line":620},[589,2145,623],{"class":595},[589,2147,626],{"class":595},[589,2149,630],{"class":629},[589,2151,633],{"class":599},[589,2153,2154],{"class":591,"line":636},[589,2155,984],{"class":599},[589,2157,2158,2161],{"class":591,"line":642},[589,2159,2160],{"class":606},"    \"\u002Fproducts\u002F**\"",[589,2162,809],{"class":599},[589,2164,2165],{"class":591,"line":648},[589,2166,2167],{"class":599},"      isr: {\n",[589,2169,2170,2173,2176],{"class":591,"line":657},[589,2171,2172],{"class":599},"        allowQuery: [",[589,2174,2175],{"class":606},"\"q\"",[589,2177,860],{"class":599},[589,2179,2180,2183,2185],{"class":591,"line":663},[589,2181,2182],{"class":599},"        passQuery: ",[589,2184,2102],{"class":699},[589,2186,709],{"class":599},[589,2188,2189,2192],{"class":591,"line":669},[589,2190,2191],{"class":599},"        exposeErrBody: ",[589,2193,1183],{"class":699},[589,2195,2196],{"class":591,"line":837},[589,2197,834],{"class":599},[589,2199,2200],{"class":591,"line":845},[589,2201,902],{"class":599},[589,2203,2204],{"class":591,"line":863},[589,2205,908],{"class":599},[589,2207,2208],{"class":591,"line":868},[589,2209,914],{"class":599},[2211,2212,2213],"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 .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 .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}",{"title":5,"searchDepth":613,"depth":613,"links":2215},[2216,2219,2220,2221,2222,2226,2229,2235,2236,2237],{"id":482,"depth":613,"text":483,"children":2217},[2218],{"id":531,"depth":620,"text":532},{"id":543,"depth":613,"text":544},{"id":558,"depth":613,"text":559},{"id":727,"depth":613,"text":728},{"id":934,"depth":613,"text":935,"children":2223},[2224,2225],{"id":1022,"depth":620,"text":1023},{"id":1056,"depth":620,"text":1057},{"id":1117,"depth":613,"text":1118,"children":2227},[2228],{"id":1239,"depth":620,"text":1240},{"id":1261,"depth":613,"text":1262,"children":2230},[2231,2232,2233,2234],{"id":1392,"depth":620,"text":1393},{"id":1536,"depth":620,"text":1537},{"id":1674,"depth":620,"text":1675},{"id":1807,"depth":620,"text":1808},{"id":1840,"depth":613,"text":1841},{"id":1859,"depth":613,"text":1860},{"id":1930,"depth":613,"text":1931,"children":2238},[2239],{"id":2032,"depth":620,"text":2033},"Deploy Nitro apps to Vercel.","md",{},{},{"title":245,"description":2240},"8d6UG5p4_po87CMfd5bAXjo06Jy4rzsnL0m-bkTwGIw",[2247,2249],{"title":241,"path":242,"stem":243,"description":2248,"children":-1},"Deploy Nitro apps to Stormkit.",{"title":249,"path":250,"stem":251,"description":2250,"children":-1},"Deploy Nitro apps to Zeabur.",1784019069030]