UNPKG

3.95 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
8
9var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
10
11var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
12
13var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
14
15var _promise = require('babel-runtime/core-js/promise');
16
17var _promise2 = _interopRequireDefault(_promise);
18
19exports.default = createLoaders;
20
21var _dataloader = require('dataloader');
22
23var _dataloader2 = _interopRequireDefault(_dataloader);
24
25var _lruCache = require('lru-cache');
26
27var _lruCache2 = _interopRequireDefault(_lruCache);
28
29var _helpers = require('./types/helpers');
30
31var _util = require('./util');
32
33function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
34
35var debug = require('debug')('graphbrainz:loaders');
36
37function createLoaders(client) {
38 // All loaders share a single LRU cache that will remember 8192 responses,
39 // each cached for 1 day.
40 var cache = (0, _lruCache2.default)({
41 max: parseInt(process.env.GRAPHBRAINZ_CACHE_SIZE || 8192, 10),
42 maxAge: parseInt(process.env.GRAPHBRAINZ_CACHE_TTL || _util.ONE_DAY, 10),
43 dispose: function dispose(key) {
44 debug('Removed from cache. key=' + key);
45 }
46 });
47 // Make the cache Map-like.
48 cache.delete = cache.del;
49 cache.clear = cache.reset;
50
51 var lookup = new _dataloader2.default(function (keys) {
52 return _promise2.default.all(keys.map(function (key) {
53 var _key = (0, _slicedToArray3.default)(key, 3),
54 entityType = _key[0],
55 id = _key[1],
56 _key$ = _key[2],
57 params = _key$ === undefined ? {} : _key$;
58
59 return client.lookup(entityType, id, params).then(function (entity) {
60 if (entity) {
61 // Store the entity type so we can determine what type of object this
62 // is elsewhere in the code.
63 entity._type = entityType;
64 }
65 return entity;
66 });
67 }));
68 }, {
69 cacheKeyFn: function cacheKeyFn(key) {
70 return client.getLookupURL.apply(client, (0, _toConsumableArray3.default)(key));
71 },
72 cacheMap: cache
73 });
74
75 var browse = new _dataloader2.default(function (keys) {
76 return _promise2.default.all(keys.map(function (key) {
77 var _key2 = (0, _slicedToArray3.default)(key, 2),
78 entityType = _key2[0],
79 _key2$ = _key2[1],
80 params = _key2$ === undefined ? {} : _key2$;
81
82 return client.browse(entityType, params).then(function (list) {
83 list[(0, _helpers.toPlural)(entityType)].forEach(function (entity) {
84 // Store the entity type so we can determine what type of object this
85 // is elsewhere in the code.
86 entity._type = entityType;
87 });
88 return list;
89 });
90 }));
91 }, {
92 cacheKeyFn: function cacheKeyFn(key) {
93 return client.getBrowseURL.apply(client, (0, _toConsumableArray3.default)(key));
94 },
95 cacheMap: cache
96 });
97
98 var search = new _dataloader2.default(function (keys) {
99 return _promise2.default.all(keys.map(function (key) {
100 var _key3 = (0, _slicedToArray3.default)(key, 3),
101 entityType = _key3[0],
102 query = _key3[1],
103 _key3$ = _key3[2],
104 params = _key3$ === undefined ? {} : _key3$;
105
106 return client.search(entityType, query, params).then(function (list) {
107 list[(0, _helpers.toPlural)(entityType)].forEach(function (entity) {
108 // Store the entity type so we can determine what type of object this
109 // is elsewhere in the code.
110 entity._type = entityType;
111 });
112 return list;
113 });
114 }));
115 }, {
116 cacheKeyFn: function cacheKeyFn(key) {
117 return client.getSearchURL.apply(client, (0, _toConsumableArray3.default)(key));
118 },
119 cacheMap: cache
120 });
121
122 return { lookup: lookup, browse: browse, search: search };
123}
\No newline at end of file