@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,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 };