graphql 14.0.0 → 14.1.1

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.
Files changed (285) hide show
  1. package/README.md +4 -4
  2. package/error/GraphQLError.js +1 -1
  3. package/error/GraphQLError.js.flow +3 -3
  4. package/error/GraphQLError.mjs +1 -1
  5. package/error/formatError.js +1 -1
  6. package/error/formatError.mjs +1 -1
  7. package/error/index.mjs +1 -1
  8. package/error/locatedError.js +1 -1
  9. package/error/locatedError.mjs +1 -1
  10. package/error/printError.js +1 -1
  11. package/error/printError.mjs +1 -1
  12. package/error/syntaxError.js +1 -1
  13. package/error/syntaxError.mjs +1 -1
  14. package/execution/execute.js +4 -4
  15. package/execution/execute.js.flow +4 -6
  16. package/execution/execute.mjs +5 -5
  17. package/execution/index.mjs +1 -1
  18. package/execution/values.js +4 -4
  19. package/execution/values.js.flow +3 -3
  20. package/execution/values.mjs +3 -3
  21. package/graphql.js +1 -1
  22. package/graphql.mjs +1 -1
  23. package/index.js +12 -0
  24. package/index.js.flow +4 -0
  25. package/index.mjs +4 -4
  26. package/jsutils/dedent.js +2 -2
  27. package/jsutils/dedent.js.flow +1 -1
  28. package/jsutils/dedent.mjs +2 -2
  29. package/jsutils/defineToJSON.js +17 -6
  30. package/jsutils/defineToJSON.js.flow +14 -5
  31. package/jsutils/defineToJSON.mjs +14 -6
  32. package/jsutils/defineToStringTag.js +5 -5
  33. package/jsutils/defineToStringTag.js.flow +3 -3
  34. package/jsutils/defineToStringTag.mjs +4 -4
  35. package/jsutils/inspect.js +46 -12
  36. package/jsutils/inspect.js.flow +42 -15
  37. package/jsutils/inspect.mjs +45 -5
  38. package/jsutils/instanceOf.js +1 -1
  39. package/jsutils/instanceOf.mjs +1 -1
  40. package/jsutils/invariant.js +1 -1
  41. package/jsutils/invariant.mjs +1 -1
  42. package/jsutils/isInvalid.js +1 -1
  43. package/jsutils/isInvalid.mjs +1 -1
  44. package/jsutils/isNullish.js +1 -1
  45. package/jsutils/isNullish.mjs +1 -1
  46. package/jsutils/isPromise.js +1 -1
  47. package/jsutils/isPromise.mjs +1 -1
  48. package/jsutils/keyMap.js +1 -1
  49. package/jsutils/keyMap.mjs +1 -1
  50. package/jsutils/keyValMap.js +1 -1
  51. package/jsutils/keyValMap.mjs +1 -1
  52. package/jsutils/mapValue.js +54 -0
  53. package/jsutils/mapValue.js.flow +27 -0
  54. package/jsutils/mapValue.mjs +44 -0
  55. package/jsutils/memoize3.js +1 -1
  56. package/jsutils/memoize3.mjs +1 -1
  57. package/jsutils/nodejsCustomInspectSymbol.js +18 -0
  58. package/jsutils/nodejsCustomInspectSymbol.js.flow +15 -0
  59. package/jsutils/nodejsCustomInspectSymbol.mjs +10 -0
  60. package/jsutils/orList.js +17 -4
  61. package/jsutils/orList.js.flow +13 -7
  62. package/jsutils/orList.mjs +14 -4
  63. package/jsutils/promiseForObject.js +1 -1
  64. package/jsutils/promiseForObject.mjs +1 -1
  65. package/jsutils/promiseReduce.js +1 -1
  66. package/jsutils/promiseReduce.mjs +1 -1
  67. package/jsutils/quotedOrList.js +1 -1
  68. package/jsutils/quotedOrList.mjs +1 -1
  69. package/jsutils/suggestionList.js +1 -1
  70. package/jsutils/suggestionList.mjs +1 -1
  71. package/language/blockStringValue.js +2 -2
  72. package/language/blockStringValue.js.flow +1 -1
  73. package/language/blockStringValue.mjs +2 -2
  74. package/language/directiveLocation.js +1 -1
  75. package/language/directiveLocation.mjs +1 -1
  76. package/language/index.mjs +1 -1
  77. package/language/kinds.js +1 -1
  78. package/language/kinds.mjs +1 -1
  79. package/language/lexer.js +29 -13
  80. package/language/lexer.js.flow +34 -20
  81. package/language/lexer.mjs +28 -13
  82. package/language/location.js +1 -1
  83. package/language/location.mjs +1 -1
  84. package/language/parser.js +31 -38
  85. package/language/parser.js.flow +32 -48
  86. package/language/parser.mjs +30 -38
  87. package/language/predicates.js +1 -1
  88. package/language/predicates.mjs +1 -1
  89. package/language/printer.js +13 -7
  90. package/language/printer.js.flow +19 -9
  91. package/language/printer.mjs +13 -7
  92. package/language/source.js +8 -7
  93. package/language/source.mjs +1 -9
  94. package/language/visitor.js +11 -20
  95. package/language/visitor.js.flow +4 -5
  96. package/language/visitor.mjs +8 -20
  97. package/package.json +10 -3
  98. package/polyfills/find.js +31 -0
  99. package/polyfills/find.js.flow +29 -0
  100. package/polyfills/find.mjs +23 -0
  101. package/{jsutils → polyfills}/isFinite.js +1 -1
  102. package/{jsutils → polyfills}/isFinite.js.flow +0 -0
  103. package/{jsutils → polyfills}/isFinite.mjs +1 -1
  104. package/{jsutils → polyfills}/isInteger.js +1 -1
  105. package/{jsutils → polyfills}/isInteger.js.flow +0 -0
  106. package/{jsutils → polyfills}/isInteger.mjs +1 -1
  107. package/polyfills/objectEntries.js +26 -0
  108. package/polyfills/objectEntries.js.flow +19 -0
  109. package/polyfills/objectEntries.mjs +18 -0
  110. package/{jsutils → polyfills}/objectValues.js +1 -1
  111. package/{jsutils → polyfills}/objectValues.js.flow +1 -1
  112. package/{jsutils → polyfills}/objectValues.mjs +1 -1
  113. package/subscription/asyncIteratorReject.mjs +1 -1
  114. package/subscription/index.mjs +1 -1
  115. package/subscription/mapAsyncIterator.mjs +1 -1
  116. package/subscription/subscribe.js +1 -1
  117. package/subscription/subscribe.js.flow +1 -1
  118. package/subscription/subscribe.mjs +2 -2
  119. package/type/definition.js +31 -130
  120. package/type/definition.js.flow +35 -47
  121. package/type/definition.mjs +30 -131
  122. package/type/directives.js +25 -29
  123. package/type/directives.js.flow +24 -20
  124. package/type/directives.mjs +22 -30
  125. package/type/index.js +12 -0
  126. package/type/index.js.flow +4 -0
  127. package/type/index.mjs +5 -3
  128. package/type/introspection.js +3 -3
  129. package/type/introspection.js.flow +1 -1
  130. package/type/introspection.mjs +2 -2
  131. package/type/scalars.js +45 -34
  132. package/type/scalars.js.flow +40 -26
  133. package/type/scalars.mjs +44 -26
  134. package/type/schema.js +82 -87
  135. package/type/schema.js.flow +17 -9
  136. package/type/schema.mjs +79 -86
  137. package/type/validate.js +168 -175
  138. package/type/validate.js.flow +8 -49
  139. package/type/validate.mjs +159 -175
  140. package/utilities/TypeInfo.js +10 -23
  141. package/utilities/TypeInfo.js.flow +1 -1
  142. package/utilities/TypeInfo.mjs +2 -24
  143. package/utilities/assertValidName.js +1 -1
  144. package/utilities/assertValidName.mjs +1 -1
  145. package/utilities/astFromValue.js +2 -2
  146. package/utilities/astFromValue.js.flow +1 -1
  147. package/utilities/astFromValue.mjs +2 -2
  148. package/utilities/buildASTSchema.js +169 -152
  149. package/utilities/buildASTSchema.js.flow +117 -113
  150. package/utilities/buildASTSchema.mjs +160 -152
  151. package/utilities/buildClientSchema.js +24 -14
  152. package/utilities/buildClientSchema.js.flow +24 -14
  153. package/utilities/buildClientSchema.mjs +23 -14
  154. package/utilities/coerceValue.js +38 -19
  155. package/utilities/coerceValue.js.flow +41 -47
  156. package/utilities/coerceValue.mjs +38 -20
  157. package/utilities/concatAST.js +1 -1
  158. package/utilities/concatAST.mjs +1 -1
  159. package/utilities/extendSchema.js +228 -312
  160. package/utilities/extendSchema.js.flow +27 -152
  161. package/utilities/extendSchema.mjs +229 -312
  162. package/utilities/findBreakingChanges.js +7 -5
  163. package/utilities/findBreakingChanges.js.flow +3 -2
  164. package/utilities/findBreakingChanges.mjs +6 -5
  165. package/utilities/findDeprecatedUsages.js +1 -1
  166. package/utilities/findDeprecatedUsages.mjs +1 -1
  167. package/utilities/getOperationAST.js +1 -1
  168. package/utilities/getOperationAST.mjs +1 -1
  169. package/utilities/getOperationRootType.js +1 -1
  170. package/utilities/getOperationRootType.mjs +1 -1
  171. package/utilities/index.mjs +1 -1
  172. package/utilities/introspectionFromSchema.js +1 -1
  173. package/utilities/introspectionFromSchema.mjs +1 -1
  174. package/utilities/introspectionQuery.js +1 -1
  175. package/utilities/introspectionQuery.mjs +1 -1
  176. package/utilities/isValidJSValue.js +1 -1
  177. package/utilities/isValidJSValue.mjs +1 -1
  178. package/utilities/isValidLiteralValue.js +1 -1
  179. package/utilities/isValidLiteralValue.mjs +1 -1
  180. package/utilities/lexicographicSortSchema.js +2 -2
  181. package/utilities/lexicographicSortSchema.js.flow +1 -1
  182. package/utilities/lexicographicSortSchema.mjs +2 -2
  183. package/utilities/schemaPrinter.js +3 -3
  184. package/utilities/schemaPrinter.js.flow +1 -1
  185. package/utilities/schemaPrinter.mjs +2 -2
  186. package/utilities/separateOperations.js +1 -1
  187. package/utilities/separateOperations.mjs +1 -1
  188. package/utilities/typeComparators.js +1 -1
  189. package/utilities/typeComparators.mjs +1 -1
  190. package/utilities/typeFromAST.js +1 -1
  191. package/utilities/typeFromAST.mjs +1 -1
  192. package/utilities/valueFromAST.js +3 -3
  193. package/utilities/valueFromAST.js.flow +1 -1
  194. package/utilities/valueFromAST.mjs +2 -2
  195. package/utilities/valueFromASTUntyped.js +1 -1
  196. package/utilities/valueFromASTUntyped.mjs +1 -1
  197. package/validation/ValidationContext.js +57 -82
  198. package/validation/ValidationContext.js.flow +52 -49
  199. package/validation/ValidationContext.mjs +52 -77
  200. package/validation/index.js.flow +1 -0
  201. package/validation/index.mjs +1 -1
  202. package/validation/rules/ExecutableDefinitions.js +1 -1
  203. package/validation/rules/ExecutableDefinitions.js.flow +1 -1
  204. package/validation/rules/ExecutableDefinitions.mjs +1 -1
  205. package/validation/rules/FieldsOnCorrectType.js +1 -1
  206. package/validation/rules/FieldsOnCorrectType.mjs +1 -1
  207. package/validation/rules/FragmentsOnCompositeTypes.js +1 -1
  208. package/validation/rules/FragmentsOnCompositeTypes.mjs +1 -1
  209. package/validation/rules/KnownArgumentNames.mjs +1 -1
  210. package/validation/rules/KnownDirectives.js +1 -1
  211. package/validation/rules/KnownDirectives.mjs +1 -1
  212. package/validation/rules/KnownFragmentNames.js +1 -1
  213. package/validation/rules/KnownFragmentNames.mjs +1 -1
  214. package/validation/rules/KnownTypeNames.js +59 -21
  215. package/validation/rules/KnownTypeNames.js.flow +54 -20
  216. package/validation/rules/KnownTypeNames.mjs +56 -21
  217. package/validation/rules/LoneAnonymousOperation.js +1 -1
  218. package/validation/rules/LoneAnonymousOperation.mjs +1 -1
  219. package/validation/rules/LoneSchemaDefinition.js +1 -1
  220. package/validation/rules/LoneSchemaDefinition.mjs +1 -1
  221. package/validation/rules/NoFragmentCycles.js +1 -1
  222. package/validation/rules/NoFragmentCycles.js.flow +2 -2
  223. package/validation/rules/NoFragmentCycles.mjs +1 -1
  224. package/validation/rules/NoUndefinedVariables.js +1 -1
  225. package/validation/rules/NoUndefinedVariables.mjs +1 -1
  226. package/validation/rules/NoUnusedFragments.js +1 -1
  227. package/validation/rules/NoUnusedFragments.js.flow +2 -2
  228. package/validation/rules/NoUnusedFragments.mjs +1 -1
  229. package/validation/rules/NoUnusedVariables.js +1 -1
  230. package/validation/rules/NoUnusedVariables.mjs +1 -1
  231. package/validation/rules/OverlappingFieldsCanBeMerged.js +57 -33
  232. package/validation/rules/OverlappingFieldsCanBeMerged.js.flow +5 -6
  233. package/validation/rules/OverlappingFieldsCanBeMerged.mjs +48 -33
  234. package/validation/rules/PossibleFragmentSpreads.js +1 -1
  235. package/validation/rules/PossibleFragmentSpreads.mjs +1 -1
  236. package/validation/rules/PossibleTypeExtensions.js +158 -0
  237. package/validation/rules/PossibleTypeExtensions.js.flow +160 -0
  238. package/validation/rules/PossibleTypeExtensions.mjs +146 -0
  239. package/validation/rules/ProvidedRequiredArguments.mjs +1 -1
  240. package/validation/rules/ScalarLeafs.js +1 -1
  241. package/validation/rules/ScalarLeafs.mjs +1 -1
  242. package/validation/rules/SingleFieldSubscriptions.js +1 -1
  243. package/validation/rules/SingleFieldSubscriptions.mjs +1 -1
  244. package/validation/rules/UniqueArgumentNames.js +1 -1
  245. package/validation/rules/UniqueArgumentNames.mjs +1 -1
  246. package/validation/rules/UniqueDirectiveNames.js +55 -0
  247. package/validation/rules/UniqueDirectiveNames.js.flow +64 -0
  248. package/validation/rules/UniqueDirectiveNames.mjs +43 -0
  249. package/validation/rules/UniqueDirectivesPerLocation.js +1 -1
  250. package/validation/rules/UniqueDirectivesPerLocation.mjs +1 -1
  251. package/validation/rules/UniqueEnumValueNames.js +94 -0
  252. package/validation/rules/UniqueEnumValueNames.js.flow +87 -0
  253. package/validation/rules/UniqueEnumValueNames.mjs +81 -0
  254. package/validation/rules/UniqueFieldDefinitionNames.js +105 -0
  255. package/validation/rules/UniqueFieldDefinitionNames.js.flow +101 -0
  256. package/validation/rules/UniqueFieldDefinitionNames.mjs +92 -0
  257. package/validation/rules/UniqueFragmentNames.js +1 -1
  258. package/validation/rules/UniqueFragmentNames.mjs +1 -1
  259. package/validation/rules/UniqueInputFieldNames.js +1 -1
  260. package/validation/rules/UniqueInputFieldNames.mjs +1 -1
  261. package/validation/rules/UniqueOperationNames.js +1 -1
  262. package/validation/rules/UniqueOperationNames.mjs +1 -1
  263. package/validation/rules/UniqueOperationTypes.js +85 -0
  264. package/validation/rules/UniqueOperationTypes.js.flow +76 -0
  265. package/validation/rules/UniqueOperationTypes.mjs +73 -0
  266. package/validation/rules/UniqueTypeNames.js +62 -0
  267. package/validation/rules/UniqueTypeNames.js.flow +67 -0
  268. package/validation/rules/UniqueTypeNames.mjs +50 -0
  269. package/validation/rules/UniqueVariableNames.js +1 -1
  270. package/validation/rules/UniqueVariableNames.mjs +1 -1
  271. package/validation/rules/ValuesOfCorrectType.js +29 -13
  272. package/validation/rules/ValuesOfCorrectType.js.flow +4 -5
  273. package/validation/rules/ValuesOfCorrectType.mjs +28 -13
  274. package/validation/rules/VariablesAreInputTypes.js +1 -1
  275. package/validation/rules/VariablesAreInputTypes.mjs +1 -1
  276. package/validation/rules/VariablesInAllowedPosition.js +4 -4
  277. package/validation/rules/VariablesInAllowedPosition.mjs +4 -4
  278. package/validation/specifiedRules.js +14 -2
  279. package/validation/specifiedRules.js.flow +13 -0
  280. package/validation/specifiedRules.mjs +8 -2
  281. package/validation/validate.js +1 -1
  282. package/validation/validate.mjs +1 -1
  283. package/jsutils/find.js +0 -22
  284. package/jsutils/find.js.flow +0 -19
  285. package/jsutils/find.mjs +0 -15
package/type/validate.js CHANGED
@@ -6,6 +6,12 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.validateSchema = validateSchema;
7
7
  exports.assertValidSchema = assertValidSchema;
8
8
 
9
+ var _find = _interopRequireDefault(require("../polyfills/find"));
10
+
11
+ var _objectValues = _interopRequireDefault(require("../polyfills/objectValues"));
12
+
13
+ var _objectEntries = _interopRequireDefault(require("../polyfills/objectEntries"));
14
+
9
15
  var _definition = require("./definition");
10
16
 
11
17
  var _directives = require("./directives");
@@ -16,12 +22,6 @@ var _schema = require("./schema");
16
22
 
17
23
  var _inspect = _interopRequireDefault(require("../jsutils/inspect"));
18
24
 
19
- var _find = _interopRequireDefault(require("../jsutils/find"));
20
-
21
- var _invariant = _interopRequireDefault(require("../jsutils/invariant"));
22
-
23
- var _objectValues = _interopRequireDefault(require("../jsutils/objectValues"));
24
-
25
25
  var _GraphQLError = require("../error/GraphQLError");
26
26
 
27
27
  var _assertValidName = require("../utilities/assertValidName");
@@ -30,7 +30,14 @@ var _typeComparators = require("../utilities/typeComparators");
30
30
 
31
31
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
32
32
 
33
- function _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; }
33
+ /**
34
+ * Copyright (c) 2015-present, Facebook, Inc.
35
+ *
36
+ * This source code is licensed under the MIT license found in the
37
+ * LICENSE file in the root directory of this source tree.
38
+ *
39
+ *
40
+ */
34
41
 
35
42
  /**
36
43
  * Implements the "Type Validation" sub-sections of the specification's
@@ -41,7 +48,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
41
48
  */
42
49
  function validateSchema(schema) {
43
50
  // First check to ensure the provided value is in fact a GraphQLSchema.
44
- !(0, _schema.isSchema)(schema) ? (0, _invariant.default)(0, "Expected ".concat((0, _inspect.default)(schema), " to be a GraphQL schema.")) : void 0; // If this Schema has already been validated, return the previous results.
51
+ (0, _schema.assertSchema)(schema); // If this Schema has already been validated, return the previous results.
45
52
 
46
53
  if (schema.__validationErrors) {
47
54
  return schema.__validationErrors;
@@ -78,10 +85,6 @@ var SchemaValidationContext =
78
85
  /*#__PURE__*/
79
86
  function () {
80
87
  function SchemaValidationContext(schema) {
81
- _defineProperty(this, "_errors", void 0);
82
-
83
- _defineProperty(this, "schema", void 0);
84
-
85
88
  this._errors = [];
86
89
  this.schema = schema;
87
90
  }
@@ -321,15 +324,7 @@ function validateFields(context, type) {
321
324
  for (var _iterator5 = fields[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
322
325
  var field = _step5.value;
323
326
  // Ensure they are named correctly.
324
- validateName(context, field); // Ensure they were defined at most once.
325
-
326
- var fieldNodes = getAllFieldNodes(type, field.name);
327
-
328
- if (fieldNodes.length > 1) {
329
- context.reportError("Field ".concat(type.name, ".").concat(field.name, " can only be defined once."), fieldNodes);
330
- continue;
331
- } // Ensure the type is an output type
332
-
327
+ validateName(context, field); // Ensure the type is an output type
333
328
 
334
329
  if (!(0, _definition.isOutputType)(field.type)) {
335
330
  context.reportError("The type of ".concat(type.name, ".").concat(field.name, " must be Output Type ") + "but got: ".concat((0, _inspect.default)(field.type), "."), getFieldTypeNode(type, field.name));
@@ -432,104 +427,122 @@ function validateObjectImplementsInterface(context, object, iface) {
432
427
  var objectFieldMap = object.getFields();
433
428
  var ifaceFieldMap = iface.getFields(); // Assert each interface field is implemented.
434
429
 
435
- var _arr = Object.keys(ifaceFieldMap);
430
+ var _iteratorNormalCompletion8 = true;
431
+ var _didIteratorError8 = false;
432
+ var _iteratorError8 = undefined;
436
433
 
437
- for (var _i = 0; _i < _arr.length; _i++) {
438
- var fieldName = _arr[_i];
439
- var objectField = objectFieldMap[fieldName];
440
- var ifaceField = ifaceFieldMap[fieldName]; // Assert interface field exists on object.
434
+ try {
435
+ for (var _iterator8 = (0, _objectEntries.default)(ifaceFieldMap)[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {
436
+ var _ref2 = _step8.value;
437
+ var fieldName = _ref2[0];
438
+ var ifaceField = _ref2[1];
439
+ var objectField = objectFieldMap[fieldName]; // Assert interface field exists on object.
440
+
441
+ if (!objectField) {
442
+ context.reportError("Interface field ".concat(iface.name, ".").concat(fieldName, " expected but ") + "".concat(object.name, " does not provide it."), [getFieldNode(iface, fieldName)].concat(getAllNodes(object)));
443
+ continue;
444
+ } // Assert interface field type is satisfied by object field type, by being
445
+ // a valid subtype. (covariant)
441
446
 
442
- if (!objectField) {
443
- context.reportError("Interface field ".concat(iface.name, ".").concat(fieldName, " expected but ") + "".concat(object.name, " does not provide it."), [getFieldNode(iface, fieldName)].concat(getAllNodes(object)));
444
- continue;
445
- } // Assert interface field type is satisfied by object field type, by being
446
- // a valid subtype. (covariant)
447
447
 
448
+ if (!(0, _typeComparators.isTypeSubTypeOf)(context.schema, objectField.type, ifaceField.type)) {
449
+ context.reportError("Interface field ".concat(iface.name, ".").concat(fieldName, " expects type ") + "".concat((0, _inspect.default)(ifaceField.type), " but ").concat(object.name, ".").concat(fieldName, " ") + "is type ".concat((0, _inspect.default)(objectField.type), "."), [getFieldTypeNode(iface, fieldName), getFieldTypeNode(object, fieldName)]);
450
+ } // Assert each interface field arg is implemented.
448
451
 
449
- if (!(0, _typeComparators.isTypeSubTypeOf)(context.schema, objectField.type, ifaceField.type)) {
450
- context.reportError("Interface field ".concat(iface.name, ".").concat(fieldName, " expects type ") + "".concat((0, _inspect.default)(ifaceField.type), " but ").concat(object.name, ".").concat(fieldName, " ") + "is type ".concat((0, _inspect.default)(objectField.type), "."), [getFieldTypeNode(iface, fieldName), getFieldTypeNode(object, fieldName)]);
451
- } // Assert each interface field arg is implemented.
452
452
 
453
+ var _iteratorNormalCompletion9 = true;
454
+ var _didIteratorError9 = false;
455
+ var _iteratorError9 = undefined;
453
456
 
454
- var _iteratorNormalCompletion8 = true;
455
- var _didIteratorError8 = false;
456
- var _iteratorError8 = undefined;
457
+ try {
458
+ var _loop = function _loop() {
459
+ var ifaceArg = _step9.value;
460
+ var argName = ifaceArg.name;
461
+ var objectArg = (0, _find.default)(objectField.args, function (arg) {
462
+ return arg.name === argName;
463
+ }); // Assert interface field arg exists on object field.
464
+
465
+ if (!objectArg) {
466
+ context.reportError("Interface field argument ".concat(iface.name, ".").concat(fieldName, "(").concat(argName, ":) ") + "expected but ".concat(object.name, ".").concat(fieldName, " does not provide it."), [getFieldArgNode(iface, fieldName, argName), getFieldNode(object, fieldName)]);
467
+ return "continue";
468
+ } // Assert interface field arg type matches object field arg type.
469
+ // (invariant)
470
+ // TODO: change to contravariant?
457
471
 
458
- try {
459
- var _loop = function _loop() {
460
- var ifaceArg = _step8.value;
461
- var argName = ifaceArg.name;
462
- var objectArg = (0, _find.default)(objectField.args, function (arg) {
463
- return arg.name === argName;
464
- }); // Assert interface field arg exists on object field.
465
472
 
466
- if (!objectArg) {
467
- context.reportError("Interface field argument ".concat(iface.name, ".").concat(fieldName, "(").concat(argName, ":) ") + "expected but ".concat(object.name, ".").concat(fieldName, " does not provide it."), [getFieldArgNode(iface, fieldName, argName), getFieldNode(object, fieldName)]);
468
- return "continue";
469
- } // Assert interface field arg type matches object field arg type.
470
- // (invariant)
471
- // TODO: change to contravariant?
473
+ if (!(0, _typeComparators.isEqualType)(ifaceArg.type, objectArg.type)) {
474
+ context.reportError("Interface field argument ".concat(iface.name, ".").concat(fieldName, "(").concat(argName, ":) ") + "expects type ".concat((0, _inspect.default)(ifaceArg.type), " but ") + "".concat(object.name, ".").concat(fieldName, "(").concat(argName, ":) is type ") + "".concat((0, _inspect.default)(objectArg.type), "."), [getFieldArgTypeNode(iface, fieldName, argName), getFieldArgTypeNode(object, fieldName, argName)]);
475
+ } // TODO: validate default values?
472
476
 
477
+ };
473
478
 
474
- if (!(0, _typeComparators.isEqualType)(ifaceArg.type, objectArg.type)) {
475
- context.reportError("Interface field argument ".concat(iface.name, ".").concat(fieldName, "(").concat(argName, ":) ") + "expects type ".concat((0, _inspect.default)(ifaceArg.type), " but ") + "".concat(object.name, ".").concat(fieldName, "(").concat(argName, ":) is type ") + "".concat((0, _inspect.default)(objectArg.type), "."), [getFieldArgTypeNode(iface, fieldName, argName), getFieldArgTypeNode(object, fieldName, argName)]);
476
- } // TODO: validate default values?
479
+ for (var _iterator9 = ifaceField.args[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {
480
+ var _ret = _loop();
477
481
 
478
- };
482
+ if (_ret === "continue") continue;
483
+ } // Assert additional arguments must not be required.
479
484
 
480
- for (var _iterator8 = ifaceField.args[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {
481
- var _ret = _loop();
485
+ } catch (err) {
486
+ _didIteratorError9 = true;
487
+ _iteratorError9 = err;
488
+ } finally {
489
+ try {
490
+ if (!_iteratorNormalCompletion9 && _iterator9.return != null) {
491
+ _iterator9.return();
492
+ }
493
+ } finally {
494
+ if (_didIteratorError9) {
495
+ throw _iteratorError9;
496
+ }
497
+ }
498
+ }
482
499
 
483
- if (_ret === "continue") continue;
484
- } // Assert additional arguments must not be required.
500
+ var _iteratorNormalCompletion10 = true;
501
+ var _didIteratorError10 = false;
502
+ var _iteratorError10 = undefined;
485
503
 
486
- } catch (err) {
487
- _didIteratorError8 = true;
488
- _iteratorError8 = err;
489
- } finally {
490
504
  try {
491
- if (!_iteratorNormalCompletion8 && _iterator8.return != null) {
492
- _iterator8.return();
505
+ var _loop2 = function _loop2() {
506
+ var objectArg = _step10.value;
507
+ var argName = objectArg.name;
508
+ var ifaceArg = (0, _find.default)(ifaceField.args, function (arg) {
509
+ return arg.name === argName;
510
+ });
511
+
512
+ if (!ifaceArg && (0, _definition.isRequiredArgument)(objectArg)) {
513
+ context.reportError("Object field ".concat(object.name, ".").concat(fieldName, " includes required ") + "argument ".concat(argName, " that is missing from the Interface field ") + "".concat(iface.name, ".").concat(fieldName, "."), [getFieldArgNode(object, fieldName, argName), getFieldNode(iface, fieldName)]);
514
+ }
515
+ };
516
+
517
+ for (var _iterator10 = objectField.args[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) {
518
+ _loop2();
493
519
  }
520
+ } catch (err) {
521
+ _didIteratorError10 = true;
522
+ _iteratorError10 = err;
494
523
  } finally {
495
- if (_didIteratorError8) {
496
- throw _iteratorError8;
524
+ try {
525
+ if (!_iteratorNormalCompletion10 && _iterator10.return != null) {
526
+ _iterator10.return();
527
+ }
528
+ } finally {
529
+ if (_didIteratorError10) {
530
+ throw _iteratorError10;
531
+ }
497
532
  }
498
533
  }
499
534
  }
500
-
501
- var _iteratorNormalCompletion9 = true;
502
- var _didIteratorError9 = false;
503
- var _iteratorError9 = undefined;
504
-
535
+ } catch (err) {
536
+ _didIteratorError8 = true;
537
+ _iteratorError8 = err;
538
+ } finally {
505
539
  try {
506
- var _loop2 = function _loop2() {
507
- var objectArg = _step9.value;
508
- var argName = objectArg.name;
509
- var ifaceArg = (0, _find.default)(ifaceField.args, function (arg) {
510
- return arg.name === argName;
511
- });
512
-
513
- if (!ifaceArg && (0, _definition.isRequiredArgument)(objectArg)) {
514
- context.reportError("Object field ".concat(object.name, ".").concat(fieldName, " includes required ") + "argument ".concat(argName, " that is missing from the Interface field ") + "".concat(iface.name, ".").concat(fieldName, "."), [getFieldArgNode(object, fieldName, argName), getFieldNode(iface, fieldName)]);
515
- }
516
- };
517
-
518
- for (var _iterator9 = objectField.args[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {
519
- _loop2();
540
+ if (!_iteratorNormalCompletion8 && _iterator8.return != null) {
541
+ _iterator8.return();
520
542
  }
521
- } catch (err) {
522
- _didIteratorError9 = true;
523
- _iteratorError9 = err;
524
543
  } finally {
525
- try {
526
- if (!_iteratorNormalCompletion9 && _iterator9.return != null) {
527
- _iterator9.return();
528
- }
529
- } finally {
530
- if (_didIteratorError9) {
531
- throw _iteratorError9;
532
- }
544
+ if (_didIteratorError8) {
545
+ throw _iteratorError8;
533
546
  }
534
547
  }
535
548
  }
@@ -543,13 +556,13 @@ function validateUnionMembers(context, union) {
543
556
  }
544
557
 
545
558
  var includedTypeNames = Object.create(null);
546
- var _iteratorNormalCompletion10 = true;
547
- var _didIteratorError10 = false;
548
- var _iteratorError10 = undefined;
559
+ var _iteratorNormalCompletion11 = true;
560
+ var _didIteratorError11 = false;
561
+ var _iteratorError11 = undefined;
549
562
 
550
563
  try {
551
- for (var _iterator10 = memberTypes[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) {
552
- var memberType = _step10.value;
564
+ for (var _iterator11 = memberTypes[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) {
565
+ var memberType = _step11.value;
553
566
 
554
567
  if (includedTypeNames[memberType.name]) {
555
568
  context.reportError("Union type ".concat(union.name, " can only include type ") + "".concat(memberType.name, " once."), getUnionMemberTypeNodes(union, memberType.name));
@@ -563,16 +576,16 @@ function validateUnionMembers(context, union) {
563
576
  }
564
577
  }
565
578
  } catch (err) {
566
- _didIteratorError10 = true;
567
- _iteratorError10 = err;
579
+ _didIteratorError11 = true;
580
+ _iteratorError11 = err;
568
581
  } finally {
569
582
  try {
570
- if (!_iteratorNormalCompletion10 && _iterator10.return != null) {
571
- _iterator10.return();
583
+ if (!_iteratorNormalCompletion11 && _iterator11.return != null) {
584
+ _iterator11.return();
572
585
  }
573
586
  } finally {
574
- if (_didIteratorError10) {
575
- throw _iteratorError10;
587
+ if (_didIteratorError11) {
588
+ throw _iteratorError11;
576
589
  }
577
590
  }
578
591
  }
@@ -585,21 +598,14 @@ function validateEnumValues(context, enumType) {
585
598
  context.reportError("Enum type ".concat(enumType.name, " must define one or more values."), getAllNodes(enumType));
586
599
  }
587
600
 
588
- var _iteratorNormalCompletion11 = true;
589
- var _didIteratorError11 = false;
590
- var _iteratorError11 = undefined;
601
+ var _iteratorNormalCompletion12 = true;
602
+ var _didIteratorError12 = false;
603
+ var _iteratorError12 = undefined;
591
604
 
592
605
  try {
593
- for (var _iterator11 = enumValues[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) {
594
- var enumValue = _step11.value;
595
- var valueName = enumValue.name; // Ensure no duplicates.
596
-
597
- var allNodes = getEnumValueNodes(enumType, valueName);
598
-
599
- if (allNodes && allNodes.length > 1) {
600
- context.reportError("Enum type ".concat(enumType.name, " can include value ").concat(valueName, " only once."), allNodes);
601
- } // Ensure valid name.
602
-
606
+ for (var _iterator12 = enumValues[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) {
607
+ var enumValue = _step12.value;
608
+ var valueName = enumValue.name; // Ensure valid name.
603
609
 
604
610
  validateName(context, enumValue);
605
611
 
@@ -608,16 +614,16 @@ function validateEnumValues(context, enumType) {
608
614
  }
609
615
  }
610
616
  } catch (err) {
611
- _didIteratorError11 = true;
612
- _iteratorError11 = err;
617
+ _didIteratorError12 = true;
618
+ _iteratorError12 = err;
613
619
  } finally {
614
620
  try {
615
- if (!_iteratorNormalCompletion11 && _iterator11.return != null) {
616
- _iterator11.return();
621
+ if (!_iteratorNormalCompletion12 && _iterator12.return != null) {
622
+ _iterator12.return();
617
623
  }
618
624
  } finally {
619
- if (_didIteratorError11) {
620
- throw _iteratorError11;
625
+ if (_didIteratorError12) {
626
+ throw _iteratorError12;
621
627
  }
622
628
  }
623
629
  }
@@ -631,32 +637,31 @@ function validateInputFields(context, inputObj) {
631
637
  } // Ensure the arguments are valid
632
638
 
633
639
 
634
- var _iteratorNormalCompletion12 = true;
635
- var _didIteratorError12 = false;
636
- var _iteratorError12 = undefined;
640
+ var _iteratorNormalCompletion13 = true;
641
+ var _didIteratorError13 = false;
642
+ var _iteratorError13 = undefined;
637
643
 
638
644
  try {
639
- for (var _iterator12 = fields[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) {
640
- var field = _step12.value;
645
+ for (var _iterator13 = fields[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) {
646
+ var field = _step13.value;
641
647
  // Ensure they are named correctly.
642
- validateName(context, field); // TODO: Ensure they are unique per field.
643
- // Ensure the type is an input type
648
+ validateName(context, field); // Ensure the type is an input type
644
649
 
645
650
  if (!(0, _definition.isInputType)(field.type)) {
646
651
  context.reportError("The type of ".concat(inputObj.name, ".").concat(field.name, " must be Input Type ") + "but got: ".concat((0, _inspect.default)(field.type), "."), field.astNode && field.astNode.type);
647
652
  }
648
653
  }
649
654
  } catch (err) {
650
- _didIteratorError12 = true;
651
- _iteratorError12 = err;
655
+ _didIteratorError13 = true;
656
+ _iteratorError13 = err;
652
657
  } finally {
653
658
  try {
654
- if (!_iteratorNormalCompletion12 && _iterator12.return != null) {
655
- _iterator12.return();
659
+ if (!_iteratorNormalCompletion13 && _iterator13.return != null) {
660
+ _iterator13.return();
656
661
  }
657
662
  } finally {
658
- if (_didIteratorError12) {
659
- throw _iteratorError12;
663
+ if (_didIteratorError13) {
664
+ throw _iteratorError13;
660
665
  }
661
666
  }
662
667
  }
@@ -670,13 +675,13 @@ function getAllNodes(object) {
670
675
 
671
676
  function getAllSubNodes(object, getter) {
672
677
  var result = [];
673
- var _iteratorNormalCompletion13 = true;
674
- var _didIteratorError13 = false;
675
- var _iteratorError13 = undefined;
678
+ var _iteratorNormalCompletion14 = true;
679
+ var _didIteratorError14 = false;
680
+ var _iteratorError14 = undefined;
676
681
 
677
682
  try {
678
- for (var _iterator13 = getAllNodes(object)[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) {
679
- var astNode = _step13.value;
683
+ for (var _iterator14 = getAllNodes(object)[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) {
684
+ var astNode = _step14.value;
680
685
 
681
686
  if (astNode) {
682
687
  var subNodes = getter(astNode);
@@ -687,16 +692,16 @@ function getAllSubNodes(object, getter) {
687
692
  }
688
693
  }
689
694
  } catch (err) {
690
- _didIteratorError13 = true;
691
- _iteratorError13 = err;
695
+ _didIteratorError14 = true;
696
+ _iteratorError14 = err;
692
697
  } finally {
693
698
  try {
694
- if (!_iteratorNormalCompletion13 && _iterator13.return != null) {
695
- _iterator13.return();
699
+ if (!_iteratorNormalCompletion14 && _iterator14.return != null) {
700
+ _iterator14.return();
696
701
  }
697
702
  } finally {
698
- if (_didIteratorError13) {
699
- throw _iteratorError13;
703
+ if (_didIteratorError14) {
704
+ throw _iteratorError14;
700
705
  }
701
706
  }
702
707
  }
@@ -717,13 +722,9 @@ function getAllImplementsInterfaceNodes(type, iface) {
717
722
  }
718
723
 
719
724
  function getFieldNode(type, fieldName) {
720
- return getAllFieldNodes(type, fieldName)[0];
721
- }
722
-
723
- function getAllFieldNodes(type, fieldName) {
724
- return getAllSubNodes(type, function (typeNode) {
725
+ return (0, _find.default)(getAllSubNodes(type, function (typeNode) {
725
726
  return typeNode.fields;
726
- }).filter(function (fieldNode) {
727
+ }), function (fieldNode) {
727
728
  return fieldNode.name.value === fieldName;
728
729
  });
729
730
  }
@@ -742,29 +743,29 @@ function getAllFieldArgNodes(type, fieldName, argName) {
742
743
  var fieldNode = getFieldNode(type, fieldName);
743
744
 
744
745
  if (fieldNode && fieldNode.arguments) {
745
- var _iteratorNormalCompletion14 = true;
746
- var _didIteratorError14 = false;
747
- var _iteratorError14 = undefined;
746
+ var _iteratorNormalCompletion15 = true;
747
+ var _didIteratorError15 = false;
748
+ var _iteratorError15 = undefined;
748
749
 
749
750
  try {
750
- for (var _iterator14 = fieldNode.arguments[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) {
751
- var node = _step14.value;
751
+ for (var _iterator15 = fieldNode.arguments[Symbol.iterator](), _step15; !(_iteratorNormalCompletion15 = (_step15 = _iterator15.next()).done); _iteratorNormalCompletion15 = true) {
752
+ var node = _step15.value;
752
753
 
753
754
  if (node.name.value === argName) {
754
755
  argNodes.push(node);
755
756
  }
756
757
  }
757
758
  } catch (err) {
758
- _didIteratorError14 = true;
759
- _iteratorError14 = err;
759
+ _didIteratorError15 = true;
760
+ _iteratorError15 = err;
760
761
  } finally {
761
762
  try {
762
- if (!_iteratorNormalCompletion14 && _iterator14.return != null) {
763
- _iterator14.return();
763
+ if (!_iteratorNormalCompletion15 && _iterator15.return != null) {
764
+ _iterator15.return();
764
765
  }
765
766
  } finally {
766
- if (_didIteratorError14) {
767
- throw _iteratorError14;
767
+ if (_didIteratorError15) {
768
+ throw _iteratorError15;
768
769
  }
769
770
  }
770
771
  }
@@ -797,12 +798,4 @@ function getUnionMemberTypeNodes(union, typeName) {
797
798
  }).filter(function (typeNode) {
798
799
  return typeNode.name.value === typeName;
799
800
  });
800
- }
801
-
802
- function getEnumValueNodes(enumType, valueName) {
803
- return getAllSubNodes(enumType, function (enumNode) {
804
- return enumNode.values;
805
- }).filter(function (valueNode) {
806
- return valueNode.name.value === valueName;
807
- });
808
801
  }
@@ -7,6 +7,9 @@
7
7
  * @flow strict
8
8
  */
9
9
 
10
+ import find from '../polyfills/find';
11
+ import objectValues from '../polyfills/objectValues';
12
+ import objectEntries from '../polyfills/objectEntries';
10
13
  import {
11
14
  isObjectType,
12
15
  isInterfaceType,
@@ -28,17 +31,13 @@ import type {
28
31
  import { isDirective } from './directives';
29
32
  import type { GraphQLDirective } from './directives';
30
33
  import { isIntrospectionType } from './introspection';
31
- import { isSchema } from './schema';
34
+ import { assertSchema } from './schema';
32
35
  import type { GraphQLSchema } from './schema';
33
36
  import inspect from '../jsutils/inspect';
34
- import find from '../jsutils/find';
35
- import invariant from '../jsutils/invariant';
36
- import objectValues from '../jsutils/objectValues';
37
37
  import { GraphQLError } from '../error/GraphQLError';
38
38
  import type {
39
39
  ASTNode,
40
40
  FieldDefinitionNode,
41
- EnumValueDefinitionNode,
42
41
  InputValueDefinitionNode,
43
42
  NamedTypeNode,
44
43
  TypeNode,
@@ -57,10 +56,7 @@ export function validateSchema(
57
56
  schema: GraphQLSchema,
58
57
  ): $ReadOnlyArray<GraphQLError> {
59
58
  // First check to ensure the provided value is in fact a GraphQLSchema.
60
- invariant(
61
- isSchema(schema),
62
- `Expected ${inspect(schema)} to be a GraphQL schema.`,
63
- );
59
+ assertSchema(schema);
64
60
 
65
61
  // If this Schema has already been validated, return the previous results.
66
62
  if (schema.__validationErrors) {
@@ -284,16 +280,6 @@ function validateFields(
284
280
  // Ensure they are named correctly.
285
281
  validateName(context, field);
286
282
 
287
- // Ensure they were defined at most once.
288
- const fieldNodes = getAllFieldNodes(type, field.name);
289
- if (fieldNodes.length > 1) {
290
- context.reportError(
291
- `Field ${type.name}.${field.name} can only be defined once.`,
292
- fieldNodes,
293
- );
294
- continue;
295
- }
296
-
297
283
  // Ensure the type is an output type
298
284
  if (!isOutputType(field.type)) {
299
285
  context.reportError(
@@ -369,9 +355,8 @@ function validateObjectImplementsInterface(
369
355
  const ifaceFieldMap = iface.getFields();
370
356
 
371
357
  // Assert each interface field is implemented.
372
- for (const fieldName of Object.keys(ifaceFieldMap)) {
358
+ for (const [fieldName, ifaceField] of objectEntries(ifaceFieldMap)) {
373
359
  const objectField = objectFieldMap[fieldName];
374
- const ifaceField = ifaceFieldMap[fieldName];
375
360
 
376
361
  // Assert interface field exists on object.
377
362
  if (!objectField) {
@@ -503,15 +488,6 @@ function validateEnumValues(
503
488
  for (const enumValue of enumValues) {
504
489
  const valueName = enumValue.name;
505
490
 
506
- // Ensure no duplicates.
507
- const allNodes = getEnumValueNodes(enumType, valueName);
508
- if (allNodes && allNodes.length > 1) {
509
- context.reportError(
510
- `Enum type ${enumType.name} can include value ${valueName} only once.`,
511
- allNodes,
512
- );
513
- }
514
-
515
491
  // Ensure valid name.
516
492
  validateName(context, enumValue);
517
493
  if (valueName === 'true' || valueName === 'false' || valueName === 'null') {
@@ -541,8 +517,6 @@ function validateInputFields(
541
517
  // Ensure they are named correctly.
542
518
  validateName(context, field);
543
519
 
544
- // TODO: Ensure they are unique per field.
545
-
546
520
  // Ensure the type is an input type
547
521
  if (!isInputType(field.type)) {
548
522
  context.reportError(
@@ -606,14 +580,8 @@ function getFieldNode(
606
580
  type: GraphQLObjectType | GraphQLInterfaceType,
607
581
  fieldName: string,
608
582
  ): ?FieldDefinitionNode {
609
- return getAllFieldNodes(type, fieldName)[0];
610
- }
611
-
612
- function getAllFieldNodes(
613
- type: GraphQLObjectType | GraphQLInterfaceType,
614
- fieldName: string,
615
- ): $ReadOnlyArray<FieldDefinitionNode> {
616
- return getAllSubNodes(type, typeNode => typeNode.fields).filter(
583
+ return find(
584
+ getAllSubNodes(type, typeNode => typeNode.fields),
617
585
  fieldNode => fieldNode.name.value === fieldName,
618
586
  );
619
587
  }
@@ -686,12 +654,3 @@ function getUnionMemberTypeNodes(
686
654
  typeNode => typeNode.name.value === typeName,
687
655
  );
688
656
  }
689
-
690
- function getEnumValueNodes(
691
- enumType: GraphQLEnumType,
692
- valueName: string,
693
- ): ?$ReadOnlyArray<EnumValueDefinitionNode> {
694
- return getAllSubNodes(enumType, enumNode => enumNode.values).filter(
695
- valueNode => valueNode.name.value === valueName,
696
- );
697
- }