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
@@ -12,6 +12,10 @@ var _suggestionList = _interopRequireDefault(require("../../jsutils/suggestionLi
12
12
 
13
13
  var _quotedOrList = _interopRequireDefault(require("../../jsutils/quotedOrList"));
14
14
 
15
+ var _predicates = require("../../language/predicates");
16
+
17
+ var _scalars = require("../../type/scalars");
18
+
15
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
20
 
17
21
  /**
@@ -20,7 +24,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
20
24
  * This source code is licensed under the MIT license found in the
21
25
  * LICENSE file in the root directory of this source tree.
22
26
  *
23
- * strict
27
+ *
24
28
  */
25
29
  function unknownTypeMessage(typeName, suggestedTypes) {
26
30
  var message = "Unknown type \"".concat(typeName, "\".");
@@ -40,30 +44,64 @@ function unknownTypeMessage(typeName, suggestedTypes) {
40
44
 
41
45
 
42
46
  function KnownTypeNames(context) {
47
+ var schema = context.getSchema();
48
+ var existingTypesMap = schema ? schema.getTypeMap() : Object.create(null);
49
+ var definedTypes = Object.create(null);
50
+ var _iteratorNormalCompletion = true;
51
+ var _didIteratorError = false;
52
+ var _iteratorError = undefined;
53
+
54
+ try {
55
+ for (var _iterator = context.getDocument().definitions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
56
+ var def = _step.value;
57
+
58
+ if ((0, _predicates.isTypeDefinitionNode)(def)) {
59
+ definedTypes[def.name.value] = true;
60
+ }
61
+ }
62
+ } catch (err) {
63
+ _didIteratorError = true;
64
+ _iteratorError = err;
65
+ } finally {
66
+ try {
67
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
68
+ _iterator.return();
69
+ }
70
+ } finally {
71
+ if (_didIteratorError) {
72
+ throw _iteratorError;
73
+ }
74
+ }
75
+ }
76
+
77
+ var typeNames = Object.keys(existingTypesMap).concat(Object.keys(definedTypes));
43
78
  return {
44
- // TODO: when validating IDL, re-enable these. Experimental version does not
45
- // add unreferenced types, resulting in false-positive errors. Squelched
46
- // errors for now.
47
- ObjectTypeDefinition: function ObjectTypeDefinition() {
48
- return false;
49
- },
50
- InterfaceTypeDefinition: function InterfaceTypeDefinition() {
51
- return false;
52
- },
53
- UnionTypeDefinition: function UnionTypeDefinition() {
54
- return false;
55
- },
56
- InputObjectTypeDefinition: function InputObjectTypeDefinition() {
57
- return false;
58
- },
59
- NamedType: function NamedType(node) {
60
- var schema = context.getSchema();
79
+ NamedType: function NamedType(node, _1, parent, _2, ancestors) {
61
80
  var typeName = node.name.value;
62
- var type = schema.getType(typeName);
63
81
 
64
- if (!type) {
65
- context.reportError(new _GraphQLError.GraphQLError(unknownTypeMessage(typeName, (0, _suggestionList.default)(typeName, Object.keys(schema.getTypeMap()))), [node]));
82
+ if (!existingTypesMap[typeName] && !definedTypes[typeName]) {
83
+ var definitionNode = ancestors[2] || parent;
84
+ var isSDL = isSDLNode(definitionNode);
85
+
86
+ if (isSDL && isSpecifiedScalarName(typeName)) {
87
+ return;
88
+ }
89
+
90
+ var suggestedTypes = (0, _suggestionList.default)(typeName, isSDL ? specifiedScalarsNames.concat(typeNames) : typeNames);
91
+ context.reportError(new _GraphQLError.GraphQLError(unknownTypeMessage(typeName, suggestedTypes), node));
66
92
  }
67
93
  }
68
94
  };
95
+ }
96
+
97
+ var specifiedScalarsNames = _scalars.specifiedScalarTypes.map(function (type) {
98
+ return type.name;
99
+ });
100
+
101
+ function isSpecifiedScalarName(typeName) {
102
+ return specifiedScalarsNames.indexOf(typeName) !== -1;
103
+ }
104
+
105
+ function isSDLNode(value) {
106
+ return Boolean(value && !Array.isArray(value) && ((0, _predicates.isTypeSystemDefinitionNode)(value) || (0, _predicates.isTypeSystemExtensionNode)(value)));
69
107
  }
@@ -7,11 +7,21 @@
7
7
  * @flow strict
8
8
  */
9
9
 
10
- import type { ValidationContext } from '../ValidationContext';
10
+ import type {
11
+ ValidationContext,
12
+ SDLValidationContext,
13
+ } from '../ValidationContext';
11
14
  import { GraphQLError } from '../../error/GraphQLError';
12
15
  import suggestionList from '../../jsutils/suggestionList';
13
16
  import quotedOrList from '../../jsutils/quotedOrList';
17
+ import type { ASTNode } from '../../language/ast';
14
18
  import type { ASTVisitor } from '../../language/visitor';
19
+ import {
20
+ isTypeDefinitionNode,
21
+ isTypeSystemDefinitionNode,
22
+ isTypeSystemExtensionNode,
23
+ } from '../../language/predicates';
24
+ import { specifiedScalarTypes } from '../../type/scalars';
15
25
 
16
26
  export function unknownTypeMessage(
17
27
  typeName: string,
@@ -30,30 +40,54 @@ export function unknownTypeMessage(
30
40
  * A GraphQL document is only valid if referenced types (specifically
31
41
  * variable definitions and fragment conditions) are defined by the type schema.
32
42
  */
33
- export function KnownTypeNames(context: ValidationContext): ASTVisitor {
43
+ export function KnownTypeNames(
44
+ context: ValidationContext | SDLValidationContext,
45
+ ): ASTVisitor {
46
+ const schema = context.getSchema();
47
+ const existingTypesMap = schema ? schema.getTypeMap() : Object.create(null);
48
+
49
+ const definedTypes = Object.create(null);
50
+ for (const def of context.getDocument().definitions) {
51
+ if (isTypeDefinitionNode(def)) {
52
+ definedTypes[def.name.value] = true;
53
+ }
54
+ }
55
+
56
+ const typeNames = Object.keys(existingTypesMap).concat(
57
+ Object.keys(definedTypes),
58
+ );
59
+
34
60
  return {
35
- // TODO: when validating IDL, re-enable these. Experimental version does not
36
- // add unreferenced types, resulting in false-positive errors. Squelched
37
- // errors for now.
38
- ObjectTypeDefinition: () => false,
39
- InterfaceTypeDefinition: () => false,
40
- UnionTypeDefinition: () => false,
41
- InputObjectTypeDefinition: () => false,
42
- NamedType(node) {
43
- const schema = context.getSchema();
61
+ NamedType(node, _1, parent, _2, ancestors) {
44
62
  const typeName = node.name.value;
45
- const type = schema.getType(typeName);
46
- if (!type) {
63
+ if (!existingTypesMap[typeName] && !definedTypes[typeName]) {
64
+ const definitionNode = ancestors[2] || parent;
65
+ const isSDL = isSDLNode(definitionNode);
66
+ if (isSDL && isSpecifiedScalarName(typeName)) {
67
+ return;
68
+ }
69
+
70
+ const suggestedTypes = suggestionList(
71
+ typeName,
72
+ isSDL ? specifiedScalarsNames.concat(typeNames) : typeNames,
73
+ );
47
74
  context.reportError(
48
- new GraphQLError(
49
- unknownTypeMessage(
50
- typeName,
51
- suggestionList(typeName, Object.keys(schema.getTypeMap())),
52
- ),
53
- [node],
54
- ),
75
+ new GraphQLError(unknownTypeMessage(typeName, suggestedTypes), node),
55
76
  );
56
77
  }
57
78
  },
58
79
  };
59
80
  }
81
+
82
+ const specifiedScalarsNames = specifiedScalarTypes.map(type => type.name);
83
+ function isSpecifiedScalarName(typeName) {
84
+ return specifiedScalarsNames.indexOf(typeName) !== -1;
85
+ }
86
+
87
+ function isSDLNode(value: ASTNode | $ReadOnlyArray<ASTNode> | void): boolean {
88
+ return Boolean(
89
+ value &&
90
+ !Array.isArray(value) &&
91
+ (isTypeSystemDefinitionNode(value) || isTypeSystemExtensionNode(value)),
92
+ );
93
+ }
@@ -4,11 +4,13 @@
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
  import suggestionList from '../../jsutils/suggestionList';
11
11
  import quotedOrList from '../../jsutils/quotedOrList';
12
+ import { isTypeDefinitionNode, isTypeSystemDefinitionNode, isTypeSystemExtensionNode } from '../../language/predicates';
13
+ import { specifiedScalarTypes } from '../../type/scalars';
12
14
  export function unknownTypeMessage(typeName, suggestedTypes) {
13
15
  var message = "Unknown type \"".concat(typeName, "\".");
14
16
 
@@ -26,30 +28,63 @@ export function unknownTypeMessage(typeName, suggestedTypes) {
26
28
  */
27
29
 
28
30
  export function KnownTypeNames(context) {
31
+ var schema = context.getSchema();
32
+ var existingTypesMap = schema ? schema.getTypeMap() : Object.create(null);
33
+ var definedTypes = Object.create(null);
34
+ var _iteratorNormalCompletion = true;
35
+ var _didIteratorError = false;
36
+ var _iteratorError = undefined;
37
+
38
+ try {
39
+ for (var _iterator = context.getDocument().definitions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
40
+ var def = _step.value;
41
+
42
+ if (isTypeDefinitionNode(def)) {
43
+ definedTypes[def.name.value] = true;
44
+ }
45
+ }
46
+ } catch (err) {
47
+ _didIteratorError = true;
48
+ _iteratorError = err;
49
+ } finally {
50
+ try {
51
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
52
+ _iterator.return();
53
+ }
54
+ } finally {
55
+ if (_didIteratorError) {
56
+ throw _iteratorError;
57
+ }
58
+ }
59
+ }
60
+
61
+ var typeNames = Object.keys(existingTypesMap).concat(Object.keys(definedTypes));
29
62
  return {
30
- // TODO: when validating IDL, re-enable these. Experimental version does not
31
- // add unreferenced types, resulting in false-positive errors. Squelched
32
- // errors for now.
33
- ObjectTypeDefinition: function ObjectTypeDefinition() {
34
- return false;
35
- },
36
- InterfaceTypeDefinition: function InterfaceTypeDefinition() {
37
- return false;
38
- },
39
- UnionTypeDefinition: function UnionTypeDefinition() {
40
- return false;
41
- },
42
- InputObjectTypeDefinition: function InputObjectTypeDefinition() {
43
- return false;
44
- },
45
- NamedType: function NamedType(node) {
46
- var schema = context.getSchema();
63
+ NamedType: function NamedType(node, _1, parent, _2, ancestors) {
47
64
  var typeName = node.name.value;
48
- var type = schema.getType(typeName);
49
65
 
50
- if (!type) {
51
- context.reportError(new GraphQLError(unknownTypeMessage(typeName, suggestionList(typeName, Object.keys(schema.getTypeMap()))), [node]));
66
+ if (!existingTypesMap[typeName] && !definedTypes[typeName]) {
67
+ var definitionNode = ancestors[2] || parent;
68
+ var isSDL = isSDLNode(definitionNode);
69
+
70
+ if (isSDL && isSpecifiedScalarName(typeName)) {
71
+ return;
72
+ }
73
+
74
+ var suggestedTypes = suggestionList(typeName, isSDL ? specifiedScalarsNames.concat(typeNames) : typeNames);
75
+ context.reportError(new GraphQLError(unknownTypeMessage(typeName, suggestedTypes), node));
52
76
  }
53
77
  }
54
78
  };
79
+ }
80
+ var specifiedScalarsNames = specifiedScalarTypes.map(function (type) {
81
+ return type.name;
82
+ });
83
+
84
+ function isSpecifiedScalarName(typeName) {
85
+ return specifiedScalarsNames.indexOf(typeName) !== -1;
86
+ }
87
+
88
+ function isSDLNode(value) {
89
+ return Boolean(value && !Array.isArray(value) && (isTypeSystemDefinitionNode(value) || isTypeSystemExtensionNode(value)));
55
90
  }
@@ -16,7 +16,7 @@ var _kinds = require("../../language/kinds");
16
16
  * This source code is licensed under the MIT license found in the
17
17
  * LICENSE file in the root directory of this source tree.
18
18
  *
19
- * strict
19
+ *
20
20
  */
21
21
  function anonOperationNotAloneMessage() {
22
22
  return 'This anonymous operation must be the only defined operation.';
@@ -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
  import { Kind } from '../../language/kinds';
@@ -15,7 +15,7 @@ var _GraphQLError = require("../../error/GraphQLError");
15
15
  * This source code is licensed under the MIT license found in the
16
16
  * LICENSE file in the root directory of this source tree.
17
17
  *
18
- * strict
18
+ *
19
19
  */
20
20
  function schemaDefinitionNotAloneMessage() {
21
21
  return 'Must provide only one schema definition.';
@@ -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 schemaDefinitionNotAloneMessage() {
@@ -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 cycleErrorMessage(fragName, spreadNames) {
20
20
  var via = spreadNames.length ? ' via ' + spreadNames.join(', ') : '';
@@ -7,7 +7,7 @@
7
7
  * @flow strict
8
8
  */
9
9
 
10
- import type { ValidationContext } from '../ValidationContext';
10
+ import type { ASTValidationContext } from '../ValidationContext';
11
11
  import { GraphQLError } from '../../error/GraphQLError';
12
12
  import type { FragmentDefinitionNode } from '../../language/ast';
13
13
  import type { ASTVisitor } from '../../language/visitor';
@@ -20,7 +20,7 @@ export function cycleErrorMessage(
20
20
  return `Cannot spread fragment "${fragName}" within itself${via}.`;
21
21
  }
22
22
 
23
- export function NoFragmentCycles(context: ValidationContext): ASTVisitor {
23
+ export function NoFragmentCycles(context: ASTValidationContext): ASTVisitor {
24
24
  // Tracks already visited fragments to maintain O(N) and to ensure that cycles
25
25
  // are not redundantly reported.
26
26
  const visitedFrags = Object.create(null);
@@ -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 cycleErrorMessage(fragName, spreadNames) {
@@ -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 undefinedVarMessage(varName, opName) {
20
20
  return opName ? "Variable \"$".concat(varName, "\" is not defined by operation \"").concat(opName, "\".") : "Variable \"$".concat(varName, "\" is not defined.");
@@ -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 undefinedVarMessage(varName, opName) {
@@ -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 unusedFragMessage(fragName) {
20
20
  return "Fragment \"".concat(fragName, "\" is never used.");
@@ -7,7 +7,7 @@
7
7
  * @flow strict
8
8
  */
9
9
 
10
- import type { ValidationContext } from '../ValidationContext';
10
+ import type { ASTValidationContext } from '../ValidationContext';
11
11
  import { GraphQLError } from '../../error/GraphQLError';
12
12
  import type { ASTVisitor } from '../../language/visitor';
13
13
 
@@ -21,7 +21,7 @@ export function unusedFragMessage(fragName: string): string {
21
21
  * A GraphQL document is only valid if all fragment definitions are spread
22
22
  * within operations, or spread within other fragments spread within operations.
23
23
  */
24
- export function NoUnusedFragments(context: ValidationContext): ASTVisitor {
24
+ export function NoUnusedFragments(context: ASTValidationContext): ASTVisitor {
25
25
  const operationDefs = [];
26
26
  const fragmentDefs = [];
27
27
 
@@ -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 unusedFragMessage(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 unusedVariableMessage(varName, opName) {
20
20
  return opName ? "Variable \"$".concat(varName, "\" is never used in operation \"").concat(opName, "\".") : "Variable \"$".concat(varName, "\" is never used.");
@@ -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 unusedVariableMessage(varName, opName) {
@@ -6,12 +6,14 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.fieldsConflictMessage = fieldsConflictMessage;
7
7
  exports.OverlappingFieldsCanBeMerged = OverlappingFieldsCanBeMerged;
8
8
 
9
+ var _find = _interopRequireDefault(require("../../polyfills/find"));
10
+
11
+ var _objectEntries = _interopRequireDefault(require("../../polyfills/objectEntries"));
12
+
9
13
  var _GraphQLError = require("../../error/GraphQLError");
10
14
 
11
15
  var _inspect = _interopRequireDefault(require("../../jsutils/inspect"));
12
16
 
13
- var _find = _interopRequireDefault(require("../../jsutils/find"));
14
-
15
17
  var _kinds = require("../../language/kinds");
16
18
 
17
19
  var _printer = require("../../language/printer");
@@ -22,10 +24,16 @@ var _typeFromAST = require("../../utilities/typeFromAST");
22
24
 
23
25
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
26
 
25
- 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; }
26
-
27
+ /**
28
+ * Copyright (c) 2015-present, Facebook, Inc.
29
+ *
30
+ * This source code is licensed under the MIT license found in the
31
+ * LICENSE file in the root directory of this source tree.
32
+ *
33
+ *
34
+ */
27
35
  function fieldsConflictMessage(responseName, reason) {
28
- return "Fields \"".concat(responseName, "\" conflict because ").concat(reasonMessage(reason)) + '. Use different aliases on the fields to fetch both if this was ' + 'intentional.';
36
+ return "Fields \"".concat(responseName, "\" conflict because ").concat(reasonMessage(reason), ". ") + 'Use different aliases on the fields to fetch both if this was intentional.';
29
37
  }
30
38
 
31
39
  function reasonMessage(reason) {
@@ -294,27 +302,45 @@ function collectConflictsWithin(context, conflicts, cachedFieldsAndFragmentNames
294
302
  // A field map is a keyed collection, where each key represents a response
295
303
  // name and the value at that key is a list of all fields which provide that
296
304
  // response name. For every response name, if there are multiple fields, they
297
- // must be compared to find a potential conflict.
298
- var _arr = Object.keys(fieldMap);
299
-
300
- for (var _i3 = 0; _i3 < _arr.length; _i3++) {
301
- var responseName = _arr[_i3];
302
- var fields = fieldMap[responseName]; // This compares every field in the list to every other field in this list
303
- // (except to itself). If the list only has one item, nothing needs to
304
- // be compared.
305
-
306
- if (fields.length > 1) {
307
- for (var i = 0; i < fields.length; i++) {
308
- for (var j = i + 1; j < fields.length; j++) {
309
- var conflict = findConflict(context, cachedFieldsAndFragmentNames, comparedFragmentPairs, false, // within one collection is never mutually exclusive
310
- responseName, fields[i], fields[j]);
311
-
312
- if (conflict) {
313
- conflicts.push(conflict);
305
+ var _iteratorNormalCompletion = true;
306
+ var _didIteratorError = false;
307
+ var _iteratorError = undefined;
308
+
309
+ try {
310
+ for (var _iterator = (0, _objectEntries.default)(fieldMap)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
311
+ var _ref5 = _step.value;
312
+ var responseName = _ref5[0];
313
+ var fields = _ref5[1];
314
+
315
+ // This compares every field in the list to every other field in this list
316
+ // (except to itself). If the list only has one item, nothing needs to
317
+ // be compared.
318
+ if (fields.length > 1) {
319
+ for (var i = 0; i < fields.length; i++) {
320
+ for (var j = i + 1; j < fields.length; j++) {
321
+ var conflict = findConflict(context, cachedFieldsAndFragmentNames, comparedFragmentPairs, false, // within one collection is never mutually exclusive
322
+ responseName, fields[i], fields[j]);
323
+
324
+ if (conflict) {
325
+ conflicts.push(conflict);
326
+ }
314
327
  }
315
328
  }
316
329
  }
317
330
  }
331
+ } catch (err) {
332
+ _didIteratorError = true;
333
+ _iteratorError = err;
334
+ } finally {
335
+ try {
336
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
337
+ _iterator.return();
338
+ }
339
+ } finally {
340
+ if (_didIteratorError) {
341
+ throw _iteratorError;
342
+ }
343
+ }
318
344
  }
319
345
  } // Collect all Conflicts between two collections of fields. This is similar to,
320
346
  // but different from the `collectConflictsWithin` function above. This check
@@ -329,10 +355,10 @@ function collectConflictsBetween(context, conflicts, cachedFieldsAndFragmentName
329
355
  // response name. For any response name which appears in both provided field
330
356
  // maps, each field from the first field map must be compared to every field
331
357
  // in the second field map to find potential conflicts.
332
- var _arr2 = Object.keys(fieldMap1);
358
+ var _arr = Object.keys(fieldMap1);
333
359
 
334
- for (var _i4 = 0; _i4 < _arr2.length; _i4++) {
335
- var responseName = _arr2[_i4];
360
+ for (var _i3 = 0; _i3 < _arr.length; _i3++) {
361
+ var responseName = _arr[_i3];
336
362
  var fields2 = fieldMap2[responseName];
337
363
 
338
364
  if (fields2) {
@@ -527,14 +553,14 @@ function _collectFieldsAndFragmentNames(context, parentType, selectionSet, nodeA
527
553
 
528
554
  function subfieldConflicts(conflicts, responseName, node1, node2) {
529
555
  if (conflicts.length > 0) {
530
- return [[responseName, conflicts.map(function (_ref4) {
531
- var reason = _ref4[0];
556
+ return [[responseName, conflicts.map(function (_ref6) {
557
+ var reason = _ref6[0];
532
558
  return reason;
533
- })], conflicts.reduce(function (allFields, _ref5) {
534
- var fields1 = _ref5[1];
559
+ })], conflicts.reduce(function (allFields, _ref7) {
560
+ var fields1 = _ref7[1];
535
561
  return allFields.concat(fields1);
536
- }, [node1]), conflicts.reduce(function (allFields, _ref6) {
537
- var fields2 = _ref6[2];
562
+ }, [node1]), conflicts.reduce(function (allFields, _ref8) {
563
+ var fields2 = _ref8[2];
538
564
  return allFields.concat(fields2);
539
565
  }, [node2])];
540
566
  }
@@ -549,8 +575,6 @@ var PairSet =
549
575
  /*#__PURE__*/
550
576
  function () {
551
577
  function PairSet() {
552
- _defineProperty(this, "_data", void 0);
553
-
554
578
  this._data = Object.create(null);
555
579
  }
556
580
 
@@ -7,10 +7,11 @@
7
7
  * @flow strict
8
8
  */
9
9
 
10
+ import find from '../../polyfills/find';
11
+ import objectEntries from '../../polyfills/objectEntries';
10
12
  import type { ValidationContext } from '../ValidationContext';
11
13
  import { GraphQLError } from '../../error/GraphQLError';
12
14
  import inspect from '../../jsutils/inspect';
13
- import find from '../../jsutils/find';
14
15
  import type { ObjMap } from '../../jsutils/ObjMap';
15
16
  import type {
16
17
  SelectionSetNode,
@@ -42,9 +43,8 @@ export function fieldsConflictMessage(
42
43
  reason: ConflictReasonMessage,
43
44
  ): string {
44
45
  return (
45
- `Fields "${responseName}" conflict because ${reasonMessage(reason)}` +
46
- '. Use different aliases on the fields to fetch both if this was ' +
47
- 'intentional.'
46
+ `Fields "${responseName}" conflict because ${reasonMessage(reason)}. ` +
47
+ 'Use different aliases on the fields to fetch both if this was intentional.'
48
48
  );
49
49
  }
50
50
 
@@ -486,8 +486,7 @@ function collectConflictsWithin(
486
486
  // name and the value at that key is a list of all fields which provide that
487
487
  // response name. For every response name, if there are multiple fields, they
488
488
  // must be compared to find a potential conflict.
489
- for (const responseName of Object.keys(fieldMap)) {
490
- const fields = fieldMap[responseName];
489
+ for (const [responseName, fields] of objectEntries(fieldMap)) {
491
490
  // This compares every field in the list to every other field in this list
492
491
  // (except to itself). If the list only has one item, nothing needs to
493
492
  // be compared.