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
|
@@ -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
|
-
*
|
|
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
|
-
|
|
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 (!
|
|
65
|
-
|
|
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 {
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
46
|
-
|
|
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
|
-
*
|
|
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
|
-
|
|
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 (!
|
|
51
|
-
|
|
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
|
-
*
|
|
19
|
+
*
|
|
20
20
|
*/
|
|
21
21
|
function anonOperationNotAloneMessage() {
|
|
22
22
|
return 'This anonymous operation must be the only defined operation.';
|
|
@@ -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
|
-
*
|
|
18
|
+
*
|
|
19
19
|
*/
|
|
20
20
|
function schemaDefinitionNotAloneMessage() {
|
|
21
21
|
return 'Must provide only one schema definition.';
|
|
@@ -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 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 {
|
|
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:
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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 {
|
|
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:
|
|
24
|
+
export function NoUnusedFragments(context: ASTValidationContext): ASTVisitor {
|
|
25
25
|
const operationDefs = [];
|
|
26
26
|
const fragmentDefs = [];
|
|
27
27
|
|
|
@@ -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 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
|
-
*
|
|
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
|
-
|
|
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)) + '
|
|
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
|
-
|
|
298
|
-
var
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
var
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
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
|
|
358
|
+
var _arr = Object.keys(fieldMap1);
|
|
333
359
|
|
|
334
|
-
for (var
|
|
335
|
-
var responseName =
|
|
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 (
|
|
531
|
-
var reason =
|
|
556
|
+
return [[responseName, conflicts.map(function (_ref6) {
|
|
557
|
+
var reason = _ref6[0];
|
|
532
558
|
return reason;
|
|
533
|
-
})], conflicts.reduce(function (allFields,
|
|
534
|
-
var fields1 =
|
|
559
|
+
})], conflicts.reduce(function (allFields, _ref7) {
|
|
560
|
+
var fields1 = _ref7[1];
|
|
535
561
|
return allFields.concat(fields1);
|
|
536
|
-
}, [node1]), conflicts.reduce(function (allFields,
|
|
537
|
-
var fields2 =
|
|
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
|
-
'
|
|
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
|
|
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.
|