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.
Files changed (361) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +5 -5
  3. package/codecov.yml +14 -0
  4. package/error/GraphQLError.js +2 -2
  5. package/error/GraphQLError.js.flow +4 -4
  6. package/error/GraphQLError.mjs +2 -2
  7. package/error/formatError.js +2 -2
  8. package/error/formatError.js.flow +1 -1
  9. package/error/formatError.mjs +2 -2
  10. package/error/index.js.flow +1 -1
  11. package/error/index.mjs +2 -2
  12. package/error/locatedError.js +2 -2
  13. package/error/locatedError.js.flow +1 -1
  14. package/error/locatedError.mjs +2 -2
  15. package/error/printError.js +2 -2
  16. package/error/printError.js.flow +1 -1
  17. package/error/printError.mjs +2 -2
  18. package/error/syntaxError.js +2 -2
  19. package/error/syntaxError.js.flow +1 -1
  20. package/error/syntaxError.mjs +2 -2
  21. package/execution/execute.js +20 -11
  22. package/execution/execute.js.flow +41 -27
  23. package/execution/execute.mjs +19 -13
  24. package/execution/index.js +6 -0
  25. package/execution/index.js.flow +7 -2
  26. package/execution/index.mjs +3 -3
  27. package/execution/values.js +10 -10
  28. package/execution/values.js.flow +8 -8
  29. package/execution/values.mjs +9 -9
  30. package/graphql.js +8 -8
  31. package/graphql.js.flow +18 -4
  32. package/graphql.mjs +8 -8
  33. package/index.js +18 -0
  34. package/index.js.flow +4 -1
  35. package/index.mjs +4 -4
  36. package/jsutils/ObjMap.js.flow +1 -1
  37. package/jsutils/{MaybePromise.js → PromiseOrValue.js} +0 -0
  38. package/jsutils/{MaybePromise.js.flow → PromiseOrValue.js.flow} +2 -2
  39. package/jsutils/{MaybePromise.mjs → PromiseOrValue.mjs} +0 -0
  40. package/jsutils/dedent.js +2 -2
  41. package/jsutils/dedent.js.flow +1 -1
  42. package/jsutils/dedent.mjs +2 -2
  43. package/jsutils/defineToJSON.js +18 -7
  44. package/jsutils/defineToJSON.js.flow +15 -6
  45. package/jsutils/defineToJSON.mjs +15 -7
  46. package/jsutils/defineToStringTag.js +6 -6
  47. package/jsutils/defineToStringTag.js.flow +4 -4
  48. package/jsutils/defineToStringTag.mjs +5 -5
  49. package/jsutils/inspect.js +109 -23
  50. package/jsutils/inspect.js.flow +112 -14
  51. package/jsutils/inspect.mjs +108 -17
  52. package/jsutils/instanceOf.js +2 -2
  53. package/jsutils/instanceOf.js.flow +1 -1
  54. package/jsutils/instanceOf.mjs +2 -2
  55. package/jsutils/invariant.js +2 -2
  56. package/jsutils/invariant.js.flow +1 -1
  57. package/jsutils/invariant.mjs +2 -2
  58. package/jsutils/isInvalid.js +2 -2
  59. package/jsutils/isInvalid.js.flow +1 -1
  60. package/jsutils/isInvalid.mjs +2 -2
  61. package/jsutils/isNullish.js +2 -2
  62. package/jsutils/isNullish.js.flow +1 -1
  63. package/jsutils/isNullish.mjs +2 -2
  64. package/jsutils/isPromise.js +2 -2
  65. package/jsutils/isPromise.js.flow +1 -1
  66. package/jsutils/isPromise.mjs +2 -2
  67. package/jsutils/keyMap.js +2 -2
  68. package/jsutils/keyMap.js.flow +1 -1
  69. package/jsutils/keyMap.mjs +2 -2
  70. package/jsutils/keyValMap.js +2 -2
  71. package/jsutils/keyValMap.js.flow +1 -1
  72. package/jsutils/keyValMap.mjs +2 -2
  73. package/jsutils/mapValue.js +54 -0
  74. package/jsutils/mapValue.js.flow +27 -0
  75. package/jsutils/mapValue.mjs +44 -0
  76. package/jsutils/memoize3.js +2 -2
  77. package/jsutils/memoize3.js.flow +1 -1
  78. package/jsutils/memoize3.mjs +2 -2
  79. package/jsutils/nodejsCustomInspectSymbol.js +18 -0
  80. package/jsutils/nodejsCustomInspectSymbol.js.flow +15 -0
  81. package/jsutils/nodejsCustomInspectSymbol.mjs +10 -0
  82. package/jsutils/orList.js +18 -5
  83. package/jsutils/orList.js.flow +14 -8
  84. package/jsutils/orList.mjs +15 -5
  85. package/jsutils/promiseForObject.js +2 -2
  86. package/jsutils/promiseForObject.js.flow +1 -1
  87. package/jsutils/promiseForObject.mjs +2 -2
  88. package/jsutils/promiseReduce.js +2 -2
  89. package/jsutils/promiseReduce.js.flow +5 -5
  90. package/jsutils/promiseReduce.mjs +2 -2
  91. package/jsutils/quotedOrList.js +2 -2
  92. package/jsutils/quotedOrList.js.flow +1 -1
  93. package/jsutils/quotedOrList.mjs +2 -2
  94. package/jsutils/suggestionList.js +2 -2
  95. package/jsutils/suggestionList.js.flow +1 -1
  96. package/jsutils/suggestionList.mjs +2 -2
  97. package/language/ast.js.flow +1 -1
  98. package/language/{blockStringValue.mjs → blockString.js} +39 -3
  99. package/language/{blockStringValue.js.flow → blockString.js.flow} +31 -2
  100. package/language/{blockStringValue.js → blockString.mjs} +31 -10
  101. package/language/directiveLocation.js +2 -2
  102. package/language/directiveLocation.js.flow +1 -1
  103. package/language/directiveLocation.mjs +2 -2
  104. package/language/index.js.flow +1 -1
  105. package/language/index.mjs +2 -2
  106. package/language/kinds.js +2 -2
  107. package/language/kinds.js.flow +1 -1
  108. package/language/kinds.mjs +2 -2
  109. package/language/lexer.js +60 -46
  110. package/language/lexer.js.flow +71 -69
  111. package/language/lexer.mjs +58 -45
  112. package/language/location.js +2 -2
  113. package/language/location.js.flow +1 -1
  114. package/language/location.mjs +2 -2
  115. package/language/parser.js +84 -83
  116. package/language/parser.js.flow +85 -94
  117. package/language/parser.mjs +83 -83
  118. package/language/predicates.js +2 -2
  119. package/language/predicates.js.flow +1 -1
  120. package/language/predicates.mjs +2 -2
  121. package/language/printer.js +15 -17
  122. package/language/printer.js.flow +21 -20
  123. package/language/printer.mjs +14 -17
  124. package/language/source.js +8 -7
  125. package/language/source.js.flow +1 -1
  126. package/language/source.mjs +2 -10
  127. package/language/visitor.js +7 -6
  128. package/language/visitor.js.flow +3 -5
  129. package/language/visitor.mjs +7 -6
  130. package/package.json +5 -2
  131. package/polyfills/find.js +31 -0
  132. package/polyfills/find.js.flow +29 -0
  133. package/polyfills/find.mjs +23 -0
  134. package/polyfills/flatMap.js +38 -0
  135. package/polyfills/flatMap.js.flow +34 -0
  136. package/polyfills/flatMap.mjs +30 -0
  137. package/{jsutils → polyfills}/isFinite.js +2 -2
  138. package/{jsutils → polyfills}/isFinite.js.flow +1 -1
  139. package/{jsutils → polyfills}/isFinite.mjs +2 -2
  140. package/{jsutils → polyfills}/isInteger.js +2 -2
  141. package/{jsutils → polyfills}/isInteger.js.flow +1 -1
  142. package/{jsutils → polyfills}/isInteger.mjs +2 -2
  143. package/polyfills/objectEntries.js +26 -0
  144. package/polyfills/objectEntries.js.flow +19 -0
  145. package/polyfills/objectEntries.mjs +18 -0
  146. package/{jsutils → polyfills}/objectValues.js +2 -2
  147. package/{jsutils → polyfills}/objectValues.js.flow +2 -2
  148. package/{jsutils → polyfills}/objectValues.mjs +2 -2
  149. package/subscription/asyncIteratorReject.js.flow +1 -1
  150. package/subscription/asyncIteratorReject.mjs +2 -2
  151. package/subscription/index.js.flow +1 -1
  152. package/subscription/index.mjs +2 -2
  153. package/subscription/mapAsyncIterator.js.flow +5 -5
  154. package/subscription/mapAsyncIterator.mjs +2 -2
  155. package/subscription/subscribe.js +2 -2
  156. package/subscription/subscribe.js.flow +1 -1
  157. package/subscription/subscribe.mjs +2 -2
  158. package/type/definition.js +161 -138
  159. package/type/definition.js.flow +193 -57
  160. package/type/definition.mjs +158 -140
  161. package/type/directives.js +35 -29
  162. package/type/directives.js.flow +39 -21
  163. package/type/directives.mjs +34 -31
  164. package/type/index.js +12 -0
  165. package/type/index.js.flow +5 -1
  166. package/type/index.mjs +6 -4
  167. package/type/introspection.js +11 -7
  168. package/type/introspection.js.flow +11 -8
  169. package/type/introspection.mjs +11 -7
  170. package/type/scalars.js +45 -34
  171. package/type/scalars.js.flow +41 -27
  172. package/type/scalars.mjs +45 -27
  173. package/type/schema.js +134 -88
  174. package/type/schema.js.flow +77 -11
  175. package/type/schema.mjs +132 -88
  176. package/type/validate.js +152 -187
  177. package/type/validate.js.flow +12 -61
  178. package/type/validate.mjs +143 -188
  179. package/utilities/TypeInfo.js +10 -23
  180. package/utilities/TypeInfo.js.flow +2 -2
  181. package/utilities/TypeInfo.mjs +3 -25
  182. package/utilities/assertValidName.js +2 -2
  183. package/utilities/assertValidName.js.flow +1 -1
  184. package/utilities/assertValidName.mjs +2 -2
  185. package/utilities/astFromValue.js +7 -6
  186. package/utilities/astFromValue.js.flow +7 -6
  187. package/utilities/astFromValue.mjs +9 -8
  188. package/utilities/buildASTSchema.js +213 -197
  189. package/utilities/buildASTSchema.js.flow +163 -173
  190. package/utilities/buildASTSchema.mjs +203 -198
  191. package/utilities/buildClientSchema.js +39 -47
  192. package/utilities/buildClientSchema.js.flow +49 -58
  193. package/utilities/buildClientSchema.mjs +38 -46
  194. package/utilities/coerceValue.js +41 -21
  195. package/utilities/coerceValue.js.flow +44 -49
  196. package/utilities/coerceValue.mjs +42 -23
  197. package/utilities/concatAST.js +9 -13
  198. package/utilities/concatAST.js.flow +3 -9
  199. package/utilities/concatAST.mjs +6 -13
  200. package/utilities/extendSchema.js +256 -630
  201. package/utilities/extendSchema.js.flow +190 -426
  202. package/utilities/extendSchema.mjs +256 -631
  203. package/utilities/findBreakingChanges.js +8 -6
  204. package/utilities/findBreakingChanges.js.flow +4 -3
  205. package/utilities/findBreakingChanges.mjs +7 -6
  206. package/utilities/findDeprecatedUsages.js +4 -4
  207. package/utilities/findDeprecatedUsages.js.flow +3 -3
  208. package/utilities/findDeprecatedUsages.mjs +4 -4
  209. package/utilities/getOperationAST.js +2 -2
  210. package/utilities/getOperationAST.js.flow +1 -1
  211. package/utilities/getOperationAST.mjs +2 -2
  212. package/utilities/getOperationRootType.js +6 -6
  213. package/utilities/getOperationRootType.js.flow +9 -7
  214. package/utilities/getOperationRootType.mjs +6 -6
  215. package/utilities/index.js.flow +1 -1
  216. package/utilities/index.mjs +2 -2
  217. package/utilities/introspectionFromSchema.js +2 -2
  218. package/utilities/introspectionFromSchema.js.flow +1 -1
  219. package/utilities/introspectionFromSchema.mjs +2 -2
  220. package/utilities/introspectionQuery.js +2 -2
  221. package/utilities/introspectionQuery.js.flow +1 -1
  222. package/utilities/introspectionQuery.mjs +2 -2
  223. package/utilities/isValidJSValue.js +4 -2
  224. package/utilities/isValidJSValue.js.flow +2 -1
  225. package/utilities/isValidJSValue.mjs +4 -2
  226. package/utilities/isValidLiteralValue.js +2 -2
  227. package/utilities/isValidLiteralValue.js.flow +1 -1
  228. package/utilities/isValidLiteralValue.mjs +2 -2
  229. package/utilities/lexicographicSortSchema.js +86 -124
  230. package/utilities/lexicographicSortSchema.js.flow +68 -96
  231. package/utilities/lexicographicSortSchema.mjs +86 -124
  232. package/utilities/schemaPrinter.js +47 -73
  233. package/utilities/schemaPrinter.js.flow +62 -111
  234. package/utilities/schemaPrinter.mjs +46 -73
  235. package/utilities/separateOperations.js +11 -10
  236. package/utilities/separateOperations.js.flow +1 -1
  237. package/utilities/separateOperations.mjs +11 -10
  238. package/utilities/typeComparators.js +2 -2
  239. package/utilities/typeComparators.js.flow +1 -1
  240. package/utilities/typeComparators.mjs +2 -2
  241. package/utilities/typeFromAST.js +9 -4
  242. package/utilities/typeFromAST.js.flow +5 -2
  243. package/utilities/typeFromAST.mjs +6 -4
  244. package/utilities/valueFromAST.js +9 -6
  245. package/utilities/valueFromAST.js.flow +5 -3
  246. package/utilities/valueFromAST.mjs +7 -5
  247. package/utilities/valueFromASTUntyped.js +7 -4
  248. package/utilities/valueFromASTUntyped.js.flow +5 -2
  249. package/utilities/valueFromASTUntyped.mjs +6 -4
  250. package/validation/ValidationContext.js +57 -82
  251. package/validation/ValidationContext.js.flow +53 -50
  252. package/validation/ValidationContext.mjs +53 -78
  253. package/validation/index.js.flow +1 -1
  254. package/validation/index.mjs +2 -2
  255. package/validation/rules/ExecutableDefinitions.js +3 -3
  256. package/validation/rules/ExecutableDefinitions.js.flow +3 -3
  257. package/validation/rules/ExecutableDefinitions.mjs +3 -3
  258. package/validation/rules/FieldsOnCorrectType.js +3 -3
  259. package/validation/rules/FieldsOnCorrectType.js.flow +2 -2
  260. package/validation/rules/FieldsOnCorrectType.mjs +3 -3
  261. package/validation/rules/FragmentsOnCompositeTypes.js +4 -4
  262. package/validation/rules/FragmentsOnCompositeTypes.js.flow +3 -3
  263. package/validation/rules/FragmentsOnCompositeTypes.mjs +4 -4
  264. package/validation/rules/KnownArgumentNames.js.flow +1 -1
  265. package/validation/rules/KnownArgumentNames.mjs +2 -2
  266. package/validation/rules/KnownDirectives.js +4 -4
  267. package/validation/rules/KnownDirectives.js.flow +5 -4
  268. package/validation/rules/KnownDirectives.mjs +4 -4
  269. package/validation/rules/KnownFragmentNames.js +3 -3
  270. package/validation/rules/KnownFragmentNames.js.flow +2 -2
  271. package/validation/rules/KnownFragmentNames.mjs +3 -3
  272. package/validation/rules/KnownTypeNames.js +60 -22
  273. package/validation/rules/KnownTypeNames.js.flow +55 -21
  274. package/validation/rules/KnownTypeNames.mjs +57 -22
  275. package/validation/rules/LoneAnonymousOperation.js +3 -3
  276. package/validation/rules/LoneAnonymousOperation.js.flow +2 -2
  277. package/validation/rules/LoneAnonymousOperation.mjs +3 -3
  278. package/validation/rules/LoneSchemaDefinition.js +2 -2
  279. package/validation/rules/LoneSchemaDefinition.js.flow +1 -1
  280. package/validation/rules/LoneSchemaDefinition.mjs +2 -2
  281. package/validation/rules/NoFragmentCycles.js +2 -2
  282. package/validation/rules/NoFragmentCycles.js.flow +3 -3
  283. package/validation/rules/NoFragmentCycles.mjs +2 -2
  284. package/validation/rules/NoUndefinedVariables.js +2 -2
  285. package/validation/rules/NoUndefinedVariables.js.flow +1 -1
  286. package/validation/rules/NoUndefinedVariables.mjs +2 -2
  287. package/validation/rules/NoUnusedFragments.js +10 -7
  288. package/validation/rules/NoUnusedFragments.js.flow +4 -4
  289. package/validation/rules/NoUnusedFragments.mjs +10 -7
  290. package/validation/rules/NoUnusedVariables.js +7 -5
  291. package/validation/rules/NoUnusedVariables.js.flow +4 -3
  292. package/validation/rules/NoUnusedVariables.mjs +7 -5
  293. package/validation/rules/OverlappingFieldsCanBeMerged.js +58 -33
  294. package/validation/rules/OverlappingFieldsCanBeMerged.js.flow +4 -4
  295. package/validation/rules/OverlappingFieldsCanBeMerged.mjs +50 -34
  296. package/validation/rules/PossibleFragmentSpreads.js +4 -4
  297. package/validation/rules/PossibleFragmentSpreads.js.flow +3 -3
  298. package/validation/rules/PossibleFragmentSpreads.mjs +4 -4
  299. package/validation/rules/PossibleTypeExtensions.js +158 -0
  300. package/validation/rules/PossibleTypeExtensions.js.flow +160 -0
  301. package/validation/rules/PossibleTypeExtensions.mjs +146 -0
  302. package/validation/rules/ProvidedRequiredArguments.js +3 -3
  303. package/validation/rules/ProvidedRequiredArguments.js.flow +4 -4
  304. package/validation/rules/ProvidedRequiredArguments.mjs +5 -5
  305. package/validation/rules/ScalarLeafs.js +4 -4
  306. package/validation/rules/ScalarLeafs.js.flow +3 -3
  307. package/validation/rules/ScalarLeafs.mjs +4 -4
  308. package/validation/rules/SingleFieldSubscriptions.js +2 -2
  309. package/validation/rules/SingleFieldSubscriptions.js.flow +1 -1
  310. package/validation/rules/SingleFieldSubscriptions.mjs +2 -2
  311. package/validation/rules/UniqueArgumentNames.js +2 -2
  312. package/validation/rules/UniqueArgumentNames.js.flow +1 -1
  313. package/validation/rules/UniqueArgumentNames.mjs +2 -2
  314. package/validation/rules/UniqueDirectiveNames.js +55 -0
  315. package/validation/rules/UniqueDirectiveNames.js.flow +64 -0
  316. package/validation/rules/UniqueDirectiveNames.mjs +43 -0
  317. package/validation/rules/UniqueDirectivesPerLocation.js +2 -2
  318. package/validation/rules/UniqueDirectivesPerLocation.js.flow +1 -1
  319. package/validation/rules/UniqueDirectivesPerLocation.mjs +2 -2
  320. package/validation/rules/UniqueEnumValueNames.js +90 -0
  321. package/validation/rules/UniqueEnumValueNames.js.flow +85 -0
  322. package/validation/rules/UniqueEnumValueNames.mjs +77 -0
  323. package/validation/rules/UniqueFieldDefinitionNames.js +101 -0
  324. package/validation/rules/UniqueFieldDefinitionNames.js.flow +99 -0
  325. package/validation/rules/UniqueFieldDefinitionNames.mjs +88 -0
  326. package/validation/rules/UniqueFragmentNames.js +2 -2
  327. package/validation/rules/UniqueFragmentNames.js.flow +1 -1
  328. package/validation/rules/UniqueFragmentNames.mjs +2 -2
  329. package/validation/rules/UniqueInputFieldNames.js +2 -4
  330. package/validation/rules/UniqueInputFieldNames.js.flow +1 -2
  331. package/validation/rules/UniqueInputFieldNames.mjs +2 -4
  332. package/validation/rules/UniqueOperationNames.js +2 -2
  333. package/validation/rules/UniqueOperationNames.js.flow +1 -1
  334. package/validation/rules/UniqueOperationNames.mjs +2 -2
  335. package/validation/rules/UniqueOperationTypes.js +85 -0
  336. package/validation/rules/UniqueOperationTypes.js.flow +76 -0
  337. package/validation/rules/UniqueOperationTypes.mjs +73 -0
  338. package/validation/rules/UniqueTypeNames.js +62 -0
  339. package/validation/rules/UniqueTypeNames.js.flow +67 -0
  340. package/validation/rules/UniqueTypeNames.mjs +50 -0
  341. package/validation/rules/UniqueVariableNames.js +2 -2
  342. package/validation/rules/UniqueVariableNames.js.flow +1 -1
  343. package/validation/rules/UniqueVariableNames.mjs +2 -2
  344. package/validation/rules/ValuesOfCorrectType.js +30 -14
  345. package/validation/rules/ValuesOfCorrectType.js.flow +5 -6
  346. package/validation/rules/ValuesOfCorrectType.mjs +29 -14
  347. package/validation/rules/VariablesAreInputTypes.js +3 -3
  348. package/validation/rules/VariablesAreInputTypes.js.flow +2 -2
  349. package/validation/rules/VariablesAreInputTypes.mjs +3 -3
  350. package/validation/rules/VariablesInAllowedPosition.js +5 -5
  351. package/validation/rules/VariablesInAllowedPosition.js.flow +1 -1
  352. package/validation/rules/VariablesInAllowedPosition.mjs +5 -5
  353. package/validation/specifiedRules.js +15 -3
  354. package/validation/specifiedRules.js.flow +14 -1
  355. package/validation/specifiedRules.mjs +9 -3
  356. package/validation/validate.js +2 -2
  357. package/validation/validate.js.flow +1 -1
  358. package/validation/validate.mjs +2 -2
  359. package/jsutils/find.js +0 -22
  360. package/jsutils/find.js.flow +0 -19
  361. 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) 2015-present, Facebook, Inc.
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
- * strict
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](http://en.wikipedia.org/wiki/IEEE_floating_point). ',
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
- function serializeString(value) {
111
- // Support serializing objects with custom valueOf() functions - a common way
112
- // to represent an complex value which can be represented as a string
113
- // (ex: MongoDB id objects).
114
- var result = value && typeof value.valueOf === 'function' ? value.valueOf() : value; // Serialize string, boolean and number values to a string, but do not
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 result === 'string') {
118
- return result;
137
+ if (typeof value === 'string') {
138
+ return value;
119
139
  }
120
140
 
121
- if (typeof result === 'boolean') {
122
- return result ? 'true' : 'false';
141
+ if (typeof value === 'boolean') {
142
+ return value ? 'true' : 'false';
123
143
  }
124
144
 
125
- if (isFinite(result)) {
126
- return result.toString();
145
+ if (isFinite(value)) {
146
+ return value.toString();
127
147
  }
128
148
 
129
- throw new TypeError("String cannot represent value: ".concat(inspect(value)));
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(value) {
181
- // Support serializing objects with custom valueOf() functions - a common way
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 result === 'string') {
186
- return result;
203
+ if (typeof value === 'string') {
204
+ return value;
187
205
  }
188
206
 
189
- if (isInteger(result)) {
190
- return String(result);
207
+ if (isInteger(value)) {
208
+ return String(value);
191
209
  }
192
210
 
193
- throw new TypeError("ID cannot represent value: ".concat(inspect(value)));
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; // Keep track of all implementations by interface name.
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
- var _arr = Object.keys(this._typeMap);
134
-
135
- for (var _i = 0; _i < _arr.length; _i++) {
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
- if ((0, _definition.isObjectType)(type)) {
140
- var _iteratorNormalCompletion = true;
141
- var _didIteratorError = false;
142
- var _iteratorError = undefined;
161
+ if ((0, _definition.isObjectType)(type)) {
162
+ var _iteratorNormalCompletion2 = true;
163
+ var _didIteratorError2 = false;
164
+ var _iteratorError2 = undefined;
143
165
 
144
- try {
145
- for (var _iterator = type.getInterfaces()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
146
- var iface = _step.value;
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
- if ((0, _definition.isInterfaceType)(iface)) {
149
- var impls = this._implementations[iface.name];
170
+ if ((0, _definition.isInterfaceType)(iface)) {
171
+ var impls = this._implementations[iface.name];
150
172
 
151
- if (impls) {
152
- impls.push(type);
153
- } else {
154
- this._implementations[iface.name] = [type];
173
+ if (impls) {
174
+ impls.push(type);
175
+ } else {
176
+ this._implementations[iface.name] = [type];
177
+ }
155
178
  }
156
179
  }
157
- }
158
- } catch (err) {
159
- _didIteratorError = true;
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
- if (_didIteratorError) {
168
- throw _iteratorError;
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 unique named types but contains multiple ' + "types named \"".concat(type.name, "\".")) : void 0;
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 _iteratorNormalCompletion2 = true;
269
- var _didIteratorError2 = false;
270
- var _iteratorError2 = undefined;
314
+ var _iteratorNormalCompletion3 = true;
315
+ var _didIteratorError3 = false;
316
+ var _iteratorError3 = undefined;
271
317
 
272
318
  try {
273
- for (var _iterator2 = (0, _objectValues.default)(type.getFields())[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
274
- var field = _step2.value;
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
- _didIteratorError2 = true;
287
- _iteratorError2 = err;
332
+ _didIteratorError3 = true;
333
+ _iteratorError3 = err;
288
334
  } finally {
289
335
  try {
290
- if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
291
- _iterator2.return();
336
+ if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
337
+ _iterator3.return();
292
338
  }
293
339
  } finally {
294
- if (_didIteratorError2) {
295
- throw _iteratorError2;
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 _iteratorNormalCompletion3 = true;
303
- var _didIteratorError3 = false;
304
- var _iteratorError3 = undefined;
348
+ var _iteratorNormalCompletion4 = true;
349
+ var _didIteratorError4 = false;
350
+ var _iteratorError4 = undefined;
305
351
 
306
352
  try {
307
- for (var _iterator3 = (0, _objectValues.default)(type.getFields())[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
308
- var _field = _step3.value;
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
- _didIteratorError3 = true;
313
- _iteratorError3 = err;
358
+ _didIteratorError4 = true;
359
+ _iteratorError4 = err;
314
360
  } finally {
315
361
  try {
316
- if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
317
- _iterator3.return();
362
+ if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
363
+ _iterator4.return();
318
364
  }
319
365
  } finally {
320
- if (_didIteratorError3) {
321
- throw _iteratorError3;
366
+ if (_didIteratorError4) {
367
+ throw _iteratorError4;
322
368
  }
323
369
  }
324
370
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) 2015-present, Facebook, Inc.
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: ?ObjMap<ObjMap<boolean>>;
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 typeName of Object.keys(this._typeMap)) {
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
- let possibleTypeMap = this._possibleTypeMap;
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 unique named types but contains multiple ' +
347
+ 'Schema must contain uniquely named types but contains multiple ' +
282
348
  `types named "${type.name}".`,
283
349
  );
284
350
  return map;