graphql 16.14.0 → 16.14.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 (371) hide show
  1. package/error/GraphQLError.d.ts +151 -15
  2. package/error/GraphQLError.js +143 -12
  3. package/error/GraphQLError.mjs +143 -12
  4. package/error/index.d.ts +6 -0
  5. package/error/index.mjs +6 -0
  6. package/error/locatedError.d.ts +20 -0
  7. package/error/locatedError.js +21 -0
  8. package/error/locatedError.mjs +20 -0
  9. package/error/syntaxError.d.ts +15 -0
  10. package/error/syntaxError.js +16 -0
  11. package/error/syntaxError.mjs +15 -0
  12. package/execution/collectFields.js +6 -0
  13. package/execution/collectFields.mjs +6 -0
  14. package/execution/execute.d.ts +211 -12
  15. package/execution/execute.js +214 -23
  16. package/execution/execute.mjs +213 -23
  17. package/execution/index.d.ts +6 -0
  18. package/execution/index.mjs +6 -0
  19. package/execution/mapAsyncIterator.d.ts +2 -0
  20. package/execution/mapAsyncIterator.js +2 -0
  21. package/execution/mapAsyncIterator.mjs +2 -0
  22. package/execution/subscribe.d.ts +195 -5
  23. package/execution/subscribe.js +154 -11
  24. package/execution/subscribe.mjs +153 -11
  25. package/execution/values.d.ts +167 -10
  26. package/execution/values.js +149 -5
  27. package/execution/values.mjs +148 -5
  28. package/graphql.d.ts +163 -41
  29. package/graphql.js +126 -4
  30. package/graphql.mjs +131 -41
  31. package/index.d.ts +11 -17
  32. package/index.mjs +13 -19
  33. package/jsutils/Maybe.d.ts +5 -1
  34. package/jsutils/ObjMap.d.ts +4 -0
  35. package/jsutils/Path.d.ts +30 -0
  36. package/jsutils/Path.js +29 -0
  37. package/jsutils/Path.mjs +29 -0
  38. package/jsutils/PromiseOrValue.d.ts +1 -0
  39. package/jsutils/devAssert.d.ts +1 -0
  40. package/jsutils/devAssert.js +1 -0
  41. package/jsutils/devAssert.mjs +1 -0
  42. package/jsutils/didYouMean.d.ts +4 -1
  43. package/jsutils/didYouMean.js +4 -1
  44. package/jsutils/didYouMean.mjs +4 -1
  45. package/jsutils/groupBy.d.ts +2 -0
  46. package/jsutils/groupBy.js +2 -0
  47. package/jsutils/groupBy.mjs +2 -0
  48. package/jsutils/identityFunc.d.ts +2 -0
  49. package/jsutils/identityFunc.js +2 -0
  50. package/jsutils/identityFunc.mjs +2 -0
  51. package/jsutils/inspect.d.ts +2 -0
  52. package/jsutils/inspect.js +2 -0
  53. package/jsutils/inspect.mjs +2 -0
  54. package/jsutils/instanceOf.d.ts +2 -0
  55. package/jsutils/instanceOf.js +2 -0
  56. package/jsutils/instanceOf.mjs +2 -0
  57. package/jsutils/invariant.d.ts +1 -0
  58. package/jsutils/invariant.js +1 -0
  59. package/jsutils/invariant.mjs +1 -0
  60. package/jsutils/isAsyncIterable.d.ts +2 -0
  61. package/jsutils/isAsyncIterable.js +2 -0
  62. package/jsutils/isAsyncIterable.mjs +2 -0
  63. package/jsutils/isIterableObject.d.ts +6 -5
  64. package/jsutils/isIterableObject.js +6 -5
  65. package/jsutils/isIterableObject.mjs +6 -5
  66. package/jsutils/isObjectLike.d.ts +2 -0
  67. package/jsutils/isObjectLike.js +2 -0
  68. package/jsutils/isObjectLike.mjs +2 -0
  69. package/jsutils/isPromise.d.ts +2 -0
  70. package/jsutils/isPromise.js +2 -0
  71. package/jsutils/isPromise.mjs +2 -0
  72. package/jsutils/keyMap.d.ts +7 -14
  73. package/jsutils/keyMap.js +7 -14
  74. package/jsutils/keyMap.mjs +7 -14
  75. package/jsutils/keyValMap.d.ts +9 -6
  76. package/jsutils/keyValMap.js +9 -6
  77. package/jsutils/keyValMap.mjs +9 -6
  78. package/jsutils/mapValue.d.ts +2 -0
  79. package/jsutils/mapValue.js +2 -0
  80. package/jsutils/mapValue.mjs +2 -0
  81. package/jsutils/memoize3.d.ts +2 -0
  82. package/jsutils/memoize3.js +2 -0
  83. package/jsutils/memoize3.mjs +2 -0
  84. package/jsutils/naturalCompare.d.ts +2 -0
  85. package/jsutils/naturalCompare.js +2 -0
  86. package/jsutils/naturalCompare.mjs +2 -0
  87. package/jsutils/printPathArray.d.ts +2 -0
  88. package/jsutils/printPathArray.js +2 -0
  89. package/jsutils/printPathArray.mjs +2 -0
  90. package/jsutils/promiseForObject.d.ts +2 -0
  91. package/jsutils/promiseForObject.js +2 -0
  92. package/jsutils/promiseForObject.mjs +2 -0
  93. package/jsutils/promiseReduce.d.ts +2 -0
  94. package/jsutils/promiseReduce.js +2 -0
  95. package/jsutils/promiseReduce.mjs +2 -0
  96. package/jsutils/suggestionList.d.ts +2 -0
  97. package/jsutils/suggestionList.js +4 -0
  98. package/jsutils/suggestionList.mjs +4 -0
  99. package/jsutils/toError.d.ts +2 -0
  100. package/jsutils/toError.js +2 -0
  101. package/jsutils/toError.mjs +2 -0
  102. package/jsutils/toObjMap.d.ts +1 -0
  103. package/jsutils/toObjMap.js +1 -0
  104. package/jsutils/toObjMap.mjs +1 -0
  105. package/language/ast.d.ts +412 -54
  106. package/language/ast.js +95 -38
  107. package/language/ast.mjs +95 -38
  108. package/language/blockString.d.ts +1 -3
  109. package/language/blockString.js +1 -3
  110. package/language/blockString.mjs +1 -3
  111. package/language/directiveLocation.d.ts +28 -8
  112. package/language/directiveLocation.js +9 -6
  113. package/language/directiveLocation.mjs +9 -6
  114. package/language/index.d.ts +6 -0
  115. package/language/index.mjs +6 -0
  116. package/language/kinds.d.ts +57 -18
  117. package/language/kinds.js +9 -6
  118. package/language/kinds.mjs +9 -6
  119. package/language/lexer.d.ts +47 -14
  120. package/language/lexer.js +71 -13
  121. package/language/lexer.mjs +70 -13
  122. package/language/location.d.ts +16 -3
  123. package/language/location.js +14 -3
  124. package/language/location.mjs +14 -3
  125. package/language/parser.d.ts +236 -13
  126. package/language/parser.js +224 -0
  127. package/language/parser.mjs +224 -3
  128. package/language/predicates.d.ts +169 -0
  129. package/language/predicates.js +170 -0
  130. package/language/predicates.mjs +180 -0
  131. package/language/printLocation.d.ts +28 -0
  132. package/language/printLocation.js +29 -0
  133. package/language/printLocation.mjs +28 -0
  134. package/language/printString.d.ts +2 -0
  135. package/language/printString.js +5 -1
  136. package/language/printString.mjs +5 -1
  137. package/language/printer.d.ts +12 -0
  138. package/language/printer.js +19 -0
  139. package/language/printer.mjs +18 -0
  140. package/language/schemaCoordinateLexer.d.ts +8 -6
  141. package/language/schemaCoordinateLexer.js +10 -6
  142. package/language/schemaCoordinateLexer.mjs +10 -6
  143. package/language/source.d.ts +28 -0
  144. package/language/source.js +32 -0
  145. package/language/source.mjs +31 -0
  146. package/language/tokenKind.d.ts +30 -3
  147. package/language/tokenKind.js +8 -3
  148. package/language/tokenKind.mjs +8 -3
  149. package/language/visitor.d.ts +200 -72
  150. package/language/visitor.js +122 -50
  151. package/language/visitor.mjs +122 -54
  152. package/package.json +1 -1
  153. package/subscription/index.d.ts +9 -3
  154. package/subscription/index.mjs +9 -3
  155. package/type/assertName.d.ts +18 -1
  156. package/type/assertName.js +19 -1
  157. package/type/assertName.mjs +18 -1
  158. package/type/definition.d.ts +2540 -79
  159. package/type/definition.js +2214 -61
  160. package/type/definition.mjs +2241 -60
  161. package/type/directives.d.ts +193 -18
  162. package/type/directives.js +196 -19
  163. package/type/directives.mjs +196 -19
  164. package/type/index.d.ts +6 -0
  165. package/type/index.mjs +6 -0
  166. package/type/introspection.d.ts +36 -0
  167. package/type/introspection.js +33 -0
  168. package/type/introspection.mjs +41 -0
  169. package/type/scalars.d.ts +29 -2
  170. package/type/scalars.js +37 -2
  171. package/type/scalars.mjs +36 -2
  172. package/type/schema.d.ts +490 -28
  173. package/type/schema.js +484 -26
  174. package/type/schema.mjs +484 -26
  175. package/type/validate.d.ts +31 -0
  176. package/type/validate.js +32 -0
  177. package/type/validate.mjs +31 -0
  178. package/utilities/TypeInfo.d.ts +441 -1
  179. package/utilities/TypeInfo.js +444 -1
  180. package/utilities/TypeInfo.mjs +443 -1
  181. package/utilities/assertValidName.d.ts +27 -2
  182. package/utilities/assertValidName.js +28 -2
  183. package/utilities/assertValidName.mjs +27 -2
  184. package/utilities/astFromValue.d.ts +33 -3
  185. package/utilities/astFromValue.js +36 -3
  186. package/utilities/astFromValue.mjs +35 -3
  187. package/utilities/buildASTSchema.d.ts +65 -6
  188. package/utilities/buildASTSchema.js +65 -6
  189. package/utilities/buildASTSchema.mjs +65 -6
  190. package/utilities/buildClientSchema.d.ts +15 -0
  191. package/utilities/buildClientSchema.js +16 -0
  192. package/utilities/buildClientSchema.mjs +15 -0
  193. package/utilities/coerceInputValue.d.ts +46 -0
  194. package/utilities/coerceInputValue.js +47 -0
  195. package/utilities/coerceInputValue.mjs +46 -0
  196. package/utilities/concatAST.d.ts +12 -0
  197. package/utilities/concatAST.js +13 -0
  198. package/utilities/concatAST.mjs +12 -0
  199. package/utilities/extendSchema.d.ts +56 -3
  200. package/utilities/extendSchema.js +63 -3
  201. package/utilities/extendSchema.mjs +62 -3
  202. package/utilities/findBreakingChanges.d.ts +95 -0
  203. package/utilities/findBreakingChanges.js +68 -0
  204. package/utilities/findBreakingChanges.mjs +70 -0
  205. package/utilities/getIntrospectionQuery.d.ts +132 -0
  206. package/utilities/getIntrospectionQuery.js +41 -0
  207. package/utilities/getIntrospectionQuery.mjs +41 -0
  208. package/utilities/getOperationAST.d.ts +15 -0
  209. package/utilities/getOperationAST.js +16 -0
  210. package/utilities/getOperationAST.mjs +15 -0
  211. package/utilities/getOperationRootType.d.ts +18 -1
  212. package/utilities/getOperationRootType.js +19 -1
  213. package/utilities/getOperationRootType.mjs +18 -1
  214. package/utilities/index.d.ts +7 -0
  215. package/utilities/index.mjs +7 -0
  216. package/utilities/introspectionFromSchema.d.ts +54 -0
  217. package/utilities/introspectionFromSchema.js +55 -0
  218. package/utilities/introspectionFromSchema.mjs +54 -0
  219. package/utilities/lexicographicSortSchema.d.ts +35 -0
  220. package/utilities/lexicographicSortSchema.js +36 -0
  221. package/utilities/lexicographicSortSchema.mjs +35 -0
  222. package/utilities/printSchema.d.ts +63 -0
  223. package/utilities/printSchema.js +66 -0
  224. package/utilities/printSchema.mjs +67 -0
  225. package/utilities/resolveSchemaCoordinate.d.ts +62 -0
  226. package/utilities/resolveSchemaCoordinate.js +64 -0
  227. package/utilities/resolveSchemaCoordinate.mjs +63 -0
  228. package/utilities/separateOperations.d.ts +30 -0
  229. package/utilities/separateOperations.js +31 -0
  230. package/utilities/separateOperations.mjs +30 -0
  231. package/utilities/stripIgnoredCharacters.d.ts +13 -6
  232. package/utilities/stripIgnoredCharacters.js +16 -6
  233. package/utilities/stripIgnoredCharacters.mjs +15 -6
  234. package/utilities/typeComparators.d.ts +84 -0
  235. package/utilities/typeComparators.js +85 -0
  236. package/utilities/typeComparators.mjs +84 -0
  237. package/utilities/typeFromAST.d.ts +86 -0
  238. package/utilities/typeFromAST.js +3 -0
  239. package/utilities/typeFromAST.mjs +3 -0
  240. package/utilities/typedQueryDocumentNode.d.ts +4 -0
  241. package/utilities/valueFromAST.d.ts +38 -0
  242. package/utilities/valueFromAST.js +39 -0
  243. package/utilities/valueFromAST.mjs +38 -0
  244. package/utilities/valueFromASTUntyped.d.ts +15 -2
  245. package/utilities/valueFromASTUntyped.js +16 -2
  246. package/utilities/valueFromASTUntyped.mjs +15 -2
  247. package/validation/ValidationContext.d.ts +399 -0
  248. package/validation/ValidationContext.js +400 -0
  249. package/validation/ValidationContext.mjs +401 -0
  250. package/validation/index.d.ts +6 -0
  251. package/validation/index.mjs +6 -0
  252. package/validation/rules/ExecutableDefinitionsRule.d.ts +28 -0
  253. package/validation/rules/ExecutableDefinitionsRule.js +29 -0
  254. package/validation/rules/ExecutableDefinitionsRule.mjs +28 -0
  255. package/validation/rules/FieldsOnCorrectTypeRule.d.ts +28 -0
  256. package/validation/rules/FieldsOnCorrectTypeRule.js +33 -0
  257. package/validation/rules/FieldsOnCorrectTypeRule.mjs +32 -0
  258. package/validation/rules/FragmentsOnCompositeTypesRule.d.ts +28 -0
  259. package/validation/rules/FragmentsOnCompositeTypesRule.js +29 -0
  260. package/validation/rules/FragmentsOnCompositeTypesRule.mjs +28 -0
  261. package/validation/rules/KnownArgumentNamesRule.d.ts +29 -3
  262. package/validation/rules/KnownArgumentNamesRule.js +30 -3
  263. package/validation/rules/KnownArgumentNamesRule.mjs +29 -3
  264. package/validation/rules/KnownDirectivesRule.d.ts +28 -0
  265. package/validation/rules/KnownDirectivesRule.js +29 -0
  266. package/validation/rules/KnownDirectivesRule.mjs +28 -0
  267. package/validation/rules/KnownFragmentNamesRule.d.ts +28 -0
  268. package/validation/rules/KnownFragmentNamesRule.js +29 -0
  269. package/validation/rules/KnownFragmentNamesRule.mjs +28 -0
  270. package/validation/rules/KnownTypeNamesRule.d.ts +28 -0
  271. package/validation/rules/KnownTypeNamesRule.js +29 -0
  272. package/validation/rules/KnownTypeNamesRule.mjs +28 -0
  273. package/validation/rules/LoneAnonymousOperationRule.d.ts +28 -0
  274. package/validation/rules/LoneAnonymousOperationRule.js +29 -0
  275. package/validation/rules/LoneAnonymousOperationRule.mjs +28 -0
  276. package/validation/rules/LoneSchemaDefinitionRule.d.ts +21 -0
  277. package/validation/rules/LoneSchemaDefinitionRule.js +22 -0
  278. package/validation/rules/LoneSchemaDefinitionRule.mjs +21 -0
  279. package/validation/rules/MaxIntrospectionDepthRule.d.ts +31 -0
  280. package/validation/rules/MaxIntrospectionDepthRule.js +33 -0
  281. package/validation/rules/MaxIntrospectionDepthRule.mjs +34 -0
  282. package/validation/rules/NoFragmentCyclesRule.d.ts +28 -0
  283. package/validation/rules/NoFragmentCyclesRule.js +29 -0
  284. package/validation/rules/NoFragmentCyclesRule.mjs +28 -0
  285. package/validation/rules/NoUndefinedVariablesRule.d.ts +28 -0
  286. package/validation/rules/NoUndefinedVariablesRule.js +29 -0
  287. package/validation/rules/NoUndefinedVariablesRule.mjs +28 -0
  288. package/validation/rules/NoUnusedFragmentsRule.d.ts +28 -0
  289. package/validation/rules/NoUnusedFragmentsRule.js +29 -0
  290. package/validation/rules/NoUnusedFragmentsRule.mjs +28 -0
  291. package/validation/rules/NoUnusedVariablesRule.d.ts +29 -0
  292. package/validation/rules/NoUnusedVariablesRule.js +30 -0
  293. package/validation/rules/NoUnusedVariablesRule.mjs +29 -0
  294. package/validation/rules/OverlappingFieldsCanBeMergedRule.d.ts +33 -0
  295. package/validation/rules/OverlappingFieldsCanBeMergedRule.js +45 -6
  296. package/validation/rules/OverlappingFieldsCanBeMergedRule.mjs +45 -6
  297. package/validation/rules/PossibleFragmentSpreadsRule.d.ts +36 -0
  298. package/validation/rules/PossibleFragmentSpreadsRule.js +37 -0
  299. package/validation/rules/PossibleFragmentSpreadsRule.mjs +36 -0
  300. package/validation/rules/PossibleTypeExtensionsRule.d.ts +21 -0
  301. package/validation/rules/PossibleTypeExtensionsRule.js +22 -0
  302. package/validation/rules/PossibleTypeExtensionsRule.mjs +21 -0
  303. package/validation/rules/ProvidedRequiredArgumentsRule.d.ts +29 -3
  304. package/validation/rules/ProvidedRequiredArgumentsRule.js +30 -3
  305. package/validation/rules/ProvidedRequiredArgumentsRule.mjs +29 -3
  306. package/validation/rules/ScalarLeafsRule.d.ts +28 -0
  307. package/validation/rules/ScalarLeafsRule.js +29 -0
  308. package/validation/rules/ScalarLeafsRule.mjs +28 -0
  309. package/validation/rules/SingleFieldSubscriptionsRule.d.ts +33 -0
  310. package/validation/rules/SingleFieldSubscriptionsRule.js +34 -0
  311. package/validation/rules/SingleFieldSubscriptionsRule.mjs +33 -0
  312. package/validation/rules/UniqueArgumentDefinitionNamesRule.d.ts +21 -0
  313. package/validation/rules/UniqueArgumentDefinitionNamesRule.js +22 -0
  314. package/validation/rules/UniqueArgumentDefinitionNamesRule.mjs +21 -0
  315. package/validation/rules/UniqueArgumentNamesRule.d.ts +28 -0
  316. package/validation/rules/UniqueArgumentNamesRule.js +29 -0
  317. package/validation/rules/UniqueArgumentNamesRule.mjs +28 -0
  318. package/validation/rules/UniqueDirectiveNamesRule.d.ts +21 -0
  319. package/validation/rules/UniqueDirectiveNamesRule.js +22 -0
  320. package/validation/rules/UniqueDirectiveNamesRule.mjs +21 -0
  321. package/validation/rules/UniqueDirectivesPerLocationRule.d.ts +28 -0
  322. package/validation/rules/UniqueDirectivesPerLocationRule.js +29 -0
  323. package/validation/rules/UniqueDirectivesPerLocationRule.mjs +28 -0
  324. package/validation/rules/UniqueEnumValueNamesRule.d.ts +21 -0
  325. package/validation/rules/UniqueEnumValueNamesRule.js +22 -0
  326. package/validation/rules/UniqueEnumValueNamesRule.mjs +21 -0
  327. package/validation/rules/UniqueFieldDefinitionNamesRule.d.ts +21 -0
  328. package/validation/rules/UniqueFieldDefinitionNamesRule.js +22 -0
  329. package/validation/rules/UniqueFieldDefinitionNamesRule.mjs +21 -0
  330. package/validation/rules/UniqueFragmentNamesRule.d.ts +28 -0
  331. package/validation/rules/UniqueFragmentNamesRule.js +29 -0
  332. package/validation/rules/UniqueFragmentNamesRule.mjs +28 -0
  333. package/validation/rules/UniqueInputFieldNamesRule.d.ts +32 -0
  334. package/validation/rules/UniqueInputFieldNamesRule.js +33 -0
  335. package/validation/rules/UniqueInputFieldNamesRule.mjs +32 -0
  336. package/validation/rules/UniqueOperationNamesRule.d.ts +28 -0
  337. package/validation/rules/UniqueOperationNamesRule.js +29 -0
  338. package/validation/rules/UniqueOperationNamesRule.mjs +28 -0
  339. package/validation/rules/UniqueOperationTypesRule.d.ts +21 -0
  340. package/validation/rules/UniqueOperationTypesRule.js +22 -0
  341. package/validation/rules/UniqueOperationTypesRule.mjs +21 -0
  342. package/validation/rules/UniqueTypeNamesRule.d.ts +21 -0
  343. package/validation/rules/UniqueTypeNamesRule.js +22 -0
  344. package/validation/rules/UniqueTypeNamesRule.mjs +21 -0
  345. package/validation/rules/UniqueVariableNamesRule.d.ts +28 -0
  346. package/validation/rules/UniqueVariableNamesRule.js +29 -0
  347. package/validation/rules/UniqueVariableNamesRule.mjs +28 -0
  348. package/validation/rules/ValuesOfCorrectTypeRule.d.ts +28 -0
  349. package/validation/rules/ValuesOfCorrectTypeRule.js +31 -0
  350. package/validation/rules/ValuesOfCorrectTypeRule.mjs +30 -0
  351. package/validation/rules/VariablesAreInputTypesRule.d.ts +32 -0
  352. package/validation/rules/VariablesAreInputTypesRule.js +33 -0
  353. package/validation/rules/VariablesAreInputTypesRule.mjs +32 -0
  354. package/validation/rules/VariablesInAllowedPositionRule.d.ts +28 -0
  355. package/validation/rules/VariablesInAllowedPositionRule.js +35 -1
  356. package/validation/rules/VariablesInAllowedPositionRule.mjs +34 -1
  357. package/validation/rules/custom/NoDeprecatedCustomRule.d.ts +41 -0
  358. package/validation/rules/custom/NoDeprecatedCustomRule.js +42 -0
  359. package/validation/rules/custom/NoDeprecatedCustomRule.mjs +41 -0
  360. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.ts +28 -0
  361. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js +29 -0
  362. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.mjs +28 -0
  363. package/validation/specifiedRules.d.ts +2 -3
  364. package/validation/specifiedRules.js +2 -3
  365. package/validation/specifiedRules.mjs +2 -3
  366. package/validation/validate.d.ts +70 -9
  367. package/validation/validate.js +63 -7
  368. package/validation/validate.mjs +63 -7
  369. package/version.d.ts +3 -6
  370. package/version.js +6 -8
  371. package/version.mjs +5 -8
@@ -18,12 +18,82 @@ var _introspection = require('../type/introspection.js');
18
18
 
19
19
  var _typeFromAST = require('./typeFromAST.js');
20
20
 
21
+ /** @category Type Info */
22
+
21
23
  /**
22
24
  * TypeInfo is a utility class which, given a GraphQL schema, can keep track
23
25
  * of the current field and type definitions at any point in a GraphQL document
24
26
  * AST during a recursive descent by calling `enter(node)` and `leave(node)`.
25
27
  */
26
28
  class TypeInfo {
29
+ /**
30
+ * Creates a TypeInfo instance.
31
+ * @param schema - Schema used for type lookups.
32
+ * @param initialType - Optional type to use at the start of traversal.
33
+ * @param getFieldDefFn - Optional field definition lookup override.
34
+ * @example
35
+ * ```ts
36
+ * // Track field types during a visitWithTypeInfo traversal.
37
+ * import { parse, visit } from 'graphql/language';
38
+ * import { buildSchema } from 'graphql/utilities';
39
+ * import { TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
40
+ *
41
+ * const schema = buildSchema(`
42
+ * type Query {
43
+ * greeting: String
44
+ * }
45
+ * `);
46
+ * const typeInfo = new TypeInfo(schema);
47
+ * const seenTypes = [];
48
+ *
49
+ * visit(
50
+ * parse('{ greeting }'),
51
+ * visitWithTypeInfo(typeInfo, {
52
+ * Field: () => {
53
+ * seenTypes.push(String(typeInfo.getType()));
54
+ * },
55
+ * }),
56
+ * );
57
+ *
58
+ * seenTypes; // => ['String']
59
+ * ```
60
+ * @example
61
+ * ```ts
62
+ * // This variant starts from an initial type and supplies a field definition resolver.
63
+ * import { Kind } from 'graphql/language';
64
+ * import { GraphQLString } from 'graphql/type';
65
+ * import { buildSchema, TypeInfo } from 'graphql/utilities';
66
+ *
67
+ * const schema = buildSchema(`
68
+ * type Query {
69
+ * greeting: String
70
+ * }
71
+ * `);
72
+ * const typeInfo = new TypeInfo(schema, schema.getQueryType(), () => ({
73
+ * name: 'virtualGreeting',
74
+ * description: undefined,
75
+ * type: GraphQLString,
76
+ * args: [],
77
+ * resolve: undefined,
78
+ * subscribe: undefined,
79
+ * deprecationReason: undefined,
80
+ * extensions: Object.create(null),
81
+ * astNode: undefined,
82
+ * }));
83
+ *
84
+ * typeInfo.enter({
85
+ * kind: Kind.SELECTION_SET,
86
+ * selections: [],
87
+ * });
88
+ * typeInfo.enter({
89
+ * kind: Kind.FIELD,
90
+ * name: { kind: Kind.NAME, value: 'ignored' },
91
+ * });
92
+ *
93
+ * typeInfo.getFieldDef()?.name; // => 'virtualGreeting'
94
+ * String(typeInfo.getType()); // => 'String'
95
+ * ```
96
+ */
27
97
  constructor(
28
98
  schema,
29
99
  /**
@@ -31,7 +101,11 @@ class TypeInfo {
31
101
  * beginning somewhere other than documents.
32
102
  */
33
103
  initialType,
34
- /** @deprecated will be removed in 17.0.0 */
104
+ /**
105
+ * Deprecated field definition lookup override. Use TypeInfo's built-in
106
+ * field definition lookup instead because this hook will be removed in v17.
107
+ * @deprecated will be removed in 17.0.0
108
+ */
35
109
  getFieldDefFn,
36
110
  ) {
37
111
  this._schema = schema;
@@ -62,58 +136,365 @@ class TypeInfo {
62
136
  }
63
137
  }
64
138
  }
139
+ /**
140
+ * Returns the value used by `Object.prototype.toString`.
141
+ * @returns The built-in string tag for this object.
142
+ */
65
143
 
66
144
  get [Symbol.toStringTag]() {
67
145
  return 'TypeInfo';
68
146
  }
147
+ /**
148
+ * Returns the current output type at this point in traversal.
149
+ * @returns The current output type, if known.
150
+ * @example
151
+ * ```ts
152
+ * import { parse, visit } from 'graphql/language';
153
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
154
+ *
155
+ * const schema = buildSchema(`
156
+ * type Query {
157
+ * viewer: User
158
+ * }
159
+ *
160
+ * type User {
161
+ * name: String
162
+ * }
163
+ * `);
164
+ * const typeInfo = new TypeInfo(schema);
165
+ * const fieldTypes = {};
166
+ *
167
+ * visit(
168
+ * parse('{ viewer { name } }'),
169
+ * visitWithTypeInfo(typeInfo, {
170
+ * Field: (node) => {
171
+ * fieldTypes[node.name.value] = String(typeInfo.getType());
172
+ * },
173
+ * }),
174
+ * );
175
+ *
176
+ * fieldTypes; // => { viewer: 'User', name: 'String' }
177
+ * ```
178
+ */
69
179
 
70
180
  getType() {
71
181
  if (this._typeStack.length > 0) {
72
182
  return this._typeStack[this._typeStack.length - 1];
73
183
  }
74
184
  }
185
+ /**
186
+ * Returns the current parent composite type.
187
+ * @returns The current parent composite type, if known.
188
+ * @example
189
+ * ```ts
190
+ * import { parse, visit } from 'graphql/language';
191
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
192
+ *
193
+ * const schema = buildSchema(`
194
+ * type Query {
195
+ * viewer: User
196
+ * }
197
+ *
198
+ * type User {
199
+ * name: String
200
+ * }
201
+ * `);
202
+ * const typeInfo = new TypeInfo(schema);
203
+ * const parentTypes = {};
204
+ *
205
+ * visit(
206
+ * parse('{ viewer { name } }'),
207
+ * visitWithTypeInfo(typeInfo, {
208
+ * Field: (node) => {
209
+ * parentTypes[node.name.value] = String(typeInfo.getParentType());
210
+ * },
211
+ * }),
212
+ * );
213
+ *
214
+ * parentTypes; // => { viewer: 'Query', name: 'User' }
215
+ * ```
216
+ */
75
217
 
76
218
  getParentType() {
77
219
  if (this._parentTypeStack.length > 0) {
78
220
  return this._parentTypeStack[this._parentTypeStack.length - 1];
79
221
  }
80
222
  }
223
+ /**
224
+ * Returns the current input type at this point in traversal.
225
+ * @returns The current input type, if known.
226
+ * @example
227
+ * ```ts
228
+ * import { parse, visit } from 'graphql/language';
229
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
230
+ *
231
+ * const schema = buildSchema(`
232
+ * type Query {
233
+ * reviews(stars: Int!, sort: Sort = NEWEST): [String]
234
+ * }
235
+ *
236
+ * enum Sort {
237
+ * NEWEST
238
+ * OLDEST
239
+ * }
240
+ * `);
241
+ * const typeInfo = new TypeInfo(schema);
242
+ * const inputTypes = {};
243
+ *
244
+ * visit(
245
+ * parse('{ reviews(stars: 5, sort: OLDEST) }'),
246
+ * visitWithTypeInfo(typeInfo, {
247
+ * Argument: (node) => {
248
+ * inputTypes[node.name.value] = String(typeInfo.getInputType());
249
+ * },
250
+ * }),
251
+ * );
252
+ *
253
+ * inputTypes; // => { stars: 'Int!', sort: 'Sort' }
254
+ * ```
255
+ */
81
256
 
82
257
  getInputType() {
83
258
  if (this._inputTypeStack.length > 0) {
84
259
  return this._inputTypeStack[this._inputTypeStack.length - 1];
85
260
  }
86
261
  }
262
+ /**
263
+ * Returns the parent input type for the current input position.
264
+ * @returns The parent input type, if known.
265
+ * @example
266
+ * ```ts
267
+ * import { parse, visit } from 'graphql/language';
268
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
269
+ *
270
+ * const schema = buildSchema(`
271
+ * input ReviewFilter {
272
+ * stars: Int!
273
+ * }
274
+ *
275
+ * type Query {
276
+ * reviews(filter: ReviewFilter): [String]
277
+ * }
278
+ * `);
279
+ * const typeInfo = new TypeInfo(schema);
280
+ * const parentInputTypes = {};
281
+ *
282
+ * visit(
283
+ * parse('{ reviews(filter: { stars: 5 }) }'),
284
+ * visitWithTypeInfo(typeInfo, {
285
+ * ObjectField: (node) => {
286
+ * parentInputTypes[node.name.value] = String(typeInfo.getParentInputType());
287
+ * },
288
+ * }),
289
+ * );
290
+ *
291
+ * parentInputTypes; // => { stars: 'ReviewFilter' }
292
+ * ```
293
+ */
87
294
 
88
295
  getParentInputType() {
89
296
  if (this._inputTypeStack.length > 1) {
90
297
  return this._inputTypeStack[this._inputTypeStack.length - 2];
91
298
  }
92
299
  }
300
+ /**
301
+ * Returns the current field definition.
302
+ * @returns The current field definition, if known.
303
+ * @example
304
+ * ```ts
305
+ * import { parse, visit } from 'graphql/language';
306
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
307
+ *
308
+ * const schema = buildSchema(`
309
+ * type Query {
310
+ * greeting: String
311
+ * }
312
+ * `);
313
+ * const typeInfo = new TypeInfo(schema);
314
+ * let fieldName;
315
+ *
316
+ * visit(
317
+ * parse('{ greeting }'),
318
+ * visitWithTypeInfo(typeInfo, {
319
+ * Field: () => {
320
+ * fieldName = typeInfo.getFieldDef()?.name;
321
+ * },
322
+ * }),
323
+ * );
324
+ *
325
+ * fieldName; // => 'greeting'
326
+ * ```
327
+ */
93
328
 
94
329
  getFieldDef() {
95
330
  if (this._fieldDefStack.length > 0) {
96
331
  return this._fieldDefStack[this._fieldDefStack.length - 1];
97
332
  }
98
333
  }
334
+ /**
335
+ * Returns the default value for the current input position.
336
+ * @returns The current default value, if one is available.
337
+ * @example
338
+ * ```ts
339
+ * import { parse, visit } from 'graphql/language';
340
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
341
+ *
342
+ * const schema = buildSchema(`
343
+ * type Query {
344
+ * reviews(limit: Int = 10): [String]
345
+ * }
346
+ * `);
347
+ * const typeInfo = new TypeInfo(schema);
348
+ * let defaultLimit;
349
+ *
350
+ * visit(
351
+ * parse('{ reviews(limit: 5) }'),
352
+ * visitWithTypeInfo(typeInfo, {
353
+ * Argument: () => {
354
+ * defaultLimit = typeInfo.getDefaultValue();
355
+ * },
356
+ * }),
357
+ * );
358
+ *
359
+ * defaultLimit; // => 10
360
+ * ```
361
+ */
99
362
 
100
363
  getDefaultValue() {
101
364
  if (this._defaultValueStack.length > 0) {
102
365
  return this._defaultValueStack[this._defaultValueStack.length - 1];
103
366
  }
104
367
  }
368
+ /**
369
+ * Returns the current directive definition.
370
+ * @returns The current directive definition, if known.
371
+ * @example
372
+ * ```ts
373
+ * import { parse, visit } from 'graphql/language';
374
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
375
+ *
376
+ * const schema = buildSchema(`
377
+ * type Query {
378
+ * greeting: String
379
+ * }
380
+ * `);
381
+ * const typeInfo = new TypeInfo(schema);
382
+ * let directiveName;
383
+ *
384
+ * visit(
385
+ * parse('{ greeting @include(if: true) }'),
386
+ * visitWithTypeInfo(typeInfo, {
387
+ * Directive: () => {
388
+ * directiveName = typeInfo.getDirective()?.name;
389
+ * },
390
+ * }),
391
+ * );
392
+ *
393
+ * directiveName; // => 'include'
394
+ * ```
395
+ */
105
396
 
106
397
  getDirective() {
107
398
  return this._directive;
108
399
  }
400
+ /**
401
+ * Returns the current argument definition.
402
+ * @returns The current argument definition, if known.
403
+ * @example
404
+ * ```ts
405
+ * import { parse, visit } from 'graphql/language';
406
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
407
+ *
408
+ * const schema = buildSchema(`
409
+ * type Query {
410
+ * reviews(limit: Int = 10): [String]
411
+ * }
412
+ * `);
413
+ * const typeInfo = new TypeInfo(schema);
414
+ * let argumentName;
415
+ *
416
+ * visit(
417
+ * parse('{ reviews(limit: 5) }'),
418
+ * visitWithTypeInfo(typeInfo, {
419
+ * Argument: () => {
420
+ * argumentName = typeInfo.getArgument()?.name;
421
+ * },
422
+ * }),
423
+ * );
424
+ *
425
+ * argumentName; // => 'limit'
426
+ * ```
427
+ */
109
428
 
110
429
  getArgument() {
111
430
  return this._argument;
112
431
  }
432
+ /**
433
+ * Returns the current enum value definition.
434
+ * @returns The current enum value definition, if known.
435
+ * @example
436
+ * ```ts
437
+ * import { parse, visit } from 'graphql/language';
438
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
439
+ *
440
+ * const schema = buildSchema(`
441
+ * enum Sort {
442
+ * NEWEST
443
+ * OLDEST
444
+ * }
445
+ *
446
+ * type Query {
447
+ * reviews(sort: Sort = NEWEST): [String]
448
+ * }
449
+ * `);
450
+ * const typeInfo = new TypeInfo(schema);
451
+ * let enumValueName;
452
+ *
453
+ * visit(
454
+ * parse('{ reviews(sort: OLDEST) }'),
455
+ * visitWithTypeInfo(typeInfo, {
456
+ * EnumValue: () => {
457
+ * enumValueName = typeInfo.getEnumValue()?.name;
458
+ * },
459
+ * }),
460
+ * );
461
+ *
462
+ * enumValueName; // => 'OLDEST'
463
+ * ```
464
+ */
113
465
 
114
466
  getEnumValue() {
115
467
  return this._enumValue;
116
468
  }
469
+ /**
470
+ * Updates this TypeInfo instance for an entered AST node.
471
+ * @param node - AST node being entered.
472
+ * @returns Nothing.
473
+ * @example
474
+ * ```ts
475
+ * import { Kind, parse } from 'graphql/language';
476
+ * import { buildSchema, TypeInfo } from 'graphql/utilities';
477
+ *
478
+ * const schema = buildSchema(`
479
+ * type Query {
480
+ * greeting: String
481
+ * }
482
+ * `);
483
+ * const document = parse('{ greeting }');
484
+ * const operation = document.definitions[0];
485
+ * const selectionSet = operation.selectionSet;
486
+ * const field = selectionSet.selections[0];
487
+ * const typeInfo = new TypeInfo(schema);
488
+ *
489
+ * typeInfo.enter(operation);
490
+ * typeInfo.enter(selectionSet);
491
+ * typeInfo.enter(field);
492
+ *
493
+ * field.kind; // => Kind.FIELD
494
+ * typeInfo.getParentType()?.name; // => 'Query'
495
+ * String(typeInfo.getType()); // => 'String'
496
+ * ```
497
+ */
117
498
 
118
499
  enter(node) {
119
500
  const schema = this._schema; // Note: many of the types below are explicitly typed as "unknown" to drop
@@ -280,6 +661,35 @@ class TypeInfo {
280
661
  default: // Ignore other nodes
281
662
  }
282
663
  }
664
+ /**
665
+ * Updates this TypeInfo instance for a left AST node.
666
+ * @param node - AST node being entered.
667
+ * @returns Nothing.
668
+ * @example
669
+ * ```ts
670
+ * import { parse } from 'graphql/language';
671
+ * import { buildSchema, TypeInfo } from 'graphql/utilities';
672
+ *
673
+ * const schema = buildSchema(`
674
+ * type Query {
675
+ * greeting: String
676
+ * }
677
+ * `);
678
+ * const document = parse('{ greeting }');
679
+ * const operation = document.definitions[0];
680
+ * const selectionSet = operation.selectionSet;
681
+ * const field = selectionSet.selections[0];
682
+ * const typeInfo = new TypeInfo(schema);
683
+ *
684
+ * typeInfo.enter(operation);
685
+ * typeInfo.enter(selectionSet);
686
+ * typeInfo.enter(field);
687
+ * String(typeInfo.getType()); // => 'String'
688
+ *
689
+ * typeInfo.leave(field);
690
+ * typeInfo.getType(); // => undefined
691
+ * ```
692
+ */
283
693
 
284
694
  leave(node) {
285
695
  switch (node.kind) {
@@ -343,6 +753,8 @@ exports.TypeInfo = TypeInfo;
343
753
  * Not exactly the same as the executor's definition of getFieldDef, in this
344
754
  * statically evaluated environment we do not always have an Object type,
345
755
  * and need to handle Interface and Union types.
756
+ *
757
+ * @internal
346
758
  */
347
759
  function getFieldDef(schema, parentType, fieldNode) {
348
760
  const name = fieldNode.name.value;
@@ -378,6 +790,37 @@ function getFieldDef(schema, parentType, fieldNode) {
378
790
  /**
379
791
  * Creates a new visitor instance which maintains a provided TypeInfo instance
380
792
  * along with visiting visitor.
793
+ * @param typeInfo - TypeInfo instance to update during traversal.
794
+ * @param visitor - Visitor callbacks to wrap with TypeInfo updates.
795
+ * @returns A visitor that keeps TypeInfo in sync while delegating callbacks.
796
+ * @example
797
+ * ```ts
798
+ * import { parse, visit } from 'graphql/language';
799
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
800
+ *
801
+ * const schema = buildSchema(`
802
+ * type Query {
803
+ * greeting: String
804
+ * }
805
+ * `);
806
+ * const typeInfo = new TypeInfo(schema);
807
+ * const fields = [];
808
+ *
809
+ * visit(
810
+ * parse('{ greeting }'),
811
+ * visitWithTypeInfo(typeInfo, {
812
+ * Field: (node) => {
813
+ * fields.push({
814
+ * name: node.name.value,
815
+ * parentType: String(typeInfo.getParentType()),
816
+ * type: String(typeInfo.getType()),
817
+ * });
818
+ * },
819
+ * }),
820
+ * );
821
+ *
822
+ * fields; // => [{ name: 'greeting', parentType: 'Query', type: 'String' }]
823
+ * ```
381
824
  */
382
825
 
383
826
  function visitWithTypeInfo(typeInfo, visitor) {