@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-C920qivh.js';
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,170 @@
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
+ var a = testkit.createSubgraph("a", {
11
+ typeDefs: (
12
+ /* GraphQL */
13
+ `
14
+ extend schema
15
+ @link(
16
+ url: "https://specs.apollo.dev/federation/v2.3"
17
+ import: ["@key", "@external", "@shareable"]
18
+ )
19
+
20
+ type Product @key(fields: "id") {
21
+ id: ID @external
22
+ category: Category @shareable
23
+ }
24
+ type Category {
25
+ details: String
26
+ }
27
+ `
28
+ ),
29
+ resolvers: {
30
+ Product: {
31
+ __resolveReference(product) {
32
+ return {
33
+ id: product.id,
34
+ category: { details: `Details for Product#${product.id}` }
35
+ };
36
+ }
37
+ }
38
+ }
39
+ });
40
+
41
+ var b = testkit.createSubgraph("b", {
42
+ typeDefs: (
43
+ /* GraphQL */
44
+ `
45
+ extend schema
46
+ @link(
47
+ url: "https://specs.apollo.dev/federation/v2.3"
48
+ import: ["@key", "@external", "@shareable"]
49
+ )
50
+
51
+ type Product @key(fields: "id") {
52
+ id: ID @external
53
+ category: Category @shareable
54
+ }
55
+
56
+ type Category {
57
+ id: ID @shareable
58
+ }
59
+ `
60
+ ),
61
+ resolvers: {
62
+ Product: {
63
+ __resolveReference(product) {
64
+ return {
65
+ id: product.id,
66
+ category: {
67
+ id: 3
68
+ }
69
+ };
70
+ }
71
+ }
72
+ }
73
+ });
74
+
75
+ var c = testkit.createSubgraph("c", {
76
+ typeDefs: (
77
+ /* GraphQL */
78
+ `
79
+ extend schema
80
+ @link(url: "https://specs.apollo.dev/federation/v2.3", import: ["@key"])
81
+ type Category @key(fields: "id") {
82
+ id: ID
83
+ name: String
84
+ }
85
+ `
86
+ ),
87
+ resolvers: {
88
+ Category: {
89
+ __resolveReference(category) {
90
+ return {
91
+ id: category.id,
92
+ name: `Category#${category.id}`
93
+ };
94
+ }
95
+ }
96
+ }
97
+ });
98
+
99
+ var d = testkit.createSubgraph("d", {
100
+ typeDefs: (
101
+ /* GraphQL */
102
+ `
103
+ extend schema
104
+ @link(url: "https://specs.apollo.dev/federation/v2.3", import: ["@key"])
105
+
106
+ type Query {
107
+ productFromD(id: ID!): Product
108
+ }
109
+
110
+ type Product @key(fields: "id") {
111
+ id: ID
112
+ name: String
113
+ }
114
+ `
115
+ ),
116
+ resolvers: {
117
+ Product: {
118
+ __resolveReference(product) {
119
+ return {
120
+ id: product.id,
121
+ name: `Product#${product.id}`
122
+ };
123
+ }
124
+ },
125
+ Query: {
126
+ productFromD(_, { id }) {
127
+ return {
128
+ id,
129
+ name: `Product#${id}`
130
+ };
131
+ }
132
+ }
133
+ }
134
+ });
135
+
136
+ var test = [
137
+ testkit.createTest(
138
+ /* GraphQL */
139
+ `
140
+ query {
141
+ productFromD(id: "1") {
142
+ id
143
+ name
144
+ category {
145
+ id
146
+ name
147
+ details
148
+ }
149
+ }
150
+ }
151
+ `,
152
+ {
153
+ data: {
154
+ productFromD: {
155
+ id: "1",
156
+ name: "Product#1",
157
+ category: {
158
+ id: "3",
159
+ name: "Category#3",
160
+ details: "Details for Product#1"
161
+ }
162
+ }
163
+ }
164
+ }
165
+ )
166
+ ];
167
+
168
+ var index = testkit.serve("parent-entity-call-complex", [a, b, c, d], test);
169
+
170
+ exports.default = index;