2017-10-19 08:00:21 +00:00
|
|
|
import DataLoader from 'dataloader'
|
|
|
|
|
import LRUCache from 'lru-cache'
|
|
|
|
|
|
|
|
|
|
const debug = require('debug')('graphbrainz:extensions/mediawiki')
|
|
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
export default function createLoader(options) {
|
2017-10-19 08:00:21 +00:00
|
|
|
const { client } = options
|
|
|
|
|
const cache = LRUCache({
|
|
|
|
|
max: options.cacheSize,
|
|
|
|
|
maxAge: options.cacheTTL,
|
2017-11-07 05:54:56 +00:00
|
|
|
dispose(key) {
|
2017-10-19 08:00:21 +00:00
|
|
|
debug(`Removed from cache. key=${key}`)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
// Make the cache Map-like.
|
|
|
|
|
cache.delete = cache.del
|
|
|
|
|
cache.clear = cache.reset
|
|
|
|
|
|
2017-11-07 05:54:56 +00:00
|
|
|
return new DataLoader(
|
|
|
|
|
keys => {
|
|
|
|
|
return Promise.all(keys.map(key => client.imageInfo(key)))
|
|
|
|
|
},
|
|
|
|
|
{ cacheMap: cache }
|
|
|
|
|
)
|
2017-10-19 08:00:21 +00:00
|
|
|
}
|