@graphql-eslint/eslint-plugin 3.19.3-alpha-20230702093957-98f7783 → 3.20.0-alpha-20230703154330-0d51273

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 (302) hide show
  1. package/{typings → cjs}/cache.d.ts +3 -1
  2. package/cjs/cache.js +57 -26
  3. package/{typings → cjs}/configs/index.d.ts +3 -1
  4. package/cjs/configs/index.js +47 -14
  5. package/{typings → cjs}/configs/operations-all.d.ts +2 -1
  6. package/cjs/configs/operations-all.js +47 -30
  7. package/{typings → cjs}/configs/operations-recommended.d.ts +2 -1
  8. package/cjs/configs/operations-recommended.js +72 -55
  9. package/{typings → cjs}/configs/relay.d.ts +2 -1
  10. package/cjs/configs/relay.js +31 -11
  11. package/{typings → cjs}/configs/schema-all.d.ts +2 -1
  12. package/cjs/configs/schema-all.js +41 -24
  13. package/{typings → cjs}/configs/schema-recommended.d.ts +2 -1
  14. package/cjs/configs/schema-recommended.js +68 -51
  15. package/{typings → cjs}/documents.d.ts +4 -1
  16. package/cjs/documents.js +74 -43
  17. package/cjs/estree-converter/converter.d.ts +8 -0
  18. package/cjs/estree-converter/converter.js +80 -59
  19. package/cjs/estree-converter/index.d.ts +8 -0
  20. package/cjs/estree-converter/index.js +25 -5
  21. package/{typings → cjs}/estree-converter/types.d.ts +7 -5
  22. package/cjs/estree-converter/types.js +16 -0
  23. package/cjs/estree-converter/utils.d.ts +18 -0
  24. package/cjs/estree-converter/utils.js +119 -95
  25. package/{typings → cjs}/flat-configs.d.ts +12 -1
  26. package/cjs/flat-configs.js +56 -32
  27. package/cjs/graphql-config.d.ts +13 -0
  28. package/cjs/graphql-config.js +78 -47
  29. package/cjs/index.d.ts +22 -0
  30. package/cjs/index.js +50 -18
  31. package/cjs/parser.d.ts +12 -0
  32. package/cjs/parser.js +96 -76
  33. package/cjs/processor.d.ts +9 -0
  34. package/cjs/processor.js +119 -88
  35. package/{typings → cjs}/rules/alphabetize.d.ts +12 -4
  36. package/cjs/rules/alphabetize.js +337 -295
  37. package/{typings → cjs}/rules/description-style.d.ts +12 -4
  38. package/cjs/rules/description-style.js +96 -66
  39. package/cjs/rules/graphql-js-validation.d.ts +12 -0
  40. package/cjs/rules/graphql-js-validation.js +595 -433
  41. package/cjs/rules/index.d.ts +125 -0
  42. package/cjs/rules/index.js +97 -76
  43. package/{typings → cjs}/rules/input-name.d.ts +12 -4
  44. package/cjs/rules/input-name.js +153 -123
  45. package/{typings → cjs}/rules/lone-executable-definition.d.ts +12 -4
  46. package/cjs/rules/lone-executable-definition.js +101 -72
  47. package/{typings → cjs}/rules/match-document-filename.d.ts +14 -6
  48. package/cjs/rules/match-document-filename.js +229 -182
  49. package/{typings → cjs}/rules/naming-convention.d.ts +12 -4
  50. package/cjs/rules/naming-convention.js +380 -316
  51. package/cjs/rules/no-anonymous-operations.d.ts +12 -0
  52. package/cjs/rules/no-anonymous-operations.js +88 -57
  53. package/cjs/rules/no-case-insensitive-enum-values-duplicates.d.ts +12 -0
  54. package/cjs/rules/no-case-insensitive-enum-values-duplicates.js +82 -50
  55. package/cjs/rules/no-deprecated.d.ts +12 -0
  56. package/cjs/rules/no-deprecated.js +106 -75
  57. package/cjs/rules/no-duplicate-fields.d.ts +12 -0
  58. package/cjs/rules/no-duplicate-fields.js +116 -82
  59. package/cjs/rules/no-hashtag-description.d.ts +13 -0
  60. package/cjs/rules/no-hashtag-description.js +119 -82
  61. package/cjs/rules/no-one-place-fragments.d.ts +12 -0
  62. package/cjs/rules/no-one-place-fragments.js +88 -58
  63. package/{typings → cjs}/rules/no-root-type.d.ts +12 -4
  64. package/cjs/rules/no-root-type.js +101 -74
  65. package/cjs/rules/no-scalar-result-type-on-mutation.d.ts +12 -0
  66. package/cjs/rules/no-scalar-result-type-on-mutation.js +90 -60
  67. package/cjs/rules/no-typename-prefix.d.ts +12 -0
  68. package/cjs/rules/no-typename-prefix.js +88 -55
  69. package/cjs/rules/no-unreachable-types.d.ts +12 -0
  70. package/cjs/rules/no-unreachable-types.js +169 -134
  71. package/cjs/rules/no-unused-fields.d.ts +12 -0
  72. package/cjs/rules/no-unused-fields.js +117 -92
  73. package/{typings → cjs}/rules/relay-arguments.d.ts +12 -4
  74. package/cjs/rules/relay-arguments.js +136 -110
  75. package/cjs/rules/relay-connection-types.d.ts +13 -0
  76. package/cjs/rules/relay-connection-types.js +123 -94
  77. package/{typings → cjs}/rules/relay-edge-types.d.ts +12 -4
  78. package/cjs/rules/relay-edge-types.js +196 -179
  79. package/cjs/rules/relay-page-info.d.ts +12 -0
  80. package/cjs/rules/relay-page-info.js +108 -89
  81. package/{typings → cjs}/rules/require-deprecation-date.d.ts +12 -4
  82. package/cjs/rules/require-deprecation-date.js +143 -112
  83. package/cjs/rules/require-deprecation-reason.d.ts +12 -0
  84. package/cjs/rules/require-deprecation-reason.js +80 -46
  85. package/{typings → cjs}/rules/require-description.d.ts +13 -5
  86. package/cjs/rules/require-description.js +170 -132
  87. package/cjs/rules/require-field-of-type-query-in-mutation-result.d.ts +12 -0
  88. package/cjs/rules/require-field-of-type-query-in-mutation-result.js +81 -51
  89. package/{typings → cjs}/rules/require-id-when-available.d.ts +12 -4
  90. package/cjs/rules/require-id-when-available.js +196 -173
  91. package/cjs/rules/require-import-fragment.d.ts +12 -0
  92. package/cjs/rules/require-import-fragment.js +138 -88
  93. package/cjs/rules/require-nullable-fields-with-oneof.d.ts +12 -0
  94. package/cjs/rules/require-nullable-fields-with-oneof.js +80 -50
  95. package/cjs/rules/require-nullable-result-in-root.d.ts +12 -0
  96. package/cjs/rules/require-nullable-result-in-root.js +97 -68
  97. package/cjs/rules/require-type-pattern-with-oneof.d.ts +12 -0
  98. package/cjs/rules/require-type-pattern-with-oneof.js +70 -42
  99. package/{typings → cjs}/rules/selection-set-depth.d.ts +12 -4
  100. package/cjs/rules/selection-set-depth.js +147 -107
  101. package/{typings → cjs}/rules/strict-id-in-types.d.ts +12 -4
  102. package/cjs/rules/strict-id-in-types.js +143 -122
  103. package/cjs/rules/unique-fragment-name.d.ts +13 -0
  104. package/cjs/rules/unique-fragment-name.js +88 -62
  105. package/cjs/rules/unique-operation-name.d.ts +12 -0
  106. package/cjs/rules/unique-operation-name.js +65 -35
  107. package/cjs/schema.d.ts +12 -0
  108. package/cjs/schema.js +62 -30
  109. package/cjs/siblings.d.ts +8 -0
  110. package/cjs/siblings.js +124 -106
  111. package/cjs/testkit.d.ts +8 -0
  112. package/cjs/testkit.js +165 -144
  113. package/cjs/types-e3367e3c.d.ts +129 -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 +181 -124
  118. package/{typings/cache.d.cts → esm/cache.d.mts} +3 -1
  119. package/esm/cache.js +25 -23
  120. package/{typings/configs/index.d.cts → esm/configs/index.d.mts} +3 -1
  121. package/esm/configs/index.js +14 -11
  122. package/{typings/configs/operations-all.d.cts → esm/configs/operations-all.d.mts} +2 -1
  123. package/esm/configs/operations-all.js +28 -28
  124. package/{typings/configs/operations-recommended.d.cts → esm/configs/operations-recommended.d.mts} +2 -1
  125. package/esm/configs/operations-recommended.js +53 -53
  126. package/{typings/configs/relay.d.cts → esm/configs/relay.d.mts} +2 -1
  127. package/esm/configs/relay.js +12 -9
  128. package/{typings/configs/schema-all.d.cts → esm/configs/schema-all.d.mts} +2 -1
  129. package/esm/configs/schema-all.js +22 -22
  130. package/{typings/configs/schema-recommended.d.cts → esm/configs/schema-recommended.d.mts} +2 -1
  131. package/esm/configs/schema-recommended.js +49 -49
  132. package/{typings/documents.d.cts → esm/documents.d.mts} +4 -1
  133. package/esm/documents.js +41 -39
  134. package/esm/estree-converter/converter.d.mts +8 -0
  135. package/esm/estree-converter/converter.js +63 -57
  136. package/esm/estree-converter/index.d.mts +8 -0
  137. package/esm/estree-converter/index.js +3 -3
  138. package/{typings/estree-converter/types.d.cts → esm/estree-converter/types.d.mts} +7 -5
  139. package/esm/estree-converter/utils.d.mts +18 -0
  140. package/esm/estree-converter/utils.js +102 -93
  141. package/{typings/flat-configs.d.cts → esm/flat-configs.d.mts} +13 -2
  142. package/esm/flat-configs.js +33 -30
  143. package/esm/graphql-config.d.mts +13 -0
  144. package/esm/graphql-config.js +49 -44
  145. package/esm/index.d.mts +22 -0
  146. package/esm/index.js +18 -9
  147. package/esm/package.json +1 -1
  148. package/esm/parser.d.mts +12 -0
  149. package/esm/parser.js +64 -73
  150. package/esm/processor.d.mts +9 -0
  151. package/esm/processor.js +98 -86
  152. package/{typings/rules/alphabetize.d.cts → esm/rules/alphabetize.d.mts} +12 -4
  153. package/esm/rules/alphabetize.js +304 -290
  154. package/{typings/rules/description-style.d.cts → esm/rules/description-style.d.mts} +12 -4
  155. package/esm/rules/description-style.js +73 -64
  156. package/esm/rules/graphql-js-validation.d.mts +12 -0
  157. package/esm/rules/graphql-js-validation.js +580 -429
  158. package/esm/rules/index.d.mts +125 -0
  159. package/esm/rules/index.js +74 -74
  160. package/{typings/rules/input-name.d.cts → esm/rules/input-name.d.mts} +12 -4
  161. package/esm/rules/input-name.js +132 -121
  162. package/{typings/rules/lone-executable-definition.d.cts → esm/rules/lone-executable-definition.d.mts} +12 -4
  163. package/esm/rules/lone-executable-definition.js +78 -70
  164. package/{typings/rules/match-document-filename.d.cts → esm/rules/match-document-filename.d.mts} +14 -6
  165. package/esm/rules/match-document-filename.js +210 -180
  166. package/{typings/rules/naming-convention.d.cts → esm/rules/naming-convention.d.mts} +12 -4
  167. package/esm/rules/naming-convention.js +363 -314
  168. package/esm/rules/no-anonymous-operations.d.mts +12 -0
  169. package/esm/rules/no-anonymous-operations.js +65 -55
  170. package/esm/rules/no-case-insensitive-enum-values-duplicates.d.mts +12 -0
  171. package/esm/rules/no-case-insensitive-enum-values-duplicates.js +59 -48
  172. package/esm/rules/no-deprecated.d.mts +12 -0
  173. package/esm/rules/no-deprecated.js +83 -73
  174. package/esm/rules/no-duplicate-fields.d.mts +12 -0
  175. package/esm/rules/no-duplicate-fields.js +93 -80
  176. package/esm/rules/no-hashtag-description.d.mts +13 -0
  177. package/esm/rules/no-hashtag-description.js +95 -80
  178. package/esm/rules/no-one-place-fragments.d.mts +12 -0
  179. package/esm/rules/no-one-place-fragments.js +65 -56
  180. package/{typings/rules/no-root-type.d.cts → esm/rules/no-root-type.d.mts} +12 -4
  181. package/esm/rules/no-root-type.js +78 -72
  182. package/esm/rules/no-scalar-result-type-on-mutation.d.mts +12 -0
  183. package/esm/rules/no-scalar-result-type-on-mutation.js +67 -58
  184. package/esm/rules/no-typename-prefix.d.mts +12 -0
  185. package/esm/rules/no-typename-prefix.js +65 -53
  186. package/esm/rules/no-unreachable-types.d.mts +12 -0
  187. package/esm/rules/no-unreachable-types.js +141 -131
  188. package/esm/rules/no-unused-fields.d.mts +12 -0
  189. package/esm/rules/no-unused-fields.js +94 -90
  190. package/{typings/rules/relay-arguments.d.cts → esm/rules/relay-arguments.d.mts} +12 -4
  191. package/esm/rules/relay-arguments.js +113 -108
  192. package/esm/rules/relay-connection-types.d.mts +13 -0
  193. package/esm/rules/relay-connection-types.js +98 -91
  194. package/{typings/rules/relay-edge-types.d.cts → esm/rules/relay-edge-types.d.mts} +12 -4
  195. package/esm/rules/relay-edge-types.js +178 -177
  196. package/esm/rules/relay-page-info.d.mts +12 -0
  197. package/esm/rules/relay-page-info.js +84 -86
  198. package/{typings/rules/require-deprecation-date.d.cts → esm/rules/require-deprecation-date.d.mts} +12 -4
  199. package/esm/rules/require-deprecation-date.js +120 -110
  200. package/esm/rules/require-deprecation-reason.d.mts +12 -0
  201. package/esm/rules/require-deprecation-reason.js +57 -44
  202. package/{typings/rules/require-description.d.cts → esm/rules/require-description.d.mts} +13 -5
  203. package/esm/rules/require-description.js +151 -130
  204. package/esm/rules/require-field-of-type-query-in-mutation-result.d.mts +12 -0
  205. package/esm/rules/require-field-of-type-query-in-mutation-result.js +58 -49
  206. package/{typings/rules/require-id-when-available.d.cts → esm/rules/require-id-when-available.d.mts} +12 -4
  207. package/esm/rules/require-id-when-available.js +186 -171
  208. package/esm/rules/require-import-fragment.d.mts +12 -0
  209. package/esm/rules/require-import-fragment.js +105 -85
  210. package/esm/rules/require-nullable-fields-with-oneof.d.mts +12 -0
  211. package/esm/rules/require-nullable-fields-with-oneof.js +57 -48
  212. package/esm/rules/require-nullable-result-in-root.d.mts +12 -0
  213. package/esm/rules/require-nullable-result-in-root.js +74 -66
  214. package/esm/rules/require-type-pattern-with-oneof.d.mts +12 -0
  215. package/esm/rules/require-type-pattern-with-oneof.js +47 -40
  216. package/{typings/rules/selection-set-depth.d.cts → esm/rules/selection-set-depth.d.mts} +12 -4
  217. package/esm/rules/selection-set-depth.js +114 -104
  218. package/{typings/rules/strict-id-in-types.d.cts → esm/rules/strict-id-in-types.d.mts} +12 -4
  219. package/esm/rules/strict-id-in-types.js +125 -119
  220. package/esm/rules/unique-fragment-name.d.mts +13 -0
  221. package/esm/rules/unique-fragment-name.js +65 -60
  222. package/esm/rules/unique-operation-name.d.mts +12 -0
  223. package/esm/rules/unique-operation-name.js +42 -33
  224. package/esm/schema.d.mts +12 -0
  225. package/esm/schema.js +29 -26
  226. package/esm/siblings.d.mts +8 -0
  227. package/esm/siblings.js +105 -104
  228. package/esm/testkit.d.mts +8 -0
  229. package/esm/testkit.js +132 -141
  230. package/esm/types-2e1afd7c.d.ts +129 -0
  231. package/esm/types.d.mts +8 -0
  232. package/esm/utils.d.mts +44 -0
  233. package/esm/utils.js +138 -116
  234. package/package.json +40 -30
  235. package/typings/estree-converter/converter.d.cts +0 -3
  236. package/typings/estree-converter/converter.d.ts +0 -3
  237. package/typings/estree-converter/index.d.cts +0 -3
  238. package/typings/estree-converter/index.d.ts +0 -3
  239. package/typings/estree-converter/utils.d.cts +0 -13
  240. package/typings/estree-converter/utils.d.ts +0 -13
  241. package/typings/graphql-config.d.cts +0 -4
  242. package/typings/graphql-config.d.ts +0 -4
  243. package/typings/index.d.cts +0 -10
  244. package/typings/index.d.ts +0 -10
  245. package/typings/parser.d.cts +0 -2
  246. package/typings/parser.d.ts +0 -2
  247. package/typings/processor.d.cts +0 -6
  248. package/typings/processor.d.ts +0 -6
  249. package/typings/rules/graphql-js-validation.d.cts +0 -2
  250. package/typings/rules/graphql-js-validation.d.ts +0 -2
  251. package/typings/rules/index.d.cts +0 -111
  252. package/typings/rules/index.d.ts +0 -111
  253. package/typings/rules/no-anonymous-operations.d.cts +0 -2
  254. package/typings/rules/no-anonymous-operations.d.ts +0 -2
  255. package/typings/rules/no-case-insensitive-enum-values-duplicates.d.cts +0 -2
  256. package/typings/rules/no-case-insensitive-enum-values-duplicates.d.ts +0 -2
  257. package/typings/rules/no-deprecated.d.cts +0 -2
  258. package/typings/rules/no-deprecated.d.ts +0 -2
  259. package/typings/rules/no-duplicate-fields.d.cts +0 -2
  260. package/typings/rules/no-duplicate-fields.d.ts +0 -2
  261. package/typings/rules/no-hashtag-description.d.cts +0 -3
  262. package/typings/rules/no-hashtag-description.d.ts +0 -3
  263. package/typings/rules/no-one-place-fragments.d.cts +0 -2
  264. package/typings/rules/no-one-place-fragments.d.ts +0 -2
  265. package/typings/rules/no-scalar-result-type-on-mutation.d.cts +0 -2
  266. package/typings/rules/no-scalar-result-type-on-mutation.d.ts +0 -2
  267. package/typings/rules/no-typename-prefix.d.cts +0 -2
  268. package/typings/rules/no-typename-prefix.d.ts +0 -2
  269. package/typings/rules/no-unreachable-types.d.cts +0 -2
  270. package/typings/rules/no-unreachable-types.d.ts +0 -2
  271. package/typings/rules/no-unused-fields.d.cts +0 -2
  272. package/typings/rules/no-unused-fields.d.ts +0 -2
  273. package/typings/rules/relay-connection-types.d.cts +0 -4
  274. package/typings/rules/relay-connection-types.d.ts +0 -4
  275. package/typings/rules/relay-page-info.d.cts +0 -2
  276. package/typings/rules/relay-page-info.d.ts +0 -2
  277. package/typings/rules/require-deprecation-reason.d.cts +0 -2
  278. package/typings/rules/require-deprecation-reason.d.ts +0 -2
  279. package/typings/rules/require-field-of-type-query-in-mutation-result.d.cts +0 -2
  280. package/typings/rules/require-field-of-type-query-in-mutation-result.d.ts +0 -2
  281. package/typings/rules/require-import-fragment.d.cts +0 -2
  282. package/typings/rules/require-import-fragment.d.ts +0 -2
  283. package/typings/rules/require-nullable-fields-with-oneof.d.cts +0 -2
  284. package/typings/rules/require-nullable-fields-with-oneof.d.ts +0 -2
  285. package/typings/rules/require-nullable-result-in-root.d.cts +0 -2
  286. package/typings/rules/require-nullable-result-in-root.d.ts +0 -2
  287. package/typings/rules/require-type-pattern-with-oneof.d.cts +0 -2
  288. package/typings/rules/require-type-pattern-with-oneof.d.ts +0 -2
  289. package/typings/rules/unique-fragment-name.d.cts +0 -5
  290. package/typings/rules/unique-fragment-name.d.ts +0 -5
  291. package/typings/rules/unique-operation-name.d.cts +0 -2
  292. package/typings/rules/unique-operation-name.d.ts +0 -2
  293. package/typings/schema.d.cts +0 -3
  294. package/typings/schema.d.ts +0 -3
  295. package/typings/siblings.d.cts +0 -22
  296. package/typings/siblings.d.ts +0 -22
  297. package/typings/testkit.d.cts +0 -29
  298. package/typings/testkit.d.ts +0 -29
  299. package/typings/types.d.cts +0 -83
  300. package/typings/types.d.ts +0 -83
  301. package/typings/utils.d.cts +0 -40
  302. package/typings/utils.d.ts +0 -40
@@ -1,106 +1,109 @@
1
- import { DirectiveLocation, isInterfaceType, Kind, visit, } from 'graphql';
2
- import lowerCase from 'lodash.lowercase';
3
- import { getTypeName, requireGraphQLSchemaFromContext } from '../utils.js';
4
- const RULE_ID = 'no-unreachable-types';
1
+ import {
2
+ DirectiveLocation,
3
+ isInterfaceType,
4
+ Kind,
5
+ visit
6
+ } from "graphql";
7
+ import lowerCase from "lodash.lowercase";
8
+ import { getTypeName, requireGraphQLSchemaFromContext } from "../utils.js";
9
+ const RULE_ID = "no-unreachable-types";
5
10
  const KINDS = [
6
- Kind.DIRECTIVE_DEFINITION,
7
- Kind.OBJECT_TYPE_DEFINITION,
8
- Kind.OBJECT_TYPE_EXTENSION,
9
- Kind.INTERFACE_TYPE_DEFINITION,
10
- Kind.INTERFACE_TYPE_EXTENSION,
11
- Kind.SCALAR_TYPE_DEFINITION,
12
- Kind.SCALAR_TYPE_EXTENSION,
13
- Kind.INPUT_OBJECT_TYPE_DEFINITION,
14
- Kind.INPUT_OBJECT_TYPE_EXTENSION,
15
- Kind.UNION_TYPE_DEFINITION,
16
- Kind.UNION_TYPE_EXTENSION,
17
- Kind.ENUM_TYPE_DEFINITION,
18
- Kind.ENUM_TYPE_EXTENSION,
11
+ Kind.DIRECTIVE_DEFINITION,
12
+ Kind.OBJECT_TYPE_DEFINITION,
13
+ Kind.OBJECT_TYPE_EXTENSION,
14
+ Kind.INTERFACE_TYPE_DEFINITION,
15
+ Kind.INTERFACE_TYPE_EXTENSION,
16
+ Kind.SCALAR_TYPE_DEFINITION,
17
+ Kind.SCALAR_TYPE_EXTENSION,
18
+ Kind.INPUT_OBJECT_TYPE_DEFINITION,
19
+ Kind.INPUT_OBJECT_TYPE_EXTENSION,
20
+ Kind.UNION_TYPE_DEFINITION,
21
+ Kind.UNION_TYPE_EXTENSION,
22
+ Kind.ENUM_TYPE_DEFINITION,
23
+ Kind.ENUM_TYPE_EXTENSION
19
24
  ];
20
25
  let reachableTypesCache;
21
- const RequestDirectiveLocations = new Set([
22
- DirectiveLocation.QUERY,
23
- DirectiveLocation.MUTATION,
24
- DirectiveLocation.SUBSCRIPTION,
25
- DirectiveLocation.FIELD,
26
- DirectiveLocation.FRAGMENT_DEFINITION,
27
- DirectiveLocation.FRAGMENT_SPREAD,
28
- DirectiveLocation.INLINE_FRAGMENT,
29
- DirectiveLocation.VARIABLE_DEFINITION,
26
+ const RequestDirectiveLocations = /* @__PURE__ */ new Set([
27
+ DirectiveLocation.QUERY,
28
+ DirectiveLocation.MUTATION,
29
+ DirectiveLocation.SUBSCRIPTION,
30
+ DirectiveLocation.FIELD,
31
+ DirectiveLocation.FRAGMENT_DEFINITION,
32
+ DirectiveLocation.FRAGMENT_SPREAD,
33
+ DirectiveLocation.INLINE_FRAGMENT,
34
+ DirectiveLocation.VARIABLE_DEFINITION
30
35
  ]);
31
36
  function getReachableTypes(schema) {
32
- // We don't want cache reachableTypes on test environment
33
- // Otherwise reachableTypes will be same for all tests
34
- if (process.env.NODE_ENV !== 'test' && reachableTypesCache) {
35
- return reachableTypesCache;
37
+ if (process.env.NODE_ENV !== "test" && reachableTypesCache) {
38
+ return reachableTypesCache;
39
+ }
40
+ const reachableTypes = /* @__PURE__ */ new Set();
41
+ const collect = (node) => {
42
+ const typeName = getTypeName(node);
43
+ if (reachableTypes.has(typeName)) {
44
+ return;
36
45
  }
37
- const reachableTypes = new Set();
38
- const collect = (node) => {
39
- const typeName = getTypeName(node);
40
- if (reachableTypes.has(typeName)) {
41
- return;
42
- }
43
- reachableTypes.add(typeName);
44
- const type = schema.getType(typeName) || schema.getDirective(typeName);
45
- if (isInterfaceType(type)) {
46
- const { objects, interfaces } = schema.getImplementations(type);
47
- for (const { astNode } of [...objects, ...interfaces]) {
48
- visit(astNode, visitor);
49
- }
50
- }
51
- else if (type === null || type === void 0 ? void 0 : type.astNode) {
52
- // astNode can be undefined for ID, String, Boolean
53
- visit(type.astNode, visitor);
54
- }
55
- };
56
- const visitor = {
57
- InterfaceTypeDefinition: collect,
58
- ObjectTypeDefinition: collect,
59
- InputValueDefinition: collect,
60
- UnionTypeDefinition: collect,
61
- FieldDefinition: collect,
62
- Directive: collect,
63
- NamedType: collect,
64
- };
65
- for (const type of [
66
- schema,
67
- schema.getQueryType(),
68
- schema.getMutationType(),
69
- schema.getSubscriptionType(),
70
- ]) {
71
- // if schema don't have Query type, schema.astNode will be undefined
72
- if (type === null || type === void 0 ? void 0 : type.astNode) {
73
- visit(type.astNode, visitor);
74
- }
46
+ reachableTypes.add(typeName);
47
+ const type = schema.getType(typeName) || schema.getDirective(typeName);
48
+ if (isInterfaceType(type)) {
49
+ const { objects, interfaces } = schema.getImplementations(type);
50
+ for (const { astNode } of [...objects, ...interfaces]) {
51
+ visit(astNode, visitor);
52
+ }
53
+ } else if (type?.astNode) {
54
+ visit(type.astNode, visitor);
75
55
  }
76
- for (const node of schema.getDirectives()) {
77
- if (node.locations.some(location => RequestDirectiveLocations.has(location))) {
78
- reachableTypes.add(node.name);
79
- for (const arg of node.args) {
80
- const argTypeName = 'name' in arg.type && arg.type.name;
81
- if (argTypeName) {
82
- reachableTypes.add(argTypeName);
83
- }
84
- }
56
+ };
57
+ const visitor = {
58
+ InterfaceTypeDefinition: collect,
59
+ ObjectTypeDefinition: collect,
60
+ InputValueDefinition: collect,
61
+ UnionTypeDefinition: collect,
62
+ FieldDefinition: collect,
63
+ Directive: collect,
64
+ NamedType: collect
65
+ };
66
+ for (const type of [
67
+ schema,
68
+ // visiting SchemaDefinition node
69
+ schema.getQueryType(),
70
+ schema.getMutationType(),
71
+ schema.getSubscriptionType()
72
+ ]) {
73
+ if (type?.astNode) {
74
+ visit(type.astNode, visitor);
75
+ }
76
+ }
77
+ for (const node of schema.getDirectives()) {
78
+ if (node.locations.some((location) => RequestDirectiveLocations.has(location))) {
79
+ reachableTypes.add(node.name);
80
+ for (const arg of node.args) {
81
+ const argTypeName = "name" in arg.type && arg.type.name;
82
+ if (argTypeName) {
83
+ reachableTypes.add(argTypeName);
85
84
  }
85
+ }
86
86
  }
87
- reachableTypesCache = reachableTypes;
88
- return reachableTypesCache;
87
+ }
88
+ reachableTypesCache = reachableTypes;
89
+ return reachableTypesCache;
89
90
  }
90
- export const rule = {
91
- meta: {
92
- messages: {
93
- [RULE_ID]: '{{ type }} `{{ typeName }}` is unreachable.',
94
- },
95
- docs: {
96
- description: 'Requires all types to be reachable at some level by root level fields.',
97
- category: 'Schema',
98
- url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
99
- requiresSchema: true,
100
- examples: [
101
- {
102
- title: 'Incorrect',
103
- code: /* GraphQL */ `
91
+ const rule = {
92
+ meta: {
93
+ messages: {
94
+ [RULE_ID]: "{{ type }} `{{ typeName }}` is unreachable."
95
+ },
96
+ docs: {
97
+ description: "Requires all types to be reachable at some level by root level fields.",
98
+ category: "Schema",
99
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
100
+ requiresSchema: true,
101
+ examples: [
102
+ {
103
+ title: "Incorrect",
104
+ code: (
105
+ /* GraphQL */
106
+ `
104
107
  type User {
105
108
  id: ID!
106
109
  name: String
@@ -109,11 +112,14 @@ export const rule = {
109
112
  type Query {
110
113
  me: String
111
114
  }
112
- `,
113
- },
114
- {
115
- title: 'Correct',
116
- code: /* GraphQL */ `
115
+ `
116
+ )
117
+ },
118
+ {
119
+ title: "Correct",
120
+ code: (
121
+ /* GraphQL */
122
+ `
117
123
  type User {
118
124
  id: ID!
119
125
  name: String
@@ -122,39 +128,43 @@ export const rule = {
122
128
  type Query {
123
129
  me: User
124
130
  }
125
- `,
126
- },
127
- ],
128
- recommended: true,
129
- },
130
- type: 'suggestion',
131
- schema: [],
132
- hasSuggestions: true,
131
+ `
132
+ )
133
+ }
134
+ ],
135
+ recommended: true
133
136
  },
134
- create(context) {
135
- const schema = requireGraphQLSchemaFromContext(RULE_ID, context);
136
- const reachableTypes = getReachableTypes(schema);
137
- return {
138
- [`:matches(${KINDS}) > .name`](node) {
139
- const typeName = node.value;
140
- if (!reachableTypes.has(typeName)) {
141
- const type = lowerCase(node.parent.kind.replace(/(Extension|Definition)$/, ''));
142
- context.report({
143
- node,
144
- messageId: RULE_ID,
145
- data: {
146
- type: type[0].toUpperCase() + type.slice(1),
147
- typeName,
148
- },
149
- suggest: [
150
- {
151
- desc: `Remove \`${typeName}\``,
152
- fix: fixer => fixer.remove(node.parent),
153
- },
154
- ],
155
- });
156
- }
137
+ type: "suggestion",
138
+ schema: [],
139
+ hasSuggestions: true
140
+ },
141
+ create(context) {
142
+ const schema = requireGraphQLSchemaFromContext(RULE_ID, context);
143
+ const reachableTypes = getReachableTypes(schema);
144
+ return {
145
+ [`:matches(${KINDS}) > .name`](node) {
146
+ const typeName = node.value;
147
+ if (!reachableTypes.has(typeName)) {
148
+ const type = lowerCase(node.parent.kind.replace(/(Extension|Definition)$/, ""));
149
+ context.report({
150
+ node,
151
+ messageId: RULE_ID,
152
+ data: {
153
+ type: type[0].toUpperCase() + type.slice(1),
154
+ typeName
157
155
  },
158
- };
159
- },
156
+ suggest: [
157
+ {
158
+ desc: `Remove \`${typeName}\``,
159
+ fix: (fixer) => fixer.remove(node.parent)
160
+ }
161
+ ]
162
+ });
163
+ }
164
+ }
165
+ };
166
+ }
167
+ };
168
+ export {
169
+ rule
160
170
  };
@@ -0,0 +1,12 @@
1
+ import { i as GraphQLESLintRule } from '../types-2e1afd7c.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 };
@@ -1,52 +1,50 @@
1
- import { TypeInfo, visit, visitWithTypeInfo } from 'graphql';
2
- import { requireGraphQLSchemaFromContext, requireSiblingsOperations } from '../utils.js';
3
- const RULE_ID = 'no-unused-fields';
1
+ import { TypeInfo, visit, visitWithTypeInfo } from "graphql";
2
+ import { requireGraphQLSchemaFromContext, requireSiblingsOperations } from "../utils.js";
3
+ const RULE_ID = "no-unused-fields";
4
4
  let usedFieldsCache;
5
5
  function getUsedFields(schema, operations) {
6
- // We don't want cache usedFields on test environment
7
- // Otherwise usedFields will be same for all tests
8
- if (process.env.NODE_ENV !== 'test' && usedFieldsCache) {
9
- return usedFieldsCache;
10
- }
11
- const usedFields = Object.create(null);
12
- const typeInfo = new TypeInfo(schema);
13
- const visitor = visitWithTypeInfo(typeInfo, {
14
- Field(node) {
15
- var _a;
16
- const fieldDef = typeInfo.getFieldDef();
17
- if (!fieldDef) {
18
- // skip visiting this node if field is not defined in schema
19
- return false;
20
- }
21
- const parentTypeName = typeInfo.getParentType().name;
22
- const fieldName = node.name.value;
23
- (_a = usedFields[parentTypeName]) !== null && _a !== void 0 ? _a : (usedFields[parentTypeName] = new Set());
24
- usedFields[parentTypeName].add(fieldName);
25
- },
26
- });
27
- const allDocuments = [...operations.getOperations(), ...operations.getFragments()];
28
- for (const { document } of allDocuments) {
29
- visit(document, visitor);
30
- }
31
- usedFieldsCache = usedFields;
6
+ if (process.env.NODE_ENV !== "test" && usedFieldsCache) {
32
7
  return usedFieldsCache;
8
+ }
9
+ const usedFields = /* @__PURE__ */ Object.create(null);
10
+ const typeInfo = new TypeInfo(schema);
11
+ const visitor = visitWithTypeInfo(typeInfo, {
12
+ Field(node) {
13
+ const fieldDef = typeInfo.getFieldDef();
14
+ if (!fieldDef) {
15
+ return false;
16
+ }
17
+ const parentTypeName = typeInfo.getParentType().name;
18
+ const fieldName = node.name.value;
19
+ usedFields[parentTypeName] ??= /* @__PURE__ */ new Set();
20
+ usedFields[parentTypeName].add(fieldName);
21
+ }
22
+ });
23
+ const allDocuments = [...operations.getOperations(), ...operations.getFragments()];
24
+ for (const { document } of allDocuments) {
25
+ visit(document, visitor);
26
+ }
27
+ usedFieldsCache = usedFields;
28
+ return usedFieldsCache;
33
29
  }
34
- export const rule = {
35
- meta: {
36
- messages: {
37
- [RULE_ID]: 'Field "{{fieldName}}" is unused',
38
- },
39
- docs: {
40
- description: 'Requires all fields to be used at some level by siblings operations.',
41
- category: 'Schema',
42
- url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
43
- requiresSiblings: true,
44
- requiresSchema: true,
45
- isDisabledForAllConfig: true,
46
- examples: [
47
- {
48
- title: 'Incorrect',
49
- code: /* GraphQL */ `
30
+ const rule = {
31
+ meta: {
32
+ messages: {
33
+ [RULE_ID]: 'Field "{{fieldName}}" is unused'
34
+ },
35
+ docs: {
36
+ description: "Requires all fields to be used at some level by siblings operations.",
37
+ category: "Schema",
38
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
39
+ requiresSiblings: true,
40
+ requiresSchema: true,
41
+ isDisabledForAllConfig: true,
42
+ examples: [
43
+ {
44
+ title: "Incorrect",
45
+ code: (
46
+ /* GraphQL */
47
+ `
50
48
  type User {
51
49
  id: ID!
52
50
  name: String
@@ -63,11 +61,14 @@ export const rule = {
63
61
  name
64
62
  }
65
63
  }
66
- `,
67
- },
68
- {
69
- title: 'Correct',
70
- code: /* GraphQL */ `
64
+ `
65
+ )
66
+ },
67
+ {
68
+ title: "Correct",
69
+ code: (
70
+ /* GraphQL */
71
+ `
71
72
  type User {
72
73
  id: ID!
73
74
  name: String
@@ -83,45 +84,48 @@ export const rule = {
83
84
  name
84
85
  }
85
86
  }
86
- `,
87
- },
88
- ],
89
- },
90
- type: 'suggestion',
91
- schema: [],
92
- hasSuggestions: true,
93
- },
94
- create(context) {
95
- const schema = requireGraphQLSchemaFromContext(RULE_ID, context);
96
- const siblingsOperations = requireSiblingsOperations(RULE_ID, context);
97
- const usedFields = getUsedFields(schema, siblingsOperations);
98
- return {
99
- FieldDefinition(node) {
100
- var _a;
101
- const fieldName = node.name.value;
102
- const parentTypeName = node.parent.name.value;
103
- const isUsed = (_a = usedFields[parentTypeName]) === null || _a === void 0 ? void 0 : _a.has(fieldName);
104
- if (isUsed) {
105
- return;
106
- }
107
- context.report({
108
- node: node.name,
109
- messageId: RULE_ID,
110
- data: { fieldName },
111
- suggest: [
112
- {
113
- desc: `Remove \`${fieldName}\` field`,
114
- fix(fixer) {
115
- const sourceCode = context.getSourceCode();
116
- const tokenBefore = sourceCode.getTokenBefore(node);
117
- const tokenAfter = sourceCode.getTokenAfter(node);
118
- const isEmptyType = tokenBefore.type === '{' && tokenAfter.type === '}';
119
- return fixer.remove((isEmptyType ? node.parent : node));
120
- },
121
- },
122
- ],
123
- });
124
- },
125
- };
87
+ `
88
+ )
89
+ }
90
+ ]
126
91
  },
92
+ type: "suggestion",
93
+ schema: [],
94
+ hasSuggestions: true
95
+ },
96
+ create(context) {
97
+ const schema = requireGraphQLSchemaFromContext(RULE_ID, context);
98
+ const siblingsOperations = requireSiblingsOperations(RULE_ID, context);
99
+ const usedFields = getUsedFields(schema, siblingsOperations);
100
+ return {
101
+ FieldDefinition(node) {
102
+ const fieldName = node.name.value;
103
+ const parentTypeName = node.parent.name.value;
104
+ const isUsed = usedFields[parentTypeName]?.has(fieldName);
105
+ if (isUsed) {
106
+ return;
107
+ }
108
+ context.report({
109
+ node: node.name,
110
+ messageId: RULE_ID,
111
+ data: { fieldName },
112
+ suggest: [
113
+ {
114
+ desc: `Remove \`${fieldName}\` field`,
115
+ fix(fixer) {
116
+ const sourceCode = context.getSourceCode();
117
+ const tokenBefore = sourceCode.getTokenBefore(node);
118
+ const tokenAfter = sourceCode.getTokenAfter(node);
119
+ const isEmptyType = tokenBefore.type === "{" && tokenAfter.type === "}";
120
+ return fixer.remove(isEmptyType ? node.parent : node);
121
+ }
122
+ }
123
+ ]
124
+ });
125
+ }
126
+ };
127
+ }
128
+ };
129
+ export {
130
+ rule
127
131
  };
@@ -1,5 +1,12 @@
1
1
  import { FromSchema } from 'json-schema-to-ts';
2
- import { GraphQLESLintRule } from '../types.cjs';
2
+ import { i as GraphQLESLintRule } from '../types-2e1afd7c.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
+
3
10
  declare const schema: {
4
11
  readonly type: "array";
5
12
  readonly maxItems: 1;
@@ -16,6 +23,7 @@ declare const schema: {
16
23
  };
17
24
  };
18
25
  };
19
- export type RuleOptions = FromSchema<typeof schema>;
20
- export declare const rule: GraphQLESLintRule<RuleOptions, true>;
21
- export {};
26
+ type RuleOptions = FromSchema<typeof schema>;
27
+ declare const rule: GraphQLESLintRule<RuleOptions, true>;
28
+
29
+ export { RuleOptions, rule };