@graphql-eslint/eslint-plugin 4.0.0-alpha-20220821140530-e968cfc → 4.0.0-alpha-20230810155929-e89edf7

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 (346) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +14 -252
  3. package/cjs/cache.d.ts +12 -0
  4. package/cjs/cache.js +53 -0
  5. package/cjs/configs/index.d.ts +174 -0
  6. package/cjs/configs/index.js +40 -0
  7. package/cjs/configs/operations-all.d.ts +23 -0
  8. package/cjs/configs/operations-all.js +28 -0
  9. package/cjs/configs/operations-recommended.d.ts +54 -0
  10. package/{configs/operations-recommended.json → cjs/configs/operations-recommended.js} +19 -15
  11. package/cjs/configs/schema-all.d.ts +24 -0
  12. package/cjs/configs/schema-all.js +24 -0
  13. package/cjs/configs/schema-recommended.d.ts +67 -0
  14. package/cjs/configs/schema-recommended.js +68 -0
  15. package/cjs/configs/schema-relay.d.ts +12 -0
  16. package/{configs/relay.json → cjs/configs/schema-relay.js} +6 -4
  17. package/cjs/documents.d.ts +6 -0
  18. package/cjs/documents.js +66 -0
  19. package/cjs/estree-converter/converter.d.ts +8 -0
  20. package/cjs/estree-converter/converter.js +70 -0
  21. package/cjs/estree-converter/index.d.ts +8 -0
  22. package/cjs/estree-converter/index.js +23 -0
  23. package/cjs/estree-converter/types.d.ts +42 -0
  24. package/cjs/estree-converter/types.js +14 -0
  25. package/cjs/estree-converter/utils.d.ts +17 -0
  26. package/cjs/estree-converter/utils.js +105 -0
  27. package/cjs/flat-configs.d.ts +307 -0
  28. package/cjs/flat-configs.js +55 -0
  29. package/cjs/graphql-config.d.ts +14 -0
  30. package/cjs/graphql-config.js +65 -0
  31. package/cjs/index.d.ts +28 -0
  32. package/cjs/index.js +41 -0
  33. package/cjs/parser.d.ts +13 -0
  34. package/cjs/parser.js +96 -0
  35. package/cjs/processor.d.ts +13 -0
  36. package/cjs/processor.js +95 -0
  37. package/cjs/rules/alphabetize.d.ts +74 -0
  38. package/cjs/rules/alphabetize.js +323 -0
  39. package/cjs/rules/description-style.d.ts +29 -0
  40. package/cjs/rules/description-style.js +102 -0
  41. package/cjs/rules/graphql-js-validation.d.ts +13 -0
  42. package/cjs/rules/graphql-js-validation.js +595 -0
  43. package/cjs/rules/index.d.ts +127 -0
  44. package/cjs/rules/index.js +62 -0
  45. package/cjs/rules/input-name.d.ts +44 -0
  46. package/cjs/rules/input-name.js +154 -0
  47. package/cjs/rules/lone-executable-definition.d.ts +35 -0
  48. package/cjs/rules/lone-executable-definition.js +105 -0
  49. package/cjs/rules/match-document-filename.d.ts +81 -0
  50. package/cjs/rules/match-document-filename.js +251 -0
  51. package/cjs/rules/naming-convention.d.ts +108 -0
  52. package/cjs/rules/naming-convention.js +416 -0
  53. package/cjs/rules/no-anonymous-operations.d.ts +13 -0
  54. package/cjs/rules/no-anonymous-operations.js +91 -0
  55. package/cjs/rules/no-deprecated.d.ts +13 -0
  56. package/cjs/rules/no-deprecated.js +143 -0
  57. package/cjs/rules/no-duplicate-fields.d.ts +13 -0
  58. package/cjs/rules/no-duplicate-fields.js +136 -0
  59. package/cjs/rules/no-hashtag-description.d.ts +14 -0
  60. package/cjs/rules/no-hashtag-description.js +127 -0
  61. package/cjs/rules/no-one-place-fragments.d.ts +13 -0
  62. package/cjs/rules/no-one-place-fragments.js +101 -0
  63. package/cjs/rules/no-root-type.d.ts +34 -0
  64. package/cjs/rules/no-root-type.js +103 -0
  65. package/cjs/rules/no-scalar-result-type-on-mutation.d.ts +13 -0
  66. package/cjs/rules/no-scalar-result-type-on-mutation.js +88 -0
  67. package/cjs/rules/no-typename-prefix.d.ts +13 -0
  68. package/cjs/rules/no-typename-prefix.js +91 -0
  69. package/cjs/rules/no-unreachable-types.d.ts +13 -0
  70. package/cjs/rules/no-unreachable-types.js +177 -0
  71. package/cjs/rules/no-unused-fields.d.ts +13 -0
  72. package/cjs/rules/no-unused-fields.js +132 -0
  73. package/cjs/rules/relay-arguments.d.ts +30 -0
  74. package/cjs/rules/relay-arguments.js +126 -0
  75. package/cjs/rules/relay-connection-types.d.ts +14 -0
  76. package/cjs/rules/relay-connection-types.js +111 -0
  77. package/cjs/rules/relay-edge-types.d.ts +40 -0
  78. package/cjs/rules/relay-edge-types.js +161 -0
  79. package/cjs/rules/relay-page-info.d.ts +13 -0
  80. package/cjs/rules/relay-page-info.js +98 -0
  81. package/cjs/rules/require-deprecation-date.d.ts +27 -0
  82. package/cjs/rules/require-deprecation-date.js +148 -0
  83. package/cjs/rules/require-deprecation-reason.d.ts +13 -0
  84. package/cjs/rules/require-deprecation-reason.js +85 -0
  85. package/cjs/rules/require-description.d.ts +24 -0
  86. package/cjs/rules/require-description.js +179 -0
  87. package/cjs/rules/require-field-of-type-query-in-mutation-result.d.ts +13 -0
  88. package/cjs/rules/require-field-of-type-query-in-mutation-result.js +87 -0
  89. package/cjs/rules/require-import-fragment.d.ts +13 -0
  90. package/cjs/rules/require-import-fragment.js +148 -0
  91. package/cjs/rules/require-nullable-fields-with-oneof.d.ts +13 -0
  92. package/cjs/rules/require-nullable-fields-with-oneof.js +81 -0
  93. package/cjs/rules/require-nullable-result-in-root.d.ts +13 -0
  94. package/cjs/rules/require-nullable-result-in-root.js +99 -0
  95. package/cjs/rules/require-selections.d.ts +45 -0
  96. package/cjs/rules/require-selections.js +198 -0
  97. package/cjs/rules/require-type-pattern-with-oneof.d.ts +13 -0
  98. package/cjs/rules/require-type-pattern-with-oneof.js +83 -0
  99. package/cjs/rules/selection-set-depth.d.ts +37 -0
  100. package/cjs/rules/selection-set-depth.js +159 -0
  101. package/cjs/rules/strict-id-in-types.d.ts +66 -0
  102. package/cjs/rules/strict-id-in-types.js +168 -0
  103. package/cjs/rules/unique-enum-value-names.d.ts +13 -0
  104. package/cjs/rules/unique-enum-value-names.js +91 -0
  105. package/cjs/rules/unique-fragment-name.d.ts +14 -0
  106. package/cjs/rules/unique-fragment-name.js +106 -0
  107. package/cjs/rules/unique-operation-name.d.ts +13 -0
  108. package/cjs/rules/unique-operation-name.js +93 -0
  109. package/cjs/schema.d.ts +13 -0
  110. package/cjs/schema.js +52 -0
  111. package/{sibling-operations.d.ts → cjs/siblings.d.ts} +9 -6
  112. package/cjs/siblings.js +96 -0
  113. package/cjs/types.d.ts +75 -0
  114. package/cjs/types.js +14 -0
  115. package/cjs/utils.d.ts +45 -0
  116. package/cjs/utils.js +188 -0
  117. package/esm/cache.d.mts +12 -0
  118. package/esm/cache.js +25 -0
  119. package/esm/chunk-U3TKCM4X.js +8 -0
  120. package/esm/configs/index.d.mts +174 -0
  121. package/esm/configs/index.js +16 -0
  122. package/esm/configs/operations-all.d.mts +23 -0
  123. package/esm/configs/operations-all.js +35 -0
  124. package/esm/configs/operations-recommended.d.mts +54 -0
  125. package/esm/configs/operations-recommended.js +61 -0
  126. package/esm/configs/schema-all.d.mts +24 -0
  127. package/esm/configs/schema-all.js +31 -0
  128. package/esm/configs/schema-recommended.d.mts +67 -0
  129. package/esm/configs/schema-recommended.js +75 -0
  130. package/esm/configs/schema-relay.d.mts +12 -0
  131. package/esm/configs/schema-relay.js +18 -0
  132. package/esm/documents.d.mts +6 -0
  133. package/esm/documents.js +41 -0
  134. package/esm/estree-converter/converter.d.mts +8 -0
  135. package/esm/estree-converter/converter.js +56 -0
  136. package/esm/estree-converter/index.d.mts +8 -0
  137. package/esm/estree-converter/index.js +3 -0
  138. package/esm/estree-converter/types.d.mts +42 -0
  139. package/esm/estree-converter/types.js +0 -0
  140. package/esm/estree-converter/utils.d.mts +17 -0
  141. package/esm/estree-converter/utils.js +87 -0
  142. package/esm/flat-configs.d.mts +307 -0
  143. package/esm/flat-configs.js +36 -0
  144. package/esm/graphql-config.d.mts +14 -0
  145. package/esm/graphql-config.js +39 -0
  146. package/esm/index.d.mts +28 -0
  147. package/esm/index.js +18 -0
  148. package/esm/package.json +1 -0
  149. package/esm/parser.d.mts +13 -0
  150. package/esm/parser.js +76 -0
  151. package/esm/processor.d.mts +13 -0
  152. package/esm/processor.js +81 -0
  153. package/esm/rules/alphabetize.d.mts +74 -0
  154. package/esm/rules/alphabetize.js +299 -0
  155. package/esm/rules/description-style.d.mts +29 -0
  156. package/esm/rules/description-style.js +82 -0
  157. package/esm/rules/graphql-js-validation.d.mts +13 -0
  158. package/esm/rules/graphql-js-validation.js +618 -0
  159. package/esm/rules/index.d.mts +127 -0
  160. package/esm/rules/index.js +76 -0
  161. package/esm/rules/input-name.d.mts +44 -0
  162. package/esm/rules/input-name.js +136 -0
  163. package/esm/rules/lone-executable-definition.d.mts +35 -0
  164. package/esm/rules/lone-executable-definition.js +86 -0
  165. package/esm/rules/match-document-filename.d.mts +81 -0
  166. package/esm/rules/match-document-filename.js +237 -0
  167. package/esm/rules/naming-convention.d.mts +108 -0
  168. package/esm/rules/naming-convention.js +403 -0
  169. package/esm/rules/no-anonymous-operations.d.mts +13 -0
  170. package/esm/rules/no-anonymous-operations.js +72 -0
  171. package/esm/rules/no-deprecated.d.mts +13 -0
  172. package/esm/rules/no-deprecated.js +124 -0
  173. package/esm/rules/no-duplicate-fields.d.mts +13 -0
  174. package/esm/rules/no-duplicate-fields.js +116 -0
  175. package/esm/rules/no-hashtag-description.d.mts +14 -0
  176. package/esm/rules/no-hashtag-description.js +107 -0
  177. package/esm/rules/no-one-place-fragments.d.mts +13 -0
  178. package/esm/rules/no-one-place-fragments.js +83 -0
  179. package/esm/rules/no-root-type.d.mts +34 -0
  180. package/esm/rules/no-root-type.js +83 -0
  181. package/esm/rules/no-scalar-result-type-on-mutation.d.mts +13 -0
  182. package/esm/rules/no-scalar-result-type-on-mutation.js +69 -0
  183. package/esm/rules/no-typename-prefix.d.mts +13 -0
  184. package/esm/rules/no-typename-prefix.js +71 -0
  185. package/esm/rules/no-unreachable-types.d.mts +13 -0
  186. package/esm/rules/no-unreachable-types.js +156 -0
  187. package/esm/rules/no-unused-fields.d.mts +13 -0
  188. package/esm/rules/no-unused-fields.js +113 -0
  189. package/esm/rules/relay-arguments.d.mts +30 -0
  190. package/esm/rules/relay-arguments.js +107 -0
  191. package/esm/rules/relay-connection-types.d.mts +14 -0
  192. package/esm/rules/relay-connection-types.js +90 -0
  193. package/esm/rules/relay-edge-types.d.mts +40 -0
  194. package/esm/rules/relay-edge-types.js +148 -0
  195. package/esm/rules/relay-page-info.d.mts +13 -0
  196. package/esm/rules/relay-page-info.js +80 -0
  197. package/esm/rules/require-deprecation-date.d.mts +27 -0
  198. package/esm/rules/require-deprecation-date.js +129 -0
  199. package/esm/rules/require-deprecation-reason.d.mts +13 -0
  200. package/esm/rules/require-deprecation-reason.js +66 -0
  201. package/esm/rules/require-description.d.mts +24 -0
  202. package/esm/rules/require-description.js +165 -0
  203. package/esm/rules/require-field-of-type-query-in-mutation-result.d.mts +13 -0
  204. package/esm/rules/require-field-of-type-query-in-mutation-result.js +68 -0
  205. package/esm/rules/require-import-fragment.d.mts +13 -0
  206. package/esm/rules/require-import-fragment.js +121 -0
  207. package/esm/rules/require-nullable-fields-with-oneof.d.mts +13 -0
  208. package/esm/rules/require-nullable-fields-with-oneof.js +62 -0
  209. package/esm/rules/require-nullable-result-in-root.d.mts +13 -0
  210. package/esm/rules/require-nullable-result-in-root.js +80 -0
  211. package/esm/rules/require-selections.d.mts +45 -0
  212. package/esm/rules/require-selections.js +194 -0
  213. package/esm/rules/require-type-pattern-with-oneof.d.mts +13 -0
  214. package/esm/rules/require-type-pattern-with-oneof.js +63 -0
  215. package/esm/rules/selection-set-depth.d.mts +37 -0
  216. package/esm/rules/selection-set-depth.js +133 -0
  217. package/esm/rules/strict-id-in-types.d.mts +66 -0
  218. package/esm/rules/strict-id-in-types.js +155 -0
  219. package/esm/rules/unique-enum-value-names.d.mts +13 -0
  220. package/esm/rules/unique-enum-value-names.js +72 -0
  221. package/esm/rules/unique-fragment-name.d.mts +14 -0
  222. package/esm/rules/unique-fragment-name.js +87 -0
  223. package/esm/rules/unique-operation-name.d.mts +13 -0
  224. package/esm/rules/unique-operation-name.js +73 -0
  225. package/esm/schema.d.mts +13 -0
  226. package/esm/schema.js +27 -0
  227. package/esm/siblings.d.mts +24 -0
  228. package/esm/siblings.js +80 -0
  229. package/esm/types.d.mts +75 -0
  230. package/esm/types.js +0 -0
  231. package/esm/utils.d.mts +45 -0
  232. package/esm/utils.js +144 -0
  233. package/index.browser.mjs +5323 -0
  234. package/package.json +43 -35
  235. package/configs/base.json +0 -4
  236. package/configs/operations-all.json +0 -24
  237. package/configs/schema-all.json +0 -26
  238. package/configs/schema-recommended.json +0 -49
  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/testkit.d.ts +0 -27
  345. package/types.d.ts +0 -79
  346. package/utils.d.ts +0 -39
@@ -0,0 +1,37 @@
1
+ import { FromSchema } from 'json-schema-to-ts';
2
+ import { GraphQLESLintRule } from '../types.mjs';
3
+ import 'eslint';
4
+ import 'estree';
5
+ import 'graphql';
6
+ import '../siblings.mjs';
7
+ import '@graphql-tools/utils';
8
+ import '../estree-converter/types.mjs';
9
+ import 'graphql-config';
10
+
11
+ declare const schema: {
12
+ readonly type: "array";
13
+ readonly minItems: 1;
14
+ readonly maxItems: 1;
15
+ readonly items: {
16
+ readonly type: "object";
17
+ readonly additionalProperties: false;
18
+ readonly required: readonly ["maxDepth"];
19
+ readonly properties: {
20
+ readonly maxDepth: {
21
+ readonly type: "number";
22
+ };
23
+ readonly ignore: {
24
+ readonly type: "array";
25
+ readonly uniqueItems: true;
26
+ readonly minItems: 1;
27
+ readonly items: {
28
+ readonly type: "string";
29
+ };
30
+ };
31
+ };
32
+ };
33
+ };
34
+ type RuleOptions = FromSchema<typeof schema>;
35
+ declare const rule: GraphQLESLintRule<RuleOptions>;
36
+
37
+ export { RuleOptions, rule };
@@ -0,0 +1,133 @@
1
+ import "../chunk-U3TKCM4X.js";
2
+ import { Kind } from "graphql";
3
+ import depthLimit from "graphql-depth-limit";
4
+ import { ARRAY_DEFAULT_OPTIONS, logger, requireSiblingsOperations } from "../utils.js";
5
+ const RULE_ID = "selection-set-depth", schema = {
6
+ type: "array",
7
+ minItems: 1,
8
+ maxItems: 1,
9
+ items: {
10
+ type: "object",
11
+ additionalProperties: !1,
12
+ required: ["maxDepth"],
13
+ properties: {
14
+ maxDepth: {
15
+ type: "number"
16
+ },
17
+ ignore: ARRAY_DEFAULT_OPTIONS
18
+ }
19
+ }
20
+ }, rule = {
21
+ meta: {
22
+ type: "suggestion",
23
+ hasSuggestions: !0,
24
+ docs: {
25
+ category: "Operations",
26
+ description: "Limit the complexity of the GraphQL operations solely by their depth. Based on [graphql-depth-limit](https://npmjs.com/package/graphql-depth-limit).",
27
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
28
+ requiresSiblings: !0,
29
+ examples: [
30
+ {
31
+ title: "Incorrect",
32
+ usage: [{ maxDepth: 1 }],
33
+ code: `
34
+ query deep2 {
35
+ viewer { # Level 0
36
+ albums { # Level 1
37
+ title # Level 2
38
+ }
39
+ }
40
+ }
41
+ `
42
+ },
43
+ {
44
+ title: "Correct",
45
+ usage: [{ maxDepth: 4 }],
46
+ code: `
47
+ query deep2 {
48
+ viewer { # Level 0
49
+ albums { # Level 1
50
+ title # Level 2
51
+ }
52
+ }
53
+ }
54
+ `
55
+ },
56
+ {
57
+ title: "Correct (ignored field)",
58
+ usage: [{ maxDepth: 1, ignore: ["albums"] }],
59
+ code: `
60
+ query deep2 {
61
+ viewer { # Level 0
62
+ albums { # Level 1
63
+ title # Level 2
64
+ }
65
+ }
66
+ }
67
+ `
68
+ }
69
+ ],
70
+ recommended: !0,
71
+ configOptions: [{ maxDepth: 7 }]
72
+ },
73
+ schema
74
+ },
75
+ create(context) {
76
+ let siblings = null;
77
+ try {
78
+ siblings = requireSiblingsOperations(RULE_ID, context);
79
+ } catch {
80
+ logger.warn(
81
+ `Rule "${RULE_ID}" works best with siblings operations loaded. For more info: https://bit.ly/graphql-eslint-operations`
82
+ );
83
+ }
84
+ const { maxDepth, ignore = [] } = context.options[0], checkFn = depthLimit(maxDepth, { ignore });
85
+ return {
86
+ "OperationDefinition, FragmentDefinition"(node) {
87
+ try {
88
+ const rawNode = node.rawNode(), fragmentsInUse = siblings ? siblings.getFragmentsInUse(rawNode) : [], document = {
89
+ kind: Kind.DOCUMENT,
90
+ definitions: [rawNode, ...fragmentsInUse]
91
+ };
92
+ checkFn({
93
+ getDocument: () => document,
94
+ reportError(error) {
95
+ const { line, column } = error.locations[0], token = context.getAncestors()[0].tokens.find(
96
+ (token2) => token2.loc.start.line === line && token2.loc.start.column === column - 1
97
+ );
98
+ context.report({
99
+ loc: {
100
+ line,
101
+ column: column - 1
102
+ },
103
+ message: error.message,
104
+ // Don't provide suggestions for fragment that can be in a separate file
105
+ ...token && {
106
+ suggest: [
107
+ {
108
+ desc: "Remove selections",
109
+ fix(fixer) {
110
+ const foundNode = context.getSourceCode().getNodeByRangeIndex(token.range[0]), parentNode = foundNode.parent.parent;
111
+ return fixer.remove(
112
+ foundNode.kind === "Name" ? parentNode.parent : parentNode
113
+ );
114
+ }
115
+ }
116
+ ]
117
+ }
118
+ });
119
+ }
120
+ });
121
+ } catch (e) {
122
+ logger.warn(
123
+ `Rule "${RULE_ID}" check failed due to a missing siblings operations. For more info: https://bit.ly/graphql-eslint-operations`,
124
+ e
125
+ );
126
+ }
127
+ }
128
+ };
129
+ }
130
+ };
131
+ export {
132
+ rule
133
+ };
@@ -0,0 +1,66 @@
1
+ import { FromSchema } from 'json-schema-to-ts';
2
+ import { GraphQLESLintRule } from '../types.mjs';
3
+ import 'eslint';
4
+ import 'estree';
5
+ import 'graphql';
6
+ import '../siblings.mjs';
7
+ import '@graphql-tools/utils';
8
+ import '../estree-converter/types.mjs';
9
+ import 'graphql-config';
10
+
11
+ declare const schema: {
12
+ readonly type: "array";
13
+ readonly maxItems: 1;
14
+ readonly items: {
15
+ readonly type: "object";
16
+ readonly additionalProperties: false;
17
+ readonly properties: {
18
+ readonly acceptedIdNames: {
19
+ readonly default: readonly ["id"];
20
+ readonly type: "array";
21
+ readonly uniqueItems: true;
22
+ readonly minItems: 1;
23
+ readonly items: {
24
+ readonly type: "string";
25
+ };
26
+ };
27
+ readonly acceptedIdTypes: {
28
+ readonly default: readonly ["ID"];
29
+ readonly type: "array";
30
+ readonly uniqueItems: true;
31
+ readonly minItems: 1;
32
+ readonly items: {
33
+ readonly type: "string";
34
+ };
35
+ };
36
+ readonly exceptions: {
37
+ readonly type: "object";
38
+ readonly additionalProperties: false;
39
+ readonly properties: {
40
+ readonly types: {
41
+ readonly description: "This is used to exclude types with names that match one of the specified values.";
42
+ readonly type: "array";
43
+ readonly uniqueItems: true;
44
+ readonly minItems: 1;
45
+ readonly items: {
46
+ readonly type: "string";
47
+ };
48
+ };
49
+ readonly suffixes: {
50
+ readonly description: "This is used to exclude types with names with suffixes that match one of the specified values.";
51
+ readonly type: "array";
52
+ readonly uniqueItems: true;
53
+ readonly minItems: 1;
54
+ readonly items: {
55
+ readonly type: "string";
56
+ };
57
+ };
58
+ };
59
+ };
60
+ };
61
+ };
62
+ };
63
+ type RuleOptions = FromSchema<typeof schema>;
64
+ declare const rule: GraphQLESLintRule<RuleOptions>;
65
+
66
+ export { RuleOptions, rule };
@@ -0,0 +1,155 @@
1
+ import "../chunk-U3TKCM4X.js";
2
+ import { Kind } from "graphql";
3
+ import {
4
+ ARRAY_DEFAULT_OPTIONS,
5
+ displayNodeName,
6
+ englishJoinWords,
7
+ requireGraphQLSchemaFromContext,
8
+ truthy
9
+ } from "../utils.js";
10
+ const RULE_ID = "strict-id-in-types", schema = {
11
+ type: "array",
12
+ maxItems: 1,
13
+ items: {
14
+ type: "object",
15
+ additionalProperties: !1,
16
+ properties: {
17
+ acceptedIdNames: {
18
+ ...ARRAY_DEFAULT_OPTIONS,
19
+ default: ["id"]
20
+ },
21
+ acceptedIdTypes: {
22
+ ...ARRAY_DEFAULT_OPTIONS,
23
+ default: ["ID"]
24
+ },
25
+ exceptions: {
26
+ type: "object",
27
+ additionalProperties: !1,
28
+ properties: {
29
+ types: {
30
+ ...ARRAY_DEFAULT_OPTIONS,
31
+ description: "This is used to exclude types with names that match one of the specified values."
32
+ },
33
+ suffixes: {
34
+ ...ARRAY_DEFAULT_OPTIONS,
35
+ description: "This is used to exclude types with names with suffixes that match one of the specified values."
36
+ }
37
+ }
38
+ }
39
+ }
40
+ }
41
+ }, rule = {
42
+ meta: {
43
+ type: "suggestion",
44
+ docs: {
45
+ description: "Requires output types to have one unique identifier unless they do not have a logical one. Exceptions can be used to ignore output types that do not have unique identifiers.",
46
+ category: "Schema",
47
+ recommended: !0,
48
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
49
+ requiresSchema: !0,
50
+ examples: [
51
+ {
52
+ title: "Incorrect",
53
+ usage: [
54
+ {
55
+ acceptedIdNames: ["id", "_id"],
56
+ acceptedIdTypes: ["ID"],
57
+ exceptions: { suffixes: ["Payload"] }
58
+ }
59
+ ],
60
+ code: (
61
+ /* GraphQL */
62
+ `
63
+ # Incorrect field name
64
+ type InvalidFieldName {
65
+ key: ID!
66
+ }
67
+
68
+ # Incorrect field type
69
+ type InvalidFieldType {
70
+ id: String!
71
+ }
72
+
73
+ # Incorrect exception suffix
74
+ type InvalidSuffixResult {
75
+ data: String!
76
+ }
77
+
78
+ # Too many unique identifiers. Must only contain one.
79
+ type InvalidFieldName {
80
+ id: ID!
81
+ _id: ID!
82
+ }
83
+ `
84
+ )
85
+ },
86
+ {
87
+ title: "Correct",
88
+ usage: [
89
+ {
90
+ acceptedIdNames: ["id", "_id"],
91
+ acceptedIdTypes: ["ID"],
92
+ exceptions: { types: ["Error"], suffixes: ["Payload"] }
93
+ }
94
+ ],
95
+ code: (
96
+ /* GraphQL */
97
+ `
98
+ type User {
99
+ id: ID!
100
+ }
101
+
102
+ type Post {
103
+ _id: ID!
104
+ }
105
+
106
+ type CreateUserPayload {
107
+ data: String!
108
+ }
109
+
110
+ type Error {
111
+ message: String!
112
+ }
113
+ `
114
+ )
115
+ }
116
+ ]
117
+ },
118
+ schema
119
+ },
120
+ create(context) {
121
+ const options = {
122
+ acceptedIdNames: ["id"],
123
+ acceptedIdTypes: ["ID"],
124
+ exceptions: {},
125
+ ...context.options[0]
126
+ }, schema2 = requireGraphQLSchemaFromContext(RULE_ID, context);
127
+ return {
128
+ [`ObjectTypeDefinition[name.value!=/^(${[
129
+ schema2.getQueryType(),
130
+ schema2.getMutationType(),
131
+ schema2.getSubscriptionType()
132
+ ].filter(truthy).map((type) => type.name).join("|")})$/]`](node) {
133
+ const typeName = node.name.value;
134
+ if (options.exceptions.types?.includes(typeName) || options.exceptions.suffixes?.some((suffix) => typeName.endsWith(suffix)))
135
+ return;
136
+ if (node.fields?.filter((field) => {
137
+ const fieldNode = field.rawNode(), isValidIdName = options.acceptedIdNames.includes(fieldNode.name.value);
138
+ let isValidIdType = !1;
139
+ return fieldNode.type.kind === Kind.NON_NULL_TYPE && fieldNode.type.type.kind === Kind.NAMED_TYPE && (isValidIdType = options.acceptedIdTypes.includes(fieldNode.type.type.name.value)), isValidIdName && isValidIdType;
140
+ })?.length !== 1) {
141
+ const pluralNamesSuffix = options.acceptedIdNames.length > 1 ? "s" : "", pluralTypesSuffix = options.acceptedIdTypes.length > 1 ? "s" : "";
142
+ context.report({
143
+ node: node.name,
144
+ message: `${displayNodeName(node)} must have exactly one non-nullable unique identifier.
145
+ Accepted name${pluralNamesSuffix}: ${englishJoinWords(options.acceptedIdNames)}.
146
+ Accepted type${pluralTypesSuffix}: ${englishJoinWords(options.acceptedIdTypes)}.`
147
+ });
148
+ }
149
+ }
150
+ };
151
+ }
152
+ };
153
+ export {
154
+ rule
155
+ };
@@ -0,0 +1,13 @@
1
+ import { GraphQLESLintRule } from '../types.mjs';
2
+ import 'eslint';
3
+ import 'estree';
4
+ import 'graphql';
5
+ import 'json-schema-to-ts';
6
+ import '../siblings.mjs';
7
+ import '@graphql-tools/utils';
8
+ import '../estree-converter/types.mjs';
9
+ import 'graphql-config';
10
+
11
+ declare const rule: GraphQLESLintRule;
12
+
13
+ export { rule };
@@ -0,0 +1,72 @@
1
+ import "../chunk-U3TKCM4X.js";
2
+ import { Kind } from "graphql";
3
+ import { getNodeName } from "../utils.js";
4
+ const rule = {
5
+ meta: {
6
+ type: "suggestion",
7
+ hasSuggestions: !0,
8
+ docs: {
9
+ url: "https://the-guild.dev/graphql/eslint/rules/unique-enum-value-names",
10
+ category: "Schema",
11
+ recommended: !0,
12
+ description: `A GraphQL enum type is only valid if all its values are uniquely named.
13
+ > This rule disallows case-insensitive enum values duplicates too.`,
14
+ examples: [
15
+ {
16
+ title: "Incorrect",
17
+ code: (
18
+ /* GraphQL */
19
+ `
20
+ enum MyEnum {
21
+ Value
22
+ VALUE
23
+ ValuE
24
+ }
25
+ `
26
+ )
27
+ },
28
+ {
29
+ title: "Correct",
30
+ code: (
31
+ /* GraphQL */
32
+ `
33
+ enum MyEnum {
34
+ Value1
35
+ Value2
36
+ Value3
37
+ }
38
+ `
39
+ )
40
+ }
41
+ ]
42
+ },
43
+ schema: []
44
+ },
45
+ create(context) {
46
+ return {
47
+ [[Kind.ENUM_TYPE_DEFINITION, Kind.ENUM_TYPE_EXTENSION].join(",")](node) {
48
+ const duplicates = node.values?.filter(
49
+ (item, index, array) => array.findIndex((v) => v.name.value.toLowerCase() === item.name.value.toLowerCase()) !== index
50
+ );
51
+ for (const duplicate of duplicates || []) {
52
+ const enumName = duplicate.name.value;
53
+ context.report({
54
+ node: duplicate.name,
55
+ message: `Unexpected case-insensitive enum values duplicates for ${getNodeName(
56
+ duplicate
57
+ )}`,
58
+ suggest: [
59
+ {
60
+ desc: `Remove \`${enumName}\` enum value`,
61
+ fix: (fixer) => fixer.remove(duplicate)
62
+ }
63
+ ]
64
+ });
65
+ }
66
+ }
67
+ };
68
+ }
69
+ };
70
+ export {
71
+ rule
72
+ };
@@ -0,0 +1,14 @@
1
+ import { ExecutableDefinitionNode } from 'graphql';
2
+ import { GraphQLESTreeNode } from '../estree-converter/types.mjs';
3
+ import { GraphQLESLintRuleContext, GraphQLESLintRule } from '../types.mjs';
4
+ import 'eslint';
5
+ import 'estree';
6
+ import 'json-schema-to-ts';
7
+ import '../siblings.mjs';
8
+ import '@graphql-tools/utils';
9
+ import 'graphql-config';
10
+
11
+ declare const checkNode: (context: GraphQLESLintRuleContext, node: GraphQLESTreeNode<ExecutableDefinitionNode>, ruleId: string) => void;
12
+ declare const rule: GraphQLESLintRule;
13
+
14
+ export { checkNode, rule };
@@ -0,0 +1,87 @@
1
+ import "../chunk-U3TKCM4X.js";
2
+ import { relative } from "node:path";
3
+ import { Kind } from "graphql";
4
+ import { CWD, normalizePath, requireSiblingsOperations, VIRTUAL_DOCUMENT_REGEX } from "../utils.js";
5
+ const RULE_ID = "unique-fragment-name", checkNode = (context, node, ruleId) => {
6
+ const documentName = node.name.value, siblings = requireSiblingsOperations(ruleId, context), siblingDocuments = node.kind === Kind.FRAGMENT_DEFINITION ? siblings.getFragment(documentName) : siblings.getOperation(documentName), filepath = context.filename, conflictingDocuments = siblingDocuments.filter((f) => {
7
+ const isSameName = f.document.name?.value === documentName, isSamePath = normalizePath(f.filePath) === normalizePath(filepath);
8
+ return isSameName && !isSamePath;
9
+ });
10
+ conflictingDocuments.length > 0 && context.report({
11
+ messageId: ruleId,
12
+ data: {
13
+ documentName,
14
+ summary: conflictingDocuments.map((f) => ` ${relative(CWD, f.filePath.replace(VIRTUAL_DOCUMENT_REGEX, ""))}`).join(`
15
+ `)
16
+ },
17
+ // @ts-expect-error name will exist
18
+ node: node.name
19
+ });
20
+ }, rule = {
21
+ meta: {
22
+ type: "suggestion",
23
+ docs: {
24
+ category: "Operations",
25
+ description: "Enforce unique fragment names across your project.",
26
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
27
+ requiresSiblings: !0,
28
+ recommended: !0,
29
+ examples: [
30
+ {
31
+ title: "Incorrect",
32
+ code: (
33
+ /* GraphQL */
34
+ `
35
+ # user.fragment.graphql
36
+ fragment UserFields on User {
37
+ id
38
+ name
39
+ fullName
40
+ }
41
+
42
+ # user-fields.graphql
43
+ fragment UserFields on User {
44
+ id
45
+ }
46
+ `
47
+ )
48
+ },
49
+ {
50
+ title: "Correct",
51
+ code: (
52
+ /* GraphQL */
53
+ `
54
+ # user.fragment.graphql
55
+ fragment AllUserFields on User {
56
+ id
57
+ name
58
+ fullName
59
+ }
60
+
61
+ # user-fields.graphql
62
+ fragment UserFields on User {
63
+ id
64
+ }
65
+ `
66
+ )
67
+ }
68
+ ]
69
+ },
70
+ messages: {
71
+ [RULE_ID]: `Fragment named "{{ documentName }}" already defined in:
72
+ {{ summary }}`
73
+ },
74
+ schema: []
75
+ },
76
+ create(context) {
77
+ return {
78
+ FragmentDefinition(node) {
79
+ checkNode(context, node, RULE_ID);
80
+ }
81
+ };
82
+ }
83
+ };
84
+ export {
85
+ checkNode,
86
+ rule
87
+ };
@@ -0,0 +1,13 @@
1
+ import { GraphQLESLintRule } from '../types.mjs';
2
+ import 'eslint';
3
+ import 'estree';
4
+ import 'graphql';
5
+ import 'json-schema-to-ts';
6
+ import '../siblings.mjs';
7
+ import '@graphql-tools/utils';
8
+ import '../estree-converter/types.mjs';
9
+ import 'graphql-config';
10
+
11
+ declare const rule: GraphQLESLintRule;
12
+
13
+ export { rule };
@@ -0,0 +1,73 @@
1
+ import "../chunk-U3TKCM4X.js";
2
+ import { checkNode } from "./unique-fragment-name.js";
3
+ const RULE_ID = "unique-operation-name", rule = {
4
+ meta: {
5
+ type: "suggestion",
6
+ docs: {
7
+ category: "Operations",
8
+ description: "Enforce unique operation names across your project.",
9
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
10
+ requiresSiblings: !0,
11
+ recommended: !0,
12
+ examples: [
13
+ {
14
+ title: "Incorrect",
15
+ code: (
16
+ /* GraphQL */
17
+ `
18
+ # foo.query.graphql
19
+ query user {
20
+ user {
21
+ id
22
+ }
23
+ }
24
+
25
+ # bar.query.graphql
26
+ query user {
27
+ me {
28
+ id
29
+ }
30
+ }
31
+ `
32
+ )
33
+ },
34
+ {
35
+ title: "Correct",
36
+ code: (
37
+ /* GraphQL */
38
+ `
39
+ # foo.query.graphql
40
+ query user {
41
+ user {
42
+ id
43
+ }
44
+ }
45
+
46
+ # bar.query.graphql
47
+ query me {
48
+ me {
49
+ id
50
+ }
51
+ }
52
+ `
53
+ )
54
+ }
55
+ ]
56
+ },
57
+ messages: {
58
+ [RULE_ID]: `Operation named "{{ documentName }}" already defined in:
59
+ {{ summary }}`
60
+ },
61
+ schema: []
62
+ },
63
+ create(context) {
64
+ return {
65
+ "OperationDefinition[name!=undefined]"(node) {
66
+ checkNode(context, node, RULE_ID);
67
+ }
68
+ };
69
+ }
70
+ };
71
+ export {
72
+ rule
73
+ };
@@ -0,0 +1,13 @@
1
+ import { GraphQLProjectConfig } from 'graphql-config';
2
+ import { Schema } from './types.mjs';
3
+ import 'eslint';
4
+ import 'estree';
5
+ import 'graphql';
6
+ import 'json-schema-to-ts';
7
+ import './siblings.mjs';
8
+ import '@graphql-tools/utils';
9
+ import './estree-converter/types.mjs';
10
+
11
+ declare function getSchema(project: GraphQLProjectConfig): Schema;
12
+
13
+ export { getSchema };