@graphql-tools/schema 8.2.1-alpha-d8af46a9.0 → 8.2.1-alpha-8ae2f1b1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/es5/README.md +0 -6
- package/es5/addResolversToSchema.d.ts +0 -3
- package/es5/assertResolversPresent.d.ts +0 -3
- package/es5/chainResolvers.d.ts +0 -5
- package/es5/checkForResolveTypeResolver.d.ts +0 -3
- package/es5/extendResolversFromInterfaces.d.ts +0 -3
- package/es5/index.d.ts +0 -8
- package/es5/index.js +0 -546
- package/es5/index.mjs +0 -536
- package/es5/makeExecutableSchema.d.ts +0 -47
- package/es5/merge-schemas.d.ts +0 -16
- package/es5/package.json +0 -37
- package/es5/types.d.ts +0 -42
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@graphql-tools/schema",
|
|
3
|
-
"version": "8.2.1-alpha-
|
|
3
|
+
"version": "8.2.1-alpha-8ae2f1b1.0",
|
|
4
4
|
"description": "A set of utils for faster development of GraphQL tools",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"peerDependencies": {
|
|
7
7
|
"graphql": "^14.0.0 || ^15.0.0 || ^16.0.0"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@graphql-tools/merge": "8.1.
|
|
11
|
-
"@graphql-tools/utils": "
|
|
10
|
+
"@graphql-tools/merge": "8.1.3-alpha-8ae2f1b1.0",
|
|
11
|
+
"@graphql-tools/utils": "9.0.0-alpha-8ae2f1b1.0",
|
|
12
12
|
"tslib": "~2.3.0",
|
|
13
13
|
"value-or-promise": "1.0.10"
|
|
14
14
|
},
|
package/es5/README.md
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { GraphQLSchema } from 'graphql';
|
|
2
|
-
import { IResolvers, IResolverValidationOptions, IAddResolversToSchemaOptions } from '@graphql-tools/utils';
|
|
3
|
-
export declare function addResolversToSchema(schemaOrOptions: GraphQLSchema | IAddResolversToSchemaOptions, legacyInputResolvers?: IResolvers, legacyInputValidationOptions?: IResolverValidationOptions): GraphQLSchema;
|
package/es5/chainResolvers.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { GraphQLResolveInfo, GraphQLFieldResolver } from 'graphql';
|
|
2
|
-
import { Maybe } from '@graphql-tools/utils';
|
|
3
|
-
export declare function chainResolvers<TArgs extends {
|
|
4
|
-
[argName: string]: any;
|
|
5
|
-
}>(resolvers: Array<Maybe<GraphQLFieldResolver<any, any, TArgs>>>): (root: any, args: TArgs, ctx: any, info: GraphQLResolveInfo) => any;
|
package/es5/index.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export { assertResolversPresent } from './assertResolversPresent';
|
|
2
|
-
export { chainResolvers } from './chainResolvers';
|
|
3
|
-
export { addResolversToSchema } from './addResolversToSchema';
|
|
4
|
-
export { checkForResolveTypeResolver } from './checkForResolveTypeResolver';
|
|
5
|
-
export { extendResolversFromInterfaces } from './extendResolversFromInterfaces';
|
|
6
|
-
export * from './makeExecutableSchema';
|
|
7
|
-
export * from './types';
|
|
8
|
-
export * from './merge-schemas';
|
package/es5/index.js
DELETED
|
@@ -1,546 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
const graphql = require('graphql');
|
|
6
|
-
const utils = require('@graphql-tools/utils/es5');
|
|
7
|
-
const tslib = require('tslib');
|
|
8
|
-
const merge = require('@graphql-tools/merge/es5');
|
|
9
|
-
|
|
10
|
-
function assertResolversPresent(schema, resolverValidationOptions) {
|
|
11
|
-
if (resolverValidationOptions === void 0) { resolverValidationOptions = {}; }
|
|
12
|
-
var requireResolversForArgs = resolverValidationOptions.requireResolversForArgs, requireResolversForNonScalar = resolverValidationOptions.requireResolversForNonScalar, requireResolversForAllFields = resolverValidationOptions.requireResolversForAllFields;
|
|
13
|
-
if (requireResolversForAllFields && (requireResolversForArgs || requireResolversForNonScalar)) {
|
|
14
|
-
throw new TypeError('requireResolversForAllFields takes precedence over the more specific assertions. ' +
|
|
15
|
-
'Please configure either requireResolversForAllFields or requireResolversForArgs / ' +
|
|
16
|
-
'requireResolversForNonScalar, but not a combination of them.');
|
|
17
|
-
}
|
|
18
|
-
utils.forEachField(schema, function (field, typeName, fieldName) {
|
|
19
|
-
// requires a resolver for *every* field.
|
|
20
|
-
if (requireResolversForAllFields) {
|
|
21
|
-
expectResolver('requireResolversForAllFields', requireResolversForAllFields, field, typeName, fieldName);
|
|
22
|
-
}
|
|
23
|
-
// requires a resolver on every field that has arguments
|
|
24
|
-
if (requireResolversForArgs && field.args.length > 0) {
|
|
25
|
-
expectResolver('requireResolversForArgs', requireResolversForArgs, field, typeName, fieldName);
|
|
26
|
-
}
|
|
27
|
-
// requires a resolver on every field that returns a non-scalar type
|
|
28
|
-
if (requireResolversForNonScalar !== 'ignore' && !graphql.isScalarType(graphql.getNamedType(field.type))) {
|
|
29
|
-
expectResolver('requireResolversForNonScalar', requireResolversForNonScalar, field, typeName, fieldName);
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
function expectResolver(validator, behavior, field, typeName, fieldName) {
|
|
34
|
-
if (!field.resolve) {
|
|
35
|
-
var message = "Resolver missing for \"" + typeName + "." + fieldName + "\".\nTo disable this validator, use:\n resolverValidationOptions: {\n " + validator + ": 'ignore'\n }";
|
|
36
|
-
if (behavior === 'error') {
|
|
37
|
-
throw new Error(message);
|
|
38
|
-
}
|
|
39
|
-
if (behavior === 'warn') {
|
|
40
|
-
// eslint-disable-next-line no-console
|
|
41
|
-
console.warn(message);
|
|
42
|
-
}
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
if (typeof field.resolve !== 'function') {
|
|
46
|
-
throw new Error("Resolver \"" + typeName + "." + fieldName + "\" must be a function");
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function chainResolvers(resolvers) {
|
|
51
|
-
return function (root, args, ctx, info) {
|
|
52
|
-
return resolvers.reduce(function (prev, curResolver) {
|
|
53
|
-
if (curResolver != null) {
|
|
54
|
-
return curResolver(prev, args, ctx, info);
|
|
55
|
-
}
|
|
56
|
-
return graphql.defaultFieldResolver(prev, args, ctx, info);
|
|
57
|
-
}, root);
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// If we have any union or interface types throw if no there is no resolveType resolver
|
|
62
|
-
function checkForResolveTypeResolver(schema, requireResolversForResolveType) {
|
|
63
|
-
var _a;
|
|
64
|
-
utils.mapSchema(schema, (_a = {},
|
|
65
|
-
_a[utils.MapperKind.ABSTRACT_TYPE] = function (type) {
|
|
66
|
-
if (!type.resolveType) {
|
|
67
|
-
var message = "Type \"" + type.name + "\" is missing a \"__resolveType\" resolver. Pass 'ignore' into " +
|
|
68
|
-
'"resolverValidationOptions.requireResolversForResolveType" to disable this error.';
|
|
69
|
-
if (requireResolversForResolveType === 'error') {
|
|
70
|
-
throw new Error(message);
|
|
71
|
-
}
|
|
72
|
-
if (requireResolversForResolveType === 'warn') {
|
|
73
|
-
// eslint-disable-next-line no-console
|
|
74
|
-
console.warn(message);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return undefined;
|
|
78
|
-
},
|
|
79
|
-
_a));
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
function extendResolversFromInterfaces(schema, resolvers) {
|
|
83
|
-
var e_1, _a;
|
|
84
|
-
var extendedResolvers = {};
|
|
85
|
-
var typeMap = schema.getTypeMap();
|
|
86
|
-
for (var typeName in typeMap) {
|
|
87
|
-
var type = typeMap[typeName];
|
|
88
|
-
if ('getInterfaces' in type) {
|
|
89
|
-
extendedResolvers[typeName] = {};
|
|
90
|
-
try {
|
|
91
|
-
for (var _b = (e_1 = void 0, tslib.__values(type.getInterfaces())), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
92
|
-
var iFace = _c.value;
|
|
93
|
-
if (resolvers[iFace.name]) {
|
|
94
|
-
for (var fieldName in resolvers[iFace.name]) {
|
|
95
|
-
if (fieldName === '__isTypeOf' || !fieldName.startsWith('__')) {
|
|
96
|
-
extendedResolvers[typeName][fieldName] = resolvers[iFace.name][fieldName];
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
103
|
-
finally {
|
|
104
|
-
try {
|
|
105
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
106
|
-
}
|
|
107
|
-
finally { if (e_1) throw e_1.error; }
|
|
108
|
-
}
|
|
109
|
-
var typeResolvers = resolvers[typeName];
|
|
110
|
-
extendedResolvers[typeName] = tslib.__assign(tslib.__assign({}, extendedResolvers[typeName]), typeResolvers);
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
var typeResolvers = resolvers[typeName];
|
|
114
|
-
if (typeResolvers != null) {
|
|
115
|
-
extendedResolvers[typeName] = typeResolvers;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return extendedResolvers;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
function addResolversToSchema(schemaOrOptions, legacyInputResolvers, legacyInputValidationOptions) {
|
|
123
|
-
var options = graphql.isSchema(schemaOrOptions)
|
|
124
|
-
? {
|
|
125
|
-
schema: schemaOrOptions,
|
|
126
|
-
resolvers: legacyInputResolvers !== null && legacyInputResolvers !== void 0 ? legacyInputResolvers : {},
|
|
127
|
-
resolverValidationOptions: legacyInputValidationOptions,
|
|
128
|
-
}
|
|
129
|
-
: schemaOrOptions;
|
|
130
|
-
var schema = options.schema, inputResolvers = options.resolvers, defaultFieldResolver = options.defaultFieldResolver, _a = options.resolverValidationOptions, resolverValidationOptions = _a === void 0 ? {} : _a, _b = options.inheritResolversFromInterfaces, inheritResolversFromInterfaces = _b === void 0 ? false : _b, _c = options.updateResolversInPlace, updateResolversInPlace = _c === void 0 ? false : _c;
|
|
131
|
-
var _d = resolverValidationOptions.requireResolversToMatchSchema, requireResolversToMatchSchema = _d === void 0 ? 'error' : _d, requireResolversForResolveType = resolverValidationOptions.requireResolversForResolveType;
|
|
132
|
-
var resolvers = inheritResolversFromInterfaces
|
|
133
|
-
? extendResolversFromInterfaces(schema, inputResolvers)
|
|
134
|
-
: inputResolvers;
|
|
135
|
-
for (var typeName in resolvers) {
|
|
136
|
-
var resolverValue = resolvers[typeName];
|
|
137
|
-
var resolverType = typeof resolverValue;
|
|
138
|
-
if (resolverType !== 'object') {
|
|
139
|
-
throw new Error("\"" + typeName + "\" defined in resolvers, but has invalid value \"" + resolverValue + "\". The resolver's value must be of type object.");
|
|
140
|
-
}
|
|
141
|
-
var type = schema.getType(typeName);
|
|
142
|
-
if (type == null) {
|
|
143
|
-
if (requireResolversToMatchSchema === 'ignore') {
|
|
144
|
-
break;
|
|
145
|
-
}
|
|
146
|
-
throw new Error("\"" + typeName + "\" defined in resolvers, but not in schema");
|
|
147
|
-
}
|
|
148
|
-
else if (graphql.isSpecifiedScalarType(type)) {
|
|
149
|
-
// allow -- without recommending -- overriding of specified scalar types
|
|
150
|
-
for (var fieldName in resolverValue) {
|
|
151
|
-
if (fieldName.startsWith('__')) {
|
|
152
|
-
type[fieldName.substring(2)] = resolverValue[fieldName];
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
type[fieldName] = resolverValue[fieldName];
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
else if (graphql.isEnumType(type)) {
|
|
160
|
-
var values = type.getValues();
|
|
161
|
-
var _loop_1 = function (fieldName) {
|
|
162
|
-
if (!fieldName.startsWith('__') &&
|
|
163
|
-
!values.some(function (value) { return value.name === fieldName; }) &&
|
|
164
|
-
requireResolversToMatchSchema &&
|
|
165
|
-
requireResolversToMatchSchema !== 'ignore') {
|
|
166
|
-
throw new Error(type.name + "." + fieldName + " was defined in resolvers, but not present within " + type.name);
|
|
167
|
-
}
|
|
168
|
-
};
|
|
169
|
-
for (var fieldName in resolverValue) {
|
|
170
|
-
_loop_1(fieldName);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
else if (graphql.isUnionType(type)) {
|
|
174
|
-
for (var fieldName in resolverValue) {
|
|
175
|
-
if (!fieldName.startsWith('__') &&
|
|
176
|
-
requireResolversToMatchSchema &&
|
|
177
|
-
requireResolversToMatchSchema !== 'ignore') {
|
|
178
|
-
throw new Error(type.name + "." + fieldName + " was defined in resolvers, but " + type.name + " is not an object or interface type");
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
else if (graphql.isObjectType(type) || graphql.isInterfaceType(type)) {
|
|
183
|
-
for (var fieldName in resolverValue) {
|
|
184
|
-
if (!fieldName.startsWith('__')) {
|
|
185
|
-
var fields = type.getFields();
|
|
186
|
-
var field = fields[fieldName];
|
|
187
|
-
if (field == null) {
|
|
188
|
-
// Field present in resolver but not in schema
|
|
189
|
-
if (requireResolversToMatchSchema && requireResolversToMatchSchema !== 'ignore') {
|
|
190
|
-
throw new Error(typeName + "." + fieldName + " defined in resolvers, but not in schema");
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
else {
|
|
194
|
-
// Field present in both the resolver and schema
|
|
195
|
-
var fieldResolve = resolverValue[fieldName];
|
|
196
|
-
if (typeof fieldResolve !== 'function' && typeof fieldResolve !== 'object') {
|
|
197
|
-
throw new Error("Resolver " + typeName + "." + fieldName + " must be object or function");
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
schema = updateResolversInPlace
|
|
205
|
-
? addResolversToExistingSchema(schema, resolvers, defaultFieldResolver)
|
|
206
|
-
: createNewSchemaWithResolvers(schema, resolvers, defaultFieldResolver);
|
|
207
|
-
if (requireResolversForResolveType && requireResolversForResolveType !== 'ignore') {
|
|
208
|
-
checkForResolveTypeResolver(schema, requireResolversForResolveType);
|
|
209
|
-
}
|
|
210
|
-
return schema;
|
|
211
|
-
}
|
|
212
|
-
function addResolversToExistingSchema(schema, resolvers, defaultFieldResolver) {
|
|
213
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
|
214
|
-
var typeMap = schema.getTypeMap();
|
|
215
|
-
for (var typeName in resolvers) {
|
|
216
|
-
var type = schema.getType(typeName);
|
|
217
|
-
var resolverValue = resolvers[typeName];
|
|
218
|
-
if (graphql.isScalarType(type)) {
|
|
219
|
-
for (var fieldName in resolverValue) {
|
|
220
|
-
if (fieldName.startsWith('__')) {
|
|
221
|
-
type[fieldName.substring(2)] = resolverValue[fieldName];
|
|
222
|
-
}
|
|
223
|
-
else if (fieldName === 'astNode' && type.astNode != null) {
|
|
224
|
-
type.astNode = tslib.__assign(tslib.__assign({}, type.astNode), { description: (_c = (_b = (_a = resolverValue) === null || _a === void 0 ? void 0 : _a.astNode) === null || _b === void 0 ? void 0 : _b.description) !== null && _c !== void 0 ? _c : type.astNode.description, directives: ((_d = type.astNode.directives) !== null && _d !== void 0 ? _d : []).concat((_g = (_f = (_e = resolverValue) === null || _e === void 0 ? void 0 : _e.astNode) === null || _f === void 0 ? void 0 : _f.directives) !== null && _g !== void 0 ? _g : []) });
|
|
225
|
-
}
|
|
226
|
-
else if (fieldName === 'extensionASTNodes' && type.extensionASTNodes != null) {
|
|
227
|
-
type.extensionASTNodes = type.extensionASTNodes.concat((_j = (_h = resolverValue) === null || _h === void 0 ? void 0 : _h.extensionASTNodes) !== null && _j !== void 0 ? _j : []);
|
|
228
|
-
}
|
|
229
|
-
else if (fieldName === 'extensions' &&
|
|
230
|
-
type.extensions != null &&
|
|
231
|
-
resolverValue.extensions != null) {
|
|
232
|
-
type.extensions = Object.assign(Object.create(null), type.extensions, resolverValue.extensions);
|
|
233
|
-
}
|
|
234
|
-
else {
|
|
235
|
-
type[fieldName] = resolverValue[fieldName];
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
else if (graphql.isEnumType(type)) {
|
|
240
|
-
var config = type.toConfig();
|
|
241
|
-
var enumValueConfigMap = config.values;
|
|
242
|
-
for (var fieldName in resolverValue) {
|
|
243
|
-
if (fieldName.startsWith('__')) {
|
|
244
|
-
config[fieldName.substring(2)] = resolverValue[fieldName];
|
|
245
|
-
}
|
|
246
|
-
else if (fieldName === 'astNode' && config.astNode != null) {
|
|
247
|
-
config.astNode = tslib.__assign(tslib.__assign({}, config.astNode), { description: (_m = (_l = (_k = resolverValue) === null || _k === void 0 ? void 0 : _k.astNode) === null || _l === void 0 ? void 0 : _l.description) !== null && _m !== void 0 ? _m : config.astNode.description, directives: ((_o = config.astNode.directives) !== null && _o !== void 0 ? _o : []).concat((_r = (_q = (_p = resolverValue) === null || _p === void 0 ? void 0 : _p.astNode) === null || _q === void 0 ? void 0 : _q.directives) !== null && _r !== void 0 ? _r : []) });
|
|
248
|
-
}
|
|
249
|
-
else if (fieldName === 'extensionASTNodes' && config.extensionASTNodes != null) {
|
|
250
|
-
config.extensionASTNodes = config.extensionASTNodes.concat((_t = (_s = resolverValue) === null || _s === void 0 ? void 0 : _s.extensionASTNodes) !== null && _t !== void 0 ? _t : []);
|
|
251
|
-
}
|
|
252
|
-
else if (fieldName === 'extensions' &&
|
|
253
|
-
type.extensions != null &&
|
|
254
|
-
resolverValue.extensions != null) {
|
|
255
|
-
type.extensions = Object.assign(Object.create(null), type.extensions, resolverValue.extensions);
|
|
256
|
-
}
|
|
257
|
-
else if (enumValueConfigMap[fieldName]) {
|
|
258
|
-
enumValueConfigMap[fieldName].value = resolverValue[fieldName];
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
typeMap[typeName] = new graphql.GraphQLEnumType(config);
|
|
262
|
-
}
|
|
263
|
-
else if (graphql.isUnionType(type)) {
|
|
264
|
-
for (var fieldName in resolverValue) {
|
|
265
|
-
if (fieldName.startsWith('__')) {
|
|
266
|
-
type[fieldName.substring(2)] = resolverValue[fieldName];
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
else if (graphql.isObjectType(type) || graphql.isInterfaceType(type)) {
|
|
271
|
-
for (var fieldName in resolverValue) {
|
|
272
|
-
if (fieldName.startsWith('__')) {
|
|
273
|
-
// this is for isTypeOf and resolveType and all the other stuff.
|
|
274
|
-
type[fieldName.substring(2)] = resolverValue[fieldName];
|
|
275
|
-
break;
|
|
276
|
-
}
|
|
277
|
-
var fields = type.getFields();
|
|
278
|
-
var field = fields[fieldName];
|
|
279
|
-
if (field != null) {
|
|
280
|
-
var fieldResolve = resolverValue[fieldName];
|
|
281
|
-
if (typeof fieldResolve === 'function') {
|
|
282
|
-
// for convenience. Allows shorter syntax in resolver definition file
|
|
283
|
-
field.resolve = fieldResolve.bind(resolverValue);
|
|
284
|
-
}
|
|
285
|
-
else {
|
|
286
|
-
setFieldProperties(field, fieldResolve);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
// serialize all default values prior to healing fields with new scalar/enum types.
|
|
293
|
-
utils.forEachDefaultValue(schema, utils.serializeInputValue);
|
|
294
|
-
// schema may have new scalar/enum types that require healing
|
|
295
|
-
utils.healSchema(schema);
|
|
296
|
-
// reparse all default values with new parsing functions.
|
|
297
|
-
utils.forEachDefaultValue(schema, utils.parseInputValue);
|
|
298
|
-
if (defaultFieldResolver != null) {
|
|
299
|
-
utils.forEachField(schema, function (field) {
|
|
300
|
-
if (!field.resolve) {
|
|
301
|
-
field.resolve = defaultFieldResolver;
|
|
302
|
-
}
|
|
303
|
-
});
|
|
304
|
-
}
|
|
305
|
-
return schema;
|
|
306
|
-
}
|
|
307
|
-
function createNewSchemaWithResolvers(schema, resolvers, defaultFieldResolver) {
|
|
308
|
-
var _a, _b;
|
|
309
|
-
schema = utils.mapSchema(schema, (_a = {},
|
|
310
|
-
_a[utils.MapperKind.SCALAR_TYPE] = function (type) {
|
|
311
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
312
|
-
var config = type.toConfig();
|
|
313
|
-
var resolverValue = resolvers[type.name];
|
|
314
|
-
if (!graphql.isSpecifiedScalarType(type) && resolverValue != null) {
|
|
315
|
-
for (var fieldName in resolverValue) {
|
|
316
|
-
if (fieldName.startsWith('__')) {
|
|
317
|
-
config[fieldName.substring(2)] = resolverValue[fieldName];
|
|
318
|
-
}
|
|
319
|
-
else if (fieldName === 'astNode' && config.astNode != null) {
|
|
320
|
-
config.astNode = tslib.__assign(tslib.__assign({}, config.astNode), { description: (_c = (_b = (_a = resolverValue) === null || _a === void 0 ? void 0 : _a.astNode) === null || _b === void 0 ? void 0 : _b.description) !== null && _c !== void 0 ? _c : config.astNode.description, directives: ((_d = config.astNode.directives) !== null && _d !== void 0 ? _d : []).concat((_g = (_f = (_e = resolverValue) === null || _e === void 0 ? void 0 : _e.astNode) === null || _f === void 0 ? void 0 : _f.directives) !== null && _g !== void 0 ? _g : []) });
|
|
321
|
-
}
|
|
322
|
-
else if (fieldName === 'extensionASTNodes' && config.extensionASTNodes != null) {
|
|
323
|
-
config.extensionASTNodes = config.extensionASTNodes.concat((_j = (_h = resolverValue) === null || _h === void 0 ? void 0 : _h.extensionASTNodes) !== null && _j !== void 0 ? _j : []);
|
|
324
|
-
}
|
|
325
|
-
else if (fieldName === 'extensions' &&
|
|
326
|
-
config.extensions != null &&
|
|
327
|
-
resolverValue.extensions != null) {
|
|
328
|
-
config.extensions = Object.assign(Object.create(null), type.extensions, resolverValue.extensions);
|
|
329
|
-
}
|
|
330
|
-
else {
|
|
331
|
-
config[fieldName] = resolverValue[fieldName];
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
return new graphql.GraphQLScalarType(config);
|
|
335
|
-
}
|
|
336
|
-
},
|
|
337
|
-
_a[utils.MapperKind.ENUM_TYPE] = function (type) {
|
|
338
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
339
|
-
var resolverValue = resolvers[type.name];
|
|
340
|
-
var config = type.toConfig();
|
|
341
|
-
var enumValueConfigMap = config.values;
|
|
342
|
-
if (resolverValue != null) {
|
|
343
|
-
for (var fieldName in resolverValue) {
|
|
344
|
-
if (fieldName.startsWith('__')) {
|
|
345
|
-
config[fieldName.substring(2)] = resolverValue[fieldName];
|
|
346
|
-
}
|
|
347
|
-
else if (fieldName === 'astNode' && config.astNode != null) {
|
|
348
|
-
config.astNode = tslib.__assign(tslib.__assign({}, config.astNode), { description: (_c = (_b = (_a = resolverValue) === null || _a === void 0 ? void 0 : _a.astNode) === null || _b === void 0 ? void 0 : _b.description) !== null && _c !== void 0 ? _c : config.astNode.description, directives: ((_d = config.astNode.directives) !== null && _d !== void 0 ? _d : []).concat((_g = (_f = (_e = resolverValue) === null || _e === void 0 ? void 0 : _e.astNode) === null || _f === void 0 ? void 0 : _f.directives) !== null && _g !== void 0 ? _g : []) });
|
|
349
|
-
}
|
|
350
|
-
else if (fieldName === 'extensionASTNodes' && config.extensionASTNodes != null) {
|
|
351
|
-
config.extensionASTNodes = config.extensionASTNodes.concat((_j = (_h = resolverValue) === null || _h === void 0 ? void 0 : _h.extensionASTNodes) !== null && _j !== void 0 ? _j : []);
|
|
352
|
-
}
|
|
353
|
-
else if (fieldName === 'extensions' &&
|
|
354
|
-
config.extensions != null &&
|
|
355
|
-
resolverValue.extensions != null) {
|
|
356
|
-
config.extensions = Object.assign(Object.create(null), type.extensions, resolverValue.extensions);
|
|
357
|
-
}
|
|
358
|
-
else if (enumValueConfigMap[fieldName]) {
|
|
359
|
-
enumValueConfigMap[fieldName].value = resolverValue[fieldName];
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
return new graphql.GraphQLEnumType(config);
|
|
363
|
-
}
|
|
364
|
-
},
|
|
365
|
-
_a[utils.MapperKind.UNION_TYPE] = function (type) {
|
|
366
|
-
var resolverValue = resolvers[type.name];
|
|
367
|
-
if (resolverValue != null) {
|
|
368
|
-
var config = type.toConfig();
|
|
369
|
-
if (resolverValue['__resolveType']) {
|
|
370
|
-
config.resolveType = resolverValue['__resolveType'];
|
|
371
|
-
}
|
|
372
|
-
return new graphql.GraphQLUnionType(config);
|
|
373
|
-
}
|
|
374
|
-
},
|
|
375
|
-
_a[utils.MapperKind.OBJECT_TYPE] = function (type) {
|
|
376
|
-
var resolverValue = resolvers[type.name];
|
|
377
|
-
if (resolverValue != null) {
|
|
378
|
-
var config = type.toConfig();
|
|
379
|
-
if (resolverValue['__isTypeOf']) {
|
|
380
|
-
config.isTypeOf = resolverValue['__isTypeOf'];
|
|
381
|
-
}
|
|
382
|
-
return new graphql.GraphQLObjectType(config);
|
|
383
|
-
}
|
|
384
|
-
},
|
|
385
|
-
_a[utils.MapperKind.INTERFACE_TYPE] = function (type) {
|
|
386
|
-
var resolverValue = resolvers[type.name];
|
|
387
|
-
if (resolverValue != null) {
|
|
388
|
-
var config = type.toConfig();
|
|
389
|
-
if (resolverValue['__resolveType']) {
|
|
390
|
-
config.resolveType = resolverValue['__resolveType'];
|
|
391
|
-
}
|
|
392
|
-
return new graphql.GraphQLInterfaceType(config);
|
|
393
|
-
}
|
|
394
|
-
},
|
|
395
|
-
_a[utils.MapperKind.COMPOSITE_FIELD] = function (fieldConfig, fieldName, typeName) {
|
|
396
|
-
var resolverValue = resolvers[typeName];
|
|
397
|
-
if (resolverValue != null) {
|
|
398
|
-
var fieldResolve = resolverValue[fieldName];
|
|
399
|
-
if (fieldResolve != null) {
|
|
400
|
-
var newFieldConfig = tslib.__assign({}, fieldConfig);
|
|
401
|
-
if (typeof fieldResolve === 'function') {
|
|
402
|
-
// for convenience. Allows shorter syntax in resolver definition file
|
|
403
|
-
newFieldConfig.resolve = fieldResolve.bind(resolverValue);
|
|
404
|
-
}
|
|
405
|
-
else {
|
|
406
|
-
setFieldProperties(newFieldConfig, fieldResolve);
|
|
407
|
-
}
|
|
408
|
-
return newFieldConfig;
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
},
|
|
412
|
-
_a));
|
|
413
|
-
if (defaultFieldResolver != null) {
|
|
414
|
-
schema = utils.mapSchema(schema, (_b = {},
|
|
415
|
-
_b[utils.MapperKind.OBJECT_FIELD] = function (fieldConfig) { return (tslib.__assign(tslib.__assign({}, fieldConfig), { resolve: fieldConfig.resolve != null ? fieldConfig.resolve : defaultFieldResolver })); },
|
|
416
|
-
_b));
|
|
417
|
-
}
|
|
418
|
-
return schema;
|
|
419
|
-
}
|
|
420
|
-
function setFieldProperties(field, propertiesObj) {
|
|
421
|
-
for (var propertyName in propertiesObj) {
|
|
422
|
-
field[propertyName] = propertiesObj[propertyName];
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
/**
|
|
427
|
-
* Builds a schema from the provided type definitions and resolvers.
|
|
428
|
-
*
|
|
429
|
-
* The type definitions are written using Schema Definition Language (SDL). They
|
|
430
|
-
* can be provided as a string, a `DocumentNode`, a function, or an array of any
|
|
431
|
-
* of these. If a function is provided, it will be passed no arguments and
|
|
432
|
-
* should return an array of strings or `DocumentNode`s.
|
|
433
|
-
*
|
|
434
|
-
* Note: You can use `graphql-tag` to not only parse a string into a
|
|
435
|
-
* `DocumentNode` but also to provide additional syntax highlighting in your
|
|
436
|
-
* editor (with the appropriate editor plugin).
|
|
437
|
-
*
|
|
438
|
-
* ```js
|
|
439
|
-
* const typeDefs = gql`
|
|
440
|
-
* type Query {
|
|
441
|
-
* posts: [Post]
|
|
442
|
-
* author(id: Int!): Author
|
|
443
|
-
* }
|
|
444
|
-
* `;
|
|
445
|
-
* ```
|
|
446
|
-
*
|
|
447
|
-
* The `resolvers` object should be a map of type names to nested object, which
|
|
448
|
-
* themselves map the type's fields to their appropriate resolvers.
|
|
449
|
-
* See the [Resolvers](/docs/resolvers) section of the documentation for more details.
|
|
450
|
-
*
|
|
451
|
-
* ```js
|
|
452
|
-
* const resolvers = {
|
|
453
|
-
* Query: {
|
|
454
|
-
* posts: (obj, args, ctx, info) => getAllPosts(),
|
|
455
|
-
* author: (obj, args, ctx, info) => getAuthorById(args.id)
|
|
456
|
-
* }
|
|
457
|
-
* };
|
|
458
|
-
* ```
|
|
459
|
-
*
|
|
460
|
-
* Once you've defined both the `typeDefs` and `resolvers`, you can create your
|
|
461
|
-
* schema:
|
|
462
|
-
*
|
|
463
|
-
* ```js
|
|
464
|
-
* const schema = makeExecutableSchema({
|
|
465
|
-
* typeDefs,
|
|
466
|
-
* resolvers,
|
|
467
|
-
* })
|
|
468
|
-
* ```
|
|
469
|
-
*/
|
|
470
|
-
function makeExecutableSchema(_a) {
|
|
471
|
-
var typeDefs = _a.typeDefs, _b = _a.resolvers, resolvers = _b === void 0 ? {} : _b, _c = _a.resolverValidationOptions, resolverValidationOptions = _c === void 0 ? {} : _c, _d = _a.parseOptions, parseOptions = _d === void 0 ? {} : _d, _e = _a.inheritResolversFromInterfaces, inheritResolversFromInterfaces = _e === void 0 ? false : _e, pruningOptions = _a.pruningOptions, _f = _a.updateResolversInPlace, updateResolversInPlace = _f === void 0 ? false : _f, schemaExtensions = _a.schemaExtensions;
|
|
472
|
-
// Validate and clean up arguments
|
|
473
|
-
if (typeof resolverValidationOptions !== 'object') {
|
|
474
|
-
throw new Error('Expected `resolverValidationOptions` to be an object');
|
|
475
|
-
}
|
|
476
|
-
if (!typeDefs) {
|
|
477
|
-
throw new Error('Must provide typeDefs');
|
|
478
|
-
}
|
|
479
|
-
var schema;
|
|
480
|
-
if (graphql.isSchema(typeDefs)) {
|
|
481
|
-
schema = typeDefs;
|
|
482
|
-
}
|
|
483
|
-
else if (parseOptions === null || parseOptions === void 0 ? void 0 : parseOptions.commentDescriptions) {
|
|
484
|
-
var mergedTypeDefs = merge.mergeTypeDefs(typeDefs, tslib.__assign(tslib.__assign({}, parseOptions), { commentDescriptions: true }));
|
|
485
|
-
schema = graphql.buildSchema(mergedTypeDefs, parseOptions);
|
|
486
|
-
}
|
|
487
|
-
else {
|
|
488
|
-
var mergedTypeDefs = merge.mergeTypeDefs(typeDefs, parseOptions);
|
|
489
|
-
schema = graphql.buildASTSchema(mergedTypeDefs, parseOptions);
|
|
490
|
-
}
|
|
491
|
-
if (pruningOptions) {
|
|
492
|
-
schema = utils.pruneSchema(schema);
|
|
493
|
-
}
|
|
494
|
-
// We allow passing in an array of resolver maps, in which case we merge them
|
|
495
|
-
schema = addResolversToSchema({
|
|
496
|
-
schema: schema,
|
|
497
|
-
resolvers: merge.mergeResolvers(resolvers),
|
|
498
|
-
resolverValidationOptions: resolverValidationOptions,
|
|
499
|
-
inheritResolversFromInterfaces: inheritResolversFromInterfaces,
|
|
500
|
-
updateResolversInPlace: updateResolversInPlace,
|
|
501
|
-
});
|
|
502
|
-
if (Object.keys(resolverValidationOptions).length > 0) {
|
|
503
|
-
assertResolversPresent(schema, resolverValidationOptions);
|
|
504
|
-
}
|
|
505
|
-
if (schemaExtensions) {
|
|
506
|
-
schemaExtensions = merge.mergeExtensions(utils.asArray(schemaExtensions));
|
|
507
|
-
merge.applyExtensions(schema, schemaExtensions);
|
|
508
|
-
}
|
|
509
|
-
return schema;
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
/**
|
|
513
|
-
* Synchronously merges multiple schemas, typeDefinitions and/or resolvers into a single schema.
|
|
514
|
-
* @param config Configuration object
|
|
515
|
-
*/
|
|
516
|
-
function mergeSchemas(config) {
|
|
517
|
-
var e_1, _a;
|
|
518
|
-
var extractedTypeDefs = utils.asArray(config.typeDefs || []);
|
|
519
|
-
var extractedResolvers = utils.asArray(config.resolvers || []);
|
|
520
|
-
var extractedSchemaExtensions = utils.asArray(config.schemaExtensions || []);
|
|
521
|
-
var schemas = config.schemas || [];
|
|
522
|
-
try {
|
|
523
|
-
for (var schemas_1 = tslib.__values(schemas), schemas_1_1 = schemas_1.next(); !schemas_1_1.done; schemas_1_1 = schemas_1.next()) {
|
|
524
|
-
var schema = schemas_1_1.value;
|
|
525
|
-
extractedTypeDefs.push(schema);
|
|
526
|
-
extractedResolvers.push(utils.getResolversFromSchema(schema));
|
|
527
|
-
extractedSchemaExtensions.push(merge.extractExtensionsFromSchema(schema));
|
|
528
|
-
}
|
|
529
|
-
}
|
|
530
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
531
|
-
finally {
|
|
532
|
-
try {
|
|
533
|
-
if (schemas_1_1 && !schemas_1_1.done && (_a = schemas_1.return)) _a.call(schemas_1);
|
|
534
|
-
}
|
|
535
|
-
finally { if (e_1) throw e_1.error; }
|
|
536
|
-
}
|
|
537
|
-
return makeExecutableSchema(tslib.__assign(tslib.__assign({ parseOptions: config }, config), { typeDefs: extractedTypeDefs, resolvers: extractedResolvers, schemaExtensions: extractedSchemaExtensions }));
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
exports.addResolversToSchema = addResolversToSchema;
|
|
541
|
-
exports.assertResolversPresent = assertResolversPresent;
|
|
542
|
-
exports.chainResolvers = chainResolvers;
|
|
543
|
-
exports.checkForResolveTypeResolver = checkForResolveTypeResolver;
|
|
544
|
-
exports.extendResolversFromInterfaces = extendResolversFromInterfaces;
|
|
545
|
-
exports.makeExecutableSchema = makeExecutableSchema;
|
|
546
|
-
exports.mergeSchemas = mergeSchemas;
|
package/es5/index.mjs
DELETED
|
@@ -1,536 +0,0 @@
|
|
|
1
|
-
import { isScalarType, getNamedType, defaultFieldResolver, isSchema, isSpecifiedScalarType, isEnumType, isUnionType, isObjectType, isInterfaceType, GraphQLEnumType, GraphQLScalarType, GraphQLUnionType, GraphQLObjectType, GraphQLInterfaceType, buildSchema, buildASTSchema } from 'graphql';
|
|
2
|
-
import { forEachField, mapSchema, MapperKind, forEachDefaultValue, serializeInputValue, healSchema, parseInputValue, pruneSchema, asArray, getResolversFromSchema } from '@graphql-tools/utils/es5';
|
|
3
|
-
import { __values, __assign } from 'tslib';
|
|
4
|
-
import { mergeTypeDefs, mergeResolvers, mergeExtensions, applyExtensions, extractExtensionsFromSchema } from '@graphql-tools/merge/es5';
|
|
5
|
-
|
|
6
|
-
function assertResolversPresent(schema, resolverValidationOptions) {
|
|
7
|
-
if (resolverValidationOptions === void 0) { resolverValidationOptions = {}; }
|
|
8
|
-
var requireResolversForArgs = resolverValidationOptions.requireResolversForArgs, requireResolversForNonScalar = resolverValidationOptions.requireResolversForNonScalar, requireResolversForAllFields = resolverValidationOptions.requireResolversForAllFields;
|
|
9
|
-
if (requireResolversForAllFields && (requireResolversForArgs || requireResolversForNonScalar)) {
|
|
10
|
-
throw new TypeError('requireResolversForAllFields takes precedence over the more specific assertions. ' +
|
|
11
|
-
'Please configure either requireResolversForAllFields or requireResolversForArgs / ' +
|
|
12
|
-
'requireResolversForNonScalar, but not a combination of them.');
|
|
13
|
-
}
|
|
14
|
-
forEachField(schema, function (field, typeName, fieldName) {
|
|
15
|
-
// requires a resolver for *every* field.
|
|
16
|
-
if (requireResolversForAllFields) {
|
|
17
|
-
expectResolver('requireResolversForAllFields', requireResolversForAllFields, field, typeName, fieldName);
|
|
18
|
-
}
|
|
19
|
-
// requires a resolver on every field that has arguments
|
|
20
|
-
if (requireResolversForArgs && field.args.length > 0) {
|
|
21
|
-
expectResolver('requireResolversForArgs', requireResolversForArgs, field, typeName, fieldName);
|
|
22
|
-
}
|
|
23
|
-
// requires a resolver on every field that returns a non-scalar type
|
|
24
|
-
if (requireResolversForNonScalar !== 'ignore' && !isScalarType(getNamedType(field.type))) {
|
|
25
|
-
expectResolver('requireResolversForNonScalar', requireResolversForNonScalar, field, typeName, fieldName);
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
function expectResolver(validator, behavior, field, typeName, fieldName) {
|
|
30
|
-
if (!field.resolve) {
|
|
31
|
-
var message = "Resolver missing for \"" + typeName + "." + fieldName + "\".\nTo disable this validator, use:\n resolverValidationOptions: {\n " + validator + ": 'ignore'\n }";
|
|
32
|
-
if (behavior === 'error') {
|
|
33
|
-
throw new Error(message);
|
|
34
|
-
}
|
|
35
|
-
if (behavior === 'warn') {
|
|
36
|
-
// eslint-disable-next-line no-console
|
|
37
|
-
console.warn(message);
|
|
38
|
-
}
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
if (typeof field.resolve !== 'function') {
|
|
42
|
-
throw new Error("Resolver \"" + typeName + "." + fieldName + "\" must be a function");
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function chainResolvers(resolvers) {
|
|
47
|
-
return function (root, args, ctx, info) {
|
|
48
|
-
return resolvers.reduce(function (prev, curResolver) {
|
|
49
|
-
if (curResolver != null) {
|
|
50
|
-
return curResolver(prev, args, ctx, info);
|
|
51
|
-
}
|
|
52
|
-
return defaultFieldResolver(prev, args, ctx, info);
|
|
53
|
-
}, root);
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// If we have any union or interface types throw if no there is no resolveType resolver
|
|
58
|
-
function checkForResolveTypeResolver(schema, requireResolversForResolveType) {
|
|
59
|
-
var _a;
|
|
60
|
-
mapSchema(schema, (_a = {},
|
|
61
|
-
_a[MapperKind.ABSTRACT_TYPE] = function (type) {
|
|
62
|
-
if (!type.resolveType) {
|
|
63
|
-
var message = "Type \"" + type.name + "\" is missing a \"__resolveType\" resolver. Pass 'ignore' into " +
|
|
64
|
-
'"resolverValidationOptions.requireResolversForResolveType" to disable this error.';
|
|
65
|
-
if (requireResolversForResolveType === 'error') {
|
|
66
|
-
throw new Error(message);
|
|
67
|
-
}
|
|
68
|
-
if (requireResolversForResolveType === 'warn') {
|
|
69
|
-
// eslint-disable-next-line no-console
|
|
70
|
-
console.warn(message);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return undefined;
|
|
74
|
-
},
|
|
75
|
-
_a));
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
function extendResolversFromInterfaces(schema, resolvers) {
|
|
79
|
-
var e_1, _a;
|
|
80
|
-
var extendedResolvers = {};
|
|
81
|
-
var typeMap = schema.getTypeMap();
|
|
82
|
-
for (var typeName in typeMap) {
|
|
83
|
-
var type = typeMap[typeName];
|
|
84
|
-
if ('getInterfaces' in type) {
|
|
85
|
-
extendedResolvers[typeName] = {};
|
|
86
|
-
try {
|
|
87
|
-
for (var _b = (e_1 = void 0, __values(type.getInterfaces())), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
88
|
-
var iFace = _c.value;
|
|
89
|
-
if (resolvers[iFace.name]) {
|
|
90
|
-
for (var fieldName in resolvers[iFace.name]) {
|
|
91
|
-
if (fieldName === '__isTypeOf' || !fieldName.startsWith('__')) {
|
|
92
|
-
extendedResolvers[typeName][fieldName] = resolvers[iFace.name][fieldName];
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
99
|
-
finally {
|
|
100
|
-
try {
|
|
101
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
102
|
-
}
|
|
103
|
-
finally { if (e_1) throw e_1.error; }
|
|
104
|
-
}
|
|
105
|
-
var typeResolvers = resolvers[typeName];
|
|
106
|
-
extendedResolvers[typeName] = __assign(__assign({}, extendedResolvers[typeName]), typeResolvers);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
var typeResolvers = resolvers[typeName];
|
|
110
|
-
if (typeResolvers != null) {
|
|
111
|
-
extendedResolvers[typeName] = typeResolvers;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
return extendedResolvers;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
function addResolversToSchema(schemaOrOptions, legacyInputResolvers, legacyInputValidationOptions) {
|
|
119
|
-
var options = isSchema(schemaOrOptions)
|
|
120
|
-
? {
|
|
121
|
-
schema: schemaOrOptions,
|
|
122
|
-
resolvers: legacyInputResolvers !== null && legacyInputResolvers !== void 0 ? legacyInputResolvers : {},
|
|
123
|
-
resolverValidationOptions: legacyInputValidationOptions,
|
|
124
|
-
}
|
|
125
|
-
: schemaOrOptions;
|
|
126
|
-
var schema = options.schema, inputResolvers = options.resolvers, defaultFieldResolver = options.defaultFieldResolver, _a = options.resolverValidationOptions, resolverValidationOptions = _a === void 0 ? {} : _a, _b = options.inheritResolversFromInterfaces, inheritResolversFromInterfaces = _b === void 0 ? false : _b, _c = options.updateResolversInPlace, updateResolversInPlace = _c === void 0 ? false : _c;
|
|
127
|
-
var _d = resolverValidationOptions.requireResolversToMatchSchema, requireResolversToMatchSchema = _d === void 0 ? 'error' : _d, requireResolversForResolveType = resolverValidationOptions.requireResolversForResolveType;
|
|
128
|
-
var resolvers = inheritResolversFromInterfaces
|
|
129
|
-
? extendResolversFromInterfaces(schema, inputResolvers)
|
|
130
|
-
: inputResolvers;
|
|
131
|
-
for (var typeName in resolvers) {
|
|
132
|
-
var resolverValue = resolvers[typeName];
|
|
133
|
-
var resolverType = typeof resolverValue;
|
|
134
|
-
if (resolverType !== 'object') {
|
|
135
|
-
throw new Error("\"" + typeName + "\" defined in resolvers, but has invalid value \"" + resolverValue + "\". The resolver's value must be of type object.");
|
|
136
|
-
}
|
|
137
|
-
var type = schema.getType(typeName);
|
|
138
|
-
if (type == null) {
|
|
139
|
-
if (requireResolversToMatchSchema === 'ignore') {
|
|
140
|
-
break;
|
|
141
|
-
}
|
|
142
|
-
throw new Error("\"" + typeName + "\" defined in resolvers, but not in schema");
|
|
143
|
-
}
|
|
144
|
-
else if (isSpecifiedScalarType(type)) {
|
|
145
|
-
// allow -- without recommending -- overriding of specified scalar types
|
|
146
|
-
for (var fieldName in resolverValue) {
|
|
147
|
-
if (fieldName.startsWith('__')) {
|
|
148
|
-
type[fieldName.substring(2)] = resolverValue[fieldName];
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
type[fieldName] = resolverValue[fieldName];
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
else if (isEnumType(type)) {
|
|
156
|
-
var values = type.getValues();
|
|
157
|
-
var _loop_1 = function (fieldName) {
|
|
158
|
-
if (!fieldName.startsWith('__') &&
|
|
159
|
-
!values.some(function (value) { return value.name === fieldName; }) &&
|
|
160
|
-
requireResolversToMatchSchema &&
|
|
161
|
-
requireResolversToMatchSchema !== 'ignore') {
|
|
162
|
-
throw new Error(type.name + "." + fieldName + " was defined in resolvers, but not present within " + type.name);
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
for (var fieldName in resolverValue) {
|
|
166
|
-
_loop_1(fieldName);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
else if (isUnionType(type)) {
|
|
170
|
-
for (var fieldName in resolverValue) {
|
|
171
|
-
if (!fieldName.startsWith('__') &&
|
|
172
|
-
requireResolversToMatchSchema &&
|
|
173
|
-
requireResolversToMatchSchema !== 'ignore') {
|
|
174
|
-
throw new Error(type.name + "." + fieldName + " was defined in resolvers, but " + type.name + " is not an object or interface type");
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
else if (isObjectType(type) || isInterfaceType(type)) {
|
|
179
|
-
for (var fieldName in resolverValue) {
|
|
180
|
-
if (!fieldName.startsWith('__')) {
|
|
181
|
-
var fields = type.getFields();
|
|
182
|
-
var field = fields[fieldName];
|
|
183
|
-
if (field == null) {
|
|
184
|
-
// Field present in resolver but not in schema
|
|
185
|
-
if (requireResolversToMatchSchema && requireResolversToMatchSchema !== 'ignore') {
|
|
186
|
-
throw new Error(typeName + "." + fieldName + " defined in resolvers, but not in schema");
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
else {
|
|
190
|
-
// Field present in both the resolver and schema
|
|
191
|
-
var fieldResolve = resolverValue[fieldName];
|
|
192
|
-
if (typeof fieldResolve !== 'function' && typeof fieldResolve !== 'object') {
|
|
193
|
-
throw new Error("Resolver " + typeName + "." + fieldName + " must be object or function");
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
schema = updateResolversInPlace
|
|
201
|
-
? addResolversToExistingSchema(schema, resolvers, defaultFieldResolver)
|
|
202
|
-
: createNewSchemaWithResolvers(schema, resolvers, defaultFieldResolver);
|
|
203
|
-
if (requireResolversForResolveType && requireResolversForResolveType !== 'ignore') {
|
|
204
|
-
checkForResolveTypeResolver(schema, requireResolversForResolveType);
|
|
205
|
-
}
|
|
206
|
-
return schema;
|
|
207
|
-
}
|
|
208
|
-
function addResolversToExistingSchema(schema, resolvers, defaultFieldResolver) {
|
|
209
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
|
210
|
-
var typeMap = schema.getTypeMap();
|
|
211
|
-
for (var typeName in resolvers) {
|
|
212
|
-
var type = schema.getType(typeName);
|
|
213
|
-
var resolverValue = resolvers[typeName];
|
|
214
|
-
if (isScalarType(type)) {
|
|
215
|
-
for (var fieldName in resolverValue) {
|
|
216
|
-
if (fieldName.startsWith('__')) {
|
|
217
|
-
type[fieldName.substring(2)] = resolverValue[fieldName];
|
|
218
|
-
}
|
|
219
|
-
else if (fieldName === 'astNode' && type.astNode != null) {
|
|
220
|
-
type.astNode = __assign(__assign({}, type.astNode), { description: (_c = (_b = (_a = resolverValue) === null || _a === void 0 ? void 0 : _a.astNode) === null || _b === void 0 ? void 0 : _b.description) !== null && _c !== void 0 ? _c : type.astNode.description, directives: ((_d = type.astNode.directives) !== null && _d !== void 0 ? _d : []).concat((_g = (_f = (_e = resolverValue) === null || _e === void 0 ? void 0 : _e.astNode) === null || _f === void 0 ? void 0 : _f.directives) !== null && _g !== void 0 ? _g : []) });
|
|
221
|
-
}
|
|
222
|
-
else if (fieldName === 'extensionASTNodes' && type.extensionASTNodes != null) {
|
|
223
|
-
type.extensionASTNodes = type.extensionASTNodes.concat((_j = (_h = resolverValue) === null || _h === void 0 ? void 0 : _h.extensionASTNodes) !== null && _j !== void 0 ? _j : []);
|
|
224
|
-
}
|
|
225
|
-
else if (fieldName === 'extensions' &&
|
|
226
|
-
type.extensions != null &&
|
|
227
|
-
resolverValue.extensions != null) {
|
|
228
|
-
type.extensions = Object.assign(Object.create(null), type.extensions, resolverValue.extensions);
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
type[fieldName] = resolverValue[fieldName];
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
else if (isEnumType(type)) {
|
|
236
|
-
var config = type.toConfig();
|
|
237
|
-
var enumValueConfigMap = config.values;
|
|
238
|
-
for (var fieldName in resolverValue) {
|
|
239
|
-
if (fieldName.startsWith('__')) {
|
|
240
|
-
config[fieldName.substring(2)] = resolverValue[fieldName];
|
|
241
|
-
}
|
|
242
|
-
else if (fieldName === 'astNode' && config.astNode != null) {
|
|
243
|
-
config.astNode = __assign(__assign({}, config.astNode), { description: (_m = (_l = (_k = resolverValue) === null || _k === void 0 ? void 0 : _k.astNode) === null || _l === void 0 ? void 0 : _l.description) !== null && _m !== void 0 ? _m : config.astNode.description, directives: ((_o = config.astNode.directives) !== null && _o !== void 0 ? _o : []).concat((_r = (_q = (_p = resolverValue) === null || _p === void 0 ? void 0 : _p.astNode) === null || _q === void 0 ? void 0 : _q.directives) !== null && _r !== void 0 ? _r : []) });
|
|
244
|
-
}
|
|
245
|
-
else if (fieldName === 'extensionASTNodes' && config.extensionASTNodes != null) {
|
|
246
|
-
config.extensionASTNodes = config.extensionASTNodes.concat((_t = (_s = resolverValue) === null || _s === void 0 ? void 0 : _s.extensionASTNodes) !== null && _t !== void 0 ? _t : []);
|
|
247
|
-
}
|
|
248
|
-
else if (fieldName === 'extensions' &&
|
|
249
|
-
type.extensions != null &&
|
|
250
|
-
resolverValue.extensions != null) {
|
|
251
|
-
type.extensions = Object.assign(Object.create(null), type.extensions, resolverValue.extensions);
|
|
252
|
-
}
|
|
253
|
-
else if (enumValueConfigMap[fieldName]) {
|
|
254
|
-
enumValueConfigMap[fieldName].value = resolverValue[fieldName];
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
typeMap[typeName] = new GraphQLEnumType(config);
|
|
258
|
-
}
|
|
259
|
-
else if (isUnionType(type)) {
|
|
260
|
-
for (var fieldName in resolverValue) {
|
|
261
|
-
if (fieldName.startsWith('__')) {
|
|
262
|
-
type[fieldName.substring(2)] = resolverValue[fieldName];
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
else if (isObjectType(type) || isInterfaceType(type)) {
|
|
267
|
-
for (var fieldName in resolverValue) {
|
|
268
|
-
if (fieldName.startsWith('__')) {
|
|
269
|
-
// this is for isTypeOf and resolveType and all the other stuff.
|
|
270
|
-
type[fieldName.substring(2)] = resolverValue[fieldName];
|
|
271
|
-
break;
|
|
272
|
-
}
|
|
273
|
-
var fields = type.getFields();
|
|
274
|
-
var field = fields[fieldName];
|
|
275
|
-
if (field != null) {
|
|
276
|
-
var fieldResolve = resolverValue[fieldName];
|
|
277
|
-
if (typeof fieldResolve === 'function') {
|
|
278
|
-
// for convenience. Allows shorter syntax in resolver definition file
|
|
279
|
-
field.resolve = fieldResolve.bind(resolverValue);
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
setFieldProperties(field, fieldResolve);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
// serialize all default values prior to healing fields with new scalar/enum types.
|
|
289
|
-
forEachDefaultValue(schema, serializeInputValue);
|
|
290
|
-
// schema may have new scalar/enum types that require healing
|
|
291
|
-
healSchema(schema);
|
|
292
|
-
// reparse all default values with new parsing functions.
|
|
293
|
-
forEachDefaultValue(schema, parseInputValue);
|
|
294
|
-
if (defaultFieldResolver != null) {
|
|
295
|
-
forEachField(schema, function (field) {
|
|
296
|
-
if (!field.resolve) {
|
|
297
|
-
field.resolve = defaultFieldResolver;
|
|
298
|
-
}
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
return schema;
|
|
302
|
-
}
|
|
303
|
-
function createNewSchemaWithResolvers(schema, resolvers, defaultFieldResolver) {
|
|
304
|
-
var _a, _b;
|
|
305
|
-
schema = mapSchema(schema, (_a = {},
|
|
306
|
-
_a[MapperKind.SCALAR_TYPE] = function (type) {
|
|
307
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
308
|
-
var config = type.toConfig();
|
|
309
|
-
var resolverValue = resolvers[type.name];
|
|
310
|
-
if (!isSpecifiedScalarType(type) && resolverValue != null) {
|
|
311
|
-
for (var fieldName in resolverValue) {
|
|
312
|
-
if (fieldName.startsWith('__')) {
|
|
313
|
-
config[fieldName.substring(2)] = resolverValue[fieldName];
|
|
314
|
-
}
|
|
315
|
-
else if (fieldName === 'astNode' && config.astNode != null) {
|
|
316
|
-
config.astNode = __assign(__assign({}, config.astNode), { description: (_c = (_b = (_a = resolverValue) === null || _a === void 0 ? void 0 : _a.astNode) === null || _b === void 0 ? void 0 : _b.description) !== null && _c !== void 0 ? _c : config.astNode.description, directives: ((_d = config.astNode.directives) !== null && _d !== void 0 ? _d : []).concat((_g = (_f = (_e = resolverValue) === null || _e === void 0 ? void 0 : _e.astNode) === null || _f === void 0 ? void 0 : _f.directives) !== null && _g !== void 0 ? _g : []) });
|
|
317
|
-
}
|
|
318
|
-
else if (fieldName === 'extensionASTNodes' && config.extensionASTNodes != null) {
|
|
319
|
-
config.extensionASTNodes = config.extensionASTNodes.concat((_j = (_h = resolverValue) === null || _h === void 0 ? void 0 : _h.extensionASTNodes) !== null && _j !== void 0 ? _j : []);
|
|
320
|
-
}
|
|
321
|
-
else if (fieldName === 'extensions' &&
|
|
322
|
-
config.extensions != null &&
|
|
323
|
-
resolverValue.extensions != null) {
|
|
324
|
-
config.extensions = Object.assign(Object.create(null), type.extensions, resolverValue.extensions);
|
|
325
|
-
}
|
|
326
|
-
else {
|
|
327
|
-
config[fieldName] = resolverValue[fieldName];
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
return new GraphQLScalarType(config);
|
|
331
|
-
}
|
|
332
|
-
},
|
|
333
|
-
_a[MapperKind.ENUM_TYPE] = function (type) {
|
|
334
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
335
|
-
var resolverValue = resolvers[type.name];
|
|
336
|
-
var config = type.toConfig();
|
|
337
|
-
var enumValueConfigMap = config.values;
|
|
338
|
-
if (resolverValue != null) {
|
|
339
|
-
for (var fieldName in resolverValue) {
|
|
340
|
-
if (fieldName.startsWith('__')) {
|
|
341
|
-
config[fieldName.substring(2)] = resolverValue[fieldName];
|
|
342
|
-
}
|
|
343
|
-
else if (fieldName === 'astNode' && config.astNode != null) {
|
|
344
|
-
config.astNode = __assign(__assign({}, config.astNode), { description: (_c = (_b = (_a = resolverValue) === null || _a === void 0 ? void 0 : _a.astNode) === null || _b === void 0 ? void 0 : _b.description) !== null && _c !== void 0 ? _c : config.astNode.description, directives: ((_d = config.astNode.directives) !== null && _d !== void 0 ? _d : []).concat((_g = (_f = (_e = resolverValue) === null || _e === void 0 ? void 0 : _e.astNode) === null || _f === void 0 ? void 0 : _f.directives) !== null && _g !== void 0 ? _g : []) });
|
|
345
|
-
}
|
|
346
|
-
else if (fieldName === 'extensionASTNodes' && config.extensionASTNodes != null) {
|
|
347
|
-
config.extensionASTNodes = config.extensionASTNodes.concat((_j = (_h = resolverValue) === null || _h === void 0 ? void 0 : _h.extensionASTNodes) !== null && _j !== void 0 ? _j : []);
|
|
348
|
-
}
|
|
349
|
-
else if (fieldName === 'extensions' &&
|
|
350
|
-
config.extensions != null &&
|
|
351
|
-
resolverValue.extensions != null) {
|
|
352
|
-
config.extensions = Object.assign(Object.create(null), type.extensions, resolverValue.extensions);
|
|
353
|
-
}
|
|
354
|
-
else if (enumValueConfigMap[fieldName]) {
|
|
355
|
-
enumValueConfigMap[fieldName].value = resolverValue[fieldName];
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
return new GraphQLEnumType(config);
|
|
359
|
-
}
|
|
360
|
-
},
|
|
361
|
-
_a[MapperKind.UNION_TYPE] = function (type) {
|
|
362
|
-
var resolverValue = resolvers[type.name];
|
|
363
|
-
if (resolverValue != null) {
|
|
364
|
-
var config = type.toConfig();
|
|
365
|
-
if (resolverValue['__resolveType']) {
|
|
366
|
-
config.resolveType = resolverValue['__resolveType'];
|
|
367
|
-
}
|
|
368
|
-
return new GraphQLUnionType(config);
|
|
369
|
-
}
|
|
370
|
-
},
|
|
371
|
-
_a[MapperKind.OBJECT_TYPE] = function (type) {
|
|
372
|
-
var resolverValue = resolvers[type.name];
|
|
373
|
-
if (resolverValue != null) {
|
|
374
|
-
var config = type.toConfig();
|
|
375
|
-
if (resolverValue['__isTypeOf']) {
|
|
376
|
-
config.isTypeOf = resolverValue['__isTypeOf'];
|
|
377
|
-
}
|
|
378
|
-
return new GraphQLObjectType(config);
|
|
379
|
-
}
|
|
380
|
-
},
|
|
381
|
-
_a[MapperKind.INTERFACE_TYPE] = function (type) {
|
|
382
|
-
var resolverValue = resolvers[type.name];
|
|
383
|
-
if (resolverValue != null) {
|
|
384
|
-
var config = type.toConfig();
|
|
385
|
-
if (resolverValue['__resolveType']) {
|
|
386
|
-
config.resolveType = resolverValue['__resolveType'];
|
|
387
|
-
}
|
|
388
|
-
return new GraphQLInterfaceType(config);
|
|
389
|
-
}
|
|
390
|
-
},
|
|
391
|
-
_a[MapperKind.COMPOSITE_FIELD] = function (fieldConfig, fieldName, typeName) {
|
|
392
|
-
var resolverValue = resolvers[typeName];
|
|
393
|
-
if (resolverValue != null) {
|
|
394
|
-
var fieldResolve = resolverValue[fieldName];
|
|
395
|
-
if (fieldResolve != null) {
|
|
396
|
-
var newFieldConfig = __assign({}, fieldConfig);
|
|
397
|
-
if (typeof fieldResolve === 'function') {
|
|
398
|
-
// for convenience. Allows shorter syntax in resolver definition file
|
|
399
|
-
newFieldConfig.resolve = fieldResolve.bind(resolverValue);
|
|
400
|
-
}
|
|
401
|
-
else {
|
|
402
|
-
setFieldProperties(newFieldConfig, fieldResolve);
|
|
403
|
-
}
|
|
404
|
-
return newFieldConfig;
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
},
|
|
408
|
-
_a));
|
|
409
|
-
if (defaultFieldResolver != null) {
|
|
410
|
-
schema = mapSchema(schema, (_b = {},
|
|
411
|
-
_b[MapperKind.OBJECT_FIELD] = function (fieldConfig) { return (__assign(__assign({}, fieldConfig), { resolve: fieldConfig.resolve != null ? fieldConfig.resolve : defaultFieldResolver })); },
|
|
412
|
-
_b));
|
|
413
|
-
}
|
|
414
|
-
return schema;
|
|
415
|
-
}
|
|
416
|
-
function setFieldProperties(field, propertiesObj) {
|
|
417
|
-
for (var propertyName in propertiesObj) {
|
|
418
|
-
field[propertyName] = propertiesObj[propertyName];
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
/**
|
|
423
|
-
* Builds a schema from the provided type definitions and resolvers.
|
|
424
|
-
*
|
|
425
|
-
* The type definitions are written using Schema Definition Language (SDL). They
|
|
426
|
-
* can be provided as a string, a `DocumentNode`, a function, or an array of any
|
|
427
|
-
* of these. If a function is provided, it will be passed no arguments and
|
|
428
|
-
* should return an array of strings or `DocumentNode`s.
|
|
429
|
-
*
|
|
430
|
-
* Note: You can use `graphql-tag` to not only parse a string into a
|
|
431
|
-
* `DocumentNode` but also to provide additional syntax highlighting in your
|
|
432
|
-
* editor (with the appropriate editor plugin).
|
|
433
|
-
*
|
|
434
|
-
* ```js
|
|
435
|
-
* const typeDefs = gql`
|
|
436
|
-
* type Query {
|
|
437
|
-
* posts: [Post]
|
|
438
|
-
* author(id: Int!): Author
|
|
439
|
-
* }
|
|
440
|
-
* `;
|
|
441
|
-
* ```
|
|
442
|
-
*
|
|
443
|
-
* The `resolvers` object should be a map of type names to nested object, which
|
|
444
|
-
* themselves map the type's fields to their appropriate resolvers.
|
|
445
|
-
* See the [Resolvers](/docs/resolvers) section of the documentation for more details.
|
|
446
|
-
*
|
|
447
|
-
* ```js
|
|
448
|
-
* const resolvers = {
|
|
449
|
-
* Query: {
|
|
450
|
-
* posts: (obj, args, ctx, info) => getAllPosts(),
|
|
451
|
-
* author: (obj, args, ctx, info) => getAuthorById(args.id)
|
|
452
|
-
* }
|
|
453
|
-
* };
|
|
454
|
-
* ```
|
|
455
|
-
*
|
|
456
|
-
* Once you've defined both the `typeDefs` and `resolvers`, you can create your
|
|
457
|
-
* schema:
|
|
458
|
-
*
|
|
459
|
-
* ```js
|
|
460
|
-
* const schema = makeExecutableSchema({
|
|
461
|
-
* typeDefs,
|
|
462
|
-
* resolvers,
|
|
463
|
-
* })
|
|
464
|
-
* ```
|
|
465
|
-
*/
|
|
466
|
-
function makeExecutableSchema(_a) {
|
|
467
|
-
var typeDefs = _a.typeDefs, _b = _a.resolvers, resolvers = _b === void 0 ? {} : _b, _c = _a.resolverValidationOptions, resolverValidationOptions = _c === void 0 ? {} : _c, _d = _a.parseOptions, parseOptions = _d === void 0 ? {} : _d, _e = _a.inheritResolversFromInterfaces, inheritResolversFromInterfaces = _e === void 0 ? false : _e, pruningOptions = _a.pruningOptions, _f = _a.updateResolversInPlace, updateResolversInPlace = _f === void 0 ? false : _f, schemaExtensions = _a.schemaExtensions;
|
|
468
|
-
// Validate and clean up arguments
|
|
469
|
-
if (typeof resolverValidationOptions !== 'object') {
|
|
470
|
-
throw new Error('Expected `resolverValidationOptions` to be an object');
|
|
471
|
-
}
|
|
472
|
-
if (!typeDefs) {
|
|
473
|
-
throw new Error('Must provide typeDefs');
|
|
474
|
-
}
|
|
475
|
-
var schema;
|
|
476
|
-
if (isSchema(typeDefs)) {
|
|
477
|
-
schema = typeDefs;
|
|
478
|
-
}
|
|
479
|
-
else if (parseOptions === null || parseOptions === void 0 ? void 0 : parseOptions.commentDescriptions) {
|
|
480
|
-
var mergedTypeDefs = mergeTypeDefs(typeDefs, __assign(__assign({}, parseOptions), { commentDescriptions: true }));
|
|
481
|
-
schema = buildSchema(mergedTypeDefs, parseOptions);
|
|
482
|
-
}
|
|
483
|
-
else {
|
|
484
|
-
var mergedTypeDefs = mergeTypeDefs(typeDefs, parseOptions);
|
|
485
|
-
schema = buildASTSchema(mergedTypeDefs, parseOptions);
|
|
486
|
-
}
|
|
487
|
-
if (pruningOptions) {
|
|
488
|
-
schema = pruneSchema(schema);
|
|
489
|
-
}
|
|
490
|
-
// We allow passing in an array of resolver maps, in which case we merge them
|
|
491
|
-
schema = addResolversToSchema({
|
|
492
|
-
schema: schema,
|
|
493
|
-
resolvers: mergeResolvers(resolvers),
|
|
494
|
-
resolverValidationOptions: resolverValidationOptions,
|
|
495
|
-
inheritResolversFromInterfaces: inheritResolversFromInterfaces,
|
|
496
|
-
updateResolversInPlace: updateResolversInPlace,
|
|
497
|
-
});
|
|
498
|
-
if (Object.keys(resolverValidationOptions).length > 0) {
|
|
499
|
-
assertResolversPresent(schema, resolverValidationOptions);
|
|
500
|
-
}
|
|
501
|
-
if (schemaExtensions) {
|
|
502
|
-
schemaExtensions = mergeExtensions(asArray(schemaExtensions));
|
|
503
|
-
applyExtensions(schema, schemaExtensions);
|
|
504
|
-
}
|
|
505
|
-
return schema;
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
/**
|
|
509
|
-
* Synchronously merges multiple schemas, typeDefinitions and/or resolvers into a single schema.
|
|
510
|
-
* @param config Configuration object
|
|
511
|
-
*/
|
|
512
|
-
function mergeSchemas(config) {
|
|
513
|
-
var e_1, _a;
|
|
514
|
-
var extractedTypeDefs = asArray(config.typeDefs || []);
|
|
515
|
-
var extractedResolvers = asArray(config.resolvers || []);
|
|
516
|
-
var extractedSchemaExtensions = asArray(config.schemaExtensions || []);
|
|
517
|
-
var schemas = config.schemas || [];
|
|
518
|
-
try {
|
|
519
|
-
for (var schemas_1 = __values(schemas), schemas_1_1 = schemas_1.next(); !schemas_1_1.done; schemas_1_1 = schemas_1.next()) {
|
|
520
|
-
var schema = schemas_1_1.value;
|
|
521
|
-
extractedTypeDefs.push(schema);
|
|
522
|
-
extractedResolvers.push(getResolversFromSchema(schema));
|
|
523
|
-
extractedSchemaExtensions.push(extractExtensionsFromSchema(schema));
|
|
524
|
-
}
|
|
525
|
-
}
|
|
526
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
527
|
-
finally {
|
|
528
|
-
try {
|
|
529
|
-
if (schemas_1_1 && !schemas_1_1.done && (_a = schemas_1.return)) _a.call(schemas_1);
|
|
530
|
-
}
|
|
531
|
-
finally { if (e_1) throw e_1.error; }
|
|
532
|
-
}
|
|
533
|
-
return makeExecutableSchema(__assign(__assign({ parseOptions: config }, config), { typeDefs: extractedTypeDefs, resolvers: extractedResolvers, schemaExtensions: extractedSchemaExtensions }));
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
export { addResolversToSchema, assertResolversPresent, chainResolvers, checkForResolveTypeResolver, extendResolversFromInterfaces, makeExecutableSchema, mergeSchemas };
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { GraphQLSchema } from 'graphql';
|
|
2
|
-
import { IExecutableSchemaDefinition } from './types';
|
|
3
|
-
/**
|
|
4
|
-
* Builds a schema from the provided type definitions and resolvers.
|
|
5
|
-
*
|
|
6
|
-
* The type definitions are written using Schema Definition Language (SDL). They
|
|
7
|
-
* can be provided as a string, a `DocumentNode`, a function, or an array of any
|
|
8
|
-
* of these. If a function is provided, it will be passed no arguments and
|
|
9
|
-
* should return an array of strings or `DocumentNode`s.
|
|
10
|
-
*
|
|
11
|
-
* Note: You can use `graphql-tag` to not only parse a string into a
|
|
12
|
-
* `DocumentNode` but also to provide additional syntax highlighting in your
|
|
13
|
-
* editor (with the appropriate editor plugin).
|
|
14
|
-
*
|
|
15
|
-
* ```js
|
|
16
|
-
* const typeDefs = gql`
|
|
17
|
-
* type Query {
|
|
18
|
-
* posts: [Post]
|
|
19
|
-
* author(id: Int!): Author
|
|
20
|
-
* }
|
|
21
|
-
* `;
|
|
22
|
-
* ```
|
|
23
|
-
*
|
|
24
|
-
* The `resolvers` object should be a map of type names to nested object, which
|
|
25
|
-
* themselves map the type's fields to their appropriate resolvers.
|
|
26
|
-
* See the [Resolvers](/docs/resolvers) section of the documentation for more details.
|
|
27
|
-
*
|
|
28
|
-
* ```js
|
|
29
|
-
* const resolvers = {
|
|
30
|
-
* Query: {
|
|
31
|
-
* posts: (obj, args, ctx, info) => getAllPosts(),
|
|
32
|
-
* author: (obj, args, ctx, info) => getAuthorById(args.id)
|
|
33
|
-
* }
|
|
34
|
-
* };
|
|
35
|
-
* ```
|
|
36
|
-
*
|
|
37
|
-
* Once you've defined both the `typeDefs` and `resolvers`, you can create your
|
|
38
|
-
* schema:
|
|
39
|
-
*
|
|
40
|
-
* ```js
|
|
41
|
-
* const schema = makeExecutableSchema({
|
|
42
|
-
* typeDefs,
|
|
43
|
-
* resolvers,
|
|
44
|
-
* })
|
|
45
|
-
* ```
|
|
46
|
-
*/
|
|
47
|
-
export declare function makeExecutableSchema<TContext = any>({ typeDefs, resolvers, resolverValidationOptions, parseOptions, inheritResolversFromInterfaces, pruningOptions, updateResolversInPlace, schemaExtensions, }: IExecutableSchemaDefinition<TContext>): GraphQLSchema;
|
package/es5/merge-schemas.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { GraphQLSchema } from 'graphql';
|
|
2
|
-
import { IExecutableSchemaDefinition } from './types';
|
|
3
|
-
/**
|
|
4
|
-
* Configuration object for schema merging
|
|
5
|
-
*/
|
|
6
|
-
export declare type MergeSchemasConfig<T = any> = Partial<IExecutableSchemaDefinition<T>> & IExecutableSchemaDefinition<T>['parseOptions'] & {
|
|
7
|
-
/**
|
|
8
|
-
* The schemas to be merged
|
|
9
|
-
*/
|
|
10
|
-
schemas?: GraphQLSchema[];
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Synchronously merges multiple schemas, typeDefinitions and/or resolvers into a single schema.
|
|
14
|
-
* @param config Configuration object
|
|
15
|
-
*/
|
|
16
|
-
export declare function mergeSchemas(config: MergeSchemasConfig): GraphQLSchema;
|
package/es5/package.json
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@graphql-tools/schema/es5",
|
|
3
|
-
"version": "8.2.1-alpha-d8af46a9.0",
|
|
4
|
-
"description": "A set of utils for faster development of GraphQL tools",
|
|
5
|
-
"sideEffects": false,
|
|
6
|
-
"peerDependencies": {
|
|
7
|
-
"graphql": "^14.0.0 || ^15.0.0 || ^16.0.0"
|
|
8
|
-
},
|
|
9
|
-
"dependencies": {
|
|
10
|
-
"@graphql-tools/merge": "8.1.2-alpha-d8af46a9.0",
|
|
11
|
-
"@graphql-tools/utils": "^8.2.0",
|
|
12
|
-
"tslib": "~2.3.0",
|
|
13
|
-
"value-or-promise": "1.0.10"
|
|
14
|
-
},
|
|
15
|
-
"repository": {
|
|
16
|
-
"type": "git",
|
|
17
|
-
"url": "ardatan/graphql-tools",
|
|
18
|
-
"directory": "packages/schema"
|
|
19
|
-
},
|
|
20
|
-
"license": "MIT",
|
|
21
|
-
"main": "index.js",
|
|
22
|
-
"module": "index.mjs",
|
|
23
|
-
"typings": "index.d.ts",
|
|
24
|
-
"typescript": {
|
|
25
|
-
"definition": "index.d.ts"
|
|
26
|
-
},
|
|
27
|
-
"exports": {
|
|
28
|
-
".": {
|
|
29
|
-
"require": "./index.js",
|
|
30
|
-
"import": "./index.mjs"
|
|
31
|
-
},
|
|
32
|
-
"./*": {
|
|
33
|
-
"require": "./*.js",
|
|
34
|
-
"import": "./*.mjs"
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
package/es5/types.d.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { TypeSource, IResolvers, IResolverValidationOptions, GraphQLParseOptions, PruneSchemaOptions } from '@graphql-tools/utils';
|
|
2
|
-
import { SchemaExtensions } from '@graphql-tools/merge';
|
|
3
|
-
import { BuildSchemaOptions } from 'graphql';
|
|
4
|
-
/**
|
|
5
|
-
* Configuration object for creating an executable schema
|
|
6
|
-
*/
|
|
7
|
-
export interface IExecutableSchemaDefinition<TContext = any> {
|
|
8
|
-
/**
|
|
9
|
-
* The type definitions used to create the schema
|
|
10
|
-
*/
|
|
11
|
-
typeDefs: TypeSource;
|
|
12
|
-
/**
|
|
13
|
-
* Object describing the field resolvers for the provided type definitions
|
|
14
|
-
*/
|
|
15
|
-
resolvers?: IResolvers<any, TContext> | Array<IResolvers<any, TContext>>;
|
|
16
|
-
/**
|
|
17
|
-
* Additional options for validating the provided resolvers
|
|
18
|
-
*/
|
|
19
|
-
resolverValidationOptions?: IResolverValidationOptions;
|
|
20
|
-
/**
|
|
21
|
-
* Additional options for parsing the type definitions if they are provided
|
|
22
|
-
* as a string
|
|
23
|
-
*/
|
|
24
|
-
parseOptions?: BuildSchemaOptions & GraphQLParseOptions;
|
|
25
|
-
/**
|
|
26
|
-
* GraphQL object types that implement interfaces will inherit any missing
|
|
27
|
-
* resolvers from their interface types defined in the `resolvers` object
|
|
28
|
-
*/
|
|
29
|
-
inheritResolversFromInterfaces?: boolean;
|
|
30
|
-
/**
|
|
31
|
-
* Additional options for removing unused types from the schema
|
|
32
|
-
*/
|
|
33
|
-
pruningOptions?: PruneSchemaOptions;
|
|
34
|
-
/**
|
|
35
|
-
* Do not create a schema again and use the one from `buildASTSchema`
|
|
36
|
-
*/
|
|
37
|
-
updateResolversInPlace?: boolean;
|
|
38
|
-
/**
|
|
39
|
-
* Schema extensions
|
|
40
|
-
*/
|
|
41
|
-
schemaExtensions?: SchemaExtensions | Array<SchemaExtensions>;
|
|
42
|
-
}
|