graphql 16.14.0 → 16.14.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/error/GraphQLError.d.ts +151 -15
- package/error/GraphQLError.js +143 -12
- package/error/GraphQLError.mjs +143 -12
- package/error/index.d.ts +6 -0
- package/error/index.mjs +6 -0
- package/error/locatedError.d.ts +20 -0
- package/error/locatedError.js +21 -0
- package/error/locatedError.mjs +20 -0
- package/error/syntaxError.d.ts +15 -0
- package/error/syntaxError.js +16 -0
- package/error/syntaxError.mjs +15 -0
- package/execution/collectFields.js +6 -0
- package/execution/collectFields.mjs +6 -0
- package/execution/execute.d.ts +211 -12
- package/execution/execute.js +214 -23
- package/execution/execute.mjs +213 -23
- package/execution/index.d.ts +6 -0
- package/execution/index.mjs +6 -0
- package/execution/mapAsyncIterator.d.ts +2 -0
- package/execution/mapAsyncIterator.js +2 -0
- package/execution/mapAsyncIterator.mjs +2 -0
- package/execution/subscribe.d.ts +195 -5
- package/execution/subscribe.js +154 -11
- package/execution/subscribe.mjs +153 -11
- package/execution/values.d.ts +167 -10
- package/execution/values.js +149 -5
- package/execution/values.mjs +148 -5
- package/graphql.d.ts +163 -41
- package/graphql.js +126 -4
- package/graphql.mjs +131 -41
- package/index.d.ts +11 -17
- package/index.mjs +13 -19
- package/jsutils/Maybe.d.ts +5 -1
- package/jsutils/ObjMap.d.ts +4 -0
- package/jsutils/Path.d.ts +30 -0
- package/jsutils/Path.js +29 -0
- package/jsutils/Path.mjs +29 -0
- package/jsutils/PromiseOrValue.d.ts +1 -0
- package/jsutils/devAssert.d.ts +1 -0
- package/jsutils/devAssert.js +1 -0
- package/jsutils/devAssert.mjs +1 -0
- package/jsutils/didYouMean.d.ts +4 -1
- package/jsutils/didYouMean.js +4 -1
- package/jsutils/didYouMean.mjs +4 -1
- package/jsutils/groupBy.d.ts +2 -0
- package/jsutils/groupBy.js +2 -0
- package/jsutils/groupBy.mjs +2 -0
- package/jsutils/identityFunc.d.ts +2 -0
- package/jsutils/identityFunc.js +2 -0
- package/jsutils/identityFunc.mjs +2 -0
- package/jsutils/inspect.d.ts +2 -0
- package/jsutils/inspect.js +2 -0
- package/jsutils/inspect.mjs +2 -0
- package/jsutils/instanceOf.d.ts +2 -0
- package/jsutils/instanceOf.js +2 -0
- package/jsutils/instanceOf.mjs +2 -0
- package/jsutils/invariant.d.ts +1 -0
- package/jsutils/invariant.js +1 -0
- package/jsutils/invariant.mjs +1 -0
- package/jsutils/isAsyncIterable.d.ts +2 -0
- package/jsutils/isAsyncIterable.js +2 -0
- package/jsutils/isAsyncIterable.mjs +2 -0
- package/jsutils/isIterableObject.d.ts +6 -5
- package/jsutils/isIterableObject.js +6 -5
- package/jsutils/isIterableObject.mjs +6 -5
- package/jsutils/isObjectLike.d.ts +2 -0
- package/jsutils/isObjectLike.js +2 -0
- package/jsutils/isObjectLike.mjs +2 -0
- package/jsutils/isPromise.d.ts +2 -0
- package/jsutils/isPromise.js +2 -0
- package/jsutils/isPromise.mjs +2 -0
- package/jsutils/keyMap.d.ts +7 -14
- package/jsutils/keyMap.js +7 -14
- package/jsutils/keyMap.mjs +7 -14
- package/jsutils/keyValMap.d.ts +9 -6
- package/jsutils/keyValMap.js +9 -6
- package/jsutils/keyValMap.mjs +9 -6
- package/jsutils/mapValue.d.ts +2 -0
- package/jsutils/mapValue.js +2 -0
- package/jsutils/mapValue.mjs +2 -0
- package/jsutils/memoize3.d.ts +2 -0
- package/jsutils/memoize3.js +2 -0
- package/jsutils/memoize3.mjs +2 -0
- package/jsutils/naturalCompare.d.ts +2 -0
- package/jsutils/naturalCompare.js +2 -0
- package/jsutils/naturalCompare.mjs +2 -0
- package/jsutils/printPathArray.d.ts +2 -0
- package/jsutils/printPathArray.js +2 -0
- package/jsutils/printPathArray.mjs +2 -0
- package/jsutils/promiseForObject.d.ts +2 -0
- package/jsutils/promiseForObject.js +2 -0
- package/jsutils/promiseForObject.mjs +2 -0
- package/jsutils/promiseReduce.d.ts +2 -0
- package/jsutils/promiseReduce.js +2 -0
- package/jsutils/promiseReduce.mjs +2 -0
- package/jsutils/suggestionList.d.ts +2 -0
- package/jsutils/suggestionList.js +4 -0
- package/jsutils/suggestionList.mjs +4 -0
- package/jsutils/toError.d.ts +2 -0
- package/jsutils/toError.js +2 -0
- package/jsutils/toError.mjs +2 -0
- package/jsutils/toObjMap.d.ts +1 -0
- package/jsutils/toObjMap.js +1 -0
- package/jsutils/toObjMap.mjs +1 -0
- package/language/ast.d.ts +412 -54
- package/language/ast.js +95 -38
- package/language/ast.mjs +95 -38
- package/language/blockString.d.ts +1 -3
- package/language/blockString.js +1 -3
- package/language/blockString.mjs +1 -3
- package/language/directiveLocation.d.ts +28 -8
- package/language/directiveLocation.js +9 -6
- package/language/directiveLocation.mjs +9 -6
- package/language/index.d.ts +6 -0
- package/language/index.mjs +6 -0
- package/language/kinds.d.ts +57 -18
- package/language/kinds.js +9 -6
- package/language/kinds.mjs +9 -6
- package/language/lexer.d.ts +47 -14
- package/language/lexer.js +71 -13
- package/language/lexer.mjs +70 -13
- package/language/location.d.ts +16 -3
- package/language/location.js +14 -3
- package/language/location.mjs +14 -3
- package/language/parser.d.ts +236 -13
- package/language/parser.js +224 -0
- package/language/parser.mjs +224 -3
- package/language/predicates.d.ts +169 -0
- package/language/predicates.js +170 -0
- package/language/predicates.mjs +180 -0
- package/language/printLocation.d.ts +28 -0
- package/language/printLocation.js +29 -0
- package/language/printLocation.mjs +28 -0
- package/language/printString.d.ts +2 -0
- package/language/printString.js +5 -1
- package/language/printString.mjs +5 -1
- package/language/printer.d.ts +12 -0
- package/language/printer.js +19 -0
- package/language/printer.mjs +18 -0
- package/language/schemaCoordinateLexer.d.ts +8 -6
- package/language/schemaCoordinateLexer.js +10 -6
- package/language/schemaCoordinateLexer.mjs +10 -6
- package/language/source.d.ts +28 -0
- package/language/source.js +32 -0
- package/language/source.mjs +31 -0
- package/language/tokenKind.d.ts +30 -3
- package/language/tokenKind.js +8 -3
- package/language/tokenKind.mjs +8 -3
- package/language/visitor.d.ts +200 -72
- package/language/visitor.js +122 -50
- package/language/visitor.mjs +122 -54
- package/package.json +1 -1
- package/subscription/index.d.ts +9 -3
- package/subscription/index.mjs +9 -3
- package/type/assertName.d.ts +18 -1
- package/type/assertName.js +19 -1
- package/type/assertName.mjs +18 -1
- package/type/definition.d.ts +2540 -79
- package/type/definition.js +2214 -61
- package/type/definition.mjs +2241 -60
- package/type/directives.d.ts +193 -18
- package/type/directives.js +196 -19
- package/type/directives.mjs +196 -19
- package/type/index.d.ts +6 -0
- package/type/index.mjs +6 -0
- package/type/introspection.d.ts +36 -0
- package/type/introspection.js +33 -0
- package/type/introspection.mjs +41 -0
- package/type/scalars.d.ts +29 -2
- package/type/scalars.js +37 -2
- package/type/scalars.mjs +36 -2
- package/type/schema.d.ts +490 -28
- package/type/schema.js +484 -26
- package/type/schema.mjs +484 -26
- package/type/validate.d.ts +31 -0
- package/type/validate.js +32 -0
- package/type/validate.mjs +31 -0
- package/utilities/TypeInfo.d.ts +441 -1
- package/utilities/TypeInfo.js +444 -1
- package/utilities/TypeInfo.mjs +443 -1
- package/utilities/assertValidName.d.ts +27 -2
- package/utilities/assertValidName.js +28 -2
- package/utilities/assertValidName.mjs +27 -2
- package/utilities/astFromValue.d.ts +33 -3
- package/utilities/astFromValue.js +36 -3
- package/utilities/astFromValue.mjs +35 -3
- package/utilities/buildASTSchema.d.ts +65 -6
- package/utilities/buildASTSchema.js +65 -6
- package/utilities/buildASTSchema.mjs +65 -6
- package/utilities/buildClientSchema.d.ts +15 -0
- package/utilities/buildClientSchema.js +16 -0
- package/utilities/buildClientSchema.mjs +15 -0
- package/utilities/coerceInputValue.d.ts +46 -0
- package/utilities/coerceInputValue.js +47 -0
- package/utilities/coerceInputValue.mjs +46 -0
- package/utilities/concatAST.d.ts +12 -0
- package/utilities/concatAST.js +13 -0
- package/utilities/concatAST.mjs +12 -0
- package/utilities/extendSchema.d.ts +56 -3
- package/utilities/extendSchema.js +63 -3
- package/utilities/extendSchema.mjs +62 -3
- package/utilities/findBreakingChanges.d.ts +95 -0
- package/utilities/findBreakingChanges.js +68 -0
- package/utilities/findBreakingChanges.mjs +70 -0
- package/utilities/getIntrospectionQuery.d.ts +132 -0
- package/utilities/getIntrospectionQuery.js +41 -0
- package/utilities/getIntrospectionQuery.mjs +41 -0
- package/utilities/getOperationAST.d.ts +15 -0
- package/utilities/getOperationAST.js +16 -0
- package/utilities/getOperationAST.mjs +15 -0
- package/utilities/getOperationRootType.d.ts +18 -1
- package/utilities/getOperationRootType.js +19 -1
- package/utilities/getOperationRootType.mjs +18 -1
- package/utilities/index.d.ts +7 -0
- package/utilities/index.mjs +7 -0
- package/utilities/introspectionFromSchema.d.ts +54 -0
- package/utilities/introspectionFromSchema.js +55 -0
- package/utilities/introspectionFromSchema.mjs +54 -0
- package/utilities/lexicographicSortSchema.d.ts +35 -0
- package/utilities/lexicographicSortSchema.js +36 -0
- package/utilities/lexicographicSortSchema.mjs +35 -0
- package/utilities/printSchema.d.ts +63 -0
- package/utilities/printSchema.js +66 -0
- package/utilities/printSchema.mjs +67 -0
- package/utilities/resolveSchemaCoordinate.d.ts +62 -0
- package/utilities/resolveSchemaCoordinate.js +64 -0
- package/utilities/resolveSchemaCoordinate.mjs +63 -0
- package/utilities/separateOperations.d.ts +30 -0
- package/utilities/separateOperations.js +31 -0
- package/utilities/separateOperations.mjs +30 -0
- package/utilities/stripIgnoredCharacters.d.ts +13 -6
- package/utilities/stripIgnoredCharacters.js +16 -6
- package/utilities/stripIgnoredCharacters.mjs +15 -6
- package/utilities/typeComparators.d.ts +84 -0
- package/utilities/typeComparators.js +85 -0
- package/utilities/typeComparators.mjs +84 -0
- package/utilities/typeFromAST.d.ts +86 -0
- package/utilities/typeFromAST.js +3 -0
- package/utilities/typeFromAST.mjs +3 -0
- package/utilities/typedQueryDocumentNode.d.ts +4 -0
- package/utilities/valueFromAST.d.ts +38 -0
- package/utilities/valueFromAST.js +39 -0
- package/utilities/valueFromAST.mjs +38 -0
- package/utilities/valueFromASTUntyped.d.ts +15 -2
- package/utilities/valueFromASTUntyped.js +16 -2
- package/utilities/valueFromASTUntyped.mjs +15 -2
- package/validation/ValidationContext.d.ts +399 -0
- package/validation/ValidationContext.js +400 -0
- package/validation/ValidationContext.mjs +401 -0
- package/validation/index.d.ts +6 -0
- package/validation/index.mjs +6 -0
- package/validation/rules/ExecutableDefinitionsRule.d.ts +28 -0
- package/validation/rules/ExecutableDefinitionsRule.js +29 -0
- package/validation/rules/ExecutableDefinitionsRule.mjs +28 -0
- package/validation/rules/FieldsOnCorrectTypeRule.d.ts +28 -0
- package/validation/rules/FieldsOnCorrectTypeRule.js +33 -0
- package/validation/rules/FieldsOnCorrectTypeRule.mjs +32 -0
- package/validation/rules/FragmentsOnCompositeTypesRule.d.ts +28 -0
- package/validation/rules/FragmentsOnCompositeTypesRule.js +29 -0
- package/validation/rules/FragmentsOnCompositeTypesRule.mjs +28 -0
- package/validation/rules/KnownArgumentNamesRule.d.ts +29 -3
- package/validation/rules/KnownArgumentNamesRule.js +30 -3
- package/validation/rules/KnownArgumentNamesRule.mjs +29 -3
- package/validation/rules/KnownDirectivesRule.d.ts +28 -0
- package/validation/rules/KnownDirectivesRule.js +29 -0
- package/validation/rules/KnownDirectivesRule.mjs +28 -0
- package/validation/rules/KnownFragmentNamesRule.d.ts +28 -0
- package/validation/rules/KnownFragmentNamesRule.js +29 -0
- package/validation/rules/KnownFragmentNamesRule.mjs +28 -0
- package/validation/rules/KnownTypeNamesRule.d.ts +28 -0
- package/validation/rules/KnownTypeNamesRule.js +29 -0
- package/validation/rules/KnownTypeNamesRule.mjs +28 -0
- package/validation/rules/LoneAnonymousOperationRule.d.ts +28 -0
- package/validation/rules/LoneAnonymousOperationRule.js +29 -0
- package/validation/rules/LoneAnonymousOperationRule.mjs +28 -0
- package/validation/rules/LoneSchemaDefinitionRule.d.ts +21 -0
- package/validation/rules/LoneSchemaDefinitionRule.js +22 -0
- package/validation/rules/LoneSchemaDefinitionRule.mjs +21 -0
- package/validation/rules/MaxIntrospectionDepthRule.d.ts +31 -0
- package/validation/rules/MaxIntrospectionDepthRule.js +33 -0
- package/validation/rules/MaxIntrospectionDepthRule.mjs +34 -0
- package/validation/rules/NoFragmentCyclesRule.d.ts +28 -0
- package/validation/rules/NoFragmentCyclesRule.js +29 -0
- package/validation/rules/NoFragmentCyclesRule.mjs +28 -0
- package/validation/rules/NoUndefinedVariablesRule.d.ts +28 -0
- package/validation/rules/NoUndefinedVariablesRule.js +29 -0
- package/validation/rules/NoUndefinedVariablesRule.mjs +28 -0
- package/validation/rules/NoUnusedFragmentsRule.d.ts +28 -0
- package/validation/rules/NoUnusedFragmentsRule.js +29 -0
- package/validation/rules/NoUnusedFragmentsRule.mjs +28 -0
- package/validation/rules/NoUnusedVariablesRule.d.ts +29 -0
- package/validation/rules/NoUnusedVariablesRule.js +30 -0
- package/validation/rules/NoUnusedVariablesRule.mjs +29 -0
- package/validation/rules/OverlappingFieldsCanBeMergedRule.d.ts +33 -0
- package/validation/rules/OverlappingFieldsCanBeMergedRule.js +45 -6
- package/validation/rules/OverlappingFieldsCanBeMergedRule.mjs +45 -6
- package/validation/rules/PossibleFragmentSpreadsRule.d.ts +36 -0
- package/validation/rules/PossibleFragmentSpreadsRule.js +37 -0
- package/validation/rules/PossibleFragmentSpreadsRule.mjs +36 -0
- package/validation/rules/PossibleTypeExtensionsRule.d.ts +21 -0
- package/validation/rules/PossibleTypeExtensionsRule.js +22 -0
- package/validation/rules/PossibleTypeExtensionsRule.mjs +21 -0
- package/validation/rules/ProvidedRequiredArgumentsRule.d.ts +29 -3
- package/validation/rules/ProvidedRequiredArgumentsRule.js +30 -3
- package/validation/rules/ProvidedRequiredArgumentsRule.mjs +29 -3
- package/validation/rules/ScalarLeafsRule.d.ts +28 -0
- package/validation/rules/ScalarLeafsRule.js +29 -0
- package/validation/rules/ScalarLeafsRule.mjs +28 -0
- package/validation/rules/SingleFieldSubscriptionsRule.d.ts +33 -0
- package/validation/rules/SingleFieldSubscriptionsRule.js +34 -0
- package/validation/rules/SingleFieldSubscriptionsRule.mjs +33 -0
- package/validation/rules/UniqueArgumentDefinitionNamesRule.d.ts +21 -0
- package/validation/rules/UniqueArgumentDefinitionNamesRule.js +22 -0
- package/validation/rules/UniqueArgumentDefinitionNamesRule.mjs +21 -0
- package/validation/rules/UniqueArgumentNamesRule.d.ts +28 -0
- package/validation/rules/UniqueArgumentNamesRule.js +29 -0
- package/validation/rules/UniqueArgumentNamesRule.mjs +28 -0
- package/validation/rules/UniqueDirectiveNamesRule.d.ts +21 -0
- package/validation/rules/UniqueDirectiveNamesRule.js +22 -0
- package/validation/rules/UniqueDirectiveNamesRule.mjs +21 -0
- package/validation/rules/UniqueDirectivesPerLocationRule.d.ts +28 -0
- package/validation/rules/UniqueDirectivesPerLocationRule.js +29 -0
- package/validation/rules/UniqueDirectivesPerLocationRule.mjs +28 -0
- package/validation/rules/UniqueEnumValueNamesRule.d.ts +21 -0
- package/validation/rules/UniqueEnumValueNamesRule.js +22 -0
- package/validation/rules/UniqueEnumValueNamesRule.mjs +21 -0
- package/validation/rules/UniqueFieldDefinitionNamesRule.d.ts +21 -0
- package/validation/rules/UniqueFieldDefinitionNamesRule.js +22 -0
- package/validation/rules/UniqueFieldDefinitionNamesRule.mjs +21 -0
- package/validation/rules/UniqueFragmentNamesRule.d.ts +28 -0
- package/validation/rules/UniqueFragmentNamesRule.js +29 -0
- package/validation/rules/UniqueFragmentNamesRule.mjs +28 -0
- package/validation/rules/UniqueInputFieldNamesRule.d.ts +32 -0
- package/validation/rules/UniqueInputFieldNamesRule.js +33 -0
- package/validation/rules/UniqueInputFieldNamesRule.mjs +32 -0
- package/validation/rules/UniqueOperationNamesRule.d.ts +28 -0
- package/validation/rules/UniqueOperationNamesRule.js +29 -0
- package/validation/rules/UniqueOperationNamesRule.mjs +28 -0
- package/validation/rules/UniqueOperationTypesRule.d.ts +21 -0
- package/validation/rules/UniqueOperationTypesRule.js +22 -0
- package/validation/rules/UniqueOperationTypesRule.mjs +21 -0
- package/validation/rules/UniqueTypeNamesRule.d.ts +21 -0
- package/validation/rules/UniqueTypeNamesRule.js +22 -0
- package/validation/rules/UniqueTypeNamesRule.mjs +21 -0
- package/validation/rules/UniqueVariableNamesRule.d.ts +28 -0
- package/validation/rules/UniqueVariableNamesRule.js +29 -0
- package/validation/rules/UniqueVariableNamesRule.mjs +28 -0
- package/validation/rules/ValuesOfCorrectTypeRule.d.ts +28 -0
- package/validation/rules/ValuesOfCorrectTypeRule.js +31 -0
- package/validation/rules/ValuesOfCorrectTypeRule.mjs +30 -0
- package/validation/rules/VariablesAreInputTypesRule.d.ts +32 -0
- package/validation/rules/VariablesAreInputTypesRule.js +33 -0
- package/validation/rules/VariablesAreInputTypesRule.mjs +32 -0
- package/validation/rules/VariablesInAllowedPositionRule.d.ts +28 -0
- package/validation/rules/VariablesInAllowedPositionRule.js +35 -1
- package/validation/rules/VariablesInAllowedPositionRule.mjs +34 -1
- package/validation/rules/custom/NoDeprecatedCustomRule.d.ts +41 -0
- package/validation/rules/custom/NoDeprecatedCustomRule.js +42 -0
- package/validation/rules/custom/NoDeprecatedCustomRule.mjs +41 -0
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.ts +28 -0
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js +29 -0
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.mjs +28 -0
- package/validation/specifiedRules.d.ts +2 -3
- package/validation/specifiedRules.js +2 -3
- package/validation/specifiedRules.mjs +2 -3
- package/validation/validate.d.ts +70 -9
- package/validation/validate.js +63 -7
- package/validation/validate.mjs +63 -7
- package/version.d.ts +3 -6
- package/version.js +6 -8
- package/version.mjs +5 -8
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @category Validation Rules */
|
|
1
2
|
import type { ASTVisitor } from '../../language/visitor';
|
|
2
3
|
import type { ASTValidationContext } from '../ValidationContext';
|
|
3
4
|
/**
|
|
@@ -7,6 +8,33 @@ import type { ASTValidationContext } from '../ValidationContext';
|
|
|
7
8
|
* within operations, or spread within other fragments spread within operations.
|
|
8
9
|
*
|
|
9
10
|
* See https://spec.graphql.org/draft/#sec-Fragments-Must-Be-Used
|
|
11
|
+
* @param context - The validation context used while checking the document.
|
|
12
|
+
* @returns A visitor that reports validation errors for this rule.
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { buildSchema, parse, validate } from 'graphql';
|
|
16
|
+
* import { NoUnusedFragmentsRule } from 'graphql/validation';
|
|
17
|
+
*
|
|
18
|
+
* const schema = buildSchema(`
|
|
19
|
+
* type Query {
|
|
20
|
+
* name: String
|
|
21
|
+
* }
|
|
22
|
+
* `);
|
|
23
|
+
*
|
|
24
|
+
* const invalidDocument = parse(`
|
|
25
|
+
* fragment Unused on Query { name } query { name }
|
|
26
|
+
* `);
|
|
27
|
+
* const invalidErrors = validate(schema, invalidDocument, [NoUnusedFragmentsRule]);
|
|
28
|
+
*
|
|
29
|
+
* invalidErrors.length; // => 1
|
|
30
|
+
*
|
|
31
|
+
* const validDocument = parse(`
|
|
32
|
+
* fragment Used on Query { name } query { ...Used }
|
|
33
|
+
* `);
|
|
34
|
+
* const validErrors = validate(schema, validDocument, [NoUnusedFragmentsRule]);
|
|
35
|
+
*
|
|
36
|
+
* validErrors; // => []
|
|
37
|
+
* ```
|
|
10
38
|
*/
|
|
11
39
|
export declare function NoUnusedFragmentsRule(
|
|
12
40
|
context: ASTValidationContext,
|
|
@@ -7,6 +7,8 @@ exports.NoUnusedFragmentsRule = NoUnusedFragmentsRule;
|
|
|
7
7
|
|
|
8
8
|
var _GraphQLError = require('../../error/GraphQLError.js');
|
|
9
9
|
|
|
10
|
+
/** @category Validation Rules */
|
|
11
|
+
|
|
10
12
|
/**
|
|
11
13
|
* No unused fragments
|
|
12
14
|
*
|
|
@@ -14,6 +16,33 @@ var _GraphQLError = require('../../error/GraphQLError.js');
|
|
|
14
16
|
* within operations, or spread within other fragments spread within operations.
|
|
15
17
|
*
|
|
16
18
|
* See https://spec.graphql.org/draft/#sec-Fragments-Must-Be-Used
|
|
19
|
+
* @param context - The validation context used while checking the document.
|
|
20
|
+
* @returns A visitor that reports validation errors for this rule.
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* import { buildSchema, parse, validate } from 'graphql';
|
|
24
|
+
* import { NoUnusedFragmentsRule } from 'graphql/validation';
|
|
25
|
+
*
|
|
26
|
+
* const schema = buildSchema(`
|
|
27
|
+
* type Query {
|
|
28
|
+
* name: String
|
|
29
|
+
* }
|
|
30
|
+
* `);
|
|
31
|
+
*
|
|
32
|
+
* const invalidDocument = parse(`
|
|
33
|
+
* fragment Unused on Query { name } query { name }
|
|
34
|
+
* `);
|
|
35
|
+
* const invalidErrors = validate(schema, invalidDocument, [NoUnusedFragmentsRule]);
|
|
36
|
+
*
|
|
37
|
+
* invalidErrors.length; // => 1
|
|
38
|
+
*
|
|
39
|
+
* const validDocument = parse(`
|
|
40
|
+
* fragment Used on Query { name } query { ...Used }
|
|
41
|
+
* `);
|
|
42
|
+
* const validErrors = validate(schema, validDocument, [NoUnusedFragmentsRule]);
|
|
43
|
+
*
|
|
44
|
+
* validErrors; // => []
|
|
45
|
+
* ```
|
|
17
46
|
*/
|
|
18
47
|
function NoUnusedFragmentsRule(context) {
|
|
19
48
|
const operationDefs = [];
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @category Validation Rules */
|
|
1
2
|
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
2
3
|
|
|
3
4
|
/**
|
|
@@ -7,6 +8,33 @@ import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
|
7
8
|
* within operations, or spread within other fragments spread within operations.
|
|
8
9
|
*
|
|
9
10
|
* See https://spec.graphql.org/draft/#sec-Fragments-Must-Be-Used
|
|
11
|
+
* @param context - The validation context used while checking the document.
|
|
12
|
+
* @returns A visitor that reports validation errors for this rule.
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { buildSchema, parse, validate } from 'graphql';
|
|
16
|
+
* import { NoUnusedFragmentsRule } from 'graphql/validation';
|
|
17
|
+
*
|
|
18
|
+
* const schema = buildSchema(`
|
|
19
|
+
* type Query {
|
|
20
|
+
* name: String
|
|
21
|
+
* }
|
|
22
|
+
* `);
|
|
23
|
+
*
|
|
24
|
+
* const invalidDocument = parse(`
|
|
25
|
+
* fragment Unused on Query { name } query { name }
|
|
26
|
+
* `);
|
|
27
|
+
* const invalidErrors = validate(schema, invalidDocument, [NoUnusedFragmentsRule]);
|
|
28
|
+
*
|
|
29
|
+
* invalidErrors.length; // => 1
|
|
30
|
+
*
|
|
31
|
+
* const validDocument = parse(`
|
|
32
|
+
* fragment Used on Query { name } query { ...Used }
|
|
33
|
+
* `);
|
|
34
|
+
* const validErrors = validate(schema, validDocument, [NoUnusedFragmentsRule]);
|
|
35
|
+
*
|
|
36
|
+
* validErrors; // => []
|
|
37
|
+
* ```
|
|
10
38
|
*/
|
|
11
39
|
export function NoUnusedFragmentsRule(context) {
|
|
12
40
|
const operationDefs = [];
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @category Validation Rules */
|
|
1
2
|
import type { ASTVisitor } from '../../language/visitor';
|
|
2
3
|
import type { ValidationContext } from '../ValidationContext';
|
|
3
4
|
/**
|
|
@@ -7,6 +8,34 @@ import type { ValidationContext } from '../ValidationContext';
|
|
|
7
8
|
* are used, either directly or within a spread fragment.
|
|
8
9
|
*
|
|
9
10
|
* See https://spec.graphql.org/draft/#sec-All-Variables-Used
|
|
11
|
+
* @param context - The validation context used while checking the document.
|
|
12
|
+
* @returns A visitor that reports validation errors for this rule.
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { buildSchema, parse, validate } from 'graphql';
|
|
16
|
+
* import { NoUnusedVariablesRule } from 'graphql/validation';
|
|
17
|
+
*
|
|
18
|
+
* const schema = buildSchema(`
|
|
19
|
+
* type Query {
|
|
20
|
+
* field(arg: ID): String
|
|
21
|
+
* name: String
|
|
22
|
+
* }
|
|
23
|
+
* `);
|
|
24
|
+
*
|
|
25
|
+
* const invalidDocument = parse(`
|
|
26
|
+
* query ($id: ID) { name }
|
|
27
|
+
* `);
|
|
28
|
+
* const invalidErrors = validate(schema, invalidDocument, [NoUnusedVariablesRule]);
|
|
29
|
+
*
|
|
30
|
+
* invalidErrors.length; // => 1
|
|
31
|
+
*
|
|
32
|
+
* const validDocument = parse(`
|
|
33
|
+
* query ($id: ID) { field(arg: $id) }
|
|
34
|
+
* `);
|
|
35
|
+
* const validErrors = validate(schema, validDocument, [NoUnusedVariablesRule]);
|
|
36
|
+
*
|
|
37
|
+
* validErrors; // => []
|
|
38
|
+
* ```
|
|
10
39
|
*/
|
|
11
40
|
export declare function NoUnusedVariablesRule(
|
|
12
41
|
context: ValidationContext,
|
|
@@ -7,6 +7,8 @@ exports.NoUnusedVariablesRule = NoUnusedVariablesRule;
|
|
|
7
7
|
|
|
8
8
|
var _GraphQLError = require('../../error/GraphQLError.js');
|
|
9
9
|
|
|
10
|
+
/** @category Validation Rules */
|
|
11
|
+
|
|
10
12
|
/**
|
|
11
13
|
* No unused variables
|
|
12
14
|
*
|
|
@@ -14,6 +16,34 @@ var _GraphQLError = require('../../error/GraphQLError.js');
|
|
|
14
16
|
* are used, either directly or within a spread fragment.
|
|
15
17
|
*
|
|
16
18
|
* See https://spec.graphql.org/draft/#sec-All-Variables-Used
|
|
19
|
+
* @param context - The validation context used while checking the document.
|
|
20
|
+
* @returns A visitor that reports validation errors for this rule.
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* import { buildSchema, parse, validate } from 'graphql';
|
|
24
|
+
* import { NoUnusedVariablesRule } from 'graphql/validation';
|
|
25
|
+
*
|
|
26
|
+
* const schema = buildSchema(`
|
|
27
|
+
* type Query {
|
|
28
|
+
* field(arg: ID): String
|
|
29
|
+
* name: String
|
|
30
|
+
* }
|
|
31
|
+
* `);
|
|
32
|
+
*
|
|
33
|
+
* const invalidDocument = parse(`
|
|
34
|
+
* query ($id: ID) { name }
|
|
35
|
+
* `);
|
|
36
|
+
* const invalidErrors = validate(schema, invalidDocument, [NoUnusedVariablesRule]);
|
|
37
|
+
*
|
|
38
|
+
* invalidErrors.length; // => 1
|
|
39
|
+
*
|
|
40
|
+
* const validDocument = parse(`
|
|
41
|
+
* query ($id: ID) { field(arg: $id) }
|
|
42
|
+
* `);
|
|
43
|
+
* const validErrors = validate(schema, validDocument, [NoUnusedVariablesRule]);
|
|
44
|
+
*
|
|
45
|
+
* validErrors; // => []
|
|
46
|
+
* ```
|
|
17
47
|
*/
|
|
18
48
|
function NoUnusedVariablesRule(context) {
|
|
19
49
|
let variableDefs = [];
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @category Validation Rules */
|
|
1
2
|
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
2
3
|
|
|
3
4
|
/**
|
|
@@ -7,6 +8,34 @@ import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
|
7
8
|
* are used, either directly or within a spread fragment.
|
|
8
9
|
*
|
|
9
10
|
* See https://spec.graphql.org/draft/#sec-All-Variables-Used
|
|
11
|
+
* @param context - The validation context used while checking the document.
|
|
12
|
+
* @returns A visitor that reports validation errors for this rule.
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { buildSchema, parse, validate } from 'graphql';
|
|
16
|
+
* import { NoUnusedVariablesRule } from 'graphql/validation';
|
|
17
|
+
*
|
|
18
|
+
* const schema = buildSchema(`
|
|
19
|
+
* type Query {
|
|
20
|
+
* field(arg: ID): String
|
|
21
|
+
* name: String
|
|
22
|
+
* }
|
|
23
|
+
* `);
|
|
24
|
+
*
|
|
25
|
+
* const invalidDocument = parse(`
|
|
26
|
+
* query ($id: ID) { name }
|
|
27
|
+
* `);
|
|
28
|
+
* const invalidErrors = validate(schema, invalidDocument, [NoUnusedVariablesRule]);
|
|
29
|
+
*
|
|
30
|
+
* invalidErrors.length; // => 1
|
|
31
|
+
*
|
|
32
|
+
* const validDocument = parse(`
|
|
33
|
+
* query ($id: ID) { field(arg: $id) }
|
|
34
|
+
* `);
|
|
35
|
+
* const validErrors = validate(schema, validDocument, [NoUnusedVariablesRule]);
|
|
36
|
+
*
|
|
37
|
+
* validErrors; // => []
|
|
38
|
+
* ```
|
|
10
39
|
*/
|
|
11
40
|
export function NoUnusedVariablesRule(context) {
|
|
12
41
|
let variableDefs = [];
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @category Validation Rules */
|
|
1
2
|
import type { ASTVisitor } from '../../language/visitor';
|
|
2
3
|
import type { ValidationContext } from '../ValidationContext';
|
|
3
4
|
/**
|
|
@@ -8,6 +9,38 @@ import type { ValidationContext } from '../ValidationContext';
|
|
|
8
9
|
* without ambiguity.
|
|
9
10
|
*
|
|
10
11
|
* See https://spec.graphql.org/draft/#sec-Field-Selection-Merging
|
|
12
|
+
* @param context - The validation context used while checking the document.
|
|
13
|
+
* @returns A visitor that reports validation errors for this rule.
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { buildSchema, parse, validate } from 'graphql';
|
|
17
|
+
* import { OverlappingFieldsCanBeMergedRule } from 'graphql/validation';
|
|
18
|
+
*
|
|
19
|
+
* const schema = buildSchema(`
|
|
20
|
+
* type Query {
|
|
21
|
+
* dog: Dog
|
|
22
|
+
* }
|
|
23
|
+
*
|
|
24
|
+
* type Dog {
|
|
25
|
+
* name: String
|
|
26
|
+
* barkVolume: Int
|
|
27
|
+
* }
|
|
28
|
+
* `);
|
|
29
|
+
*
|
|
30
|
+
* const invalidDocument = parse(`
|
|
31
|
+
* { dog { value: barkVolume value: name } }
|
|
32
|
+
* `);
|
|
33
|
+
* const invalidErrors = validate(schema, invalidDocument, [OverlappingFieldsCanBeMergedRule]);
|
|
34
|
+
*
|
|
35
|
+
* invalidErrors.length; // => 1
|
|
36
|
+
*
|
|
37
|
+
* const validDocument = parse(`
|
|
38
|
+
* { dog { barkVolume name } }
|
|
39
|
+
* `);
|
|
40
|
+
* const validErrors = validate(schema, validDocument, [OverlappingFieldsCanBeMergedRule]);
|
|
41
|
+
*
|
|
42
|
+
* validErrors; // => []
|
|
43
|
+
* ```
|
|
11
44
|
*/
|
|
12
45
|
export declare function OverlappingFieldsCanBeMergedRule(
|
|
13
46
|
context: ValidationContext,
|
|
@@ -19,6 +19,7 @@ var _sortValueNode = require('../../utilities/sortValueNode.js');
|
|
|
19
19
|
|
|
20
20
|
var _typeFromAST = require('../../utilities/typeFromAST.js');
|
|
21
21
|
|
|
22
|
+
/** @category Validation Rules */
|
|
22
23
|
function reasonMessage(reason) {
|
|
23
24
|
if (Array.isArray(reason)) {
|
|
24
25
|
return reason
|
|
@@ -40,6 +41,38 @@ function reasonMessage(reason) {
|
|
|
40
41
|
* without ambiguity.
|
|
41
42
|
*
|
|
42
43
|
* See https://spec.graphql.org/draft/#sec-Field-Selection-Merging
|
|
44
|
+
* @param context - The validation context used while checking the document.
|
|
45
|
+
* @returns A visitor that reports validation errors for this rule.
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* import { buildSchema, parse, validate } from 'graphql';
|
|
49
|
+
* import { OverlappingFieldsCanBeMergedRule } from 'graphql/validation';
|
|
50
|
+
*
|
|
51
|
+
* const schema = buildSchema(`
|
|
52
|
+
* type Query {
|
|
53
|
+
* dog: Dog
|
|
54
|
+
* }
|
|
55
|
+
*
|
|
56
|
+
* type Dog {
|
|
57
|
+
* name: String
|
|
58
|
+
* barkVolume: Int
|
|
59
|
+
* }
|
|
60
|
+
* `);
|
|
61
|
+
*
|
|
62
|
+
* const invalidDocument = parse(`
|
|
63
|
+
* { dog { value: barkVolume value: name } }
|
|
64
|
+
* `);
|
|
65
|
+
* const invalidErrors = validate(schema, invalidDocument, [OverlappingFieldsCanBeMergedRule]);
|
|
66
|
+
*
|
|
67
|
+
* invalidErrors.length; // => 1
|
|
68
|
+
*
|
|
69
|
+
* const validDocument = parse(`
|
|
70
|
+
* { dog { barkVolume name } }
|
|
71
|
+
* `);
|
|
72
|
+
* const validErrors = validate(schema, validDocument, [OverlappingFieldsCanBeMergedRule]);
|
|
73
|
+
*
|
|
74
|
+
* validErrors; // => []
|
|
75
|
+
* ```
|
|
43
76
|
*/
|
|
44
77
|
|
|
45
78
|
function OverlappingFieldsCanBeMergedRule(context) {
|
|
@@ -79,6 +112,10 @@ function OverlappingFieldsCanBeMergedRule(context) {
|
|
|
79
112
|
}
|
|
80
113
|
|
|
81
114
|
/**
|
|
115
|
+
* Find all conflicts found "within" a selection set, including those found
|
|
116
|
+
* via spreading in fragments. Called when visiting each SelectionSet in the
|
|
117
|
+
* GraphQL Document.
|
|
118
|
+
*
|
|
82
119
|
* Algorithm:
|
|
83
120
|
*
|
|
84
121
|
* Conflicts occur when two fields exist in a query which will produce the same
|
|
@@ -94,7 +131,7 @@ function OverlappingFieldsCanBeMergedRule(context) {
|
|
|
94
131
|
* A) Each selection set represented in the document first compares "within" its
|
|
95
132
|
* collected set of fields, finding any conflicts between every pair of
|
|
96
133
|
* overlapping fields.
|
|
97
|
-
* Note: This is the *only time* that
|
|
134
|
+
* Note: This is the *only time* that the fields "within" a set are compared
|
|
98
135
|
* to each other. After this only fields "between" sets are compared.
|
|
99
136
|
*
|
|
100
137
|
* B) Also, if any fragment is referenced in a selection set, then a
|
|
@@ -106,14 +143,14 @@ function OverlappingFieldsCanBeMergedRule(context) {
|
|
|
106
143
|
*
|
|
107
144
|
* D) When comparing "between" a set of fields and a referenced fragment, first
|
|
108
145
|
* a comparison is made between each field in the original set of fields and
|
|
109
|
-
* each field in the
|
|
146
|
+
* each field in the referenced set of fields.
|
|
110
147
|
*
|
|
111
148
|
* E) Also, if any fragment is referenced in the referenced selection set,
|
|
112
149
|
* then a comparison is made "between" the original set of fields and the
|
|
113
150
|
* referenced fragment (recursively referring to step D).
|
|
114
151
|
*
|
|
115
152
|
* F) When comparing "between" two fragments, first a comparison is made between
|
|
116
|
-
* each field in the first referenced set of fields and each field in the
|
|
153
|
+
* each field in the first referenced set of fields and each field in the
|
|
117
154
|
* second referenced set of fields.
|
|
118
155
|
*
|
|
119
156
|
* G) Also, any fragments referenced by the first must be compared to the
|
|
@@ -131,10 +168,8 @@ function OverlappingFieldsCanBeMergedRule(context) {
|
|
|
131
168
|
* J) Also, if two fragments are referenced in both selection sets, then a
|
|
132
169
|
* comparison is made "between" the two fragments.
|
|
133
170
|
*
|
|
171
|
+
* @internal
|
|
134
172
|
*/
|
|
135
|
-
// Find all conflicts found "within" a selection set, including those found
|
|
136
|
-
// via spreading in fragments. Called when visiting each SelectionSet in the
|
|
137
|
-
// GraphQL Document.
|
|
138
173
|
function findConflictsWithinSelectionSet(
|
|
139
174
|
context,
|
|
140
175
|
cachedFieldsAndFragmentNames,
|
|
@@ -809,6 +844,8 @@ function subfieldConflicts(conflicts, responseName, node1, node2) {
|
|
|
809
844
|
*
|
|
810
845
|
* Provides a third argument for has/set to allow flagging the pair as
|
|
811
846
|
* weakly or strongly present within the collection.
|
|
847
|
+
*
|
|
848
|
+
* @internal
|
|
812
849
|
*/
|
|
813
850
|
|
|
814
851
|
class OrderedPairSet {
|
|
@@ -845,6 +882,8 @@ class OrderedPairSet {
|
|
|
845
882
|
/**
|
|
846
883
|
* A way to keep track of pairs of similar things when the ordering of the pair
|
|
847
884
|
* does not matter.
|
|
885
|
+
*
|
|
886
|
+
* @internal
|
|
848
887
|
*/
|
|
849
888
|
|
|
850
889
|
class PairSet {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @category Validation Rules */
|
|
1
2
|
import { inspect } from '../../jsutils/inspect.mjs';
|
|
2
3
|
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
3
4
|
import { Kind } from '../../language/kinds.mjs';
|
|
@@ -34,6 +35,38 @@ function reasonMessage(reason) {
|
|
|
34
35
|
* without ambiguity.
|
|
35
36
|
*
|
|
36
37
|
* See https://spec.graphql.org/draft/#sec-Field-Selection-Merging
|
|
38
|
+
* @param context - The validation context used while checking the document.
|
|
39
|
+
* @returns A visitor that reports validation errors for this rule.
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* import { buildSchema, parse, validate } from 'graphql';
|
|
43
|
+
* import { OverlappingFieldsCanBeMergedRule } from 'graphql/validation';
|
|
44
|
+
*
|
|
45
|
+
* const schema = buildSchema(`
|
|
46
|
+
* type Query {
|
|
47
|
+
* dog: Dog
|
|
48
|
+
* }
|
|
49
|
+
*
|
|
50
|
+
* type Dog {
|
|
51
|
+
* name: String
|
|
52
|
+
* barkVolume: Int
|
|
53
|
+
* }
|
|
54
|
+
* `);
|
|
55
|
+
*
|
|
56
|
+
* const invalidDocument = parse(`
|
|
57
|
+
* { dog { value: barkVolume value: name } }
|
|
58
|
+
* `);
|
|
59
|
+
* const invalidErrors = validate(schema, invalidDocument, [OverlappingFieldsCanBeMergedRule]);
|
|
60
|
+
*
|
|
61
|
+
* invalidErrors.length; // => 1
|
|
62
|
+
*
|
|
63
|
+
* const validDocument = parse(`
|
|
64
|
+
* { dog { barkVolume name } }
|
|
65
|
+
* `);
|
|
66
|
+
* const validErrors = validate(schema, validDocument, [OverlappingFieldsCanBeMergedRule]);
|
|
67
|
+
*
|
|
68
|
+
* validErrors; // => []
|
|
69
|
+
* ```
|
|
37
70
|
*/
|
|
38
71
|
|
|
39
72
|
export function OverlappingFieldsCanBeMergedRule(context) {
|
|
@@ -73,6 +106,10 @@ export function OverlappingFieldsCanBeMergedRule(context) {
|
|
|
73
106
|
}
|
|
74
107
|
|
|
75
108
|
/**
|
|
109
|
+
* Find all conflicts found "within" a selection set, including those found
|
|
110
|
+
* via spreading in fragments. Called when visiting each SelectionSet in the
|
|
111
|
+
* GraphQL Document.
|
|
112
|
+
*
|
|
76
113
|
* Algorithm:
|
|
77
114
|
*
|
|
78
115
|
* Conflicts occur when two fields exist in a query which will produce the same
|
|
@@ -88,7 +125,7 @@ export function OverlappingFieldsCanBeMergedRule(context) {
|
|
|
88
125
|
* A) Each selection set represented in the document first compares "within" its
|
|
89
126
|
* collected set of fields, finding any conflicts between every pair of
|
|
90
127
|
* overlapping fields.
|
|
91
|
-
* Note: This is the *only time* that
|
|
128
|
+
* Note: This is the *only time* that the fields "within" a set are compared
|
|
92
129
|
* to each other. After this only fields "between" sets are compared.
|
|
93
130
|
*
|
|
94
131
|
* B) Also, if any fragment is referenced in a selection set, then a
|
|
@@ -100,14 +137,14 @@ export function OverlappingFieldsCanBeMergedRule(context) {
|
|
|
100
137
|
*
|
|
101
138
|
* D) When comparing "between" a set of fields and a referenced fragment, first
|
|
102
139
|
* a comparison is made between each field in the original set of fields and
|
|
103
|
-
* each field in the
|
|
140
|
+
* each field in the referenced set of fields.
|
|
104
141
|
*
|
|
105
142
|
* E) Also, if any fragment is referenced in the referenced selection set,
|
|
106
143
|
* then a comparison is made "between" the original set of fields and the
|
|
107
144
|
* referenced fragment (recursively referring to step D).
|
|
108
145
|
*
|
|
109
146
|
* F) When comparing "between" two fragments, first a comparison is made between
|
|
110
|
-
* each field in the first referenced set of fields and each field in the
|
|
147
|
+
* each field in the first referenced set of fields and each field in the
|
|
111
148
|
* second referenced set of fields.
|
|
112
149
|
*
|
|
113
150
|
* G) Also, any fragments referenced by the first must be compared to the
|
|
@@ -125,10 +162,8 @@ export function OverlappingFieldsCanBeMergedRule(context) {
|
|
|
125
162
|
* J) Also, if two fragments are referenced in both selection sets, then a
|
|
126
163
|
* comparison is made "between" the two fragments.
|
|
127
164
|
*
|
|
165
|
+
* @internal
|
|
128
166
|
*/
|
|
129
|
-
// Find all conflicts found "within" a selection set, including those found
|
|
130
|
-
// via spreading in fragments. Called when visiting each SelectionSet in the
|
|
131
|
-
// GraphQL Document.
|
|
132
167
|
function findConflictsWithinSelectionSet(
|
|
133
168
|
context,
|
|
134
169
|
cachedFieldsAndFragmentNames,
|
|
@@ -794,6 +829,8 @@ function subfieldConflicts(conflicts, responseName, node1, node2) {
|
|
|
794
829
|
*
|
|
795
830
|
* Provides a third argument for has/set to allow flagging the pair as
|
|
796
831
|
* weakly or strongly present within the collection.
|
|
832
|
+
*
|
|
833
|
+
* @internal
|
|
797
834
|
*/
|
|
798
835
|
|
|
799
836
|
class OrderedPairSet {
|
|
@@ -830,6 +867,8 @@ class OrderedPairSet {
|
|
|
830
867
|
/**
|
|
831
868
|
* A way to keep track of pairs of similar things when the ordering of the pair
|
|
832
869
|
* does not matter.
|
|
870
|
+
*
|
|
871
|
+
* @internal
|
|
833
872
|
*/
|
|
834
873
|
|
|
835
874
|
class PairSet {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @category Validation Rules */
|
|
1
2
|
import type { ASTVisitor } from '../../language/visitor';
|
|
2
3
|
import type { ValidationContext } from '../ValidationContext';
|
|
3
4
|
/**
|
|
@@ -6,6 +7,41 @@ import type { ValidationContext } from '../ValidationContext';
|
|
|
6
7
|
* A fragment spread is only valid if the type condition could ever possibly
|
|
7
8
|
* be true: if there is a non-empty intersection of the possible parent types,
|
|
8
9
|
* and possible types which pass the type condition.
|
|
10
|
+
* @param context - The validation context used while checking the document.
|
|
11
|
+
* @returns A visitor that reports validation errors for this rule.
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* import { buildSchema, parse, validate } from 'graphql';
|
|
15
|
+
* import { PossibleFragmentSpreadsRule } from 'graphql/validation';
|
|
16
|
+
*
|
|
17
|
+
* const schema = buildSchema(`
|
|
18
|
+
* type Query {
|
|
19
|
+
* dog: Dog
|
|
20
|
+
* }
|
|
21
|
+
*
|
|
22
|
+
* type Dog {
|
|
23
|
+
* barkVolume: Int
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* type Cat {
|
|
27
|
+
* meowVolume: Int
|
|
28
|
+
* }
|
|
29
|
+
* `);
|
|
30
|
+
*
|
|
31
|
+
* const invalidDocument = parse(`
|
|
32
|
+
* { dog { ... on Cat { meowVolume } } }
|
|
33
|
+
* `);
|
|
34
|
+
* const invalidErrors = validate(schema, invalidDocument, [PossibleFragmentSpreadsRule]);
|
|
35
|
+
*
|
|
36
|
+
* invalidErrors.length; // => 1
|
|
37
|
+
*
|
|
38
|
+
* const validDocument = parse(`
|
|
39
|
+
* { dog { ... on Dog { barkVolume } } }
|
|
40
|
+
* `);
|
|
41
|
+
* const validErrors = validate(schema, validDocument, [PossibleFragmentSpreadsRule]);
|
|
42
|
+
*
|
|
43
|
+
* validErrors; // => []
|
|
44
|
+
* ```
|
|
9
45
|
*/
|
|
10
46
|
export declare function PossibleFragmentSpreadsRule(
|
|
11
47
|
context: ValidationContext,
|
|
@@ -15,12 +15,49 @@ var _typeComparators = require('../../utilities/typeComparators.js');
|
|
|
15
15
|
|
|
16
16
|
var _typeFromAST = require('../../utilities/typeFromAST.js');
|
|
17
17
|
|
|
18
|
+
/** @category Validation Rules */
|
|
19
|
+
|
|
18
20
|
/**
|
|
19
21
|
* Possible fragment spread
|
|
20
22
|
*
|
|
21
23
|
* A fragment spread is only valid if the type condition could ever possibly
|
|
22
24
|
* be true: if there is a non-empty intersection of the possible parent types,
|
|
23
25
|
* and possible types which pass the type condition.
|
|
26
|
+
* @param context - The validation context used while checking the document.
|
|
27
|
+
* @returns A visitor that reports validation errors for this rule.
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* import { buildSchema, parse, validate } from 'graphql';
|
|
31
|
+
* import { PossibleFragmentSpreadsRule } from 'graphql/validation';
|
|
32
|
+
*
|
|
33
|
+
* const schema = buildSchema(`
|
|
34
|
+
* type Query {
|
|
35
|
+
* dog: Dog
|
|
36
|
+
* }
|
|
37
|
+
*
|
|
38
|
+
* type Dog {
|
|
39
|
+
* barkVolume: Int
|
|
40
|
+
* }
|
|
41
|
+
*
|
|
42
|
+
* type Cat {
|
|
43
|
+
* meowVolume: Int
|
|
44
|
+
* }
|
|
45
|
+
* `);
|
|
46
|
+
*
|
|
47
|
+
* const invalidDocument = parse(`
|
|
48
|
+
* { dog { ... on Cat { meowVolume } } }
|
|
49
|
+
* `);
|
|
50
|
+
* const invalidErrors = validate(schema, invalidDocument, [PossibleFragmentSpreadsRule]);
|
|
51
|
+
*
|
|
52
|
+
* invalidErrors.length; // => 1
|
|
53
|
+
*
|
|
54
|
+
* const validDocument = parse(`
|
|
55
|
+
* { dog { ... on Dog { barkVolume } } }
|
|
56
|
+
* `);
|
|
57
|
+
* const validErrors = validate(schema, validDocument, [PossibleFragmentSpreadsRule]);
|
|
58
|
+
*
|
|
59
|
+
* validErrors; // => []
|
|
60
|
+
* ```
|
|
24
61
|
*/
|
|
25
62
|
function PossibleFragmentSpreadsRule(context) {
|
|
26
63
|
return {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @category Validation Rules */
|
|
1
2
|
import { inspect } from '../../jsutils/inspect.mjs';
|
|
2
3
|
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
3
4
|
import { isCompositeType } from '../../type/definition.mjs';
|
|
@@ -10,6 +11,41 @@ import { typeFromAST } from '../../utilities/typeFromAST.mjs';
|
|
|
10
11
|
* A fragment spread is only valid if the type condition could ever possibly
|
|
11
12
|
* be true: if there is a non-empty intersection of the possible parent types,
|
|
12
13
|
* and possible types which pass the type condition.
|
|
14
|
+
* @param context - The validation context used while checking the document.
|
|
15
|
+
* @returns A visitor that reports validation errors for this rule.
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* import { buildSchema, parse, validate } from 'graphql';
|
|
19
|
+
* import { PossibleFragmentSpreadsRule } from 'graphql/validation';
|
|
20
|
+
*
|
|
21
|
+
* const schema = buildSchema(`
|
|
22
|
+
* type Query {
|
|
23
|
+
* dog: Dog
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* type Dog {
|
|
27
|
+
* barkVolume: Int
|
|
28
|
+
* }
|
|
29
|
+
*
|
|
30
|
+
* type Cat {
|
|
31
|
+
* meowVolume: Int
|
|
32
|
+
* }
|
|
33
|
+
* `);
|
|
34
|
+
*
|
|
35
|
+
* const invalidDocument = parse(`
|
|
36
|
+
* { dog { ... on Cat { meowVolume } } }
|
|
37
|
+
* `);
|
|
38
|
+
* const invalidErrors = validate(schema, invalidDocument, [PossibleFragmentSpreadsRule]);
|
|
39
|
+
*
|
|
40
|
+
* invalidErrors.length; // => 1
|
|
41
|
+
*
|
|
42
|
+
* const validDocument = parse(`
|
|
43
|
+
* { dog { ... on Dog { barkVolume } } }
|
|
44
|
+
* `);
|
|
45
|
+
* const validErrors = validate(schema, validDocument, [PossibleFragmentSpreadsRule]);
|
|
46
|
+
*
|
|
47
|
+
* validErrors; // => []
|
|
48
|
+
* ```
|
|
13
49
|
*/
|
|
14
50
|
export function PossibleFragmentSpreadsRule(context) {
|
|
15
51
|
return {
|
|
@@ -1,9 +1,30 @@
|
|
|
1
|
+
/** @category Validation Rules */
|
|
1
2
|
import type { ASTVisitor } from '../../language/visitor';
|
|
2
3
|
import type { SDLValidationContext } from '../ValidationContext';
|
|
3
4
|
/**
|
|
4
5
|
* Possible type extension
|
|
5
6
|
*
|
|
6
7
|
* A type extension is only valid if the type is defined and has the same kind.
|
|
8
|
+
* @param context - The validation context used while checking the document.
|
|
9
|
+
* @returns A visitor that reports validation errors for this rule.
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { buildSchema } from 'graphql';
|
|
13
|
+
* import { PossibleTypeExtensionsRule } from 'graphql/validation';
|
|
14
|
+
*
|
|
15
|
+
* const invalidSDL = `
|
|
16
|
+
* extend type Missing { name: String } type Query { name: String }
|
|
17
|
+
* `;
|
|
18
|
+
*
|
|
19
|
+
* PossibleTypeExtensionsRule.name; // => 'PossibleTypeExtensionsRule'
|
|
20
|
+
* buildSchema(invalidSDL); // throws an error
|
|
21
|
+
*
|
|
22
|
+
* const validSDL = `
|
|
23
|
+
* type Query { name: String } extend type Query { other: String }
|
|
24
|
+
* `;
|
|
25
|
+
*
|
|
26
|
+
* buildSchema(validSDL); // does not throw
|
|
27
|
+
* ```
|
|
7
28
|
*/
|
|
8
29
|
export declare function PossibleTypeExtensionsRule(
|
|
9
30
|
context: SDLValidationContext,
|