[{"data":1,"prerenderedAt":2287},["ShallowReactive",2],{"docs-navigation":3,"docs:\u002Fdocs\u002Fnuxt\u002Fblob\u002Fusage":618,"\u002Fdocs\u002Fnuxt\u002Fblob\u002Fusage:surround":2283},[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":620,"body":621,"description":77,"extension":2277,"meta":2278,"navigation":2279,"path":502,"seo":2280,"stem":2281,"__hash__":2282},"docs\u002Fdocs\u002Fnuxt\u002Fblob\u002Fusage.md","Using the Blob SDK",{"type":622,"value":623,"toc":2253},"minimark",[624,628,633,645,706,712,736,740,887,892,895,914,924,1015,1025,1160,1164,1360,1365,1380,1409,1412,1416,1449,1454,1461,1465,1522,1527,1536,1540,1873,1880,1885,1995,1998,2062,2066,2146,2151,2154,2158,2224,2229,2232,2249],[625,626,627],"p",{},"The Blob SDK works across Local storage, S3, Vercel Blob, and Cloudflare R2.",[629,630,632],"h2",{"id":631},"importing-the-blob-storage","Importing the blob storage",[625,634,635,636,640,641,644],{},"Use ",[637,638,639],"code",{},"@vitehub\u002Fblob"," for both runtime helpers and host-agnostic helpers such as ",[637,642,643],{},"ensureBlob()",":",[646,647,652],"pre",{"className":648,"code":649,"language":650,"meta":651,"style":651},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { ensureBlob } from '@vitehub\u002Fblob'\nimport { blob } from '@vitehub\u002Fblob'\n","ts","",[637,653,654,686],{"__ignoreMap":651},[655,656,659,663,667,671,674,677,680,683],"span",{"class":657,"line":658},"line",1,[655,660,662],{"class":661},"s7zQu","import",[655,664,666],{"class":665},"sMK4o"," {",[655,668,670],{"class":669},"sTEyZ"," ensureBlob",[655,672,673],{"class":665}," }",[655,675,676],{"class":661}," from",[655,678,679],{"class":665}," '",[655,681,639],{"class":682},"sfazB",[655,684,685],{"class":665},"'\n",[655,687,689,691,693,696,698,700,702,704],{"class":657,"line":688},2,[655,690,662],{"class":661},[655,692,666],{"class":665},[655,694,695],{"class":669}," blob",[655,697,673],{"class":665},[655,699,676],{"class":661},[655,701,679],{"class":665},[655,703,639],{"class":682},[655,705,685],{"class":665},[625,707,635,708,711],{},[637,709,710],{},"@vitehub\u002Fblob\u002Fclient"," only for browser-side multipart uploads:",[646,713,715],{"className":648,"code":714,"language":650,"meta":651,"style":651},"import { useMultipartUpload } from '@vitehub\u002Fblob\u002Fclient'\n",[637,716,717],{"__ignoreMap":651},[655,718,719,721,723,726,728,730,732,734],{"class":657,"line":658},[655,720,662],{"class":661},[655,722,666],{"class":665},[655,724,725],{"class":669}," useMultipartUpload",[655,727,673],{"class":665},[655,729,676],{"class":661},[655,731,679],{"class":665},[655,733,710],{"class":682},[655,735,685],{"class":665},[629,737,739],{"id":738},"list-blobs","List blobs",[741,742,744],"fw",{"id":743},"nuxt",[646,745,748],{"className":648,"code":746,"filename":747,"language":650,"meta":651,"style":651},"import { defineEventHandler } from 'h3'\nimport { blob } from '@vitehub\u002Fblob'\n\nexport default defineEventHandler(async () => {\n  const { blobs } = await blob.list({ limit: 10 })\n  return blobs\n})\n","server\u002Fapi\u002Ffiles.get.ts",[637,749,750,770,788,795,823,870,879],{"__ignoreMap":651},[655,751,752,754,756,759,761,763,765,768],{"class":657,"line":658},[655,753,662],{"class":661},[655,755,666],{"class":665},[655,757,758],{"class":669}," defineEventHandler",[655,760,673],{"class":665},[655,762,676],{"class":661},[655,764,679],{"class":665},[655,766,767],{"class":682},"h3",[655,769,685],{"class":665},[655,771,772,774,776,778,780,782,784,786],{"class":657,"line":688},[655,773,662],{"class":661},[655,775,666],{"class":665},[655,777,695],{"class":669},[655,779,673],{"class":665},[655,781,676],{"class":661},[655,783,679],{"class":665},[655,785,639],{"class":682},[655,787,685],{"class":665},[655,789,791],{"class":657,"line":790},3,[655,792,794],{"emptyLinePlaceholder":793},true,"\n",[655,796,798,801,804,807,810,814,817,820],{"class":657,"line":797},4,[655,799,800],{"class":661},"export",[655,802,803],{"class":661}," default",[655,805,758],{"class":806},"s2Zo4",[655,808,809],{"class":669},"(",[655,811,813],{"class":812},"spNyl","async",[655,815,816],{"class":665}," ()",[655,818,819],{"class":812}," =>",[655,821,822],{"class":665}," {\n",[655,824,826,829,831,834,836,839,842,844,847,850,853,856,859,861,865,867],{"class":657,"line":825},5,[655,827,828],{"class":812},"  const",[655,830,666],{"class":665},[655,832,833],{"class":669}," blobs",[655,835,673],{"class":665},[655,837,838],{"class":665}," =",[655,840,841],{"class":661}," await",[655,843,695],{"class":669},[655,845,846],{"class":665},".",[655,848,849],{"class":806},"list",[655,851,809],{"class":852},"swJcz",[655,854,855],{"class":665},"{",[655,857,858],{"class":852}," limit",[655,860,644],{"class":665},[655,862,864],{"class":863},"sbssI"," 10",[655,866,673],{"class":665},[655,868,869],{"class":852},")\n",[655,871,873,876],{"class":657,"line":872},6,[655,874,875],{"class":661},"  return",[655,877,878],{"class":669}," blobs\n",[655,880,882,885],{"class":657,"line":881},7,[655,883,884],{"class":665},"}",[655,886,869],{"class":669},[767,888,889],{"id":849},[637,890,891],{},"list()",[625,893,894],{},"Returns blob metadata without downloading file contents.",[646,896,898],{"className":648,"code":897,"language":650,"meta":651,"style":651},"await blob.list(options)\n",[637,899,900],{"__ignoreMap":651},[655,901,902,905,907,909,911],{"class":657,"line":658},[655,903,904],{"class":661},"await",[655,906,695],{"class":669},[655,908,846],{"class":665},[655,910,849],{"class":806},[655,912,913],{"class":669},"(options)\n",[625,915,635,916,919,920,923],{},[637,917,918],{},"prefix"," to scope results and ",[637,921,922],{},"folded: true"," to also receive virtual folders:",[646,925,927],{"className":648,"code":926,"language":650,"meta":651,"style":651},"const { blobs } = await blob.list({ prefix: 'images\u002F' })\nconst { blobs, folders } = await blob.list({ folded: true })\n",[637,928,929,972],{"__ignoreMap":651},[655,930,931,934,936,939,941,943,945,947,949,951,953,955,958,960,962,965,968,970],{"class":657,"line":658},[655,932,933],{"class":812},"const",[655,935,666],{"class":665},[655,937,938],{"class":669}," blobs ",[655,940,884],{"class":665},[655,942,838],{"class":665},[655,944,841],{"class":661},[655,946,695],{"class":669},[655,948,846],{"class":665},[655,950,849],{"class":806},[655,952,809],{"class":669},[655,954,855],{"class":665},[655,956,957],{"class":852}," prefix",[655,959,644],{"class":665},[655,961,679],{"class":665},[655,963,964],{"class":682},"images\u002F",[655,966,967],{"class":665},"'",[655,969,673],{"class":665},[655,971,869],{"class":669},[655,973,974,976,978,980,983,986,988,990,992,994,996,998,1000,1002,1005,1007,1011,1013],{"class":657,"line":688},[655,975,933],{"class":812},[655,977,666],{"class":665},[655,979,833],{"class":669},[655,981,982],{"class":665},",",[655,984,985],{"class":669}," folders ",[655,987,884],{"class":665},[655,989,838],{"class":665},[655,991,841],{"class":661},[655,993,695],{"class":669},[655,995,846],{"class":665},[655,997,849],{"class":806},[655,999,809],{"class":669},[655,1001,855],{"class":665},[655,1003,1004],{"class":852}," folded",[655,1006,644],{"class":665},[655,1008,1010],{"class":1009},"sfNiH"," true",[655,1012,673],{"class":665},[655,1014,869],{"class":669},[625,1016,635,1017,1020,1021,1024],{},[637,1018,1019],{},"cursor"," to paginate until ",[637,1022,1023],{},"hasMore"," is false:",[646,1026,1028],{"className":648,"code":1027,"language":650,"meta":651,"style":651},"let cursor: string | undefined\nlet allBlobs: unknown[] = []\n\ndo {\n  const result = await blob.list({ cursor })\n  allBlobs = allBlobs.concat(result.blobs)\n  cursor = result.cursor\n} while (cursor)\n",[637,1029,1030,1050,1071,1075,1082,1109,1135,1149],{"__ignoreMap":651},[655,1031,1032,1035,1038,1040,1044,1047],{"class":657,"line":658},[655,1033,1034],{"class":812},"let",[655,1036,1037],{"class":669}," cursor",[655,1039,644],{"class":665},[655,1041,1043],{"class":1042},"sBMFI"," string",[655,1045,1046],{"class":665}," |",[655,1048,1049],{"class":1042}," undefined\n",[655,1051,1052,1054,1057,1059,1062,1065,1068],{"class":657,"line":688},[655,1053,1034],{"class":812},[655,1055,1056],{"class":669}," allBlobs",[655,1058,644],{"class":665},[655,1060,1061],{"class":1042}," unknown",[655,1063,1064],{"class":669},"[] ",[655,1066,1067],{"class":665},"=",[655,1069,1070],{"class":669}," []\n",[655,1072,1073],{"class":657,"line":790},[655,1074,794],{"emptyLinePlaceholder":793},[655,1076,1077,1080],{"class":657,"line":797},[655,1078,1079],{"class":661},"do",[655,1081,822],{"class":665},[655,1083,1084,1086,1089,1091,1093,1095,1097,1099,1101,1103,1105,1107],{"class":657,"line":825},[655,1085,828],{"class":812},[655,1087,1088],{"class":669}," result",[655,1090,838],{"class":665},[655,1092,841],{"class":661},[655,1094,695],{"class":669},[655,1096,846],{"class":665},[655,1098,849],{"class":806},[655,1100,809],{"class":852},[655,1102,855],{"class":665},[655,1104,1037],{"class":669},[655,1106,673],{"class":665},[655,1108,869],{"class":852},[655,1110,1111,1114,1116,1118,1120,1123,1125,1128,1130,1133],{"class":657,"line":872},[655,1112,1113],{"class":669},"  allBlobs",[655,1115,838],{"class":665},[655,1117,1056],{"class":669},[655,1119,846],{"class":665},[655,1121,1122],{"class":806},"concat",[655,1124,809],{"class":852},[655,1126,1127],{"class":669},"result",[655,1129,846],{"class":665},[655,1131,1132],{"class":669},"blobs",[655,1134,869],{"class":852},[655,1136,1137,1140,1142,1144,1146],{"class":657,"line":881},[655,1138,1139],{"class":669},"  cursor",[655,1141,838],{"class":665},[655,1143,1088],{"class":669},[655,1145,846],{"class":665},[655,1147,1148],{"class":669},"cursor\n",[655,1150,1152,1154,1157],{"class":657,"line":1151},8,[655,1153,884],{"class":665},[655,1155,1156],{"class":661}," while",[655,1158,1159],{"class":669}," (cursor)\n",[629,1161,1163],{"id":1162},"serve-a-blob","Serve a blob",[741,1165,1166],{"id":743},[646,1167,1170],{"className":648,"code":1168,"filename":1169,"language":650,"meta":651,"style":651},"import { createError, defineEventHandler, getRouterParam } from 'h3'\nimport { blob } from '@vitehub\u002Fblob'\n\nexport default defineEventHandler(async (event) => {\n  const pathname = getRouterParam(event, 'pathname')\n  if (!pathname)\n    throw createError({ statusCode: 404, statusMessage: 'Not Found' })\n\n  return await blob.serve(event, pathname)\n})\n","server\u002Froutes\u002Ffiles\u002F[...pathname].get.ts",[637,1171,1172,1200,1218,1222,1248,1274,1288,1325,1329,1353],{"__ignoreMap":651},[655,1173,1174,1176,1178,1181,1183,1185,1187,1190,1192,1194,1196,1198],{"class":657,"line":658},[655,1175,662],{"class":661},[655,1177,666],{"class":665},[655,1179,1180],{"class":669}," createError",[655,1182,982],{"class":665},[655,1184,758],{"class":669},[655,1186,982],{"class":665},[655,1188,1189],{"class":669}," getRouterParam",[655,1191,673],{"class":665},[655,1193,676],{"class":661},[655,1195,679],{"class":665},[655,1197,767],{"class":682},[655,1199,685],{"class":665},[655,1201,1202,1204,1206,1208,1210,1212,1214,1216],{"class":657,"line":688},[655,1203,662],{"class":661},[655,1205,666],{"class":665},[655,1207,695],{"class":669},[655,1209,673],{"class":665},[655,1211,676],{"class":661},[655,1213,679],{"class":665},[655,1215,639],{"class":682},[655,1217,685],{"class":665},[655,1219,1220],{"class":657,"line":790},[655,1221,794],{"emptyLinePlaceholder":793},[655,1223,1224,1226,1228,1230,1232,1234,1237,1241,1244,1246],{"class":657,"line":797},[655,1225,800],{"class":661},[655,1227,803],{"class":661},[655,1229,758],{"class":806},[655,1231,809],{"class":669},[655,1233,813],{"class":812},[655,1235,1236],{"class":665}," (",[655,1238,1240],{"class":1239},"sHdIc","event",[655,1242,1243],{"class":665},")",[655,1245,819],{"class":812},[655,1247,822],{"class":665},[655,1249,1250,1252,1255,1257,1259,1261,1263,1265,1267,1270,1272],{"class":657,"line":825},[655,1251,828],{"class":812},[655,1253,1254],{"class":669}," pathname",[655,1256,838],{"class":665},[655,1258,1189],{"class":806},[655,1260,809],{"class":852},[655,1262,1240],{"class":669},[655,1264,982],{"class":665},[655,1266,679],{"class":665},[655,1268,1269],{"class":682},"pathname",[655,1271,967],{"class":665},[655,1273,869],{"class":852},[655,1275,1276,1279,1281,1284,1286],{"class":657,"line":872},[655,1277,1278],{"class":661},"  if",[655,1280,1236],{"class":852},[655,1282,1283],{"class":665},"!",[655,1285,1269],{"class":669},[655,1287,869],{"class":852},[655,1289,1290,1293,1295,1297,1299,1302,1304,1307,1309,1312,1314,1316,1319,1321,1323],{"class":657,"line":881},[655,1291,1292],{"class":661},"    throw",[655,1294,1180],{"class":806},[655,1296,809],{"class":852},[655,1298,855],{"class":665},[655,1300,1301],{"class":852}," statusCode",[655,1303,644],{"class":665},[655,1305,1306],{"class":863}," 404",[655,1308,982],{"class":665},[655,1310,1311],{"class":852}," statusMessage",[655,1313,644],{"class":665},[655,1315,679],{"class":665},[655,1317,1318],{"class":682},"Not Found",[655,1320,967],{"class":665},[655,1322,673],{"class":665},[655,1324,869],{"class":852},[655,1326,1327],{"class":657,"line":1151},[655,1328,794],{"emptyLinePlaceholder":793},[655,1330,1332,1334,1336,1338,1340,1343,1345,1347,1349,1351],{"class":657,"line":1331},9,[655,1333,875],{"class":661},[655,1335,841],{"class":661},[655,1337,695],{"class":669},[655,1339,846],{"class":665},[655,1341,1342],{"class":806},"serve",[655,1344,809],{"class":852},[655,1346,1240],{"class":669},[655,1348,982],{"class":665},[655,1350,1254],{"class":669},[655,1352,869],{"class":852},[655,1354,1356,1358],{"class":657,"line":1355},10,[655,1357,884],{"class":665},[655,1359,869],{"class":669},[767,1361,1362],{"id":1342},[637,1363,1364],{},"serve()",[625,1366,1367,1368,1371,1372,1375,1376,1379],{},"Sets ",[637,1369,1370],{},"Content-Type",", ",[637,1373,1374],{},"Content-Length",", and ",[637,1377,1378],{},"ETag"," headers and returns the blob body as a stream.",[646,1381,1383],{"className":648,"code":1382,"language":650,"meta":651,"style":651},"await blob.serve(event, 'images\u002Fphoto.jpg')\n",[637,1384,1385],{"__ignoreMap":651},[655,1386,1387,1389,1391,1393,1395,1398,1400,1402,1405,1407],{"class":657,"line":658},[655,1388,904],{"class":661},[655,1390,695],{"class":669},[655,1392,846],{"class":665},[655,1394,1342],{"class":806},[655,1396,1397],{"class":669},"(event",[655,1399,982],{"class":665},[655,1401,679],{"class":665},[655,1403,1404],{"class":682},"images\u002Fphoto.jpg",[655,1406,967],{"class":665},[655,1408,869],{"class":669},[625,1410,1411],{},"If you serve user-generated content, make sure you tightly control which content types you allow into storage.",[629,1413,1415],{"id":1414},"get-blob-metadata","Get blob metadata",[646,1417,1419],{"className":648,"code":1418,"language":650,"meta":651,"style":651},"const metadata = await blob.head('images\u002Fphoto.jpg')\n",[637,1420,1421],{"__ignoreMap":651},[655,1422,1423,1425,1428,1430,1432,1434,1436,1439,1441,1443,1445,1447],{"class":657,"line":658},[655,1424,933],{"class":812},[655,1426,1427],{"class":669}," metadata ",[655,1429,1067],{"class":665},[655,1431,841],{"class":661},[655,1433,695],{"class":669},[655,1435,846],{"class":665},[655,1437,1438],{"class":806},"head",[655,1440,809],{"class":669},[655,1442,967],{"class":665},[655,1444,1404],{"class":682},[655,1446,967],{"class":665},[655,1448,869],{"class":669},[767,1450,1451],{"id":1438},[637,1452,1453],{},"head()",[625,1455,1456,1457,1460],{},"Returns a ",[637,1458,1459],{},"BlobObject"," without reading the file body.",[629,1462,1464],{"id":1463},"get-blob-body","Get blob body",[646,1466,1468],{"className":648,"code":1467,"language":650,"meta":651,"style":651},"const file = await blob.get('documents\u002Freport.pdf')\nconst text = await file?.text()\n",[637,1469,1470,1499],{"__ignoreMap":651},[655,1471,1472,1474,1477,1479,1481,1483,1485,1488,1490,1492,1495,1497],{"class":657,"line":658},[655,1473,933],{"class":812},[655,1475,1476],{"class":669}," file ",[655,1478,1067],{"class":665},[655,1480,841],{"class":661},[655,1482,695],{"class":669},[655,1484,846],{"class":665},[655,1486,1487],{"class":806},"get",[655,1489,809],{"class":669},[655,1491,967],{"class":665},[655,1493,1494],{"class":682},"documents\u002Freport.pdf",[655,1496,967],{"class":665},[655,1498,869],{"class":669},[655,1500,1501,1503,1506,1508,1510,1513,1516,1519],{"class":657,"line":688},[655,1502,933],{"class":812},[655,1504,1505],{"class":669}," text ",[655,1507,1067],{"class":665},[655,1509,841],{"class":661},[655,1511,1512],{"class":669}," file",[655,1514,1515],{"class":665},"?.",[655,1517,1518],{"class":806},"text",[655,1520,1521],{"class":669},"()\n",[767,1523,1524],{"id":1487},[637,1525,1526],{},"get()",[625,1528,1456,1529,1531,1532,1535],{},[637,1530,64],{}," or ",[637,1533,1534],{},"null"," when the object does not exist.",[629,1537,1539],{"id":1538},"upload-a-blob","Upload a blob",[741,1541,1542],{"id":743},[646,1543,1546],{"className":648,"code":1544,"filename":1545,"language":650,"meta":651,"style":651},"import { createError, defineEventHandler, readFormData } from 'h3'\nimport { ensureBlob } from '@vitehub\u002Fblob'\nimport { blob } from '@vitehub\u002Fblob'\n\nexport default defineEventHandler(async (event) => {\n  const form = await readFormData(event)\n  const file = form.get('file') as File | null\n  if (!file)\n    throw createError({ statusCode: 400, statusMessage: 'Missing file' })\n\n  ensureBlob(file, {\n    maxSize: '1MB',\n    types: ['image'],\n  })\n\n  return await blob.put(file.name, file, {\n    prefix: 'images',\n  })\n})\n","server\u002Fapi\u002Ffiles.post.ts",[637,1547,1548,1575,1593,1611,1615,1637,1656,1693,1705,1739,1743,1757,1775,1798,1806,1811,1842,1859,1866],{"__ignoreMap":651},[655,1549,1550,1552,1554,1556,1558,1560,1562,1565,1567,1569,1571,1573],{"class":657,"line":658},[655,1551,662],{"class":661},[655,1553,666],{"class":665},[655,1555,1180],{"class":669},[655,1557,982],{"class":665},[655,1559,758],{"class":669},[655,1561,982],{"class":665},[655,1563,1564],{"class":669}," readFormData",[655,1566,673],{"class":665},[655,1568,676],{"class":661},[655,1570,679],{"class":665},[655,1572,767],{"class":682},[655,1574,685],{"class":665},[655,1576,1577,1579,1581,1583,1585,1587,1589,1591],{"class":657,"line":688},[655,1578,662],{"class":661},[655,1580,666],{"class":665},[655,1582,670],{"class":669},[655,1584,673],{"class":665},[655,1586,676],{"class":661},[655,1588,679],{"class":665},[655,1590,639],{"class":682},[655,1592,685],{"class":665},[655,1594,1595,1597,1599,1601,1603,1605,1607,1609],{"class":657,"line":790},[655,1596,662],{"class":661},[655,1598,666],{"class":665},[655,1600,695],{"class":669},[655,1602,673],{"class":665},[655,1604,676],{"class":661},[655,1606,679],{"class":665},[655,1608,639],{"class":682},[655,1610,685],{"class":665},[655,1612,1613],{"class":657,"line":797},[655,1614,794],{"emptyLinePlaceholder":793},[655,1616,1617,1619,1621,1623,1625,1627,1629,1631,1633,1635],{"class":657,"line":825},[655,1618,800],{"class":661},[655,1620,803],{"class":661},[655,1622,758],{"class":806},[655,1624,809],{"class":669},[655,1626,813],{"class":812},[655,1628,1236],{"class":665},[655,1630,1240],{"class":1239},[655,1632,1243],{"class":665},[655,1634,819],{"class":812},[655,1636,822],{"class":665},[655,1638,1639,1641,1644,1646,1648,1650,1652,1654],{"class":657,"line":872},[655,1640,828],{"class":812},[655,1642,1643],{"class":669}," form",[655,1645,838],{"class":665},[655,1647,841],{"class":661},[655,1649,1564],{"class":806},[655,1651,809],{"class":852},[655,1653,1240],{"class":669},[655,1655,869],{"class":852},[655,1657,1658,1660,1662,1664,1666,1668,1670,1672,1674,1677,1679,1682,1685,1688,1690],{"class":657,"line":881},[655,1659,828],{"class":812},[655,1661,1512],{"class":669},[655,1663,838],{"class":665},[655,1665,1643],{"class":669},[655,1667,846],{"class":665},[655,1669,1487],{"class":806},[655,1671,809],{"class":852},[655,1673,967],{"class":665},[655,1675,1676],{"class":682},"file",[655,1678,967],{"class":665},[655,1680,1681],{"class":852},") ",[655,1683,1684],{"class":661},"as",[655,1686,1687],{"class":1042}," File",[655,1689,1046],{"class":665},[655,1691,1692],{"class":1042}," null\n",[655,1694,1695,1697,1699,1701,1703],{"class":657,"line":1151},[655,1696,1278],{"class":661},[655,1698,1236],{"class":852},[655,1700,1283],{"class":665},[655,1702,1676],{"class":669},[655,1704,869],{"class":852},[655,1706,1707,1709,1711,1713,1715,1717,1719,1722,1724,1726,1728,1730,1733,1735,1737],{"class":657,"line":1331},[655,1708,1292],{"class":661},[655,1710,1180],{"class":806},[655,1712,809],{"class":852},[655,1714,855],{"class":665},[655,1716,1301],{"class":852},[655,1718,644],{"class":665},[655,1720,1721],{"class":863}," 400",[655,1723,982],{"class":665},[655,1725,1311],{"class":852},[655,1727,644],{"class":665},[655,1729,679],{"class":665},[655,1731,1732],{"class":682},"Missing file",[655,1734,967],{"class":665},[655,1736,673],{"class":665},[655,1738,869],{"class":852},[655,1740,1741],{"class":657,"line":1355},[655,1742,794],{"emptyLinePlaceholder":793},[655,1744,1746,1749,1751,1753,1755],{"class":657,"line":1745},11,[655,1747,1748],{"class":806},"  ensureBlob",[655,1750,809],{"class":852},[655,1752,1676],{"class":669},[655,1754,982],{"class":665},[655,1756,822],{"class":665},[655,1758,1760,1763,1765,1767,1770,1772],{"class":657,"line":1759},12,[655,1761,1762],{"class":852},"    maxSize",[655,1764,644],{"class":665},[655,1766,679],{"class":665},[655,1768,1769],{"class":682},"1MB",[655,1771,967],{"class":665},[655,1773,1774],{"class":665},",\n",[655,1776,1778,1781,1783,1786,1788,1791,1793,1796],{"class":657,"line":1777},13,[655,1779,1780],{"class":852},"    types",[655,1782,644],{"class":665},[655,1784,1785],{"class":852}," [",[655,1787,967],{"class":665},[655,1789,1790],{"class":682},"image",[655,1792,967],{"class":665},[655,1794,1795],{"class":852},"]",[655,1797,1774],{"class":665},[655,1799,1801,1804],{"class":657,"line":1800},14,[655,1802,1803],{"class":665},"  }",[655,1805,869],{"class":852},[655,1807,1809],{"class":657,"line":1808},15,[655,1810,794],{"emptyLinePlaceholder":793},[655,1812,1814,1816,1818,1820,1822,1825,1827,1829,1831,1834,1836,1838,1840],{"class":657,"line":1813},16,[655,1815,875],{"class":661},[655,1817,841],{"class":661},[655,1819,695],{"class":669},[655,1821,846],{"class":665},[655,1823,1824],{"class":806},"put",[655,1826,809],{"class":852},[655,1828,1676],{"class":669},[655,1830,846],{"class":665},[655,1832,1833],{"class":669},"name",[655,1835,982],{"class":665},[655,1837,1512],{"class":669},[655,1839,982],{"class":665},[655,1841,822],{"class":665},[655,1843,1845,1848,1850,1852,1855,1857],{"class":657,"line":1844},17,[655,1846,1847],{"class":852},"    prefix",[655,1849,644],{"class":665},[655,1851,679],{"class":665},[655,1853,1854],{"class":682},"images",[655,1856,967],{"class":665},[655,1858,1774],{"class":665},[655,1860,1862,1864],{"class":657,"line":1861},18,[655,1863,1803],{"class":665},[655,1865,869],{"class":852},[655,1867,1869,1871],{"class":657,"line":1868},19,[655,1870,884],{"class":665},[655,1872,869],{"class":669},[1874,1875,1877],"tip",{"to":1876},".\u002Fupload",[625,1878,1879],{},"For higher-level upload routes and multipart handlers, see the Upload guide.",[767,1881,1882],{"id":1824},[637,1883,1884],{},"put()",[646,1886,1888],{"className":648,"code":1887,"language":650,"meta":651,"style":651},"await blob.put('images\u002Fphoto.jpg', file, {\n  access: 'public',\n  addRandomSuffix: true,\n  prefix: 'uploads',\n  customMetadata: {\n    userId: '123',\n  },\n})\n",[637,1889,1890,1916,1932,1943,1959,1968,1984,1989],{"__ignoreMap":651},[655,1891,1892,1894,1896,1898,1900,1902,1904,1906,1908,1910,1912,1914],{"class":657,"line":658},[655,1893,904],{"class":661},[655,1895,695],{"class":669},[655,1897,846],{"class":665},[655,1899,1824],{"class":806},[655,1901,809],{"class":669},[655,1903,967],{"class":665},[655,1905,1404],{"class":682},[655,1907,967],{"class":665},[655,1909,982],{"class":665},[655,1911,1512],{"class":669},[655,1913,982],{"class":665},[655,1915,822],{"class":665},[655,1917,1918,1921,1923,1925,1928,1930],{"class":657,"line":688},[655,1919,1920],{"class":852},"  access",[655,1922,644],{"class":665},[655,1924,679],{"class":665},[655,1926,1927],{"class":682},"public",[655,1929,967],{"class":665},[655,1931,1774],{"class":665},[655,1933,1934,1937,1939,1941],{"class":657,"line":790},[655,1935,1936],{"class":852},"  addRandomSuffix",[655,1938,644],{"class":665},[655,1940,1010],{"class":1009},[655,1942,1774],{"class":665},[655,1944,1945,1948,1950,1952,1955,1957],{"class":657,"line":797},[655,1946,1947],{"class":852},"  prefix",[655,1949,644],{"class":665},[655,1951,679],{"class":665},[655,1953,1954],{"class":682},"uploads",[655,1956,967],{"class":665},[655,1958,1774],{"class":665},[655,1960,1961,1964,1966],{"class":657,"line":825},[655,1962,1963],{"class":852},"  customMetadata",[655,1965,644],{"class":665},[655,1967,822],{"class":665},[655,1969,1970,1973,1975,1977,1980,1982],{"class":657,"line":872},[655,1971,1972],{"class":852},"    userId",[655,1974,644],{"class":665},[655,1976,679],{"class":665},[655,1978,1979],{"class":682},"123",[655,1981,967],{"class":665},[655,1983,1774],{"class":665},[655,1985,1986],{"class":657,"line":881},[655,1987,1988],{"class":665},"  },\n",[655,1990,1991,1993],{"class":657,"line":1151},[655,1992,884],{"class":665},[655,1994,869],{"class":669},[625,1996,1997],{},"You can also upload data fetched from another source:",[646,1999,2001],{"className":648,"code":2000,"language":650,"meta":651,"style":651},"const response = await fetch('https:\u002F\u002Fexample.com\u002Fimage.png')\nawait blob.put('downloads\u002Fimage.png', await response.blob())\n",[637,2002,2003,2028],{"__ignoreMap":651},[655,2004,2005,2007,2010,2012,2014,2017,2019,2021,2024,2026],{"class":657,"line":658},[655,2006,933],{"class":812},[655,2008,2009],{"class":669}," response ",[655,2011,1067],{"class":665},[655,2013,841],{"class":661},[655,2015,2016],{"class":806}," fetch",[655,2018,809],{"class":669},[655,2020,967],{"class":665},[655,2022,2023],{"class":682},"https:\u002F\u002Fexample.com\u002Fimage.png",[655,2025,967],{"class":665},[655,2027,869],{"class":669},[655,2029,2030,2032,2034,2036,2038,2040,2042,2045,2047,2049,2051,2054,2056,2059],{"class":657,"line":688},[655,2031,904],{"class":661},[655,2033,695],{"class":669},[655,2035,846],{"class":665},[655,2037,1824],{"class":806},[655,2039,809],{"class":669},[655,2041,967],{"class":665},[655,2043,2044],{"class":682},"downloads\u002Fimage.png",[655,2046,967],{"class":665},[655,2048,982],{"class":665},[655,2050,841],{"class":661},[655,2052,2053],{"class":669}," response",[655,2055,846],{"class":665},[655,2057,2058],{"class":806},"blob",[655,2060,2061],{"class":669},"())\n",[629,2063,2065],{"id":2064},"delete-blobs","Delete blobs",[646,2067,2069],{"className":648,"code":2068,"language":650,"meta":651,"style":651},"await blob.del('images\u002Fphoto.jpg')\nawait blob.del(['images\u002Fone.jpg', 'images\u002Ftwo.jpg'])\nawait blob.delete('images\u002Flegacy-alias.jpg')\n",[637,2070,2071,2092,2124],{"__ignoreMap":651},[655,2072,2073,2075,2077,2079,2082,2084,2086,2088,2090],{"class":657,"line":658},[655,2074,904],{"class":661},[655,2076,695],{"class":669},[655,2078,846],{"class":665},[655,2080,2081],{"class":806},"del",[655,2083,809],{"class":669},[655,2085,967],{"class":665},[655,2087,1404],{"class":682},[655,2089,967],{"class":665},[655,2091,869],{"class":669},[655,2093,2094,2096,2098,2100,2102,2105,2107,2110,2112,2114,2116,2119,2121],{"class":657,"line":688},[655,2095,904],{"class":661},[655,2097,695],{"class":669},[655,2099,846],{"class":665},[655,2101,2081],{"class":806},[655,2103,2104],{"class":669},"([",[655,2106,967],{"class":665},[655,2108,2109],{"class":682},"images\u002Fone.jpg",[655,2111,967],{"class":665},[655,2113,982],{"class":665},[655,2115,679],{"class":665},[655,2117,2118],{"class":682},"images\u002Ftwo.jpg",[655,2120,967],{"class":665},[655,2122,2123],{"class":669},"])\n",[655,2125,2126,2128,2130,2132,2135,2137,2139,2142,2144],{"class":657,"line":790},[655,2127,904],{"class":661},[655,2129,695],{"class":669},[655,2131,846],{"class":665},[655,2133,2134],{"class":806},"delete",[655,2136,809],{"class":669},[655,2138,967],{"class":665},[655,2140,2141],{"class":682},"images\u002Flegacy-alias.jpg",[655,2143,967],{"class":665},[655,2145,869],{"class":669},[767,2147,2148],{"id":2081},[637,2149,2150],{},"del()",[625,2152,2153],{},"Deletes one or more blobs by pathname.",[629,2155,2157],{"id":2156},"validate-uploads","Validate uploads",[646,2159,2161],{"className":648,"code":2160,"language":650,"meta":651,"style":651},"ensureBlob(file, {\n  maxSize: '1MB',\n  types: ['image', 'application\u002Fpdf'],\n})\n",[637,2162,2163,2175,2190,2218],{"__ignoreMap":651},[655,2164,2165,2168,2171,2173],{"class":657,"line":658},[655,2166,2167],{"class":806},"ensureBlob",[655,2169,2170],{"class":669},"(file",[655,2172,982],{"class":665},[655,2174,822],{"class":665},[655,2176,2177,2180,2182,2184,2186,2188],{"class":657,"line":688},[655,2178,2179],{"class":852},"  maxSize",[655,2181,644],{"class":665},[655,2183,679],{"class":665},[655,2185,1769],{"class":682},[655,2187,967],{"class":665},[655,2189,1774],{"class":665},[655,2191,2192,2195,2197,2199,2201,2203,2205,2207,2209,2212,2214,2216],{"class":657,"line":790},[655,2193,2194],{"class":852},"  types",[655,2196,644],{"class":665},[655,2198,1785],{"class":669},[655,2200,967],{"class":665},[655,2202,1790],{"class":682},[655,2204,967],{"class":665},[655,2206,982],{"class":665},[655,2208,679],{"class":665},[655,2210,2211],{"class":682},"application\u002Fpdf",[655,2213,967],{"class":665},[655,2215,1795],{"class":669},[655,2217,1774],{"class":665},[655,2219,2220,2222],{"class":657,"line":797},[655,2221,884],{"class":665},[655,2223,869],{"class":669},[767,2225,2227],{"id":2226},"ensureblob",[637,2228,643],{},[625,2230,2231],{},"Throws when a file exceeds the maximum size or does not match the allowed content types.",[625,2233,2234,2235,1371,2237,1371,2240,1371,2243,2246,2247,846],{},"The helper accepts grouped content types such as ",[637,2236,1790],{},[637,2238,2239],{},"video",[637,2241,2242],{},"audio",[637,2244,2245],{},"pdf",", and exact MIME types such as ",[637,2248,2211],{},[2250,2251,2252],"style",{},"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 .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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}",{"title":651,"searchDepth":688,"depth":688,"links":2254},[2255,2256,2259,2262,2265,2268,2271,2274],{"id":631,"depth":688,"text":632},{"id":738,"depth":688,"text":739,"children":2257},[2258],{"id":849,"depth":790,"text":891},{"id":1162,"depth":688,"text":1163,"children":2260},[2261],{"id":1342,"depth":790,"text":1364},{"id":1414,"depth":688,"text":1415,"children":2263},[2264],{"id":1438,"depth":790,"text":1453},{"id":1463,"depth":688,"text":1464,"children":2266},[2267],{"id":1487,"depth":790,"text":1526},{"id":1538,"depth":688,"text":1539,"children":2269},[2270],{"id":1824,"depth":790,"text":1884},{"id":2064,"depth":688,"text":2065,"children":2272},[2273],{"id":2081,"depth":790,"text":2150},{"id":2156,"depth":688,"text":2157,"children":2275},[2276],{"id":2226,"depth":790,"text":643},"md",{"icon":62},{"title":75},{"title":620,"description":77},"docs\u002Fnuxt\u002Fblob\u002Fusage","J9cmWb_3aFEaCwg3WKhiyLdQtOvzUOxjcBEfh-0uvuE",[2284,2285],{"title":70,"path":500,"description":72},{"title":2286,"path":504,"description":81},"Overview",1775568178647]