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/schema.mjs CHANGED
@@ -1,28 +1,30 @@
1
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
2
 
3
- 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; }
4
-
5
3
  /**
6
- * Copyright (c) 2015-present, Facebook, Inc.
4
+ * Copyright (c) Facebook, Inc. and its affiliates.
7
5
  *
8
6
  * This source code is licensed under the MIT license found in the
9
7
  * LICENSE file in the root directory of this source tree.
10
8
  *
11
- * strict
9
+ *
12
10
  */
11
+ import find from '../polyfills/find';
12
+ import objectValues from '../polyfills/objectValues';
13
13
  import { isAbstractType, isObjectType, isInterfaceType, isUnionType, isInputObjectType, isWrappingType } from './definition';
14
14
  import { GraphQLDirective, isDirective, specifiedDirectives } from './directives';
15
15
  import inspect from '../jsutils/inspect';
16
16
  import { __Schema } from './introspection';
17
17
  import defineToStringTag from '../jsutils/defineToStringTag';
18
- import find from '../jsutils/find';
19
18
  import instanceOf from '../jsutils/instanceOf';
20
19
  import invariant from '../jsutils/invariant';
21
- import objectValues from '../jsutils/objectValues';
22
20
  // eslint-disable-next-line no-redeclare
23
21
  export function isSchema(schema) {
24
22
  return instanceOf(schema, GraphQLSchema);
25
23
  }
24
+ export function assertSchema(schema) {
25
+ !isSchema(schema) ? invariant(0, "Expected ".concat(inspect(schema), " to be a GraphQL schema.")) : void 0;
26
+ return schema;
27
+ }
26
28
  /**
27
29
  * Schema Definition
28
30
  *
@@ -37,6 +39,43 @@ export function isSchema(schema) {
37
39
  * mutation: MyAppMutationRootType,
38
40
  * })
39
41
  *
42
+ * Note: When the schema is constructed, by default only the types that are
43
+ * reachable by traversing the root types are included, other types must be
44
+ * explicitly referenced.
45
+ *
46
+ * Example:
47
+ *
48
+ * const characterInterface = new GraphQLInterfaceType({
49
+ * name: 'Character',
50
+ * ...
51
+ * });
52
+ *
53
+ * const humanType = new GraphQLObjectType({
54
+ * name: 'Human',
55
+ * interfaces: [characterInterface],
56
+ * ...
57
+ * });
58
+ *
59
+ * const droidType = new GraphQLObjectType({
60
+ * name: 'Droid',
61
+ * interfaces: [characterInterface],
62
+ * ...
63
+ * });
64
+ *
65
+ * const schema = new GraphQLSchema({
66
+ * query: new GraphQLObjectType({
67
+ * name: 'Query',
68
+ * fields: {
69
+ * hero: { type: characterInterface, ... },
70
+ * }
71
+ * }),
72
+ * ...
73
+ * // Since this schema references only the `Character` interface it's
74
+ * // necessary to explicitly list the types that implement it if
75
+ * // you want them to be included in the final schema.
76
+ * types: [humanType, droidType],
77
+ * })
78
+ *
40
79
  * Note: If an array of `directives` are provided to GraphQLSchema, that will be
41
80
  * the exact list of directives represented and allowed. If `directives` is not
42
81
  * provided then a default set of the specified directives (e.g. @include and
@@ -56,35 +95,14 @@ function () {
56
95
  // Used as a cache for validateSchema().
57
96
  // Referenced by validateSchema().
58
97
  function GraphQLSchema(config) {
59
- _defineProperty(this, "astNode", void 0);
60
-
61
- _defineProperty(this, "extensionASTNodes", void 0);
62
-
63
- _defineProperty(this, "_queryType", void 0);
64
-
65
- _defineProperty(this, "_mutationType", void 0);
66
-
67
- _defineProperty(this, "_subscriptionType", void 0);
68
-
69
- _defineProperty(this, "_directives", void 0);
70
-
71
- _defineProperty(this, "_typeMap", void 0);
72
-
73
- _defineProperty(this, "_implementations", void 0);
74
-
75
- _defineProperty(this, "_possibleTypeMap", void 0);
76
-
77
- _defineProperty(this, "__validationErrors", void 0);
78
-
79
- _defineProperty(this, "__allowedLegacyNames", void 0);
80
-
81
98
  // If this schema was built from a source known to be valid, then it may be
82
99
  // marked with assumeValid to avoid an additional type system validation.
83
100
  if (config && config.assumeValid) {
84
101
  this.__validationErrors = [];
85
102
  } else {
86
- // Otherwise check for common mistakes during construction to produce
103
+ this.__validationErrors = undefined; // Otherwise check for common mistakes during construction to produce
87
104
  // clear and early error messages.
105
+
88
106
  !(_typeof(config) === 'object') ? invariant(0, 'Must provide configuration object.') : void 0;
89
107
  !(!config.types || Array.isArray(config.types)) ? invariant(0, "\"types\" must be Array if provided but got: ".concat(inspect(config.types), ".")) : void 0;
90
108
  !(!config.directives || Array.isArray(config.directives)) ? invariant(0, '"directives" must be Array if provided but got: ' + "".concat(inspect(config.directives), ".")) : void 0;
@@ -114,51 +132,67 @@ function () {
114
132
 
115
133
  typeMap = this._directives.reduce(typeMapDirectiveReducer, typeMap); // Storing the resulting map for reference by the schema.
116
134
 
117
- this._typeMap = typeMap; // Keep track of all implementations by interface name.
135
+ this._typeMap = typeMap;
136
+ this._possibleTypeMap = Object.create(null); // Keep track of all implementations by interface name.
118
137
 
119
138
  this._implementations = Object.create(null);
139
+ var _iteratorNormalCompletion = true;
140
+ var _didIteratorError = false;
141
+ var _iteratorError = undefined;
120
142
 
121
- var _arr = Object.keys(this._typeMap);
122
-
123
- for (var _i = 0; _i < _arr.length; _i++) {
124
- var typeName = _arr[_i];
125
- var type = this._typeMap[typeName];
143
+ try {
144
+ for (var _iterator = objectValues(this._typeMap)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
145
+ var type = _step.value;
126
146
 
127
- if (isObjectType(type)) {
128
- var _iteratorNormalCompletion = true;
129
- var _didIteratorError = false;
130
- var _iteratorError = undefined;
147
+ if (isObjectType(type)) {
148
+ var _iteratorNormalCompletion2 = true;
149
+ var _didIteratorError2 = false;
150
+ var _iteratorError2 = undefined;
131
151
 
132
- try {
133
- for (var _iterator = type.getInterfaces()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
134
- var iface = _step.value;
152
+ try {
153
+ for (var _iterator2 = type.getInterfaces()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
154
+ var iface = _step2.value;
135
155
 
136
- if (isInterfaceType(iface)) {
137
- var impls = this._implementations[iface.name];
156
+ if (isInterfaceType(iface)) {
157
+ var impls = this._implementations[iface.name];
138
158
 
139
- if (impls) {
140
- impls.push(type);
141
- } else {
142
- this._implementations[iface.name] = [type];
159
+ if (impls) {
160
+ impls.push(type);
161
+ } else {
162
+ this._implementations[iface.name] = [type];
163
+ }
143
164
  }
144
165
  }
145
- }
146
- } catch (err) {
147
- _didIteratorError = true;
148
- _iteratorError = err;
149
- } finally {
150
- try {
151
- if (!_iteratorNormalCompletion && _iterator.return != null) {
152
- _iterator.return();
153
- }
166
+ } catch (err) {
167
+ _didIteratorError2 = true;
168
+ _iteratorError2 = err;
154
169
  } finally {
155
- if (_didIteratorError) {
156
- throw _iteratorError;
170
+ try {
171
+ if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
172
+ _iterator2.return();
173
+ }
174
+ } finally {
175
+ if (_didIteratorError2) {
176
+ throw _iteratorError2;
177
+ }
157
178
  }
158
179
  }
180
+ } else if (isAbstractType(type) && !this._implementations[type.name]) {
181
+ this._implementations[type.name] = [];
182
+ }
183
+ }
184
+ } catch (err) {
185
+ _didIteratorError = true;
186
+ _iteratorError = err;
187
+ } finally {
188
+ try {
189
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
190
+ _iterator.return();
191
+ }
192
+ } finally {
193
+ if (_didIteratorError) {
194
+ throw _iteratorError;
159
195
  }
160
- } else if (isAbstractType(type) && !this._implementations[type.name]) {
161
- this._implementations[type.name] = [];
162
196
  }
163
197
  }
164
198
  }
@@ -196,10 +230,6 @@ function () {
196
230
  _proto.isPossibleType = function isPossibleType(abstractType, possibleType) {
197
231
  var possibleTypeMap = this._possibleTypeMap;
198
232
 
199
- if (!possibleTypeMap) {
200
- this._possibleTypeMap = possibleTypeMap = Object.create(null);
201
- }
202
-
203
233
  if (!possibleTypeMap[abstractType.name]) {
204
234
  var possibleTypes = this.getPossibleTypes(abstractType);
205
235
  possibleTypeMap[abstractType.name] = possibleTypes.reduce(function (map, type) {
@@ -220,6 +250,20 @@ function () {
220
250
  });
221
251
  };
222
252
 
253
+ _proto.toConfig = function toConfig() {
254
+ return {
255
+ types: objectValues(this.getTypeMap()),
256
+ directives: this.getDirectives().slice(),
257
+ query: this.getQueryType(),
258
+ mutation: this.getMutationType(),
259
+ subscription: this.getSubscriptionType(),
260
+ astNode: this.astNode,
261
+ extensionASTNodes: this.extensionASTNodes || [],
262
+ assumeValid: this.__validationErrors !== undefined,
263
+ allowedLegacyNames: this.__allowedLegacyNames
264
+ };
265
+ };
266
+
223
267
  return GraphQLSchema;
224
268
  }(); // Conditionally apply `[Symbol.toStringTag]` if `Symbol`s are supported
225
269
 
@@ -235,7 +279,7 @@ function typeMapReducer(map, type) {
235
279
  }
236
280
 
237
281
  if (map[type.name]) {
238
- !(map[type.name] === type) ? invariant(0, 'Schema must contain unique named types but contains multiple ' + "types named \"".concat(type.name, "\".")) : void 0;
282
+ !(map[type.name] === type) ? invariant(0, 'Schema must contain uniquely named types but contains multiple ' + "types named \"".concat(type.name, "\".")) : void 0;
239
283
  return map;
240
284
  }
241
285
 
@@ -251,13 +295,13 @@ function typeMapReducer(map, type) {
251
295
  }
252
296
 
253
297
  if (isObjectType(type) || isInterfaceType(type)) {
254
- var _iteratorNormalCompletion2 = true;
255
- var _didIteratorError2 = false;
256
- var _iteratorError2 = undefined;
298
+ var _iteratorNormalCompletion3 = true;
299
+ var _didIteratorError3 = false;
300
+ var _iteratorError3 = undefined;
257
301
 
258
302
  try {
259
- for (var _iterator2 = objectValues(type.getFields())[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
260
- var field = _step2.value;
303
+ for (var _iterator3 = objectValues(type.getFields())[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
304
+ var field = _step3.value;
261
305
 
262
306
  if (field.args) {
263
307
  var fieldArgTypes = field.args.map(function (arg) {
@@ -269,42 +313,42 @@ function typeMapReducer(map, type) {
269
313
  reducedMap = typeMapReducer(reducedMap, field.type);
270
314
  }
271
315
  } catch (err) {
272
- _didIteratorError2 = true;
273
- _iteratorError2 = err;
316
+ _didIteratorError3 = true;
317
+ _iteratorError3 = err;
274
318
  } finally {
275
319
  try {
276
- if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
277
- _iterator2.return();
320
+ if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
321
+ _iterator3.return();
278
322
  }
279
323
  } finally {
280
- if (_didIteratorError2) {
281
- throw _iteratorError2;
324
+ if (_didIteratorError3) {
325
+ throw _iteratorError3;
282
326
  }
283
327
  }
284
328
  }
285
329
  }
286
330
 
287
331
  if (isInputObjectType(type)) {
288
- var _iteratorNormalCompletion3 = true;
289
- var _didIteratorError3 = false;
290
- var _iteratorError3 = undefined;
332
+ var _iteratorNormalCompletion4 = true;
333
+ var _didIteratorError4 = false;
334
+ var _iteratorError4 = undefined;
291
335
 
292
336
  try {
293
- for (var _iterator3 = objectValues(type.getFields())[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
294
- var _field = _step3.value;
337
+ for (var _iterator4 = objectValues(type.getFields())[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
338
+ var _field = _step4.value;
295
339
  reducedMap = typeMapReducer(reducedMap, _field.type);
296
340
  }
297
341
  } catch (err) {
298
- _didIteratorError3 = true;
299
- _iteratorError3 = err;
342
+ _didIteratorError4 = true;
343
+ _iteratorError4 = err;
300
344
  } finally {
301
345
  try {
302
- if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
303
- _iterator3.return();
346
+ if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
347
+ _iterator4.return();
304
348
  }
305
349
  } finally {
306
- if (_didIteratorError3) {
307
- throw _iteratorError3;
350
+ if (_didIteratorError4) {
351
+ throw _iteratorError4;
308
352
  }
309
353
  }
310
354
  }