graphql 16.13.2 → 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 +12 -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 +422 -55
  106. package/language/ast.js +103 -39
  107. package/language/ast.mjs +103 -39
  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 +29 -8
  112. package/language/directiveLocation.js +10 -6
  113. package/language/directiveLocation.mjs +10 -6
  114. package/language/index.d.ts +7 -0
  115. package/language/index.mjs +6 -0
  116. package/language/kinds.d.ts +58 -18
  117. package/language/kinds.js +10 -6
  118. package/language/kinds.mjs +10 -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 +248 -11
  126. package/language/parser.js +257 -0
  127. package/language/parser.mjs +257 -3
  128. package/language/predicates.d.ts +169 -0
  129. package/language/predicates.js +173 -1
  130. package/language/predicates.mjs +185 -1
  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 +32 -1
  139. package/language/printer.mjs +31 -1
  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 +202 -19
  162. package/type/directives.js +206 -20
  163. package/type/directives.mjs +206 -20
  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 +57 -1
  168. package/type/introspection.mjs +65 -1
  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 +69 -6
  189. package/utilities/buildASTSchema.mjs +69 -6
  190. package/utilities/buildClientSchema.d.ts +15 -0
  191. package/utilities/buildClientSchema.js +17 -0
  192. package/utilities/buildClientSchema.mjs +16 -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 +121 -6
  201. package/utilities/extendSchema.mjs +120 -6
  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 +148 -0
  206. package/utilities/getIntrospectionQuery.js +72 -38
  207. package/utilities/getIntrospectionQuery.mjs +72 -38
  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 +56 -0
  218. package/utilities/introspectionFromSchema.mjs +55 -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 +67 -0
  224. package/utilities/printSchema.mjs +68 -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 +51 -2
  243. package/utilities/valueFromAST.mjs +50 -2
  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 +33 -0
  266. package/validation/rules/KnownDirectivesRule.mjs +32 -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 +41 -0
  323. package/validation/rules/UniqueDirectivesPerLocationRule.mjs +40 -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 +7 -9
  371. package/version.mjs +6 -9
@@ -1,3 +1,4 @@
1
+ /** @category Schema Construction */
1
2
  import { devAssert } from '../jsutils/devAssert.mjs';
2
3
  import { inspect } from '../jsutils/inspect.mjs';
3
4
  import { invariant } from '../jsutils/invariant.mjs';
@@ -56,6 +57,60 @@ import { valueFromAST } from './valueFromAST.mjs';
56
57
  *
57
58
  * This algorithm copies the provided schema, applying extensions while
58
59
  * producing the copy. The original schema remains unaltered.
60
+ * @param schema - GraphQL schema to use.
61
+ * @param documentAST - The parsed GraphQL document AST.
62
+ * @param options - Optional configuration for this operation.
63
+ * @returns A new schema with the extensions and definitions applied.
64
+ * @example
65
+ * ```ts
66
+ * // Extend a schema with new fields and types.
67
+ * import { parse } from 'graphql/language';
68
+ * import { buildSchema, extendSchema } from 'graphql/utilities';
69
+ *
70
+ * const schema = buildSchema(`
71
+ * type Query {
72
+ * greeting: String
73
+ * }
74
+ * `);
75
+ * const extensionAST = parse(`
76
+ * extend type Query {
77
+ * farewell: String
78
+ * }
79
+ *
80
+ * type Review {
81
+ * body: String
82
+ * }
83
+ * `);
84
+ *
85
+ * const extendedSchema = extendSchema(schema, extensionAST);
86
+ *
87
+ * schema.getType('Review'); // => undefined
88
+ * extendedSchema.getType('Review')?.name; // => 'Review'
89
+ * Object.keys(extendedSchema.getQueryType().getFields()); // => ['greeting', 'farewell']
90
+ * ```
91
+ * @example
92
+ * ```ts
93
+ * // This variant bypasses validation for an otherwise invalid extension.
94
+ * import { parse } from 'graphql/language';
95
+ * import { buildSchema, extendSchema } from 'graphql/utilities';
96
+ *
97
+ * const schema = buildSchema(`
98
+ * type Query {
99
+ * greeting: String
100
+ * }
101
+ * `);
102
+ * const invalidExtension = parse(`
103
+ * extend type Missing {
104
+ * field: String
105
+ * }
106
+ * `);
107
+ *
108
+ * extendSchema(schema, invalidExtension); // throws an error
109
+ * extendSchema(schema, invalidExtension, {
110
+ * assumeValid: true,
111
+ * assumeValidSDL: true,
112
+ * }); // does not throw
113
+ * ```
59
114
  */
60
115
  export function extendSchema(schema, documentAST, options) {
61
116
  assertSchema(schema);
@@ -78,16 +133,15 @@ export function extendSchema(schema, documentAST, options) {
78
133
  ? schema
79
134
  : new GraphQLSchema(extendedConfig);
80
135
  }
81
- /**
82
- * @internal
83
- */
136
+ /** @internal */
84
137
 
85
138
  export function extendSchemaImpl(schemaConfig, documentAST, options) {
86
139
  var _schemaDef, _schemaDef$descriptio, _schemaDef2, _options$assumeValid;
87
140
 
88
141
  // Collect the type definitions and extensions found in the document.
89
142
  const typeDefs = [];
90
- const typeExtensionsMap = Object.create(null); // New directives and types are separate because a directives and types can
143
+ const typeExtensionsMap = Object.create(null);
144
+ const directiveExtensionsMap = Object.create(null); // New directives and types are separate because a directives and types can
91
145
  // have the same name. For example, a type named "skip".
92
146
 
93
147
  const directiveDefs = [];
@@ -110,6 +164,14 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
110
164
  : [def];
111
165
  } else if (def.kind === Kind.DIRECTIVE_DEFINITION) {
112
166
  directiveDefs.push(def);
167
+ } else if (def.kind === Kind.DIRECTIVE_EXTENSION) {
168
+ const extendedDirectiveName = def.name.value;
169
+ const existingDirectiveExtensions =
170
+ directiveExtensionsMap[extendedDirectiveName];
171
+ directiveExtensionsMap[extendedDirectiveName] =
172
+ existingDirectiveExtensions
173
+ ? existingDirectiveExtensions.concat([def])
174
+ : [def];
113
175
  }
114
176
  } // If this document contains no new types, extensions, or directives then
115
177
  // return the same unmodified GraphQLSchema instance.
@@ -117,6 +179,7 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
117
179
  if (
118
180
  Object.keys(typeExtensionsMap).length === 0 &&
119
181
  typeDefs.length === 0 &&
182
+ Object.keys(directiveExtensionsMap).length === 0 &&
120
183
  directiveDefs.length === 0 &&
121
184
  schemaExtensions.length === 0 &&
122
185
  schemaDef == null
@@ -141,6 +204,12 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
141
204
  : buildType(typeNode);
142
205
  }
143
206
 
207
+ const directiveMap = Object.create(null);
208
+
209
+ for (const existingDirective of schemaConfig.directives) {
210
+ directiveMap[existingDirective.name] = extendDirective(existingDirective);
211
+ }
212
+
144
213
  const operationTypes = {
145
214
  // Get the extended root operation types.
146
215
  query: schemaConfig.query && replaceNamedType(schemaConfig.query),
@@ -152,6 +221,8 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
152
221
  ...getOperationTypes(schemaExtensions),
153
222
  }; // Then produce and return a Schema config with these types.
154
223
 
224
+ const directives = Object.values(directiveMap); // will be `Array<GraphQLDirective>`
225
+
155
226
  return {
156
227
  description:
157
228
  (_schemaDef = schemaDef) === null || _schemaDef === void 0
@@ -163,7 +234,7 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
163
234
  ...operationTypes,
164
235
  types: Object.values(typeMap),
165
236
  directives: [
166
- ...schemaConfig.directives.map(replaceDirective),
237
+ ...directives.map(replaceDirective),
167
238
  ...directiveDefs.map(buildDirective),
168
239
  ],
169
240
  extensions: Object.create(null),
@@ -415,6 +486,29 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
415
486
  return opTypes;
416
487
  }
417
488
 
489
+ function extendDirective(directive) {
490
+ var _directiveExtensionsM, _config$deprecationRe;
491
+
492
+ const config = directive.toConfig();
493
+ const extensions =
494
+ (_directiveExtensionsM = directiveExtensionsMap[config.name]) !== null &&
495
+ _directiveExtensionsM !== void 0
496
+ ? _directiveExtensionsM
497
+ : [];
498
+ const deprecationReason =
499
+ (_config$deprecationRe = config.deprecationReason) !== null &&
500
+ _config$deprecationRe !== void 0
501
+ ? _config$deprecationRe
502
+ : extensions
503
+ .map((ext) => getDeprecationReason(ext))
504
+ .find((reason) => reason != null);
505
+ return new GraphQLDirective({
506
+ ...config,
507
+ deprecationReason,
508
+ extensionASTNodes: config.extensionASTNodes.concat(extensions),
509
+ });
510
+ }
511
+
418
512
  function getNamedType(node) {
419
513
  var _stdTypeMap$name2;
420
514
 
@@ -445,8 +539,20 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
445
539
  }
446
540
 
447
541
  function buildDirective(node) {
448
- var _node$description;
542
+ var _directiveExtensionsM2, _getDeprecationReason, _node$description;
449
543
 
544
+ const extensions =
545
+ (_directiveExtensionsM2 = directiveExtensionsMap[node.name.value]) !==
546
+ null && _directiveExtensionsM2 !== void 0
547
+ ? _directiveExtensionsM2
548
+ : [];
549
+ const deprecationReason =
550
+ (_getDeprecationReason = getDeprecationReason(node)) !== null &&
551
+ _getDeprecationReason !== void 0
552
+ ? _getDeprecationReason
553
+ : extensions
554
+ .map((ext) => getDeprecationReason(ext))
555
+ .find((reason) => reason != null);
450
556
  return new GraphQLDirective({
451
557
  name: node.name.value,
452
558
  description:
@@ -458,7 +564,9 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
458
564
  locations: node.locations.map(({ value }) => value),
459
565
  isRepeatable: node.repeatable,
460
566
  args: buildArgumentMap(node.arguments),
567
+ deprecationReason,
461
568
  astNode: node,
569
+ extensionASTNodes: extensions,
462
570
  });
463
571
  }
464
572
 
@@ -769,6 +877,8 @@ const stdTypeMap = keyMap(
769
877
  /**
770
878
  * Given a field or enum value node, returns the string value for the
771
879
  * deprecation reason.
880
+ *
881
+ * @internal
772
882
  */
773
883
 
774
884
  function getDeprecationReason(node) {
@@ -780,6 +890,8 @@ function getDeprecationReason(node) {
780
890
  }
781
891
  /**
782
892
  * Given a scalar node, returns the string value for the specifiedByURL.
893
+ *
894
+ * @internal
783
895
  */
784
896
 
785
897
  function getSpecifiedByURL(node) {
@@ -791,6 +903,8 @@ function getSpecifiedByURL(node) {
791
903
  }
792
904
  /**
793
905
  * Given an input object node, returns if the node should be OneOf.
906
+ *
907
+ * @internal
794
908
  */
795
909
 
796
910
  function isOneOf(node) {
@@ -1,43 +1,106 @@
1
+ /** @category Schema Changes */
1
2
  import type { GraphQLSchema } from '../type/schema';
3
+ /** Categories of schema changes that may break existing operations. */
2
4
  declare enum BreakingChangeType {
5
+ /** Breaking change code for type removed. */
3
6
  TYPE_REMOVED = 'TYPE_REMOVED',
7
+ /** Breaking change code for type changed kind. */
4
8
  TYPE_CHANGED_KIND = 'TYPE_CHANGED_KIND',
9
+ /** Breaking change code for type removed from union. */
5
10
  TYPE_REMOVED_FROM_UNION = 'TYPE_REMOVED_FROM_UNION',
11
+ /** Breaking change code for value removed from enum. */
6
12
  VALUE_REMOVED_FROM_ENUM = 'VALUE_REMOVED_FROM_ENUM',
13
+ /** Breaking change code for required input field added. */
7
14
  REQUIRED_INPUT_FIELD_ADDED = 'REQUIRED_INPUT_FIELD_ADDED',
15
+ /** Breaking change code for implemented interface removed. */
8
16
  IMPLEMENTED_INTERFACE_REMOVED = 'IMPLEMENTED_INTERFACE_REMOVED',
17
+ /** Breaking change code for field removed. */
9
18
  FIELD_REMOVED = 'FIELD_REMOVED',
19
+ /** Breaking change code for field changed kind. */
10
20
  FIELD_CHANGED_KIND = 'FIELD_CHANGED_KIND',
21
+ /** Breaking change code for required arg added. */
11
22
  REQUIRED_ARG_ADDED = 'REQUIRED_ARG_ADDED',
23
+ /** Breaking change code for arg removed. */
12
24
  ARG_REMOVED = 'ARG_REMOVED',
25
+ /** Breaking change code for arg changed kind. */
13
26
  ARG_CHANGED_KIND = 'ARG_CHANGED_KIND',
27
+ /** Breaking change code for directive removed. */
14
28
  DIRECTIVE_REMOVED = 'DIRECTIVE_REMOVED',
29
+ /** Breaking change code for directive arg removed. */
15
30
  DIRECTIVE_ARG_REMOVED = 'DIRECTIVE_ARG_REMOVED',
31
+ /** Breaking change code for required directive arg added. */
16
32
  REQUIRED_DIRECTIVE_ARG_ADDED = 'REQUIRED_DIRECTIVE_ARG_ADDED',
33
+ /** Breaking change code for directive repeatable removed. */
17
34
  DIRECTIVE_REPEATABLE_REMOVED = 'DIRECTIVE_REPEATABLE_REMOVED',
35
+ /** Breaking change code for directive location removed. */
18
36
  DIRECTIVE_LOCATION_REMOVED = 'DIRECTIVE_LOCATION_REMOVED',
19
37
  }
20
38
  export { BreakingChangeType };
39
+ /** Categories of schema changes that may be dangerous for existing operations. */
21
40
  declare enum DangerousChangeType {
41
+ /** Dangerous change code for value added to enum. */
22
42
  VALUE_ADDED_TO_ENUM = 'VALUE_ADDED_TO_ENUM',
43
+ /** Dangerous change code for type added to union. */
23
44
  TYPE_ADDED_TO_UNION = 'TYPE_ADDED_TO_UNION',
45
+ /** Dangerous change code for optional input field added. */
24
46
  OPTIONAL_INPUT_FIELD_ADDED = 'OPTIONAL_INPUT_FIELD_ADDED',
47
+ /** Dangerous change code for optional arg added. */
25
48
  OPTIONAL_ARG_ADDED = 'OPTIONAL_ARG_ADDED',
49
+ /** Dangerous change code for implemented interface added. */
26
50
  IMPLEMENTED_INTERFACE_ADDED = 'IMPLEMENTED_INTERFACE_ADDED',
51
+ /** Dangerous change code for arg default value change. */
27
52
  ARG_DEFAULT_VALUE_CHANGE = 'ARG_DEFAULT_VALUE_CHANGE',
28
53
  }
29
54
  export { DangerousChangeType };
55
+ /** Description of a schema change that may break existing operations. */
30
56
  export interface BreakingChange {
57
+ /** Specific kind of breaking schema change. */
31
58
  type: BreakingChangeType;
59
+ /** Human-readable description of the breaking schema change. */
32
60
  description: string;
33
61
  }
62
+ /** Description of a schema change that may be dangerous for existing operations. */
34
63
  export interface DangerousChange {
64
+ /** Specific kind of dangerous schema change. */
35
65
  type: DangerousChangeType;
66
+ /** Human-readable description of the dangerous schema change. */
36
67
  description: string;
37
68
  }
38
69
  /**
39
70
  * Given two schemas, returns an Array containing descriptions of all the types
40
71
  * of breaking changes covered by the other functions down below.
72
+ * @param oldSchema - Schema before the change.
73
+ * @param newSchema - Schema after the change.
74
+ * @returns Breaking changes between the two schemas.
75
+ * @example
76
+ * ```ts
77
+ * import { buildSchema, findBreakingChanges } from 'graphql/utilities';
78
+ *
79
+ * const oldSchema = buildSchema(`
80
+ * type User {
81
+ * id: ID!
82
+ * name: String
83
+ * }
84
+ *
85
+ * type Query {
86
+ * viewer: User
87
+ * }
88
+ * `);
89
+ * const newSchema = buildSchema(`
90
+ * type User {
91
+ * id: ID!
92
+ * }
93
+ *
94
+ * type Query {
95
+ * viewer: User
96
+ * }
97
+ * `);
98
+ *
99
+ * const changes = findBreakingChanges(oldSchema, newSchema);
100
+ *
101
+ * changes[0].type; // => 'FIELD_REMOVED'
102
+ * changes[0].description; // matches /User.name was removed/
103
+ * ```
41
104
  */
42
105
  export declare function findBreakingChanges(
43
106
  oldSchema: GraphQLSchema,
@@ -46,6 +109,38 @@ export declare function findBreakingChanges(
46
109
  /**
47
110
  * Given two schemas, returns an Array containing descriptions of all the types
48
111
  * of potentially dangerous changes covered by the other functions down below.
112
+ * @param oldSchema - Schema before the change.
113
+ * @param newSchema - Schema after the change.
114
+ * @returns Dangerous changes between the two schemas.
115
+ * @example
116
+ * ```ts
117
+ * import { buildSchema, findDangerousChanges } from 'graphql/utilities';
118
+ *
119
+ * const oldSchema = buildSchema(`
120
+ * enum Episode {
121
+ * NEW_HOPE
122
+ * }
123
+ *
124
+ * type Query {
125
+ * episode: Episode
126
+ * }
127
+ * `);
128
+ * const newSchema = buildSchema(`
129
+ * enum Episode {
130
+ * NEW_HOPE
131
+ * EMPIRE
132
+ * }
133
+ *
134
+ * type Query {
135
+ * episode: Episode
136
+ * }
137
+ * `);
138
+ *
139
+ * const changes = findDangerousChanges(oldSchema, newSchema);
140
+ *
141
+ * changes[0].type; // => 'VALUE_ADDED_TO_ENUM'
142
+ * changes[0].description; // matches /EMPIRE was added/
143
+ * ```
49
144
  */
50
145
  export declare function findDangerousChanges(
51
146
  oldSchema: GraphQLSchema,
@@ -23,6 +23,9 @@ var _astFromValue = require('./astFromValue.js');
23
23
 
24
24
  var _sortValueNode = require('./sortValueNode.js');
25
25
 
26
+ /** @category Schema Changes */
27
+
28
+ /** Categories of schema changes that may break existing operations. */
26
29
  var BreakingChangeType;
27
30
  exports.BreakingChangeType = BreakingChangeType;
28
31
 
@@ -52,6 +55,7 @@ exports.BreakingChangeType = BreakingChangeType;
52
55
  BreakingChangeType || (exports.BreakingChangeType = BreakingChangeType = {}),
53
56
  );
54
57
 
58
+ /** Categories of schema changes that may be dangerous for existing operations. */
55
59
  var DangerousChangeType;
56
60
  exports.DangerousChangeType = DangerousChangeType;
57
61
 
@@ -72,6 +76,38 @@ exports.DangerousChangeType = DangerousChangeType;
72
76
  /**
73
77
  * Given two schemas, returns an Array containing descriptions of all the types
74
78
  * of breaking changes covered by the other functions down below.
79
+ * @param oldSchema - Schema before the change.
80
+ * @param newSchema - Schema after the change.
81
+ * @returns Breaking changes between the two schemas.
82
+ * @example
83
+ * ```ts
84
+ * import { buildSchema, findBreakingChanges } from 'graphql/utilities';
85
+ *
86
+ * const oldSchema = buildSchema(`
87
+ * type User {
88
+ * id: ID!
89
+ * name: String
90
+ * }
91
+ *
92
+ * type Query {
93
+ * viewer: User
94
+ * }
95
+ * `);
96
+ * const newSchema = buildSchema(`
97
+ * type User {
98
+ * id: ID!
99
+ * }
100
+ *
101
+ * type Query {
102
+ * viewer: User
103
+ * }
104
+ * `);
105
+ *
106
+ * const changes = findBreakingChanges(oldSchema, newSchema);
107
+ *
108
+ * changes[0].type; // => 'FIELD_REMOVED'
109
+ * changes[0].description; // matches /User.name was removed/
110
+ * ```
75
111
  */
76
112
  function findBreakingChanges(oldSchema, newSchema) {
77
113
  // @ts-expect-error
@@ -82,6 +118,38 @@ function findBreakingChanges(oldSchema, newSchema) {
82
118
  /**
83
119
  * Given two schemas, returns an Array containing descriptions of all the types
84
120
  * of potentially dangerous changes covered by the other functions down below.
121
+ * @param oldSchema - Schema before the change.
122
+ * @param newSchema - Schema after the change.
123
+ * @returns Dangerous changes between the two schemas.
124
+ * @example
125
+ * ```ts
126
+ * import { buildSchema, findDangerousChanges } from 'graphql/utilities';
127
+ *
128
+ * const oldSchema = buildSchema(`
129
+ * enum Episode {
130
+ * NEW_HOPE
131
+ * }
132
+ *
133
+ * type Query {
134
+ * episode: Episode
135
+ * }
136
+ * `);
137
+ * const newSchema = buildSchema(`
138
+ * enum Episode {
139
+ * NEW_HOPE
140
+ * EMPIRE
141
+ * }
142
+ *
143
+ * type Query {
144
+ * episode: Episode
145
+ * }
146
+ * `);
147
+ *
148
+ * const changes = findDangerousChanges(oldSchema, newSchema);
149
+ *
150
+ * changes[0].type; // => 'VALUE_ADDED_TO_ENUM'
151
+ * changes[0].description; // matches /EMPIRE was added/
152
+ * ```
85
153
  */
86
154
 
87
155
  function findDangerousChanges(oldSchema, newSchema) {
@@ -1,3 +1,4 @@
1
+ /** @category Schema Changes */
1
2
  import { inspect } from '../jsutils/inspect.mjs';
2
3
  import { invariant } from '../jsutils/invariant.mjs';
3
4
  import { keyMap } from '../jsutils/keyMap.mjs';
@@ -18,6 +19,8 @@ import {
18
19
  import { isSpecifiedScalarType } from '../type/scalars.mjs';
19
20
  import { astFromValue } from './astFromValue.mjs';
20
21
  import { sortValueNode } from './sortValueNode.mjs';
22
+ /** Categories of schema changes that may break existing operations. */
23
+
21
24
  var BreakingChangeType;
22
25
 
23
26
  (function (BreakingChangeType) {
@@ -45,6 +48,8 @@ var BreakingChangeType;
45
48
  })(BreakingChangeType || (BreakingChangeType = {}));
46
49
 
47
50
  export { BreakingChangeType };
51
+ /** Categories of schema changes that may be dangerous for existing operations. */
52
+
48
53
  var DangerousChangeType;
49
54
 
50
55
  (function (DangerousChangeType) {
@@ -59,10 +64,43 @@ var DangerousChangeType;
59
64
  })(DangerousChangeType || (DangerousChangeType = {}));
60
65
 
61
66
  export { DangerousChangeType };
67
+ /** Description of a schema change that may break existing operations. */
62
68
 
63
69
  /**
64
70
  * Given two schemas, returns an Array containing descriptions of all the types
65
71
  * of breaking changes covered by the other functions down below.
72
+ * @param oldSchema - Schema before the change.
73
+ * @param newSchema - Schema after the change.
74
+ * @returns Breaking changes between the two schemas.
75
+ * @example
76
+ * ```ts
77
+ * import { buildSchema, findBreakingChanges } from 'graphql/utilities';
78
+ *
79
+ * const oldSchema = buildSchema(`
80
+ * type User {
81
+ * id: ID!
82
+ * name: String
83
+ * }
84
+ *
85
+ * type Query {
86
+ * viewer: User
87
+ * }
88
+ * `);
89
+ * const newSchema = buildSchema(`
90
+ * type User {
91
+ * id: ID!
92
+ * }
93
+ *
94
+ * type Query {
95
+ * viewer: User
96
+ * }
97
+ * `);
98
+ *
99
+ * const changes = findBreakingChanges(oldSchema, newSchema);
100
+ *
101
+ * changes[0].type; // => 'FIELD_REMOVED'
102
+ * changes[0].description; // matches /User.name was removed/
103
+ * ```
66
104
  */
67
105
  export function findBreakingChanges(oldSchema, newSchema) {
68
106
  // @ts-expect-error
@@ -73,6 +111,38 @@ export function findBreakingChanges(oldSchema, newSchema) {
73
111
  /**
74
112
  * Given two schemas, returns an Array containing descriptions of all the types
75
113
  * of potentially dangerous changes covered by the other functions down below.
114
+ * @param oldSchema - Schema before the change.
115
+ * @param newSchema - Schema after the change.
116
+ * @returns Dangerous changes between the two schemas.
117
+ * @example
118
+ * ```ts
119
+ * import { buildSchema, findDangerousChanges } from 'graphql/utilities';
120
+ *
121
+ * const oldSchema = buildSchema(`
122
+ * enum Episode {
123
+ * NEW_HOPE
124
+ * }
125
+ *
126
+ * type Query {
127
+ * episode: Episode
128
+ * }
129
+ * `);
130
+ * const newSchema = buildSchema(`
131
+ * enum Episode {
132
+ * NEW_HOPE
133
+ * EMPIRE
134
+ * }
135
+ *
136
+ * type Query {
137
+ * episode: Episode
138
+ * }
139
+ * `);
140
+ *
141
+ * const changes = findDangerousChanges(oldSchema, newSchema);
142
+ *
143
+ * changes[0].type; // => 'VALUE_ADDED_TO_ENUM'
144
+ * changes[0].description; // matches /EMPIRE was added/
145
+ * ```
76
146
  */
77
147
 
78
148
  export function findDangerousChanges(oldSchema, newSchema) {