graphql 0.0.1-test.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/LICENSE +21 -0
- package/NotSupportedTSVersion.d.ts +1 -0
- package/README.md +158 -0
- package/error/GraphQLError.d.ts +142 -0
- package/error/GraphQLError.js +267 -0
- package/error/GraphQLError.mjs +253 -0
- package/error/index.d.ts +7 -0
- package/error/index.js +41 -0
- package/error/index.mjs +3 -0
- package/error/locatedError.d.ts +13 -0
- package/error/locatedError.js +40 -0
- package/error/locatedError.mjs +32 -0
- package/error/syntaxError.d.ts +11 -0
- package/error/syntaxError.js +21 -0
- package/error/syntaxError.mjs +11 -0
- package/execution/collectFields.d.ts +45 -0
- package/execution/collectFields.js +229 -0
- package/execution/collectFields.mjs +213 -0
- package/execution/execute.d.ts +185 -0
- package/execution/execute.js +1016 -0
- package/execution/execute.mjs +988 -0
- package/execution/index.d.ts +14 -0
- package/execution/index.js +67 -0
- package/execution/index.mjs +9 -0
- package/execution/mapAsyncIterator.d.ts +9 -0
- package/execution/mapAsyncIterator.js +68 -0
- package/execution/mapAsyncIterator.mjs +61 -0
- package/execution/subscribe.d.ts +68 -0
- package/execution/subscribe.js +261 -0
- package/execution/subscribe.mjs +239 -0
- package/execution/values.d.ts +81 -0
- package/execution/values.js +292 -0
- package/execution/values.mjs +255 -0
- package/graphql.d.ts +67 -0
- package/graphql.js +96 -0
- package/graphql.mjs +122 -0
- package/index.d.ts +411 -0
- package/index.js +1263 -0
- package/index.mjs +254 -0
- package/jsutils/Maybe.d.ts +2 -0
- package/jsutils/Maybe.js +5 -0
- package/jsutils/Maybe.mjs +1 -0
- package/jsutils/ObjMap.d.ts +16 -0
- package/jsutils/ObjMap.js +5 -0
- package/jsutils/ObjMap.mjs +1 -0
- package/jsutils/Path.d.ts +20 -0
- package/jsutils/Path.js +33 -0
- package/jsutils/Path.mjs +25 -0
- package/jsutils/PromiseOrValue.d.ts +1 -0
- package/jsutils/PromiseOrValue.js +5 -0
- package/jsutils/PromiseOrValue.mjs +1 -0
- package/jsutils/devAssert.d.ts +1 -0
- package/jsutils/devAssert.js +14 -0
- package/jsutils/devAssert.mjs +7 -0
- package/jsutils/didYouMean.d.ts +8 -0
- package/jsutils/didYouMean.js +38 -0
- package/jsutils/didYouMean.mjs +32 -0
- package/jsutils/groupBy.d.ts +7 -0
- package/jsutils/groupBy.js +26 -0
- package/jsutils/groupBy.mjs +19 -0
- package/jsutils/identityFunc.d.ts +4 -0
- package/jsutils/identityFunc.js +13 -0
- package/jsutils/identityFunc.mjs +6 -0
- package/jsutils/inspect.d.ts +4 -0
- package/jsutils/inspect.js +121 -0
- package/jsutils/inspect.mjs +115 -0
- package/jsutils/instanceOf.d.ts +16 -0
- package/jsutils/instanceOf.js +60 -0
- package/jsutils/instanceOf.mjs +52 -0
- package/jsutils/invariant.d.ts +4 -0
- package/jsutils/invariant.js +16 -0
- package/jsutils/invariant.mjs +9 -0
- package/jsutils/isAsyncIterable.d.ts +7 -0
- package/jsutils/isAsyncIterable.js +18 -0
- package/jsutils/isAsyncIterable.mjs +11 -0
- package/jsutils/isIterableObject.d.ts +20 -0
- package/jsutils/isIterableObject.js +32 -0
- package/jsutils/isIterableObject.mjs +25 -0
- package/jsutils/isObjectLike.d.ts +7 -0
- package/jsutils/isObjectLike.js +14 -0
- package/jsutils/isObjectLike.mjs +7 -0
- package/jsutils/isPromise.d.ts +5 -0
- package/jsutils/isPromise.js +17 -0
- package/jsutils/isPromise.mjs +10 -0
- package/jsutils/keyMap.d.ts +32 -0
- package/jsutils/keyMap.js +43 -0
- package/jsutils/keyMap.mjs +36 -0
- package/jsutils/keyValMap.d.ts +23 -0
- package/jsutils/keyValMap.js +33 -0
- package/jsutils/keyValMap.mjs +26 -0
- package/jsutils/mapValue.d.ts +9 -0
- package/jsutils/mapValue.js +20 -0
- package/jsutils/mapValue.mjs +13 -0
- package/jsutils/memoize3.d.ts +9 -0
- package/jsutils/memoize3.js +41 -0
- package/jsutils/memoize3.mjs +34 -0
- package/jsutils/naturalCompare.d.ts +8 -0
- package/jsutils/naturalCompare.js +69 -0
- package/jsutils/naturalCompare.mjs +61 -0
- package/jsutils/printPathArray.d.ts +6 -0
- package/jsutils/printPathArray.js +17 -0
- package/jsutils/printPathArray.mjs +10 -0
- package/jsutils/promiseForObject.d.ts +11 -0
- package/jsutils/promiseForObject.js +25 -0
- package/jsutils/promiseForObject.mjs +18 -0
- package/jsutils/promiseReduce.d.ts +13 -0
- package/jsutils/promiseReduce.js +27 -0
- package/jsutils/promiseReduce.mjs +20 -0
- package/jsutils/suggestionList.d.ts +8 -0
- package/jsutils/suggestionList.js +139 -0
- package/jsutils/suggestionList.mjs +130 -0
- package/jsutils/toError.d.ts +4 -0
- package/jsutils/toError.js +25 -0
- package/jsutils/toError.mjs +18 -0
- package/jsutils/toObjMap.d.ts +5 -0
- package/jsutils/toObjMap.js +24 -0
- package/jsutils/toObjMap.mjs +17 -0
- package/language/ast.d.ts +536 -0
- package/language/ast.js +224 -0
- package/language/ast.mjs +206 -0
- package/language/blockString.d.ts +28 -0
- package/language/blockString.js +195 -0
- package/language/blockString.mjs +178 -0
- package/language/characterClasses.d.ts +47 -0
- package/language/characterClasses.js +75 -0
- package/language/characterClasses.mjs +64 -0
- package/language/directiveLocation.d.ts +32 -0
- package/language/directiveLocation.js +40 -0
- package/language/directiveLocation.mjs +31 -0
- package/language/index.d.ts +97 -0
- package/language/index.js +215 -0
- package/language/index.mjs +29 -0
- package/language/kinds.d.ts +65 -0
- package/language/kinds.js +64 -0
- package/language/kinds.mjs +55 -0
- package/language/lexer.d.ts +45 -0
- package/language/lexer.js +1006 -0
- package/language/lexer.mjs +902 -0
- package/language/location.d.ts +16 -0
- package/language/location.js +38 -0
- package/language/location.mjs +30 -0
- package/language/parser.d.ts +554 -0
- package/language/parser.js +1567 -0
- package/language/parser.mjs +1524 -0
- package/language/predicates.d.ts +33 -0
- package/language/predicates.js +109 -0
- package/language/predicates.mjs +81 -0
- package/language/printLocation.d.ts +14 -0
- package/language/printLocation.js +74 -0
- package/language/printLocation.mjs +66 -0
- package/language/printString.d.ts +5 -0
- package/language/printString.js +183 -0
- package/language/printString.mjs +176 -0
- package/language/printer.d.ts +6 -0
- package/language/printer.js +351 -0
- package/language/printer.mjs +339 -0
- package/language/source.d.ts +25 -0
- package/language/source.js +65 -0
- package/language/source.mjs +50 -0
- package/language/tokenKind.d.ts +34 -0
- package/language/tokenKind.js +44 -0
- package/language/tokenKind.mjs +35 -0
- package/language/visitor.d.ts +194 -0
- package/language/visitor.js +377 -0
- package/language/visitor.mjs +361 -0
- package/package.json +40 -0
- package/subscription/index.d.ts +19 -0
- package/subscription/index.js +19 -0
- package/subscription/index.mjs +19 -0
- package/type/assertName.d.ts +10 -0
- package/type/assertName.js +59 -0
- package/type/assertName.mjs +44 -0
- package/type/definition.d.ts +917 -0
- package/type/definition.js +1329 -0
- package/type/definition.mjs +1167 -0
- package/type/directives.d.ts +86 -0
- package/type/directives.js +224 -0
- package/type/directives.mjs +190 -0
- package/type/index.d.ts +150 -0
- package/type/index.js +547 -0
- package/type/index.mjs +103 -0
- package/type/introspection.d.ts +29 -0
- package/type/introspection.js +617 -0
- package/type/introspection.mjs +550 -0
- package/type/scalars.d.ts +19 -0
- package/type/scalars.js +359 -0
- package/type/scalars.mjs +299 -0
- package/type/schema.d.ts +170 -0
- package/type/schema.js +402 -0
- package/type/schema.mjs +381 -0
- package/type/validate.d.ts +17 -0
- package/type/validate.js +672 -0
- package/type/validate.mjs +647 -0
- package/utilities/TypeInfo.d.ts +67 -0
- package/utilities/TypeInfo.js +418 -0
- package/utilities/TypeInfo.mjs +395 -0
- package/utilities/assertValidName.d.ts +13 -0
- package/utilities/assertValidName.js +51 -0
- package/utilities/assertValidName.mjs +40 -0
- package/utilities/astFromValue.d.ts +28 -0
- package/utilities/astFromValue.js +190 -0
- package/utilities/astFromValue.mjs +177 -0
- package/utilities/buildASTSchema.d.ts +35 -0
- package/utilities/buildASTSchema.js +115 -0
- package/utilities/buildASTSchema.mjs +97 -0
- package/utilities/buildClientSchema.d.ts +19 -0
- package/utilities/buildClientSchema.js +386 -0
- package/utilities/buildClientSchema.mjs +363 -0
- package/utilities/coerceInputValue.d.ts +16 -0
- package/utilities/coerceInputValue.js +191 -0
- package/utilities/coerceInputValue.mjs +172 -0
- package/utilities/concatAST.d.ts +9 -0
- package/utilities/concatAST.js +26 -0
- package/utilities/concatAST.mjs +19 -0
- package/utilities/extendSchema.d.ts +40 -0
- package/utilities/extendSchema.js +798 -0
- package/utilities/extendSchema.mjs +789 -0
- package/utilities/findBreakingChanges.d.ts +51 -0
- package/utilities/findBreakingChanges.js +547 -0
- package/utilities/findBreakingChanges.mjs +516 -0
- package/utilities/getIntrospectionQuery.d.ts +182 -0
- package/utilities/getIntrospectionQuery.js +134 -0
- package/utilities/getIntrospectionQuery.mjs +127 -0
- package/utilities/getOperationAST.d.ts +11 -0
- package/utilities/getOperationAST.js +43 -0
- package/utilities/getOperationAST.mjs +36 -0
- package/utilities/getOperationRootType.d.ts +15 -0
- package/utilities/getOperationRootType.js +59 -0
- package/utilities/getOperationRootType.mjs +52 -0
- package/utilities/index.d.ts +61 -0
- package/utilities/index.js +233 -0
- package/utilities/index.mjs +55 -0
- package/utilities/introspectionFromSchema.d.ts +18 -0
- package/utilities/introspectionFromSchema.js +42 -0
- package/utilities/introspectionFromSchema.mjs +30 -0
- package/utilities/lexicographicSortSchema.d.ts +9 -0
- package/utilities/lexicographicSortSchema.js +177 -0
- package/utilities/lexicographicSortSchema.mjs +172 -0
- package/utilities/printSchema.d.ts +5 -0
- package/utilities/printSchema.js +333 -0
- package/utilities/printSchema.mjs +309 -0
- package/utilities/separateOperations.d.ts +11 -0
- package/utilities/separateOperations.js +88 -0
- package/utilities/separateOperations.mjs +80 -0
- package/utilities/sortValueNode.d.ts +9 -0
- package/utilities/sortValueNode.js +47 -0
- package/utilities/sortValueNode.mjs +39 -0
- package/utilities/stripIgnoredCharacters.d.ts +62 -0
- package/utilities/stripIgnoredCharacters.js +121 -0
- package/utilities/stripIgnoredCharacters.mjs +104 -0
- package/utilities/typeComparators.d.ts +32 -0
- package/utilities/typeComparators.js +116 -0
- package/utilities/typeComparators.mjs +106 -0
- package/utilities/typeFromAST.d.ts +32 -0
- package/utilities/typeFromAST.js +27 -0
- package/utilities/typeFromAST.mjs +18 -0
- package/utilities/typedQueryDocumentNode.d.ts +22 -0
- package/utilities/typedQueryDocumentNode.js +5 -0
- package/utilities/typedQueryDocumentNode.mjs +1 -0
- package/utilities/valueFromAST.d.ts +29 -0
- package/utilities/valueFromAST.js +185 -0
- package/utilities/valueFromAST.mjs +172 -0
- package/utilities/valueFromASTUntyped.d.ts +23 -0
- package/utilities/valueFromASTUntyped.js +61 -0
- package/utilities/valueFromASTUntyped.mjs +53 -0
- package/validation/ValidationContext.d.ts +95 -0
- package/validation/ValidationContext.js +232 -0
- package/validation/ValidationContext.mjs +212 -0
- package/validation/index.d.ts +40 -0
- package/validation/index.js +317 -0
- package/validation/index.mjs +68 -0
- package/validation/rules/ExecutableDefinitionsRule.d.ts +13 -0
- package/validation/rules/ExecutableDefinitionsRule.js +44 -0
- package/validation/rules/ExecutableDefinitionsRule.mjs +35 -0
- package/validation/rules/FieldsOnCorrectTypeRule.d.ts +13 -0
- package/validation/rules/FieldsOnCorrectTypeRule.js +143 -0
- package/validation/rules/FieldsOnCorrectTypeRule.mjs +125 -0
- package/validation/rules/FragmentsOnCompositeTypesRule.d.ts +14 -0
- package/validation/rules/FragmentsOnCompositeTypesRule.js +65 -0
- package/validation/rules/FragmentsOnCompositeTypesRule.mjs +49 -0
- package/validation/rules/KnownArgumentNamesRule.d.ts +23 -0
- package/validation/rules/KnownArgumentNamesRule.js +116 -0
- package/validation/rules/KnownArgumentNamesRule.mjs +98 -0
- package/validation/rules/KnownDirectivesRule.d.ts +16 -0
- package/validation/rules/KnownDirectivesRule.js +163 -0
- package/validation/rules/KnownDirectivesRule.mjs +146 -0
- package/validation/rules/KnownFragmentNamesRule.d.ts +13 -0
- package/validation/rules/KnownFragmentNamesRule.js +34 -0
- package/validation/rules/KnownFragmentNamesRule.mjs +24 -0
- package/validation/rules/KnownTypeNamesRule.d.ts +16 -0
- package/validation/rules/KnownTypeNamesRule.js +87 -0
- package/validation/rules/KnownTypeNamesRule.mjs +75 -0
- package/validation/rules/LoneAnonymousOperationRule.d.ts +13 -0
- package/validation/rules/LoneAnonymousOperationRule.js +40 -0
- package/validation/rules/LoneAnonymousOperationRule.mjs +32 -0
- package/validation/rules/LoneSchemaDefinitionRule.d.ts +10 -0
- package/validation/rules/LoneSchemaDefinitionRule.js +63 -0
- package/validation/rules/LoneSchemaDefinitionRule.mjs +53 -0
- package/validation/rules/NoFragmentCyclesRule.d.ts +13 -0
- package/validation/rules/NoFragmentCyclesRule.js +83 -0
- package/validation/rules/NoFragmentCyclesRule.mjs +76 -0
- package/validation/rules/NoUndefinedVariablesRule.d.ts +13 -0
- package/validation/rules/NoUndefinedVariablesRule.js +50 -0
- package/validation/rules/NoUndefinedVariablesRule.mjs +43 -0
- package/validation/rules/NoUnusedFragmentsRule.d.ts +13 -0
- package/validation/rules/NoUnusedFragmentsRule.js +59 -0
- package/validation/rules/NoUnusedFragmentsRule.mjs +52 -0
- package/validation/rules/NoUnusedVariablesRule.d.ts +13 -0
- package/validation/rules/NoUnusedVariablesRule.js +55 -0
- package/validation/rules/NoUnusedVariablesRule.mjs +48 -0
- package/validation/rules/OverlappingFieldsCanBeMergedRule-old.js +805 -0
- package/validation/rules/OverlappingFieldsCanBeMergedRule-old.mjs +788 -0
- package/validation/rules/OverlappingFieldsCanBeMergedRule.d.ts +14 -0
- package/validation/rules/OverlappingFieldsCanBeMergedRule.js +805 -0
- package/validation/rules/OverlappingFieldsCanBeMergedRule.mjs +788 -0
- package/validation/rules/PossibleFragmentSpreadsRule.d.ts +12 -0
- package/validation/rules/PossibleFragmentSpreadsRule.js +91 -0
- package/validation/rules/PossibleFragmentSpreadsRule.mjs +69 -0
- package/validation/rules/PossibleTypeExtensionsRule.d.ts +10 -0
- package/validation/rules/PossibleTypeExtensionsRule.js +167 -0
- package/validation/rules/PossibleTypeExtensionsRule.mjs +147 -0
- package/validation/rules/ProvidedRequiredArgumentsRule.d.ts +20 -0
- package/validation/rules/ProvidedRequiredArgumentsRule.js +158 -0
- package/validation/rules/ProvidedRequiredArgumentsRule.mjs +138 -0
- package/validation/rules/ScalarLeafsRule.d.ts +9 -0
- package/validation/rules/ScalarLeafsRule.js +51 -0
- package/validation/rules/ScalarLeafsRule.mjs +42 -0
- package/validation/rules/SingleFieldSubscriptionsRule.d.ts +13 -0
- package/validation/rules/SingleFieldSubscriptionsRule.js +82 -0
- package/validation/rules/SingleFieldSubscriptionsRule.mjs +73 -0
- package/validation/rules/UniqueArgumentDefinitionNamesRule.d.ts +11 -0
- package/validation/rules/UniqueArgumentDefinitionNamesRule.js +90 -0
- package/validation/rules/UniqueArgumentDefinitionNamesRule.mjs +79 -0
- package/validation/rules/UniqueArgumentNamesRule.d.ts +13 -0
- package/validation/rules/UniqueArgumentNamesRule.js +53 -0
- package/validation/rules/UniqueArgumentNamesRule.mjs +42 -0
- package/validation/rules/UniqueDirectiveNamesRule.d.ts +10 -0
- package/validation/rules/UniqueDirectiveNamesRule.js +50 -0
- package/validation/rules/UniqueDirectiveNamesRule.mjs +43 -0
- package/validation/rules/UniqueDirectivesPerLocationRule.d.ts +16 -0
- package/validation/rules/UniqueDirectivesPerLocationRule.js +93 -0
- package/validation/rules/UniqueDirectivesPerLocationRule.mjs +83 -0
- package/validation/rules/UniqueEnumValueNamesRule.d.ts +10 -0
- package/validation/rules/UniqueEnumValueNamesRule.js +71 -0
- package/validation/rules/UniqueEnumValueNamesRule.mjs +60 -0
- package/validation/rules/UniqueFieldDefinitionNamesRule.d.ts +10 -0
- package/validation/rules/UniqueFieldDefinitionNamesRule.js +83 -0
- package/validation/rules/UniqueFieldDefinitionNamesRule.mjs +75 -0
- package/validation/rules/UniqueFragmentNamesRule.d.ts +12 -0
- package/validation/rules/UniqueFragmentNamesRule.js +39 -0
- package/validation/rules/UniqueFragmentNamesRule.mjs +32 -0
- package/validation/rules/UniqueInputFieldNamesRule.d.ts +13 -0
- package/validation/rules/UniqueInputFieldNamesRule.js +52 -0
- package/validation/rules/UniqueInputFieldNamesRule.mjs +44 -0
- package/validation/rules/UniqueOperationNamesRule.d.ts +12 -0
- package/validation/rules/UniqueOperationNamesRule.js +41 -0
- package/validation/rules/UniqueOperationNamesRule.mjs +34 -0
- package/validation/rules/UniqueOperationTypesRule.d.ts +10 -0
- package/validation/rules/UniqueOperationTypesRule.js +67 -0
- package/validation/rules/UniqueOperationTypesRule.mjs +60 -0
- package/validation/rules/UniqueTypeNamesRule.d.ts +10 -0
- package/validation/rules/UniqueTypeNamesRule.js +53 -0
- package/validation/rules/UniqueTypeNamesRule.mjs +46 -0
- package/validation/rules/UniqueVariableNamesRule.d.ts +10 -0
- package/validation/rules/UniqueVariableNamesRule.js +47 -0
- package/validation/rules/UniqueVariableNamesRule.mjs +39 -0
- package/validation/rules/ValuesOfCorrectTypeRule.d.ts +13 -0
- package/validation/rules/ValuesOfCorrectTypeRule.js +183 -0
- package/validation/rules/ValuesOfCorrectTypeRule.mjs +164 -0
- package/validation/rules/VariablesAreInputTypesRule.d.ts +13 -0
- package/validation/rules/VariablesAreInputTypesRule.js +44 -0
- package/validation/rules/VariablesAreInputTypesRule.mjs +31 -0
- package/validation/rules/VariablesInAllowedPositionRule.d.ts +12 -0
- package/validation/rules/VariablesInAllowedPositionRule.js +114 -0
- package/validation/rules/VariablesInAllowedPositionRule.mjs +95 -0
- package/validation/rules/custom/NoDeprecatedCustomRule.d.ts +15 -0
- package/validation/rules/custom/NoDeprecatedCustomRule.js +121 -0
- package/validation/rules/custom/NoDeprecatedCustomRule.mjs +107 -0
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.ts +15 -0
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js +39 -0
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.mjs +30 -0
- package/validation/specifiedRules.d.ts +12 -0
- package/validation/specifiedRules.js +160 -0
- package/validation/specifiedRules.mjs +123 -0
- package/validation/validate.d.ts +61 -0
- package/validation/validate.js +151 -0
- package/validation/validate.mjs +133 -0
- package/version.d.ts +13 -0
- package/version.js +25 -0
- package/version.mjs +17 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ASTVisitor } from '../../language/visitor';
|
|
2
|
+
import type { ValidationContext } from '../ValidationContext';
|
|
3
|
+
/**
|
|
4
|
+
* Possible fragment spread
|
|
5
|
+
*
|
|
6
|
+
* A fragment spread is only valid if the type condition could ever possibly
|
|
7
|
+
* be true: if there is a non-empty intersection of the possible parent types,
|
|
8
|
+
* and possible types which pass the type condition.
|
|
9
|
+
*/
|
|
10
|
+
export declare function PossibleFragmentSpreadsRule(
|
|
11
|
+
context: ValidationContext,
|
|
12
|
+
): ASTVisitor;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
exports.PossibleFragmentSpreadsRule = PossibleFragmentSpreadsRule;
|
|
7
|
+
|
|
8
|
+
var _inspect = require('../../jsutils/inspect.js');
|
|
9
|
+
|
|
10
|
+
var _GraphQLError = require('../../error/GraphQLError.js');
|
|
11
|
+
|
|
12
|
+
var _definition = require('../../type/definition.js');
|
|
13
|
+
|
|
14
|
+
var _typeComparators = require('../../utilities/typeComparators.js');
|
|
15
|
+
|
|
16
|
+
var _typeFromAST = require('../../utilities/typeFromAST.js');
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Possible fragment spread
|
|
20
|
+
*
|
|
21
|
+
* A fragment spread is only valid if the type condition could ever possibly
|
|
22
|
+
* be true: if there is a non-empty intersection of the possible parent types,
|
|
23
|
+
* and possible types which pass the type condition.
|
|
24
|
+
*/
|
|
25
|
+
function PossibleFragmentSpreadsRule(context) {
|
|
26
|
+
return {
|
|
27
|
+
InlineFragment(node) {
|
|
28
|
+
const fragType = context.getType();
|
|
29
|
+
const parentType = context.getParentType();
|
|
30
|
+
|
|
31
|
+
if (
|
|
32
|
+
(0, _definition.isCompositeType)(fragType) &&
|
|
33
|
+
(0, _definition.isCompositeType)(parentType) &&
|
|
34
|
+
!(0, _typeComparators.doTypesOverlap)(
|
|
35
|
+
context.getSchema(),
|
|
36
|
+
fragType,
|
|
37
|
+
parentType,
|
|
38
|
+
)
|
|
39
|
+
) {
|
|
40
|
+
const parentTypeStr = (0, _inspect.inspect)(parentType);
|
|
41
|
+
const fragTypeStr = (0, _inspect.inspect)(fragType);
|
|
42
|
+
context.reportError(
|
|
43
|
+
new _GraphQLError.GraphQLError(
|
|
44
|
+
`Fragment cannot be spread here as objects of type "${parentTypeStr}" can never be of type "${fragTypeStr}".`,
|
|
45
|
+
node,
|
|
46
|
+
),
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
FragmentSpread(node) {
|
|
52
|
+
const fragName = node.name.value;
|
|
53
|
+
const fragType = getFragmentType(context, fragName);
|
|
54
|
+
const parentType = context.getParentType();
|
|
55
|
+
|
|
56
|
+
if (
|
|
57
|
+
fragType &&
|
|
58
|
+
parentType &&
|
|
59
|
+
!(0, _typeComparators.doTypesOverlap)(
|
|
60
|
+
context.getSchema(),
|
|
61
|
+
fragType,
|
|
62
|
+
parentType,
|
|
63
|
+
)
|
|
64
|
+
) {
|
|
65
|
+
const parentTypeStr = (0, _inspect.inspect)(parentType);
|
|
66
|
+
const fragTypeStr = (0, _inspect.inspect)(fragType);
|
|
67
|
+
context.reportError(
|
|
68
|
+
new _GraphQLError.GraphQLError(
|
|
69
|
+
`Fragment "${fragName}" cannot be spread here as objects of type "${parentTypeStr}" can never be of type "${fragTypeStr}".`,
|
|
70
|
+
node,
|
|
71
|
+
),
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function getFragmentType(context, name) {
|
|
79
|
+
const frag = context.getFragment(name);
|
|
80
|
+
|
|
81
|
+
if (frag) {
|
|
82
|
+
const type = (0, _typeFromAST.typeFromAST)(
|
|
83
|
+
context.getSchema(),
|
|
84
|
+
frag.typeCondition,
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
if ((0, _definition.isCompositeType)(type)) {
|
|
88
|
+
return type;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { inspect } from '../../jsutils/inspect.mjs';
|
|
2
|
+
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
3
|
+
import { isCompositeType } from '../../type/definition.mjs';
|
|
4
|
+
import { doTypesOverlap } from '../../utilities/typeComparators.mjs';
|
|
5
|
+
import { typeFromAST } from '../../utilities/typeFromAST.mjs';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Possible fragment spread
|
|
9
|
+
*
|
|
10
|
+
* A fragment spread is only valid if the type condition could ever possibly
|
|
11
|
+
* be true: if there is a non-empty intersection of the possible parent types,
|
|
12
|
+
* and possible types which pass the type condition.
|
|
13
|
+
*/
|
|
14
|
+
export function PossibleFragmentSpreadsRule(context) {
|
|
15
|
+
return {
|
|
16
|
+
InlineFragment(node) {
|
|
17
|
+
const fragType = context.getType();
|
|
18
|
+
const parentType = context.getParentType();
|
|
19
|
+
|
|
20
|
+
if (
|
|
21
|
+
isCompositeType(fragType) &&
|
|
22
|
+
isCompositeType(parentType) &&
|
|
23
|
+
!doTypesOverlap(context.getSchema(), fragType, parentType)
|
|
24
|
+
) {
|
|
25
|
+
const parentTypeStr = inspect(parentType);
|
|
26
|
+
const fragTypeStr = inspect(fragType);
|
|
27
|
+
context.reportError(
|
|
28
|
+
new GraphQLError(
|
|
29
|
+
`Fragment cannot be spread here as objects of type "${parentTypeStr}" can never be of type "${fragTypeStr}".`,
|
|
30
|
+
node,
|
|
31
|
+
),
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
FragmentSpread(node) {
|
|
37
|
+
const fragName = node.name.value;
|
|
38
|
+
const fragType = getFragmentType(context, fragName);
|
|
39
|
+
const parentType = context.getParentType();
|
|
40
|
+
|
|
41
|
+
if (
|
|
42
|
+
fragType &&
|
|
43
|
+
parentType &&
|
|
44
|
+
!doTypesOverlap(context.getSchema(), fragType, parentType)
|
|
45
|
+
) {
|
|
46
|
+
const parentTypeStr = inspect(parentType);
|
|
47
|
+
const fragTypeStr = inspect(fragType);
|
|
48
|
+
context.reportError(
|
|
49
|
+
new GraphQLError(
|
|
50
|
+
`Fragment "${fragName}" cannot be spread here as objects of type "${parentTypeStr}" can never be of type "${fragTypeStr}".`,
|
|
51
|
+
node,
|
|
52
|
+
),
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function getFragmentType(context, name) {
|
|
60
|
+
const frag = context.getFragment(name);
|
|
61
|
+
|
|
62
|
+
if (frag) {
|
|
63
|
+
const type = typeFromAST(context.getSchema(), frag.typeCondition);
|
|
64
|
+
|
|
65
|
+
if (isCompositeType(type)) {
|
|
66
|
+
return type;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ASTVisitor } from '../../language/visitor';
|
|
2
|
+
import type { SDLValidationContext } from '../ValidationContext';
|
|
3
|
+
/**
|
|
4
|
+
* Possible type extension
|
|
5
|
+
*
|
|
6
|
+
* A type extension is only valid if the type is defined and has the same kind.
|
|
7
|
+
*/
|
|
8
|
+
export declare function PossibleTypeExtensionsRule(
|
|
9
|
+
context: SDLValidationContext,
|
|
10
|
+
): ASTVisitor;
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
exports.PossibleTypeExtensionsRule = PossibleTypeExtensionsRule;
|
|
7
|
+
|
|
8
|
+
var _didYouMean = require('../../jsutils/didYouMean.js');
|
|
9
|
+
|
|
10
|
+
var _inspect = require('../../jsutils/inspect.js');
|
|
11
|
+
|
|
12
|
+
var _invariant = require('../../jsutils/invariant.js');
|
|
13
|
+
|
|
14
|
+
var _suggestionList = require('../../jsutils/suggestionList.js');
|
|
15
|
+
|
|
16
|
+
var _GraphQLError = require('../../error/GraphQLError.js');
|
|
17
|
+
|
|
18
|
+
var _kinds = require('../../language/kinds.js');
|
|
19
|
+
|
|
20
|
+
var _predicates = require('../../language/predicates.js');
|
|
21
|
+
|
|
22
|
+
var _definition = require('../../type/definition.js');
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Possible type extension
|
|
26
|
+
*
|
|
27
|
+
* A type extension is only valid if the type is defined and has the same kind.
|
|
28
|
+
*/
|
|
29
|
+
function PossibleTypeExtensionsRule(context) {
|
|
30
|
+
const schema = context.getSchema();
|
|
31
|
+
const definedTypes = Object.create(null);
|
|
32
|
+
|
|
33
|
+
for (const def of context.getDocument().definitions) {
|
|
34
|
+
if ((0, _predicates.isTypeDefinitionNode)(def)) {
|
|
35
|
+
definedTypes[def.name.value] = def;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
ScalarTypeExtension: checkExtension,
|
|
41
|
+
ObjectTypeExtension: checkExtension,
|
|
42
|
+
InterfaceTypeExtension: checkExtension,
|
|
43
|
+
UnionTypeExtension: checkExtension,
|
|
44
|
+
EnumTypeExtension: checkExtension,
|
|
45
|
+
InputObjectTypeExtension: checkExtension,
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
function checkExtension(node) {
|
|
49
|
+
const typeName = node.name.value;
|
|
50
|
+
const defNode = definedTypes[typeName];
|
|
51
|
+
const existingType =
|
|
52
|
+
schema === null || schema === void 0 ? void 0 : schema.getType(typeName);
|
|
53
|
+
let expectedKind;
|
|
54
|
+
|
|
55
|
+
if (defNode) {
|
|
56
|
+
expectedKind = defKindToExtKind[defNode.kind];
|
|
57
|
+
} else if (existingType) {
|
|
58
|
+
expectedKind = typeToExtKind(existingType);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (expectedKind) {
|
|
62
|
+
if (expectedKind !== node.kind) {
|
|
63
|
+
const kindStr = extensionKindToTypeName(node.kind);
|
|
64
|
+
context.reportError(
|
|
65
|
+
new _GraphQLError.GraphQLError(
|
|
66
|
+
`Cannot extend non-${kindStr} type "${typeName}".`,
|
|
67
|
+
defNode ? [defNode, node] : node,
|
|
68
|
+
),
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
} else {
|
|
72
|
+
const allTypeNames = Object.keys({
|
|
73
|
+
...definedTypes,
|
|
74
|
+
...(schema === null || schema === void 0
|
|
75
|
+
? void 0
|
|
76
|
+
: schema.getTypeMap()),
|
|
77
|
+
});
|
|
78
|
+
const suggestedTypes = (0, _suggestionList.suggestionList)(
|
|
79
|
+
typeName,
|
|
80
|
+
allTypeNames,
|
|
81
|
+
);
|
|
82
|
+
context.reportError(
|
|
83
|
+
new _GraphQLError.GraphQLError(
|
|
84
|
+
`Cannot extend type "${typeName}" because it is not defined.` +
|
|
85
|
+
(0, _didYouMean.didYouMean)(suggestedTypes),
|
|
86
|
+
node.name,
|
|
87
|
+
),
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const defKindToExtKind = {
|
|
94
|
+
[_kinds.Kind.SCALAR_TYPE_DEFINITION]: _kinds.Kind.SCALAR_TYPE_EXTENSION,
|
|
95
|
+
[_kinds.Kind.OBJECT_TYPE_DEFINITION]: _kinds.Kind.OBJECT_TYPE_EXTENSION,
|
|
96
|
+
[_kinds.Kind.INTERFACE_TYPE_DEFINITION]: _kinds.Kind.INTERFACE_TYPE_EXTENSION,
|
|
97
|
+
[_kinds.Kind.UNION_TYPE_DEFINITION]: _kinds.Kind.UNION_TYPE_EXTENSION,
|
|
98
|
+
[_kinds.Kind.ENUM_TYPE_DEFINITION]: _kinds.Kind.ENUM_TYPE_EXTENSION,
|
|
99
|
+
[_kinds.Kind.INPUT_OBJECT_TYPE_DEFINITION]:
|
|
100
|
+
_kinds.Kind.INPUT_OBJECT_TYPE_EXTENSION,
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
function typeToExtKind(type) {
|
|
104
|
+
if ((0, _definition.isScalarType)(type)) {
|
|
105
|
+
return _kinds.Kind.SCALAR_TYPE_EXTENSION;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if ((0, _definition.isObjectType)(type)) {
|
|
109
|
+
return _kinds.Kind.OBJECT_TYPE_EXTENSION;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if ((0, _definition.isInterfaceType)(type)) {
|
|
113
|
+
return _kinds.Kind.INTERFACE_TYPE_EXTENSION;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if ((0, _definition.isUnionType)(type)) {
|
|
117
|
+
return _kinds.Kind.UNION_TYPE_EXTENSION;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if ((0, _definition.isEnumType)(type)) {
|
|
121
|
+
return _kinds.Kind.ENUM_TYPE_EXTENSION;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if ((0, _definition.isInputObjectType)(type)) {
|
|
125
|
+
return _kinds.Kind.INPUT_OBJECT_TYPE_EXTENSION;
|
|
126
|
+
}
|
|
127
|
+
/* c8 ignore next 3 */
|
|
128
|
+
// Not reachable. All possible types have been considered
|
|
129
|
+
|
|
130
|
+
false ||
|
|
131
|
+
(0, _invariant.invariant)(
|
|
132
|
+
false,
|
|
133
|
+
'Unexpected type: ' + (0, _inspect.inspect)(type),
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function extensionKindToTypeName(kind) {
|
|
138
|
+
switch (kind) {
|
|
139
|
+
case _kinds.Kind.SCALAR_TYPE_EXTENSION:
|
|
140
|
+
return 'scalar';
|
|
141
|
+
|
|
142
|
+
case _kinds.Kind.OBJECT_TYPE_EXTENSION:
|
|
143
|
+
return 'object';
|
|
144
|
+
|
|
145
|
+
case _kinds.Kind.INTERFACE_TYPE_EXTENSION:
|
|
146
|
+
return 'interface';
|
|
147
|
+
|
|
148
|
+
case _kinds.Kind.UNION_TYPE_EXTENSION:
|
|
149
|
+
return 'union';
|
|
150
|
+
|
|
151
|
+
case _kinds.Kind.ENUM_TYPE_EXTENSION:
|
|
152
|
+
return 'enum';
|
|
153
|
+
|
|
154
|
+
case _kinds.Kind.INPUT_OBJECT_TYPE_EXTENSION:
|
|
155
|
+
return 'input object';
|
|
156
|
+
// Not reachable. All possible types have been considered
|
|
157
|
+
|
|
158
|
+
/* c8 ignore next */
|
|
159
|
+
|
|
160
|
+
default:
|
|
161
|
+
false ||
|
|
162
|
+
(0, _invariant.invariant)(
|
|
163
|
+
false,
|
|
164
|
+
'Unexpected kind: ' + (0, _inspect.inspect)(kind),
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { didYouMean } from '../../jsutils/didYouMean.mjs';
|
|
2
|
+
import { inspect } from '../../jsutils/inspect.mjs';
|
|
3
|
+
import { invariant } from '../../jsutils/invariant.mjs';
|
|
4
|
+
import { suggestionList } from '../../jsutils/suggestionList.mjs';
|
|
5
|
+
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
6
|
+
import { Kind } from '../../language/kinds.mjs';
|
|
7
|
+
import { isTypeDefinitionNode } from '../../language/predicates.mjs';
|
|
8
|
+
import {
|
|
9
|
+
isEnumType,
|
|
10
|
+
isInputObjectType,
|
|
11
|
+
isInterfaceType,
|
|
12
|
+
isObjectType,
|
|
13
|
+
isScalarType,
|
|
14
|
+
isUnionType,
|
|
15
|
+
} from '../../type/definition.mjs';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Possible type extension
|
|
19
|
+
*
|
|
20
|
+
* A type extension is only valid if the type is defined and has the same kind.
|
|
21
|
+
*/
|
|
22
|
+
export function PossibleTypeExtensionsRule(context) {
|
|
23
|
+
const schema = context.getSchema();
|
|
24
|
+
const definedTypes = Object.create(null);
|
|
25
|
+
|
|
26
|
+
for (const def of context.getDocument().definitions) {
|
|
27
|
+
if (isTypeDefinitionNode(def)) {
|
|
28
|
+
definedTypes[def.name.value] = def;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
ScalarTypeExtension: checkExtension,
|
|
34
|
+
ObjectTypeExtension: checkExtension,
|
|
35
|
+
InterfaceTypeExtension: checkExtension,
|
|
36
|
+
UnionTypeExtension: checkExtension,
|
|
37
|
+
EnumTypeExtension: checkExtension,
|
|
38
|
+
InputObjectTypeExtension: checkExtension,
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
function checkExtension(node) {
|
|
42
|
+
const typeName = node.name.value;
|
|
43
|
+
const defNode = definedTypes[typeName];
|
|
44
|
+
const existingType =
|
|
45
|
+
schema === null || schema === void 0 ? void 0 : schema.getType(typeName);
|
|
46
|
+
let expectedKind;
|
|
47
|
+
|
|
48
|
+
if (defNode) {
|
|
49
|
+
expectedKind = defKindToExtKind[defNode.kind];
|
|
50
|
+
} else if (existingType) {
|
|
51
|
+
expectedKind = typeToExtKind(existingType);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (expectedKind) {
|
|
55
|
+
if (expectedKind !== node.kind) {
|
|
56
|
+
const kindStr = extensionKindToTypeName(node.kind);
|
|
57
|
+
context.reportError(
|
|
58
|
+
new GraphQLError(
|
|
59
|
+
`Cannot extend non-${kindStr} type "${typeName}".`,
|
|
60
|
+
defNode ? [defNode, node] : node,
|
|
61
|
+
),
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
} else {
|
|
65
|
+
const allTypeNames = Object.keys({
|
|
66
|
+
...definedTypes,
|
|
67
|
+
...(schema === null || schema === void 0
|
|
68
|
+
? void 0
|
|
69
|
+
: schema.getTypeMap()),
|
|
70
|
+
});
|
|
71
|
+
const suggestedTypes = suggestionList(typeName, allTypeNames);
|
|
72
|
+
context.reportError(
|
|
73
|
+
new GraphQLError(
|
|
74
|
+
`Cannot extend type "${typeName}" because it is not defined.` +
|
|
75
|
+
didYouMean(suggestedTypes),
|
|
76
|
+
node.name,
|
|
77
|
+
),
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const defKindToExtKind = {
|
|
83
|
+
[Kind.SCALAR_TYPE_DEFINITION]: Kind.SCALAR_TYPE_EXTENSION,
|
|
84
|
+
[Kind.OBJECT_TYPE_DEFINITION]: Kind.OBJECT_TYPE_EXTENSION,
|
|
85
|
+
[Kind.INTERFACE_TYPE_DEFINITION]: Kind.INTERFACE_TYPE_EXTENSION,
|
|
86
|
+
[Kind.UNION_TYPE_DEFINITION]: Kind.UNION_TYPE_EXTENSION,
|
|
87
|
+
[Kind.ENUM_TYPE_DEFINITION]: Kind.ENUM_TYPE_EXTENSION,
|
|
88
|
+
[Kind.INPUT_OBJECT_TYPE_DEFINITION]: Kind.INPUT_OBJECT_TYPE_EXTENSION,
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
function typeToExtKind(type) {
|
|
92
|
+
if (isScalarType(type)) {
|
|
93
|
+
return Kind.SCALAR_TYPE_EXTENSION;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (isObjectType(type)) {
|
|
97
|
+
return Kind.OBJECT_TYPE_EXTENSION;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (isInterfaceType(type)) {
|
|
101
|
+
return Kind.INTERFACE_TYPE_EXTENSION;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (isUnionType(type)) {
|
|
105
|
+
return Kind.UNION_TYPE_EXTENSION;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (isEnumType(type)) {
|
|
109
|
+
return Kind.ENUM_TYPE_EXTENSION;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (isInputObjectType(type)) {
|
|
113
|
+
return Kind.INPUT_OBJECT_TYPE_EXTENSION;
|
|
114
|
+
}
|
|
115
|
+
/* c8 ignore next 3 */
|
|
116
|
+
// Not reachable. All possible types have been considered
|
|
117
|
+
|
|
118
|
+
false || invariant(false, 'Unexpected type: ' + inspect(type));
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function extensionKindToTypeName(kind) {
|
|
122
|
+
switch (kind) {
|
|
123
|
+
case Kind.SCALAR_TYPE_EXTENSION:
|
|
124
|
+
return 'scalar';
|
|
125
|
+
|
|
126
|
+
case Kind.OBJECT_TYPE_EXTENSION:
|
|
127
|
+
return 'object';
|
|
128
|
+
|
|
129
|
+
case Kind.INTERFACE_TYPE_EXTENSION:
|
|
130
|
+
return 'interface';
|
|
131
|
+
|
|
132
|
+
case Kind.UNION_TYPE_EXTENSION:
|
|
133
|
+
return 'union';
|
|
134
|
+
|
|
135
|
+
case Kind.ENUM_TYPE_EXTENSION:
|
|
136
|
+
return 'enum';
|
|
137
|
+
|
|
138
|
+
case Kind.INPUT_OBJECT_TYPE_EXTENSION:
|
|
139
|
+
return 'input object';
|
|
140
|
+
// Not reachable. All possible types have been considered
|
|
141
|
+
|
|
142
|
+
/* c8 ignore next */
|
|
143
|
+
|
|
144
|
+
default:
|
|
145
|
+
false || invariant(false, 'Unexpected kind: ' + inspect(kind));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ASTVisitor } from '../../language/visitor';
|
|
2
|
+
import type {
|
|
3
|
+
SDLValidationContext,
|
|
4
|
+
ValidationContext,
|
|
5
|
+
} from '../ValidationContext';
|
|
6
|
+
/**
|
|
7
|
+
* Provided required arguments
|
|
8
|
+
*
|
|
9
|
+
* A field or directive is only valid if all required (non-null without a
|
|
10
|
+
* default value) field arguments have been provided.
|
|
11
|
+
*/
|
|
12
|
+
export declare function ProvidedRequiredArgumentsRule(
|
|
13
|
+
context: ValidationContext,
|
|
14
|
+
): ASTVisitor;
|
|
15
|
+
/**
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
export declare function ProvidedRequiredArgumentsOnDirectivesRule(
|
|
19
|
+
context: ValidationContext | SDLValidationContext,
|
|
20
|
+
): ASTVisitor;
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
exports.ProvidedRequiredArgumentsOnDirectivesRule =
|
|
7
|
+
ProvidedRequiredArgumentsOnDirectivesRule;
|
|
8
|
+
exports.ProvidedRequiredArgumentsRule = ProvidedRequiredArgumentsRule;
|
|
9
|
+
|
|
10
|
+
var _inspect = require('../../jsutils/inspect.js');
|
|
11
|
+
|
|
12
|
+
var _keyMap = require('../../jsutils/keyMap.js');
|
|
13
|
+
|
|
14
|
+
var _GraphQLError = require('../../error/GraphQLError.js');
|
|
15
|
+
|
|
16
|
+
var _kinds = require('../../language/kinds.js');
|
|
17
|
+
|
|
18
|
+
var _printer = require('../../language/printer.js');
|
|
19
|
+
|
|
20
|
+
var _definition = require('../../type/definition.js');
|
|
21
|
+
|
|
22
|
+
var _directives = require('../../type/directives.js');
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Provided required arguments
|
|
26
|
+
*
|
|
27
|
+
* A field or directive is only valid if all required (non-null without a
|
|
28
|
+
* default value) field arguments have been provided.
|
|
29
|
+
*/
|
|
30
|
+
function ProvidedRequiredArgumentsRule(context) {
|
|
31
|
+
return {
|
|
32
|
+
// eslint-disable-next-line new-cap
|
|
33
|
+
...ProvidedRequiredArgumentsOnDirectivesRule(context),
|
|
34
|
+
Field: {
|
|
35
|
+
// Validate on leave to allow for deeper errors to appear first.
|
|
36
|
+
leave(fieldNode) {
|
|
37
|
+
var _fieldNode$arguments;
|
|
38
|
+
|
|
39
|
+
const fieldDef = context.getFieldDef();
|
|
40
|
+
|
|
41
|
+
if (!fieldDef) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const providedArgs = new Set( // FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
46
|
+
/* c8 ignore next */
|
|
47
|
+
(_fieldNode$arguments = fieldNode.arguments) === null ||
|
|
48
|
+
_fieldNode$arguments === void 0
|
|
49
|
+
? void 0
|
|
50
|
+
: _fieldNode$arguments.map((arg) => arg.name.value),
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
for (const argDef of fieldDef.args) {
|
|
54
|
+
if (
|
|
55
|
+
!providedArgs.has(argDef.name) &&
|
|
56
|
+
(0, _definition.isRequiredArgument)(argDef)
|
|
57
|
+
) {
|
|
58
|
+
const argTypeStr = (0, _inspect.inspect)(argDef.type);
|
|
59
|
+
context.reportError(
|
|
60
|
+
new _GraphQLError.GraphQLError(
|
|
61
|
+
`Field "${fieldDef.name}" argument "${argDef.name}" of type "${argTypeStr}" is required, but it was not provided.`,
|
|
62
|
+
fieldNode,
|
|
63
|
+
),
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* @internal
|
|
73
|
+
*/
|
|
74
|
+
|
|
75
|
+
function ProvidedRequiredArgumentsOnDirectivesRule(context) {
|
|
76
|
+
var _schema$getDirectives;
|
|
77
|
+
|
|
78
|
+
const requiredArgsMap = Object.create(null);
|
|
79
|
+
const schema = context.getSchema();
|
|
80
|
+
const definedDirectives =
|
|
81
|
+
(_schema$getDirectives =
|
|
82
|
+
schema === null || schema === void 0
|
|
83
|
+
? void 0
|
|
84
|
+
: schema.getDirectives()) !== null && _schema$getDirectives !== void 0
|
|
85
|
+
? _schema$getDirectives
|
|
86
|
+
: _directives.specifiedDirectives;
|
|
87
|
+
|
|
88
|
+
for (const directive of definedDirectives) {
|
|
89
|
+
requiredArgsMap[directive.name] = (0, _keyMap.keyMap)(
|
|
90
|
+
directive.args.filter(_definition.isRequiredArgument),
|
|
91
|
+
(arg) => arg.name,
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const astDefinitions = context.getDocument().definitions;
|
|
96
|
+
|
|
97
|
+
for (const def of astDefinitions) {
|
|
98
|
+
if (def.kind === _kinds.Kind.DIRECTIVE_DEFINITION) {
|
|
99
|
+
var _def$arguments;
|
|
100
|
+
|
|
101
|
+
// FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
102
|
+
|
|
103
|
+
/* c8 ignore next */
|
|
104
|
+
const argNodes =
|
|
105
|
+
(_def$arguments = def.arguments) !== null && _def$arguments !== void 0
|
|
106
|
+
? _def$arguments
|
|
107
|
+
: [];
|
|
108
|
+
requiredArgsMap[def.name.value] = (0, _keyMap.keyMap)(
|
|
109
|
+
argNodes.filter(isRequiredArgumentNode),
|
|
110
|
+
(arg) => arg.name.value,
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return {
|
|
116
|
+
Directive: {
|
|
117
|
+
// Validate on leave to allow for deeper errors to appear first.
|
|
118
|
+
leave(directiveNode) {
|
|
119
|
+
const directiveName = directiveNode.name.value;
|
|
120
|
+
const requiredArgs = requiredArgsMap[directiveName];
|
|
121
|
+
|
|
122
|
+
if (requiredArgs) {
|
|
123
|
+
var _directiveNode$argume;
|
|
124
|
+
|
|
125
|
+
// FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
126
|
+
|
|
127
|
+
/* c8 ignore next */
|
|
128
|
+
const argNodes =
|
|
129
|
+
(_directiveNode$argume = directiveNode.arguments) !== null &&
|
|
130
|
+
_directiveNode$argume !== void 0
|
|
131
|
+
? _directiveNode$argume
|
|
132
|
+
: [];
|
|
133
|
+
const argNodeMap = new Set(argNodes.map((arg) => arg.name.value));
|
|
134
|
+
|
|
135
|
+
for (const [argName, argDef] of Object.entries(requiredArgs)) {
|
|
136
|
+
if (!argNodeMap.has(argName)) {
|
|
137
|
+
const argType = (0, _definition.isType)(argDef.type)
|
|
138
|
+
? (0, _inspect.inspect)(argDef.type)
|
|
139
|
+
: (0, _printer.print)(argDef.type);
|
|
140
|
+
context.reportError(
|
|
141
|
+
new _GraphQLError.GraphQLError(
|
|
142
|
+
`Directive "@${directiveName}" argument "${argName}" of type "${argType}" is required, but it was not provided.`,
|
|
143
|
+
directiveNode,
|
|
144
|
+
),
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function isRequiredArgumentNode(arg) {
|
|
155
|
+
return (
|
|
156
|
+
arg.type.kind === _kinds.Kind.NON_NULL_TYPE && arg.defaultValue == null
|
|
157
|
+
);
|
|
158
|
+
}
|