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