@graphql-eslint/eslint-plugin 3.19.3 → 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,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;
@@ -52,6 +59,7 @@ declare const schema: {
52
59
  };
53
60
  };
54
61
  };
55
- export type RuleOptions = FromSchema<typeof schema>;
56
- export declare const rule: GraphQLESLintRule<RuleOptions>;
57
- export {};
62
+ type RuleOptions = FromSchema<typeof schema>;
63
+ declare const rule: GraphQLESLintRule<RuleOptions>;
64
+
65
+ export { RuleOptions, rule };
@@ -1,58 +1,66 @@
1
- import { Kind } from 'graphql';
2
- import { ARRAY_DEFAULT_OPTIONS, displayNodeName, englishJoinWords, requireGraphQLSchemaFromContext, truthy, } from '../utils.js';
3
- const RULE_ID = 'strict-id-in-types';
1
+ import { Kind } from "graphql";
2
+ import {
3
+ ARRAY_DEFAULT_OPTIONS,
4
+ displayNodeName,
5
+ englishJoinWords,
6
+ requireGraphQLSchemaFromContext,
7
+ truthy
8
+ } from "../utils.js";
9
+ const RULE_ID = "strict-id-in-types";
4
10
  const schema = {
5
- type: 'array',
6
- maxItems: 1,
7
- items: {
8
- type: 'object',
11
+ type: "array",
12
+ maxItems: 1,
13
+ items: {
14
+ type: "object",
15
+ additionalProperties: false,
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",
9
27
  additionalProperties: false,
10
28
  properties: {
11
- acceptedIdNames: {
12
- ...ARRAY_DEFAULT_OPTIONS,
13
- default: ['id'],
14
- },
15
- acceptedIdTypes: {
16
- ...ARRAY_DEFAULT_OPTIONS,
17
- default: ['ID'],
18
- },
19
- exceptions: {
20
- type: 'object',
21
- additionalProperties: false,
22
- properties: {
23
- types: {
24
- ...ARRAY_DEFAULT_OPTIONS,
25
- description: 'This is used to exclude types with names that match one of the specified values.',
26
- },
27
- suffixes: {
28
- ...ARRAY_DEFAULT_OPTIONS,
29
- description: 'This is used to exclude types with names with suffixes that match one of the specified values.',
30
- },
31
- },
32
- },
33
- },
34
- },
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
+ }
35
41
  };
36
- export const rule = {
37
- meta: {
38
- type: 'suggestion',
39
- docs: {
40
- 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.',
41
- category: 'Schema',
42
- recommended: true,
43
- url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
44
- requiresSchema: true,
45
- examples: [
46
- {
47
- title: 'Incorrect',
48
- usage: [
49
- {
50
- acceptedIdNames: ['id', '_id'],
51
- acceptedIdTypes: ['ID'],
52
- exceptions: { suffixes: ['Payload'] },
53
- },
54
- ],
55
- code: /* GraphQL */ `
42
+ const rule = {
43
+ meta: {
44
+ type: "suggestion",
45
+ docs: {
46
+ 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.",
47
+ category: "Schema",
48
+ recommended: true,
49
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
50
+ requiresSchema: true,
51
+ examples: [
52
+ {
53
+ title: "Incorrect",
54
+ usage: [
55
+ {
56
+ acceptedIdNames: ["id", "_id"],
57
+ acceptedIdTypes: ["ID"],
58
+ exceptions: { suffixes: ["Payload"] }
59
+ }
60
+ ],
61
+ code: (
62
+ /* GraphQL */
63
+ `
56
64
  # Incorrect field name
57
65
  type InvalidFieldName {
58
66
  key: ID!
@@ -73,18 +81,21 @@ export const rule = {
73
81
  id: ID!
74
82
  _id: ID!
75
83
  }
76
- `,
77
- },
78
- {
79
- title: 'Correct',
80
- usage: [
81
- {
82
- acceptedIdNames: ['id', '_id'],
83
- acceptedIdTypes: ['ID'],
84
- exceptions: { types: ['Error'], suffixes: ['Payload'] },
85
- },
86
- ],
87
- code: /* GraphQL */ `
84
+ `
85
+ )
86
+ },
87
+ {
88
+ title: "Correct",
89
+ usage: [
90
+ {
91
+ acceptedIdNames: ["id", "_id"],
92
+ acceptedIdTypes: ["ID"],
93
+ exceptions: { types: ["Error"], suffixes: ["Payload"] }
94
+ }
95
+ ],
96
+ code: (
97
+ /* GraphQL */
98
+ `
88
99
  type User {
89
100
  id: ID!
90
101
  }
@@ -100,62 +111,57 @@ export const rule = {
100
111
  type Error {
101
112
  message: String!
102
113
  }
103
- `,
104
- },
105
- ],
106
- },
107
- schema,
114
+ `
115
+ )
116
+ }
117
+ ]
108
118
  },
109
- create(context) {
110
- const options = {
111
- acceptedIdNames: ['id'],
112
- acceptedIdTypes: ['ID'],
113
- exceptions: {},
114
- ...context.options[0],
115
- };
116
- const schema = requireGraphQLSchemaFromContext(RULE_ID, context);
117
- const rootTypeNames = [
118
- schema.getQueryType(),
119
- schema.getMutationType(),
120
- schema.getSubscriptionType(),
121
- ]
122
- .filter(truthy)
123
- .map(type => type.name);
124
- const selector = `ObjectTypeDefinition[name.value!=/^(${rootTypeNames.join('|')})$/]`;
125
- return {
126
- [selector](node) {
127
- var _a, _b, _c;
128
- const typeName = node.name.value;
129
- const shouldIgnoreNode = ((_a = options.exceptions.types) === null || _a === void 0 ? void 0 : _a.includes(typeName)) ||
130
- ((_b = options.exceptions.suffixes) === null || _b === void 0 ? void 0 : _b.some(suffix => typeName.endsWith(suffix)));
131
- if (shouldIgnoreNode) {
132
- return;
133
- }
134
- const validIds = (_c = node.fields) === null || _c === void 0 ? void 0 : _c.filter(field => {
135
- const fieldNode = field.rawNode();
136
- const isValidIdName = options.acceptedIdNames.includes(fieldNode.name.value);
137
- // To be a valid type, it must be non-null and one of the accepted types.
138
- let isValidIdType = false;
139
- if (fieldNode.type.kind === Kind.NON_NULL_TYPE &&
140
- fieldNode.type.type.kind === Kind.NAMED_TYPE) {
141
- isValidIdType = options.acceptedIdTypes.includes(fieldNode.type.type.name.value);
142
- }
143
- return isValidIdName && isValidIdType;
144
- });
145
- // Usually, there should be only one unique identifier field per type.
146
- // Some clients allow multiple fields to be used. If more people need this,
147
- // we can extend this rule later.
148
- if ((validIds === null || validIds === void 0 ? void 0 : validIds.length) !== 1) {
149
- const pluralNamesSuffix = options.acceptedIdNames.length > 1 ? 's' : '';
150
- const pluralTypesSuffix = options.acceptedIdTypes.length > 1 ? 's' : '';
151
- context.report({
152
- node: node.name,
153
- message: `${displayNodeName(node)} must have exactly one non-nullable unique identifier.
119
+ schema
120
+ },
121
+ create(context) {
122
+ const options = {
123
+ acceptedIdNames: ["id"],
124
+ acceptedIdTypes: ["ID"],
125
+ exceptions: {},
126
+ ...context.options[0]
127
+ };
128
+ const schema2 = requireGraphQLSchemaFromContext(RULE_ID, context);
129
+ const rootTypeNames = [
130
+ schema2.getQueryType(),
131
+ schema2.getMutationType(),
132
+ schema2.getSubscriptionType()
133
+ ].filter(truthy).map((type) => type.name);
134
+ const selector = `ObjectTypeDefinition[name.value!=/^(${rootTypeNames.join("|")})$/]`;
135
+ return {
136
+ [selector](node) {
137
+ const typeName = node.name.value;
138
+ const shouldIgnoreNode = options.exceptions.types?.includes(typeName) || options.exceptions.suffixes?.some((suffix) => typeName.endsWith(suffix));
139
+ if (shouldIgnoreNode) {
140
+ return;
141
+ }
142
+ const validIds = node.fields?.filter((field) => {
143
+ const fieldNode = field.rawNode();
144
+ const isValidIdName = options.acceptedIdNames.includes(fieldNode.name.value);
145
+ let isValidIdType = false;
146
+ if (fieldNode.type.kind === Kind.NON_NULL_TYPE && fieldNode.type.type.kind === Kind.NAMED_TYPE) {
147
+ isValidIdType = options.acceptedIdTypes.includes(fieldNode.type.type.name.value);
148
+ }
149
+ return isValidIdName && isValidIdType;
150
+ });
151
+ if (validIds?.length !== 1) {
152
+ const pluralNamesSuffix = options.acceptedIdNames.length > 1 ? "s" : "";
153
+ const pluralTypesSuffix = options.acceptedIdTypes.length > 1 ? "s" : "";
154
+ context.report({
155
+ node: node.name,
156
+ message: `${displayNodeName(node)} must have exactly one non-nullable unique identifier.
154
157
  Accepted name${pluralNamesSuffix}: ${englishJoinWords(options.acceptedIdNames)}.
155
- Accepted type${pluralTypesSuffix}: ${englishJoinWords(options.acceptedIdTypes)}.`,
156
- });
157
- }
158
- },
159
- };
160
- },
158
+ Accepted type${pluralTypesSuffix}: ${englishJoinWords(options.acceptedIdTypes)}.`
159
+ });
160
+ }
161
+ }
162
+ };
163
+ }
164
+ };
165
+ export {
166
+ rule
161
167
  };
@@ -0,0 +1,13 @@
1
+ import { ExecutableDefinitionNode } from 'graphql';
2
+ import { GraphQLESTreeNode } from '../estree-converter/types.mjs';
3
+ import { g as GraphQLESLintRuleContext, i as GraphQLESLintRule } from '../types-2e1afd7c.js';
4
+ import 'eslint';
5
+ import 'estree';
6
+ import '@graphql-tools/utils';
7
+ import 'graphql-config';
8
+ import 'json-schema-to-ts';
9
+
10
+ declare const checkNode: (context: GraphQLESLintRuleContext, node: GraphQLESTreeNode<ExecutableDefinitionNode>, ruleId: string) => void;
11
+ declare const rule: GraphQLESLintRule;
12
+
13
+ export { checkNode, rule };
@@ -1,46 +1,43 @@
1
- import { relative } from 'path';
2
- import { Kind } from 'graphql';
3
- import { CWD, normalizePath, requireSiblingsOperations, VIRTUAL_DOCUMENT_REGEX } from '../utils.js';
4
- const RULE_ID = 'unique-fragment-name';
5
- export const checkNode = (context, node, ruleId) => {
6
- const documentName = node.name.value;
7
- const siblings = requireSiblingsOperations(ruleId, context);
8
- const siblingDocuments = node.kind === Kind.FRAGMENT_DEFINITION
9
- ? siblings.getFragment(documentName)
10
- : siblings.getOperation(documentName);
11
- const filepath = context.getFilename();
12
- const conflictingDocuments = siblingDocuments.filter(f => {
13
- var _a;
14
- const isSameName = ((_a = f.document.name) === null || _a === void 0 ? void 0 : _a.value) === documentName;
15
- const isSamePath = normalizePath(f.filePath) === normalizePath(filepath);
16
- return isSameName && !isSamePath;
1
+ import { relative } from "path";
2
+ import { Kind } from "graphql";
3
+ import { CWD, normalizePath, requireSiblingsOperations, VIRTUAL_DOCUMENT_REGEX } from "../utils.js";
4
+ const RULE_ID = "unique-fragment-name";
5
+ const checkNode = (context, node, ruleId) => {
6
+ const documentName = node.name.value;
7
+ const siblings = requireSiblingsOperations(ruleId, context);
8
+ const siblingDocuments = node.kind === Kind.FRAGMENT_DEFINITION ? siblings.getFragment(documentName) : siblings.getOperation(documentName);
9
+ const filepath = context.getFilename();
10
+ const conflictingDocuments = siblingDocuments.filter((f) => {
11
+ const isSameName = f.document.name?.value === documentName;
12
+ const isSamePath = normalizePath(f.filePath) === normalizePath(filepath);
13
+ return isSameName && !isSamePath;
14
+ });
15
+ if (conflictingDocuments.length > 0) {
16
+ context.report({
17
+ messageId: ruleId,
18
+ data: {
19
+ documentName,
20
+ summary: conflictingDocuments.map((f) => ` ${relative(CWD, f.filePath.replace(VIRTUAL_DOCUMENT_REGEX, ""))}`).join("\n")
21
+ },
22
+ // @ts-expect-error name will exist
23
+ node: node.name
17
24
  });
18
- if (conflictingDocuments.length > 0) {
19
- context.report({
20
- messageId: ruleId,
21
- data: {
22
- documentName,
23
- summary: conflictingDocuments
24
- .map(f => `\t${relative(CWD, f.filePath.replace(VIRTUAL_DOCUMENT_REGEX, ''))}`)
25
- .join('\n'),
26
- },
27
- // @ts-expect-error name will exist
28
- node: node.name,
29
- });
30
- }
25
+ }
31
26
  };
32
- export const rule = {
33
- meta: {
34
- type: 'suggestion',
35
- docs: {
36
- category: 'Operations',
37
- description: 'Enforce unique fragment names across your project.',
38
- url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
39
- requiresSiblings: true,
40
- examples: [
41
- {
42
- title: 'Incorrect',
43
- code: /* GraphQL */ `
27
+ const rule = {
28
+ meta: {
29
+ type: "suggestion",
30
+ docs: {
31
+ category: "Operations",
32
+ description: "Enforce unique fragment names across your project.",
33
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
34
+ requiresSiblings: true,
35
+ examples: [
36
+ {
37
+ title: "Incorrect",
38
+ code: (
39
+ /* GraphQL */
40
+ `
44
41
  # user.fragment.graphql
45
42
  fragment UserFields on User {
46
43
  id
@@ -52,11 +49,14 @@ export const rule = {
52
49
  fragment UserFields on User {
53
50
  id
54
51
  }
55
- `,
56
- },
57
- {
58
- title: 'Correct',
59
- code: /* GraphQL */ `
52
+ `
53
+ )
54
+ },
55
+ {
56
+ title: "Correct",
57
+ code: (
58
+ /* GraphQL */
59
+ `
60
60
  # user.fragment.graphql
61
61
  fragment AllUserFields on User {
62
62
  id
@@ -68,20 +68,25 @@ export const rule = {
68
68
  fragment UserFields on User {
69
69
  id
70
70
  }
71
- `,
72
- },
73
- ],
74
- },
75
- messages: {
76
- [RULE_ID]: 'Fragment named "{{ documentName }}" already defined in:\n{{ summary }}',
77
- },
78
- schema: [],
71
+ `
72
+ )
73
+ }
74
+ ]
79
75
  },
80
- create(context) {
81
- return {
82
- FragmentDefinition(node) {
83
- checkNode(context, node, RULE_ID);
84
- },
85
- };
76
+ messages: {
77
+ [RULE_ID]: 'Fragment named "{{ documentName }}" already defined in:\n{{ summary }}'
86
78
  },
79
+ schema: []
80
+ },
81
+ create(context) {
82
+ return {
83
+ FragmentDefinition(node) {
84
+ checkNode(context, node, RULE_ID);
85
+ }
86
+ };
87
+ }
88
+ };
89
+ export {
90
+ checkNode,
91
+ rule
87
92
  };
@@ -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,17 +1,19 @@
1
- import { checkNode } from './unique-fragment-name.js';
2
- const RULE_ID = 'unique-operation-name';
3
- export const 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: true,
11
- examples: [
12
- {
13
- title: 'Incorrect',
14
- code: /* GraphQL */ `
1
+ import { checkNode } from "./unique-fragment-name.js";
2
+ const RULE_ID = "unique-operation-name";
3
+ const 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: true,
11
+ examples: [
12
+ {
13
+ title: "Incorrect",
14
+ code: (
15
+ /* GraphQL */
16
+ `
15
17
  # foo.query.graphql
16
18
  query user {
17
19
  user {
@@ -25,11 +27,14 @@ export const rule = {
25
27
  id
26
28
  }
27
29
  }
28
- `,
29
- },
30
- {
31
- title: 'Correct',
32
- code: /* GraphQL */ `
30
+ `
31
+ )
32
+ },
33
+ {
34
+ title: "Correct",
35
+ code: (
36
+ /* GraphQL */
37
+ `
33
38
  # foo.query.graphql
34
39
  query user {
35
40
  user {
@@ -43,20 +48,24 @@ export const rule = {
43
48
  id
44
49
  }
45
50
  }
46
- `,
47
- },
48
- ],
49
- },
50
- messages: {
51
- [RULE_ID]: 'Operation named "{{ documentName }}" already defined in:\n{{ summary }}',
52
- },
53
- schema: [],
51
+ `
52
+ )
53
+ }
54
+ ]
54
55
  },
55
- create(context) {
56
- return {
57
- 'OperationDefinition[name!=undefined]'(node) {
58
- checkNode(context, node, RULE_ID);
59
- },
60
- };
56
+ messages: {
57
+ [RULE_ID]: 'Operation named "{{ documentName }}" already defined in:\n{{ summary }}'
61
58
  },
59
+ schema: []
60
+ },
61
+ create(context) {
62
+ return {
63
+ "OperationDefinition[name!=undefined]"(node) {
64
+ checkNode(context, node, RULE_ID);
65
+ }
66
+ };
67
+ }
68
+ };
69
+ export {
70
+ rule
62
71
  };
@@ -0,0 +1,12 @@
1
+ import { GraphQLProjectConfig } from 'graphql-config';
2
+ import { P as ParserOptions, S as Schema } from './types-2e1afd7c.js';
3
+ import '@graphql-tools/utils';
4
+ import 'eslint';
5
+ import 'estree';
6
+ import 'graphql';
7
+ import 'json-schema-to-ts';
8
+ import './estree-converter/types.mjs';
9
+
10
+ declare function getSchema(project: GraphQLProjectConfig, schemaOptions?: ParserOptions['schemaOptions']): Schema;
11
+
12
+ export { getSchema };
package/esm/schema.js CHANGED
@@ -1,28 +1,31 @@
1
- import debugFactory from 'debug';
2
- import fg from 'fast-glob';
3
- import { GraphQLSchema } from 'graphql';
4
- import { ModuleCache } from './cache.js';
1
+ import debugFactory from "debug";
2
+ import fg from "fast-glob";
3
+ import { GraphQLSchema } from "graphql";
4
+ import { ModuleCache } from "./cache.js";
5
5
  const schemaCache = new ModuleCache();
6
- const debug = debugFactory('graphql-eslint:schema');
7
- export function getSchema(project, schemaOptions) {
8
- const schemaKey = project.schema;
9
- if (!schemaKey) {
10
- return null;
11
- }
12
- const cache = schemaCache.get(schemaKey);
13
- if (cache) {
14
- return cache;
15
- }
16
- debug('Loading schema from %o', project.schema);
17
- const schema = project.loadSchemaSync(project.schema, 'GraphQLSchema', {
18
- ...schemaOptions,
19
- pluckConfig: project.extensions.pluckConfig,
20
- });
21
- if (debug.enabled) {
22
- debug('Schema loaded: %o', schema instanceof GraphQLSchema);
23
- const schemaPaths = fg.sync(project.schema, { absolute: true });
24
- debug('Schema pointers %O', schemaPaths);
25
- }
26
- schemaCache.set(schemaKey, schema);
27
- return schema;
6
+ const debug = debugFactory("graphql-eslint:schema");
7
+ function getSchema(project, schemaOptions) {
8
+ const schemaKey = project.schema;
9
+ if (!schemaKey) {
10
+ return null;
11
+ }
12
+ const cache = schemaCache.get(schemaKey);
13
+ if (cache) {
14
+ return cache;
15
+ }
16
+ debug("Loading schema from %o", project.schema);
17
+ const schema = project.loadSchemaSync(project.schema, "GraphQLSchema", {
18
+ ...schemaOptions,
19
+ pluckConfig: project.extensions.pluckConfig
20
+ });
21
+ if (debug.enabled) {
22
+ debug("Schema loaded: %o", schema instanceof GraphQLSchema);
23
+ const schemaPaths = fg.sync(project.schema, { absolute: true });
24
+ debug("Schema pointers %O", schemaPaths);
25
+ }
26
+ schemaCache.set(schemaKey, schema);
27
+ return schema;
28
28
  }
29
+ export {
30
+ getSchema
31
+ };
@@ -0,0 +1,8 @@
1
+ import 'graphql';
2
+ import 'graphql-config';
3
+ export { F as FragmentSource, k as OperationSource, j as SiblingOperations, l as getSiblings } from './types-2e1afd7c.js';
4
+ import '@graphql-tools/utils';
5
+ import 'eslint';
6
+ import 'estree';
7
+ import 'json-schema-to-ts';
8
+ import './estree-converter/types.mjs';