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