@graphql-hive/federation-gateway-audit 0.0.0 → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (395) hide show
  1. package/.github/workflows/ci.yaml +4 -4
  2. package/.github/workflows/release.yml +3 -3
  3. package/CHANGELOG.md +10 -0
  4. package/dist/index.d.cts.map +1 -1
  5. package/dist/index.d.ts.map +1 -1
  6. package/package.json +8 -4
  7. package/src/cli.ts +700 -0
  8. package/src/env.ts +13 -0
  9. package/src/index.ts +262 -0
  10. package/src/subgraph.ts +113 -0
  11. package/src/summary.ts +237 -0
  12. package/src/supergraph.ts +195 -0
  13. package/src/test-suites/abstract-types/agency.subgraph.ts +43 -0
  14. package/src/test-suites/abstract-types/books.subgraph.ts +47 -0
  15. package/src/test-suites/abstract-types/data.ts +120 -0
  16. package/src/test-suites/abstract-types/index.ts +23 -0
  17. package/src/test-suites/abstract-types/inventory.subgraph.ts +142 -0
  18. package/src/test-suites/abstract-types/magazines.subgraph.ts +47 -0
  19. package/src/test-suites/abstract-types/products.subgraph.ts +204 -0
  20. package/src/test-suites/abstract-types/reviews.subgraph.ts +159 -0
  21. package/src/test-suites/abstract-types/test.ts +1084 -0
  22. package/src/test-suites/abstract-types/users.subgraph.ts +31 -0
  23. package/src/test-suites/child-type-mismatch/a.subgraph.ts +27 -0
  24. package/src/test-suites/child-type-mismatch/b.subgraph.ts +51 -0
  25. package/src/test-suites/child-type-mismatch/data.ts +6 -0
  26. package/src/test-suites/child-type-mismatch/index.ts +6 -0
  27. package/{dist/index-Ca0FeU7u.js → src/test-suites/child-type-mismatch/test.ts} +79 -178
  28. package/src/test-suites/circular-reference-interface/a.subgraph.ts +55 -0
  29. package/src/test-suites/circular-reference-interface/b.subgraph.ts +35 -0
  30. package/src/test-suites/circular-reference-interface/data.ts +17 -0
  31. package/src/test-suites/circular-reference-interface/index.ts +6 -0
  32. package/src/test-suites/circular-reference-interface/test.ts +78 -0
  33. package/src/test-suites/complex-entity-call/data.ts +27 -0
  34. package/src/test-suites/complex-entity-call/index.ts +12 -0
  35. package/src/test-suites/complex-entity-call/link.subgraph.ts +36 -0
  36. package/src/test-suites/complex-entity-call/list.subgraph.ts +44 -0
  37. package/src/test-suites/complex-entity-call/price.subgraph.ts +107 -0
  38. package/src/test-suites/complex-entity-call/products.subgraph.ts +65 -0
  39. package/src/test-suites/complex-entity-call/test.ts +74 -0
  40. package/src/test-suites/corrupted-supergraph-node-id/a.subgraph.ts +112 -0
  41. package/src/test-suites/corrupted-supergraph-node-id/b.subgraph.ts +113 -0
  42. package/src/test-suites/corrupted-supergraph-node-id/data.ts +16 -0
  43. package/src/test-suites/corrupted-supergraph-node-id/index.ts +6 -0
  44. package/src/test-suites/corrupted-supergraph-node-id/test.ts +223 -0
  45. package/src/test-suites/enum-intersection/a.subgraph.ts +46 -0
  46. package/src/test-suites/enum-intersection/b.subgraph.ts +51 -0
  47. package/src/test-suites/enum-intersection/data.ts +10 -0
  48. package/src/test-suites/enum-intersection/index.ts +6 -0
  49. package/src/test-suites/enum-intersection/test.ts +108 -0
  50. package/src/test-suites/fed1-external-extends/a.subgraph.ts +51 -0
  51. package/src/test-suites/fed1-external-extends/b.subgraph.ts +48 -0
  52. package/src/test-suites/fed1-external-extends/data.ts +14 -0
  53. package/src/test-suites/fed1-external-extends/index.ts +6 -0
  54. package/src/test-suites/fed1-external-extends/test.ts +90 -0
  55. package/src/test-suites/fed1-external-extends-resolvable/a.subgraph.ts +40 -0
  56. package/src/test-suites/fed1-external-extends-resolvable/b.subgraph.ts +52 -0
  57. package/src/test-suites/fed1-external-extends-resolvable/data.ts +9 -0
  58. package/src/test-suites/fed1-external-extends-resolvable/index.ts +6 -0
  59. package/src/test-suites/fed1-external-extends-resolvable/test.ts +28 -0
  60. package/src/test-suites/fed1-external-extension/a.subgraph.ts +51 -0
  61. package/src/test-suites/fed1-external-extension/b.subgraph.ts +48 -0
  62. package/src/test-suites/fed1-external-extension/data.ts +14 -0
  63. package/src/test-suites/fed1-external-extension/index.ts +6 -0
  64. package/src/test-suites/fed1-external-extension/test.ts +90 -0
  65. package/src/test-suites/fed2-external-extends/a.subgraph.ts +57 -0
  66. package/src/test-suites/fed2-external-extends/b.subgraph.ts +54 -0
  67. package/src/test-suites/fed2-external-extends/data.ts +14 -0
  68. package/src/test-suites/fed2-external-extends/index.ts +6 -0
  69. package/src/test-suites/fed2-external-extends/test.ts +90 -0
  70. package/src/test-suites/fed2-external-extension/a.subgraph.ts +57 -0
  71. package/src/test-suites/fed2-external-extension/b.subgraph.ts +54 -0
  72. package/src/test-suites/fed2-external-extension/data.ts +14 -0
  73. package/src/test-suites/fed2-external-extension/index.ts +6 -0
  74. package/src/test-suites/fed2-external-extension/test.ts +90 -0
  75. package/src/test-suites/include-skip/a.subgraph.ts +42 -0
  76. package/src/test-suites/include-skip/b.subgraph.ts +47 -0
  77. package/src/test-suites/include-skip/c.subgraph.ts +65 -0
  78. package/src/test-suites/include-skip/data.ts +6 -0
  79. package/src/test-suites/include-skip/index.ts +7 -0
  80. package/src/test-suites/include-skip/test.ts +74 -0
  81. package/src/test-suites/input-object-intersection/a.subgraph.ts +47 -0
  82. package/src/test-suites/input-object-intersection/b.subgraph.ts +51 -0
  83. package/src/test-suites/input-object-intersection/data.ts +10 -0
  84. package/src/test-suites/input-object-intersection/index.ts +6 -0
  85. package/src/test-suites/input-object-intersection/test.ts +49 -0
  86. package/src/test-suites/interface-object-indirect-extension/author.subgraph.ts +39 -0
  87. package/src/test-suites/interface-object-indirect-extension/index.ts +11 -0
  88. package/src/test-suites/interface-object-indirect-extension/media.subgraph.ts +63 -0
  89. package/src/test-suites/interface-object-indirect-extension/playlist.subgraph.ts +48 -0
  90. package/src/test-suites/interface-object-indirect-extension/test.ts +57 -0
  91. package/src/test-suites/interface-object-with-requires/a.subgraph.ts +68 -0
  92. package/src/test-suites/interface-object-with-requires/b.subgraph.ts +61 -0
  93. package/src/test-suites/interface-object-with-requires/data.ts +14 -0
  94. package/src/test-suites/interface-object-with-requires/index.ts +6 -0
  95. package/src/test-suites/interface-object-with-requires/test.ts +206 -0
  96. package/src/test-suites/keys-mashup/a.subgraph.ts +46 -0
  97. package/src/test-suites/keys-mashup/b.subgraph.ts +118 -0
  98. package/src/test-suites/keys-mashup/data.ts +43 -0
  99. package/src/test-suites/keys-mashup/index.ts +6 -0
  100. package/src/test-suites/keys-mashup/test.ts +32 -0
  101. package/src/test-suites/mutations/a.subgraph.ts +136 -0
  102. package/src/test-suites/mutations/b.subgraph.ts +107 -0
  103. package/src/test-suites/mutations/c.subgraph.ts +26 -0
  104. package/src/test-suites/mutations/data.ts +91 -0
  105. package/src/test-suites/mutations/index.ts +7 -0
  106. package/src/test-suites/mutations/test.ts +94 -0
  107. package/src/test-suites/mysterious-external/data.ts +12 -0
  108. package/src/test-suites/mysterious-external/index.ts +6 -0
  109. package/src/test-suites/mysterious-external/price.subgraph.ts +55 -0
  110. package/src/test-suites/mysterious-external/product.subgraph.ts +45 -0
  111. package/src/test-suites/mysterious-external/test.ts +51 -0
  112. package/src/test-suites/nested-provides/all-products.subgraph.ts +37 -0
  113. package/src/test-suites/nested-provides/category.subgraph.ts +104 -0
  114. package/src/test-suites/nested-provides/data.ts +28 -0
  115. package/src/test-suites/nested-provides/index.ts +11 -0
  116. package/src/test-suites/nested-provides/subcategories.subgraph.ts +89 -0
  117. package/src/test-suites/nested-provides/test.ts +122 -0
  118. package/src/test-suites/node/data.ts +23 -0
  119. package/src/test-suites/node/index.ts +7 -0
  120. package/src/test-suites/node/node-two.ts +49 -0
  121. package/src/test-suites/node/node.subgraph.ts +68 -0
  122. package/src/test-suites/node/test.ts +28 -0
  123. package/src/test-suites/node/types.subgraph.ts +58 -0
  124. package/src/test-suites/non-resolvable-interface-object/a.subgraph.ts +40 -0
  125. package/src/test-suites/non-resolvable-interface-object/b.subgraph.ts +55 -0
  126. package/src/test-suites/non-resolvable-interface-object/data.ts +7 -0
  127. package/src/test-suites/non-resolvable-interface-object/index.ts +6 -0
  128. package/src/test-suites/non-resolvable-interface-object/test.ts +113 -0
  129. package/src/test-suites/null-keys/a.subgraph.ts +40 -0
  130. package/src/test-suites/null-keys/b.subgraph.ts +42 -0
  131. package/src/test-suites/null-keys/c.subgraph.ts +48 -0
  132. package/src/test-suites/null-keys/data.ts +32 -0
  133. package/src/test-suites/null-keys/index.ts +7 -0
  134. package/src/test-suites/null-keys/test.ts +46 -0
  135. package/src/test-suites/override-type-interface/a.subgraph.ts +47 -0
  136. package/src/test-suites/override-type-interface/b.subgraph.ts +73 -0
  137. package/src/test-suites/override-type-interface/data.ts +27 -0
  138. package/src/test-suites/override-type-interface/index.ts +6 -0
  139. package/src/test-suites/override-type-interface/test.ts +94 -0
  140. package/src/test-suites/override-with-requires/a.subgraph.ts +55 -0
  141. package/src/test-suites/override-with-requires/b.subgraph.ts +42 -0
  142. package/src/test-suites/override-with-requires/c.subgraph.ts +55 -0
  143. package/src/test-suites/override-with-requires/data.ts +14 -0
  144. package/src/test-suites/override-with-requires/index.ts +7 -0
  145. package/src/test-suites/override-with-requires/test.ts +98 -0
  146. package/src/test-suites/parent-entity-call/a.subgraph.ts +90 -0
  147. package/src/test-suites/parent-entity-call/b.subgraph.ts +68 -0
  148. package/src/test-suites/parent-entity-call/c.subgraph.ts +56 -0
  149. package/src/test-suites/parent-entity-call/data.ts +34 -0
  150. package/src/test-suites/parent-entity-call/index.ts +7 -0
  151. package/src/test-suites/parent-entity-call/test.ts +52 -0
  152. package/src/test-suites/parent-entity-call-complex/a.subgraph.ts +29 -0
  153. package/src/test-suites/parent-entity-call-complex/b.subgraph.ts +32 -0
  154. package/src/test-suites/parent-entity-call-complex/c.subgraph.ts +22 -0
  155. package/src/test-suites/parent-entity-call-complex/d.subgraph.ts +35 -0
  156. package/src/test-suites/parent-entity-call-complex/index.ts +8 -0
  157. package/src/test-suites/parent-entity-call-complex/test.ts +32 -0
  158. package/src/test-suites/provides-on-interface/a.subgraph.ts +95 -0
  159. package/src/test-suites/provides-on-interface/b.subgraph.ts +65 -0
  160. package/src/test-suites/provides-on-interface/c.subgraph.ts +119 -0
  161. package/src/test-suites/provides-on-interface/data.ts +24 -0
  162. package/src/test-suites/provides-on-interface/index.ts +7 -0
  163. package/src/test-suites/provides-on-interface/test.ts +68 -0
  164. package/src/test-suites/provides-on-union/a.subgraph.ts +41 -0
  165. package/src/test-suites/provides-on-union/b.subgraph.ts +47 -0
  166. package/src/test-suites/provides-on-union/c.subgraph.ts +59 -0
  167. package/src/test-suites/provides-on-union/data.ts +12 -0
  168. package/src/test-suites/provides-on-union/index.ts +7 -0
  169. package/src/test-suites/provides-on-union/test.ts +62 -0
  170. package/src/test-suites/requires-circular/a.subgraph.ts +72 -0
  171. package/src/test-suites/requires-circular/b.subgraph.ts +46 -0
  172. package/src/test-suites/requires-circular/data.ts +25 -0
  173. package/src/test-suites/requires-circular/index.ts +6 -0
  174. package/src/test-suites/requires-circular/test.ts +46 -0
  175. package/src/test-suites/requires-interface/a.subgraph.ts +92 -0
  176. package/src/test-suites/requires-interface/b.subgraph.ts +82 -0
  177. package/src/test-suites/requires-interface/data.ts +27 -0
  178. package/src/test-suites/requires-interface/index.ts +6 -0
  179. package/src/test-suites/requires-interface/test.ts +96 -0
  180. package/src/test-suites/requires-requires/a.subgraph.ts +33 -0
  181. package/src/test-suites/requires-requires/b.subgraph.ts +42 -0
  182. package/src/test-suites/requires-requires/c.subgraph.ts +65 -0
  183. package/src/test-suites/requires-requires/d.subgraph.ts +71 -0
  184. package/src/test-suites/requires-requires/data.ts +7 -0
  185. package/src/test-suites/requires-requires/index.ts +8 -0
  186. package/src/test-suites/requires-requires/test.ts +88 -0
  187. package/src/test-suites/requires-with-argument/a.subgraph.ts +68 -0
  188. package/src/test-suites/requires-with-argument/b.subgraph.ts +55 -0
  189. package/src/test-suites/requires-with-argument/c.subgraph.ts +71 -0
  190. package/src/test-suites/requires-with-argument/d.subgraph.ts +97 -0
  191. package/src/test-suites/requires-with-argument/data.ts +81 -0
  192. package/src/test-suites/requires-with-argument/index.ts +8 -0
  193. package/src/test-suites/requires-with-argument/test.ts +192 -0
  194. package/src/test-suites/requires-with-argument-conflict/a.subgraph.ts +79 -0
  195. package/src/test-suites/requires-with-argument-conflict/b.subgraph.ts +60 -0
  196. package/src/test-suites/requires-with-argument-conflict/data.ts +20 -0
  197. package/src/test-suites/requires-with-argument-conflict/index.ts +6 -0
  198. package/src/test-suites/requires-with-argument-conflict/test.ts +37 -0
  199. package/src/test-suites/requires-with-fragments/a.subgraph.ts +81 -0
  200. package/src/test-suites/requires-with-fragments/b.subgraph.ts +151 -0
  201. package/src/test-suites/requires-with-fragments/data.ts +30 -0
  202. package/src/test-suites/requires-with-fragments/index.ts +6 -0
  203. package/src/test-suites/requires-with-fragments/test.ts +138 -0
  204. package/src/test-suites/shared-root/category.subgraph.ts +45 -0
  205. package/src/test-suites/shared-root/data.ts +22 -0
  206. package/src/test-suites/shared-root/index.ts +7 -0
  207. package/src/test-suites/shared-root/name.subgraph.ts +46 -0
  208. package/src/test-suites/shared-root/price.subgraph.ts +46 -0
  209. package/src/test-suites/shared-root/test.ts +94 -0
  210. package/src/test-suites/simple-entity-call/data.ts +12 -0
  211. package/src/test-suites/simple-entity-call/email.subgraph.ts +42 -0
  212. package/src/test-suites/simple-entity-call/index.ts +6 -0
  213. package/src/test-suites/simple-entity-call/nickname.subgraph.ts +32 -0
  214. package/src/test-suites/simple-entity-call/test.ts +23 -0
  215. package/src/test-suites/simple-inaccessible/age.subgraph.ts +45 -0
  216. package/src/test-suites/simple-inaccessible/data.ts +12 -0
  217. package/src/test-suites/simple-inaccessible/friends.subgraph.ts +68 -0
  218. package/src/test-suites/simple-inaccessible/index.ts +6 -0
  219. package/src/test-suites/simple-inaccessible/test.ts +124 -0
  220. package/src/test-suites/simple-interface-object/a.subgraph.ts +163 -0
  221. package/src/test-suites/simple-interface-object/b.subgraph.ts +89 -0
  222. package/src/test-suites/simple-interface-object/c.subgraph.ts +48 -0
  223. package/src/test-suites/simple-interface-object/data.ts +38 -0
  224. package/src/test-suites/simple-interface-object/index.ts +7 -0
  225. package/src/test-suites/simple-interface-object/test.ts +367 -0
  226. package/src/test-suites/simple-override/a.subgraph.ts +49 -0
  227. package/src/test-suites/simple-override/b.subgraph.ts +46 -0
  228. package/src/test-suites/simple-override/data.ts +10 -0
  229. package/src/test-suites/simple-override/index.ts +6 -0
  230. package/src/test-suites/simple-override/test.ts +51 -0
  231. package/src/test-suites/simple-requires-provides/accounts.subgraph.ts +48 -0
  232. package/src/test-suites/simple-requires-provides/data.ts +44 -0
  233. package/src/test-suites/simple-requires-provides/index.ts +12 -0
  234. package/src/test-suites/simple-requires-provides/inventory.subgraph.ts +59 -0
  235. package/src/test-suites/simple-requires-provides/products.subgraph.ts +48 -0
  236. package/src/test-suites/simple-requires-provides/reviews.subgraph.ts +106 -0
  237. package/src/test-suites/simple-requires-provides/test.ts +372 -0
  238. package/src/test-suites/typename/a.subgraph.ts +76 -0
  239. package/src/test-suites/typename/b.subgraph.ts +50 -0
  240. package/src/test-suites/typename/data.ts +14 -0
  241. package/src/test-suites/typename/index.ts +6 -0
  242. package/src/test-suites/typename/test.ts +132 -0
  243. package/src/test-suites/unavailable-override/a.subgraph.ts +46 -0
  244. package/src/test-suites/unavailable-override/b.subgraph.ts +46 -0
  245. package/src/test-suites/unavailable-override/data.ts +10 -0
  246. package/src/test-suites/unavailable-override/index.ts +6 -0
  247. package/src/test-suites/unavailable-override/test.ts +51 -0
  248. package/src/test-suites/union-interface-distributed/a.subgraph.ts +126 -0
  249. package/src/test-suites/union-interface-distributed/b.subgraph.ts +39 -0
  250. package/src/test-suites/union-interface-distributed/data.ts +26 -0
  251. package/src/test-suites/union-interface-distributed/index.ts +6 -0
  252. package/src/test-suites/union-interface-distributed/test.ts +244 -0
  253. package/src/test-suites/union-intersection/README.md +3 -0
  254. package/src/test-suites/union-intersection/a.subgraph.ts +83 -0
  255. package/src/test-suites/union-intersection/b.subgraph.ts +79 -0
  256. package/src/test-suites/union-intersection/data.ts +7 -0
  257. package/src/test-suites/union-intersection/index.ts +6 -0
  258. package/{dist/index-Ytb942t9.js → src/test-suites/union-intersection/test.ts} +74 -260
  259. package/src/test.ts +98 -0
  260. package/src/testkit.ts +31 -0
  261. package/.changeset/@graphql-hive_federation-gateway-audit-293-dependencies.md +0 -5
  262. package/.changeset/funky-times-cry.md +0 -5
  263. package/dist/index--3rcSZqA.js +0 -227
  264. package/dist/index-0MDIXUzP.cjs +0 -589
  265. package/dist/index-2oy7cA9A.js +0 -225
  266. package/dist/index-3BM15w2Y.mjs +0 -234
  267. package/dist/index-3CyAnc7j.js +0 -234
  268. package/dist/index-4swHVe9x.cjs +0 -507
  269. package/dist/index-6qNpP2wc.mjs +0 -238
  270. package/dist/index-A2YbwKzc.mjs +0 -288
  271. package/dist/index-B0coRevy.mjs +0 -337
  272. package/dist/index-B1NAc0TI.cjs +0 -215
  273. package/dist/index-B1WvIzTg.js +0 -371
  274. package/dist/index-B55AdoQy.js +0 -273
  275. package/dist/index-B7cr8XE-.js +0 -194
  276. package/dist/index-B7zN3YzE.cjs +0 -683
  277. package/dist/index-B9T896rB.mjs +0 -163
  278. package/dist/index-BEMScD_X.cjs +0 -173
  279. package/dist/index-BGC0_vWj.cjs +0 -335
  280. package/dist/index-BGUm947D.cjs +0 -229
  281. package/dist/index-BKcwbRZx.cjs +0 -339
  282. package/dist/index-BKpVb_h9.cjs +0 -236
  283. package/dist/index-BPFol6Ww.mjs +0 -129
  284. package/dist/index-BPza8i2Q.mjs +0 -213
  285. package/dist/index-BS7JyQSU.js +0 -250
  286. package/dist/index-BSWSgZCO.cjs +0 -252
  287. package/dist/index-BSwOAvti.js +0 -288
  288. package/dist/index-BWO8QbMB.mjs +0 -587
  289. package/dist/index-B_u5Boud.js +0 -333
  290. package/dist/index-BaH3FI9i.cjs +0 -361
  291. package/dist/index-BaluTf1I.cjs +0 -707
  292. package/dist/index-BcoW0aPo.cjs +0 -165
  293. package/dist/index-BdNZKlDU.js +0 -284
  294. package/dist/index-Bf81cAA1.mjs +0 -444
  295. package/dist/index-Bg3H3fgZ.js +0 -259
  296. package/dist/index-Bgl_1Y6Q.mjs +0 -681
  297. package/dist/index-BgryMCqm.mjs +0 -213
  298. package/dist/index-BiTzMTFn.js +0 -304
  299. package/dist/index-BjbmOyBP.cjs +0 -215
  300. package/dist/index-Bm8hqSRd.cjs +0 -168
  301. package/dist/index-BmQrhPXB.cjs +0 -131
  302. package/dist/index-BndUB2KV.mjs +0 -381
  303. package/dist/index-BpJZCoVH.mjs +0 -250
  304. package/dist/index-Br-Y1qC_.cjs +0 -446
  305. package/dist/index-BrFtcRgi.mjs +0 -194
  306. package/dist/index-Bu8SXnTf.mjs +0 -227
  307. package/dist/index-Bwh8HVkw.cjs +0 -384
  308. package/dist/index-BxK3Y72_.js +0 -227
  309. package/dist/index-BxPUzymh.cjs +0 -208
  310. package/dist/index-ByZa9qm8.mjs +0 -273
  311. package/dist/index-Bz_LTy1A.mjs +0 -222
  312. package/dist/index-C1GgHOiD.js +0 -228
  313. package/dist/index-C4Pk-zTm.mjs +0 -227
  314. package/dist/index-C6nkQ480.js +0 -225
  315. package/dist/index-C8Mu4K9Q.cjs +0 -383
  316. package/dist/index-CAJ9YPxc.js +0 -681
  317. package/dist/index-CD03pVUt.cjs +0 -373
  318. package/dist/index-CD8GiuIg.js +0 -227
  319. package/dist/index-CHB_0VqK.mjs +0 -333
  320. package/dist/index-CNvZCDZa.js +0 -166
  321. package/dist/index-COGhiFjk.mjs +0 -284
  322. package/dist/index-COIlelpZ.mjs +0 -262
  323. package/dist/index-CPu_XkjY.mjs +0 -304
  324. package/dist/index-CUFKuE64.js +0 -550
  325. package/dist/index-CW8h3l6M.js +0 -262
  326. package/dist/index-CWrng7Hd.mjs +0 -550
  327. package/dist/index-CXviN8qZ.cjs +0 -224
  328. package/dist/index-C_qaNb-X.mjs +0 -225
  329. package/dist/index-Cb3ImEjd.cjs +0 -165
  330. package/dist/index-Cc3vrs6_.mjs +0 -228
  331. package/dist/index-CcIXvx40.mjs +0 -171
  332. package/dist/index-CdaeeF3f.cjs +0 -306
  333. package/dist/index-Cj2ocjXI.cjs +0 -227
  334. package/dist/index-CkWEXzTN.js +0 -129
  335. package/dist/index-Ckhb9QAu.cjs +0 -264
  336. package/dist/index-CklJfQlf.cjs +0 -220
  337. package/dist/index-Cn0ZJkAv.mjs +0 -280
  338. package/dist/index-Cuw9ylL-.mjs +0 -371
  339. package/dist/index-CwOULUAt.mjs +0 -382
  340. package/dist/index-D-1dDKiZ.mjs +0 -227
  341. package/dist/index-D1Ip6ro6.js +0 -458
  342. package/dist/index-D5tEp8IU.js +0 -337
  343. package/dist/index-D7WuGKYY.cjs +0 -227
  344. package/dist/index-D8Dp6TnQ.cjs +0 -1837
  345. package/dist/index-D9OKpqgG.js +0 -381
  346. package/dist/index-DBMI2EcB.cjs +0 -170
  347. package/dist/index-DBRUKV0U.mjs +0 -225
  348. package/dist/index-DHRqE92a.cjs +0 -290
  349. package/dist/index-DJ3ndv3i.mjs +0 -705
  350. package/dist/index-DJXP-Gmp.js +0 -218
  351. package/dist/index-DJlXDQOY.cjs +0 -200
  352. package/dist/index-DLW4GEJl.cjs +0 -229
  353. package/dist/index-DM4ddIL6.js +0 -382
  354. package/dist/index-DN-ScBql.mjs +0 -458
  355. package/dist/index-DS86eFsI.mjs +0 -1835
  356. package/dist/index-DZws2w4w.cjs +0 -229
  357. package/dist/index-Dbb-jnWf.js +0 -206
  358. package/dist/index-DdXy_-T9.js +0 -444
  359. package/dist/index-DiDq1sL6.cjs +0 -240
  360. package/dist/index-DiuJQ9Mq.js +0 -198
  361. package/dist/index-Dk0q-ENv.mjs +0 -166
  362. package/dist/index-DlFElztE.mjs +0 -163
  363. package/dist/index-DlkxQ-B5.mjs +0 -359
  364. package/dist/index-Du5MxO_2.mjs +0 -505
  365. package/dist/index-DxHMqS-W.js +0 -117
  366. package/dist/index-DyTApTHI.cjs +0 -282
  367. package/dist/index-DzAewrkw.js +0 -238
  368. package/dist/index-EuKHpnHv.mjs +0 -117
  369. package/dist/index-FP6hvgSw.cjs +0 -552
  370. package/dist/index-GDSrKnPp.mjs +0 -198
  371. package/dist/index-GMCZo-KH.js +0 -222
  372. package/dist/index-IawHHRZX.mjs +0 -206
  373. package/dist/index-Jk7MG7tE.cjs +0 -286
  374. package/dist/index-KAC20a9r.js +0 -359
  375. package/dist/index-Ls2fI7y4.js +0 -163
  376. package/dist/index-NIEZaRYg.cjs +0 -261
  377. package/dist/index-PyaLRKuk.mjs +0 -168
  378. package/dist/index-QXYDkAsQ.cjs +0 -119
  379. package/dist/index-SmEIf5jz.mjs +0 -259
  380. package/dist/index-UVyXzNlG.js +0 -705
  381. package/dist/index-VvuhRvnC.mjs +0 -218
  382. package/dist/index-XZiO6uje.cjs +0 -275
  383. package/dist/index-YOlsBREZ.cjs +0 -230
  384. package/dist/index-_2dg_MWu.cjs +0 -460
  385. package/dist/index-eFEW10em.js +0 -213
  386. package/dist/index-f7FiDQMk.js +0 -171
  387. package/dist/index-fdDnq3vQ.js +0 -163
  388. package/dist/index-l8e8ip4U.js +0 -168
  389. package/dist/index-rn-_7-wp.cjs +0 -196
  390. package/dist/index-s27DHpTG.js +0 -1835
  391. package/dist/index-sbc7nDv3.js +0 -213
  392. package/dist/index-vHngHSlz.js +0 -280
  393. package/dist/testkit-C920qivh.js +0 -281
  394. package/dist/testkit-C920qivh.mjs +0 -281
  395. package/dist/testkit-D0rTQ6MD.cjs +0 -286
@@ -0,0 +1,136 @@
1
+ import { createSubgraph } from "../../subgraph.js";
2
+ import {
3
+ addCategory,
4
+ addProduct,
5
+ deleteProduct,
6
+ getCategories,
7
+ getProducts,
8
+ initProducts,
9
+ multiplyNumber,
10
+ } from "./data.js";
11
+
12
+ export default createSubgraph("a", {
13
+ typeDefs: /* GraphQL */ `
14
+ extend schema
15
+ @link(
16
+ url: "https://specs.apollo.dev/federation/v2.3"
17
+ import: ["@key", "@shareable"]
18
+ )
19
+
20
+ type Mutation {
21
+ addProduct(input: AddProductInput!): Product!
22
+ addCategory(name: String!, requestId: String!): Category! @shareable
23
+ multiply(by: Int!, requestId: String!): Int!
24
+ }
25
+
26
+ type Query {
27
+ product(id: ID!): Product!
28
+ products: [Product!]!
29
+ }
30
+
31
+ input AddProductInput {
32
+ name: String!
33
+ price: Float!
34
+ }
35
+
36
+ type Product @key(fields: "id") {
37
+ id: ID!
38
+ name: String!
39
+ price: Float!
40
+ }
41
+
42
+ type Category @key(fields: "id") {
43
+ id: ID!
44
+ }
45
+ `,
46
+ resolvers: {
47
+ Query: {
48
+ async product(_: {}, { id }: { id: string }) {
49
+ initProducts();
50
+ const product = (await getProducts()).find((p) => p.id === id);
51
+
52
+ if (!product) {
53
+ return null;
54
+ }
55
+
56
+ return {
57
+ id: product.id,
58
+ name: product.name,
59
+ price: product.price,
60
+ };
61
+ },
62
+ async products() {
63
+ initProducts();
64
+ return getProducts();
65
+ },
66
+ },
67
+ Mutation: {
68
+ async multiply(
69
+ _: {},
70
+ args: {
71
+ by: number;
72
+ requestId: string;
73
+ },
74
+ ) {
75
+ return multiplyNumber(args.by, args.requestId);
76
+ },
77
+ async addProduct(
78
+ _: {},
79
+ {
80
+ input,
81
+ }: {
82
+ input: {
83
+ name: string;
84
+ price: number;
85
+ };
86
+ },
87
+ ) {
88
+ return addProduct(input.name, input.price);
89
+ },
90
+ async addCategory(
91
+ _: {},
92
+ {
93
+ name,
94
+ requestId,
95
+ }: {
96
+ name: string;
97
+ requestId: string;
98
+ },
99
+ ) {
100
+ return addCategory(name, requestId);
101
+ },
102
+ },
103
+ Product: {
104
+ async __resolveReference(key: { id: string }) {
105
+ const products = await getProducts();
106
+ const product = products.find((p) => p.id === key.id);
107
+
108
+ if (!product) {
109
+ return null;
110
+ }
111
+
112
+ await deleteProduct(product.id);
113
+
114
+ return {
115
+ id: product.id,
116
+ name: product.name,
117
+ price: product.price,
118
+ };
119
+ },
120
+ },
121
+ Category: {
122
+ __resolveReference(key: { id: string }) {
123
+ const categories = getCategories();
124
+ const category = categories.find((p) => p.id === key.id);
125
+
126
+ if (!category) {
127
+ return null;
128
+ }
129
+
130
+ return {
131
+ id: category.id,
132
+ };
133
+ },
134
+ },
135
+ },
136
+ });
@@ -0,0 +1,107 @@
1
+ import { createSubgraph } from "../../subgraph.js";
2
+ import {
3
+ addCategory,
4
+ deleteNumber,
5
+ deleteProduct,
6
+ getCategories,
7
+ getProducts,
8
+ } from "./data.js";
9
+
10
+ export default createSubgraph("b", {
11
+ typeDefs: /* GraphQL */ `
12
+ extend schema
13
+ @link(
14
+ url: "https://specs.apollo.dev/federation/v2.3"
15
+ import: ["@key", "@external", "@requires", "@shareable"]
16
+ )
17
+
18
+ type Product @key(fields: "id") {
19
+ id: ID!
20
+ price: Float! @external
21
+ isExpensive: Boolean! @requires(fields: "price")
22
+ isAvailable: Boolean!
23
+ }
24
+
25
+ type Mutation {
26
+ delete(requestId: String!): Int!
27
+ addCategory(name: String!, requestId: String!): Category! @shareable
28
+ }
29
+
30
+ type Category @key(fields: "id") {
31
+ id: ID!
32
+ name: String!
33
+ }
34
+ `,
35
+ resolvers: {
36
+ Mutation: {
37
+ delete(
38
+ _: {},
39
+ args: {
40
+ requestId: string;
41
+ },
42
+ ) {
43
+ return deleteNumber(args.requestId);
44
+ },
45
+ async addCategory(
46
+ _: {},
47
+ {
48
+ name,
49
+ requestId,
50
+ }: {
51
+ name: string;
52
+ requestId: string;
53
+ },
54
+ ) {
55
+ return addCategory(name, requestId);
56
+ },
57
+ },
58
+ Product: {
59
+ async __resolveReference(key: { id: string; price?: number }) {
60
+ const product = (await getProducts()).find(
61
+ (product) => product.id === key.id,
62
+ );
63
+
64
+ if (!product) {
65
+ return null;
66
+ }
67
+
68
+ await deleteProduct(product.id);
69
+
70
+ if (typeof product.price === "number") {
71
+ return {
72
+ id: product.id,
73
+ isAvailable: true,
74
+ price: product.price,
75
+ };
76
+ }
77
+
78
+ return {
79
+ id: product.id,
80
+ isAvailable: false,
81
+ };
82
+ },
83
+ isExpensive(product: { price?: number }) {
84
+ if (typeof product.price !== "number") {
85
+ throw new Error("Price is not available");
86
+ }
87
+
88
+ return product.price > 100;
89
+ },
90
+ },
91
+ Category: {
92
+ __resolveReference(key: { id: string }) {
93
+ const categories = getCategories();
94
+ const category = categories.find((p) => p.id === key.id);
95
+
96
+ if (!category) {
97
+ return null;
98
+ }
99
+
100
+ return {
101
+ id: category.id,
102
+ name: category.name,
103
+ };
104
+ },
105
+ },
106
+ },
107
+ });
@@ -0,0 +1,26 @@
1
+ import { createSubgraph } from "../../subgraph.js";
2
+ import { addNumber } from "./data.js";
3
+
4
+ export default createSubgraph("c", {
5
+ typeDefs: /* GraphQL */ `
6
+ extend schema
7
+ @link(url: "https://specs.apollo.dev/federation/v2.3", import: ["@key"])
8
+
9
+ type Mutation {
10
+ add(num: Int!, requestId: String!): Int!
11
+ }
12
+ `,
13
+ resolvers: {
14
+ Mutation: {
15
+ add(
16
+ _: {},
17
+ args: {
18
+ num: number;
19
+ requestId: string;
20
+ },
21
+ ) {
22
+ return addNumber(args.num, args.requestId);
23
+ },
24
+ },
25
+ },
26
+ });
@@ -0,0 +1,91 @@
1
+ interface Product {
2
+ id: string;
3
+ name: string;
4
+ price: number;
5
+ }
6
+
7
+ interface Category {
8
+ id: string;
9
+ name: string;
10
+ }
11
+
12
+ let products: Product[] = [];
13
+ let categories: Category[] = [];
14
+ const numbers: Record<string, number> = {};
15
+
16
+ export async function getProducts(): Promise<Product[]> {
17
+ return products;
18
+ }
19
+
20
+ export function getCategories(): Category[] {
21
+ return categories;
22
+ }
23
+
24
+ export async function addProduct(name: string, price: number) {
25
+ const newProduct = {
26
+ id: "p-added-" + products.length,
27
+ name: name,
28
+ price: price,
29
+ };
30
+ products.push(newProduct);
31
+ return newProduct;
32
+ }
33
+
34
+ export async function addCategory(name: string, requestId: string) {
35
+ if (categories.some((c) => c.id === "c-added-" + requestId)) {
36
+ throw new Error("Category with this requestId was already added");
37
+ }
38
+
39
+ const newCategory = {
40
+ id: "c-added-" + requestId,
41
+ name: name,
42
+ };
43
+ categories.push(newCategory);
44
+ return newCategory;
45
+ }
46
+
47
+ export async function deleteProduct(id: string) {
48
+ const after = products.filter((p) => p.id !== id);
49
+ products = after;
50
+ }
51
+
52
+ export function initProducts() {
53
+ const product = {
54
+ id: "p1",
55
+ name: "p1-name",
56
+ price: 9.99,
57
+ };
58
+
59
+ if (products.some((p) => p.id === product.id)) {
60
+ return;
61
+ }
62
+
63
+ products.push(product);
64
+ }
65
+
66
+ function getNumber(requestId: string) {
67
+ const num = numbers[requestId];
68
+ return num ?? 0;
69
+ }
70
+
71
+ export function addNumber(num: number, requestId: string) {
72
+ const existingNumber = getNumber(requestId);
73
+ const sum = existingNumber + num;
74
+ numbers[requestId] = sum;
75
+ return sum;
76
+ }
77
+
78
+ export function multiplyNumber(by: number, requestId: string) {
79
+ const existingNumber = getNumber(requestId);
80
+ const result = existingNumber * by;
81
+ numbers[requestId] = result;
82
+ return result;
83
+ }
84
+
85
+ export function deleteNumber(requestId: string) {
86
+ const num = getNumber(requestId);
87
+ if (typeof numbers[requestId] === "number") {
88
+ delete numbers[requestId];
89
+ }
90
+ return num;
91
+ }
@@ -0,0 +1,7 @@
1
+ import { serve } from "../../supergraph.js";
2
+ import a from "./a.subgraph.js";
3
+ import b from "./b.subgraph.js";
4
+ import c from "./c.subgraph.js";
5
+ import test from "./test.js";
6
+
7
+ export default serve("mutations", [a, b, c], test);
@@ -0,0 +1,94 @@
1
+ import { createTest } from "../../testkit.js";
2
+
3
+ export default () => {
4
+ const randomId = Math.random().toString(16).substr(2);
5
+
6
+ return [
7
+ createTest(
8
+ /* GraphQL */ `
9
+ mutation {
10
+ addProduct(input: { name: "new", price: 599.99 }) {
11
+ name
12
+ price
13
+ isExpensive
14
+ isAvailable
15
+ }
16
+ }
17
+ `,
18
+ {
19
+ data: {
20
+ addProduct: {
21
+ name: "new",
22
+ price: 599.99,
23
+ isExpensive: true,
24
+ isAvailable: true,
25
+ },
26
+ },
27
+ },
28
+ ),
29
+ createTest(
30
+ /* GraphQL */ `
31
+ query {
32
+ product(id: "p1") {
33
+ id
34
+ name
35
+ price
36
+ isExpensive
37
+ isAvailable
38
+ }
39
+ }
40
+ `,
41
+ {
42
+ data: {
43
+ product: {
44
+ id: "p1",
45
+ name: "p1-name",
46
+ price: 9.99,
47
+ isExpensive: false,
48
+ isAvailable: true,
49
+ },
50
+ },
51
+ },
52
+ ),
53
+ // Test correct order of execution
54
+ // It obviously does not solve a problem with shared state and race conditions,
55
+ // but at least it reduces the risk a bit
56
+ createTest(
57
+ /* GraphQL */ `
58
+ mutation {
59
+ five: add(num: 5, requestId: "${randomId}")
60
+ ten: multiply(by: 2, requestId: "${randomId}")
61
+ twelve: add(num: 2, requestId: "${randomId}")
62
+ final: delete(requestId: "${randomId}")
63
+ }
64
+ `,
65
+ {
66
+ data: {
67
+ five: 5,
68
+ ten: 10,
69
+ twelve: 12,
70
+ final: 12,
71
+ },
72
+ },
73
+ ),
74
+ // shared-root (mutation)
75
+ createTest(
76
+ /* GraphQL */ `
77
+ mutation {
78
+ addCategory(name: "new", requestId: "${randomId}") {
79
+ id
80
+ name
81
+ }
82
+ }
83
+ `,
84
+ {
85
+ data: {
86
+ addCategory: {
87
+ id: "c-added-" + randomId,
88
+ name: "new",
89
+ },
90
+ },
91
+ },
92
+ ),
93
+ ];
94
+ };
@@ -0,0 +1,12 @@
1
+ export const products = [
2
+ {
3
+ id: "1",
4
+ name: "name-1",
5
+ price: 100,
6
+ },
7
+ {
8
+ id: "2",
9
+ name: "name-2",
10
+ price: 200,
11
+ },
12
+ ];
@@ -0,0 +1,6 @@
1
+ import { serve } from "../../supergraph.js";
2
+ import price from "./price.subgraph.js";
3
+ import product from "./product.subgraph.js";
4
+ import test from "./test.js";
5
+
6
+ export default serve("mysterious-external", [price, product], test);
@@ -0,0 +1,55 @@
1
+ import { createSubgraph } from "../../subgraph.js";
2
+ import { products } from "./data.js";
3
+
4
+ export default createSubgraph("price", {
5
+ typeDefs: /* GraphQL */ `
6
+ extend schema
7
+ @link(
8
+ url: "https://specs.apollo.dev/federation/v2.3"
9
+ import: ["@key", "@external"]
10
+ )
11
+
12
+ # Composition will fail if it's not an extension (I have no idea why this is the case)
13
+ extend type Product @key(fields: "id") {
14
+ id: ID! @external
15
+ price: Float
16
+ }
17
+
18
+ type Query {
19
+ cheapestProduct: Product
20
+ }
21
+ `,
22
+ resolvers: {
23
+ Product: {
24
+ __resolveReference(key: { id: string }) {
25
+ const product = products.find((product) => product.id === key.id);
26
+
27
+ if (!product) {
28
+ return null;
29
+ }
30
+
31
+ return {
32
+ id: product.id,
33
+ price: product.price,
34
+ };
35
+ },
36
+ },
37
+ Query: {
38
+ cheapestProduct() {
39
+ let cheapest: (typeof products)[number] | null = null;
40
+
41
+ for (const product of products) {
42
+ if (cheapest) {
43
+ if (product.price < cheapest.price) {
44
+ cheapest = product;
45
+ }
46
+ } else {
47
+ cheapest = product;
48
+ }
49
+ }
50
+
51
+ return cheapest;
52
+ },
53
+ },
54
+ },
55
+ });
@@ -0,0 +1,45 @@
1
+ import { createSubgraph } from "../../subgraph.js";
2
+ import { products } from "./data.js";
3
+
4
+ export default createSubgraph("product", {
5
+ typeDefs: /* GraphQL */ `
6
+ extend schema
7
+ @link(
8
+ url: "https://specs.apollo.dev/federation/v2.3"
9
+ import: ["@key", "@external"]
10
+ )
11
+
12
+ type Product @key(fields: "id") {
13
+ id: ID!
14
+ name: String!
15
+ }
16
+
17
+ type Query {
18
+ products: [Product!]!
19
+ }
20
+ `,
21
+ resolvers: {
22
+ Product: {
23
+ __resolveReference(key: { id: string }) {
24
+ const product = products.find((product) => product.id === key.id);
25
+
26
+ if (!product) {
27
+ return null;
28
+ }
29
+
30
+ return {
31
+ id: product.id,
32
+ name: product.name,
33
+ };
34
+ },
35
+ },
36
+ Query: {
37
+ products() {
38
+ return products.map((p) => ({
39
+ id: p.id,
40
+ name: p.name,
41
+ }));
42
+ },
43
+ },
44
+ },
45
+ });
@@ -0,0 +1,51 @@
1
+ import { createTest } from "../../testkit.js";
2
+
3
+ export default [
4
+ createTest(
5
+ /* GraphQL */ `
6
+ query {
7
+ cheapestProduct {
8
+ id
9
+ price
10
+ name
11
+ }
12
+ }
13
+ `,
14
+ {
15
+ data: {
16
+ cheapestProduct: {
17
+ id: "1",
18
+ price: 100,
19
+ name: "name-1",
20
+ },
21
+ },
22
+ },
23
+ ),
24
+ createTest(
25
+ /* GraphQL */ `
26
+ query {
27
+ products {
28
+ name
29
+ price
30
+ id
31
+ }
32
+ }
33
+ `,
34
+ {
35
+ data: {
36
+ products: [
37
+ {
38
+ name: "name-1",
39
+ price: 100,
40
+ id: "1",
41
+ },
42
+ {
43
+ name: "name-2",
44
+ price: 200,
45
+ id: "2",
46
+ },
47
+ ],
48
+ },
49
+ },
50
+ ),
51
+ ];
@@ -0,0 +1,37 @@
1
+ import { shouldPunishForPoorPlans } from "../../env.js";
2
+ import { createSubgraph } from "../../subgraph.js";
3
+ import { products } from "./data.js";
4
+
5
+ // I deliberately name it all-products to make sure it's first in the list of subgraphs (in case the order matters)
6
+ export default createSubgraph("all-products", {
7
+ typeDefs: /* GraphQL */ `
8
+ extend schema
9
+ @link(
10
+ url: "https://specs.apollo.dev/federation/v2.3"
11
+ import: ["@key", "@shareable"]
12
+ )
13
+
14
+ type Product @key(fields: "id") {
15
+ id: ID!
16
+ }
17
+ `,
18
+ resolvers: {
19
+ Product: {
20
+ __resolveReference(key: { id: string }) {
21
+ if (shouldPunishForPoorPlans()) {
22
+ throw new Error("You should be using the categories subgraph!");
23
+ }
24
+
25
+ const product = products.find((p) => p.id === key.id);
26
+
27
+ if (!product) {
28
+ return null;
29
+ }
30
+
31
+ return {
32
+ id: product.id,
33
+ };
34
+ },
35
+ },
36
+ },
37
+ });