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,42 @@
|
|
|
1
|
+
import { groupBy } from '../../jsutils/groupBy.mjs';
|
|
2
|
+
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Unique argument names
|
|
6
|
+
*
|
|
7
|
+
* A GraphQL field or directive is only valid if all supplied arguments are
|
|
8
|
+
* uniquely named.
|
|
9
|
+
*
|
|
10
|
+
* See https://spec.graphql.org/draft/#sec-Argument-Names
|
|
11
|
+
*/
|
|
12
|
+
export function UniqueArgumentNamesRule(context) {
|
|
13
|
+
return {
|
|
14
|
+
Field: checkArgUniqueness,
|
|
15
|
+
Directive: checkArgUniqueness,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
function checkArgUniqueness(parentNode) {
|
|
19
|
+
var _parentNode$arguments;
|
|
20
|
+
|
|
21
|
+
// FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
22
|
+
|
|
23
|
+
/* c8 ignore next */
|
|
24
|
+
const argumentNodes =
|
|
25
|
+
(_parentNode$arguments = parentNode.arguments) !== null &&
|
|
26
|
+
_parentNode$arguments !== void 0
|
|
27
|
+
? _parentNode$arguments
|
|
28
|
+
: [];
|
|
29
|
+
const seenArgs = groupBy(argumentNodes, (arg) => arg.name.value);
|
|
30
|
+
|
|
31
|
+
for (const [argName, argNodes] of seenArgs) {
|
|
32
|
+
if (argNodes.length > 1) {
|
|
33
|
+
context.reportError(
|
|
34
|
+
new GraphQLError(
|
|
35
|
+
`There can be only one argument named "${argName}".`,
|
|
36
|
+
argNodes.map((node) => node.name),
|
|
37
|
+
),
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ASTVisitor } from '../../language/visitor';
|
|
2
|
+
import type { SDLValidationContext } from '../ValidationContext';
|
|
3
|
+
/**
|
|
4
|
+
* Unique directive names
|
|
5
|
+
*
|
|
6
|
+
* A GraphQL document is only valid if all defined directives have unique names.
|
|
7
|
+
*/
|
|
8
|
+
export declare function UniqueDirectiveNamesRule(
|
|
9
|
+
context: SDLValidationContext,
|
|
10
|
+
): ASTVisitor;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
exports.UniqueDirectiveNamesRule = UniqueDirectiveNamesRule;
|
|
7
|
+
|
|
8
|
+
var _GraphQLError = require('../../error/GraphQLError.js');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Unique directive names
|
|
12
|
+
*
|
|
13
|
+
* A GraphQL document is only valid if all defined directives have unique names.
|
|
14
|
+
*/
|
|
15
|
+
function UniqueDirectiveNamesRule(context) {
|
|
16
|
+
const knownDirectiveNames = Object.create(null);
|
|
17
|
+
const schema = context.getSchema();
|
|
18
|
+
return {
|
|
19
|
+
DirectiveDefinition(node) {
|
|
20
|
+
const directiveName = node.name.value;
|
|
21
|
+
|
|
22
|
+
if (
|
|
23
|
+
schema !== null &&
|
|
24
|
+
schema !== void 0 &&
|
|
25
|
+
schema.getDirective(directiveName)
|
|
26
|
+
) {
|
|
27
|
+
context.reportError(
|
|
28
|
+
new _GraphQLError.GraphQLError(
|
|
29
|
+
`Directive "@${directiveName}" already exists in the schema. It cannot be redefined.`,
|
|
30
|
+
node.name,
|
|
31
|
+
),
|
|
32
|
+
);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (knownDirectiveNames[directiveName]) {
|
|
37
|
+
context.reportError(
|
|
38
|
+
new _GraphQLError.GraphQLError(
|
|
39
|
+
`There can be only one directive named "@${directiveName}".`,
|
|
40
|
+
[knownDirectiveNames[directiveName], node.name],
|
|
41
|
+
),
|
|
42
|
+
);
|
|
43
|
+
} else {
|
|
44
|
+
knownDirectiveNames[directiveName] = node.name;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return false;
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Unique directive names
|
|
5
|
+
*
|
|
6
|
+
* A GraphQL document is only valid if all defined directives have unique names.
|
|
7
|
+
*/
|
|
8
|
+
export function UniqueDirectiveNamesRule(context) {
|
|
9
|
+
const knownDirectiveNames = Object.create(null);
|
|
10
|
+
const schema = context.getSchema();
|
|
11
|
+
return {
|
|
12
|
+
DirectiveDefinition(node) {
|
|
13
|
+
const directiveName = node.name.value;
|
|
14
|
+
|
|
15
|
+
if (
|
|
16
|
+
schema !== null &&
|
|
17
|
+
schema !== void 0 &&
|
|
18
|
+
schema.getDirective(directiveName)
|
|
19
|
+
) {
|
|
20
|
+
context.reportError(
|
|
21
|
+
new GraphQLError(
|
|
22
|
+
`Directive "@${directiveName}" already exists in the schema. It cannot be redefined.`,
|
|
23
|
+
node.name,
|
|
24
|
+
),
|
|
25
|
+
);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (knownDirectiveNames[directiveName]) {
|
|
30
|
+
context.reportError(
|
|
31
|
+
new GraphQLError(
|
|
32
|
+
`There can be only one directive named "@${directiveName}".`,
|
|
33
|
+
[knownDirectiveNames[directiveName], node.name],
|
|
34
|
+
),
|
|
35
|
+
);
|
|
36
|
+
} else {
|
|
37
|
+
knownDirectiveNames[directiveName] = node.name;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return false;
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ASTVisitor } from '../../language/visitor';
|
|
2
|
+
import type {
|
|
3
|
+
SDLValidationContext,
|
|
4
|
+
ValidationContext,
|
|
5
|
+
} from '../ValidationContext';
|
|
6
|
+
/**
|
|
7
|
+
* Unique directive names per location
|
|
8
|
+
*
|
|
9
|
+
* A GraphQL document is only valid if all non-repeatable directives at
|
|
10
|
+
* a given location are uniquely named.
|
|
11
|
+
*
|
|
12
|
+
* See https://spec.graphql.org/draft/#sec-Directives-Are-Unique-Per-Location
|
|
13
|
+
*/
|
|
14
|
+
export declare function UniqueDirectivesPerLocationRule(
|
|
15
|
+
context: ValidationContext | SDLValidationContext,
|
|
16
|
+
): ASTVisitor;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
exports.UniqueDirectivesPerLocationRule = UniqueDirectivesPerLocationRule;
|
|
7
|
+
|
|
8
|
+
var _GraphQLError = require('../../error/GraphQLError.js');
|
|
9
|
+
|
|
10
|
+
var _kinds = require('../../language/kinds.js');
|
|
11
|
+
|
|
12
|
+
var _predicates = require('../../language/predicates.js');
|
|
13
|
+
|
|
14
|
+
var _directives = require('../../type/directives.js');
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Unique directive names per location
|
|
18
|
+
*
|
|
19
|
+
* A GraphQL document is only valid if all non-repeatable directives at
|
|
20
|
+
* a given location are uniquely named.
|
|
21
|
+
*
|
|
22
|
+
* See https://spec.graphql.org/draft/#sec-Directives-Are-Unique-Per-Location
|
|
23
|
+
*/
|
|
24
|
+
function UniqueDirectivesPerLocationRule(context) {
|
|
25
|
+
const uniqueDirectiveMap = Object.create(null);
|
|
26
|
+
const schema = context.getSchema();
|
|
27
|
+
const definedDirectives = schema
|
|
28
|
+
? schema.getDirectives()
|
|
29
|
+
: _directives.specifiedDirectives;
|
|
30
|
+
|
|
31
|
+
for (const directive of definedDirectives) {
|
|
32
|
+
uniqueDirectiveMap[directive.name] = !directive.isRepeatable;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const astDefinitions = context.getDocument().definitions;
|
|
36
|
+
|
|
37
|
+
for (const def of astDefinitions) {
|
|
38
|
+
if (def.kind === _kinds.Kind.DIRECTIVE_DEFINITION) {
|
|
39
|
+
uniqueDirectiveMap[def.name.value] = !def.repeatable;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const schemaDirectives = Object.create(null);
|
|
44
|
+
const typeDirectivesMap = Object.create(null);
|
|
45
|
+
return {
|
|
46
|
+
// Many different AST nodes may contain directives. Rather than listing
|
|
47
|
+
// them all, just listen for entering any node, and check to see if it
|
|
48
|
+
// defines any directives.
|
|
49
|
+
enter(node) {
|
|
50
|
+
if (!('directives' in node) || !node.directives) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
let seenDirectives;
|
|
55
|
+
|
|
56
|
+
if (
|
|
57
|
+
node.kind === _kinds.Kind.SCHEMA_DEFINITION ||
|
|
58
|
+
node.kind === _kinds.Kind.SCHEMA_EXTENSION
|
|
59
|
+
) {
|
|
60
|
+
seenDirectives = schemaDirectives;
|
|
61
|
+
} else if (
|
|
62
|
+
(0, _predicates.isTypeDefinitionNode)(node) ||
|
|
63
|
+
(0, _predicates.isTypeExtensionNode)(node)
|
|
64
|
+
) {
|
|
65
|
+
const typeName = node.name.value;
|
|
66
|
+
seenDirectives = typeDirectivesMap[typeName];
|
|
67
|
+
|
|
68
|
+
if (seenDirectives === undefined) {
|
|
69
|
+
typeDirectivesMap[typeName] = seenDirectives = Object.create(null);
|
|
70
|
+
}
|
|
71
|
+
} else {
|
|
72
|
+
seenDirectives = Object.create(null);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
for (const directive of node.directives) {
|
|
76
|
+
const directiveName = directive.name.value;
|
|
77
|
+
|
|
78
|
+
if (uniqueDirectiveMap[directiveName]) {
|
|
79
|
+
if (seenDirectives[directiveName]) {
|
|
80
|
+
context.reportError(
|
|
81
|
+
new _GraphQLError.GraphQLError(
|
|
82
|
+
`The directive "@${directiveName}" can only be used once at this location.`,
|
|
83
|
+
[seenDirectives[directiveName], directive],
|
|
84
|
+
),
|
|
85
|
+
);
|
|
86
|
+
} else {
|
|
87
|
+
seenDirectives[directiveName] = directive;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
2
|
+
import { Kind } from '../../language/kinds.mjs';
|
|
3
|
+
import {
|
|
4
|
+
isTypeDefinitionNode,
|
|
5
|
+
isTypeExtensionNode,
|
|
6
|
+
} from '../../language/predicates.mjs';
|
|
7
|
+
import { specifiedDirectives } from '../../type/directives.mjs';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Unique directive names per location
|
|
11
|
+
*
|
|
12
|
+
* A GraphQL document is only valid if all non-repeatable directives at
|
|
13
|
+
* a given location are uniquely named.
|
|
14
|
+
*
|
|
15
|
+
* See https://spec.graphql.org/draft/#sec-Directives-Are-Unique-Per-Location
|
|
16
|
+
*/
|
|
17
|
+
export function UniqueDirectivesPerLocationRule(context) {
|
|
18
|
+
const uniqueDirectiveMap = Object.create(null);
|
|
19
|
+
const schema = context.getSchema();
|
|
20
|
+
const definedDirectives = schema
|
|
21
|
+
? schema.getDirectives()
|
|
22
|
+
: specifiedDirectives;
|
|
23
|
+
|
|
24
|
+
for (const directive of definedDirectives) {
|
|
25
|
+
uniqueDirectiveMap[directive.name] = !directive.isRepeatable;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const astDefinitions = context.getDocument().definitions;
|
|
29
|
+
|
|
30
|
+
for (const def of astDefinitions) {
|
|
31
|
+
if (def.kind === Kind.DIRECTIVE_DEFINITION) {
|
|
32
|
+
uniqueDirectiveMap[def.name.value] = !def.repeatable;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const schemaDirectives = Object.create(null);
|
|
37
|
+
const typeDirectivesMap = Object.create(null);
|
|
38
|
+
return {
|
|
39
|
+
// Many different AST nodes may contain directives. Rather than listing
|
|
40
|
+
// them all, just listen for entering any node, and check to see if it
|
|
41
|
+
// defines any directives.
|
|
42
|
+
enter(node) {
|
|
43
|
+
if (!('directives' in node) || !node.directives) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
let seenDirectives;
|
|
48
|
+
|
|
49
|
+
if (
|
|
50
|
+
node.kind === Kind.SCHEMA_DEFINITION ||
|
|
51
|
+
node.kind === Kind.SCHEMA_EXTENSION
|
|
52
|
+
) {
|
|
53
|
+
seenDirectives = schemaDirectives;
|
|
54
|
+
} else if (isTypeDefinitionNode(node) || isTypeExtensionNode(node)) {
|
|
55
|
+
const typeName = node.name.value;
|
|
56
|
+
seenDirectives = typeDirectivesMap[typeName];
|
|
57
|
+
|
|
58
|
+
if (seenDirectives === undefined) {
|
|
59
|
+
typeDirectivesMap[typeName] = seenDirectives = Object.create(null);
|
|
60
|
+
}
|
|
61
|
+
} else {
|
|
62
|
+
seenDirectives = Object.create(null);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
for (const directive of node.directives) {
|
|
66
|
+
const directiveName = directive.name.value;
|
|
67
|
+
|
|
68
|
+
if (uniqueDirectiveMap[directiveName]) {
|
|
69
|
+
if (seenDirectives[directiveName]) {
|
|
70
|
+
context.reportError(
|
|
71
|
+
new GraphQLError(
|
|
72
|
+
`The directive "@${directiveName}" can only be used once at this location.`,
|
|
73
|
+
[seenDirectives[directiveName], directive],
|
|
74
|
+
),
|
|
75
|
+
);
|
|
76
|
+
} else {
|
|
77
|
+
seenDirectives[directiveName] = directive;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ASTVisitor } from '../../language/visitor';
|
|
2
|
+
import type { SDLValidationContext } from '../ValidationContext';
|
|
3
|
+
/**
|
|
4
|
+
* Unique enum value names
|
|
5
|
+
*
|
|
6
|
+
* A GraphQL enum type is only valid if all its values are uniquely named.
|
|
7
|
+
*/
|
|
8
|
+
export declare function UniqueEnumValueNamesRule(
|
|
9
|
+
context: SDLValidationContext,
|
|
10
|
+
): ASTVisitor;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
exports.UniqueEnumValueNamesRule = UniqueEnumValueNamesRule;
|
|
7
|
+
|
|
8
|
+
var _GraphQLError = require('../../error/GraphQLError.js');
|
|
9
|
+
|
|
10
|
+
var _definition = require('../../type/definition.js');
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Unique enum value names
|
|
14
|
+
*
|
|
15
|
+
* A GraphQL enum type is only valid if all its values are uniquely named.
|
|
16
|
+
*/
|
|
17
|
+
function UniqueEnumValueNamesRule(context) {
|
|
18
|
+
const schema = context.getSchema();
|
|
19
|
+
const existingTypeMap = schema ? schema.getTypeMap() : Object.create(null);
|
|
20
|
+
const knownValueNames = Object.create(null);
|
|
21
|
+
return {
|
|
22
|
+
EnumTypeDefinition: checkValueUniqueness,
|
|
23
|
+
EnumTypeExtension: checkValueUniqueness,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
function checkValueUniqueness(node) {
|
|
27
|
+
var _node$values;
|
|
28
|
+
|
|
29
|
+
const typeName = node.name.value;
|
|
30
|
+
|
|
31
|
+
if (!knownValueNames[typeName]) {
|
|
32
|
+
knownValueNames[typeName] = Object.create(null);
|
|
33
|
+
} // FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
34
|
+
|
|
35
|
+
/* c8 ignore next */
|
|
36
|
+
|
|
37
|
+
const valueNodes =
|
|
38
|
+
(_node$values = node.values) !== null && _node$values !== void 0
|
|
39
|
+
? _node$values
|
|
40
|
+
: [];
|
|
41
|
+
const valueNames = knownValueNames[typeName];
|
|
42
|
+
|
|
43
|
+
for (const valueDef of valueNodes) {
|
|
44
|
+
const valueName = valueDef.name.value;
|
|
45
|
+
const existingType = existingTypeMap[typeName];
|
|
46
|
+
|
|
47
|
+
if (
|
|
48
|
+
(0, _definition.isEnumType)(existingType) &&
|
|
49
|
+
existingType.getValue(valueName)
|
|
50
|
+
) {
|
|
51
|
+
context.reportError(
|
|
52
|
+
new _GraphQLError.GraphQLError(
|
|
53
|
+
`Enum value "${typeName}.${valueName}" already exists in the schema. It cannot also be defined in this type extension.`,
|
|
54
|
+
valueDef.name,
|
|
55
|
+
),
|
|
56
|
+
);
|
|
57
|
+
} else if (valueNames[valueName]) {
|
|
58
|
+
context.reportError(
|
|
59
|
+
new _GraphQLError.GraphQLError(
|
|
60
|
+
`Enum value "${typeName}.${valueName}" can only be defined once.`,
|
|
61
|
+
[valueNames[valueName], valueDef.name],
|
|
62
|
+
),
|
|
63
|
+
);
|
|
64
|
+
} else {
|
|
65
|
+
valueNames[valueName] = valueDef.name;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
2
|
+
import { isEnumType } from '../../type/definition.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Unique enum value names
|
|
6
|
+
*
|
|
7
|
+
* A GraphQL enum type is only valid if all its values are uniquely named.
|
|
8
|
+
*/
|
|
9
|
+
export function UniqueEnumValueNamesRule(context) {
|
|
10
|
+
const schema = context.getSchema();
|
|
11
|
+
const existingTypeMap = schema ? schema.getTypeMap() : Object.create(null);
|
|
12
|
+
const knownValueNames = Object.create(null);
|
|
13
|
+
return {
|
|
14
|
+
EnumTypeDefinition: checkValueUniqueness,
|
|
15
|
+
EnumTypeExtension: checkValueUniqueness,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
function checkValueUniqueness(node) {
|
|
19
|
+
var _node$values;
|
|
20
|
+
|
|
21
|
+
const typeName = node.name.value;
|
|
22
|
+
|
|
23
|
+
if (!knownValueNames[typeName]) {
|
|
24
|
+
knownValueNames[typeName] = Object.create(null);
|
|
25
|
+
} // FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
26
|
+
|
|
27
|
+
/* c8 ignore next */
|
|
28
|
+
|
|
29
|
+
const valueNodes =
|
|
30
|
+
(_node$values = node.values) !== null && _node$values !== void 0
|
|
31
|
+
? _node$values
|
|
32
|
+
: [];
|
|
33
|
+
const valueNames = knownValueNames[typeName];
|
|
34
|
+
|
|
35
|
+
for (const valueDef of valueNodes) {
|
|
36
|
+
const valueName = valueDef.name.value;
|
|
37
|
+
const existingType = existingTypeMap[typeName];
|
|
38
|
+
|
|
39
|
+
if (isEnumType(existingType) && existingType.getValue(valueName)) {
|
|
40
|
+
context.reportError(
|
|
41
|
+
new GraphQLError(
|
|
42
|
+
`Enum value "${typeName}.${valueName}" already exists in the schema. It cannot also be defined in this type extension.`,
|
|
43
|
+
valueDef.name,
|
|
44
|
+
),
|
|
45
|
+
);
|
|
46
|
+
} else if (valueNames[valueName]) {
|
|
47
|
+
context.reportError(
|
|
48
|
+
new GraphQLError(
|
|
49
|
+
`Enum value "${typeName}.${valueName}" can only be defined once.`,
|
|
50
|
+
[valueNames[valueName], valueDef.name],
|
|
51
|
+
),
|
|
52
|
+
);
|
|
53
|
+
} else {
|
|
54
|
+
valueNames[valueName] = valueDef.name;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ASTVisitor } from '../../language/visitor';
|
|
2
|
+
import type { SDLValidationContext } from '../ValidationContext';
|
|
3
|
+
/**
|
|
4
|
+
* Unique field definition names
|
|
5
|
+
*
|
|
6
|
+
* A GraphQL complex type is only valid if all its fields are uniquely named.
|
|
7
|
+
*/
|
|
8
|
+
export declare function UniqueFieldDefinitionNamesRule(
|
|
9
|
+
context: SDLValidationContext,
|
|
10
|
+
): ASTVisitor;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
exports.UniqueFieldDefinitionNamesRule = UniqueFieldDefinitionNamesRule;
|
|
7
|
+
|
|
8
|
+
var _GraphQLError = require('../../error/GraphQLError.js');
|
|
9
|
+
|
|
10
|
+
var _definition = require('../../type/definition.js');
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Unique field definition names
|
|
14
|
+
*
|
|
15
|
+
* A GraphQL complex type is only valid if all its fields are uniquely named.
|
|
16
|
+
*/
|
|
17
|
+
function UniqueFieldDefinitionNamesRule(context) {
|
|
18
|
+
const schema = context.getSchema();
|
|
19
|
+
const existingTypeMap = schema ? schema.getTypeMap() : Object.create(null);
|
|
20
|
+
const knownFieldNames = Object.create(null);
|
|
21
|
+
return {
|
|
22
|
+
InputObjectTypeDefinition: checkFieldUniqueness,
|
|
23
|
+
InputObjectTypeExtension: checkFieldUniqueness,
|
|
24
|
+
InterfaceTypeDefinition: checkFieldUniqueness,
|
|
25
|
+
InterfaceTypeExtension: checkFieldUniqueness,
|
|
26
|
+
ObjectTypeDefinition: checkFieldUniqueness,
|
|
27
|
+
ObjectTypeExtension: checkFieldUniqueness,
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
function checkFieldUniqueness(node) {
|
|
31
|
+
var _node$fields;
|
|
32
|
+
|
|
33
|
+
const typeName = node.name.value;
|
|
34
|
+
|
|
35
|
+
if (!knownFieldNames[typeName]) {
|
|
36
|
+
knownFieldNames[typeName] = Object.create(null);
|
|
37
|
+
} // FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
38
|
+
|
|
39
|
+
/* c8 ignore next */
|
|
40
|
+
|
|
41
|
+
const fieldNodes =
|
|
42
|
+
(_node$fields = node.fields) !== null && _node$fields !== void 0
|
|
43
|
+
? _node$fields
|
|
44
|
+
: [];
|
|
45
|
+
const fieldNames = knownFieldNames[typeName];
|
|
46
|
+
|
|
47
|
+
for (const fieldDef of fieldNodes) {
|
|
48
|
+
const fieldName = fieldDef.name.value;
|
|
49
|
+
|
|
50
|
+
if (hasField(existingTypeMap[typeName], fieldName)) {
|
|
51
|
+
context.reportError(
|
|
52
|
+
new _GraphQLError.GraphQLError(
|
|
53
|
+
`Field "${typeName}.${fieldName}" already exists in the schema. It cannot also be defined in this type extension.`,
|
|
54
|
+
fieldDef.name,
|
|
55
|
+
),
|
|
56
|
+
);
|
|
57
|
+
} else if (fieldNames[fieldName]) {
|
|
58
|
+
context.reportError(
|
|
59
|
+
new _GraphQLError.GraphQLError(
|
|
60
|
+
`Field "${typeName}.${fieldName}" can only be defined once.`,
|
|
61
|
+
[fieldNames[fieldName], fieldDef.name],
|
|
62
|
+
),
|
|
63
|
+
);
|
|
64
|
+
} else {
|
|
65
|
+
fieldNames[fieldName] = fieldDef.name;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function hasField(type, fieldName) {
|
|
74
|
+
if (
|
|
75
|
+
(0, _definition.isObjectType)(type) ||
|
|
76
|
+
(0, _definition.isInterfaceType)(type) ||
|
|
77
|
+
(0, _definition.isInputObjectType)(type)
|
|
78
|
+
) {
|
|
79
|
+
return type.getFields()[fieldName] != null;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
2
|
+
import {
|
|
3
|
+
isInputObjectType,
|
|
4
|
+
isInterfaceType,
|
|
5
|
+
isObjectType,
|
|
6
|
+
} from '../../type/definition.mjs';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Unique field definition names
|
|
10
|
+
*
|
|
11
|
+
* A GraphQL complex type is only valid if all its fields are uniquely named.
|
|
12
|
+
*/
|
|
13
|
+
export function UniqueFieldDefinitionNamesRule(context) {
|
|
14
|
+
const schema = context.getSchema();
|
|
15
|
+
const existingTypeMap = schema ? schema.getTypeMap() : Object.create(null);
|
|
16
|
+
const knownFieldNames = Object.create(null);
|
|
17
|
+
return {
|
|
18
|
+
InputObjectTypeDefinition: checkFieldUniqueness,
|
|
19
|
+
InputObjectTypeExtension: checkFieldUniqueness,
|
|
20
|
+
InterfaceTypeDefinition: checkFieldUniqueness,
|
|
21
|
+
InterfaceTypeExtension: checkFieldUniqueness,
|
|
22
|
+
ObjectTypeDefinition: checkFieldUniqueness,
|
|
23
|
+
ObjectTypeExtension: checkFieldUniqueness,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
function checkFieldUniqueness(node) {
|
|
27
|
+
var _node$fields;
|
|
28
|
+
|
|
29
|
+
const typeName = node.name.value;
|
|
30
|
+
|
|
31
|
+
if (!knownFieldNames[typeName]) {
|
|
32
|
+
knownFieldNames[typeName] = Object.create(null);
|
|
33
|
+
} // FIXME: https://github.com/graphql/graphql-js/issues/2203
|
|
34
|
+
|
|
35
|
+
/* c8 ignore next */
|
|
36
|
+
|
|
37
|
+
const fieldNodes =
|
|
38
|
+
(_node$fields = node.fields) !== null && _node$fields !== void 0
|
|
39
|
+
? _node$fields
|
|
40
|
+
: [];
|
|
41
|
+
const fieldNames = knownFieldNames[typeName];
|
|
42
|
+
|
|
43
|
+
for (const fieldDef of fieldNodes) {
|
|
44
|
+
const fieldName = fieldDef.name.value;
|
|
45
|
+
|
|
46
|
+
if (hasField(existingTypeMap[typeName], fieldName)) {
|
|
47
|
+
context.reportError(
|
|
48
|
+
new GraphQLError(
|
|
49
|
+
`Field "${typeName}.${fieldName}" already exists in the schema. It cannot also be defined in this type extension.`,
|
|
50
|
+
fieldDef.name,
|
|
51
|
+
),
|
|
52
|
+
);
|
|
53
|
+
} else if (fieldNames[fieldName]) {
|
|
54
|
+
context.reportError(
|
|
55
|
+
new GraphQLError(
|
|
56
|
+
`Field "${typeName}.${fieldName}" can only be defined once.`,
|
|
57
|
+
[fieldNames[fieldName], fieldDef.name],
|
|
58
|
+
),
|
|
59
|
+
);
|
|
60
|
+
} else {
|
|
61
|
+
fieldNames[fieldName] = fieldDef.name;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function hasField(type, fieldName) {
|
|
70
|
+
if (isObjectType(type) || isInterfaceType(type) || isInputObjectType(type)) {
|
|
71
|
+
return type.getFields()[fieldName] != null;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ASTVisitor } from '../../language/visitor';
|
|
2
|
+
import type { ASTValidationContext } from '../ValidationContext';
|
|
3
|
+
/**
|
|
4
|
+
* Unique fragment names
|
|
5
|
+
*
|
|
6
|
+
* A GraphQL document is only valid if all defined fragments have unique names.
|
|
7
|
+
*
|
|
8
|
+
* See https://spec.graphql.org/draft/#sec-Fragment-Name-Uniqueness
|
|
9
|
+
*/
|
|
10
|
+
export declare function UniqueFragmentNamesRule(
|
|
11
|
+
context: ASTValidationContext,
|
|
12
|
+
): ASTVisitor;
|