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.
- package/README.md +4 -4
- package/error/GraphQLError.js +1 -1
- package/error/GraphQLError.js.flow +3 -3
- package/error/GraphQLError.mjs +1 -1
- package/error/formatError.js +1 -1
- package/error/formatError.mjs +1 -1
- package/error/index.mjs +1 -1
- package/error/locatedError.js +1 -1
- package/error/locatedError.mjs +1 -1
- package/error/printError.js +1 -1
- package/error/printError.mjs +1 -1
- package/error/syntaxError.js +1 -1
- package/error/syntaxError.mjs +1 -1
- package/execution/execute.js +4 -4
- package/execution/execute.js.flow +4 -6
- package/execution/execute.mjs +5 -5
- package/execution/index.mjs +1 -1
- package/execution/values.js +4 -4
- package/execution/values.js.flow +3 -3
- package/execution/values.mjs +3 -3
- package/graphql.js +1 -1
- package/graphql.mjs +1 -1
- package/index.js +12 -0
- package/index.js.flow +4 -0
- package/index.mjs +4 -4
- package/jsutils/dedent.js +2 -2
- package/jsutils/dedent.js.flow +1 -1
- package/jsutils/dedent.mjs +2 -2
- package/jsutils/defineToJSON.js +17 -6
- package/jsutils/defineToJSON.js.flow +14 -5
- package/jsutils/defineToJSON.mjs +14 -6
- package/jsutils/defineToStringTag.js +5 -5
- package/jsutils/defineToStringTag.js.flow +3 -3
- package/jsutils/defineToStringTag.mjs +4 -4
- package/jsutils/inspect.js +46 -12
- package/jsutils/inspect.js.flow +42 -15
- package/jsutils/inspect.mjs +45 -5
- package/jsutils/instanceOf.js +1 -1
- package/jsutils/instanceOf.mjs +1 -1
- package/jsutils/invariant.js +1 -1
- package/jsutils/invariant.mjs +1 -1
- package/jsutils/isInvalid.js +1 -1
- package/jsutils/isInvalid.mjs +1 -1
- package/jsutils/isNullish.js +1 -1
- package/jsutils/isNullish.mjs +1 -1
- package/jsutils/isPromise.js +1 -1
- package/jsutils/isPromise.mjs +1 -1
- package/jsutils/keyMap.js +1 -1
- package/jsutils/keyMap.mjs +1 -1
- package/jsutils/keyValMap.js +1 -1
- package/jsutils/keyValMap.mjs +1 -1
- package/jsutils/mapValue.js +54 -0
- package/jsutils/mapValue.js.flow +27 -0
- package/jsutils/mapValue.mjs +44 -0
- package/jsutils/memoize3.js +1 -1
- package/jsutils/memoize3.mjs +1 -1
- package/jsutils/nodejsCustomInspectSymbol.js +18 -0
- package/jsutils/nodejsCustomInspectSymbol.js.flow +15 -0
- package/jsutils/nodejsCustomInspectSymbol.mjs +10 -0
- package/jsutils/orList.js +17 -4
- package/jsutils/orList.js.flow +13 -7
- package/jsutils/orList.mjs +14 -4
- package/jsutils/promiseForObject.js +1 -1
- package/jsutils/promiseForObject.mjs +1 -1
- package/jsutils/promiseReduce.js +1 -1
- package/jsutils/promiseReduce.mjs +1 -1
- package/jsutils/quotedOrList.js +1 -1
- package/jsutils/quotedOrList.mjs +1 -1
- package/jsutils/suggestionList.js +1 -1
- package/jsutils/suggestionList.mjs +1 -1
- package/language/blockStringValue.js +2 -2
- package/language/blockStringValue.js.flow +1 -1
- package/language/blockStringValue.mjs +2 -2
- package/language/directiveLocation.js +1 -1
- package/language/directiveLocation.mjs +1 -1
- package/language/index.mjs +1 -1
- package/language/kinds.js +1 -1
- package/language/kinds.mjs +1 -1
- package/language/lexer.js +29 -13
- package/language/lexer.js.flow +34 -20
- package/language/lexer.mjs +28 -13
- package/language/location.js +1 -1
- package/language/location.mjs +1 -1
- package/language/parser.js +31 -38
- package/language/parser.js.flow +32 -48
- package/language/parser.mjs +30 -38
- package/language/predicates.js +1 -1
- package/language/predicates.mjs +1 -1
- package/language/printer.js +13 -7
- package/language/printer.js.flow +19 -9
- package/language/printer.mjs +13 -7
- package/language/source.js +8 -7
- package/language/source.mjs +1 -9
- package/language/visitor.js +11 -20
- package/language/visitor.js.flow +4 -5
- package/language/visitor.mjs +8 -20
- package/package.json +10 -3
- package/polyfills/find.js +31 -0
- package/polyfills/find.js.flow +29 -0
- package/polyfills/find.mjs +23 -0
- package/{jsutils → polyfills}/isFinite.js +1 -1
- package/{jsutils → polyfills}/isFinite.js.flow +0 -0
- package/{jsutils → polyfills}/isFinite.mjs +1 -1
- package/{jsutils → polyfills}/isInteger.js +1 -1
- package/{jsutils → polyfills}/isInteger.js.flow +0 -0
- package/{jsutils → polyfills}/isInteger.mjs +1 -1
- package/polyfills/objectEntries.js +26 -0
- package/polyfills/objectEntries.js.flow +19 -0
- package/polyfills/objectEntries.mjs +18 -0
- package/{jsutils → polyfills}/objectValues.js +1 -1
- package/{jsutils → polyfills}/objectValues.js.flow +1 -1
- package/{jsutils → polyfills}/objectValues.mjs +1 -1
- package/subscription/asyncIteratorReject.mjs +1 -1
- package/subscription/index.mjs +1 -1
- package/subscription/mapAsyncIterator.mjs +1 -1
- package/subscription/subscribe.js +1 -1
- package/subscription/subscribe.js.flow +1 -1
- package/subscription/subscribe.mjs +2 -2
- package/type/definition.js +31 -130
- package/type/definition.js.flow +35 -47
- package/type/definition.mjs +30 -131
- package/type/directives.js +25 -29
- package/type/directives.js.flow +24 -20
- package/type/directives.mjs +22 -30
- package/type/index.js +12 -0
- package/type/index.js.flow +4 -0
- package/type/index.mjs +5 -3
- package/type/introspection.js +3 -3
- package/type/introspection.js.flow +1 -1
- package/type/introspection.mjs +2 -2
- package/type/scalars.js +45 -34
- package/type/scalars.js.flow +40 -26
- package/type/scalars.mjs +44 -26
- package/type/schema.js +82 -87
- package/type/schema.js.flow +17 -9
- package/type/schema.mjs +79 -86
- package/type/validate.js +168 -175
- package/type/validate.js.flow +8 -49
- package/type/validate.mjs +159 -175
- package/utilities/TypeInfo.js +10 -23
- package/utilities/TypeInfo.js.flow +1 -1
- package/utilities/TypeInfo.mjs +2 -24
- package/utilities/assertValidName.js +1 -1
- package/utilities/assertValidName.mjs +1 -1
- package/utilities/astFromValue.js +2 -2
- package/utilities/astFromValue.js.flow +1 -1
- package/utilities/astFromValue.mjs +2 -2
- package/utilities/buildASTSchema.js +169 -152
- package/utilities/buildASTSchema.js.flow +117 -113
- package/utilities/buildASTSchema.mjs +160 -152
- package/utilities/buildClientSchema.js +24 -14
- package/utilities/buildClientSchema.js.flow +24 -14
- package/utilities/buildClientSchema.mjs +23 -14
- package/utilities/coerceValue.js +38 -19
- package/utilities/coerceValue.js.flow +41 -47
- package/utilities/coerceValue.mjs +38 -20
- package/utilities/concatAST.js +1 -1
- package/utilities/concatAST.mjs +1 -1
- package/utilities/extendSchema.js +228 -312
- package/utilities/extendSchema.js.flow +27 -152
- package/utilities/extendSchema.mjs +229 -312
- package/utilities/findBreakingChanges.js +7 -5
- package/utilities/findBreakingChanges.js.flow +3 -2
- package/utilities/findBreakingChanges.mjs +6 -5
- package/utilities/findDeprecatedUsages.js +1 -1
- package/utilities/findDeprecatedUsages.mjs +1 -1
- package/utilities/getOperationAST.js +1 -1
- package/utilities/getOperationAST.mjs +1 -1
- package/utilities/getOperationRootType.js +1 -1
- package/utilities/getOperationRootType.mjs +1 -1
- package/utilities/index.mjs +1 -1
- package/utilities/introspectionFromSchema.js +1 -1
- package/utilities/introspectionFromSchema.mjs +1 -1
- package/utilities/introspectionQuery.js +1 -1
- package/utilities/introspectionQuery.mjs +1 -1
- package/utilities/isValidJSValue.js +1 -1
- package/utilities/isValidJSValue.mjs +1 -1
- package/utilities/isValidLiteralValue.js +1 -1
- package/utilities/isValidLiteralValue.mjs +1 -1
- package/utilities/lexicographicSortSchema.js +2 -2
- package/utilities/lexicographicSortSchema.js.flow +1 -1
- package/utilities/lexicographicSortSchema.mjs +2 -2
- package/utilities/schemaPrinter.js +3 -3
- package/utilities/schemaPrinter.js.flow +1 -1
- package/utilities/schemaPrinter.mjs +2 -2
- package/utilities/separateOperations.js +1 -1
- package/utilities/separateOperations.mjs +1 -1
- package/utilities/typeComparators.js +1 -1
- package/utilities/typeComparators.mjs +1 -1
- package/utilities/typeFromAST.js +1 -1
- package/utilities/typeFromAST.mjs +1 -1
- package/utilities/valueFromAST.js +3 -3
- package/utilities/valueFromAST.js.flow +1 -1
- package/utilities/valueFromAST.mjs +2 -2
- package/utilities/valueFromASTUntyped.js +1 -1
- package/utilities/valueFromASTUntyped.mjs +1 -1
- package/validation/ValidationContext.js +57 -82
- package/validation/ValidationContext.js.flow +52 -49
- package/validation/ValidationContext.mjs +52 -77
- package/validation/index.js.flow +1 -0
- package/validation/index.mjs +1 -1
- package/validation/rules/ExecutableDefinitions.js +1 -1
- package/validation/rules/ExecutableDefinitions.js.flow +1 -1
- package/validation/rules/ExecutableDefinitions.mjs +1 -1
- package/validation/rules/FieldsOnCorrectType.js +1 -1
- package/validation/rules/FieldsOnCorrectType.mjs +1 -1
- package/validation/rules/FragmentsOnCompositeTypes.js +1 -1
- package/validation/rules/FragmentsOnCompositeTypes.mjs +1 -1
- package/validation/rules/KnownArgumentNames.mjs +1 -1
- package/validation/rules/KnownDirectives.js +1 -1
- package/validation/rules/KnownDirectives.mjs +1 -1
- package/validation/rules/KnownFragmentNames.js +1 -1
- package/validation/rules/KnownFragmentNames.mjs +1 -1
- package/validation/rules/KnownTypeNames.js +59 -21
- package/validation/rules/KnownTypeNames.js.flow +54 -20
- package/validation/rules/KnownTypeNames.mjs +56 -21
- package/validation/rules/LoneAnonymousOperation.js +1 -1
- package/validation/rules/LoneAnonymousOperation.mjs +1 -1
- package/validation/rules/LoneSchemaDefinition.js +1 -1
- package/validation/rules/LoneSchemaDefinition.mjs +1 -1
- package/validation/rules/NoFragmentCycles.js +1 -1
- package/validation/rules/NoFragmentCycles.js.flow +2 -2
- package/validation/rules/NoFragmentCycles.mjs +1 -1
- package/validation/rules/NoUndefinedVariables.js +1 -1
- package/validation/rules/NoUndefinedVariables.mjs +1 -1
- package/validation/rules/NoUnusedFragments.js +1 -1
- package/validation/rules/NoUnusedFragments.js.flow +2 -2
- package/validation/rules/NoUnusedFragments.mjs +1 -1
- package/validation/rules/NoUnusedVariables.js +1 -1
- package/validation/rules/NoUnusedVariables.mjs +1 -1
- package/validation/rules/OverlappingFieldsCanBeMerged.js +57 -33
- package/validation/rules/OverlappingFieldsCanBeMerged.js.flow +5 -6
- package/validation/rules/OverlappingFieldsCanBeMerged.mjs +48 -33
- package/validation/rules/PossibleFragmentSpreads.js +1 -1
- package/validation/rules/PossibleFragmentSpreads.mjs +1 -1
- package/validation/rules/PossibleTypeExtensions.js +158 -0
- package/validation/rules/PossibleTypeExtensions.js.flow +160 -0
- package/validation/rules/PossibleTypeExtensions.mjs +146 -0
- package/validation/rules/ProvidedRequiredArguments.mjs +1 -1
- package/validation/rules/ScalarLeafs.js +1 -1
- package/validation/rules/ScalarLeafs.mjs +1 -1
- package/validation/rules/SingleFieldSubscriptions.js +1 -1
- package/validation/rules/SingleFieldSubscriptions.mjs +1 -1
- package/validation/rules/UniqueArgumentNames.js +1 -1
- package/validation/rules/UniqueArgumentNames.mjs +1 -1
- package/validation/rules/UniqueDirectiveNames.js +55 -0
- package/validation/rules/UniqueDirectiveNames.js.flow +64 -0
- package/validation/rules/UniqueDirectiveNames.mjs +43 -0
- package/validation/rules/UniqueDirectivesPerLocation.js +1 -1
- package/validation/rules/UniqueDirectivesPerLocation.mjs +1 -1
- package/validation/rules/UniqueEnumValueNames.js +94 -0
- package/validation/rules/UniqueEnumValueNames.js.flow +87 -0
- package/validation/rules/UniqueEnumValueNames.mjs +81 -0
- package/validation/rules/UniqueFieldDefinitionNames.js +105 -0
- package/validation/rules/UniqueFieldDefinitionNames.js.flow +101 -0
- package/validation/rules/UniqueFieldDefinitionNames.mjs +92 -0
- package/validation/rules/UniqueFragmentNames.js +1 -1
- package/validation/rules/UniqueFragmentNames.mjs +1 -1
- package/validation/rules/UniqueInputFieldNames.js +1 -1
- package/validation/rules/UniqueInputFieldNames.mjs +1 -1
- package/validation/rules/UniqueOperationNames.js +1 -1
- package/validation/rules/UniqueOperationNames.mjs +1 -1
- package/validation/rules/UniqueOperationTypes.js +85 -0
- package/validation/rules/UniqueOperationTypes.js.flow +76 -0
- package/validation/rules/UniqueOperationTypes.mjs +73 -0
- package/validation/rules/UniqueTypeNames.js +62 -0
- package/validation/rules/UniqueTypeNames.js.flow +67 -0
- package/validation/rules/UniqueTypeNames.mjs +50 -0
- package/validation/rules/UniqueVariableNames.js +1 -1
- package/validation/rules/UniqueVariableNames.mjs +1 -1
- package/validation/rules/ValuesOfCorrectType.js +29 -13
- package/validation/rules/ValuesOfCorrectType.js.flow +4 -5
- package/validation/rules/ValuesOfCorrectType.mjs +28 -13
- package/validation/rules/VariablesAreInputTypes.js +1 -1
- package/validation/rules/VariablesAreInputTypes.mjs +1 -1
- package/validation/rules/VariablesInAllowedPosition.js +4 -4
- package/validation/rules/VariablesInAllowedPosition.mjs +4 -4
- package/validation/specifiedRules.js +14 -2
- package/validation/specifiedRules.js.flow +13 -0
- package/validation/specifiedRules.mjs +8 -2
- package/validation/validate.js +1 -1
- package/validation/validate.mjs +1 -1
- package/jsutils/find.js +0 -22
- package/jsutils/find.js.flow +0 -19
- 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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
var
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
|
100
|
-
const
|
|
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,
|
|
105
|
+
requiredFieldMessage(type.name, fieldDef.name, typeStr),
|
|
107
106
|
node,
|
|
108
107
|
),
|
|
109
108
|
);
|