graphql 14.1.1 → 14.3.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 +1 -1
- package/README.md +1 -1
- package/error/GraphQLError.js +12 -10
- package/error/GraphQLError.js.flow +11 -6
- package/error/GraphQLError.mjs +20 -3
- package/error/formatError.js +2 -2
- package/error/formatError.js.flow +3 -3
- package/error/formatError.mjs +2 -2
- package/error/index.js +1 -1
- package/error/index.js.flow +5 -2
- package/error/index.mjs +2 -2
- package/error/locatedError.js +2 -2
- package/error/locatedError.js.flow +2 -2
- package/error/locatedError.mjs +2 -2
- package/error/printError.js +2 -2
- package/error/printError.js.flow +4 -5
- package/error/printError.mjs +2 -2
- package/error/syntaxError.js +2 -2
- package/error/syntaxError.js.flow +2 -2
- package/error/syntaxError.mjs +2 -2
- package/execution/execute.js +52 -37
- package/execution/execute.js.flow +66 -51
- package/execution/execute.mjs +50 -38
- package/execution/index.js +7 -1
- package/execution/index.js.flow +9 -4
- package/execution/index.mjs +3 -3
- package/execution/values.js +11 -11
- package/execution/values.js.flow +23 -19
- package/execution/values.mjs +11 -11
- package/graphql.js +13 -9
- package/graphql.js.flow +28 -10
- package/graphql.mjs +10 -9
- package/index.js +83 -53
- package/index.js.flow +60 -47
- package/index.mjs +26 -23
- package/jsutils/ObjMap.js +1 -1
- package/jsutils/ObjMap.js.flow +1 -1
- package/jsutils/ObjMap.mjs +1 -0
- package/jsutils/PromiseOrValue.js +1 -0
- package/jsutils/{MaybePromise.js.flow → PromiseOrValue.js.flow} +2 -2
- package/jsutils/PromiseOrValue.mjs +1 -0
- package/jsutils/dedent.js +2 -2
- package/jsutils/dedent.js.flow +1 -1
- package/jsutils/dedent.mjs +2 -2
- package/jsutils/defineToJSON.js +2 -2
- package/jsutils/defineToJSON.js.flow +1 -1
- package/jsutils/defineToJSON.mjs +2 -2
- package/jsutils/defineToStringTag.js +2 -2
- package/jsutils/defineToStringTag.js.flow +1 -1
- package/jsutils/defineToStringTag.mjs +2 -2
- package/jsutils/inspect.js +94 -19
- package/jsutils/inspect.js.flow +98 -20
- package/jsutils/inspect.mjs +94 -20
- package/jsutils/instanceOf.js +2 -2
- package/jsutils/instanceOf.js.flow +1 -1
- package/jsutils/instanceOf.mjs +2 -2
- package/jsutils/invariant.js +5 -3
- package/jsutils/invariant.js.flow +3 -2
- package/jsutils/invariant.mjs +5 -3
- package/jsutils/isInvalid.js +2 -2
- package/jsutils/isInvalid.js.flow +1 -1
- package/jsutils/isInvalid.mjs +2 -2
- package/jsutils/isNullish.js +2 -2
- package/jsutils/isNullish.js.flow +1 -1
- package/jsutils/isNullish.mjs +2 -2
- package/jsutils/isPromise.js +2 -2
- package/jsutils/isPromise.js.flow +1 -1
- package/jsutils/isPromise.mjs +2 -2
- package/jsutils/keyMap.js +4 -3
- package/jsutils/keyMap.js.flow +6 -6
- package/jsutils/keyMap.mjs +4 -3
- package/jsutils/keyValMap.js +4 -3
- package/jsutils/keyValMap.js.flow +6 -6
- package/jsutils/keyValMap.mjs +4 -3
- package/jsutils/mapValue.js +2 -2
- package/jsutils/mapValue.js.flow +2 -2
- package/jsutils/mapValue.mjs +2 -2
- package/jsutils/memoize3.js +3 -3
- package/jsutils/memoize3.js.flow +2 -2
- package/jsutils/memoize3.mjs +3 -3
- package/jsutils/nodejsCustomInspectSymbol.js +2 -2
- package/jsutils/nodejsCustomInspectSymbol.js.flow +1 -1
- package/jsutils/nodejsCustomInspectSymbol.mjs +2 -2
- package/jsutils/orList.js +2 -2
- package/jsutils/orList.js.flow +1 -1
- package/jsutils/orList.mjs +2 -2
- package/jsutils/promiseForObject.js +2 -2
- package/jsutils/promiseForObject.js.flow +2 -2
- package/jsutils/promiseForObject.mjs +2 -2
- package/jsutils/promiseReduce.js +2 -2
- package/jsutils/promiseReduce.js.flow +5 -5
- package/jsutils/promiseReduce.mjs +2 -2
- package/jsutils/quotedOrList.js +2 -2
- package/jsutils/quotedOrList.js.flow +1 -1
- package/jsutils/quotedOrList.mjs +2 -2
- package/jsutils/suggestionList.js +2 -2
- package/jsutils/suggestionList.js.flow +1 -1
- package/jsutils/suggestionList.mjs +2 -2
- package/language/ast.js +1 -1
- package/language/ast.js.flow +3 -3
- package/language/ast.mjs +1 -0
- package/language/blockString.js +114 -0
- package/language/blockString.js.flow +102 -0
- package/language/blockString.mjs +104 -0
- package/language/directiveLocation.js +2 -2
- package/language/directiveLocation.js.flow +1 -1
- package/language/directiveLocation.mjs +2 -2
- package/language/index.js +9 -9
- package/language/index.js.flow +10 -5
- package/language/index.mjs +3 -3
- package/language/kinds.js +2 -2
- package/language/kinds.js.flow +1 -1
- package/language/kinds.mjs +2 -2
- package/language/lexer.js +52 -44
- package/language/lexer.js.flow +65 -54
- package/language/lexer.mjs +49 -43
- package/language/location.js +2 -2
- package/language/location.js.flow +2 -2
- package/language/location.mjs +2 -2
- package/language/parser.js +75 -67
- package/language/parser.js.flow +138 -127
- package/language/parser.mjs +76 -68
- package/language/predicates.js +2 -2
- package/language/predicates.js.flow +2 -2
- package/language/predicates.mjs +2 -2
- package/language/printer.js +6 -14
- package/language/printer.js.flow +8 -17
- package/language/printer.mjs +5 -14
- package/language/source.js +2 -2
- package/language/source.js.flow +1 -1
- package/language/source.mjs +2 -2
- package/language/visitor.js +4 -6
- package/language/visitor.js.flow +3 -3
- package/language/visitor.mjs +4 -6
- package/package.json +1 -1
- package/polyfills/find.js +2 -2
- package/polyfills/find.js.flow +1 -1
- package/polyfills/find.mjs +2 -2
- package/polyfills/flatMap.js +38 -0
- package/polyfills/flatMap.js.flow +34 -0
- package/polyfills/flatMap.mjs +30 -0
- package/polyfills/isFinite.js +2 -2
- package/polyfills/isFinite.js.flow +1 -1
- package/polyfills/isFinite.mjs +2 -2
- package/polyfills/isInteger.js +2 -2
- package/polyfills/isInteger.js.flow +1 -1
- package/polyfills/isInteger.mjs +2 -2
- package/polyfills/objectEntries.js +2 -2
- package/polyfills/objectEntries.js.flow +2 -2
- package/polyfills/objectEntries.mjs +2 -2
- package/polyfills/objectValues.js +2 -2
- package/polyfills/objectValues.js.flow +2 -2
- package/polyfills/objectValues.mjs +2 -2
- package/subscription/asyncIteratorReject.js +1 -1
- package/subscription/asyncIteratorReject.js.flow +1 -1
- package/subscription/asyncIteratorReject.mjs +2 -2
- package/subscription/index.js +1 -1
- package/subscription/index.js.flow +1 -1
- package/subscription/index.mjs +2 -2
- package/subscription/mapAsyncIterator.js +1 -1
- package/subscription/mapAsyncIterator.js.flow +5 -5
- package/subscription/mapAsyncIterator.mjs +2 -2
- package/subscription/subscribe.js +2 -2
- package/subscription/subscribe.js.flow +6 -6
- package/subscription/subscribe.mjs +2 -2
- package/type/definition.js +138 -22
- package/type/definition.js.flow +184 -36
- package/type/definition.mjs +136 -23
- package/type/directives.js +14 -3
- package/type/directives.js.flow +24 -11
- package/type/directives.mjs +16 -5
- package/type/index.js +7 -7
- package/type/index.js.flow +8 -4
- package/type/index.mjs +10 -6
- package/type/introspection.js +14 -9
- package/type/introspection.js.flow +12 -18
- package/type/introspection.mjs +14 -9
- package/type/scalars.js +5 -4
- package/type/scalars.js.flow +4 -10
- package/type/scalars.mjs +7 -6
- package/type/schema.js +55 -3
- package/type/schema.js.flow +73 -17
- package/type/schema.mjs +56 -4
- package/type/validate.js +19 -47
- package/type/validate.js.flow +17 -29
- package/type/validate.mjs +18 -47
- package/utilities/TypeInfo.js +93 -73
- package/utilities/TypeInfo.js.flow +30 -23
- package/utilities/TypeInfo.mjs +93 -73
- package/utilities/assertValidName.js +2 -2
- package/utilities/assertValidName.js.flow +2 -2
- package/utilities/assertValidName.mjs +2 -2
- package/utilities/astFromValue.js +5 -4
- package/utilities/astFromValue.js.flow +8 -7
- package/utilities/astFromValue.mjs +7 -6
- package/utilities/buildASTSchema.js +63 -62
- package/utilities/buildASTSchema.js.flow +92 -108
- package/utilities/buildASTSchema.mjs +61 -62
- package/utilities/buildClientSchema.js +38 -45
- package/utilities/buildClientSchema.js.flow +66 -79
- package/utilities/buildClientSchema.mjs +37 -44
- package/utilities/coerceValue.js +6 -7
- package/utilities/coerceValue.js.flow +5 -4
- package/utilities/coerceValue.mjs +7 -8
- package/utilities/concatAST.js +9 -13
- package/utilities/concatAST.js.flow +4 -10
- package/utilities/concatAST.mjs +6 -13
- package/utilities/extendSchema.js +219 -511
- package/utilities/extendSchema.js.flow +195 -304
- package/utilities/extendSchema.mjs +218 -512
- package/utilities/findBreakingChanges.js +54 -95
- package/utilities/findBreakingChanges.js.flow +49 -47
- package/utilities/findBreakingChanges.mjs +80 -95
- package/utilities/findDeprecatedUsages.js +4 -4
- package/utilities/findDeprecatedUsages.js.flow +5 -5
- package/utilities/findDeprecatedUsages.mjs +4 -4
- package/utilities/getOperationAST.js +2 -2
- package/utilities/getOperationAST.js.flow +5 -2
- package/utilities/getOperationAST.mjs +2 -2
- package/utilities/getOperationRootType.js +24 -24
- package/utilities/getOperationRootType.js.flow +40 -35
- package/utilities/getOperationRootType.mjs +24 -24
- package/utilities/index.js +9 -1
- package/utilities/index.js.flow +13 -6
- package/utilities/index.mjs +13 -8
- package/utilities/introspectionFromSchema.js +6 -4
- package/utilities/introspectionFromSchema.js.flow +8 -7
- package/utilities/introspectionFromSchema.mjs +6 -5
- package/utilities/introspectionQuery.js +2 -2
- package/utilities/introspectionQuery.js.flow +2 -2
- package/utilities/introspectionQuery.mjs +2 -2
- package/utilities/isValidJSValue.js +4 -2
- package/utilities/isValidJSValue.js.flow +3 -2
- package/utilities/isValidJSValue.mjs +4 -2
- package/utilities/isValidLiteralValue.js +2 -2
- package/utilities/isValidLiteralValue.js.flow +4 -4
- package/utilities/isValidLiteralValue.mjs +2 -2
- package/utilities/lexicographicSortSchema.js +84 -123
- package/utilities/lexicographicSortSchema.js.flow +68 -96
- package/utilities/lexicographicSortSchema.mjs +84 -123
- package/utilities/schemaPrinter.js +47 -73
- package/utilities/schemaPrinter.js.flow +69 -120
- package/utilities/schemaPrinter.mjs +45 -72
- package/utilities/separateOperations.js +8 -12
- package/utilities/separateOperations.js.flow +6 -3
- package/utilities/separateOperations.mjs +8 -12
- package/utilities/stripIgnoredCharacters.js +140 -0
- package/utilities/stripIgnoredCharacters.js.flow +129 -0
- package/utilities/stripIgnoredCharacters.mjs +127 -0
- package/utilities/typeComparators.js +2 -2
- package/utilities/typeComparators.js.flow +4 -3
- package/utilities/typeComparators.mjs +2 -2
- package/utilities/typeFromAST.js +9 -4
- package/utilities/typeFromAST.js.flow +15 -9
- package/utilities/typeFromAST.mjs +6 -4
- package/utilities/valueFromAST.js +7 -4
- package/utilities/valueFromAST.js.flow +7 -5
- package/utilities/valueFromAST.mjs +6 -4
- package/utilities/valueFromASTUntyped.js +11 -6
- package/utilities/valueFromASTUntyped.js.flow +9 -5
- package/utilities/valueFromASTUntyped.mjs +10 -6
- package/validation/ValidationContext.js +1 -1
- package/validation/ValidationContext.js.flow +19 -20
- package/validation/ValidationContext.mjs +2 -2
- package/validation/index.js +1 -1
- package/validation/index.js.flow +2 -1
- package/validation/index.mjs +3 -2
- package/validation/rules/ExecutableDefinitions.js +3 -3
- package/validation/rules/ExecutableDefinitions.js.flow +4 -4
- package/validation/rules/ExecutableDefinitions.mjs +3 -3
- package/validation/rules/FieldsOnCorrectType.js +3 -3
- package/validation/rules/FieldsOnCorrectType.js.flow +7 -7
- package/validation/rules/FieldsOnCorrectType.mjs +3 -3
- package/validation/rules/FragmentsOnCompositeTypes.js +4 -4
- package/validation/rules/FragmentsOnCompositeTypes.js.flow +5 -5
- package/validation/rules/FragmentsOnCompositeTypes.mjs +4 -4
- package/validation/rules/KnownArgumentNames.js +1 -1
- package/validation/rules/KnownArgumentNames.js.flow +5 -5
- package/validation/rules/KnownArgumentNames.mjs +2 -2
- package/validation/rules/KnownDirectives.js +8 -6
- package/validation/rules/KnownDirectives.js.flow +11 -9
- package/validation/rules/KnownDirectives.mjs +8 -6
- package/validation/rules/KnownFragmentNames.js +3 -3
- package/validation/rules/KnownFragmentNames.js.flow +4 -4
- package/validation/rules/KnownFragmentNames.mjs +3 -3
- package/validation/rules/KnownTypeNames.js +2 -2
- package/validation/rules/KnownTypeNames.js.flow +6 -6
- package/validation/rules/KnownTypeNames.mjs +2 -2
- package/validation/rules/LoneAnonymousOperation.js +3 -3
- package/validation/rules/LoneAnonymousOperation.js.flow +4 -4
- package/validation/rules/LoneAnonymousOperation.mjs +3 -3
- package/validation/rules/LoneSchemaDefinition.js +2 -2
- package/validation/rules/LoneSchemaDefinition.js.flow +3 -3
- package/validation/rules/LoneSchemaDefinition.mjs +2 -2
- package/validation/rules/NoFragmentCycles.js +2 -2
- package/validation/rules/NoFragmentCycles.js.flow +4 -4
- package/validation/rules/NoFragmentCycles.mjs +2 -2
- package/validation/rules/NoUndefinedVariables.js +2 -2
- package/validation/rules/NoUndefinedVariables.js.flow +3 -3
- package/validation/rules/NoUndefinedVariables.mjs +2 -2
- package/validation/rules/NoUnusedFragments.js +7 -7
- package/validation/rules/NoUnusedFragments.js.flow +4 -4
- package/validation/rules/NoUnusedFragments.mjs +7 -7
- package/validation/rules/NoUnusedVariables.js +5 -5
- package/validation/rules/NoUnusedVariables.js.flow +6 -5
- package/validation/rules/NoUnusedVariables.mjs +5 -5
- package/validation/rules/OverlappingFieldsCanBeMerged.js +26 -23
- package/validation/rules/OverlappingFieldsCanBeMerged.js.flow +17 -17
- package/validation/rules/OverlappingFieldsCanBeMerged.mjs +26 -23
- package/validation/rules/PossibleFragmentSpreads.js +4 -4
- package/validation/rules/PossibleFragmentSpreads.js.flow +5 -5
- package/validation/rules/PossibleFragmentSpreads.mjs +4 -4
- package/validation/rules/PossibleTypeExtensions.js +3 -3
- package/validation/rules/PossibleTypeExtensions.js.flow +5 -5
- package/validation/rules/PossibleTypeExtensions.mjs +4 -4
- package/validation/rules/ProvidedRequiredArguments.js +6 -8
- package/validation/rules/ProvidedRequiredArguments.js.flow +8 -8
- package/validation/rules/ProvidedRequiredArguments.mjs +7 -9
- package/validation/rules/ScalarLeafs.js +4 -4
- package/validation/rules/ScalarLeafs.js.flow +6 -6
- package/validation/rules/ScalarLeafs.mjs +4 -4
- package/validation/rules/SingleFieldSubscriptions.js +2 -2
- package/validation/rules/SingleFieldSubscriptions.js.flow +4 -4
- package/validation/rules/SingleFieldSubscriptions.mjs +2 -2
- package/validation/rules/UniqueArgumentNames.js +2 -2
- package/validation/rules/UniqueArgumentNames.js.flow +3 -3
- package/validation/rules/UniqueArgumentNames.mjs +2 -2
- package/validation/rules/UniqueDirectiveNames.js +2 -2
- package/validation/rules/UniqueDirectiveNames.js.flow +3 -3
- package/validation/rules/UniqueDirectiveNames.mjs +2 -2
- package/validation/rules/UniqueDirectivesPerLocation.js +3 -2
- package/validation/rules/UniqueDirectivesPerLocation.js.flow +4 -4
- package/validation/rules/UniqueDirectivesPerLocation.mjs +3 -2
- package/validation/rules/UniqueEnumValueNames.js +4 -8
- package/validation/rules/UniqueEnumValueNames.js.flow +6 -8
- package/validation/rules/UniqueEnumValueNames.mjs +4 -8
- package/validation/rules/UniqueFieldDefinitionNames.js +4 -8
- package/validation/rules/UniqueFieldDefinitionNames.js.flow +6 -8
- package/validation/rules/UniqueFieldDefinitionNames.mjs +4 -8
- package/validation/rules/UniqueFragmentNames.js +2 -2
- package/validation/rules/UniqueFragmentNames.js.flow +3 -3
- package/validation/rules/UniqueFragmentNames.mjs +2 -2
- package/validation/rules/UniqueInputFieldNames.js +2 -4
- package/validation/rules/UniqueInputFieldNames.js.flow +3 -4
- package/validation/rules/UniqueInputFieldNames.mjs +2 -4
- package/validation/rules/UniqueOperationNames.js +2 -2
- package/validation/rules/UniqueOperationNames.js.flow +3 -3
- package/validation/rules/UniqueOperationNames.mjs +2 -2
- package/validation/rules/UniqueOperationTypes.js +2 -2
- package/validation/rules/UniqueOperationTypes.js.flow +3 -3
- package/validation/rules/UniqueOperationTypes.mjs +2 -2
- package/validation/rules/UniqueTypeNames.js +2 -2
- package/validation/rules/UniqueTypeNames.js.flow +4 -4
- package/validation/rules/UniqueTypeNames.mjs +2 -2
- package/validation/rules/UniqueVariableNames.js +2 -2
- package/validation/rules/UniqueVariableNames.js.flow +4 -4
- package/validation/rules/UniqueVariableNames.mjs +2 -2
- package/validation/rules/ValuesOfCorrectType.js +2 -2
- package/validation/rules/ValuesOfCorrectType.js.flow +5 -5
- package/validation/rules/ValuesOfCorrectType.mjs +2 -2
- package/validation/rules/VariablesAreInputTypes.js +3 -3
- package/validation/rules/VariablesAreInputTypes.js.flow +5 -5
- package/validation/rules/VariablesAreInputTypes.mjs +3 -3
- package/validation/rules/VariablesInAllowedPosition.js +3 -3
- package/validation/rules/VariablesInAllowedPosition.js.flow +7 -8
- package/validation/rules/VariablesInAllowedPosition.mjs +3 -3
- package/validation/specifiedRules.js +2 -2
- package/validation/specifiedRules.js.flow +13 -6
- package/validation/specifiedRules.mjs +7 -7
- package/validation/validate.js +2 -2
- package/validation/validate.js.flow +10 -6
- package/validation/validate.mjs +2 -2
- package/jsutils/MaybePromise.js +0 -1
- package/jsutils/MaybePromise.mjs +0 -0
- package/language/blockStringValue.js +0 -73
- package/language/blockStringValue.js.flow +0 -64
- package/language/blockStringValue.mjs +0 -66
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -7,26 +7,24 @@
|
|
|
7
7
|
* @flow strict
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
+
import flatMap from '../polyfills/flatMap';
|
|
10
11
|
import objectValues from '../polyfills/objectValues';
|
|
12
|
+
import inspect from '../jsutils/inspect';
|
|
11
13
|
import invariant from '../jsutils/invariant';
|
|
12
14
|
import mapValue from '../jsutils/mapValue';
|
|
13
15
|
import keyValMap from '../jsutils/keyValMap';
|
|
14
16
|
import { ASTDefinitionBuilder } from './buildASTSchema';
|
|
15
17
|
import { assertValidSDLExtension } from '../validation/validate';
|
|
16
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
type GraphQLSchemaValidationOptions,
|
|
20
|
+
assertSchema,
|
|
21
|
+
GraphQLSchema,
|
|
22
|
+
} from '../type/schema';
|
|
17
23
|
import { isIntrospectionType } from '../type/introspection';
|
|
18
24
|
import { isSpecifiedScalarType } from '../type/scalars';
|
|
19
25
|
|
|
20
|
-
import type { GraphQLSchemaValidationOptions } from '../type/schema';
|
|
21
|
-
|
|
22
|
-
import type {
|
|
23
|
-
GraphQLType,
|
|
24
|
-
GraphQLNamedType,
|
|
25
|
-
GraphQLArgument,
|
|
26
|
-
GraphQLFieldConfigArgumentMap,
|
|
27
|
-
} from '../type/definition';
|
|
28
|
-
|
|
29
26
|
import {
|
|
27
|
+
type GraphQLNamedType,
|
|
30
28
|
isScalarType,
|
|
31
29
|
isObjectType,
|
|
32
30
|
isInterfaceType,
|
|
@@ -49,11 +47,11 @@ import { GraphQLDirective } from '../type/directives';
|
|
|
49
47
|
|
|
50
48
|
import { Kind } from '../language/kinds';
|
|
51
49
|
|
|
52
|
-
import
|
|
53
|
-
DocumentNode,
|
|
54
|
-
DirectiveDefinitionNode,
|
|
55
|
-
SchemaExtensionNode,
|
|
56
|
-
SchemaDefinitionNode,
|
|
50
|
+
import {
|
|
51
|
+
type DocumentNode,
|
|
52
|
+
type DirectiveDefinitionNode,
|
|
53
|
+
type SchemaExtensionNode,
|
|
54
|
+
type SchemaDefinitionNode,
|
|
57
55
|
} from '../language/ast';
|
|
58
56
|
import {
|
|
59
57
|
isTypeDefinitionNode,
|
|
@@ -116,405 +114,298 @@ export function extendSchema(
|
|
|
116
114
|
}
|
|
117
115
|
|
|
118
116
|
// Collect the type definitions and extensions found in the document.
|
|
119
|
-
const
|
|
120
|
-
const
|
|
117
|
+
const typeDefs = [];
|
|
118
|
+
const typeExtsMap = Object.create(null);
|
|
121
119
|
|
|
122
120
|
// New directives and types are separate because a directives and types can
|
|
123
121
|
// have the same name. For example, a type named "skip".
|
|
124
|
-
const
|
|
122
|
+
const directiveDefs: Array<DirectiveDefinitionNode> = [];
|
|
125
123
|
|
|
126
124
|
let schemaDef: ?SchemaDefinitionNode;
|
|
127
125
|
// Schema extensions are collected which may add additional operation types.
|
|
128
|
-
const
|
|
126
|
+
const schemaExts: Array<SchemaExtensionNode> = [];
|
|
129
127
|
|
|
130
128
|
for (const def of documentAST.definitions) {
|
|
131
129
|
if (def.kind === Kind.SCHEMA_DEFINITION) {
|
|
132
130
|
schemaDef = def;
|
|
133
131
|
} else if (def.kind === Kind.SCHEMA_EXTENSION) {
|
|
134
|
-
|
|
132
|
+
schemaExts.push(def);
|
|
135
133
|
} else if (isTypeDefinitionNode(def)) {
|
|
136
|
-
|
|
137
|
-
typeDefinitionMap[typeName] = def;
|
|
134
|
+
typeDefs.push(def);
|
|
138
135
|
} else if (isTypeExtensionNode(def)) {
|
|
139
136
|
const extendedTypeName = def.name.value;
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
?
|
|
137
|
+
const existingTypeExts = typeExtsMap[extendedTypeName];
|
|
138
|
+
typeExtsMap[extendedTypeName] = existingTypeExts
|
|
139
|
+
? existingTypeExts.concat([def])
|
|
143
140
|
: [def];
|
|
144
141
|
} else if (def.kind === Kind.DIRECTIVE_DEFINITION) {
|
|
145
|
-
|
|
142
|
+
directiveDefs.push(def);
|
|
146
143
|
}
|
|
147
144
|
}
|
|
148
145
|
|
|
149
146
|
// If this document contains no new types, extensions, or directives then
|
|
150
147
|
// return the same unmodified GraphQLSchema instance.
|
|
151
148
|
if (
|
|
152
|
-
Object.keys(
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
149
|
+
Object.keys(typeExtsMap).length === 0 &&
|
|
150
|
+
typeDefs.length === 0 &&
|
|
151
|
+
directiveDefs.length === 0 &&
|
|
152
|
+
schemaExts.length === 0 &&
|
|
156
153
|
!schemaDef
|
|
157
154
|
) {
|
|
158
155
|
return schema;
|
|
159
156
|
}
|
|
160
157
|
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
158
|
+
const schemaConfig = schema.toConfig();
|
|
159
|
+
const astBuilder = new ASTDefinitionBuilder(options, typeName => {
|
|
160
|
+
const type = typeMap[typeName];
|
|
161
|
+
invariant(type, `Unknown type: "${typeName}".`);
|
|
162
|
+
return type;
|
|
163
|
+
});
|
|
167
164
|
|
|
168
|
-
|
|
169
|
-
|
|
165
|
+
const typeMap = keyValMap(
|
|
166
|
+
typeDefs,
|
|
167
|
+
node => node.name.value,
|
|
168
|
+
node => astBuilder.buildType(node),
|
|
170
169
|
);
|
|
171
|
-
|
|
172
|
-
|
|
170
|
+
for (const existingType of schemaConfig.types) {
|
|
171
|
+
typeMap[existingType.name] = extendNamedType(existingType);
|
|
172
|
+
}
|
|
173
173
|
|
|
174
174
|
// Get the extended root operation types.
|
|
175
175
|
const operationTypes = {
|
|
176
|
-
query:
|
|
177
|
-
mutation:
|
|
178
|
-
subscription:
|
|
176
|
+
query: schemaConfig.query && schemaConfig.query.name,
|
|
177
|
+
mutation: schemaConfig.mutation && schemaConfig.mutation.name,
|
|
178
|
+
subscription: schemaConfig.subscription && schemaConfig.subscription.name,
|
|
179
179
|
};
|
|
180
180
|
|
|
181
181
|
if (schemaDef) {
|
|
182
182
|
for (const { operation, type } of schemaDef.operationTypes) {
|
|
183
|
-
|
|
184
|
-
// typed values, that would throw immediately while type system
|
|
185
|
-
// validation with validateSchema() will produce more actionable results.
|
|
186
|
-
operationTypes[operation] = (astBuilder.buildType(type): any);
|
|
183
|
+
operationTypes[operation] = type.name.value;
|
|
187
184
|
}
|
|
188
185
|
}
|
|
186
|
+
|
|
189
187
|
// Then, incorporate schema definition and all schema extensions.
|
|
190
|
-
for (const
|
|
191
|
-
if (
|
|
192
|
-
for (const { operation, type } of
|
|
193
|
-
|
|
194
|
-
// typed values, that would throw immediately while type system
|
|
195
|
-
// validation with validateSchema() will produce more actionable results.
|
|
196
|
-
operationTypes[operation] = (astBuilder.buildType(type): any);
|
|
188
|
+
for (const schemaExt of schemaExts) {
|
|
189
|
+
if (schemaExt.operationTypes) {
|
|
190
|
+
for (const { operation, type } of schemaExt.operationTypes) {
|
|
191
|
+
operationTypes[operation] = type.name.value;
|
|
197
192
|
}
|
|
198
193
|
}
|
|
199
194
|
}
|
|
200
195
|
|
|
201
|
-
const schemaExtensionASTNodes = schemaExtensions
|
|
202
|
-
? schema.extensionASTNodes
|
|
203
|
-
? schema.extensionASTNodes.concat(schemaExtensions)
|
|
204
|
-
: schemaExtensions
|
|
205
|
-
: schema.extensionASTNodes;
|
|
206
|
-
|
|
207
|
-
const types = [
|
|
208
|
-
// Iterate through all types, getting the type definition for each, ensuring
|
|
209
|
-
// that any type not directly referenced by a field will get created.
|
|
210
|
-
...objectValues(schema.getTypeMap()).map(type => extendNamedType(type)),
|
|
211
|
-
// Do the same with new types.
|
|
212
|
-
...objectValues(typeDefinitionMap).map(type => astBuilder.buildType(type)),
|
|
213
|
-
];
|
|
214
|
-
|
|
215
196
|
// Support both original legacy names and extended legacy names.
|
|
216
|
-
const allowedLegacyNames =
|
|
197
|
+
const allowedLegacyNames = schemaConfig.allowedLegacyNames.concat(
|
|
217
198
|
(options && options.allowedLegacyNames) || [],
|
|
218
199
|
);
|
|
219
200
|
|
|
220
201
|
// Then produce and return a Schema with these types.
|
|
221
202
|
return new GraphQLSchema({
|
|
222
|
-
|
|
223
|
-
|
|
203
|
+
// Note: While this could make early assertions to get the correctly
|
|
204
|
+
// typed values, that would throw immediately while type system
|
|
205
|
+
// validation with validateSchema() will produce more actionable results.
|
|
206
|
+
query: (getMaybeTypeByName(operationTypes.query): any),
|
|
207
|
+
mutation: (getMaybeTypeByName(operationTypes.mutation): any),
|
|
208
|
+
subscription: (getMaybeTypeByName(operationTypes.subscription): any),
|
|
209
|
+
|
|
210
|
+
types: objectValues(typeMap),
|
|
224
211
|
directives: getMergedDirectives(),
|
|
225
|
-
astNode:
|
|
226
|
-
extensionASTNodes:
|
|
212
|
+
astNode: schemaDef || schemaConfig.astNode,
|
|
213
|
+
extensionASTNodes: schemaConfig.extensionASTNodes.concat(schemaExts),
|
|
227
214
|
allowedLegacyNames,
|
|
228
215
|
});
|
|
229
216
|
|
|
230
217
|
// Below are functions used for producing this schema that have closed over
|
|
231
218
|
// this scope and have access to the schema, cache, and newly defined types.
|
|
232
219
|
|
|
220
|
+
function replaceType(type) {
|
|
221
|
+
if (isListType(type)) {
|
|
222
|
+
return new GraphQLList(replaceType(type.ofType));
|
|
223
|
+
} else if (isNonNullType(type)) {
|
|
224
|
+
return new GraphQLNonNull(replaceType(type.ofType));
|
|
225
|
+
}
|
|
226
|
+
return replaceNamedType(type);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
function replaceNamedType<T: GraphQLNamedType>(type: T): T {
|
|
230
|
+
return ((typeMap[type.name]: any): T);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
function getMaybeTypeByName(typeName: ?string): ?GraphQLNamedType {
|
|
234
|
+
return typeName ? typeMap[typeName] : null;
|
|
235
|
+
}
|
|
236
|
+
|
|
233
237
|
function getMergedDirectives(): Array<GraphQLDirective> {
|
|
234
238
|
const existingDirectives = schema.getDirectives().map(extendDirective);
|
|
235
239
|
invariant(existingDirectives, 'schema must have default directives');
|
|
236
240
|
|
|
237
241
|
return existingDirectives.concat(
|
|
238
|
-
|
|
242
|
+
directiveDefs.map(node => astBuilder.buildDirective(node)),
|
|
239
243
|
);
|
|
240
244
|
}
|
|
241
245
|
|
|
242
|
-
function
|
|
243
|
-
return type ? extendNamedType(type) : null;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
function extendNamedType<T: GraphQLNamedType>(type: T): T {
|
|
246
|
+
function extendNamedType(type: GraphQLNamedType): GraphQLNamedType {
|
|
247
247
|
if (isIntrospectionType(type) || isSpecifiedScalarType(type)) {
|
|
248
248
|
// Builtin types are not extended.
|
|
249
249
|
return type;
|
|
250
|
+
} else if (isScalarType(type)) {
|
|
251
|
+
return extendScalarType(type);
|
|
252
|
+
} else if (isObjectType(type)) {
|
|
253
|
+
return extendObjectType(type);
|
|
254
|
+
} else if (isInterfaceType(type)) {
|
|
255
|
+
return extendInterfaceType(type);
|
|
256
|
+
} else if (isUnionType(type)) {
|
|
257
|
+
return extendUnionType(type);
|
|
258
|
+
} else if (isEnumType(type)) {
|
|
259
|
+
return extendEnumType(type);
|
|
260
|
+
} else if (isInputObjectType(type)) {
|
|
261
|
+
return extendInputObjectType(type);
|
|
250
262
|
}
|
|
251
263
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
extendTypeCache[name] = extendScalarType(type);
|
|
256
|
-
} else if (isObjectType(type)) {
|
|
257
|
-
extendTypeCache[name] = extendObjectType(type);
|
|
258
|
-
} else if (isInterfaceType(type)) {
|
|
259
|
-
extendTypeCache[name] = extendInterfaceType(type);
|
|
260
|
-
} else if (isUnionType(type)) {
|
|
261
|
-
extendTypeCache[name] = extendUnionType(type);
|
|
262
|
-
} else if (isEnumType(type)) {
|
|
263
|
-
extendTypeCache[name] = extendEnumType(type);
|
|
264
|
-
} else if (isInputObjectType(type)) {
|
|
265
|
-
extendTypeCache[name] = extendInputObjectType(type);
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
return (extendTypeCache[name]: any);
|
|
264
|
+
// Not reachable. All possible types have been considered.
|
|
265
|
+
/* istanbul ignore next */
|
|
266
|
+
throw new Error(`Unexpected type: "${inspect((type: empty))}".`);
|
|
269
267
|
}
|
|
270
268
|
|
|
271
269
|
function extendDirective(directive: GraphQLDirective): GraphQLDirective {
|
|
270
|
+
const config = directive.toConfig();
|
|
271
|
+
|
|
272
272
|
return new GraphQLDirective({
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
locations: directive.locations,
|
|
276
|
-
args: extendArgs(directive.args),
|
|
277
|
-
astNode: directive.astNode,
|
|
273
|
+
...config,
|
|
274
|
+
args: mapValue(config.args, extendArg),
|
|
278
275
|
});
|
|
279
276
|
}
|
|
280
277
|
|
|
281
278
|
function extendInputObjectType(
|
|
282
279
|
type: GraphQLInputObjectType,
|
|
283
280
|
): GraphQLInputObjectType {
|
|
284
|
-
const
|
|
285
|
-
const
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
: typeExtensionsMap[name]
|
|
289
|
-
: type.extensionASTNodes;
|
|
281
|
+
const config = type.toConfig();
|
|
282
|
+
const extensions = typeExtsMap[config.name] || [];
|
|
283
|
+
const fieldNodes = flatMap(extensions, node => node.fields || []);
|
|
284
|
+
|
|
290
285
|
return new GraphQLInputObjectType({
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
286
|
+
...config,
|
|
287
|
+
fields: () => ({
|
|
288
|
+
...mapValue(config.fields, field => ({
|
|
289
|
+
...field,
|
|
290
|
+
type: replaceType(field.type),
|
|
291
|
+
})),
|
|
292
|
+
...keyValMap(
|
|
293
|
+
fieldNodes,
|
|
294
|
+
field => field.name.value,
|
|
295
|
+
field => astBuilder.buildInputField(field),
|
|
296
|
+
),
|
|
297
|
+
}),
|
|
298
|
+
extensionASTNodes: config.extensionASTNodes.concat(extensions),
|
|
296
299
|
});
|
|
297
300
|
}
|
|
298
301
|
|
|
299
|
-
function extendInputFieldMap(type: GraphQLInputObjectType) {
|
|
300
|
-
const newFieldMap = mapValue(type.getFields(), field => ({
|
|
301
|
-
description: field.description,
|
|
302
|
-
type: extendType(field.type),
|
|
303
|
-
defaultValue: field.defaultValue,
|
|
304
|
-
astNode: field.astNode,
|
|
305
|
-
}));
|
|
306
|
-
|
|
307
|
-
// If there are any extensions to the fields, apply those here.
|
|
308
|
-
const extensions = typeExtensionsMap[type.name];
|
|
309
|
-
if (extensions) {
|
|
310
|
-
for (const extension of extensions) {
|
|
311
|
-
for (const field of extension.fields) {
|
|
312
|
-
newFieldMap[field.name.value] = astBuilder.buildInputField(field);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
return newFieldMap;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
302
|
function extendEnumType(type: GraphQLEnumType): GraphQLEnumType {
|
|
321
|
-
const
|
|
322
|
-
const
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
: typeExtensionsMap[name]
|
|
326
|
-
: type.extensionASTNodes;
|
|
303
|
+
const config = type.toConfig();
|
|
304
|
+
const extensions = typeExtsMap[type.name] || [];
|
|
305
|
+
const valueNodes = flatMap(extensions, node => node.values || []);
|
|
306
|
+
|
|
327
307
|
return new GraphQLEnumType({
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
308
|
+
...config,
|
|
309
|
+
values: {
|
|
310
|
+
...config.values,
|
|
311
|
+
...keyValMap(
|
|
312
|
+
valueNodes,
|
|
313
|
+
value => value.name.value,
|
|
314
|
+
value => astBuilder.buildEnumValue(value),
|
|
315
|
+
),
|
|
316
|
+
},
|
|
317
|
+
extensionASTNodes: config.extensionASTNodes.concat(extensions),
|
|
333
318
|
});
|
|
334
319
|
}
|
|
335
320
|
|
|
336
|
-
function extendValueMap(type: GraphQLEnumType) {
|
|
337
|
-
const newValueMap = Object.create(null);
|
|
338
|
-
for (const value of type.getValues()) {
|
|
339
|
-
newValueMap[value.name] = {
|
|
340
|
-
description: value.description,
|
|
341
|
-
value: value.value,
|
|
342
|
-
deprecationReason: value.deprecationReason,
|
|
343
|
-
astNode: value.astNode,
|
|
344
|
-
};
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
// If there are any extensions to the values, apply those here.
|
|
348
|
-
const extensions = typeExtensionsMap[type.name];
|
|
349
|
-
if (extensions) {
|
|
350
|
-
for (const extension of extensions) {
|
|
351
|
-
for (const value of extension.values) {
|
|
352
|
-
newValueMap[value.name.value] = astBuilder.buildEnumValue(value);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
return newValueMap;
|
|
358
|
-
}
|
|
359
|
-
|
|
360
321
|
function extendScalarType(type: GraphQLScalarType): GraphQLScalarType {
|
|
361
|
-
const
|
|
362
|
-
const
|
|
363
|
-
|
|
364
|
-
? type.extensionASTNodes.concat(typeExtensionsMap[name])
|
|
365
|
-
: typeExtensionsMap[name]
|
|
366
|
-
: type.extensionASTNodes;
|
|
322
|
+
const config = type.toConfig();
|
|
323
|
+
const extensions = typeExtsMap[config.name] || [];
|
|
324
|
+
|
|
367
325
|
return new GraphQLScalarType({
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
astNode: type.astNode,
|
|
371
|
-
extensionASTNodes,
|
|
372
|
-
serialize: type.serialize,
|
|
373
|
-
parseValue: type.parseValue,
|
|
374
|
-
parseLiteral: type.parseLiteral,
|
|
326
|
+
...config,
|
|
327
|
+
extensionASTNodes: config.extensionASTNodes.concat(extensions),
|
|
375
328
|
});
|
|
376
329
|
}
|
|
377
330
|
|
|
378
331
|
function extendObjectType(type: GraphQLObjectType): GraphQLObjectType {
|
|
379
|
-
const
|
|
380
|
-
const
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
: typeExtensionsMap[name]
|
|
384
|
-
: type.extensionASTNodes;
|
|
385
|
-
return new GraphQLObjectType({
|
|
386
|
-
name,
|
|
387
|
-
description: type.description,
|
|
388
|
-
interfaces: () => extendImplementedInterfaces(type),
|
|
389
|
-
fields: () => extendFieldMap(type),
|
|
390
|
-
astNode: type.astNode,
|
|
391
|
-
extensionASTNodes,
|
|
392
|
-
isTypeOf: type.isTypeOf,
|
|
393
|
-
});
|
|
394
|
-
}
|
|
332
|
+
const config = type.toConfig();
|
|
333
|
+
const extensions = typeExtsMap[config.name] || [];
|
|
334
|
+
const interfaceNodes = flatMap(extensions, node => node.interfaces || []);
|
|
335
|
+
const fieldNodes = flatMap(extensions, node => node.fields || []);
|
|
395
336
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
337
|
+
return new GraphQLObjectType({
|
|
338
|
+
...config,
|
|
339
|
+
interfaces: () => [
|
|
340
|
+
...type.getInterfaces().map(replaceNamedType),
|
|
341
|
+
// Note: While this could make early assertions to get the correctly
|
|
342
|
+
// typed values, that would throw immediately while type system
|
|
343
|
+
// validation with validateSchema() will produce more actionable results.
|
|
344
|
+
...interfaceNodes.map(node => (astBuilder.getNamedType(node): any)),
|
|
345
|
+
],
|
|
346
|
+
fields: () => ({
|
|
347
|
+
...mapValue(config.fields, extendField),
|
|
348
|
+
...keyValMap(
|
|
349
|
+
fieldNodes,
|
|
350
|
+
node => node.name.value,
|
|
351
|
+
node => astBuilder.buildField(node),
|
|
352
|
+
),
|
|
407
353
|
}),
|
|
408
|
-
|
|
354
|
+
extensionASTNodes: config.extensionASTNodes.concat(extensions),
|
|
355
|
+
});
|
|
409
356
|
}
|
|
410
357
|
|
|
411
358
|
function extendInterfaceType(
|
|
412
359
|
type: GraphQLInterfaceType,
|
|
413
360
|
): GraphQLInterfaceType {
|
|
414
|
-
const
|
|
415
|
-
const
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
: typeExtensionsMap[name]
|
|
419
|
-
: type.extensionASTNodes;
|
|
361
|
+
const config = type.toConfig();
|
|
362
|
+
const extensions = typeExtsMap[config.name] || [];
|
|
363
|
+
const fieldNodes = flatMap(extensions, node => node.fields || []);
|
|
364
|
+
|
|
420
365
|
return new GraphQLInterfaceType({
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
366
|
+
...config,
|
|
367
|
+
fields: () => ({
|
|
368
|
+
...mapValue(config.fields, extendField),
|
|
369
|
+
...keyValMap(
|
|
370
|
+
fieldNodes,
|
|
371
|
+
node => node.name.value,
|
|
372
|
+
node => astBuilder.buildField(node),
|
|
373
|
+
),
|
|
374
|
+
}),
|
|
375
|
+
extensionASTNodes: config.extensionASTNodes.concat(extensions),
|
|
427
376
|
});
|
|
428
377
|
}
|
|
429
378
|
|
|
430
379
|
function extendUnionType(type: GraphQLUnionType): GraphQLUnionType {
|
|
431
|
-
const
|
|
432
|
-
const
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
: typeExtensionsMap[name]
|
|
436
|
-
: type.extensionASTNodes;
|
|
380
|
+
const config = type.toConfig();
|
|
381
|
+
const extensions = typeExtsMap[config.name] || [];
|
|
382
|
+
const typeNodes = flatMap(extensions, node => node.types || []);
|
|
383
|
+
|
|
437
384
|
return new GraphQLUnionType({
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
385
|
+
...config,
|
|
386
|
+
types: () => [
|
|
387
|
+
...type.getTypes().map(replaceNamedType),
|
|
388
|
+
// Note: While this could make early assertions to get the correctly
|
|
389
|
+
// typed values, that would throw immediately while type system
|
|
390
|
+
// validation with validateSchema() will produce more actionable results.
|
|
391
|
+
...typeNodes.map(node => (astBuilder.getNamedType(node): any)),
|
|
392
|
+
],
|
|
393
|
+
extensionASTNodes: config.extensionASTNodes.concat(extensions),
|
|
444
394
|
});
|
|
445
395
|
}
|
|
446
396
|
|
|
447
|
-
function
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
const extensions = typeExtensionsMap[type.name];
|
|
454
|
-
if (extensions) {
|
|
455
|
-
for (const extension of extensions) {
|
|
456
|
-
for (const namedType of extension.types) {
|
|
457
|
-
// Note: While this could make early assertions to get the correctly
|
|
458
|
-
// typed values, that would throw immediately while type system
|
|
459
|
-
// validation with validateSchema() will produce more actionable results.
|
|
460
|
-
possibleTypes.push((astBuilder.buildType(namedType): any));
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
return possibleTypes;
|
|
397
|
+
function extendField(field) {
|
|
398
|
+
return {
|
|
399
|
+
...field,
|
|
400
|
+
type: replaceType(field.type),
|
|
401
|
+
args: mapValue(field.args, extendArg),
|
|
402
|
+
};
|
|
465
403
|
}
|
|
466
404
|
|
|
467
|
-
function
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
// If there are any extensions to the interfaces, apply those here.
|
|
473
|
-
const extensions = typeExtensionsMap[type.name];
|
|
474
|
-
if (extensions) {
|
|
475
|
-
for (const extension of extensions) {
|
|
476
|
-
for (const namedType of extension.interfaces) {
|
|
477
|
-
// Note: While this could make early assertions to get the correctly
|
|
478
|
-
// typed values, that would throw immediately while type system
|
|
479
|
-
// validation with validateSchema() will produce more actionable results.
|
|
480
|
-
interfaces.push((astBuilder.buildType(namedType): any));
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
return interfaces;
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
function extendFieldMap(type: GraphQLObjectType | GraphQLInterfaceType) {
|
|
489
|
-
const newFieldMap = mapValue(type.getFields(), field => ({
|
|
490
|
-
description: field.description,
|
|
491
|
-
deprecationReason: field.deprecationReason,
|
|
492
|
-
type: extendType(field.type),
|
|
493
|
-
args: extendArgs(field.args),
|
|
494
|
-
astNode: field.astNode,
|
|
495
|
-
resolve: field.resolve,
|
|
496
|
-
}));
|
|
497
|
-
|
|
498
|
-
// If there are any extensions to the fields, apply those here.
|
|
499
|
-
const extensions = typeExtensionsMap[type.name];
|
|
500
|
-
if (extensions) {
|
|
501
|
-
for (const extension of extensions) {
|
|
502
|
-
for (const field of extension.fields) {
|
|
503
|
-
newFieldMap[field.name.value] = astBuilder.buildField(field);
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
return newFieldMap;
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
function extendType<T: GraphQLType>(typeDef: T): T {
|
|
512
|
-
if (isListType(typeDef)) {
|
|
513
|
-
return (GraphQLList(extendType(typeDef.ofType)): any);
|
|
514
|
-
}
|
|
515
|
-
if (isNonNullType(typeDef)) {
|
|
516
|
-
return (GraphQLNonNull(extendType(typeDef.ofType)): any);
|
|
517
|
-
}
|
|
518
|
-
return extendNamedType(typeDef);
|
|
405
|
+
function extendArg(arg) {
|
|
406
|
+
return {
|
|
407
|
+
...arg,
|
|
408
|
+
type: replaceType(arg.type),
|
|
409
|
+
};
|
|
519
410
|
}
|
|
520
411
|
}
|