@mavenoid/dataloader
Utilities for caching, batching and deduping requests in GraphQL. Inspired by dataloader but extended using WeakMap to create a more convenient API for GraphQL

Installation
yarn add @mavenoid/dataloader
Usage
import {
getDataLoadersForContextType,
RequestsBatch,
} from '@mavenoid/dataloader';
const {batch, dedupe} = getDataLoadersForContextType<ResolverContextType>();
export const getUserDeduped = dedupe(
async (userID: number, resolverContext: ResolverContextType) => {
return await getUserUncached(userID);
},
);
const getUserBatched = batch(
async (req: RequestsBatch<number, User | null>) => {
const users = await db_users.find({id: anyOf([...req.keys()])}).all();
for (const user of users) {
const resolvers = req.get(user.id);
if (resolvers) {
resolvers.resolve(user);
}
}
return null;
},
{maxBatchSize: 100},
);