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,138 @@
|
|
|
1
|
+
import { inspect } from '../../jsutils/inspect.mjs';
|
|
2
|
+
import { keyMap } from '../../jsutils/keyMap.mjs';
|
|
3
|
+
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
4
|
+
import { Kind } from '../../language/kinds.mjs';
|
|
5
|
+
import { print } from '../../language/printer.mjs';
|
|
6
|
+
import { isRequiredArgument, isType } from '../../type/definition.mjs';
|
|
7
|
+
import { specifiedDirectives } from '../../type/directives.mjs';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Provided required arguments
|
|
11
|
+
*
|
|
12
|
+
* A field or directive is only valid if all required (non-null without a
|
|
13
|
+
* default value) field arguments have been provided.
|
|
14
|
+
*/
|
|
15
|
+
export function ProvidedRequiredArgumentsRule(context) {
|
|
16
|
+
return {
|
|
17
|
+
// eslint-disable-next-line new-cap
|
|
18
|
+
...ProvidedRequiredArgumentsOnDirectivesRule(context),
|
|
19
|
+
Field: {
|
|
20
|
+
// Validate on leave to allow for deeper errors to appear first.
|
|
21
|
+
leave(fieldNode) {
|
|
22
|
+
var _fieldNode$arguments;
|
|
23
|
+
|
|
24
|
+
const fieldDef = context.getFieldDef();
|
|
25
|
+
|
|
26
|
+
if (!fieldDef) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const providedArgs = new Set( // FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
31
|
+
/* c8 ignore next */
|
|
32
|
+
(_fieldNode$arguments = fieldNode.arguments) === null ||
|
|
33
|
+
_fieldNode$arguments === void 0
|
|
34
|
+
? void 0
|
|
35
|
+
: _fieldNode$arguments.map((arg) => arg.name.value),
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
for (const argDef of fieldDef.args) {
|
|
39
|
+
if (!providedArgs.has(argDef.name) && isRequiredArgument(argDef)) {
|
|
40
|
+
const argTypeStr = inspect(argDef.type);
|
|
41
|
+
context.reportError(
|
|
42
|
+
new GraphQLError(
|
|
43
|
+
`Field "${fieldDef.name}" argument "${argDef.name}" of type "${argTypeStr}" is required, but it was not provided.`,
|
|
44
|
+
fieldNode,
|
|
45
|
+
),
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
export function ProvidedRequiredArgumentsOnDirectivesRule(context) {
|
|
58
|
+
var _schema$getDirectives;
|
|
59
|
+
|
|
60
|
+
const requiredArgsMap = Object.create(null);
|
|
61
|
+
const schema = context.getSchema();
|
|
62
|
+
const definedDirectives =
|
|
63
|
+
(_schema$getDirectives =
|
|
64
|
+
schema === null || schema === void 0
|
|
65
|
+
? void 0
|
|
66
|
+
: schema.getDirectives()) !== null && _schema$getDirectives !== void 0
|
|
67
|
+
? _schema$getDirectives
|
|
68
|
+
: specifiedDirectives;
|
|
69
|
+
|
|
70
|
+
for (const directive of definedDirectives) {
|
|
71
|
+
requiredArgsMap[directive.name] = keyMap(
|
|
72
|
+
directive.args.filter(isRequiredArgument),
|
|
73
|
+
(arg) => arg.name,
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const astDefinitions = context.getDocument().definitions;
|
|
78
|
+
|
|
79
|
+
for (const def of astDefinitions) {
|
|
80
|
+
if (def.kind === Kind.DIRECTIVE_DEFINITION) {
|
|
81
|
+
var _def$arguments;
|
|
82
|
+
|
|
83
|
+
// FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
84
|
+
|
|
85
|
+
/* c8 ignore next */
|
|
86
|
+
const argNodes =
|
|
87
|
+
(_def$arguments = def.arguments) !== null && _def$arguments !== void 0
|
|
88
|
+
? _def$arguments
|
|
89
|
+
: [];
|
|
90
|
+
requiredArgsMap[def.name.value] = keyMap(
|
|
91
|
+
argNodes.filter(isRequiredArgumentNode),
|
|
92
|
+
(arg) => arg.name.value,
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return {
|
|
98
|
+
Directive: {
|
|
99
|
+
// Validate on leave to allow for deeper errors to appear first.
|
|
100
|
+
leave(directiveNode) {
|
|
101
|
+
const directiveName = directiveNode.name.value;
|
|
102
|
+
const requiredArgs = requiredArgsMap[directiveName];
|
|
103
|
+
|
|
104
|
+
if (requiredArgs) {
|
|
105
|
+
var _directiveNode$argume;
|
|
106
|
+
|
|
107
|
+
// FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
108
|
+
|
|
109
|
+
/* c8 ignore next */
|
|
110
|
+
const argNodes =
|
|
111
|
+
(_directiveNode$argume = directiveNode.arguments) !== null &&
|
|
112
|
+
_directiveNode$argume !== void 0
|
|
113
|
+
? _directiveNode$argume
|
|
114
|
+
: [];
|
|
115
|
+
const argNodeMap = new Set(argNodes.map((arg) => arg.name.value));
|
|
116
|
+
|
|
117
|
+
for (const [argName, argDef] of Object.entries(requiredArgs)) {
|
|
118
|
+
if (!argNodeMap.has(argName)) {
|
|
119
|
+
const argType = isType(argDef.type)
|
|
120
|
+
? inspect(argDef.type)
|
|
121
|
+
: print(argDef.type);
|
|
122
|
+
context.reportError(
|
|
123
|
+
new GraphQLError(
|
|
124
|
+
`Directive "@${directiveName}" argument "${argName}" of type "${argType}" is required, but it was not provided.`,
|
|
125
|
+
directiveNode,
|
|
126
|
+
),
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function isRequiredArgumentNode(arg) {
|
|
137
|
+
return arg.type.kind === Kind.NON_NULL_TYPE && arg.defaultValue == null;
|
|
138
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ASTVisitor } from '../../language/visitor';
|
|
2
|
+
import type { ValidationContext } from '../ValidationContext';
|
|
3
|
+
/**
|
|
4
|
+
* Scalar leafs
|
|
5
|
+
*
|
|
6
|
+
* A GraphQL document is valid only if all leaf fields (fields without
|
|
7
|
+
* sub selections) are of scalar or enum types.
|
|
8
|
+
*/
|
|
9
|
+
export declare function ScalarLeafsRule(context: ValidationContext): ASTVisitor;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
exports.ScalarLeafsRule = ScalarLeafsRule;
|
|
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
|
+
/**
|
|
15
|
+
* Scalar leafs
|
|
16
|
+
*
|
|
17
|
+
* A GraphQL document is valid only if all leaf fields (fields without
|
|
18
|
+
* sub selections) are of scalar or enum types.
|
|
19
|
+
*/
|
|
20
|
+
function ScalarLeafsRule(context) {
|
|
21
|
+
return {
|
|
22
|
+
Field(node) {
|
|
23
|
+
const type = context.getType();
|
|
24
|
+
const selectionSet = node.selectionSet;
|
|
25
|
+
|
|
26
|
+
if (type) {
|
|
27
|
+
if ((0, _definition.isLeafType)((0, _definition.getNamedType)(type))) {
|
|
28
|
+
if (selectionSet) {
|
|
29
|
+
const fieldName = node.name.value;
|
|
30
|
+
const typeStr = (0, _inspect.inspect)(type);
|
|
31
|
+
context.reportError(
|
|
32
|
+
new _GraphQLError.GraphQLError(
|
|
33
|
+
`Field "${fieldName}" must not have a selection since type "${typeStr}" has no subfields.`,
|
|
34
|
+
selectionSet,
|
|
35
|
+
),
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
} else if (!selectionSet) {
|
|
39
|
+
const fieldName = node.name.value;
|
|
40
|
+
const typeStr = (0, _inspect.inspect)(type);
|
|
41
|
+
context.reportError(
|
|
42
|
+
new _GraphQLError.GraphQLError(
|
|
43
|
+
`Field "${fieldName}" of type "${typeStr}" must have a selection of subfields. Did you mean "${fieldName} { ... }"?`,
|
|
44
|
+
node,
|
|
45
|
+
),
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { inspect } from '../../jsutils/inspect.mjs';
|
|
2
|
+
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
3
|
+
import { getNamedType, isLeafType } from '../../type/definition.mjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Scalar leafs
|
|
7
|
+
*
|
|
8
|
+
* A GraphQL document is valid only if all leaf fields (fields without
|
|
9
|
+
* sub selections) are of scalar or enum types.
|
|
10
|
+
*/
|
|
11
|
+
export function ScalarLeafsRule(context) {
|
|
12
|
+
return {
|
|
13
|
+
Field(node) {
|
|
14
|
+
const type = context.getType();
|
|
15
|
+
const selectionSet = node.selectionSet;
|
|
16
|
+
|
|
17
|
+
if (type) {
|
|
18
|
+
if (isLeafType(getNamedType(type))) {
|
|
19
|
+
if (selectionSet) {
|
|
20
|
+
const fieldName = node.name.value;
|
|
21
|
+
const typeStr = inspect(type);
|
|
22
|
+
context.reportError(
|
|
23
|
+
new GraphQLError(
|
|
24
|
+
`Field "${fieldName}" must not have a selection since type "${typeStr}" has no subfields.`,
|
|
25
|
+
selectionSet,
|
|
26
|
+
),
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
} else if (!selectionSet) {
|
|
30
|
+
const fieldName = node.name.value;
|
|
31
|
+
const typeStr = inspect(type);
|
|
32
|
+
context.reportError(
|
|
33
|
+
new GraphQLError(
|
|
34
|
+
`Field "${fieldName}" of type "${typeStr}" must have a selection of subfields. Did you mean "${fieldName} { ... }"?`,
|
|
35
|
+
node,
|
|
36
|
+
),
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ASTVisitor } from '../../language/visitor';
|
|
2
|
+
import type { ValidationContext } from '../ValidationContext';
|
|
3
|
+
/**
|
|
4
|
+
* Subscriptions must only include a non-introspection field.
|
|
5
|
+
*
|
|
6
|
+
* A GraphQL subscription is valid only if it contains a single root field and
|
|
7
|
+
* that root field is not an introspection field.
|
|
8
|
+
*
|
|
9
|
+
* See https://spec.graphql.org/draft/#sec-Single-root-field
|
|
10
|
+
*/
|
|
11
|
+
export declare function SingleFieldSubscriptionsRule(
|
|
12
|
+
context: ValidationContext,
|
|
13
|
+
): ASTVisitor;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
exports.SingleFieldSubscriptionsRule = SingleFieldSubscriptionsRule;
|
|
7
|
+
|
|
8
|
+
var _GraphQLError = require('../../error/GraphQLError.js');
|
|
9
|
+
|
|
10
|
+
var _kinds = require('../../language/kinds.js');
|
|
11
|
+
|
|
12
|
+
var _collectFields = require('../../execution/collectFields.js');
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Subscriptions must only include a non-introspection field.
|
|
16
|
+
*
|
|
17
|
+
* A GraphQL subscription is valid only if it contains a single root field and
|
|
18
|
+
* that root field is not an introspection field.
|
|
19
|
+
*
|
|
20
|
+
* See https://spec.graphql.org/draft/#sec-Single-root-field
|
|
21
|
+
*/
|
|
22
|
+
function SingleFieldSubscriptionsRule(context) {
|
|
23
|
+
return {
|
|
24
|
+
OperationDefinition(node) {
|
|
25
|
+
if (node.operation === 'subscription') {
|
|
26
|
+
const schema = context.getSchema();
|
|
27
|
+
const subscriptionType = schema.getSubscriptionType();
|
|
28
|
+
|
|
29
|
+
if (subscriptionType) {
|
|
30
|
+
const operationName = node.name ? node.name.value : null;
|
|
31
|
+
const variableValues = Object.create(null);
|
|
32
|
+
const document = context.getDocument();
|
|
33
|
+
const fragments = Object.create(null);
|
|
34
|
+
|
|
35
|
+
for (const definition of document.definitions) {
|
|
36
|
+
if (definition.kind === _kinds.Kind.FRAGMENT_DEFINITION) {
|
|
37
|
+
fragments[definition.name.value] = definition;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const fields = (0, _collectFields.collectFields)(
|
|
42
|
+
schema,
|
|
43
|
+
fragments,
|
|
44
|
+
variableValues,
|
|
45
|
+
subscriptionType,
|
|
46
|
+
node.selectionSet,
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
if (fields.size > 1) {
|
|
50
|
+
const fieldSelectionLists = [...fields.values()];
|
|
51
|
+
const extraFieldSelectionLists = fieldSelectionLists.slice(1);
|
|
52
|
+
const extraFieldSelections = extraFieldSelectionLists.flat();
|
|
53
|
+
context.reportError(
|
|
54
|
+
new _GraphQLError.GraphQLError(
|
|
55
|
+
operationName != null
|
|
56
|
+
? `Subscription "${operationName}" must select only one top level field.`
|
|
57
|
+
: 'Anonymous Subscription must select only one top level field.',
|
|
58
|
+
extraFieldSelections,
|
|
59
|
+
),
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
for (const fieldNodes of fields.values()) {
|
|
64
|
+
const field = fieldNodes[0];
|
|
65
|
+
const fieldName = field.name.value;
|
|
66
|
+
|
|
67
|
+
if (fieldName.startsWith('__')) {
|
|
68
|
+
context.reportError(
|
|
69
|
+
new _GraphQLError.GraphQLError(
|
|
70
|
+
operationName != null
|
|
71
|
+
? `Subscription "${operationName}" must not select an introspection top level field.`
|
|
72
|
+
: 'Anonymous Subscription must not select an introspection top level field.',
|
|
73
|
+
fieldNodes,
|
|
74
|
+
),
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
2
|
+
import { Kind } from '../../language/kinds.mjs';
|
|
3
|
+
import { collectFields } from '../../execution/collectFields.mjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Subscriptions must only include a non-introspection field.
|
|
7
|
+
*
|
|
8
|
+
* A GraphQL subscription is valid only if it contains a single root field and
|
|
9
|
+
* that root field is not an introspection field.
|
|
10
|
+
*
|
|
11
|
+
* See https://spec.graphql.org/draft/#sec-Single-root-field
|
|
12
|
+
*/
|
|
13
|
+
export function SingleFieldSubscriptionsRule(context) {
|
|
14
|
+
return {
|
|
15
|
+
OperationDefinition(node) {
|
|
16
|
+
if (node.operation === 'subscription') {
|
|
17
|
+
const schema = context.getSchema();
|
|
18
|
+
const subscriptionType = schema.getSubscriptionType();
|
|
19
|
+
|
|
20
|
+
if (subscriptionType) {
|
|
21
|
+
const operationName = node.name ? node.name.value : null;
|
|
22
|
+
const variableValues = Object.create(null);
|
|
23
|
+
const document = context.getDocument();
|
|
24
|
+
const fragments = Object.create(null);
|
|
25
|
+
|
|
26
|
+
for (const definition of document.definitions) {
|
|
27
|
+
if (definition.kind === Kind.FRAGMENT_DEFINITION) {
|
|
28
|
+
fragments[definition.name.value] = definition;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const fields = collectFields(
|
|
33
|
+
schema,
|
|
34
|
+
fragments,
|
|
35
|
+
variableValues,
|
|
36
|
+
subscriptionType,
|
|
37
|
+
node.selectionSet,
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
if (fields.size > 1) {
|
|
41
|
+
const fieldSelectionLists = [...fields.values()];
|
|
42
|
+
const extraFieldSelectionLists = fieldSelectionLists.slice(1);
|
|
43
|
+
const extraFieldSelections = extraFieldSelectionLists.flat();
|
|
44
|
+
context.reportError(
|
|
45
|
+
new GraphQLError(
|
|
46
|
+
operationName != null
|
|
47
|
+
? `Subscription "${operationName}" must select only one top level field.`
|
|
48
|
+
: 'Anonymous Subscription must select only one top level field.',
|
|
49
|
+
extraFieldSelections,
|
|
50
|
+
),
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
for (const fieldNodes of fields.values()) {
|
|
55
|
+
const field = fieldNodes[0];
|
|
56
|
+
const fieldName = field.name.value;
|
|
57
|
+
|
|
58
|
+
if (fieldName.startsWith('__')) {
|
|
59
|
+
context.reportError(
|
|
60
|
+
new GraphQLError(
|
|
61
|
+
operationName != null
|
|
62
|
+
? `Subscription "${operationName}" must not select an introspection top level field.`
|
|
63
|
+
: 'Anonymous Subscription must not select an introspection top level field.',
|
|
64
|
+
fieldNodes,
|
|
65
|
+
),
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ASTVisitor } from '../../language/visitor';
|
|
2
|
+
import type { SDLValidationContext } from '../ValidationContext';
|
|
3
|
+
/**
|
|
4
|
+
* Unique argument definition names
|
|
5
|
+
*
|
|
6
|
+
* A GraphQL Object or Interface type is only valid if all its fields have uniquely named arguments.
|
|
7
|
+
* A GraphQL Directive is only valid if all its arguments are uniquely named.
|
|
8
|
+
*/
|
|
9
|
+
export declare function UniqueArgumentDefinitionNamesRule(
|
|
10
|
+
context: SDLValidationContext,
|
|
11
|
+
): ASTVisitor;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
exports.UniqueArgumentDefinitionNamesRule = UniqueArgumentDefinitionNamesRule;
|
|
7
|
+
|
|
8
|
+
var _groupBy = require('../../jsutils/groupBy.js');
|
|
9
|
+
|
|
10
|
+
var _GraphQLError = require('../../error/GraphQLError.js');
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Unique argument definition names
|
|
14
|
+
*
|
|
15
|
+
* A GraphQL Object or Interface type is only valid if all its fields have uniquely named arguments.
|
|
16
|
+
* A GraphQL Directive is only valid if all its arguments are uniquely named.
|
|
17
|
+
*/
|
|
18
|
+
function UniqueArgumentDefinitionNamesRule(context) {
|
|
19
|
+
return {
|
|
20
|
+
DirectiveDefinition(directiveNode) {
|
|
21
|
+
var _directiveNode$argume;
|
|
22
|
+
|
|
23
|
+
// FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
24
|
+
|
|
25
|
+
/* c8 ignore next */
|
|
26
|
+
const argumentNodes =
|
|
27
|
+
(_directiveNode$argume = directiveNode.arguments) !== null &&
|
|
28
|
+
_directiveNode$argume !== void 0
|
|
29
|
+
? _directiveNode$argume
|
|
30
|
+
: [];
|
|
31
|
+
return checkArgUniqueness(`@${directiveNode.name.value}`, argumentNodes);
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
InterfaceTypeDefinition: checkArgUniquenessPerField,
|
|
35
|
+
InterfaceTypeExtension: checkArgUniquenessPerField,
|
|
36
|
+
ObjectTypeDefinition: checkArgUniquenessPerField,
|
|
37
|
+
ObjectTypeExtension: checkArgUniquenessPerField,
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
function checkArgUniquenessPerField(typeNode) {
|
|
41
|
+
var _typeNode$fields;
|
|
42
|
+
|
|
43
|
+
const typeName = typeNode.name.value; // FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
44
|
+
|
|
45
|
+
/* c8 ignore next */
|
|
46
|
+
|
|
47
|
+
const fieldNodes =
|
|
48
|
+
(_typeNode$fields = typeNode.fields) !== null &&
|
|
49
|
+
_typeNode$fields !== void 0
|
|
50
|
+
? _typeNode$fields
|
|
51
|
+
: [];
|
|
52
|
+
|
|
53
|
+
for (const fieldDef of fieldNodes) {
|
|
54
|
+
var _fieldDef$arguments;
|
|
55
|
+
|
|
56
|
+
const fieldName = fieldDef.name.value; // FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
57
|
+
|
|
58
|
+
/* c8 ignore next */
|
|
59
|
+
|
|
60
|
+
const argumentNodes =
|
|
61
|
+
(_fieldDef$arguments = fieldDef.arguments) !== null &&
|
|
62
|
+
_fieldDef$arguments !== void 0
|
|
63
|
+
? _fieldDef$arguments
|
|
64
|
+
: [];
|
|
65
|
+
checkArgUniqueness(`${typeName}.${fieldName}`, argumentNodes);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function checkArgUniqueness(parentName, argumentNodes) {
|
|
72
|
+
const seenArgs = (0, _groupBy.groupBy)(
|
|
73
|
+
argumentNodes,
|
|
74
|
+
(arg) => arg.name.value,
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
for (const [argName, argNodes] of seenArgs) {
|
|
78
|
+
if (argNodes.length > 1) {
|
|
79
|
+
context.reportError(
|
|
80
|
+
new _GraphQLError.GraphQLError(
|
|
81
|
+
`Argument "${parentName}(${argName}:)" can only be defined once.`,
|
|
82
|
+
argNodes.map((node) => node.name),
|
|
83
|
+
),
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { groupBy } from '../../jsutils/groupBy.mjs';
|
|
2
|
+
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Unique argument definition names
|
|
6
|
+
*
|
|
7
|
+
* A GraphQL Object or Interface type is only valid if all its fields have uniquely named arguments.
|
|
8
|
+
* A GraphQL Directive is only valid if all its arguments are uniquely named.
|
|
9
|
+
*/
|
|
10
|
+
export function UniqueArgumentDefinitionNamesRule(context) {
|
|
11
|
+
return {
|
|
12
|
+
DirectiveDefinition(directiveNode) {
|
|
13
|
+
var _directiveNode$argume;
|
|
14
|
+
|
|
15
|
+
// FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
16
|
+
|
|
17
|
+
/* c8 ignore next */
|
|
18
|
+
const argumentNodes =
|
|
19
|
+
(_directiveNode$argume = directiveNode.arguments) !== null &&
|
|
20
|
+
_directiveNode$argume !== void 0
|
|
21
|
+
? _directiveNode$argume
|
|
22
|
+
: [];
|
|
23
|
+
return checkArgUniqueness(`@${directiveNode.name.value}`, argumentNodes);
|
|
24
|
+
},
|
|
25
|
+
|
|
26
|
+
InterfaceTypeDefinition: checkArgUniquenessPerField,
|
|
27
|
+
InterfaceTypeExtension: checkArgUniquenessPerField,
|
|
28
|
+
ObjectTypeDefinition: checkArgUniquenessPerField,
|
|
29
|
+
ObjectTypeExtension: checkArgUniquenessPerField,
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
function checkArgUniquenessPerField(typeNode) {
|
|
33
|
+
var _typeNode$fields;
|
|
34
|
+
|
|
35
|
+
const typeName = typeNode.name.value; // FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
36
|
+
|
|
37
|
+
/* c8 ignore next */
|
|
38
|
+
|
|
39
|
+
const fieldNodes =
|
|
40
|
+
(_typeNode$fields = typeNode.fields) !== null &&
|
|
41
|
+
_typeNode$fields !== void 0
|
|
42
|
+
? _typeNode$fields
|
|
43
|
+
: [];
|
|
44
|
+
|
|
45
|
+
for (const fieldDef of fieldNodes) {
|
|
46
|
+
var _fieldDef$arguments;
|
|
47
|
+
|
|
48
|
+
const fieldName = fieldDef.name.value; // FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
49
|
+
|
|
50
|
+
/* c8 ignore next */
|
|
51
|
+
|
|
52
|
+
const argumentNodes =
|
|
53
|
+
(_fieldDef$arguments = fieldDef.arguments) !== null &&
|
|
54
|
+
_fieldDef$arguments !== void 0
|
|
55
|
+
? _fieldDef$arguments
|
|
56
|
+
: [];
|
|
57
|
+
checkArgUniqueness(`${typeName}.${fieldName}`, argumentNodes);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function checkArgUniqueness(parentName, argumentNodes) {
|
|
64
|
+
const seenArgs = groupBy(argumentNodes, (arg) => arg.name.value);
|
|
65
|
+
|
|
66
|
+
for (const [argName, argNodes] of seenArgs) {
|
|
67
|
+
if (argNodes.length > 1) {
|
|
68
|
+
context.reportError(
|
|
69
|
+
new GraphQLError(
|
|
70
|
+
`Argument "${parentName}(${argName}:)" can only be defined once.`,
|
|
71
|
+
argNodes.map((node) => node.name),
|
|
72
|
+
),
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ASTVisitor } from '../../language/visitor';
|
|
2
|
+
import type { ASTValidationContext } from '../ValidationContext';
|
|
3
|
+
/**
|
|
4
|
+
* Unique argument names
|
|
5
|
+
*
|
|
6
|
+
* A GraphQL field or directive is only valid if all supplied arguments are
|
|
7
|
+
* uniquely named.
|
|
8
|
+
*
|
|
9
|
+
* See https://spec.graphql.org/draft/#sec-Argument-Names
|
|
10
|
+
*/
|
|
11
|
+
export declare function UniqueArgumentNamesRule(
|
|
12
|
+
context: ASTValidationContext,
|
|
13
|
+
): ASTVisitor;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
exports.UniqueArgumentNamesRule = UniqueArgumentNamesRule;
|
|
7
|
+
|
|
8
|
+
var _groupBy = require('../../jsutils/groupBy.js');
|
|
9
|
+
|
|
10
|
+
var _GraphQLError = require('../../error/GraphQLError.js');
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Unique argument names
|
|
14
|
+
*
|
|
15
|
+
* A GraphQL field or directive is only valid if all supplied arguments are
|
|
16
|
+
* uniquely named.
|
|
17
|
+
*
|
|
18
|
+
* See https://spec.graphql.org/draft/#sec-Argument-Names
|
|
19
|
+
*/
|
|
20
|
+
function UniqueArgumentNamesRule(context) {
|
|
21
|
+
return {
|
|
22
|
+
Field: checkArgUniqueness,
|
|
23
|
+
Directive: checkArgUniqueness,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
function checkArgUniqueness(parentNode) {
|
|
27
|
+
var _parentNode$arguments;
|
|
28
|
+
|
|
29
|
+
// FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
30
|
+
|
|
31
|
+
/* c8 ignore next */
|
|
32
|
+
const argumentNodes =
|
|
33
|
+
(_parentNode$arguments = parentNode.arguments) !== null &&
|
|
34
|
+
_parentNode$arguments !== void 0
|
|
35
|
+
? _parentNode$arguments
|
|
36
|
+
: [];
|
|
37
|
+
const seenArgs = (0, _groupBy.groupBy)(
|
|
38
|
+
argumentNodes,
|
|
39
|
+
(arg) => arg.name.value,
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
for (const [argName, argNodes] of seenArgs) {
|
|
43
|
+
if (argNodes.length > 1) {
|
|
44
|
+
context.reportError(
|
|
45
|
+
new _GraphQLError.GraphQLError(
|
|
46
|
+
`There can be only one argument named "${argName}".`,
|
|
47
|
+
argNodes.map((node) => node.name),
|
|
48
|
+
),
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|