@omerdev/batch-queue
v1.0.1
Published
High-concurrency task worker queue with rate limiting, concurrency controls, pause/resume, and priority (<2KB)
Maintainers
Readme
🚦 @omerdev/batch-queue
High-concurrency task worker queue with rate limiting, concurrency controls, pause/resume, and priority (<2KB).
⚡ Why batch-queue?
- Concurrency Limits: Control how many asynchronous tasks execute simultaneously.
- Rate Limiting: Protect APIs and downstream services with sliding-window request throttling.
- Priority Queueing: Run critical tasks ahead of standard tasks seamlessly.
- Automatic Retries: Configurable retries with backoff delays for resilient network operations.
- Task Timeouts: Built-in cancellation via
AbortSignalwhen tasks exceed deadlines. - Zero Dependencies: Micro-sized footprint (<2KB) with full TypeScript types.
📦 Installation
npm install @omerdev/batch-queue
# or
pnpm add @omerdev/batch-queue
# or
bun add @omerdev/batch-queue💡 Quick Start
1. Basic Concurrency
import { BatchQueue } from "@omerdev/batch-queue";
const queue = new BatchQueue({ concurrency: 3 });
// Add tasks returning promises
const result = await queue.add(async () => {
const res = await fetch("https://api.example.com/data");
return res.json();
});
// Wait for all queued and running tasks to complete
await queue.onIdle();2. Rate Limiting & Priorities
const queue = new BatchQueue({
concurrency: 5,
rateLimit: { limit: 10, intervalMs: 1000 }, // Max 10 calls per second
retries: 2,
retryDelayMs: 200,
});
// High priority tasks jump ahead of regular tasks
queue.add(fetchCriticalUser, { priority: 100 });
queue.add(fetchBackgroundAvatar, { priority: 1 });3. Asynchronous Concurrent Mapping (mapConcurrent)
import { mapConcurrent } from "@omerdev/batch-queue";
const userIds = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const users = await mapConcurrent(
userIds,
async (id) => {
const res = await fetch(`/api/users/${id}`);
return res.json();
},
{ concurrency: 4 }
);👤 Author
omerdev
📄 License
MIT
