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
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Copyright (c) 2018-present, Facebook, Inc.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ *
8
+ */
9
+ import { GraphQLError } from '../../error/GraphQLError';
10
+ import { isObjectType, isInterfaceType, isInputObjectType } from '../../type/definition';
11
+ export function duplicateFieldDefinitionNameMessage(typeName, fieldName) {
12
+ return "Field \"".concat(typeName, ".").concat(fieldName, "\" can only be defined once.");
13
+ }
14
+ export function existedFieldDefinitionNameMessage(typeName, fieldName) {
15
+ return "Field \"".concat(typeName, ".").concat(fieldName, "\" already exists in the schema. ") + 'It cannot also be defined in this type extension.';
16
+ }
17
+ /**
18
+ * Unique field definition names
19
+ *
20
+ * A GraphQL complex type is only valid if all its fields are uniquely named.
21
+ */
22
+
23
+ export function UniqueFieldDefinitionNames(context) {
24
+ var schema = context.getSchema();
25
+ var existingTypeMap = schema ? schema.getTypeMap() : Object.create(null);
26
+ var knownFieldNames = Object.create(null);
27
+ return {
28
+ InputObjectTypeDefinition: checkFieldUniqueness,
29
+ InputObjectTypeExtension: checkFieldUniqueness,
30
+ InterfaceTypeDefinition: checkFieldUniqueness,
31
+ InterfaceTypeExtension: checkFieldUniqueness,
32
+ ObjectTypeDefinition: checkFieldUniqueness,
33
+ ObjectTypeExtension: checkFieldUniqueness
34
+ };
35
+
36
+ function checkFieldUniqueness(node) {
37
+ var typeName = node.name.value;
38
+
39
+ if (!knownFieldNames[typeName]) {
40
+ knownFieldNames[typeName] = Object.create(null);
41
+ }
42
+
43
+ var fieldNames = knownFieldNames[typeName];
44
+
45
+ if (node.fields) {
46
+ var _iteratorNormalCompletion = true;
47
+ var _didIteratorError = false;
48
+ var _iteratorError = undefined;
49
+
50
+ try {
51
+ for (var _iterator = node.fields[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
52
+ var fieldDef = _step.value;
53
+ var fieldName = fieldDef.name.value;
54
+
55
+ if (hasField(existingTypeMap[typeName], fieldName)) {
56
+ context.reportError(new GraphQLError(existedFieldDefinitionNameMessage(typeName, fieldName), fieldDef.name));
57
+ continue;
58
+ }
59
+
60
+ if (fieldNames[fieldName]) {
61
+ context.reportError(new GraphQLError(duplicateFieldDefinitionNameMessage(typeName, fieldName), [fieldNames[fieldName], fieldDef.name]));
62
+ } else {
63
+ fieldNames[fieldName] = fieldDef.name;
64
+ }
65
+ }
66
+ } catch (err) {
67
+ _didIteratorError = true;
68
+ _iteratorError = err;
69
+ } finally {
70
+ try {
71
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
72
+ _iterator.return();
73
+ }
74
+ } finally {
75
+ if (_didIteratorError) {
76
+ throw _iteratorError;
77
+ }
78
+ }
79
+ }
80
+ }
81
+
82
+ return false;
83
+ }
84
+ }
85
+
86
+ function hasField(type, fieldName) {
87
+ if (isObjectType(type) || isInterfaceType(type) || isInputObjectType(type)) {
88
+ return type.getFields()[fieldName];
89
+ }
90
+
91
+ return false;
92
+ }
@@ -14,7 +14,7 @@ var _GraphQLError = require("../../error/GraphQLError");
14
14
  * This source code is licensed under the MIT license found in the
15
15
  * LICENSE file in the root directory of this source tree.
16
16
  *
17
- * strict
17
+ *
18
18
  */
19
19
  function duplicateFragmentNameMessage(fragName) {
20
20
  return "There can be only one fragment named \"".concat(fragName, "\".");
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * strict
7
+ *
8
8
  */
9
9
  import { GraphQLError } from '../../error/GraphQLError';
10
10
  export function duplicateFragmentNameMessage(fragName) {
@@ -14,7 +14,7 @@ var _GraphQLError = require("../../error/GraphQLError");
14
14
  * This source code is licensed under the MIT license found in the
15
15
  * LICENSE file in the root directory of this source tree.
16
16
  *
17
- * strict
17
+ *
18
18
  */
19
19
  function duplicateInputFieldMessage(fieldName) {
20
20
  return "There can be only one input field named \"".concat(fieldName, "\".");
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * strict
7
+ *
8
8
  */
9
9
  import { GraphQLError } from '../../error/GraphQLError';
10
10
  export function duplicateInputFieldMessage(fieldName) {
@@ -14,7 +14,7 @@ var _GraphQLError = require("../../error/GraphQLError");
14
14
  * This source code is licensed under the MIT license found in the
15
15
  * LICENSE file in the root directory of this source tree.
16
16
  *
17
- * strict
17
+ *
18
18
  */
19
19
  function duplicateOperationNameMessage(operationName) {
20
20
  return "There can be only one operation named \"".concat(operationName, "\".");
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * strict
7
+ *
8
8
  */
9
9
  import { GraphQLError } from '../../error/GraphQLError';
10
10
  export function duplicateOperationNameMessage(operationName) {
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.duplicateOperationTypeMessage = duplicateOperationTypeMessage;
7
+ exports.existedOperationTypeMessage = existedOperationTypeMessage;
8
+ exports.UniqueOperationTypes = UniqueOperationTypes;
9
+
10
+ var _GraphQLError = require("../../error/GraphQLError");
11
+
12
+ /**
13
+ * Copyright (c) 2018-present, Facebook, Inc.
14
+ *
15
+ * This source code is licensed under the MIT license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ *
18
+ *
19
+ */
20
+ function duplicateOperationTypeMessage(operation) {
21
+ return "There can be only one ".concat(operation, " type in schema.");
22
+ }
23
+
24
+ function existedOperationTypeMessage(operation) {
25
+ return "Type for ".concat(operation, " already defined in the schema. ") + 'It cannot be redefined.';
26
+ }
27
+ /**
28
+ * Unique operation types
29
+ *
30
+ * A GraphQL document is only valid if it has only one type per operation.
31
+ */
32
+
33
+
34
+ function UniqueOperationTypes(context) {
35
+ var schema = context.getSchema();
36
+ var definedOperationTypes = Object.create(null);
37
+ var existingOperationTypes = schema ? {
38
+ query: schema.getQueryType(),
39
+ mutation: schema.getMutationType(),
40
+ subscription: schema.getSubscriptionType()
41
+ } : {};
42
+ return {
43
+ SchemaDefinition: checkOperationTypes,
44
+ SchemaExtension: checkOperationTypes
45
+ };
46
+
47
+ function checkOperationTypes(node) {
48
+ if (node.operationTypes) {
49
+ var _iteratorNormalCompletion = true;
50
+ var _didIteratorError = false;
51
+ var _iteratorError = undefined;
52
+
53
+ try {
54
+ for (var _iterator = (node.operationTypes || [])[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
55
+ var operationType = _step.value;
56
+ var operation = operationType.operation;
57
+ var alreadyDefinedOperationType = definedOperationTypes[operation];
58
+
59
+ if (existingOperationTypes[operation]) {
60
+ context.reportError(new _GraphQLError.GraphQLError(existedOperationTypeMessage(operation), operationType));
61
+ } else if (alreadyDefinedOperationType) {
62
+ context.reportError(new _GraphQLError.GraphQLError(duplicateOperationTypeMessage(operation), [alreadyDefinedOperationType, operationType]));
63
+ } else {
64
+ definedOperationTypes[operation] = operationType;
65
+ }
66
+ }
67
+ } catch (err) {
68
+ _didIteratorError = true;
69
+ _iteratorError = err;
70
+ } finally {
71
+ try {
72
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
73
+ _iterator.return();
74
+ }
75
+ } finally {
76
+ if (_didIteratorError) {
77
+ throw _iteratorError;
78
+ }
79
+ }
80
+ }
81
+ }
82
+
83
+ return false;
84
+ }
85
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Copyright (c) 2018-present, Facebook, Inc.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict
8
+ */
9
+
10
+ import type { SDLValidationContext } from '../ValidationContext';
11
+ import { GraphQLError } from '../../error/GraphQLError';
12
+ import type { ASTVisitor } from '../../language/visitor';
13
+
14
+ export function duplicateOperationTypeMessage(operation: string): string {
15
+ return `There can be only one ${operation} type in schema.`;
16
+ }
17
+
18
+ export function existedOperationTypeMessage(operation: string): string {
19
+ return (
20
+ `Type for ${operation} already defined in the schema. ` +
21
+ 'It cannot be redefined.'
22
+ );
23
+ }
24
+
25
+ /**
26
+ * Unique operation types
27
+ *
28
+ * A GraphQL document is only valid if it has only one type per operation.
29
+ */
30
+ export function UniqueOperationTypes(
31
+ context: SDLValidationContext,
32
+ ): ASTVisitor {
33
+ const schema = context.getSchema();
34
+ const definedOperationTypes = Object.create(null);
35
+ const existingOperationTypes = schema
36
+ ? {
37
+ query: schema.getQueryType(),
38
+ mutation: schema.getMutationType(),
39
+ subscription: schema.getSubscriptionType(),
40
+ }
41
+ : {};
42
+
43
+ return {
44
+ SchemaDefinition: checkOperationTypes,
45
+ SchemaExtension: checkOperationTypes,
46
+ };
47
+
48
+ function checkOperationTypes(node) {
49
+ if (node.operationTypes) {
50
+ for (const operationType of node.operationTypes || []) {
51
+ const operation = operationType.operation;
52
+ const alreadyDefinedOperationType = definedOperationTypes[operation];
53
+
54
+ if (existingOperationTypes[operation]) {
55
+ context.reportError(
56
+ new GraphQLError(
57
+ existedOperationTypeMessage(operation),
58
+ operationType,
59
+ ),
60
+ );
61
+ } else if (alreadyDefinedOperationType) {
62
+ context.reportError(
63
+ new GraphQLError(duplicateOperationTypeMessage(operation), [
64
+ alreadyDefinedOperationType,
65
+ operationType,
66
+ ]),
67
+ );
68
+ } else {
69
+ definedOperationTypes[operation] = operationType;
70
+ }
71
+ }
72
+ }
73
+
74
+ return false;
75
+ }
76
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Copyright (c) 2018-present, Facebook, Inc.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ *
8
+ */
9
+ import { GraphQLError } from '../../error/GraphQLError';
10
+ export function duplicateOperationTypeMessage(operation) {
11
+ return "There can be only one ".concat(operation, " type in schema.");
12
+ }
13
+ export function existedOperationTypeMessage(operation) {
14
+ return "Type for ".concat(operation, " already defined in the schema. ") + 'It cannot be redefined.';
15
+ }
16
+ /**
17
+ * Unique operation types
18
+ *
19
+ * A GraphQL document is only valid if it has only one type per operation.
20
+ */
21
+
22
+ export function UniqueOperationTypes(context) {
23
+ var schema = context.getSchema();
24
+ var definedOperationTypes = Object.create(null);
25
+ var existingOperationTypes = schema ? {
26
+ query: schema.getQueryType(),
27
+ mutation: schema.getMutationType(),
28
+ subscription: schema.getSubscriptionType()
29
+ } : {};
30
+ return {
31
+ SchemaDefinition: checkOperationTypes,
32
+ SchemaExtension: checkOperationTypes
33
+ };
34
+
35
+ function checkOperationTypes(node) {
36
+ if (node.operationTypes) {
37
+ var _iteratorNormalCompletion = true;
38
+ var _didIteratorError = false;
39
+ var _iteratorError = undefined;
40
+
41
+ try {
42
+ for (var _iterator = (node.operationTypes || [])[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
43
+ var operationType = _step.value;
44
+ var operation = operationType.operation;
45
+ var alreadyDefinedOperationType = definedOperationTypes[operation];
46
+
47
+ if (existingOperationTypes[operation]) {
48
+ context.reportError(new GraphQLError(existedOperationTypeMessage(operation), operationType));
49
+ } else if (alreadyDefinedOperationType) {
50
+ context.reportError(new GraphQLError(duplicateOperationTypeMessage(operation), [alreadyDefinedOperationType, operationType]));
51
+ } else {
52
+ definedOperationTypes[operation] = operationType;
53
+ }
54
+ }
55
+ } catch (err) {
56
+ _didIteratorError = true;
57
+ _iteratorError = err;
58
+ } finally {
59
+ try {
60
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
61
+ _iterator.return();
62
+ }
63
+ } finally {
64
+ if (_didIteratorError) {
65
+ throw _iteratorError;
66
+ }
67
+ }
68
+ }
69
+ }
70
+
71
+ return false;
72
+ }
73
+ }
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.duplicateTypeNameMessage = duplicateTypeNameMessage;
7
+ exports.existedTypeNameMessage = existedTypeNameMessage;
8
+ exports.UniqueTypeNames = UniqueTypeNames;
9
+
10
+ var _GraphQLError = require("../../error/GraphQLError");
11
+
12
+ /**
13
+ * Copyright (c) 2018-present, Facebook, Inc.
14
+ *
15
+ * This source code is licensed under the MIT license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ *
18
+ *
19
+ */
20
+ function duplicateTypeNameMessage(typeName) {
21
+ return "There can be only one type named \"".concat(typeName, "\".");
22
+ }
23
+
24
+ function existedTypeNameMessage(typeName) {
25
+ return "Type \"".concat(typeName, "\" already exists in the schema. ") + 'It cannot also be defined in this type definition.';
26
+ }
27
+ /**
28
+ * Unique type names
29
+ *
30
+ * A GraphQL document is only valid if all defined types have unique names.
31
+ */
32
+
33
+
34
+ function UniqueTypeNames(context) {
35
+ var knownTypeNames = Object.create(null);
36
+ var schema = context.getSchema();
37
+ return {
38
+ ScalarTypeDefinition: checkTypeName,
39
+ ObjectTypeDefinition: checkTypeName,
40
+ InterfaceTypeDefinition: checkTypeName,
41
+ UnionTypeDefinition: checkTypeName,
42
+ EnumTypeDefinition: checkTypeName,
43
+ InputObjectTypeDefinition: checkTypeName
44
+ };
45
+
46
+ function checkTypeName(node) {
47
+ var typeName = node.name.value;
48
+
49
+ if (schema && schema.getType(typeName)) {
50
+ context.reportError(new _GraphQLError.GraphQLError(existedTypeNameMessage(typeName), node.name));
51
+ return;
52
+ }
53
+
54
+ if (knownTypeNames[typeName]) {
55
+ context.reportError(new _GraphQLError.GraphQLError(duplicateTypeNameMessage(typeName), [knownTypeNames[typeName], node.name]));
56
+ } else {
57
+ knownTypeNames[typeName] = node.name;
58
+ }
59
+
60
+ return false;
61
+ }
62
+ }
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Copyright (c) 2018-present, Facebook, Inc.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict
8
+ */
9
+
10
+ import type { SDLValidationContext } from '../ValidationContext';
11
+ import { GraphQLError } from '../../error/GraphQLError';
12
+ import type { ASTVisitor } from '../../language/visitor';
13
+ import type { TypeDefinitionNode } from '../../language/ast';
14
+
15
+ export function duplicateTypeNameMessage(typeName: string): string {
16
+ return `There can be only one type named "${typeName}".`;
17
+ }
18
+
19
+ export function existedTypeNameMessage(typeName: string): string {
20
+ return (
21
+ `Type "${typeName}" already exists in the schema. ` +
22
+ 'It cannot also be defined in this type definition.'
23
+ );
24
+ }
25
+
26
+ /**
27
+ * Unique type names
28
+ *
29
+ * A GraphQL document is only valid if all defined types have unique names.
30
+ */
31
+ export function UniqueTypeNames(context: SDLValidationContext): ASTVisitor {
32
+ const knownTypeNames = Object.create(null);
33
+ const schema = context.getSchema();
34
+
35
+ return {
36
+ ScalarTypeDefinition: checkTypeName,
37
+ ObjectTypeDefinition: checkTypeName,
38
+ InterfaceTypeDefinition: checkTypeName,
39
+ UnionTypeDefinition: checkTypeName,
40
+ EnumTypeDefinition: checkTypeName,
41
+ InputObjectTypeDefinition: checkTypeName,
42
+ };
43
+
44
+ function checkTypeName(node: TypeDefinitionNode) {
45
+ const typeName = node.name.value;
46
+
47
+ if (schema && schema.getType(typeName)) {
48
+ context.reportError(
49
+ new GraphQLError(existedTypeNameMessage(typeName), node.name),
50
+ );
51
+ return;
52
+ }
53
+
54
+ if (knownTypeNames[typeName]) {
55
+ context.reportError(
56
+ new GraphQLError(duplicateTypeNameMessage(typeName), [
57
+ knownTypeNames[typeName],
58
+ node.name,
59
+ ]),
60
+ );
61
+ } else {
62
+ knownTypeNames[typeName] = node.name;
63
+ }
64
+
65
+ return false;
66
+ }
67
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Copyright (c) 2018-present, Facebook, Inc.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ *
8
+ */
9
+ import { GraphQLError } from '../../error/GraphQLError';
10
+ export function duplicateTypeNameMessage(typeName) {
11
+ return "There can be only one type named \"".concat(typeName, "\".");
12
+ }
13
+ export function existedTypeNameMessage(typeName) {
14
+ return "Type \"".concat(typeName, "\" already exists in the schema. ") + 'It cannot also be defined in this type definition.';
15
+ }
16
+ /**
17
+ * Unique type names
18
+ *
19
+ * A GraphQL document is only valid if all defined types have unique names.
20
+ */
21
+
22
+ export function UniqueTypeNames(context) {
23
+ var knownTypeNames = Object.create(null);
24
+ var schema = context.getSchema();
25
+ return {
26
+ ScalarTypeDefinition: checkTypeName,
27
+ ObjectTypeDefinition: checkTypeName,
28
+ InterfaceTypeDefinition: checkTypeName,
29
+ UnionTypeDefinition: checkTypeName,
30
+ EnumTypeDefinition: checkTypeName,
31
+ InputObjectTypeDefinition: checkTypeName
32
+ };
33
+
34
+ function checkTypeName(node) {
35
+ var typeName = node.name.value;
36
+
37
+ if (schema && schema.getType(typeName)) {
38
+ context.reportError(new GraphQLError(existedTypeNameMessage(typeName), node.name));
39
+ return;
40
+ }
41
+
42
+ if (knownTypeNames[typeName]) {
43
+ context.reportError(new GraphQLError(duplicateTypeNameMessage(typeName), [knownTypeNames[typeName], node.name]));
44
+ } else {
45
+ knownTypeNames[typeName] = node.name;
46
+ }
47
+
48
+ return false;
49
+ }
50
+ }
@@ -14,7 +14,7 @@ var _GraphQLError = require("../../error/GraphQLError");
14
14
  * This source code is licensed under the MIT license found in the
15
15
  * LICENSE file in the root directory of this source tree.
16
16
  *
17
- * strict
17
+ *
18
18
  */
19
19
  function duplicateVariableMessage(variableName) {
20
20
  return "There can be only one variable named \"".concat(variableName, "\".");
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * strict
7
+ *
8
8
  */
9
9
  import { GraphQLError } from '../../error/GraphQLError';
10
10
  export function duplicateVariableMessage(variableName) {
@@ -8,6 +8,8 @@ exports.requiredFieldMessage = requiredFieldMessage;
8
8
  exports.unknownFieldMessage = unknownFieldMessage;
9
9
  exports.ValuesOfCorrectType = ValuesOfCorrectType;
10
10
 
11
+ var _objectValues = _interopRequireDefault(require("../../polyfills/objectValues"));
12
+
11
13
  var _GraphQLError = require("../../error/GraphQLError");
12
14
 
13
15
  var _printer = require("../../language/printer");
@@ -32,7 +34,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
32
34
  * This source code is licensed under the MIT license found in the
33
35
  * LICENSE file in the root directory of this source tree.
34
36
  *
35
- * strict
37
+ *
36
38
  */
37
39
  function badValueMessage(typeName, valueName, message) {
38
40
  return "Expected type ".concat(typeName, ", found ").concat(valueName) + (message ? "; ".concat(message) : '.');
@@ -81,21 +83,35 @@ function ValuesOfCorrectType(context) {
81
83
  } // Ensure every required field exists.
82
84
 
83
85
 
84
- var inputFields = type.getFields();
85
86
  var fieldNodeMap = (0, _keyMap.default)(node.fields, function (field) {
86
87
  return field.name.value;
87
88
  });
88
-
89
- var _arr = Object.keys(inputFields);
90
-
91
- for (var _i = 0; _i < _arr.length; _i++) {
92
- var fieldName = _arr[_i];
93
- var fieldDef = inputFields[fieldName];
94
- var fieldNode = fieldNodeMap[fieldName];
95
-
96
- if (!fieldNode && (0, _definition.isRequiredInputField)(fieldDef)) {
97
- var typeStr = (0, _inspect.default)(fieldDef.type);
98
- context.reportError(new _GraphQLError.GraphQLError(requiredFieldMessage(type.name, fieldName, typeStr), node));
89
+ var _iteratorNormalCompletion = true;
90
+ var _didIteratorError = false;
91
+ var _iteratorError = undefined;
92
+
93
+ try {
94
+ for (var _iterator = (0, _objectValues.default)(type.getFields())[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
95
+ var fieldDef = _step.value;
96
+ var fieldNode = fieldNodeMap[fieldDef.name];
97
+
98
+ if (!fieldNode && (0, _definition.isRequiredInputField)(fieldDef)) {
99
+ var typeStr = (0, _inspect.default)(fieldDef.type);
100
+ context.reportError(new _GraphQLError.GraphQLError(requiredFieldMessage(type.name, fieldDef.name, typeStr), node));
101
+ }
102
+ }
103
+ } catch (err) {
104
+ _didIteratorError = true;
105
+ _iteratorError = err;
106
+ } finally {
107
+ try {
108
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
109
+ _iterator.return();
110
+ }
111
+ } finally {
112
+ if (_didIteratorError) {
113
+ throw _iteratorError;
114
+ }
99
115
  }
100
116
  }
101
117
  },
@@ -7,6 +7,7 @@
7
7
  * @flow strict
8
8
  */
9
9
 
10
+ import objectValues from '../../polyfills/objectValues';
10
11
  import type { ValidationContext } from '../ValidationContext';
11
12
  import { GraphQLError } from '../../error/GraphQLError';
12
13
  import type { ValueNode } from '../../language/ast';
@@ -94,16 +95,14 @@ export function ValuesOfCorrectType(context: ValidationContext): ASTVisitor {
94
95
  return false; // Don't traverse further.
95
96
  }
96
97
  // Ensure every required field exists.
97
- const inputFields = type.getFields();
98
98
  const fieldNodeMap = keyMap(node.fields, field => field.name.value);
99
- for (const fieldName of Object.keys(inputFields)) {
100
- const fieldDef = inputFields[fieldName];
101
- const fieldNode = fieldNodeMap[fieldName];
99
+ for (const fieldDef of objectValues(type.getFields())) {
100
+ const fieldNode = fieldNodeMap[fieldDef.name];
102
101
  if (!fieldNode && isRequiredInputField(fieldDef)) {
103
102
  const typeStr = inspect(fieldDef.type);
104
103
  context.reportError(
105
104
  new GraphQLError(
106
- requiredFieldMessage(type.name, fieldName, typeStr),
105
+ requiredFieldMessage(type.name, fieldDef.name, typeStr),
107
106
  node,
108
107
  ),
109
108
  );