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
@@ -1,19 +1,19 @@
1
- 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; }
2
-
3
1
  /**
4
- * Copyright (c) 2015-present, Facebook, Inc.
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
5
3
  *
6
4
  * This source code is licensed under the MIT license found in the
7
5
  * LICENSE file in the root directory of this source tree.
8
6
  *
9
- * strict
7
+ *
10
8
  */
9
+ import objectValues from '../polyfills/objectValues';
10
+ import inspect from '../jsutils/inspect';
11
11
  import invariant from '../jsutils/invariant';
12
12
  import keyMap from '../jsutils/keyMap';
13
13
  import keyValMap from '../jsutils/keyValMap';
14
14
  import { valueFromAST } from './valueFromAST';
15
15
  import { assertValidSDL } from '../validation/validate';
16
- import blockStringValue from '../language/blockStringValue';
16
+ import { dedentBlockStringValue } from '../language/blockString';
17
17
  import { TokenKind } from '../language/lexer';
18
18
  import { parse } from '../language/parser';
19
19
  import { getDirectiveValues } from '../execution/values';
@@ -50,38 +50,53 @@ export function buildASTSchema(documentAST, options) {
50
50
 
51
51
  var schemaDef;
52
52
  var typeDefs = [];
53
- var nodeMap = Object.create(null);
54
53
  var directiveDefs = [];
55
-
56
- for (var i = 0; i < documentAST.definitions.length; i++) {
57
- var def = documentAST.definitions[i];
58
-
59
- if (def.kind === Kind.SCHEMA_DEFINITION) {
60
- schemaDef = def;
61
- } else if (isTypeDefinitionNode(def)) {
62
- var typeName = def.name.value;
63
-
64
- if (nodeMap[typeName]) {
65
- throw new Error("Type \"".concat(typeName, "\" was defined more than once."));
54
+ var _iteratorNormalCompletion = true;
55
+ var _didIteratorError = false;
56
+ var _iteratorError = undefined;
57
+
58
+ try {
59
+ for (var _iterator = documentAST.definitions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
60
+ var def = _step.value;
61
+
62
+ if (def.kind === Kind.SCHEMA_DEFINITION) {
63
+ schemaDef = def;
64
+ } else if (isTypeDefinitionNode(def)) {
65
+ typeDefs.push(def);
66
+ } else if (def.kind === Kind.DIRECTIVE_DEFINITION) {
67
+ directiveDefs.push(def);
68
+ }
69
+ }
70
+ } catch (err) {
71
+ _didIteratorError = true;
72
+ _iteratorError = err;
73
+ } finally {
74
+ try {
75
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
76
+ _iterator.return();
77
+ }
78
+ } finally {
79
+ if (_didIteratorError) {
80
+ throw _iteratorError;
66
81
  }
67
-
68
- typeDefs.push(def);
69
- nodeMap[typeName] = def;
70
- } else if (def.kind === Kind.DIRECTIVE_DEFINITION) {
71
- directiveDefs.push(def);
72
82
  }
73
83
  }
74
84
 
85
+ var astBuilder = new ASTDefinitionBuilder(options, function (typeName) {
86
+ var type = typeMap[typeName];
87
+ !type ? invariant(0, "Type \"".concat(typeName, "\" not found in document.")) : void 0;
88
+ return type;
89
+ });
90
+ var typeMap = keyByNameNode(typeDefs, function (node) {
91
+ return astBuilder.buildType(node);
92
+ });
75
93
  var operationTypes = schemaDef ? getOperationTypes(schemaDef) : {
76
- query: nodeMap.Query,
77
- mutation: nodeMap.Mutation,
78
- subscription: nodeMap.Subscription
94
+ query: 'Query',
95
+ mutation: 'Mutation',
96
+ subscription: 'Subscription'
79
97
  };
80
- var definitionBuilder = new ASTDefinitionBuilder(nodeMap, options, function (typeRef) {
81
- throw new Error("Type \"".concat(typeRef.name.value, "\" not found in document."));
82
- });
83
98
  var directives = directiveDefs.map(function (def) {
84
- return definitionBuilder.buildDirective(def);
99
+ return astBuilder.buildDirective(def);
85
100
  }); // If specified directives were not explicitly declared, add them.
86
101
 
87
102
  if (!directives.some(function (directive) {
@@ -100,18 +115,16 @@ export function buildASTSchema(documentAST, options) {
100
115
  return directive.name === 'deprecated';
101
116
  })) {
102
117
  directives.push(GraphQLDeprecatedDirective);
103
- } // Note: While this could make early assertions to get the correctly
104
- // typed values below, that would throw immediately while type system
105
- // validation with validateSchema() will produce more actionable results.
106
-
118
+ }
107
119
 
108
120
  return new GraphQLSchema({
109
- query: operationTypes.query ? definitionBuilder.buildType(operationTypes.query) : null,
110
- mutation: operationTypes.mutation ? definitionBuilder.buildType(operationTypes.mutation) : null,
111
- subscription: operationTypes.subscription ? definitionBuilder.buildType(operationTypes.subscription) : null,
112
- types: typeDefs.map(function (node) {
113
- return definitionBuilder.buildType(node);
114
- }),
121
+ // Note: While this could make early assertions to get the correctly
122
+ // typed values below, that would throw immediately while type system
123
+ // validation with validateSchema() will produce more actionable results.
124
+ query: operationTypes.query ? typeMap[operationTypes.query] : null,
125
+ mutation: operationTypes.mutation ? typeMap[operationTypes.mutation] : null,
126
+ subscription: operationTypes.subscription ? typeMap[operationTypes.subscription] : null,
127
+ types: objectValues(typeMap),
115
128
  directives: directives,
116
129
  astNode: schemaDef,
117
130
  assumeValid: options && options.assumeValid,
@@ -120,37 +133,26 @@ export function buildASTSchema(documentAST, options) {
120
133
 
121
134
  function getOperationTypes(schema) {
122
135
  var opTypes = {};
123
- var _iteratorNormalCompletion = true;
124
- var _didIteratorError = false;
125
- var _iteratorError = undefined;
136
+ var _iteratorNormalCompletion2 = true;
137
+ var _didIteratorError2 = false;
138
+ var _iteratorError2 = undefined;
126
139
 
127
140
  try {
128
- for (var _iterator = schema.operationTypes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
129
- var operationType = _step.value;
130
- var _typeName = operationType.type.name.value;
131
- var operation = operationType.operation;
132
-
133
- if (opTypes[operation]) {
134
- throw new Error("Must provide only one ".concat(operation, " type in schema."));
135
- }
136
-
137
- if (!nodeMap[_typeName]) {
138
- throw new Error("Specified ".concat(operation, " type \"").concat(_typeName, "\" not found in document."));
139
- }
140
-
141
- opTypes[operation] = operationType.type;
141
+ for (var _iterator2 = schema.operationTypes[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
142
+ var operationType = _step2.value;
143
+ opTypes[operationType.operation] = operationType.type.name.value;
142
144
  }
143
145
  } catch (err) {
144
- _didIteratorError = true;
145
- _iteratorError = err;
146
+ _didIteratorError2 = true;
147
+ _iteratorError2 = err;
146
148
  } finally {
147
149
  try {
148
- if (!_iteratorNormalCompletion && _iterator.return != null) {
149
- _iterator.return();
150
+ if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
151
+ _iterator2.return();
150
152
  }
151
153
  } finally {
152
- if (_didIteratorError) {
153
- throw _iteratorError;
154
+ if (_didIteratorError2) {
155
+ throw _iteratorError2;
154
156
  }
155
157
  }
156
158
  }
@@ -158,89 +160,88 @@ export function buildASTSchema(documentAST, options) {
158
160
  return opTypes;
159
161
  }
160
162
  }
163
+ var stdTypeMap = keyMap(specifiedScalarTypes.concat(introspectionTypes), function (type) {
164
+ return type.name;
165
+ });
161
166
  export var ASTDefinitionBuilder =
162
167
  /*#__PURE__*/
163
168
  function () {
164
- function ASTDefinitionBuilder(typeDefinitionsMap, options, resolveType) {
165
- _defineProperty(this, "_typeDefinitionsMap", void 0);
166
-
167
- _defineProperty(this, "_options", void 0);
168
-
169
- _defineProperty(this, "_resolveType", void 0);
170
-
171
- _defineProperty(this, "_cache", void 0);
172
-
173
- this._typeDefinitionsMap = typeDefinitionsMap;
169
+ function ASTDefinitionBuilder(options, resolveType) {
174
170
  this._options = options;
175
- this._resolveType = resolveType; // Initialize to the GraphQL built in scalars and introspection types.
176
-
177
- this._cache = keyMap(specifiedScalarTypes.concat(introspectionTypes), function (type) {
178
- return type.name;
179
- });
171
+ this._resolveType = resolveType;
180
172
  }
181
173
 
182
174
  var _proto = ASTDefinitionBuilder.prototype;
183
175
 
184
- _proto.buildType = function buildType(node) {
185
- var typeName = node.name.value;
186
-
187
- if (!this._cache[typeName]) {
188
- if (node.kind === Kind.NAMED_TYPE) {
189
- var defNode = this._typeDefinitionsMap[typeName];
190
- this._cache[typeName] = defNode ? this._makeSchemaDef(defNode) : this._resolveType(node);
191
- } else {
192
- this._cache[typeName] = this._makeSchemaDef(node);
193
- }
194
- }
195
-
196
- return this._cache[typeName];
176
+ _proto.getNamedType = function getNamedType(node) {
177
+ var name = node.name.value;
178
+ return stdTypeMap[name] || this._resolveType(name);
197
179
  };
198
180
 
199
- _proto._buildWrappedType = function _buildWrappedType(typeNode) {
200
- if (typeNode.kind === Kind.LIST_TYPE) {
201
- return GraphQLList(this._buildWrappedType(typeNode.type));
181
+ _proto.getWrappedType = function getWrappedType(node) {
182
+ if (node.kind === Kind.LIST_TYPE) {
183
+ return new GraphQLList(this.getWrappedType(node.type));
202
184
  }
203
185
 
204
- if (typeNode.kind === Kind.NON_NULL_TYPE) {
205
- return GraphQLNonNull( // Note: GraphQLNonNull constructor validates this type
206
- this._buildWrappedType(typeNode.type));
186
+ if (node.kind === Kind.NON_NULL_TYPE) {
187
+ return new GraphQLNonNull(this.getWrappedType(node.type));
207
188
  }
208
189
 
209
- return this.buildType(typeNode);
190
+ return this.getNamedType(node);
210
191
  };
211
192
 
212
- _proto.buildDirective = function buildDirective(directiveNode) {
193
+ _proto.buildDirective = function buildDirective(directive) {
194
+ var _this = this;
195
+
196
+ var locations = directive.locations.map(function (_ref) {
197
+ var value = _ref.value;
198
+ return value;
199
+ });
213
200
  return new GraphQLDirective({
214
- name: directiveNode.name.value,
215
- description: getDescription(directiveNode, this._options),
216
- locations: directiveNode.locations.map(function (node) {
217
- return node.value;
201
+ name: directive.name.value,
202
+ description: getDescription(directive, this._options),
203
+ locations: locations,
204
+ args: keyByNameNode(directive.arguments || [], function (arg) {
205
+ return _this.buildArg(arg);
218
206
  }),
219
- args: directiveNode.arguments && this._makeInputValues(directiveNode.arguments),
220
- astNode: directiveNode
207
+ astNode: directive
221
208
  });
222
209
  };
223
210
 
224
211
  _proto.buildField = function buildField(field) {
212
+ var _this2 = this;
213
+
225
214
  return {
226
215
  // Note: While this could make assertions to get the correctly typed
227
216
  // value, that would throw immediately while type system validation
228
217
  // with validateSchema() will produce more actionable results.
229
- type: this._buildWrappedType(field.type),
218
+ type: this.getWrappedType(field.type),
230
219
  description: getDescription(field, this._options),
231
- args: field.arguments && this._makeInputValues(field.arguments),
220
+ args: keyByNameNode(field.arguments || [], function (arg) {
221
+ return _this2.buildArg(arg);
222
+ }),
232
223
  deprecationReason: getDeprecationReason(field),
233
224
  astNode: field
234
225
  };
235
226
  };
236
227
 
237
- _proto.buildInputField = function buildInputField(value) {
228
+ _proto.buildArg = function buildArg(value) {
238
229
  // Note: While this could make assertions to get the correctly typed
239
230
  // value, that would throw immediately while type system validation
240
- var type = this._buildWrappedType(value.type);
231
+ var type = this.getWrappedType(value.type);
232
+ return {
233
+ type: type,
234
+ description: getDescription(value, this._options),
235
+ defaultValue: valueFromAST(value.defaultValue, type),
236
+ astNode: value
237
+ };
238
+ };
241
239
 
240
+ _proto.buildInputField = function buildInputField(value) {
241
+ // Note: While this could make assertions to get the correctly typed
242
+ // value, that would throw immediately while type system validation
243
+ var type = this.getWrappedType(value.type);
242
244
  return {
243
- name: value.name.value,
244
245
  type: type,
245
246
  description: getDescription(value, this._options),
246
247
  defaultValue: valueFromAST(value.defaultValue, type),
@@ -256,129 +257,122 @@ function () {
256
257
  };
257
258
  };
258
259
 
259
- _proto._makeSchemaDef = function _makeSchemaDef(def) {
260
- switch (def.kind) {
260
+ _proto.buildType = function buildType(astNode) {
261
+ var name = astNode.name.value;
262
+
263
+ if (stdTypeMap[name]) {
264
+ return stdTypeMap[name];
265
+ }
266
+
267
+ switch (astNode.kind) {
261
268
  case Kind.OBJECT_TYPE_DEFINITION:
262
- return this._makeTypeDef(def);
269
+ return this._makeTypeDef(astNode);
263
270
 
264
271
  case Kind.INTERFACE_TYPE_DEFINITION:
265
- return this._makeInterfaceDef(def);
272
+ return this._makeInterfaceDef(astNode);
266
273
 
267
274
  case Kind.ENUM_TYPE_DEFINITION:
268
- return this._makeEnumDef(def);
275
+ return this._makeEnumDef(astNode);
269
276
 
270
277
  case Kind.UNION_TYPE_DEFINITION:
271
- return this._makeUnionDef(def);
278
+ return this._makeUnionDef(astNode);
272
279
 
273
280
  case Kind.SCALAR_TYPE_DEFINITION:
274
- return this._makeScalarDef(def);
281
+ return this._makeScalarDef(astNode);
275
282
 
276
283
  case Kind.INPUT_OBJECT_TYPE_DEFINITION:
277
- return this._makeInputObjectDef(def);
284
+ return this._makeInputObjectDef(astNode);
285
+ } // Not reachable. All possible type definition nodes have been considered.
278
286
 
279
- default:
280
- throw new Error("Type kind \"".concat(def.kind, "\" not supported."));
281
- }
282
- };
283
-
284
- _proto._makeTypeDef = function _makeTypeDef(def) {
285
- var _this = this;
286
-
287
- var interfaces = def.interfaces;
288
- return new GraphQLObjectType({
289
- name: def.name.value,
290
- description: getDescription(def, this._options),
291
- fields: function fields() {
292
- return _this._makeFieldDefMap(def);
293
- },
294
- // Note: While this could make early assertions to get the correctly
295
- // typed values, that would throw immediately while type system
296
- // validation with validateSchema() will produce more actionable results.
297
- interfaces: interfaces ? function () {
298
- return interfaces.map(function (ref) {
299
- return _this.buildType(ref);
300
- });
301
- } : [],
302
- astNode: def
303
- });
304
- };
287
+ /* istanbul ignore next */
305
288
 
306
- _proto._makeFieldDefMap = function _makeFieldDefMap(def) {
307
- var _this2 = this;
308
289
 
309
- return def.fields ? keyValMap(def.fields, function (field) {
310
- return field.name.value;
311
- }, function (field) {
312
- return _this2.buildField(field);
313
- }) : {};
290
+ throw new Error("Unexpected type definition node: \"".concat(inspect(astNode), "\"."));
314
291
  };
315
292
 
316
- _proto._makeInputValues = function _makeInputValues(values) {
293
+ _proto._makeTypeDef = function _makeTypeDef(astNode) {
317
294
  var _this3 = this;
318
295
 
319
- return keyValMap(values, function (value) {
320
- return value.name.value;
321
- }, function (value) {
322
- return _this3.buildInputField(value);
296
+ var interfaceNodes = astNode.interfaces;
297
+ var fieldNodes = astNode.fields; // Note: While this could make assertions to get the correctly typed
298
+ // values below, that would throw immediately while type system
299
+ // validation with validateSchema() will produce more actionable results.
300
+
301
+ var interfaces = interfaceNodes && interfaceNodes.length > 0 ? function () {
302
+ return interfaceNodes.map(function (ref) {
303
+ return _this3.getNamedType(ref);
304
+ });
305
+ } : [];
306
+ var fields = fieldNodes && fieldNodes.length > 0 ? function () {
307
+ return keyByNameNode(fieldNodes, function (field) {
308
+ return _this3.buildField(field);
309
+ });
310
+ } : Object.create(null);
311
+ return new GraphQLObjectType({
312
+ name: astNode.name.value,
313
+ description: getDescription(astNode, this._options),
314
+ interfaces: interfaces,
315
+ fields: fields,
316
+ astNode: astNode
323
317
  });
324
318
  };
325
319
 
326
- _proto._makeInterfaceDef = function _makeInterfaceDef(def) {
320
+ _proto._makeInterfaceDef = function _makeInterfaceDef(astNode) {
327
321
  var _this4 = this;
328
322
 
323
+ var fieldNodes = astNode.fields;
324
+ var fields = fieldNodes && fieldNodes.length > 0 ? function () {
325
+ return keyByNameNode(fieldNodes, function (field) {
326
+ return _this4.buildField(field);
327
+ });
328
+ } : Object.create(null);
329
329
  return new GraphQLInterfaceType({
330
- name: def.name.value,
331
- description: getDescription(def, this._options),
332
- fields: function fields() {
333
- return _this4._makeFieldDefMap(def);
334
- },
335
- astNode: def
330
+ name: astNode.name.value,
331
+ description: getDescription(astNode, this._options),
332
+ fields: fields,
333
+ astNode: astNode
336
334
  });
337
335
  };
338
336
 
339
- _proto._makeEnumDef = function _makeEnumDef(def) {
340
- return new GraphQLEnumType({
341
- name: def.name.value,
342
- description: getDescription(def, this._options),
343
- values: this._makeValueDefMap(def),
344
- astNode: def
345
- });
346
- };
347
-
348
- _proto._makeValueDefMap = function _makeValueDefMap(def) {
337
+ _proto._makeEnumDef = function _makeEnumDef(astNode) {
349
338
  var _this5 = this;
350
339
 
351
- return def.values ? keyValMap(def.values, function (enumValue) {
352
- return enumValue.name.value;
353
- }, function (enumValue) {
354
- return _this5.buildEnumValue(enumValue);
355
- }) : {};
340
+ var valueNodes = astNode.values || [];
341
+ return new GraphQLEnumType({
342
+ name: astNode.name.value,
343
+ description: getDescription(astNode, this._options),
344
+ values: keyByNameNode(valueNodes, function (value) {
345
+ return _this5.buildEnumValue(value);
346
+ }),
347
+ astNode: astNode
348
+ });
356
349
  };
357
350
 
358
- _proto._makeUnionDef = function _makeUnionDef(def) {
351
+ _proto._makeUnionDef = function _makeUnionDef(astNode) {
359
352
  var _this6 = this;
360
353
 
361
- var types = def.types;
354
+ var typeNodes = astNode.types; // Note: While this could make assertions to get the correctly typed
355
+ // values below, that would throw immediately while type system
356
+ // validation with validateSchema() will produce more actionable results.
357
+
358
+ var types = typeNodes && typeNodes.length > 0 ? function () {
359
+ return typeNodes.map(function (ref) {
360
+ return _this6.getNamedType(ref);
361
+ });
362
+ } : [];
362
363
  return new GraphQLUnionType({
363
- name: def.name.value,
364
- description: getDescription(def, this._options),
365
- // Note: While this could make assertions to get the correctly typed
366
- // values below, that would throw immediately while type system
367
- // validation with validateSchema() will produce more actionable results.
368
- types: types ? function () {
369
- return types.map(function (ref) {
370
- return _this6.buildType(ref);
371
- });
372
- } : [],
373
- astNode: def
364
+ name: astNode.name.value,
365
+ description: getDescription(astNode, this._options),
366
+ types: types,
367
+ astNode: astNode
374
368
  });
375
369
  };
376
370
 
377
- _proto._makeScalarDef = function _makeScalarDef(def) {
371
+ _proto._makeScalarDef = function _makeScalarDef(astNode) {
378
372
  return new GraphQLScalarType({
379
- name: def.name.value,
380
- description: getDescription(def, this._options),
381
- astNode: def,
373
+ name: astNode.name.value,
374
+ description: getDescription(astNode, this._options),
375
+ astNode: astNode,
382
376
  serialize: function serialize(value) {
383
377
  return value;
384
378
  }
@@ -388,23 +382,34 @@ function () {
388
382
  _proto._makeInputObjectDef = function _makeInputObjectDef(def) {
389
383
  var _this7 = this;
390
384
 
385
+ var fields = def.fields;
391
386
  return new GraphQLInputObjectType({
392
387
  name: def.name.value,
393
388
  description: getDescription(def, this._options),
394
- fields: function fields() {
395
- return def.fields ? _this7._makeInputValues(def.fields) : {};
396
- },
389
+ fields: fields ? function () {
390
+ return keyByNameNode(fields, function (field) {
391
+ return _this7.buildInputField(field);
392
+ });
393
+ } : Object.create(null),
397
394
  astNode: def
398
395
  });
399
396
  };
400
397
 
401
398
  return ASTDefinitionBuilder;
402
399
  }();
400
+
401
+ function keyByNameNode(list, valFn) {
402
+ return keyValMap(list, function (_ref2) {
403
+ var name = _ref2.name;
404
+ return name.value;
405
+ }, valFn);
406
+ }
403
407
  /**
404
408
  * Given a field or enum value node, returns the string value for the
405
409
  * deprecation reason.
406
410
  */
407
411
 
412
+
408
413
  function getDeprecationReason(node) {
409
414
  var deprecated = getDirectiveValues(GraphQLDeprecatedDirective, node);
410
415
  return deprecated && deprecated.reason;
@@ -430,7 +435,7 @@ export function getDescription(node, options) {
430
435
  var rawValue = getLeadingCommentBlock(node);
431
436
 
432
437
  if (rawValue !== undefined) {
433
- return blockStringValue('\n' + rawValue);
438
+ return dedentBlockStringValue('\n' + rawValue);
434
439
  }
435
440
  }
436
441
  }