graphql 15.1.0 → 15.4.0

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 (343) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +10 -12
  3. package/error/GraphQLError.js +5 -5
  4. package/error/GraphQLError.js.flow +5 -5
  5. package/error/GraphQLError.mjs +1 -1
  6. package/error/formatError.js +1 -1
  7. package/error/formatError.js.flow +2 -3
  8. package/error/index.js +4 -4
  9. package/error/index.js.flow +0 -1
  10. package/error/locatedError.d.ts +2 -2
  11. package/error/locatedError.js +10 -5
  12. package/error/locatedError.js.flow +11 -5
  13. package/error/locatedError.mjs +6 -4
  14. package/error/syntaxError.js +1 -1
  15. package/error/syntaxError.js.flow +1 -2
  16. package/execution/execute.d.ts +24 -16
  17. package/execution/execute.js +123 -105
  18. package/execution/execute.js.flow +169 -153
  19. package/execution/execute.mjs +101 -82
  20. package/execution/index.d.ts +2 -0
  21. package/execution/index.js +9 -3
  22. package/execution/index.js.flow +12 -3
  23. package/execution/index.mjs +1 -1
  24. package/execution/values.js +11 -11
  25. package/execution/values.js.flow +10 -14
  26. package/graphql.js +5 -5
  27. package/graphql.js.flow +9 -9
  28. package/index.d.ts +19 -1
  29. package/index.js +27 -9
  30. package/index.js.flow +10 -3
  31. package/index.mjs +4 -3
  32. package/jsutils/ObjMap.js.flow +0 -1
  33. package/jsutils/Path.d.ts +6 -1
  34. package/jsutils/Path.js +3 -2
  35. package/jsutils/Path.js.flow +3 -2
  36. package/jsutils/Path.mjs +3 -2
  37. package/jsutils/PromiseOrValue.js.flow +0 -1
  38. package/jsutils/defineInspect.js +2 -2
  39. package/jsutils/defineInspect.js.flow +0 -1
  40. package/jsutils/devAssert.js.flow +0 -1
  41. package/jsutils/didYouMean.js.flow +0 -1
  42. package/jsutils/identityFunc.js.flow +0 -1
  43. package/jsutils/inspect.js +1 -2
  44. package/jsutils/inspect.js.flow +10 -8
  45. package/jsutils/inspect.mjs +1 -1
  46. package/jsutils/instanceOf.js.flow +2 -3
  47. package/jsutils/invariant.js.flow +0 -1
  48. package/jsutils/isAsyncIterable.js +19 -0
  49. package/jsutils/isAsyncIterable.js.flow +18 -0
  50. package/jsutils/isAsyncIterable.mjs +16 -0
  51. package/jsutils/isCollection.js +1 -1
  52. package/jsutils/isCollection.js.flow +0 -1
  53. package/jsutils/isObjectLike.js.flow +0 -1
  54. package/jsutils/isPromise.js.flow +0 -1
  55. package/jsutils/keyMap.js.flow +1 -2
  56. package/jsutils/keyValMap.js.flow +1 -2
  57. package/jsutils/mapValue.js +1 -1
  58. package/jsutils/mapValue.js.flow +1 -2
  59. package/jsutils/memoize3.js +2 -5
  60. package/jsutils/memoize3.js.flow +2 -5
  61. package/jsutils/memoize3.mjs +2 -5
  62. package/jsutils/nodejsCustomInspectSymbol.js.flow +0 -1
  63. package/jsutils/printPathArray.js.flow +0 -1
  64. package/jsutils/promiseForObject.js.flow +1 -2
  65. package/jsutils/promiseReduce.js +1 -1
  66. package/jsutils/promiseReduce.js.flow +1 -1
  67. package/jsutils/promiseReduce.mjs +1 -1
  68. package/jsutils/suggestionList.js.flow +1 -2
  69. package/jsutils/toObjMap.js +1 -1
  70. package/jsutils/toObjMap.js.flow +5 -6
  71. package/language/ast.js +1 -1
  72. package/language/ast.js.flow +2 -3
  73. package/language/blockString.d.ts +1 -1
  74. package/language/blockString.js +53 -32
  75. package/language/blockString.js.flow +49 -34
  76. package/language/blockString.mjs +54 -33
  77. package/language/directiveLocation.js.flow +0 -1
  78. package/language/experimentalOnlineParser/grammar.d.ts +1006 -0
  79. package/language/experimentalOnlineParser/grammar.js +987 -0
  80. package/language/experimentalOnlineParser/grammar.js.flow +1000 -0
  81. package/language/experimentalOnlineParser/grammar.mjs +980 -0
  82. package/language/experimentalOnlineParser/index.d.ts +6 -0
  83. package/language/experimentalOnlineParser/index.js +31 -0
  84. package/language/experimentalOnlineParser/index.js.flow +7 -0
  85. package/language/experimentalOnlineParser/index.mjs +1 -0
  86. package/language/experimentalOnlineParser/onlineParser.d.ts +125 -0
  87. package/language/experimentalOnlineParser/onlineParser.js +604 -0
  88. package/language/experimentalOnlineParser/onlineParser.js.flow +723 -0
  89. package/language/experimentalOnlineParser/onlineParser.mjs +587 -0
  90. package/language/index.js +12 -12
  91. package/language/index.js.flow +0 -1
  92. package/language/kinds.js.flow +0 -1
  93. package/language/lexer.js +242 -183
  94. package/language/lexer.js.flow +191 -186
  95. package/language/lexer.mjs +239 -180
  96. package/language/location.js.flow +1 -2
  97. package/language/parser.js +73 -68
  98. package/language/parser.js.flow +112 -106
  99. package/language/parser.mjs +66 -62
  100. package/language/predicates.js +1 -1
  101. package/language/predicates.js.flow +1 -2
  102. package/language/printLocation.js +1 -1
  103. package/language/printLocation.js.flow +4 -4
  104. package/language/printer.js +20 -13
  105. package/language/printer.js.flow +27 -25
  106. package/language/printer.mjs +18 -11
  107. package/language/source.d.ts +12 -6
  108. package/language/source.js +25 -9
  109. package/language/source.js.flow +25 -8
  110. package/language/source.mjs +19 -7
  111. package/language/tokenKind.js.flow +0 -1
  112. package/language/visitor.d.ts +3 -3
  113. package/language/visitor.js +5 -5
  114. package/language/visitor.js.flow +5 -5
  115. package/language/visitor.mjs +3 -3
  116. package/package.json +1 -1
  117. package/polyfills/arrayFrom.js +2 -2
  118. package/polyfills/arrayFrom.js.flow +1 -2
  119. package/polyfills/arrayFrom.mjs +1 -1
  120. package/polyfills/find.js +1 -1
  121. package/polyfills/find.js.flow +1 -2
  122. package/polyfills/find.mjs +1 -1
  123. package/polyfills/isFinite.js +1 -1
  124. package/polyfills/isFinite.js.flow +1 -2
  125. package/polyfills/isFinite.mjs +1 -1
  126. package/polyfills/isInteger.js +1 -1
  127. package/polyfills/isInteger.js.flow +1 -2
  128. package/polyfills/isInteger.mjs +1 -1
  129. package/polyfills/objectEntries.js +1 -1
  130. package/polyfills/objectEntries.js.flow +2 -3
  131. package/polyfills/objectEntries.mjs +1 -1
  132. package/polyfills/objectValues.js +1 -1
  133. package/polyfills/objectValues.js.flow +2 -3
  134. package/polyfills/objectValues.mjs +1 -1
  135. package/polyfills/symbols.js +3 -5
  136. package/polyfills/symbols.js.flow +9 -6
  137. package/polyfills/symbols.mjs +3 -5
  138. package/subscription/index.js +1 -1
  139. package/subscription/index.js.flow +0 -1
  140. package/subscription/mapAsyncIterator.js +2 -2
  141. package/subscription/mapAsyncIterator.js.flow +9 -10
  142. package/subscription/mapAsyncIterator.mjs +1 -1
  143. package/subscription/subscribe.js +61 -73
  144. package/subscription/subscribe.js.flow +74 -88
  145. package/subscription/subscribe.mjs +53 -65
  146. package/type/definition.d.ts +181 -31
  147. package/type/definition.js +37 -32
  148. package/type/definition.js.flow +66 -51
  149. package/type/definition.mjs +20 -18
  150. package/type/directives.d.ts +17 -3
  151. package/type/directives.js +17 -16
  152. package/type/directives.js.flow +20 -21
  153. package/type/directives.mjs +6 -5
  154. package/type/index.d.ts +12 -0
  155. package/type/index.js +6 -6
  156. package/type/index.js.flow +0 -1
  157. package/type/introspection.js +86 -68
  158. package/type/introspection.js.flow +85 -54
  159. package/type/introspection.mjs +79 -61
  160. package/type/scalars.js +9 -9
  161. package/type/scalars.js.flow +3 -3
  162. package/type/scalars.mjs +1 -1
  163. package/type/schema.d.ts +17 -4
  164. package/type/schema.js +13 -13
  165. package/type/schema.js.flow +18 -16
  166. package/type/schema.mjs +1 -1
  167. package/type/validate.js +52 -19
  168. package/type/validate.js.flow +67 -18
  169. package/type/validate.mjs +44 -10
  170. package/utilities/TypeInfo.js +7 -7
  171. package/utilities/TypeInfo.js.flow +16 -18
  172. package/utilities/TypeInfo.mjs +1 -1
  173. package/utilities/assertValidName.js +2 -2
  174. package/utilities/assertValidName.js.flow +0 -1
  175. package/utilities/astFromValue.js +10 -10
  176. package/utilities/astFromValue.js.flow +2 -3
  177. package/utilities/buildASTSchema.js +17 -27
  178. package/utilities/buildASTSchema.js.flow +11 -28
  179. package/utilities/buildASTSchema.mjs +11 -21
  180. package/utilities/buildClientSchema.js +14 -14
  181. package/utilities/buildClientSchema.js.flow +41 -29
  182. package/utilities/buildClientSchema.mjs +5 -5
  183. package/utilities/coerceInputValue.js +14 -14
  184. package/utilities/coerceInputValue.js.flow +7 -6
  185. package/utilities/coerceInputValue.mjs +2 -2
  186. package/utilities/concatAST.js +9 -8
  187. package/utilities/concatAST.js.flow +9 -9
  188. package/utilities/concatAST.mjs +9 -6
  189. package/utilities/extendSchema.js +26 -19
  190. package/utilities/extendSchema.js.flow +58 -45
  191. package/utilities/extendSchema.mjs +9 -2
  192. package/utilities/findBreakingChanges.js +9 -9
  193. package/utilities/findBreakingChanges.js.flow +12 -11
  194. package/utilities/findDeprecatedUsages.d.ts +9 -1
  195. package/utilities/findDeprecatedUsages.js +11 -27
  196. package/utilities/findDeprecatedUsages.js.flow +15 -44
  197. package/utilities/findDeprecatedUsages.mjs +11 -25
  198. package/utilities/getIntrospectionQuery.js.flow +2 -3
  199. package/utilities/getOperationAST.js +1 -1
  200. package/utilities/getOperationAST.js.flow +1 -5
  201. package/utilities/getOperationAST.mjs +1 -1
  202. package/utilities/getOperationRootType.js +1 -1
  203. package/utilities/getOperationRootType.js.flow +5 -6
  204. package/utilities/index.d.ts +4 -1
  205. package/utilities/index.js +22 -22
  206. package/utilities/index.js.flow +1 -2
  207. package/utilities/index.mjs +1 -1
  208. package/utilities/introspectionFromSchema.js +6 -8
  209. package/utilities/introspectionFromSchema.js.flow +10 -10
  210. package/utilities/introspectionFromSchema.mjs +3 -4
  211. package/utilities/lexicographicSortSchema.js +10 -8
  212. package/utilities/lexicographicSortSchema.js.flow +19 -12
  213. package/utilities/lexicographicSortSchema.mjs +3 -1
  214. package/utilities/printSchema.js +15 -16
  215. package/utilities/printSchema.js.flow +34 -25
  216. package/utilities/printSchema.mjs +6 -7
  217. package/utilities/separateOperations.js +2 -2
  218. package/utilities/separateOperations.js.flow +2 -6
  219. package/utilities/separateOperations.mjs +1 -1
  220. package/utilities/stripIgnoredCharacters.js +6 -16
  221. package/utilities/stripIgnoredCharacters.js.flow +4 -13
  222. package/utilities/stripIgnoredCharacters.mjs +3 -10
  223. package/utilities/typeComparators.js +1 -1
  224. package/utilities/typeComparators.js.flow +2 -4
  225. package/utilities/typeFromAST.js +6 -6
  226. package/utilities/typeFromAST.js.flow +11 -14
  227. package/utilities/typeFromAST.mjs +2 -2
  228. package/utilities/typedQueryDocumentNode.d.ts +20 -0
  229. package/utilities/valueFromAST.js +6 -6
  230. package/utilities/valueFromAST.js.flow +7 -5
  231. package/utilities/valueFromASTUntyped.js +4 -4
  232. package/utilities/valueFromASTUntyped.js.flow +2 -3
  233. package/validation/ValidationContext.d.ts +3 -0
  234. package/validation/ValidationContext.js +7 -3
  235. package/validation/ValidationContext.js.flow +28 -22
  236. package/validation/ValidationContext.mjs +4 -0
  237. package/validation/index.d.ts +4 -0
  238. package/validation/index.js +52 -36
  239. package/validation/index.js.flow +4 -1
  240. package/validation/index.mjs +4 -1
  241. package/validation/rules/ExecutableDefinitions.js +1 -1
  242. package/validation/rules/ExecutableDefinitions.js.flow +0 -1
  243. package/validation/rules/ExecutableDefinitionsRule.js +3 -3
  244. package/validation/rules/ExecutableDefinitionsRule.js.flow +2 -3
  245. package/validation/rules/FieldsOnCorrectTypeRule.js +5 -5
  246. package/validation/rules/FieldsOnCorrectTypeRule.js.flow +9 -8
  247. package/validation/rules/FragmentsOnCompositeTypesRule.js +4 -4
  248. package/validation/rules/FragmentsOnCompositeTypesRule.js.flow +2 -3
  249. package/validation/rules/KnownArgumentNamesRule.js +5 -5
  250. package/validation/rules/KnownArgumentNamesRule.js.flow +5 -5
  251. package/validation/rules/KnownDirectivesRule.js +6 -6
  252. package/validation/rules/KnownDirectivesRule.js.flow +10 -11
  253. package/validation/rules/KnownFragmentNamesRule.js +1 -1
  254. package/validation/rules/KnownFragmentNamesRule.js.flow +3 -3
  255. package/validation/rules/KnownTypeNamesRule.js +12 -10
  256. package/validation/rules/KnownTypeNamesRule.js.flow +14 -11
  257. package/validation/rules/KnownTypeNamesRule.mjs +6 -5
  258. package/validation/rules/LoneAnonymousOperationRule.js +2 -2
  259. package/validation/rules/LoneAnonymousOperationRule.js.flow +2 -3
  260. package/validation/rules/LoneSchemaDefinition.js +1 -1
  261. package/validation/rules/LoneSchemaDefinition.js.flow +0 -1
  262. package/validation/rules/LoneSchemaDefinitionRule.js +1 -1
  263. package/validation/rules/LoneSchemaDefinitionRule.js.flow +2 -3
  264. package/validation/rules/NoFragmentCyclesRule.js +1 -1
  265. package/validation/rules/NoFragmentCyclesRule.js.flow +4 -5
  266. package/validation/rules/NoUndefinedVariablesRule.js +1 -1
  267. package/validation/rules/NoUndefinedVariablesRule.js.flow +3 -3
  268. package/validation/rules/NoUnusedFragmentsRule.js +1 -1
  269. package/validation/rules/NoUnusedFragmentsRule.js.flow +3 -3
  270. package/validation/rules/NoUnusedVariablesRule.js +1 -1
  271. package/validation/rules/NoUnusedVariablesRule.js.flow +3 -3
  272. package/validation/rules/OverlappingFieldsCanBeMergedRule.js +20 -20
  273. package/validation/rules/OverlappingFieldsCanBeMergedRule.js.flow +29 -27
  274. package/validation/rules/OverlappingFieldsCanBeMergedRule.mjs +12 -12
  275. package/validation/rules/PossibleFragmentSpreadsRule.js +5 -5
  276. package/validation/rules/PossibleFragmentSpreadsRule.js.flow +7 -4
  277. package/validation/rules/PossibleTypeExtensions.js +1 -1
  278. package/validation/rules/PossibleTypeExtensions.js.flow +0 -1
  279. package/validation/rules/PossibleTypeExtensionsRule.js +8 -8
  280. package/validation/rules/PossibleTypeExtensionsRule.js.flow +8 -6
  281. package/validation/rules/ProvidedRequiredArgumentsRule.js +7 -7
  282. package/validation/rules/ProvidedRequiredArgumentsRule.js.flow +7 -6
  283. package/validation/rules/ScalarLeafsRule.js +3 -3
  284. package/validation/rules/ScalarLeafsRule.js.flow +3 -4
  285. package/validation/rules/SingleFieldSubscriptionsRule.js +1 -1
  286. package/validation/rules/SingleFieldSubscriptionsRule.js.flow +3 -4
  287. package/validation/rules/UniqueArgumentNamesRule.js +1 -1
  288. package/validation/rules/UniqueArgumentNamesRule.js.flow +2 -3
  289. package/validation/rules/UniqueDirectiveNames.js +1 -1
  290. package/validation/rules/UniqueDirectiveNames.js.flow +0 -1
  291. package/validation/rules/UniqueDirectiveNamesRule.js +1 -1
  292. package/validation/rules/UniqueDirectiveNamesRule.js.flow +2 -3
  293. package/validation/rules/UniqueDirectivesPerLocationRule.js +4 -4
  294. package/validation/rules/UniqueDirectivesPerLocationRule.js.flow +4 -5
  295. package/validation/rules/UniqueEnumValueNames.js +1 -1
  296. package/validation/rules/UniqueEnumValueNames.js.flow +0 -1
  297. package/validation/rules/UniqueEnumValueNamesRule.js +2 -2
  298. package/validation/rules/UniqueEnumValueNamesRule.js.flow +11 -4
  299. package/validation/rules/UniqueFieldDefinitionNames.js +1 -1
  300. package/validation/rules/UniqueFieldDefinitionNames.js.flow +0 -1
  301. package/validation/rules/UniqueFieldDefinitionNamesRule.js +3 -3
  302. package/validation/rules/UniqueFieldDefinitionNamesRule.js.flow +17 -6
  303. package/validation/rules/UniqueFieldDefinitionNamesRule.mjs +1 -1
  304. package/validation/rules/UniqueFragmentNamesRule.js +1 -1
  305. package/validation/rules/UniqueFragmentNamesRule.js.flow +3 -3
  306. package/validation/rules/UniqueInputFieldNamesRule.js +1 -1
  307. package/validation/rules/UniqueInputFieldNamesRule.js.flow +3 -3
  308. package/validation/rules/UniqueOperationNamesRule.js +1 -1
  309. package/validation/rules/UniqueOperationNamesRule.js.flow +3 -3
  310. package/validation/rules/UniqueOperationTypes.js +1 -1
  311. package/validation/rules/UniqueOperationTypes.js.flow +0 -1
  312. package/validation/rules/UniqueOperationTypesRule.js +1 -1
  313. package/validation/rules/UniqueOperationTypesRule.js.flow +10 -4
  314. package/validation/rules/UniqueTypeNames.js +1 -1
  315. package/validation/rules/UniqueTypeNames.js.flow +0 -1
  316. package/validation/rules/UniqueTypeNamesRule.js +1 -1
  317. package/validation/rules/UniqueTypeNamesRule.js.flow +3 -4
  318. package/validation/rules/UniqueVariableNamesRule.js +1 -1
  319. package/validation/rules/UniqueVariableNamesRule.js.flow +3 -4
  320. package/validation/rules/ValuesOfCorrectTypeRule.js +8 -8
  321. package/validation/rules/ValuesOfCorrectTypeRule.js.flow +3 -4
  322. package/validation/rules/VariablesAreInputTypesRule.js +4 -4
  323. package/validation/rules/VariablesAreInputTypesRule.js.flow +3 -4
  324. package/validation/rules/VariablesInAllowedPositionRule.js +6 -6
  325. package/validation/rules/VariablesInAllowedPositionRule.js.flow +6 -6
  326. package/validation/rules/custom/NoDeprecatedCustomRule.d.ts +14 -0
  327. package/validation/rules/custom/NoDeprecatedCustomRule.js +79 -0
  328. package/validation/rules/custom/NoDeprecatedCustomRule.js.flow +94 -0
  329. package/validation/rules/custom/NoDeprecatedCustomRule.mjs +68 -0
  330. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.ts +16 -0
  331. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js +34 -0
  332. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js.flow +38 -0
  333. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.mjs +25 -0
  334. package/validation/specifiedRules.js +33 -33
  335. package/validation/specifiedRules.js.flow +0 -1
  336. package/validation/validate.js +7 -7
  337. package/validation/validate.js.flow +4 -9
  338. package/version.js +2 -2
  339. package/version.js.flow +2 -3
  340. package/version.mjs +2 -2
  341. package/polyfills/flatMap.js +0 -30
  342. package/polyfills/flatMap.js.flow +0 -28
  343. package/polyfills/flatMap.mjs +0 -23
@@ -1,8 +1,8 @@
1
1
  // @flow strict
2
-
3
2
  import arrayFrom from '../polyfills/arrayFrom';
4
3
  import objectValues from '../polyfills/objectValues';
5
4
 
5
+ import type { Path } from '../jsutils/Path';
6
6
  import inspect from '../jsutils/inspect';
7
7
  import invariant from '../jsutils/invariant';
8
8
  import didYouMean from '../jsutils/didYouMean';
@@ -10,11 +10,12 @@ import isObjectLike from '../jsutils/isObjectLike';
10
10
  import isCollection from '../jsutils/isCollection';
11
11
  import suggestionList from '../jsutils/suggestionList';
12
12
  import printPathArray from '../jsutils/printPathArray';
13
- import { type Path, addPath, pathToArray } from '../jsutils/Path';
13
+ import { addPath, pathToArray } from '../jsutils/Path';
14
14
 
15
15
  import { GraphQLError } from '../error/GraphQLError';
16
+
17
+ import type { GraphQLInputType } from '../type/definition';
16
18
  import {
17
- type GraphQLInputType,
18
19
  isLeafType,
19
20
  isInputObjectType,
20
21
  isListType,
@@ -42,7 +43,7 @@ function defaultOnError(
42
43
  path: $ReadOnlyArray<string | number>,
43
44
  invalidValue: mixed,
44
45
  error: GraphQLError,
45
- ) {
46
+ ): void {
46
47
  let errorPrefix = 'Invalid value ' + inspect(invalidValue);
47
48
  if (path.length > 0) {
48
49
  errorPrefix += ` at "value${printPathArray(path)}"`;
@@ -80,7 +81,7 @@ function coerceInputValueImpl(
80
81
  const itemType = type.ofType;
81
82
  if (isCollection(inputValue)) {
82
83
  return arrayFrom(inputValue, (itemValue, index) => {
83
- const itemPath = addPath(path, index);
84
+ const itemPath = addPath(path, index, undefined);
84
85
  return coerceInputValueImpl(itemValue, itemType, onError, itemPath);
85
86
  });
86
87
  }
@@ -124,7 +125,7 @@ function coerceInputValueImpl(
124
125
  fieldValue,
125
126
  field.type,
126
127
  onError,
127
- addPath(path, field.name),
128
+ addPath(path, field.name, type.name),
128
129
  );
129
130
  }
130
131
 
@@ -50,7 +50,7 @@ function coerceInputValueImpl(inputValue, type, onError, path) {
50
50
 
51
51
  if (isCollection(inputValue)) {
52
52
  return arrayFrom(inputValue, function (itemValue, index) {
53
- var itemPath = addPath(path, index);
53
+ var itemPath = addPath(path, index, undefined);
54
54
  return coerceInputValueImpl(itemValue, itemType, onError, itemPath);
55
55
  });
56
56
  } // Lists accept a non-list value as a list of one.
@@ -83,7 +83,7 @@ function coerceInputValueImpl(inputValue, type, onError, path) {
83
83
  continue;
84
84
  }
85
85
 
86
- coercedValue[field.name] = coerceInputValueImpl(fieldValue, field.type, onError, addPath(path, field.name));
86
+ coercedValue[field.name] = coerceInputValueImpl(fieldValue, field.type, onError, addPath(path, field.name, type.name));
87
87
  } // Ensure every provided field is defined.
88
88
 
89
89
 
@@ -5,20 +5,21 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.concatAST = concatAST;
7
7
 
8
- var _flatMap = _interopRequireDefault(require("../polyfills/flatMap"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
8
  /**
13
9
  * Provided a collection of ASTs, presumably each from different files,
14
10
  * concatenate the ASTs together into batched AST, useful for validating many
15
11
  * GraphQL source files which together represent one conceptual application.
16
12
  */
17
- function concatAST(asts) {
13
+ function concatAST(documents) {
14
+ var definitions = [];
15
+
16
+ for (var _i2 = 0; _i2 < documents.length; _i2++) {
17
+ var doc = documents[_i2];
18
+ definitions = definitions.concat(doc.definitions);
19
+ }
20
+
18
21
  return {
19
22
  kind: 'Document',
20
- definitions: (0, _flatMap.default)(asts, function (ast) {
21
- return ast.definitions;
22
- })
23
+ definitions: definitions
23
24
  };
24
25
  }
@@ -1,17 +1,17 @@
1
1
  // @flow strict
2
-
3
- import flatMap from '../polyfills/flatMap';
4
-
5
- import { type DocumentNode } from '../language/ast';
2
+ import type { DocumentNode } from '../language/ast';
6
3
 
7
4
  /**
8
5
  * Provided a collection of ASTs, presumably each from different files,
9
6
  * concatenate the ASTs together into batched AST, useful for validating many
10
7
  * GraphQL source files which together represent one conceptual application.
11
8
  */
12
- export function concatAST(asts: $ReadOnlyArray<DocumentNode>): DocumentNode {
13
- return {
14
- kind: 'Document',
15
- definitions: flatMap(asts, (ast) => ast.definitions),
16
- };
9
+ export function concatAST(
10
+ documents: $ReadOnlyArray<DocumentNode>,
11
+ ): DocumentNode {
12
+ let definitions = [];
13
+ for (const doc of documents) {
14
+ definitions = definitions.concat(doc.definitions);
15
+ }
16
+ return { kind: 'Document', definitions };
17
17
  }
@@ -1,15 +1,18 @@
1
- import flatMap from "../polyfills/flatMap.mjs";
2
-
3
1
  /**
4
2
  * Provided a collection of ASTs, presumably each from different files,
5
3
  * concatenate the ASTs together into batched AST, useful for validating many
6
4
  * GraphQL source files which together represent one conceptual application.
7
5
  */
8
- export function concatAST(asts) {
6
+ export function concatAST(documents) {
7
+ var definitions = [];
8
+
9
+ for (var _i2 = 0; _i2 < documents.length; _i2++) {
10
+ var doc = documents[_i2];
11
+ definitions = definitions.concat(doc.definitions);
12
+ }
13
+
9
14
  return {
10
15
  kind: 'Document',
11
- definitions: flatMap(asts, function (ast) {
12
- return ast.definitions;
13
- })
16
+ definitions: definitions
14
17
  };
15
18
  }
@@ -7,41 +7,41 @@ exports.extendSchema = extendSchema;
7
7
  exports.extendSchemaImpl = extendSchemaImpl;
8
8
  exports.getDescription = getDescription;
9
9
 
10
- var _objectValues = _interopRequireDefault(require("../polyfills/objectValues"));
10
+ var _objectValues = _interopRequireDefault(require("../polyfills/objectValues.js"));
11
11
 
12
- var _keyMap = _interopRequireDefault(require("../jsutils/keyMap"));
12
+ var _keyMap = _interopRequireDefault(require("../jsutils/keyMap.js"));
13
13
 
14
- var _inspect = _interopRequireDefault(require("../jsutils/inspect"));
14
+ var _inspect = _interopRequireDefault(require("../jsutils/inspect.js"));
15
15
 
16
- var _mapValue = _interopRequireDefault(require("../jsutils/mapValue"));
16
+ var _mapValue = _interopRequireDefault(require("../jsutils/mapValue.js"));
17
17
 
18
- var _invariant = _interopRequireDefault(require("../jsutils/invariant"));
18
+ var _invariant = _interopRequireDefault(require("../jsutils/invariant.js"));
19
19
 
20
- var _devAssert = _interopRequireDefault(require("../jsutils/devAssert"));
20
+ var _devAssert = _interopRequireDefault(require("../jsutils/devAssert.js"));
21
21
 
22
- var _kinds = require("../language/kinds");
22
+ var _kinds = require("../language/kinds.js");
23
23
 
24
- var _tokenKind = require("../language/tokenKind");
24
+ var _tokenKind = require("../language/tokenKind.js");
25
25
 
26
- var _blockString = require("../language/blockString");
26
+ var _blockString = require("../language/blockString.js");
27
27
 
28
- var _predicates = require("../language/predicates");
28
+ var _predicates = require("../language/predicates.js");
29
29
 
30
- var _validate = require("../validation/validate");
30
+ var _validate = require("../validation/validate.js");
31
31
 
32
- var _values = require("../execution/values");
32
+ var _values = require("../execution/values.js");
33
33
 
34
- var _scalars = require("../type/scalars");
34
+ var _schema = require("../type/schema.js");
35
35
 
36
- var _introspection = require("../type/introspection");
36
+ var _scalars = require("../type/scalars.js");
37
37
 
38
- var _directives = require("../type/directives");
38
+ var _introspection = require("../type/introspection.js");
39
39
 
40
- var _schema = require("../type/schema");
40
+ var _directives = require("../type/directives.js");
41
41
 
42
- var _definition = require("../type/definition");
42
+ var _definition = require("../type/definition.js");
43
43
 
44
- var _valueFromAST = require("./valueFromAST");
44
+ var _valueFromAST = require("./valueFromAST.js");
45
45
 
46
46
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
47
47
 
@@ -160,8 +160,12 @@ function extendSchemaImpl(schemaConfig, documentAST, options) {
160
160
 
161
161
  function replaceType(type) {
162
162
  if ((0, _definition.isListType)(type)) {
163
+ // $FlowFixMe[incompatible-return]
163
164
  return new _definition.GraphQLList(replaceType(type.ofType));
164
- } else if ((0, _definition.isNonNullType)(type)) {
165
+ }
166
+
167
+ if ((0, _definition.isNonNullType)(type)) {
168
+ // $FlowFixMe[incompatible-return]
165
169
  return new _definition.GraphQLNonNull(replaceType(type.ofType));
166
170
  }
167
171
 
@@ -313,6 +317,7 @@ function extendSchemaImpl(schemaConfig, documentAST, options) {
313
317
  function extendField(field) {
314
318
  return _objectSpread(_objectSpread({}, field), {}, {
315
319
  type: replaceType(field.type),
320
+ // $FlowFixMe[incompatible-call]
316
321
  args: (0, _mapValue.default)(field.args, extendArg)
317
322
  });
318
323
  }
@@ -428,6 +433,7 @@ function extendSchemaImpl(schemaConfig, documentAST, options) {
428
433
  type: type,
429
434
  description: getDescription(arg, options),
430
435
  defaultValue: (0, _valueFromAST.valueFromAST)(arg.defaultValue, type),
436
+ deprecationReason: getDeprecationReason(arg),
431
437
  astNode: arg
432
438
  };
433
439
  }
@@ -455,6 +461,7 @@ function extendSchemaImpl(schemaConfig, documentAST, options) {
455
461
  type: type,
456
462
  description: getDescription(field, options),
457
463
  defaultValue: (0, _valueFromAST.valueFromAST)(field.defaultValue, type),
464
+ deprecationReason: getDeprecationReason(field),
458
465
  astNode: field
459
466
  };
460
467
  }
@@ -1,5 +1,4 @@
1
1
  // @flow strict
2
-
3
2
  import objectValues from '../polyfills/objectValues';
4
3
 
5
4
  import keyMap from '../jsutils/keyMap';
@@ -8,45 +7,60 @@ import mapValue from '../jsutils/mapValue';
8
7
  import invariant from '../jsutils/invariant';
9
8
  import devAssert from '../jsutils/devAssert';
10
9
 
10
+ import type { DirectiveLocationEnum } from '../language/directiveLocation';
11
+ import type {
12
+ Location,
13
+ DocumentNode,
14
+ StringValueNode,
15
+ TypeNode,
16
+ NamedTypeNode,
17
+ SchemaDefinitionNode,
18
+ SchemaExtensionNode,
19
+ TypeDefinitionNode,
20
+ InterfaceTypeDefinitionNode,
21
+ InterfaceTypeExtensionNode,
22
+ ObjectTypeDefinitionNode,
23
+ ObjectTypeExtensionNode,
24
+ UnionTypeDefinitionNode,
25
+ UnionTypeExtensionNode,
26
+ FieldDefinitionNode,
27
+ InputObjectTypeDefinitionNode,
28
+ InputObjectTypeExtensionNode,
29
+ InputValueDefinitionNode,
30
+ EnumTypeDefinitionNode,
31
+ EnumTypeExtensionNode,
32
+ EnumValueDefinitionNode,
33
+ DirectiveDefinitionNode,
34
+ ScalarTypeDefinitionNode,
35
+ ScalarTypeExtensionNode,
36
+ } from '../language/ast';
11
37
  import { Kind } from '../language/kinds';
12
38
  import { TokenKind } from '../language/tokenKind';
13
39
  import { dedentBlockStringValue } from '../language/blockString';
14
- import { type DirectiveLocationEnum } from '../language/directiveLocation';
15
40
  import {
16
41
  isTypeDefinitionNode,
17
42
  isTypeExtensionNode,
18
43
  } from '../language/predicates';
19
- import {
20
- type Location,
21
- type DocumentNode,
22
- type StringValueNode,
23
- type TypeNode,
24
- type NamedTypeNode,
25
- type SchemaDefinitionNode,
26
- type SchemaExtensionNode,
27
- type TypeDefinitionNode,
28
- type InterfaceTypeDefinitionNode,
29
- type InterfaceTypeExtensionNode,
30
- type ObjectTypeDefinitionNode,
31
- type ObjectTypeExtensionNode,
32
- type UnionTypeDefinitionNode,
33
- type UnionTypeExtensionNode,
34
- type FieldDefinitionNode,
35
- type InputObjectTypeDefinitionNode,
36
- type InputObjectTypeExtensionNode,
37
- type InputValueDefinitionNode,
38
- type EnumTypeDefinitionNode,
39
- type EnumTypeExtensionNode,
40
- type EnumValueDefinitionNode,
41
- type DirectiveDefinitionNode,
42
- type ScalarTypeDefinitionNode,
43
- type ScalarTypeExtensionNode,
44
- } from '../language/ast';
45
44
 
46
45
  import { assertValidSDLExtension } from '../validation/validate';
47
46
 
48
47
  import { getDirectiveValues } from '../execution/values';
49
48
 
49
+ import type {
50
+ GraphQLSchemaValidationOptions,
51
+ GraphQLSchemaNormalizedConfig,
52
+ } from '../type/schema';
53
+ import type {
54
+ GraphQLType,
55
+ GraphQLNamedType,
56
+ GraphQLFieldConfig,
57
+ GraphQLFieldConfigMap,
58
+ GraphQLArgumentConfig,
59
+ GraphQLFieldConfigArgumentMap,
60
+ GraphQLEnumValueConfigMap,
61
+ GraphQLInputFieldConfigMap,
62
+ } from '../type/definition';
63
+ import { assertSchema, GraphQLSchema } from '../type/schema';
50
64
  import { specifiedScalarTypes, isSpecifiedScalarType } from '../type/scalars';
51
65
  import { introspectionTypes, isIntrospectionType } from '../type/introspection';
52
66
  import {
@@ -55,18 +69,6 @@ import {
55
69
  GraphQLSpecifiedByDirective,
56
70
  } from '../type/directives';
57
71
  import {
58
- type GraphQLSchemaValidationOptions,
59
- assertSchema,
60
- GraphQLSchema,
61
- type GraphQLSchemaNormalizedConfig,
62
- } from '../type/schema';
63
- import {
64
- type GraphQLType,
65
- type GraphQLNamedType,
66
- type GraphQLFieldConfigMap,
67
- type GraphQLEnumValueConfigMap,
68
- type GraphQLInputFieldConfigMap,
69
- type GraphQLFieldConfigArgumentMap,
70
72
  isScalarType,
71
73
  isObjectType,
72
74
  isInterfaceType,
@@ -238,10 +240,13 @@ export function extendSchemaImpl(
238
240
  // Below are functions used for producing this schema that have closed over
239
241
  // this scope and have access to the schema, cache, and newly defined types.
240
242
 
241
- function replaceType(type) {
243
+ function replaceType<T: GraphQLType>(type: T): T {
242
244
  if (isListType(type)) {
245
+ // $FlowFixMe[incompatible-return]
243
246
  return new GraphQLList(replaceType(type.ofType));
244
- } else if (isNonNullType(type)) {
247
+ }
248
+ if (isNonNullType(type)) {
249
+ // $FlowFixMe[incompatible-return]
245
250
  return new GraphQLNonNull(replaceType(type.ofType));
246
251
  }
247
252
  return replaceNamedType(type);
@@ -392,15 +397,18 @@ export function extendSchemaImpl(
392
397
  });
393
398
  }
394
399
 
395
- function extendField(field) {
400
+ function extendField(
401
+ field: GraphQLFieldConfig<mixed, mixed>,
402
+ ): GraphQLFieldConfig<mixed, mixed> {
396
403
  return {
397
404
  ...field,
398
405
  type: replaceType(field.type),
406
+ // $FlowFixMe[incompatible-call]
399
407
  args: mapValue(field.args, extendArg),
400
408
  };
401
409
  }
402
410
 
403
- function extendArg(arg) {
411
+ function extendArg(arg: GraphQLArgumentConfig) {
404
412
  return {
405
413
  ...arg,
406
414
  type: replaceType(arg.type),
@@ -511,6 +519,7 @@ export function extendSchemaImpl(
511
519
  type,
512
520
  description: getDescription(arg, options),
513
521
  defaultValue: valueFromAST(arg.defaultValue, type),
522
+ deprecationReason: getDeprecationReason(arg),
514
523
  astNode: arg,
515
524
  };
516
525
  }
@@ -537,6 +546,7 @@ export function extendSchemaImpl(
537
546
  type,
538
547
  description: getDescription(field, options),
539
548
  defaultValue: valueFromAST(field.defaultValue, type),
549
+ deprecationReason: getDeprecationReason(field),
540
550
  astNode: field,
541
551
  };
542
552
  }
@@ -705,7 +715,10 @@ const stdTypeMap = keyMap(
705
715
  * deprecation reason.
706
716
  */
707
717
  function getDeprecationReason(
708
- node: EnumValueDefinitionNode | FieldDefinitionNode,
718
+ node:
719
+ | EnumValueDefinitionNode
720
+ | FieldDefinitionNode
721
+ | InputValueDefinitionNode,
709
722
  ): ?string {
710
723
  const deprecated = getDirectiveValues(GraphQLDeprecatedDirective, node);
711
724
  return (deprecated?.reason: any);
@@ -16,10 +16,10 @@ import { dedentBlockStringValue } from "../language/blockString.mjs";
16
16
  import { isTypeDefinitionNode, isTypeExtensionNode } from "../language/predicates.mjs";
17
17
  import { assertValidSDLExtension } from "../validation/validate.mjs";
18
18
  import { getDirectiveValues } from "../execution/values.mjs";
19
+ import { assertSchema, GraphQLSchema } from "../type/schema.mjs";
19
20
  import { specifiedScalarTypes, isSpecifiedScalarType } from "../type/scalars.mjs";
20
21
  import { introspectionTypes, isIntrospectionType } from "../type/introspection.mjs";
21
22
  import { GraphQLDirective, GraphQLDeprecatedDirective, GraphQLSpecifiedByDirective } from "../type/directives.mjs";
22
- import { assertSchema, GraphQLSchema } from "../type/schema.mjs";
23
23
  import { isScalarType, isObjectType, isInterfaceType, isUnionType, isListType, isNonNullType, isEnumType, isInputObjectType, GraphQLList, GraphQLNonNull, GraphQLScalarType, GraphQLObjectType, GraphQLInterfaceType, GraphQLUnionType, GraphQLEnumType, GraphQLInputObjectType } from "../type/definition.mjs";
24
24
  import { valueFromAST } from "./valueFromAST.mjs";
25
25
 
@@ -131,8 +131,12 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
131
131
 
132
132
  function replaceType(type) {
133
133
  if (isListType(type)) {
134
+ // $FlowFixMe[incompatible-return]
134
135
  return new GraphQLList(replaceType(type.ofType));
135
- } else if (isNonNullType(type)) {
136
+ }
137
+
138
+ if (isNonNullType(type)) {
139
+ // $FlowFixMe[incompatible-return]
136
140
  return new GraphQLNonNull(replaceType(type.ofType));
137
141
  }
138
142
 
@@ -284,6 +288,7 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
284
288
  function extendField(field) {
285
289
  return _objectSpread(_objectSpread({}, field), {}, {
286
290
  type: replaceType(field.type),
291
+ // $FlowFixMe[incompatible-call]
287
292
  args: mapValue(field.args, extendArg)
288
293
  });
289
294
  }
@@ -399,6 +404,7 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
399
404
  type: type,
400
405
  description: getDescription(arg, options),
401
406
  defaultValue: valueFromAST(arg.defaultValue, type),
407
+ deprecationReason: getDeprecationReason(arg),
402
408
  astNode: arg
403
409
  };
404
410
  }
@@ -426,6 +432,7 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
426
432
  type: type,
427
433
  description: getDescription(field, options),
428
434
  defaultValue: valueFromAST(field.defaultValue, type),
435
+ deprecationReason: getDeprecationReason(field),
429
436
  astNode: field
430
437
  };
431
438
  }
@@ -7,23 +7,23 @@ exports.findBreakingChanges = findBreakingChanges;
7
7
  exports.findDangerousChanges = findDangerousChanges;
8
8
  exports.DangerousChangeType = exports.BreakingChangeType = void 0;
9
9
 
10
- var _objectValues = _interopRequireDefault(require("../polyfills/objectValues"));
10
+ var _objectValues = _interopRequireDefault(require("../polyfills/objectValues.js"));
11
11
 
12
- var _keyMap = _interopRequireDefault(require("../jsutils/keyMap"));
12
+ var _keyMap = _interopRequireDefault(require("../jsutils/keyMap.js"));
13
13
 
14
- var _inspect = _interopRequireDefault(require("../jsutils/inspect"));
14
+ var _inspect = _interopRequireDefault(require("../jsutils/inspect.js"));
15
15
 
16
- var _invariant = _interopRequireDefault(require("../jsutils/invariant"));
16
+ var _invariant = _interopRequireDefault(require("../jsutils/invariant.js"));
17
17
 
18
- var _printer = require("../language/printer");
18
+ var _printer = require("../language/printer.js");
19
19
 
20
- var _visitor = require("../language/visitor");
20
+ var _visitor = require("../language/visitor.js");
21
21
 
22
- var _scalars = require("../type/scalars");
22
+ var _scalars = require("../type/scalars.js");
23
23
 
24
- var _definition = require("../type/definition");
24
+ var _definition = require("../type/definition.js");
25
25
 
26
- var _astFromValue = require("./astFromValue");
26
+ var _astFromValue = require("./astFromValue.js");
27
27
 
28
28
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
29
 
@@ -1,5 +1,4 @@
1
1
  // @flow strict
2
-
3
2
  import objectValues from '../polyfills/objectValues';
4
3
 
5
4
  import keyMap from '../jsutils/keyMap';
@@ -9,18 +8,20 @@ import invariant from '../jsutils/invariant';
9
8
  import { print } from '../language/printer';
10
9
  import { visit } from '../language/visitor';
11
10
 
12
- import { type GraphQLSchema } from '../type/schema';
11
+ import type { GraphQLSchema } from '../type/schema';
12
+ import type {
13
+ GraphQLField,
14
+ GraphQLType,
15
+ GraphQLInputType,
16
+ GraphQLNamedType,
17
+ GraphQLEnumType,
18
+ GraphQLUnionType,
19
+ GraphQLObjectType,
20
+ GraphQLInterfaceType,
21
+ GraphQLInputObjectType,
22
+ } from '../type/definition';
13
23
  import { isSpecifiedScalarType } from '../type/scalars';
14
24
  import {
15
- type GraphQLField,
16
- type GraphQLType,
17
- type GraphQLInputType,
18
- type GraphQLNamedType,
19
- type GraphQLEnumType,
20
- type GraphQLUnionType,
21
- type GraphQLObjectType,
22
- type GraphQLInterfaceType,
23
- type GraphQLInputObjectType,
24
25
  isScalarType,
25
26
  isObjectType,
26
27
  isInterfaceType,
@@ -6,8 +6,16 @@ import { GraphQLSchema } from '../type/schema';
6
6
  * A validation rule which reports deprecated usages.
7
7
  *
8
8
  * Returns a list of GraphQLError instances describing each deprecated use.
9
+ *
10
+ * @deprecated Please use `validate` with `NoDeprecatedCustomRule` instead:
11
+ *
12
+ * ```
13
+ * import { validate, NoDeprecatedCustomRule } from 'graphql'
14
+ *
15
+ * const errors = validate(schema, document, [NoDeprecatedCustomRule])
16
+ * ```
9
17
  */
10
18
  export function findDeprecatedUsages(
11
19
  schema: GraphQLSchema,
12
20
  ast: DocumentNode,
13
- ): Array<GraphQLError>;
21
+ ): ReadonlyArray<GraphQLError>;
@@ -5,39 +5,23 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.findDeprecatedUsages = findDeprecatedUsages;
7
7
 
8
- var _GraphQLError = require("../error/GraphQLError");
8
+ var _validate = require("../validation/validate.js");
9
9
 
10
- var _visitor = require("../language/visitor");
11
-
12
- var _definition = require("../type/definition");
13
-
14
- var _TypeInfo = require("./TypeInfo");
10
+ var _NoDeprecatedCustomRule = require("../validation/rules/custom/NoDeprecatedCustomRule.js");
15
11
 
16
12
  /**
17
13
  * A validation rule which reports deprecated usages.
18
14
  *
19
15
  * Returns a list of GraphQLError instances describing each deprecated use.
16
+ *
17
+ * @deprecated Please use `validate` with `NoDeprecatedCustomRule` instead:
18
+ *
19
+ * ```
20
+ * import { validate, NoDeprecatedCustomRule } from 'graphql'
21
+ *
22
+ * const errors = validate(schema, document, [NoDeprecatedCustomRule])
23
+ * ```
20
24
  */
21
25
  function findDeprecatedUsages(schema, ast) {
22
- var errors = [];
23
- var typeInfo = new _TypeInfo.TypeInfo(schema);
24
- (0, _visitor.visit)(ast, (0, _TypeInfo.visitWithTypeInfo)(typeInfo, {
25
- Field: function Field(node) {
26
- var parentType = typeInfo.getParentType();
27
- var fieldDef = typeInfo.getFieldDef();
28
-
29
- if (parentType && (fieldDef === null || fieldDef === void 0 ? void 0 : fieldDef.deprecationReason) != null) {
30
- errors.push(new _GraphQLError.GraphQLError("The field \"".concat(parentType.name, ".").concat(fieldDef.name, "\" is deprecated. ") + fieldDef.deprecationReason, node));
31
- }
32
- },
33
- EnumValue: function EnumValue(node) {
34
- var type = (0, _definition.getNamedType)(typeInfo.getInputType());
35
- var enumVal = typeInfo.getEnumValue();
36
-
37
- if (type && (enumVal === null || enumVal === void 0 ? void 0 : enumVal.deprecationReason) != null) {
38
- errors.push(new _GraphQLError.GraphQLError("The enum value \"".concat(type.name, ".").concat(enumVal.name, "\" is deprecated. ") + enumVal.deprecationReason, node));
39
- }
40
- }
41
- }));
42
- return errors;
26
+ return (0, _validate.validate)(schema, ast, [_NoDeprecatedCustomRule.NoDeprecatedCustomRule]);
43
27
  }