graphql 14.0.2 → 14.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) 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.mjs +1 -1
  15. package/execution/index.mjs +1 -1
  16. package/execution/values.js +3 -3
  17. package/execution/values.js.flow +1 -1
  18. package/execution/values.mjs +2 -2
  19. package/graphql.js +1 -1
  20. package/graphql.mjs +1 -1
  21. package/index.js +12 -0
  22. package/index.js.flow +2 -0
  23. package/index.mjs +2 -2
  24. package/jsutils/dedent.js +1 -1
  25. package/jsutils/dedent.mjs +1 -1
  26. package/jsutils/defineToJSON.js +17 -6
  27. package/jsutils/defineToJSON.js.flow +14 -5
  28. package/jsutils/defineToJSON.mjs +14 -6
  29. package/jsutils/defineToStringTag.js +5 -5
  30. package/jsutils/defineToStringTag.js.flow +3 -3
  31. package/jsutils/defineToStringTag.mjs +4 -4
  32. package/jsutils/inspect.js +22 -11
  33. package/jsutils/inspect.js.flow +22 -2
  34. package/jsutils/inspect.mjs +21 -4
  35. package/jsutils/instanceOf.js +1 -1
  36. package/jsutils/instanceOf.mjs +1 -1
  37. package/jsutils/invariant.js +1 -1
  38. package/jsutils/invariant.mjs +1 -1
  39. package/jsutils/isInvalid.js +1 -1
  40. package/jsutils/isInvalid.mjs +1 -1
  41. package/jsutils/isNullish.js +1 -1
  42. package/jsutils/isNullish.mjs +1 -1
  43. package/jsutils/isPromise.js +1 -1
  44. package/jsutils/isPromise.mjs +1 -1
  45. package/jsutils/keyMap.js +1 -1
  46. package/jsutils/keyMap.mjs +1 -1
  47. package/jsutils/keyValMap.js +1 -1
  48. package/jsutils/keyValMap.mjs +1 -1
  49. package/jsutils/mapValue.js +54 -0
  50. package/jsutils/mapValue.js.flow +27 -0
  51. package/jsutils/mapValue.mjs +44 -0
  52. package/jsutils/memoize3.js +1 -1
  53. package/jsutils/memoize3.mjs +1 -1
  54. package/jsutils/nodejsCustomInspectSymbol.js +18 -0
  55. package/jsutils/nodejsCustomInspectSymbol.js.flow +15 -0
  56. package/jsutils/nodejsCustomInspectSymbol.mjs +10 -0
  57. package/jsutils/orList.js +17 -4
  58. package/jsutils/orList.js.flow +13 -7
  59. package/jsutils/orList.mjs +14 -4
  60. package/jsutils/promiseForObject.js +1 -1
  61. package/jsutils/promiseForObject.mjs +1 -1
  62. package/jsutils/promiseReduce.js +1 -1
  63. package/jsutils/promiseReduce.mjs +1 -1
  64. package/jsutils/quotedOrList.js +1 -1
  65. package/jsutils/quotedOrList.mjs +1 -1
  66. package/jsutils/suggestionList.js +1 -1
  67. package/jsutils/suggestionList.mjs +1 -1
  68. package/language/blockStringValue.js +1 -1
  69. package/language/blockStringValue.mjs +1 -1
  70. package/language/directiveLocation.js +1 -1
  71. package/language/directiveLocation.mjs +1 -1
  72. package/language/index.mjs +1 -1
  73. package/language/kinds.js +1 -1
  74. package/language/kinds.mjs +1 -1
  75. package/language/lexer.js +28 -12
  76. package/language/lexer.js.flow +33 -19
  77. package/language/lexer.mjs +27 -12
  78. package/language/location.js +1 -1
  79. package/language/location.mjs +1 -1
  80. package/language/parser.js +31 -38
  81. package/language/parser.js.flow +32 -48
  82. package/language/parser.mjs +30 -38
  83. package/language/predicates.js +1 -1
  84. package/language/predicates.mjs +1 -1
  85. package/language/printer.js +13 -7
  86. package/language/printer.js.flow +19 -9
  87. package/language/printer.mjs +13 -7
  88. package/language/source.js +8 -7
  89. package/language/source.mjs +1 -9
  90. package/language/visitor.js +6 -5
  91. package/language/visitor.js.flow +2 -4
  92. package/language/visitor.mjs +6 -5
  93. package/package.json +5 -2
  94. package/polyfills/find.js +31 -0
  95. package/polyfills/find.js.flow +29 -0
  96. package/polyfills/find.mjs +23 -0
  97. package/{jsutils → polyfills}/isFinite.js +1 -1
  98. package/{jsutils → polyfills}/isFinite.js.flow +0 -0
  99. package/{jsutils → polyfills}/isFinite.mjs +1 -1
  100. package/{jsutils → polyfills}/isInteger.js +1 -1
  101. package/{jsutils → polyfills}/isInteger.js.flow +0 -0
  102. package/{jsutils → polyfills}/isInteger.mjs +1 -1
  103. package/polyfills/objectEntries.js +26 -0
  104. package/polyfills/objectEntries.js.flow +19 -0
  105. package/polyfills/objectEntries.mjs +18 -0
  106. package/{jsutils → polyfills}/objectValues.js +1 -1
  107. package/{jsutils → polyfills}/objectValues.js.flow +1 -1
  108. package/{jsutils → polyfills}/objectValues.mjs +1 -1
  109. package/subscription/asyncIteratorReject.mjs +1 -1
  110. package/subscription/index.mjs +1 -1
  111. package/subscription/mapAsyncIterator.mjs +1 -1
  112. package/subscription/subscribe.js +1 -1
  113. package/subscription/subscribe.mjs +1 -1
  114. package/type/definition.js +31 -130
  115. package/type/definition.js.flow +35 -47
  116. package/type/definition.mjs +30 -131
  117. package/type/directives.js +25 -29
  118. package/type/directives.js.flow +24 -20
  119. package/type/directives.mjs +22 -30
  120. package/type/index.js +12 -0
  121. package/type/index.js.flow +4 -0
  122. package/type/index.mjs +5 -3
  123. package/type/introspection.js +3 -3
  124. package/type/introspection.js.flow +1 -1
  125. package/type/introspection.mjs +2 -2
  126. package/type/scalars.js +45 -34
  127. package/type/scalars.js.flow +40 -26
  128. package/type/scalars.mjs +44 -26
  129. package/type/schema.js +82 -87
  130. package/type/schema.js.flow +17 -9
  131. package/type/schema.mjs +79 -86
  132. package/type/validate.js +168 -175
  133. package/type/validate.js.flow +8 -49
  134. package/type/validate.mjs +159 -175
  135. package/utilities/TypeInfo.js +10 -23
  136. package/utilities/TypeInfo.js.flow +1 -1
  137. package/utilities/TypeInfo.mjs +2 -24
  138. package/utilities/assertValidName.js +1 -1
  139. package/utilities/assertValidName.mjs +1 -1
  140. package/utilities/astFromValue.js +2 -2
  141. package/utilities/astFromValue.js.flow +1 -1
  142. package/utilities/astFromValue.mjs +2 -2
  143. package/utilities/buildASTSchema.js +53 -53
  144. package/utilities/buildASTSchema.js.flow +14 -30
  145. package/utilities/buildASTSchema.mjs +45 -55
  146. package/utilities/buildClientSchema.js +3 -3
  147. package/utilities/buildClientSchema.js.flow +6 -2
  148. package/utilities/buildClientSchema.mjs +3 -3
  149. package/utilities/coerceValue.js +38 -19
  150. package/utilities/coerceValue.js.flow +41 -47
  151. package/utilities/coerceValue.mjs +38 -20
  152. package/utilities/concatAST.js +1 -1
  153. package/utilities/concatAST.mjs +1 -1
  154. package/utilities/extendSchema.js +228 -312
  155. package/utilities/extendSchema.js.flow +27 -152
  156. package/utilities/extendSchema.mjs +229 -312
  157. package/utilities/findBreakingChanges.js +7 -5
  158. package/utilities/findBreakingChanges.js.flow +3 -2
  159. package/utilities/findBreakingChanges.mjs +6 -5
  160. package/utilities/findDeprecatedUsages.js +1 -1
  161. package/utilities/findDeprecatedUsages.mjs +1 -1
  162. package/utilities/getOperationAST.js +1 -1
  163. package/utilities/getOperationAST.mjs +1 -1
  164. package/utilities/getOperationRootType.js +1 -1
  165. package/utilities/getOperationRootType.mjs +1 -1
  166. package/utilities/index.mjs +1 -1
  167. package/utilities/introspectionFromSchema.js +1 -1
  168. package/utilities/introspectionFromSchema.mjs +1 -1
  169. package/utilities/introspectionQuery.js +1 -1
  170. package/utilities/introspectionQuery.mjs +1 -1
  171. package/utilities/isValidJSValue.js +1 -1
  172. package/utilities/isValidJSValue.mjs +1 -1
  173. package/utilities/isValidLiteralValue.js +1 -1
  174. package/utilities/isValidLiteralValue.mjs +1 -1
  175. package/utilities/lexicographicSortSchema.js +2 -2
  176. package/utilities/lexicographicSortSchema.js.flow +1 -1
  177. package/utilities/lexicographicSortSchema.mjs +2 -2
  178. package/utilities/schemaPrinter.js +3 -3
  179. package/utilities/schemaPrinter.js.flow +1 -1
  180. package/utilities/schemaPrinter.mjs +2 -2
  181. package/utilities/separateOperations.js +1 -1
  182. package/utilities/separateOperations.mjs +1 -1
  183. package/utilities/typeComparators.js +1 -1
  184. package/utilities/typeComparators.mjs +1 -1
  185. package/utilities/typeFromAST.js +1 -1
  186. package/utilities/typeFromAST.mjs +1 -1
  187. package/utilities/valueFromAST.js +3 -3
  188. package/utilities/valueFromAST.js.flow +1 -1
  189. package/utilities/valueFromAST.mjs +2 -2
  190. package/utilities/valueFromASTUntyped.js +1 -1
  191. package/utilities/valueFromASTUntyped.mjs +1 -1
  192. package/validation/ValidationContext.js +57 -82
  193. package/validation/ValidationContext.js.flow +52 -49
  194. package/validation/ValidationContext.mjs +52 -77
  195. package/validation/index.mjs +1 -1
  196. package/validation/rules/ExecutableDefinitions.js +1 -1
  197. package/validation/rules/ExecutableDefinitions.js.flow +1 -1
  198. package/validation/rules/ExecutableDefinitions.mjs +1 -1
  199. package/validation/rules/FieldsOnCorrectType.js +1 -1
  200. package/validation/rules/FieldsOnCorrectType.mjs +1 -1
  201. package/validation/rules/FragmentsOnCompositeTypes.js +1 -1
  202. package/validation/rules/FragmentsOnCompositeTypes.mjs +1 -1
  203. package/validation/rules/KnownArgumentNames.mjs +1 -1
  204. package/validation/rules/KnownDirectives.js +1 -1
  205. package/validation/rules/KnownDirectives.mjs +1 -1
  206. package/validation/rules/KnownFragmentNames.js +1 -1
  207. package/validation/rules/KnownFragmentNames.mjs +1 -1
  208. package/validation/rules/KnownTypeNames.js +59 -21
  209. package/validation/rules/KnownTypeNames.js.flow +54 -20
  210. package/validation/rules/KnownTypeNames.mjs +56 -21
  211. package/validation/rules/LoneAnonymousOperation.js +1 -1
  212. package/validation/rules/LoneAnonymousOperation.mjs +1 -1
  213. package/validation/rules/LoneSchemaDefinition.js +1 -1
  214. package/validation/rules/LoneSchemaDefinition.mjs +1 -1
  215. package/validation/rules/NoFragmentCycles.js +1 -1
  216. package/validation/rules/NoFragmentCycles.js.flow +2 -2
  217. package/validation/rules/NoFragmentCycles.mjs +1 -1
  218. package/validation/rules/NoUndefinedVariables.js +1 -1
  219. package/validation/rules/NoUndefinedVariables.mjs +1 -1
  220. package/validation/rules/NoUnusedFragments.js +1 -1
  221. package/validation/rules/NoUnusedFragments.js.flow +2 -2
  222. package/validation/rules/NoUnusedFragments.mjs +1 -1
  223. package/validation/rules/NoUnusedVariables.js +1 -1
  224. package/validation/rules/NoUnusedVariables.mjs +1 -1
  225. package/validation/rules/OverlappingFieldsCanBeMerged.js +56 -32
  226. package/validation/rules/OverlappingFieldsCanBeMerged.js.flow +3 -3
  227. package/validation/rules/OverlappingFieldsCanBeMerged.mjs +47 -32
  228. package/validation/rules/PossibleFragmentSpreads.js +1 -1
  229. package/validation/rules/PossibleFragmentSpreads.mjs +1 -1
  230. package/validation/rules/PossibleTypeExtensions.js +158 -0
  231. package/validation/rules/PossibleTypeExtensions.js.flow +160 -0
  232. package/validation/rules/PossibleTypeExtensions.mjs +146 -0
  233. package/validation/rules/ProvidedRequiredArguments.mjs +1 -1
  234. package/validation/rules/ScalarLeafs.js +1 -1
  235. package/validation/rules/ScalarLeafs.mjs +1 -1
  236. package/validation/rules/SingleFieldSubscriptions.js +1 -1
  237. package/validation/rules/SingleFieldSubscriptions.mjs +1 -1
  238. package/validation/rules/UniqueArgumentNames.js +1 -1
  239. package/validation/rules/UniqueArgumentNames.mjs +1 -1
  240. package/validation/rules/UniqueDirectiveNames.js +55 -0
  241. package/validation/rules/UniqueDirectiveNames.js.flow +64 -0
  242. package/validation/rules/UniqueDirectiveNames.mjs +43 -0
  243. package/validation/rules/UniqueDirectivesPerLocation.js +1 -1
  244. package/validation/rules/UniqueDirectivesPerLocation.mjs +1 -1
  245. package/validation/rules/UniqueEnumValueNames.js +94 -0
  246. package/validation/rules/UniqueEnumValueNames.js.flow +87 -0
  247. package/validation/rules/UniqueEnumValueNames.mjs +81 -0
  248. package/validation/rules/UniqueFieldDefinitionNames.js +105 -0
  249. package/validation/rules/UniqueFieldDefinitionNames.js.flow +101 -0
  250. package/validation/rules/UniqueFieldDefinitionNames.mjs +92 -0
  251. package/validation/rules/UniqueFragmentNames.js +1 -1
  252. package/validation/rules/UniqueFragmentNames.mjs +1 -1
  253. package/validation/rules/UniqueInputFieldNames.js +1 -1
  254. package/validation/rules/UniqueInputFieldNames.mjs +1 -1
  255. package/validation/rules/UniqueOperationNames.js +1 -1
  256. package/validation/rules/UniqueOperationNames.mjs +1 -1
  257. package/validation/rules/UniqueOperationTypes.js +85 -0
  258. package/validation/rules/UniqueOperationTypes.js.flow +76 -0
  259. package/validation/rules/UniqueOperationTypes.mjs +73 -0
  260. package/validation/rules/UniqueTypeNames.js +62 -0
  261. package/validation/rules/UniqueTypeNames.js.flow +67 -0
  262. package/validation/rules/UniqueTypeNames.mjs +50 -0
  263. package/validation/rules/UniqueVariableNames.js +1 -1
  264. package/validation/rules/UniqueVariableNames.mjs +1 -1
  265. package/validation/rules/ValuesOfCorrectType.js +29 -13
  266. package/validation/rules/ValuesOfCorrectType.js.flow +4 -5
  267. package/validation/rules/ValuesOfCorrectType.mjs +28 -13
  268. package/validation/rules/VariablesAreInputTypes.js +1 -1
  269. package/validation/rules/VariablesAreInputTypes.mjs +1 -1
  270. package/validation/rules/VariablesInAllowedPosition.js +4 -4
  271. package/validation/rules/VariablesInAllowedPosition.mjs +4 -4
  272. package/validation/specifiedRules.js +14 -2
  273. package/validation/specifiedRules.js.flow +13 -0
  274. package/validation/specifiedRules.mjs +8 -2
  275. package/validation/validate.js +1 -1
  276. package/validation/validate.mjs +1 -1
  277. package/jsutils/find.js +0 -22
  278. package/jsutils/find.js.flow +0 -19
  279. package/jsutils/find.mjs +0 -15
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.duplicateDirectiveNameMessage = duplicateDirectiveNameMessage;
7
+ exports.existedDirectiveNameMessage = existedDirectiveNameMessage;
8
+ exports.UniqueDirectiveNames = UniqueDirectiveNames;
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 duplicateDirectiveNameMessage(directiveName) {
21
+ return "There can be only one directive named \"".concat(directiveName, "\".");
22
+ }
23
+
24
+ function existedDirectiveNameMessage(directiveName) {
25
+ return "Directive \"".concat(directiveName, "\" already exists in the schema. ") + 'It cannot be redefined.';
26
+ }
27
+ /**
28
+ * Unique directive names
29
+ *
30
+ * A GraphQL document is only valid if all defined directives have unique names.
31
+ */
32
+
33
+
34
+ function UniqueDirectiveNames(context) {
35
+ var knownDirectiveNames = Object.create(null);
36
+ var schema = context.getSchema();
37
+ return {
38
+ DirectiveDefinition: function DirectiveDefinition(node) {
39
+ var directiveName = node.name.value;
40
+
41
+ if (schema && schema.getDirective(directiveName)) {
42
+ context.reportError(new _GraphQLError.GraphQLError(existedDirectiveNameMessage(directiveName), node.name));
43
+ return;
44
+ }
45
+
46
+ if (knownDirectiveNames[directiveName]) {
47
+ context.reportError(new _GraphQLError.GraphQLError(duplicateDirectiveNameMessage(directiveName), [knownDirectiveNames[directiveName], node.name]));
48
+ } else {
49
+ knownDirectiveNames[directiveName] = node.name;
50
+ }
51
+
52
+ return false;
53
+ }
54
+ };
55
+ }
@@ -0,0 +1,64 @@
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 duplicateDirectiveNameMessage(directiveName: string): string {
15
+ return `There can be only one directive named "${directiveName}".`;
16
+ }
17
+
18
+ export function existedDirectiveNameMessage(directiveName: string): string {
19
+ return (
20
+ `Directive "${directiveName}" already exists in the schema. ` +
21
+ 'It cannot be redefined.'
22
+ );
23
+ }
24
+
25
+ /**
26
+ * Unique directive names
27
+ *
28
+ * A GraphQL document is only valid if all defined directives have unique names.
29
+ */
30
+ export function UniqueDirectiveNames(
31
+ context: SDLValidationContext,
32
+ ): ASTVisitor {
33
+ const knownDirectiveNames = Object.create(null);
34
+ const schema = context.getSchema();
35
+
36
+ return {
37
+ DirectiveDefinition(node) {
38
+ const directiveName = node.name.value;
39
+
40
+ if (schema && schema.getDirective(directiveName)) {
41
+ context.reportError(
42
+ new GraphQLError(
43
+ existedDirectiveNameMessage(directiveName),
44
+ node.name,
45
+ ),
46
+ );
47
+ return;
48
+ }
49
+
50
+ if (knownDirectiveNames[directiveName]) {
51
+ context.reportError(
52
+ new GraphQLError(duplicateDirectiveNameMessage(directiveName), [
53
+ knownDirectiveNames[directiveName],
54
+ node.name,
55
+ ]),
56
+ );
57
+ } else {
58
+ knownDirectiveNames[directiveName] = node.name;
59
+ }
60
+
61
+ return false;
62
+ },
63
+ };
64
+ }
@@ -0,0 +1,43 @@
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 duplicateDirectiveNameMessage(directiveName) {
11
+ return "There can be only one directive named \"".concat(directiveName, "\".");
12
+ }
13
+ export function existedDirectiveNameMessage(directiveName) {
14
+ return "Directive \"".concat(directiveName, "\" already exists in the schema. ") + 'It cannot be redefined.';
15
+ }
16
+ /**
17
+ * Unique directive names
18
+ *
19
+ * A GraphQL document is only valid if all defined directives have unique names.
20
+ */
21
+
22
+ export function UniqueDirectiveNames(context) {
23
+ var knownDirectiveNames = Object.create(null);
24
+ var schema = context.getSchema();
25
+ return {
26
+ DirectiveDefinition: function DirectiveDefinition(node) {
27
+ var directiveName = node.name.value;
28
+
29
+ if (schema && schema.getDirective(directiveName)) {
30
+ context.reportError(new GraphQLError(existedDirectiveNameMessage(directiveName), node.name));
31
+ return;
32
+ }
33
+
34
+ if (knownDirectiveNames[directiveName]) {
35
+ context.reportError(new GraphQLError(duplicateDirectiveNameMessage(directiveName), [knownDirectiveNames[directiveName], node.name]));
36
+ } else {
37
+ knownDirectiveNames[directiveName] = node.name;
38
+ }
39
+
40
+ return false;
41
+ }
42
+ };
43
+ }
@@ -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 duplicateDirectiveMessage(directiveName) {
20
20
  return "The directive \"".concat(directiveName, "\" can only be used once at ") + 'this location.';
@@ -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 duplicateDirectiveMessage(directiveName) {
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.duplicateEnumValueNameMessage = duplicateEnumValueNameMessage;
7
+ exports.existedEnumValueNameMessage = existedEnumValueNameMessage;
8
+ exports.UniqueEnumValueNames = UniqueEnumValueNames;
9
+
10
+ var _GraphQLError = require("../../error/GraphQLError");
11
+
12
+ var _definition = require("../../type/definition");
13
+
14
+ /**
15
+ * Copyright (c) 2018-present, Facebook, Inc.
16
+ *
17
+ * This source code is licensed under the MIT license found in the
18
+ * LICENSE file in the root directory of this source tree.
19
+ *
20
+ *
21
+ */
22
+ function duplicateEnumValueNameMessage(typeName, valueName) {
23
+ return "Enum value \"".concat(typeName, ".").concat(valueName, "\" can only be defined once.");
24
+ }
25
+
26
+ function existedEnumValueNameMessage(typeName, valueName) {
27
+ return "Enum value \"".concat(typeName, ".").concat(valueName, "\" already exists in the schema. ") + 'It cannot also be defined in this type extension.';
28
+ }
29
+ /**
30
+ * Unique enum value names
31
+ *
32
+ * A GraphQL enum type is only valid if all its values are uniquely named.
33
+ */
34
+
35
+
36
+ function UniqueEnumValueNames(context) {
37
+ var schema = context.getSchema();
38
+ var existingTypeMap = schema ? schema.getTypeMap() : Object.create(null);
39
+ var knownValueNames = Object.create(null);
40
+ return {
41
+ EnumTypeDefinition: checkValueUniqueness,
42
+ EnumTypeExtension: checkValueUniqueness
43
+ };
44
+
45
+ function checkValueUniqueness(node) {
46
+ var typeName = node.name.value;
47
+
48
+ if (!knownValueNames[typeName]) {
49
+ knownValueNames[typeName] = Object.create(null);
50
+ }
51
+
52
+ var valueNames = knownValueNames[typeName];
53
+
54
+ if (node.values) {
55
+ var _iteratorNormalCompletion = true;
56
+ var _didIteratorError = false;
57
+ var _iteratorError = undefined;
58
+
59
+ try {
60
+ for (var _iterator = node.values[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
61
+ var valueDef = _step.value;
62
+ var valueName = valueDef.name.value;
63
+ var existingType = existingTypeMap[typeName];
64
+
65
+ if ((0, _definition.isEnumType)(existingType) && existingType.getValue(valueName)) {
66
+ context.reportError(new _GraphQLError.GraphQLError(existedEnumValueNameMessage(typeName, valueName), valueDef.name));
67
+ continue;
68
+ }
69
+
70
+ if (valueNames[valueName]) {
71
+ context.reportError(new _GraphQLError.GraphQLError(duplicateEnumValueNameMessage(typeName, valueName), [valueNames[valueName], valueDef.name]));
72
+ } else {
73
+ valueNames[valueName] = valueDef.name;
74
+ }
75
+ }
76
+ } catch (err) {
77
+ _didIteratorError = true;
78
+ _iteratorError = err;
79
+ } finally {
80
+ try {
81
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
82
+ _iterator.return();
83
+ }
84
+ } finally {
85
+ if (_didIteratorError) {
86
+ throw _iteratorError;
87
+ }
88
+ }
89
+ }
90
+ }
91
+
92
+ return false;
93
+ }
94
+ }
@@ -0,0 +1,87 @@
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 { isEnumType } from '../../type/definition';
14
+
15
+ export function duplicateEnumValueNameMessage(
16
+ typeName: string,
17
+ valueName: string,
18
+ ): string {
19
+ return `Enum value "${typeName}.${valueName}" can only be defined once.`;
20
+ }
21
+
22
+ export function existedEnumValueNameMessage(
23
+ typeName: string,
24
+ valueName: string,
25
+ ): string {
26
+ return (
27
+ `Enum value "${typeName}.${valueName}" already exists in the schema. ` +
28
+ 'It cannot also be defined in this type extension.'
29
+ );
30
+ }
31
+
32
+ /**
33
+ * Unique enum value names
34
+ *
35
+ * A GraphQL enum type is only valid if all its values are uniquely named.
36
+ */
37
+ export function UniqueEnumValueNames(
38
+ context: SDLValidationContext,
39
+ ): ASTVisitor {
40
+ const schema = context.getSchema();
41
+ const existingTypeMap = schema ? schema.getTypeMap() : Object.create(null);
42
+ const knownValueNames = Object.create(null);
43
+
44
+ return {
45
+ EnumTypeDefinition: checkValueUniqueness,
46
+ EnumTypeExtension: checkValueUniqueness,
47
+ };
48
+
49
+ function checkValueUniqueness(node) {
50
+ const typeName = node.name.value;
51
+
52
+ if (!knownValueNames[typeName]) {
53
+ knownValueNames[typeName] = Object.create(null);
54
+ }
55
+
56
+ const valueNames = knownValueNames[typeName];
57
+ if (node.values) {
58
+ for (const valueDef of node.values) {
59
+ const valueName = valueDef.name.value;
60
+
61
+ const existingType = existingTypeMap[typeName];
62
+ if (isEnumType(existingType) && existingType.getValue(valueName)) {
63
+ context.reportError(
64
+ new GraphQLError(
65
+ existedEnumValueNameMessage(typeName, valueName),
66
+ valueDef.name,
67
+ ),
68
+ );
69
+ continue;
70
+ }
71
+
72
+ if (valueNames[valueName]) {
73
+ context.reportError(
74
+ new GraphQLError(
75
+ duplicateEnumValueNameMessage(typeName, valueName),
76
+ [valueNames[valueName], valueDef.name],
77
+ ),
78
+ );
79
+ } else {
80
+ valueNames[valueName] = valueDef.name;
81
+ }
82
+ }
83
+ }
84
+
85
+ return false;
86
+ }
87
+ }
@@ -0,0 +1,81 @@
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 { isEnumType } from '../../type/definition';
11
+ export function duplicateEnumValueNameMessage(typeName, valueName) {
12
+ return "Enum value \"".concat(typeName, ".").concat(valueName, "\" can only be defined once.");
13
+ }
14
+ export function existedEnumValueNameMessage(typeName, valueName) {
15
+ return "Enum value \"".concat(typeName, ".").concat(valueName, "\" already exists in the schema. ") + 'It cannot also be defined in this type extension.';
16
+ }
17
+ /**
18
+ * Unique enum value names
19
+ *
20
+ * A GraphQL enum type is only valid if all its values are uniquely named.
21
+ */
22
+
23
+ export function UniqueEnumValueNames(context) {
24
+ var schema = context.getSchema();
25
+ var existingTypeMap = schema ? schema.getTypeMap() : Object.create(null);
26
+ var knownValueNames = Object.create(null);
27
+ return {
28
+ EnumTypeDefinition: checkValueUniqueness,
29
+ EnumTypeExtension: checkValueUniqueness
30
+ };
31
+
32
+ function checkValueUniqueness(node) {
33
+ var typeName = node.name.value;
34
+
35
+ if (!knownValueNames[typeName]) {
36
+ knownValueNames[typeName] = Object.create(null);
37
+ }
38
+
39
+ var valueNames = knownValueNames[typeName];
40
+
41
+ if (node.values) {
42
+ var _iteratorNormalCompletion = true;
43
+ var _didIteratorError = false;
44
+ var _iteratorError = undefined;
45
+
46
+ try {
47
+ for (var _iterator = node.values[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
48
+ var valueDef = _step.value;
49
+ var valueName = valueDef.name.value;
50
+ var existingType = existingTypeMap[typeName];
51
+
52
+ if (isEnumType(existingType) && existingType.getValue(valueName)) {
53
+ context.reportError(new GraphQLError(existedEnumValueNameMessage(typeName, valueName), valueDef.name));
54
+ continue;
55
+ }
56
+
57
+ if (valueNames[valueName]) {
58
+ context.reportError(new GraphQLError(duplicateEnumValueNameMessage(typeName, valueName), [valueNames[valueName], valueDef.name]));
59
+ } else {
60
+ valueNames[valueName] = valueDef.name;
61
+ }
62
+ }
63
+ } catch (err) {
64
+ _didIteratorError = true;
65
+ _iteratorError = err;
66
+ } finally {
67
+ try {
68
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
69
+ _iterator.return();
70
+ }
71
+ } finally {
72
+ if (_didIteratorError) {
73
+ throw _iteratorError;
74
+ }
75
+ }
76
+ }
77
+ }
78
+
79
+ return false;
80
+ }
81
+ }
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.duplicateFieldDefinitionNameMessage = duplicateFieldDefinitionNameMessage;
7
+ exports.existedFieldDefinitionNameMessage = existedFieldDefinitionNameMessage;
8
+ exports.UniqueFieldDefinitionNames = UniqueFieldDefinitionNames;
9
+
10
+ var _GraphQLError = require("../../error/GraphQLError");
11
+
12
+ var _definition = require("../../type/definition");
13
+
14
+ /**
15
+ * Copyright (c) 2018-present, Facebook, Inc.
16
+ *
17
+ * This source code is licensed under the MIT license found in the
18
+ * LICENSE file in the root directory of this source tree.
19
+ *
20
+ *
21
+ */
22
+ function duplicateFieldDefinitionNameMessage(typeName, fieldName) {
23
+ return "Field \"".concat(typeName, ".").concat(fieldName, "\" can only be defined once.");
24
+ }
25
+
26
+ function existedFieldDefinitionNameMessage(typeName, fieldName) {
27
+ return "Field \"".concat(typeName, ".").concat(fieldName, "\" already exists in the schema. ") + 'It cannot also be defined in this type extension.';
28
+ }
29
+ /**
30
+ * Unique field definition names
31
+ *
32
+ * A GraphQL complex type is only valid if all its fields are uniquely named.
33
+ */
34
+
35
+
36
+ function UniqueFieldDefinitionNames(context) {
37
+ var schema = context.getSchema();
38
+ var existingTypeMap = schema ? schema.getTypeMap() : Object.create(null);
39
+ var knownFieldNames = Object.create(null);
40
+ return {
41
+ InputObjectTypeDefinition: checkFieldUniqueness,
42
+ InputObjectTypeExtension: checkFieldUniqueness,
43
+ InterfaceTypeDefinition: checkFieldUniqueness,
44
+ InterfaceTypeExtension: checkFieldUniqueness,
45
+ ObjectTypeDefinition: checkFieldUniqueness,
46
+ ObjectTypeExtension: checkFieldUniqueness
47
+ };
48
+
49
+ function checkFieldUniqueness(node) {
50
+ var typeName = node.name.value;
51
+
52
+ if (!knownFieldNames[typeName]) {
53
+ knownFieldNames[typeName] = Object.create(null);
54
+ }
55
+
56
+ var fieldNames = knownFieldNames[typeName];
57
+
58
+ if (node.fields) {
59
+ var _iteratorNormalCompletion = true;
60
+ var _didIteratorError = false;
61
+ var _iteratorError = undefined;
62
+
63
+ try {
64
+ for (var _iterator = node.fields[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
65
+ var fieldDef = _step.value;
66
+ var fieldName = fieldDef.name.value;
67
+
68
+ if (hasField(existingTypeMap[typeName], fieldName)) {
69
+ context.reportError(new _GraphQLError.GraphQLError(existedFieldDefinitionNameMessage(typeName, fieldName), fieldDef.name));
70
+ continue;
71
+ }
72
+
73
+ if (fieldNames[fieldName]) {
74
+ context.reportError(new _GraphQLError.GraphQLError(duplicateFieldDefinitionNameMessage(typeName, fieldName), [fieldNames[fieldName], fieldDef.name]));
75
+ } else {
76
+ fieldNames[fieldName] = fieldDef.name;
77
+ }
78
+ }
79
+ } catch (err) {
80
+ _didIteratorError = true;
81
+ _iteratorError = err;
82
+ } finally {
83
+ try {
84
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
85
+ _iterator.return();
86
+ }
87
+ } finally {
88
+ if (_didIteratorError) {
89
+ throw _iteratorError;
90
+ }
91
+ }
92
+ }
93
+ }
94
+
95
+ return false;
96
+ }
97
+ }
98
+
99
+ function hasField(type, fieldName) {
100
+ if ((0, _definition.isObjectType)(type) || (0, _definition.isInterfaceType)(type) || (0, _definition.isInputObjectType)(type)) {
101
+ return type.getFields()[fieldName];
102
+ }
103
+
104
+ return false;
105
+ }
@@ -0,0 +1,101 @@
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 {
14
+ isObjectType,
15
+ isInterfaceType,
16
+ isInputObjectType,
17
+ } from '../../type/definition';
18
+
19
+ export function duplicateFieldDefinitionNameMessage(
20
+ typeName: string,
21
+ fieldName: string,
22
+ ): string {
23
+ return `Field "${typeName}.${fieldName}" can only be defined once.`;
24
+ }
25
+
26
+ export function existedFieldDefinitionNameMessage(
27
+ typeName: string,
28
+ fieldName: string,
29
+ ): string {
30
+ return (
31
+ `Field "${typeName}.${fieldName}" already exists in the schema. ` +
32
+ 'It cannot also be defined in this type extension.'
33
+ );
34
+ }
35
+
36
+ /**
37
+ * Unique field definition names
38
+ *
39
+ * A GraphQL complex type is only valid if all its fields are uniquely named.
40
+ */
41
+ export function UniqueFieldDefinitionNames(
42
+ context: SDLValidationContext,
43
+ ): ASTVisitor {
44
+ const schema = context.getSchema();
45
+ const existingTypeMap = schema ? schema.getTypeMap() : Object.create(null);
46
+ const knownFieldNames = Object.create(null);
47
+
48
+ return {
49
+ InputObjectTypeDefinition: checkFieldUniqueness,
50
+ InputObjectTypeExtension: checkFieldUniqueness,
51
+ InterfaceTypeDefinition: checkFieldUniqueness,
52
+ InterfaceTypeExtension: checkFieldUniqueness,
53
+ ObjectTypeDefinition: checkFieldUniqueness,
54
+ ObjectTypeExtension: checkFieldUniqueness,
55
+ };
56
+
57
+ function checkFieldUniqueness(node) {
58
+ const typeName = node.name.value;
59
+
60
+ if (!knownFieldNames[typeName]) {
61
+ knownFieldNames[typeName] = Object.create(null);
62
+ }
63
+
64
+ const fieldNames = knownFieldNames[typeName];
65
+ if (node.fields) {
66
+ for (const fieldDef of node.fields) {
67
+ const fieldName = fieldDef.name.value;
68
+
69
+ if (hasField(existingTypeMap[typeName], fieldName)) {
70
+ context.reportError(
71
+ new GraphQLError(
72
+ existedFieldDefinitionNameMessage(typeName, fieldName),
73
+ fieldDef.name,
74
+ ),
75
+ );
76
+ continue;
77
+ }
78
+
79
+ if (fieldNames[fieldName]) {
80
+ context.reportError(
81
+ new GraphQLError(
82
+ duplicateFieldDefinitionNameMessage(typeName, fieldName),
83
+ [fieldNames[fieldName], fieldDef.name],
84
+ ),
85
+ );
86
+ } else {
87
+ fieldNames[fieldName] = fieldDef.name;
88
+ }
89
+ }
90
+ }
91
+
92
+ return false;
93
+ }
94
+ }
95
+
96
+ function hasField(type, fieldName) {
97
+ if (isObjectType(type) || isInterfaceType(type) || isInputObjectType(type)) {
98
+ return type.getFields()[fieldName];
99
+ }
100
+ return false;
101
+ }