[{"data":1,"prerenderedAt":1891},["ShallowReactive",2],{"docs-navigation":3,"docs:\u002Fdocs\u002Fnuxt\u002Fcron":618,"\u002Fdocs\u002Fnuxt\u002Fcron:surround":1888},[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":239,"body":620,"description":241,"extension":1880,"meta":1881,"navigation":1883,"path":579,"seo":1885,"stem":1886,"__hash__":1887},"docs\u002Fdocs\u002Fnuxt\u002Fcron\u002Findex.md",{"type":621,"value":622,"toc":1866},"minimark",[623,627,647,652,1351,1370,1374,1390,1401,1419,1423,1429,1436,1502,1505,1511,1520,1550,1561,1658,1662,1665,1686,1695,1700,1751,1856,1862],[624,625,626],"p",{},"Use Cron to run recurring work such as digests, cleanup tasks, syncs, and reports from a schedule instead of a request or queue message.",[628,629,631],"fw",{"id":630},"nuxt",[624,632,633,634,638,639,642,643,646],{},"Define crons in ",[635,636,637],"code",{},"server\u002Fcrons\u002F**"," with ",[635,640,641],{},"defineCron(schedules, handler)",", then trigger one manually with ",[635,644,645],{},"runCron()",".",[648,649,651],"h2",{"id":650},"getting-started","Getting started",[653,654,656,661,687,691,698,951,955,965,1197,1201,1204],"steps",{"level":655},"3",[657,658,660],"h3",{"id":659},"install-the-package","Install the package",[662,663,669],"pre",{"className":664,"code":665,"filename":666,"language":667,"meta":668,"style":668},"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\u002Fcron@main\n","Terminal","bash","",[635,670,671],{"__ignoreMap":668},[672,673,676,680,684],"span",{"class":674,"line":675},"line",1,[672,677,679],{"class":678},"sBMFI","pnpm",[672,681,683],{"class":682},"sfazB"," add",[672,685,686],{"class":682}," https:\u002F\u002Fpkg.pr.new\u002Fvite-hub\u002Fvitehub\u002F@vitehub\u002Fcron@main\n",[657,688,690],{"id":689},"configure-a-provider","Configure a provider",[624,692,693,694,697],{},"Set the top-level ",[635,695,696],{},"cron"," key for the scheduler backend.",[699,700,702,807,879],"tabs",{"sync":701},"cron-provider",[703,704,705],"tabs-item",{"icon":248,"label":245},[628,706,707],{"id":630},[662,708,713],{"className":709,"code":710,"filename":711,"language":712,"meta":668,"style":668},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['@vitehub\u002Fcron\u002Fnuxt'],\n  cron: {\n    provider: 'node',\n  },\n})\n","nuxt.config.ts","ts",[635,714,715,736,763,774,792,798],{"__ignoreMap":668},[672,716,717,721,724,728,732],{"class":674,"line":675},[672,718,720],{"class":719},"s7zQu","export",[672,722,723],{"class":719}," default",[672,725,727],{"class":726},"s2Zo4"," defineNuxtConfig",[672,729,731],{"class":730},"sTEyZ","(",[672,733,735],{"class":734},"sMK4o","{\n",[672,737,739,743,746,749,752,755,757,760],{"class":674,"line":738},2,[672,740,742],{"class":741},"swJcz","  modules",[672,744,745],{"class":734},":",[672,747,748],{"class":730}," [",[672,750,751],{"class":734},"'",[672,753,754],{"class":682},"@vitehub\u002Fcron\u002Fnuxt",[672,756,751],{"class":734},[672,758,759],{"class":730},"]",[672,761,762],{"class":734},",\n",[672,764,766,769,771],{"class":674,"line":765},3,[672,767,768],{"class":741},"  cron",[672,770,745],{"class":734},[672,772,773],{"class":734}," {\n",[672,775,777,780,782,785,788,790],{"class":674,"line":776},4,[672,778,779],{"class":741},"    provider",[672,781,745],{"class":734},[672,783,784],{"class":734}," '",[672,786,787],{"class":682},"node",[672,789,751],{"class":734},[672,791,762],{"class":734},[672,793,795],{"class":674,"line":794},5,[672,796,797],{"class":734},"  },\n",[672,799,801,804],{"class":674,"line":800},6,[672,802,803],{"class":734},"}",[672,805,806],{"class":730},")\n",[703,808,809],{"icon":88,"label":85},[628,810,811],{"id":630},[662,812,814],{"className":709,"code":813,"filename":711,"language":712,"meta":668,"style":668},"export default defineNuxtConfig({\n  modules: ['@vitehub\u002Fcron\u002Fnuxt'],\n  cron: {\n    provider: 'cloudflare',\n  },\n})\n",[635,815,816,828,846,854,869,873],{"__ignoreMap":668},[672,817,818,820,822,824,826],{"class":674,"line":675},[672,819,720],{"class":719},[672,821,723],{"class":719},[672,823,727],{"class":726},[672,825,731],{"class":730},[672,827,735],{"class":734},[672,829,830,832,834,836,838,840,842,844],{"class":674,"line":738},[672,831,742],{"class":741},[672,833,745],{"class":734},[672,835,748],{"class":730},[672,837,751],{"class":734},[672,839,754],{"class":682},[672,841,751],{"class":734},[672,843,759],{"class":730},[672,845,762],{"class":734},[672,847,848,850,852],{"class":674,"line":765},[672,849,768],{"class":741},[672,851,745],{"class":734},[672,853,773],{"class":734},[672,855,856,858,860,862,865,867],{"class":674,"line":776},[672,857,779],{"class":741},[672,859,745],{"class":734},[672,861,784],{"class":734},[672,863,864],{"class":682},"cloudflare",[672,866,751],{"class":734},[672,868,762],{"class":734},[672,870,871],{"class":674,"line":794},[672,872,797],{"class":734},[672,874,875,877],{"class":674,"line":800},[672,876,803],{"class":734},[672,878,806],{"class":730},[703,880,881],{"icon":151,"label":148},[628,882,883],{"id":630},[662,884,886],{"className":709,"code":885,"filename":711,"language":712,"meta":668,"style":668},"export default defineNuxtConfig({\n  modules: ['@vitehub\u002Fcron\u002Fnuxt'],\n  cron: {\n    provider: 'vercel',\n  },\n})\n",[635,887,888,900,918,926,941,945],{"__ignoreMap":668},[672,889,890,892,894,896,898],{"class":674,"line":675},[672,891,720],{"class":719},[672,893,723],{"class":719},[672,895,727],{"class":726},[672,897,731],{"class":730},[672,899,735],{"class":734},[672,901,902,904,906,908,910,912,914,916],{"class":674,"line":738},[672,903,742],{"class":741},[672,905,745],{"class":734},[672,907,748],{"class":730},[672,909,751],{"class":734},[672,911,754],{"class":682},[672,913,751],{"class":734},[672,915,759],{"class":730},[672,917,762],{"class":734},[672,919,920,922,924],{"class":674,"line":765},[672,921,768],{"class":741},[672,923,745],{"class":734},[672,925,773],{"class":734},[672,927,928,930,932,934,937,939],{"class":674,"line":776},[672,929,779],{"class":741},[672,931,745],{"class":734},[672,933,784],{"class":734},[672,935,936],{"class":682},"vercel",[672,938,751],{"class":734},[672,940,762],{"class":734},[672,942,943],{"class":674,"line":794},[672,944,797],{"class":734},[672,946,947,949],{"class":674,"line":800},[672,948,803],{"class":734},[672,950,806],{"class":730},[657,952,954],{"id":953},"define-a-cron","Define a cron",[624,956,957,958,961,962,646],{},"Declare the schedule next to the cron. Start with a plain cron string. Move to schedule objects when you need Node-specific controls such as ",[635,959,960],{},"timezone"," or ",[635,963,964],{},"maxRuns",[628,966,967],{"id":630},[662,968,971],{"className":709,"code":969,"filename":970,"language":712,"meta":668,"style":668},"export default defineCron(['0 12 * * 1'], async (rawEvent) => {\n  const event = await readValidatedEvent(rawEvent, (payload) => ({\n    headlines: Array.isArray(payload?.headlines) ? payload.headlines : [],\n  }))\n  const headlines = Array.isArray(event.payload?.headlines) ? event.payload.headlines : []\n\n  return {\n    count: headlines.length,\n  }\n})\n","server\u002Fcrons\u002Fdaily-digest.ts",[635,972,973,1016,1052,1098,1106,1153,1159,1167,1184,1190],{"__ignoreMap":668},[672,974,975,977,979,982,985,987,990,992,994,997,1001,1004,1008,1011,1014],{"class":674,"line":675},[672,976,720],{"class":719},[672,978,723],{"class":719},[672,980,981],{"class":726}," defineCron",[672,983,984],{"class":730},"([",[672,986,751],{"class":734},[672,988,989],{"class":682},"0 12 * * 1",[672,991,751],{"class":734},[672,993,759],{"class":730},[672,995,996],{"class":734},",",[672,998,1000],{"class":999},"spNyl"," async",[672,1002,1003],{"class":734}," (",[672,1005,1007],{"class":1006},"sHdIc","rawEvent",[672,1009,1010],{"class":734},")",[672,1012,1013],{"class":999}," =>",[672,1015,773],{"class":734},[672,1017,1018,1021,1024,1027,1030,1033,1035,1037,1039,1041,1044,1046,1048,1050],{"class":674,"line":738},[672,1019,1020],{"class":999},"  const",[672,1022,1023],{"class":730}," event",[672,1025,1026],{"class":734}," =",[672,1028,1029],{"class":719}," await",[672,1031,1032],{"class":726}," readValidatedEvent",[672,1034,731],{"class":741},[672,1036,1007],{"class":730},[672,1038,996],{"class":734},[672,1040,1003],{"class":734},[672,1042,1043],{"class":1006},"payload",[672,1045,1010],{"class":734},[672,1047,1013],{"class":999},[672,1049,1003],{"class":741},[672,1051,735],{"class":734},[672,1053,1054,1057,1059,1062,1064,1067,1069,1071,1074,1077,1080,1083,1086,1088,1090,1093,1096],{"class":674,"line":765},[672,1055,1056],{"class":741},"    headlines",[672,1058,745],{"class":734},[672,1060,1061],{"class":730}," Array",[672,1063,646],{"class":734},[672,1065,1066],{"class":726},"isArray",[672,1068,731],{"class":741},[672,1070,1043],{"class":730},[672,1072,1073],{"class":734},"?.",[672,1075,1076],{"class":730},"headlines",[672,1078,1079],{"class":741},") ",[672,1081,1082],{"class":734},"?",[672,1084,1085],{"class":730}," payload",[672,1087,646],{"class":734},[672,1089,1076],{"class":730},[672,1091,1092],{"class":734}," :",[672,1094,1095],{"class":741}," []",[672,1097,762],{"class":734},[672,1099,1100,1103],{"class":674,"line":776},[672,1101,1102],{"class":734},"  }",[672,1104,1105],{"class":741},"))\n",[672,1107,1108,1110,1113,1115,1117,1119,1121,1123,1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146,1148,1150],{"class":674,"line":794},[672,1109,1020],{"class":999},[672,1111,1112],{"class":730}," headlines",[672,1114,1026],{"class":734},[672,1116,1061],{"class":730},[672,1118,646],{"class":734},[672,1120,1066],{"class":726},[672,1122,731],{"class":741},[672,1124,1125],{"class":730},"event",[672,1127,646],{"class":734},[672,1129,1043],{"class":730},[672,1131,1073],{"class":734},[672,1133,1076],{"class":730},[672,1135,1079],{"class":741},[672,1137,1082],{"class":734},[672,1139,1023],{"class":730},[672,1141,646],{"class":734},[672,1143,1043],{"class":730},[672,1145,646],{"class":734},[672,1147,1076],{"class":730},[672,1149,1092],{"class":734},[672,1151,1152],{"class":741}," []\n",[672,1154,1155],{"class":674,"line":800},[672,1156,1158],{"emptyLinePlaceholder":1157},true,"\n",[672,1160,1162,1165],{"class":674,"line":1161},7,[672,1163,1164],{"class":719},"  return",[672,1166,773],{"class":734},[672,1168,1170,1173,1175,1177,1179,1182],{"class":674,"line":1169},8,[672,1171,1172],{"class":741},"    count",[672,1174,745],{"class":734},[672,1176,1112],{"class":730},[672,1178,646],{"class":734},[672,1180,1181],{"class":730},"length",[672,1183,762],{"class":734},[672,1185,1187],{"class":674,"line":1186},9,[672,1188,1189],{"class":734},"  }\n",[672,1191,1193,1195],{"class":674,"line":1192},10,[672,1194,803],{"class":734},[672,1196,806],{"class":730},[657,1198,1200],{"id":1199},"run-the-same-cron-manually","Run the same cron manually",[624,1202,1203],{},"Manual execution uses the same handler. This is useful for preview routes, backfills, and admin actions.",[628,1205,1206],{"id":630},[662,1207,1210],{"className":709,"code":1208,"filename":1209,"language":712,"meta":668,"style":668},"import { readBody } from 'h3'\nimport { runCron } from '@vitehub\u002Fcron'\n\nexport default defineEventHandler(async (event) => {\n  const body = await readBody(event)\n\n  return await runCron('daily-digest', {\n    payload: body,\n  })\n})\n","server\u002Fapi\u002Fcrons\u002Fdigest.post.ts",[635,1211,1212,1236,1256,1260,1284,1303,1307,1328,1339,1345],{"__ignoreMap":668},[672,1213,1214,1217,1220,1223,1226,1229,1231,1233],{"class":674,"line":675},[672,1215,1216],{"class":719},"import",[672,1218,1219],{"class":734}," {",[672,1221,1222],{"class":730}," readBody",[672,1224,1225],{"class":734}," }",[672,1227,1228],{"class":719}," from",[672,1230,784],{"class":734},[672,1232,657],{"class":682},[672,1234,1235],{"class":734},"'\n",[672,1237,1238,1240,1242,1245,1247,1249,1251,1254],{"class":674,"line":738},[672,1239,1216],{"class":719},[672,1241,1219],{"class":734},[672,1243,1244],{"class":730}," runCron",[672,1246,1225],{"class":734},[672,1248,1228],{"class":719},[672,1250,784],{"class":734},[672,1252,1253],{"class":682},"@vitehub\u002Fcron",[672,1255,1235],{"class":734},[672,1257,1258],{"class":674,"line":765},[672,1259,1158],{"emptyLinePlaceholder":1157},[672,1261,1262,1264,1266,1269,1271,1274,1276,1278,1280,1282],{"class":674,"line":776},[672,1263,720],{"class":719},[672,1265,723],{"class":719},[672,1267,1268],{"class":726}," defineEventHandler",[672,1270,731],{"class":730},[672,1272,1273],{"class":999},"async",[672,1275,1003],{"class":734},[672,1277,1125],{"class":1006},[672,1279,1010],{"class":734},[672,1281,1013],{"class":999},[672,1283,773],{"class":734},[672,1285,1286,1288,1291,1293,1295,1297,1299,1301],{"class":674,"line":794},[672,1287,1020],{"class":999},[672,1289,1290],{"class":730}," body",[672,1292,1026],{"class":734},[672,1294,1029],{"class":719},[672,1296,1222],{"class":726},[672,1298,731],{"class":741},[672,1300,1125],{"class":730},[672,1302,806],{"class":741},[672,1304,1305],{"class":674,"line":800},[672,1306,1158],{"emptyLinePlaceholder":1157},[672,1308,1309,1311,1313,1315,1317,1319,1322,1324,1326],{"class":674,"line":1161},[672,1310,1164],{"class":719},[672,1312,1029],{"class":719},[672,1314,1244],{"class":726},[672,1316,731],{"class":741},[672,1318,751],{"class":734},[672,1320,1321],{"class":682},"daily-digest",[672,1323,751],{"class":734},[672,1325,996],{"class":734},[672,1327,773],{"class":734},[672,1329,1330,1333,1335,1337],{"class":674,"line":1169},[672,1331,1332],{"class":741},"    payload",[672,1334,745],{"class":734},[672,1336,1290],{"class":730},[672,1338,762],{"class":734},[672,1340,1341,1343],{"class":674,"line":1186},[672,1342,1102],{"class":734},[672,1344,806],{"class":741},[672,1346,1347,1349],{"class":674,"line":1192},[672,1348,803],{"class":734},[672,1350,806],{"class":730},[1352,1353,1356,1362,1366],"u-page-grid",{"className":1354},[1355],"pb-2",[1357,1358],"u-page-card",{"description":1359,"icon":248,"title":1360,"to":1361},"Configure in-process scheduling with Croner and Node-only schedule controls.","Node Cron",".\u002Fcron\u002Fnode",[1357,1363],{"description":251,"icon":88,"title":1364,"to":1365},"Cloudflare Cron",".\u002Fcron\u002Fcloudflare",[1357,1367],{"description":254,"icon":151,"title":1368,"to":1369},"Vercel Cron",".\u002Fcron\u002Fvercel",[648,1371,1373],{"id":1372},"public-api","Public API",[1375,1376,1377],"table",{},[1378,1379,1380],"thead",{},[1381,1382,1383,1387],"tr",{},[1384,1385,1386],"th",{},"Function",[1384,1388,1389],{},"Use it for",[628,1391,1392],{"id":630},[624,1393,1394,1395,1397,1398,1400],{},"| ",[635,1396,641],{}," | Register one named cron under ",[635,1399,637],{}," and declare its schedules. |",[624,1402,1394,1403,1406,1407,1410,1411,1414,1415,1418],{},[635,1404,1405],{},"runCron(name, { payload?, context? })"," | Trigger that cron manually from a route, task, or webhook. |\n| ",[635,1408,1409],{},"startScheduleRunner(options?)"," | Start the in-process Node scheduler for all registered crons. |\n| ",[635,1412,1413],{},"getCronsForExpression(cron)"," | Return the cron names registered under a given cron expression. |\n| ",[635,1416,1417],{},"runCronsForExpression(cron, { payload?, context? })"," | Run every cron registered under a given cron expression. |",[648,1420,1422],{"id":1421},"type-reference","Type reference",[657,1424,1426],{"id":1425},"croneventtpayload",[635,1427,1428],{},"CronEvent\u003CTPayload>",[624,1430,1431,1432,1435],{},"The handler receives a ",[635,1433,1434],{},"CronEvent"," object with these fields:",[1375,1437,1438,1451],{},[1378,1439,1440],{},[1381,1441,1442,1445,1448],{},[1384,1443,1444],{},"Field",[1384,1446,1447],{},"Type",[1384,1449,1450],{},"Description",[1452,1453,1454,1470,1487],"tbody",{},[1381,1455,1456,1462,1467],{},[1457,1458,1459],"td",{},[635,1460,1461],{},"name",[1457,1463,1464],{},[635,1465,1466],{},"string",[1457,1468,1469],{},"The cron name derived from the file path.",[1381,1471,1472,1476,1481],{},[1457,1473,1474],{},[635,1475,1043],{},[1457,1477,1478],{},[635,1479,1480],{},"TPayload",[1457,1482,1483,1484,1486],{},"Data passed via ",[635,1485,645],{}," or the scheduled trigger.",[1381,1488,1489,1494,1499],{},[1457,1490,1491],{},[635,1492,1493],{},"context",[1457,1495,1496],{},[635,1497,1498],{},"CronContext",[1457,1500,1501],{},"Execution context from the runtime.",[624,1503,1504],{},"The handler can return any value or nothing at all. ViteHub does not enforce a return type.",[657,1506,1508],{"id":1507},"crondefinitionoptions",[635,1509,1510],{},"CronDefinitionOptions",[628,1512,1513],{"id":630},[624,1514,1515,1516,1519],{},"The schedules array passed to ",[635,1517,1518],{},"defineCron()"," accepts:",[1375,1521,1522,1533],{},[1378,1523,1524],{},[1381,1525,1526,1529,1531],{},[1384,1527,1528],{},"Option",[1384,1530,1447],{},[1384,1532,1450],{},[1452,1534,1535],{},[1381,1536,1537,1542,1547],{},[1457,1538,1539],{},[635,1540,1541],{},"schedules",[1457,1543,1544],{},[635,1545,1546],{},"Array\u003Cstring | CronSchedule>",[1457,1548,1549],{},"One or more cron expressions.",[624,1551,1552,1553,1556,1557,1560],{},"Each schedule can be a plain five-field cron string like ",[635,1554,1555],{},"'0 12 * * 1'"," or a ",[635,1558,1559],{},"CronSchedule"," object for Node-specific controls:",[1375,1562,1563,1573],{},[1378,1564,1565],{},[1381,1566,1567,1569,1571],{},[1384,1568,1444],{},[1384,1570,1447],{},[1384,1572,1450],{},[1452,1574,1575,1588,1601,1616,1630,1644],{},[1381,1576,1577,1581,1585],{},[1457,1578,1579],{},[635,1580,696],{},[1457,1582,1583],{},[635,1584,1466],{},[1457,1586,1587],{},"Five-field cron expression (required).",[1381,1589,1590,1594,1598],{},[1457,1591,1592],{},[635,1593,960],{},[1457,1595,1596],{},[635,1597,1466],{},[1457,1599,1600],{},"IANA timezone. Node provider only.",[1381,1602,1603,1608,1613],{},[1457,1604,1605],{},[635,1606,1607],{},"overlap",[1457,1609,1610],{},[635,1611,1612],{},"'allow' | 'prevent'",[1457,1614,1615],{},"Overlap behavior. Node provider only.",[1381,1617,1618,1623,1627],{},[1457,1619,1620],{},[635,1621,1622],{},"startAt",[1457,1624,1625],{},[635,1626,1466],{},[1457,1628,1629],{},"ISO date to start scheduling. Node provider only.",[1381,1631,1632,1637,1641],{},[1457,1633,1634],{},[635,1635,1636],{},"stopAt",[1457,1638,1639],{},[635,1640,1466],{},[1457,1642,1643],{},"ISO date to stop scheduling. Node provider only.",[1381,1645,1646,1650,1655],{},[1457,1647,1648],{},[635,1649,964],{},[1457,1651,1652],{},[635,1653,1654],{},"number",[1457,1656,1657],{},"Maximum number of runs. Node provider only.",[648,1659,1661],{"id":1660},"configure-provider-and-cron-options","Configure provider and cron options",[624,1663,1664],{},"Cron configuration is intentionally small:",[1666,1667,1668,1675,1681],"ul",{},[1669,1670,1671,1672,1674],"li",{},"Top-level ",[635,1673,696],{}," config selects the scheduler provider for the app.\n",[1669,1676,1677,1680],{},[635,1678,1679],{},"createCron(options?)(handler)"," configures one cron file through an options object.",[1669,1682,1683,1685],{},[635,1684,641],{}," configures one cron file by putting schedules in the first argument.\n::",[628,1687,1688],{"id":630},[1666,1689,1690],{},[1669,1691,1692,1694],{},[635,1693,641],{}," configures one cron file by putting schedules in the first argument.",[624,1696,1697,1699],{},[635,1698,645],{}," is only for manual execution. It does not define schedules or provider behavior.",[628,1701,1702],{"id":630},[662,1703,1705],{"className":709,"code":1704,"filename":711,"language":712,"meta":668,"style":668},"export default defineNuxtConfig({\n  cron: {\n    provider: 'vercel',\n  },\n})\n",[635,1706,1707,1719,1727,1741,1745],{"__ignoreMap":668},[672,1708,1709,1711,1713,1715,1717],{"class":674,"line":675},[672,1710,720],{"class":719},[672,1712,723],{"class":719},[672,1714,727],{"class":726},[672,1716,731],{"class":730},[672,1718,735],{"class":734},[672,1720,1721,1723,1725],{"class":674,"line":738},[672,1722,768],{"class":741},[672,1724,745],{"class":734},[672,1726,773],{"class":734},[672,1728,1729,1731,1733,1735,1737,1739],{"class":674,"line":765},[672,1730,779],{"class":741},[672,1732,745],{"class":734},[672,1734,784],{"class":734},[672,1736,936],{"class":682},[672,1738,751],{"class":734},[672,1740,762],{"class":734},[672,1742,1743],{"class":674,"line":776},[672,1744,797],{"class":734},[672,1746,1747,1749],{"class":674,"line":794},[672,1748,803],{"class":734},[672,1750,806],{"class":730},[628,1752,1753],{"id":630},[662,1754,1756],{"className":709,"code":1755,"filename":970,"language":712,"meta":668,"style":668},"export default defineCron(['0 12 * * 1'], async (event) => {\n  return {\n    count: Array.isArray(event.payload?.headlines) ? event.payload.headlines.length : 0,\n  }\n})\n",[635,1757,1758,1790,1796,1846,1850],{"__ignoreMap":668},[672,1759,1760,1762,1764,1766,1768,1770,1772,1774,1776,1778,1780,1782,1784,1786,1788],{"class":674,"line":675},[672,1761,720],{"class":719},[672,1763,723],{"class":719},[672,1765,981],{"class":726},[672,1767,984],{"class":730},[672,1769,751],{"class":734},[672,1771,989],{"class":682},[672,1773,751],{"class":734},[672,1775,759],{"class":730},[672,1777,996],{"class":734},[672,1779,1000],{"class":999},[672,1781,1003],{"class":734},[672,1783,1125],{"class":1006},[672,1785,1010],{"class":734},[672,1787,1013],{"class":999},[672,1789,773],{"class":734},[672,1791,1792,1794],{"class":674,"line":738},[672,1793,1164],{"class":719},[672,1795,773],{"class":734},[672,1797,1798,1800,1802,1804,1806,1808,1810,1812,1814,1816,1818,1820,1822,1824,1826,1828,1830,1832,1834,1836,1838,1840,1844],{"class":674,"line":765},[672,1799,1172],{"class":741},[672,1801,745],{"class":734},[672,1803,1061],{"class":730},[672,1805,646],{"class":734},[672,1807,1066],{"class":726},[672,1809,731],{"class":741},[672,1811,1125],{"class":730},[672,1813,646],{"class":734},[672,1815,1043],{"class":730},[672,1817,1073],{"class":734},[672,1819,1076],{"class":730},[672,1821,1079],{"class":741},[672,1823,1082],{"class":734},[672,1825,1023],{"class":730},[672,1827,646],{"class":734},[672,1829,1043],{"class":730},[672,1831,646],{"class":734},[672,1833,1076],{"class":730},[672,1835,646],{"class":734},[672,1837,1181],{"class":730},[672,1839,1092],{"class":734},[672,1841,1843],{"class":1842},"sbssI"," 0",[672,1845,762],{"class":734},[672,1847,1848],{"class":674,"line":776},[672,1849,1189],{"class":734},[672,1851,1852,1854],{"class":674,"line":794},[672,1853,803],{"class":734},[672,1855,806],{"class":730},[1857,1858,1859],"note",{},[624,1860,1861],{},"Each provider adds its own scheduling behavior and sub-features. Use the provider pages in the sidebar for provider-specific schedule support, generated routes, secrets, and runtime helpers.",[1863,1864,1865],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":668,"searchDepth":738,"depth":738,"links":1867},[1868,1874,1875,1879],{"id":650,"depth":738,"text":651,"children":1869},[1870,1871,1872,1873],{"id":659,"depth":765,"text":660},{"id":689,"depth":765,"text":690},{"id":953,"depth":765,"text":954},{"id":1199,"depth":765,"text":1200},{"id":1372,"depth":738,"text":1373},{"id":1421,"depth":738,"text":1422,"children":1876},[1877,1878],{"id":1425,"depth":765,"text":1428},{"id":1507,"depth":765,"text":1510},{"id":1660,"depth":738,"text":1661},"md",{"icon":1882},"i-lucide-alarm-clock",{"title":1884},"Overview",{"title":239,"description":241},"docs\u002Fnuxt\u002Fcron\u002Findex","GrvWb8ybITgi9l0hlRx-kVVSCt8pqYGy7Q0EdKrGNcU",[1889,1890],{"title":153,"path":577,"description":237},{"title":245,"path":582,"description":247},1775391847991]