@graphql-eslint/eslint-plugin 4.0.0-alpha-20220821140530-e968cfc → 4.0.0-alpha-20230801163310-8bc4340

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 (347) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -253
  3. package/cjs/cache.d.ts +12 -0
  4. package/cjs/cache.js +62 -0
  5. package/cjs/configs/index.d.ts +148 -0
  6. package/cjs/configs/index.js +49 -0
  7. package/cjs/configs/operations-all.d.ts +22 -0
  8. package/cjs/configs/operations-all.js +27 -0
  9. package/cjs/configs/operations-recommended.d.ts +52 -0
  10. package/{configs/operations-recommended.json → cjs/configs/operations-recommended.js} +16 -14
  11. package/cjs/configs/relay.d.ts +12 -0
  12. package/{configs/relay.json → cjs/configs/relay.js} +6 -4
  13. package/cjs/configs/schema-all.d.ts +19 -0
  14. package/cjs/configs/schema-all.js +21 -0
  15. package/cjs/configs/schema-recommended.d.ts +49 -0
  16. package/{configs/schema-recommended.json → cjs/configs/schema-recommended.js} +19 -20
  17. package/cjs/documents.d.ts +6 -0
  18. package/cjs/documents.js +81 -0
  19. package/cjs/estree-converter/converter.d.ts +8 -0
  20. package/cjs/estree-converter/converter.js +83 -0
  21. package/cjs/estree-converter/index.d.ts +8 -0
  22. package/cjs/estree-converter/index.js +26 -0
  23. package/cjs/estree-converter/types.d.ts +42 -0
  24. package/cjs/estree-converter/types.js +16 -0
  25. package/cjs/estree-converter/utils.d.ts +18 -0
  26. package/cjs/estree-converter/utils.js +135 -0
  27. package/cjs/flat-configs.d.ts +260 -0
  28. package/cjs/flat-configs.js +60 -0
  29. package/cjs/graphql-config.d.ts +13 -0
  30. package/cjs/graphql-config.js +86 -0
  31. package/cjs/index.d.ts +22 -0
  32. package/cjs/index.js +49 -0
  33. package/cjs/parser.d.ts +12 -0
  34. package/cjs/parser.js +103 -0
  35. package/cjs/processor.d.ts +9 -0
  36. package/cjs/processor.js +127 -0
  37. package/cjs/rules/alphabetize.d.ts +84 -0
  38. package/cjs/rules/alphabetize.js +395 -0
  39. package/cjs/rules/description-style.d.ts +28 -0
  40. package/cjs/rules/description-style.js +109 -0
  41. package/cjs/rules/graphql-js-validation.d.ts +12 -0
  42. package/cjs/rules/graphql-js-validation.js +669 -0
  43. package/cjs/rules/index.d.ts +125 -0
  44. package/cjs/rules/index.js +99 -0
  45. package/cjs/rules/input-name.d.ts +43 -0
  46. package/cjs/rules/input-name.js +170 -0
  47. package/cjs/rules/lone-executable-definition.d.ts +34 -0
  48. package/cjs/rules/lone-executable-definition.js +119 -0
  49. package/cjs/rules/match-document-filename.d.ts +80 -0
  50. package/cjs/rules/match-document-filename.js +282 -0
  51. package/cjs/rules/naming-convention.d.ts +107 -0
  52. package/cjs/rules/naming-convention.js +434 -0
  53. package/cjs/rules/no-anonymous-operations.d.ts +12 -0
  54. package/cjs/rules/no-anonymous-operations.js +98 -0
  55. package/cjs/rules/no-case-insensitive-enum-values-duplicates.d.ts +12 -0
  56. package/cjs/rules/no-case-insensitive-enum-values-duplicates.js +96 -0
  57. package/cjs/rules/no-deprecated.d.ts +12 -0
  58. package/cjs/rules/no-deprecated.js +157 -0
  59. package/cjs/rules/no-duplicate-fields.d.ts +12 -0
  60. package/cjs/rules/no-duplicate-fields.js +146 -0
  61. package/cjs/rules/no-hashtag-description.d.ts +13 -0
  62. package/cjs/rules/no-hashtag-description.js +140 -0
  63. package/cjs/rules/no-one-place-fragments.d.ts +12 -0
  64. package/cjs/rules/no-one-place-fragments.js +113 -0
  65. package/cjs/rules/no-root-type.d.ts +33 -0
  66. package/cjs/rules/no-root-type.js +113 -0
  67. package/cjs/rules/no-scalar-result-type-on-mutation.d.ts +12 -0
  68. package/cjs/rules/no-scalar-result-type-on-mutation.js +100 -0
  69. package/cjs/rules/no-typename-prefix.d.ts +12 -0
  70. package/cjs/rules/no-typename-prefix.js +98 -0
  71. package/cjs/rules/no-unreachable-types.d.ts +12 -0
  72. package/cjs/rules/no-unreachable-types.js +199 -0
  73. package/cjs/rules/no-unused-fields.d.ts +12 -0
  74. package/cjs/rules/no-unused-fields.js +157 -0
  75. package/cjs/rules/relay-arguments.d.ts +29 -0
  76. package/cjs/rules/relay-arguments.js +149 -0
  77. package/cjs/rules/relay-connection-types.d.ts +13 -0
  78. package/cjs/rules/relay-connection-types.js +142 -0
  79. package/cjs/rules/relay-edge-types.d.ts +39 -0
  80. package/cjs/rules/relay-edge-types.js +212 -0
  81. package/cjs/rules/relay-page-info.d.ts +12 -0
  82. package/cjs/rules/relay-page-info.js +121 -0
  83. package/cjs/rules/require-deprecation-date.d.ts +26 -0
  84. package/cjs/rules/require-deprecation-date.js +164 -0
  85. package/cjs/rules/require-deprecation-reason.d.ts +12 -0
  86. package/cjs/rules/require-deprecation-reason.js +93 -0
  87. package/cjs/rules/require-description.d.ts +23 -0
  88. package/cjs/rules/require-description.js +205 -0
  89. package/cjs/rules/require-field-of-type-query-in-mutation-result.d.ts +12 -0
  90. package/cjs/rules/require-field-of-type-query-in-mutation-result.js +102 -0
  91. package/cjs/rules/require-id-when-available.d.ts +44 -0
  92. package/cjs/rules/require-id-when-available.js +241 -0
  93. package/cjs/rules/require-import-fragment.d.ts +12 -0
  94. package/cjs/rules/require-import-fragment.js +166 -0
  95. package/cjs/rules/require-nullable-fields-with-oneof.d.ts +12 -0
  96. package/cjs/rules/require-nullable-fields-with-oneof.js +92 -0
  97. package/cjs/rules/require-nullable-result-in-root.d.ts +12 -0
  98. package/cjs/rules/require-nullable-result-in-root.js +109 -0
  99. package/cjs/rules/require-type-pattern-with-oneof.d.ts +12 -0
  100. package/cjs/rules/require-type-pattern-with-oneof.js +91 -0
  101. package/cjs/rules/selection-set-depth.d.ts +36 -0
  102. package/cjs/rules/selection-set-depth.js +175 -0
  103. package/cjs/rules/strict-id-in-types.d.ts +65 -0
  104. package/cjs/rules/strict-id-in-types.js +186 -0
  105. package/cjs/rules/unique-fragment-name.d.ts +13 -0
  106. package/cjs/rules/unique-fragment-name.js +118 -0
  107. package/cjs/rules/unique-operation-name.d.ts +12 -0
  108. package/cjs/rules/unique-operation-name.js +95 -0
  109. package/cjs/schema.d.ts +12 -0
  110. package/cjs/schema.js +65 -0
  111. package/cjs/siblings.d.ts +8 -0
  112. package/cjs/siblings.js +136 -0
  113. package/cjs/types-8d5f4ae0.d.ts +107 -0
  114. package/cjs/types.d.ts +8 -0
  115. package/cjs/types.js +16 -0
  116. package/cjs/utils.d.ts +44 -0
  117. package/cjs/utils.js +205 -0
  118. package/esm/cache.d.mts +12 -0
  119. package/esm/cache.js +29 -0
  120. package/esm/chunk-BMTV3EA2.js +8 -0
  121. package/esm/configs/index.d.mts +148 -0
  122. package/esm/configs/index.js +16 -0
  123. package/esm/configs/operations-all.d.mts +22 -0
  124. package/esm/configs/operations-all.js +34 -0
  125. package/esm/configs/operations-recommended.d.mts +52 -0
  126. package/esm/configs/operations-recommended.js +59 -0
  127. package/esm/configs/relay.d.mts +12 -0
  128. package/esm/configs/relay.js +18 -0
  129. package/esm/configs/schema-all.d.mts +19 -0
  130. package/esm/configs/schema-all.js +28 -0
  131. package/esm/configs/schema-recommended.d.mts +49 -0
  132. package/esm/configs/schema-recommended.js +55 -0
  133. package/esm/documents.d.mts +6 -0
  134. package/esm/documents.js +48 -0
  135. package/esm/estree-converter/converter.d.mts +8 -0
  136. package/esm/estree-converter/converter.js +65 -0
  137. package/esm/estree-converter/index.d.mts +8 -0
  138. package/esm/estree-converter/index.js +3 -0
  139. package/esm/estree-converter/types.d.mts +42 -0
  140. package/esm/estree-converter/types.js +0 -0
  141. package/esm/estree-converter/utils.d.mts +18 -0
  142. package/esm/estree-converter/utils.js +114 -0
  143. package/esm/flat-configs.d.mts +260 -0
  144. package/esm/flat-configs.js +37 -0
  145. package/esm/graphql-config.d.mts +13 -0
  146. package/esm/graphql-config.js +55 -0
  147. package/esm/index.d.mts +22 -0
  148. package/esm/index.js +18 -0
  149. package/esm/package.json +1 -0
  150. package/esm/parser.d.mts +12 -0
  151. package/esm/parser.js +70 -0
  152. package/esm/processor.d.mts +9 -0
  153. package/esm/processor.js +106 -0
  154. package/esm/rules/alphabetize.d.mts +84 -0
  155. package/esm/rules/alphabetize.js +364 -0
  156. package/esm/rules/description-style.d.mts +28 -0
  157. package/esm/rules/description-style.js +86 -0
  158. package/esm/rules/graphql-js-validation.d.mts +12 -0
  159. package/esm/rules/graphql-js-validation.js +658 -0
  160. package/esm/rules/index.d.mts +125 -0
  161. package/esm/rules/index.js +76 -0
  162. package/esm/rules/input-name.d.mts +43 -0
  163. package/esm/rules/input-name.js +149 -0
  164. package/esm/rules/lone-executable-definition.d.mts +34 -0
  165. package/esm/rules/lone-executable-definition.js +96 -0
  166. package/esm/rules/match-document-filename.d.mts +80 -0
  167. package/esm/rules/match-document-filename.js +263 -0
  168. package/esm/rules/naming-convention.d.mts +107 -0
  169. package/esm/rules/naming-convention.js +417 -0
  170. package/esm/rules/no-anonymous-operations.d.mts +12 -0
  171. package/esm/rules/no-anonymous-operations.js +75 -0
  172. package/esm/rules/no-case-insensitive-enum-values-duplicates.d.mts +12 -0
  173. package/esm/rules/no-case-insensitive-enum-values-duplicates.js +73 -0
  174. package/esm/rules/no-deprecated.d.mts +12 -0
  175. package/esm/rules/no-deprecated.js +134 -0
  176. package/esm/rules/no-duplicate-fields.d.mts +12 -0
  177. package/esm/rules/no-duplicate-fields.js +123 -0
  178. package/esm/rules/no-hashtag-description.d.mts +13 -0
  179. package/esm/rules/no-hashtag-description.js +116 -0
  180. package/esm/rules/no-one-place-fragments.d.mts +12 -0
  181. package/esm/rules/no-one-place-fragments.js +90 -0
  182. package/esm/rules/no-root-type.d.mts +33 -0
  183. package/esm/rules/no-root-type.js +90 -0
  184. package/esm/rules/no-scalar-result-type-on-mutation.d.mts +12 -0
  185. package/esm/rules/no-scalar-result-type-on-mutation.js +77 -0
  186. package/esm/rules/no-typename-prefix.d.mts +12 -0
  187. package/esm/rules/no-typename-prefix.js +75 -0
  188. package/esm/rules/no-unreachable-types.d.mts +12 -0
  189. package/esm/rules/no-unreachable-types.js +171 -0
  190. package/esm/rules/no-unused-fields.d.mts +12 -0
  191. package/esm/rules/no-unused-fields.js +134 -0
  192. package/esm/rules/relay-arguments.d.mts +29 -0
  193. package/esm/rules/relay-arguments.js +126 -0
  194. package/esm/rules/relay-connection-types.d.mts +13 -0
  195. package/esm/rules/relay-connection-types.js +118 -0
  196. package/esm/rules/relay-edge-types.d.mts +39 -0
  197. package/esm/rules/relay-edge-types.js +194 -0
  198. package/esm/rules/relay-page-info.d.mts +12 -0
  199. package/esm/rules/relay-page-info.js +98 -0
  200. package/esm/rules/require-deprecation-date.d.mts +26 -0
  201. package/esm/rules/require-deprecation-date.js +141 -0
  202. package/esm/rules/require-deprecation-reason.d.mts +12 -0
  203. package/esm/rules/require-deprecation-reason.js +70 -0
  204. package/esm/rules/require-description.d.mts +23 -0
  205. package/esm/rules/require-description.js +186 -0
  206. package/esm/rules/require-field-of-type-query-in-mutation-result.d.mts +12 -0
  207. package/esm/rules/require-field-of-type-query-in-mutation-result.js +79 -0
  208. package/esm/rules/require-id-when-available.d.mts +44 -0
  209. package/esm/rules/require-id-when-available.js +231 -0
  210. package/esm/rules/require-import-fragment.d.mts +12 -0
  211. package/esm/rules/require-import-fragment.js +133 -0
  212. package/esm/rules/require-nullable-fields-with-oneof.d.mts +12 -0
  213. package/esm/rules/require-nullable-fields-with-oneof.js +69 -0
  214. package/esm/rules/require-nullable-result-in-root.d.mts +12 -0
  215. package/esm/rules/require-nullable-result-in-root.js +86 -0
  216. package/esm/rules/require-type-pattern-with-oneof.d.mts +12 -0
  217. package/esm/rules/require-type-pattern-with-oneof.js +68 -0
  218. package/esm/rules/selection-set-depth.d.mts +36 -0
  219. package/esm/rules/selection-set-depth.js +142 -0
  220. package/esm/rules/strict-id-in-types.d.mts +65 -0
  221. package/esm/rules/strict-id-in-types.js +169 -0
  222. package/esm/rules/unique-fragment-name.d.mts +13 -0
  223. package/esm/rules/unique-fragment-name.js +94 -0
  224. package/esm/rules/unique-operation-name.d.mts +12 -0
  225. package/esm/rules/unique-operation-name.js +72 -0
  226. package/esm/schema.d.mts +12 -0
  227. package/esm/schema.js +32 -0
  228. package/esm/siblings.d.mts +8 -0
  229. package/esm/siblings.js +116 -0
  230. package/esm/types-ace77d86.d.ts +107 -0
  231. package/esm/types.d.mts +8 -0
  232. package/esm/types.js +0 -0
  233. package/esm/utils.d.mts +44 -0
  234. package/esm/utils.js +155 -0
  235. package/package.json +47 -34
  236. package/configs/base.json +0 -4
  237. package/configs/operations-all.json +0 -24
  238. package/configs/schema-all.json +0 -26
  239. package/docs/README.md +0 -75
  240. package/docs/custom-rules.md +0 -148
  241. package/docs/deprecated-rules.md +0 -21
  242. package/docs/parser-options.md +0 -85
  243. package/docs/parser.md +0 -49
  244. package/docs/rules/alphabetize.md +0 -178
  245. package/docs/rules/description-style.md +0 -54
  246. package/docs/rules/executable-definitions.md +0 -17
  247. package/docs/rules/fields-on-correct-type.md +0 -17
  248. package/docs/rules/fragments-on-composite-type.md +0 -17
  249. package/docs/rules/input-name.md +0 -76
  250. package/docs/rules/known-argument-names.md +0 -17
  251. package/docs/rules/known-directives.md +0 -44
  252. package/docs/rules/known-fragment-names.md +0 -69
  253. package/docs/rules/known-type-names.md +0 -17
  254. package/docs/rules/lone-anonymous-operation.md +0 -17
  255. package/docs/rules/lone-schema-definition.md +0 -17
  256. package/docs/rules/match-document-filename.md +0 -156
  257. package/docs/rules/naming-convention.md +0 -300
  258. package/docs/rules/no-anonymous-operations.md +0 -39
  259. package/docs/rules/no-case-insensitive-enum-values-duplicates.md +0 -43
  260. package/docs/rules/no-deprecated.md +0 -85
  261. package/docs/rules/no-duplicate-fields.md +0 -65
  262. package/docs/rules/no-fragment-cycles.md +0 -17
  263. package/docs/rules/no-hashtag-description.md +0 -59
  264. package/docs/rules/no-root-type.md +0 -53
  265. package/docs/rules/no-scalar-result-type-on-mutation.md +0 -37
  266. package/docs/rules/no-typename-prefix.md +0 -39
  267. package/docs/rules/no-undefined-variables.md +0 -17
  268. package/docs/rules/no-unreachable-types.md +0 -49
  269. package/docs/rules/no-unused-fields.md +0 -62
  270. package/docs/rules/no-unused-fragments.md +0 -17
  271. package/docs/rules/no-unused-variables.md +0 -17
  272. package/docs/rules/one-field-subscriptions.md +0 -17
  273. package/docs/rules/overlapping-fields-can-be-merged.md +0 -17
  274. package/docs/rules/possible-fragment-spread.md +0 -17
  275. package/docs/rules/possible-type-extension.md +0 -15
  276. package/docs/rules/provided-required-arguments.md +0 -17
  277. package/docs/rules/relay-arguments.md +0 -57
  278. package/docs/rules/relay-connection-types.md +0 -42
  279. package/docs/rules/relay-edge-types.md +0 -56
  280. package/docs/rules/relay-page-info.md +0 -32
  281. package/docs/rules/require-deprecation-date.md +0 -56
  282. package/docs/rules/require-deprecation-reason.md +0 -47
  283. package/docs/rules/require-description.md +0 -115
  284. package/docs/rules/require-field-of-type-query-in-mutation-result.md +0 -47
  285. package/docs/rules/require-id-when-available.md +0 -88
  286. package/docs/rules/scalar-leafs.md +0 -17
  287. package/docs/rules/selection-set-depth.md +0 -76
  288. package/docs/rules/strict-id-in-types.md +0 -130
  289. package/docs/rules/unique-argument-names.md +0 -17
  290. package/docs/rules/unique-directive-names-per-location.md +0 -17
  291. package/docs/rules/unique-directive-names.md +0 -17
  292. package/docs/rules/unique-enum-value-names.md +0 -15
  293. package/docs/rules/unique-field-definition-names.md +0 -17
  294. package/docs/rules/unique-fragment-name.md +0 -51
  295. package/docs/rules/unique-input-field-names.md +0 -17
  296. package/docs/rules/unique-operation-name.md +0 -55
  297. package/docs/rules/unique-operation-types.md +0 -17
  298. package/docs/rules/unique-type-names.md +0 -17
  299. package/docs/rules/unique-variable-names.md +0 -17
  300. package/docs/rules/value-literals-of-correct-type.md +0 -17
  301. package/docs/rules/variables-are-input-types.md +0 -17
  302. package/docs/rules/variables-in-allowed-position.md +0 -17
  303. package/estree-converter/converter.d.ts +0 -3
  304. package/estree-converter/index.d.ts +0 -3
  305. package/estree-converter/types.d.ts +0 -40
  306. package/estree-converter/utils.d.ts +0 -13
  307. package/graphql-config.d.ts +0 -3
  308. package/index.d.ts +0 -16
  309. package/index.js +0 -4653
  310. package/index.mjs +0 -4641
  311. package/parser.d.ts +0 -2
  312. package/processor.d.ts +0 -7
  313. package/rules/alphabetize.d.ts +0 -16
  314. package/rules/description-style.d.ts +0 -6
  315. package/rules/graphql-js-validation.d.ts +0 -2
  316. package/rules/index.d.ts +0 -41
  317. package/rules/input-name.d.ts +0 -9
  318. package/rules/match-document-filename.d.ts +0 -18
  319. package/rules/naming-convention.d.ts +0 -37
  320. package/rules/no-anonymous-operations.d.ts +0 -3
  321. package/rules/no-case-insensitive-enum-values-duplicates.d.ts +0 -3
  322. package/rules/no-deprecated.d.ts +0 -3
  323. package/rules/no-duplicate-fields.d.ts +0 -3
  324. package/rules/no-hashtag-description.d.ts +0 -3
  325. package/rules/no-root-type.d.ts +0 -7
  326. package/rules/no-scalar-result-type-on-mutation.d.ts +0 -3
  327. package/rules/no-typename-prefix.d.ts +0 -3
  328. package/rules/no-unreachable-types.d.ts +0 -3
  329. package/rules/no-unused-fields.d.ts +0 -3
  330. package/rules/relay-arguments.d.ts +0 -6
  331. package/rules/relay-connection-types.d.ts +0 -5
  332. package/rules/relay-edge-types.d.ts +0 -8
  333. package/rules/relay-page-info.d.ts +0 -3
  334. package/rules/require-deprecation-date.d.ts +0 -5
  335. package/rules/require-deprecation-reason.d.ts +0 -3
  336. package/rules/require-description.d.ts +0 -11
  337. package/rules/require-field-of-type-query-in-mutation-result.d.ts +0 -3
  338. package/rules/require-id-when-available.d.ts +0 -6
  339. package/rules/selection-set-depth.d.ts +0 -7
  340. package/rules/strict-id-in-types.d.ts +0 -11
  341. package/rules/unique-fragment-name.d.ts +0 -6
  342. package/rules/unique-operation-name.d.ts +0 -3
  343. package/schema.d.ts +0 -3
  344. package/sibling-operations.d.ts +0 -21
  345. package/testkit.d.ts +0 -27
  346. package/types.d.ts +0 -79
  347. package/utils.d.ts +0 -39
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var no_unused_fields_exports = {};
20
+ __export(no_unused_fields_exports, {
21
+ rule: () => rule
22
+ });
23
+ module.exports = __toCommonJS(no_unused_fields_exports);
24
+ var import_graphql = require("graphql");
25
+ var import_utils = require("../utils.js");
26
+ const RULE_ID = "no-unused-fields";
27
+ let usedFieldsCache;
28
+ function getUsedFields(schema, operations) {
29
+ if (usedFieldsCache) {
30
+ return usedFieldsCache;
31
+ }
32
+ const usedFields = /* @__PURE__ */ Object.create(null);
33
+ const typeInfo = new import_graphql.TypeInfo(schema);
34
+ const visitor = (0, import_graphql.visitWithTypeInfo)(typeInfo, {
35
+ Field(node) {
36
+ var _a;
37
+ const fieldDef = typeInfo.getFieldDef();
38
+ if (!fieldDef) {
39
+ return false;
40
+ }
41
+ const parentTypeName = typeInfo.getParentType().name;
42
+ const fieldName = node.name.value;
43
+ (_a = usedFields[parentTypeName]) != null ? _a : usedFields[parentTypeName] = /* @__PURE__ */ new Set();
44
+ usedFields[parentTypeName].add(fieldName);
45
+ }
46
+ });
47
+ const allDocuments = [...operations.getOperations(), ...operations.getFragments()];
48
+ for (const { document } of allDocuments) {
49
+ (0, import_graphql.visit)(document, visitor);
50
+ }
51
+ usedFieldsCache = usedFields;
52
+ return usedFieldsCache;
53
+ }
54
+ const rule = {
55
+ meta: {
56
+ messages: {
57
+ [RULE_ID]: 'Field "{{fieldName}}" is unused'
58
+ },
59
+ docs: {
60
+ description: "Requires all fields to be used at some level by siblings operations.",
61
+ category: "Schema",
62
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
63
+ requiresSiblings: true,
64
+ requiresSchema: true,
65
+ isDisabledForAllConfig: true,
66
+ examples: [
67
+ {
68
+ title: "Incorrect",
69
+ code: (
70
+ /* GraphQL */
71
+ `
72
+ type User {
73
+ id: ID!
74
+ name: String
75
+ someUnusedField: String
76
+ }
77
+
78
+ type Query {
79
+ me: User
80
+ }
81
+
82
+ query {
83
+ me {
84
+ id
85
+ name
86
+ }
87
+ }
88
+ `
89
+ )
90
+ },
91
+ {
92
+ title: "Correct",
93
+ code: (
94
+ /* GraphQL */
95
+ `
96
+ type User {
97
+ id: ID!
98
+ name: String
99
+ }
100
+
101
+ type Query {
102
+ me: User
103
+ }
104
+
105
+ query {
106
+ me {
107
+ id
108
+ name
109
+ }
110
+ }
111
+ `
112
+ )
113
+ }
114
+ ]
115
+ },
116
+ type: "suggestion",
117
+ schema: [],
118
+ hasSuggestions: true
119
+ },
120
+ create(context) {
121
+ const schema = (0, import_utils.requireGraphQLSchemaFromContext)(RULE_ID, context);
122
+ const siblingsOperations = (0, import_utils.requireSiblingsOperations)(RULE_ID, context);
123
+ const usedFields = getUsedFields(schema, siblingsOperations);
124
+ return {
125
+ FieldDefinition(node) {
126
+ var _a;
127
+ const fieldName = node.name.value;
128
+ const parentTypeName = node.parent.name.value;
129
+ const isUsed = (_a = usedFields[parentTypeName]) == null ? void 0 : _a.has(fieldName);
130
+ if (isUsed) {
131
+ return;
132
+ }
133
+ context.report({
134
+ node: node.name,
135
+ messageId: RULE_ID,
136
+ data: { fieldName },
137
+ suggest: [
138
+ {
139
+ desc: `Remove \`${fieldName}\` field`,
140
+ fix(fixer) {
141
+ const sourceCode = context.getSourceCode();
142
+ const tokenBefore = sourceCode.getTokenBefore(node);
143
+ const tokenAfter = sourceCode.getTokenAfter(node);
144
+ const isEmptyType = tokenBefore.type === "{" && tokenAfter.type === "}";
145
+ return fixer.remove(isEmptyType ? node.parent : node);
146
+ }
147
+ }
148
+ ]
149
+ });
150
+ }
151
+ };
152
+ }
153
+ };
154
+ // Annotate the CommonJS export names for ESM import in node:
155
+ 0 && (module.exports = {
156
+ rule
157
+ });
@@ -0,0 +1,29 @@
1
+ import { FromSchema } from 'json-schema-to-ts';
2
+ import { f as GraphQLESLintRule } from '../types-8d5f4ae0.js';
3
+ import '@graphql-tools/utils';
4
+ import 'eslint';
5
+ import 'estree';
6
+ import 'graphql';
7
+ import 'graphql-config';
8
+ import '../estree-converter/types.js';
9
+
10
+ declare const schema: {
11
+ readonly type: "array";
12
+ readonly maxItems: 1;
13
+ readonly items: {
14
+ readonly type: "object";
15
+ readonly additionalProperties: false;
16
+ readonly minProperties: 1;
17
+ readonly properties: {
18
+ readonly includeBoth: {
19
+ readonly type: "boolean";
20
+ readonly default: true;
21
+ readonly description: "Enforce including both forward and backward pagination arguments";
22
+ };
23
+ };
24
+ };
25
+ };
26
+ type RuleOptions = FromSchema<typeof schema>;
27
+ declare const rule: GraphQLESLintRule<RuleOptions, true>;
28
+
29
+ export { RuleOptions, rule };
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var relay_arguments_exports = {};
20
+ __export(relay_arguments_exports, {
21
+ rule: () => rule
22
+ });
23
+ module.exports = __toCommonJS(relay_arguments_exports);
24
+ var import_graphql = require("graphql");
25
+ var import_utils = require("../utils.js");
26
+ const RULE_ID = "relay-arguments";
27
+ const MISSING_ARGUMENTS = "MISSING_ARGUMENTS";
28
+ const schema = {
29
+ type: "array",
30
+ maxItems: 1,
31
+ items: {
32
+ type: "object",
33
+ additionalProperties: false,
34
+ minProperties: 1,
35
+ properties: {
36
+ includeBoth: {
37
+ type: "boolean",
38
+ default: true,
39
+ description: "Enforce including both forward and backward pagination arguments"
40
+ }
41
+ }
42
+ }
43
+ };
44
+ const rule = {
45
+ meta: {
46
+ type: "problem",
47
+ docs: {
48
+ category: "Schema",
49
+ description: [
50
+ "Set of rules to follow Relay specification for Arguments.",
51
+ "",
52
+ "- A field that returns a Connection type must include forward pagination arguments (`first` and `after`), backward pagination arguments (`last` and `before`), or both",
53
+ "",
54
+ "Forward pagination arguments",
55
+ "",
56
+ "- `first` takes a non-negative integer",
57
+ "- `after` takes the Cursor type",
58
+ "",
59
+ "Backward pagination arguments",
60
+ "",
61
+ "- `last` takes a non-negative integer",
62
+ "- `before` takes the Cursor type"
63
+ ].join("\n"),
64
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
65
+ examples: [
66
+ {
67
+ title: "Incorrect",
68
+ code: (
69
+ /* GraphQL */
70
+ `
71
+ type User {
72
+ posts: PostConnection
73
+ }
74
+ `
75
+ )
76
+ },
77
+ {
78
+ title: "Correct",
79
+ code: (
80
+ /* GraphQL */
81
+ `
82
+ type User {
83
+ posts(after: String, first: Int, before: String, last: Int): PostConnection
84
+ }
85
+ `
86
+ )
87
+ }
88
+ ],
89
+ isDisabledForAllConfig: true
90
+ },
91
+ messages: {
92
+ [MISSING_ARGUMENTS]: "A field that returns a Connection type must include forward pagination arguments (`first` and `after`), backward pagination arguments (`last` and `before`), or both."
93
+ },
94
+ schema
95
+ },
96
+ create(context) {
97
+ const schema2 = (0, import_utils.requireGraphQLSchemaFromContext)(RULE_ID, context);
98
+ const { includeBoth = true } = context.options[0] || {};
99
+ return {
100
+ "FieldDefinition > .gqlType Name[value=/Connection$/]"(node) {
101
+ var _a;
102
+ let fieldNode = node.parent;
103
+ while (fieldNode.kind !== import_graphql.Kind.FIELD_DEFINITION) {
104
+ fieldNode = fieldNode.parent;
105
+ }
106
+ const args = Object.fromEntries(
107
+ ((_a = fieldNode.arguments) == null ? void 0 : _a.map((argument) => [argument.name.value, argument])) || []
108
+ );
109
+ const hasForwardPagination = !!(args.first && args.after);
110
+ const hasBackwardPagination = !!(args.last && args.before);
111
+ if (!hasForwardPagination && !hasBackwardPagination) {
112
+ context.report({
113
+ node: fieldNode.name,
114
+ messageId: MISSING_ARGUMENTS
115
+ });
116
+ return;
117
+ }
118
+ function checkField(typeName, argumentName) {
119
+ const argument = args[argumentName];
120
+ const hasArgument = !!argument;
121
+ let type = argument;
122
+ if (hasArgument && type.gqlType.kind === import_graphql.Kind.NON_NULL_TYPE) {
123
+ type = type.gqlType;
124
+ }
125
+ const isAllowedNonNullType = hasArgument && type.gqlType.kind === import_graphql.Kind.NAMED_TYPE && (type.gqlType.name.value === typeName || typeName === "String" && (0, import_graphql.isScalarType)(schema2.getType(type.gqlType.name.value)));
126
+ if (!isAllowedNonNullType) {
127
+ const returnType = typeName === "String" ? "String or Scalar" : typeName;
128
+ context.report({
129
+ node: (argument || fieldNode).name,
130
+ message: hasArgument ? `Argument \`${argumentName}\` must return ${returnType}.` : `Field \`${fieldNode.name.value}\` must contain an argument \`${argumentName}\`, that return ${returnType}.`
131
+ });
132
+ }
133
+ }
134
+ if (includeBoth || args.first || args.after) {
135
+ checkField("Int", "first");
136
+ checkField("String", "after");
137
+ }
138
+ if (includeBoth || args.last || args.before) {
139
+ checkField("Int", "last");
140
+ checkField("String", "before");
141
+ }
142
+ }
143
+ };
144
+ }
145
+ };
146
+ // Annotate the CommonJS export names for ESM import in node:
147
+ 0 && (module.exports = {
148
+ rule
149
+ });
@@ -0,0 +1,13 @@
1
+ import { Kind } from 'graphql';
2
+ import { f as GraphQLESLintRule } from '../types-8d5f4ae0.js';
3
+ import '@graphql-tools/utils';
4
+ import 'eslint';
5
+ import 'estree';
6
+ import 'graphql-config';
7
+ import 'json-schema-to-ts';
8
+ import '../estree-converter/types.js';
9
+
10
+ declare const NON_OBJECT_TYPES: Kind[];
11
+ declare const rule: GraphQLESLintRule;
12
+
13
+ export { NON_OBJECT_TYPES, rule };
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var relay_connection_types_exports = {};
20
+ __export(relay_connection_types_exports, {
21
+ NON_OBJECT_TYPES: () => NON_OBJECT_TYPES,
22
+ rule: () => rule
23
+ });
24
+ module.exports = __toCommonJS(relay_connection_types_exports);
25
+ var import_graphql = require("graphql");
26
+ const MUST_BE_OBJECT_TYPE = "MUST_BE_OBJECT_TYPE";
27
+ const MUST_CONTAIN_FIELD_EDGES = "MUST_CONTAIN_FIELD_EDGES";
28
+ const MUST_CONTAIN_FIELD_PAGE_INFO = "MUST_CONTAIN_FIELD_PAGE_INFO";
29
+ const MUST_HAVE_CONNECTION_SUFFIX = "MUST_HAVE_CONNECTION_SUFFIX";
30
+ const EDGES_FIELD_MUST_RETURN_LIST_TYPE = "EDGES_FIELD_MUST_RETURN_LIST_TYPE";
31
+ const PAGE_INFO_FIELD_MUST_RETURN_NON_NULL_TYPE = "PAGE_INFO_FIELD_MUST_RETURN_NON_NULL_TYPE";
32
+ const NON_OBJECT_TYPES = [
33
+ import_graphql.Kind.SCALAR_TYPE_DEFINITION,
34
+ import_graphql.Kind.UNION_TYPE_DEFINITION,
35
+ import_graphql.Kind.UNION_TYPE_EXTENSION,
36
+ import_graphql.Kind.INPUT_OBJECT_TYPE_DEFINITION,
37
+ import_graphql.Kind.INPUT_OBJECT_TYPE_EXTENSION,
38
+ import_graphql.Kind.ENUM_TYPE_DEFINITION,
39
+ import_graphql.Kind.ENUM_TYPE_EXTENSION,
40
+ import_graphql.Kind.INTERFACE_TYPE_DEFINITION,
41
+ import_graphql.Kind.INTERFACE_TYPE_EXTENSION
42
+ ];
43
+ const notConnectionTypesSelector = `:matches(${NON_OBJECT_TYPES})[name.value=/Connection$/] > .name`;
44
+ const hasEdgesField = (node) => {
45
+ var _a;
46
+ return (_a = node.fields) == null ? void 0 : _a.some((field) => field.name.value === "edges");
47
+ };
48
+ const hasPageInfoField = (node) => {
49
+ var _a;
50
+ return (_a = node.fields) == null ? void 0 : _a.some((field) => field.name.value === "pageInfo");
51
+ };
52
+ const rule = {
53
+ meta: {
54
+ type: "problem",
55
+ docs: {
56
+ category: "Schema",
57
+ description: [
58
+ "Set of rules to follow Relay specification for Connection types.",
59
+ "",
60
+ '- Any type whose name ends in "Connection" is considered by spec to be a `Connection type`',
61
+ "- Connection type must be an Object type",
62
+ "- Connection type must contain a field `edges` that return a list type that wraps an edge type",
63
+ "- Connection type must contain a field `pageInfo` that return a non-null `PageInfo` Object type"
64
+ ].join("\n"),
65
+ url: "https://the-guild.dev/graphql/eslint/rules/relay-connection-types",
66
+ isDisabledForAllConfig: true,
67
+ examples: [
68
+ {
69
+ title: "Incorrect",
70
+ code: (
71
+ /* GraphQL */
72
+ `
73
+ type UserPayload { # should be an Object type with \`Connection\` suffix
74
+ edges: UserEdge! # should return a list type
75
+ pageInfo: PageInfo # should return a non-null \`PageInfo\` Object type
76
+ }
77
+ `
78
+ )
79
+ },
80
+ {
81
+ title: "Correct",
82
+ code: (
83
+ /* GraphQL */
84
+ `
85
+ type UserConnection {
86
+ edges: [UserEdge]
87
+ pageInfo: PageInfo!
88
+ }
89
+ `
90
+ )
91
+ }
92
+ ]
93
+ },
94
+ messages: {
95
+ // Connection types
96
+ [MUST_BE_OBJECT_TYPE]: "Connection type must be an Object type.",
97
+ [MUST_HAVE_CONNECTION_SUFFIX]: "Connection type must have `Connection` suffix.",
98
+ [MUST_CONTAIN_FIELD_EDGES]: "Connection type must contain a field `edges` that return a list type.",
99
+ [MUST_CONTAIN_FIELD_PAGE_INFO]: "Connection type must contain a field `pageInfo` that return a non-null `PageInfo` Object type.",
100
+ [EDGES_FIELD_MUST_RETURN_LIST_TYPE]: "`edges` field must return a list type.",
101
+ [PAGE_INFO_FIELD_MUST_RETURN_NON_NULL_TYPE]: "`pageInfo` field must return a non-null `PageInfo` Object type."
102
+ },
103
+ schema: []
104
+ },
105
+ create(context) {
106
+ return {
107
+ [notConnectionTypesSelector](node) {
108
+ context.report({ node, messageId: MUST_BE_OBJECT_TYPE });
109
+ },
110
+ ":matches(ObjectTypeDefinition, ObjectTypeExtension)[name.value!=/Connection$/]"(node) {
111
+ if (hasEdgesField(node) && hasPageInfoField(node)) {
112
+ context.report({ node: node.name, messageId: MUST_HAVE_CONNECTION_SUFFIX });
113
+ }
114
+ },
115
+ ":matches(ObjectTypeDefinition, ObjectTypeExtension)[name.value=/Connection$/]"(node) {
116
+ if (!hasEdgesField(node)) {
117
+ context.report({ node: node.name, messageId: MUST_CONTAIN_FIELD_EDGES });
118
+ }
119
+ if (!hasPageInfoField(node)) {
120
+ context.report({ node: node.name, messageId: MUST_CONTAIN_FIELD_PAGE_INFO });
121
+ }
122
+ },
123
+ ":matches(ObjectTypeDefinition, ObjectTypeExtension)[name.value=/Connection$/] > FieldDefinition[name.value=edges] > .gqlType"(node) {
124
+ const isListType = node.kind === import_graphql.Kind.LIST_TYPE || node.kind === import_graphql.Kind.NON_NULL_TYPE && node.gqlType.kind === import_graphql.Kind.LIST_TYPE;
125
+ if (!isListType) {
126
+ context.report({ node, messageId: EDGES_FIELD_MUST_RETURN_LIST_TYPE });
127
+ }
128
+ },
129
+ ":matches(ObjectTypeDefinition, ObjectTypeExtension)[name.value=/Connection$/] > FieldDefinition[name.value=pageInfo] > .gqlType"(node) {
130
+ const isNonNullPageInfoType = node.kind === import_graphql.Kind.NON_NULL_TYPE && node.gqlType.kind === import_graphql.Kind.NAMED_TYPE && node.gqlType.name.value === "PageInfo";
131
+ if (!isNonNullPageInfoType) {
132
+ context.report({ node, messageId: PAGE_INFO_FIELD_MUST_RETURN_NON_NULL_TYPE });
133
+ }
134
+ }
135
+ };
136
+ }
137
+ };
138
+ // Annotate the CommonJS export names for ESM import in node:
139
+ 0 && (module.exports = {
140
+ NON_OBJECT_TYPES,
141
+ rule
142
+ });
@@ -0,0 +1,39 @@
1
+ import { FromSchema } from 'json-schema-to-ts';
2
+ import { f as GraphQLESLintRule } from '../types-8d5f4ae0.js';
3
+ import '@graphql-tools/utils';
4
+ import 'eslint';
5
+ import 'estree';
6
+ import 'graphql';
7
+ import 'graphql-config';
8
+ import '../estree-converter/types.js';
9
+
10
+ declare const schema: {
11
+ readonly type: "array";
12
+ readonly maxItems: 1;
13
+ readonly items: {
14
+ readonly type: "object";
15
+ readonly additionalProperties: false;
16
+ readonly minProperties: 1;
17
+ readonly properties: {
18
+ readonly withEdgeSuffix: {
19
+ readonly type: "boolean";
20
+ readonly default: true;
21
+ readonly description: "Edge type name must end in \"Edge\".";
22
+ };
23
+ readonly shouldImplementNode: {
24
+ readonly type: "boolean";
25
+ readonly default: true;
26
+ readonly description: "Edge type's field `node` must implement `Node` interface.";
27
+ };
28
+ readonly listTypeCanWrapOnlyEdgeType: {
29
+ readonly type: "boolean";
30
+ readonly default: true;
31
+ readonly description: "A list type should only wrap an edge type.";
32
+ };
33
+ };
34
+ };
35
+ };
36
+ type RuleOptions = FromSchema<typeof schema>;
37
+ declare const rule: GraphQLESLintRule<RuleOptions, true>;
38
+
39
+ export { RuleOptions, rule };