1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _typeof2 = require('babel-runtime/helpers/typeof');
|
8 |
|
9 | var _typeof3 = _interopRequireDefault(_typeof2);
|
10 |
|
11 | exports.applyExtension = applyExtension;
|
12 | exports.createSchema = createSchema;
|
13 |
|
14 | var _graphql = require('graphql');
|
15 |
|
16 | var _graphqlTools = require('graphql-tools');
|
17 |
|
18 | var _queries = require('./queries');
|
19 |
|
20 | var _node = require('./types/node');
|
21 |
|
22 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
23 |
|
24 | var debug = require('debug')('graphbrainz:schema');
|
25 |
|
26 | function 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 |
|
56 | if (outputSchema._queryType.description === undefined) {
|
57 | outputSchema._queryType.description = schema._queryType.description;
|
58 | }
|
59 | return outputSchema;
|
60 | }
|
61 |
|
62 | function 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 |
|
71 | exports.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 |