@graphql-hive/federation-gateway-audit 0.0.0

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 (293) hide show
  1. package/.changeset/@graphql-hive_federation-gateway-audit-293-dependencies.md +5 -0
  2. package/.changeset/README.md +9 -0
  3. package/.changeset/config.json +18 -0
  4. package/.changeset/funky-times-cry.md +5 -0
  5. package/.github/CONTRIBUTING.md +9 -0
  6. package/.github/workflows/ci.yaml +97 -0
  7. package/.github/workflows/release.yml +58 -0
  8. package/LICENSE +21 -0
  9. package/README.md +113 -0
  10. package/REPORT.md +812 -0
  11. package/dist/cli.js +547 -0
  12. package/dist/env-Dj2M4ll3.cjs +15 -0
  13. package/dist/env-j1f_SZtG.js +13 -0
  14. package/dist/env-j1f_SZtG.mjs +13 -0
  15. package/dist/index--3rcSZqA.js +227 -0
  16. package/dist/index-0MDIXUzP.cjs +589 -0
  17. package/dist/index-19eD5lFk.mjs +163 -0
  18. package/dist/index-1ZtG04bN.js +222 -0
  19. package/dist/index-1nZTfbJn.cjs +168 -0
  20. package/dist/index-1smMXABT.mjs +227 -0
  21. package/dist/index-2oy7cA9A.js +225 -0
  22. package/dist/index-3BM15w2Y.mjs +234 -0
  23. package/dist/index-3CyAnc7j.js +234 -0
  24. package/dist/index-4Vj-ND7j.mjs +213 -0
  25. package/dist/index-4swHVe9x.cjs +507 -0
  26. package/dist/index-6itLA31k.js +382 -0
  27. package/dist/index-6qNpP2wc.mjs +238 -0
  28. package/dist/index-81CiuWlP.mjs +333 -0
  29. package/dist/index-8FxjbyOU.cjs +236 -0
  30. package/dist/index-A2YbwKzc.mjs +288 -0
  31. package/dist/index-B-YHHt9g.js +333 -0
  32. package/dist/index-B0coRevy.mjs +337 -0
  33. package/dist/index-B1NAc0TI.cjs +215 -0
  34. package/dist/index-B1WvIzTg.js +371 -0
  35. package/dist/index-B38OpRtf.js +166 -0
  36. package/dist/index-B3aDw4Tt.js +359 -0
  37. package/dist/index-B55AdoQy.js +273 -0
  38. package/dist/index-B7cr8XE-.js +194 -0
  39. package/dist/index-B7zN3YzE.cjs +683 -0
  40. package/dist/index-B8X923W3.mjs +262 -0
  41. package/dist/index-B958BFYC.cjs +224 -0
  42. package/dist/index-B9T896rB.mjs +163 -0
  43. package/dist/index-BA3ERnyq.mjs +234 -0
  44. package/dist/index-BDMi6sOm.cjs +252 -0
  45. package/dist/index-BDNWXFb_.mjs +304 -0
  46. package/dist/index-BEMScD_X.cjs +173 -0
  47. package/dist/index-BF0H5kP0.cjs +384 -0
  48. package/dist/index-BGC0_vWj.cjs +335 -0
  49. package/dist/index-BGNmWPAk.js +381 -0
  50. package/dist/index-BGUm947D.cjs +229 -0
  51. package/dist/index-BJB0tRA1.js +550 -0
  52. package/dist/index-BKcwbRZx.cjs +339 -0
  53. package/dist/index-BKpVb_h9.cjs +236 -0
  54. package/dist/index-BPFol6Ww.mjs +129 -0
  55. package/dist/index-BPza8i2Q.mjs +213 -0
  56. package/dist/index-BQQgQaGz.cjs +552 -0
  57. package/dist/index-BReFIfq_.cjs +361 -0
  58. package/dist/index-BS7JyQSU.js +250 -0
  59. package/dist/index-BSWSgZCO.cjs +252 -0
  60. package/dist/index-BStXx4OK.js +705 -0
  61. package/dist/index-BSwOAvti.js +288 -0
  62. package/dist/index-BWO8QbMB.mjs +587 -0
  63. package/dist/index-BYEdADrG.cjs +227 -0
  64. package/dist/index-B_eGT6oX.js +225 -0
  65. package/dist/index-B_u5Boud.js +333 -0
  66. package/dist/index-BaH3FI9i.cjs +361 -0
  67. package/dist/index-BaluTf1I.cjs +707 -0
  68. package/dist/index-BblYlZ3A.cjs +131 -0
  69. package/dist/index-BcZC0OIN.js +234 -0
  70. package/dist/index-Bcjyyjhh.mjs +259 -0
  71. package/dist/index-BcoW0aPo.cjs +165 -0
  72. package/dist/index-BdNZKlDU.js +284 -0
  73. package/dist/index-Bf81cAA1.mjs +444 -0
  74. package/dist/index-Bg3H3fgZ.js +259 -0
  75. package/dist/index-Bgl_1Y6Q.mjs +681 -0
  76. package/dist/index-BgmItHIB.mjs +129 -0
  77. package/dist/index-BgryMCqm.mjs +213 -0
  78. package/dist/index-Bh6a3eXK.mjs +227 -0
  79. package/dist/index-BhPDIfmU.js +304 -0
  80. package/dist/index-BiTzMTFn.js +304 -0
  81. package/dist/index-BjbmOyBP.cjs +215 -0
  82. package/dist/index-BjwZX2iS.mjs +273 -0
  83. package/dist/index-Bm8hqSRd.cjs +168 -0
  84. package/dist/index-BmOn6xYL.js +228 -0
  85. package/dist/index-BmQrhPXB.cjs +131 -0
  86. package/dist/index-Bnb8TpOO.js +280 -0
  87. package/dist/index-BndUB2KV.mjs +381 -0
  88. package/dist/index-Bo74nI4n.js +129 -0
  89. package/dist/index-BoGmP6Cy.cjs +230 -0
  90. package/dist/index-BodMjESw.mjs +250 -0
  91. package/dist/index-BpJZCoVH.mjs +250 -0
  92. package/dist/index-Br-Y1qC_.cjs +446 -0
  93. package/dist/index-BrFtcRgi.mjs +194 -0
  94. package/dist/index-BsPxDJAB.mjs +238 -0
  95. package/dist/index-Bu7pZnPO.cjs +170 -0
  96. package/dist/index-Bu8SXnTf.mjs +227 -0
  97. package/dist/index-BuNNRp3W.mjs +117 -0
  98. package/dist/index-Bwh8HVkw.cjs +384 -0
  99. package/dist/index-BxK3Y72_.js +227 -0
  100. package/dist/index-BxPUzymh.cjs +208 -0
  101. package/dist/index-ByUUB7Zn.js +250 -0
  102. package/dist/index-ByUr80PD.cjs +306 -0
  103. package/dist/index-ByZa9qm8.mjs +273 -0
  104. package/dist/index-BzPCjhuQ.cjs +264 -0
  105. package/dist/index-Bz_LTy1A.mjs +222 -0
  106. package/dist/index-C05_HMLC.js +225 -0
  107. package/dist/index-C15P-_1j.cjs +229 -0
  108. package/dist/index-C1GgHOiD.js +228 -0
  109. package/dist/index-C4Pk-zTm.mjs +227 -0
  110. package/dist/index-C4dnTlBf.js +262 -0
  111. package/dist/index-C6LW00iX.mjs +505 -0
  112. package/dist/index-C6nkQ480.js +225 -0
  113. package/dist/index-C8Mu4K9Q.cjs +383 -0
  114. package/dist/index-C8mB7yWC.mjs +288 -0
  115. package/dist/index-C9Eh7qBC.js +273 -0
  116. package/dist/index-CAJ9YPxc.js +681 -0
  117. package/dist/index-CD03pVUt.cjs +373 -0
  118. package/dist/index-CD8GiuIg.js +227 -0
  119. package/dist/index-CHB_0VqK.mjs +333 -0
  120. package/dist/index-CKEgb_R7.cjs +215 -0
  121. package/dist/index-CLsasg69.js +228 -0
  122. package/dist/index-CMdC_Cah.js +213 -0
  123. package/dist/index-CNOcqGKC.cjs +227 -0
  124. package/dist/index-CNvZCDZa.js +166 -0
  125. package/dist/index-CO0GiXGE.js +168 -0
  126. package/dist/index-COGhiFjk.mjs +284 -0
  127. package/dist/index-COIlelpZ.mjs +262 -0
  128. package/dist/index-CPph-RFN.mjs +168 -0
  129. package/dist/index-CPu_XkjY.mjs +304 -0
  130. package/dist/index-CQ5t4ZXm.js +117 -0
  131. package/dist/index-CQeQ1nto.js +681 -0
  132. package/dist/index-CSc_T8Lu.js +218 -0
  133. package/dist/index-CUFKuE64.js +550 -0
  134. package/dist/index-CW8h3l6M.js +262 -0
  135. package/dist/index-CWrng7Hd.mjs +550 -0
  136. package/dist/index-CWuObqnS.mjs +587 -0
  137. package/dist/index-CX7-wc6X.cjs +1837 -0
  138. package/dist/index-CXviN8qZ.cjs +224 -0
  139. package/dist/index-CY9mowWW.mjs +705 -0
  140. package/dist/index-C_pTgB_1.js +194 -0
  141. package/dist/index-C_qaNb-X.mjs +225 -0
  142. package/dist/index-Ca0FeU7u.js +505 -0
  143. package/dist/index-Cb3ImEjd.cjs +165 -0
  144. package/dist/index-Cbhvi8yk.cjs +229 -0
  145. package/dist/index-Cc3vrs6_.mjs +228 -0
  146. package/dist/index-CcIXvx40.mjs +171 -0
  147. package/dist/index-CdaeeF3f.cjs +306 -0
  148. package/dist/index-CddVoIp2.js +213 -0
  149. package/dist/index-CeiRxGcN.mjs +218 -0
  150. package/dist/index-ChefKWWr.mjs +381 -0
  151. package/dist/index-Cj2ocjXI.cjs +227 -0
  152. package/dist/index-CkWEXzTN.js +129 -0
  153. package/dist/index-Ckhb9QAu.cjs +264 -0
  154. package/dist/index-CklJfQlf.cjs +220 -0
  155. package/dist/index-Cmh7PJUd.mjs +372 -0
  156. package/dist/index-Cn0ZJkAv.mjs +280 -0
  157. package/dist/index-CqTzarV1.mjs +198 -0
  158. package/dist/index-CrUbbFxE.js +284 -0
  159. package/dist/index-CsKaFB2K.mjs +228 -0
  160. package/dist/index-Cu8Ii5r7.cjs +335 -0
  161. package/dist/index-Cuw9ylL-.mjs +371 -0
  162. package/dist/index-CwOULUAt.mjs +382 -0
  163. package/dist/index-CyVnRqjE.cjs +196 -0
  164. package/dist/index-D-1dDKiZ.mjs +227 -0
  165. package/dist/index-D00bnaJy.cjs +220 -0
  166. package/dist/index-D07xiOJ6.cjs +446 -0
  167. package/dist/index-D1Ip6ro6.js +458 -0
  168. package/dist/index-D1Ymvd2b.cjs +286 -0
  169. package/dist/index-D5jOBT3f.cjs +240 -0
  170. package/dist/index-D5tEp8IU.js +337 -0
  171. package/dist/index-D7WuGKYY.cjs +227 -0
  172. package/dist/index-D8Dp6TnQ.cjs +1837 -0
  173. package/dist/index-D9OKpqgG.js +381 -0
  174. package/dist/index-DBMI2EcB.cjs +170 -0
  175. package/dist/index-DBRUKV0U.mjs +225 -0
  176. package/dist/index-DEvExC5x.cjs +119 -0
  177. package/dist/index-DEzxU_gQ.cjs +507 -0
  178. package/dist/index-DFypMD6R.cjs +261 -0
  179. package/dist/index-DHRqE92a.cjs +290 -0
  180. package/dist/index-DISym5OL.js +198 -0
  181. package/dist/index-DJ3ndv3i.mjs +705 -0
  182. package/dist/index-DJXP-Gmp.js +218 -0
  183. package/dist/index-DJlXDQOY.cjs +200 -0
  184. package/dist/index-DLW4GEJl.cjs +229 -0
  185. package/dist/index-DLu9E2Vq.js +238 -0
  186. package/dist/index-DM4ddIL6.js +382 -0
  187. package/dist/index-DMgHLbwU.cjs +339 -0
  188. package/dist/index-DN-ScBql.mjs +458 -0
  189. package/dist/index-DOkkIHER.js +163 -0
  190. package/dist/index-DRY8sDun.cjs +165 -0
  191. package/dist/index-DS3cjugP.mjs +171 -0
  192. package/dist/index-DS86eFsI.mjs +1835 -0
  193. package/dist/index-DUlT8CJ2.js +458 -0
  194. package/dist/index-DV1F4nxP.js +372 -0
  195. package/dist/index-DXsAcJ-o.mjs +359 -0
  196. package/dist/index-DZws2w4w.cjs +229 -0
  197. package/dist/index-D_HiVe2_.cjs +200 -0
  198. package/dist/index-Da6L5V_Z.mjs +681 -0
  199. package/dist/index-Dbb-jnWf.js +206 -0
  200. package/dist/index-DdXy_-T9.js +444 -0
  201. package/dist/index-DddNFRG3.js +337 -0
  202. package/dist/index-DejhKwvw.cjs +173 -0
  203. package/dist/index-DfBdD-5Z.cjs +383 -0
  204. package/dist/index-Df_KCbC4.mjs +213 -0
  205. package/dist/index-DiDq1sL6.cjs +240 -0
  206. package/dist/index-DiuJQ9Mq.js +198 -0
  207. package/dist/index-Djqj3DWJ.js +171 -0
  208. package/dist/index-Dk0q-ENv.mjs +166 -0
  209. package/dist/index-DlFElztE.mjs +163 -0
  210. package/dist/index-DlkxQ-B5.mjs +359 -0
  211. package/dist/index-Dm5kpK9t.js +227 -0
  212. package/dist/index-Dp8mobro.js +444 -0
  213. package/dist/index-DpBWZa1x.cjs +683 -0
  214. package/dist/index-DrkXuLUZ.js +227 -0
  215. package/dist/index-Dsq1FK90.cjs +275 -0
  216. package/dist/index-DtmhGgM8.cjs +282 -0
  217. package/dist/index-Du5MxO_2.mjs +505 -0
  218. package/dist/index-DveYQLCZ.cjs +460 -0
  219. package/dist/index-DxHMqS-W.js +117 -0
  220. package/dist/index-DyTApTHI.cjs +282 -0
  221. package/dist/index-DyTSkAm4.cjs +208 -0
  222. package/dist/index-DygJOEne.mjs +550 -0
  223. package/dist/index-DzAewrkw.js +238 -0
  224. package/dist/index-ESWdD7ek.cjs +215 -0
  225. package/dist/index-EuKHpnHv.mjs +117 -0
  226. package/dist/index-F1A7LMlw.mjs +228 -0
  227. package/dist/index-FP6hvgSw.cjs +552 -0
  228. package/dist/index-GDSrKnPp.mjs +198 -0
  229. package/dist/index-GMCZo-KH.js +222 -0
  230. package/dist/index-IQJLr7nR.js +288 -0
  231. package/dist/index-IawHHRZX.mjs +206 -0
  232. package/dist/index-Jk7MG7tE.cjs +286 -0
  233. package/dist/index-JtGxTXPr.mjs +337 -0
  234. package/dist/index-KAC20a9r.js +359 -0
  235. package/dist/index-LVWQqV-v.js +163 -0
  236. package/dist/index-Ls2fI7y4.js +163 -0
  237. package/dist/index-NB1VDvjW.cjs +374 -0
  238. package/dist/index-NIEZaRYg.cjs +261 -0
  239. package/dist/index-PQXUx1ZR.mjs +1835 -0
  240. package/dist/index-PyaLRKuk.mjs +168 -0
  241. package/dist/index-QQGo-BV1.mjs +444 -0
  242. package/dist/index-QXYDkAsQ.cjs +119 -0
  243. package/dist/index-SmEIf5jz.mjs +259 -0
  244. package/dist/index-UJhFwnD_.mjs +284 -0
  245. package/dist/index-UVyXzNlG.js +705 -0
  246. package/dist/index-UgyHGpUU.mjs +163 -0
  247. package/dist/index-UhQiJabs.cjs +707 -0
  248. package/dist/index-VvuhRvnC.mjs +218 -0
  249. package/dist/index-WPXuueaq.mjs +194 -0
  250. package/dist/index-X4u6bs58.js +259 -0
  251. package/dist/index-XZiO6uje.cjs +275 -0
  252. package/dist/index-YOlsBREZ.cjs +230 -0
  253. package/dist/index-Ytb942t9.js +587 -0
  254. package/dist/index-_2dg_MWu.cjs +460 -0
  255. package/dist/index-eFEW10em.js +213 -0
  256. package/dist/index-eq8bbEej.mjs +225 -0
  257. package/dist/index-f7FiDQMk.js +171 -0
  258. package/dist/index-fBzI1kbw.mjs +225 -0
  259. package/dist/index-fdDnq3vQ.js +163 -0
  260. package/dist/index-fqmAgjhG.js +206 -0
  261. package/dist/index-ikGyewP-.cjs +165 -0
  262. package/dist/index-jft-1bQ6.cjs +230 -0
  263. package/dist/index-l8e8ip4U.js +168 -0
  264. package/dist/index-lkBiml03.js +1835 -0
  265. package/dist/index-mm-YMeoi.js +505 -0
  266. package/dist/index-o7g3iua7.cjs +290 -0
  267. package/dist/index-ojnncNWd.js +587 -0
  268. package/dist/index-q9SCjCJM.mjs +280 -0
  269. package/dist/index-rn-_7-wp.cjs +196 -0
  270. package/dist/index-s27DHpTG.js +1835 -0
  271. package/dist/index-s2HuXM4d.mjs +206 -0
  272. package/dist/index-sbc7nDv3.js +213 -0
  273. package/dist/index-tx0X6vuE.mjs +222 -0
  274. package/dist/index-uCwv2hr-.mjs +166 -0
  275. package/dist/index-vHngHSlz.js +280 -0
  276. package/dist/index-xOtG5E4u.cjs +589 -0
  277. package/dist/index-zJk-Nm6b.mjs +458 -0
  278. package/dist/index-zqxgDrLR.mjs +382 -0
  279. package/dist/index.cjs +233 -0
  280. package/dist/index.d.cts +9 -0
  281. package/dist/index.d.cts.map +1 -0
  282. package/dist/index.d.ts +9 -0
  283. package/dist/index.d.ts.map +1 -0
  284. package/dist/index.js +230 -0
  285. package/dist/index.mjs +230 -0
  286. package/dist/testkit-BtZjdl4n.js +269 -0
  287. package/dist/testkit-BtZjdl4n.mjs +269 -0
  288. package/dist/testkit-C920qivh.js +281 -0
  289. package/dist/testkit-C920qivh.mjs +281 -0
  290. package/dist/testkit-CAf-AsDy.cjs +273 -0
  291. package/dist/testkit-D0rTQ6MD.cjs +286 -0
  292. package/makefile +47 -0
  293. package/package.json +89 -0
@@ -0,0 +1,381 @@
1
+ import { c as createSubgraph, a as createTest, s as serve } from './testkit-BtZjdl4n.mjs';
2
+ import '@apollo/composition';
3
+ import 'graphql';
4
+ import 'fets';
5
+ import '@apollo/subgraph';
6
+ import 'graphql-yoga';
7
+
8
+ let products = [];
9
+ let categories = [];
10
+ const numbers = {};
11
+ async function getProducts() {
12
+ return products;
13
+ }
14
+ function getCategories() {
15
+ return categories;
16
+ }
17
+ async function addProduct(name, price) {
18
+ const newProduct = {
19
+ id: "p-added-" + products.length,
20
+ name,
21
+ price
22
+ };
23
+ products.push(newProduct);
24
+ return newProduct;
25
+ }
26
+ async function addCategory(name, requestId) {
27
+ if (categories.some((c) => c.id === "c-added-" + requestId)) {
28
+ throw new Error("Category with this requestId was already added");
29
+ }
30
+ const newCategory = {
31
+ id: "c-added-" + requestId,
32
+ name
33
+ };
34
+ categories.push(newCategory);
35
+ return newCategory;
36
+ }
37
+ async function deleteProduct(id) {
38
+ const after = products.filter((p) => p.id !== id);
39
+ products = after;
40
+ }
41
+ function initProducts() {
42
+ const product = {
43
+ id: "p1",
44
+ name: "p1-name",
45
+ price: 9.99
46
+ };
47
+ if (products.some((p) => p.id === product.id)) {
48
+ return;
49
+ }
50
+ products.push(product);
51
+ }
52
+ function getNumber(requestId) {
53
+ const num = numbers[requestId];
54
+ return num ?? 0;
55
+ }
56
+ function addNumber(num, requestId) {
57
+ const existingNumber = getNumber(requestId);
58
+ const sum = existingNumber + num;
59
+ numbers[requestId] = sum;
60
+ return sum;
61
+ }
62
+ function multiplyNumber(by, requestId) {
63
+ const existingNumber = getNumber(requestId);
64
+ const result = existingNumber * by;
65
+ numbers[requestId] = result;
66
+ return result;
67
+ }
68
+ function deleteNumber(requestId) {
69
+ const num = getNumber(requestId);
70
+ if (typeof numbers[requestId] === "number") {
71
+ delete numbers[requestId];
72
+ }
73
+ return num;
74
+ }
75
+
76
+ var a = createSubgraph("a", {
77
+ typeDefs: (
78
+ /* GraphQL */
79
+ `
80
+ extend schema
81
+ @link(
82
+ url: "https://specs.apollo.dev/federation/v2.3"
83
+ import: ["@key", "@shareable"]
84
+ )
85
+
86
+ type Mutation {
87
+ addProduct(input: AddProductInput!): Product!
88
+ addCategory(name: String!, requestId: String!): Category! @shareable
89
+ multiply(by: Int!, requestId: String!): Int!
90
+ }
91
+
92
+ type Query {
93
+ product(id: ID!): Product!
94
+ products: [Product!]!
95
+ }
96
+
97
+ input AddProductInput {
98
+ name: String!
99
+ price: Float!
100
+ }
101
+
102
+ type Product @key(fields: "id") {
103
+ id: ID!
104
+ name: String!
105
+ price: Float!
106
+ }
107
+
108
+ type Category @key(fields: "id") {
109
+ id: ID!
110
+ }
111
+ `
112
+ ),
113
+ resolvers: {
114
+ Query: {
115
+ async product(_, { id }) {
116
+ initProducts();
117
+ const product = (await getProducts()).find((p) => p.id === id);
118
+ if (!product) {
119
+ return null;
120
+ }
121
+ return {
122
+ id: product.id,
123
+ name: product.name,
124
+ price: product.price
125
+ };
126
+ },
127
+ async products() {
128
+ initProducts();
129
+ return getProducts();
130
+ }
131
+ },
132
+ Mutation: {
133
+ async multiply(_, args) {
134
+ return multiplyNumber(args.by, args.requestId);
135
+ },
136
+ async addProduct(_, {
137
+ input
138
+ }) {
139
+ return addProduct(input.name, input.price);
140
+ },
141
+ async addCategory(_, {
142
+ name,
143
+ requestId
144
+ }) {
145
+ return addCategory(name, requestId);
146
+ }
147
+ },
148
+ Product: {
149
+ async __resolveReference(key) {
150
+ const products = await getProducts();
151
+ const product = products.find((p) => p.id === key.id);
152
+ if (!product) {
153
+ return null;
154
+ }
155
+ await deleteProduct(product.id);
156
+ return {
157
+ id: product.id,
158
+ name: product.name,
159
+ price: product.price
160
+ };
161
+ }
162
+ },
163
+ Category: {
164
+ __resolveReference(key) {
165
+ const categories = getCategories();
166
+ const category = categories.find((p) => p.id === key.id);
167
+ if (!category) {
168
+ return null;
169
+ }
170
+ return {
171
+ id: category.id
172
+ };
173
+ }
174
+ }
175
+ }
176
+ });
177
+
178
+ var b = createSubgraph("b", {
179
+ typeDefs: (
180
+ /* GraphQL */
181
+ `
182
+ extend schema
183
+ @link(
184
+ url: "https://specs.apollo.dev/federation/v2.3"
185
+ import: ["@key", "@external", "@requires", "@shareable"]
186
+ )
187
+
188
+ type Product @key(fields: "id") {
189
+ id: ID!
190
+ price: Float! @external
191
+ isExpensive: Boolean! @requires(fields: "price")
192
+ isAvailable: Boolean!
193
+ }
194
+
195
+ type Mutation {
196
+ delete(requestId: String!): Int!
197
+ addCategory(name: String!, requestId: String!): Category! @shareable
198
+ }
199
+
200
+ type Category @key(fields: "id") {
201
+ id: ID!
202
+ name: String!
203
+ }
204
+ `
205
+ ),
206
+ resolvers: {
207
+ Mutation: {
208
+ delete(_, args) {
209
+ return deleteNumber(args.requestId);
210
+ },
211
+ async addCategory(_, {
212
+ name,
213
+ requestId
214
+ }) {
215
+ return addCategory(name, requestId);
216
+ }
217
+ },
218
+ Product: {
219
+ async __resolveReference(key) {
220
+ const product = (await getProducts()).find(
221
+ (product2) => product2.id === key.id
222
+ );
223
+ if (!product) {
224
+ return null;
225
+ }
226
+ await deleteProduct(product.id);
227
+ if (typeof product.price === "number") {
228
+ return {
229
+ id: product.id,
230
+ isAvailable: true,
231
+ price: product.price
232
+ };
233
+ }
234
+ return {
235
+ id: product.id,
236
+ isAvailable: false
237
+ };
238
+ },
239
+ isExpensive(product) {
240
+ if (typeof product.price !== "number") {
241
+ throw new Error("Price is not available");
242
+ }
243
+ return product.price > 100;
244
+ }
245
+ },
246
+ Category: {
247
+ __resolveReference(key) {
248
+ const categories = getCategories();
249
+ const category = categories.find((p) => p.id === key.id);
250
+ if (!category) {
251
+ return null;
252
+ }
253
+ return {
254
+ id: category.id,
255
+ name: category.name
256
+ };
257
+ }
258
+ }
259
+ }
260
+ });
261
+
262
+ var c = createSubgraph("c", {
263
+ typeDefs: (
264
+ /* GraphQL */
265
+ `
266
+ extend schema
267
+ @link(url: "https://specs.apollo.dev/federation/v2.3", import: ["@key"])
268
+
269
+ type Mutation {
270
+ add(num: Int!, requestId: String!): Int!
271
+ }
272
+ `
273
+ ),
274
+ resolvers: {
275
+ Mutation: {
276
+ add(_, args) {
277
+ return addNumber(args.num, args.requestId);
278
+ }
279
+ }
280
+ }
281
+ });
282
+
283
+ var test = () => {
284
+ const randomId = Math.random().toString(16).substr(2);
285
+ return [
286
+ createTest(
287
+ /* GraphQL */
288
+ `
289
+ mutation {
290
+ addProduct(input: { name: "new", price: 599.99 }) {
291
+ name
292
+ price
293
+ isExpensive
294
+ isAvailable
295
+ }
296
+ }
297
+ `,
298
+ {
299
+ data: {
300
+ addProduct: {
301
+ name: "new",
302
+ price: 599.99,
303
+ isExpensive: true,
304
+ isAvailable: true
305
+ }
306
+ }
307
+ }
308
+ ),
309
+ createTest(
310
+ /* GraphQL */
311
+ `
312
+ query {
313
+ product(id: "p1") {
314
+ id
315
+ name
316
+ price
317
+ isExpensive
318
+ isAvailable
319
+ }
320
+ }
321
+ `,
322
+ {
323
+ data: {
324
+ product: {
325
+ id: "p1",
326
+ name: "p1-name",
327
+ price: 9.99,
328
+ isExpensive: false,
329
+ isAvailable: true
330
+ }
331
+ }
332
+ }
333
+ ),
334
+ // Test correct order of execution
335
+ // It obviously does not solve a problem with shared state and race conditions,
336
+ // but at least it reduces the risk a bit
337
+ createTest(
338
+ /* GraphQL */
339
+ `
340
+ mutation {
341
+ five: add(num: 5, requestId: "${randomId}")
342
+ ten: multiply(by: 2, requestId: "${randomId}")
343
+ twelve: add(num: 2, requestId: "${randomId}")
344
+ final: delete(requestId: "${randomId}")
345
+ }
346
+ `,
347
+ {
348
+ data: {
349
+ five: 5,
350
+ ten: 10,
351
+ twelve: 12,
352
+ final: 12
353
+ }
354
+ }
355
+ ),
356
+ // shared-root (mutation)
357
+ createTest(
358
+ /* GraphQL */
359
+ `
360
+ mutation {
361
+ addCategory(name: "new", requestId: "${randomId}") {
362
+ id
363
+ name
364
+ }
365
+ }
366
+ `,
367
+ {
368
+ data: {
369
+ addCategory: {
370
+ id: "c-added-" + randomId,
371
+ name: "new"
372
+ }
373
+ }
374
+ }
375
+ )
376
+ ];
377
+ };
378
+
379
+ var index = serve("mutations", [a, b, c], test);
380
+
381
+ export { index as default };
@@ -0,0 +1,227 @@
1
+ 'use strict';
2
+
3
+ var testkit = require('./testkit-D0rTQ6MD.cjs');
4
+ require('@apollo/composition');
5
+ require('graphql');
6
+ require('fets');
7
+ require('@apollo/subgraph');
8
+ require('graphql-yoga');
9
+
10
+ const users = [
11
+ {
12
+ id: "u1",
13
+ rid: "u1-rid",
14
+ name: "u1-name",
15
+ nickname: "u1-nickname"
16
+ },
17
+ {
18
+ id: "u2",
19
+ rid: "u2-rid",
20
+ name: "u2-name",
21
+ nickname: "u2-nickname"
22
+ }
23
+ ];
24
+
25
+ var a = testkit.createSubgraph("a", {
26
+ typeDefs: (
27
+ /* GraphQL */
28
+ `
29
+ extend schema
30
+ @link(
31
+ url: "https://specs.apollo.dev/federation/v2.3"
32
+ import: ["@key", "@external", "@extends", "@provides"]
33
+ )
34
+
35
+ type Query {
36
+ randomUser: User
37
+ providedRandomUser: User @provides(fields: "name")
38
+ }
39
+
40
+ type User @key(fields: "id") @extends {
41
+ id: ID! @external
42
+ name: String! @external
43
+ rid: ID
44
+ }
45
+ `
46
+ ),
47
+ resolvers: {
48
+ Query: {
49
+ randomUser() {
50
+ return {
51
+ id: users[0].id,
52
+ rid: users[0].rid
53
+ };
54
+ },
55
+ providedRandomUser() {
56
+ return {
57
+ id: users[0].id,
58
+ rid: users[0].rid,
59
+ name: users[0].name
60
+ };
61
+ }
62
+ },
63
+ User: {
64
+ __resolveReference(key) {
65
+ const user = users.find((u) => u.id === key.id);
66
+ if (!user) {
67
+ return null;
68
+ }
69
+ return {
70
+ id: user.id,
71
+ rid: user.rid
72
+ };
73
+ },
74
+ name(user) {
75
+ return user.name ?? "never";
76
+ }
77
+ }
78
+ }
79
+ });
80
+
81
+ var b = testkit.createSubgraph("b", {
82
+ typeDefs: (
83
+ /* GraphQL */
84
+ `
85
+ extend schema
86
+ @link(
87
+ url: "https://specs.apollo.dev/federation/v2.3"
88
+ import: ["@key", "@shareable"]
89
+ )
90
+
91
+ type Query {
92
+ userById(id: ID): User
93
+ }
94
+
95
+ type User @key(fields: "id") {
96
+ id: ID!
97
+ name: String! @shareable
98
+ nickname: String
99
+ }
100
+ `
101
+ ),
102
+ resolvers: {
103
+ Query: {
104
+ userById: (_, { id }) => {
105
+ const user = users.find((u) => u.id === id);
106
+ if (!user) {
107
+ return null;
108
+ }
109
+ return {
110
+ id: user.id,
111
+ name: user.name,
112
+ nickname: user.nickname
113
+ };
114
+ }
115
+ },
116
+ User: {
117
+ __resolveReference: (key) => {
118
+ const user = users.find((u) => u.id === key.id);
119
+ if (!user) {
120
+ return null;
121
+ }
122
+ return {
123
+ id: user.id,
124
+ name: user.name,
125
+ nickname: user.nickname
126
+ };
127
+ }
128
+ }
129
+ }
130
+ });
131
+
132
+ var test = [
133
+ testkit.createTest(
134
+ /* GraphQL */
135
+ `
136
+ query {
137
+ randomUser {
138
+ id
139
+ name
140
+ }
141
+ userById(id: "u2") {
142
+ id
143
+ name
144
+ nickname
145
+ }
146
+ }
147
+ `,
148
+ {
149
+ data: {
150
+ randomUser: {
151
+ id: "u1",
152
+ name: "u1-name"
153
+ },
154
+ userById: {
155
+ id: "u2",
156
+ name: "u2-name",
157
+ nickname: "u2-nickname"
158
+ }
159
+ }
160
+ }
161
+ ),
162
+ testkit.createTest(
163
+ /* GraphQL */
164
+ `
165
+ query {
166
+ randomUser {
167
+ id
168
+ rid
169
+ }
170
+ }
171
+ `,
172
+ {
173
+ data: {
174
+ randomUser: {
175
+ id: "u1",
176
+ rid: "u1-rid"
177
+ }
178
+ }
179
+ }
180
+ ),
181
+ testkit.createTest(
182
+ /* GraphQL */
183
+ `
184
+ query {
185
+ randomUser {
186
+ id
187
+ rid
188
+ name
189
+ }
190
+ }
191
+ `,
192
+ {
193
+ data: {
194
+ randomUser: {
195
+ id: "u1",
196
+ rid: "u1-rid",
197
+ name: "u1-name"
198
+ }
199
+ }
200
+ }
201
+ ),
202
+ testkit.createTest(
203
+ /* GraphQL */
204
+ `
205
+ query {
206
+ providedRandomUser {
207
+ id
208
+ rid
209
+ name
210
+ }
211
+ }
212
+ `,
213
+ {
214
+ data: {
215
+ providedRandomUser: {
216
+ id: "u1",
217
+ rid: "u1-rid",
218
+ name: "u1-name"
219
+ }
220
+ }
221
+ }
222
+ )
223
+ ];
224
+
225
+ var index = testkit.serve("fed2-external-extends", [a, b], test);
226
+
227
+ exports.default = index;
@@ -0,0 +1,129 @@
1
+ import { c as createSubgraph, a as createTest, s as serve } from './testkit-C920qivh.js';
2
+ import '@apollo/composition';
3
+ import 'graphql';
4
+ import 'fets';
5
+ import '@apollo/subgraph';
6
+ import 'graphql-yoga';
7
+
8
+ const products = [
9
+ {
10
+ id: "p1",
11
+ pid: "p1-pid",
12
+ price: 12.3,
13
+ upc: "upc1",
14
+ name: "p1-name"
15
+ }
16
+ ];
17
+
18
+ var a = createSubgraph("a", {
19
+ typeDefs: (
20
+ /* GraphQL */
21
+ `
22
+ type Query {
23
+ productInA: Product
24
+ }
25
+
26
+ type Product @key(fields: "id") {
27
+ id: ID!
28
+ name: String
29
+ pid: ID
30
+ }
31
+ `
32
+ ),
33
+ resolvers: {
34
+ Query: {
35
+ productInA() {
36
+ return {
37
+ id: products[0].id,
38
+ name: products[0].name,
39
+ pid: products[0].pid
40
+ };
41
+ }
42
+ },
43
+ Product: {
44
+ __resolveReference(key) {
45
+ if (products[0].id !== key.id) {
46
+ return null;
47
+ }
48
+ return {
49
+ id: products[0].id,
50
+ name: products[0].name,
51
+ pid: products[0].pid
52
+ };
53
+ }
54
+ }
55
+ }
56
+ });
57
+
58
+ var b = createSubgraph("b", {
59
+ typeDefs: (
60
+ /* GraphQL */
61
+ `
62
+ type Query {
63
+ productInB: Product
64
+ }
65
+
66
+ extend type Product @key(fields: "id name") @key(fields: "upc") {
67
+ id: ID @external
68
+ name: String @external
69
+ upc: String @external
70
+ price: Float!
71
+ }
72
+ `
73
+ ),
74
+ resolvers: {
75
+ Query: {
76
+ productInB: () => {
77
+ return {
78
+ id: products[0].id,
79
+ name: products[0].name,
80
+ upc: products[0].upc,
81
+ price: products[0].price
82
+ };
83
+ }
84
+ },
85
+ Product: {
86
+ __resolveReference: (key) => {
87
+ const product = "id" in key ? products.find((p) => p.id === key.id && p.name === key.name) : products.find((p) => p.upc === key.upc);
88
+ return product ? {
89
+ id: product.id,
90
+ name: product.name,
91
+ upc: product.upc,
92
+ price: product.price
93
+ } : null;
94
+ }
95
+ }
96
+ }
97
+ });
98
+
99
+ var tests = [
100
+ createTest(
101
+ /* GraphQL */
102
+ `
103
+ query {
104
+ productInA {
105
+ id
106
+ pid
107
+ price
108
+ upc
109
+ name
110
+ }
111
+ }
112
+ `,
113
+ {
114
+ data: {
115
+ productInA: {
116
+ id: "p1",
117
+ pid: "p1-pid",
118
+ price: 12.3,
119
+ upc: "upc1",
120
+ name: "p1-name"
121
+ }
122
+ }
123
+ }
124
+ )
125
+ ];
126
+
127
+ var index = serve("fed1-external-extends-resolvable", [a, b], tests);
128
+
129
+ export { index as default };