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
@@ -1,3 +1,4 @@
1
+ /** @category Type Info */
1
2
  import { isNode } from '../language/ast.mjs';
2
3
  import { Kind } from '../language/kinds.mjs';
3
4
  import { getEnterLeaveForKind } from '../language/visitor.mjs';
@@ -26,6 +27,74 @@ import { typeFromAST } from './typeFromAST.mjs';
26
27
  */
27
28
 
28
29
  export class TypeInfo {
30
+ /**
31
+ * Creates a TypeInfo instance.
32
+ * @param schema - Schema used for type lookups.
33
+ * @param initialType - Optional type to use at the start of traversal.
34
+ * @param getFieldDefFn - Optional field definition lookup override.
35
+ * @example
36
+ * ```ts
37
+ * // Track field types during a visitWithTypeInfo traversal.
38
+ * import { parse, visit } from 'graphql/language';
39
+ * import { buildSchema } from 'graphql/utilities';
40
+ * import { TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
41
+ *
42
+ * const schema = buildSchema(`
43
+ * type Query {
44
+ * greeting: String
45
+ * }
46
+ * `);
47
+ * const typeInfo = new TypeInfo(schema);
48
+ * const seenTypes = [];
49
+ *
50
+ * visit(
51
+ * parse('{ greeting }'),
52
+ * visitWithTypeInfo(typeInfo, {
53
+ * Field: () => {
54
+ * seenTypes.push(String(typeInfo.getType()));
55
+ * },
56
+ * }),
57
+ * );
58
+ *
59
+ * seenTypes; // => ['String']
60
+ * ```
61
+ * @example
62
+ * ```ts
63
+ * // This variant starts from an initial type and supplies a field definition resolver.
64
+ * import { Kind } from 'graphql/language';
65
+ * import { GraphQLString } from 'graphql/type';
66
+ * import { buildSchema, TypeInfo } from 'graphql/utilities';
67
+ *
68
+ * const schema = buildSchema(`
69
+ * type Query {
70
+ * greeting: String
71
+ * }
72
+ * `);
73
+ * const typeInfo = new TypeInfo(schema, schema.getQueryType(), () => ({
74
+ * name: 'virtualGreeting',
75
+ * description: undefined,
76
+ * type: GraphQLString,
77
+ * args: [],
78
+ * resolve: undefined,
79
+ * subscribe: undefined,
80
+ * deprecationReason: undefined,
81
+ * extensions: Object.create(null),
82
+ * astNode: undefined,
83
+ * }));
84
+ *
85
+ * typeInfo.enter({
86
+ * kind: Kind.SELECTION_SET,
87
+ * selections: [],
88
+ * });
89
+ * typeInfo.enter({
90
+ * kind: Kind.FIELD,
91
+ * name: { kind: Kind.NAME, value: 'ignored' },
92
+ * });
93
+ *
94
+ * typeInfo.getFieldDef()?.name; // => 'virtualGreeting'
95
+ * String(typeInfo.getType()); // => 'String'
96
+ * ```
97
+ */
29
98
  constructor(
30
99
  schema,
31
100
  /**
@@ -33,7 +102,11 @@ export class TypeInfo {
33
102
  * beginning somewhere other than documents.
34
103
  */
35
104
  initialType,
36
- /** @deprecated will be removed in 17.0.0 */
105
+ /**
106
+ * Deprecated field definition lookup override. Use TypeInfo's built-in
107
+ * field definition lookup instead because this hook will be removed in v17.
108
+ * @deprecated will be removed in 17.0.0
109
+ */
37
110
  getFieldDefFn,
38
111
  ) {
39
112
  this._schema = schema;
@@ -64,58 +137,365 @@ export class TypeInfo {
64
137
  }
65
138
  }
66
139
  }
140
+ /**
141
+ * Returns the value used by `Object.prototype.toString`.
142
+ * @returns The built-in string tag for this object.
143
+ */
67
144
 
68
145
  get [Symbol.toStringTag]() {
69
146
  return 'TypeInfo';
70
147
  }
148
+ /**
149
+ * Returns the current output type at this point in traversal.
150
+ * @returns The current output type, if known.
151
+ * @example
152
+ * ```ts
153
+ * import { parse, visit } from 'graphql/language';
154
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
155
+ *
156
+ * const schema = buildSchema(`
157
+ * type Query {
158
+ * viewer: User
159
+ * }
160
+ *
161
+ * type User {
162
+ * name: String
163
+ * }
164
+ * `);
165
+ * const typeInfo = new TypeInfo(schema);
166
+ * const fieldTypes = {};
167
+ *
168
+ * visit(
169
+ * parse('{ viewer { name } }'),
170
+ * visitWithTypeInfo(typeInfo, {
171
+ * Field: (node) => {
172
+ * fieldTypes[node.name.value] = String(typeInfo.getType());
173
+ * },
174
+ * }),
175
+ * );
176
+ *
177
+ * fieldTypes; // => { viewer: 'User', name: 'String' }
178
+ * ```
179
+ */
71
180
 
72
181
  getType() {
73
182
  if (this._typeStack.length > 0) {
74
183
  return this._typeStack[this._typeStack.length - 1];
75
184
  }
76
185
  }
186
+ /**
187
+ * Returns the current parent composite type.
188
+ * @returns The current parent composite type, if known.
189
+ * @example
190
+ * ```ts
191
+ * import { parse, visit } from 'graphql/language';
192
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
193
+ *
194
+ * const schema = buildSchema(`
195
+ * type Query {
196
+ * viewer: User
197
+ * }
198
+ *
199
+ * type User {
200
+ * name: String
201
+ * }
202
+ * `);
203
+ * const typeInfo = new TypeInfo(schema);
204
+ * const parentTypes = {};
205
+ *
206
+ * visit(
207
+ * parse('{ viewer { name } }'),
208
+ * visitWithTypeInfo(typeInfo, {
209
+ * Field: (node) => {
210
+ * parentTypes[node.name.value] = String(typeInfo.getParentType());
211
+ * },
212
+ * }),
213
+ * );
214
+ *
215
+ * parentTypes; // => { viewer: 'Query', name: 'User' }
216
+ * ```
217
+ */
77
218
 
78
219
  getParentType() {
79
220
  if (this._parentTypeStack.length > 0) {
80
221
  return this._parentTypeStack[this._parentTypeStack.length - 1];
81
222
  }
82
223
  }
224
+ /**
225
+ * Returns the current input type at this point in traversal.
226
+ * @returns The current input type, if known.
227
+ * @example
228
+ * ```ts
229
+ * import { parse, visit } from 'graphql/language';
230
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
231
+ *
232
+ * const schema = buildSchema(`
233
+ * type Query {
234
+ * reviews(stars: Int!, sort: Sort = NEWEST): [String]
235
+ * }
236
+ *
237
+ * enum Sort {
238
+ * NEWEST
239
+ * OLDEST
240
+ * }
241
+ * `);
242
+ * const typeInfo = new TypeInfo(schema);
243
+ * const inputTypes = {};
244
+ *
245
+ * visit(
246
+ * parse('{ reviews(stars: 5, sort: OLDEST) }'),
247
+ * visitWithTypeInfo(typeInfo, {
248
+ * Argument: (node) => {
249
+ * inputTypes[node.name.value] = String(typeInfo.getInputType());
250
+ * },
251
+ * }),
252
+ * );
253
+ *
254
+ * inputTypes; // => { stars: 'Int!', sort: 'Sort' }
255
+ * ```
256
+ */
83
257
 
84
258
  getInputType() {
85
259
  if (this._inputTypeStack.length > 0) {
86
260
  return this._inputTypeStack[this._inputTypeStack.length - 1];
87
261
  }
88
262
  }
263
+ /**
264
+ * Returns the parent input type for the current input position.
265
+ * @returns The parent input type, if known.
266
+ * @example
267
+ * ```ts
268
+ * import { parse, visit } from 'graphql/language';
269
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
270
+ *
271
+ * const schema = buildSchema(`
272
+ * input ReviewFilter {
273
+ * stars: Int!
274
+ * }
275
+ *
276
+ * type Query {
277
+ * reviews(filter: ReviewFilter): [String]
278
+ * }
279
+ * `);
280
+ * const typeInfo = new TypeInfo(schema);
281
+ * const parentInputTypes = {};
282
+ *
283
+ * visit(
284
+ * parse('{ reviews(filter: { stars: 5 }) }'),
285
+ * visitWithTypeInfo(typeInfo, {
286
+ * ObjectField: (node) => {
287
+ * parentInputTypes[node.name.value] = String(typeInfo.getParentInputType());
288
+ * },
289
+ * }),
290
+ * );
291
+ *
292
+ * parentInputTypes; // => { stars: 'ReviewFilter' }
293
+ * ```
294
+ */
89
295
 
90
296
  getParentInputType() {
91
297
  if (this._inputTypeStack.length > 1) {
92
298
  return this._inputTypeStack[this._inputTypeStack.length - 2];
93
299
  }
94
300
  }
301
+ /**
302
+ * Returns the current field definition.
303
+ * @returns The current field definition, if known.
304
+ * @example
305
+ * ```ts
306
+ * import { parse, visit } from 'graphql/language';
307
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
308
+ *
309
+ * const schema = buildSchema(`
310
+ * type Query {
311
+ * greeting: String
312
+ * }
313
+ * `);
314
+ * const typeInfo = new TypeInfo(schema);
315
+ * let fieldName;
316
+ *
317
+ * visit(
318
+ * parse('{ greeting }'),
319
+ * visitWithTypeInfo(typeInfo, {
320
+ * Field: () => {
321
+ * fieldName = typeInfo.getFieldDef()?.name;
322
+ * },
323
+ * }),
324
+ * );
325
+ *
326
+ * fieldName; // => 'greeting'
327
+ * ```
328
+ */
95
329
 
96
330
  getFieldDef() {
97
331
  if (this._fieldDefStack.length > 0) {
98
332
  return this._fieldDefStack[this._fieldDefStack.length - 1];
99
333
  }
100
334
  }
335
+ /**
336
+ * Returns the default value for the current input position.
337
+ * @returns The current default value, if one is available.
338
+ * @example
339
+ * ```ts
340
+ * import { parse, visit } from 'graphql/language';
341
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
342
+ *
343
+ * const schema = buildSchema(`
344
+ * type Query {
345
+ * reviews(limit: Int = 10): [String]
346
+ * }
347
+ * `);
348
+ * const typeInfo = new TypeInfo(schema);
349
+ * let defaultLimit;
350
+ *
351
+ * visit(
352
+ * parse('{ reviews(limit: 5) }'),
353
+ * visitWithTypeInfo(typeInfo, {
354
+ * Argument: () => {
355
+ * defaultLimit = typeInfo.getDefaultValue();
356
+ * },
357
+ * }),
358
+ * );
359
+ *
360
+ * defaultLimit; // => 10
361
+ * ```
362
+ */
101
363
 
102
364
  getDefaultValue() {
103
365
  if (this._defaultValueStack.length > 0) {
104
366
  return this._defaultValueStack[this._defaultValueStack.length - 1];
105
367
  }
106
368
  }
369
+ /**
370
+ * Returns the current directive definition.
371
+ * @returns The current directive definition, if known.
372
+ * @example
373
+ * ```ts
374
+ * import { parse, visit } from 'graphql/language';
375
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
376
+ *
377
+ * const schema = buildSchema(`
378
+ * type Query {
379
+ * greeting: String
380
+ * }
381
+ * `);
382
+ * const typeInfo = new TypeInfo(schema);
383
+ * let directiveName;
384
+ *
385
+ * visit(
386
+ * parse('{ greeting @include(if: true) }'),
387
+ * visitWithTypeInfo(typeInfo, {
388
+ * Directive: () => {
389
+ * directiveName = typeInfo.getDirective()?.name;
390
+ * },
391
+ * }),
392
+ * );
393
+ *
394
+ * directiveName; // => 'include'
395
+ * ```
396
+ */
107
397
 
108
398
  getDirective() {
109
399
  return this._directive;
110
400
  }
401
+ /**
402
+ * Returns the current argument definition.
403
+ * @returns The current argument definition, if known.
404
+ * @example
405
+ * ```ts
406
+ * import { parse, visit } from 'graphql/language';
407
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
408
+ *
409
+ * const schema = buildSchema(`
410
+ * type Query {
411
+ * reviews(limit: Int = 10): [String]
412
+ * }
413
+ * `);
414
+ * const typeInfo = new TypeInfo(schema);
415
+ * let argumentName;
416
+ *
417
+ * visit(
418
+ * parse('{ reviews(limit: 5) }'),
419
+ * visitWithTypeInfo(typeInfo, {
420
+ * Argument: () => {
421
+ * argumentName = typeInfo.getArgument()?.name;
422
+ * },
423
+ * }),
424
+ * );
425
+ *
426
+ * argumentName; // => 'limit'
427
+ * ```
428
+ */
111
429
 
112
430
  getArgument() {
113
431
  return this._argument;
114
432
  }
433
+ /**
434
+ * Returns the current enum value definition.
435
+ * @returns The current enum value definition, if known.
436
+ * @example
437
+ * ```ts
438
+ * import { parse, visit } from 'graphql/language';
439
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
440
+ *
441
+ * const schema = buildSchema(`
442
+ * enum Sort {
443
+ * NEWEST
444
+ * OLDEST
445
+ * }
446
+ *
447
+ * type Query {
448
+ * reviews(sort: Sort = NEWEST): [String]
449
+ * }
450
+ * `);
451
+ * const typeInfo = new TypeInfo(schema);
452
+ * let enumValueName;
453
+ *
454
+ * visit(
455
+ * parse('{ reviews(sort: OLDEST) }'),
456
+ * visitWithTypeInfo(typeInfo, {
457
+ * EnumValue: () => {
458
+ * enumValueName = typeInfo.getEnumValue()?.name;
459
+ * },
460
+ * }),
461
+ * );
462
+ *
463
+ * enumValueName; // => 'OLDEST'
464
+ * ```
465
+ */
115
466
 
116
467
  getEnumValue() {
117
468
  return this._enumValue;
118
469
  }
470
+ /**
471
+ * Updates this TypeInfo instance for an entered AST node.
472
+ * @param node - AST node being entered.
473
+ * @returns Nothing.
474
+ * @example
475
+ * ```ts
476
+ * import { Kind, parse } from 'graphql/language';
477
+ * import { buildSchema, TypeInfo } from 'graphql/utilities';
478
+ *
479
+ * const schema = buildSchema(`
480
+ * type Query {
481
+ * greeting: String
482
+ * }
483
+ * `);
484
+ * const document = parse('{ greeting }');
485
+ * const operation = document.definitions[0];
486
+ * const selectionSet = operation.selectionSet;
487
+ * const field = selectionSet.selections[0];
488
+ * const typeInfo = new TypeInfo(schema);
489
+ *
490
+ * typeInfo.enter(operation);
491
+ * typeInfo.enter(selectionSet);
492
+ * typeInfo.enter(field);
493
+ *
494
+ * field.kind; // => Kind.FIELD
495
+ * typeInfo.getParentType()?.name; // => 'Query'
496
+ * String(typeInfo.getType()); // => 'String'
497
+ * ```
498
+ */
119
499
 
120
500
  enter(node) {
121
501
  const schema = this._schema; // Note: many of the types below are explicitly typed as "unknown" to drop
@@ -268,6 +648,35 @@ export class TypeInfo {
268
648
  default: // Ignore other nodes
269
649
  }
270
650
  }
651
+ /**
652
+ * Updates this TypeInfo instance for a left AST node.
653
+ * @param node - AST node being entered.
654
+ * @returns Nothing.
655
+ * @example
656
+ * ```ts
657
+ * import { parse } from 'graphql/language';
658
+ * import { buildSchema, TypeInfo } from 'graphql/utilities';
659
+ *
660
+ * const schema = buildSchema(`
661
+ * type Query {
662
+ * greeting: String
663
+ * }
664
+ * `);
665
+ * const document = parse('{ greeting }');
666
+ * const operation = document.definitions[0];
667
+ * const selectionSet = operation.selectionSet;
668
+ * const field = selectionSet.selections[0];
669
+ * const typeInfo = new TypeInfo(schema);
670
+ *
671
+ * typeInfo.enter(operation);
672
+ * typeInfo.enter(selectionSet);
673
+ * typeInfo.enter(field);
674
+ * String(typeInfo.getType()); // => 'String'
675
+ *
676
+ * typeInfo.leave(field);
677
+ * typeInfo.getType(); // => undefined
678
+ * ```
679
+ */
271
680
 
272
681
  leave(node) {
273
682
  switch (node.kind) {
@@ -329,6 +738,8 @@ export class TypeInfo {
329
738
  * Not exactly the same as the executor's definition of getFieldDef, in this
330
739
  * statically evaluated environment we do not always have an Object type,
331
740
  * and need to handle Interface and Union types.
741
+ *
742
+ * @internal
332
743
  */
333
744
  function getFieldDef(schema, parentType, fieldNode) {
334
745
  const name = fieldNode.name.value;
@@ -355,6 +766,37 @@ function getFieldDef(schema, parentType, fieldNode) {
355
766
  /**
356
767
  * Creates a new visitor instance which maintains a provided TypeInfo instance
357
768
  * along with visiting visitor.
769
+ * @param typeInfo - TypeInfo instance to update during traversal.
770
+ * @param visitor - Visitor callbacks to wrap with TypeInfo updates.
771
+ * @returns A visitor that keeps TypeInfo in sync while delegating callbacks.
772
+ * @example
773
+ * ```ts
774
+ * import { parse, visit } from 'graphql/language';
775
+ * import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
776
+ *
777
+ * const schema = buildSchema(`
778
+ * type Query {
779
+ * greeting: String
780
+ * }
781
+ * `);
782
+ * const typeInfo = new TypeInfo(schema);
783
+ * const fields = [];
784
+ *
785
+ * visit(
786
+ * parse('{ greeting }'),
787
+ * visitWithTypeInfo(typeInfo, {
788
+ * Field: (node) => {
789
+ * fields.push({
790
+ * name: node.name.value,
791
+ * parentType: String(typeInfo.getParentType()),
792
+ * type: String(typeInfo.getType()),
793
+ * });
794
+ * },
795
+ * }),
796
+ * );
797
+ *
798
+ * fields; // => [{ name: 'greeting', parentType: 'Query', type: 'String' }]
799
+ * ```
358
800
  */
359
801
 
360
802
  export function visitWithTypeInfo(typeInfo, visitor) {
@@ -1,11 +1,36 @@
1
+ /** @category Validation */
1
2
  import { GraphQLError } from '../error/GraphQLError';
2
3
  /**
3
- * Upholds the spec rules about naming.
4
+ * Upholds the spec rules about naming. This deprecated helper is retained for
5
+ * backwards compatibility; call `assertName` instead because assertValidName
6
+ * will be removed in v17.
7
+ * @param name - The GraphQL name to validate.
8
+ * @returns The validated GraphQL name.
9
+ * @example
10
+ * ```ts
11
+ * import { assertValidName } from 'graphql/utilities';
12
+ *
13
+ * assertValidName('User'); // => 'User'
14
+ * assertValidName('__typename'); // throws an error
15
+ * ```
4
16
  * @deprecated Please use `assertName` instead. Will be removed in v17
5
17
  */
6
18
  export declare function assertValidName(name: string): string;
7
19
  /**
8
- * Returns an Error if a name is invalid.
20
+ * Returns an Error if a name is invalid. This deprecated helper is retained for
21
+ * backwards compatibility; call `assertName` and catch the thrown GraphQLError
22
+ * instead because isValidNameError will be removed in v17.
23
+ * @param name - The GraphQL name to validate.
24
+ * @returns A GraphQLError if the name is invalid; otherwise undefined.
25
+ * @example
26
+ * ```ts
27
+ * import { isValidNameError } from 'graphql/utilities';
28
+ *
29
+ * isValidNameError('User'); // => undefined
30
+ *
31
+ * const error = isValidNameError('__typename');
32
+ * error.message; // => 'Name "__typename" must not begin with "__", which is reserved by GraphQL introspection.'
33
+ * ```
9
34
  * @deprecated Please use `assertName` instead. Will be removed in v17
10
35
  */
11
36
  export declare function isValidNameError(
@@ -12,10 +12,23 @@ var _GraphQLError = require('../error/GraphQLError.js');
12
12
 
13
13
  var _assertName = require('../type/assertName.js');
14
14
 
15
+ /** @category Validation */
16
+
15
17
  /* c8 ignore start */
16
18
 
17
19
  /**
18
- * Upholds the spec rules about naming.
20
+ * Upholds the spec rules about naming. This deprecated helper is retained for
21
+ * backwards compatibility; call `assertName` instead because assertValidName
22
+ * will be removed in v17.
23
+ * @param name - The GraphQL name to validate.
24
+ * @returns The validated GraphQL name.
25
+ * @example
26
+ * ```ts
27
+ * import { assertValidName } from 'graphql/utilities';
28
+ *
29
+ * assertValidName('User'); // => 'User'
30
+ * assertValidName('__typename'); // throws an error
31
+ * ```
19
32
  * @deprecated Please use `assertName` instead. Will be removed in v17
20
33
  */
21
34
  function assertValidName(name) {
@@ -28,7 +41,20 @@ function assertValidName(name) {
28
41
  return name;
29
42
  }
30
43
  /**
31
- * Returns an Error if a name is invalid.
44
+ * Returns an Error if a name is invalid. This deprecated helper is retained for
45
+ * backwards compatibility; call `assertName` and catch the thrown GraphQLError
46
+ * instead because isValidNameError will be removed in v17.
47
+ * @param name - The GraphQL name to validate.
48
+ * @returns A GraphQLError if the name is invalid; otherwise undefined.
49
+ * @example
50
+ * ```ts
51
+ * import { isValidNameError } from 'graphql/utilities';
52
+ *
53
+ * isValidNameError('User'); // => undefined
54
+ *
55
+ * const error = isValidNameError('__typename');
56
+ * error.message; // => 'Name "__typename" must not begin with "__", which is reserved by GraphQL introspection.'
57
+ * ```
32
58
  * @deprecated Please use `assertName` instead. Will be removed in v17
33
59
  */
34
60
 
@@ -1,10 +1,22 @@
1
+ /** @category Validation */
1
2
  import { devAssert } from '../jsutils/devAssert.mjs';
2
3
  import { GraphQLError } from '../error/GraphQLError.mjs';
3
4
  import { assertName } from '../type/assertName.mjs';
4
5
  /* c8 ignore start */
5
6
 
6
7
  /**
7
- * Upholds the spec rules about naming.
8
+ * Upholds the spec rules about naming. This deprecated helper is retained for
9
+ * backwards compatibility; call `assertName` instead because assertValidName
10
+ * will be removed in v17.
11
+ * @param name - The GraphQL name to validate.
12
+ * @returns The validated GraphQL name.
13
+ * @example
14
+ * ```ts
15
+ * import { assertValidName } from 'graphql/utilities';
16
+ *
17
+ * assertValidName('User'); // => 'User'
18
+ * assertValidName('__typename'); // throws an error
19
+ * ```
8
20
  * @deprecated Please use `assertName` instead. Will be removed in v17
9
21
  */
10
22
 
@@ -18,7 +30,20 @@ export function assertValidName(name) {
18
30
  return name;
19
31
  }
20
32
  /**
21
- * Returns an Error if a name is invalid.
33
+ * Returns an Error if a name is invalid. This deprecated helper is retained for
34
+ * backwards compatibility; call `assertName` and catch the thrown GraphQLError
35
+ * instead because isValidNameError will be removed in v17.
36
+ * @param name - The GraphQL name to validate.
37
+ * @returns A GraphQLError if the name is invalid; otherwise undefined.
38
+ * @example
39
+ * ```ts
40
+ * import { isValidNameError } from 'graphql/utilities';
41
+ *
42
+ * isValidNameError('User'); // => undefined
43
+ *
44
+ * const error = isValidNameError('__typename');
45
+ * error.message; // => 'Name "__typename" must not begin with "__", which is reserved by GraphQL introspection.'
46
+ * ```
22
47
  * @deprecated Please use `assertName` instead. Will be removed in v17
23
48
  */
24
49