graphql 14.1.1 → 14.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/error/GraphQLError.js +12 -10
  4. package/error/GraphQLError.js.flow +11 -6
  5. package/error/GraphQLError.mjs +20 -3
  6. package/error/formatError.js +2 -2
  7. package/error/formatError.js.flow +3 -3
  8. package/error/formatError.mjs +2 -2
  9. package/error/index.js +1 -1
  10. package/error/index.js.flow +5 -2
  11. package/error/index.mjs +2 -2
  12. package/error/locatedError.js +2 -2
  13. package/error/locatedError.js.flow +2 -2
  14. package/error/locatedError.mjs +2 -2
  15. package/error/printError.js +2 -2
  16. package/error/printError.js.flow +4 -5
  17. package/error/printError.mjs +2 -2
  18. package/error/syntaxError.js +2 -2
  19. package/error/syntaxError.js.flow +2 -2
  20. package/error/syntaxError.mjs +2 -2
  21. package/execution/execute.js +52 -37
  22. package/execution/execute.js.flow +66 -51
  23. package/execution/execute.mjs +50 -38
  24. package/execution/index.js +7 -1
  25. package/execution/index.js.flow +9 -4
  26. package/execution/index.mjs +3 -3
  27. package/execution/values.js +11 -11
  28. package/execution/values.js.flow +23 -19
  29. package/execution/values.mjs +11 -11
  30. package/graphql.js +13 -9
  31. package/graphql.js.flow +28 -10
  32. package/graphql.mjs +10 -9
  33. package/index.js +83 -53
  34. package/index.js.flow +60 -47
  35. package/index.mjs +26 -23
  36. package/jsutils/ObjMap.js +1 -1
  37. package/jsutils/ObjMap.js.flow +1 -1
  38. package/jsutils/ObjMap.mjs +1 -0
  39. package/jsutils/PromiseOrValue.js +1 -0
  40. package/jsutils/{MaybePromise.js.flow → PromiseOrValue.js.flow} +2 -2
  41. package/jsutils/PromiseOrValue.mjs +1 -0
  42. package/jsutils/dedent.js +2 -2
  43. package/jsutils/dedent.js.flow +1 -1
  44. package/jsutils/dedent.mjs +2 -2
  45. package/jsutils/defineToJSON.js +2 -2
  46. package/jsutils/defineToJSON.js.flow +1 -1
  47. package/jsutils/defineToJSON.mjs +2 -2
  48. package/jsutils/defineToStringTag.js +2 -2
  49. package/jsutils/defineToStringTag.js.flow +1 -1
  50. package/jsutils/defineToStringTag.mjs +2 -2
  51. package/jsutils/inspect.js +94 -19
  52. package/jsutils/inspect.js.flow +98 -20
  53. package/jsutils/inspect.mjs +94 -20
  54. package/jsutils/instanceOf.js +2 -2
  55. package/jsutils/instanceOf.js.flow +1 -1
  56. package/jsutils/instanceOf.mjs +2 -2
  57. package/jsutils/invariant.js +5 -3
  58. package/jsutils/invariant.js.flow +3 -2
  59. package/jsutils/invariant.mjs +5 -3
  60. package/jsutils/isInvalid.js +2 -2
  61. package/jsutils/isInvalid.js.flow +1 -1
  62. package/jsutils/isInvalid.mjs +2 -2
  63. package/jsutils/isNullish.js +2 -2
  64. package/jsutils/isNullish.js.flow +1 -1
  65. package/jsutils/isNullish.mjs +2 -2
  66. package/jsutils/isPromise.js +2 -2
  67. package/jsutils/isPromise.js.flow +1 -1
  68. package/jsutils/isPromise.mjs +2 -2
  69. package/jsutils/keyMap.js +4 -3
  70. package/jsutils/keyMap.js.flow +6 -6
  71. package/jsutils/keyMap.mjs +4 -3
  72. package/jsutils/keyValMap.js +4 -3
  73. package/jsutils/keyValMap.js.flow +6 -6
  74. package/jsutils/keyValMap.mjs +4 -3
  75. package/jsutils/mapValue.js +2 -2
  76. package/jsutils/mapValue.js.flow +2 -2
  77. package/jsutils/mapValue.mjs +2 -2
  78. package/jsutils/memoize3.js +3 -3
  79. package/jsutils/memoize3.js.flow +2 -2
  80. package/jsutils/memoize3.mjs +3 -3
  81. package/jsutils/nodejsCustomInspectSymbol.js +2 -2
  82. package/jsutils/nodejsCustomInspectSymbol.js.flow +1 -1
  83. package/jsutils/nodejsCustomInspectSymbol.mjs +2 -2
  84. package/jsutils/orList.js +2 -2
  85. package/jsutils/orList.js.flow +1 -1
  86. package/jsutils/orList.mjs +2 -2
  87. package/jsutils/promiseForObject.js +2 -2
  88. package/jsutils/promiseForObject.js.flow +2 -2
  89. package/jsutils/promiseForObject.mjs +2 -2
  90. package/jsutils/promiseReduce.js +2 -2
  91. package/jsutils/promiseReduce.js.flow +5 -5
  92. package/jsutils/promiseReduce.mjs +2 -2
  93. package/jsutils/quotedOrList.js +2 -2
  94. package/jsutils/quotedOrList.js.flow +1 -1
  95. package/jsutils/quotedOrList.mjs +2 -2
  96. package/jsutils/suggestionList.js +2 -2
  97. package/jsutils/suggestionList.js.flow +1 -1
  98. package/jsutils/suggestionList.mjs +2 -2
  99. package/language/ast.js +1 -1
  100. package/language/ast.js.flow +3 -3
  101. package/language/ast.mjs +1 -0
  102. package/language/blockString.js +114 -0
  103. package/language/blockString.js.flow +102 -0
  104. package/language/blockString.mjs +104 -0
  105. package/language/directiveLocation.js +2 -2
  106. package/language/directiveLocation.js.flow +1 -1
  107. package/language/directiveLocation.mjs +2 -2
  108. package/language/index.js +9 -9
  109. package/language/index.js.flow +10 -5
  110. package/language/index.mjs +3 -3
  111. package/language/kinds.js +2 -2
  112. package/language/kinds.js.flow +1 -1
  113. package/language/kinds.mjs +2 -2
  114. package/language/lexer.js +52 -44
  115. package/language/lexer.js.flow +65 -54
  116. package/language/lexer.mjs +49 -43
  117. package/language/location.js +2 -2
  118. package/language/location.js.flow +2 -2
  119. package/language/location.mjs +2 -2
  120. package/language/parser.js +75 -67
  121. package/language/parser.js.flow +138 -127
  122. package/language/parser.mjs +76 -68
  123. package/language/predicates.js +2 -2
  124. package/language/predicates.js.flow +2 -2
  125. package/language/predicates.mjs +2 -2
  126. package/language/printer.js +6 -14
  127. package/language/printer.js.flow +8 -17
  128. package/language/printer.mjs +5 -14
  129. package/language/source.js +2 -2
  130. package/language/source.js.flow +1 -1
  131. package/language/source.mjs +2 -2
  132. package/language/visitor.js +4 -6
  133. package/language/visitor.js.flow +3 -3
  134. package/language/visitor.mjs +4 -6
  135. package/package.json +1 -1
  136. package/polyfills/find.js +2 -2
  137. package/polyfills/find.js.flow +1 -1
  138. package/polyfills/find.mjs +2 -2
  139. package/polyfills/flatMap.js +38 -0
  140. package/polyfills/flatMap.js.flow +34 -0
  141. package/polyfills/flatMap.mjs +30 -0
  142. package/polyfills/isFinite.js +2 -2
  143. package/polyfills/isFinite.js.flow +1 -1
  144. package/polyfills/isFinite.mjs +2 -2
  145. package/polyfills/isInteger.js +2 -2
  146. package/polyfills/isInteger.js.flow +1 -1
  147. package/polyfills/isInteger.mjs +2 -2
  148. package/polyfills/objectEntries.js +2 -2
  149. package/polyfills/objectEntries.js.flow +2 -2
  150. package/polyfills/objectEntries.mjs +2 -2
  151. package/polyfills/objectValues.js +2 -2
  152. package/polyfills/objectValues.js.flow +2 -2
  153. package/polyfills/objectValues.mjs +2 -2
  154. package/subscription/asyncIteratorReject.js +1 -1
  155. package/subscription/asyncIteratorReject.js.flow +1 -1
  156. package/subscription/asyncIteratorReject.mjs +2 -2
  157. package/subscription/index.js +1 -1
  158. package/subscription/index.js.flow +1 -1
  159. package/subscription/index.mjs +2 -2
  160. package/subscription/mapAsyncIterator.js +1 -1
  161. package/subscription/mapAsyncIterator.js.flow +5 -5
  162. package/subscription/mapAsyncIterator.mjs +2 -2
  163. package/subscription/subscribe.js +2 -2
  164. package/subscription/subscribe.js.flow +6 -6
  165. package/subscription/subscribe.mjs +2 -2
  166. package/type/definition.js +138 -22
  167. package/type/definition.js.flow +184 -36
  168. package/type/definition.mjs +136 -23
  169. package/type/directives.js +14 -3
  170. package/type/directives.js.flow +24 -11
  171. package/type/directives.mjs +16 -5
  172. package/type/index.js +7 -7
  173. package/type/index.js.flow +8 -4
  174. package/type/index.mjs +10 -6
  175. package/type/introspection.js +14 -9
  176. package/type/introspection.js.flow +12 -18
  177. package/type/introspection.mjs +14 -9
  178. package/type/scalars.js +5 -4
  179. package/type/scalars.js.flow +4 -10
  180. package/type/scalars.mjs +7 -6
  181. package/type/schema.js +55 -3
  182. package/type/schema.js.flow +73 -17
  183. package/type/schema.mjs +56 -4
  184. package/type/validate.js +19 -47
  185. package/type/validate.js.flow +17 -29
  186. package/type/validate.mjs +18 -47
  187. package/utilities/TypeInfo.js +93 -73
  188. package/utilities/TypeInfo.js.flow +30 -23
  189. package/utilities/TypeInfo.mjs +93 -73
  190. package/utilities/assertValidName.js +2 -2
  191. package/utilities/assertValidName.js.flow +2 -2
  192. package/utilities/assertValidName.mjs +2 -2
  193. package/utilities/astFromValue.js +5 -4
  194. package/utilities/astFromValue.js.flow +8 -7
  195. package/utilities/astFromValue.mjs +7 -6
  196. package/utilities/buildASTSchema.js +63 -62
  197. package/utilities/buildASTSchema.js.flow +92 -108
  198. package/utilities/buildASTSchema.mjs +61 -62
  199. package/utilities/buildClientSchema.js +38 -45
  200. package/utilities/buildClientSchema.js.flow +66 -79
  201. package/utilities/buildClientSchema.mjs +37 -44
  202. package/utilities/coerceValue.js +6 -7
  203. package/utilities/coerceValue.js.flow +5 -4
  204. package/utilities/coerceValue.mjs +7 -8
  205. package/utilities/concatAST.js +9 -13
  206. package/utilities/concatAST.js.flow +4 -10
  207. package/utilities/concatAST.mjs +6 -13
  208. package/utilities/extendSchema.js +219 -511
  209. package/utilities/extendSchema.js.flow +195 -304
  210. package/utilities/extendSchema.mjs +218 -512
  211. package/utilities/findBreakingChanges.js +54 -95
  212. package/utilities/findBreakingChanges.js.flow +49 -47
  213. package/utilities/findBreakingChanges.mjs +80 -95
  214. package/utilities/findDeprecatedUsages.js +4 -4
  215. package/utilities/findDeprecatedUsages.js.flow +5 -5
  216. package/utilities/findDeprecatedUsages.mjs +4 -4
  217. package/utilities/getOperationAST.js +2 -2
  218. package/utilities/getOperationAST.js.flow +5 -2
  219. package/utilities/getOperationAST.mjs +2 -2
  220. package/utilities/getOperationRootType.js +24 -24
  221. package/utilities/getOperationRootType.js.flow +40 -35
  222. package/utilities/getOperationRootType.mjs +24 -24
  223. package/utilities/index.js +9 -1
  224. package/utilities/index.js.flow +13 -6
  225. package/utilities/index.mjs +13 -8
  226. package/utilities/introspectionFromSchema.js +6 -4
  227. package/utilities/introspectionFromSchema.js.flow +8 -7
  228. package/utilities/introspectionFromSchema.mjs +6 -5
  229. package/utilities/introspectionQuery.js +2 -2
  230. package/utilities/introspectionQuery.js.flow +2 -2
  231. package/utilities/introspectionQuery.mjs +2 -2
  232. package/utilities/isValidJSValue.js +4 -2
  233. package/utilities/isValidJSValue.js.flow +3 -2
  234. package/utilities/isValidJSValue.mjs +4 -2
  235. package/utilities/isValidLiteralValue.js +2 -2
  236. package/utilities/isValidLiteralValue.js.flow +4 -4
  237. package/utilities/isValidLiteralValue.mjs +2 -2
  238. package/utilities/lexicographicSortSchema.js +84 -123
  239. package/utilities/lexicographicSortSchema.js.flow +68 -96
  240. package/utilities/lexicographicSortSchema.mjs +84 -123
  241. package/utilities/schemaPrinter.js +47 -73
  242. package/utilities/schemaPrinter.js.flow +69 -120
  243. package/utilities/schemaPrinter.mjs +45 -72
  244. package/utilities/separateOperations.js +8 -12
  245. package/utilities/separateOperations.js.flow +6 -3
  246. package/utilities/separateOperations.mjs +8 -12
  247. package/utilities/stripIgnoredCharacters.js +140 -0
  248. package/utilities/stripIgnoredCharacters.js.flow +129 -0
  249. package/utilities/stripIgnoredCharacters.mjs +127 -0
  250. package/utilities/typeComparators.js +2 -2
  251. package/utilities/typeComparators.js.flow +4 -3
  252. package/utilities/typeComparators.mjs +2 -2
  253. package/utilities/typeFromAST.js +9 -4
  254. package/utilities/typeFromAST.js.flow +15 -9
  255. package/utilities/typeFromAST.mjs +6 -4
  256. package/utilities/valueFromAST.js +7 -4
  257. package/utilities/valueFromAST.js.flow +7 -5
  258. package/utilities/valueFromAST.mjs +6 -4
  259. package/utilities/valueFromASTUntyped.js +11 -6
  260. package/utilities/valueFromASTUntyped.js.flow +9 -5
  261. package/utilities/valueFromASTUntyped.mjs +10 -6
  262. package/validation/ValidationContext.js +1 -1
  263. package/validation/ValidationContext.js.flow +19 -20
  264. package/validation/ValidationContext.mjs +2 -2
  265. package/validation/index.js +1 -1
  266. package/validation/index.js.flow +2 -1
  267. package/validation/index.mjs +3 -2
  268. package/validation/rules/ExecutableDefinitions.js +3 -3
  269. package/validation/rules/ExecutableDefinitions.js.flow +4 -4
  270. package/validation/rules/ExecutableDefinitions.mjs +3 -3
  271. package/validation/rules/FieldsOnCorrectType.js +3 -3
  272. package/validation/rules/FieldsOnCorrectType.js.flow +7 -7
  273. package/validation/rules/FieldsOnCorrectType.mjs +3 -3
  274. package/validation/rules/FragmentsOnCompositeTypes.js +4 -4
  275. package/validation/rules/FragmentsOnCompositeTypes.js.flow +5 -5
  276. package/validation/rules/FragmentsOnCompositeTypes.mjs +4 -4
  277. package/validation/rules/KnownArgumentNames.js +1 -1
  278. package/validation/rules/KnownArgumentNames.js.flow +5 -5
  279. package/validation/rules/KnownArgumentNames.mjs +2 -2
  280. package/validation/rules/KnownDirectives.js +8 -6
  281. package/validation/rules/KnownDirectives.js.flow +11 -9
  282. package/validation/rules/KnownDirectives.mjs +8 -6
  283. package/validation/rules/KnownFragmentNames.js +3 -3
  284. package/validation/rules/KnownFragmentNames.js.flow +4 -4
  285. package/validation/rules/KnownFragmentNames.mjs +3 -3
  286. package/validation/rules/KnownTypeNames.js +2 -2
  287. package/validation/rules/KnownTypeNames.js.flow +6 -6
  288. package/validation/rules/KnownTypeNames.mjs +2 -2
  289. package/validation/rules/LoneAnonymousOperation.js +3 -3
  290. package/validation/rules/LoneAnonymousOperation.js.flow +4 -4
  291. package/validation/rules/LoneAnonymousOperation.mjs +3 -3
  292. package/validation/rules/LoneSchemaDefinition.js +2 -2
  293. package/validation/rules/LoneSchemaDefinition.js.flow +3 -3
  294. package/validation/rules/LoneSchemaDefinition.mjs +2 -2
  295. package/validation/rules/NoFragmentCycles.js +2 -2
  296. package/validation/rules/NoFragmentCycles.js.flow +4 -4
  297. package/validation/rules/NoFragmentCycles.mjs +2 -2
  298. package/validation/rules/NoUndefinedVariables.js +2 -2
  299. package/validation/rules/NoUndefinedVariables.js.flow +3 -3
  300. package/validation/rules/NoUndefinedVariables.mjs +2 -2
  301. package/validation/rules/NoUnusedFragments.js +7 -7
  302. package/validation/rules/NoUnusedFragments.js.flow +4 -4
  303. package/validation/rules/NoUnusedFragments.mjs +7 -7
  304. package/validation/rules/NoUnusedVariables.js +5 -5
  305. package/validation/rules/NoUnusedVariables.js.flow +6 -5
  306. package/validation/rules/NoUnusedVariables.mjs +5 -5
  307. package/validation/rules/OverlappingFieldsCanBeMerged.js +26 -23
  308. package/validation/rules/OverlappingFieldsCanBeMerged.js.flow +17 -17
  309. package/validation/rules/OverlappingFieldsCanBeMerged.mjs +26 -23
  310. package/validation/rules/PossibleFragmentSpreads.js +4 -4
  311. package/validation/rules/PossibleFragmentSpreads.js.flow +5 -5
  312. package/validation/rules/PossibleFragmentSpreads.mjs +4 -4
  313. package/validation/rules/PossibleTypeExtensions.js +3 -3
  314. package/validation/rules/PossibleTypeExtensions.js.flow +5 -5
  315. package/validation/rules/PossibleTypeExtensions.mjs +4 -4
  316. package/validation/rules/ProvidedRequiredArguments.js +6 -8
  317. package/validation/rules/ProvidedRequiredArguments.js.flow +8 -8
  318. package/validation/rules/ProvidedRequiredArguments.mjs +7 -9
  319. package/validation/rules/ScalarLeafs.js +4 -4
  320. package/validation/rules/ScalarLeafs.js.flow +6 -6
  321. package/validation/rules/ScalarLeafs.mjs +4 -4
  322. package/validation/rules/SingleFieldSubscriptions.js +2 -2
  323. package/validation/rules/SingleFieldSubscriptions.js.flow +4 -4
  324. package/validation/rules/SingleFieldSubscriptions.mjs +2 -2
  325. package/validation/rules/UniqueArgumentNames.js +2 -2
  326. package/validation/rules/UniqueArgumentNames.js.flow +3 -3
  327. package/validation/rules/UniqueArgumentNames.mjs +2 -2
  328. package/validation/rules/UniqueDirectiveNames.js +2 -2
  329. package/validation/rules/UniqueDirectiveNames.js.flow +3 -3
  330. package/validation/rules/UniqueDirectiveNames.mjs +2 -2
  331. package/validation/rules/UniqueDirectivesPerLocation.js +3 -2
  332. package/validation/rules/UniqueDirectivesPerLocation.js.flow +4 -4
  333. package/validation/rules/UniqueDirectivesPerLocation.mjs +3 -2
  334. package/validation/rules/UniqueEnumValueNames.js +4 -8
  335. package/validation/rules/UniqueEnumValueNames.js.flow +6 -8
  336. package/validation/rules/UniqueEnumValueNames.mjs +4 -8
  337. package/validation/rules/UniqueFieldDefinitionNames.js +4 -8
  338. package/validation/rules/UniqueFieldDefinitionNames.js.flow +6 -8
  339. package/validation/rules/UniqueFieldDefinitionNames.mjs +4 -8
  340. package/validation/rules/UniqueFragmentNames.js +2 -2
  341. package/validation/rules/UniqueFragmentNames.js.flow +3 -3
  342. package/validation/rules/UniqueFragmentNames.mjs +2 -2
  343. package/validation/rules/UniqueInputFieldNames.js +2 -4
  344. package/validation/rules/UniqueInputFieldNames.js.flow +3 -4
  345. package/validation/rules/UniqueInputFieldNames.mjs +2 -4
  346. package/validation/rules/UniqueOperationNames.js +2 -2
  347. package/validation/rules/UniqueOperationNames.js.flow +3 -3
  348. package/validation/rules/UniqueOperationNames.mjs +2 -2
  349. package/validation/rules/UniqueOperationTypes.js +2 -2
  350. package/validation/rules/UniqueOperationTypes.js.flow +3 -3
  351. package/validation/rules/UniqueOperationTypes.mjs +2 -2
  352. package/validation/rules/UniqueTypeNames.js +2 -2
  353. package/validation/rules/UniqueTypeNames.js.flow +4 -4
  354. package/validation/rules/UniqueTypeNames.mjs +2 -2
  355. package/validation/rules/UniqueVariableNames.js +2 -2
  356. package/validation/rules/UniqueVariableNames.js.flow +4 -4
  357. package/validation/rules/UniqueVariableNames.mjs +2 -2
  358. package/validation/rules/ValuesOfCorrectType.js +2 -2
  359. package/validation/rules/ValuesOfCorrectType.js.flow +5 -5
  360. package/validation/rules/ValuesOfCorrectType.mjs +2 -2
  361. package/validation/rules/VariablesAreInputTypes.js +3 -3
  362. package/validation/rules/VariablesAreInputTypes.js.flow +5 -5
  363. package/validation/rules/VariablesAreInputTypes.mjs +3 -3
  364. package/validation/rules/VariablesInAllowedPosition.js +3 -3
  365. package/validation/rules/VariablesInAllowedPosition.js.flow +7 -8
  366. package/validation/rules/VariablesInAllowedPosition.mjs +3 -3
  367. package/validation/specifiedRules.js +2 -2
  368. package/validation/specifiedRules.js.flow +13 -6
  369. package/validation/specifiedRules.mjs +7 -7
  370. package/validation/validate.js +2 -2
  371. package/validation/validate.js.flow +10 -6
  372. package/validation/validate.mjs +2 -2
  373. package/jsutils/MaybePromise.js +0 -1
  374. package/jsutils/MaybePromise.mjs +0 -0
  375. package/language/blockStringValue.js +0 -73
  376. package/language/blockStringValue.js.flow +0 -64
  377. package/language/blockStringValue.mjs +0 -66
@@ -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,12 +7,13 @@
7
7
  *
8
8
  */
9
9
  import objectValues from '../polyfills/objectValues';
10
+ import inspect from '../jsutils/inspect';
10
11
  import invariant from '../jsutils/invariant';
11
12
  import keyMap from '../jsutils/keyMap';
12
13
  import keyValMap from '../jsutils/keyValMap';
13
14
  import { valueFromAST } from './valueFromAST';
14
15
  import { assertValidSDL } from '../validation/validate';
15
- import blockStringValue from '../language/blockStringValue';
16
+ import { dedentBlockStringValue } from '../language/blockString';
16
17
  import { TokenKind } from '../language/lexer';
17
18
  import { parse } from '../language/parser';
18
19
  import { getDirectiveValues } from '../execution/values';
@@ -48,7 +49,7 @@ export function buildASTSchema(documentAST, options) {
48
49
  }
49
50
 
50
51
  var schemaDef;
51
- var nodeMap = Object.create(null);
52
+ var typeDefs = [];
52
53
  var directiveDefs = [];
53
54
  var _iteratorNormalCompletion = true;
54
55
  var _didIteratorError = false;
@@ -61,7 +62,7 @@ export function buildASTSchema(documentAST, options) {
61
62
  if (def.kind === Kind.SCHEMA_DEFINITION) {
62
63
  schemaDef = def;
63
64
  } else if (isTypeDefinitionNode(def)) {
64
- nodeMap[def.name.value] = def;
65
+ typeDefs.push(def);
65
66
  } else if (def.kind === Kind.DIRECTIVE_DEFINITION) {
66
67
  directiveDefs.push(def);
67
68
  }
@@ -81,16 +82,21 @@ export function buildASTSchema(documentAST, options) {
81
82
  }
82
83
  }
83
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
+ });
84
93
  var operationTypes = schemaDef ? getOperationTypes(schemaDef) : {
85
- query: nodeMap.Query,
86
- mutation: nodeMap.Mutation,
87
- subscription: nodeMap.Subscription
94
+ query: 'Query',
95
+ mutation: 'Mutation',
96
+ subscription: 'Subscription'
88
97
  };
89
- var definitionBuilder = new ASTDefinitionBuilder(nodeMap, options, function (typeName) {
90
- throw new Error("Type \"".concat(typeName, "\" not found in document."));
91
- });
92
98
  var directives = directiveDefs.map(function (def) {
93
- return definitionBuilder.buildDirective(def);
99
+ return astBuilder.buildDirective(def);
94
100
  }); // If specified directives were not explicitly declared, add them.
95
101
 
96
102
  if (!directives.some(function (directive) {
@@ -109,18 +115,16 @@ export function buildASTSchema(documentAST, options) {
109
115
  return directive.name === 'deprecated';
110
116
  })) {
111
117
  directives.push(GraphQLDeprecatedDirective);
112
- } // Note: While this could make early assertions to get the correctly
113
- // typed values below, that would throw immediately while type system
114
- // validation with validateSchema() will produce more actionable results.
115
-
118
+ }
116
119
 
117
120
  return new GraphQLSchema({
118
- query: operationTypes.query ? definitionBuilder.buildType(operationTypes.query) : null,
119
- mutation: operationTypes.mutation ? definitionBuilder.buildType(operationTypes.mutation) : null,
120
- subscription: operationTypes.subscription ? definitionBuilder.buildType(operationTypes.subscription) : null,
121
- types: objectValues(nodeMap).map(function (node) {
122
- return definitionBuilder.buildType(node);
123
- }),
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),
124
128
  directives: directives,
125
129
  astNode: schemaDef,
126
130
  assumeValid: options && options.assumeValid,
@@ -136,7 +140,7 @@ export function buildASTSchema(documentAST, options) {
136
140
  try {
137
141
  for (var _iterator2 = schema.operationTypes[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
138
142
  var operationType = _step2.value;
139
- opTypes[operationType.operation] = operationType.type;
143
+ opTypes[operationType.operation] = operationType.type.name.value;
140
144
  }
141
145
  } catch (err) {
142
146
  _didIteratorError2 = true;
@@ -156,47 +160,34 @@ export function buildASTSchema(documentAST, options) {
156
160
  return opTypes;
157
161
  }
158
162
  }
163
+ var stdTypeMap = keyMap(specifiedScalarTypes.concat(introspectionTypes), function (type) {
164
+ return type.name;
165
+ });
159
166
  export var ASTDefinitionBuilder =
160
167
  /*#__PURE__*/
161
168
  function () {
162
- function ASTDefinitionBuilder(typeDefinitionsMap, options, resolveType) {
163
- this._typeDefinitionsMap = typeDefinitionsMap;
169
+ function ASTDefinitionBuilder(options, resolveType) {
164
170
  this._options = options;
165
- this._resolveType = resolveType; // Initialize to the GraphQL built in scalars and introspection types.
166
-
167
- this._cache = keyMap(specifiedScalarTypes.concat(introspectionTypes), function (type) {
168
- return type.name;
169
- });
171
+ this._resolveType = resolveType;
170
172
  }
171
173
 
172
174
  var _proto = ASTDefinitionBuilder.prototype;
173
175
 
174
- _proto.buildType = function buildType(node) {
175
- var typeName = node.name.value;
176
-
177
- if (!this._cache[typeName]) {
178
- if (node.kind === Kind.NAMED_TYPE) {
179
- var defNode = this._typeDefinitionsMap[typeName];
180
- this._cache[typeName] = defNode ? this._makeSchemaDef(defNode) : this._resolveType(node.name.value);
181
- } else {
182
- this._cache[typeName] = this._makeSchemaDef(node);
183
- }
184
- }
185
-
186
- return this._cache[typeName];
176
+ _proto.getNamedType = function getNamedType(node) {
177
+ var name = node.name.value;
178
+ return stdTypeMap[name] || this._resolveType(name);
187
179
  };
188
180
 
189
- _proto._buildWrappedType = function _buildWrappedType(typeNode) {
190
- if (typeNode.kind === Kind.LIST_TYPE) {
191
- 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));
192
184
  }
193
185
 
194
- if (typeNode.kind === Kind.NON_NULL_TYPE) {
195
- return GraphQLNonNull( // Note: GraphQLNonNull constructor validates this type
196
- this._buildWrappedType(typeNode.type));
186
+ if (node.kind === Kind.NON_NULL_TYPE) {
187
+ return new GraphQLNonNull(this.getWrappedType(node.type));
197
188
  }
198
189
 
199
- return this.buildType(typeNode);
190
+ return this.getNamedType(node);
200
191
  };
201
192
 
202
193
  _proto.buildDirective = function buildDirective(directive) {
@@ -224,7 +215,7 @@ function () {
224
215
  // Note: While this could make assertions to get the correctly typed
225
216
  // value, that would throw immediately while type system validation
226
217
  // with validateSchema() will produce more actionable results.
227
- type: this._buildWrappedType(field.type),
218
+ type: this.getWrappedType(field.type),
228
219
  description: getDescription(field, this._options),
229
220
  args: keyByNameNode(field.arguments || [], function (arg) {
230
221
  return _this2.buildArg(arg);
@@ -237,8 +228,8 @@ function () {
237
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);
241
-
231
+ // with validateSchema() will produce more actionable results.
232
+ var type = this.getWrappedType(value.type);
242
233
  return {
243
234
  type: type,
244
235
  description: getDescription(value, this._options),
@@ -250,8 +241,8 @@ function () {
250
241
  _proto.buildInputField = function buildInputField(value) {
251
242
  // Note: While this could make assertions to get the correctly typed
252
243
  // value, that would throw immediately while type system validation
253
- var type = this._buildWrappedType(value.type);
254
-
244
+ // with validateSchema() will produce more actionable results.
245
+ var type = this.getWrappedType(value.type);
255
246
  return {
256
247
  type: type,
257
248
  description: getDescription(value, this._options),
@@ -268,7 +259,13 @@ function () {
268
259
  };
269
260
  };
270
261
 
271
- _proto._makeSchemaDef = function _makeSchemaDef(astNode) {
262
+ _proto.buildType = function buildType(astNode) {
263
+ var name = astNode.name.value;
264
+
265
+ if (stdTypeMap[name]) {
266
+ return stdTypeMap[name];
267
+ }
268
+
272
269
  switch (astNode.kind) {
273
270
  case Kind.OBJECT_TYPE_DEFINITION:
274
271
  return this._makeTypeDef(astNode);
@@ -287,10 +284,12 @@ function () {
287
284
 
288
285
  case Kind.INPUT_OBJECT_TYPE_DEFINITION:
289
286
  return this._makeInputObjectDef(astNode);
287
+ } // Not reachable. All possible type definition nodes have been considered.
290
288
 
291
- default:
292
- throw new Error("Type kind \"".concat(astNode.kind, "\" not supported."));
293
- }
289
+ /* istanbul ignore next */
290
+
291
+
292
+ throw new Error("Unexpected type definition node: \"".concat(inspect(astNode), "\"."));
294
293
  };
295
294
 
296
295
  _proto._makeTypeDef = function _makeTypeDef(astNode) {
@@ -303,7 +302,7 @@ function () {
303
302
 
304
303
  var interfaces = interfaceNodes && interfaceNodes.length > 0 ? function () {
305
304
  return interfaceNodes.map(function (ref) {
306
- return _this3.buildType(ref);
305
+ return _this3.getNamedType(ref);
307
306
  });
308
307
  } : [];
309
308
  var fields = fieldNodes && fieldNodes.length > 0 ? function () {
@@ -360,7 +359,7 @@ function () {
360
359
 
361
360
  var types = typeNodes && typeNodes.length > 0 ? function () {
362
361
  return typeNodes.map(function (ref) {
363
- return _this6.buildType(ref);
362
+ return _this6.getNamedType(ref);
364
363
  });
365
364
  } : [];
366
365
  return new GraphQLUnionType({
@@ -438,7 +437,7 @@ export function getDescription(node, options) {
438
437
  var rawValue = getLeadingCommentBlock(node);
439
438
 
440
439
  if (rawValue !== undefined) {
441
- return blockStringValue('\n' + rawValue);
440
+ return dedentBlockStringValue('\n' + rawValue);
442
441
  }
443
442
  }
444
443
  }
@@ -469,4 +468,4 @@ function getLeadingCommentBlock(node) {
469
468
 
470
469
  export function buildSchema(source, options) {
471
470
  return buildASTSchema(parse(source, options), options);
472
- }
471
+ }
@@ -5,12 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.buildClientSchema = buildClientSchema;
7
7
 
8
+ var _objectValues = _interopRequireDefault(require("../polyfills/objectValues"));
9
+
8
10
  var _inspect = _interopRequireDefault(require("../jsutils/inspect"));
9
11
 
10
12
  var _invariant = _interopRequireDefault(require("../jsutils/invariant"));
11
13
 
12
- var _keyMap = _interopRequireDefault(require("../jsutils/keyMap"));
13
-
14
14
  var _keyValMap = _interopRequireDefault(require("../jsutils/keyValMap"));
15
15
 
16
16
  var _valueFromAST = require("./valueFromAST");
@@ -30,7 +30,7 @@ var _scalars = require("../type/scalars");
30
30
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
31
 
32
32
  /**
33
- * Copyright (c) 2015-present, Facebook, Inc.
33
+ * Copyright (c) Facebook, Inc. and its affiliates.
34
34
  *
35
35
  * This source code is licensed under the MIT license found in the
36
36
  * LICENSE file in the root directory of this source tree.
@@ -52,16 +52,38 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
52
52
  */
53
53
  function buildClientSchema(introspection, options) {
54
54
  // Get the schema from the introspection result.
55
- var schemaIntrospection = introspection.__schema; // Converts the list of types into a keyMap based on the type names.
55
+ var schemaIntrospection = introspection.__schema; // Iterate through all types, getting the type definition for each.
56
+
57
+ var typeMap = (0, _keyValMap.default)(schemaIntrospection.types, function (typeIntrospection) {
58
+ return typeIntrospection.name;
59
+ }, function (typeIntrospection) {
60
+ return buildType(typeIntrospection);
61
+ });
62
+
63
+ for (var _i = 0, _arr = [].concat(_scalars.specifiedScalarTypes, _introspection.introspectionTypes); _i < _arr.length; _i++) {
64
+ var stdType = _arr[_i];
65
+
66
+ if (typeMap[stdType.name]) {
67
+ typeMap[stdType.name] = stdType;
68
+ }
69
+ } // Get the root Query, Mutation, and Subscription types.
70
+
71
+
72
+ var queryType = schemaIntrospection.queryType ? getObjectType(schemaIntrospection.queryType) : null;
73
+ var mutationType = schemaIntrospection.mutationType ? getObjectType(schemaIntrospection.mutationType) : null;
74
+ var subscriptionType = schemaIntrospection.subscriptionType ? getObjectType(schemaIntrospection.subscriptionType) : null; // Get the directives supported by Introspection, assuming empty-set if
75
+ // directives were not queried for.
56
76
 
57
- var typeIntrospectionMap = (0, _keyMap.default)(schemaIntrospection.types, function (type) {
58
- return type.name;
59
- }); // A cache to use to store the actual GraphQLType definition objects by name.
60
- // Initialize to the GraphQL built in scalars. All functions below are inline
61
- // so that this type def cache is within the scope of the closure.
77
+ var directives = schemaIntrospection.directives ? schemaIntrospection.directives.map(buildDirective) : []; // Then produce and return a Schema with these types.
62
78
 
63
- var typeDefCache = (0, _keyMap.default)(_scalars.specifiedScalarTypes.concat(_introspection.introspectionTypes), function (type) {
64
- return type.name;
79
+ return new _schema.GraphQLSchema({
80
+ query: queryType,
81
+ mutation: mutationType,
82
+ subscription: subscriptionType,
83
+ types: (0, _objectValues.default)(typeMap),
84
+ directives: directives,
85
+ assumeValid: options && options.assumeValid,
86
+ allowedLegacyNames: options && options.allowedLegacyNames
65
87
  }); // Given a type reference in introspection, return the GraphQLType instance.
66
88
  // preferring cached instances before building new instances.
67
89
 
@@ -95,19 +117,13 @@ function buildClientSchema(introspection, options) {
95
117
  }
96
118
 
97
119
  function getNamedType(typeName) {
98
- if (typeDefCache[typeName]) {
99
- return typeDefCache[typeName];
100
- }
120
+ var type = typeMap[typeName];
101
121
 
102
- var typeIntrospection = typeIntrospectionMap[typeName];
103
-
104
- if (!typeIntrospection) {
122
+ if (!type) {
105
123
  throw new Error("Invalid or incomplete schema, unknown type: ".concat(typeName, ". Ensure ") + 'that a full introspection query is used in order to build a ' + 'client schema.');
106
124
  }
107
125
 
108
- var typeDef = buildType(typeIntrospection);
109
- typeDefCache[typeName] = typeDef;
110
- return typeDef;
126
+ return type;
111
127
  }
112
128
 
113
129
  function getInputType(typeRef) {
@@ -296,28 +312,5 @@ function buildClientSchema(introspection, options) {
296
312
  locations: directiveIntrospection.locations.slice(),
297
313
  args: buildInputValueDefMap(directiveIntrospection.args)
298
314
  });
299
- } // Iterate through all types, getting the type definition for each, ensuring
300
- // that any type not directly referenced by a field will get created.
301
-
302
-
303
- var types = schemaIntrospection.types.map(function (typeIntrospection) {
304
- return getNamedType(typeIntrospection.name);
305
- }); // Get the root Query, Mutation, and Subscription types.
306
-
307
- var queryType = schemaIntrospection.queryType ? getObjectType(schemaIntrospection.queryType) : null;
308
- var mutationType = schemaIntrospection.mutationType ? getObjectType(schemaIntrospection.mutationType) : null;
309
- var subscriptionType = schemaIntrospection.subscriptionType ? getObjectType(schemaIntrospection.subscriptionType) : null; // Get the directives supported by Introspection, assuming empty-set if
310
- // directives were not queried for.
311
-
312
- var directives = schemaIntrospection.directives ? schemaIntrospection.directives.map(buildDirective) : []; // Then produce and return a Schema with these types.
313
-
314
- return new _schema.GraphQLSchema({
315
- query: queryType,
316
- mutation: mutationType,
317
- subscription: subscriptionType,
318
- types: types,
319
- directives: directives,
320
- assumeValid: options && options.assumeValid,
321
- allowedLegacyNames: options && options.allowedLegacyNames
322
- });
323
- }
315
+ }
316
+ }
@@ -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,15 +7,22 @@
7
7
  * @flow strict
8
8
  */
9
9
 
10
+ import objectValues from '../polyfills/objectValues';
10
11
  import inspect from '../jsutils/inspect';
11
12
  import invariant from '../jsutils/invariant';
12
- import keyMap from '../jsutils/keyMap';
13
13
  import keyValMap from '../jsutils/keyValMap';
14
14
  import { valueFromAST } from './valueFromAST';
15
15
  import { parseValue } from '../language/parser';
16
- import { GraphQLSchema } from '../type/schema';
16
+ import {
17
+ type GraphQLSchemaValidationOptions,
18
+ GraphQLSchema,
19
+ } from '../type/schema';
17
20
 
18
21
  import {
22
+ type GraphQLType,
23
+ type GraphQLInputType,
24
+ type GraphQLOutputType,
25
+ type GraphQLNamedType,
19
26
  isInputType,
20
27
  isOutputType,
21
28
  GraphQLScalarType,
@@ -31,36 +38,27 @@ import {
31
38
  assertInterfaceType,
32
39
  } from '../type/definition';
33
40
 
34
- import type {
35
- GraphQLType,
36
- GraphQLInputType,
37
- GraphQLOutputType,
38
- GraphQLNamedType,
39
- } from '../type/definition';
40
-
41
41
  import { GraphQLDirective } from '../type/directives';
42
42
 
43
43
  import { introspectionTypes, TypeKind } from '../type/introspection';
44
44
 
45
45
  import { specifiedScalarTypes } from '../type/scalars';
46
46
 
47
- import type {
48
- IntrospectionQuery,
49
- IntrospectionType,
50
- IntrospectionScalarType,
51
- IntrospectionObjectType,
52
- IntrospectionInterfaceType,
53
- IntrospectionUnionType,
54
- IntrospectionEnumType,
55
- IntrospectionInputObjectType,
56
- IntrospectionTypeRef,
57
- IntrospectionInputTypeRef,
58
- IntrospectionOutputTypeRef,
59
- IntrospectionNamedTypeRef,
47
+ import {
48
+ type IntrospectionQuery,
49
+ type IntrospectionType,
50
+ type IntrospectionScalarType,
51
+ type IntrospectionObjectType,
52
+ type IntrospectionInterfaceType,
53
+ type IntrospectionUnionType,
54
+ type IntrospectionEnumType,
55
+ type IntrospectionInputObjectType,
56
+ type IntrospectionTypeRef,
57
+ type IntrospectionInputTypeRef,
58
+ type IntrospectionOutputTypeRef,
59
+ type IntrospectionNamedTypeRef,
60
60
  } from './introspectionQuery';
61
61
 
62
- import type { GraphQLSchemaValidationOptions } from '../type/schema';
63
-
64
62
  type Options = {|
65
63
  ...GraphQLSchemaValidationOptions,
66
64
  |};
@@ -84,19 +82,48 @@ export function buildClientSchema(
84
82
  // Get the schema from the introspection result.
85
83
  const schemaIntrospection = introspection.__schema;
86
84
 
87
- // Converts the list of types into a keyMap based on the type names.
88
- const typeIntrospectionMap = keyMap(
85
+ // Iterate through all types, getting the type definition for each.
86
+ const typeMap = keyValMap(
89
87
  schemaIntrospection.types,
90
- type => type.name,
88
+ typeIntrospection => typeIntrospection.name,
89
+ typeIntrospection => buildType(typeIntrospection),
91
90
  );
92
91
 
93
- // A cache to use to store the actual GraphQLType definition objects by name.
94
- // Initialize to the GraphQL built in scalars. All functions below are inline
95
- // so that this type def cache is within the scope of the closure.
96
- const typeDefCache = keyMap(
97
- specifiedScalarTypes.concat(introspectionTypes),
98
- type => type.name,
99
- );
92
+ for (const stdType of [...specifiedScalarTypes, ...introspectionTypes]) {
93
+ if (typeMap[stdType.name]) {
94
+ typeMap[stdType.name] = stdType;
95
+ }
96
+ }
97
+
98
+ // Get the root Query, Mutation, and Subscription types.
99
+ const queryType = schemaIntrospection.queryType
100
+ ? getObjectType(schemaIntrospection.queryType)
101
+ : null;
102
+
103
+ const mutationType = schemaIntrospection.mutationType
104
+ ? getObjectType(schemaIntrospection.mutationType)
105
+ : null;
106
+
107
+ const subscriptionType = schemaIntrospection.subscriptionType
108
+ ? getObjectType(schemaIntrospection.subscriptionType)
109
+ : null;
110
+
111
+ // Get the directives supported by Introspection, assuming empty-set if
112
+ // directives were not queried for.
113
+ const directives = schemaIntrospection.directives
114
+ ? schemaIntrospection.directives.map(buildDirective)
115
+ : [];
116
+
117
+ // Then produce and return a Schema with these types.
118
+ return new GraphQLSchema({
119
+ query: queryType,
120
+ mutation: mutationType,
121
+ subscription: subscriptionType,
122
+ types: objectValues(typeMap),
123
+ directives,
124
+ assumeValid: options && options.assumeValid,
125
+ allowedLegacyNames: options && options.allowedLegacyNames,
126
+ });
100
127
 
101
128
  // Given a type reference in introspection, return the GraphQLType instance.
102
129
  // preferring cached instances before building new instances.
@@ -123,20 +150,16 @@ export function buildClientSchema(
123
150
  }
124
151
 
125
152
  function getNamedType(typeName: string): GraphQLNamedType {
126
- if (typeDefCache[typeName]) {
127
- return typeDefCache[typeName];
128
- }
129
- const typeIntrospection = typeIntrospectionMap[typeName];
130
- if (!typeIntrospection) {
153
+ const type = typeMap[typeName];
154
+ if (!type) {
131
155
  throw new Error(
132
156
  `Invalid or incomplete schema, unknown type: ${typeName}. Ensure ` +
133
157
  'that a full introspection query is used in order to build a ' +
134
158
  'client schema.',
135
159
  );
136
160
  }
137
- const typeDef = buildType(typeIntrospection);
138
- typeDefCache[typeName] = typeDef;
139
- return typeDef;
161
+
162
+ return type;
140
163
  }
141
164
 
142
165
  function getInputType(typeRef: IntrospectionInputTypeRef): GraphQLInputType {
@@ -361,40 +384,4 @@ export function buildClientSchema(
361
384
  args: buildInputValueDefMap(directiveIntrospection.args),
362
385
  });
363
386
  }
364
-
365
- // Iterate through all types, getting the type definition for each, ensuring
366
- // that any type not directly referenced by a field will get created.
367
- const types = schemaIntrospection.types.map(typeIntrospection =>
368
- getNamedType(typeIntrospection.name),
369
- );
370
-
371
- // Get the root Query, Mutation, and Subscription types.
372
- const queryType = schemaIntrospection.queryType
373
- ? getObjectType(schemaIntrospection.queryType)
374
- : null;
375
-
376
- const mutationType = schemaIntrospection.mutationType
377
- ? getObjectType(schemaIntrospection.mutationType)
378
- : null;
379
-
380
- const subscriptionType = schemaIntrospection.subscriptionType
381
- ? getObjectType(schemaIntrospection.subscriptionType)
382
- : null;
383
-
384
- // Get the directives supported by Introspection, assuming empty-set if
385
- // directives were not queried for.
386
- const directives = schemaIntrospection.directives
387
- ? schemaIntrospection.directives.map(buildDirective)
388
- : [];
389
-
390
- // Then produce and return a Schema with these types.
391
- return new GraphQLSchema({
392
- query: queryType,
393
- mutation: mutationType,
394
- subscription: subscriptionType,
395
- types,
396
- directives,
397
- assumeValid: options && options.assumeValid,
398
- allowedLegacyNames: options && options.allowedLegacyNames,
399
- });
400
387
  }