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

Sign up to get free protection for your applications and to get access to all the features.
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,85 +1,93 @@
1
- import { ARRAY_DEFAULT_OPTIONS, getLocation, pascalCase } from '../utils.js';
2
- const RULE_ID = 'lone-executable-definition';
3
- const definitionTypes = ['fragment', 'query', 'mutation', 'subscription'];
1
+ import { ARRAY_DEFAULT_OPTIONS, getLocation, pascalCase } from "../utils.js";
2
+ const RULE_ID = "lone-executable-definition";
3
+ const definitionTypes = ["fragment", "query", "mutation", "subscription"];
4
4
  const schema = {
5
- type: 'array',
6
- maxItems: 1,
7
- items: {
8
- type: 'object',
9
- minProperties: 1,
10
- additionalProperties: false,
11
- properties: {
12
- ignore: {
13
- ...ARRAY_DEFAULT_OPTIONS,
14
- maxItems: 3,
15
- items: {
16
- enum: definitionTypes,
17
- },
18
- description: 'Allow certain definitions to be placed alongside others.',
19
- },
5
+ type: "array",
6
+ maxItems: 1,
7
+ items: {
8
+ type: "object",
9
+ minProperties: 1,
10
+ additionalProperties: false,
11
+ properties: {
12
+ ignore: {
13
+ ...ARRAY_DEFAULT_OPTIONS,
14
+ maxItems: 3,
15
+ // ignore all 4 types is redundant
16
+ items: {
17
+ enum: definitionTypes
20
18
  },
21
- },
19
+ description: "Allow certain definitions to be placed alongside others."
20
+ }
21
+ }
22
+ }
22
23
  };
23
- export const rule = {
24
- meta: {
25
- type: 'suggestion',
26
- docs: {
27
- category: 'Operations',
28
- description: 'Require queries, mutations, subscriptions or fragments to be located in separate files.',
29
- url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
30
- examples: [
31
- {
32
- title: 'Incorrect',
33
- code: /* GraphQL */ `
24
+ const rule = {
25
+ meta: {
26
+ type: "suggestion",
27
+ docs: {
28
+ category: "Operations",
29
+ description: "Require queries, mutations, subscriptions or fragments to be located in separate files.",
30
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
31
+ examples: [
32
+ {
33
+ title: "Incorrect",
34
+ code: (
35
+ /* GraphQL */
36
+ `
34
37
  query Foo {
35
38
  id
36
39
  }
37
40
  fragment Bar on Baz {
38
41
  id
39
42
  }
40
- `,
41
- },
42
- {
43
- title: 'Correct',
44
- code: /* GraphQL */ `
43
+ `
44
+ )
45
+ },
46
+ {
47
+ title: "Correct",
48
+ code: (
49
+ /* GraphQL */
50
+ `
45
51
  query Foo {
46
52
  id
47
53
  }
48
- `,
49
- },
50
- ],
51
- },
52
- messages: {
53
- [RULE_ID]: '{{name}} should be in a separate file.',
54
- },
55
- schema,
54
+ `
55
+ )
56
+ }
57
+ ]
56
58
  },
57
- create(context) {
58
- var _a;
59
- const ignore = new Set(((_a = context.options[0]) === null || _a === void 0 ? void 0 : _a.ignore) || []);
60
- const definitions = [];
61
- return {
62
- ':matches(OperationDefinition, FragmentDefinition)'(node) {
63
- const type = 'operation' in node ? node.operation : 'fragment';
64
- if (!ignore.has(type)) {
65
- definitions.push({ type, node });
66
- }
67
- },
68
- 'Document:exit'() {
69
- var _a, _b;
70
- for (const { node, type } of definitions.slice(1) /* ignore first definition */) {
71
- let name = pascalCase(type);
72
- const definitionName = (_a = node.name) === null || _a === void 0 ? void 0 : _a.value;
73
- if (definitionName) {
74
- name += ` "${definitionName}"`;
75
- }
76
- context.report({
77
- loc: ((_b = node.name) === null || _b === void 0 ? void 0 : _b.loc) || getLocation(node.loc.start, type),
78
- messageId: RULE_ID,
79
- data: { name },
80
- });
81
- }
82
- },
83
- };
59
+ messages: {
60
+ [RULE_ID]: "{{name}} should be in a separate file."
84
61
  },
62
+ schema
63
+ },
64
+ create(context) {
65
+ const ignore = new Set(context.options[0]?.ignore || []);
66
+ const definitions = [];
67
+ return {
68
+ ":matches(OperationDefinition, FragmentDefinition)"(node) {
69
+ const type = "operation" in node ? node.operation : "fragment";
70
+ if (!ignore.has(type)) {
71
+ definitions.push({ type, node });
72
+ }
73
+ },
74
+ "Document:exit"() {
75
+ for (const { node, type } of definitions.slice(1)) {
76
+ let name = pascalCase(type);
77
+ const definitionName = node.name?.value;
78
+ if (definitionName) {
79
+ name += ` "${definitionName}"`;
80
+ }
81
+ context.report({
82
+ loc: node.name?.loc || getLocation(node.loc.start, type),
83
+ messageId: RULE_ID,
84
+ data: { name }
85
+ });
86
+ }
87
+ }
88
+ };
89
+ }
90
+ };
91
+ export {
92
+ rule
85
93
  };
@@ -1,7 +1,14 @@
1
1
  import { FromSchema } from 'json-schema-to-ts';
2
- import { GraphQLESLintRule } from '../types.cjs';
3
- import { CaseStyle as _CaseStyle } from '../utils.cjs';
4
- type CaseStyle = _CaseStyle | 'matchDocumentStyle';
2
+ import { i as GraphQLESLintRule } from '../types-2e1afd7c.js';
3
+ import { CaseStyle as CaseStyle$1 } from '../utils.mjs';
4
+ import '@graphql-tools/utils';
5
+ import 'eslint';
6
+ import 'estree';
7
+ import 'graphql';
8
+ import 'graphql-config';
9
+ import '../estree-converter/types.mjs';
10
+
11
+ type CaseStyle = CaseStyle$1 | 'matchDocumentStyle';
5
12
  declare const schema: {
6
13
  readonly definitions: {
7
14
  readonly asString: {
@@ -67,6 +74,7 @@ declare const schema: {
67
74
  };
68
75
  };
69
76
  };
70
- export type RuleOptions = FromSchema<typeof schema>;
71
- export declare const rule: GraphQLESLintRule<RuleOptions>;
72
- export {};
77
+ type RuleOptions = FromSchema<typeof schema>;
78
+ declare const rule: GraphQLESLintRule<RuleOptions>;
79
+
80
+ export { RuleOptions, rule };
@@ -1,74 +1,83 @@
1
- import { basename, extname } from 'path';
2
- import { Kind } from 'graphql';
3
- import { convertCase, REPORT_ON_FIRST_CHARACTER, VIRTUAL_DOCUMENT_REGEX, } from '../utils.js';
4
- const MATCH_EXTENSION = 'MATCH_EXTENSION';
5
- const MATCH_STYLE = 'MATCH_STYLE';
1
+ import { basename, extname } from "path";
2
+ import { Kind } from "graphql";
3
+ import {
4
+ convertCase,
5
+ REPORT_ON_FIRST_CHARACTER,
6
+ VIRTUAL_DOCUMENT_REGEX
7
+ } from "../utils.js";
8
+ const MATCH_EXTENSION = "MATCH_EXTENSION";
9
+ const MATCH_STYLE = "MATCH_STYLE";
6
10
  const CASE_STYLES = [
7
- 'camelCase',
8
- 'PascalCase',
9
- 'snake_case',
10
- 'UPPER_CASE',
11
- 'kebab-case',
12
- 'matchDocumentStyle',
11
+ "camelCase",
12
+ "PascalCase",
13
+ "snake_case",
14
+ "UPPER_CASE",
15
+ "kebab-case",
16
+ "matchDocumentStyle"
13
17
  ];
14
18
  const schemaOption = {
15
- oneOf: [{ $ref: '#/definitions/asString' }, { $ref: '#/definitions/asObject' }],
19
+ oneOf: [{ $ref: "#/definitions/asString" }, { $ref: "#/definitions/asObject" }]
16
20
  };
17
21
  const schema = {
18
- definitions: {
19
- asString: {
20
- enum: CASE_STYLES,
21
- description: `One of: ${CASE_STYLES.map(t => `\`${t}\``).join(', ')}`,
22
- },
23
- asObject: {
24
- type: 'object',
25
- additionalProperties: false,
26
- minProperties: 1,
27
- properties: {
28
- style: { enum: CASE_STYLES },
29
- suffix: { type: 'string' },
30
- prefix: { type: 'string' },
31
- },
32
- },
33
- },
34
- type: 'array',
35
- minItems: 1,
36
- maxItems: 1,
37
- items: {
38
- type: 'object',
39
- additionalProperties: false,
40
- minProperties: 1,
41
- properties: {
42
- fileExtension: { enum: ['.gql', '.graphql'] },
43
- query: schemaOption,
44
- mutation: schemaOption,
45
- subscription: schemaOption,
46
- fragment: schemaOption,
47
- },
22
+ definitions: {
23
+ asString: {
24
+ enum: CASE_STYLES,
25
+ description: `One of: ${CASE_STYLES.map((t) => `\`${t}\``).join(", ")}`
48
26
  },
27
+ asObject: {
28
+ type: "object",
29
+ additionalProperties: false,
30
+ minProperties: 1,
31
+ properties: {
32
+ style: { enum: CASE_STYLES },
33
+ suffix: { type: "string" },
34
+ prefix: { type: "string" }
35
+ }
36
+ }
37
+ },
38
+ type: "array",
39
+ minItems: 1,
40
+ maxItems: 1,
41
+ items: {
42
+ type: "object",
43
+ additionalProperties: false,
44
+ minProperties: 1,
45
+ properties: {
46
+ fileExtension: { enum: [".gql", ".graphql"] },
47
+ query: schemaOption,
48
+ mutation: schemaOption,
49
+ subscription: schemaOption,
50
+ fragment: schemaOption
51
+ }
52
+ }
49
53
  };
50
- export const rule = {
51
- meta: {
52
- type: 'suggestion',
53
- docs: {
54
- category: 'Operations',
55
- description: 'This rule allows you to enforce that the file name should match the operation name.',
56
- url: 'https://the-guild.dev/graphql/eslint/rules/match-document-filename',
57
- examples: [
58
- {
59
- title: 'Correct',
60
- usage: [{ fileExtension: '.gql' }],
61
- code: /* GraphQL */ `
54
+ const rule = {
55
+ meta: {
56
+ type: "suggestion",
57
+ docs: {
58
+ category: "Operations",
59
+ description: "This rule allows you to enforce that the file name should match the operation name.",
60
+ url: "https://the-guild.dev/graphql/eslint/rules/match-document-filename",
61
+ examples: [
62
+ {
63
+ title: "Correct",
64
+ usage: [{ fileExtension: ".gql" }],
65
+ code: (
66
+ /* GraphQL */
67
+ `
62
68
  # user.gql
63
69
  type User {
64
70
  id: ID!
65
71
  }
66
- `,
67
- },
68
- {
69
- title: 'Correct',
70
- usage: [{ query: 'snake_case' }],
71
- code: /* GraphQL */ `
72
+ `
73
+ )
74
+ },
75
+ {
76
+ title: "Correct",
77
+ usage: [{ query: "snake_case" }],
78
+ code: (
79
+ /* GraphQL */
80
+ `
72
81
  # user_by_id.gql
73
82
  query UserById {
74
83
  userById(id: 5) {
@@ -77,43 +86,55 @@ export const rule = {
77
86
  fullName
78
87
  }
79
88
  }
80
- `,
81
- },
82
- {
83
- title: 'Correct',
84
- usage: [{ fragment: { style: 'kebab-case', suffix: '.fragment' } }],
85
- code: /* GraphQL */ `
89
+ `
90
+ )
91
+ },
92
+ {
93
+ title: "Correct",
94
+ usage: [{ fragment: { style: "kebab-case", suffix: ".fragment" } }],
95
+ code: (
96
+ /* GraphQL */
97
+ `
86
98
  # user-fields.fragment.gql
87
99
  fragment user_fields on User {
88
100
  id
89
101
  email
90
102
  }
91
- `,
92
- },
93
- {
94
- title: 'Correct',
95
- usage: [{ mutation: { style: 'PascalCase', suffix: 'Mutation' } }],
96
- code: /* GraphQL */ `
103
+ `
104
+ )
105
+ },
106
+ {
107
+ title: "Correct",
108
+ usage: [{ mutation: { style: "PascalCase", suffix: "Mutation" } }],
109
+ code: (
110
+ /* GraphQL */
111
+ `
97
112
  # DeleteUserMutation.gql
98
113
  mutation DELETE_USER {
99
114
  deleteUser(id: 5)
100
115
  }
101
- `,
102
- },
103
- {
104
- title: 'Incorrect',
105
- usage: [{ fileExtension: '.graphql' }],
106
- code: /* GraphQL */ `
116
+ `
117
+ )
118
+ },
119
+ {
120
+ title: "Incorrect",
121
+ usage: [{ fileExtension: ".graphql" }],
122
+ code: (
123
+ /* GraphQL */
124
+ `
107
125
  # post.gql
108
126
  type Post {
109
127
  id: ID!
110
128
  }
111
- `,
112
- },
113
- {
114
- title: 'Incorrect',
115
- usage: [{ query: 'PascalCase' }],
116
- code: /* GraphQL */ `
129
+ `
130
+ )
131
+ },
132
+ {
133
+ title: "Incorrect",
134
+ usage: [{ query: "PascalCase" }],
135
+ code: (
136
+ /* GraphQL */
137
+ `
117
138
  # user-by-id.gql
118
139
  query UserById {
119
140
  userById(id: 5) {
@@ -122,110 +143,119 @@ export const rule = {
122
143
  fullName
123
144
  }
124
145
  }
125
- `,
126
- },
127
- {
128
- title: 'Correct',
129
- usage: [{ fragment: { style: 'kebab-case', prefix: 'mutation.' } }],
130
- code: /* GraphQL */ `
146
+ `
147
+ )
148
+ },
149
+ {
150
+ title: "Correct",
151
+ usage: [{ fragment: { style: "kebab-case", prefix: "mutation." } }],
152
+ code: (
153
+ /* GraphQL */
154
+ `
131
155
  # mutation.add-alert.graphql
132
156
  mutation addAlert {
133
157
  foo
134
158
  }
135
- `,
136
- },
137
- {
138
- title: 'Correct',
139
- usage: [{ fragment: { prefix: 'query.' } }],
140
- code: /* GraphQL */ `
159
+ `
160
+ )
161
+ },
162
+ {
163
+ title: "Correct",
164
+ usage: [{ fragment: { prefix: "query." } }],
165
+ code: (
166
+ /* GraphQL */
167
+ `
141
168
  # query.me.graphql
142
169
  query me {
143
170
  foo
144
171
  }
145
- `,
146
- },
147
- ],
148
- configOptions: [
149
- {
150
- query: 'kebab-case',
151
- mutation: 'kebab-case',
152
- subscription: 'kebab-case',
153
- fragment: 'kebab-case',
154
- },
155
- ],
156
- },
157
- messages: {
158
- [MATCH_EXTENSION]: 'File extension "{{ fileExtension }}" don\'t match extension "{{ expectedFileExtension }}"',
159
- [MATCH_STYLE]: 'Unexpected filename "{{ filename }}". Rename it to "{{ expectedFilename }}"',
160
- },
161
- schema,
162
- },
163
- create(context) {
164
- const options = context.options[0] || {
165
- fileExtension: null,
166
- };
167
- const filePath = context.getFilename();
168
- const isVirtualFile = VIRTUAL_DOCUMENT_REGEX.test(filePath);
169
- if (process.env.NODE_ENV !== 'test' && isVirtualFile) {
170
- // Skip validation for code files
171
- return {};
172
+ `
173
+ )
174
+ }
175
+ ],
176
+ configOptions: [
177
+ {
178
+ query: "kebab-case",
179
+ mutation: "kebab-case",
180
+ subscription: "kebab-case",
181
+ fragment: "kebab-case"
172
182
  }
173
- const fileExtension = extname(filePath);
174
- const filename = basename(filePath, fileExtension);
175
- return {
176
- Document(documentNode) {
177
- var _a;
178
- if (options.fileExtension && options.fileExtension !== fileExtension) {
179
- context.report({
180
- loc: REPORT_ON_FIRST_CHARACTER,
181
- messageId: MATCH_EXTENSION,
182
- data: {
183
- fileExtension,
184
- expectedFileExtension: options.fileExtension,
185
- },
186
- });
187
- }
188
- const firstOperation = documentNode.definitions.find(n => n.kind === Kind.OPERATION_DEFINITION);
189
- const firstFragment = documentNode.definitions.find(n => n.kind === Kind.FRAGMENT_DEFINITION);
190
- const node = firstOperation || firstFragment;
191
- if (!node) {
192
- return;
193
- }
194
- const docName = (_a = node.name) === null || _a === void 0 ? void 0 : _a.value;
195
- if (!docName) {
196
- return;
197
- }
198
- const docType = 'operation' in node ? node.operation : 'fragment';
199
- let option = options[docType];
200
- if (!option) {
201
- // Config not provided
202
- return;
203
- }
204
- if (typeof option === 'string') {
205
- option = { style: option };
206
- }
207
- const expectedExtension = options.fileExtension || fileExtension;
208
- let expectedFilename = option.prefix || '';
209
- if (option.style) {
210
- expectedFilename +=
211
- option.style === 'matchDocumentStyle' ? docName : convertCase(option.style, docName);
212
- }
213
- else {
214
- expectedFilename += filename;
215
- }
216
- expectedFilename += (option.suffix || '') + expectedExtension;
217
- const filenameWithExtension = filename + expectedExtension;
218
- if (expectedFilename !== filenameWithExtension) {
219
- context.report({
220
- loc: REPORT_ON_FIRST_CHARACTER,
221
- messageId: MATCH_STYLE,
222
- data: {
223
- expectedFilename,
224
- filename: filenameWithExtension,
225
- },
226
- });
227
- }
228
- },
229
- };
183
+ ]
230
184
  },
185
+ messages: {
186
+ [MATCH_EXTENSION]: `File extension "{{ fileExtension }}" don't match extension "{{ expectedFileExtension }}"`,
187
+ [MATCH_STYLE]: 'Unexpected filename "{{ filename }}". Rename it to "{{ expectedFilename }}"'
188
+ },
189
+ schema
190
+ },
191
+ create(context) {
192
+ const options = context.options[0] || {
193
+ fileExtension: null
194
+ };
195
+ const filePath = context.getFilename();
196
+ const isVirtualFile = VIRTUAL_DOCUMENT_REGEX.test(filePath);
197
+ if (process.env.NODE_ENV !== "test" && isVirtualFile) {
198
+ return {};
199
+ }
200
+ const fileExtension = extname(filePath);
201
+ const filename = basename(filePath, fileExtension);
202
+ return {
203
+ Document(documentNode) {
204
+ if (options.fileExtension && options.fileExtension !== fileExtension) {
205
+ context.report({
206
+ loc: REPORT_ON_FIRST_CHARACTER,
207
+ messageId: MATCH_EXTENSION,
208
+ data: {
209
+ fileExtension,
210
+ expectedFileExtension: options.fileExtension
211
+ }
212
+ });
213
+ }
214
+ const firstOperation = documentNode.definitions.find(
215
+ (n) => n.kind === Kind.OPERATION_DEFINITION
216
+ );
217
+ const firstFragment = documentNode.definitions.find(
218
+ (n) => n.kind === Kind.FRAGMENT_DEFINITION
219
+ );
220
+ const node = firstOperation || firstFragment;
221
+ if (!node) {
222
+ return;
223
+ }
224
+ const docName = node.name?.value;
225
+ if (!docName) {
226
+ return;
227
+ }
228
+ const docType = "operation" in node ? node.operation : "fragment";
229
+ let option = options[docType];
230
+ if (!option) {
231
+ return;
232
+ }
233
+ if (typeof option === "string") {
234
+ option = { style: option };
235
+ }
236
+ const expectedExtension = options.fileExtension || fileExtension;
237
+ let expectedFilename = option.prefix || "";
238
+ if (option.style) {
239
+ expectedFilename += option.style === "matchDocumentStyle" ? docName : convertCase(option.style, docName);
240
+ } else {
241
+ expectedFilename += filename;
242
+ }
243
+ expectedFilename += (option.suffix || "") + expectedExtension;
244
+ const filenameWithExtension = filename + expectedExtension;
245
+ if (expectedFilename !== filenameWithExtension) {
246
+ context.report({
247
+ loc: REPORT_ON_FIRST_CHARACTER,
248
+ messageId: MATCH_STYLE,
249
+ data: {
250
+ expectedFilename,
251
+ filename: filenameWithExtension
252
+ }
253
+ });
254
+ }
255
+ }
256
+ };
257
+ }
258
+ };
259
+ export {
260
+ rule
231
261
  };
@@ -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
  type AllowedStyle = 'camelCase' | 'PascalCase' | 'snake_case' | 'UPPER_CASE';
4
11
  declare const schema: {
5
12
  readonly definitions: {
@@ -94,6 +101,7 @@ declare const schema: {
94
101
  readonly description: string;
95
102
  };
96
103
  };
97
- export type RuleOptions = FromSchema<typeof schema>;
98
- export declare const rule: GraphQLESLintRule<RuleOptions>;
99
- export {};
104
+ type RuleOptions = FromSchema<typeof schema>;
105
+ declare const rule: GraphQLESLintRule<RuleOptions>;
106
+
107
+ export { RuleOptions, rule };