1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _promise = require('babel-runtime/core-js/promise');
|
8 |
|
9 | var _promise2 = _interopRequireDefault(_promise);
|
10 |
|
11 | var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
|
12 |
|
13 | var _defineProperty3 = _interopRequireDefault(_defineProperty2);
|
14 |
|
15 | var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
|
16 |
|
17 | var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
|
18 |
|
19 | var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
|
20 |
|
21 | var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
|
22 |
|
23 | var _extends3 = require('babel-runtime/helpers/extends');
|
24 |
|
25 | var _extends4 = _interopRequireDefault(_extends3);
|
26 |
|
27 | var _keys = require('babel-runtime/core-js/object/keys');
|
28 |
|
29 | var _keys2 = _interopRequireDefault(_keys);
|
30 |
|
31 | exports.includeRelationships = includeRelationships;
|
32 | exports.includeSubqueries = includeSubqueries;
|
33 | exports.resolveLookup = resolveLookup;
|
34 | exports.resolveBrowse = resolveBrowse;
|
35 | exports.resolveSearch = resolveSearch;
|
36 | exports.resolveRelationship = resolveRelationship;
|
37 | exports.resolveLinked = resolveLinked;
|
38 | exports.createSubqueryResolver = createSubqueryResolver;
|
39 | exports.resolveDiscReleases = resolveDiscReleases;
|
40 |
|
41 | var _helpers = require('./types/helpers');
|
42 |
|
43 | var _graphqlRelay = require('graphql-relay');
|
44 |
|
45 | var _util = require('./util');
|
46 |
|
47 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
48 |
|
49 | function includeRelationships(params, info) {
|
50 | var fragments = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : info.fragments;
|
51 |
|
52 | var fields = (0, _util.getFields)(info, fragments);
|
53 | if (info.fieldName !== 'relationships') {
|
54 | if (fields.relationships) {
|
55 | fields = (0, _util.getFields)(fields.relationships, fragments);
|
56 | } else {
|
57 | if (fields.edges) {
|
58 | fields = (0, _util.getFields)(fields.edges, fragments);
|
59 | if (fields.node) {
|
60 | return includeRelationships(params, fields.node, fragments);
|
61 | }
|
62 | }
|
63 | return params;
|
64 | }
|
65 | }
|
66 | if (fields) {
|
67 | var relationships = (0, _keys2.default)(fields);
|
68 | var includeRels = relationships.map(function (field) {
|
69 | return (0, _helpers.toDashed)((0, _helpers.toSingular)(field)) + '-rels';
|
70 | });
|
71 | if (includeRels.length) {
|
72 | params = (0, _extends4.default)({}, params, {
|
73 | inc: (0, _util.extendIncludes)(params.inc, includeRels)
|
74 | });
|
75 | }
|
76 | }
|
77 | return params;
|
78 | }
|
79 |
|
80 | function includeSubqueries(params, info) {
|
81 | var fragments = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : info.fragments;
|
82 |
|
83 | var subqueryIncludes = {
|
84 | aliases: ['aliases'],
|
85 | artistCredit: ['artist-credits'],
|
86 | artistCredits: ['artist-credits'],
|
87 | isrcs: ['isrcs'],
|
88 | media: ['media', 'discids'],
|
89 | rating: ['ratings'],
|
90 | tags: ['tags']
|
91 | };
|
92 | var fields = (0, _util.getFields)(info, fragments);
|
93 | var include = [];
|
94 | for (var key in subqueryIncludes) {
|
95 | if (fields[key]) {
|
96 | var value = subqueryIncludes[key];
|
97 | include.push.apply(include, (0, _toConsumableArray3.default)(value));
|
98 | }
|
99 | }
|
100 | params = (0, _extends4.default)({}, params, {
|
101 | inc: (0, _util.extendIncludes)(params.inc, include)
|
102 | });
|
103 | if (fields.edges) {
|
104 | fields = (0, _util.getFields)(fields.edges, fragments);
|
105 | if (fields.node) {
|
106 | params = includeSubqueries(params, fields.node, fragments);
|
107 | }
|
108 | }
|
109 | return params;
|
110 | }
|
111 |
|
112 | function resolveLookup(root, _ref, _ref2, info) {
|
113 | var mbid = _ref.mbid,
|
114 | params = (0, _objectWithoutProperties3.default)(_ref, ['mbid']);
|
115 | var loaders = _ref2.loaders;
|
116 |
|
117 | if (!mbid && !params.resource) {
|
118 | throw new Error('Lookups by a field other than MBID must provide: resource');
|
119 | }
|
120 | var entityType = (0, _helpers.toDashed)(info.fieldName);
|
121 | params = includeSubqueries(params, info);
|
122 | params = includeRelationships(params, info);
|
123 | return loaders.lookup.load([entityType, mbid, params]);
|
124 | }
|
125 |
|
126 | function resolveBrowse(root, _ref3, _ref4, info) {
|
127 | var first = _ref3.first,
|
128 | after = _ref3.after,
|
129 | _ref3$type = _ref3.type,
|
130 | type = _ref3$type === undefined ? [] : _ref3$type,
|
131 | _ref3$status = _ref3.status,
|
132 | status = _ref3$status === undefined ? [] : _ref3$status,
|
133 | discID = _ref3.discID,
|
134 | isrc = _ref3.isrc,
|
135 | iswc = _ref3.iswc,
|
136 | args = (0, _objectWithoutProperties3.default)(_ref3, ['first', 'after', 'type', 'status', 'discID', 'isrc', 'iswc']);
|
137 | var loaders = _ref4.loaders;
|
138 |
|
139 | var pluralName = (0, _helpers.toDashed)(info.fieldName);
|
140 | var singularName = (0, _helpers.toSingular)(pluralName);
|
141 | var params = (0, _extends4.default)({}, args, {
|
142 | type: type,
|
143 | status: status,
|
144 | limit: first,
|
145 | offset: (0, _graphqlRelay.getOffsetWithDefault)(after, -1) + 1 || undefined
|
146 | });
|
147 | params = includeSubqueries(params, info);
|
148 | params = includeRelationships(params, info, info.fragments);
|
149 | var formatParam = function formatParam(value) {
|
150 | return value.toLowerCase().replace(/ /g, '');
|
151 | };
|
152 | params.type = params.type.map(formatParam);
|
153 | params.status = params.status.map(formatParam);
|
154 | var request = void 0;
|
155 | if (discID) {
|
156 | request = loaders.lookup.load(['discid', discID, params]);
|
157 |
|
158 |
|
159 | if (params.inc) {
|
160 | params.inc = params.inc.filter(function (value) {
|
161 | return value !== 'media' && value !== 'discids';
|
162 | });
|
163 | }
|
164 | } else if (isrc) {
|
165 | request = loaders.lookup.load(['isrc', isrc, params]);
|
166 | } else if (iswc) {
|
167 | request = loaders.lookup.load(['iswc', iswc, params]);
|
168 | } else {
|
169 | request = loaders.browse.load([singularName, params]);
|
170 | }
|
171 | return request.then(function (list) {
|
172 |
|
173 |
|
174 | var arraySlice = list[pluralName],
|
175 | _list$ = list[singularName + '-offset'],
|
176 | sliceStart = _list$ === undefined ? 0 : _list$,
|
177 | _list$2 = list[singularName + '-count'],
|
178 | arrayLength = _list$2 === undefined ? arraySlice.length : _list$2;
|
179 |
|
180 | var meta = { sliceStart: sliceStart, arrayLength: arrayLength };
|
181 | var connection = (0, _graphqlRelay.connectionFromArraySlice)(arraySlice, { first: first, after: after }, meta);
|
182 | return (0, _extends4.default)({
|
183 | nodes: connection.edges.map(function (edge) {
|
184 | return edge.node;
|
185 | }),
|
186 | totalCount: arrayLength
|
187 | }, connection);
|
188 | });
|
189 | }
|
190 |
|
191 | function resolveSearch(root, _ref5, _ref6, info) {
|
192 | var after = _ref5.after,
|
193 | first = _ref5.first,
|
194 | query = _ref5.query,
|
195 | args = (0, _objectWithoutProperties3.default)(_ref5, ['after', 'first', 'query']);
|
196 | var loaders = _ref6.loaders;
|
197 |
|
198 | var pluralName = (0, _helpers.toDashed)(info.fieldName);
|
199 | var singularName = (0, _helpers.toSingular)(pluralName);
|
200 | var params = (0, _extends4.default)({}, args, {
|
201 | limit: first,
|
202 | offset: (0, _graphqlRelay.getOffsetWithDefault)(after, -1) + 1 || undefined
|
203 | });
|
204 | params = includeSubqueries(params, info);
|
205 | return loaders.search.load([singularName, query, params]).then(function (list) {
|
206 | var arraySlice = list[pluralName],
|
207 | sliceStart = list.offset,
|
208 | arrayLength = list.count;
|
209 |
|
210 | var meta = { sliceStart: sliceStart, arrayLength: arrayLength };
|
211 | var connection = (0, _graphqlRelay.connectionFromArraySlice)(arraySlice, { first: first, after: after }, meta);
|
212 |
|
213 |
|
214 | var edges = connection.edges.map(function (edge) {
|
215 | return (0, _extends4.default)({}, edge, { score: +edge.node.score });
|
216 | });
|
217 | var connectionWithExtras = (0, _extends4.default)({
|
218 | nodes: edges.map(function (edge) {
|
219 | return edge.node;
|
220 | }),
|
221 | totalCount: arrayLength
|
222 | }, connection, {
|
223 | edges: edges
|
224 | });
|
225 | return connectionWithExtras;
|
226 | });
|
227 | }
|
228 |
|
229 | function resolveRelationship(rels, args, context, info) {
|
230 | var targetType = (0, _helpers.toDashed)((0, _helpers.toSingular)(info.fieldName)).replace('-', '_');
|
231 | var matches = rels.filter(function (rel) {
|
232 | return rel['target-type'] === targetType;
|
233 | });
|
234 |
|
235 | if (args.direction != null) {
|
236 | matches = matches.filter(function (rel) {
|
237 | return rel.direction === args.direction;
|
238 | });
|
239 | }
|
240 | if (args.type != null) {
|
241 | matches = matches.filter(function (rel) {
|
242 | return rel.type === args.type;
|
243 | });
|
244 | }
|
245 | if (args.typeID != null) {
|
246 | matches = matches.filter(function (rel) {
|
247 | return rel['type-id'] === args.typeID;
|
248 | });
|
249 | }
|
250 | var connection = (0, _graphqlRelay.connectionFromArray)(matches, args);
|
251 | return (0, _extends4.default)({
|
252 | nodes: connection.edges.map(function (edge) {
|
253 | return edge.node;
|
254 | }),
|
255 | totalCount: matches.length
|
256 | }, connection);
|
257 | }
|
258 |
|
259 | function resolveLinked(entity, args, context, info) {
|
260 | var parentEntity = (0, _helpers.toDashed)(info.parentType.name);
|
261 | args = (0, _extends4.default)({}, args, (0, _defineProperty3.default)({}, parentEntity, entity.id));
|
262 | return resolveBrowse(entity, args, context, info);
|
263 | }
|
264 |
|
265 |
|
266 |
|
267 |
|
268 |
|
269 |
|
270 | function createSubqueryResolver() {
|
271 | var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
272 | inc = _ref7.inc,
|
273 | key = _ref7.key;
|
274 |
|
275 | var handler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (value) {
|
276 | return value;
|
277 | };
|
278 |
|
279 | return function (entity, args, _ref8, info) {
|
280 | var loaders = _ref8.loaders;
|
281 |
|
282 | key = key || (0, _helpers.toDashed)(info.fieldName);
|
283 | var promise = void 0;
|
284 | if (key in entity) {
|
285 | promise = _promise2.default.resolve(entity);
|
286 | } else {
|
287 | var entityType = entity._type,
|
288 | id = entity.id;
|
289 |
|
290 | var params = { inc: [inc || key] };
|
291 | promise = loaders.lookup.load([entityType, id, params]);
|
292 | }
|
293 | return promise.then(function (entity) {
|
294 | return handler(entity[key], args);
|
295 | });
|
296 | };
|
297 | }
|
298 |
|
299 | function resolveDiscReleases(disc, args, context, info) {
|
300 | var releases = disc.releases;
|
301 |
|
302 | if (releases != null) {
|
303 | var connection = (0, _graphqlRelay.connectionFromArray)(releases, args);
|
304 | return (0, _extends4.default)({
|
305 | nodes: connection.edges.map(function (edge) {
|
306 | return edge.node;
|
307 | }),
|
308 | totalCount: releases.length
|
309 | }, connection);
|
310 | }
|
311 | args = (0, _extends4.default)({}, args, { discID: disc.id });
|
312 | return resolveBrowse(disc, args, context, info);
|
313 | } |
\ | No newline at end of file |