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,1167 @@
|
|
|
1
|
+
import { devAssert } from '../jsutils/devAssert.mjs';
|
|
2
|
+
import { didYouMean } from '../jsutils/didYouMean.mjs';
|
|
3
|
+
import { identityFunc } from '../jsutils/identityFunc.mjs';
|
|
4
|
+
import { inspect } from '../jsutils/inspect.mjs';
|
|
5
|
+
import { instanceOf } from '../jsutils/instanceOf.mjs';
|
|
6
|
+
import { isObjectLike } from '../jsutils/isObjectLike.mjs';
|
|
7
|
+
import { keyMap } from '../jsutils/keyMap.mjs';
|
|
8
|
+
import { keyValMap } from '../jsutils/keyValMap.mjs';
|
|
9
|
+
import { mapValue } from '../jsutils/mapValue.mjs';
|
|
10
|
+
import { suggestionList } from '../jsutils/suggestionList.mjs';
|
|
11
|
+
import { toObjMap } from '../jsutils/toObjMap.mjs';
|
|
12
|
+
import { GraphQLError } from '../error/GraphQLError.mjs';
|
|
13
|
+
import { Kind } from '../language/kinds.mjs';
|
|
14
|
+
import { print } from '../language/printer.mjs';
|
|
15
|
+
import { valueFromASTUntyped } from '../utilities/valueFromASTUntyped.mjs';
|
|
16
|
+
import { assertEnumValueName, assertName } from './assertName.mjs';
|
|
17
|
+
export function isType(type) {
|
|
18
|
+
return (
|
|
19
|
+
isScalarType(type) ||
|
|
20
|
+
isObjectType(type) ||
|
|
21
|
+
isInterfaceType(type) ||
|
|
22
|
+
isUnionType(type) ||
|
|
23
|
+
isEnumType(type) ||
|
|
24
|
+
isInputObjectType(type) ||
|
|
25
|
+
isListType(type) ||
|
|
26
|
+
isNonNullType(type)
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
export function assertType(type) {
|
|
30
|
+
if (!isType(type)) {
|
|
31
|
+
throw new Error(`Expected ${inspect(type)} to be a GraphQL type.`);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return type;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* There are predicates for each kind of GraphQL type.
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
export function isScalarType(type) {
|
|
41
|
+
return instanceOf(type, GraphQLScalarType);
|
|
42
|
+
}
|
|
43
|
+
export function assertScalarType(type) {
|
|
44
|
+
if (!isScalarType(type)) {
|
|
45
|
+
throw new Error(`Expected ${inspect(type)} to be a GraphQL Scalar type.`);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return type;
|
|
49
|
+
}
|
|
50
|
+
export function isObjectType(type) {
|
|
51
|
+
return instanceOf(type, GraphQLObjectType);
|
|
52
|
+
}
|
|
53
|
+
export function assertObjectType(type) {
|
|
54
|
+
if (!isObjectType(type)) {
|
|
55
|
+
throw new Error(`Expected ${inspect(type)} to be a GraphQL Object type.`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return type;
|
|
59
|
+
}
|
|
60
|
+
export function isInterfaceType(type) {
|
|
61
|
+
return instanceOf(type, GraphQLInterfaceType);
|
|
62
|
+
}
|
|
63
|
+
export function assertInterfaceType(type) {
|
|
64
|
+
if (!isInterfaceType(type)) {
|
|
65
|
+
throw new Error(
|
|
66
|
+
`Expected ${inspect(type)} to be a GraphQL Interface type.`,
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return type;
|
|
71
|
+
}
|
|
72
|
+
export function isUnionType(type) {
|
|
73
|
+
return instanceOf(type, GraphQLUnionType);
|
|
74
|
+
}
|
|
75
|
+
export function assertUnionType(type) {
|
|
76
|
+
if (!isUnionType(type)) {
|
|
77
|
+
throw new Error(`Expected ${inspect(type)} to be a GraphQL Union type.`);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return type;
|
|
81
|
+
}
|
|
82
|
+
export function isEnumType(type) {
|
|
83
|
+
return instanceOf(type, GraphQLEnumType);
|
|
84
|
+
}
|
|
85
|
+
export function assertEnumType(type) {
|
|
86
|
+
if (!isEnumType(type)) {
|
|
87
|
+
throw new Error(`Expected ${inspect(type)} to be a GraphQL Enum type.`);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return type;
|
|
91
|
+
}
|
|
92
|
+
export function isInputObjectType(type) {
|
|
93
|
+
return instanceOf(type, GraphQLInputObjectType);
|
|
94
|
+
}
|
|
95
|
+
export function assertInputObjectType(type) {
|
|
96
|
+
if (!isInputObjectType(type)) {
|
|
97
|
+
throw new Error(
|
|
98
|
+
`Expected ${inspect(type)} to be a GraphQL Input Object type.`,
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return type;
|
|
103
|
+
}
|
|
104
|
+
export function isListType(type) {
|
|
105
|
+
return instanceOf(type, GraphQLList);
|
|
106
|
+
}
|
|
107
|
+
export function assertListType(type) {
|
|
108
|
+
if (!isListType(type)) {
|
|
109
|
+
throw new Error(`Expected ${inspect(type)} to be a GraphQL List type.`);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return type;
|
|
113
|
+
}
|
|
114
|
+
export function isNonNullType(type) {
|
|
115
|
+
return instanceOf(type, GraphQLNonNull);
|
|
116
|
+
}
|
|
117
|
+
export function assertNonNullType(type) {
|
|
118
|
+
if (!isNonNullType(type)) {
|
|
119
|
+
throw new Error(`Expected ${inspect(type)} to be a GraphQL Non-Null type.`);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return type;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* These types may be used as input types for arguments and directives.
|
|
126
|
+
*/
|
|
127
|
+
|
|
128
|
+
export function isInputType(type) {
|
|
129
|
+
return (
|
|
130
|
+
isScalarType(type) ||
|
|
131
|
+
isEnumType(type) ||
|
|
132
|
+
isInputObjectType(type) ||
|
|
133
|
+
(isWrappingType(type) && isInputType(type.ofType))
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
export function assertInputType(type) {
|
|
137
|
+
if (!isInputType(type)) {
|
|
138
|
+
throw new Error(`Expected ${inspect(type)} to be a GraphQL input type.`);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return type;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* These types may be used as output types as the result of fields.
|
|
145
|
+
*/
|
|
146
|
+
|
|
147
|
+
export function isOutputType(type) {
|
|
148
|
+
return (
|
|
149
|
+
isScalarType(type) ||
|
|
150
|
+
isObjectType(type) ||
|
|
151
|
+
isInterfaceType(type) ||
|
|
152
|
+
isUnionType(type) ||
|
|
153
|
+
isEnumType(type) ||
|
|
154
|
+
(isWrappingType(type) && isOutputType(type.ofType))
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
export function assertOutputType(type) {
|
|
158
|
+
if (!isOutputType(type)) {
|
|
159
|
+
throw new Error(`Expected ${inspect(type)} to be a GraphQL output type.`);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return type;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* These types may describe types which may be leaf values.
|
|
166
|
+
*/
|
|
167
|
+
|
|
168
|
+
export function isLeafType(type) {
|
|
169
|
+
return isScalarType(type) || isEnumType(type);
|
|
170
|
+
}
|
|
171
|
+
export function assertLeafType(type) {
|
|
172
|
+
if (!isLeafType(type)) {
|
|
173
|
+
throw new Error(`Expected ${inspect(type)} to be a GraphQL leaf type.`);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return type;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* These types may describe the parent context of a selection set.
|
|
180
|
+
*/
|
|
181
|
+
|
|
182
|
+
export function isCompositeType(type) {
|
|
183
|
+
return isObjectType(type) || isInterfaceType(type) || isUnionType(type);
|
|
184
|
+
}
|
|
185
|
+
export function assertCompositeType(type) {
|
|
186
|
+
if (!isCompositeType(type)) {
|
|
187
|
+
throw new Error(
|
|
188
|
+
`Expected ${inspect(type)} to be a GraphQL composite type.`,
|
|
189
|
+
);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return type;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* These types may describe the parent context of a selection set.
|
|
196
|
+
*/
|
|
197
|
+
|
|
198
|
+
export function isAbstractType(type) {
|
|
199
|
+
return isInterfaceType(type) || isUnionType(type);
|
|
200
|
+
}
|
|
201
|
+
export function assertAbstractType(type) {
|
|
202
|
+
if (!isAbstractType(type)) {
|
|
203
|
+
throw new Error(`Expected ${inspect(type)} to be a GraphQL abstract type.`);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return type;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* List Type Wrapper
|
|
210
|
+
*
|
|
211
|
+
* A list is a wrapping type which points to another type.
|
|
212
|
+
* Lists are often created within the context of defining the fields of
|
|
213
|
+
* an object type.
|
|
214
|
+
*
|
|
215
|
+
* Example:
|
|
216
|
+
*
|
|
217
|
+
* ```ts
|
|
218
|
+
* const PersonType = new GraphQLObjectType({
|
|
219
|
+
* name: 'Person',
|
|
220
|
+
* fields: () => ({
|
|
221
|
+
* parents: { type: new GraphQLList(PersonType) },
|
|
222
|
+
* children: { type: new GraphQLList(PersonType) },
|
|
223
|
+
* })
|
|
224
|
+
* })
|
|
225
|
+
* ```
|
|
226
|
+
*/
|
|
227
|
+
|
|
228
|
+
export class GraphQLList {
|
|
229
|
+
constructor(ofType) {
|
|
230
|
+
isType(ofType) ||
|
|
231
|
+
devAssert(false, `Expected ${inspect(ofType)} to be a GraphQL type.`);
|
|
232
|
+
this.ofType = ofType;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
get [Symbol.toStringTag]() {
|
|
236
|
+
return 'GraphQLList';
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
toString() {
|
|
240
|
+
return '[' + String(this.ofType) + ']';
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
toJSON() {
|
|
244
|
+
return this.toString();
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Non-Null Type Wrapper
|
|
249
|
+
*
|
|
250
|
+
* A non-null is a wrapping type which points to another type.
|
|
251
|
+
* Non-null types enforce that their values are never null and can ensure
|
|
252
|
+
* an error is raised if this ever occurs during a request. It is useful for
|
|
253
|
+
* fields which you can make a strong guarantee on non-nullability, for example
|
|
254
|
+
* usually the id field of a database row will never be null.
|
|
255
|
+
*
|
|
256
|
+
* Example:
|
|
257
|
+
*
|
|
258
|
+
* ```ts
|
|
259
|
+
* const RowType = new GraphQLObjectType({
|
|
260
|
+
* name: 'Row',
|
|
261
|
+
* fields: () => ({
|
|
262
|
+
* id: { type: new GraphQLNonNull(GraphQLString) },
|
|
263
|
+
* })
|
|
264
|
+
* })
|
|
265
|
+
* ```
|
|
266
|
+
* Note: the enforcement of non-nullability occurs within the executor.
|
|
267
|
+
*/
|
|
268
|
+
|
|
269
|
+
export class GraphQLNonNull {
|
|
270
|
+
constructor(ofType) {
|
|
271
|
+
isNullableType(ofType) ||
|
|
272
|
+
devAssert(
|
|
273
|
+
false,
|
|
274
|
+
`Expected ${inspect(ofType)} to be a GraphQL nullable type.`,
|
|
275
|
+
);
|
|
276
|
+
this.ofType = ofType;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
get [Symbol.toStringTag]() {
|
|
280
|
+
return 'GraphQLNonNull';
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
toString() {
|
|
284
|
+
return String(this.ofType) + '!';
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
toJSON() {
|
|
288
|
+
return this.toString();
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* These types wrap and modify other types
|
|
293
|
+
*/
|
|
294
|
+
|
|
295
|
+
export function isWrappingType(type) {
|
|
296
|
+
return isListType(type) || isNonNullType(type);
|
|
297
|
+
}
|
|
298
|
+
export function assertWrappingType(type) {
|
|
299
|
+
if (!isWrappingType(type)) {
|
|
300
|
+
throw new Error(`Expected ${inspect(type)} to be a GraphQL wrapping type.`);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
return type;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* These types can all accept null as a value.
|
|
307
|
+
*/
|
|
308
|
+
|
|
309
|
+
export function isNullableType(type) {
|
|
310
|
+
return isType(type) && !isNonNullType(type);
|
|
311
|
+
}
|
|
312
|
+
export function assertNullableType(type) {
|
|
313
|
+
if (!isNullableType(type)) {
|
|
314
|
+
throw new Error(`Expected ${inspect(type)} to be a GraphQL nullable type.`);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
return type;
|
|
318
|
+
}
|
|
319
|
+
export function getNullableType(type) {
|
|
320
|
+
if (type) {
|
|
321
|
+
return isNonNullType(type) ? type.ofType : type;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* These named types do not include modifiers like List or NonNull.
|
|
326
|
+
*/
|
|
327
|
+
|
|
328
|
+
export function isNamedType(type) {
|
|
329
|
+
return (
|
|
330
|
+
isScalarType(type) ||
|
|
331
|
+
isObjectType(type) ||
|
|
332
|
+
isInterfaceType(type) ||
|
|
333
|
+
isUnionType(type) ||
|
|
334
|
+
isEnumType(type) ||
|
|
335
|
+
isInputObjectType(type)
|
|
336
|
+
);
|
|
337
|
+
}
|
|
338
|
+
export function assertNamedType(type) {
|
|
339
|
+
if (!isNamedType(type)) {
|
|
340
|
+
throw new Error(`Expected ${inspect(type)} to be a GraphQL named type.`);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
return type;
|
|
344
|
+
}
|
|
345
|
+
export function getNamedType(type) {
|
|
346
|
+
if (type) {
|
|
347
|
+
let unwrappedType = type;
|
|
348
|
+
|
|
349
|
+
while (isWrappingType(unwrappedType)) {
|
|
350
|
+
unwrappedType = unwrappedType.ofType;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
return unwrappedType;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Used while defining GraphQL types to allow for circular references in
|
|
358
|
+
* otherwise immutable type definitions.
|
|
359
|
+
*/
|
|
360
|
+
|
|
361
|
+
export function resolveReadonlyArrayThunk(thunk) {
|
|
362
|
+
return typeof thunk === 'function' ? thunk() : thunk;
|
|
363
|
+
}
|
|
364
|
+
export function resolveObjMapThunk(thunk) {
|
|
365
|
+
return typeof thunk === 'function' ? thunk() : thunk;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Custom extensions
|
|
369
|
+
*
|
|
370
|
+
* @remarks
|
|
371
|
+
* Use a unique identifier name for your extension, for example the name of
|
|
372
|
+
* your library or project. Do not use a shortened identifier as this increases
|
|
373
|
+
* the risk of conflicts. We recommend you add at most one extension field,
|
|
374
|
+
* an object which can contain all the values you need.
|
|
375
|
+
*/
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* Scalar Type Definition
|
|
379
|
+
*
|
|
380
|
+
* The leaf values of any request and input values to arguments are
|
|
381
|
+
* Scalars (or Enums) and are defined with a name and a series of functions
|
|
382
|
+
* used to parse input from ast or variables and to ensure validity.
|
|
383
|
+
*
|
|
384
|
+
* If a type's serialize function does not return a value (i.e. it returns
|
|
385
|
+
* `undefined`) then an error will be raised and a `null` value will be returned
|
|
386
|
+
* in the response. If the serialize function returns `null`, then no error will
|
|
387
|
+
* be included in the response.
|
|
388
|
+
*
|
|
389
|
+
* Example:
|
|
390
|
+
*
|
|
391
|
+
* ```ts
|
|
392
|
+
* const OddType = new GraphQLScalarType({
|
|
393
|
+
* name: 'Odd',
|
|
394
|
+
* serialize(value) {
|
|
395
|
+
* if (value % 2 === 1) {
|
|
396
|
+
* return value;
|
|
397
|
+
* }
|
|
398
|
+
* }
|
|
399
|
+
* });
|
|
400
|
+
* ```
|
|
401
|
+
*/
|
|
402
|
+
export class GraphQLScalarType {
|
|
403
|
+
constructor(config) {
|
|
404
|
+
var _config$parseValue,
|
|
405
|
+
_config$serialize,
|
|
406
|
+
_config$parseLiteral,
|
|
407
|
+
_config$extensionASTN;
|
|
408
|
+
|
|
409
|
+
const parseValue =
|
|
410
|
+
(_config$parseValue = config.parseValue) !== null &&
|
|
411
|
+
_config$parseValue !== void 0
|
|
412
|
+
? _config$parseValue
|
|
413
|
+
: identityFunc;
|
|
414
|
+
this.name = assertName(config.name);
|
|
415
|
+
this.description = config.description;
|
|
416
|
+
this.specifiedByURL = config.specifiedByURL;
|
|
417
|
+
this.serialize =
|
|
418
|
+
(_config$serialize = config.serialize) !== null &&
|
|
419
|
+
_config$serialize !== void 0
|
|
420
|
+
? _config$serialize
|
|
421
|
+
: identityFunc;
|
|
422
|
+
this.parseValue = parseValue;
|
|
423
|
+
this.parseLiteral =
|
|
424
|
+
(_config$parseLiteral = config.parseLiteral) !== null &&
|
|
425
|
+
_config$parseLiteral !== void 0
|
|
426
|
+
? _config$parseLiteral
|
|
427
|
+
: (node, variables) => parseValue(valueFromASTUntyped(node, variables));
|
|
428
|
+
this.extensions = toObjMap(config.extensions);
|
|
429
|
+
this.astNode = config.astNode;
|
|
430
|
+
this.extensionASTNodes =
|
|
431
|
+
(_config$extensionASTN = config.extensionASTNodes) !== null &&
|
|
432
|
+
_config$extensionASTN !== void 0
|
|
433
|
+
? _config$extensionASTN
|
|
434
|
+
: [];
|
|
435
|
+
config.specifiedByURL == null ||
|
|
436
|
+
typeof config.specifiedByURL === 'string' ||
|
|
437
|
+
devAssert(
|
|
438
|
+
false,
|
|
439
|
+
`${this.name} must provide "specifiedByURL" as a string, ` +
|
|
440
|
+
`but got: ${inspect(config.specifiedByURL)}.`,
|
|
441
|
+
);
|
|
442
|
+
config.serialize == null ||
|
|
443
|
+
typeof config.serialize === 'function' ||
|
|
444
|
+
devAssert(
|
|
445
|
+
false,
|
|
446
|
+
`${this.name} must provide "serialize" function. If this custom Scalar is also used as an input type, ensure "parseValue" and "parseLiteral" functions are also provided.`,
|
|
447
|
+
);
|
|
448
|
+
|
|
449
|
+
if (config.parseLiteral) {
|
|
450
|
+
(typeof config.parseValue === 'function' &&
|
|
451
|
+
typeof config.parseLiteral === 'function') ||
|
|
452
|
+
devAssert(
|
|
453
|
+
false,
|
|
454
|
+
`${this.name} must provide both "parseValue" and "parseLiteral" functions.`,
|
|
455
|
+
);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
get [Symbol.toStringTag]() {
|
|
460
|
+
return 'GraphQLScalarType';
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
toConfig() {
|
|
464
|
+
return {
|
|
465
|
+
name: this.name,
|
|
466
|
+
description: this.description,
|
|
467
|
+
specifiedByURL: this.specifiedByURL,
|
|
468
|
+
serialize: this.serialize,
|
|
469
|
+
parseValue: this.parseValue,
|
|
470
|
+
parseLiteral: this.parseLiteral,
|
|
471
|
+
extensions: this.extensions,
|
|
472
|
+
astNode: this.astNode,
|
|
473
|
+
extensionASTNodes: this.extensionASTNodes,
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
toString() {
|
|
478
|
+
return this.name;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
toJSON() {
|
|
482
|
+
return this.toString();
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* Object Type Definition
|
|
488
|
+
*
|
|
489
|
+
* Almost all of the GraphQL types you define will be object types. Object types
|
|
490
|
+
* have a name, but most importantly describe their fields.
|
|
491
|
+
*
|
|
492
|
+
* Example:
|
|
493
|
+
*
|
|
494
|
+
* ```ts
|
|
495
|
+
* const AddressType = new GraphQLObjectType({
|
|
496
|
+
* name: 'Address',
|
|
497
|
+
* fields: {
|
|
498
|
+
* street: { type: GraphQLString },
|
|
499
|
+
* number: { type: GraphQLInt },
|
|
500
|
+
* formatted: {
|
|
501
|
+
* type: GraphQLString,
|
|
502
|
+
* resolve(obj) {
|
|
503
|
+
* return obj.number + ' ' + obj.street
|
|
504
|
+
* }
|
|
505
|
+
* }
|
|
506
|
+
* }
|
|
507
|
+
* });
|
|
508
|
+
* ```
|
|
509
|
+
*
|
|
510
|
+
* When two types need to refer to each other, or a type needs to refer to
|
|
511
|
+
* itself in a field, you can use a function expression (aka a closure or a
|
|
512
|
+
* thunk) to supply the fields lazily.
|
|
513
|
+
*
|
|
514
|
+
* Example:
|
|
515
|
+
*
|
|
516
|
+
* ```ts
|
|
517
|
+
* const PersonType = new GraphQLObjectType({
|
|
518
|
+
* name: 'Person',
|
|
519
|
+
* fields: () => ({
|
|
520
|
+
* name: { type: GraphQLString },
|
|
521
|
+
* bestFriend: { type: PersonType },
|
|
522
|
+
* })
|
|
523
|
+
* });
|
|
524
|
+
* ```
|
|
525
|
+
*/
|
|
526
|
+
export class GraphQLObjectType {
|
|
527
|
+
constructor(config) {
|
|
528
|
+
var _config$extensionASTN2;
|
|
529
|
+
|
|
530
|
+
this.name = assertName(config.name);
|
|
531
|
+
this.description = config.description;
|
|
532
|
+
this.isTypeOf = config.isTypeOf;
|
|
533
|
+
this.extensions = toObjMap(config.extensions);
|
|
534
|
+
this.astNode = config.astNode;
|
|
535
|
+
this.extensionASTNodes =
|
|
536
|
+
(_config$extensionASTN2 = config.extensionASTNodes) !== null &&
|
|
537
|
+
_config$extensionASTN2 !== void 0
|
|
538
|
+
? _config$extensionASTN2
|
|
539
|
+
: [];
|
|
540
|
+
|
|
541
|
+
this._fields = () => defineFieldMap(config);
|
|
542
|
+
|
|
543
|
+
this._interfaces = () => defineInterfaces(config);
|
|
544
|
+
|
|
545
|
+
config.isTypeOf == null ||
|
|
546
|
+
typeof config.isTypeOf === 'function' ||
|
|
547
|
+
devAssert(
|
|
548
|
+
false,
|
|
549
|
+
`${this.name} must provide "isTypeOf" as a function, ` +
|
|
550
|
+
`but got: ${inspect(config.isTypeOf)}.`,
|
|
551
|
+
);
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
get [Symbol.toStringTag]() {
|
|
555
|
+
return 'GraphQLObjectType';
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
getFields() {
|
|
559
|
+
if (typeof this._fields === 'function') {
|
|
560
|
+
this._fields = this._fields();
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
return this._fields;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
getInterfaces() {
|
|
567
|
+
if (typeof this._interfaces === 'function') {
|
|
568
|
+
this._interfaces = this._interfaces();
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
return this._interfaces;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
toConfig() {
|
|
575
|
+
return {
|
|
576
|
+
name: this.name,
|
|
577
|
+
description: this.description,
|
|
578
|
+
interfaces: this.getInterfaces(),
|
|
579
|
+
fields: fieldsToFieldsConfig(this.getFields()),
|
|
580
|
+
isTypeOf: this.isTypeOf,
|
|
581
|
+
extensions: this.extensions,
|
|
582
|
+
astNode: this.astNode,
|
|
583
|
+
extensionASTNodes: this.extensionASTNodes,
|
|
584
|
+
};
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
toString() {
|
|
588
|
+
return this.name;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
toJSON() {
|
|
592
|
+
return this.toString();
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
function defineInterfaces(config) {
|
|
597
|
+
var _config$interfaces;
|
|
598
|
+
|
|
599
|
+
const interfaces = resolveReadonlyArrayThunk(
|
|
600
|
+
(_config$interfaces = config.interfaces) !== null &&
|
|
601
|
+
_config$interfaces !== void 0
|
|
602
|
+
? _config$interfaces
|
|
603
|
+
: [],
|
|
604
|
+
);
|
|
605
|
+
Array.isArray(interfaces) ||
|
|
606
|
+
devAssert(
|
|
607
|
+
false,
|
|
608
|
+
`${config.name} interfaces must be an Array or a function which returns an Array.`,
|
|
609
|
+
);
|
|
610
|
+
return interfaces;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
function defineFieldMap(config) {
|
|
614
|
+
const fieldMap = resolveObjMapThunk(config.fields);
|
|
615
|
+
isPlainObj(fieldMap) ||
|
|
616
|
+
devAssert(
|
|
617
|
+
false,
|
|
618
|
+
`${config.name} fields must be an object with field names as keys or a function which returns such an object.`,
|
|
619
|
+
);
|
|
620
|
+
return mapValue(fieldMap, (fieldConfig, fieldName) => {
|
|
621
|
+
var _fieldConfig$args;
|
|
622
|
+
|
|
623
|
+
isPlainObj(fieldConfig) ||
|
|
624
|
+
devAssert(
|
|
625
|
+
false,
|
|
626
|
+
`${config.name}.${fieldName} field config must be an object.`,
|
|
627
|
+
);
|
|
628
|
+
fieldConfig.resolve == null ||
|
|
629
|
+
typeof fieldConfig.resolve === 'function' ||
|
|
630
|
+
devAssert(
|
|
631
|
+
false,
|
|
632
|
+
`${config.name}.${fieldName} field resolver must be a function if ` +
|
|
633
|
+
`provided, but got: ${inspect(fieldConfig.resolve)}.`,
|
|
634
|
+
);
|
|
635
|
+
const argsConfig =
|
|
636
|
+
(_fieldConfig$args = fieldConfig.args) !== null &&
|
|
637
|
+
_fieldConfig$args !== void 0
|
|
638
|
+
? _fieldConfig$args
|
|
639
|
+
: {};
|
|
640
|
+
isPlainObj(argsConfig) ||
|
|
641
|
+
devAssert(
|
|
642
|
+
false,
|
|
643
|
+
`${config.name}.${fieldName} args must be an object with argument names as keys.`,
|
|
644
|
+
);
|
|
645
|
+
return {
|
|
646
|
+
name: assertName(fieldName),
|
|
647
|
+
description: fieldConfig.description,
|
|
648
|
+
type: fieldConfig.type,
|
|
649
|
+
args: defineArguments(argsConfig),
|
|
650
|
+
resolve: fieldConfig.resolve,
|
|
651
|
+
subscribe: fieldConfig.subscribe,
|
|
652
|
+
deprecationReason: fieldConfig.deprecationReason,
|
|
653
|
+
extensions: toObjMap(fieldConfig.extensions),
|
|
654
|
+
astNode: fieldConfig.astNode,
|
|
655
|
+
};
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
export function defineArguments(config) {
|
|
660
|
+
return Object.entries(config).map(([argName, argConfig]) => ({
|
|
661
|
+
name: assertName(argName),
|
|
662
|
+
description: argConfig.description,
|
|
663
|
+
type: argConfig.type,
|
|
664
|
+
defaultValue: argConfig.defaultValue,
|
|
665
|
+
deprecationReason: argConfig.deprecationReason,
|
|
666
|
+
extensions: toObjMap(argConfig.extensions),
|
|
667
|
+
astNode: argConfig.astNode,
|
|
668
|
+
}));
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
function isPlainObj(obj) {
|
|
672
|
+
return isObjectLike(obj) && !Array.isArray(obj);
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
function fieldsToFieldsConfig(fields) {
|
|
676
|
+
return mapValue(fields, (field) => ({
|
|
677
|
+
description: field.description,
|
|
678
|
+
type: field.type,
|
|
679
|
+
args: argsToArgsConfig(field.args),
|
|
680
|
+
resolve: field.resolve,
|
|
681
|
+
subscribe: field.subscribe,
|
|
682
|
+
deprecationReason: field.deprecationReason,
|
|
683
|
+
extensions: field.extensions,
|
|
684
|
+
astNode: field.astNode,
|
|
685
|
+
}));
|
|
686
|
+
}
|
|
687
|
+
/**
|
|
688
|
+
* @internal
|
|
689
|
+
*/
|
|
690
|
+
|
|
691
|
+
export function argsToArgsConfig(args) {
|
|
692
|
+
return keyValMap(
|
|
693
|
+
args,
|
|
694
|
+
(arg) => arg.name,
|
|
695
|
+
(arg) => ({
|
|
696
|
+
description: arg.description,
|
|
697
|
+
type: arg.type,
|
|
698
|
+
defaultValue: arg.defaultValue,
|
|
699
|
+
deprecationReason: arg.deprecationReason,
|
|
700
|
+
extensions: arg.extensions,
|
|
701
|
+
astNode: arg.astNode,
|
|
702
|
+
}),
|
|
703
|
+
);
|
|
704
|
+
}
|
|
705
|
+
export function isRequiredArgument(arg) {
|
|
706
|
+
return isNonNullType(arg.type) && arg.defaultValue === undefined;
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
/**
|
|
710
|
+
* Interface Type Definition
|
|
711
|
+
*
|
|
712
|
+
* When a field can return one of a heterogeneous set of types, a Interface type
|
|
713
|
+
* is used to describe what types are possible, what fields are in common across
|
|
714
|
+
* all types, as well as a function to determine which type is actually used
|
|
715
|
+
* when the field is resolved.
|
|
716
|
+
*
|
|
717
|
+
* Example:
|
|
718
|
+
*
|
|
719
|
+
* ```ts
|
|
720
|
+
* const EntityType = new GraphQLInterfaceType({
|
|
721
|
+
* name: 'Entity',
|
|
722
|
+
* fields: {
|
|
723
|
+
* name: { type: GraphQLString }
|
|
724
|
+
* }
|
|
725
|
+
* });
|
|
726
|
+
* ```
|
|
727
|
+
*/
|
|
728
|
+
export class GraphQLInterfaceType {
|
|
729
|
+
constructor(config) {
|
|
730
|
+
var _config$extensionASTN3;
|
|
731
|
+
|
|
732
|
+
this.name = assertName(config.name);
|
|
733
|
+
this.description = config.description;
|
|
734
|
+
this.resolveType = config.resolveType;
|
|
735
|
+
this.extensions = toObjMap(config.extensions);
|
|
736
|
+
this.astNode = config.astNode;
|
|
737
|
+
this.extensionASTNodes =
|
|
738
|
+
(_config$extensionASTN3 = config.extensionASTNodes) !== null &&
|
|
739
|
+
_config$extensionASTN3 !== void 0
|
|
740
|
+
? _config$extensionASTN3
|
|
741
|
+
: [];
|
|
742
|
+
this._fields = defineFieldMap.bind(undefined, config);
|
|
743
|
+
this._interfaces = defineInterfaces.bind(undefined, config);
|
|
744
|
+
config.resolveType == null ||
|
|
745
|
+
typeof config.resolveType === 'function' ||
|
|
746
|
+
devAssert(
|
|
747
|
+
false,
|
|
748
|
+
`${this.name} must provide "resolveType" as a function, ` +
|
|
749
|
+
`but got: ${inspect(config.resolveType)}.`,
|
|
750
|
+
);
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
get [Symbol.toStringTag]() {
|
|
754
|
+
return 'GraphQLInterfaceType';
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
getFields() {
|
|
758
|
+
if (typeof this._fields === 'function') {
|
|
759
|
+
this._fields = this._fields();
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
return this._fields;
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
getInterfaces() {
|
|
766
|
+
if (typeof this._interfaces === 'function') {
|
|
767
|
+
this._interfaces = this._interfaces();
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
return this._interfaces;
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
toConfig() {
|
|
774
|
+
return {
|
|
775
|
+
name: this.name,
|
|
776
|
+
description: this.description,
|
|
777
|
+
interfaces: this.getInterfaces(),
|
|
778
|
+
fields: fieldsToFieldsConfig(this.getFields()),
|
|
779
|
+
resolveType: this.resolveType,
|
|
780
|
+
extensions: this.extensions,
|
|
781
|
+
astNode: this.astNode,
|
|
782
|
+
extensionASTNodes: this.extensionASTNodes,
|
|
783
|
+
};
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
toString() {
|
|
787
|
+
return this.name;
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
toJSON() {
|
|
791
|
+
return this.toString();
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
/**
|
|
796
|
+
* Union Type Definition
|
|
797
|
+
*
|
|
798
|
+
* When a field can return one of a heterogeneous set of types, a Union type
|
|
799
|
+
* is used to describe what types are possible as well as providing a function
|
|
800
|
+
* to determine which type is actually used when the field is resolved.
|
|
801
|
+
*
|
|
802
|
+
* Example:
|
|
803
|
+
*
|
|
804
|
+
* ```ts
|
|
805
|
+
* const PetType = new GraphQLUnionType({
|
|
806
|
+
* name: 'Pet',
|
|
807
|
+
* types: [ DogType, CatType ],
|
|
808
|
+
* resolveType(value) {
|
|
809
|
+
* if (value instanceof Dog) {
|
|
810
|
+
* return DogType;
|
|
811
|
+
* }
|
|
812
|
+
* if (value instanceof Cat) {
|
|
813
|
+
* return CatType;
|
|
814
|
+
* }
|
|
815
|
+
* }
|
|
816
|
+
* });
|
|
817
|
+
* ```
|
|
818
|
+
*/
|
|
819
|
+
export class GraphQLUnionType {
|
|
820
|
+
constructor(config) {
|
|
821
|
+
var _config$extensionASTN4;
|
|
822
|
+
|
|
823
|
+
this.name = assertName(config.name);
|
|
824
|
+
this.description = config.description;
|
|
825
|
+
this.resolveType = config.resolveType;
|
|
826
|
+
this.extensions = toObjMap(config.extensions);
|
|
827
|
+
this.astNode = config.astNode;
|
|
828
|
+
this.extensionASTNodes =
|
|
829
|
+
(_config$extensionASTN4 = config.extensionASTNodes) !== null &&
|
|
830
|
+
_config$extensionASTN4 !== void 0
|
|
831
|
+
? _config$extensionASTN4
|
|
832
|
+
: [];
|
|
833
|
+
this._types = defineTypes.bind(undefined, config);
|
|
834
|
+
config.resolveType == null ||
|
|
835
|
+
typeof config.resolveType === 'function' ||
|
|
836
|
+
devAssert(
|
|
837
|
+
false,
|
|
838
|
+
`${this.name} must provide "resolveType" as a function, ` +
|
|
839
|
+
`but got: ${inspect(config.resolveType)}.`,
|
|
840
|
+
);
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
get [Symbol.toStringTag]() {
|
|
844
|
+
return 'GraphQLUnionType';
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
getTypes() {
|
|
848
|
+
if (typeof this._types === 'function') {
|
|
849
|
+
this._types = this._types();
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
return this._types;
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
toConfig() {
|
|
856
|
+
return {
|
|
857
|
+
name: this.name,
|
|
858
|
+
description: this.description,
|
|
859
|
+
types: this.getTypes(),
|
|
860
|
+
resolveType: this.resolveType,
|
|
861
|
+
extensions: this.extensions,
|
|
862
|
+
astNode: this.astNode,
|
|
863
|
+
extensionASTNodes: this.extensionASTNodes,
|
|
864
|
+
};
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
toString() {
|
|
868
|
+
return this.name;
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
toJSON() {
|
|
872
|
+
return this.toString();
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
function defineTypes(config) {
|
|
877
|
+
const types = resolveReadonlyArrayThunk(config.types);
|
|
878
|
+
Array.isArray(types) ||
|
|
879
|
+
devAssert(
|
|
880
|
+
false,
|
|
881
|
+
`Must provide Array of types or a function which returns such an array for Union ${config.name}.`,
|
|
882
|
+
);
|
|
883
|
+
return types;
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
/**
|
|
887
|
+
* Enum Type Definition
|
|
888
|
+
*
|
|
889
|
+
* Some leaf values of requests and input values are Enums. GraphQL serializes
|
|
890
|
+
* Enum values as strings, however internally Enums can be represented by any
|
|
891
|
+
* kind of type, often integers.
|
|
892
|
+
*
|
|
893
|
+
* Example:
|
|
894
|
+
*
|
|
895
|
+
* ```ts
|
|
896
|
+
* const RGBType = new GraphQLEnumType({
|
|
897
|
+
* name: 'RGB',
|
|
898
|
+
* values: {
|
|
899
|
+
* RED: { value: 0 },
|
|
900
|
+
* GREEN: { value: 1 },
|
|
901
|
+
* BLUE: { value: 2 }
|
|
902
|
+
* }
|
|
903
|
+
* });
|
|
904
|
+
* ```
|
|
905
|
+
*
|
|
906
|
+
* Note: If a value is not provided in a definition, the name of the enum value
|
|
907
|
+
* will be used as its internal value.
|
|
908
|
+
*/
|
|
909
|
+
export class GraphQLEnumType {
|
|
910
|
+
/* <T> */
|
|
911
|
+
constructor(config) {
|
|
912
|
+
var _config$extensionASTN5;
|
|
913
|
+
|
|
914
|
+
this.name = assertName(config.name);
|
|
915
|
+
this.description = config.description;
|
|
916
|
+
this.extensions = toObjMap(config.extensions);
|
|
917
|
+
this.astNode = config.astNode;
|
|
918
|
+
this.extensionASTNodes =
|
|
919
|
+
(_config$extensionASTN5 = config.extensionASTNodes) !== null &&
|
|
920
|
+
_config$extensionASTN5 !== void 0
|
|
921
|
+
? _config$extensionASTN5
|
|
922
|
+
: [];
|
|
923
|
+
this._values = defineEnumValues(this.name, config.values);
|
|
924
|
+
this._valueLookup = new Map(
|
|
925
|
+
this._values.map((enumValue) => [enumValue.value, enumValue]),
|
|
926
|
+
);
|
|
927
|
+
this._nameLookup = keyMap(this._values, (value) => value.name);
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
get [Symbol.toStringTag]() {
|
|
931
|
+
return 'GraphQLEnumType';
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
getValues() {
|
|
935
|
+
return this._values;
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
getValue(name) {
|
|
939
|
+
return this._nameLookup[name];
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
serialize(outputValue) {
|
|
943
|
+
const enumValue = this._valueLookup.get(outputValue);
|
|
944
|
+
|
|
945
|
+
if (enumValue === undefined) {
|
|
946
|
+
throw new GraphQLError(
|
|
947
|
+
`Enum "${this.name}" cannot represent value: ${inspect(outputValue)}`,
|
|
948
|
+
);
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
return enumValue.name;
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
parseValue(inputValue) /* T */
|
|
955
|
+
{
|
|
956
|
+
if (typeof inputValue !== 'string') {
|
|
957
|
+
const valueStr = inspect(inputValue);
|
|
958
|
+
throw new GraphQLError(
|
|
959
|
+
`Enum "${this.name}" cannot represent non-string value: ${valueStr}.` +
|
|
960
|
+
didYouMeanEnumValue(this, valueStr),
|
|
961
|
+
);
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
const enumValue = this.getValue(inputValue);
|
|
965
|
+
|
|
966
|
+
if (enumValue == null) {
|
|
967
|
+
throw new GraphQLError(
|
|
968
|
+
`Value "${inputValue}" does not exist in "${this.name}" enum.` +
|
|
969
|
+
didYouMeanEnumValue(this, inputValue),
|
|
970
|
+
);
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
return enumValue.value;
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
parseLiteral(valueNode, _variables) /* T */
|
|
977
|
+
{
|
|
978
|
+
// Note: variables will be resolved to a value before calling this function.
|
|
979
|
+
if (valueNode.kind !== Kind.ENUM) {
|
|
980
|
+
const valueStr = print(valueNode);
|
|
981
|
+
throw new GraphQLError(
|
|
982
|
+
`Enum "${this.name}" cannot represent non-enum value: ${valueStr}.` +
|
|
983
|
+
didYouMeanEnumValue(this, valueStr),
|
|
984
|
+
valueNode,
|
|
985
|
+
);
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
const enumValue = this.getValue(valueNode.value);
|
|
989
|
+
|
|
990
|
+
if (enumValue == null) {
|
|
991
|
+
const valueStr = print(valueNode);
|
|
992
|
+
throw new GraphQLError(
|
|
993
|
+
`Value "${valueStr}" does not exist in "${this.name}" enum.` +
|
|
994
|
+
didYouMeanEnumValue(this, valueStr),
|
|
995
|
+
valueNode,
|
|
996
|
+
);
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
return enumValue.value;
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
toConfig() {
|
|
1003
|
+
const values = keyValMap(
|
|
1004
|
+
this.getValues(),
|
|
1005
|
+
(value) => value.name,
|
|
1006
|
+
(value) => ({
|
|
1007
|
+
description: value.description,
|
|
1008
|
+
value: value.value,
|
|
1009
|
+
deprecationReason: value.deprecationReason,
|
|
1010
|
+
extensions: value.extensions,
|
|
1011
|
+
astNode: value.astNode,
|
|
1012
|
+
}),
|
|
1013
|
+
);
|
|
1014
|
+
return {
|
|
1015
|
+
name: this.name,
|
|
1016
|
+
description: this.description,
|
|
1017
|
+
values,
|
|
1018
|
+
extensions: this.extensions,
|
|
1019
|
+
astNode: this.astNode,
|
|
1020
|
+
extensionASTNodes: this.extensionASTNodes,
|
|
1021
|
+
};
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
toString() {
|
|
1025
|
+
return this.name;
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
toJSON() {
|
|
1029
|
+
return this.toString();
|
|
1030
|
+
}
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
function didYouMeanEnumValue(enumType, unknownValueStr) {
|
|
1034
|
+
const allNames = enumType.getValues().map((value) => value.name);
|
|
1035
|
+
const suggestedValues = suggestionList(unknownValueStr, allNames);
|
|
1036
|
+
return didYouMean('the enum value', suggestedValues);
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
function defineEnumValues(typeName, valueMap) {
|
|
1040
|
+
isPlainObj(valueMap) ||
|
|
1041
|
+
devAssert(
|
|
1042
|
+
false,
|
|
1043
|
+
`${typeName} values must be an object with value names as keys.`,
|
|
1044
|
+
);
|
|
1045
|
+
return Object.entries(valueMap).map(([valueName, valueConfig]) => {
|
|
1046
|
+
isPlainObj(valueConfig) ||
|
|
1047
|
+
devAssert(
|
|
1048
|
+
false,
|
|
1049
|
+
`${typeName}.${valueName} must refer to an object with a "value" key ` +
|
|
1050
|
+
`representing an internal value but got: ${inspect(valueConfig)}.`,
|
|
1051
|
+
);
|
|
1052
|
+
return {
|
|
1053
|
+
name: assertEnumValueName(valueName),
|
|
1054
|
+
description: valueConfig.description,
|
|
1055
|
+
value: valueConfig.value !== undefined ? valueConfig.value : valueName,
|
|
1056
|
+
deprecationReason: valueConfig.deprecationReason,
|
|
1057
|
+
extensions: toObjMap(valueConfig.extensions),
|
|
1058
|
+
astNode: valueConfig.astNode,
|
|
1059
|
+
};
|
|
1060
|
+
});
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
/**
|
|
1064
|
+
* Input Object Type Definition
|
|
1065
|
+
*
|
|
1066
|
+
* An input object defines a structured collection of fields which may be
|
|
1067
|
+
* supplied to a field argument.
|
|
1068
|
+
*
|
|
1069
|
+
* Using `NonNull` will ensure that a value must be provided by the query
|
|
1070
|
+
*
|
|
1071
|
+
* Example:
|
|
1072
|
+
*
|
|
1073
|
+
* ```ts
|
|
1074
|
+
* const GeoPoint = new GraphQLInputObjectType({
|
|
1075
|
+
* name: 'GeoPoint',
|
|
1076
|
+
* fields: {
|
|
1077
|
+
* lat: { type: new GraphQLNonNull(GraphQLFloat) },
|
|
1078
|
+
* lon: { type: new GraphQLNonNull(GraphQLFloat) },
|
|
1079
|
+
* alt: { type: GraphQLFloat, defaultValue: 0 },
|
|
1080
|
+
* }
|
|
1081
|
+
* });
|
|
1082
|
+
* ```
|
|
1083
|
+
*/
|
|
1084
|
+
export class GraphQLInputObjectType {
|
|
1085
|
+
constructor(config) {
|
|
1086
|
+
var _config$extensionASTN6;
|
|
1087
|
+
|
|
1088
|
+
this.name = assertName(config.name);
|
|
1089
|
+
this.description = config.description;
|
|
1090
|
+
this.extensions = toObjMap(config.extensions);
|
|
1091
|
+
this.astNode = config.astNode;
|
|
1092
|
+
this.extensionASTNodes =
|
|
1093
|
+
(_config$extensionASTN6 = config.extensionASTNodes) !== null &&
|
|
1094
|
+
_config$extensionASTN6 !== void 0
|
|
1095
|
+
? _config$extensionASTN6
|
|
1096
|
+
: [];
|
|
1097
|
+
this._fields = defineInputFieldMap.bind(undefined, config);
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1100
|
+
get [Symbol.toStringTag]() {
|
|
1101
|
+
return 'GraphQLInputObjectType';
|
|
1102
|
+
}
|
|
1103
|
+
|
|
1104
|
+
getFields() {
|
|
1105
|
+
if (typeof this._fields === 'function') {
|
|
1106
|
+
this._fields = this._fields();
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1109
|
+
return this._fields;
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
toConfig() {
|
|
1113
|
+
const fields = mapValue(this.getFields(), (field) => ({
|
|
1114
|
+
description: field.description,
|
|
1115
|
+
type: field.type,
|
|
1116
|
+
defaultValue: field.defaultValue,
|
|
1117
|
+
deprecationReason: field.deprecationReason,
|
|
1118
|
+
extensions: field.extensions,
|
|
1119
|
+
astNode: field.astNode,
|
|
1120
|
+
}));
|
|
1121
|
+
return {
|
|
1122
|
+
name: this.name,
|
|
1123
|
+
description: this.description,
|
|
1124
|
+
fields,
|
|
1125
|
+
extensions: this.extensions,
|
|
1126
|
+
astNode: this.astNode,
|
|
1127
|
+
extensionASTNodes: this.extensionASTNodes,
|
|
1128
|
+
};
|
|
1129
|
+
}
|
|
1130
|
+
|
|
1131
|
+
toString() {
|
|
1132
|
+
return this.name;
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
toJSON() {
|
|
1136
|
+
return this.toString();
|
|
1137
|
+
}
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1140
|
+
function defineInputFieldMap(config) {
|
|
1141
|
+
const fieldMap = resolveObjMapThunk(config.fields);
|
|
1142
|
+
isPlainObj(fieldMap) ||
|
|
1143
|
+
devAssert(
|
|
1144
|
+
false,
|
|
1145
|
+
`${config.name} fields must be an object with field names as keys or a function which returns such an object.`,
|
|
1146
|
+
);
|
|
1147
|
+
return mapValue(fieldMap, (fieldConfig, fieldName) => {
|
|
1148
|
+
!('resolve' in fieldConfig) ||
|
|
1149
|
+
devAssert(
|
|
1150
|
+
false,
|
|
1151
|
+
`${config.name}.${fieldName} field has a resolve property, but Input Types cannot define resolvers.`,
|
|
1152
|
+
);
|
|
1153
|
+
return {
|
|
1154
|
+
name: assertName(fieldName),
|
|
1155
|
+
description: fieldConfig.description,
|
|
1156
|
+
type: fieldConfig.type,
|
|
1157
|
+
defaultValue: fieldConfig.defaultValue,
|
|
1158
|
+
deprecationReason: fieldConfig.deprecationReason,
|
|
1159
|
+
extensions: toObjMap(fieldConfig.extensions),
|
|
1160
|
+
astNode: fieldConfig.astNode,
|
|
1161
|
+
};
|
|
1162
|
+
});
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
export function isRequiredInputField(field) {
|
|
1166
|
+
return isNonNullType(field.type) && field.defaultValue === undefined;
|
|
1167
|
+
}
|