reqoal
v1.0.2
Published
A lightweight and efficient JavaScript library for request coalescing — merge concurrent identical async calls into a single request to reduce load and improve performance.
Maintainers
Readme

reqoal
A lightweight and efficient JavaScript/TypeScript library for request coalescing — merge concurrent identical async calls into a single request to reduce load and improve performance.
Features
- Coalesce concurrent or repeated calls for the same function and arguments
- Supports both async and sync functions
- Caches results for a configurable TTL
- Periodically prunes expired cache entries (automatic memory management)
- Manual cache invalidation and pruning
- Custom key generator for advanced cache strategies
- Concurrency limit per instance
- ESM & CJS compatible
- TypeScript-first, with full type safety
Installation
npm install reqoalUsage
Global Instance (Simple)
import { coalesce, isCoalesced, invalidate, clear, prune, setKeyGenerator } from 'reqoal';
// Async or sync function
async function fetchUser(id) {
/* ... */
}
function add(a, b) {
return a + b;
}
// Coalesce requests
const user = await coalesce(fetchUser, 123);
const sum = await coalesce(add, 1, 2); // works with sync too!
// Check if a request is in-flight or cached
const active = isCoalesced(fetchUser, 123);
// Invalidate cache for a specific call
invalidate(fetchUser, 123);
// Clear all cache and in-flight requests
clear();
// Manually prune expired cache entries (optional)
prune();
// Set a custom key generator (advanced)
setKeyGenerator((functionName, ...args) => `${functionName}:${args.join('-')}`);Custom Instance (Advanced)
import { ReqoalInstance } from 'reqoal';
const coalescer = new ReqoalInstance(
60000, // prune interval (ms)
1000, // TTL (ms)
console, // custom logger
5, // max concurrency
);
await coalescer.coalesce(fetchUser, 123);
coalescer.setKeyGenerator((functionName, ...args) => `${functionName}:${args.join('-')}`);API
Global Exports
coalesce(fn, ...args)— Coalesce and cache requestsisCoalesced(fn, ...args)— Check if a request is in-flight or cachedinvalidate(fn, ...args)— Invalidate cache for a specific callclear()— Clear all cache and in-flight requestsprune()— Manually prune expired cache entriessetKeyGenerator(fn)— Set a custom key generator
ReqoalInstance
new ReqoalInstance(intervalMs?, ttlMs?, consoler?, maxConcurrency?).coalesce(fn, ...args).isCoalesced(fn, ...args).invalidate(fn, ...args).clear().prune().setKeyGenerator(fn)
ESM & CJS Compatibility
- ESM:
import { coalesce } from 'reqoal' - CJS:
const { coalesce } = require('reqoal')
License
MIT
