@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,133 @@
1
+ import "../chunk-BMTV3EA2.js";
2
+ import path from "path";
3
+ import { requireSiblingsOperations } from "../utils.js";
4
+ const RULE_ID = "require-import-fragment";
5
+ const SUGGESTION_ID = "add-import-expression";
6
+ const rule = {
7
+ meta: {
8
+ type: "suggestion",
9
+ docs: {
10
+ category: "Operations",
11
+ description: "Require fragments to be imported via an import expression.",
12
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
13
+ examples: [
14
+ {
15
+ title: "Incorrect",
16
+ code: (
17
+ /* GraphQL */
18
+ `
19
+ query {
20
+ user {
21
+ ...UserFields
22
+ }
23
+ }
24
+ `
25
+ )
26
+ },
27
+ {
28
+ title: "Incorrect",
29
+ code: (
30
+ /* GraphQL */
31
+ `
32
+ # import 'post-fields.fragment.graphql'
33
+ query {
34
+ user {
35
+ ...UserFields
36
+ }
37
+ }
38
+ `
39
+ )
40
+ },
41
+ {
42
+ title: "Incorrect",
43
+ code: (
44
+ /* GraphQL */
45
+ `
46
+ # import UserFields from 'post-fields.fragment.graphql'
47
+ query {
48
+ user {
49
+ ...UserFields
50
+ }
51
+ }
52
+ `
53
+ )
54
+ },
55
+ {
56
+ title: "Correct",
57
+ code: (
58
+ /* GraphQL */
59
+ `
60
+ # import UserFields from 'user-fields.fragment.graphql'
61
+ query {
62
+ user {
63
+ ...UserFields
64
+ }
65
+ }
66
+ `
67
+ )
68
+ }
69
+ ],
70
+ requiresSiblings: true,
71
+ isDisabledForAllConfig: true
72
+ },
73
+ hasSuggestions: true,
74
+ messages: {
75
+ [RULE_ID]: 'Expected "{{fragmentName}}" fragment to be imported.',
76
+ [SUGGESTION_ID]: 'Add import expression for "{{fragmentName}}".'
77
+ },
78
+ schema: []
79
+ },
80
+ create(context) {
81
+ const comments = context.getSourceCode().getAllComments();
82
+ const siblings = requireSiblingsOperations(RULE_ID, context);
83
+ const filePath = context.getFilename();
84
+ return {
85
+ "FragmentSpread > .name"(node) {
86
+ var _a;
87
+ const fragmentName = node.value;
88
+ const fragmentsFromSiblings = siblings.getFragment(fragmentName);
89
+ for (const comment of comments) {
90
+ if (comment.type !== "Line")
91
+ continue;
92
+ const isPossibleImported = new RegExp(
93
+ `^\\s*import\\s+(${fragmentName}\\s+from\\s+)?['"]`
94
+ ).test(comment.value);
95
+ if (!isPossibleImported)
96
+ continue;
97
+ const extractedImportPath = (_a = comment.value.match(/(["'])((?:\1|.)*?)\1/)) == null ? void 0 : _a[2];
98
+ if (!extractedImportPath)
99
+ continue;
100
+ const importPath = path.join(path.dirname(filePath), extractedImportPath);
101
+ const hasInSiblings = fragmentsFromSiblings.some(
102
+ (source) => source.filePath === importPath
103
+ );
104
+ if (hasInSiblings)
105
+ return;
106
+ }
107
+ const fragmentInSameFile = fragmentsFromSiblings.some(
108
+ (source) => source.filePath === filePath
109
+ );
110
+ if (fragmentInSameFile)
111
+ return;
112
+ const suggestedFilePaths = fragmentsFromSiblings.length ? fragmentsFromSiblings.map((o) => path.relative(path.dirname(filePath), o.filePath)) : ["CHANGE_ME.graphql"];
113
+ context.report({
114
+ node,
115
+ messageId: RULE_ID,
116
+ data: { fragmentName },
117
+ suggest: suggestedFilePaths.map((suggestedPath) => ({
118
+ messageId: SUGGESTION_ID,
119
+ data: { fragmentName },
120
+ fix: (fixer) => fixer.insertTextBeforeRange(
121
+ [0, 0],
122
+ `# import ${fragmentName} from '${suggestedPath}'
123
+ `
124
+ )
125
+ }))
126
+ });
127
+ }
128
+ };
129
+ }
130
+ };
131
+ export {
132
+ rule
133
+ };
@@ -0,0 +1,12 @@
1
+ import { f as GraphQLESLintRule } from '../types-ace77d86.js';
2
+ import '@graphql-tools/utils';
3
+ import 'eslint';
4
+ import 'estree';
5
+ import 'graphql';
6
+ import 'graphql-config';
7
+ import 'json-schema-to-ts';
8
+ import '../estree-converter/types.mjs';
9
+
10
+ declare const rule: GraphQLESLintRule;
11
+
12
+ export { rule };
@@ -0,0 +1,69 @@
1
+ import "../chunk-BMTV3EA2.js";
2
+ import { Kind } from "graphql";
3
+ import { getNodeName } from "../utils.js";
4
+ const RULE_ID = "require-nullable-fields-with-oneof";
5
+ const rule = {
6
+ meta: {
7
+ type: "suggestion",
8
+ docs: {
9
+ category: "Schema",
10
+ description: "Require `input` or `type` fields to be non-nullable with `@oneOf` directive.",
11
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
12
+ examples: [
13
+ {
14
+ title: "Incorrect",
15
+ code: (
16
+ /* GraphQL */
17
+ `
18
+ input Input @oneOf {
19
+ foo: String!
20
+ b: Int
21
+ }
22
+ `
23
+ )
24
+ },
25
+ {
26
+ title: "Correct",
27
+ code: (
28
+ /* GraphQL */
29
+ `
30
+ input Input @oneOf {
31
+ foo: String
32
+ bar: Int
33
+ }
34
+ `
35
+ )
36
+ }
37
+ ]
38
+ },
39
+ messages: {
40
+ [RULE_ID]: '{{ nodeName }} must be nullable when "@oneOf" is in use'
41
+ },
42
+ schema: []
43
+ },
44
+ create(context) {
45
+ return {
46
+ "Directive[name.value=oneOf]"({ parent }) {
47
+ const isTypeOrInput = [
48
+ Kind.OBJECT_TYPE_DEFINITION,
49
+ Kind.INPUT_OBJECT_TYPE_DEFINITION
50
+ ].includes(parent.kind);
51
+ if (!isTypeOrInput) {
52
+ return;
53
+ }
54
+ for (const field of parent.fields || []) {
55
+ if (field.gqlType.kind === Kind.NON_NULL_TYPE) {
56
+ context.report({
57
+ node: field.name,
58
+ messageId: RULE_ID,
59
+ data: { nodeName: getNodeName(field) }
60
+ });
61
+ }
62
+ }
63
+ }
64
+ };
65
+ }
66
+ };
67
+ export {
68
+ rule
69
+ };
@@ -0,0 +1,12 @@
1
+ import { f as GraphQLESLintRule } from '../types-ace77d86.js';
2
+ import '@graphql-tools/utils';
3
+ import 'eslint';
4
+ import 'estree';
5
+ import 'graphql';
6
+ import 'graphql-config';
7
+ import 'json-schema-to-ts';
8
+ import '../estree-converter/types.mjs';
9
+
10
+ declare const rule: GraphQLESLintRule;
11
+
12
+ export { rule };
@@ -0,0 +1,86 @@
1
+ import "../chunk-BMTV3EA2.js";
2
+ import { Kind } from "graphql";
3
+ import { getNodeName, requireGraphQLSchemaFromContext, truthy } from "../utils.js";
4
+ const RULE_ID = "require-nullable-result-in-root";
5
+ const rule = {
6
+ meta: {
7
+ type: "suggestion",
8
+ hasSuggestions: true,
9
+ docs: {
10
+ category: "Schema",
11
+ description: "Require nullable fields in root types.",
12
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
13
+ requiresSchema: true,
14
+ examples: [
15
+ {
16
+ title: "Incorrect",
17
+ code: (
18
+ /* GraphQL */
19
+ `
20
+ type Query {
21
+ user: User!
22
+ }
23
+ `
24
+ )
25
+ },
26
+ {
27
+ title: "Correct",
28
+ code: (
29
+ /* GraphQL */
30
+ `
31
+ type Query {
32
+ foo: User
33
+ baz: [User]!
34
+ bar: [User!]!
35
+ }
36
+ `
37
+ )
38
+ }
39
+ ]
40
+ },
41
+ messages: {
42
+ [RULE_ID]: "Unexpected non-null result {{ resultType }} in {{ rootType }}"
43
+ },
44
+ schema: []
45
+ },
46
+ create(context) {
47
+ const schema = requireGraphQLSchemaFromContext(RULE_ID, context);
48
+ const rootTypeNames = new Set(
49
+ [schema.getQueryType(), schema.getMutationType(), schema.getSubscriptionType()].filter(truthy).map((type) => type.name)
50
+ );
51
+ const sourceCode = context.getSourceCode();
52
+ return {
53
+ "ObjectTypeDefinition,ObjectTypeExtension"(node) {
54
+ if (!rootTypeNames.has(node.name.value))
55
+ return;
56
+ for (const field of node.fields || []) {
57
+ if (field.gqlType.type !== Kind.NON_NULL_TYPE || field.gqlType.gqlType.type !== Kind.NAMED_TYPE)
58
+ continue;
59
+ const name = field.gqlType.gqlType.name.value;
60
+ const type = schema.getType(name);
61
+ const resultType = (type == null ? void 0 : type.astNode) ? getNodeName(type.astNode) : type == null ? void 0 : type.name;
62
+ context.report({
63
+ node: field.gqlType,
64
+ messageId: RULE_ID,
65
+ data: {
66
+ resultType: resultType || "",
67
+ rootType: getNodeName(node)
68
+ },
69
+ suggest: [
70
+ {
71
+ desc: `Make ${resultType} nullable`,
72
+ fix(fixer) {
73
+ const text = sourceCode.getText(field.gqlType);
74
+ return fixer.replaceText(field.gqlType, text.replace("!", ""));
75
+ }
76
+ }
77
+ ]
78
+ });
79
+ }
80
+ }
81
+ };
82
+ }
83
+ };
84
+ export {
85
+ rule
86
+ };
@@ -0,0 +1,12 @@
1
+ import { f as GraphQLESLintRule } from '../types-ace77d86.js';
2
+ import '@graphql-tools/utils';
3
+ import 'eslint';
4
+ import 'estree';
5
+ import 'graphql';
6
+ import 'graphql-config';
7
+ import 'json-schema-to-ts';
8
+ import '../estree-converter/types.mjs';
9
+
10
+ declare const rule: GraphQLESLintRule;
11
+
12
+ export { rule };
@@ -0,0 +1,68 @@
1
+ import "../chunk-BMTV3EA2.js";
2
+ import { displayNodeName } from "../utils.js";
3
+ const RULE_ID = "require-type-pattern-with-oneof";
4
+ const rule = {
5
+ meta: {
6
+ type: "suggestion",
7
+ docs: {
8
+ category: "Schema",
9
+ description: "Enforce types with `@oneOf` directive have `error` and `ok` fields.",
10
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
11
+ examples: [
12
+ {
13
+ title: "Correct",
14
+ code: (
15
+ /* GraphQL */
16
+ `
17
+ type Mutation {
18
+ doSomething: DoSomethingMutationResult!
19
+ }
20
+
21
+ interface Error {
22
+ message: String!
23
+ }
24
+
25
+ type DoSomethingMutationResult @oneOf {
26
+ ok: DoSomethingSuccess
27
+ error: Error
28
+ }
29
+
30
+ type DoSomethingSuccess {
31
+ # ...
32
+ }
33
+ `
34
+ )
35
+ }
36
+ ]
37
+ },
38
+ messages: {
39
+ [RULE_ID]: '{{ nodeName }} is defined as output with "@oneOf" and must be defined with "{{ fieldName }}" field'
40
+ },
41
+ schema: []
42
+ },
43
+ create(context) {
44
+ return {
45
+ "Directive[name.value=oneOf][parent.kind=ObjectTypeDefinition]"({
46
+ parent
47
+ }) {
48
+ var _a;
49
+ const requiredFields = ["error", "ok"];
50
+ for (const fieldName of requiredFields) {
51
+ if (!((_a = parent.fields) == null ? void 0 : _a.some((field) => field.name.value === fieldName))) {
52
+ context.report({
53
+ node: parent.name,
54
+ messageId: RULE_ID,
55
+ data: {
56
+ nodeName: displayNodeName(parent),
57
+ fieldName
58
+ }
59
+ });
60
+ }
61
+ }
62
+ }
63
+ };
64
+ }
65
+ };
66
+ export {
67
+ rule
68
+ };
@@ -0,0 +1,36 @@
1
+ import { FromSchema } from 'json-schema-to-ts';
2
+ import { f as GraphQLESLintRule } from '../types-ace77d86.js';
3
+ import '@graphql-tools/utils';
4
+ import 'eslint';
5
+ import 'estree';
6
+ import 'graphql';
7
+ import 'graphql-config';
8
+ import '../estree-converter/types.mjs';
9
+
10
+ declare const schema: {
11
+ readonly type: "array";
12
+ readonly minItems: 1;
13
+ readonly maxItems: 1;
14
+ readonly items: {
15
+ readonly type: "object";
16
+ readonly additionalProperties: false;
17
+ readonly required: readonly ["maxDepth"];
18
+ readonly properties: {
19
+ readonly maxDepth: {
20
+ readonly type: "number";
21
+ };
22
+ readonly ignore: {
23
+ readonly type: "array";
24
+ readonly uniqueItems: true;
25
+ readonly minItems: 1;
26
+ readonly items: {
27
+ readonly type: "string";
28
+ };
29
+ };
30
+ };
31
+ };
32
+ };
33
+ type RuleOptions = FromSchema<typeof schema>;
34
+ declare const rule: GraphQLESLintRule<RuleOptions>;
35
+
36
+ export { RuleOptions, rule };
@@ -0,0 +1,142 @@
1
+ import "../chunk-BMTV3EA2.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";
6
+ const schema = {
7
+ type: "array",
8
+ minItems: 1,
9
+ maxItems: 1,
10
+ items: {
11
+ type: "object",
12
+ additionalProperties: false,
13
+ required: ["maxDepth"],
14
+ properties: {
15
+ maxDepth: {
16
+ type: "number"
17
+ },
18
+ ignore: ARRAY_DEFAULT_OPTIONS
19
+ }
20
+ }
21
+ };
22
+ const rule = {
23
+ meta: {
24
+ type: "suggestion",
25
+ hasSuggestions: true,
26
+ docs: {
27
+ category: "Operations",
28
+ description: "Limit the complexity of the GraphQL operations solely by their depth. Based on [graphql-depth-limit](https://npmjs.com/package/graphql-depth-limit).",
29
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
30
+ requiresSiblings: true,
31
+ examples: [
32
+ {
33
+ title: "Incorrect",
34
+ usage: [{ maxDepth: 1 }],
35
+ code: `
36
+ query deep2 {
37
+ viewer { # Level 0
38
+ albums { # Level 1
39
+ title # Level 2
40
+ }
41
+ }
42
+ }
43
+ `
44
+ },
45
+ {
46
+ title: "Correct",
47
+ usage: [{ maxDepth: 4 }],
48
+ code: `
49
+ query deep2 {
50
+ viewer { # Level 0
51
+ albums { # Level 1
52
+ title # Level 2
53
+ }
54
+ }
55
+ }
56
+ `
57
+ },
58
+ {
59
+ title: "Correct (ignored field)",
60
+ usage: [{ maxDepth: 1, ignore: ["albums"] }],
61
+ code: `
62
+ query deep2 {
63
+ viewer { # Level 0
64
+ albums { # Level 1
65
+ title # Level 2
66
+ }
67
+ }
68
+ }
69
+ `
70
+ }
71
+ ],
72
+ recommended: true,
73
+ configOptions: [{ maxDepth: 7 }]
74
+ },
75
+ schema
76
+ },
77
+ create(context) {
78
+ let siblings = null;
79
+ try {
80
+ siblings = requireSiblingsOperations(RULE_ID, context);
81
+ } catch {
82
+ logger.warn(
83
+ `Rule "${RULE_ID}" works best with siblings operations loaded. For more info: https://bit.ly/graphql-eslint-operations`
84
+ );
85
+ }
86
+ const { maxDepth, ignore = [] } = context.options[0];
87
+ const checkFn = depthLimit(maxDepth, { ignore });
88
+ return {
89
+ "OperationDefinition, FragmentDefinition"(node) {
90
+ try {
91
+ const rawNode = node.rawNode();
92
+ const fragmentsInUse = siblings ? siblings.getFragmentsInUse(rawNode) : [];
93
+ const document = {
94
+ kind: Kind.DOCUMENT,
95
+ definitions: [rawNode, ...fragmentsInUse]
96
+ };
97
+ checkFn({
98
+ getDocument: () => document,
99
+ reportError(error) {
100
+ const { line, column } = error.locations[0];
101
+ const ancestors = context.getAncestors();
102
+ const token = ancestors[0].tokens.find(
103
+ (token2) => token2.loc.start.line === line && token2.loc.start.column === column - 1
104
+ );
105
+ context.report({
106
+ loc: {
107
+ line,
108
+ column: column - 1
109
+ },
110
+ message: error.message,
111
+ // Don't provide suggestions for fragment that can be in a separate file
112
+ ...token && {
113
+ suggest: [
114
+ {
115
+ desc: "Remove selections",
116
+ fix(fixer) {
117
+ const sourceCode = context.getSourceCode();
118
+ const foundNode = sourceCode.getNodeByRangeIndex(token.range[0]);
119
+ const parentNode = foundNode.parent.parent;
120
+ return fixer.remove(
121
+ foundNode.kind === "Name" ? parentNode.parent : parentNode
122
+ );
123
+ }
124
+ }
125
+ ]
126
+ }
127
+ });
128
+ }
129
+ });
130
+ } catch (e) {
131
+ logger.warn(
132
+ `Rule "${RULE_ID}" check failed due to a missing siblings operations. For more info: https://bit.ly/graphql-eslint-operations`,
133
+ e
134
+ );
135
+ }
136
+ }
137
+ };
138
+ }
139
+ };
140
+ export {
141
+ rule
142
+ };
@@ -0,0 +1,65 @@
1
+ import { FromSchema } from 'json-schema-to-ts';
2
+ import { f as GraphQLESLintRule } from '../types-ace77d86.js';
3
+ import '@graphql-tools/utils';
4
+ import 'eslint';
5
+ import 'estree';
6
+ import 'graphql';
7
+ import 'graphql-config';
8
+ import '../estree-converter/types.mjs';
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 properties: {
17
+ readonly acceptedIdNames: {
18
+ readonly default: readonly ["id"];
19
+ readonly type: "array";
20
+ readonly uniqueItems: true;
21
+ readonly minItems: 1;
22
+ readonly items: {
23
+ readonly type: "string";
24
+ };
25
+ };
26
+ readonly acceptedIdTypes: {
27
+ readonly default: readonly ["ID"];
28
+ readonly type: "array";
29
+ readonly uniqueItems: true;
30
+ readonly minItems: 1;
31
+ readonly items: {
32
+ readonly type: "string";
33
+ };
34
+ };
35
+ readonly exceptions: {
36
+ readonly type: "object";
37
+ readonly additionalProperties: false;
38
+ readonly properties: {
39
+ readonly types: {
40
+ readonly description: "This is used to exclude types with names that match one of the specified values.";
41
+ readonly type: "array";
42
+ readonly uniqueItems: true;
43
+ readonly minItems: 1;
44
+ readonly items: {
45
+ readonly type: "string";
46
+ };
47
+ };
48
+ readonly suffixes: {
49
+ readonly description: "This is used to exclude types with names with suffixes that match one of the specified values.";
50
+ readonly type: "array";
51
+ readonly uniqueItems: true;
52
+ readonly minItems: 1;
53
+ readonly items: {
54
+ readonly type: "string";
55
+ };
56
+ };
57
+ };
58
+ };
59
+ };
60
+ };
61
+ };
62
+ type RuleOptions = FromSchema<typeof schema>;
63
+ declare const rule: GraphQLESLintRule<RuleOptions>;
64
+
65
+ export { RuleOptions, rule };