
Company News
Free Business Plan Upgrades for Open Source Maintainers
Open source maintainers are under more pressure than ever. We're raising our open source program from the Team plan to the Business plan, free.
keyv-dataloader
Advanced tools
A DataLoader implementation with caching support using Keyv. Combines the batching capabilities of Facebook's DataLoader with the flexible caching of Keyv.
# Install the package (recommended)
pnpm add keyv-dataloader
pnpm add dataloader keyv
# Or with npm
npm install keyv-dataloader
npm install dataloader keyv
# Or with yarn
yarn add keyv-dataloader
yarn add dataloader keyv
import { KeyvDataLoader } from 'keyv-dataloader';
// Create a new loader with caching
const loader = new KeyvDataLoader({
// Function to batch load keys
batchLoadFn: async (keys) => {
console.log('Loading keys:', keys);
return keys.map((key) => `Value for ${key}`);
},
// Optional: Custom function to generate cache keys
cacheKeyFn: (key) => `custom-prefix:${key}`,
// Optional: TTL in milliseconds (how long to keep items in cache)
ttl: 60 * 1000, // 1 minute
// Optional: Keyv options (storage adapters, etc.)
keyvOptions: {
namespace: 'my-cache',
},
// Optional: DataLoader options
dataLoaderOptions: {
maxBatchSize: 100,
cache: true,
},
});
// Load a single value (returns a Promise)
const value = await loader.load('key1');
// Load multiple values (returns a Promise)
const values = await loader.loadMany(['key2', 'key3']);
// Prime the cache with a value (returns a Promise that resolves to the instance for chaining)
// If the key already exists, no change is made
await loader.prime('key4', 'Value for key4');
// Prime the cache with an error
await loader.prime('key5', new Error('This is an error'));
// Clear a value from cache (returns a Promise that resolves to the instance for chaining)
await loader.clear('key1');
// Clear all cached values (returns a Promise that resolves to the instance for chaining)
await loader.clearAll();
// Sequential calls for forcefully updating a cached value
await loader.clear('key1');
await loader.prime('key1', 'new value');
// Using Promise chaining
loader.clear('key1')
.then(loader => loader.prime('key1', 'new value'))
.then(loader => {
// Continue using the loader...
});
new KeyvDataLoader(options)Creates a new KeyvDataLoader instance.
batchLoadFn: Function to batch load multiple keyscacheKeyFn (optional): Function to generate cache key from the input keyttl (optional): TTL in milliseconds for cache entriesdataLoaderOptions (optional): DataLoader optionskeyvOptions (optional): Keyv optionsload(key): Loads a key, returns a Promise for the valueloadMany(keys): Loads multiple keys, returns a Promise for array of valuesprime(key, value): Prime the cache with a key-value pair. Returns a Promise that resolves to the instance for method chaining. If the key already exists, no change is made. To forcefully prime the cache, clear the key first with sequential calls: await loader.clear(key); await loader.prime(key, value);. To prime the cache with an error, provide an Error instance.clear(key): Clear a key from cache. Returns a Promise that resolves to the instance for method chaining.clearAll(): Clear all keys from cache. Returns a Promise that resolves to the instance for method chaining.All methods return Promises. The clear(), clearAll(), and prime() methods resolve to the instance for method chaining, while load() and loadMany() resolve to the loaded values.
By leveraging Keyv's batch operations (getMany, setMany), this implementation reduces the number of I/O operations required when working with multiple keys, resulting in better performance compared to individual operations, especially when using Redis.
The package includes a comprehensive test suite covering Redis storage adapter. See the tests README for detailed instructions on running tests.
# Run all tests
pnpm test
# Run Redis tests only
pnpm test:redis
# Run all tests with Docker (requires Docker and Docker Compose)
pnpm test:docker
# Run tests with coverage
pnpm test:coverage
This project uses changesets for version management and publishing.
# Add a new changeset
pnpm changeset
# Update versions and changelogs
pnpm version
# Publish to npm
pnpm release
MIT
FAQs
A DataLoader implementation with caching support using Keyv
We found that keyv-dataloader demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Open source maintainers are under more pressure than ever. We're raising our open source program from the Team plan to the Business plan, free.

Security News
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.

Security News
During a UK cyber test, a Mythos 5 agent used sockpuppets, social engineering, and prompt injection to try to get a maintainer to merge malware.