[{"data":1,"prerenderedAt":2089},["ShallowReactive",2],{"navigation":3,"-deploy-providers-vercel":402,"-deploy-providers-vercel-surround":2084},[4,93,226,232,387,399],{"title":5,"path":6,"stem":7,"children":8,"icon":92},"","\u002Fdocs","1.docs\u002F1.index",[9,12,17,22,27,32,37,42,47,52,57,62,67,72,77,82,87],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-compass",{"title":13,"path":14,"stem":15,"icon":16},"Quick Start","\u002Fdocs\u002Fquick-start","1.docs\u002F2.quick-start","i-lucide-zap",{"title":18,"path":19,"stem":20,"icon":21},"Renderer","\u002Fdocs\u002Frenderer","1.docs\u002F4.renderer","ri:layout-masonry-line",{"title":23,"path":24,"stem":25,"icon":26},"Routing","\u002Fdocs\u002Frouting","1.docs\u002F5.routing","ri:direction-line",{"title":28,"path":29,"stem":30,"icon":31},"Assets","\u002Fdocs\u002Fassets","1.docs\u002F50.assets","ri:image-2-line",{"title":33,"path":34,"stem":35,"icon":36},"Configuration","\u002Fdocs\u002Fconfiguration","1.docs\u002F50.configuration","ri:settings-3-line",{"title":38,"path":39,"stem":40,"icon":41},"Database","\u002Fdocs\u002Fdatabase","1.docs\u002F50.database","ri:database-2-line",{"title":43,"path":44,"stem":45,"icon":46},"Lifecycle","\u002Fdocs\u002Flifecycle","1.docs\u002F50.lifecycle","i-lucide-layers",{"title":48,"path":49,"stem":50,"icon":51},"OpenAPI","\u002Fdocs\u002Fopenapi","1.docs\u002F50.openapi","ri:contract-line",{"title":53,"path":54,"stem":55,"icon":56},"Plugins","\u002Fdocs\u002Fplugins","1.docs\u002F50.plugins","ri:plug-line",{"title":58,"path":59,"stem":60,"icon":61},"Tasks","\u002Fdocs\u002Ftasks","1.docs\u002F50.tasks","codicon:run-all",{"title":63,"path":64,"stem":65,"icon":66},"WebSocket","\u002Fdocs\u002Fwebsocket","1.docs\u002F50.websocket","ri:broadcast-fill",{"title":68,"path":69,"stem":70,"icon":71},"Server Entry","\u002Fdocs\u002Fserver-entry","1.docs\u002F6.server-entry","ri:server-line",{"title":73,"path":74,"stem":75,"icon":76},"Cache","\u002Fdocs\u002Fcache","1.docs\u002F7.cache","ri:speed-line",{"title":78,"path":79,"stem":80,"icon":81},"KV Storage","\u002Fdocs\u002Fstorage","1.docs\u002F8.storage","carbon:datastore",{"title":83,"path":84,"stem":85,"icon":86},"Migration Guide","\u002Fdocs\u002Fmigration","1.docs\u002F99.migration","ri:arrow-right-up-line",{"title":88,"path":89,"stem":90,"icon":91},"Nightly Channel","\u002Fdocs\u002Fnightly","1.docs\u002F99.nightly","ri:moon-fill","i-lucide-book-open",{"title":94,"path":95,"stem":96,"children":97,"icon":99},"Deploy","\u002Fdeploy","2.deploy\u002F0.index",[98,100,121],{"title":94,"path":95,"stem":96,"icon":99},"ri:upload-cloud-2-line",{"title":101,"path":102,"stem":103,"children":104,"page":120},"Runtimes","\u002Fdeploy\u002Fruntimes","2.deploy\u002F10.runtimes",[105,110,115],{"title":106,"path":107,"stem":108,"icon":109},"Node.js","\u002Fdeploy\u002Fruntimes\u002Fnode","2.deploy\u002F10.runtimes\u002F1.node","akar-icons:node-fill",{"title":111,"path":112,"stem":113,"icon":114},"Bun","\u002Fdeploy\u002Fruntimes\u002Fbun","2.deploy\u002F10.runtimes\u002Fbun","simple-icons:bun",{"title":116,"path":117,"stem":118,"icon":119},"Deno","\u002Fdeploy\u002Fruntimes\u002Fdeno","2.deploy\u002F10.runtimes\u002Fdeno","simple-icons:deno",false,{"title":122,"path":123,"stem":124,"children":125,"page":120},"Providers","\u002Fdeploy\u002Fproviders","2.deploy\u002F20.providers",[126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,214,218,222],{"title":127,"path":128,"stem":129},"Alwaysdata","\u002Fdeploy\u002Fproviders\u002Falwaysdata","2.deploy\u002F20.providers\u002Falwaysdata",{"title":131,"path":132,"stem":133},"AWS Lambda","\u002Fdeploy\u002Fproviders\u002Faws","2.deploy\u002F20.providers\u002Faws",{"title":135,"path":136,"stem":137},"AWS Amplify","\u002Fdeploy\u002Fproviders\u002Faws-amplify","2.deploy\u002F20.providers\u002Faws-amplify",{"title":139,"path":140,"stem":141},"Azure","\u002Fdeploy\u002Fproviders\u002Fazure","2.deploy\u002F20.providers\u002Fazure",{"title":143,"path":144,"stem":145},"Cleavr","\u002Fdeploy\u002Fproviders\u002Fcleavr","2.deploy\u002F20.providers\u002Fcleavr",{"title":147,"path":148,"stem":149},"Cloudflare","\u002Fdeploy\u002Fproviders\u002Fcloudflare","2.deploy\u002F20.providers\u002Fcloudflare",{"title":151,"path":152,"stem":153},"Deno Deploy","\u002Fdeploy\u002Fproviders\u002Fdeno-deploy","2.deploy\u002F20.providers\u002Fdeno-deploy",{"title":155,"path":156,"stem":157},"DigitalOcean","\u002Fdeploy\u002Fproviders\u002Fdigitalocean","2.deploy\u002F20.providers\u002Fdigitalocean",{"title":159,"path":160,"stem":161},"EdgeOne Pages","\u002Fdeploy\u002Fproviders\u002Fedgeone","2.deploy\u002F20.providers\u002Fedgeone",{"title":163,"path":164,"stem":165},"Firebase","\u002Fdeploy\u002Fproviders\u002Ffirebase","2.deploy\u002F20.providers\u002Ffirebase",{"title":167,"path":168,"stem":169},"Flightcontrol","\u002Fdeploy\u002Fproviders\u002Fflightcontrol","2.deploy\u002F20.providers\u002Fflightcontrol",{"title":171,"path":172,"stem":173},"Genezio","\u002Fdeploy\u002Fproviders\u002Fgenezio","2.deploy\u002F20.providers\u002Fgenezio",{"title":175,"path":176,"stem":177},"GitHub Pages","\u002Fdeploy\u002Fproviders\u002Fgithub-pages","2.deploy\u002F20.providers\u002Fgithub-pages",{"title":179,"path":180,"stem":181},"GitLab Pages","\u002Fdeploy\u002Fproviders\u002Fgitlab-pages","2.deploy\u002F20.providers\u002Fgitlab-pages",{"title":183,"path":184,"stem":185},"Heroku","\u002Fdeploy\u002Fproviders\u002Fheroku","2.deploy\u002F20.providers\u002Fheroku",{"title":187,"path":188,"stem":189},"IIS","\u002Fdeploy\u002Fproviders\u002Fiis","2.deploy\u002F20.providers\u002Fiis",{"title":191,"path":192,"stem":193},"Koyeb","\u002Fdeploy\u002Fproviders\u002Fkoyeb","2.deploy\u002F20.providers\u002Fkoyeb",{"title":195,"path":196,"stem":197},"Netlify","\u002Fdeploy\u002Fproviders\u002Fnetlify","2.deploy\u002F20.providers\u002Fnetlify",{"title":199,"path":200,"stem":201},"Platform.sh","\u002Fdeploy\u002Fproviders\u002Fplatform-sh","2.deploy\u002F20.providers\u002Fplatform-sh",{"title":203,"path":204,"stem":205},"Render.com","\u002Fdeploy\u002Fproviders\u002Frender","2.deploy\u002F20.providers\u002Frender",{"title":207,"path":208,"stem":209},"StormKit","\u002Fdeploy\u002Fproviders\u002Fstormkit","2.deploy\u002F20.providers\u002Fstormkit",{"title":211,"path":212,"stem":213},"Vercel","\u002Fdeploy\u002Fproviders\u002Fvercel","2.deploy\u002F20.providers\u002Fvercel",{"title":215,"path":216,"stem":217},"Zeabur","\u002Fdeploy\u002Fproviders\u002Fzeabur","2.deploy\u002F20.providers\u002Fzeabur",{"title":219,"path":220,"stem":221},"Zephyr Cloud","\u002Fdeploy\u002Fproviders\u002Fzephyr","2.deploy\u002F20.providers\u002Fzephyr",{"title":223,"path":224,"stem":225},"Zerops","\u002Fdeploy\u002Fproviders\u002Fzerops","2.deploy\u002F20.providers\u002Fzerops",{"title":227,"path":228,"stem":229,"children":230,"icon":36},"Config","\u002Fconfig","3.config\u002F0.index",[231],{"title":227,"path":228,"stem":229,"icon":36},{"title":233,"path":234,"stem":235,"children":236,"icon":238},"Examples","\u002Fexamples","4.examples\u002F0.index",[237,239,244,249,254,259,263,268,273,278,283,288,293,297,302,306,310,315,320,325,330,335,340,345,350,355,359,364,369,373,378,383],{"title":233,"path":234,"stem":235,"icon":238},"i-lucide-folder-code",{"title":240,"path":241,"stem":242,"icon":243},"API Routes","\u002Fexamples\u002Fapi-routes","4.examples\u002Fapi-routes","i-lucide-route",{"title":245,"path":246,"stem":247,"icon":248},"Auto Imports","\u002Fexamples\u002Fauto-imports","4.examples\u002Fauto-imports","i-lucide-import",{"title":250,"path":251,"stem":252,"icon":253},"Cached Handler","\u002Fexamples\u002Fcached-handler","4.examples\u002Fcached-handler","i-lucide-clock",{"title":255,"path":256,"stem":257,"icon":258},"Custom Error Handler","\u002Fexamples\u002Fcustom-error-handler","4.examples\u002Fcustom-error-handler","i-lucide-alert-circle",{"title":38,"path":260,"stem":261,"icon":262},"\u002Fexamples\u002Fdatabase","4.examples\u002Fdatabase","i-lucide-database",{"title":264,"path":265,"stem":266,"icon":267},"Elysia","\u002Fexamples\u002Felysia","4.examples\u002Felysia","i-skill-icons-elysia-dark",{"title":269,"path":270,"stem":271,"icon":272},"Express","\u002Fexamples\u002Fexpress","4.examples\u002Fexpress","i-simple-icons-express",{"title":274,"path":275,"stem":276,"icon":277},"Fastify","\u002Fexamples\u002Ffastify","4.examples\u002Ffastify","i-simple-icons-fastify",{"title":279,"path":280,"stem":281,"icon":282},"Hello World","\u002Fexamples\u002Fhello-world","4.examples\u002Fhello-world","i-lucide-sparkles",{"title":284,"path":285,"stem":286,"icon":287},"Hono","\u002Fexamples\u002Fhono","4.examples\u002Fhono","i-logos-hono",{"title":289,"path":290,"stem":291,"icon":292},"Import Alias","\u002Fexamples\u002Fimport-alias","4.examples\u002Fimport-alias","i-lucide-at-sign",{"title":294,"path":295,"stem":296,"icon":46},"Middleware","\u002Fexamples\u002Fmiddleware","4.examples\u002Fmiddleware",{"title":298,"path":299,"stem":300,"icon":301},"Mono JSX","\u002Fexamples\u002Fmono-jsx","4.examples\u002Fmono-jsx","i-lucide-brackets",{"title":303,"path":304,"stem":305,"icon":301},"Nano JSX","\u002Fexamples\u002Fnano-jsx","4.examples\u002Fnano-jsx",{"title":53,"path":307,"stem":308,"icon":309},"\u002Fexamples\u002Fplugins","4.examples\u002Fplugins","i-lucide-plug",{"title":311,"path":312,"stem":313,"icon":314},"Custom Renderer","\u002Fexamples\u002Frenderer","4.examples\u002Frenderer","i-lucide-code",{"title":316,"path":317,"stem":318,"icon":319},"Runtime Config","\u002Fexamples\u002Fruntime-config","4.examples\u002Fruntime-config","i-lucide-settings",{"title":321,"path":322,"stem":323,"icon":324},"Server Fetch","\u002Fexamples\u002Fserver-fetch","4.examples\u002Fserver-fetch","i-lucide-arrow-right-left",{"title":326,"path":327,"stem":328,"icon":329},"Shiki","\u002Fexamples\u002Fshiki","4.examples\u002Fshiki","i-lucide-highlighter",{"title":331,"path":332,"stem":333,"icon":334},"Virtual Routes","\u002Fexamples\u002Fvirtual-routes","4.examples\u002Fvirtual-routes","i-lucide-box",{"title":336,"path":337,"stem":338,"icon":339},"Vite Nitro Plugin","\u002Fexamples\u002Fvite-nitro-plugin","4.examples\u002Fvite-nitro-plugin","i-logos-vitejs",{"title":341,"path":342,"stem":343,"icon":344},"Vite RSC","\u002Fexamples\u002Fvite-rsc","4.examples\u002Fvite-rsc","i-logos-react",{"title":346,"path":347,"stem":348,"icon":349},"Vite SSR HTML","\u002Fexamples\u002Fvite-ssr-html","4.examples\u002Fvite-ssr-html","i-logos-html-5",{"title":351,"path":352,"stem":353,"icon":354},"SSR with Preact","\u002Fexamples\u002Fvite-ssr-preact","4.examples\u002Fvite-ssr-preact","i-logos-preact",{"title":356,"path":357,"stem":358,"icon":344},"SSR with React","\u002Fexamples\u002Fvite-ssr-react","4.examples\u002Fvite-ssr-react",{"title":360,"path":361,"stem":362,"icon":363},"SSR with SolidJS","\u002Fexamples\u002Fvite-ssr-solid","4.examples\u002Fvite-ssr-solid","i-logos-solidjs-icon",{"title":365,"path":366,"stem":367,"icon":368},"SSR with TanStack Router","\u002Fexamples\u002Fvite-ssr-tsr-react","4.examples\u002Fvite-ssr-tsr-react","i-simple-icons-tanstack",{"title":370,"path":371,"stem":372,"icon":368},"SSR with TanStack Start","\u002Fexamples\u002Fvite-ssr-tss-react","4.examples\u002Fvite-ssr-tss-react",{"title":374,"path":375,"stem":376,"icon":377},"SSR with Vue Router","\u002Fexamples\u002Fvite-ssr-vue-router","4.examples\u002Fvite-ssr-vue-router","i-logos-vue",{"title":379,"path":380,"stem":381,"icon":382},"Vite + tRPC","\u002Fexamples\u002Fvite-trpc","4.examples\u002Fvite-trpc","i-simple-icons-trpc",{"title":63,"path":384,"stem":385,"icon":386},"\u002Fexamples\u002Fwebsocket","4.examples\u002Fwebsocket","i-lucide-radio",{"title":388,"path":389,"stem":390,"children":391},"Blog","\u002Fblog","9.blog",[392,395],{"title":388,"path":389,"stem":393,"icon":394},"9.blog\u002Findex","i-lucide-file-text",{"title":396,"path":397,"stem":398,"icon":394},"Nitro v3 Beta is here!","\u002Fblog\u002Fv3-beta","9.blog\u002F1.v3-beta",{"title":5,"path":400,"stem":401},"\u002F","index",{"id":403,"title":211,"body":404,"description":2078,"extension":2079,"meta":2080,"navigation":2081,"path":212,"seo":2082,"stem":213,"__hash__":2083},"content\u002F2.deploy\u002F20.providers\u002Fvercel.md",{"type":405,"value":406,"toc":2053},"minimark",[407,419,424,436,441,444,477,485,490,498,502,509,517,521,524,540,609,619,661,665,685,693,855,872,876,889,944,948,955,978,982,988,1027,1039,1043,1047,1064,1161,1165,1169,1183,1187,1190,1201,1314,1318,1329,1459,1463,1469,1597,1601,1607,1730,1734,1756,1763,1767,1782,1786,1789,1792,1884,1888,1891,1898,1976,2049],[408,409,410,414,415],"p",{},[411,412,413],"strong",{},"Preset:"," ",[416,417,418],"code",{},"vercel",[420,421],"read-more",{"title":422,"to":423},"Vercel Framework Support","https:\u002F\u002Fvercel.com\u002Fdocs\u002Fframeworks",[425,426,427],"note",{},[408,428,429,430,435],{},"Integration with this provider is possible with ",[431,432,434],"a",{"href":433},"\u002Fdeploy\u002F#zero-config-providers","zero configuration",".",[437,438,440],"h2",{"id":439},"getting-started","Getting started",[408,442,443],{},"Deploying to Vercel comes with the following features:",[445,446,447,456,463,470],"ul",{},[448,449,450],"li",{},[431,451,455],{"href":452,"rel":453},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fdeployments\u002Fenvironments",[454],"nofollow","Preview deployments",[448,457,458],{},[431,459,462],{"href":460,"rel":461},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffluid-compute",[454],"Fluid compute",[448,464,465],{},[431,466,469],{"href":467,"rel":468},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fobservability",[454],"Observability",[448,471,472],{},[431,473,476],{"href":474,"rel":475},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fvercel-firewall",[454],"Vercel Firewall",[408,478,479,480,435],{},"And much more. Learn more in ",[431,481,484],{"href":482,"rel":483},"https:\u002F\u002Fvercel.com\u002Fdocs",[454],"the Vercel documentation",[486,487,489],"h3",{"id":488},"deploy-with-git","Deploy with Git",[408,491,492,493,435],{},"Vercel supports Nitro with zero-configuration. ",[431,494,497],{"href":495,"rel":496},"https:\u002F\u002Fvercel.com\u002Fnew\u002Fclone?repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fvercel%2Ftree%2Fmain%2Fexamples%2Fnitro",[454],"Deploy Nitro to Vercel now",[437,499,501],{"id":500},"api-routes","API routes",[408,503,504,505,508],{},"Nitro ",[416,506,507],{},"\u002Fapi"," directory isn't compatible with Vercel. Instead, you should use:",[445,510,511],{},[448,512,513,516],{},[416,514,515],{},"routes\u002Fapi\u002F"," for standalone usage",[437,518,520],{"id":519},"bun-runtime","Bun runtime",[420,522],{"title":211,"to":523},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Ffunctions\u002Fruntimes\u002Fbun",[408,525,526,527,531,532,535,536,539],{},"You can use ",[431,528,111],{"href":529,"rel":530},"https:\u002F\u002Fbun.com",[454]," instead of Node.js by specifying the runtime using the ",[416,533,534],{},"vercel.functions"," key inside ",[416,537,538],{},"nitro.config",":",[541,542,547],"pre",{"className":543,"code":544,"filename":545,"language":546,"meta":5,"style":5},"language-ts shiki shiki-themes github-light github-dark github-dark","export default defineConfig({\n  vercel: {\n    functions: {\n      runtime: \"bun1.x\"\n    }\n  }\n})\n","nitro.config.ts","ts",[416,548,549,569,575,581,591,597,603],{"__ignoreMap":5},[550,551,554,558,561,565],"span",{"class":552,"line":553},"line",1,[550,555,557],{"class":556},"so5gQ","export",[550,559,560],{"class":556}," default",[550,562,564],{"class":563},"shcOC"," defineConfig",[550,566,568],{"class":567},"slsVL","({\n",[550,570,572],{"class":552,"line":571},2,[550,573,574],{"class":567},"  vercel: {\n",[550,576,578],{"class":552,"line":577},3,[550,579,580],{"class":567},"    functions: {\n",[550,582,584,587],{"class":552,"line":583},4,[550,585,586],{"class":567},"      runtime: ",[550,588,590],{"class":589},"sfrk1","\"bun1.x\"\n",[550,592,594],{"class":552,"line":593},5,[550,595,596],{"class":567},"    }\n",[550,598,600],{"class":552,"line":599},6,[550,601,602],{"class":567},"  }\n",[550,604,606],{"class":552,"line":605},7,[550,607,608],{"class":567},"})\n",[408,610,611,612,615,616,539],{},"Alternatively, Nitro also detects Bun automatically if you specify a ",[416,613,614],{},"bunVersion"," property in your ",[416,617,618],{},"vercel.json",[541,620,624],{"className":621,"code":622,"filename":618,"language":623,"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",[416,625,626,631,646,656],{"__ignoreMap":5},[550,627,628],{"class":552,"line":553},[550,629,630],{"class":567},"{\n",[550,632,633,637,640,643],{"class":552,"line":571},[550,634,636],{"class":635},"suiK_","  \"$schema\"",[550,638,639],{"class":567},": ",[550,641,642],{"class":589},"\"https:\u002F\u002Fopenapi.vercel.sh\u002Fvercel.json\"",[550,644,645],{"class":567},",\n",[550,647,648,651,653],{"class":552,"line":577},[550,649,650],{"class":635},"  \"bunVersion\"",[550,652,639],{"class":567},[550,654,655],{"class":589},"\"1.x\"\n",[550,657,658],{"class":552,"line":583},[550,659,660],{"class":567},"}\n",[437,662,664],{"id":663},"per-route-function-configuration","Per-route function configuration",[408,666,667,668,671,672,677,678,680,681,684],{},"Use ",[416,669,670],{},"vercel.functionRules"," to override ",[431,673,676],{"href":674,"rel":675},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fbuild-output-api\u002Fprimitives#serverless-function-configuration",[454],"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 ",[416,679,534],{}," config. Note: array properties (e.g., ",[416,682,683],{},"regions",") from route config will replace the base config arrays rather than merging them.",[408,686,687,688,435],{},"This is useful when certain routes need different resource limits, regions, or features like ",[431,689,692],{"href":690,"rel":691},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fqueues",[454],"Vercel Queues triggers",[541,694,696],{"className":543,"code":695,"filename":545,"language":546,"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",[416,697,698,715,721,731,735,740,748,758,769,775,783,801,806,814,832,837,843,849],{"__ignoreMap":5},[550,699,700,703,706,709,712],{"class":552,"line":553},[550,701,702],{"class":556},"import",[550,704,705],{"class":567}," { defineConfig } ",[550,707,708],{"class":556},"from",[550,710,711],{"class":589}," \"nitro\"",[550,713,714],{"class":567},";\n",[550,716,717],{"class":552,"line":571},[550,718,720],{"emptyLinePlaceholder":719},true,"\n",[550,722,723,725,727,729],{"class":552,"line":577},[550,724,557],{"class":556},[550,726,560],{"class":556},[550,728,564],{"class":563},[550,730,568],{"class":567},[550,732,733],{"class":552,"line":583},[550,734,574],{"class":567},[550,736,737],{"class":552,"line":593},[550,738,739],{"class":567},"    functionRules: {\n",[550,741,742,745],{"class":552,"line":599},[550,743,744],{"class":589},"      \"\u002Fapi\u002Fheavy-computation\"",[550,746,747],{"class":567},": {\n",[550,749,750,753,756],{"class":552,"line":605},[550,751,752],{"class":567},"        maxDuration: ",[550,754,755],{"class":635},"800",[550,757,645],{"class":567},[550,759,761,764,767],{"class":552,"line":760},8,[550,762,763],{"class":567},"        memory: ",[550,765,766],{"class":635},"4096",[550,768,645],{"class":567},[550,770,772],{"class":552,"line":771},9,[550,773,774],{"class":567},"      },\n",[550,776,778,781],{"class":552,"line":777},10,[550,779,780],{"class":589},"      \"\u002Fapi\u002Fregional\"",[550,782,747],{"class":567},[550,784,786,789,792,795,798],{"class":552,"line":785},11,[550,787,788],{"class":567},"        regions: [",[550,790,791],{"class":589},"\"lhr1\"",[550,793,794],{"class":567},", ",[550,796,797],{"class":589},"\"cdg1\"",[550,799,800],{"class":567},"],\n",[550,802,804],{"class":552,"line":803},12,[550,805,774],{"class":567},[550,807,809,812],{"class":552,"line":808},13,[550,810,811],{"class":589},"      \"\u002Fapi\u002Fqueues\u002Fprocess-order\"",[550,813,747],{"class":567},[550,815,817,820,823,826,829],{"class":552,"line":816},14,[550,818,819],{"class":567},"        experimentalTriggers: [{ type: ",[550,821,822],{"class":589},"\"queue\u002Fv2beta\"",[550,824,825],{"class":567},", topic: ",[550,827,828],{"class":589},"\"orders\"",[550,830,831],{"class":567}," }],\n",[550,833,835],{"class":552,"line":834},15,[550,836,774],{"class":567},[550,838,840],{"class":552,"line":839},16,[550,841,842],{"class":567},"    },\n",[550,844,846],{"class":552,"line":845},17,[550,847,848],{"class":567},"  },\n",[550,850,852],{"class":552,"line":851},18,[550,853,854],{"class":567},"});\n",[408,856,857,858,863,864,867,868,871],{},"Route patterns support wildcards via ",[431,859,862],{"href":860,"rel":861},"https:\u002F\u002Fgithub.com\u002Fh3js\u002Frou3",[454],"rou3"," matching (e.g., ",[416,865,866],{},"\u002Fapi\u002Fslow\u002F**"," matches all routes under ",[416,869,870],{},"\u002Fapi\u002Fslow\u002F",").",[437,873,875],{"id":874},"proxy-route-rules","Proxy route rules",[408,877,878,879,882,883,888],{},"Nitro automatically optimizes ",[416,880,881],{},"proxy"," route rules on Vercel by generating ",[431,884,887],{"href":885,"rel":886},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Frewrites",[454],"CDN-level rewrites"," at build time. This means matching requests are proxied at the edge without invoking a serverless function, reducing latency and cost.",[541,890,892],{"className":543,"code":891,"filename":545,"language":546,"meta":5,"style":5},"export 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",[416,893,894,904,909,915,922,932,936,940],{"__ignoreMap":5},[550,895,896,898,900,902],{"class":552,"line":553},[550,897,557],{"class":556},[550,899,560],{"class":556},[550,901,564],{"class":563},[550,903,568],{"class":567},[550,905,906],{"class":552,"line":571},[550,907,908],{"class":567},"  routeRules: {\n",[550,910,911],{"class":552,"line":577},[550,912,914],{"class":913},"sCsY4","    \u002F\u002F Proxied at CDN level — no function invocation\n",[550,916,917,920],{"class":552,"line":583},[550,918,919],{"class":589},"    \"\u002Fapi\u002F**\"",[550,921,747],{"class":567},[550,923,924,927,930],{"class":552,"line":593},[550,925,926],{"class":567},"      proxy: ",[550,928,929],{"class":589},"\"https:\u002F\u002Fapi.example.com\u002F**\"",[550,931,645],{"class":567},[550,933,934],{"class":552,"line":599},[550,935,842],{"class":567},[550,937,938],{"class":552,"line":605},[550,939,848],{"class":567},[550,941,942],{"class":552,"line":760},[550,943,854],{"class":567},[486,945,947],{"id":946},"when-cdn-rewrites-apply","When CDN rewrites apply",[408,949,950,951,954],{},"A proxy rule is offloaded to a Vercel CDN rewrite when ",[411,952,953],{},"all"," of the following are true:",[445,956,957,971],{},[448,958,959,960,963,964,967,968,871],{},"The target is an ",[411,961,962],{},"external URL"," (starts with ",[416,965,966],{},"http:\u002F\u002F"," or ",[416,969,970],{},"https:\u002F\u002F",[448,972,973,974,977],{},"No advanced ",[416,975,976],{},"ProxyOptions"," are set on the rule.",[486,979,981],{"id":980},"fallback-to-runtime-proxy","Fallback to runtime proxy",[408,983,984,985,987],{},"When the proxy rule uses any of the following ",[416,986,976],{},", Nitro keeps it as a runtime proxy handled by the serverless function:",[445,989,990,996,1006,1012,1021],{},[448,991,992,995],{},[416,993,994],{},"headers"," — custom headers on the outgoing request to the upstream",[448,997,998,1001,1002,1005],{},[416,999,1000],{},"forwardHeaders"," \u002F ",[416,1003,1004],{},"filterHeaders"," — header filtering",[448,1007,1008,1011],{},[416,1009,1010],{},"fetchOptions"," — custom fetch options",[448,1013,1014,1001,1017,1020],{},[416,1015,1016],{},"cookieDomainRewrite",[416,1018,1019],{},"cookiePathRewrite"," — cookie manipulation",[448,1022,1023,1026],{},[416,1024,1025],{},"onResponse"," — response callback",[425,1028,1029],{},[408,1030,1031,1032,1034,1035,1038],{},"Response headers defined on the route rule via the ",[416,1033,994],{}," option are still applied to CDN-level rewrites. Only request-level ",[416,1036,1037],{},"ProxyOptions.headers"," (sent to the upstream) require a runtime proxy.",[437,1040,1042],{"id":1041},"scheduled-tasks-cron-jobs","Scheduled tasks (Cron Jobs)",[420,1044],{"title":1045,"to":1046},"Vercel Cron Jobs","https:\u002F\u002Fvercel.com\u002Fdocs\u002Fcron-jobs",[408,1048,1049,1050,1056,1057,1060,1061,1063],{},"Nitro automatically converts your ",[431,1051,1053],{"href":1052},"\u002Fdocs\u002Ftasks#scheduled-tasks",[416,1054,1055],{},"scheduledTasks"," configuration into ",[431,1058,1045],{"href":1046,"rel":1059},[454]," at build time. Define your schedules in your Nitro config and deploy - no manual ",[416,1062,618],{}," cron configuration required.",[541,1065,1067],{"className":543,"code":1066,"filename":545,"language":546,"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",[416,1068,1069,1081,1085,1095,1100,1108,1112,1117,1122,1135,1140,1153,1157],{"__ignoreMap":5},[550,1070,1071,1073,1075,1077,1079],{"class":552,"line":553},[550,1072,702],{"class":556},[550,1074,705],{"class":567},[550,1076,708],{"class":556},[550,1078,711],{"class":589},[550,1080,714],{"class":567},[550,1082,1083],{"class":552,"line":571},[550,1084,720],{"emptyLinePlaceholder":719},[550,1086,1087,1089,1091,1093],{"class":552,"line":577},[550,1088,557],{"class":556},[550,1090,560],{"class":556},[550,1092,564],{"class":563},[550,1094,568],{"class":567},[550,1096,1097],{"class":552,"line":583},[550,1098,1099],{"class":567},"  experimental: {\n",[550,1101,1102,1105],{"class":552,"line":593},[550,1103,1104],{"class":567},"    tasks: ",[550,1106,1107],{"class":635},"true\n",[550,1109,1110],{"class":552,"line":599},[550,1111,848],{"class":567},[550,1113,1114],{"class":552,"line":605},[550,1115,1116],{"class":567},"  scheduledTasks: {\n",[550,1118,1119],{"class":552,"line":760},[550,1120,1121],{"class":913},"    \u002F\u002F Run `cms:update` every hour\n",[550,1123,1124,1127,1130,1133],{"class":552,"line":771},[550,1125,1126],{"class":589},"    '0 * * * *'",[550,1128,1129],{"class":567},": [",[550,1131,1132],{"class":589},"'cms:update'",[550,1134,800],{"class":567},[550,1136,1137],{"class":552,"line":777},[550,1138,1139],{"class":913},"    \u002F\u002F Run `db:cleanup` every day at midnight\n",[550,1141,1142,1145,1147,1150],{"class":552,"line":785},[550,1143,1144],{"class":589},"    '0 0 * * *'",[550,1146,1129],{"class":567},[550,1148,1149],{"class":589},"'db:cleanup'",[550,1151,1152],{"class":567},"]\n",[550,1154,1155],{"class":552,"line":803},[550,1156,602],{"class":567},[550,1158,1159],{"class":552,"line":808},[550,1160,608],{"class":567},[486,1162,1164],{"id":1163},"secure-cron-job-endpoints","Secure cron job endpoints",[420,1166],{"title":1167,"to":1168},"Securing cron jobs","https:\u002F\u002Fvercel.com\u002Fdocs\u002Fcron-jobs\u002Fmanage-cron-jobs#securing-cron-jobs",[408,1170,1171,1172,1175,1176,1178,1179,1182],{},"To prevent unauthorized access to the cron handler, set a ",[416,1173,1174],{},"CRON_SECRET"," environment variable in your Vercel project settings. When ",[416,1177,1174],{}," is set, Nitro validates the ",[416,1180,1181],{},"Authorization"," header on every cron invocation.",[437,1184,1186],{"id":1185},"queues","Queues",[420,1188],{"title":1189,"to":690},"Vercel Queues",[408,1191,1192,1193,1196,1197,1200],{},"Nitro integrates with ",[431,1194,1189],{"href":690,"rel":1195},[454]," to process messages asynchronously. Define your queue topics in the Nitro config and handle incoming messages with the ",[416,1198,1199],{},"vercel:queue"," runtime hook.",[541,1202,1204],{"className":543,"code":1203,"filename":545,"language":546,"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",[416,1205,1206,1218,1222,1232,1237,1247,1251,1256,1261,1266,1277,1297,1302,1306,1310],{"__ignoreMap":5},[550,1207,1208,1210,1212,1214,1216],{"class":552,"line":553},[550,1209,702],{"class":556},[550,1211,705],{"class":567},[550,1213,708],{"class":556},[550,1215,711],{"class":589},[550,1217,714],{"class":567},[550,1219,1220],{"class":552,"line":571},[550,1221,720],{"emptyLinePlaceholder":719},[550,1223,1224,1226,1228,1230],{"class":552,"line":577},[550,1225,557],{"class":556},[550,1227,560],{"class":556},[550,1229,564],{"class":563},[550,1231,568],{"class":567},[550,1233,1234],{"class":552,"line":583},[550,1235,1236],{"class":913},"  \u002F\u002F Standalone Nitro scans `serverDir` for routes and plugins\n",[550,1238,1239,1242,1245],{"class":552,"line":593},[550,1240,1241],{"class":567},"  serverDir: ",[550,1243,1244],{"class":589},"\".\u002Fserver\"",[550,1246,645],{"class":567},[550,1248,1249],{"class":552,"line":599},[550,1250,574],{"class":567},[550,1252,1253],{"class":552,"line":605},[550,1254,1255],{"class":567},"    queues: {\n",[550,1257,1258],{"class":552,"line":760},[550,1259,1260],{"class":567},"      triggers: [\n",[550,1262,1263],{"class":552,"line":771},[550,1264,1265],{"class":913},"        \u002F\u002F Only `topic` is required\n",[550,1267,1268,1271,1274],{"class":552,"line":777},[550,1269,1270],{"class":567},"        { topic: ",[550,1272,1273],{"class":589},"\"notifications\"",[550,1275,1276],{"class":567}," },\n",[550,1278,1279,1281,1283,1286,1289,1292,1295],{"class":552,"line":785},[550,1280,1270],{"class":567},[550,1282,828],{"class":589},[550,1284,1285],{"class":567},", retryAfterSeconds: ",[550,1287,1288],{"class":635},"60",[550,1290,1291],{"class":567},", initialDelaySeconds: ",[550,1293,1294],{"class":635},"5",[550,1296,1276],{"class":567},[550,1298,1299],{"class":552,"line":803},[550,1300,1301],{"class":567},"      ],\n",[550,1303,1304],{"class":552,"line":808},[550,1305,842],{"class":567},[550,1307,1308],{"class":552,"line":816},[550,1309,848],{"class":567},[550,1311,1312],{"class":552,"line":834},[550,1313,854],{"class":567},[486,1315,1317],{"id":1316},"handling-messages","Handling messages",[408,1319,1320,1321,1323,1324,1328],{},"Use the ",[416,1322,1199],{}," hook in a ",[431,1325,1327],{"href":1326},"\u002Fguide\u002Fplugins","Nitro plugin"," to process incoming queue messages:",[541,1330,1333],{"className":543,"code":1331,"filename":1332,"language":546,"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",[416,1334,1335,1348,1352,1377,1414,1450,1455],{"__ignoreMap":5},[550,1336,1337,1339,1342,1344,1346],{"class":552,"line":553},[550,1338,702],{"class":556},[550,1340,1341],{"class":567}," { definePlugin } ",[550,1343,708],{"class":556},[550,1345,711],{"class":589},[550,1347,714],{"class":567},[550,1349,1350],{"class":552,"line":571},[550,1351,720],{"emptyLinePlaceholder":719},[550,1353,1354,1356,1358,1361,1364,1368,1371,1374],{"class":552,"line":577},[550,1355,557],{"class":556},[550,1357,560],{"class":556},[550,1359,1360],{"class":563}," definePlugin",[550,1362,1363],{"class":567},"((",[550,1365,1367],{"class":1366},"sQHwn","nitroApp",[550,1369,1370],{"class":567},") ",[550,1372,1373],{"class":556},"=>",[550,1375,1376],{"class":567}," {\n",[550,1378,1379,1382,1385,1388,1391,1394,1397,1399,1402,1404,1407,1410,1412],{"class":552,"line":583},[550,1380,1381],{"class":567},"  nitroApp.hooks.",[550,1383,1384],{"class":563},"hook",[550,1386,1387],{"class":567},"(",[550,1389,1390],{"class":589},"\"vercel:queue\"",[550,1392,1393],{"class":567},", ({ ",[550,1395,1396],{"class":1366},"message",[550,1398,794],{"class":567},[550,1400,1401],{"class":1366},"metadata",[550,1403,794],{"class":567},[550,1405,1406],{"class":1366},"send",[550,1408,1409],{"class":567}," }) ",[550,1411,1373],{"class":556},[550,1413,1376],{"class":567},[550,1415,1416,1419,1422,1424,1427,1429,1431,1434,1437,1439,1441,1444,1447],{"class":552,"line":593},[550,1417,1418],{"class":567},"    console.",[550,1420,1421],{"class":563},"log",[550,1423,1387],{"class":567},[550,1425,1426],{"class":589},"`[${",[550,1428,1401],{"class":567},[550,1430,435],{"class":589},[550,1432,1433],{"class":567},"topicName",[550,1435,1436],{"class":589},"}] Message ${",[550,1438,1401],{"class":567},[550,1440,435],{"class":589},[550,1442,1443],{"class":567},"messageId",[550,1445,1446],{"class":589},"}:`",[550,1448,1449],{"class":567},", message);\n",[550,1451,1452],{"class":552,"line":599},[550,1453,1454],{"class":567},"  });\n",[550,1456,1457],{"class":552,"line":605},[550,1458,854],{"class":567},[486,1460,1462],{"id":1461},"running-tasks-from-queue-messages","Running tasks from queue messages",[408,1464,1465,1466,539],{},"You can use queue messages to trigger ",[431,1467,1468],{"href":59},"Nitro tasks",[541,1470,1472],{"className":543,"code":1471,"filename":1332,"language":546,"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",[416,1473,1474,1486,1500,1504,1522,1552,1569,1585,1589,1593],{"__ignoreMap":5},[550,1475,1476,1478,1480,1482,1484],{"class":552,"line":553},[550,1477,702],{"class":556},[550,1479,1341],{"class":567},[550,1481,708],{"class":556},[550,1483,711],{"class":589},[550,1485,714],{"class":567},[550,1487,1488,1490,1493,1495,1498],{"class":552,"line":571},[550,1489,702],{"class":556},[550,1491,1492],{"class":567}," { runTask } ",[550,1494,708],{"class":556},[550,1496,1497],{"class":589}," \"nitro\u002Ftask\"",[550,1499,714],{"class":567},[550,1501,1502],{"class":552,"line":577},[550,1503,720],{"emptyLinePlaceholder":719},[550,1505,1506,1508,1510,1512,1514,1516,1518,1520],{"class":552,"line":583},[550,1507,557],{"class":556},[550,1509,560],{"class":556},[550,1511,1360],{"class":563},[550,1513,1363],{"class":567},[550,1515,1367],{"class":1366},[550,1517,1370],{"class":567},[550,1519,1373],{"class":556},[550,1521,1376],{"class":567},[550,1523,1524,1526,1528,1530,1532,1534,1537,1540,1542,1544,1546,1548,1550],{"class":552,"line":593},[550,1525,1381],{"class":567},[550,1527,1384],{"class":563},[550,1529,1387],{"class":567},[550,1531,1390],{"class":589},[550,1533,794],{"class":567},[550,1535,1536],{"class":556},"async",[550,1538,1539],{"class":567}," ({ ",[550,1541,1396],{"class":1366},[550,1543,794],{"class":567},[550,1545,1401],{"class":1366},[550,1547,1409],{"class":567},[550,1549,1373],{"class":556},[550,1551,1376],{"class":567},[550,1553,1554,1557,1560,1563,1566],{"class":552,"line":599},[550,1555,1556],{"class":556},"    if",[550,1558,1559],{"class":567}," (metadata.topicName ",[550,1561,1562],{"class":556},"===",[550,1564,1565],{"class":589}," \"orders\"",[550,1567,1568],{"class":567},") {\n",[550,1570,1571,1574,1577,1579,1582],{"class":552,"line":605},[550,1572,1573],{"class":556},"      await",[550,1575,1576],{"class":563}," runTask",[550,1578,1387],{"class":567},[550,1580,1581],{"class":589},"\"orders:fulfill\"",[550,1583,1584],{"class":567},", { payload: message });\n",[550,1586,1587],{"class":552,"line":760},[550,1588,596],{"class":567},[550,1590,1591],{"class":552,"line":771},[550,1592,1454],{"class":567},[550,1594,1595],{"class":552,"line":777},[550,1596,854],{"class":567},[486,1598,1600],{"id":1599},"sending-messages","Sending messages",[408,1602,1320,1603,1606],{},[416,1604,1605],{},"@vercel\u002Fqueue"," package directly to send messages to a topic:",[541,1608,1611],{"className":543,"code":1609,"filename":1610,"language":546,"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",[416,1612,1613,1626,1640,1644,1669,1691,1718,1726],{"__ignoreMap":5},[550,1614,1615,1617,1620,1622,1624],{"class":552,"line":553},[550,1616,702],{"class":556},[550,1618,1619],{"class":567}," { defineHandler } ",[550,1621,708],{"class":556},[550,1623,711],{"class":589},[550,1625,714],{"class":567},[550,1627,1628,1630,1633,1635,1638],{"class":552,"line":571},[550,1629,702],{"class":556},[550,1631,1632],{"class":567}," { send } ",[550,1634,708],{"class":556},[550,1636,1637],{"class":589}," \"@vercel\u002Fqueue\"",[550,1639,714],{"class":567},[550,1641,1642],{"class":552,"line":577},[550,1643,720],{"emptyLinePlaceholder":719},[550,1645,1646,1648,1650,1653,1655,1657,1660,1663,1665,1667],{"class":552,"line":583},[550,1647,557],{"class":556},[550,1649,560],{"class":556},[550,1651,1652],{"class":563}," defineHandler",[550,1654,1387],{"class":567},[550,1656,1536],{"class":556},[550,1658,1659],{"class":567}," (",[550,1661,1662],{"class":1366},"event",[550,1664,1370],{"class":567},[550,1666,1373],{"class":556},[550,1668,1376],{"class":567},[550,1670,1671,1674,1677,1680,1683,1686,1688],{"class":552,"line":593},[550,1672,1673],{"class":556},"  const",[550,1675,1676],{"class":635}," order",[550,1678,1679],{"class":556}," =",[550,1681,1682],{"class":556}," await",[550,1684,1685],{"class":567}," event.req.",[550,1687,623],{"class":563},[550,1689,1690],{"class":567},"();\n",[550,1692,1693,1695,1698,1700,1703,1706,1708,1711,1713,1715],{"class":552,"line":599},[550,1694,1673],{"class":556},[550,1696,1697],{"class":567}," { ",[550,1699,1443],{"class":635},[550,1701,1702],{"class":567}," } ",[550,1704,1705],{"class":556},"=",[550,1707,1682],{"class":556},[550,1709,1710],{"class":563}," send",[550,1712,1387],{"class":567},[550,1714,828],{"class":589},[550,1716,1717],{"class":567},", order);\n",[550,1719,1720,1723],{"class":552,"line":605},[550,1721,1722],{"class":556},"  return",[550,1724,1725],{"class":567}," { messageId };\n",[550,1727,1728],{"class":552,"line":760},[550,1729,854],{"class":567},[486,1731,1733],{"id":1732},"local-development","Local development",[408,1735,1736,1737,1740,1741,1744,1745,1747,1748,1751,1752,1755],{},"Queues work in ",[416,1738,1739],{},"nitro dev"," — ",[416,1742,1743],{},"send()"," delivers messages straight to your ",[416,1746,1199],{}," hook, so you can iterate without deploying. Pull your Vercel environment first with ",[416,1749,1750],{},"vercel link"," and ",[416,1753,1754],{},"vercel env pull"," so the SDK can authenticate.",[408,1757,1758,1759,1762],{},"If your hook throws, the message is retried locally. Retries honour ",[416,1760,1761],{},"retryAfterSeconds"," from each trigger when set.",[437,1764,1766],{"id":1765},"custom-build-output-configuration","Custom build output configuration",[408,1768,1769,1770,1775,1776,535,1779,1781],{},"You can provide additional ",[431,1771,1774],{"href":1772,"rel":1773},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fbuild-output-api\u002Fv3",[454],"build output configuration"," using ",[416,1777,1778],{},"vercel.config",[416,1780,538],{},". It will be merged with built-in auto-generated config.",[437,1783,1785],{"id":1784},"on-demand-incremental-static-regeneration-isr","On-Demand incremental static regeneration (ISR)",[408,1787,1788],{},"On-demand revalidation allows you to purge the cache for an ISR route whenever you want, foregoing the time interval required with background revalidation.",[408,1790,1791],{},"To revalidate a page on demand:",[1793,1794,1796,1814,1877],"steps",{"level":1795},"4",[1797,1798,1799,1800],"h4",{},"Create an Environment Variable which will store a revalidation secret",[445,1801,1802],{},[448,1803,1804,1805,967,1808,1813],{},"You can use the command ",[416,1806,1807],{},"openssl rand -base64 32",[431,1809,1812],{"href":1810,"rel":1811},"https:\u002F\u002Fgenerate-secret.vercel.app\u002F32",[454],"Generate a Secret"," to generate a random value.",[1797,1815,1816,1817],{},"Update your configuration:",[541,1818,1820],{"className":543,"code":1819,"filename":545,"language":546,"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",[416,1821,1822,1834,1838,1848,1852,1857,1865,1869,1873],{"__ignoreMap":5},[550,1823,1824,1826,1828,1830,1832],{"class":552,"line":553},[550,1825,702],{"class":556},[550,1827,705],{"class":567},[550,1829,708],{"class":556},[550,1831,711],{"class":589},[550,1833,714],{"class":567},[550,1835,1836],{"class":552,"line":571},[550,1837,720],{"emptyLinePlaceholder":719},[550,1839,1840,1842,1844,1846],{"class":552,"line":577},[550,1841,557],{"class":556},[550,1843,560],{"class":556},[550,1845,564],{"class":563},[550,1847,568],{"class":567},[550,1849,1850],{"class":552,"line":583},[550,1851,574],{"class":567},[550,1853,1854],{"class":552,"line":593},[550,1855,1856],{"class":567},"    config: {\n",[550,1858,1859,1862],{"class":552,"line":599},[550,1860,1861],{"class":567},"      bypassToken: process.env.",[550,1863,1864],{"class":635},"VERCEL_BYPASS_TOKEN\n",[550,1866,1867],{"class":552,"line":605},[550,1868,596],{"class":567},[550,1870,1871],{"class":552,"line":760},[550,1872,602],{"class":567},[550,1874,1875],{"class":552,"line":771},[550,1876,608],{"class":567},[1797,1878,1879,1880,1883],{},"To trigger \"On-Demand Incremental Static Regeneration (ISR)\" and revalidate a path to a Prerender Function, make a GET or HEAD request to that path with a header of x-prerender-revalidate: ",[416,1881,1882],{},"bypassToken",". When that Prerender Function endpoint is accessed with this header set, the cache will be revalidated. The next request to that function should return a fresh response.",[486,1885,1887],{"id":1886},"fine-grained-isr-config-via-route-rules","Fine-grained ISR config via route rules",[408,1889,1890],{},"By default, query params affect cache keys but are not passed to the route handler unless specified.",[408,1892,1893,1894,1897],{},"You can pass an options object to ",[416,1895,1896],{},"isr"," route rule to configure caching behavior.",[445,1899,1900,1914,1920,1949,1966],{},[448,1901,1902,1905,1906,1909,1910,1913],{},[416,1903,1904],{},"expiration",": Expiration time (in seconds) before the cached asset will be re-generated by invoking the Serverless Function. Setting the value to ",[416,1907,1908],{},"false"," (or ",[416,1911,1912],{},"isr: true"," route rule) means it will never expire.",[448,1915,1916,1919],{},[416,1917,1918],{},"group",": Group number of the asset. Prerender assets with the same group number will all be re-validated at the same time.",[448,1921,1922,1925,1926],{},[416,1923,1924],{},"allowQuery",": List of query string parameter names that will be cached independently.\n",[445,1927,1928,1931,1938],{},[448,1929,1930],{},"If an empty array, query values are not considered for caching.",[448,1932,1933,1934,1937],{},"If ",[416,1935,1936],{},"undefined"," each unique query value is cached independently.",[448,1939,1940,1941,1944,1945,1948],{},"For wildcard ",[416,1942,1943],{},"\u002F**"," route rules, ",[416,1946,1947],{},"url"," is always added",[448,1950,1951,1954,1955,1958,1959,1962,1963,1965],{},[416,1952,1953],{},"passQuery",": When ",[416,1956,1957],{},"true",", the query string will be present on the ",[416,1960,1961],{},"request"," argument passed to the invoked function. The ",[416,1964,1924],{}," filter still applies.",[448,1967,1968,1954,1971,1973,1974],{},[416,1969,1970],{},"exposeErrBody",[416,1972,1957],{},", expose the response body regardless of status code including error status codes. (default ",[416,1975,1908],{},[541,1977,1979],{"className":543,"code":1978,"language":546,"meta":5,"style":5},"export default defineConfig({\n  routeRules: {\n    \"\u002Fproducts\u002F**\": {\n      isr: {\n        allowQuery: [\"q\"],\n        passQuery: true,\n        exposeErrBody: true\n      },\n    },\n  },\n});\n",[416,1980,1981,1991,1995,2002,2007,2017,2026,2033,2037,2041,2045],{"__ignoreMap":5},[550,1982,1983,1985,1987,1989],{"class":552,"line":553},[550,1984,557],{"class":556},[550,1986,560],{"class":556},[550,1988,564],{"class":563},[550,1990,568],{"class":567},[550,1992,1993],{"class":552,"line":571},[550,1994,908],{"class":567},[550,1996,1997,2000],{"class":552,"line":577},[550,1998,1999],{"class":589},"    \"\u002Fproducts\u002F**\"",[550,2001,747],{"class":567},[550,2003,2004],{"class":552,"line":583},[550,2005,2006],{"class":567},"      isr: {\n",[550,2008,2009,2012,2015],{"class":552,"line":593},[550,2010,2011],{"class":567},"        allowQuery: [",[550,2013,2014],{"class":589},"\"q\"",[550,2016,800],{"class":567},[550,2018,2019,2022,2024],{"class":552,"line":599},[550,2020,2021],{"class":567},"        passQuery: ",[550,2023,1957],{"class":635},[550,2025,645],{"class":567},[550,2027,2028,2031],{"class":552,"line":605},[550,2029,2030],{"class":567},"        exposeErrBody: ",[550,2032,1107],{"class":635},[550,2034,2035],{"class":552,"line":760},[550,2036,774],{"class":567},[550,2038,2039],{"class":552,"line":771},[550,2040,842],{"class":567},[550,2042,2043],{"class":552,"line":777},[550,2044,848],{"class":567},[550,2046,2047],{"class":552,"line":785},[550,2048,854],{"class":567},[2050,2051,2052],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}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 .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":571,"depth":571,"links":2054},[2055,2058,2059,2060,2061,2065,2068,2074,2075],{"id":439,"depth":571,"text":440,"children":2056},[2057],{"id":488,"depth":577,"text":489},{"id":500,"depth":571,"text":501},{"id":519,"depth":571,"text":520},{"id":663,"depth":571,"text":664},{"id":874,"depth":571,"text":875,"children":2062},[2063,2064],{"id":946,"depth":577,"text":947},{"id":980,"depth":577,"text":981},{"id":1041,"depth":571,"text":1042,"children":2066},[2067],{"id":1163,"depth":577,"text":1164},{"id":1185,"depth":571,"text":1186,"children":2069},[2070,2071,2072,2073],{"id":1316,"depth":577,"text":1317},{"id":1461,"depth":577,"text":1462},{"id":1599,"depth":577,"text":1600},{"id":1732,"depth":577,"text":1733},{"id":1765,"depth":571,"text":1766},{"id":1784,"depth":571,"text":1785,"children":2076},[2077],{"id":1886,"depth":577,"text":1887},"Deploy Nitro apps to Vercel.","md",{},{},{"title":211,"description":2078},"8iwx7eFhL4SV1k3q3VthPsMkRvpbZsr4Hi_WkCbJlII",[2085,2087],{"title":207,"path":208,"stem":209,"description":2086,"children":-1},"Deploy Nitro apps to StormKit.",{"title":215,"path":216,"stem":217,"description":2088,"children":-1},"Deploy Nitro apps to Zeabur.",1782768416445]