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,83 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
exports.NoFragmentCyclesRule = NoFragmentCyclesRule;
|
|
7
|
+
|
|
8
|
+
var _GraphQLError = require('../../error/GraphQLError.js');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* No fragment cycles
|
|
12
|
+
*
|
|
13
|
+
* The graph of fragment spreads must not form any cycles including spreading itself.
|
|
14
|
+
* Otherwise an operation could infinitely spread or infinitely execute on cycles in the underlying data.
|
|
15
|
+
*
|
|
16
|
+
* See https://spec.graphql.org/draft/#sec-Fragment-spreads-must-not-form-cycles
|
|
17
|
+
*/
|
|
18
|
+
function NoFragmentCyclesRule(context) {
|
|
19
|
+
// Tracks already visited fragments to maintain O(N) and to ensure that cycles
|
|
20
|
+
// are not redundantly reported.
|
|
21
|
+
const visitedFrags = Object.create(null); // Array of AST nodes used to produce meaningful errors
|
|
22
|
+
|
|
23
|
+
const spreadPath = []; // Position in the spread path
|
|
24
|
+
|
|
25
|
+
const spreadPathIndexByName = Object.create(null);
|
|
26
|
+
return {
|
|
27
|
+
OperationDefinition: () => false,
|
|
28
|
+
|
|
29
|
+
FragmentDefinition(node) {
|
|
30
|
+
detectCycleRecursive(node);
|
|
31
|
+
return false;
|
|
32
|
+
},
|
|
33
|
+
}; // This does a straight-forward DFS to find cycles.
|
|
34
|
+
// It does not terminate when a cycle was found but continues to explore
|
|
35
|
+
// the graph to find all possible cycles.
|
|
36
|
+
|
|
37
|
+
function detectCycleRecursive(fragment) {
|
|
38
|
+
if (visitedFrags[fragment.name.value]) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const fragmentName = fragment.name.value;
|
|
43
|
+
visitedFrags[fragmentName] = true;
|
|
44
|
+
const spreadNodes = context.getFragmentSpreads(fragment.selectionSet);
|
|
45
|
+
|
|
46
|
+
if (spreadNodes.length === 0) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
spreadPathIndexByName[fragmentName] = spreadPath.length;
|
|
51
|
+
|
|
52
|
+
for (const spreadNode of spreadNodes) {
|
|
53
|
+
const spreadName = spreadNode.name.value;
|
|
54
|
+
const cycleIndex = spreadPathIndexByName[spreadName];
|
|
55
|
+
spreadPath.push(spreadNode);
|
|
56
|
+
|
|
57
|
+
if (cycleIndex === undefined) {
|
|
58
|
+
const spreadFragment = context.getFragment(spreadName);
|
|
59
|
+
|
|
60
|
+
if (spreadFragment) {
|
|
61
|
+
detectCycleRecursive(spreadFragment);
|
|
62
|
+
}
|
|
63
|
+
} else {
|
|
64
|
+
const cyclePath = spreadPath.slice(cycleIndex);
|
|
65
|
+
const viaPath = cyclePath
|
|
66
|
+
.slice(0, -1)
|
|
67
|
+
.map((s) => '"' + s.name.value + '"')
|
|
68
|
+
.join(', ');
|
|
69
|
+
context.reportError(
|
|
70
|
+
new _GraphQLError.GraphQLError(
|
|
71
|
+
`Cannot spread fragment "${spreadName}" within itself` +
|
|
72
|
+
(viaPath !== '' ? ` via ${viaPath}.` : '.'),
|
|
73
|
+
cyclePath,
|
|
74
|
+
),
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
spreadPath.pop();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
spreadPathIndexByName[fragmentName] = undefined;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* No fragment cycles
|
|
5
|
+
*
|
|
6
|
+
* The graph of fragment spreads must not form any cycles including spreading itself.
|
|
7
|
+
* Otherwise an operation could infinitely spread or infinitely execute on cycles in the underlying data.
|
|
8
|
+
*
|
|
9
|
+
* See https://spec.graphql.org/draft/#sec-Fragment-spreads-must-not-form-cycles
|
|
10
|
+
*/
|
|
11
|
+
export function NoFragmentCyclesRule(context) {
|
|
12
|
+
// Tracks already visited fragments to maintain O(N) and to ensure that cycles
|
|
13
|
+
// are not redundantly reported.
|
|
14
|
+
const visitedFrags = Object.create(null); // Array of AST nodes used to produce meaningful errors
|
|
15
|
+
|
|
16
|
+
const spreadPath = []; // Position in the spread path
|
|
17
|
+
|
|
18
|
+
const spreadPathIndexByName = Object.create(null);
|
|
19
|
+
return {
|
|
20
|
+
OperationDefinition: () => false,
|
|
21
|
+
|
|
22
|
+
FragmentDefinition(node) {
|
|
23
|
+
detectCycleRecursive(node);
|
|
24
|
+
return false;
|
|
25
|
+
},
|
|
26
|
+
}; // This does a straight-forward DFS to find cycles.
|
|
27
|
+
// It does not terminate when a cycle was found but continues to explore
|
|
28
|
+
// the graph to find all possible cycles.
|
|
29
|
+
|
|
30
|
+
function detectCycleRecursive(fragment) {
|
|
31
|
+
if (visitedFrags[fragment.name.value]) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const fragmentName = fragment.name.value;
|
|
36
|
+
visitedFrags[fragmentName] = true;
|
|
37
|
+
const spreadNodes = context.getFragmentSpreads(fragment.selectionSet);
|
|
38
|
+
|
|
39
|
+
if (spreadNodes.length === 0) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
spreadPathIndexByName[fragmentName] = spreadPath.length;
|
|
44
|
+
|
|
45
|
+
for (const spreadNode of spreadNodes) {
|
|
46
|
+
const spreadName = spreadNode.name.value;
|
|
47
|
+
const cycleIndex = spreadPathIndexByName[spreadName];
|
|
48
|
+
spreadPath.push(spreadNode);
|
|
49
|
+
|
|
50
|
+
if (cycleIndex === undefined) {
|
|
51
|
+
const spreadFragment = context.getFragment(spreadName);
|
|
52
|
+
|
|
53
|
+
if (spreadFragment) {
|
|
54
|
+
detectCycleRecursive(spreadFragment);
|
|
55
|
+
}
|
|
56
|
+
} else {
|
|
57
|
+
const cyclePath = spreadPath.slice(cycleIndex);
|
|
58
|
+
const viaPath = cyclePath
|
|
59
|
+
.slice(0, -1)
|
|
60
|
+
.map((s) => '"' + s.name.value + '"')
|
|
61
|
+
.join(', ');
|
|
62
|
+
context.reportError(
|
|
63
|
+
new GraphQLError(
|
|
64
|
+
`Cannot spread fragment "${spreadName}" within itself` +
|
|
65
|
+
(viaPath !== '' ? ` via ${viaPath}.` : '.'),
|
|
66
|
+
cyclePath,
|
|
67
|
+
),
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
spreadPath.pop();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
spreadPathIndexByName[fragmentName] = undefined;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ASTVisitor } from '../../language/visitor';
|
|
2
|
+
import type { ValidationContext } from '../ValidationContext';
|
|
3
|
+
/**
|
|
4
|
+
* No undefined variables
|
|
5
|
+
*
|
|
6
|
+
* A GraphQL operation is only valid if all variables encountered, both directly
|
|
7
|
+
* and via fragment spreads, are defined by that operation.
|
|
8
|
+
*
|
|
9
|
+
* See https://spec.graphql.org/draft/#sec-All-Variable-Uses-Defined
|
|
10
|
+
*/
|
|
11
|
+
export declare function NoUndefinedVariablesRule(
|
|
12
|
+
context: ValidationContext,
|
|
13
|
+
): ASTVisitor;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
exports.NoUndefinedVariablesRule = NoUndefinedVariablesRule;
|
|
7
|
+
|
|
8
|
+
var _GraphQLError = require('../../error/GraphQLError.js');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* No undefined variables
|
|
12
|
+
*
|
|
13
|
+
* A GraphQL operation is only valid if all variables encountered, both directly
|
|
14
|
+
* and via fragment spreads, are defined by that operation.
|
|
15
|
+
*
|
|
16
|
+
* See https://spec.graphql.org/draft/#sec-All-Variable-Uses-Defined
|
|
17
|
+
*/
|
|
18
|
+
function NoUndefinedVariablesRule(context) {
|
|
19
|
+
let variableNameDefined = Object.create(null);
|
|
20
|
+
return {
|
|
21
|
+
OperationDefinition: {
|
|
22
|
+
enter() {
|
|
23
|
+
variableNameDefined = Object.create(null);
|
|
24
|
+
},
|
|
25
|
+
|
|
26
|
+
leave(operation) {
|
|
27
|
+
const usages = context.getRecursiveVariableUsages(operation);
|
|
28
|
+
|
|
29
|
+
for (const { node } of usages) {
|
|
30
|
+
const varName = node.name.value;
|
|
31
|
+
|
|
32
|
+
if (variableNameDefined[varName] !== true) {
|
|
33
|
+
context.reportError(
|
|
34
|
+
new _GraphQLError.GraphQLError(
|
|
35
|
+
operation.name
|
|
36
|
+
? `Variable "$${varName}" is not defined by operation "${operation.name.value}".`
|
|
37
|
+
: `Variable "$${varName}" is not defined.`,
|
|
38
|
+
[node, operation],
|
|
39
|
+
),
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
VariableDefinition(node) {
|
|
47
|
+
variableNameDefined[node.variable.name.value] = true;
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* No undefined variables
|
|
5
|
+
*
|
|
6
|
+
* A GraphQL operation is only valid if all variables encountered, both directly
|
|
7
|
+
* and via fragment spreads, are defined by that operation.
|
|
8
|
+
*
|
|
9
|
+
* See https://spec.graphql.org/draft/#sec-All-Variable-Uses-Defined
|
|
10
|
+
*/
|
|
11
|
+
export function NoUndefinedVariablesRule(context) {
|
|
12
|
+
let variableNameDefined = Object.create(null);
|
|
13
|
+
return {
|
|
14
|
+
OperationDefinition: {
|
|
15
|
+
enter() {
|
|
16
|
+
variableNameDefined = Object.create(null);
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
leave(operation) {
|
|
20
|
+
const usages = context.getRecursiveVariableUsages(operation);
|
|
21
|
+
|
|
22
|
+
for (const { node } of usages) {
|
|
23
|
+
const varName = node.name.value;
|
|
24
|
+
|
|
25
|
+
if (variableNameDefined[varName] !== true) {
|
|
26
|
+
context.reportError(
|
|
27
|
+
new GraphQLError(
|
|
28
|
+
operation.name
|
|
29
|
+
? `Variable "$${varName}" is not defined by operation "${operation.name.value}".`
|
|
30
|
+
: `Variable "$${varName}" is not defined.`,
|
|
31
|
+
[node, operation],
|
|
32
|
+
),
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
VariableDefinition(node) {
|
|
40
|
+
variableNameDefined[node.variable.name.value] = true;
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ASTVisitor } from '../../language/visitor';
|
|
2
|
+
import type { ASTValidationContext } from '../ValidationContext';
|
|
3
|
+
/**
|
|
4
|
+
* No unused fragments
|
|
5
|
+
*
|
|
6
|
+
* A GraphQL document is only valid if all fragment definitions are spread
|
|
7
|
+
* within operations, or spread within other fragments spread within operations.
|
|
8
|
+
*
|
|
9
|
+
* See https://spec.graphql.org/draft/#sec-Fragments-Must-Be-Used
|
|
10
|
+
*/
|
|
11
|
+
export declare function NoUnusedFragmentsRule(
|
|
12
|
+
context: ASTValidationContext,
|
|
13
|
+
): ASTVisitor;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
exports.NoUnusedFragmentsRule = NoUnusedFragmentsRule;
|
|
7
|
+
|
|
8
|
+
var _GraphQLError = require('../../error/GraphQLError.js');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* No unused fragments
|
|
12
|
+
*
|
|
13
|
+
* A GraphQL document is only valid if all fragment definitions are spread
|
|
14
|
+
* within operations, or spread within other fragments spread within operations.
|
|
15
|
+
*
|
|
16
|
+
* See https://spec.graphql.org/draft/#sec-Fragments-Must-Be-Used
|
|
17
|
+
*/
|
|
18
|
+
function NoUnusedFragmentsRule(context) {
|
|
19
|
+
const operationDefs = [];
|
|
20
|
+
const fragmentDefs = [];
|
|
21
|
+
return {
|
|
22
|
+
OperationDefinition(node) {
|
|
23
|
+
operationDefs.push(node);
|
|
24
|
+
return false;
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
FragmentDefinition(node) {
|
|
28
|
+
fragmentDefs.push(node);
|
|
29
|
+
return false;
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
Document: {
|
|
33
|
+
leave() {
|
|
34
|
+
const fragmentNameUsed = Object.create(null);
|
|
35
|
+
|
|
36
|
+
for (const operation of operationDefs) {
|
|
37
|
+
for (const fragment of context.getRecursivelyReferencedFragments(
|
|
38
|
+
operation,
|
|
39
|
+
)) {
|
|
40
|
+
fragmentNameUsed[fragment.name.value] = true;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
for (const fragmentDef of fragmentDefs) {
|
|
45
|
+
const fragName = fragmentDef.name.value;
|
|
46
|
+
|
|
47
|
+
if (fragmentNameUsed[fragName] !== true) {
|
|
48
|
+
context.reportError(
|
|
49
|
+
new _GraphQLError.GraphQLError(
|
|
50
|
+
`Fragment "${fragName}" is never used.`,
|
|
51
|
+
fragmentDef,
|
|
52
|
+
),
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* No unused fragments
|
|
5
|
+
*
|
|
6
|
+
* A GraphQL document is only valid if all fragment definitions are spread
|
|
7
|
+
* within operations, or spread within other fragments spread within operations.
|
|
8
|
+
*
|
|
9
|
+
* See https://spec.graphql.org/draft/#sec-Fragments-Must-Be-Used
|
|
10
|
+
*/
|
|
11
|
+
export function NoUnusedFragmentsRule(context) {
|
|
12
|
+
const operationDefs = [];
|
|
13
|
+
const fragmentDefs = [];
|
|
14
|
+
return {
|
|
15
|
+
OperationDefinition(node) {
|
|
16
|
+
operationDefs.push(node);
|
|
17
|
+
return false;
|
|
18
|
+
},
|
|
19
|
+
|
|
20
|
+
FragmentDefinition(node) {
|
|
21
|
+
fragmentDefs.push(node);
|
|
22
|
+
return false;
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
Document: {
|
|
26
|
+
leave() {
|
|
27
|
+
const fragmentNameUsed = Object.create(null);
|
|
28
|
+
|
|
29
|
+
for (const operation of operationDefs) {
|
|
30
|
+
for (const fragment of context.getRecursivelyReferencedFragments(
|
|
31
|
+
operation,
|
|
32
|
+
)) {
|
|
33
|
+
fragmentNameUsed[fragment.name.value] = true;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
for (const fragmentDef of fragmentDefs) {
|
|
38
|
+
const fragName = fragmentDef.name.value;
|
|
39
|
+
|
|
40
|
+
if (fragmentNameUsed[fragName] !== true) {
|
|
41
|
+
context.reportError(
|
|
42
|
+
new GraphQLError(
|
|
43
|
+
`Fragment "${fragName}" is never used.`,
|
|
44
|
+
fragmentDef,
|
|
45
|
+
),
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ASTVisitor } from '../../language/visitor';
|
|
2
|
+
import type { ValidationContext } from '../ValidationContext';
|
|
3
|
+
/**
|
|
4
|
+
* No unused variables
|
|
5
|
+
*
|
|
6
|
+
* A GraphQL operation is only valid if all variables defined by an operation
|
|
7
|
+
* are used, either directly or within a spread fragment.
|
|
8
|
+
*
|
|
9
|
+
* See https://spec.graphql.org/draft/#sec-All-Variables-Used
|
|
10
|
+
*/
|
|
11
|
+
export declare function NoUnusedVariablesRule(
|
|
12
|
+
context: ValidationContext,
|
|
13
|
+
): ASTVisitor;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
exports.NoUnusedVariablesRule = NoUnusedVariablesRule;
|
|
7
|
+
|
|
8
|
+
var _GraphQLError = require('../../error/GraphQLError.js');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* No unused variables
|
|
12
|
+
*
|
|
13
|
+
* A GraphQL operation is only valid if all variables defined by an operation
|
|
14
|
+
* are used, either directly or within a spread fragment.
|
|
15
|
+
*
|
|
16
|
+
* See https://spec.graphql.org/draft/#sec-All-Variables-Used
|
|
17
|
+
*/
|
|
18
|
+
function NoUnusedVariablesRule(context) {
|
|
19
|
+
let variableDefs = [];
|
|
20
|
+
return {
|
|
21
|
+
OperationDefinition: {
|
|
22
|
+
enter() {
|
|
23
|
+
variableDefs = [];
|
|
24
|
+
},
|
|
25
|
+
|
|
26
|
+
leave(operation) {
|
|
27
|
+
const variableNameUsed = Object.create(null);
|
|
28
|
+
const usages = context.getRecursiveVariableUsages(operation);
|
|
29
|
+
|
|
30
|
+
for (const { node } of usages) {
|
|
31
|
+
variableNameUsed[node.name.value] = true;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
for (const variableDef of variableDefs) {
|
|
35
|
+
const variableName = variableDef.variable.name.value;
|
|
36
|
+
|
|
37
|
+
if (variableNameUsed[variableName] !== true) {
|
|
38
|
+
context.reportError(
|
|
39
|
+
new _GraphQLError.GraphQLError(
|
|
40
|
+
operation.name
|
|
41
|
+
? `Variable "$${variableName}" is never used in operation "${operation.name.value}".`
|
|
42
|
+
: `Variable "$${variableName}" is never used.`,
|
|
43
|
+
variableDef,
|
|
44
|
+
),
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
VariableDefinition(def) {
|
|
52
|
+
variableDefs.push(def);
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* No unused variables
|
|
5
|
+
*
|
|
6
|
+
* A GraphQL operation is only valid if all variables defined by an operation
|
|
7
|
+
* are used, either directly or within a spread fragment.
|
|
8
|
+
*
|
|
9
|
+
* See https://spec.graphql.org/draft/#sec-All-Variables-Used
|
|
10
|
+
*/
|
|
11
|
+
export function NoUnusedVariablesRule(context) {
|
|
12
|
+
let variableDefs = [];
|
|
13
|
+
return {
|
|
14
|
+
OperationDefinition: {
|
|
15
|
+
enter() {
|
|
16
|
+
variableDefs = [];
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
leave(operation) {
|
|
20
|
+
const variableNameUsed = Object.create(null);
|
|
21
|
+
const usages = context.getRecursiveVariableUsages(operation);
|
|
22
|
+
|
|
23
|
+
for (const { node } of usages) {
|
|
24
|
+
variableNameUsed[node.name.value] = true;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
for (const variableDef of variableDefs) {
|
|
28
|
+
const variableName = variableDef.variable.name.value;
|
|
29
|
+
|
|
30
|
+
if (variableNameUsed[variableName] !== true) {
|
|
31
|
+
context.reportError(
|
|
32
|
+
new GraphQLError(
|
|
33
|
+
operation.name
|
|
34
|
+
? `Variable "$${variableName}" is never used in operation "${operation.name.value}".`
|
|
35
|
+
: `Variable "$${variableName}" is never used.`,
|
|
36
|
+
variableDef,
|
|
37
|
+
),
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
VariableDefinition(def) {
|
|
45
|
+
variableDefs.push(def);
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|