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 Validation Rules */
1
2
  import type { ASTVisitor } from '../../language/visitor';
2
3
  import type { ASTValidationContext } from '../ValidationContext';
3
4
  /**
@@ -7,6 +8,33 @@ import type { ASTValidationContext } from '../ValidationContext';
7
8
  * within operations, or spread within other fragments spread within operations.
8
9
  *
9
10
  * See https://spec.graphql.org/draft/#sec-Fragments-Must-Be-Used
11
+ * @param context - The validation context used while checking the document.
12
+ * @returns A visitor that reports validation errors for this rule.
13
+ * @example
14
+ * ```ts
15
+ * import { buildSchema, parse, validate } from 'graphql';
16
+ * import { NoUnusedFragmentsRule } from 'graphql/validation';
17
+ *
18
+ * const schema = buildSchema(`
19
+ * type Query {
20
+ * name: String
21
+ * }
22
+ * `);
23
+ *
24
+ * const invalidDocument = parse(`
25
+ * fragment Unused on Query { name } query { name }
26
+ * `);
27
+ * const invalidErrors = validate(schema, invalidDocument, [NoUnusedFragmentsRule]);
28
+ *
29
+ * invalidErrors.length; // => 1
30
+ *
31
+ * const validDocument = parse(`
32
+ * fragment Used on Query { name } query { ...Used }
33
+ * `);
34
+ * const validErrors = validate(schema, validDocument, [NoUnusedFragmentsRule]);
35
+ *
36
+ * validErrors; // => []
37
+ * ```
10
38
  */
11
39
  export declare function NoUnusedFragmentsRule(
12
40
  context: ASTValidationContext,
@@ -7,6 +7,8 @@ exports.NoUnusedFragmentsRule = NoUnusedFragmentsRule;
7
7
 
8
8
  var _GraphQLError = require('../../error/GraphQLError.js');
9
9
 
10
+ /** @category Validation Rules */
11
+
10
12
  /**
11
13
  * No unused fragments
12
14
  *
@@ -14,6 +16,33 @@ var _GraphQLError = require('../../error/GraphQLError.js');
14
16
  * within operations, or spread within other fragments spread within operations.
15
17
  *
16
18
  * See https://spec.graphql.org/draft/#sec-Fragments-Must-Be-Used
19
+ * @param context - The validation context used while checking the document.
20
+ * @returns A visitor that reports validation errors for this rule.
21
+ * @example
22
+ * ```ts
23
+ * import { buildSchema, parse, validate } from 'graphql';
24
+ * import { NoUnusedFragmentsRule } from 'graphql/validation';
25
+ *
26
+ * const schema = buildSchema(`
27
+ * type Query {
28
+ * name: String
29
+ * }
30
+ * `);
31
+ *
32
+ * const invalidDocument = parse(`
33
+ * fragment Unused on Query { name } query { name }
34
+ * `);
35
+ * const invalidErrors = validate(schema, invalidDocument, [NoUnusedFragmentsRule]);
36
+ *
37
+ * invalidErrors.length; // => 1
38
+ *
39
+ * const validDocument = parse(`
40
+ * fragment Used on Query { name } query { ...Used }
41
+ * `);
42
+ * const validErrors = validate(schema, validDocument, [NoUnusedFragmentsRule]);
43
+ *
44
+ * validErrors; // => []
45
+ * ```
17
46
  */
18
47
  function NoUnusedFragmentsRule(context) {
19
48
  const operationDefs = [];
@@ -1,3 +1,4 @@
1
+ /** @category Validation Rules */
1
2
  import { GraphQLError } from '../../error/GraphQLError.mjs';
2
3
 
3
4
  /**
@@ -7,6 +8,33 @@ import { GraphQLError } from '../../error/GraphQLError.mjs';
7
8
  * within operations, or spread within other fragments spread within operations.
8
9
  *
9
10
  * See https://spec.graphql.org/draft/#sec-Fragments-Must-Be-Used
11
+ * @param context - The validation context used while checking the document.
12
+ * @returns A visitor that reports validation errors for this rule.
13
+ * @example
14
+ * ```ts
15
+ * import { buildSchema, parse, validate } from 'graphql';
16
+ * import { NoUnusedFragmentsRule } from 'graphql/validation';
17
+ *
18
+ * const schema = buildSchema(`
19
+ * type Query {
20
+ * name: String
21
+ * }
22
+ * `);
23
+ *
24
+ * const invalidDocument = parse(`
25
+ * fragment Unused on Query { name } query { name }
26
+ * `);
27
+ * const invalidErrors = validate(schema, invalidDocument, [NoUnusedFragmentsRule]);
28
+ *
29
+ * invalidErrors.length; // => 1
30
+ *
31
+ * const validDocument = parse(`
32
+ * fragment Used on Query { name } query { ...Used }
33
+ * `);
34
+ * const validErrors = validate(schema, validDocument, [NoUnusedFragmentsRule]);
35
+ *
36
+ * validErrors; // => []
37
+ * ```
10
38
  */
11
39
  export function NoUnusedFragmentsRule(context) {
12
40
  const operationDefs = [];
@@ -1,3 +1,4 @@
1
+ /** @category Validation Rules */
1
2
  import type { ASTVisitor } from '../../language/visitor';
2
3
  import type { ValidationContext } from '../ValidationContext';
3
4
  /**
@@ -7,6 +8,34 @@ import type { ValidationContext } from '../ValidationContext';
7
8
  * are used, either directly or within a spread fragment.
8
9
  *
9
10
  * See https://spec.graphql.org/draft/#sec-All-Variables-Used
11
+ * @param context - The validation context used while checking the document.
12
+ * @returns A visitor that reports validation errors for this rule.
13
+ * @example
14
+ * ```ts
15
+ * import { buildSchema, parse, validate } from 'graphql';
16
+ * import { NoUnusedVariablesRule } from 'graphql/validation';
17
+ *
18
+ * const schema = buildSchema(`
19
+ * type Query {
20
+ * field(arg: ID): String
21
+ * name: String
22
+ * }
23
+ * `);
24
+ *
25
+ * const invalidDocument = parse(`
26
+ * query ($id: ID) { name }
27
+ * `);
28
+ * const invalidErrors = validate(schema, invalidDocument, [NoUnusedVariablesRule]);
29
+ *
30
+ * invalidErrors.length; // => 1
31
+ *
32
+ * const validDocument = parse(`
33
+ * query ($id: ID) { field(arg: $id) }
34
+ * `);
35
+ * const validErrors = validate(schema, validDocument, [NoUnusedVariablesRule]);
36
+ *
37
+ * validErrors; // => []
38
+ * ```
10
39
  */
11
40
  export declare function NoUnusedVariablesRule(
12
41
  context: ValidationContext,
@@ -7,6 +7,8 @@ exports.NoUnusedVariablesRule = NoUnusedVariablesRule;
7
7
 
8
8
  var _GraphQLError = require('../../error/GraphQLError.js');
9
9
 
10
+ /** @category Validation Rules */
11
+
10
12
  /**
11
13
  * No unused variables
12
14
  *
@@ -14,6 +16,34 @@ var _GraphQLError = require('../../error/GraphQLError.js');
14
16
  * are used, either directly or within a spread fragment.
15
17
  *
16
18
  * See https://spec.graphql.org/draft/#sec-All-Variables-Used
19
+ * @param context - The validation context used while checking the document.
20
+ * @returns A visitor that reports validation errors for this rule.
21
+ * @example
22
+ * ```ts
23
+ * import { buildSchema, parse, validate } from 'graphql';
24
+ * import { NoUnusedVariablesRule } from 'graphql/validation';
25
+ *
26
+ * const schema = buildSchema(`
27
+ * type Query {
28
+ * field(arg: ID): String
29
+ * name: String
30
+ * }
31
+ * `);
32
+ *
33
+ * const invalidDocument = parse(`
34
+ * query ($id: ID) { name }
35
+ * `);
36
+ * const invalidErrors = validate(schema, invalidDocument, [NoUnusedVariablesRule]);
37
+ *
38
+ * invalidErrors.length; // => 1
39
+ *
40
+ * const validDocument = parse(`
41
+ * query ($id: ID) { field(arg: $id) }
42
+ * `);
43
+ * const validErrors = validate(schema, validDocument, [NoUnusedVariablesRule]);
44
+ *
45
+ * validErrors; // => []
46
+ * ```
17
47
  */
18
48
  function NoUnusedVariablesRule(context) {
19
49
  let variableDefs = [];
@@ -1,3 +1,4 @@
1
+ /** @category Validation Rules */
1
2
  import { GraphQLError } from '../../error/GraphQLError.mjs';
2
3
 
3
4
  /**
@@ -7,6 +8,34 @@ import { GraphQLError } from '../../error/GraphQLError.mjs';
7
8
  * are used, either directly or within a spread fragment.
8
9
  *
9
10
  * See https://spec.graphql.org/draft/#sec-All-Variables-Used
11
+ * @param context - The validation context used while checking the document.
12
+ * @returns A visitor that reports validation errors for this rule.
13
+ * @example
14
+ * ```ts
15
+ * import { buildSchema, parse, validate } from 'graphql';
16
+ * import { NoUnusedVariablesRule } from 'graphql/validation';
17
+ *
18
+ * const schema = buildSchema(`
19
+ * type Query {
20
+ * field(arg: ID): String
21
+ * name: String
22
+ * }
23
+ * `);
24
+ *
25
+ * const invalidDocument = parse(`
26
+ * query ($id: ID) { name }
27
+ * `);
28
+ * const invalidErrors = validate(schema, invalidDocument, [NoUnusedVariablesRule]);
29
+ *
30
+ * invalidErrors.length; // => 1
31
+ *
32
+ * const validDocument = parse(`
33
+ * query ($id: ID) { field(arg: $id) }
34
+ * `);
35
+ * const validErrors = validate(schema, validDocument, [NoUnusedVariablesRule]);
36
+ *
37
+ * validErrors; // => []
38
+ * ```
10
39
  */
11
40
  export function NoUnusedVariablesRule(context) {
12
41
  let variableDefs = [];
@@ -1,3 +1,4 @@
1
+ /** @category Validation Rules */
1
2
  import type { ASTVisitor } from '../../language/visitor';
2
3
  import type { ValidationContext } from '../ValidationContext';
3
4
  /**
@@ -8,6 +9,38 @@ import type { ValidationContext } from '../ValidationContext';
8
9
  * without ambiguity.
9
10
  *
10
11
  * See https://spec.graphql.org/draft/#sec-Field-Selection-Merging
12
+ * @param context - The validation context used while checking the document.
13
+ * @returns A visitor that reports validation errors for this rule.
14
+ * @example
15
+ * ```ts
16
+ * import { buildSchema, parse, validate } from 'graphql';
17
+ * import { OverlappingFieldsCanBeMergedRule } from 'graphql/validation';
18
+ *
19
+ * const schema = buildSchema(`
20
+ * type Query {
21
+ * dog: Dog
22
+ * }
23
+ *
24
+ * type Dog {
25
+ * name: String
26
+ * barkVolume: Int
27
+ * }
28
+ * `);
29
+ *
30
+ * const invalidDocument = parse(`
31
+ * { dog { value: barkVolume value: name } }
32
+ * `);
33
+ * const invalidErrors = validate(schema, invalidDocument, [OverlappingFieldsCanBeMergedRule]);
34
+ *
35
+ * invalidErrors.length; // => 1
36
+ *
37
+ * const validDocument = parse(`
38
+ * { dog { barkVolume name } }
39
+ * `);
40
+ * const validErrors = validate(schema, validDocument, [OverlappingFieldsCanBeMergedRule]);
41
+ *
42
+ * validErrors; // => []
43
+ * ```
11
44
  */
12
45
  export declare function OverlappingFieldsCanBeMergedRule(
13
46
  context: ValidationContext,
@@ -19,6 +19,7 @@ var _sortValueNode = require('../../utilities/sortValueNode.js');
19
19
 
20
20
  var _typeFromAST = require('../../utilities/typeFromAST.js');
21
21
 
22
+ /** @category Validation Rules */
22
23
  function reasonMessage(reason) {
23
24
  if (Array.isArray(reason)) {
24
25
  return reason
@@ -40,6 +41,38 @@ function reasonMessage(reason) {
40
41
  * without ambiguity.
41
42
  *
42
43
  * See https://spec.graphql.org/draft/#sec-Field-Selection-Merging
44
+ * @param context - The validation context used while checking the document.
45
+ * @returns A visitor that reports validation errors for this rule.
46
+ * @example
47
+ * ```ts
48
+ * import { buildSchema, parse, validate } from 'graphql';
49
+ * import { OverlappingFieldsCanBeMergedRule } from 'graphql/validation';
50
+ *
51
+ * const schema = buildSchema(`
52
+ * type Query {
53
+ * dog: Dog
54
+ * }
55
+ *
56
+ * type Dog {
57
+ * name: String
58
+ * barkVolume: Int
59
+ * }
60
+ * `);
61
+ *
62
+ * const invalidDocument = parse(`
63
+ * { dog { value: barkVolume value: name } }
64
+ * `);
65
+ * const invalidErrors = validate(schema, invalidDocument, [OverlappingFieldsCanBeMergedRule]);
66
+ *
67
+ * invalidErrors.length; // => 1
68
+ *
69
+ * const validDocument = parse(`
70
+ * { dog { barkVolume name } }
71
+ * `);
72
+ * const validErrors = validate(schema, validDocument, [OverlappingFieldsCanBeMergedRule]);
73
+ *
74
+ * validErrors; // => []
75
+ * ```
43
76
  */
44
77
 
45
78
  function OverlappingFieldsCanBeMergedRule(context) {
@@ -79,6 +112,10 @@ function OverlappingFieldsCanBeMergedRule(context) {
79
112
  }
80
113
 
81
114
  /**
115
+ * Find all conflicts found "within" a selection set, including those found
116
+ * via spreading in fragments. Called when visiting each SelectionSet in the
117
+ * GraphQL Document.
118
+ *
82
119
  * Algorithm:
83
120
  *
84
121
  * Conflicts occur when two fields exist in a query which will produce the same
@@ -94,7 +131,7 @@ function OverlappingFieldsCanBeMergedRule(context) {
94
131
  * A) Each selection set represented in the document first compares "within" its
95
132
  * collected set of fields, finding any conflicts between every pair of
96
133
  * overlapping fields.
97
- * Note: This is the *only time* that a the fields "within" a set are compared
134
+ * Note: This is the *only time* that the fields "within" a set are compared
98
135
  * to each other. After this only fields "between" sets are compared.
99
136
  *
100
137
  * B) Also, if any fragment is referenced in a selection set, then a
@@ -106,14 +143,14 @@ function OverlappingFieldsCanBeMergedRule(context) {
106
143
  *
107
144
  * D) When comparing "between" a set of fields and a referenced fragment, first
108
145
  * a comparison is made between each field in the original set of fields and
109
- * each field in the the referenced set of fields.
146
+ * each field in the referenced set of fields.
110
147
  *
111
148
  * E) Also, if any fragment is referenced in the referenced selection set,
112
149
  * then a comparison is made "between" the original set of fields and the
113
150
  * referenced fragment (recursively referring to step D).
114
151
  *
115
152
  * F) When comparing "between" two fragments, first a comparison is made between
116
- * each field in the first referenced set of fields and each field in the the
153
+ * each field in the first referenced set of fields and each field in the
117
154
  * second referenced set of fields.
118
155
  *
119
156
  * G) Also, any fragments referenced by the first must be compared to the
@@ -131,10 +168,8 @@ function OverlappingFieldsCanBeMergedRule(context) {
131
168
  * J) Also, if two fragments are referenced in both selection sets, then a
132
169
  * comparison is made "between" the two fragments.
133
170
  *
171
+ * @internal
134
172
  */
135
- // Find all conflicts found "within" a selection set, including those found
136
- // via spreading in fragments. Called when visiting each SelectionSet in the
137
- // GraphQL Document.
138
173
  function findConflictsWithinSelectionSet(
139
174
  context,
140
175
  cachedFieldsAndFragmentNames,
@@ -809,6 +844,8 @@ function subfieldConflicts(conflicts, responseName, node1, node2) {
809
844
  *
810
845
  * Provides a third argument for has/set to allow flagging the pair as
811
846
  * weakly or strongly present within the collection.
847
+ *
848
+ * @internal
812
849
  */
813
850
 
814
851
  class OrderedPairSet {
@@ -845,6 +882,8 @@ class OrderedPairSet {
845
882
  /**
846
883
  * A way to keep track of pairs of similar things when the ordering of the pair
847
884
  * does not matter.
885
+ *
886
+ * @internal
848
887
  */
849
888
 
850
889
  class PairSet {
@@ -1,3 +1,4 @@
1
+ /** @category Validation Rules */
1
2
  import { inspect } from '../../jsutils/inspect.mjs';
2
3
  import { GraphQLError } from '../../error/GraphQLError.mjs';
3
4
  import { Kind } from '../../language/kinds.mjs';
@@ -34,6 +35,38 @@ function reasonMessage(reason) {
34
35
  * without ambiguity.
35
36
  *
36
37
  * See https://spec.graphql.org/draft/#sec-Field-Selection-Merging
38
+ * @param context - The validation context used while checking the document.
39
+ * @returns A visitor that reports validation errors for this rule.
40
+ * @example
41
+ * ```ts
42
+ * import { buildSchema, parse, validate } from 'graphql';
43
+ * import { OverlappingFieldsCanBeMergedRule } from 'graphql/validation';
44
+ *
45
+ * const schema = buildSchema(`
46
+ * type Query {
47
+ * dog: Dog
48
+ * }
49
+ *
50
+ * type Dog {
51
+ * name: String
52
+ * barkVolume: Int
53
+ * }
54
+ * `);
55
+ *
56
+ * const invalidDocument = parse(`
57
+ * { dog { value: barkVolume value: name } }
58
+ * `);
59
+ * const invalidErrors = validate(schema, invalidDocument, [OverlappingFieldsCanBeMergedRule]);
60
+ *
61
+ * invalidErrors.length; // => 1
62
+ *
63
+ * const validDocument = parse(`
64
+ * { dog { barkVolume name } }
65
+ * `);
66
+ * const validErrors = validate(schema, validDocument, [OverlappingFieldsCanBeMergedRule]);
67
+ *
68
+ * validErrors; // => []
69
+ * ```
37
70
  */
38
71
 
39
72
  export function OverlappingFieldsCanBeMergedRule(context) {
@@ -73,6 +106,10 @@ export function OverlappingFieldsCanBeMergedRule(context) {
73
106
  }
74
107
 
75
108
  /**
109
+ * Find all conflicts found "within" a selection set, including those found
110
+ * via spreading in fragments. Called when visiting each SelectionSet in the
111
+ * GraphQL Document.
112
+ *
76
113
  * Algorithm:
77
114
  *
78
115
  * Conflicts occur when two fields exist in a query which will produce the same
@@ -88,7 +125,7 @@ export function OverlappingFieldsCanBeMergedRule(context) {
88
125
  * A) Each selection set represented in the document first compares "within" its
89
126
  * collected set of fields, finding any conflicts between every pair of
90
127
  * overlapping fields.
91
- * Note: This is the *only time* that a the fields "within" a set are compared
128
+ * Note: This is the *only time* that the fields "within" a set are compared
92
129
  * to each other. After this only fields "between" sets are compared.
93
130
  *
94
131
  * B) Also, if any fragment is referenced in a selection set, then a
@@ -100,14 +137,14 @@ export function OverlappingFieldsCanBeMergedRule(context) {
100
137
  *
101
138
  * D) When comparing "between" a set of fields and a referenced fragment, first
102
139
  * a comparison is made between each field in the original set of fields and
103
- * each field in the the referenced set of fields.
140
+ * each field in the referenced set of fields.
104
141
  *
105
142
  * E) Also, if any fragment is referenced in the referenced selection set,
106
143
  * then a comparison is made "between" the original set of fields and the
107
144
  * referenced fragment (recursively referring to step D).
108
145
  *
109
146
  * F) When comparing "between" two fragments, first a comparison is made between
110
- * each field in the first referenced set of fields and each field in the the
147
+ * each field in the first referenced set of fields and each field in the
111
148
  * second referenced set of fields.
112
149
  *
113
150
  * G) Also, any fragments referenced by the first must be compared to the
@@ -125,10 +162,8 @@ export function OverlappingFieldsCanBeMergedRule(context) {
125
162
  * J) Also, if two fragments are referenced in both selection sets, then a
126
163
  * comparison is made "between" the two fragments.
127
164
  *
165
+ * @internal
128
166
  */
129
- // Find all conflicts found "within" a selection set, including those found
130
- // via spreading in fragments. Called when visiting each SelectionSet in the
131
- // GraphQL Document.
132
167
  function findConflictsWithinSelectionSet(
133
168
  context,
134
169
  cachedFieldsAndFragmentNames,
@@ -794,6 +829,8 @@ function subfieldConflicts(conflicts, responseName, node1, node2) {
794
829
  *
795
830
  * Provides a third argument for has/set to allow flagging the pair as
796
831
  * weakly or strongly present within the collection.
832
+ *
833
+ * @internal
797
834
  */
798
835
 
799
836
  class OrderedPairSet {
@@ -830,6 +867,8 @@ class OrderedPairSet {
830
867
  /**
831
868
  * A way to keep track of pairs of similar things when the ordering of the pair
832
869
  * does not matter.
870
+ *
871
+ * @internal
833
872
  */
834
873
 
835
874
  class PairSet {
@@ -1,3 +1,4 @@
1
+ /** @category Validation Rules */
1
2
  import type { ASTVisitor } from '../../language/visitor';
2
3
  import type { ValidationContext } from '../ValidationContext';
3
4
  /**
@@ -6,6 +7,41 @@ import type { ValidationContext } from '../ValidationContext';
6
7
  * A fragment spread is only valid if the type condition could ever possibly
7
8
  * be true: if there is a non-empty intersection of the possible parent types,
8
9
  * and possible types which pass the type condition.
10
+ * @param context - The validation context used while checking the document.
11
+ * @returns A visitor that reports validation errors for this rule.
12
+ * @example
13
+ * ```ts
14
+ * import { buildSchema, parse, validate } from 'graphql';
15
+ * import { PossibleFragmentSpreadsRule } from 'graphql/validation';
16
+ *
17
+ * const schema = buildSchema(`
18
+ * type Query {
19
+ * dog: Dog
20
+ * }
21
+ *
22
+ * type Dog {
23
+ * barkVolume: Int
24
+ * }
25
+ *
26
+ * type Cat {
27
+ * meowVolume: Int
28
+ * }
29
+ * `);
30
+ *
31
+ * const invalidDocument = parse(`
32
+ * { dog { ... on Cat { meowVolume } } }
33
+ * `);
34
+ * const invalidErrors = validate(schema, invalidDocument, [PossibleFragmentSpreadsRule]);
35
+ *
36
+ * invalidErrors.length; // => 1
37
+ *
38
+ * const validDocument = parse(`
39
+ * { dog { ... on Dog { barkVolume } } }
40
+ * `);
41
+ * const validErrors = validate(schema, validDocument, [PossibleFragmentSpreadsRule]);
42
+ *
43
+ * validErrors; // => []
44
+ * ```
9
45
  */
10
46
  export declare function PossibleFragmentSpreadsRule(
11
47
  context: ValidationContext,
@@ -15,12 +15,49 @@ var _typeComparators = require('../../utilities/typeComparators.js');
15
15
 
16
16
  var _typeFromAST = require('../../utilities/typeFromAST.js');
17
17
 
18
+ /** @category Validation Rules */
19
+
18
20
  /**
19
21
  * Possible fragment spread
20
22
  *
21
23
  * A fragment spread is only valid if the type condition could ever possibly
22
24
  * be true: if there is a non-empty intersection of the possible parent types,
23
25
  * and possible types which pass the type condition.
26
+ * @param context - The validation context used while checking the document.
27
+ * @returns A visitor that reports validation errors for this rule.
28
+ * @example
29
+ * ```ts
30
+ * import { buildSchema, parse, validate } from 'graphql';
31
+ * import { PossibleFragmentSpreadsRule } from 'graphql/validation';
32
+ *
33
+ * const schema = buildSchema(`
34
+ * type Query {
35
+ * dog: Dog
36
+ * }
37
+ *
38
+ * type Dog {
39
+ * barkVolume: Int
40
+ * }
41
+ *
42
+ * type Cat {
43
+ * meowVolume: Int
44
+ * }
45
+ * `);
46
+ *
47
+ * const invalidDocument = parse(`
48
+ * { dog { ... on Cat { meowVolume } } }
49
+ * `);
50
+ * const invalidErrors = validate(schema, invalidDocument, [PossibleFragmentSpreadsRule]);
51
+ *
52
+ * invalidErrors.length; // => 1
53
+ *
54
+ * const validDocument = parse(`
55
+ * { dog { ... on Dog { barkVolume } } }
56
+ * `);
57
+ * const validErrors = validate(schema, validDocument, [PossibleFragmentSpreadsRule]);
58
+ *
59
+ * validErrors; // => []
60
+ * ```
24
61
  */
25
62
  function PossibleFragmentSpreadsRule(context) {
26
63
  return {
@@ -1,3 +1,4 @@
1
+ /** @category Validation Rules */
1
2
  import { inspect } from '../../jsutils/inspect.mjs';
2
3
  import { GraphQLError } from '../../error/GraphQLError.mjs';
3
4
  import { isCompositeType } from '../../type/definition.mjs';
@@ -10,6 +11,41 @@ import { typeFromAST } from '../../utilities/typeFromAST.mjs';
10
11
  * A fragment spread is only valid if the type condition could ever possibly
11
12
  * be true: if there is a non-empty intersection of the possible parent types,
12
13
  * and possible types which pass the type condition.
14
+ * @param context - The validation context used while checking the document.
15
+ * @returns A visitor that reports validation errors for this rule.
16
+ * @example
17
+ * ```ts
18
+ * import { buildSchema, parse, validate } from 'graphql';
19
+ * import { PossibleFragmentSpreadsRule } from 'graphql/validation';
20
+ *
21
+ * const schema = buildSchema(`
22
+ * type Query {
23
+ * dog: Dog
24
+ * }
25
+ *
26
+ * type Dog {
27
+ * barkVolume: Int
28
+ * }
29
+ *
30
+ * type Cat {
31
+ * meowVolume: Int
32
+ * }
33
+ * `);
34
+ *
35
+ * const invalidDocument = parse(`
36
+ * { dog { ... on Cat { meowVolume } } }
37
+ * `);
38
+ * const invalidErrors = validate(schema, invalidDocument, [PossibleFragmentSpreadsRule]);
39
+ *
40
+ * invalidErrors.length; // => 1
41
+ *
42
+ * const validDocument = parse(`
43
+ * { dog { ... on Dog { barkVolume } } }
44
+ * `);
45
+ * const validErrors = validate(schema, validDocument, [PossibleFragmentSpreadsRule]);
46
+ *
47
+ * validErrors; // => []
48
+ * ```
13
49
  */
14
50
  export function PossibleFragmentSpreadsRule(context) {
15
51
  return {
@@ -1,9 +1,30 @@
1
+ /** @category Validation Rules */
1
2
  import type { ASTVisitor } from '../../language/visitor';
2
3
  import type { SDLValidationContext } from '../ValidationContext';
3
4
  /**
4
5
  * Possible type extension
5
6
  *
6
7
  * A type extension is only valid if the type is defined and has the same kind.
8
+ * @param context - The validation context used while checking the document.
9
+ * @returns A visitor that reports validation errors for this rule.
10
+ * @example
11
+ * ```ts
12
+ * import { buildSchema } from 'graphql';
13
+ * import { PossibleTypeExtensionsRule } from 'graphql/validation';
14
+ *
15
+ * const invalidSDL = `
16
+ * extend type Missing { name: String } type Query { name: String }
17
+ * `;
18
+ *
19
+ * PossibleTypeExtensionsRule.name; // => 'PossibleTypeExtensionsRule'
20
+ * buildSchema(invalidSDL); // throws an error
21
+ *
22
+ * const validSDL = `
23
+ * type Query { name: String } extend type Query { other: String }
24
+ * `;
25
+ *
26
+ * buildSchema(validSDL); // does not throw
27
+ * ```
7
28
  */
8
29
  export declare function PossibleTypeExtensionsRule(
9
30
  context: SDLValidationContext,