@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,122 +1,148 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rule = void 0;
4
- const graphql_1 = require("graphql");
5
- const utils_js_1 = require("../utils.js");
6
- const RULE_ID = 'relay-arguments';
7
- const MISSING_ARGUMENTS = 'MISSING_ARGUMENTS';
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var relay_arguments_exports = {};
20
+ __export(relay_arguments_exports, {
21
+ rule: () => rule
22
+ });
23
+ module.exports = __toCommonJS(relay_arguments_exports);
24
+ var import_graphql = require("graphql");
25
+ var import_utils = require("../utils.js");
26
+ const RULE_ID = "relay-arguments";
27
+ const MISSING_ARGUMENTS = "MISSING_ARGUMENTS";
8
28
  const schema = {
9
- type: 'array',
10
- maxItems: 1,
11
- items: {
12
- type: 'object',
13
- additionalProperties: false,
14
- minProperties: 1,
15
- properties: {
16
- includeBoth: {
17
- type: 'boolean',
18
- default: true,
19
- description: 'Enforce including both forward and backward pagination arguments',
20
- },
21
- },
22
- },
29
+ type: "array",
30
+ maxItems: 1,
31
+ items: {
32
+ type: "object",
33
+ additionalProperties: false,
34
+ minProperties: 1,
35
+ properties: {
36
+ includeBoth: {
37
+ type: "boolean",
38
+ default: true,
39
+ description: "Enforce including both forward and backward pagination arguments"
40
+ }
41
+ }
42
+ }
23
43
  };
24
- exports.rule = {
25
- meta: {
26
- type: 'problem',
27
- docs: {
28
- category: 'Schema',
29
- description: [
30
- 'Set of rules to follow Relay specification for Arguments.',
31
- '',
32
- '- A field that returns a Connection type must include forward pagination arguments (`first` and `after`), backward pagination arguments (`last` and `before`), or both',
33
- '',
34
- 'Forward pagination arguments',
35
- '',
36
- '- `first` takes a non-negative integer',
37
- '- `after` takes the Cursor type',
38
- '',
39
- 'Backward pagination arguments',
40
- '',
41
- '- `last` takes a non-negative integer',
42
- '- `before` takes the Cursor type',
43
- ].join('\n'),
44
- url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
45
- examples: [
46
- {
47
- title: 'Incorrect',
48
- code: /* GraphQL */ `
44
+ const rule = {
45
+ meta: {
46
+ type: "problem",
47
+ docs: {
48
+ category: "Schema",
49
+ description: [
50
+ "Set of rules to follow Relay specification for Arguments.",
51
+ "",
52
+ "- A field that returns a Connection type must include forward pagination arguments (`first` and `after`), backward pagination arguments (`last` and `before`), or both",
53
+ "",
54
+ "Forward pagination arguments",
55
+ "",
56
+ "- `first` takes a non-negative integer",
57
+ "- `after` takes the Cursor type",
58
+ "",
59
+ "Backward pagination arguments",
60
+ "",
61
+ "- `last` takes a non-negative integer",
62
+ "- `before` takes the Cursor type"
63
+ ].join("\n"),
64
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
65
+ examples: [
66
+ {
67
+ title: "Incorrect",
68
+ code: (
69
+ /* GraphQL */
70
+ `
49
71
  type User {
50
72
  posts: PostConnection
51
73
  }
52
- `,
53
- },
54
- {
55
- title: 'Correct',
56
- code: /* GraphQL */ `
74
+ `
75
+ )
76
+ },
77
+ {
78
+ title: "Correct",
79
+ code: (
80
+ /* GraphQL */
81
+ `
57
82
  type User {
58
83
  posts(after: String, first: Int, before: String, last: Int): PostConnection
59
84
  }
60
- `,
61
- },
62
- ],
63
- isDisabledForAllConfig: true,
64
- },
65
- messages: {
66
- [MISSING_ARGUMENTS]: 'A field that returns a Connection type must include forward pagination arguments (`first` and `after`), backward pagination arguments (`last` and `before`), or both.',
67
- },
68
- schema,
85
+ `
86
+ )
87
+ }
88
+ ],
89
+ isDisabledForAllConfig: true
69
90
  },
70
- create(context) {
71
- const schema = (0, utils_js_1.requireGraphQLSchemaFromContext)(RULE_ID, context);
72
- const { includeBoth = true } = context.options[0] || {};
73
- return {
74
- 'FieldDefinition > .gqlType Name[value=/Connection$/]'(node) {
75
- var _a;
76
- let fieldNode = node.parent;
77
- while (fieldNode.kind !== graphql_1.Kind.FIELD_DEFINITION) {
78
- fieldNode = fieldNode.parent;
79
- }
80
- const args = Object.fromEntries(((_a = fieldNode.arguments) === null || _a === void 0 ? void 0 : _a.map(argument => [argument.name.value, argument])) || []);
81
- const hasForwardPagination = !!(args.first && args.after);
82
- const hasBackwardPagination = !!(args.last && args.before);
83
- if (!hasForwardPagination && !hasBackwardPagination) {
84
- context.report({
85
- node: fieldNode.name,
86
- messageId: MISSING_ARGUMENTS,
87
- });
88
- return;
89
- }
90
- function checkField(typeName, argumentName) {
91
- const argument = args[argumentName];
92
- const hasArgument = !!argument;
93
- let type = argument;
94
- if (hasArgument && type.gqlType.kind === graphql_1.Kind.NON_NULL_TYPE) {
95
- type = type.gqlType;
96
- }
97
- const isAllowedNonNullType = hasArgument &&
98
- type.gqlType.kind === graphql_1.Kind.NAMED_TYPE &&
99
- (type.gqlType.name.value === typeName ||
100
- (typeName === 'String' && (0, graphql_1.isScalarType)(schema.getType(type.gqlType.name.value))));
101
- if (!isAllowedNonNullType) {
102
- const returnType = typeName === 'String' ? 'String or Scalar' : typeName;
103
- context.report({
104
- node: (argument || fieldNode).name,
105
- message: hasArgument
106
- ? `Argument \`${argumentName}\` must return ${returnType}.`
107
- : `Field \`${fieldNode.name.value}\` must contain an argument \`${argumentName}\`, that return ${returnType}.`,
108
- });
109
- }
110
- }
111
- if (includeBoth || args.first || args.after) {
112
- checkField('Int', 'first');
113
- checkField('String', 'after');
114
- }
115
- if (includeBoth || args.last || args.before) {
116
- checkField('Int', 'last');
117
- checkField('String', 'before');
118
- }
119
- },
120
- };
91
+ messages: {
92
+ [MISSING_ARGUMENTS]: "A field that returns a Connection type must include forward pagination arguments (`first` and `after`), backward pagination arguments (`last` and `before`), or both."
121
93
  },
94
+ schema
95
+ },
96
+ create(context) {
97
+ const schema2 = (0, import_utils.requireGraphQLSchemaFromContext)(RULE_ID, context);
98
+ const { includeBoth = true } = context.options[0] || {};
99
+ return {
100
+ "FieldDefinition > .gqlType Name[value=/Connection$/]"(node) {
101
+ let fieldNode = node.parent;
102
+ while (fieldNode.kind !== import_graphql.Kind.FIELD_DEFINITION) {
103
+ fieldNode = fieldNode.parent;
104
+ }
105
+ const args = Object.fromEntries(
106
+ fieldNode.arguments?.map((argument) => [argument.name.value, argument]) || []
107
+ );
108
+ const hasForwardPagination = !!(args.first && args.after);
109
+ const hasBackwardPagination = !!(args.last && args.before);
110
+ if (!hasForwardPagination && !hasBackwardPagination) {
111
+ context.report({
112
+ node: fieldNode.name,
113
+ messageId: MISSING_ARGUMENTS
114
+ });
115
+ return;
116
+ }
117
+ function checkField(typeName, argumentName) {
118
+ const argument = args[argumentName];
119
+ const hasArgument = !!argument;
120
+ let type = argument;
121
+ if (hasArgument && type.gqlType.kind === import_graphql.Kind.NON_NULL_TYPE) {
122
+ type = type.gqlType;
123
+ }
124
+ const isAllowedNonNullType = hasArgument && type.gqlType.kind === import_graphql.Kind.NAMED_TYPE && (type.gqlType.name.value === typeName || typeName === "String" && (0, import_graphql.isScalarType)(schema2.getType(type.gqlType.name.value)));
125
+ if (!isAllowedNonNullType) {
126
+ const returnType = typeName === "String" ? "String or Scalar" : typeName;
127
+ context.report({
128
+ node: (argument || fieldNode).name,
129
+ message: hasArgument ? `Argument \`${argumentName}\` must return ${returnType}.` : `Field \`${fieldNode.name.value}\` must contain an argument \`${argumentName}\`, that return ${returnType}.`
130
+ });
131
+ }
132
+ }
133
+ if (includeBoth || args.first || args.after) {
134
+ checkField("Int", "first");
135
+ checkField("String", "after");
136
+ }
137
+ if (includeBoth || args.last || args.before) {
138
+ checkField("Int", "last");
139
+ checkField("String", "before");
140
+ }
141
+ }
142
+ };
143
+ }
122
144
  };
145
+ // Annotate the CommonJS export names for ESM import in node:
146
+ 0 && (module.exports = {
147
+ rule
148
+ });
@@ -0,0 +1,13 @@
1
+ import { Kind } from 'graphql';
2
+ import { i as GraphQLESLintRule } from '../types-e3367e3c.js';
3
+ import '@graphql-tools/utils';
4
+ import 'eslint';
5
+ import 'estree';
6
+ import 'graphql-config';
7
+ import 'json-schema-to-ts';
8
+ import '../estree-converter/types.js';
9
+
10
+ declare const NON_OBJECT_TYPES: Kind[];
11
+ declare const rule: GraphQLESLintRule;
12
+
13
+ export { NON_OBJECT_TYPES, rule };
@@ -1,107 +1,136 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rule = exports.NON_OBJECT_TYPES = void 0;
4
- const graphql_1 = require("graphql");
5
- const MUST_BE_OBJECT_TYPE = 'MUST_BE_OBJECT_TYPE';
6
- const MUST_CONTAIN_FIELD_EDGES = 'MUST_CONTAIN_FIELD_EDGES';
7
- const MUST_CONTAIN_FIELD_PAGE_INFO = 'MUST_CONTAIN_FIELD_PAGE_INFO';
8
- const MUST_HAVE_CONNECTION_SUFFIX = 'MUST_HAVE_CONNECTION_SUFFIX';
9
- const EDGES_FIELD_MUST_RETURN_LIST_TYPE = 'EDGES_FIELD_MUST_RETURN_LIST_TYPE';
10
- const PAGE_INFO_FIELD_MUST_RETURN_NON_NULL_TYPE = 'PAGE_INFO_FIELD_MUST_RETURN_NON_NULL_TYPE';
11
- exports.NON_OBJECT_TYPES = [
12
- graphql_1.Kind.SCALAR_TYPE_DEFINITION,
13
- graphql_1.Kind.UNION_TYPE_DEFINITION,
14
- graphql_1.Kind.UNION_TYPE_EXTENSION,
15
- graphql_1.Kind.INPUT_OBJECT_TYPE_DEFINITION,
16
- graphql_1.Kind.INPUT_OBJECT_TYPE_EXTENSION,
17
- graphql_1.Kind.ENUM_TYPE_DEFINITION,
18
- graphql_1.Kind.ENUM_TYPE_EXTENSION,
19
- graphql_1.Kind.INTERFACE_TYPE_DEFINITION,
20
- graphql_1.Kind.INTERFACE_TYPE_EXTENSION,
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var relay_connection_types_exports = {};
20
+ __export(relay_connection_types_exports, {
21
+ NON_OBJECT_TYPES: () => NON_OBJECT_TYPES,
22
+ rule: () => rule
23
+ });
24
+ module.exports = __toCommonJS(relay_connection_types_exports);
25
+ var import_graphql = require("graphql");
26
+ const MUST_BE_OBJECT_TYPE = "MUST_BE_OBJECT_TYPE";
27
+ const MUST_CONTAIN_FIELD_EDGES = "MUST_CONTAIN_FIELD_EDGES";
28
+ const MUST_CONTAIN_FIELD_PAGE_INFO = "MUST_CONTAIN_FIELD_PAGE_INFO";
29
+ const MUST_HAVE_CONNECTION_SUFFIX = "MUST_HAVE_CONNECTION_SUFFIX";
30
+ const EDGES_FIELD_MUST_RETURN_LIST_TYPE = "EDGES_FIELD_MUST_RETURN_LIST_TYPE";
31
+ const PAGE_INFO_FIELD_MUST_RETURN_NON_NULL_TYPE = "PAGE_INFO_FIELD_MUST_RETURN_NON_NULL_TYPE";
32
+ const NON_OBJECT_TYPES = [
33
+ import_graphql.Kind.SCALAR_TYPE_DEFINITION,
34
+ import_graphql.Kind.UNION_TYPE_DEFINITION,
35
+ import_graphql.Kind.UNION_TYPE_EXTENSION,
36
+ import_graphql.Kind.INPUT_OBJECT_TYPE_DEFINITION,
37
+ import_graphql.Kind.INPUT_OBJECT_TYPE_EXTENSION,
38
+ import_graphql.Kind.ENUM_TYPE_DEFINITION,
39
+ import_graphql.Kind.ENUM_TYPE_EXTENSION,
40
+ import_graphql.Kind.INTERFACE_TYPE_DEFINITION,
41
+ import_graphql.Kind.INTERFACE_TYPE_EXTENSION
21
42
  ];
22
- const notConnectionTypesSelector = `:matches(${exports.NON_OBJECT_TYPES})[name.value=/Connection$/] > .name`;
23
- const hasEdgesField = (node) => { var _a; return (_a = node.fields) === null || _a === void 0 ? void 0 : _a.some(field => field.name.value === 'edges'); };
24
- const hasPageInfoField = (node) => { var _a; return (_a = node.fields) === null || _a === void 0 ? void 0 : _a.some(field => field.name.value === 'pageInfo'); };
25
- exports.rule = {
26
- meta: {
27
- type: 'problem',
28
- docs: {
29
- category: 'Schema',
30
- description: [
31
- 'Set of rules to follow Relay specification for Connection types.',
32
- '',
33
- '- Any type whose name ends in "Connection" is considered by spec to be a `Connection type`',
34
- '- Connection type must be an Object type',
35
- '- Connection type must contain a field `edges` that return a list type that wraps an edge type',
36
- '- Connection type must contain a field `pageInfo` that return a non-null `PageInfo` Object type',
37
- ].join('\n'),
38
- url: 'https://the-guild.dev/graphql/eslint/rules/relay-connection-types',
39
- isDisabledForAllConfig: true,
40
- examples: [
41
- {
42
- title: 'Incorrect',
43
- code: /* GraphQL */ `
43
+ const notConnectionTypesSelector = `:matches(${NON_OBJECT_TYPES})[name.value=/Connection$/] > .name`;
44
+ const hasEdgesField = (node) => node.fields?.some((field) => field.name.value === "edges");
45
+ const hasPageInfoField = (node) => node.fields?.some((field) => field.name.value === "pageInfo");
46
+ const rule = {
47
+ meta: {
48
+ type: "problem",
49
+ docs: {
50
+ category: "Schema",
51
+ description: [
52
+ "Set of rules to follow Relay specification for Connection types.",
53
+ "",
54
+ '- Any type whose name ends in "Connection" is considered by spec to be a `Connection type`',
55
+ "- Connection type must be an Object type",
56
+ "- Connection type must contain a field `edges` that return a list type that wraps an edge type",
57
+ "- Connection type must contain a field `pageInfo` that return a non-null `PageInfo` Object type"
58
+ ].join("\n"),
59
+ url: "https://the-guild.dev/graphql/eslint/rules/relay-connection-types",
60
+ isDisabledForAllConfig: true,
61
+ examples: [
62
+ {
63
+ title: "Incorrect",
64
+ code: (
65
+ /* GraphQL */
66
+ `
44
67
  type UserPayload { # should be an Object type with \`Connection\` suffix
45
68
  edges: UserEdge! # should return a list type
46
69
  pageInfo: PageInfo # should return a non-null \`PageInfo\` Object type
47
70
  }
48
- `,
49
- },
50
- {
51
- title: 'Correct',
52
- code: /* GraphQL */ `
71
+ `
72
+ )
73
+ },
74
+ {
75
+ title: "Correct",
76
+ code: (
77
+ /* GraphQL */
78
+ `
53
79
  type UserConnection {
54
80
  edges: [UserEdge]
55
81
  pageInfo: PageInfo!
56
82
  }
57
- `,
58
- },
59
- ],
60
- },
61
- messages: {
62
- // Connection types
63
- [MUST_BE_OBJECT_TYPE]: 'Connection type must be an Object type.',
64
- [MUST_HAVE_CONNECTION_SUFFIX]: 'Connection type must have `Connection` suffix.',
65
- [MUST_CONTAIN_FIELD_EDGES]: 'Connection type must contain a field `edges` that return a list type.',
66
- [MUST_CONTAIN_FIELD_PAGE_INFO]: 'Connection type must contain a field `pageInfo` that return a non-null `PageInfo` Object type.',
67
- [EDGES_FIELD_MUST_RETURN_LIST_TYPE]: '`edges` field must return a list type.',
68
- [PAGE_INFO_FIELD_MUST_RETURN_NON_NULL_TYPE]: '`pageInfo` field must return a non-null `PageInfo` Object type.',
69
- },
70
- schema: [],
83
+ `
84
+ )
85
+ }
86
+ ]
71
87
  },
72
- create(context) {
73
- return {
74
- [notConnectionTypesSelector](node) {
75
- context.report({ node, messageId: MUST_BE_OBJECT_TYPE });
76
- },
77
- ':matches(ObjectTypeDefinition, ObjectTypeExtension)[name.value!=/Connection$/]'(node) {
78
- if (hasEdgesField(node) && hasPageInfoField(node)) {
79
- context.report({ node: node.name, messageId: MUST_HAVE_CONNECTION_SUFFIX });
80
- }
81
- },
82
- ':matches(ObjectTypeDefinition, ObjectTypeExtension)[name.value=/Connection$/]'(node) {
83
- if (!hasEdgesField(node)) {
84
- context.report({ node: node.name, messageId: MUST_CONTAIN_FIELD_EDGES });
85
- }
86
- if (!hasPageInfoField(node)) {
87
- context.report({ node: node.name, messageId: MUST_CONTAIN_FIELD_PAGE_INFO });
88
- }
89
- },
90
- ':matches(ObjectTypeDefinition, ObjectTypeExtension)[name.value=/Connection$/] > FieldDefinition[name.value=edges] > .gqlType'(node) {
91
- const isListType = node.kind === graphql_1.Kind.LIST_TYPE ||
92
- (node.kind === graphql_1.Kind.NON_NULL_TYPE && node.gqlType.kind === graphql_1.Kind.LIST_TYPE);
93
- if (!isListType) {
94
- context.report({ node, messageId: EDGES_FIELD_MUST_RETURN_LIST_TYPE });
95
- }
96
- },
97
- ':matches(ObjectTypeDefinition, ObjectTypeExtension)[name.value=/Connection$/] > FieldDefinition[name.value=pageInfo] > .gqlType'(node) {
98
- const isNonNullPageInfoType = node.kind === graphql_1.Kind.NON_NULL_TYPE &&
99
- node.gqlType.kind === graphql_1.Kind.NAMED_TYPE &&
100
- node.gqlType.name.value === 'PageInfo';
101
- if (!isNonNullPageInfoType) {
102
- context.report({ node, messageId: PAGE_INFO_FIELD_MUST_RETURN_NON_NULL_TYPE });
103
- }
104
- },
105
- };
88
+ messages: {
89
+ // Connection types
90
+ [MUST_BE_OBJECT_TYPE]: "Connection type must be an Object type.",
91
+ [MUST_HAVE_CONNECTION_SUFFIX]: "Connection type must have `Connection` suffix.",
92
+ [MUST_CONTAIN_FIELD_EDGES]: "Connection type must contain a field `edges` that return a list type.",
93
+ [MUST_CONTAIN_FIELD_PAGE_INFO]: "Connection type must contain a field `pageInfo` that return a non-null `PageInfo` Object type.",
94
+ [EDGES_FIELD_MUST_RETURN_LIST_TYPE]: "`edges` field must return a list type.",
95
+ [PAGE_INFO_FIELD_MUST_RETURN_NON_NULL_TYPE]: "`pageInfo` field must return a non-null `PageInfo` Object type."
106
96
  },
97
+ schema: []
98
+ },
99
+ create(context) {
100
+ return {
101
+ [notConnectionTypesSelector](node) {
102
+ context.report({ node, messageId: MUST_BE_OBJECT_TYPE });
103
+ },
104
+ ":matches(ObjectTypeDefinition, ObjectTypeExtension)[name.value!=/Connection$/]"(node) {
105
+ if (hasEdgesField(node) && hasPageInfoField(node)) {
106
+ context.report({ node: node.name, messageId: MUST_HAVE_CONNECTION_SUFFIX });
107
+ }
108
+ },
109
+ ":matches(ObjectTypeDefinition, ObjectTypeExtension)[name.value=/Connection$/]"(node) {
110
+ if (!hasEdgesField(node)) {
111
+ context.report({ node: node.name, messageId: MUST_CONTAIN_FIELD_EDGES });
112
+ }
113
+ if (!hasPageInfoField(node)) {
114
+ context.report({ node: node.name, messageId: MUST_CONTAIN_FIELD_PAGE_INFO });
115
+ }
116
+ },
117
+ ":matches(ObjectTypeDefinition, ObjectTypeExtension)[name.value=/Connection$/] > FieldDefinition[name.value=edges] > .gqlType"(node) {
118
+ const isListType = node.kind === import_graphql.Kind.LIST_TYPE || node.kind === import_graphql.Kind.NON_NULL_TYPE && node.gqlType.kind === import_graphql.Kind.LIST_TYPE;
119
+ if (!isListType) {
120
+ context.report({ node, messageId: EDGES_FIELD_MUST_RETURN_LIST_TYPE });
121
+ }
122
+ },
123
+ ":matches(ObjectTypeDefinition, ObjectTypeExtension)[name.value=/Connection$/] > FieldDefinition[name.value=pageInfo] > .gqlType"(node) {
124
+ const isNonNullPageInfoType = node.kind === import_graphql.Kind.NON_NULL_TYPE && node.gqlType.kind === import_graphql.Kind.NAMED_TYPE && node.gqlType.name.value === "PageInfo";
125
+ if (!isNonNullPageInfoType) {
126
+ context.report({ node, messageId: PAGE_INFO_FIELD_MUST_RETURN_NON_NULL_TYPE });
127
+ }
128
+ }
129
+ };
130
+ }
107
131
  };
132
+ // Annotate the CommonJS export names for ESM import in node:
133
+ 0 && (module.exports = {
134
+ NON_OBJECT_TYPES,
135
+ rule
136
+ });
@@ -1,5 +1,12 @@
1
1
  import { FromSchema } from 'json-schema-to-ts';
2
- import { GraphQLESLintRule } from '../types.js';
2
+ import { i as GraphQLESLintRule } from '../types-e3367e3c.js';
3
+ import '@graphql-tools/utils';
4
+ import 'eslint';
5
+ import 'estree';
6
+ import 'graphql';
7
+ import 'graphql-config';
8
+ import '../estree-converter/types.js';
9
+
3
10
  declare const schema: {
4
11
  readonly type: "array";
5
12
  readonly maxItems: 1;
@@ -26,6 +33,7 @@ declare const schema: {
26
33
  };
27
34
  };
28
35
  };
29
- export type RuleOptions = FromSchema<typeof schema>;
30
- export declare const rule: GraphQLESLintRule<RuleOptions, true>;
31
- export {};
36
+ type RuleOptions = FromSchema<typeof schema>;
37
+ declare const rule: GraphQLESLintRule<RuleOptions, true>;
38
+
39
+ export { RuleOptions, rule };