[{"data":1,"prerenderedAt":2621},["ShallowReactive",2],{"docs-navigation":3,"docs:\u002Fdocs\u002Fnuxt\u002Fsandbox":618,"\u002Fdocs\u002Fnuxt\u002Fsandbox:surround":2618},[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":274,"body":620,"description":276,"extension":2611,"meta":2612,"navigation":2613,"path":597,"seo":2615,"stem":2616,"__hash__":2617},"docs\u002Fdocs\u002Fnuxt\u002Fsandbox\u002Findex.md",{"type":621,"value":622,"toc":2596},"minimark",[623,627,647,652,2038,2064,2068,2109,2113,2117,2120,2208,2214,2223,2285,2311,2317,2325,2415,2419,2422,2446,2459,2464,2516,2586,2592],[624,625,626],"p",{},"Use Sandbox to run server-side handlers in an isolated runtime when the job needs filesystem, process, or network isolation without introducing a queue or durable workflow.",[628,629,631],"fw",{"id":630},"nuxt",[624,632,633,634,638,639,642,643,646],{},"Define sandboxes in ",[635,636,637],"code",{},"server\u002Fsandboxes\u002F**"," with ",[635,640,641],{},"defineSandbox(handler, options?)",", then execute them with ",[635,644,645],{},"runSandbox()",".",[648,649,651],"h2",{"id":650},"getting-started","Getting started",[653,654,656,661,668,811,815,1328,1332,1348,1734,1738,1744],"steps",{"level":655},"3",[657,658,660],"h3",{"id":659},"install-the-package","Install the package",[624,662,663,664,667],{},"Install ",[635,665,666],{},"@vitehub\u002Fsandbox"," and the SDK for the provider you plan to use.",[669,670,672,704,729,747,777,794],"tabs",{"sync":671},"sandbox-provider",[673,674,675],"tabs-item",{"icon":88,"label":85},[676,677,683],"pre",{"className":678,"code":679,"filename":680,"language":681,"meta":682,"style":682},"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\u002Fsandbox@main @cloudflare\u002Fsandbox\n","Terminal","bash","",[635,684,685],{"__ignoreMap":682},[686,687,690,694,698,701],"span",{"class":688,"line":689},"line",1,[686,691,693],{"class":692},"sBMFI","pnpm",[686,695,697],{"class":696},"sfazB"," add",[686,699,700],{"class":696}," https:\u002F\u002Fpkg.pr.new\u002Fvite-hub\u002Fvitehub\u002F@vitehub\u002Fsandbox@main",[686,702,703],{"class":696}," @cloudflare\u002Fsandbox\n",[673,705,706,720],{"icon":88,"label":283},[676,707,709],{"className":678,"code":708,"filename":680,"language":681,"meta":682,"style":682},"pnpm add https:\u002F\u002Fpkg.pr.new\u002Fvite-hub\u002Fvitehub\u002F@vitehub\u002Fsandbox@main\n",[635,710,711],{"__ignoreMap":682},[686,712,713,715,717],{"class":688,"line":689},[686,714,693],{"class":692},[686,716,697],{"class":696},[686,718,719],{"class":696}," https:\u002F\u002Fpkg.pr.new\u002Fvite-hub\u002Fvitehub\u002F@vitehub\u002Fsandbox@main\n",[624,721,722,723,728],{},"Configure the loader binding on the ",[724,725,727],"a",{"href":726},".\u002Fsandbox\u002Fcloudflare-dynamic","Cloudflare Dynamic Workers"," page.",[673,730,731],{"icon":151,"label":148},[676,732,734],{"className":678,"code":733,"filename":680,"language":681,"meta":682,"style":682},"pnpm add https:\u002F\u002Fpkg.pr.new\u002Fvite-hub\u002Fvitehub\u002F@vitehub\u002Fsandbox@main @vercel\u002Fsandbox\n",[635,735,736],{"__ignoreMap":682},[686,737,738,740,742,744],{"class":688,"line":689},[686,739,693],{"class":692},[686,741,697],{"class":696},[686,743,700],{"class":696},[686,745,746],{"class":696}," @vercel\u002Fsandbox\n",[673,748,749,765],{"icon":293,"label":290},[676,750,752],{"className":678,"code":751,"filename":680,"language":681,"meta":682,"style":682},"pnpm add https:\u002F\u002Fpkg.pr.new\u002Fvite-hub\u002Fvitehub\u002F@vitehub\u002Fsandbox@main @deno\u002Fsandbox\n",[635,753,754],{"__ignoreMap":682},[686,755,756,758,760,762],{"class":688,"line":689},[686,757,693],{"class":692},[686,759,697],{"class":696},[686,761,700],{"class":696},[686,763,764],{"class":696}," @deno\u002Fsandbox\n",[624,766,767,768,771,772,776],{},"Set ",[635,769,770],{},"DENO_DEPLOY_TOKEN"," before you run a Deno-backed sandbox. See ",[724,773,775],{"href":774},".\u002Fsandbox\u002Fdeno","Deno Sandbox"," for the token flow.",[673,778,779,791],{"icon":298,"label":295},[676,780,781],{"className":678,"code":708,"filename":680,"language":681,"meta":682,"style":682},[635,782,783],{"__ignoreMap":682},[686,784,785,787,789],{"class":688,"line":689},[686,786,693],{"class":692},[686,788,697],{"class":696},[686,790,719],{"class":696},[624,792,793],{},"Docker uses your local Docker installation.",[673,795,796,808],{"icon":303,"label":300},[676,797,798],{"className":678,"code":708,"filename":680,"language":681,"meta":682,"style":682},[635,799,800],{"__ignoreMap":682},[686,801,802,804,806],{"class":688,"line":689},[686,803,693],{"class":692},[686,805,697],{"class":696},[686,807,719],{"class":696},[624,809,810],{},"Local runs on the current machine with OS-level isolation.",[657,812,814],{"id":813},"configure-a-provider","Configure a provider",[669,816,817,921,1027,1072,1164,1256],{"sync":671},[673,818,819],{"icon":88,"label":85},[628,820,821],{"id":630},[676,822,827],{"className":823,"code":824,"filename":825,"language":826,"meta":682,"style":682},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['@vitehub\u002Fsandbox\u002Fnuxt'],\n  sandbox: {\n    provider: 'cloudflare',\n  },\n})\n","nuxt.config.ts","ts",[635,828,829,850,877,888,906,912],{"__ignoreMap":682},[686,830,831,835,838,842,846],{"class":688,"line":689},[686,832,834],{"class":833},"s7zQu","export",[686,836,837],{"class":833}," default",[686,839,841],{"class":840},"s2Zo4"," defineNuxtConfig",[686,843,845],{"class":844},"sTEyZ","(",[686,847,849],{"class":848},"sMK4o","{\n",[686,851,853,857,860,863,866,869,871,874],{"class":688,"line":852},2,[686,854,856],{"class":855},"swJcz","  modules",[686,858,859],{"class":848},":",[686,861,862],{"class":844}," [",[686,864,865],{"class":848},"'",[686,867,868],{"class":696},"@vitehub\u002Fsandbox\u002Fnuxt",[686,870,865],{"class":848},[686,872,873],{"class":844},"]",[686,875,876],{"class":848},",\n",[686,878,880,883,885],{"class":688,"line":879},3,[686,881,882],{"class":855},"  sandbox",[686,884,859],{"class":848},[686,886,887],{"class":848}," {\n",[686,889,891,894,896,899,902,904],{"class":688,"line":890},4,[686,892,893],{"class":855},"    provider",[686,895,859],{"class":848},[686,897,898],{"class":848}," '",[686,900,901],{"class":696},"cloudflare",[686,903,865],{"class":848},[686,905,876],{"class":848},[686,907,909],{"class":688,"line":908},5,[686,910,911],{"class":848},"  },\n",[686,913,915,918],{"class":688,"line":914},6,[686,916,917],{"class":848},"}",[686,919,920],{"class":844},")\n",[673,922,923],{"icon":88,"label":283},[628,924,925],{"id":630},[676,926,928],{"className":823,"code":927,"filename":825,"language":826,"meta":682,"style":682},"export default defineNuxtConfig({\n  modules: ['@vitehub\u002Fsandbox\u002Fnuxt'],\n  sandbox: {\n    provider: 'cloudflare-dynamic',\n    loaderBinding: 'LOADER',\n    compatibilityDate: '2026-03-25',\n  },\n})\n",[635,929,930,942,960,968,983,999,1015,1020],{"__ignoreMap":682},[686,931,932,934,936,938,940],{"class":688,"line":689},[686,933,834],{"class":833},[686,935,837],{"class":833},[686,937,841],{"class":840},[686,939,845],{"class":844},[686,941,849],{"class":848},[686,943,944,946,948,950,952,954,956,958],{"class":688,"line":852},[686,945,856],{"class":855},[686,947,859],{"class":848},[686,949,862],{"class":844},[686,951,865],{"class":848},[686,953,868],{"class":696},[686,955,865],{"class":848},[686,957,873],{"class":844},[686,959,876],{"class":848},[686,961,962,964,966],{"class":688,"line":879},[686,963,882],{"class":855},[686,965,859],{"class":848},[686,967,887],{"class":848},[686,969,970,972,974,976,979,981],{"class":688,"line":890},[686,971,893],{"class":855},[686,973,859],{"class":848},[686,975,898],{"class":848},[686,977,978],{"class":696},"cloudflare-dynamic",[686,980,865],{"class":848},[686,982,876],{"class":848},[686,984,985,988,990,992,995,997],{"class":688,"line":908},[686,986,987],{"class":855},"    loaderBinding",[686,989,859],{"class":848},[686,991,898],{"class":848},[686,993,994],{"class":696},"LOADER",[686,996,865],{"class":848},[686,998,876],{"class":848},[686,1000,1001,1004,1006,1008,1011,1013],{"class":688,"line":914},[686,1002,1003],{"class":855},"    compatibilityDate",[686,1005,859],{"class":848},[686,1007,898],{"class":848},[686,1009,1010],{"class":696},"2026-03-25",[686,1012,865],{"class":848},[686,1014,876],{"class":848},[686,1016,1018],{"class":688,"line":1017},7,[686,1019,911],{"class":848},[686,1021,1023,1025],{"class":688,"line":1022},8,[686,1024,917],{"class":848},[686,1026,920],{"class":844},[673,1028,1029],{"icon":151,"label":148},[628,1030,1031],{"id":630},[676,1032,1034],{"className":823,"code":1033,"filename":825,"language":826,"meta":682,"style":682},"export default defineNuxtConfig({\n  modules: ['@vitehub\u002Fsandbox\u002Fnuxt'],\n})\n",[635,1035,1036,1048,1066],{"__ignoreMap":682},[686,1037,1038,1040,1042,1044,1046],{"class":688,"line":689},[686,1039,834],{"class":833},[686,1041,837],{"class":833},[686,1043,841],{"class":840},[686,1045,845],{"class":844},[686,1047,849],{"class":848},[686,1049,1050,1052,1054,1056,1058,1060,1062,1064],{"class":688,"line":852},[686,1051,856],{"class":855},[686,1053,859],{"class":848},[686,1055,862],{"class":844},[686,1057,865],{"class":848},[686,1059,868],{"class":696},[686,1061,865],{"class":848},[686,1063,873],{"class":844},[686,1065,876],{"class":848},[686,1067,1068,1070],{"class":688,"line":879},[686,1069,917],{"class":848},[686,1071,920],{"class":844},[673,1073,1074],{"icon":293,"label":290},[628,1075,1076],{"id":630},[676,1077,1079],{"className":823,"code":1078,"filename":825,"language":826,"meta":682,"style":682},"export default defineNuxtConfig({\n  modules: ['@vitehub\u002Fsandbox\u002Fnuxt'],\n  sandbox: {\n    provider: 'deno',\n    allowNet: ['api.notion.com'],\n  },\n})\n",[635,1080,1081,1093,1111,1119,1134,1154,1158],{"__ignoreMap":682},[686,1082,1083,1085,1087,1089,1091],{"class":688,"line":689},[686,1084,834],{"class":833},[686,1086,837],{"class":833},[686,1088,841],{"class":840},[686,1090,845],{"class":844},[686,1092,849],{"class":848},[686,1094,1095,1097,1099,1101,1103,1105,1107,1109],{"class":688,"line":852},[686,1096,856],{"class":855},[686,1098,859],{"class":848},[686,1100,862],{"class":844},[686,1102,865],{"class":848},[686,1104,868],{"class":696},[686,1106,865],{"class":848},[686,1108,873],{"class":844},[686,1110,876],{"class":848},[686,1112,1113,1115,1117],{"class":688,"line":879},[686,1114,882],{"class":855},[686,1116,859],{"class":848},[686,1118,887],{"class":848},[686,1120,1121,1123,1125,1127,1130,1132],{"class":688,"line":890},[686,1122,893],{"class":855},[686,1124,859],{"class":848},[686,1126,898],{"class":848},[686,1128,1129],{"class":696},"deno",[686,1131,865],{"class":848},[686,1133,876],{"class":848},[686,1135,1136,1139,1141,1143,1145,1148,1150,1152],{"class":688,"line":908},[686,1137,1138],{"class":855},"    allowNet",[686,1140,859],{"class":848},[686,1142,862],{"class":844},[686,1144,865],{"class":848},[686,1146,1147],{"class":696},"api.notion.com",[686,1149,865],{"class":848},[686,1151,873],{"class":844},[686,1153,876],{"class":848},[686,1155,1156],{"class":688,"line":914},[686,1157,911],{"class":848},[686,1159,1160,1162],{"class":688,"line":1017},[686,1161,917],{"class":848},[686,1163,920],{"class":844},[673,1165,1166],{"icon":298,"label":295},[628,1167,1168],{"id":630},[676,1169,1171],{"className":823,"code":1170,"filename":825,"language":826,"meta":682,"style":682},"export default defineNuxtConfig({\n  modules: ['@vitehub\u002Fsandbox\u002Fnuxt'],\n  sandbox: {\n    provider: 'docker',\n    workspace: process.cwd(),\n  },\n})\n",[635,1172,1173,1185,1203,1211,1226,1246,1250],{"__ignoreMap":682},[686,1174,1175,1177,1179,1181,1183],{"class":688,"line":689},[686,1176,834],{"class":833},[686,1178,837],{"class":833},[686,1180,841],{"class":840},[686,1182,845],{"class":844},[686,1184,849],{"class":848},[686,1186,1187,1189,1191,1193,1195,1197,1199,1201],{"class":688,"line":852},[686,1188,856],{"class":855},[686,1190,859],{"class":848},[686,1192,862],{"class":844},[686,1194,865],{"class":848},[686,1196,868],{"class":696},[686,1198,865],{"class":848},[686,1200,873],{"class":844},[686,1202,876],{"class":848},[686,1204,1205,1207,1209],{"class":688,"line":879},[686,1206,882],{"class":855},[686,1208,859],{"class":848},[686,1210,887],{"class":848},[686,1212,1213,1215,1217,1219,1222,1224],{"class":688,"line":890},[686,1214,893],{"class":855},[686,1216,859],{"class":848},[686,1218,898],{"class":848},[686,1220,1221],{"class":696},"docker",[686,1223,865],{"class":848},[686,1225,876],{"class":848},[686,1227,1228,1231,1233,1236,1238,1241,1244],{"class":688,"line":908},[686,1229,1230],{"class":855},"    workspace",[686,1232,859],{"class":848},[686,1234,1235],{"class":844}," process",[686,1237,646],{"class":848},[686,1239,1240],{"class":840},"cwd",[686,1242,1243],{"class":844},"()",[686,1245,876],{"class":848},[686,1247,1248],{"class":688,"line":914},[686,1249,911],{"class":848},[686,1251,1252,1254],{"class":688,"line":1017},[686,1253,917],{"class":848},[686,1255,920],{"class":844},[673,1257,1258],{"icon":303,"label":300},[628,1259,1260],{"id":630},[676,1261,1263],{"className":823,"code":1262,"filename":825,"language":826,"meta":682,"style":682},"export default defineNuxtConfig({\n  modules: ['@vitehub\u002Fsandbox\u002Fnuxt'],\n  sandbox: {\n    provider: 'local',\n  },\n})\n",[635,1264,1265,1277,1295,1303,1318,1322],{"__ignoreMap":682},[686,1266,1267,1269,1271,1273,1275],{"class":688,"line":689},[686,1268,834],{"class":833},[686,1270,837],{"class":833},[686,1272,841],{"class":840},[686,1274,845],{"class":844},[686,1276,849],{"class":848},[686,1278,1279,1281,1283,1285,1287,1289,1291,1293],{"class":688,"line":852},[686,1280,856],{"class":855},[686,1282,859],{"class":848},[686,1284,862],{"class":844},[686,1286,865],{"class":848},[686,1288,868],{"class":696},[686,1290,865],{"class":848},[686,1292,873],{"class":844},[686,1294,876],{"class":848},[686,1296,1297,1299,1301],{"class":688,"line":879},[686,1298,882],{"class":855},[686,1300,859],{"class":848},[686,1302,887],{"class":848},[686,1304,1305,1307,1309,1311,1314,1316],{"class":688,"line":890},[686,1306,893],{"class":855},[686,1308,859],{"class":848},[686,1310,898],{"class":848},[686,1312,1313],{"class":696},"local",[686,1315,865],{"class":848},[686,1317,876],{"class":848},[686,1319,1320],{"class":688,"line":908},[686,1321,911],{"class":848},[686,1323,1324,1326],{"class":688,"line":914},[686,1325,917],{"class":848},[686,1327,920],{"class":844},[657,1329,1331],{"id":1330},"define-a-sandbox","Define a sandbox",[628,1333,1334],{"id":630},[624,1335,1336,1337,1340,1341,1344,1345,646],{},"Add a sandbox module under ",[635,1338,1339],{},"server\u002Fsandboxes\u002F",". ViteHub derives the sandbox name from the path inside that directory. For example, ",[635,1342,1343],{},"server\u002Fsandboxes\u002Frelease-notes.ts"," registers ",[635,1346,1347],{},"release-notes",[628,1349,1350],{"id":630},[676,1351,1353],{"className":823,"code":1352,"filename":1343,"language":826,"meta":682,"style":682},"type ReleaseNotesPayload = {\n  notes?: unknown\n}\n\nexport default defineSandbox(async (input?: ReleaseNotesPayload) => {\n  const { notes } = await readValidatedPayload(input, value => ({\n    notes: typeof value?.notes === 'string' ? value.notes.trim() : '',\n  }))\n  const items = notes\n    .split(\u002F\\n+\u002F)\n    .map(line => line.replace(\u002F^[-*]\\s*\u002F, '').trim())\n    .filter(Boolean)\n\n  return {\n    summary: items[0] || 'No notes provided.',\n    items: items.slice(0, 3),\n  }\n}, {\n  timeout: 30_000,\n})\n",[635,1354,1355,1369,1380,1385,1391,1424,1462,1514,1522,1535,1557,1613,1628,1633,1641,1672,1700,1706,1714,1727],{"__ignoreMap":682},[686,1356,1357,1361,1364,1367],{"class":688,"line":689},[686,1358,1360],{"class":1359},"spNyl","type",[686,1362,1363],{"class":692}," ReleaseNotesPayload",[686,1365,1366],{"class":848}," =",[686,1368,887],{"class":848},[686,1370,1371,1374,1377],{"class":688,"line":852},[686,1372,1373],{"class":855},"  notes",[686,1375,1376],{"class":848},"?:",[686,1378,1379],{"class":692}," unknown\n",[686,1381,1382],{"class":688,"line":879},[686,1383,1384],{"class":848},"}\n",[686,1386,1387],{"class":688,"line":890},[686,1388,1390],{"emptyLinePlaceholder":1389},true,"\n",[686,1392,1393,1395,1397,1400,1402,1405,1408,1412,1414,1416,1419,1422],{"class":688,"line":908},[686,1394,834],{"class":833},[686,1396,837],{"class":833},[686,1398,1399],{"class":840}," defineSandbox",[686,1401,845],{"class":844},[686,1403,1404],{"class":1359},"async",[686,1406,1407],{"class":848}," (",[686,1409,1411],{"class":1410},"sHdIc","input",[686,1413,1376],{"class":848},[686,1415,1363],{"class":692},[686,1417,1418],{"class":848},")",[686,1420,1421],{"class":1359}," =>",[686,1423,887],{"class":848},[686,1425,1426,1429,1432,1435,1438,1440,1443,1446,1448,1450,1453,1456,1458,1460],{"class":688,"line":914},[686,1427,1428],{"class":1359},"  const",[686,1430,1431],{"class":848}," {",[686,1433,1434],{"class":844}," notes",[686,1436,1437],{"class":848}," }",[686,1439,1366],{"class":848},[686,1441,1442],{"class":833}," await",[686,1444,1445],{"class":840}," readValidatedPayload",[686,1447,845],{"class":855},[686,1449,1411],{"class":844},[686,1451,1452],{"class":848},",",[686,1454,1455],{"class":1410}," value",[686,1457,1421],{"class":1359},[686,1459,1407],{"class":855},[686,1461,849],{"class":848},[686,1463,1464,1467,1469,1472,1474,1477,1480,1483,1485,1488,1490,1493,1495,1497,1499,1501,1504,1507,1509,1512],{"class":688,"line":1017},[686,1465,1466],{"class":855},"    notes",[686,1468,859],{"class":848},[686,1470,1471],{"class":848}," typeof",[686,1473,1455],{"class":844},[686,1475,1476],{"class":848},"?.",[686,1478,1479],{"class":844},"notes",[686,1481,1482],{"class":848}," ===",[686,1484,898],{"class":848},[686,1486,1487],{"class":696},"string",[686,1489,865],{"class":848},[686,1491,1492],{"class":848}," ?",[686,1494,1455],{"class":844},[686,1496,646],{"class":848},[686,1498,1479],{"class":844},[686,1500,646],{"class":848},[686,1502,1503],{"class":840},"trim",[686,1505,1506],{"class":855},"() ",[686,1508,859],{"class":848},[686,1510,1511],{"class":848}," ''",[686,1513,876],{"class":848},[686,1515,1516,1519],{"class":688,"line":1022},[686,1517,1518],{"class":848},"  }",[686,1520,1521],{"class":855},"))\n",[686,1523,1525,1527,1530,1532],{"class":688,"line":1524},9,[686,1526,1428],{"class":1359},[686,1528,1529],{"class":844}," items",[686,1531,1366],{"class":848},[686,1533,1534],{"class":844}," notes\n",[686,1536,1538,1541,1544,1546,1549,1552,1555],{"class":688,"line":1537},10,[686,1539,1540],{"class":848},"    .",[686,1542,1543],{"class":840},"split",[686,1545,845],{"class":855},[686,1547,1548],{"class":848},"\u002F",[686,1550,1551],{"class":696},"\\n",[686,1553,1554],{"class":848},"+\u002F",[686,1556,920],{"class":855},[686,1558,1560,1562,1565,1567,1569,1571,1574,1576,1579,1581,1583,1586,1589,1592,1594,1597,1600,1602,1604,1606,1608,1610],{"class":688,"line":1559},11,[686,1561,1540],{"class":848},[686,1563,1564],{"class":840},"map",[686,1566,845],{"class":855},[686,1568,688],{"class":1410},[686,1570,1421],{"class":1359},[686,1572,1573],{"class":844}," line",[686,1575,646],{"class":848},[686,1577,1578],{"class":840},"replace",[686,1580,845],{"class":855},[686,1582,1548],{"class":848},[686,1584,1585],{"class":833},"^",[686,1587,1588],{"class":848},"[",[686,1590,1591],{"class":696},"-*",[686,1593,873],{"class":848},[686,1595,1596],{"class":696},"\\s",[686,1598,1599],{"class":848},"*\u002F",[686,1601,1452],{"class":848},[686,1603,1511],{"class":848},[686,1605,1418],{"class":855},[686,1607,646],{"class":848},[686,1609,1503],{"class":840},[686,1611,1612],{"class":855},"())\n",[686,1614,1616,1618,1621,1623,1626],{"class":688,"line":1615},12,[686,1617,1540],{"class":848},[686,1619,1620],{"class":840},"filter",[686,1622,845],{"class":855},[686,1624,1625],{"class":844},"Boolean",[686,1627,920],{"class":855},[686,1629,1631],{"class":688,"line":1630},13,[686,1632,1390],{"emptyLinePlaceholder":1389},[686,1634,1636,1639],{"class":688,"line":1635},14,[686,1637,1638],{"class":833},"  return",[686,1640,887],{"class":848},[686,1642,1644,1647,1649,1651,1653,1657,1660,1663,1665,1668,1670],{"class":688,"line":1643},15,[686,1645,1646],{"class":855},"    summary",[686,1648,859],{"class":848},[686,1650,1529],{"class":844},[686,1652,1588],{"class":855},[686,1654,1656],{"class":1655},"sbssI","0",[686,1658,1659],{"class":855},"] ",[686,1661,1662],{"class":848},"||",[686,1664,898],{"class":848},[686,1666,1667],{"class":696},"No notes provided.",[686,1669,865],{"class":848},[686,1671,876],{"class":848},[686,1673,1675,1678,1680,1682,1684,1687,1689,1691,1693,1696,1698],{"class":688,"line":1674},16,[686,1676,1677],{"class":855},"    items",[686,1679,859],{"class":848},[686,1681,1529],{"class":844},[686,1683,646],{"class":848},[686,1685,1686],{"class":840},"slice",[686,1688,845],{"class":855},[686,1690,1656],{"class":1655},[686,1692,1452],{"class":848},[686,1694,1695],{"class":1655}," 3",[686,1697,1418],{"class":855},[686,1699,876],{"class":848},[686,1701,1703],{"class":688,"line":1702},17,[686,1704,1705],{"class":848},"  }\n",[686,1707,1709,1712],{"class":688,"line":1708},18,[686,1710,1711],{"class":848},"},",[686,1713,887],{"class":848},[686,1715,1717,1720,1722,1725],{"class":688,"line":1716},19,[686,1718,1719],{"class":855},"  timeout",[686,1721,859],{"class":848},[686,1723,1724],{"class":1655}," 30_000",[686,1726,876],{"class":848},[686,1728,1730,1732],{"class":688,"line":1729},20,[686,1731,917],{"class":848},[686,1733,920],{"class":844},[657,1735,1737],{"id":1736},"run-the-sandbox","Run the sandbox",[624,1739,1740,1741,1743],{},"Call the named sandbox from any server-side code. ",[635,1742,645],{}," returns a result object, so check for errors before you return the value.",[628,1745,1746],{"id":630},[676,1747,1750],{"className":823,"code":1748,"filename":1749,"language":826,"meta":682,"style":682},"import { createError, readBody } from 'h3'\nimport { runSandbox } from '@vitehub\u002Fsandbox'\n\nexport default defineEventHandler(async (event) => {\n  const body = await readBody\u003C{ notes?: unknown }>(event)\n  const result = await runSandbox('release-notes', body)\n\n  if (result.isErr()) {\n    throw createError({\n      statusCode: 500,\n      statusMessage: result.error.message,\n      data: {\n        code: result.error.code,\n        provider: result.error.provider,\n      },\n    })\n  }\n\n  return result.value\n})\n","server\u002Fapi\u002Fsandboxes\u002Frelease-notes.post.ts",[635,1751,1752,1779,1798,1802,1826,1858,1885,1889,1909,1920,1932,1953,1962,1981,2001,2006,2013,2017,2021,2032],{"__ignoreMap":682},[686,1753,1754,1757,1759,1762,1764,1767,1769,1772,1774,1776],{"class":688,"line":689},[686,1755,1756],{"class":833},"import",[686,1758,1431],{"class":848},[686,1760,1761],{"class":844}," createError",[686,1763,1452],{"class":848},[686,1765,1766],{"class":844}," readBody",[686,1768,1437],{"class":848},[686,1770,1771],{"class":833}," from",[686,1773,898],{"class":848},[686,1775,657],{"class":696},[686,1777,1778],{"class":848},"'\n",[686,1780,1781,1783,1785,1788,1790,1792,1794,1796],{"class":688,"line":852},[686,1782,1756],{"class":833},[686,1784,1431],{"class":848},[686,1786,1787],{"class":844}," runSandbox",[686,1789,1437],{"class":848},[686,1791,1771],{"class":833},[686,1793,898],{"class":848},[686,1795,666],{"class":696},[686,1797,1778],{"class":848},[686,1799,1800],{"class":688,"line":879},[686,1801,1390],{"emptyLinePlaceholder":1389},[686,1803,1804,1806,1808,1811,1813,1815,1817,1820,1822,1824],{"class":688,"line":890},[686,1805,834],{"class":833},[686,1807,837],{"class":833},[686,1809,1810],{"class":840}," defineEventHandler",[686,1812,845],{"class":844},[686,1814,1404],{"class":1359},[686,1816,1407],{"class":848},[686,1818,1819],{"class":1410},"event",[686,1821,1418],{"class":848},[686,1823,1421],{"class":1359},[686,1825,887],{"class":848},[686,1827,1828,1830,1833,1835,1837,1839,1842,1844,1846,1849,1852,1854,1856],{"class":688,"line":908},[686,1829,1428],{"class":1359},[686,1831,1832],{"class":844}," body",[686,1834,1366],{"class":848},[686,1836,1442],{"class":833},[686,1838,1766],{"class":840},[686,1840,1841],{"class":848},"\u003C{",[686,1843,1434],{"class":855},[686,1845,1376],{"class":848},[686,1847,1848],{"class":692}," unknown",[686,1850,1851],{"class":848}," }>",[686,1853,845],{"class":855},[686,1855,1819],{"class":844},[686,1857,920],{"class":855},[686,1859,1860,1862,1865,1867,1869,1871,1873,1875,1877,1879,1881,1883],{"class":688,"line":914},[686,1861,1428],{"class":1359},[686,1863,1864],{"class":844}," result",[686,1866,1366],{"class":848},[686,1868,1442],{"class":833},[686,1870,1787],{"class":840},[686,1872,845],{"class":855},[686,1874,865],{"class":848},[686,1876,1347],{"class":696},[686,1878,865],{"class":848},[686,1880,1452],{"class":848},[686,1882,1832],{"class":844},[686,1884,920],{"class":855},[686,1886,1887],{"class":688,"line":1017},[686,1888,1390],{"emptyLinePlaceholder":1389},[686,1890,1891,1894,1896,1899,1901,1904,1907],{"class":688,"line":1022},[686,1892,1893],{"class":833},"  if",[686,1895,1407],{"class":855},[686,1897,1898],{"class":844},"result",[686,1900,646],{"class":848},[686,1902,1903],{"class":840},"isErr",[686,1905,1906],{"class":855},"()) ",[686,1908,849],{"class":848},[686,1910,1911,1914,1916,1918],{"class":688,"line":1524},[686,1912,1913],{"class":833},"    throw",[686,1915,1761],{"class":840},[686,1917,845],{"class":855},[686,1919,849],{"class":848},[686,1921,1922,1925,1927,1930],{"class":688,"line":1537},[686,1923,1924],{"class":855},"      statusCode",[686,1926,859],{"class":848},[686,1928,1929],{"class":1655}," 500",[686,1931,876],{"class":848},[686,1933,1934,1937,1939,1941,1943,1946,1948,1951],{"class":688,"line":1559},[686,1935,1936],{"class":855},"      statusMessage",[686,1938,859],{"class":848},[686,1940,1864],{"class":844},[686,1942,646],{"class":848},[686,1944,1945],{"class":844},"error",[686,1947,646],{"class":848},[686,1949,1950],{"class":844},"message",[686,1952,876],{"class":848},[686,1954,1955,1958,1960],{"class":688,"line":1615},[686,1956,1957],{"class":855},"      data",[686,1959,859],{"class":848},[686,1961,887],{"class":848},[686,1963,1964,1967,1969,1971,1973,1975,1977,1979],{"class":688,"line":1630},[686,1965,1966],{"class":855},"        code",[686,1968,859],{"class":848},[686,1970,1864],{"class":844},[686,1972,646],{"class":848},[686,1974,1945],{"class":844},[686,1976,646],{"class":848},[686,1978,635],{"class":844},[686,1980,876],{"class":848},[686,1982,1983,1986,1988,1990,1992,1994,1996,1999],{"class":688,"line":1635},[686,1984,1985],{"class":855},"        provider",[686,1987,859],{"class":848},[686,1989,1864],{"class":844},[686,1991,646],{"class":848},[686,1993,1945],{"class":844},[686,1995,646],{"class":848},[686,1997,1998],{"class":844},"provider",[686,2000,876],{"class":848},[686,2002,2003],{"class":688,"line":1643},[686,2004,2005],{"class":848},"      },\n",[686,2007,2008,2011],{"class":688,"line":1674},[686,2009,2010],{"class":848},"    }",[686,2012,920],{"class":855},[686,2014,2015],{"class":688,"line":1702},[686,2016,1705],{"class":848},[686,2018,2019],{"class":688,"line":1708},[686,2020,1390],{"emptyLinePlaceholder":1389},[686,2022,2023,2025,2027,2029],{"class":688,"line":1716},[686,2024,1638],{"class":833},[686,2026,1864],{"class":844},[686,2028,646],{"class":848},[686,2030,2031],{"class":844},"value\n",[686,2033,2034,2036],{"class":688,"line":1729},[686,2035,917],{"class":848},[686,2037,920],{"class":844},[2039,2040,2043,2048,2050,2054,2056,2060],"u-page-grid",{"className":2041},[2042],"pb-2",[2044,2045],"u-page-card",{"description":281,"icon":88,"title":2046,"to":2047},"Cloudflare Sandbox",".\u002Fsandbox\u002Fcloudflare",[2044,2049],{"description":285,"icon":88,"title":727,"to":726},[2044,2051],{"description":288,"icon":151,"title":2052,"to":2053},"Vercel Sandbox",".\u002Fsandbox\u002Fvercel",[2044,2055],{"description":292,"icon":293,"title":775,"to":774},[2044,2057],{"description":297,"icon":298,"title":2058,"to":2059},"Docker Sandbox",".\u002Fsandbox\u002Fdocker",[2044,2061],{"description":302,"icon":303,"title":2062,"to":2063},"Local Sandbox",".\u002Fsandbox\u002Flocal",[648,2065,2067],{"id":2066},"public-api","Public API",[628,2069,2070],{"id":630},[2071,2072,2073,2086],"table",{},[2074,2075,2076],"thead",{},[2077,2078,2079,2083],"tr",{},[2080,2081,2082],"th",{},"Function",[2080,2084,2085],{},"Use it for",[2087,2088,2089,2099],"tbody",{},[2077,2090,2091,2096],{},[2092,2093,2094],"td",{},[635,2095,641],{},[2092,2097,2098],{},"Register one sandbox by exporting it from the sandboxes directory.",[2077,2100,2101,2106],{},[2092,2102,2103],{},[635,2104,2105],{},"runSandbox(name, payload, { context? })",[2092,2107,2108],{},"Execute that sandbox from a route, task, or webhook.",[648,2110,2112],{"id":2111},"type-reference","Type reference",[657,2114,2116],{"id":2115},"handler-signature","Handler signature",[624,2118,2119],{},"The handler receives an optional payload and an optional context object, and returns the result directly.",[676,2121,2123],{"className":823,"code":2122,"language":826,"meta":682,"style":682},"type SandboxHandler\u003CTPayload, TResult> = (\n  payload?: TPayload,\n  context?: Record\u003Cstring, unknown>,\n) => TResult | Promise\u003CTResult>\n",[635,2124,2125,2151,2163,2184],{"__ignoreMap":682},[686,2126,2127,2129,2132,2135,2138,2140,2143,2146,2148],{"class":688,"line":689},[686,2128,1360],{"class":1359},[686,2130,2131],{"class":692}," SandboxHandler",[686,2133,2134],{"class":848},"\u003C",[686,2136,2137],{"class":692},"TPayload",[686,2139,1452],{"class":848},[686,2141,2142],{"class":692}," TResult",[686,2144,2145],{"class":848},">",[686,2147,1366],{"class":848},[686,2149,2150],{"class":844}," (\n",[686,2152,2153,2156,2158,2161],{"class":688,"line":852},[686,2154,2155],{"class":1410},"  payload",[686,2157,1376],{"class":848},[686,2159,2160],{"class":692}," TPayload",[686,2162,876],{"class":848},[686,2164,2165,2168,2170,2173,2175,2177,2179,2181],{"class":688,"line":879},[686,2166,2167],{"class":1410},"  context",[686,2169,1376],{"class":848},[686,2171,2172],{"class":692}," Record",[686,2174,2134],{"class":848},[686,2176,1487],{"class":692},[686,2178,1452],{"class":848},[686,2180,1848],{"class":692},[686,2182,2183],{"class":848},">,\n",[686,2185,2186,2189,2192,2194,2197,2200,2202,2205],{"class":688,"line":890},[686,2187,2188],{"class":844},") ",[686,2190,2191],{"class":1359},"=>",[686,2193,2142],{"class":692},[686,2195,2196],{"class":848}," |",[686,2198,2199],{"class":692}," Promise",[686,2201,2134],{"class":848},[686,2203,2204],{"class":692},"TResult",[686,2206,2207],{"class":848},">\n",[657,2209,2211],{"id":2210},"sandboxdefinitionoptions",[635,2212,2213],{},"SandboxDefinitionOptions",[628,2215,2216],{"id":630},[624,2217,2218,2219,2222],{},"The options object passed to ",[635,2220,2221],{},"defineSandbox()"," accepts portable options that work across all providers:",[2071,2224,2225,2238],{},[2074,2226,2227],{},[2077,2228,2229,2232,2235],{},[2080,2230,2231],{},"Option",[2080,2233,2234],{},"Type",[2080,2236,2237],{},"Description",[2087,2239,2240,2255,2270],{},[2077,2241,2242,2247,2252],{},[2092,2243,2244],{},[635,2245,2246],{},"timeout",[2092,2248,2249],{},[635,2250,2251],{},"number",[2092,2253,2254],{},"Maximum execution time in milliseconds.",[2077,2256,2257,2262,2267],{},[2092,2258,2259],{},[635,2260,2261],{},"env",[2092,2263,2264],{},[635,2265,2266],{},"Record\u003Cstring, string>",[2092,2268,2269],{},"Environment variables passed to the sandbox.",[2077,2271,2272,2277,2282],{},[2092,2273,2274],{},[635,2275,2276],{},"runtime",[2092,2278,2279],{},[635,2280,2281],{},"{ command, args? }",[2092,2283,2284],{},"Custom runtime command for the sandbox process.",[2286,2287,2288],"tip",{},[624,2289,2290,2291,2294,2295,2298,2299,2302,2303,2306,2307,2310],{},"Provider-specific settings such as ",[635,2292,2293],{},"cpu",", ",[635,2296,2297],{},"ports",", or ",[635,2300,2301],{},"sandboxId"," belong in the top-level ",[635,2304,2305],{},"sandbox"," config in ",[635,2308,2309],{},"nitro.config.ts",", not in the definition.",[657,2312,2314],{"id":2313},"resultt",[635,2315,2316],{},"Result\u003CT>",[624,2318,2319,2321,2322,2324],{},[635,2320,645],{}," returns a ",[635,2323,2316],{}," instead of throwing. Check the result before accessing the value.",[2071,2326,2327,2338],{},[2074,2328,2329],{},[2077,2330,2331,2334,2336],{},[2080,2332,2333],{},"Method \u002F Field",[2080,2335,2234],{},[2080,2337,2237],{},[2087,2339,2340,2358,2374,2391],{},[2077,2341,2342,2347,2352],{},[2092,2343,2344],{},[635,2345,2346],{},"isOk()",[2092,2348,2349],{},[635,2350,2351],{},"boolean",[2092,2353,2354,2357],{},[635,2355,2356],{},"true"," when execution succeeded.",[2077,2359,2360,2365,2369],{},[2092,2361,2362],{},[635,2363,2364],{},"isErr()",[2092,2366,2367],{},[635,2368,2351],{},[2092,2370,2371,2373],{},[635,2372,2356],{}," when execution failed.",[2077,2375,2376,2381,2386],{},[2092,2377,2378],{},[635,2379,2380],{},"value",[2092,2382,2383],{},[635,2384,2385],{},"T",[2092,2387,2388,2389,646],{},"The handler return value. Only safe after ",[635,2390,2346],{},[2077,2392,2393,2397,2402],{},[2092,2394,2395],{},[635,2396,1945],{},[2092,2398,2399],{},[635,2400,2401],{},"SandboxError",[2092,2403,2404,2405,2294,2407,2294,2409,2411,2412,646],{},"Error details with ",[635,2406,1950],{},[635,2408,635],{},[635,2410,1998],{},", and ",[635,2413,2414],{},"details",[648,2416,2418],{"id":2417},"configure-provider-and-sandbox-options","Configure provider and sandbox options",[624,2420,2421],{},"Sandbox has two configuration layers:",[2423,2424,2425,2432],"ul",{},[2426,2427,2428,2429,2431],"li",{},"Top-level ",[635,2430,2305],{}," config selects the provider and sets app-wide defaults.\n",[2426,2433,2434,2436,2437,2440,2441,2436,2443,2445],{},[635,2435,641],{}," and ",[635,2438,2439],{},"createSandbox(options?)(handler)"," both configure one sandbox file with portable options such as ",[635,2442,2246],{},[635,2444,2261],{},".\n::",[628,2447,2448],{"id":630},[2423,2449,2450],{},[2426,2451,2452,2454,2455,2436,2457,646],{},[635,2453,641],{}," configures one sandbox file with portable options such as ",[635,2456,2246],{},[635,2458,2261],{},[624,2460,2461,2463],{},[635,2462,645],{}," is not configuration. It is the execution call, so that is where you pass the payload and optional per-request context.",[628,2465,2466],{"id":630},[676,2467,2469],{"className":823,"code":2468,"filename":825,"language":826,"meta":682,"style":682},"export default defineNuxtConfig({\n  sandbox: {\n    provider: 'vercel',\n  },\n})\n",[635,2470,2471,2483,2491,2506,2510],{"__ignoreMap":682},[686,2472,2473,2475,2477,2479,2481],{"class":688,"line":689},[686,2474,834],{"class":833},[686,2476,837],{"class":833},[686,2478,841],{"class":840},[686,2480,845],{"class":844},[686,2482,849],{"class":848},[686,2484,2485,2487,2489],{"class":688,"line":852},[686,2486,882],{"class":855},[686,2488,859],{"class":848},[686,2490,887],{"class":848},[686,2492,2493,2495,2497,2499,2502,2504],{"class":688,"line":879},[686,2494,893],{"class":855},[686,2496,859],{"class":848},[686,2498,898],{"class":848},[686,2500,2501],{"class":696},"vercel",[686,2503,865],{"class":848},[686,2505,876],{"class":848},[686,2507,2508],{"class":688,"line":890},[686,2509,911],{"class":848},[686,2511,2512,2514],{"class":688,"line":908},[686,2513,917],{"class":848},[686,2515,920],{"class":844},[628,2517,2518],{"id":630},[676,2519,2521],{"className":823,"code":2520,"filename":1343,"language":826,"meta":682,"style":682},"export default defineSandbox(async (payload) => {\n  return { ok: true }\n}, {\n  timeout: 30_000,\n})\n",[635,2522,2523,2546,2564,2570,2580],{"__ignoreMap":682},[686,2524,2525,2527,2529,2531,2533,2535,2537,2540,2542,2544],{"class":688,"line":689},[686,2526,834],{"class":833},[686,2528,837],{"class":833},[686,2530,1399],{"class":840},[686,2532,845],{"class":844},[686,2534,1404],{"class":1359},[686,2536,1407],{"class":848},[686,2538,2539],{"class":1410},"payload",[686,2541,1418],{"class":848},[686,2543,1421],{"class":1359},[686,2545,887],{"class":848},[686,2547,2548,2550,2552,2555,2557,2561],{"class":688,"line":852},[686,2549,1638],{"class":833},[686,2551,1431],{"class":848},[686,2553,2554],{"class":855}," ok",[686,2556,859],{"class":848},[686,2558,2560],{"class":2559},"sfNiH"," true",[686,2562,2563],{"class":848}," }\n",[686,2565,2566,2568],{"class":688,"line":879},[686,2567,1711],{"class":848},[686,2569,887],{"class":848},[686,2571,2572,2574,2576,2578],{"class":688,"line":890},[686,2573,1719],{"class":855},[686,2575,859],{"class":848},[686,2577,1724],{"class":1655},[686,2579,876],{"class":848},[686,2581,2582,2584],{"class":688,"line":908},[686,2583,917],{"class":848},[686,2585,920],{"class":844},[2587,2588,2589],"note",{},[624,2590,2591],{},"Each provider adds its own runtime APIs and sub-features. Use the provider pages in the sidebar for SDK installation, platform setup, and provider-specific options.",[2593,2594,2595],"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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}",{"title":682,"searchDepth":852,"depth":852,"links":2597},[2598,2604,2605,2610],{"id":650,"depth":852,"text":651,"children":2599},[2600,2601,2602,2603],{"id":659,"depth":879,"text":660},{"id":813,"depth":879,"text":814},{"id":1330,"depth":879,"text":1331},{"id":1736,"depth":879,"text":1737},{"id":2066,"depth":852,"text":2067},{"id":2111,"depth":852,"text":2112,"children":2606},[2607,2608,2609],{"id":2115,"depth":879,"text":2116},{"id":2210,"depth":879,"text":2213},{"id":2313,"depth":879,"text":2316},{"id":2417,"depth":852,"text":2418},"md",{},{"title":2614},"Overview",{"title":274,"description":276},"docs\u002Fnuxt\u002Fsandbox\u002Findex","Jq__9URfxM41CGmrcegPRzOGvIzB3oGJcPBk2fXF0tU",[2619,2620],{"title":270,"path":595,"description":272},{"title":85,"path":600,"description":281},1775391848734]