@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.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,129 @@
1
+ import { c as createSubgraph, a as createTest, s as serve } from './testkit-BtZjdl4n.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 };
@@ -0,0 +1,230 @@
1
+ 'use strict';
2
+
3
+ var testkit = require('./testkit-CAf-AsDy.cjs');
4
+ var env = require('./env-Dj2M4ll3.cjs');
5
+ require('@apollo/composition');
6
+ require('graphql');
7
+ require('fets');
8
+ require('@apollo/subgraph');
9
+ require('graphql-yoga');
10
+
11
+ const medias = [
12
+ {
13
+ __typename: "Book",
14
+ id: "m1",
15
+ title: "Book 1"
16
+ },
17
+ {
18
+ __typename: "Movie",
19
+ id: "m2",
20
+ title: "Movie 1"
21
+ }
22
+ ];
23
+
24
+ var a = testkit.createSubgraph("a", {
25
+ typeDefs: (
26
+ /* GraphQL */
27
+ `
28
+ extend schema
29
+ @link(
30
+ url: "https://specs.apollo.dev/federation/v2.3"
31
+ import: ["@key", "@shareable", "@external"]
32
+ )
33
+
34
+ type Query {
35
+ media: [Media] @shareable
36
+ }
37
+
38
+ union Media = Book | Movie
39
+
40
+ type Book @key(fields: "id") {
41
+ id: ID!
42
+ }
43
+
44
+ type Movie @key(fields: "id") {
45
+ id: ID!
46
+ }
47
+ `
48
+ ),
49
+ resolvers: {
50
+ Query: {
51
+ media(_p, _a, context) {
52
+ if (env.shouldPunishForPoorPlans()) {
53
+ throw new Error("You should not be using the 'a' subgraph!");
54
+ }
55
+ return medias.map((media) => ({
56
+ __typename: media.__typename,
57
+ id: media.id
58
+ }));
59
+ }
60
+ }
61
+ }
62
+ });
63
+
64
+ var b = testkit.createSubgraph("b", {
65
+ typeDefs: (
66
+ /* GraphQL */
67
+ `
68
+ extend schema
69
+ @link(
70
+ url: "https://specs.apollo.dev/federation/v2.3"
71
+ import: ["@key", "@shareable", "@provides", "@external"]
72
+ )
73
+
74
+ type Query {
75
+ media: [Media] @shareable @provides(fields: "... on Book { title }")
76
+ }
77
+
78
+ union Media = Book | Movie
79
+
80
+ type Book @key(fields: "id") {
81
+ id: ID!
82
+ title: String @external
83
+ }
84
+
85
+ type Movie @key(fields: "id") {
86
+ id: ID!
87
+ }
88
+ `
89
+ ),
90
+ resolvers: {
91
+ Query: {
92
+ media() {
93
+ return medias.map((media) => {
94
+ if (media.__typename === "Book") {
95
+ return {
96
+ __typename: media.__typename,
97
+ id: media.id,
98
+ title: media.title
99
+ };
100
+ }
101
+ return {
102
+ __typename: media.__typename,
103
+ id: media.id
104
+ };
105
+ });
106
+ }
107
+ }
108
+ }
109
+ });
110
+
111
+ var c = testkit.createSubgraph("c", {
112
+ typeDefs: (
113
+ /* GraphQL */
114
+ `
115
+ extend schema
116
+ @link(
117
+ url: "https://specs.apollo.dev/federation/v2.3"
118
+ import: ["@key", "@shareable"]
119
+ )
120
+
121
+ type Book @key(fields: "id") {
122
+ id: ID!
123
+ title: String @shareable
124
+ }
125
+
126
+ type Movie @key(fields: "id") {
127
+ id: ID!
128
+ title: String @shareable
129
+ }
130
+ `
131
+ ),
132
+ resolvers: {
133
+ Book: {
134
+ __resolveReference(key, context) {
135
+ if (env.shouldPunishForPoorPlans()) {
136
+ throw new Error("You should be using the 'b' subgraph!");
137
+ }
138
+ const media = medias.find((media2) => media2.id === key.id);
139
+ if (!media) {
140
+ return null;
141
+ }
142
+ return {
143
+ __typename: media.__typename,
144
+ id: media.id,
145
+ title: media.title
146
+ };
147
+ }
148
+ },
149
+ Movie: {
150
+ __resolveReference(key) {
151
+ const media = medias.find((media2) => media2.id === key.id);
152
+ if (!media) {
153
+ return null;
154
+ }
155
+ return {
156
+ __typename: media.__typename,
157
+ id: media.id,
158
+ title: media.title
159
+ };
160
+ }
161
+ }
162
+ }
163
+ });
164
+
165
+ var test = [
166
+ testkit.createTest(
167
+ /* GraphQL */
168
+ `
169
+ query {
170
+ media {
171
+ ... on Book {
172
+ id
173
+ title
174
+ }
175
+ ... on Movie {
176
+ id
177
+ }
178
+ }
179
+ }
180
+ `,
181
+ {
182
+ data: {
183
+ media: [
184
+ {
185
+ id: "m1",
186
+ title: "Book 1"
187
+ },
188
+ {
189
+ id: "m2"
190
+ }
191
+ ]
192
+ }
193
+ }
194
+ ),
195
+ testkit.createTest(
196
+ /* GraphQL */
197
+ `
198
+ query {
199
+ media {
200
+ ... on Book {
201
+ id
202
+ title
203
+ }
204
+ ... on Movie {
205
+ id
206
+ title
207
+ }
208
+ }
209
+ }
210
+ `,
211
+ {
212
+ data: {
213
+ media: [
214
+ {
215
+ id: "m1",
216
+ title: "Book 1"
217
+ },
218
+ {
219
+ id: "m2",
220
+ title: "Movie 1"
221
+ }
222
+ ]
223
+ }
224
+ }
225
+ )
226
+ ];
227
+
228
+ var index = testkit.serve("provides-on-union", [a, b, c], test);
229
+
230
+ exports.default = index;