[{"data":1,"prerenderedAt":1842},["ShallowReactive",2],{"docs-navigation":3,"docs:\u002Fdocs\u002Fnuxt\u002Fbrowser":618,"\u002Fdocs\u002Fnuxt\u002Fbrowser:surround":1839},[4],{"title":5,"path":6,"children":7},"Docs","\u002Fdocs",[8,316,467],{"title":9,"path":10,"children":11},"Vite","\u002Fdocs\u002Fvite",[12,30,52,63,78,100,174,183,219,238,255,273,304],{"title":13,"path":14,"description":15,"icon":16,"children":17},"Getting Started","\u002Fdocs\u002Fvite\u002Fgetting-started","Learn the ViteHub package model, pick a starting path, and get to a working feature quickly.","i-lucide-rocket",[18,22,26],{"title":19,"path":20,"description":21},"Choose a Package","\u002Fdocs\u002Fvite\u002Fgetting-started\u002Fchoose-a-package","Pick the right ViteHub feature by the job you need to solve on the server.",{"title":23,"path":24,"description":25},"Entrypoints","\u002Fdocs\u002Fvite\u002Fgetting-started\u002Fentrypoints","Understand what belongs on the package root and what each framework-specific entrypoint owns.",{"title":27,"path":28,"description":29},"Architecture","\u002Fdocs\u002Fvite\u002Fgetting-started\u002Farchitecture","How ViteHub keeps one shared feature bridge across Vite, Nitro, and Nuxt.",{"title":31,"path":32,"description":33,"icon":34,"children":35},"Database","\u002Fdocs\u002Fvite\u002Fdatabase","Set up Drizzle or Prisma with `@vitehub\u002Fdb` and explicit ORM runtime imports.","i-lucide-database",[36,40,44,48],{"title":37,"path":38,"description":39},"Drizzle","\u002Fdocs\u002Fvite\u002Fdatabase\u002Fdrizzle","Configure Drizzle with `@vitehub\u002Fdb\u002Fdrizzle`, schema discovery, and committed SQL migrations.",{"title":41,"path":42,"description":43},"Prisma","\u002Fdocs\u002Fvite\u002Fdatabase\u002Fprisma","Configure Prisma with `@vitehub\u002Fdb\u002Fprisma`, generated client output, and native Prisma migrations.",{"title":45,"path":46,"description":47},"Migrations","\u002Fdocs\u002Fvite\u002Fdatabase\u002Fmigrations","Understand when ViteHub applies committed Drizzle and Prisma migrations during development and build.",{"title":49,"path":50,"description":51},"Platform notes","\u002Fdocs\u002Fvite\u002Fdatabase\u002Fplatform-notes","Review driver defaults, hosting behavior, and current runtime limits for Drizzle and Prisma.",{"title":53,"path":54,"description":55,"icon":56,"children":57},"KV","\u002Fdocs\u002Fvite\u002Fkv","Set up key-value storage with the same provider detection used by NuxtHub.","i-lucide-database-zap",[58],{"title":59,"path":60,"description":61,"icon":62},"Usage","\u002Fdocs\u002Fvite\u002Fkv\u002Fusage","Use the KV SDK to set, get, delete, clear, and list key-value pairs.","i-lucide-code",{"title":64,"path":65,"description":66,"icon":67,"children":68},"Blob","\u002Fdocs\u002Fvite\u002Fblob","Add blob storage for images, videos, documents, and other files with `@vitehub\u002Fblob`.","i-lucide-shapes",[69,74],{"title":70,"path":71,"description":72,"icon":73},"Upload","\u002Fdocs\u002Fvite\u002Fblob\u002Fupload","Upload files with validation, simple form handlers, and multipart flows using `@vitehub\u002Fblob`.","i-lucide-upload",{"title":75,"path":76,"description":77,"icon":62},"Blob SDK","\u002Fdocs\u002Fvite\u002Fblob\u002Fusage","Store, read, list, validate, serve, and delete files with `@vitehub\u002Fblob`.",{"title":79,"path":80,"description":81,"icon":82,"children":83},"Vector","\u002Fdocs\u002Fvite\u002Fvector","Add provider-agnostic named vector indexes with similarity search.","i-lucide-scan-search",[84,90,95],{"title":85,"path":86,"description":87,"icon":88,"group":89},"Cloudflare","\u002Fdocs\u002Fvite\u002Fvector\u002Fcloudflare","Configure @vitehub\u002Fvector against Cloudflare Vectorize.","i-simple-icons-cloudflare","Providers",{"title":91,"path":92,"description":93,"icon":94,"group":89},"Postgres","\u002Fdocs\u002Fvite\u002Fvector\u002Fpostgres","Configure @vitehub\u002Fvector against a pgvector-backed Postgres database.","i-simple-icons-postgresql",{"title":96,"path":97,"description":98,"icon":99,"group":89},"Upstash","\u002Fdocs\u002Fvite\u002Fvector\u002Fupstash","Configure @vitehub\u002Fvector against the Upstash Vector HTTP API.","i-simple-icons-upstash",{"title":101,"path":102,"description":103,"icon":104,"children":105},"Queue","\u002Fdocs\u002Fvite\u002Fqueue","Send background jobs through Platformatic, Cloudflare, Vercel, Netlify, Upstash QStash, or Memory.","i-lucide-layers",[106,110,114,118,123,127,131,135,139,144,147,152,157,161,166,170],{"title":107,"path":108,"description":109},"Quickstart","\u002Fdocs\u002Fvite\u002Fqueue\u002Fquickstart","Get a first queue working locally with the memory provider.",{"title":111,"path":112,"description":113},"Runtime API","\u002Fdocs\u002Fvite\u002Fqueue\u002Fruntime-api","Reference for defineQueue, runQueue, deferQueue, getQueue, and the core Queue types.",{"title":115,"path":116,"description":117},"When to use Queue","\u002Fdocs\u002Fvite\u002Fqueue\u002Fwhen-to-use","Decide when Queue is the right primitive compared with Workflow, Cron, or inline request handling.",{"title":119,"path":120,"description":121,"group":122},"Send a job","\u002Fdocs\u002Fvite\u002Fqueue\u002Fguides\u002Fsend-a-job","Enqueue payloads with runQueue and the common delivery patterns.","Guides",{"title":124,"path":125,"description":126,"group":122},"Defer after response","\u002Fdocs\u002Fvite\u002Fqueue\u002Fguides\u002Fdefer-after-response","Use deferQueue when the queue send should happen after the current response is committed.",{"title":128,"path":129,"description":130,"group":122},"Validate payloads","\u002Fdocs\u002Fvite\u002Fqueue\u002Fguides\u002Fvalidate-payloads","Validate payloads before enqueueing and before running queue handlers.",{"title":132,"path":133,"description":134,"group":122},"Local development","\u002Fdocs\u002Fvite\u002Fqueue\u002Fguides\u002Flocal-development","Use the memory provider for local development and understand how auto-selection works.",{"title":136,"path":137,"description":138,"group":122},"Native handles","\u002Fdocs\u002Fvite\u002Fqueue\u002Fguides\u002Fnative-handles","Know when to use getQueue and provider-native methods instead of the portable runtime API.",{"title":140,"path":141,"description":142,"icon":143,"group":89},"Platformatic","\u002Fdocs\u002Fvite\u002Fqueue\u002Fproviders\u002Fplatformatic","Configure Platformatic Job Queue with local or self-hosted workers.","i-brand-platformatic",{"title":85,"path":145,"description":146,"icon":88,"group":89},"\u002Fdocs\u002Fvite\u002Fqueue\u002Fproviders\u002Fcloudflare","Configure Cloudflare Queues and process named queues in Workers.",{"title":148,"path":149,"description":150,"icon":151,"group":89},"Vercel","\u002Fdocs\u002Fvite\u002Fqueue\u002Fproviders\u002Fvercel","Configure Vercel Queue and send named jobs through Vercel.","i-simple-icons-vercel",{"title":153,"path":154,"description":155,"icon":156,"group":89},"Netlify","\u002Fdocs\u002Fvite\u002Fqueue\u002Fproviders\u002Fnetlify","Configure Netlify Async Workloads and run named queues on Netlify.","i-simple-icons-netlify",{"title":158,"path":159,"description":160,"icon":99,"group":89},"Upstash QStash","\u002Fdocs\u002Fvite\u002Fqueue\u002Fproviders\u002Fupstash-qstash","Configure Upstash QStash for queues and signed callback delivery.",{"title":162,"path":163,"description":164,"icon":165,"group":89},"Memory","\u002Fdocs\u002Fvite\u002Fqueue\u002Fproviders\u002Fmemory","Process queue jobs in-memory for local development and testing.","i-lucide-memory-stick",{"title":167,"path":168,"description":169},"Troubleshooting","\u002Fdocs\u002Fvite\u002Fqueue\u002Ftroubleshooting","Diagnose common Queue setup and runtime problems across local and hosted providers.",{"title":171,"path":172,"description":173},"Playground","\u002Fdocs\u002Fvite\u002Fqueue\u002Fplayground","Explore the existing Queue playground app and the files that show the end-to-end runtime flow.",{"title":175,"path":176,"description":177,"icon":178,"children":179},"Cache","\u002Fdocs\u002Fvite\u002Fcache","Configure Nitro cache storage for local development, Vercel, and Cloudflare deployments.","i-lucide-timer-reset",[180],{"title":59,"path":181,"description":182,"icon":62},"\u002Fdocs\u002Fvite\u002Fcache\u002Fusage","Cache routes and server functions with practical invalidation examples.",{"title":184,"path":185,"description":186,"icon":187,"children":188},"Email","\u002Fdocs\u002Fvite\u002Femail","Render markdown email files and send them through Resend, SendGrid, or Postmark.","i-lucide-mail",[189,194,199,204,209,214],{"title":190,"path":191,"description":192,"icon":193},"Frontmatter","\u002Fdocs\u002Fvite\u002Femail\u002Ffrontmatter","Define subject lines, recipients, metadata, and delivery defaults directly in the Markdown email file.","i-lucide-file-text",{"title":195,"path":196,"description":197,"icon":198},"Input Schemas","\u002Fdocs\u002Fvite\u002Femail\u002Finput-schemas","Add an embedded schema block when you want email input validation and stronger TypeScript inference.","i-brand-standard-schema",{"title":200,"path":201,"description":202,"icon":203},"i18n","\u002Fdocs\u002Fvite\u002Femail\u002Fi18n","Localize Markdown emails with locale-specific template files and ICU message formatting.","i-lucide-languages",{"title":205,"path":206,"description":207,"icon":208,"group":89},"Resend","\u002Fdocs\u002Fvite\u002Femail\u002Fresend","Configure Resend for transactional delivery and native batch sending.","i-provider-resend",{"title":210,"path":211,"description":212,"icon":213,"group":89},"SendGrid","\u002Fdocs\u002Fvite\u002Femail\u002Fsendgrid","Configure SendGrid when you need advanced delivery controls and template support.","i-provider-sendgrid",{"title":215,"path":216,"description":217,"icon":218,"group":89},"Postmark","\u002Fdocs\u002Fvite\u002Femail\u002Fpostmark","Configure Postmark for transactional streams and template-first sends.","i-provider-postmark",{"title":220,"path":221,"description":222,"icon":223,"children":224},"Workflow","\u002Fdocs\u002Fvite\u002Fworkflow","Run durable workflows on Cloudflare, Netlify, Vercel, or OpenWorkflow.","i-lucide-workflow",[225,228,231,235],{"title":85,"path":226,"description":227,"icon":88},"\u002Fdocs\u002Fvite\u002Fworkflow\u002Fcloudflare","Configure Cloudflare Workflows and inspect runs from your app.",{"title":148,"path":229,"description":230,"icon":151},"\u002Fdocs\u002Fvite\u002Fworkflow\u002Fvercel","Configure Vercel Workflow and run durable workflows on Vercel.",{"title":232,"path":233,"description":234,"icon":223},"OpenWorkflow","\u002Fdocs\u002Fvite\u002Fworkflow\u002Fopenworkflow","Connect OpenWorkflow and use your own workflow backend behind the ViteHub API.",{"title":153,"path":236,"description":237,"icon":156},"\u002Fdocs\u002Fvite\u002Fworkflow\u002Fnetlify","Configure Netlify Async Workloads and run discovered workflows on Netlify.",{"title":239,"path":240,"description":241,"icon":242,"children":243},"Cron","\u002Fdocs\u002Fvite\u002Fcron","Schedule crons with Node, Cloudflare, or Vercel.","i-lucide-list-check",[244,249,252],{"title":245,"path":246,"description":247,"icon":248},"Node","\u002Fdocs\u002Fvite\u002Fcron\u002Fnode","Configure in-process scheduling for local crons and lightweight cron tasks.","i-simple-icons-nodedotjs",{"title":85,"path":250,"description":251,"icon":88},"\u002Fdocs\u002Fvite\u002Fcron\u002Fcloudflare","Configure Cloudflare-triggered schedules for your crons.",{"title":148,"path":253,"description":254,"icon":151},"\u002Fdocs\u002Fvite\u002Fcron\u002Fvercel","Generate Vercel cron config from discovered crons.",{"title":256,"path":257,"description":258,"icon":259,"children":260},"Browser","\u002Fdocs\u002Fvite\u002Fbrowser","Run named browser automations against Playwright, Browserbase, or Cloudflare Browser Rendering.","i-lucide-monitor-play",[261,264,269],{"title":85,"path":262,"description":263,"icon":88},"\u002Fdocs\u002Fvite\u002Fbrowser\u002Fcloudflare","Configure Cloudflare Browser Rendering through the official `cloudflare` package.",{"title":265,"path":266,"description":267,"icon":268},"Browserbase","\u002Fdocs\u002Fvite\u002Fbrowser\u002Fbrowserbase","Configure Browserbase for managed CDP sessions and session-aware browser calls.","i-lucide-orbit",{"title":270,"path":271,"description":272,"icon":259},"Playwright","\u002Fdocs\u002Fvite\u002Fbrowser\u002Fplaywright","Configure remote Playwright browser sessions over a WebSocket endpoint.",{"title":274,"path":275,"description":276,"icon":277,"children":278},"Sandbox","\u002Fdocs\u002Fvite\u002Fsandbox","Run isolated sandboxes on Cloudflare Durable Objects, Cloudflare Dynamic Workers, Vercel, Deno, Docker, or locally.","i-lucide-box",[279,282,286,289,294,299],{"title":85,"path":280,"description":281,"icon":88},"\u002Fdocs\u002Fvite\u002Fsandbox\u002Fcloudflare","Configure Cloudflare Sandbox on top of Durable Objects.",{"title":283,"path":284,"description":285,"icon":88},"Cloudflare Dynamic","\u002Fdocs\u002Fvite\u002Fsandbox\u002Fcloudflare-dynamic","Configure Cloudflare Dynamic Workers with the Worker Loader API.",{"title":148,"path":287,"description":288,"icon":151},"\u002Fdocs\u002Fvite\u002Fsandbox\u002Fvercel","Configure Vercel Sandbox and run isolated sandboxes on Vercel.",{"title":290,"path":291,"description":292,"icon":293},"Deno","\u002Fdocs\u002Fvite\u002Fsandbox\u002Fdeno","Configure Deno Sandbox and run isolated sandboxes on Deno Deploy.","i-simple-icons-deno",{"title":295,"path":296,"description":297,"icon":298},"Docker","\u002Fdocs\u002Fvite\u002Fsandbox\u002Fdocker","Configure Docker Sandbox and run isolated sandboxes locally.","i-simple-icons-docker",{"title":300,"path":301,"description":302,"icon":303},"Local","\u002Fdocs\u002Fvite\u002Fsandbox\u002Flocal","Run sandboxes locally with OS-level isolation using platform primitives.","i-lucide-monitor",{"title":305,"path":306,"description":307,"icon":308,"children":309},"Analytics","\u002Fdocs\u002Fvite\u002Fanalytics","Integrate explicit analytics backends with a small shared runtime API.","i-lucide-megaphone",[310,313],{"title":148,"path":311,"description":312,"icon":151},"\u002Fdocs\u002Fvite\u002Fanalytics\u002Fvercel","Configure Vercel Analytics through the official SDK and keep a small portable runtime API.",{"title":85,"path":314,"description":315,"icon":88},"\u002Fdocs\u002Fvite\u002Fanalytics\u002Fcloudflare","Configure first-party analytics ingestion on Cloudflare and query a semantic event shape on top of Analytics Engine slots.",{"title":317,"path":318,"children":319},"Nitro","\u002Fdocs\u002Fnitro",[320,329,340,345,352,361,396,401,416,427,436,445,460],{"title":13,"path":321,"description":15,"icon":16,"children":322},"\u002Fdocs\u002Fnitro\u002Fgetting-started",[323,325,327],{"title":19,"path":324,"description":21},"\u002Fdocs\u002Fnitro\u002Fgetting-started\u002Fchoose-a-package",{"title":23,"path":326,"description":25},"\u002Fdocs\u002Fnitro\u002Fgetting-started\u002Fentrypoints",{"title":27,"path":328,"description":29},"\u002Fdocs\u002Fnitro\u002Fgetting-started\u002Farchitecture",{"title":31,"path":330,"description":33,"icon":34,"children":331},"\u002Fdocs\u002Fnitro\u002Fdatabase",[332,334,336,338],{"title":37,"path":333,"description":39},"\u002Fdocs\u002Fnitro\u002Fdatabase\u002Fdrizzle",{"title":41,"path":335,"description":43},"\u002Fdocs\u002Fnitro\u002Fdatabase\u002Fprisma",{"title":45,"path":337,"description":47},"\u002Fdocs\u002Fnitro\u002Fdatabase\u002Fmigrations",{"title":49,"path":339,"description":51},"\u002Fdocs\u002Fnitro\u002Fdatabase\u002Fplatform-notes",{"title":53,"path":341,"description":55,"icon":56,"children":342},"\u002Fdocs\u002Fnitro\u002Fkv",[343],{"title":59,"path":344,"description":61,"icon":62},"\u002Fdocs\u002Fnitro\u002Fkv\u002Fusage",{"title":64,"path":346,"description":66,"icon":67,"children":347},"\u002Fdocs\u002Fnitro\u002Fblob",[348,350],{"title":70,"path":349,"description":72,"icon":73},"\u002Fdocs\u002Fnitro\u002Fblob\u002Fupload",{"title":75,"path":351,"description":77,"icon":62},"\u002Fdocs\u002Fnitro\u002Fblob\u002Fusage",{"title":79,"path":353,"description":81,"icon":82,"children":354},"\u002Fdocs\u002Fnitro\u002Fvector",[355,357,359],{"title":85,"path":356,"description":87,"icon":88,"group":89},"\u002Fdocs\u002Fnitro\u002Fvector\u002Fcloudflare",{"title":91,"path":358,"description":93,"icon":94,"group":89},"\u002Fdocs\u002Fnitro\u002Fvector\u002Fpostgres",{"title":96,"path":360,"description":98,"icon":99,"group":89},"\u002Fdocs\u002Fnitro\u002Fvector\u002Fupstash",{"title":101,"path":362,"description":103,"icon":104,"children":363},"\u002Fdocs\u002Fnitro\u002Fqueue",[364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394],{"title":107,"path":365,"description":109},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fquickstart",{"title":111,"path":367,"description":113},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fruntime-api",{"title":115,"path":369,"description":117},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fwhen-to-use",{"title":119,"path":371,"description":121,"group":122},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fguides\u002Fsend-a-job",{"title":124,"path":373,"description":126,"group":122},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fguides\u002Fdefer-after-response",{"title":128,"path":375,"description":130,"group":122},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fguides\u002Fvalidate-payloads",{"title":132,"path":377,"description":134,"group":122},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fguides\u002Flocal-development",{"title":136,"path":379,"description":138,"group":122},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fguides\u002Fnative-handles",{"title":140,"path":381,"description":142,"icon":143,"group":89},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fproviders\u002Fplatformatic",{"title":85,"path":383,"description":146,"icon":88,"group":89},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fproviders\u002Fcloudflare",{"title":148,"path":385,"description":150,"icon":151,"group":89},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fproviders\u002Fvercel",{"title":153,"path":387,"description":155,"icon":156,"group":89},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fproviders\u002Fnetlify",{"title":158,"path":389,"description":160,"icon":99,"group":89},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fproviders\u002Fupstash-qstash",{"title":162,"path":391,"description":164,"icon":165,"group":89},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fproviders\u002Fmemory",{"title":167,"path":393,"description":169},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Ftroubleshooting",{"title":171,"path":395,"description":173},"\u002Fdocs\u002Fnitro\u002Fqueue\u002Fplayground",{"title":175,"path":397,"description":177,"icon":178,"children":398},"\u002Fdocs\u002Fnitro\u002Fcache",[399],{"title":59,"path":400,"description":182,"icon":62},"\u002Fdocs\u002Fnitro\u002Fcache\u002Fusage",{"title":184,"path":402,"description":186,"icon":187,"children":403},"\u002Fdocs\u002Fnitro\u002Femail",[404,406,408,410,412,414],{"title":190,"path":405,"description":192,"icon":193},"\u002Fdocs\u002Fnitro\u002Femail\u002Ffrontmatter",{"title":195,"path":407,"description":197,"icon":198},"\u002Fdocs\u002Fnitro\u002Femail\u002Finput-schemas",{"title":200,"path":409,"description":202,"icon":203},"\u002Fdocs\u002Fnitro\u002Femail\u002Fi18n",{"title":205,"path":411,"description":207,"icon":208,"group":89},"\u002Fdocs\u002Fnitro\u002Femail\u002Fresend",{"title":210,"path":413,"description":212,"icon":213,"group":89},"\u002Fdocs\u002Fnitro\u002Femail\u002Fsendgrid",{"title":215,"path":415,"description":217,"icon":218,"group":89},"\u002Fdocs\u002Fnitro\u002Femail\u002Fpostmark",{"title":220,"path":417,"description":222,"icon":223,"children":418},"\u002Fdocs\u002Fnitro\u002Fworkflow",[419,421,423,425],{"title":85,"path":420,"description":227,"icon":88},"\u002Fdocs\u002Fnitro\u002Fworkflow\u002Fcloudflare",{"title":148,"path":422,"description":230,"icon":151},"\u002Fdocs\u002Fnitro\u002Fworkflow\u002Fvercel",{"title":232,"path":424,"description":234,"icon":223},"\u002Fdocs\u002Fnitro\u002Fworkflow\u002Fopenworkflow",{"title":153,"path":426,"description":237,"icon":156},"\u002Fdocs\u002Fnitro\u002Fworkflow\u002Fnetlify",{"title":239,"path":428,"description":241,"icon":242,"children":429},"\u002Fdocs\u002Fnitro\u002Fcron",[430,432,434],{"title":245,"path":431,"description":247,"icon":248},"\u002Fdocs\u002Fnitro\u002Fcron\u002Fnode",{"title":85,"path":433,"description":251,"icon":88},"\u002Fdocs\u002Fnitro\u002Fcron\u002Fcloudflare",{"title":148,"path":435,"description":254,"icon":151},"\u002Fdocs\u002Fnitro\u002Fcron\u002Fvercel",{"title":256,"path":437,"description":258,"icon":259,"children":438},"\u002Fdocs\u002Fnitro\u002Fbrowser",[439,441,443],{"title":85,"path":440,"description":263,"icon":88},"\u002Fdocs\u002Fnitro\u002Fbrowser\u002Fcloudflare",{"title":265,"path":442,"description":267,"icon":268},"\u002Fdocs\u002Fnitro\u002Fbrowser\u002Fbrowserbase",{"title":270,"path":444,"description":272,"icon":259},"\u002Fdocs\u002Fnitro\u002Fbrowser\u002Fplaywright",{"title":274,"path":446,"description":276,"icon":277,"children":447},"\u002Fdocs\u002Fnitro\u002Fsandbox",[448,450,452,454,456,458],{"title":85,"path":449,"description":281,"icon":88},"\u002Fdocs\u002Fnitro\u002Fsandbox\u002Fcloudflare",{"title":283,"path":451,"description":285,"icon":88},"\u002Fdocs\u002Fnitro\u002Fsandbox\u002Fcloudflare-dynamic",{"title":148,"path":453,"description":288,"icon":151},"\u002Fdocs\u002Fnitro\u002Fsandbox\u002Fvercel",{"title":290,"path":455,"description":292,"icon":293},"\u002Fdocs\u002Fnitro\u002Fsandbox\u002Fdeno",{"title":295,"path":457,"description":297,"icon":298},"\u002Fdocs\u002Fnitro\u002Fsandbox\u002Fdocker",{"title":300,"path":459,"description":302,"icon":303},"\u002Fdocs\u002Fnitro\u002Fsandbox\u002Flocal",{"title":305,"path":461,"description":307,"icon":308,"children":462},"\u002Fdocs\u002Fnitro\u002Fanalytics",[463,465],{"title":148,"path":464,"description":312,"icon":151},"\u002Fdocs\u002Fnitro\u002Fanalytics\u002Fvercel",{"title":85,"path":466,"description":315,"icon":88},"\u002Fdocs\u002Fnitro\u002Fanalytics\u002Fcloudflare",{"title":468,"path":469,"children":470},"Nuxt","\u002Fdocs\u002Fnuxt",[471,480,491,496,503,512,547,552,567,578,587,596,611],{"title":13,"path":472,"description":15,"icon":16,"children":473},"\u002Fdocs\u002Fnuxt\u002Fgetting-started",[474,476,478],{"title":19,"path":475,"description":21},"\u002Fdocs\u002Fnuxt\u002Fgetting-started\u002Fchoose-a-package",{"title":23,"path":477,"description":25},"\u002Fdocs\u002Fnuxt\u002Fgetting-started\u002Fentrypoints",{"title":27,"path":479,"description":29},"\u002Fdocs\u002Fnuxt\u002Fgetting-started\u002Farchitecture",{"title":31,"path":481,"description":33,"icon":34,"children":482},"\u002Fdocs\u002Fnuxt\u002Fdatabase",[483,485,487,489],{"title":37,"path":484,"description":39},"\u002Fdocs\u002Fnuxt\u002Fdatabase\u002Fdrizzle",{"title":41,"path":486,"description":43},"\u002Fdocs\u002Fnuxt\u002Fdatabase\u002Fprisma",{"title":45,"path":488,"description":47},"\u002Fdocs\u002Fnuxt\u002Fdatabase\u002Fmigrations",{"title":49,"path":490,"description":51},"\u002Fdocs\u002Fnuxt\u002Fdatabase\u002Fplatform-notes",{"title":53,"path":492,"description":55,"icon":56,"children":493},"\u002Fdocs\u002Fnuxt\u002Fkv",[494],{"title":59,"path":495,"description":61,"icon":62},"\u002Fdocs\u002Fnuxt\u002Fkv\u002Fusage",{"title":64,"path":497,"description":66,"icon":67,"children":498},"\u002Fdocs\u002Fnuxt\u002Fblob",[499,501],{"title":70,"path":500,"description":72,"icon":73},"\u002Fdocs\u002Fnuxt\u002Fblob\u002Fupload",{"title":75,"path":502,"description":77,"icon":62},"\u002Fdocs\u002Fnuxt\u002Fblob\u002Fusage",{"title":79,"path":504,"description":81,"icon":82,"children":505},"\u002Fdocs\u002Fnuxt\u002Fvector",[506,508,510],{"title":85,"path":507,"description":87,"icon":88,"group":89},"\u002Fdocs\u002Fnuxt\u002Fvector\u002Fcloudflare",{"title":91,"path":509,"description":93,"icon":94,"group":89},"\u002Fdocs\u002Fnuxt\u002Fvector\u002Fpostgres",{"title":96,"path":511,"description":98,"icon":99,"group":89},"\u002Fdocs\u002Fnuxt\u002Fvector\u002Fupstash",{"title":101,"path":513,"description":103,"icon":104,"children":514},"\u002Fdocs\u002Fnuxt\u002Fqueue",[515,517,519,521,523,525,527,529,531,533,535,537,539,541,543,545],{"title":107,"path":516,"description":109},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fquickstart",{"title":111,"path":518,"description":113},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fruntime-api",{"title":115,"path":520,"description":117},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fwhen-to-use",{"title":119,"path":522,"description":121,"group":122},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fguides\u002Fsend-a-job",{"title":124,"path":524,"description":126,"group":122},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fguides\u002Fdefer-after-response",{"title":128,"path":526,"description":130,"group":122},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fguides\u002Fvalidate-payloads",{"title":132,"path":528,"description":134,"group":122},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fguides\u002Flocal-development",{"title":136,"path":530,"description":138,"group":122},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fguides\u002Fnative-handles",{"title":140,"path":532,"description":142,"icon":143,"group":89},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fproviders\u002Fplatformatic",{"title":85,"path":534,"description":146,"icon":88,"group":89},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fproviders\u002Fcloudflare",{"title":148,"path":536,"description":150,"icon":151,"group":89},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fproviders\u002Fvercel",{"title":153,"path":538,"description":155,"icon":156,"group":89},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fproviders\u002Fnetlify",{"title":158,"path":540,"description":160,"icon":99,"group":89},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fproviders\u002Fupstash-qstash",{"title":162,"path":542,"description":164,"icon":165,"group":89},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fproviders\u002Fmemory",{"title":167,"path":544,"description":169},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Ftroubleshooting",{"title":171,"path":546,"description":173},"\u002Fdocs\u002Fnuxt\u002Fqueue\u002Fplayground",{"title":175,"path":548,"description":177,"icon":178,"children":549},"\u002Fdocs\u002Fnuxt\u002Fcache",[550],{"title":59,"path":551,"description":182,"icon":62},"\u002Fdocs\u002Fnuxt\u002Fcache\u002Fusage",{"title":184,"path":553,"description":186,"icon":187,"children":554},"\u002Fdocs\u002Fnuxt\u002Femail",[555,557,559,561,563,565],{"title":190,"path":556,"description":192,"icon":193},"\u002Fdocs\u002Fnuxt\u002Femail\u002Ffrontmatter",{"title":195,"path":558,"description":197,"icon":198},"\u002Fdocs\u002Fnuxt\u002Femail\u002Finput-schemas",{"title":200,"path":560,"description":202,"icon":203},"\u002Fdocs\u002Fnuxt\u002Femail\u002Fi18n",{"title":205,"path":562,"description":207,"icon":208,"group":89},"\u002Fdocs\u002Fnuxt\u002Femail\u002Fresend",{"title":210,"path":564,"description":212,"icon":213,"group":89},"\u002Fdocs\u002Fnuxt\u002Femail\u002Fsendgrid",{"title":215,"path":566,"description":217,"icon":218,"group":89},"\u002Fdocs\u002Fnuxt\u002Femail\u002Fpostmark",{"title":220,"path":568,"description":222,"icon":223,"children":569},"\u002Fdocs\u002Fnuxt\u002Fworkflow",[570,572,574,576],{"title":85,"path":571,"description":227,"icon":88},"\u002Fdocs\u002Fnuxt\u002Fworkflow\u002Fcloudflare",{"title":148,"path":573,"description":230,"icon":151},"\u002Fdocs\u002Fnuxt\u002Fworkflow\u002Fvercel",{"title":232,"path":575,"description":234,"icon":223},"\u002Fdocs\u002Fnuxt\u002Fworkflow\u002Fopenworkflow",{"title":153,"path":577,"description":237,"icon":156},"\u002Fdocs\u002Fnuxt\u002Fworkflow\u002Fnetlify",{"title":239,"path":579,"description":241,"icon":242,"children":580},"\u002Fdocs\u002Fnuxt\u002Fcron",[581,583,585],{"title":245,"path":582,"description":247,"icon":248},"\u002Fdocs\u002Fnuxt\u002Fcron\u002Fnode",{"title":85,"path":584,"description":251,"icon":88},"\u002Fdocs\u002Fnuxt\u002Fcron\u002Fcloudflare",{"title":148,"path":586,"description":254,"icon":151},"\u002Fdocs\u002Fnuxt\u002Fcron\u002Fvercel",{"title":256,"path":588,"description":258,"icon":259,"children":589},"\u002Fdocs\u002Fnuxt\u002Fbrowser",[590,592,594],{"title":85,"path":591,"description":263,"icon":88},"\u002Fdocs\u002Fnuxt\u002Fbrowser\u002Fcloudflare",{"title":265,"path":593,"description":267,"icon":268},"\u002Fdocs\u002Fnuxt\u002Fbrowser\u002Fbrowserbase",{"title":270,"path":595,"description":272,"icon":259},"\u002Fdocs\u002Fnuxt\u002Fbrowser\u002Fplaywright",{"title":274,"path":597,"description":276,"icon":277,"children":598},"\u002Fdocs\u002Fnuxt\u002Fsandbox",[599,601,603,605,607,609],{"title":85,"path":600,"description":281,"icon":88},"\u002Fdocs\u002Fnuxt\u002Fsandbox\u002Fcloudflare",{"title":283,"path":602,"description":285,"icon":88},"\u002Fdocs\u002Fnuxt\u002Fsandbox\u002Fcloudflare-dynamic",{"title":148,"path":604,"description":288,"icon":151},"\u002Fdocs\u002Fnuxt\u002Fsandbox\u002Fvercel",{"title":290,"path":606,"description":292,"icon":293},"\u002Fdocs\u002Fnuxt\u002Fsandbox\u002Fdeno",{"title":295,"path":608,"description":297,"icon":298},"\u002Fdocs\u002Fnuxt\u002Fsandbox\u002Fdocker",{"title":300,"path":610,"description":302,"icon":303},"\u002Fdocs\u002Fnuxt\u002Fsandbox\u002Flocal",{"title":305,"path":612,"description":307,"icon":308,"children":613},"\u002Fdocs\u002Fnuxt\u002Fanalytics",[614,616],{"title":148,"path":615,"description":312,"icon":151},"\u002Fdocs\u002Fnuxt\u002Fanalytics\u002Fvercel",{"title":85,"path":617,"description":315,"icon":88},"\u002Fdocs\u002Fnuxt\u002Fanalytics\u002Fcloudflare",{"id":619,"title":256,"body":620,"description":258,"extension":1832,"meta":1833,"navigation":1834,"path":588,"seo":1836,"stem":1837,"__hash__":1838},"docs\u002Fdocs\u002Fnuxt\u002Fbrowser\u002Findex.md",{"type":621,"value":622,"toc":1823},"minimark",[623,671,689,694,1721,1736,1740,1803,1819],[624,625,626,627,631,632,631,635,638,639,642,643,631,646,631,649,631,652,631,655,631,658,631,661,631,664,638,667,670],"p",{},"Use Browser to run named server-side automations against Playwright, Browserbase, or Cloudflare Browser Rendering. Definitions receive ",[628,629,630],"code",{},"browser",", ",[628,633,634],{},"capabilities",[628,636,637],{},"native",", and ",[628,640,641],{},"context",", then call helpers such as ",[628,644,645],{},"content()",[628,647,648],{},"screenshot()",[628,650,651],{},"pdf()",[628,653,654],{},"snapshot()",[628,656,657],{},"links()",[628,659,660],{},"markdown()",[628,662,663],{},"json()",[628,665,666],{},"scrape()",[628,668,669],{},"crawl()",".",[672,673,675],"fw",{"id":674},"nuxt",[624,676,677,678,681,682,685,686,670],{},"Define browsers in ",[628,679,680],{},"server\u002Fbrowsers\u002F**"," with ",[628,683,684],{},"defineBrowser(handler, options?)",", then run them with ",[628,687,688],{},"runBrowser()",[690,691,693],"h2",{"id":692},"getting-started","Getting started",[695,696,698,703,710,784,788,799,1112,1116,1129,1402,1406,1443],"steps",{"level":697},"3",[699,700,702],"h3",{"id":701},"install-the-package","Install the package",[624,704,705,706,709],{},"Install ",[628,707,708],{},"@vitehub\u002Fbrowser"," and the SDK for the provider you plan to use.",[711,712,714,746,764],"tabs",{"sync":713},"browser-provider-install",[715,716,717],"tabs-item",{"icon":88,"label":85},[718,719,725],"pre",{"className":720,"code":721,"filename":722,"language":723,"meta":724,"style":724},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add https:\u002F\u002Fpkg.pr.new\u002Fvite-hub\u002Fvitehub\u002F@vitehub\u002Fbrowser@main cloudflare\n","Terminal","bash","",[628,726,727],{"__ignoreMap":724},[728,729,732,736,740,743],"span",{"class":730,"line":731},"line",1,[728,733,735],{"class":734},"sBMFI","pnpm",[728,737,739],{"class":738},"sfazB"," add",[728,741,742],{"class":738}," https:\u002F\u002Fpkg.pr.new\u002Fvite-hub\u002Fvitehub\u002F@vitehub\u002Fbrowser@main",[728,744,745],{"class":738}," cloudflare\n",[715,747,748],{"icon":259,"label":270},[718,749,751],{"className":720,"code":750,"filename":722,"language":723,"meta":724,"style":724},"pnpm add https:\u002F\u002Fpkg.pr.new\u002Fvite-hub\u002Fvitehub\u002F@vitehub\u002Fbrowser@main playwright-core\n",[628,752,753],{"__ignoreMap":724},[728,754,755,757,759,761],{"class":730,"line":731},[728,756,735],{"class":734},[728,758,739],{"class":738},[728,760,742],{"class":738},[728,762,763],{"class":738}," playwright-core\n",[715,765,766],{"icon":268,"label":265},[718,767,769],{"className":720,"code":768,"filename":722,"language":723,"meta":724,"style":724},"pnpm add https:\u002F\u002Fpkg.pr.new\u002Fvite-hub\u002Fvitehub\u002F@vitehub\u002Fbrowser@main @browserbasehq\u002Fsdk playwright-core\n",[628,770,771],{"__ignoreMap":724},[728,772,773,775,777,779,782],{"class":730,"line":731},[728,774,735],{"class":734},[728,776,739],{"class":738},[728,778,742],{"class":738},[728,780,781],{"class":738}," @browserbasehq\u002Fsdk",[728,783,763],{"class":738},[699,785,787],{"id":786},"configure-a-provider","Configure a provider",[624,789,790,791,794,795,798],{},"On Cloudflare, ViteHub usually uses the Cloudflare browser provider. On Vercel, it usually uses Browserbase. On Netlify, it uses Playwright when ",[628,792,793],{},"PLAYWRIGHT_WS_ENDPOINT"," is present. Set ",[628,796,797],{},"browser.provider"," when local development or another host should force a provider explicitly.",[711,800,802,929,1020],{"sync":801},"browser-provider",[715,803,804],{"icon":88,"label":85},[672,805,806],{"id":674},[718,807,812],{"className":808,"code":809,"filename":810,"language":811,"meta":724,"style":724},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['@vitehub\u002Fbrowser\u002Fnuxt'],\n  browser: {\n    provider: 'cloudflare',\n    accountId: process.env.CLOUDFLARE_ACCOUNT_ID,\n  },\n})\n","nuxt.config.ts","ts",[628,813,814,835,862,873,891,914,920],{"__ignoreMap":724},[728,815,816,820,823,827,831],{"class":730,"line":731},[728,817,819],{"class":818},"s7zQu","export",[728,821,822],{"class":818}," default",[728,824,826],{"class":825},"s2Zo4"," defineNuxtConfig",[728,828,830],{"class":829},"sTEyZ","(",[728,832,834],{"class":833},"sMK4o","{\n",[728,836,838,842,845,848,851,854,856,859],{"class":730,"line":837},2,[728,839,841],{"class":840},"swJcz","  modules",[728,843,844],{"class":833},":",[728,846,847],{"class":829}," [",[728,849,850],{"class":833},"'",[728,852,853],{"class":738},"@vitehub\u002Fbrowser\u002Fnuxt",[728,855,850],{"class":833},[728,857,858],{"class":829},"]",[728,860,861],{"class":833},",\n",[728,863,865,868,870],{"class":730,"line":864},3,[728,866,867],{"class":840},"  browser",[728,869,844],{"class":833},[728,871,872],{"class":833}," {\n",[728,874,876,879,881,884,887,889],{"class":730,"line":875},4,[728,877,878],{"class":840},"    provider",[728,880,844],{"class":833},[728,882,883],{"class":833}," '",[728,885,886],{"class":738},"cloudflare",[728,888,850],{"class":833},[728,890,861],{"class":833},[728,892,894,897,899,902,904,907,909,912],{"class":730,"line":893},5,[728,895,896],{"class":840},"    accountId",[728,898,844],{"class":833},[728,900,901],{"class":829}," process",[728,903,670],{"class":833},[728,905,906],{"class":829},"env",[728,908,670],{"class":833},[728,910,911],{"class":829},"CLOUDFLARE_ACCOUNT_ID",[728,913,861],{"class":833},[728,915,917],{"class":730,"line":916},6,[728,918,919],{"class":833},"  },\n",[728,921,923,926],{"class":730,"line":922},7,[728,924,925],{"class":833},"}",[728,927,928],{"class":829},")\n",[715,930,931],{"icon":259,"label":270},[672,932,933],{"id":674},[718,934,936],{"className":808,"code":935,"filename":810,"language":811,"meta":724,"style":724},"export default defineNuxtConfig({\n  modules: ['@vitehub\u002Fbrowser\u002Fnuxt'],\n  browser: {\n    provider: 'playwright',\n    wsEndpoint: process.env.PLAYWRIGHT_WS_ENDPOINT,\n  },\n})\n",[628,937,938,950,968,976,991,1010,1014],{"__ignoreMap":724},[728,939,940,942,944,946,948],{"class":730,"line":731},[728,941,819],{"class":818},[728,943,822],{"class":818},[728,945,826],{"class":825},[728,947,830],{"class":829},[728,949,834],{"class":833},[728,951,952,954,956,958,960,962,964,966],{"class":730,"line":837},[728,953,841],{"class":840},[728,955,844],{"class":833},[728,957,847],{"class":829},[728,959,850],{"class":833},[728,961,853],{"class":738},[728,963,850],{"class":833},[728,965,858],{"class":829},[728,967,861],{"class":833},[728,969,970,972,974],{"class":730,"line":864},[728,971,867],{"class":840},[728,973,844],{"class":833},[728,975,872],{"class":833},[728,977,978,980,982,984,987,989],{"class":730,"line":875},[728,979,878],{"class":840},[728,981,844],{"class":833},[728,983,883],{"class":833},[728,985,986],{"class":738},"playwright",[728,988,850],{"class":833},[728,990,861],{"class":833},[728,992,993,996,998,1000,1002,1004,1006,1008],{"class":730,"line":893},[728,994,995],{"class":840},"    wsEndpoint",[728,997,844],{"class":833},[728,999,901],{"class":829},[728,1001,670],{"class":833},[728,1003,906],{"class":829},[728,1005,670],{"class":833},[728,1007,793],{"class":829},[728,1009,861],{"class":833},[728,1011,1012],{"class":730,"line":916},[728,1013,919],{"class":833},[728,1015,1016,1018],{"class":730,"line":922},[728,1017,925],{"class":833},[728,1019,928],{"class":829},[715,1021,1022],{"icon":268,"label":265},[672,1023,1024],{"id":674},[718,1025,1027],{"className":808,"code":1026,"filename":810,"language":811,"meta":724,"style":724},"export default defineNuxtConfig({\n  modules: ['@vitehub\u002Fbrowser\u002Fnuxt'],\n  browser: {\n    provider: 'browserbase',\n    projectId: process.env.BROWSERBASE_PROJECT_ID,\n  },\n})\n",[628,1028,1029,1041,1059,1067,1082,1102,1106],{"__ignoreMap":724},[728,1030,1031,1033,1035,1037,1039],{"class":730,"line":731},[728,1032,819],{"class":818},[728,1034,822],{"class":818},[728,1036,826],{"class":825},[728,1038,830],{"class":829},[728,1040,834],{"class":833},[728,1042,1043,1045,1047,1049,1051,1053,1055,1057],{"class":730,"line":837},[728,1044,841],{"class":840},[728,1046,844],{"class":833},[728,1048,847],{"class":829},[728,1050,850],{"class":833},[728,1052,853],{"class":738},[728,1054,850],{"class":833},[728,1056,858],{"class":829},[728,1058,861],{"class":833},[728,1060,1061,1063,1065],{"class":730,"line":864},[728,1062,867],{"class":840},[728,1064,844],{"class":833},[728,1066,872],{"class":833},[728,1068,1069,1071,1073,1075,1078,1080],{"class":730,"line":875},[728,1070,878],{"class":840},[728,1072,844],{"class":833},[728,1074,883],{"class":833},[728,1076,1077],{"class":738},"browserbase",[728,1079,850],{"class":833},[728,1081,861],{"class":833},[728,1083,1084,1087,1089,1091,1093,1095,1097,1100],{"class":730,"line":893},[728,1085,1086],{"class":840},"    projectId",[728,1088,844],{"class":833},[728,1090,901],{"class":829},[728,1092,670],{"class":833},[728,1094,906],{"class":829},[728,1096,670],{"class":833},[728,1098,1099],{"class":829},"BROWSERBASE_PROJECT_ID",[728,1101,861],{"class":833},[728,1103,1104],{"class":730,"line":916},[728,1105,919],{"class":833},[728,1107,1108,1110],{"class":730,"line":922},[728,1109,925],{"class":833},[728,1111,928],{"class":829},[699,1113,1115],{"id":1114},"define-a-browser","Define a browser",[624,1117,1118,1119,631,1122,638,1125,1128],{},"Browser definitions accept portable execution defaults: ",[628,1120,1121],{},"timeout",[628,1123,1124],{},"session",[628,1126,1127],{},"viewport",". Set the default budget once on the definition, then add per-call or per-step timeouts only when a specific action genuinely needs a different limit.",[672,1130,1131],{"id":674},[718,1132,1135],{"className":808,"code":1133,"filename":1134,"language":811,"meta":724,"style":724},"export default defineBrowser(async (payload: { url: string }, { browser, context }) => {\n  const snapshot = await browser.snapshot({\n    screenshot: {\n      fullPage: true,\n    },\n    url: payload.url,\n  })\n\n  return {\n    context,\n    html: snapshot.content,\n    screenshot: snapshot.screenshot,\n  }\n}, {\n  timeout: 10_000,\n  viewport: {\n    width: 1440,\n    height: 900,\n  },\n})\n","server\u002Fbrowsers\u002Fsnapshot-homepage.ts",[628,1136,1137,1194,1219,1228,1241,1246,1263,1270,1277,1285,1293,1310,1326,1332,1340,1354,1364,1377,1390,1395],{"__ignoreMap":724},[728,1138,1139,1141,1143,1146,1148,1152,1155,1159,1161,1164,1167,1169,1172,1175,1177,1180,1183,1186,1189,1192],{"class":730,"line":731},[728,1140,819],{"class":818},[728,1142,822],{"class":818},[728,1144,1145],{"class":825}," defineBrowser",[728,1147,830],{"class":829},[728,1149,1151],{"class":1150},"spNyl","async",[728,1153,1154],{"class":833}," (",[728,1156,1158],{"class":1157},"sHdIc","payload",[728,1160,844],{"class":833},[728,1162,1163],{"class":833}," {",[728,1165,1166],{"class":840}," url",[728,1168,844],{"class":833},[728,1170,1171],{"class":734}," string",[728,1173,1174],{"class":833}," },",[728,1176,1163],{"class":833},[728,1178,1179],{"class":1157}," browser",[728,1181,1182],{"class":833},",",[728,1184,1185],{"class":1157}," context",[728,1187,1188],{"class":833}," })",[728,1190,1191],{"class":1150}," =>",[728,1193,872],{"class":833},[728,1195,1196,1199,1202,1205,1208,1210,1212,1215,1217],{"class":730,"line":837},[728,1197,1198],{"class":1150},"  const",[728,1200,1201],{"class":829}," snapshot",[728,1203,1204],{"class":833}," =",[728,1206,1207],{"class":818}," await",[728,1209,1179],{"class":829},[728,1211,670],{"class":833},[728,1213,1214],{"class":825},"snapshot",[728,1216,830],{"class":840},[728,1218,834],{"class":833},[728,1220,1221,1224,1226],{"class":730,"line":864},[728,1222,1223],{"class":840},"    screenshot",[728,1225,844],{"class":833},[728,1227,872],{"class":833},[728,1229,1230,1233,1235,1239],{"class":730,"line":875},[728,1231,1232],{"class":840},"      fullPage",[728,1234,844],{"class":833},[728,1236,1238],{"class":1237},"sfNiH"," true",[728,1240,861],{"class":833},[728,1242,1243],{"class":730,"line":893},[728,1244,1245],{"class":833},"    },\n",[728,1247,1248,1251,1253,1256,1258,1261],{"class":730,"line":916},[728,1249,1250],{"class":840},"    url",[728,1252,844],{"class":833},[728,1254,1255],{"class":829}," payload",[728,1257,670],{"class":833},[728,1259,1260],{"class":829},"url",[728,1262,861],{"class":833},[728,1264,1265,1268],{"class":730,"line":922},[728,1266,1267],{"class":833},"  }",[728,1269,928],{"class":840},[728,1271,1273],{"class":730,"line":1272},8,[728,1274,1276],{"emptyLinePlaceholder":1275},true,"\n",[728,1278,1280,1283],{"class":730,"line":1279},9,[728,1281,1282],{"class":818},"  return",[728,1284,872],{"class":833},[728,1286,1288,1291],{"class":730,"line":1287},10,[728,1289,1290],{"class":829},"    context",[728,1292,861],{"class":833},[728,1294,1296,1299,1301,1303,1305,1308],{"class":730,"line":1295},11,[728,1297,1298],{"class":840},"    html",[728,1300,844],{"class":833},[728,1302,1201],{"class":829},[728,1304,670],{"class":833},[728,1306,1307],{"class":829},"content",[728,1309,861],{"class":833},[728,1311,1313,1315,1317,1319,1321,1324],{"class":730,"line":1312},12,[728,1314,1223],{"class":840},[728,1316,844],{"class":833},[728,1318,1201],{"class":829},[728,1320,670],{"class":833},[728,1322,1323],{"class":829},"screenshot",[728,1325,861],{"class":833},[728,1327,1329],{"class":730,"line":1328},13,[728,1330,1331],{"class":833},"  }\n",[728,1333,1335,1338],{"class":730,"line":1334},14,[728,1336,1337],{"class":833},"},",[728,1339,872],{"class":833},[728,1341,1343,1346,1348,1352],{"class":730,"line":1342},15,[728,1344,1345],{"class":840},"  timeout",[728,1347,844],{"class":833},[728,1349,1351],{"class":1350},"sbssI"," 10_000",[728,1353,861],{"class":833},[728,1355,1357,1360,1362],{"class":730,"line":1356},16,[728,1358,1359],{"class":840},"  viewport",[728,1361,844],{"class":833},[728,1363,872],{"class":833},[728,1365,1367,1370,1372,1375],{"class":730,"line":1366},17,[728,1368,1369],{"class":840},"    width",[728,1371,844],{"class":833},[728,1373,1374],{"class":1350}," 1440",[728,1376,861],{"class":833},[728,1378,1380,1383,1385,1388],{"class":730,"line":1379},18,[728,1381,1382],{"class":840},"    height",[728,1384,844],{"class":833},[728,1386,1387],{"class":1350}," 900",[728,1389,861],{"class":833},[728,1391,1393],{"class":730,"line":1392},19,[728,1394,919],{"class":833},[728,1396,1398,1400],{"class":730,"line":1397},20,[728,1399,925],{"class":833},[728,1401,928],{"class":829},[699,1403,1405],{"id":1404},"run-the-browser","Run the browser",[624,1407,1408,1409,1411,1412,1414,1415,1417,1418,1421,1422,1424,1425,1428,1429,1432,1433,1424,1436,1438,1439,1442],{},"Import ",[628,1410,688],{}," from ",[628,1413,708],{}," in Vite apps and pass the browser name with a payload. In Nitro and Nuxt, ",[628,1416,688],{}," and ",[628,1419,1420],{},"readValidatedPayload()"," are auto-imported when ",[628,1423,853],{}," or ",[628,1426,1427],{},"@vitehub\u002Fbrowser\u002Fnitro"," is registered. Set ",[628,1430,1431],{},"nitro.imports.autoImport = false"," in ",[628,1434,1435],{},"nitro.config.ts",[628,1437,810],{}," when you want to disable ViteHub's Nitro auto-imports and use explicit imports instead. Use ",[628,1440,1441],{},"getBrowser()"," when you want direct access to the active browser client.",[672,1444,1445],{"id":674},[718,1446,1449],{"className":808,"code":1447,"filename":1448,"language":811,"meta":724,"style":724},"import { readBody } from 'h3'\n\nexport default defineEventHandler(async (event) => {\n  const input = await readValidatedPayload(await readBody(event), (value) => {\n    if (!value || typeof value !== 'object' || typeof value.url !== 'string')\n      throw new Error('A valid URL is required.')\n\n    return { url: value.url }\n  })\n\n  return await runBrowser('snapshot-homepage', input, {\n    context: {\n      requestId: crypto.randomUUID(),\n    },\n  })\n})\n","server\u002Fapi\u002Fbrowser\u002Fsnapshot.post.ts",[628,1450,1451,1474,1478,1503,1543,1595,1617,1621,1641,1647,1651,1677,1685,1705,1709,1715],{"__ignoreMap":724},[728,1452,1453,1456,1458,1461,1464,1467,1469,1471],{"class":730,"line":731},[728,1454,1455],{"class":818},"import",[728,1457,1163],{"class":833},[728,1459,1460],{"class":829}," readBody",[728,1462,1463],{"class":833}," }",[728,1465,1466],{"class":818}," from",[728,1468,883],{"class":833},[728,1470,699],{"class":738},[728,1472,1473],{"class":833},"'\n",[728,1475,1476],{"class":730,"line":837},[728,1477,1276],{"emptyLinePlaceholder":1275},[728,1479,1480,1482,1484,1487,1489,1491,1493,1496,1499,1501],{"class":730,"line":864},[728,1481,819],{"class":818},[728,1483,822],{"class":818},[728,1485,1486],{"class":825}," defineEventHandler",[728,1488,830],{"class":829},[728,1490,1151],{"class":1150},[728,1492,1154],{"class":833},[728,1494,1495],{"class":1157},"event",[728,1497,1498],{"class":833},")",[728,1500,1191],{"class":1150},[728,1502,872],{"class":833},[728,1504,1505,1507,1510,1512,1514,1517,1519,1522,1524,1526,1528,1530,1532,1534,1537,1539,1541],{"class":730,"line":875},[728,1506,1198],{"class":1150},[728,1508,1509],{"class":829}," input",[728,1511,1204],{"class":833},[728,1513,1207],{"class":818},[728,1515,1516],{"class":825}," readValidatedPayload",[728,1518,830],{"class":840},[728,1520,1521],{"class":818},"await",[728,1523,1460],{"class":825},[728,1525,830],{"class":840},[728,1527,1495],{"class":829},[728,1529,1498],{"class":840},[728,1531,1182],{"class":833},[728,1533,1154],{"class":833},[728,1535,1536],{"class":1157},"value",[728,1538,1498],{"class":833},[728,1540,1191],{"class":1150},[728,1542,872],{"class":833},[728,1544,1545,1548,1550,1553,1555,1558,1561,1564,1567,1569,1572,1574,1576,1578,1580,1582,1584,1586,1588,1591,1593],{"class":730,"line":893},[728,1546,1547],{"class":818},"    if",[728,1549,1154],{"class":840},[728,1551,1552],{"class":833},"!",[728,1554,1536],{"class":829},[728,1556,1557],{"class":833}," ||",[728,1559,1560],{"class":833}," typeof",[728,1562,1563],{"class":829}," value",[728,1565,1566],{"class":833}," !==",[728,1568,883],{"class":833},[728,1570,1571],{"class":738},"object",[728,1573,850],{"class":833},[728,1575,1557],{"class":833},[728,1577,1560],{"class":833},[728,1579,1563],{"class":829},[728,1581,670],{"class":833},[728,1583,1260],{"class":829},[728,1585,1566],{"class":833},[728,1587,883],{"class":833},[728,1589,1590],{"class":738},"string",[728,1592,850],{"class":833},[728,1594,928],{"class":840},[728,1596,1597,1600,1603,1606,1608,1610,1613,1615],{"class":730,"line":916},[728,1598,1599],{"class":818},"      throw",[728,1601,1602],{"class":833}," new",[728,1604,1605],{"class":825}," Error",[728,1607,830],{"class":840},[728,1609,850],{"class":833},[728,1611,1612],{"class":738},"A valid URL is required.",[728,1614,850],{"class":833},[728,1616,928],{"class":840},[728,1618,1619],{"class":730,"line":922},[728,1620,1276],{"emptyLinePlaceholder":1275},[728,1622,1623,1626,1628,1630,1632,1634,1636,1638],{"class":730,"line":1272},[728,1624,1625],{"class":818},"    return",[728,1627,1163],{"class":833},[728,1629,1166],{"class":840},[728,1631,844],{"class":833},[728,1633,1563],{"class":829},[728,1635,670],{"class":833},[728,1637,1260],{"class":829},[728,1639,1640],{"class":833}," }\n",[728,1642,1643,1645],{"class":730,"line":1279},[728,1644,1267],{"class":833},[728,1646,928],{"class":840},[728,1648,1649],{"class":730,"line":1287},[728,1650,1276],{"emptyLinePlaceholder":1275},[728,1652,1653,1655,1657,1660,1662,1664,1667,1669,1671,1673,1675],{"class":730,"line":1295},[728,1654,1282],{"class":818},[728,1656,1207],{"class":818},[728,1658,1659],{"class":825}," runBrowser",[728,1661,830],{"class":840},[728,1663,850],{"class":833},[728,1665,1666],{"class":738},"snapshot-homepage",[728,1668,850],{"class":833},[728,1670,1182],{"class":833},[728,1672,1509],{"class":829},[728,1674,1182],{"class":833},[728,1676,872],{"class":833},[728,1678,1679,1681,1683],{"class":730,"line":1312},[728,1680,1290],{"class":840},[728,1682,844],{"class":833},[728,1684,872],{"class":833},[728,1686,1687,1690,1692,1695,1697,1700,1703],{"class":730,"line":1328},[728,1688,1689],{"class":840},"      requestId",[728,1691,844],{"class":833},[728,1693,1694],{"class":829}," crypto",[728,1696,670],{"class":833},[728,1698,1699],{"class":825},"randomUUID",[728,1701,1702],{"class":840},"()",[728,1704,861],{"class":833},[728,1706,1707],{"class":730,"line":1334},[728,1708,1245],{"class":833},[728,1710,1711,1713],{"class":730,"line":1342},[728,1712,1267],{"class":833},[728,1714,928],{"class":840},[728,1716,1717,1719],{"class":730,"line":1356},[728,1718,925],{"class":833},[728,1720,928],{"class":829},[1722,1723,1726,1732],"u-page-grid",{"className":1724},[1725],"pb-2",[1727,1728],"u-page-card",{"description":1729,"icon":88,"title":1730,"to":1731},"Configure Cloudflare Browser Rendering with the official `cloudflare` SDK.","Cloudflare Browser",".\u002Fbrowser\u002Fcloudflare",[1727,1733],{"description":267,"icon":268,"title":1734,"to":1735},"Browserbase Browser",".\u002Fbrowser\u002Fbrowserbase",[690,1737,1739],{"id":1738},"public-api","Public API",[1741,1742,1743,1756],"table",{},[1744,1745,1746],"thead",{},[1747,1748,1749,1753],"tr",{},[1750,1751,1752],"th",{},"Function",[1750,1754,1755],{},"Use it for",[1757,1758,1759,1773,1783,1793],"tbody",{},[1747,1760,1761,1766],{},[1762,1763,1764],"td",{},[628,1765,684],{},[1762,1767,1768,1769,1772],{},"Register one named browser with the direct ",[628,1770,1771],{},"(handler, options?)"," form.",[1747,1774,1775,1780],{},[1762,1776,1777],{},[628,1778,1779],{},"createBrowser(options?)(handler)",[1762,1781,1782],{},"Register one named browser with the curried form.",[1747,1784,1785,1790],{},[1762,1786,1787],{},[628,1788,1789],{},"runBrowser(name, payload?, options?)",[1762,1791,1792],{},"Execute a named browser definition.",[1747,1794,1795,1800],{},[1762,1796,1797],{},[628,1798,1799],{},"getBrowser(name)",[1762,1801,1802],{},"Resolve the active browser client directly.",[624,1804,1805,1806,1808,1809,1811,1812,1815,1816,670],{},"Use ",[628,1807,688],{}," for the common case. Switch to ",[628,1810,1441],{}," when you need the browser client itself, want to branch on ",[628,1813,1814],{},"browser.capabilities",", or want the raw SDK object through ",[628,1817,1818],{},"browser.native",[1820,1821,1822],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":724,"searchDepth":837,"depth":837,"links":1824},[1825,1831],{"id":692,"depth":837,"text":693,"children":1826},[1827,1828,1829,1830],{"id":701,"depth":864,"text":702},{"id":786,"depth":864,"text":787},{"id":1114,"depth":864,"text":1115},{"id":1404,"depth":864,"text":1405},{"id":1738,"depth":837,"text":1739},"md",{},{"title":1835},"Overview",{"title":256,"description":258},"docs\u002Fnuxt\u002Fbrowser\u002Findex","iv7rrdzLITcW3LFEwMfdQt6RZjy4ehZ9MStJ7Vy7Kw8",[1840,1841],{"title":148,"path":586,"description":254},{"title":85,"path":591,"description":263},1775391848326]