@theguild/federation-composition 0.0.0-alpha-20230916192321-bb37b43

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 (355) hide show
  1. package/LICENSE +18 -0
  2. package/cjs/compose.js +85 -0
  3. package/cjs/graphql/helpers.js +32 -0
  4. package/cjs/graphql/printer.js +248 -0
  5. package/cjs/graphql/type-node-info.js +142 -0
  6. package/cjs/index.js +22 -0
  7. package/cjs/package.json +1 -0
  8. package/cjs/specifications/federation.js +211 -0
  9. package/cjs/specifications/inaccessible.js +10 -0
  10. package/cjs/specifications/join.js +35 -0
  11. package/cjs/specifications/link.js +222 -0
  12. package/cjs/specifications/tag.js +12 -0
  13. package/cjs/subgraph/helpers.js +255 -0
  14. package/cjs/subgraph/state.js +1154 -0
  15. package/cjs/subgraph/validation/rules/elements/compose-directive.js +41 -0
  16. package/cjs/subgraph/validation/rules/elements/extends.js +34 -0
  17. package/cjs/subgraph/validation/rules/elements/external.js +57 -0
  18. package/cjs/subgraph/validation/rules/elements/field-set.js +37 -0
  19. package/cjs/subgraph/validation/rules/elements/inaccessible.js +112 -0
  20. package/cjs/subgraph/validation/rules/elements/key.js +148 -0
  21. package/cjs/subgraph/validation/rules/elements/override.js +56 -0
  22. package/cjs/subgraph/validation/rules/elements/provides.js +173 -0
  23. package/cjs/subgraph/validation/rules/elements/requires.js +119 -0
  24. package/cjs/subgraph/validation/rules/elements/shareable.js +43 -0
  25. package/cjs/subgraph/validation/rules/elements/tag.js +120 -0
  26. package/cjs/subgraph/validation/rules/known-argument-names-on-directives-rule.js +34 -0
  27. package/cjs/subgraph/validation/rules/known-directives-rule.js +105 -0
  28. package/cjs/subgraph/validation/rules/known-federation-directive-rule.js +34 -0
  29. package/cjs/subgraph/validation/rules/known-root-type-rule.js +25 -0
  30. package/cjs/subgraph/validation/rules/known-type-names-rule.js +34 -0
  31. package/cjs/subgraph/validation/rules/lone-schema-definition-rule.js +20 -0
  32. package/cjs/subgraph/validation/rules/provided-arguments-on-directives-rule.js +104 -0
  33. package/cjs/subgraph/validation/rules/provided-required-arguments-on-directives-rule.js +46 -0
  34. package/cjs/subgraph/validation/rules/query-root-type-inaccessible-rule.js +33 -0
  35. package/cjs/subgraph/validation/rules/reserved-subgraph-name-rule.js +15 -0
  36. package/cjs/subgraph/validation/rules/root-type-used-rule.js +59 -0
  37. package/cjs/subgraph/validation/rules/unique-argument-definition-names-rule.js +42 -0
  38. package/cjs/subgraph/validation/rules/unique-argument-names-rule.js +27 -0
  39. package/cjs/subgraph/validation/rules/unique-directive-names-rule.js +24 -0
  40. package/cjs/subgraph/validation/rules/unique-directives-per-location-rule.js +52 -0
  41. package/cjs/subgraph/validation/rules/unique-enum-value-names-rule.js +33 -0
  42. package/cjs/subgraph/validation/rules/unique-field-definition-names-rule.js +37 -0
  43. package/cjs/subgraph/validation/rules/unique-input-field-names-rule.js +37 -0
  44. package/cjs/subgraph/validation/rules/unique-operation-types-rule.js +29 -0
  45. package/cjs/subgraph/validation/rules/unique-type-names-rule.js +29 -0
  46. package/cjs/subgraph/validation/validate-state.js +476 -0
  47. package/cjs/subgraph/validation/validate-subgraph.js +329 -0
  48. package/cjs/subgraph/validation/validation-context.js +267 -0
  49. package/cjs/supergraph/composition/ast.js +779 -0
  50. package/cjs/supergraph/composition/common.js +7 -0
  51. package/cjs/supergraph/composition/directive.js +93 -0
  52. package/cjs/supergraph/composition/enum-type.js +132 -0
  53. package/cjs/supergraph/composition/input-object-type.js +119 -0
  54. package/cjs/supergraph/composition/interface-type.js +226 -0
  55. package/cjs/supergraph/composition/object-type.js +380 -0
  56. package/cjs/supergraph/composition/scalar-type.js +63 -0
  57. package/cjs/supergraph/composition/union-type.js +64 -0
  58. package/cjs/supergraph/composition/visitor.js +62 -0
  59. package/cjs/supergraph/state.js +249 -0
  60. package/cjs/supergraph/validation/rules/default-value-uses-inaccessible-rule.js +35 -0
  61. package/cjs/supergraph/validation/rules/directive-composition-rule.js +98 -0
  62. package/cjs/supergraph/validation/rules/enum-values-rule.js +59 -0
  63. package/cjs/supergraph/validation/rules/extension-with-base.js +31 -0
  64. package/cjs/supergraph/validation/rules/external-argument-missing-rule.js +32 -0
  65. package/cjs/supergraph/validation/rules/external-missing-on-base-rule.js +48 -0
  66. package/cjs/supergraph/validation/rules/external-type-mismatch-rule.js +52 -0
  67. package/cjs/supergraph/validation/rules/field-argument-default-mismatch-rule.js +40 -0
  68. package/cjs/supergraph/validation/rules/field-arguments-of-the-same-type-rule.js +49 -0
  69. package/cjs/supergraph/validation/rules/fields-of-the-same-type-rule.js +89 -0
  70. package/cjs/supergraph/validation/rules/input-field-default-mismatch-rule.js +40 -0
  71. package/cjs/supergraph/validation/rules/input-object-values-rule.js +25 -0
  72. package/cjs/supergraph/validation/rules/interface-key-missing-implementation-type.js +46 -0
  73. package/cjs/supergraph/validation/rules/invalid-field-sharing-rule.js +45 -0
  74. package/cjs/supergraph/validation/rules/only-inaccessible-children-rule.js +40 -0
  75. package/cjs/supergraph/validation/rules/override-source-has-override.js +36 -0
  76. package/cjs/supergraph/validation/rules/referenced-inaccessible-rule.js +44 -0
  77. package/cjs/supergraph/validation/rules/required-argument-missing-in-some-subgraph-rule.js +32 -0
  78. package/cjs/supergraph/validation/rules/required-input-field-missing-in-some-subgraph-rule.js +32 -0
  79. package/cjs/supergraph/validation/rules/required-query-rule.js +14 -0
  80. package/cjs/supergraph/validation/rules/satisfiablity-rule.js +866 -0
  81. package/cjs/supergraph/validation/rules/subgraph-name-rule.js +18 -0
  82. package/cjs/supergraph/validation/rules/types-of-the-same-kind-rule.js +54 -0
  83. package/cjs/supergraph/validation/validate-supergraph.js +77 -0
  84. package/cjs/supergraph/validation/validation-context.js +25 -0
  85. package/cjs/types.js +0 -0
  86. package/cjs/utils/dependency-graph.js +227 -0
  87. package/cjs/utils/format.js +27 -0
  88. package/cjs/utils/helpers.js +7 -0
  89. package/cjs/utils/state.js +23 -0
  90. package/cjs/validate.js +117 -0
  91. package/esm/compose.js +78 -0
  92. package/esm/graphql/helpers.js +27 -0
  93. package/esm/graphql/printer.js +244 -0
  94. package/esm/graphql/type-node-info.js +137 -0
  95. package/esm/index.js +4 -0
  96. package/esm/specifications/federation.js +204 -0
  97. package/esm/specifications/inaccessible.js +7 -0
  98. package/esm/specifications/join.js +32 -0
  99. package/esm/specifications/link.js +210 -0
  100. package/esm/specifications/tag.js +9 -0
  101. package/esm/subgraph/helpers.js +245 -0
  102. package/esm/subgraph/state.js +1148 -0
  103. package/esm/subgraph/validation/rules/elements/compose-directive.js +37 -0
  104. package/esm/subgraph/validation/rules/elements/extends.js +30 -0
  105. package/esm/subgraph/validation/rules/elements/external.js +53 -0
  106. package/esm/subgraph/validation/rules/elements/field-set.js +33 -0
  107. package/esm/subgraph/validation/rules/elements/inaccessible.js +108 -0
  108. package/esm/subgraph/validation/rules/elements/key.js +144 -0
  109. package/esm/subgraph/validation/rules/elements/override.js +52 -0
  110. package/esm/subgraph/validation/rules/elements/provides.js +169 -0
  111. package/esm/subgraph/validation/rules/elements/requires.js +115 -0
  112. package/esm/subgraph/validation/rules/elements/shareable.js +39 -0
  113. package/esm/subgraph/validation/rules/elements/tag.js +116 -0
  114. package/esm/subgraph/validation/rules/known-argument-names-on-directives-rule.js +30 -0
  115. package/esm/subgraph/validation/rules/known-directives-rule.js +101 -0
  116. package/esm/subgraph/validation/rules/known-federation-directive-rule.js +30 -0
  117. package/esm/subgraph/validation/rules/known-root-type-rule.js +21 -0
  118. package/esm/subgraph/validation/rules/known-type-names-rule.js +30 -0
  119. package/esm/subgraph/validation/rules/lone-schema-definition-rule.js +16 -0
  120. package/esm/subgraph/validation/rules/provided-arguments-on-directives-rule.js +100 -0
  121. package/esm/subgraph/validation/rules/provided-required-arguments-on-directives-rule.js +42 -0
  122. package/esm/subgraph/validation/rules/query-root-type-inaccessible-rule.js +29 -0
  123. package/esm/subgraph/validation/rules/reserved-subgraph-name-rule.js +11 -0
  124. package/esm/subgraph/validation/rules/root-type-used-rule.js +55 -0
  125. package/esm/subgraph/validation/rules/unique-argument-definition-names-rule.js +38 -0
  126. package/esm/subgraph/validation/rules/unique-argument-names-rule.js +23 -0
  127. package/esm/subgraph/validation/rules/unique-directive-names-rule.js +20 -0
  128. package/esm/subgraph/validation/rules/unique-directives-per-location-rule.js +48 -0
  129. package/esm/subgraph/validation/rules/unique-enum-value-names-rule.js +29 -0
  130. package/esm/subgraph/validation/rules/unique-field-definition-names-rule.js +33 -0
  131. package/esm/subgraph/validation/rules/unique-input-field-names-rule.js +33 -0
  132. package/esm/subgraph/validation/rules/unique-operation-types-rule.js +25 -0
  133. package/esm/subgraph/validation/rules/unique-type-names-rule.js +25 -0
  134. package/esm/subgraph/validation/validate-state.js +463 -0
  135. package/esm/subgraph/validation/validate-subgraph.js +323 -0
  136. package/esm/subgraph/validation/validation-context.js +262 -0
  137. package/esm/supergraph/composition/ast.js +765 -0
  138. package/esm/supergraph/composition/common.js +3 -0
  139. package/esm/supergraph/composition/directive.js +89 -0
  140. package/esm/supergraph/composition/enum-type.js +128 -0
  141. package/esm/supergraph/composition/input-object-type.js +115 -0
  142. package/esm/supergraph/composition/interface-type.js +222 -0
  143. package/esm/supergraph/composition/object-type.js +375 -0
  144. package/esm/supergraph/composition/scalar-type.js +59 -0
  145. package/esm/supergraph/composition/union-type.js +60 -0
  146. package/esm/supergraph/composition/visitor.js +58 -0
  147. package/esm/supergraph/state.js +245 -0
  148. package/esm/supergraph/validation/rules/default-value-uses-inaccessible-rule.js +31 -0
  149. package/esm/supergraph/validation/rules/directive-composition-rule.js +94 -0
  150. package/esm/supergraph/validation/rules/enum-values-rule.js +55 -0
  151. package/esm/supergraph/validation/rules/extension-with-base.js +27 -0
  152. package/esm/supergraph/validation/rules/external-argument-missing-rule.js +28 -0
  153. package/esm/supergraph/validation/rules/external-missing-on-base-rule.js +44 -0
  154. package/esm/supergraph/validation/rules/external-type-mismatch-rule.js +48 -0
  155. package/esm/supergraph/validation/rules/field-argument-default-mismatch-rule.js +36 -0
  156. package/esm/supergraph/validation/rules/field-arguments-of-the-same-type-rule.js +45 -0
  157. package/esm/supergraph/validation/rules/fields-of-the-same-type-rule.js +85 -0
  158. package/esm/supergraph/validation/rules/input-field-default-mismatch-rule.js +36 -0
  159. package/esm/supergraph/validation/rules/input-object-values-rule.js +21 -0
  160. package/esm/supergraph/validation/rules/interface-key-missing-implementation-type.js +42 -0
  161. package/esm/supergraph/validation/rules/invalid-field-sharing-rule.js +41 -0
  162. package/esm/supergraph/validation/rules/only-inaccessible-children-rule.js +36 -0
  163. package/esm/supergraph/validation/rules/override-source-has-override.js +32 -0
  164. package/esm/supergraph/validation/rules/referenced-inaccessible-rule.js +40 -0
  165. package/esm/supergraph/validation/rules/required-argument-missing-in-some-subgraph-rule.js +28 -0
  166. package/esm/supergraph/validation/rules/required-input-field-missing-in-some-subgraph-rule.js +28 -0
  167. package/esm/supergraph/validation/rules/required-query-rule.js +10 -0
  168. package/esm/supergraph/validation/rules/satisfiablity-rule.js +862 -0
  169. package/esm/supergraph/validation/rules/subgraph-name-rule.js +14 -0
  170. package/esm/supergraph/validation/rules/types-of-the-same-kind-rule.js +50 -0
  171. package/esm/supergraph/validation/validate-supergraph.js +73 -0
  172. package/esm/supergraph/validation/validation-context.js +21 -0
  173. package/esm/types.js +0 -0
  174. package/esm/utils/dependency-graph.js +222 -0
  175. package/esm/utils/format.js +23 -0
  176. package/esm/utils/helpers.js +3 -0
  177. package/esm/utils/state.js +15 -0
  178. package/esm/validate.js +113 -0
  179. package/package.json +46 -0
  180. package/typings/compose.d.cts +16 -0
  181. package/typings/compose.d.ts +16 -0
  182. package/typings/graphql/helpers.d.cts +4 -0
  183. package/typings/graphql/helpers.d.ts +4 -0
  184. package/typings/graphql/printer.d.cts +3 -0
  185. package/typings/graphql/printer.d.ts +3 -0
  186. package/typings/graphql/type-node-info.d.cts +19 -0
  187. package/typings/graphql/type-node-info.d.ts +19 -0
  188. package/typings/index.d.cts +5 -0
  189. package/typings/index.d.ts +5 -0
  190. package/typings/specifications/federation.d.cts +45 -0
  191. package/typings/specifications/federation.d.ts +45 -0
  192. package/typings/specifications/inaccessible.d.cts +4 -0
  193. package/typings/specifications/inaccessible.d.ts +4 -0
  194. package/typings/specifications/join.d.cts +2 -0
  195. package/typings/specifications/join.d.ts +2 -0
  196. package/typings/specifications/link.d.cts +61 -0
  197. package/typings/specifications/link.d.ts +61 -0
  198. package/typings/specifications/tag.d.cts +4 -0
  199. package/typings/specifications/tag.d.ts +4 -0
  200. package/typings/subgraph/helpers.d.cts +44 -0
  201. package/typings/subgraph/helpers.d.ts +44 -0
  202. package/typings/subgraph/state.d.cts +322 -0
  203. package/typings/subgraph/state.d.ts +322 -0
  204. package/typings/subgraph/validation/rules/elements/compose-directive.d.cts +4 -0
  205. package/typings/subgraph/validation/rules/elements/compose-directive.d.ts +4 -0
  206. package/typings/subgraph/validation/rules/elements/extends.d.cts +4 -0
  207. package/typings/subgraph/validation/rules/elements/extends.d.ts +4 -0
  208. package/typings/subgraph/validation/rules/elements/external.d.cts +4 -0
  209. package/typings/subgraph/validation/rules/elements/external.d.ts +4 -0
  210. package/typings/subgraph/validation/rules/elements/field-set.d.cts +4 -0
  211. package/typings/subgraph/validation/rules/elements/field-set.d.ts +4 -0
  212. package/typings/subgraph/validation/rules/elements/inaccessible.d.cts +4 -0
  213. package/typings/subgraph/validation/rules/elements/inaccessible.d.ts +4 -0
  214. package/typings/subgraph/validation/rules/elements/key.d.cts +4 -0
  215. package/typings/subgraph/validation/rules/elements/key.d.ts +4 -0
  216. package/typings/subgraph/validation/rules/elements/override.d.cts +4 -0
  217. package/typings/subgraph/validation/rules/elements/override.d.ts +4 -0
  218. package/typings/subgraph/validation/rules/elements/provides.d.cts +4 -0
  219. package/typings/subgraph/validation/rules/elements/provides.d.ts +4 -0
  220. package/typings/subgraph/validation/rules/elements/requires.d.cts +4 -0
  221. package/typings/subgraph/validation/rules/elements/requires.d.ts +4 -0
  222. package/typings/subgraph/validation/rules/elements/shareable.d.cts +4 -0
  223. package/typings/subgraph/validation/rules/elements/shareable.d.ts +4 -0
  224. package/typings/subgraph/validation/rules/elements/tag.d.cts +4 -0
  225. package/typings/subgraph/validation/rules/elements/tag.d.ts +4 -0
  226. package/typings/subgraph/validation/rules/known-argument-names-on-directives-rule.d.cts +6 -0
  227. package/typings/subgraph/validation/rules/known-argument-names-on-directives-rule.d.ts +6 -0
  228. package/typings/subgraph/validation/rules/known-directives-rule.d.cts +6 -0
  229. package/typings/subgraph/validation/rules/known-directives-rule.d.ts +6 -0
  230. package/typings/subgraph/validation/rules/known-federation-directive-rule.d.cts +4 -0
  231. package/typings/subgraph/validation/rules/known-federation-directive-rule.d.ts +4 -0
  232. package/typings/subgraph/validation/rules/known-root-type-rule.d.cts +4 -0
  233. package/typings/subgraph/validation/rules/known-root-type-rule.d.ts +4 -0
  234. package/typings/subgraph/validation/rules/known-type-names-rule.d.cts +4 -0
  235. package/typings/subgraph/validation/rules/known-type-names-rule.d.ts +4 -0
  236. package/typings/subgraph/validation/rules/lone-schema-definition-rule.d.cts +5 -0
  237. package/typings/subgraph/validation/rules/lone-schema-definition-rule.d.ts +5 -0
  238. package/typings/subgraph/validation/rules/provided-arguments-on-directives-rule.d.cts +4 -0
  239. package/typings/subgraph/validation/rules/provided-arguments-on-directives-rule.d.ts +4 -0
  240. package/typings/subgraph/validation/rules/provided-required-arguments-on-directives-rule.d.cts +4 -0
  241. package/typings/subgraph/validation/rules/provided-required-arguments-on-directives-rule.d.ts +4 -0
  242. package/typings/subgraph/validation/rules/query-root-type-inaccessible-rule.d.cts +4 -0
  243. package/typings/subgraph/validation/rules/query-root-type-inaccessible-rule.d.ts +4 -0
  244. package/typings/subgraph/validation/rules/reserved-subgraph-name-rule.d.cts +4 -0
  245. package/typings/subgraph/validation/rules/reserved-subgraph-name-rule.d.ts +4 -0
  246. package/typings/subgraph/validation/rules/root-type-used-rule.d.cts +4 -0
  247. package/typings/subgraph/validation/rules/root-type-used-rule.d.ts +4 -0
  248. package/typings/subgraph/validation/rules/unique-argument-definition-names-rule.d.cts +5 -0
  249. package/typings/subgraph/validation/rules/unique-argument-definition-names-rule.d.ts +5 -0
  250. package/typings/subgraph/validation/rules/unique-argument-names-rule.d.cts +5 -0
  251. package/typings/subgraph/validation/rules/unique-argument-names-rule.d.ts +5 -0
  252. package/typings/subgraph/validation/rules/unique-directive-names-rule.d.cts +5 -0
  253. package/typings/subgraph/validation/rules/unique-directive-names-rule.d.ts +5 -0
  254. package/typings/subgraph/validation/rules/unique-directives-per-location-rule.d.cts +6 -0
  255. package/typings/subgraph/validation/rules/unique-directives-per-location-rule.d.ts +6 -0
  256. package/typings/subgraph/validation/rules/unique-enum-value-names-rule.d.cts +5 -0
  257. package/typings/subgraph/validation/rules/unique-enum-value-names-rule.d.ts +5 -0
  258. package/typings/subgraph/validation/rules/unique-field-definition-names-rule.d.cts +5 -0
  259. package/typings/subgraph/validation/rules/unique-field-definition-names-rule.d.ts +5 -0
  260. package/typings/subgraph/validation/rules/unique-input-field-names-rule.d.cts +5 -0
  261. package/typings/subgraph/validation/rules/unique-input-field-names-rule.d.ts +5 -0
  262. package/typings/subgraph/validation/rules/unique-operation-types-rule.d.cts +5 -0
  263. package/typings/subgraph/validation/rules/unique-operation-types-rule.d.ts +5 -0
  264. package/typings/subgraph/validation/rules/unique-type-names-rule.d.cts +5 -0
  265. package/typings/subgraph/validation/rules/unique-type-names-rule.d.ts +5 -0
  266. package/typings/subgraph/validation/validate-state.d.cts +13 -0
  267. package/typings/subgraph/validation/validate-state.d.ts +13 -0
  268. package/typings/subgraph/validation/validate-subgraph.d.cts +43 -0
  269. package/typings/subgraph/validation/validate-subgraph.d.ts +43 -0
  270. package/typings/subgraph/validation/validation-context.d.cts +182 -0
  271. package/typings/subgraph/validation/validation-context.d.ts +182 -0
  272. package/typings/supergraph/composition/ast.d.cts +216 -0
  273. package/typings/supergraph/composition/ast.d.ts +216 -0
  274. package/typings/supergraph/composition/common.d.cts +19 -0
  275. package/typings/supergraph/composition/common.d.ts +19 -0
  276. package/typings/supergraph/composition/directive.d.cts +32 -0
  277. package/typings/supergraph/composition/directive.d.ts +32 -0
  278. package/typings/supergraph/composition/enum-type.d.cts +32 -0
  279. package/typings/supergraph/composition/enum-type.d.ts +32 -0
  280. package/typings/supergraph/composition/input-object-type.d.cts +32 -0
  281. package/typings/supergraph/composition/input-object-type.d.ts +32 -0
  282. package/typings/supergraph/composition/interface-type.d.cts +61 -0
  283. package/typings/supergraph/composition/interface-type.d.ts +61 -0
  284. package/typings/supergraph/composition/object-type.d.cts +79 -0
  285. package/typings/supergraph/composition/object-type.d.ts +79 -0
  286. package/typings/supergraph/composition/scalar-type.d.cts +20 -0
  287. package/typings/supergraph/composition/scalar-type.d.ts +20 -0
  288. package/typings/supergraph/composition/union-type.d.cts +17 -0
  289. package/typings/supergraph/composition/union-type.d.ts +17 -0
  290. package/typings/supergraph/composition/visitor.d.cts +18 -0
  291. package/typings/supergraph/composition/visitor.d.ts +18 -0
  292. package/typings/supergraph/state.d.cts +51 -0
  293. package/typings/supergraph/state.d.ts +51 -0
  294. package/typings/supergraph/validation/rules/default-value-uses-inaccessible-rule.d.cts +5 -0
  295. package/typings/supergraph/validation/rules/default-value-uses-inaccessible-rule.d.ts +5 -0
  296. package/typings/supergraph/validation/rules/directive-composition-rule.d.cts +5 -0
  297. package/typings/supergraph/validation/rules/directive-composition-rule.d.ts +5 -0
  298. package/typings/supergraph/validation/rules/enum-values-rule.d.cts +4 -0
  299. package/typings/supergraph/validation/rules/enum-values-rule.d.ts +4 -0
  300. package/typings/supergraph/validation/rules/extension-with-base.d.cts +4 -0
  301. package/typings/supergraph/validation/rules/extension-with-base.d.ts +4 -0
  302. package/typings/supergraph/validation/rules/external-argument-missing-rule.d.cts +4 -0
  303. package/typings/supergraph/validation/rules/external-argument-missing-rule.d.ts +4 -0
  304. package/typings/supergraph/validation/rules/external-missing-on-base-rule.d.cts +4 -0
  305. package/typings/supergraph/validation/rules/external-missing-on-base-rule.d.ts +4 -0
  306. package/typings/supergraph/validation/rules/external-type-mismatch-rule.d.cts +4 -0
  307. package/typings/supergraph/validation/rules/external-type-mismatch-rule.d.ts +4 -0
  308. package/typings/supergraph/validation/rules/field-argument-default-mismatch-rule.d.cts +4 -0
  309. package/typings/supergraph/validation/rules/field-argument-default-mismatch-rule.d.ts +4 -0
  310. package/typings/supergraph/validation/rules/field-arguments-of-the-same-type-rule.d.cts +4 -0
  311. package/typings/supergraph/validation/rules/field-arguments-of-the-same-type-rule.d.ts +4 -0
  312. package/typings/supergraph/validation/rules/fields-of-the-same-type-rule.d.cts +4 -0
  313. package/typings/supergraph/validation/rules/fields-of-the-same-type-rule.d.ts +4 -0
  314. package/typings/supergraph/validation/rules/input-field-default-mismatch-rule.d.cts +4 -0
  315. package/typings/supergraph/validation/rules/input-field-default-mismatch-rule.d.ts +4 -0
  316. package/typings/supergraph/validation/rules/input-object-values-rule.d.cts +4 -0
  317. package/typings/supergraph/validation/rules/input-object-values-rule.d.ts +4 -0
  318. package/typings/supergraph/validation/rules/interface-key-missing-implementation-type.d.cts +4 -0
  319. package/typings/supergraph/validation/rules/interface-key-missing-implementation-type.d.ts +4 -0
  320. package/typings/supergraph/validation/rules/invalid-field-sharing-rule.d.cts +4 -0
  321. package/typings/supergraph/validation/rules/invalid-field-sharing-rule.d.ts +4 -0
  322. package/typings/supergraph/validation/rules/only-inaccessible-children-rule.d.cts +4 -0
  323. package/typings/supergraph/validation/rules/only-inaccessible-children-rule.d.ts +4 -0
  324. package/typings/supergraph/validation/rules/override-source-has-override.d.cts +4 -0
  325. package/typings/supergraph/validation/rules/override-source-has-override.d.ts +4 -0
  326. package/typings/supergraph/validation/rules/referenced-inaccessible-rule.d.cts +5 -0
  327. package/typings/supergraph/validation/rules/referenced-inaccessible-rule.d.ts +5 -0
  328. package/typings/supergraph/validation/rules/required-argument-missing-in-some-subgraph-rule.d.cts +4 -0
  329. package/typings/supergraph/validation/rules/required-argument-missing-in-some-subgraph-rule.d.ts +4 -0
  330. package/typings/supergraph/validation/rules/required-input-field-missing-in-some-subgraph-rule.d.cts +4 -0
  331. package/typings/supergraph/validation/rules/required-input-field-missing-in-some-subgraph-rule.d.ts +4 -0
  332. package/typings/supergraph/validation/rules/required-query-rule.d.cts +3 -0
  333. package/typings/supergraph/validation/rules/required-query-rule.d.ts +3 -0
  334. package/typings/supergraph/validation/rules/satisfiablity-rule.d.cts +5 -0
  335. package/typings/supergraph/validation/rules/satisfiablity-rule.d.ts +5 -0
  336. package/typings/supergraph/validation/rules/subgraph-name-rule.d.cts +3 -0
  337. package/typings/supergraph/validation/rules/subgraph-name-rule.d.ts +3 -0
  338. package/typings/supergraph/validation/rules/types-of-the-same-kind-rule.d.cts +3 -0
  339. package/typings/supergraph/validation/rules/types-of-the-same-kind-rule.d.ts +3 -0
  340. package/typings/supergraph/validation/validate-supergraph.d.cts +6 -0
  341. package/typings/supergraph/validation/validate-supergraph.d.ts +6 -0
  342. package/typings/supergraph/validation/validation-context.d.cts +10 -0
  343. package/typings/supergraph/validation/validation-context.d.ts +10 -0
  344. package/typings/types.d.cts +7 -0
  345. package/typings/types.d.ts +7 -0
  346. package/typings/utils/dependency-graph.d.cts +31 -0
  347. package/typings/utils/dependency-graph.d.ts +31 -0
  348. package/typings/utils/format.d.cts +2 -0
  349. package/typings/utils/format.d.ts +2 -0
  350. package/typings/utils/helpers.d.cts +2 -0
  351. package/typings/utils/helpers.d.ts +2 -0
  352. package/typings/utils/state.d.cts +6 -0
  353. package/typings/utils/state.d.ts +6 -0
  354. package/typings/validate.d.cts +37 -0
  355. package/typings/validate.d.ts +37 -0
@@ -0,0 +1,1148 @@
1
+ import { Kind, OperationTypeNode, } from 'graphql';
2
+ import { print } from '../graphql/printer.js';
3
+ import { isFederationLink } from '../specifications/federation.js';
4
+ import { printOutputType } from './helpers.js';
5
+ export var TypeKind;
6
+ (function (TypeKind) {
7
+ TypeKind["OBJECT"] = "OBJECT";
8
+ TypeKind["INTERFACE"] = "INTERFACE";
9
+ TypeKind["ENUM"] = "ENUM";
10
+ TypeKind["UNION"] = "UNION";
11
+ TypeKind["SCALAR"] = "SCALAR";
12
+ TypeKind["INPUT_OBJECT"] = "INPUT_OBJECT";
13
+ TypeKind["DIRECTIVE"] = "DIRECTIVE";
14
+ })(TypeKind || (TypeKind = {}));
15
+ const MISSING = 'MISSING';
16
+ export function createSubgraphStateBuilder(graph, typeDefs, version, links) {
17
+ const linksWithDirective = links.filter(link => !isFederationLink(link) && link.imports.some(im => im.kind === 'directive'));
18
+ const isLinkSpecManuallyProvided = typeDefs.definitions.some(def => def.kind === Kind.DIRECTIVE_DEFINITION &&
19
+ def.name.value === 'link' &&
20
+ def.locations.every(loc => loc.value === 'SCHEMA'));
21
+ const state = {
22
+ graph: {
23
+ ...graph,
24
+ version,
25
+ },
26
+ types: new Map(),
27
+ schema: {},
28
+ links: linksWithDirective,
29
+ specs: {
30
+ tag: false,
31
+ inaccessible: false,
32
+ link: isLinkSpecManuallyProvided,
33
+ },
34
+ version,
35
+ };
36
+ const schemaDef = typeDefs.definitions.find(isSchemaDefinition);
37
+ const expectedQueryTypeName = decideOnRootTypeName(schemaDef, OperationTypeNode.QUERY, 'Query');
38
+ const expectedMutationTypeName = decideOnRootTypeName(schemaDef, OperationTypeNode.MUTATION, 'Mutation');
39
+ const expectedSubscriptionTypeName = decideOnRootTypeName(schemaDef, OperationTypeNode.SUBSCRIPTION, 'Subscription');
40
+ const composedDirectives = new Set();
41
+ const directiveBuilder = directiveFactory(state);
42
+ const scalarTypeBuilder = scalarTypeFactory(state);
43
+ const objectTypeBuilder = objectTypeFactory(state, renameObjectType);
44
+ const interfaceTypeBuilder = interfaceTypeFactory(state);
45
+ const inputObjectTypeBuilder = inputObjectTypeFactory(state);
46
+ const unionTypeBuilder = unionTypeFactory(state);
47
+ const enumTypeBuilder = enumTypeFactory(state);
48
+ function renameObjectType(typeName) {
49
+ if (typeName === expectedQueryTypeName) {
50
+ return 'Query';
51
+ }
52
+ if (typeName === expectedMutationTypeName) {
53
+ return 'Mutation';
54
+ }
55
+ if (typeName === expectedSubscriptionTypeName) {
56
+ return 'Subscription';
57
+ }
58
+ return typeName;
59
+ }
60
+ return {
61
+ directive: directiveBuilder,
62
+ scalarType: scalarTypeBuilder,
63
+ objectType: objectTypeBuilder,
64
+ interfaceType: interfaceTypeBuilder,
65
+ inputObjectType: inputObjectTypeBuilder,
66
+ unionType: unionTypeBuilder,
67
+ enumType: enumTypeBuilder,
68
+ composedDirectives,
69
+ state,
70
+ markSpecAsUsed(specName) {
71
+ state.specs[specName] = true;
72
+ },
73
+ visitor(typeNodeInfo) {
74
+ const enumTypes = typeDefs.definitions.filter(isEnumType);
75
+ const enumTypesByName = new Set(enumTypes ? enumTypes.map(enumType => enumType.name.value) : []);
76
+ return {
77
+ FieldDefinition(node) {
78
+ const typeDef = typeNodeInfo.getTypeDef();
79
+ if (!typeDef) {
80
+ throw new Error(`Expected to find a type definition or extension`);
81
+ }
82
+ const isInterfaceType = typeDef.kind === Kind.INTERFACE_TYPE_DEFINITION ||
83
+ typeDef.kind === Kind.INTERFACE_TYPE_EXTENSION;
84
+ const isObjectType = typeDef.kind === Kind.OBJECT_TYPE_DEFINITION ||
85
+ typeDef.kind === Kind.OBJECT_TYPE_EXTENSION;
86
+ const outputTypeName = resolveTypeName(node.type);
87
+ const referencesEnumType = enumTypesByName.has(outputTypeName);
88
+ if (referencesEnumType) {
89
+ enumTypeBuilder.setReferencedByOutputType(outputTypeName, `${typeDef.name.value}.${node.name.value}`);
90
+ }
91
+ if (isInterfaceType) {
92
+ interfaceTypeBuilder.field.setType(typeDef.name.value, node.name.value, printOutputType(node.type));
93
+ return;
94
+ }
95
+ if (!isObjectType) {
96
+ throw new Error(`Expected to find an object type`);
97
+ }
98
+ objectTypeBuilder.field.setType(typeDef.name.value, node.name.value, printOutputType(node.type));
99
+ },
100
+ InputValueDefinition(node) {
101
+ const typeDef = typeNodeInfo.getTypeDef();
102
+ const fieldDef = typeNodeInfo.getFieldDef();
103
+ if (!typeDef) {
104
+ return;
105
+ }
106
+ const isInputObjectType = typeDef.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION ||
107
+ typeDef.kind === Kind.INPUT_OBJECT_TYPE_EXTENSION;
108
+ const isObjectType = typeDef.kind === Kind.OBJECT_TYPE_DEFINITION ||
109
+ typeDef.kind === Kind.OBJECT_TYPE_EXTENSION;
110
+ const isInterfaceType = typeDef.kind === Kind.INTERFACE_TYPE_DEFINITION ||
111
+ typeDef.kind === Kind.INTERFACE_TYPE_EXTENSION;
112
+ const outputTypeName = resolveTypeName(node.type);
113
+ const referencesEnumType = enumTypesByName.has(outputTypeName);
114
+ if (isInputObjectType) {
115
+ inputObjectTypeBuilder.field.setType(typeDef.name.value, node.name.value, printOutputType(node.type));
116
+ if (referencesEnumType) {
117
+ enumTypeBuilder.setReferencedByInputType(outputTypeName, `${typeDef.name.value}.${node.name.value}`);
118
+ }
119
+ if (node.defaultValue) {
120
+ inputObjectTypeBuilder.field.setDefaultValue(typeDef.name.value, node.name.value, print(node.defaultValue));
121
+ }
122
+ }
123
+ if (isObjectType && fieldDef) {
124
+ objectTypeBuilder.field.arg.setType(typeDef.name.value, fieldDef.name.value, node.name.value, printOutputType(node.type));
125
+ if (node.defaultValue) {
126
+ objectTypeBuilder.field.arg.setDefaultValue(typeDef.name.value, fieldDef.name.value, node.name.value, print(node.defaultValue));
127
+ }
128
+ if (referencesEnumType) {
129
+ enumTypeBuilder.setReferencedByInputType(outputTypeName, `${typeDef.name.value}.${fieldDef.name.value}(${node.name.value}:)`);
130
+ }
131
+ }
132
+ if (isInterfaceType && fieldDef) {
133
+ interfaceTypeBuilder.field.arg.setType(typeDef.name.value, fieldDef.name.value, node.name.value, printOutputType(node.type));
134
+ if (node.defaultValue) {
135
+ interfaceTypeBuilder.field.arg.setDefaultValue(typeDef.name.value, fieldDef.name.value, node.name.value, print(node.defaultValue));
136
+ }
137
+ }
138
+ },
139
+ ObjectTypeDefinition(node) {
140
+ objectTypeBuilder.setDefinition(node.name.value);
141
+ if (node.name.value === expectedQueryTypeName) {
142
+ state.schema.queryType = renameObjectType(node.name.value);
143
+ }
144
+ else if (node.name.value === expectedMutationTypeName) {
145
+ state.schema.mutationType = renameObjectType(node.name.value);
146
+ }
147
+ else if (node.name.value === expectedSubscriptionTypeName) {
148
+ state.schema.subscriptionType = renameObjectType(node.name.value);
149
+ }
150
+ if (node.interfaces) {
151
+ for (const interfaceNode of node.interfaces) {
152
+ objectTypeBuilder.setInterface(node.name.value, interfaceNode.name.value);
153
+ }
154
+ }
155
+ },
156
+ ObjectTypeExtension(node) {
157
+ if (node.name.value === expectedQueryTypeName) {
158
+ state.schema.queryType = renameObjectType(node.name.value);
159
+ }
160
+ else if (node.name.value === expectedMutationTypeName) {
161
+ state.schema.mutationType = renameObjectType(node.name.value);
162
+ }
163
+ else if (node.name.value === expectedSubscriptionTypeName) {
164
+ state.schema.subscriptionType = renameObjectType(node.name.value);
165
+ }
166
+ objectTypeBuilder.setExtension(node.name.value, 'extend');
167
+ if (node.interfaces) {
168
+ for (const interfaceNode of node.interfaces) {
169
+ objectTypeBuilder.setInterface(node.name.value, interfaceNode.name.value);
170
+ }
171
+ }
172
+ },
173
+ InterfaceTypeDefinition(node) {
174
+ interfaceTypeBuilder.setDefinition(node.name.value);
175
+ if (node.interfaces) {
176
+ for (const interfaceNode of node.interfaces) {
177
+ interfaceTypeBuilder.setInterface(node.name.value, interfaceNode.name.value);
178
+ }
179
+ }
180
+ },
181
+ InterfaceTypeExtension(node) {
182
+ if (version !== 'v1.0') {
183
+ interfaceTypeBuilder.setExtension(node.name.value);
184
+ }
185
+ if (node.interfaces) {
186
+ for (const interfaceNode of node.interfaces) {
187
+ interfaceTypeBuilder.setInterface(node.name.value, interfaceNode.name.value);
188
+ }
189
+ }
190
+ },
191
+ UnionTypeDefinition(node) {
192
+ unionTypeBuilder.setDefinition(node.name.value);
193
+ if (node.types) {
194
+ for (const member of node.types) {
195
+ unionTypeBuilder.setMember(node.name.value, member.name.value);
196
+ }
197
+ }
198
+ },
199
+ UnionTypeExtension(node) {
200
+ if (node.types) {
201
+ for (const member of node.types) {
202
+ unionTypeBuilder.setMember(node.name.value, member.name.value);
203
+ }
204
+ }
205
+ },
206
+ EnumTypeDefinition(node) {
207
+ enumTypeBuilder.setDefinition(node.name.value);
208
+ },
209
+ EnumValueDefinition(node) {
210
+ const typeDef = typeNodeInfo.getTypeDef();
211
+ if (!typeDef) {
212
+ return;
213
+ }
214
+ enumTypeBuilder.value.setValue(typeDef.name.value, node.name.value);
215
+ },
216
+ InputObjectTypeDefinition(node) {
217
+ inputObjectTypeBuilder.setDefinition(node.name.value);
218
+ },
219
+ ScalarTypeDefinition(node) {
220
+ scalarTypeBuilder.setDefinition(node.name.value);
221
+ },
222
+ ScalarTypeExtension() {
223
+ },
224
+ Directive(node) {
225
+ if (composedDirectives.has(node.name.value)) {
226
+ const typeDef = typeNodeInfo.getTypeDef();
227
+ const fieldDef = typeNodeInfo.getFieldDef();
228
+ const argDef = typeNodeInfo.getArgumentDef();
229
+ if (!typeDef) {
230
+ return;
231
+ }
232
+ switch (typeDef.kind) {
233
+ case Kind.OBJECT_TYPE_DEFINITION:
234
+ case Kind.OBJECT_TYPE_EXTENSION:
235
+ if (argDef) {
236
+ objectTypeBuilder.field.arg.setDirective(typeDef.name.value, fieldDef.name.value, argDef.name.value, node);
237
+ }
238
+ else if (fieldDef) {
239
+ objectTypeBuilder.field.setDirective(typeDef.name.value, fieldDef.name.value, node);
240
+ }
241
+ else {
242
+ objectTypeBuilder.setDirective(typeDef.name.value, node);
243
+ }
244
+ break;
245
+ case Kind.INTERFACE_TYPE_DEFINITION:
246
+ case Kind.INTERFACE_TYPE_EXTENSION:
247
+ if (argDef) {
248
+ interfaceTypeBuilder.field.arg.setDirective(typeDef.name.value, fieldDef.name.value, argDef.name.value, node);
249
+ }
250
+ else if (fieldDef) {
251
+ interfaceTypeBuilder.field.setDirective(typeDef.name.value, fieldDef.name.value, node);
252
+ }
253
+ else {
254
+ interfaceTypeBuilder.setDirective(typeDef.name.value, node);
255
+ }
256
+ break;
257
+ case Kind.SCALAR_TYPE_DEFINITION:
258
+ case Kind.SCALAR_TYPE_EXTENSION: {
259
+ scalarTypeBuilder.setDirective(typeDef.name.value, node);
260
+ break;
261
+ }
262
+ case Kind.DIRECTIVE_DEFINITION: {
263
+ if (fieldDef) {
264
+ directiveBuilder.arg.setDirective(typeDef.name.value, fieldDef.name.value, node);
265
+ }
266
+ break;
267
+ }
268
+ default:
269
+ throw new Error(`Directives on "${typeDef.kind}" types are not supported yet`);
270
+ }
271
+ }
272
+ else if (node.name.value === 'specifiedBy') {
273
+ const typeDef = typeNodeInfo.getTypeDef();
274
+ if (typeDef &&
275
+ (typeDef.kind === Kind.SCALAR_TYPE_DEFINITION ||
276
+ typeDef.kind === Kind.SCALAR_TYPE_EXTENSION)) {
277
+ const urlValue = node.arguments?.find(arg => arg.name.value === 'url')?.value;
278
+ if (urlValue?.kind === Kind.STRING) {
279
+ scalarTypeBuilder.setSpecifiedBy(typeDef.name.value, urlValue.value);
280
+ }
281
+ }
282
+ }
283
+ else if (node.name.value === 'deprecated') {
284
+ const typeDef = typeNodeInfo.getTypeDef();
285
+ const fieldDef = typeNodeInfo.getFieldDef();
286
+ const argDef = typeNodeInfo.getArgumentDef();
287
+ if (!typeDef) {
288
+ return;
289
+ }
290
+ const reasonValue = node.arguments?.find(arg => arg.name.value === 'reason')?.value;
291
+ const reason = reasonValue?.kind === Kind.STRING ? reasonValue.value : undefined;
292
+ switch (typeDef.kind) {
293
+ case Kind.OBJECT_TYPE_DEFINITION:
294
+ case Kind.OBJECT_TYPE_EXTENSION: {
295
+ if (!fieldDef) {
296
+ return;
297
+ }
298
+ if (argDef) {
299
+ objectTypeBuilder.field.arg.setDeprecated(typeDef.name.value, fieldDef.name.value, argDef.name.value, reason);
300
+ }
301
+ else {
302
+ objectTypeBuilder.field.setDeprecated(typeDef.name.value, fieldDef.name.value, reason);
303
+ }
304
+ break;
305
+ }
306
+ case Kind.INTERFACE_TYPE_DEFINITION:
307
+ case Kind.INTERFACE_TYPE_EXTENSION: {
308
+ if (!fieldDef) {
309
+ return;
310
+ }
311
+ if (argDef) {
312
+ interfaceTypeBuilder.field.arg.setDeprecated(typeDef.name.value, fieldDef.name.value, argDef.name.value, reason);
313
+ }
314
+ else {
315
+ interfaceTypeBuilder.field.setDeprecated(typeDef.name.value, fieldDef.name.value, reason);
316
+ }
317
+ break;
318
+ }
319
+ case Kind.ENUM_TYPE_DEFINITION:
320
+ case Kind.ENUM_TYPE_EXTENSION: {
321
+ const valueDef = typeNodeInfo.getValueDef();
322
+ if (!valueDef) {
323
+ return;
324
+ }
325
+ enumTypeBuilder.value.setDeprecated(typeDef.name.value, valueDef.name.value, reason);
326
+ break;
327
+ }
328
+ case Kind.INPUT_OBJECT_TYPE_DEFINITION:
329
+ case Kind.INPUT_OBJECT_TYPE_EXTENSION: {
330
+ if (!fieldDef) {
331
+ return;
332
+ }
333
+ inputObjectTypeBuilder.field.setDeprecated(typeDef.name.value, fieldDef.name.value, reason);
334
+ break;
335
+ }
336
+ }
337
+ }
338
+ },
339
+ DirectiveDefinition(node) {
340
+ const directiveName = node.name.value;
341
+ if (node.repeatable) {
342
+ directiveBuilder.setRepeatable(directiveName);
343
+ }
344
+ if (node.locations) {
345
+ for (const location of node.locations) {
346
+ directiveBuilder.setLocation(directiveName, location.value);
347
+ }
348
+ }
349
+ if (node.arguments?.length) {
350
+ for (const arg of node.arguments) {
351
+ directiveBuilder.arg.setType(directiveName, arg.name.value, printOutputType(arg.type));
352
+ if (typeof arg.defaultValue !== 'undefined') {
353
+ directiveBuilder.arg.setDefaultValue(directiveName, arg.name.value, print(arg.defaultValue));
354
+ }
355
+ }
356
+ }
357
+ },
358
+ StringValue(node, _, parent) {
359
+ const typeDef = typeNodeInfo.getTypeDef();
360
+ const fieldDef = typeNodeInfo.getFieldDef();
361
+ const argDef = typeNodeInfo.getArgumentDef();
362
+ const description = {
363
+ value: node.value,
364
+ block: node.block === true,
365
+ };
366
+ if (parent && 'kind' in parent) {
367
+ if (parent.kind === Kind.SCALAR_TYPE_DEFINITION ||
368
+ parent.kind === Kind.SCALAR_TYPE_EXTENSION) {
369
+ scalarTypeBuilder.setDescription(parent.name.value, description);
370
+ }
371
+ if (parent.kind === Kind.INPUT_VALUE_DEFINITION &&
372
+ parent.defaultValue?.kind === Kind.STRING &&
373
+ parent.defaultValue === node) {
374
+ return;
375
+ }
376
+ }
377
+ if (!typeDef) {
378
+ return;
379
+ }
380
+ function matchesParent(node) {
381
+ return node === parent;
382
+ }
383
+ switch (typeDef.kind) {
384
+ case Kind.OBJECT_TYPE_DEFINITION:
385
+ case Kind.OBJECT_TYPE_EXTENSION: {
386
+ if (argDef && matchesParent(argDef)) {
387
+ objectTypeBuilder.field.arg.setDescription(typeDef.name.value, fieldDef.name.value, argDef.name.value, description);
388
+ }
389
+ else if (fieldDef && matchesParent(fieldDef)) {
390
+ objectTypeBuilder.field.setDescription(typeDef.name.value, fieldDef.name.value, description);
391
+ }
392
+ else if (matchesParent(typeDef)) {
393
+ objectTypeBuilder.setDescription(typeDef.name.value, description);
394
+ }
395
+ break;
396
+ }
397
+ case Kind.INTERFACE_TYPE_DEFINITION:
398
+ case Kind.INTERFACE_TYPE_EXTENSION: {
399
+ if (argDef && matchesParent(argDef)) {
400
+ interfaceTypeBuilder.field.arg.setDescription(typeDef.name.value, fieldDef.name.value, argDef.name.value, description);
401
+ }
402
+ else if (fieldDef && matchesParent(fieldDef)) {
403
+ interfaceTypeBuilder.field.setDescription(typeDef.name.value, fieldDef.name.value, description);
404
+ }
405
+ else if (matchesParent(typeDef)) {
406
+ interfaceTypeBuilder.setDescription(typeDef.name.value, description);
407
+ }
408
+ break;
409
+ }
410
+ case Kind.INPUT_OBJECT_TYPE_DEFINITION:
411
+ case Kind.INPUT_OBJECT_TYPE_EXTENSION: {
412
+ if (fieldDef && matchesParent(fieldDef)) {
413
+ inputObjectTypeBuilder.field.setDescription(typeDef.name.value, fieldDef.name.value, description);
414
+ }
415
+ else if (matchesParent(typeDef)) {
416
+ inputObjectTypeBuilder.setDescription(typeDef.name.value, description);
417
+ }
418
+ break;
419
+ }
420
+ case Kind.ENUM_TYPE_DEFINITION:
421
+ case Kind.ENUM_TYPE_EXTENSION: {
422
+ if (parent && 'kind' in parent && parent.kind === Kind.ENUM_VALUE_DEFINITION) {
423
+ enumTypeBuilder.value.setDescription(typeDef.name.value, parent.name.value, description);
424
+ }
425
+ else if (matchesParent(typeDef)) {
426
+ enumTypeBuilder.setDescription(typeDef.name.value, description);
427
+ }
428
+ break;
429
+ }
430
+ case Kind.UNION_TYPE_DEFINITION:
431
+ case Kind.UNION_TYPE_EXTENSION: {
432
+ if (matchesParent(typeDef)) {
433
+ unionTypeBuilder.setDescription(typeDef.name.value, description);
434
+ }
435
+ break;
436
+ }
437
+ }
438
+ },
439
+ };
440
+ },
441
+ };
442
+ }
443
+ function directiveFactory(state) {
444
+ return {
445
+ setComposed(directiveName) {
446
+ getOrCreateDirective(state, directiveName).composed = true;
447
+ },
448
+ setLocation(directiveName, location) {
449
+ getOrCreateDirective(state, directiveName).locations.add(location);
450
+ },
451
+ setRepeatable(directiveName) {
452
+ getOrCreateDirective(state, directiveName).repeatable = true;
453
+ },
454
+ arg: {
455
+ setTag(directiveName, argName, tag) {
456
+ getOrCreateDirectiveArg(state, directiveName, argName).tags.add(tag);
457
+ },
458
+ setType(directiveName, argName, argType) {
459
+ getOrCreateDirectiveArg(state, directiveName, argName).type = argType;
460
+ },
461
+ setDirective(typeName, argName, directive) {
462
+ getOrCreateDirectiveArg(state, typeName, argName).ast.directives.push(directive);
463
+ },
464
+ setDefaultValue(typeName, argName, defaultValue) {
465
+ getOrCreateDirectiveArg(state, typeName, argName).defaultValue = defaultValue;
466
+ },
467
+ setInaccessible(typeName, argName) {
468
+ getOrCreateDirectiveArg(state, typeName, argName).inaccessible = true;
469
+ },
470
+ },
471
+ };
472
+ }
473
+ export function cleanSubgraphStateFromFederationSpec(state) {
474
+ state.types.delete('_FieldSet');
475
+ state.types.delete('federation__FieldSet');
476
+ return state;
477
+ }
478
+ export function cleanSubgraphStateFromLinkSpec(state) {
479
+ state.types.delete('link__Import');
480
+ state.types.delete('link__Purpose');
481
+ state.types.delete('link__Import');
482
+ state.types.delete('link');
483
+ return state;
484
+ }
485
+ function scalarTypeFactory(state) {
486
+ return {
487
+ setDefinition(typeName) {
488
+ getOrCreateScalarType(state, typeName);
489
+ },
490
+ setInaccessible(typeName) {
491
+ getOrCreateScalarType(state, typeName).inaccessible = true;
492
+ },
493
+ setTag(typeName, tag) {
494
+ getOrCreateScalarType(state, typeName).tags.add(tag);
495
+ },
496
+ setDirective(typeName, directive) {
497
+ getOrCreateScalarType(state, typeName).ast.directives.push(directive);
498
+ },
499
+ setDescription(typeName, description) {
500
+ getOrCreateScalarType(state, typeName).description = description;
501
+ },
502
+ setSpecifiedBy(typeName, url) {
503
+ getOrCreateScalarType(state, typeName).specifiedBy = url;
504
+ },
505
+ };
506
+ }
507
+ function objectTypeFactory(state, renameObject) {
508
+ return {
509
+ setDefinition(typeName) {
510
+ getOrCreateObjectType(state, renameObject, typeName).isDefinition = true;
511
+ },
512
+ setExtension(typeName, extensionType) {
513
+ const objectType = getOrCreateObjectType(state, renameObject, typeName);
514
+ objectType.extension = true;
515
+ if (objectType.extensionType !== '@extends') {
516
+ objectType.extensionType = extensionType;
517
+ }
518
+ },
519
+ setDescription(typeName, description) {
520
+ getOrCreateObjectType(state, renameObject, typeName).description = description;
521
+ },
522
+ setExternal(typeName) {
523
+ const objectType = getOrCreateObjectType(state, renameObject, typeName);
524
+ objectType.external = true;
525
+ for (const field of objectType.fields.values()) {
526
+ field.external = true;
527
+ }
528
+ },
529
+ setInterface(typeName, interfaceName) {
530
+ getOrCreateObjectType(state, renameObject, typeName).interfaces.add(interfaceName);
531
+ getOrCreateInterfaceType(state, interfaceName).implementedBy.add(typeName);
532
+ },
533
+ setKey(typeName, fields, fieldsUsedInKey, resolvable) {
534
+ const objectType = getOrCreateObjectType(state, renameObject, typeName);
535
+ objectType.keys.push({ fields, resolvable });
536
+ for (const field of fieldsUsedInKey) {
537
+ objectType.fieldsUsedAsKeys.add(field);
538
+ }
539
+ },
540
+ setInaccessible(typeName) {
541
+ const objectType = getOrCreateObjectType(state, renameObject, typeName);
542
+ objectType.inaccessible = true;
543
+ },
544
+ setShareable(typeName) {
545
+ getOrCreateObjectType(state, renameObject, typeName).shareable = true;
546
+ },
547
+ setTag(typeName, tag) {
548
+ getOrCreateObjectType(state, renameObject, typeName).tags.add(tag);
549
+ },
550
+ setDirective(typeName, directive) {
551
+ getOrCreateObjectType(state, renameObject, typeName).ast.directives.push(directive);
552
+ },
553
+ field: {
554
+ setType(typeName, fieldName, fieldType) {
555
+ getOrCreateObjectField(state, renameObject, typeName, fieldName).type = fieldType;
556
+ },
557
+ setDirective(typeName, fieldName, directive) {
558
+ getOrCreateObjectField(state, renameObject, typeName, fieldName).ast.directives.push(directive);
559
+ },
560
+ setDescription(typeName, fieldName, description) {
561
+ getOrCreateObjectField(state, renameObject, typeName, fieldName).description = description;
562
+ },
563
+ setDeprecated(typeName, fieldName, reason) {
564
+ getOrCreateObjectField(state, renameObject, typeName, fieldName).deprecated = {
565
+ reason,
566
+ deprecated: true,
567
+ };
568
+ },
569
+ setExternal(typeName, fieldName) {
570
+ getOrCreateObjectField(state, renameObject, typeName, fieldName).external = true;
571
+ },
572
+ setInaccessible(typeName, fieldName) {
573
+ getOrCreateObjectField(state, renameObject, typeName, fieldName).inaccessible = true;
574
+ },
575
+ setOverride(typeName, fieldName, override) {
576
+ getOrCreateObjectField(state, renameObject, typeName, fieldName).override = override;
577
+ },
578
+ setProvides(typeName, fieldName, provides) {
579
+ getOrCreateObjectField(state, renameObject, typeName, fieldName).provides = provides;
580
+ },
581
+ setRequires(typeName, fieldName, requires) {
582
+ getOrCreateObjectField(state, renameObject, typeName, fieldName).requires = requires;
583
+ },
584
+ markAsProvided(typeName, fieldName) {
585
+ getOrCreateObjectField(state, renameObject, typeName, fieldName).provided = true;
586
+ },
587
+ markedAsRequired(typeName, fieldName) {
588
+ getOrCreateObjectField(state, renameObject, typeName, fieldName).required = true;
589
+ },
590
+ setShareable(typeName, fieldName) {
591
+ getOrCreateObjectField(state, renameObject, typeName, fieldName).shareable = true;
592
+ },
593
+ setTag(typeName, fieldName, tag) {
594
+ getOrCreateObjectField(state, renameObject, typeName, fieldName).tags.add(tag);
595
+ },
596
+ setUsed(typeName, fieldName) {
597
+ getOrCreateObjectField(state, renameObject, typeName, fieldName).used = true;
598
+ },
599
+ arg: {
600
+ setType(typeName, fieldName, argName, argType) {
601
+ getOrCreateObjectFieldArgument(state, renameObject, typeName, fieldName, argName).type =
602
+ argType;
603
+ },
604
+ setDescription(typeName, fieldName, argName, description) {
605
+ getOrCreateObjectFieldArgument(state, renameObject, typeName, fieldName, argName).description = description;
606
+ },
607
+ setDeprecated(typeName, fieldName, argName, reason) {
608
+ getOrCreateObjectFieldArgument(state, renameObject, typeName, fieldName, argName).deprecated = {
609
+ reason,
610
+ deprecated: true,
611
+ };
612
+ },
613
+ setDirective(typeName, fieldName, argName, directive) {
614
+ getOrCreateObjectFieldArgument(state, renameObject, typeName, fieldName, argName).ast.directives.push(directive);
615
+ },
616
+ setDefaultValue(typeName, fieldName, argName, defaultValue) {
617
+ getOrCreateObjectFieldArgument(state, renameObject, typeName, fieldName, argName).defaultValue = defaultValue;
618
+ },
619
+ setInaccessible(typeName, fieldName, argName) {
620
+ getOrCreateObjectFieldArgument(state, renameObject, typeName, fieldName, argName).inaccessible = true;
621
+ },
622
+ setTag(typeName, fieldName, argName, tag) {
623
+ getOrCreateObjectFieldArgument(state, renameObject, typeName, fieldName, argName).tags.add(tag);
624
+ },
625
+ },
626
+ },
627
+ };
628
+ }
629
+ function interfaceTypeFactory(state) {
630
+ return {
631
+ setDefinition(typeName) {
632
+ getOrCreateInterfaceType(state, typeName).isDefinition = true;
633
+ },
634
+ setExtension(typeName) {
635
+ getOrCreateInterfaceType(state, typeName).extension = true;
636
+ },
637
+ setInterface(typeName, interfaceName) {
638
+ getOrCreateInterfaceType(state, typeName).interfaces.add(interfaceName);
639
+ },
640
+ setKey(typeName, fields, fieldsUsedInKey, resolvable) {
641
+ getOrCreateInterfaceType(state, typeName).keys.push({ fields, resolvable });
642
+ },
643
+ setInaccessible(typeName) {
644
+ const objectType = getOrCreateInterfaceType(state, typeName);
645
+ objectType.inaccessible = true;
646
+ },
647
+ setTag(typeName, tag) {
648
+ getOrCreateInterfaceType(state, typeName).tags.add(tag);
649
+ },
650
+ setDirective(typeName, directive) {
651
+ getOrCreateInterfaceType(state, typeName).ast.directives.push(directive);
652
+ },
653
+ setDescription(typeName, description) {
654
+ getOrCreateInterfaceType(state, typeName).description = description;
655
+ },
656
+ field: {
657
+ setType(typeName, fieldName, fieldType) {
658
+ getOrCreateInterfaceField(state, typeName, fieldName).type = fieldType;
659
+ },
660
+ setExternal(typeName, fieldName) {
661
+ getOrCreateInterfaceField(state, typeName, fieldName).external = true;
662
+ },
663
+ setInaccessible(typeName, fieldName) {
664
+ getOrCreateInterfaceField(state, typeName, fieldName).inaccessible = true;
665
+ },
666
+ setOverride(typeName, fieldName, override) {
667
+ getOrCreateInterfaceField(state, typeName, fieldName).override = override;
668
+ },
669
+ setRequires(typeName, fieldName, requires) {
670
+ getOrCreateInterfaceField(state, typeName, fieldName).requires = requires;
671
+ },
672
+ setShareable(typeName, fieldName) {
673
+ getOrCreateInterfaceField(state, typeName, fieldName).shareable = true;
674
+ },
675
+ setTag(typeName, fieldName, tag) {
676
+ getOrCreateInterfaceField(state, typeName, fieldName).tags.add(tag);
677
+ },
678
+ setUsed(typeName, fieldName) {
679
+ getOrCreateInterfaceField(state, typeName, fieldName).used = true;
680
+ },
681
+ setDirective(typeName, fieldName, directive) {
682
+ getOrCreateInterfaceField(state, typeName, fieldName).ast.directives.push(directive);
683
+ },
684
+ setDescription(typeName, fieldName, description) {
685
+ getOrCreateInterfaceField(state, typeName, fieldName).description = description;
686
+ },
687
+ setDeprecated(typeName, fieldName, reason) {
688
+ getOrCreateInterfaceField(state, typeName, fieldName).deprecated = {
689
+ reason,
690
+ deprecated: true,
691
+ };
692
+ },
693
+ arg: {
694
+ setType(typeName, fieldName, argName, argType) {
695
+ getOrCreateInterfaceFieldArgument(state, typeName, fieldName, argName).type = argType;
696
+ },
697
+ setDefaultValue(typeName, fieldName, argName, defaultValue) {
698
+ getOrCreateInterfaceFieldArgument(state, typeName, fieldName, argName).defaultValue =
699
+ defaultValue;
700
+ },
701
+ setDeprecated(typeName, fieldName, argName, reason) {
702
+ getOrCreateInterfaceFieldArgument(state, typeName, fieldName, argName).deprecated = {
703
+ reason,
704
+ deprecated: true,
705
+ };
706
+ },
707
+ setDescription(typeName, fieldName, argName, description) {
708
+ getOrCreateInterfaceFieldArgument(state, typeName, fieldName, argName).description =
709
+ description;
710
+ },
711
+ setTag(typeName, fieldName, argName, tag) {
712
+ getOrCreateInterfaceFieldArgument(state, typeName, fieldName, argName).tags.add(tag);
713
+ },
714
+ setInaccessible(typeName, fieldName, argName) {
715
+ getOrCreateInterfaceFieldArgument(state, typeName, fieldName, argName).inaccessible =
716
+ true;
717
+ },
718
+ setDirective(typeName, fieldName, argName, directive) {
719
+ getOrCreateInterfaceFieldArgument(state, typeName, fieldName, argName).ast.directives.push(directive);
720
+ },
721
+ },
722
+ },
723
+ };
724
+ }
725
+ function inputObjectTypeFactory(state) {
726
+ return {
727
+ setDefinition(typeName) {
728
+ getOrCreateInputObjectType(state, typeName).isDefinition = true;
729
+ },
730
+ setExtension(typeName) {
731
+ getOrCreateInputObjectType(state, typeName).extension = true;
732
+ },
733
+ setDescription(typeName, description) {
734
+ getOrCreateInputObjectType(state, typeName).description = description;
735
+ },
736
+ setInaccessible(typeName) {
737
+ const objectType = getOrCreateInputObjectType(state, typeName);
738
+ objectType.inaccessible = true;
739
+ for (const field of objectType.fields.values()) {
740
+ field.inaccessible = true;
741
+ }
742
+ },
743
+ setTag(typeName, tag) {
744
+ getOrCreateInputObjectType(state, typeName).tags.add(tag);
745
+ },
746
+ field: {
747
+ setType(typeName, fieldName, fieldType) {
748
+ getOrCreateInputObjectField(state, typeName, fieldName).type = fieldType;
749
+ },
750
+ setDescription(typeName, fieldName, description) {
751
+ getOrCreateInputObjectField(state, typeName, fieldName).description = description;
752
+ },
753
+ setDeprecated(typeName, fieldName, reason) {
754
+ getOrCreateInputObjectField(state, typeName, fieldName).deprecated = {
755
+ reason,
756
+ deprecated: true,
757
+ };
758
+ },
759
+ setDefaultValue(typeName, fieldName, defaultValue) {
760
+ getOrCreateInputObjectField(state, typeName, fieldName).defaultValue = defaultValue;
761
+ },
762
+ setInaccessible(typeName, fieldName) {
763
+ getOrCreateInputObjectField(state, typeName, fieldName).inaccessible = true;
764
+ },
765
+ setTag(typeName, fieldName, tag) {
766
+ getOrCreateInputObjectField(state, typeName, fieldName).tags.add(tag);
767
+ },
768
+ },
769
+ };
770
+ }
771
+ function unionTypeFactory(state) {
772
+ return {
773
+ setDefinition(typeName) {
774
+ getOrCreateUnionType(state, typeName).isDefinition = true;
775
+ },
776
+ setInaccessible(typeName) {
777
+ getOrCreateUnionType(state, typeName).inaccessible = true;
778
+ },
779
+ setTag(typeName, tag) {
780
+ getOrCreateUnionType(state, typeName).tags.add(tag);
781
+ },
782
+ setDescription(typeName, description) {
783
+ getOrCreateUnionType(state, typeName).description = description;
784
+ },
785
+ setMember(typeName, member) {
786
+ getOrCreateUnionType(state, typeName).members.add(member);
787
+ },
788
+ };
789
+ }
790
+ function enumTypeFactory(state) {
791
+ return {
792
+ setDefinition(typeName) {
793
+ getOrCreateEnumType(state, typeName).isDefinition = true;
794
+ },
795
+ setInaccessible(typeName) {
796
+ getOrCreateEnumType(state, typeName).inaccessible = true;
797
+ },
798
+ setDescription(typeName, description) {
799
+ getOrCreateEnumType(state, typeName).description = description;
800
+ },
801
+ setTag(typeName, tag) {
802
+ getOrCreateEnumType(state, typeName).tags.add(tag);
803
+ },
804
+ setReferencedByInputType(typeName, schemaCoordinate) {
805
+ getOrCreateEnumType(state, typeName).referencedByInputType = true;
806
+ getOrCreateEnumType(state, typeName).inputTypeReferences.add(schemaCoordinate);
807
+ },
808
+ setReferencedByOutputType(typeName, schemaCoordinate) {
809
+ getOrCreateEnumType(state, typeName).referencedByOutputType = true;
810
+ getOrCreateEnumType(state, typeName).outputTypeReferences.add(schemaCoordinate);
811
+ },
812
+ value: {
813
+ setValue(typeName, valueName) {
814
+ getOrCreateEnumValue(state, typeName, valueName);
815
+ },
816
+ setDescription(typeName, valueName, description) {
817
+ getOrCreateEnumValue(state, typeName, valueName).description = description;
818
+ },
819
+ setInaccessible(typeName, valueName) {
820
+ getOrCreateEnumValue(state, typeName, valueName).inaccessible = true;
821
+ },
822
+ setTag(typeName, valueName, tag) {
823
+ getOrCreateEnumValue(state, typeName, valueName).tags.add(tag);
824
+ },
825
+ setDeprecated(typeName, valueName, reason) {
826
+ getOrCreateEnumValue(state, typeName, valueName).deprecated = {
827
+ reason,
828
+ deprecated: true,
829
+ };
830
+ },
831
+ },
832
+ };
833
+ }
834
+ function getOrCreateDirective(state, directiveName) {
835
+ const existing = state.types.get(directiveName);
836
+ if (existing) {
837
+ if (existing.kind !== TypeKind.DIRECTIVE) {
838
+ throw new Error(`Expected ${directiveName} to be a directive`);
839
+ }
840
+ return existing;
841
+ }
842
+ const directive = {
843
+ kind: TypeKind.DIRECTIVE,
844
+ name: directiveName,
845
+ locations: new Set(),
846
+ repeatable: false,
847
+ composed: false,
848
+ args: new Map(),
849
+ };
850
+ state.types.set(directiveName, directive);
851
+ return directive;
852
+ }
853
+ function getOrCreateDirectiveArg(state, directiveName, argName) {
854
+ const directive = getOrCreateDirective(state, directiveName);
855
+ const existing = directive.args.get(argName);
856
+ if (existing) {
857
+ return existing;
858
+ }
859
+ const arg = {
860
+ name: argName,
861
+ type: MISSING,
862
+ inaccessible: false,
863
+ tags: new Set(),
864
+ ast: {
865
+ directives: [],
866
+ },
867
+ };
868
+ directive.args.set(argName, arg);
869
+ return arg;
870
+ }
871
+ function getOrCreateScalarType(state, typeName) {
872
+ const existing = state.types.get(typeName);
873
+ if (existing) {
874
+ if (existing.kind !== TypeKind.SCALAR) {
875
+ throw new Error(`Expected ${typeName} to be a scalar type`);
876
+ }
877
+ return existing;
878
+ }
879
+ const scalarType = {
880
+ kind: TypeKind.SCALAR,
881
+ name: typeName,
882
+ tags: new Set(),
883
+ inaccessible: false,
884
+ ast: {
885
+ directives: [],
886
+ },
887
+ };
888
+ state.types.set(typeName, scalarType);
889
+ return scalarType;
890
+ }
891
+ function getOrCreateObjectType(state, renameObject, typeName) {
892
+ typeName = renameObject(typeName);
893
+ const existing = state.types.get(typeName);
894
+ if (existing) {
895
+ if (existing.kind !== TypeKind.OBJECT) {
896
+ throw new Error(`Expected ${typeName} to be an object type`);
897
+ }
898
+ return existing;
899
+ }
900
+ const objectType = {
901
+ kind: TypeKind.OBJECT,
902
+ name: typeName,
903
+ fields: new Map(),
904
+ fieldsUsedAsKeys: new Set(),
905
+ extension: false,
906
+ external: false,
907
+ keys: [],
908
+ inaccessible: false,
909
+ shareable: false,
910
+ tags: new Set(),
911
+ interfaces: new Set(),
912
+ isDefinition: false,
913
+ ast: {
914
+ directives: [],
915
+ },
916
+ };
917
+ state.types.set(typeName, objectType);
918
+ return objectType;
919
+ }
920
+ function getOrCreateInterfaceType(state, typeName) {
921
+ const existing = state.types.get(typeName);
922
+ if (existing) {
923
+ if (existing.kind !== TypeKind.INTERFACE) {
924
+ throw new Error(`Expected ${typeName} to be an interface type`);
925
+ }
926
+ return existing;
927
+ }
928
+ const interfaceType = {
929
+ kind: TypeKind.INTERFACE,
930
+ name: typeName,
931
+ fields: new Map(),
932
+ extension: false,
933
+ keys: [],
934
+ inaccessible: false,
935
+ tags: new Set(),
936
+ interfaces: new Set(),
937
+ implementedBy: new Set(),
938
+ isDefinition: false,
939
+ ast: {
940
+ directives: [],
941
+ },
942
+ };
943
+ state.types.set(typeName, interfaceType);
944
+ return interfaceType;
945
+ }
946
+ function getOrCreateInputObjectType(state, typeName) {
947
+ const existing = state.types.get(typeName);
948
+ if (existing) {
949
+ if (existing.kind !== TypeKind.INPUT_OBJECT) {
950
+ throw new Error(`Expected ${typeName} to be an input object type`);
951
+ }
952
+ return existing;
953
+ }
954
+ const inputObjectType = {
955
+ kind: TypeKind.INPUT_OBJECT,
956
+ name: typeName,
957
+ fields: new Map(),
958
+ extension: false,
959
+ inaccessible: false,
960
+ tags: new Set(),
961
+ isDefinition: false,
962
+ };
963
+ state.types.set(typeName, inputObjectType);
964
+ return inputObjectType;
965
+ }
966
+ function getOrCreateEnumType(state, typeName) {
967
+ const existing = state.types.get(typeName);
968
+ if (existing) {
969
+ if (existing.kind !== TypeKind.ENUM) {
970
+ throw new Error(`Expected ${typeName} to be an enum type`);
971
+ }
972
+ return existing;
973
+ }
974
+ const enumType = {
975
+ kind: TypeKind.ENUM,
976
+ name: typeName,
977
+ values: new Map(),
978
+ inaccessible: false,
979
+ tags: new Set(),
980
+ isDefinition: false,
981
+ referencedByInputType: false,
982
+ referencedByOutputType: false,
983
+ inputTypeReferences: new Set(),
984
+ outputTypeReferences: new Set(),
985
+ };
986
+ state.types.set(typeName, enumType);
987
+ return enumType;
988
+ }
989
+ function getOrCreateUnionType(state, typeName) {
990
+ const existing = state.types.get(typeName);
991
+ if (existing) {
992
+ if (existing.kind !== TypeKind.UNION) {
993
+ throw new Error(`Expected ${typeName} to be a union type`);
994
+ }
995
+ return existing;
996
+ }
997
+ const unionType = {
998
+ kind: TypeKind.UNION,
999
+ name: typeName,
1000
+ members: new Set(),
1001
+ inaccessible: false,
1002
+ tags: new Set(),
1003
+ isDefinition: false,
1004
+ };
1005
+ state.types.set(typeName, unionType);
1006
+ return unionType;
1007
+ }
1008
+ function getOrCreateObjectField(state, renameObject, typeName, fieldName) {
1009
+ const objectType = getOrCreateObjectType(state, renameObject, typeName);
1010
+ const existing = objectType.fields.get(fieldName);
1011
+ if (existing) {
1012
+ return existing;
1013
+ }
1014
+ const field = {
1015
+ name: fieldName,
1016
+ type: MISSING,
1017
+ external: false,
1018
+ inaccessible: false,
1019
+ used: false,
1020
+ required: false,
1021
+ provided: false,
1022
+ override: null,
1023
+ provides: null,
1024
+ requires: null,
1025
+ shareable: state.version === 'v1.0' ? true : false,
1026
+ tags: new Set(),
1027
+ args: new Map(),
1028
+ ast: {
1029
+ directives: [],
1030
+ },
1031
+ };
1032
+ objectType.fields.set(fieldName, field);
1033
+ return field;
1034
+ }
1035
+ function getOrCreateInterfaceField(state, typeName, fieldName) {
1036
+ const interfaceType = getOrCreateInterfaceType(state, typeName);
1037
+ const existing = interfaceType.fields.get(fieldName);
1038
+ if (existing) {
1039
+ return existing;
1040
+ }
1041
+ const field = {
1042
+ name: fieldName,
1043
+ type: MISSING,
1044
+ external: false,
1045
+ inaccessible: false,
1046
+ used: false,
1047
+ override: null,
1048
+ provides: null,
1049
+ requires: null,
1050
+ required: false,
1051
+ provided: false,
1052
+ shareable: false,
1053
+ tags: new Set(),
1054
+ args: new Map(),
1055
+ ast: {
1056
+ directives: [],
1057
+ },
1058
+ };
1059
+ interfaceType.fields.set(fieldName, field);
1060
+ return field;
1061
+ }
1062
+ function getOrCreateInputObjectField(state, typeName, fieldName) {
1063
+ const inputObjectType = getOrCreateInputObjectType(state, typeName);
1064
+ const existing = inputObjectType.fields.get(fieldName);
1065
+ if (existing) {
1066
+ return existing;
1067
+ }
1068
+ const field = {
1069
+ name: fieldName,
1070
+ type: MISSING,
1071
+ inaccessible: false,
1072
+ tags: new Set(),
1073
+ };
1074
+ inputObjectType.fields.set(fieldName, field);
1075
+ return field;
1076
+ }
1077
+ function getOrCreateEnumValue(state, typeName, enumValueName) {
1078
+ const enumType = getOrCreateEnumType(state, typeName);
1079
+ const existing = enumType.values.get(enumValueName);
1080
+ if (existing) {
1081
+ return existing;
1082
+ }
1083
+ const enumValue = {
1084
+ name: enumValueName,
1085
+ inaccessible: false,
1086
+ tags: new Set(),
1087
+ };
1088
+ enumType.values.set(enumValueName, enumValue);
1089
+ return enumValue;
1090
+ }
1091
+ function getOrCreateObjectFieldArgument(state, renameObject, typeName, fieldName, argName) {
1092
+ const fieldState = getOrCreateObjectField(state, renameObject, typeName, fieldName);
1093
+ const existing = fieldState.args.get(argName);
1094
+ if (existing) {
1095
+ return existing;
1096
+ }
1097
+ const arg = {
1098
+ name: argName,
1099
+ type: MISSING,
1100
+ inaccessible: false,
1101
+ tags: new Set(),
1102
+ ast: {
1103
+ directives: [],
1104
+ },
1105
+ };
1106
+ fieldState.args.set(argName, arg);
1107
+ return arg;
1108
+ }
1109
+ function getOrCreateInterfaceFieldArgument(state, typeName, fieldName, argName) {
1110
+ const fieldState = getOrCreateInterfaceField(state, typeName, fieldName);
1111
+ const existing = fieldState.args.get(argName);
1112
+ if (existing) {
1113
+ return existing;
1114
+ }
1115
+ const arg = {
1116
+ name: argName,
1117
+ type: MISSING,
1118
+ inaccessible: false,
1119
+ tags: new Set(),
1120
+ ast: {
1121
+ directives: [],
1122
+ },
1123
+ };
1124
+ fieldState.args.set(argName, arg);
1125
+ return arg;
1126
+ }
1127
+ function isSchemaDefinition(node) {
1128
+ return node.kind === Kind.SCHEMA_DEFINITION;
1129
+ }
1130
+ function resolveTypeName(node) {
1131
+ switch (node.kind) {
1132
+ case Kind.NAMED_TYPE:
1133
+ return node.name.value;
1134
+ case Kind.LIST_TYPE:
1135
+ return resolveTypeName(node.type);
1136
+ case Kind.NON_NULL_TYPE:
1137
+ return resolveTypeName(node.type);
1138
+ default:
1139
+ throw new Error(`Unexpected type node: ${node}`);
1140
+ }
1141
+ }
1142
+ function isEnumType(node) {
1143
+ return node.kind === Kind.ENUM_TYPE_DEFINITION || node.kind === Kind.ENUM_TYPE_EXTENSION;
1144
+ }
1145
+ function decideOnRootTypeName(schemaDef, kind, defaultName) {
1146
+ return (schemaDef?.operationTypes?.find(operationType => operationType.operation === kind)?.type.name
1147
+ .value ?? defaultName);
1148
+ }