11<div align =" center " >
2- <img src =" ./assets/vorsteh-queue-logo-nobg.png " alt =" Vorsteh Queue " width = " 200 " height =" 200 " />
2+ <img src =" ./assets/vorsteh-queue-logo-nobg.png " alt =" Vorsteh Queue " height =" 200 " />
33 <h1 >Vorsteh Queue</h1 >
44 <p >A TypeScript-first job queue system with multiple database adapters, built for reliability and developer experience.</p >
55</div >
@@ -48,6 +48,7 @@ pnpm add @vorsteh-queue/core @vorsteh-queue/adapter-drizzle
4848``` typescript
4949import { drizzle } from " drizzle-orm/node-postgres"
5050import { Pool } from " pg"
51+
5152import { DrizzleQueueAdapter } from " @vorsteh-queue/adapter-drizzle"
5253import { Queue } from " @vorsteh-queue/core"
5354
@@ -65,10 +66,14 @@ queue.register("send-email", async (payload: { to: string; subject: string }) =>
6566
6667// Add jobs
6768await queue .
add (
" send-email" , { to:
" [email protected] " , subject:
" Welcome!" })
68- await queue .
add (
" send-email" , { to:
" [email protected] " , subject:
" Report" }, {
69- priority: 1 , // Higher priority
70- delay: 5000 // Delay 5 seconds
71- })
69+ await queue .add (
70+ " send-email" ,
71+ { to:
" [email protected] " , subject:
" Report" },
72+ {
73+ priority: 1 , // Higher priority
74+ delay: 5000 , // Delay 5 seconds
75+ },
76+ )
7277
7378// Start processing
7479queue .start ()
@@ -91,22 +96,22 @@ Check out the [examples directory](./examples/) for complete, runnable examples:
9196Jobs are processed by priority (lower number = higher priority):
9297
9398``` typescript
94- await queue .add (" urgent-task" , payload , { priority: 1 }) // Processed first
95- await queue .add (" normal-task" , payload , { priority: 2 }) // Default priority
96- await queue .add (" low-task" , payload , { priority: 3 }) // Processed last
99+ await queue .add (" urgent-task" , payload , { priority: 1 }) // Processed first
100+ await queue .add (" normal-task" , payload , { priority: 2 }) // Default priority
101+ await queue .add (" low-task" , payload , { priority: 3 }) // Processed last
97102```
98103
99104## Recurring Jobs
100105
101106``` typescript
102107// Cron expression
103108await queue .add (" daily-report" , payload , {
104- cron: " 0 9 * * *" // Every day at 9 AM
109+ cron: " 0 9 * * *" , // Every day at 9 AM
105110})
106111
107112// Interval with limit
108113await queue .add (" health-check" , payload , {
109- repeat: { every: 30000 , limit: 10 } // Every 30s, 10 times
114+ repeat: { every: 30000 , limit: 10 }, // Every 30s, 10 times
110115})
111116```
112117
@@ -116,11 +121,11 @@ await queue.add("health-check", payload, {
116121// Automatic cleanup configuration
117122const queue = new Queue (adapter , {
118123 name: " my-queue" ,
119- removeOnComplete: true , // Remove completed jobs immediately
120- removeOnFail: false , // Keep failed jobs for debugging
124+ removeOnComplete: true , // Remove completed jobs immediately
125+ removeOnFail: false , // Keep failed jobs for debugging
121126 // Or use numbers to keep N jobs
122- removeOnComplete: 100 , // Keep last 100 completed jobs
123- removeOnFail: 50 , // Keep last 50 failed jobs
127+ removeOnComplete: 100 , // Keep last 100 completed jobs
128+ removeOnFail: 50 , // Keep last 50 failed jobs
124129})
125130```
126131
@@ -132,19 +137,19 @@ Vorsteh Queue uses a **UTC-first approach** for reliable timezone handling:
132137// Schedule job for 9 AM New York time - converted to UTC immediately
133138await queue .add (" daily-report" , payload , {
134139 cron: " 0 9 * * *" ,
135- timezone: " America/New_York" // Timezone used for conversion only
140+ timezone: " America/New_York" , // Timezone used for conversion only
136141})
137142
138143// Schedule job for specific time in Tokyo - stored as UTC
139144await queue .add (" notification" , payload , {
140145 runAt: new Date (" 2024-01-15T10:00:00" ),
141- timezone: " Asia/Tokyo" // Interprets runAt in Tokyo time
146+ timezone: " Asia/Tokyo" , // Interprets runAt in Tokyo time
142147})
143148
144149// Complex cron with timezone - result always UTC
145150await queue .add (" business-task" , payload , {
146151 cron: " */15 9-17 * * 1-5" ,
147- timezone: " Europe/London" // Business hours in London time
152+ timezone: " Europe/London" , // Business hours in London time
148153})
149154```
150155
@@ -162,16 +167,16 @@ await queue.add("business-task", payload, {
162167// Register a job that reports progress
163168queue .register (" process-data" , async (job ) => {
164169 const items = job .payload .items
165-
170+
166171 for (let i = 0 ; i < items .length ; i ++ ) {
167172 // Process item
168173 await processItem (items [i ])
169-
174+
170175 // Update progress (0-100)
171176 const progress = Math .round (((i + 1 ) / items .length ) * 100 )
172177 await job .updateProgress (progress )
173178 }
174-
179+
175180 return { processed: items .length }
176181})
177182
0 commit comments