graphbrainz
Version:
A GraphQL schema, Express server, and middleware for querying the MusicBrainz.
31 lines (27 loc) • 776 B
JavaScript
import createDebug from 'debug';
import DataLoader from 'dataloader';
import LRUCache from 'lru-cache';
const debug = createDebug('graphbrainz:extensions/mediawiki');
export default function createLoader(options) {
const { client } = options;
const cache = new LRUCache({
max: options.cacheSize,
maxAge: options.cacheTTL,
dispose(key) {
debug(`Removed from cache. key=${key}`);
},
});
// Make the cache Map-like.
cache.delete = cache.del;
cache.clear = cache.reset;
return new DataLoader(
(keys) => {
return Promise.allSettled(
keys.map((key) => client.imageInfo(key))
).then((results) =>
results.map((result) => result.reason || result.value)
);
},
{ batch: false, cacheMap: cache }
);
}