UNPKG

25.9 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.extendSchema = extendSchema;
7
8var _objectValues = _interopRequireDefault(require("../polyfills/objectValues"));
9
10var _invariant = _interopRequireDefault(require("../jsutils/invariant"));
11
12var _mapValue = _interopRequireDefault(require("../jsutils/mapValue"));
13
14var _keyValMap = _interopRequireDefault(require("../jsutils/keyValMap"));
15
16var _buildASTSchema = require("./buildASTSchema");
17
18var _validate = require("../validation/validate");
19
20var _schema = require("../type/schema");
21
22var _introspection = require("../type/introspection");
23
24var _scalars = require("../type/scalars");
25
26var _definition = require("../type/definition");
27
28var _directives = require("../type/directives");
29
30var _kinds = require("../language/kinds");
31
32var _predicates = require("../language/predicates");
33
34function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
36function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
37
38function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
39
40/**
41 * Produces a new schema given an existing schema and a document which may
42 * contain GraphQL type extensions and definitions. The original schema will
43 * remain unaltered.
44 *
45 * Because a schema represents a graph of references, a schema cannot be
46 * extended without effectively making an entire copy. We do not know until it's
47 * too late if subgraphs remain unchanged.
48 *
49 * This algorithm copies the provided schema, applying extensions while
50 * producing the copy. The original schema remains unaltered.
51 *
52 * Accepts options as a third argument:
53 *
54 * - commentDescriptions:
55 * Provide true to use preceding comments as the description.
56 *
57 */
58function extendSchema(schema, documentAST, options) {
59 (0, _schema.assertSchema)(schema);
60 !(documentAST && documentAST.kind === _kinds.Kind.DOCUMENT) ? (0, _invariant.default)(0, 'Must provide valid Document AST') : void 0;
61
62 if (!options || !(options.assumeValid || options.assumeValidSDL)) {
63 (0, _validate.assertValidSDLExtension)(documentAST, schema);
64 } // Collect the type definitions and extensions found in the document.
65
66
67 var typeDefinitionMap = Object.create(null);
68 var typeExtensionsMap = Object.create(null); // New directives and types are separate because a directives and types can
69 // have the same name. For example, a type named "skip".
70
71 var directiveDefinitions = [];
72 var schemaDef; // Schema extensions are collected which may add additional operation types.
73
74 var schemaExtensions = [];
75 var _iteratorNormalCompletion = true;
76 var _didIteratorError = false;
77 var _iteratorError = undefined;
78
79 try {
80 for (var _iterator = documentAST.definitions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
81 var def = _step.value;
82
83 if (def.kind === _kinds.Kind.SCHEMA_DEFINITION) {
84 schemaDef = def;
85 } else if (def.kind === _kinds.Kind.SCHEMA_EXTENSION) {
86 schemaExtensions.push(def);
87 } else if ((0, _predicates.isTypeDefinitionNode)(def)) {
88 var typeName = def.name.value;
89 typeDefinitionMap[typeName] = def;
90 } else if ((0, _predicates.isTypeExtensionNode)(def)) {
91 var extendedTypeName = def.name.value;
92 var existingTypeExtensions = typeExtensionsMap[extendedTypeName];
93 typeExtensionsMap[extendedTypeName] = existingTypeExtensions ? existingTypeExtensions.concat([def]) : [def];
94 } else if (def.kind === _kinds.Kind.DIRECTIVE_DEFINITION) {
95 directiveDefinitions.push(def);
96 }
97 } // If this document contains no new types, extensions, or directives then
98 // return the same unmodified GraphQLSchema instance.
99
100 } catch (err) {
101 _didIteratorError = true;
102 _iteratorError = err;
103 } finally {
104 try {
105 if (!_iteratorNormalCompletion && _iterator.return != null) {
106 _iterator.return();
107 }
108 } finally {
109 if (_didIteratorError) {
110 throw _iteratorError;
111 }
112 }
113 }
114
115 if (Object.keys(typeExtensionsMap).length === 0 && Object.keys(typeDefinitionMap).length === 0 && directiveDefinitions.length === 0 && schemaExtensions.length === 0 && !schemaDef) {
116 return schema;
117 }
118
119 var astBuilder = new _buildASTSchema.ASTDefinitionBuilder(typeDefinitionMap, options, function (typeName) {
120 var existingType = schema.getType(typeName);
121 !existingType ? (0, _invariant.default)(0, "Unknown type: \"".concat(typeName, "\".")) : void 0;
122 return extendNamedType(existingType);
123 });
124 var extendTypeCache = Object.create(null); // Get the extended root operation types.
125
126 var operationTypes = {
127 query: extendMaybeNamedType(schema.getQueryType()),
128 mutation: extendMaybeNamedType(schema.getMutationType()),
129 subscription: extendMaybeNamedType(schema.getSubscriptionType())
130 };
131
132 if (schemaDef) {
133 var _iteratorNormalCompletion2 = true;
134 var _didIteratorError2 = false;
135 var _iteratorError2 = undefined;
136
137 try {
138 for (var _iterator2 = schemaDef.operationTypes[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
139 var _ref2 = _step2.value;
140 var operation = _ref2.operation;
141 var type = _ref2.type;
142 // Note: While this could make early assertions to get the correctly
143 // typed values, that would throw immediately while type system
144 // validation with validateSchema() will produce more actionable results.
145 operationTypes[operation] = astBuilder.buildType(type);
146 }
147 } catch (err) {
148 _didIteratorError2 = true;
149 _iteratorError2 = err;
150 } finally {
151 try {
152 if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
153 _iterator2.return();
154 }
155 } finally {
156 if (_didIteratorError2) {
157 throw _iteratorError2;
158 }
159 }
160 }
161 } // Then, incorporate schema definition and all schema extensions.
162
163
164 for (var _i = 0; _i < schemaExtensions.length; _i++) {
165 var schemaExtension = schemaExtensions[_i];
166
167 if (schemaExtension.operationTypes) {
168 var _iteratorNormalCompletion14 = true;
169 var _didIteratorError14 = false;
170 var _iteratorError14 = undefined;
171
172 try {
173 for (var _iterator14 = schemaExtension.operationTypes[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) {
174 var _ref4 = _step14.value;
175 var _operation = _ref4.operation;
176 var _type = _ref4.type;
177 // Note: While this could make early assertions to get the correctly
178 // typed values, that would throw immediately while type system
179 // validation with validateSchema() will produce more actionable results.
180 operationTypes[_operation] = astBuilder.buildType(_type);
181 }
182 } catch (err) {
183 _didIteratorError14 = true;
184 _iteratorError14 = err;
185 } finally {
186 try {
187 if (!_iteratorNormalCompletion14 && _iterator14.return != null) {
188 _iterator14.return();
189 }
190 } finally {
191 if (_didIteratorError14) {
192 throw _iteratorError14;
193 }
194 }
195 }
196 }
197 }
198
199 var schemaExtensionASTNodes = schemaExtensions ? schema.extensionASTNodes ? schema.extensionASTNodes.concat(schemaExtensions) : schemaExtensions : schema.extensionASTNodes;
200 var types = [].concat((0, _objectValues.default)(schema.getTypeMap()).map(function (type) {
201 return extendNamedType(type);
202 }), (0, _objectValues.default)(typeDefinitionMap).map(function (type) {
203 return astBuilder.buildType(type);
204 })); // Support both original legacy names and extended legacy names.
205
206 var allowedLegacyNames = schema.__allowedLegacyNames.concat(options && options.allowedLegacyNames || []); // Then produce and return a Schema with these types.
207
208
209 return new _schema.GraphQLSchema(_objectSpread({}, operationTypes, {
210 types: types,
211 directives: getMergedDirectives(),
212 astNode: schema.astNode,
213 extensionASTNodes: schemaExtensionASTNodes,
214 allowedLegacyNames: allowedLegacyNames
215 })); // Below are functions used for producing this schema that have closed over
216 // this scope and have access to the schema, cache, and newly defined types.
217
218 function getMergedDirectives() {
219 var existingDirectives = schema.getDirectives().map(extendDirective);
220 !existingDirectives ? (0, _invariant.default)(0, 'schema must have default directives') : void 0;
221 return existingDirectives.concat(directiveDefinitions.map(function (node) {
222 return astBuilder.buildDirective(node);
223 }));
224 }
225
226 function extendMaybeNamedType(type) {
227 return type ? extendNamedType(type) : null;
228 }
229
230 function extendNamedType(type) {
231 if ((0, _introspection.isIntrospectionType)(type) || (0, _scalars.isSpecifiedScalarType)(type)) {
232 // Builtin types are not extended.
233 return type;
234 }
235
236 var name = type.name;
237
238 if (!extendTypeCache[name]) {
239 if ((0, _definition.isScalarType)(type)) {
240 extendTypeCache[name] = extendScalarType(type);
241 } else if ((0, _definition.isObjectType)(type)) {
242 extendTypeCache[name] = extendObjectType(type);
243 } else if ((0, _definition.isInterfaceType)(type)) {
244 extendTypeCache[name] = extendInterfaceType(type);
245 } else if ((0, _definition.isUnionType)(type)) {
246 extendTypeCache[name] = extendUnionType(type);
247 } else if ((0, _definition.isEnumType)(type)) {
248 extendTypeCache[name] = extendEnumType(type);
249 } else if ((0, _definition.isInputObjectType)(type)) {
250 extendTypeCache[name] = extendInputObjectType(type);
251 }
252 }
253
254 return extendTypeCache[name];
255 }
256
257 function extendDirective(directive) {
258 return new _directives.GraphQLDirective({
259 name: directive.name,
260 description: directive.description,
261 locations: directive.locations,
262 args: extendArgs(directive.args),
263 astNode: directive.astNode
264 });
265 }
266
267 function extendInputObjectType(type) {
268 var name = type.name;
269 var extensionASTNodes = typeExtensionsMap[name] ? type.extensionASTNodes ? type.extensionASTNodes.concat(typeExtensionsMap[name]) : typeExtensionsMap[name] : type.extensionASTNodes;
270 return new _definition.GraphQLInputObjectType({
271 name: name,
272 description: type.description,
273 fields: function fields() {
274 return extendInputFieldMap(type);
275 },
276 astNode: type.astNode,
277 extensionASTNodes: extensionASTNodes
278 });
279 }
280
281 function extendInputFieldMap(type) {
282 var newFieldMap = (0, _mapValue.default)(type.getFields(), function (field) {
283 return {
284 description: field.description,
285 type: extendType(field.type),
286 defaultValue: field.defaultValue,
287 astNode: field.astNode
288 };
289 }); // If there are any extensions to the fields, apply those here.
290
291 var extensions = typeExtensionsMap[type.name];
292
293 if (extensions) {
294 var _iteratorNormalCompletion3 = true;
295 var _didIteratorError3 = false;
296 var _iteratorError3 = undefined;
297
298 try {
299 for (var _iterator3 = extensions[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
300 var extension = _step3.value;
301 var _iteratorNormalCompletion4 = true;
302 var _didIteratorError4 = false;
303 var _iteratorError4 = undefined;
304
305 try {
306 for (var _iterator4 = extension.fields[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
307 var field = _step4.value;
308 newFieldMap[field.name.value] = astBuilder.buildInputField(field);
309 }
310 } catch (err) {
311 _didIteratorError4 = true;
312 _iteratorError4 = err;
313 } finally {
314 try {
315 if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
316 _iterator4.return();
317 }
318 } finally {
319 if (_didIteratorError4) {
320 throw _iteratorError4;
321 }
322 }
323 }
324 }
325 } catch (err) {
326 _didIteratorError3 = true;
327 _iteratorError3 = err;
328 } finally {
329 try {
330 if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
331 _iterator3.return();
332 }
333 } finally {
334 if (_didIteratorError3) {
335 throw _iteratorError3;
336 }
337 }
338 }
339 }
340
341 return newFieldMap;
342 }
343
344 function extendEnumType(type) {
345 var name = type.name;
346 var extensionASTNodes = typeExtensionsMap[name] ? type.extensionASTNodes ? type.extensionASTNodes.concat(typeExtensionsMap[name]) : typeExtensionsMap[name] : type.extensionASTNodes;
347 return new _definition.GraphQLEnumType({
348 name: name,
349 description: type.description,
350 values: extendValueMap(type),
351 astNode: type.astNode,
352 extensionASTNodes: extensionASTNodes
353 });
354 }
355
356 function extendValueMap(type) {
357 var newValueMap = Object.create(null);
358 var _iteratorNormalCompletion5 = true;
359 var _didIteratorError5 = false;
360 var _iteratorError5 = undefined;
361
362 try {
363 for (var _iterator5 = type.getValues()[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
364 var _value = _step5.value;
365 newValueMap[_value.name] = {
366 description: _value.description,
367 value: _value.value,
368 deprecationReason: _value.deprecationReason,
369 astNode: _value.astNode
370 };
371 } // If there are any extensions to the values, apply those here.
372
373 } catch (err) {
374 _didIteratorError5 = true;
375 _iteratorError5 = err;
376 } finally {
377 try {
378 if (!_iteratorNormalCompletion5 && _iterator5.return != null) {
379 _iterator5.return();
380 }
381 } finally {
382 if (_didIteratorError5) {
383 throw _iteratorError5;
384 }
385 }
386 }
387
388 var extensions = typeExtensionsMap[type.name];
389
390 if (extensions) {
391 var _iteratorNormalCompletion6 = true;
392 var _didIteratorError6 = false;
393 var _iteratorError6 = undefined;
394
395 try {
396 for (var _iterator6 = extensions[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
397 var extension = _step6.value;
398 var _iteratorNormalCompletion7 = true;
399 var _didIteratorError7 = false;
400 var _iteratorError7 = undefined;
401
402 try {
403 for (var _iterator7 = extension.values[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {
404 var value = _step7.value;
405 newValueMap[value.name.value] = astBuilder.buildEnumValue(value);
406 }
407 } catch (err) {
408 _didIteratorError7 = true;
409 _iteratorError7 = err;
410 } finally {
411 try {
412 if (!_iteratorNormalCompletion7 && _iterator7.return != null) {
413 _iterator7.return();
414 }
415 } finally {
416 if (_didIteratorError7) {
417 throw _iteratorError7;
418 }
419 }
420 }
421 }
422 } catch (err) {
423 _didIteratorError6 = true;
424 _iteratorError6 = err;
425 } finally {
426 try {
427 if (!_iteratorNormalCompletion6 && _iterator6.return != null) {
428 _iterator6.return();
429 }
430 } finally {
431 if (_didIteratorError6) {
432 throw _iteratorError6;
433 }
434 }
435 }
436 }
437
438 return newValueMap;
439 }
440
441 function extendScalarType(type) {
442 var name = type.name;
443 var extensionASTNodes = typeExtensionsMap[name] ? type.extensionASTNodes ? type.extensionASTNodes.concat(typeExtensionsMap[name]) : typeExtensionsMap[name] : type.extensionASTNodes;
444 return new _definition.GraphQLScalarType({
445 name: name,
446 description: type.description,
447 astNode: type.astNode,
448 extensionASTNodes: extensionASTNodes,
449 serialize: type.serialize,
450 parseValue: type.parseValue,
451 parseLiteral: type.parseLiteral
452 });
453 }
454
455 function extendObjectType(type) {
456 var name = type.name;
457 var extensionASTNodes = typeExtensionsMap[name] ? type.extensionASTNodes ? type.extensionASTNodes.concat(typeExtensionsMap[name]) : typeExtensionsMap[name] : type.extensionASTNodes;
458 return new _definition.GraphQLObjectType({
459 name: name,
460 description: type.description,
461 interfaces: function interfaces() {
462 return extendImplementedInterfaces(type);
463 },
464 fields: function fields() {
465 return extendFieldMap(type);
466 },
467 astNode: type.astNode,
468 extensionASTNodes: extensionASTNodes,
469 isTypeOf: type.isTypeOf
470 });
471 }
472
473 function extendArgs(args) {
474 return (0, _keyValMap.default)(args, function (arg) {
475 return arg.name;
476 }, function (arg) {
477 return {
478 type: extendType(arg.type),
479 defaultValue: arg.defaultValue,
480 description: arg.description,
481 astNode: arg.astNode
482 };
483 });
484 }
485
486 function extendInterfaceType(type) {
487 var name = type.name;
488 var extensionASTNodes = typeExtensionsMap[name] ? type.extensionASTNodes ? type.extensionASTNodes.concat(typeExtensionsMap[name]) : typeExtensionsMap[name] : type.extensionASTNodes;
489 return new _definition.GraphQLInterfaceType({
490 name: type.name,
491 description: type.description,
492 fields: function fields() {
493 return extendFieldMap(type);
494 },
495 astNode: type.astNode,
496 extensionASTNodes: extensionASTNodes,
497 resolveType: type.resolveType
498 });
499 }
500
501 function extendUnionType(type) {
502 var name = type.name;
503 var extensionASTNodes = typeExtensionsMap[name] ? type.extensionASTNodes ? type.extensionASTNodes.concat(typeExtensionsMap[name]) : typeExtensionsMap[name] : type.extensionASTNodes;
504 return new _definition.GraphQLUnionType({
505 name: name,
506 description: type.description,
507 types: function types() {
508 return extendPossibleTypes(type);
509 },
510 astNode: type.astNode,
511 resolveType: type.resolveType,
512 extensionASTNodes: extensionASTNodes
513 });
514 }
515
516 function extendPossibleTypes(type) {
517 var possibleTypes = type.getTypes().map(extendNamedType); // If there are any extensions to the union, apply those here.
518
519 var extensions = typeExtensionsMap[type.name];
520
521 if (extensions) {
522 var _iteratorNormalCompletion8 = true;
523 var _didIteratorError8 = false;
524 var _iteratorError8 = undefined;
525
526 try {
527 for (var _iterator8 = extensions[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {
528 var extension = _step8.value;
529 var _iteratorNormalCompletion9 = true;
530 var _didIteratorError9 = false;
531 var _iteratorError9 = undefined;
532
533 try {
534 for (var _iterator9 = extension.types[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {
535 var namedType = _step9.value;
536 // Note: While this could make early assertions to get the correctly
537 // typed values, that would throw immediately while type system
538 // validation with validateSchema() will produce more actionable results.
539 possibleTypes.push(astBuilder.buildType(namedType));
540 }
541 } catch (err) {
542 _didIteratorError9 = true;
543 _iteratorError9 = err;
544 } finally {
545 try {
546 if (!_iteratorNormalCompletion9 && _iterator9.return != null) {
547 _iterator9.return();
548 }
549 } finally {
550 if (_didIteratorError9) {
551 throw _iteratorError9;
552 }
553 }
554 }
555 }
556 } catch (err) {
557 _didIteratorError8 = true;
558 _iteratorError8 = err;
559 } finally {
560 try {
561 if (!_iteratorNormalCompletion8 && _iterator8.return != null) {
562 _iterator8.return();
563 }
564 } finally {
565 if (_didIteratorError8) {
566 throw _iteratorError8;
567 }
568 }
569 }
570 }
571
572 return possibleTypes;
573 }
574
575 function extendImplementedInterfaces(type) {
576 var interfaces = type.getInterfaces().map(extendNamedType); // If there are any extensions to the interfaces, apply those here.
577
578 var extensions = typeExtensionsMap[type.name];
579
580 if (extensions) {
581 var _iteratorNormalCompletion10 = true;
582 var _didIteratorError10 = false;
583 var _iteratorError10 = undefined;
584
585 try {
586 for (var _iterator10 = extensions[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) {
587 var extension = _step10.value;
588 var _iteratorNormalCompletion11 = true;
589 var _didIteratorError11 = false;
590 var _iteratorError11 = undefined;
591
592 try {
593 for (var _iterator11 = extension.interfaces[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) {
594 var namedType = _step11.value;
595 // Note: While this could make early assertions to get the correctly
596 // typed values, that would throw immediately while type system
597 // validation with validateSchema() will produce more actionable results.
598 interfaces.push(astBuilder.buildType(namedType));
599 }
600 } catch (err) {
601 _didIteratorError11 = true;
602 _iteratorError11 = err;
603 } finally {
604 try {
605 if (!_iteratorNormalCompletion11 && _iterator11.return != null) {
606 _iterator11.return();
607 }
608 } finally {
609 if (_didIteratorError11) {
610 throw _iteratorError11;
611 }
612 }
613 }
614 }
615 } catch (err) {
616 _didIteratorError10 = true;
617 _iteratorError10 = err;
618 } finally {
619 try {
620 if (!_iteratorNormalCompletion10 && _iterator10.return != null) {
621 _iterator10.return();
622 }
623 } finally {
624 if (_didIteratorError10) {
625 throw _iteratorError10;
626 }
627 }
628 }
629 }
630
631 return interfaces;
632 }
633
634 function extendFieldMap(type) {
635 var newFieldMap = (0, _mapValue.default)(type.getFields(), function (field) {
636 return {
637 description: field.description,
638 deprecationReason: field.deprecationReason,
639 type: extendType(field.type),
640 args: extendArgs(field.args),
641 astNode: field.astNode,
642 resolve: field.resolve
643 };
644 }); // If there are any extensions to the fields, apply those here.
645
646 var extensions = typeExtensionsMap[type.name];
647
648 if (extensions) {
649 var _iteratorNormalCompletion12 = true;
650 var _didIteratorError12 = false;
651 var _iteratorError12 = undefined;
652
653 try {
654 for (var _iterator12 = extensions[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) {
655 var extension = _step12.value;
656 var _iteratorNormalCompletion13 = true;
657 var _didIteratorError13 = false;
658 var _iteratorError13 = undefined;
659
660 try {
661 for (var _iterator13 = extension.fields[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) {
662 var field = _step13.value;
663 newFieldMap[field.name.value] = astBuilder.buildField(field);
664 }
665 } catch (err) {
666 _didIteratorError13 = true;
667 _iteratorError13 = err;
668 } finally {
669 try {
670 if (!_iteratorNormalCompletion13 && _iterator13.return != null) {
671 _iterator13.return();
672 }
673 } finally {
674 if (_didIteratorError13) {
675 throw _iteratorError13;
676 }
677 }
678 }
679 }
680 } catch (err) {
681 _didIteratorError12 = true;
682 _iteratorError12 = err;
683 } finally {
684 try {
685 if (!_iteratorNormalCompletion12 && _iterator12.return != null) {
686 _iterator12.return();
687 }
688 } finally {
689 if (_didIteratorError12) {
690 throw _iteratorError12;
691 }
692 }
693 }
694 }
695
696 return newFieldMap;
697 }
698
699 function extendType(typeDef) {
700 if ((0, _definition.isListType)(typeDef)) {
701 return (0, _definition.GraphQLList)(extendType(typeDef.ofType));
702 }
703
704 if ((0, _definition.isNonNullType)(typeDef)) {
705 return (0, _definition.GraphQLNonNull)(extendType(typeDef.ofType));
706 }
707
708 return extendNamedType(typeDef);
709 }
710}
\No newline at end of file