UNPKG

2.99 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _typeof2 = require('babel-runtime/helpers/typeof');
8
9var _typeof3 = _interopRequireDefault(_typeof2);
10
11exports.applyExtension = applyExtension;
12exports.createSchema = createSchema;
13
14var _graphql = require('graphql');
15
16var _graphqlTools = require('graphql-tools');
17
18var _queries = require('./queries');
19
20var _node = require('./types/node');
21
22function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
24var debug = require('debug')('graphbrainz:schema');
25
26function applyExtension(extension, schema) {
27 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
28
29 var outputSchema = schema;
30 if (extension.extendSchema) {
31 if ((0, _typeof3.default)(extension.extendSchema) === 'object') {
32 debug('Extending schema via an object from the \u201C' + extension.name + '\u201D extension.');
33 var _extension$extendSche = extension.extendSchema,
34 _extension$extendSche2 = _extension$extendSche.schemas,
35 schemas = _extension$extendSche2 === undefined ? [] : _extension$extendSche2,
36 resolvers = _extension$extendSche.resolvers;
37
38 outputSchema = schemas.reduce(function (updatedSchema, extensionSchema) {
39 if (typeof extensionSchema === 'string') {
40 extensionSchema = (0, _graphql.parse)(extensionSchema);
41 }
42 return (0, _graphql.extendSchema)(updatedSchema, extensionSchema);
43 }, outputSchema);
44 if (resolvers) {
45 (0, _graphqlTools.addResolveFunctionsToSchema)(outputSchema, resolvers);
46 }
47 } else if (typeof extension.extendSchema === 'function') {
48 debug('Extending schema via a function from the \u201C' + extension.name + '\u201D extension.');
49 outputSchema = extension.extendSchema(schema, options);
50 } else {
51 throw new Error('The \u201C' + extension.name + '\u201D extension contains an invalid ' + ('`extendSchema` value: ' + extension.extendSchema));
52 }
53 }
54
55 // Fix for `graphql-tools` creating a new Query type with no description.
56 if (outputSchema._queryType.description === undefined) {
57 outputSchema._queryType.description = schema._queryType.description;
58 }
59 return outputSchema;
60}
61
62function createSchema(schema) {
63 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
64
65 var extensions = options.extensions || [];
66 return extensions.reduce(function (updatedSchema, extension) {
67 return applyExtension(extension, updatedSchema, options);
68 }, schema);
69}
70
71exports.default = new _graphql.GraphQLSchema({
72 query: new _graphql.GraphQLObjectType({
73 name: 'Query',
74 description: 'The query root, from which multiple types of MusicBrainz\nrequests can be made.',
75 fields: function fields() {
76 return {
77 lookup: _queries.lookup,
78 browse: _queries.browse,
79 search: _queries.search,
80 node: _node.nodeField
81 };
82 }
83 })
84});
\No newline at end of file