graphql 14.0.2 → 14.2.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 +5 -5
- package/codecov.yml +14 -0
- package/error/GraphQLError.js +2 -2
- package/error/GraphQLError.js.flow +4 -4
- package/error/GraphQLError.mjs +2 -2
- package/error/formatError.js +2 -2
- package/error/formatError.js.flow +1 -1
- package/error/formatError.mjs +2 -2
- package/error/index.js.flow +1 -1
- package/error/index.mjs +2 -2
- package/error/locatedError.js +2 -2
- package/error/locatedError.js.flow +1 -1
- package/error/locatedError.mjs +2 -2
- package/error/printError.js +2 -2
- package/error/printError.js.flow +1 -1
- package/error/printError.mjs +2 -2
- package/error/syntaxError.js +2 -2
- package/error/syntaxError.js.flow +1 -1
- package/error/syntaxError.mjs +2 -2
- package/execution/execute.js +20 -11
- package/execution/execute.js.flow +41 -27
- package/execution/execute.mjs +19 -13
- package/execution/index.js +6 -0
- package/execution/index.js.flow +7 -2
- package/execution/index.mjs +3 -3
- package/execution/values.js +10 -10
- package/execution/values.js.flow +8 -8
- package/execution/values.mjs +9 -9
- package/graphql.js +8 -8
- package/graphql.js.flow +18 -4
- package/graphql.mjs +8 -8
- package/index.js +18 -0
- package/index.js.flow +4 -1
- package/index.mjs +4 -4
- package/jsutils/ObjMap.js.flow +1 -1
- package/jsutils/{MaybePromise.js → PromiseOrValue.js} +0 -0
- package/jsutils/{MaybePromise.js.flow → PromiseOrValue.js.flow} +2 -2
- package/jsutils/{MaybePromise.mjs → PromiseOrValue.mjs} +0 -0
- package/jsutils/dedent.js +2 -2
- package/jsutils/dedent.js.flow +1 -1
- package/jsutils/dedent.mjs +2 -2
- package/jsutils/defineToJSON.js +18 -7
- package/jsutils/defineToJSON.js.flow +15 -6
- package/jsutils/defineToJSON.mjs +15 -7
- package/jsutils/defineToStringTag.js +6 -6
- package/jsutils/defineToStringTag.js.flow +4 -4
- package/jsutils/defineToStringTag.mjs +5 -5
- package/jsutils/inspect.js +109 -23
- package/jsutils/inspect.js.flow +112 -14
- package/jsutils/inspect.mjs +108 -17
- package/jsutils/instanceOf.js +2 -2
- package/jsutils/instanceOf.js.flow +1 -1
- package/jsutils/instanceOf.mjs +2 -2
- package/jsutils/invariant.js +2 -2
- package/jsutils/invariant.js.flow +1 -1
- package/jsutils/invariant.mjs +2 -2
- 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 +2 -2
- package/jsutils/keyMap.js.flow +1 -1
- package/jsutils/keyMap.mjs +2 -2
- package/jsutils/keyValMap.js +2 -2
- package/jsutils/keyValMap.js.flow +1 -1
- package/jsutils/keyValMap.mjs +2 -2
- package/jsutils/mapValue.js +54 -0
- package/jsutils/mapValue.js.flow +27 -0
- package/jsutils/mapValue.mjs +44 -0
- package/jsutils/memoize3.js +2 -2
- package/jsutils/memoize3.js.flow +1 -1
- package/jsutils/memoize3.mjs +2 -2
- package/jsutils/nodejsCustomInspectSymbol.js +18 -0
- package/jsutils/nodejsCustomInspectSymbol.js.flow +15 -0
- package/jsutils/nodejsCustomInspectSymbol.mjs +10 -0
- package/jsutils/orList.js +18 -5
- package/jsutils/orList.js.flow +14 -8
- package/jsutils/orList.mjs +15 -5
- package/jsutils/promiseForObject.js +2 -2
- package/jsutils/promiseForObject.js.flow +1 -1
- 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.flow +1 -1
- package/language/{blockStringValue.mjs → blockString.js} +39 -3
- package/language/{blockStringValue.js.flow → blockString.js.flow} +31 -2
- package/language/{blockStringValue.js → blockString.mjs} +31 -10
- package/language/directiveLocation.js +2 -2
- package/language/directiveLocation.js.flow +1 -1
- package/language/directiveLocation.mjs +2 -2
- package/language/index.js.flow +1 -1
- package/language/index.mjs +2 -2
- package/language/kinds.js +2 -2
- package/language/kinds.js.flow +1 -1
- package/language/kinds.mjs +2 -2
- package/language/lexer.js +60 -46
- package/language/lexer.js.flow +71 -69
- package/language/lexer.mjs +58 -45
- package/language/location.js +2 -2
- package/language/location.js.flow +1 -1
- package/language/location.mjs +2 -2
- package/language/parser.js +84 -83
- package/language/parser.js.flow +85 -94
- package/language/parser.mjs +83 -83
- package/language/predicates.js +2 -2
- package/language/predicates.js.flow +1 -1
- package/language/predicates.mjs +2 -2
- package/language/printer.js +15 -17
- package/language/printer.js.flow +21 -20
- package/language/printer.mjs +14 -17
- package/language/source.js +8 -7
- package/language/source.js.flow +1 -1
- package/language/source.mjs +2 -10
- package/language/visitor.js +7 -6
- package/language/visitor.js.flow +3 -5
- package/language/visitor.mjs +7 -6
- package/package.json +5 -2
- package/polyfills/find.js +31 -0
- package/polyfills/find.js.flow +29 -0
- package/polyfills/find.mjs +23 -0
- package/polyfills/flatMap.js +38 -0
- package/polyfills/flatMap.js.flow +34 -0
- package/polyfills/flatMap.mjs +30 -0
- package/{jsutils → polyfills}/isFinite.js +2 -2
- package/{jsutils → polyfills}/isFinite.js.flow +1 -1
- package/{jsutils → polyfills}/isFinite.mjs +2 -2
- package/{jsutils → polyfills}/isInteger.js +2 -2
- package/{jsutils → polyfills}/isInteger.js.flow +1 -1
- package/{jsutils → polyfills}/isInteger.mjs +2 -2
- package/polyfills/objectEntries.js +26 -0
- package/polyfills/objectEntries.js.flow +19 -0
- package/polyfills/objectEntries.mjs +18 -0
- package/{jsutils → polyfills}/objectValues.js +2 -2
- package/{jsutils → polyfills}/objectValues.js.flow +2 -2
- package/{jsutils → polyfills}/objectValues.mjs +2 -2
- package/subscription/asyncIteratorReject.js.flow +1 -1
- package/subscription/asyncIteratorReject.mjs +2 -2
- package/subscription/index.js.flow +1 -1
- package/subscription/index.mjs +2 -2
- package/subscription/mapAsyncIterator.js.flow +5 -5
- package/subscription/mapAsyncIterator.mjs +2 -2
- package/subscription/subscribe.js +2 -2
- package/subscription/subscribe.js.flow +1 -1
- package/subscription/subscribe.mjs +2 -2
- package/type/definition.js +161 -138
- package/type/definition.js.flow +193 -57
- package/type/definition.mjs +158 -140
- package/type/directives.js +35 -29
- package/type/directives.js.flow +39 -21
- package/type/directives.mjs +34 -31
- package/type/index.js +12 -0
- package/type/index.js.flow +5 -1
- package/type/index.mjs +6 -4
- package/type/introspection.js +11 -7
- package/type/introspection.js.flow +11 -8
- package/type/introspection.mjs +11 -7
- package/type/scalars.js +45 -34
- package/type/scalars.js.flow +41 -27
- package/type/scalars.mjs +45 -27
- package/type/schema.js +134 -88
- package/type/schema.js.flow +77 -11
- package/type/schema.mjs +132 -88
- package/type/validate.js +152 -187
- package/type/validate.js.flow +12 -61
- package/type/validate.mjs +143 -188
- package/utilities/TypeInfo.js +10 -23
- package/utilities/TypeInfo.js.flow +2 -2
- package/utilities/TypeInfo.mjs +3 -25
- package/utilities/assertValidName.js +2 -2
- package/utilities/assertValidName.js.flow +1 -1
- package/utilities/assertValidName.mjs +2 -2
- package/utilities/astFromValue.js +7 -6
- package/utilities/astFromValue.js.flow +7 -6
- package/utilities/astFromValue.mjs +9 -8
- package/utilities/buildASTSchema.js +213 -197
- package/utilities/buildASTSchema.js.flow +163 -173
- package/utilities/buildASTSchema.mjs +203 -198
- package/utilities/buildClientSchema.js +39 -47
- package/utilities/buildClientSchema.js.flow +49 -58
- package/utilities/buildClientSchema.mjs +38 -46
- package/utilities/coerceValue.js +41 -21
- package/utilities/coerceValue.js.flow +44 -49
- package/utilities/coerceValue.mjs +42 -23
- package/utilities/concatAST.js +9 -13
- package/utilities/concatAST.js.flow +3 -9
- package/utilities/concatAST.mjs +6 -13
- package/utilities/extendSchema.js +256 -630
- package/utilities/extendSchema.js.flow +190 -426
- package/utilities/extendSchema.mjs +256 -631
- package/utilities/findBreakingChanges.js +8 -6
- package/utilities/findBreakingChanges.js.flow +4 -3
- package/utilities/findBreakingChanges.mjs +7 -6
- package/utilities/findDeprecatedUsages.js +4 -4
- package/utilities/findDeprecatedUsages.js.flow +3 -3
- package/utilities/findDeprecatedUsages.mjs +4 -4
- package/utilities/getOperationAST.js +2 -2
- package/utilities/getOperationAST.js.flow +1 -1
- package/utilities/getOperationAST.mjs +2 -2
- package/utilities/getOperationRootType.js +6 -6
- package/utilities/getOperationRootType.js.flow +9 -7
- package/utilities/getOperationRootType.mjs +6 -6
- package/utilities/index.js.flow +1 -1
- package/utilities/index.mjs +2 -2
- package/utilities/introspectionFromSchema.js +2 -2
- package/utilities/introspectionFromSchema.js.flow +1 -1
- package/utilities/introspectionFromSchema.mjs +2 -2
- package/utilities/introspectionQuery.js +2 -2
- package/utilities/introspectionQuery.js.flow +1 -1
- package/utilities/introspectionQuery.mjs +2 -2
- package/utilities/isValidJSValue.js +4 -2
- package/utilities/isValidJSValue.js.flow +2 -1
- package/utilities/isValidJSValue.mjs +4 -2
- package/utilities/isValidLiteralValue.js +2 -2
- package/utilities/isValidLiteralValue.js.flow +1 -1
- package/utilities/isValidLiteralValue.mjs +2 -2
- package/utilities/lexicographicSortSchema.js +86 -124
- package/utilities/lexicographicSortSchema.js.flow +68 -96
- package/utilities/lexicographicSortSchema.mjs +86 -124
- package/utilities/schemaPrinter.js +47 -73
- package/utilities/schemaPrinter.js.flow +62 -111
- package/utilities/schemaPrinter.mjs +46 -73
- package/utilities/separateOperations.js +11 -10
- package/utilities/separateOperations.js.flow +1 -1
- package/utilities/separateOperations.mjs +11 -10
- package/utilities/typeComparators.js +2 -2
- package/utilities/typeComparators.js.flow +1 -1
- package/utilities/typeComparators.mjs +2 -2
- package/utilities/typeFromAST.js +9 -4
- package/utilities/typeFromAST.js.flow +5 -2
- package/utilities/typeFromAST.mjs +6 -4
- package/utilities/valueFromAST.js +9 -6
- package/utilities/valueFromAST.js.flow +5 -3
- package/utilities/valueFromAST.mjs +7 -5
- package/utilities/valueFromASTUntyped.js +7 -4
- package/utilities/valueFromASTUntyped.js.flow +5 -2
- package/utilities/valueFromASTUntyped.mjs +6 -4
- package/validation/ValidationContext.js +57 -82
- package/validation/ValidationContext.js.flow +53 -50
- package/validation/ValidationContext.mjs +53 -78
- package/validation/index.js.flow +1 -1
- package/validation/index.mjs +2 -2
- package/validation/rules/ExecutableDefinitions.js +3 -3
- package/validation/rules/ExecutableDefinitions.js.flow +3 -3
- package/validation/rules/ExecutableDefinitions.mjs +3 -3
- package/validation/rules/FieldsOnCorrectType.js +3 -3
- package/validation/rules/FieldsOnCorrectType.js.flow +2 -2
- package/validation/rules/FieldsOnCorrectType.mjs +3 -3
- package/validation/rules/FragmentsOnCompositeTypes.js +4 -4
- package/validation/rules/FragmentsOnCompositeTypes.js.flow +3 -3
- package/validation/rules/FragmentsOnCompositeTypes.mjs +4 -4
- package/validation/rules/KnownArgumentNames.js.flow +1 -1
- package/validation/rules/KnownArgumentNames.mjs +2 -2
- package/validation/rules/KnownDirectives.js +4 -4
- package/validation/rules/KnownDirectives.js.flow +5 -4
- package/validation/rules/KnownDirectives.mjs +4 -4
- package/validation/rules/KnownFragmentNames.js +3 -3
- package/validation/rules/KnownFragmentNames.js.flow +2 -2
- package/validation/rules/KnownFragmentNames.mjs +3 -3
- package/validation/rules/KnownTypeNames.js +60 -22
- package/validation/rules/KnownTypeNames.js.flow +55 -21
- package/validation/rules/KnownTypeNames.mjs +57 -22
- package/validation/rules/LoneAnonymousOperation.js +3 -3
- package/validation/rules/LoneAnonymousOperation.js.flow +2 -2
- package/validation/rules/LoneAnonymousOperation.mjs +3 -3
- package/validation/rules/LoneSchemaDefinition.js +2 -2
- package/validation/rules/LoneSchemaDefinition.js.flow +1 -1
- package/validation/rules/LoneSchemaDefinition.mjs +2 -2
- package/validation/rules/NoFragmentCycles.js +2 -2
- package/validation/rules/NoFragmentCycles.js.flow +3 -3
- package/validation/rules/NoFragmentCycles.mjs +2 -2
- package/validation/rules/NoUndefinedVariables.js +2 -2
- package/validation/rules/NoUndefinedVariables.js.flow +1 -1
- package/validation/rules/NoUndefinedVariables.mjs +2 -2
- package/validation/rules/NoUnusedFragments.js +10 -7
- package/validation/rules/NoUnusedFragments.js.flow +4 -4
- package/validation/rules/NoUnusedFragments.mjs +10 -7
- package/validation/rules/NoUnusedVariables.js +7 -5
- package/validation/rules/NoUnusedVariables.js.flow +4 -3
- package/validation/rules/NoUnusedVariables.mjs +7 -5
- package/validation/rules/OverlappingFieldsCanBeMerged.js +58 -33
- package/validation/rules/OverlappingFieldsCanBeMerged.js.flow +4 -4
- package/validation/rules/OverlappingFieldsCanBeMerged.mjs +50 -34
- package/validation/rules/PossibleFragmentSpreads.js +4 -4
- package/validation/rules/PossibleFragmentSpreads.js.flow +3 -3
- package/validation/rules/PossibleFragmentSpreads.mjs +4 -4
- package/validation/rules/PossibleTypeExtensions.js +158 -0
- package/validation/rules/PossibleTypeExtensions.js.flow +160 -0
- package/validation/rules/PossibleTypeExtensions.mjs +146 -0
- package/validation/rules/ProvidedRequiredArguments.js +3 -3
- package/validation/rules/ProvidedRequiredArguments.js.flow +4 -4
- package/validation/rules/ProvidedRequiredArguments.mjs +5 -5
- package/validation/rules/ScalarLeafs.js +4 -4
- package/validation/rules/ScalarLeafs.js.flow +3 -3
- package/validation/rules/ScalarLeafs.mjs +4 -4
- package/validation/rules/SingleFieldSubscriptions.js +2 -2
- package/validation/rules/SingleFieldSubscriptions.js.flow +1 -1
- package/validation/rules/SingleFieldSubscriptions.mjs +2 -2
- package/validation/rules/UniqueArgumentNames.js +2 -2
- package/validation/rules/UniqueArgumentNames.js.flow +1 -1
- package/validation/rules/UniqueArgumentNames.mjs +2 -2
- package/validation/rules/UniqueDirectiveNames.js +55 -0
- package/validation/rules/UniqueDirectiveNames.js.flow +64 -0
- package/validation/rules/UniqueDirectiveNames.mjs +43 -0
- package/validation/rules/UniqueDirectivesPerLocation.js +2 -2
- package/validation/rules/UniqueDirectivesPerLocation.js.flow +1 -1
- package/validation/rules/UniqueDirectivesPerLocation.mjs +2 -2
- package/validation/rules/UniqueEnumValueNames.js +90 -0
- package/validation/rules/UniqueEnumValueNames.js.flow +85 -0
- package/validation/rules/UniqueEnumValueNames.mjs +77 -0
- package/validation/rules/UniqueFieldDefinitionNames.js +101 -0
- package/validation/rules/UniqueFieldDefinitionNames.js.flow +99 -0
- package/validation/rules/UniqueFieldDefinitionNames.mjs +88 -0
- package/validation/rules/UniqueFragmentNames.js +2 -2
- package/validation/rules/UniqueFragmentNames.js.flow +1 -1
- package/validation/rules/UniqueFragmentNames.mjs +2 -2
- package/validation/rules/UniqueInputFieldNames.js +2 -4
- package/validation/rules/UniqueInputFieldNames.js.flow +1 -2
- package/validation/rules/UniqueInputFieldNames.mjs +2 -4
- package/validation/rules/UniqueOperationNames.js +2 -2
- package/validation/rules/UniqueOperationNames.js.flow +1 -1
- package/validation/rules/UniqueOperationNames.mjs +2 -2
- package/validation/rules/UniqueOperationTypes.js +85 -0
- package/validation/rules/UniqueOperationTypes.js.flow +76 -0
- package/validation/rules/UniqueOperationTypes.mjs +73 -0
- package/validation/rules/UniqueTypeNames.js +62 -0
- package/validation/rules/UniqueTypeNames.js.flow +67 -0
- package/validation/rules/UniqueTypeNames.mjs +50 -0
- package/validation/rules/UniqueVariableNames.js +2 -2
- package/validation/rules/UniqueVariableNames.js.flow +1 -1
- package/validation/rules/UniqueVariableNames.mjs +2 -2
- package/validation/rules/ValuesOfCorrectType.js +30 -14
- package/validation/rules/ValuesOfCorrectType.js.flow +5 -6
- package/validation/rules/ValuesOfCorrectType.mjs +29 -14
- package/validation/rules/VariablesAreInputTypes.js +3 -3
- package/validation/rules/VariablesAreInputTypes.js.flow +2 -2
- package/validation/rules/VariablesAreInputTypes.mjs +3 -3
- package/validation/rules/VariablesInAllowedPosition.js +5 -5
- package/validation/rules/VariablesInAllowedPosition.js.flow +1 -1
- package/validation/rules/VariablesInAllowedPosition.mjs +5 -5
- package/validation/specifiedRules.js +15 -3
- package/validation/specifiedRules.js.flow +14 -1
- package/validation/specifiedRules.mjs +9 -3
- package/validation/validate.js +2 -2
- package/validation/validate.js.flow +1 -1
- package/validation/validate.mjs +2 -2
- package/jsutils/find.js +0 -22
- package/jsutils/find.js.flow +0 -19
- package/jsutils/find.mjs +0 -15
package/type/scalars.mjs
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
|
+
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
|
-
* Copyright (c)
|
|
4
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
5
|
*
|
|
4
6
|
* This source code is licensed under the MIT license found in the
|
|
5
7
|
* LICENSE file in the root directory of this source tree.
|
|
6
8
|
*
|
|
7
|
-
*
|
|
9
|
+
*
|
|
8
10
|
*/
|
|
11
|
+
import isFinite from '../polyfills/isFinite';
|
|
12
|
+
import isInteger from '../polyfills/isInteger';
|
|
9
13
|
import inspect from '../jsutils/inspect';
|
|
10
|
-
import isFinite from '../jsutils/isFinite';
|
|
11
|
-
import isInteger from '../jsutils/isInteger';
|
|
12
14
|
import { GraphQLScalarType, isNamedType } from './definition';
|
|
13
15
|
import { Kind } from '../language/kinds'; // As per the GraphQL Spec, Integers are only treated as valid when a valid
|
|
14
16
|
// 32-bit signed integer, providing the broadest support across platforms.
|
|
@@ -99,34 +101,52 @@ function coerceFloat(value) {
|
|
|
99
101
|
|
|
100
102
|
export var GraphQLFloat = new GraphQLScalarType({
|
|
101
103
|
name: 'Float',
|
|
102
|
-
description: 'The `Float` scalar type represents signed double-precision fractional ' + 'values as specified by ' + '[IEEE 754](
|
|
104
|
+
description: 'The `Float` scalar type represents signed double-precision fractional ' + 'values as specified by ' + '[IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point). ',
|
|
103
105
|
serialize: serializeFloat,
|
|
104
106
|
parseValue: coerceFloat,
|
|
105
107
|
parseLiteral: function parseLiteral(ast) {
|
|
106
108
|
return ast.kind === Kind.FLOAT || ast.kind === Kind.INT ? parseFloat(ast.value) : undefined;
|
|
107
109
|
}
|
|
108
|
-
});
|
|
110
|
+
}); // Support serializing objects with custom valueOf() or toJSON() functions -
|
|
111
|
+
// a common way to represent a complex value which can be represented as
|
|
112
|
+
// a string (ex: MongoDB id objects).
|
|
113
|
+
|
|
114
|
+
function serializeObject(value) {
|
|
115
|
+
if (_typeof(value) === 'object' && value !== null) {
|
|
116
|
+
if (typeof value.valueOf === 'function') {
|
|
117
|
+
var valueOfResult = value.valueOf();
|
|
118
|
+
|
|
119
|
+
if (_typeof(valueOfResult) !== 'object') {
|
|
120
|
+
return valueOfResult;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
109
123
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
124
|
+
if (typeof value.toJSON === 'function') {
|
|
125
|
+
// $FlowFixMe(>=0.90.0)
|
|
126
|
+
return value.toJSON();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return value;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function serializeString(rawValue) {
|
|
134
|
+
var value = serializeObject(rawValue); // Serialize string, boolean and number values to a string, but do not
|
|
115
135
|
// attempt to coerce object, function, symbol, or other types as strings.
|
|
116
136
|
|
|
117
|
-
if (typeof
|
|
118
|
-
return
|
|
137
|
+
if (typeof value === 'string') {
|
|
138
|
+
return value;
|
|
119
139
|
}
|
|
120
140
|
|
|
121
|
-
if (typeof
|
|
122
|
-
return
|
|
141
|
+
if (typeof value === 'boolean') {
|
|
142
|
+
return value ? 'true' : 'false';
|
|
123
143
|
}
|
|
124
144
|
|
|
125
|
-
if (isFinite(
|
|
126
|
-
return
|
|
145
|
+
if (isFinite(value)) {
|
|
146
|
+
return value.toString();
|
|
127
147
|
}
|
|
128
148
|
|
|
129
|
-
throw new TypeError("String cannot represent value: ".concat(inspect(
|
|
149
|
+
throw new TypeError("String cannot represent value: ".concat(inspect(rawValue)));
|
|
130
150
|
}
|
|
131
151
|
|
|
132
152
|
function coerceString(value) {
|
|
@@ -177,20 +197,18 @@ export var GraphQLBoolean = new GraphQLScalarType({
|
|
|
177
197
|
}
|
|
178
198
|
});
|
|
179
199
|
|
|
180
|
-
function serializeID(
|
|
181
|
-
|
|
182
|
-
// to represent an object identifier (ex. MongoDB).
|
|
183
|
-
var result = value && typeof value.valueOf === 'function' ? value.valueOf() : value;
|
|
200
|
+
function serializeID(rawValue) {
|
|
201
|
+
var value = serializeObject(rawValue);
|
|
184
202
|
|
|
185
|
-
if (typeof
|
|
186
|
-
return
|
|
203
|
+
if (typeof value === 'string') {
|
|
204
|
+
return value;
|
|
187
205
|
}
|
|
188
206
|
|
|
189
|
-
if (isInteger(
|
|
190
|
-
return String(
|
|
207
|
+
if (isInteger(value)) {
|
|
208
|
+
return String(value);
|
|
191
209
|
}
|
|
192
210
|
|
|
193
|
-
throw new TypeError("ID cannot represent value: ".concat(inspect(
|
|
211
|
+
throw new TypeError("ID cannot represent value: ".concat(inspect(rawValue)));
|
|
194
212
|
}
|
|
195
213
|
|
|
196
214
|
function coerceID(value) {
|
package/type/schema.js
CHANGED
|
@@ -4,8 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.isSchema = isSchema;
|
|
7
|
+
exports.assertSchema = assertSchema;
|
|
7
8
|
exports.GraphQLSchema = void 0;
|
|
8
9
|
|
|
10
|
+
var _find = _interopRequireDefault(require("../polyfills/find"));
|
|
11
|
+
|
|
12
|
+
var _objectValues = _interopRequireDefault(require("../polyfills/objectValues"));
|
|
13
|
+
|
|
9
14
|
var _definition = require("./definition");
|
|
10
15
|
|
|
11
16
|
var _directives = require("./directives");
|
|
@@ -16,24 +21,23 @@ var _introspection = require("./introspection");
|
|
|
16
21
|
|
|
17
22
|
var _defineToStringTag = _interopRequireDefault(require("../jsutils/defineToStringTag"));
|
|
18
23
|
|
|
19
|
-
var _find = _interopRequireDefault(require("../jsutils/find"));
|
|
20
|
-
|
|
21
24
|
var _instanceOf = _interopRequireDefault(require("../jsutils/instanceOf"));
|
|
22
25
|
|
|
23
26
|
var _invariant = _interopRequireDefault(require("../jsutils/invariant"));
|
|
24
27
|
|
|
25
|
-
var _objectValues = _interopRequireDefault(require("../jsutils/objectValues"));
|
|
26
|
-
|
|
27
28
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
28
29
|
|
|
29
30
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
30
31
|
|
|
31
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
32
|
-
|
|
33
32
|
// eslint-disable-next-line no-redeclare
|
|
34
33
|
function isSchema(schema) {
|
|
35
34
|
return (0, _instanceOf.default)(schema, GraphQLSchema);
|
|
36
35
|
}
|
|
36
|
+
|
|
37
|
+
function assertSchema(schema) {
|
|
38
|
+
!isSchema(schema) ? (0, _invariant.default)(0, "Expected ".concat((0, _inspect.default)(schema), " to be a GraphQL schema.")) : void 0;
|
|
39
|
+
return schema;
|
|
40
|
+
}
|
|
37
41
|
/**
|
|
38
42
|
* Schema Definition
|
|
39
43
|
*
|
|
@@ -48,6 +52,43 @@ function isSchema(schema) {
|
|
|
48
52
|
* mutation: MyAppMutationRootType,
|
|
49
53
|
* })
|
|
50
54
|
*
|
|
55
|
+
* Note: When the schema is constructed, by default only the types that are
|
|
56
|
+
* reachable by traversing the root types are included, other types must be
|
|
57
|
+
* explicitly referenced.
|
|
58
|
+
*
|
|
59
|
+
* Example:
|
|
60
|
+
*
|
|
61
|
+
* const characterInterface = new GraphQLInterfaceType({
|
|
62
|
+
* name: 'Character',
|
|
63
|
+
* ...
|
|
64
|
+
* });
|
|
65
|
+
*
|
|
66
|
+
* const humanType = new GraphQLObjectType({
|
|
67
|
+
* name: 'Human',
|
|
68
|
+
* interfaces: [characterInterface],
|
|
69
|
+
* ...
|
|
70
|
+
* });
|
|
71
|
+
*
|
|
72
|
+
* const droidType = new GraphQLObjectType({
|
|
73
|
+
* name: 'Droid',
|
|
74
|
+
* interfaces: [characterInterface],
|
|
75
|
+
* ...
|
|
76
|
+
* });
|
|
77
|
+
*
|
|
78
|
+
* const schema = new GraphQLSchema({
|
|
79
|
+
* query: new GraphQLObjectType({
|
|
80
|
+
* name: 'Query',
|
|
81
|
+
* fields: {
|
|
82
|
+
* hero: { type: characterInterface, ... },
|
|
83
|
+
* }
|
|
84
|
+
* }),
|
|
85
|
+
* ...
|
|
86
|
+
* // Since this schema references only the `Character` interface it's
|
|
87
|
+
* // necessary to explicitly list the types that implement it if
|
|
88
|
+
* // you want them to be included in the final schema.
|
|
89
|
+
* types: [humanType, droidType],
|
|
90
|
+
* })
|
|
91
|
+
*
|
|
51
92
|
* Note: If an array of `directives` are provided to GraphQLSchema, that will be
|
|
52
93
|
* the exact list of directives represented and allowed. If `directives` is not
|
|
53
94
|
* provided then a default set of the specified directives (e.g. @include and
|
|
@@ -68,35 +109,14 @@ function () {
|
|
|
68
109
|
// Used as a cache for validateSchema().
|
|
69
110
|
// Referenced by validateSchema().
|
|
70
111
|
function GraphQLSchema(config) {
|
|
71
|
-
_defineProperty(this, "astNode", void 0);
|
|
72
|
-
|
|
73
|
-
_defineProperty(this, "extensionASTNodes", void 0);
|
|
74
|
-
|
|
75
|
-
_defineProperty(this, "_queryType", void 0);
|
|
76
|
-
|
|
77
|
-
_defineProperty(this, "_mutationType", void 0);
|
|
78
|
-
|
|
79
|
-
_defineProperty(this, "_subscriptionType", void 0);
|
|
80
|
-
|
|
81
|
-
_defineProperty(this, "_directives", void 0);
|
|
82
|
-
|
|
83
|
-
_defineProperty(this, "_typeMap", void 0);
|
|
84
|
-
|
|
85
|
-
_defineProperty(this, "_implementations", void 0);
|
|
86
|
-
|
|
87
|
-
_defineProperty(this, "_possibleTypeMap", void 0);
|
|
88
|
-
|
|
89
|
-
_defineProperty(this, "__validationErrors", void 0);
|
|
90
|
-
|
|
91
|
-
_defineProperty(this, "__allowedLegacyNames", void 0);
|
|
92
|
-
|
|
93
112
|
// If this schema was built from a source known to be valid, then it may be
|
|
94
113
|
// marked with assumeValid to avoid an additional type system validation.
|
|
95
114
|
if (config && config.assumeValid) {
|
|
96
115
|
this.__validationErrors = [];
|
|
97
116
|
} else {
|
|
98
|
-
// Otherwise check for common mistakes during construction to produce
|
|
117
|
+
this.__validationErrors = undefined; // Otherwise check for common mistakes during construction to produce
|
|
99
118
|
// clear and early error messages.
|
|
119
|
+
|
|
100
120
|
!(_typeof(config) === 'object') ? (0, _invariant.default)(0, 'Must provide configuration object.') : void 0;
|
|
101
121
|
!(!config.types || Array.isArray(config.types)) ? (0, _invariant.default)(0, "\"types\" must be Array if provided but got: ".concat((0, _inspect.default)(config.types), ".")) : void 0;
|
|
102
122
|
!(!config.directives || Array.isArray(config.directives)) ? (0, _invariant.default)(0, '"directives" must be Array if provided but got: ' + "".concat((0, _inspect.default)(config.directives), ".")) : void 0;
|
|
@@ -126,51 +146,67 @@ function () {
|
|
|
126
146
|
|
|
127
147
|
typeMap = this._directives.reduce(typeMapDirectiveReducer, typeMap); // Storing the resulting map for reference by the schema.
|
|
128
148
|
|
|
129
|
-
this._typeMap = typeMap;
|
|
149
|
+
this._typeMap = typeMap;
|
|
150
|
+
this._possibleTypeMap = Object.create(null); // Keep track of all implementations by interface name.
|
|
130
151
|
|
|
131
152
|
this._implementations = Object.create(null);
|
|
153
|
+
var _iteratorNormalCompletion = true;
|
|
154
|
+
var _didIteratorError = false;
|
|
155
|
+
var _iteratorError = undefined;
|
|
132
156
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
var typeName = _arr[_i];
|
|
137
|
-
var type = this._typeMap[typeName];
|
|
157
|
+
try {
|
|
158
|
+
for (var _iterator = (0, _objectValues.default)(this._typeMap)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
159
|
+
var type = _step.value;
|
|
138
160
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
161
|
+
if ((0, _definition.isObjectType)(type)) {
|
|
162
|
+
var _iteratorNormalCompletion2 = true;
|
|
163
|
+
var _didIteratorError2 = false;
|
|
164
|
+
var _iteratorError2 = undefined;
|
|
143
165
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
166
|
+
try {
|
|
167
|
+
for (var _iterator2 = type.getInterfaces()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
168
|
+
var iface = _step2.value;
|
|
147
169
|
|
|
148
|
-
|
|
149
|
-
|
|
170
|
+
if ((0, _definition.isInterfaceType)(iface)) {
|
|
171
|
+
var impls = this._implementations[iface.name];
|
|
150
172
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
173
|
+
if (impls) {
|
|
174
|
+
impls.push(type);
|
|
175
|
+
} else {
|
|
176
|
+
this._implementations[iface.name] = [type];
|
|
177
|
+
}
|
|
155
178
|
}
|
|
156
179
|
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
_iteratorError = err;
|
|
161
|
-
} finally {
|
|
162
|
-
try {
|
|
163
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
164
|
-
_iterator.return();
|
|
165
|
-
}
|
|
180
|
+
} catch (err) {
|
|
181
|
+
_didIteratorError2 = true;
|
|
182
|
+
_iteratorError2 = err;
|
|
166
183
|
} finally {
|
|
167
|
-
|
|
168
|
-
|
|
184
|
+
try {
|
|
185
|
+
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
186
|
+
_iterator2.return();
|
|
187
|
+
}
|
|
188
|
+
} finally {
|
|
189
|
+
if (_didIteratorError2) {
|
|
190
|
+
throw _iteratorError2;
|
|
191
|
+
}
|
|
169
192
|
}
|
|
170
193
|
}
|
|
194
|
+
} else if ((0, _definition.isAbstractType)(type) && !this._implementations[type.name]) {
|
|
195
|
+
this._implementations[type.name] = [];
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
} catch (err) {
|
|
199
|
+
_didIteratorError = true;
|
|
200
|
+
_iteratorError = err;
|
|
201
|
+
} finally {
|
|
202
|
+
try {
|
|
203
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
204
|
+
_iterator.return();
|
|
205
|
+
}
|
|
206
|
+
} finally {
|
|
207
|
+
if (_didIteratorError) {
|
|
208
|
+
throw _iteratorError;
|
|
171
209
|
}
|
|
172
|
-
} else if ((0, _definition.isAbstractType)(type) && !this._implementations[type.name]) {
|
|
173
|
-
this._implementations[type.name] = [];
|
|
174
210
|
}
|
|
175
211
|
}
|
|
176
212
|
}
|
|
@@ -208,10 +244,6 @@ function () {
|
|
|
208
244
|
_proto.isPossibleType = function isPossibleType(abstractType, possibleType) {
|
|
209
245
|
var possibleTypeMap = this._possibleTypeMap;
|
|
210
246
|
|
|
211
|
-
if (!possibleTypeMap) {
|
|
212
|
-
this._possibleTypeMap = possibleTypeMap = Object.create(null);
|
|
213
|
-
}
|
|
214
|
-
|
|
215
247
|
if (!possibleTypeMap[abstractType.name]) {
|
|
216
248
|
var possibleTypes = this.getPossibleTypes(abstractType);
|
|
217
249
|
possibleTypeMap[abstractType.name] = possibleTypes.reduce(function (map, type) {
|
|
@@ -232,6 +264,20 @@ function () {
|
|
|
232
264
|
});
|
|
233
265
|
};
|
|
234
266
|
|
|
267
|
+
_proto.toConfig = function toConfig() {
|
|
268
|
+
return {
|
|
269
|
+
types: (0, _objectValues.default)(this.getTypeMap()),
|
|
270
|
+
directives: this.getDirectives().slice(),
|
|
271
|
+
query: this.getQueryType(),
|
|
272
|
+
mutation: this.getMutationType(),
|
|
273
|
+
subscription: this.getSubscriptionType(),
|
|
274
|
+
astNode: this.astNode,
|
|
275
|
+
extensionASTNodes: this.extensionASTNodes || [],
|
|
276
|
+
assumeValid: this.__validationErrors !== undefined,
|
|
277
|
+
allowedLegacyNames: this.__allowedLegacyNames
|
|
278
|
+
};
|
|
279
|
+
};
|
|
280
|
+
|
|
235
281
|
return GraphQLSchema;
|
|
236
282
|
}(); // Conditionally apply `[Symbol.toStringTag]` if `Symbol`s are supported
|
|
237
283
|
|
|
@@ -249,7 +295,7 @@ function typeMapReducer(map, type) {
|
|
|
249
295
|
}
|
|
250
296
|
|
|
251
297
|
if (map[type.name]) {
|
|
252
|
-
!(map[type.name] === type) ? (0, _invariant.default)(0, 'Schema must contain
|
|
298
|
+
!(map[type.name] === type) ? (0, _invariant.default)(0, 'Schema must contain uniquely named types but contains multiple ' + "types named \"".concat(type.name, "\".")) : void 0;
|
|
253
299
|
return map;
|
|
254
300
|
}
|
|
255
301
|
|
|
@@ -265,13 +311,13 @@ function typeMapReducer(map, type) {
|
|
|
265
311
|
}
|
|
266
312
|
|
|
267
313
|
if ((0, _definition.isObjectType)(type) || (0, _definition.isInterfaceType)(type)) {
|
|
268
|
-
var
|
|
269
|
-
var
|
|
270
|
-
var
|
|
314
|
+
var _iteratorNormalCompletion3 = true;
|
|
315
|
+
var _didIteratorError3 = false;
|
|
316
|
+
var _iteratorError3 = undefined;
|
|
271
317
|
|
|
272
318
|
try {
|
|
273
|
-
for (var
|
|
274
|
-
var field =
|
|
319
|
+
for (var _iterator3 = (0, _objectValues.default)(type.getFields())[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
320
|
+
var field = _step3.value;
|
|
275
321
|
|
|
276
322
|
if (field.args) {
|
|
277
323
|
var fieldArgTypes = field.args.map(function (arg) {
|
|
@@ -283,42 +329,42 @@ function typeMapReducer(map, type) {
|
|
|
283
329
|
reducedMap = typeMapReducer(reducedMap, field.type);
|
|
284
330
|
}
|
|
285
331
|
} catch (err) {
|
|
286
|
-
|
|
287
|
-
|
|
332
|
+
_didIteratorError3 = true;
|
|
333
|
+
_iteratorError3 = err;
|
|
288
334
|
} finally {
|
|
289
335
|
try {
|
|
290
|
-
if (!
|
|
291
|
-
|
|
336
|
+
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
|
|
337
|
+
_iterator3.return();
|
|
292
338
|
}
|
|
293
339
|
} finally {
|
|
294
|
-
if (
|
|
295
|
-
throw
|
|
340
|
+
if (_didIteratorError3) {
|
|
341
|
+
throw _iteratorError3;
|
|
296
342
|
}
|
|
297
343
|
}
|
|
298
344
|
}
|
|
299
345
|
}
|
|
300
346
|
|
|
301
347
|
if ((0, _definition.isInputObjectType)(type)) {
|
|
302
|
-
var
|
|
303
|
-
var
|
|
304
|
-
var
|
|
348
|
+
var _iteratorNormalCompletion4 = true;
|
|
349
|
+
var _didIteratorError4 = false;
|
|
350
|
+
var _iteratorError4 = undefined;
|
|
305
351
|
|
|
306
352
|
try {
|
|
307
|
-
for (var
|
|
308
|
-
var _field =
|
|
353
|
+
for (var _iterator4 = (0, _objectValues.default)(type.getFields())[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
|
354
|
+
var _field = _step4.value;
|
|
309
355
|
reducedMap = typeMapReducer(reducedMap, _field.type);
|
|
310
356
|
}
|
|
311
357
|
} catch (err) {
|
|
312
|
-
|
|
313
|
-
|
|
358
|
+
_didIteratorError4 = true;
|
|
359
|
+
_iteratorError4 = err;
|
|
314
360
|
} finally {
|
|
315
361
|
try {
|
|
316
|
-
if (!
|
|
317
|
-
|
|
362
|
+
if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
|
|
363
|
+
_iterator4.return();
|
|
318
364
|
}
|
|
319
365
|
} finally {
|
|
320
|
-
if (
|
|
321
|
-
throw
|
|
366
|
+
if (_didIteratorError4) {
|
|
367
|
+
throw _iteratorError4;
|
|
322
368
|
}
|
|
323
369
|
}
|
|
324
370
|
}
|
package/type/schema.js.flow
CHANGED
|
@@ -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,6 +7,8 @@
|
|
|
7
7
|
* @flow strict
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
+
import find from '../polyfills/find';
|
|
11
|
+
import objectValues from '../polyfills/objectValues';
|
|
10
12
|
import {
|
|
11
13
|
isAbstractType,
|
|
12
14
|
isObjectType,
|
|
@@ -34,10 +36,8 @@ import type { GraphQLError } from '../error/GraphQLError';
|
|
|
34
36
|
import inspect from '../jsutils/inspect';
|
|
35
37
|
import { __Schema } from './introspection';
|
|
36
38
|
import defineToStringTag from '../jsutils/defineToStringTag';
|
|
37
|
-
import find from '../jsutils/find';
|
|
38
39
|
import instanceOf from '../jsutils/instanceOf';
|
|
39
40
|
import invariant from '../jsutils/invariant';
|
|
40
|
-
import objectValues from '../jsutils/objectValues';
|
|
41
41
|
import type { ObjMap } from '../jsutils/ObjMap';
|
|
42
42
|
|
|
43
43
|
/**
|
|
@@ -50,6 +50,14 @@ export function isSchema(schema) {
|
|
|
50
50
|
return instanceOf(schema, GraphQLSchema);
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
export function assertSchema(schema: mixed): GraphQLSchema {
|
|
54
|
+
invariant(
|
|
55
|
+
isSchema(schema),
|
|
56
|
+
`Expected ${inspect(schema)} to be a GraphQL schema.`,
|
|
57
|
+
);
|
|
58
|
+
return schema;
|
|
59
|
+
}
|
|
60
|
+
|
|
53
61
|
/**
|
|
54
62
|
* Schema Definition
|
|
55
63
|
*
|
|
@@ -64,6 +72,43 @@ export function isSchema(schema) {
|
|
|
64
72
|
* mutation: MyAppMutationRootType,
|
|
65
73
|
* })
|
|
66
74
|
*
|
|
75
|
+
* Note: When the schema is constructed, by default only the types that are
|
|
76
|
+
* reachable by traversing the root types are included, other types must be
|
|
77
|
+
* explicitly referenced.
|
|
78
|
+
*
|
|
79
|
+
* Example:
|
|
80
|
+
*
|
|
81
|
+
* const characterInterface = new GraphQLInterfaceType({
|
|
82
|
+
* name: 'Character',
|
|
83
|
+
* ...
|
|
84
|
+
* });
|
|
85
|
+
*
|
|
86
|
+
* const humanType = new GraphQLObjectType({
|
|
87
|
+
* name: 'Human',
|
|
88
|
+
* interfaces: [characterInterface],
|
|
89
|
+
* ...
|
|
90
|
+
* });
|
|
91
|
+
*
|
|
92
|
+
* const droidType = new GraphQLObjectType({
|
|
93
|
+
* name: 'Droid',
|
|
94
|
+
* interfaces: [characterInterface],
|
|
95
|
+
* ...
|
|
96
|
+
* });
|
|
97
|
+
*
|
|
98
|
+
* const schema = new GraphQLSchema({
|
|
99
|
+
* query: new GraphQLObjectType({
|
|
100
|
+
* name: 'Query',
|
|
101
|
+
* fields: {
|
|
102
|
+
* hero: { type: characterInterface, ... },
|
|
103
|
+
* }
|
|
104
|
+
* }),
|
|
105
|
+
* ...
|
|
106
|
+
* // Since this schema references only the `Character` interface it's
|
|
107
|
+
* // necessary to explicitly list the types that implement it if
|
|
108
|
+
* // you want them to be included in the final schema.
|
|
109
|
+
* types: [humanType, droidType],
|
|
110
|
+
* })
|
|
111
|
+
*
|
|
67
112
|
* Note: If an array of `directives` are provided to GraphQLSchema, that will be
|
|
68
113
|
* the exact list of directives represented and allowed. If `directives` is not
|
|
69
114
|
* provided then a default set of the specified directives (e.g. @include and
|
|
@@ -85,7 +130,7 @@ export class GraphQLSchema {
|
|
|
85
130
|
_directives: $ReadOnlyArray<GraphQLDirective>;
|
|
86
131
|
_typeMap: TypeMap;
|
|
87
132
|
_implementations: ObjMap<Array<GraphQLObjectType>>;
|
|
88
|
-
_possibleTypeMap:
|
|
133
|
+
_possibleTypeMap: ObjMap<ObjMap<boolean>>;
|
|
89
134
|
// Used as a cache for validateSchema().
|
|
90
135
|
__validationErrors: ?$ReadOnlyArray<GraphQLError>;
|
|
91
136
|
// Referenced by validateSchema().
|
|
@@ -97,6 +142,8 @@ export class GraphQLSchema {
|
|
|
97
142
|
if (config && config.assumeValid) {
|
|
98
143
|
this.__validationErrors = [];
|
|
99
144
|
} else {
|
|
145
|
+
this.__validationErrors = undefined;
|
|
146
|
+
|
|
100
147
|
// Otherwise check for common mistakes during construction to produce
|
|
101
148
|
// clear and early error messages.
|
|
102
149
|
invariant(
|
|
@@ -153,10 +200,11 @@ export class GraphQLSchema {
|
|
|
153
200
|
// Storing the resulting map for reference by the schema.
|
|
154
201
|
this._typeMap = typeMap;
|
|
155
202
|
|
|
203
|
+
this._possibleTypeMap = Object.create(null);
|
|
204
|
+
|
|
156
205
|
// Keep track of all implementations by interface name.
|
|
157
206
|
this._implementations = Object.create(null);
|
|
158
|
-
for (const
|
|
159
|
-
const type = this._typeMap[typeName];
|
|
207
|
+
for (const type of objectValues(this._typeMap)) {
|
|
160
208
|
if (isObjectType(type)) {
|
|
161
209
|
for (const iface of type.getInterfaces()) {
|
|
162
210
|
if (isInterfaceType(iface)) {
|
|
@@ -207,10 +255,7 @@ export class GraphQLSchema {
|
|
|
207
255
|
abstractType: GraphQLAbstractType,
|
|
208
256
|
possibleType: GraphQLObjectType,
|
|
209
257
|
): boolean {
|
|
210
|
-
|
|
211
|
-
if (!possibleTypeMap) {
|
|
212
|
-
this._possibleTypeMap = possibleTypeMap = Object.create(null);
|
|
213
|
-
}
|
|
258
|
+
const possibleTypeMap = this._possibleTypeMap;
|
|
214
259
|
|
|
215
260
|
if (!possibleTypeMap[abstractType.name]) {
|
|
216
261
|
const possibleTypes = this.getPossibleTypes(abstractType);
|
|
@@ -230,6 +275,27 @@ export class GraphQLSchema {
|
|
|
230
275
|
getDirective(name: string): ?GraphQLDirective {
|
|
231
276
|
return find(this.getDirectives(), directive => directive.name === name);
|
|
232
277
|
}
|
|
278
|
+
|
|
279
|
+
toConfig(): {|
|
|
280
|
+
...GraphQLSchemaConfig,
|
|
281
|
+
types: Array<GraphQLNamedType>,
|
|
282
|
+
directives: Array<GraphQLDirective>,
|
|
283
|
+
extensionASTNodes: $ReadOnlyArray<SchemaExtensionNode>,
|
|
284
|
+
assumeValid: boolean,
|
|
285
|
+
allowedLegacyNames: $ReadOnlyArray<string>,
|
|
286
|
+
|} {
|
|
287
|
+
return {
|
|
288
|
+
types: objectValues(this.getTypeMap()),
|
|
289
|
+
directives: this.getDirectives().slice(),
|
|
290
|
+
query: this.getQueryType(),
|
|
291
|
+
mutation: this.getMutationType(),
|
|
292
|
+
subscription: this.getSubscriptionType(),
|
|
293
|
+
astNode: this.astNode,
|
|
294
|
+
extensionASTNodes: this.extensionASTNodes || [],
|
|
295
|
+
assumeValid: this.__validationErrors !== undefined,
|
|
296
|
+
allowedLegacyNames: this.__allowedLegacyNames,
|
|
297
|
+
};
|
|
298
|
+
}
|
|
233
299
|
}
|
|
234
300
|
|
|
235
301
|
// Conditionally apply `[Symbol.toStringTag]` if `Symbol`s are supported
|
|
@@ -278,7 +344,7 @@ function typeMapReducer(map: TypeMap, type: ?GraphQLType): TypeMap {
|
|
|
278
344
|
if (map[type.name]) {
|
|
279
345
|
invariant(
|
|
280
346
|
map[type.name] === type,
|
|
281
|
-
'Schema must contain
|
|
347
|
+
'Schema must contain uniquely named types but contains multiple ' +
|
|
282
348
|
`types named "${type.name}".`,
|
|
283
349
|
);
|
|
284
350
|
return map;
|