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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/{typings → cjs}/cache.d.ts +3 -1
  2. package/cjs/cache.js +57 -26
  3. package/{typings → cjs}/configs/index.d.ts +3 -1
  4. package/cjs/configs/index.js +47 -14
  5. package/{typings → cjs}/configs/operations-all.d.ts +2 -1
  6. package/cjs/configs/operations-all.js +47 -30
  7. package/{typings → cjs}/configs/operations-recommended.d.ts +2 -1
  8. package/cjs/configs/operations-recommended.js +72 -55
  9. package/{typings → cjs}/configs/relay.d.ts +2 -1
  10. package/cjs/configs/relay.js +31 -11
  11. package/{typings → cjs}/configs/schema-all.d.ts +2 -1
  12. package/cjs/configs/schema-all.js +41 -24
  13. package/{typings → cjs}/configs/schema-recommended.d.ts +2 -1
  14. package/cjs/configs/schema-recommended.js +68 -51
  15. package/{typings → cjs}/documents.d.ts +4 -1
  16. package/cjs/documents.js +74 -43
  17. package/cjs/estree-converter/converter.d.ts +8 -0
  18. package/cjs/estree-converter/converter.js +80 -59
  19. package/cjs/estree-converter/index.d.ts +8 -0
  20. package/cjs/estree-converter/index.js +25 -5
  21. package/{typings → cjs}/estree-converter/types.d.ts +7 -5
  22. package/cjs/estree-converter/types.js +16 -0
  23. package/cjs/estree-converter/utils.d.ts +18 -0
  24. package/cjs/estree-converter/utils.js +119 -95
  25. package/{typings → cjs}/flat-configs.d.ts +12 -1
  26. package/cjs/flat-configs.js +56 -32
  27. package/cjs/graphql-config.d.ts +13 -0
  28. package/cjs/graphql-config.js +78 -47
  29. package/cjs/index.d.ts +22 -0
  30. package/cjs/index.js +50 -18
  31. package/cjs/parser.d.ts +12 -0
  32. package/cjs/parser.js +96 -76
  33. package/cjs/processor.d.ts +9 -0
  34. package/cjs/processor.js +119 -88
  35. package/{typings → cjs}/rules/alphabetize.d.ts +12 -4
  36. package/cjs/rules/alphabetize.js +337 -295
  37. package/{typings → cjs}/rules/description-style.d.ts +12 -4
  38. package/cjs/rules/description-style.js +96 -66
  39. package/cjs/rules/graphql-js-validation.d.ts +12 -0
  40. package/cjs/rules/graphql-js-validation.js +595 -433
  41. package/cjs/rules/index.d.ts +125 -0
  42. package/cjs/rules/index.js +97 -76
  43. package/{typings → cjs}/rules/input-name.d.ts +12 -4
  44. package/cjs/rules/input-name.js +153 -123
  45. package/{typings → cjs}/rules/lone-executable-definition.d.ts +12 -4
  46. package/cjs/rules/lone-executable-definition.js +101 -72
  47. package/{typings → cjs}/rules/match-document-filename.d.ts +14 -6
  48. package/cjs/rules/match-document-filename.js +229 -182
  49. package/{typings → cjs}/rules/naming-convention.d.ts +12 -4
  50. package/cjs/rules/naming-convention.js +380 -316
  51. package/cjs/rules/no-anonymous-operations.d.ts +12 -0
  52. package/cjs/rules/no-anonymous-operations.js +88 -57
  53. package/cjs/rules/no-case-insensitive-enum-values-duplicates.d.ts +12 -0
  54. package/cjs/rules/no-case-insensitive-enum-values-duplicates.js +82 -50
  55. package/cjs/rules/no-deprecated.d.ts +12 -0
  56. package/cjs/rules/no-deprecated.js +106 -75
  57. package/cjs/rules/no-duplicate-fields.d.ts +12 -0
  58. package/cjs/rules/no-duplicate-fields.js +116 -82
  59. package/cjs/rules/no-hashtag-description.d.ts +13 -0
  60. package/cjs/rules/no-hashtag-description.js +119 -82
  61. package/cjs/rules/no-one-place-fragments.d.ts +12 -0
  62. package/cjs/rules/no-one-place-fragments.js +88 -58
  63. package/{typings → cjs}/rules/no-root-type.d.ts +12 -4
  64. package/cjs/rules/no-root-type.js +101 -74
  65. package/cjs/rules/no-scalar-result-type-on-mutation.d.ts +12 -0
  66. package/cjs/rules/no-scalar-result-type-on-mutation.js +90 -60
  67. package/cjs/rules/no-typename-prefix.d.ts +12 -0
  68. package/cjs/rules/no-typename-prefix.js +88 -55
  69. package/cjs/rules/no-unreachable-types.d.ts +12 -0
  70. package/cjs/rules/no-unreachable-types.js +169 -134
  71. package/cjs/rules/no-unused-fields.d.ts +12 -0
  72. package/cjs/rules/no-unused-fields.js +117 -92
  73. package/{typings → cjs}/rules/relay-arguments.d.ts +12 -4
  74. package/cjs/rules/relay-arguments.js +136 -110
  75. package/cjs/rules/relay-connection-types.d.ts +13 -0
  76. package/cjs/rules/relay-connection-types.js +123 -94
  77. package/{typings → cjs}/rules/relay-edge-types.d.ts +12 -4
  78. package/cjs/rules/relay-edge-types.js +196 -179
  79. package/cjs/rules/relay-page-info.d.ts +12 -0
  80. package/cjs/rules/relay-page-info.js +108 -89
  81. package/{typings → cjs}/rules/require-deprecation-date.d.ts +12 -4
  82. package/cjs/rules/require-deprecation-date.js +143 -112
  83. package/cjs/rules/require-deprecation-reason.d.ts +12 -0
  84. package/cjs/rules/require-deprecation-reason.js +80 -46
  85. package/{typings → cjs}/rules/require-description.d.ts +13 -5
  86. package/cjs/rules/require-description.js +170 -132
  87. package/cjs/rules/require-field-of-type-query-in-mutation-result.d.ts +12 -0
  88. package/cjs/rules/require-field-of-type-query-in-mutation-result.js +81 -51
  89. package/{typings → cjs}/rules/require-id-when-available.d.ts +12 -4
  90. package/cjs/rules/require-id-when-available.js +196 -173
  91. package/cjs/rules/require-import-fragment.d.ts +12 -0
  92. package/cjs/rules/require-import-fragment.js +138 -88
  93. package/cjs/rules/require-nullable-fields-with-oneof.d.ts +12 -0
  94. package/cjs/rules/require-nullable-fields-with-oneof.js +80 -50
  95. package/cjs/rules/require-nullable-result-in-root.d.ts +12 -0
  96. package/cjs/rules/require-nullable-result-in-root.js +97 -68
  97. package/cjs/rules/require-type-pattern-with-oneof.d.ts +12 -0
  98. package/cjs/rules/require-type-pattern-with-oneof.js +70 -42
  99. package/{typings → cjs}/rules/selection-set-depth.d.ts +12 -4
  100. package/cjs/rules/selection-set-depth.js +147 -107
  101. package/{typings → cjs}/rules/strict-id-in-types.d.ts +12 -4
  102. package/cjs/rules/strict-id-in-types.js +143 -122
  103. package/cjs/rules/unique-fragment-name.d.ts +13 -0
  104. package/cjs/rules/unique-fragment-name.js +88 -62
  105. package/cjs/rules/unique-operation-name.d.ts +12 -0
  106. package/cjs/rules/unique-operation-name.js +65 -35
  107. package/cjs/schema.d.ts +12 -0
  108. package/cjs/schema.js +62 -30
  109. package/cjs/siblings.d.ts +8 -0
  110. package/cjs/siblings.js +124 -106
  111. package/cjs/testkit.d.ts +8 -0
  112. package/cjs/testkit.js +165 -144
  113. package/cjs/types-e3367e3c.d.ts +129 -0
  114. package/cjs/types.d.ts +8 -0
  115. package/cjs/types.js +16 -0
  116. package/cjs/utils.d.ts +44 -0
  117. package/cjs/utils.js +181 -124
  118. package/{typings/cache.d.cts → esm/cache.d.mts} +3 -1
  119. package/esm/cache.js +25 -23
  120. package/{typings/configs/index.d.cts → esm/configs/index.d.mts} +3 -1
  121. package/esm/configs/index.js +14 -11
  122. package/{typings/configs/operations-all.d.cts → esm/configs/operations-all.d.mts} +2 -1
  123. package/esm/configs/operations-all.js +28 -28
  124. package/{typings/configs/operations-recommended.d.cts → esm/configs/operations-recommended.d.mts} +2 -1
  125. package/esm/configs/operations-recommended.js +53 -53
  126. package/{typings/configs/relay.d.cts → esm/configs/relay.d.mts} +2 -1
  127. package/esm/configs/relay.js +12 -9
  128. package/{typings/configs/schema-all.d.cts → esm/configs/schema-all.d.mts} +2 -1
  129. package/esm/configs/schema-all.js +22 -22
  130. package/{typings/configs/schema-recommended.d.cts → esm/configs/schema-recommended.d.mts} +2 -1
  131. package/esm/configs/schema-recommended.js +49 -49
  132. package/{typings/documents.d.cts → esm/documents.d.mts} +4 -1
  133. package/esm/documents.js +41 -39
  134. package/esm/estree-converter/converter.d.mts +8 -0
  135. package/esm/estree-converter/converter.js +63 -57
  136. package/esm/estree-converter/index.d.mts +8 -0
  137. package/esm/estree-converter/index.js +3 -3
  138. package/{typings/estree-converter/types.d.cts → esm/estree-converter/types.d.mts} +7 -5
  139. package/esm/estree-converter/utils.d.mts +18 -0
  140. package/esm/estree-converter/utils.js +102 -93
  141. package/{typings/flat-configs.d.cts → esm/flat-configs.d.mts} +13 -2
  142. package/esm/flat-configs.js +33 -30
  143. package/esm/graphql-config.d.mts +13 -0
  144. package/esm/graphql-config.js +49 -44
  145. package/esm/index.d.mts +22 -0
  146. package/esm/index.js +18 -9
  147. package/esm/package.json +1 -1
  148. package/esm/parser.d.mts +12 -0
  149. package/esm/parser.js +64 -73
  150. package/esm/processor.d.mts +9 -0
  151. package/esm/processor.js +98 -86
  152. package/{typings/rules/alphabetize.d.cts → esm/rules/alphabetize.d.mts} +12 -4
  153. package/esm/rules/alphabetize.js +304 -290
  154. package/{typings/rules/description-style.d.cts → esm/rules/description-style.d.mts} +12 -4
  155. package/esm/rules/description-style.js +73 -64
  156. package/esm/rules/graphql-js-validation.d.mts +12 -0
  157. package/esm/rules/graphql-js-validation.js +580 -429
  158. package/esm/rules/index.d.mts +125 -0
  159. package/esm/rules/index.js +74 -74
  160. package/{typings/rules/input-name.d.cts → esm/rules/input-name.d.mts} +12 -4
  161. package/esm/rules/input-name.js +132 -121
  162. package/{typings/rules/lone-executable-definition.d.cts → esm/rules/lone-executable-definition.d.mts} +12 -4
  163. package/esm/rules/lone-executable-definition.js +78 -70
  164. package/{typings/rules/match-document-filename.d.cts → esm/rules/match-document-filename.d.mts} +14 -6
  165. package/esm/rules/match-document-filename.js +210 -180
  166. package/{typings/rules/naming-convention.d.cts → esm/rules/naming-convention.d.mts} +12 -4
  167. package/esm/rules/naming-convention.js +363 -314
  168. package/esm/rules/no-anonymous-operations.d.mts +12 -0
  169. package/esm/rules/no-anonymous-operations.js +65 -55
  170. package/esm/rules/no-case-insensitive-enum-values-duplicates.d.mts +12 -0
  171. package/esm/rules/no-case-insensitive-enum-values-duplicates.js +59 -48
  172. package/esm/rules/no-deprecated.d.mts +12 -0
  173. package/esm/rules/no-deprecated.js +83 -73
  174. package/esm/rules/no-duplicate-fields.d.mts +12 -0
  175. package/esm/rules/no-duplicate-fields.js +93 -80
  176. package/esm/rules/no-hashtag-description.d.mts +13 -0
  177. package/esm/rules/no-hashtag-description.js +95 -80
  178. package/esm/rules/no-one-place-fragments.d.mts +12 -0
  179. package/esm/rules/no-one-place-fragments.js +65 -56
  180. package/{typings/rules/no-root-type.d.cts → esm/rules/no-root-type.d.mts} +12 -4
  181. package/esm/rules/no-root-type.js +78 -72
  182. package/esm/rules/no-scalar-result-type-on-mutation.d.mts +12 -0
  183. package/esm/rules/no-scalar-result-type-on-mutation.js +67 -58
  184. package/esm/rules/no-typename-prefix.d.mts +12 -0
  185. package/esm/rules/no-typename-prefix.js +65 -53
  186. package/esm/rules/no-unreachable-types.d.mts +12 -0
  187. package/esm/rules/no-unreachable-types.js +141 -131
  188. package/esm/rules/no-unused-fields.d.mts +12 -0
  189. package/esm/rules/no-unused-fields.js +94 -90
  190. package/{typings/rules/relay-arguments.d.cts → esm/rules/relay-arguments.d.mts} +12 -4
  191. package/esm/rules/relay-arguments.js +113 -108
  192. package/esm/rules/relay-connection-types.d.mts +13 -0
  193. package/esm/rules/relay-connection-types.js +98 -91
  194. package/{typings/rules/relay-edge-types.d.cts → esm/rules/relay-edge-types.d.mts} +12 -4
  195. package/esm/rules/relay-edge-types.js +178 -177
  196. package/esm/rules/relay-page-info.d.mts +12 -0
  197. package/esm/rules/relay-page-info.js +84 -86
  198. package/{typings/rules/require-deprecation-date.d.cts → esm/rules/require-deprecation-date.d.mts} +12 -4
  199. package/esm/rules/require-deprecation-date.js +120 -110
  200. package/esm/rules/require-deprecation-reason.d.mts +12 -0
  201. package/esm/rules/require-deprecation-reason.js +57 -44
  202. package/{typings/rules/require-description.d.cts → esm/rules/require-description.d.mts} +13 -5
  203. package/esm/rules/require-description.js +151 -130
  204. package/esm/rules/require-field-of-type-query-in-mutation-result.d.mts +12 -0
  205. package/esm/rules/require-field-of-type-query-in-mutation-result.js +58 -49
  206. package/{typings/rules/require-id-when-available.d.cts → esm/rules/require-id-when-available.d.mts} +12 -4
  207. package/esm/rules/require-id-when-available.js +186 -171
  208. package/esm/rules/require-import-fragment.d.mts +12 -0
  209. package/esm/rules/require-import-fragment.js +105 -85
  210. package/esm/rules/require-nullable-fields-with-oneof.d.mts +12 -0
  211. package/esm/rules/require-nullable-fields-with-oneof.js +57 -48
  212. package/esm/rules/require-nullable-result-in-root.d.mts +12 -0
  213. package/esm/rules/require-nullable-result-in-root.js +74 -66
  214. package/esm/rules/require-type-pattern-with-oneof.d.mts +12 -0
  215. package/esm/rules/require-type-pattern-with-oneof.js +47 -40
  216. package/{typings/rules/selection-set-depth.d.cts → esm/rules/selection-set-depth.d.mts} +12 -4
  217. package/esm/rules/selection-set-depth.js +114 -104
  218. package/{typings/rules/strict-id-in-types.d.cts → esm/rules/strict-id-in-types.d.mts} +12 -4
  219. package/esm/rules/strict-id-in-types.js +125 -119
  220. package/esm/rules/unique-fragment-name.d.mts +13 -0
  221. package/esm/rules/unique-fragment-name.js +65 -60
  222. package/esm/rules/unique-operation-name.d.mts +12 -0
  223. package/esm/rules/unique-operation-name.js +42 -33
  224. package/esm/schema.d.mts +12 -0
  225. package/esm/schema.js +29 -26
  226. package/esm/siblings.d.mts +8 -0
  227. package/esm/siblings.js +105 -104
  228. package/esm/testkit.d.mts +8 -0
  229. package/esm/testkit.js +132 -141
  230. package/esm/types-2e1afd7c.d.ts +129 -0
  231. package/esm/types.d.mts +8 -0
  232. package/esm/utils.d.mts +44 -0
  233. package/esm/utils.js +138 -116
  234. package/package.json +40 -30
  235. package/typings/estree-converter/converter.d.cts +0 -3
  236. package/typings/estree-converter/converter.d.ts +0 -3
  237. package/typings/estree-converter/index.d.cts +0 -3
  238. package/typings/estree-converter/index.d.ts +0 -3
  239. package/typings/estree-converter/utils.d.cts +0 -13
  240. package/typings/estree-converter/utils.d.ts +0 -13
  241. package/typings/graphql-config.d.cts +0 -4
  242. package/typings/graphql-config.d.ts +0 -4
  243. package/typings/index.d.cts +0 -10
  244. package/typings/index.d.ts +0 -10
  245. package/typings/parser.d.cts +0 -2
  246. package/typings/parser.d.ts +0 -2
  247. package/typings/processor.d.cts +0 -6
  248. package/typings/processor.d.ts +0 -6
  249. package/typings/rules/graphql-js-validation.d.cts +0 -2
  250. package/typings/rules/graphql-js-validation.d.ts +0 -2
  251. package/typings/rules/index.d.cts +0 -111
  252. package/typings/rules/index.d.ts +0 -111
  253. package/typings/rules/no-anonymous-operations.d.cts +0 -2
  254. package/typings/rules/no-anonymous-operations.d.ts +0 -2
  255. package/typings/rules/no-case-insensitive-enum-values-duplicates.d.cts +0 -2
  256. package/typings/rules/no-case-insensitive-enum-values-duplicates.d.ts +0 -2
  257. package/typings/rules/no-deprecated.d.cts +0 -2
  258. package/typings/rules/no-deprecated.d.ts +0 -2
  259. package/typings/rules/no-duplicate-fields.d.cts +0 -2
  260. package/typings/rules/no-duplicate-fields.d.ts +0 -2
  261. package/typings/rules/no-hashtag-description.d.cts +0 -3
  262. package/typings/rules/no-hashtag-description.d.ts +0 -3
  263. package/typings/rules/no-one-place-fragments.d.cts +0 -2
  264. package/typings/rules/no-one-place-fragments.d.ts +0 -2
  265. package/typings/rules/no-scalar-result-type-on-mutation.d.cts +0 -2
  266. package/typings/rules/no-scalar-result-type-on-mutation.d.ts +0 -2
  267. package/typings/rules/no-typename-prefix.d.cts +0 -2
  268. package/typings/rules/no-typename-prefix.d.ts +0 -2
  269. package/typings/rules/no-unreachable-types.d.cts +0 -2
  270. package/typings/rules/no-unreachable-types.d.ts +0 -2
  271. package/typings/rules/no-unused-fields.d.cts +0 -2
  272. package/typings/rules/no-unused-fields.d.ts +0 -2
  273. package/typings/rules/relay-connection-types.d.cts +0 -4
  274. package/typings/rules/relay-connection-types.d.ts +0 -4
  275. package/typings/rules/relay-page-info.d.cts +0 -2
  276. package/typings/rules/relay-page-info.d.ts +0 -2
  277. package/typings/rules/require-deprecation-reason.d.cts +0 -2
  278. package/typings/rules/require-deprecation-reason.d.ts +0 -2
  279. package/typings/rules/require-field-of-type-query-in-mutation-result.d.cts +0 -2
  280. package/typings/rules/require-field-of-type-query-in-mutation-result.d.ts +0 -2
  281. package/typings/rules/require-import-fragment.d.cts +0 -2
  282. package/typings/rules/require-import-fragment.d.ts +0 -2
  283. package/typings/rules/require-nullable-fields-with-oneof.d.cts +0 -2
  284. package/typings/rules/require-nullable-fields-with-oneof.d.ts +0 -2
  285. package/typings/rules/require-nullable-result-in-root.d.cts +0 -2
  286. package/typings/rules/require-nullable-result-in-root.d.ts +0 -2
  287. package/typings/rules/require-type-pattern-with-oneof.d.cts +0 -2
  288. package/typings/rules/require-type-pattern-with-oneof.d.ts +0 -2
  289. package/typings/rules/unique-fragment-name.d.cts +0 -5
  290. package/typings/rules/unique-fragment-name.d.ts +0 -5
  291. package/typings/rules/unique-operation-name.d.cts +0 -2
  292. package/typings/rules/unique-operation-name.d.ts +0 -2
  293. package/typings/schema.d.cts +0 -3
  294. package/typings/schema.d.ts +0 -3
  295. package/typings/siblings.d.cts +0 -22
  296. package/typings/siblings.d.ts +0 -22
  297. package/typings/testkit.d.cts +0 -29
  298. package/typings/testkit.d.ts +0 -29
  299. package/typings/types.d.cts +0 -83
  300. package/typings/types.d.ts +0 -83
  301. package/typings/utils.d.cts +0 -40
  302. package/typings/utils.d.ts +0 -40
@@ -1,46 +1,68 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rule = void 0;
4
- const utils_1 = require("@graphql-tools/utils");
5
- const graphql_1 = require("graphql");
6
- const index_js_1 = require("../estree-converter/index.js");
7
- const utils_js_1 = require("../utils.js");
8
- const RULE_ID = 'require-id-when-available';
9
- const DEFAULT_ID_FIELD_NAME = 'id';
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 require_id_when_available_exports = {};
20
+ __export(require_id_when_available_exports, {
21
+ rule: () => rule
22
+ });
23
+ module.exports = __toCommonJS(require_id_when_available_exports);
24
+ var import_utils = require("@graphql-tools/utils");
25
+ var import_graphql = require("graphql");
26
+ var import_estree_converter = require("../estree-converter/index.js");
27
+ var import_utils2 = require("../utils.js");
28
+ const RULE_ID = "require-id-when-available";
29
+ const DEFAULT_ID_FIELD_NAME = "id";
10
30
  const schema = {
11
- definitions: {
12
- asString: {
13
- type: 'string',
14
- },
15
- asArray: utils_js_1.ARRAY_DEFAULT_OPTIONS,
16
- },
17
- type: 'array',
18
- maxItems: 1,
19
- items: {
20
- type: 'object',
21
- additionalProperties: false,
22
- properties: {
23
- fieldName: {
24
- oneOf: [{ $ref: '#/definitions/asString' }, { $ref: '#/definitions/asArray' }],
25
- default: DEFAULT_ID_FIELD_NAME,
26
- },
27
- },
31
+ definitions: {
32
+ asString: {
33
+ type: "string"
28
34
  },
35
+ asArray: import_utils2.ARRAY_DEFAULT_OPTIONS
36
+ },
37
+ type: "array",
38
+ maxItems: 1,
39
+ items: {
40
+ type: "object",
41
+ additionalProperties: false,
42
+ properties: {
43
+ fieldName: {
44
+ oneOf: [{ $ref: "#/definitions/asString" }, { $ref: "#/definitions/asArray" }],
45
+ default: DEFAULT_ID_FIELD_NAME
46
+ }
47
+ }
48
+ }
29
49
  };
30
- exports.rule = {
31
- meta: {
32
- type: 'suggestion',
33
- hasSuggestions: true,
34
- docs: {
35
- category: 'Operations',
36
- description: 'Enforce selecting specific fields when they are available on the GraphQL type.',
37
- url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
38
- requiresSchema: true,
39
- requiresSiblings: true,
40
- examples: [
41
- {
42
- title: 'Incorrect',
43
- code: /* GraphQL */ `
50
+ const rule = {
51
+ meta: {
52
+ type: "suggestion",
53
+ hasSuggestions: true,
54
+ docs: {
55
+ category: "Operations",
56
+ description: "Enforce selecting specific fields when they are available on the GraphQL type.",
57
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
58
+ requiresSchema: true,
59
+ requiresSiblings: true,
60
+ examples: [
61
+ {
62
+ title: "Incorrect",
63
+ code: (
64
+ /* GraphQL */
65
+ `
44
66
  # In your schema
45
67
  type User {
46
68
  id: ID!
@@ -53,11 +75,14 @@ exports.rule = {
53
75
  name
54
76
  }
55
77
  }
56
- `,
57
- },
58
- {
59
- title: 'Correct',
60
- code: /* GraphQL */ `
78
+ `
79
+ )
80
+ },
81
+ {
82
+ title: "Correct",
83
+ code: (
84
+ /* GraphQL */
85
+ `
61
86
  # In your schema
62
87
  type User {
63
88
  id: ID!
@@ -78,141 +103,139 @@ exports.rule = {
78
103
  id: name
79
104
  }
80
105
  }
81
- `,
82
- },
83
- ],
84
- recommended: true,
85
- },
86
- messages: {
87
- [RULE_ID]: "Field{{ pluralSuffix }} {{ fieldName }} must be selected when it's available on a type.\nInclude it in your selection set{{ addition }}.",
88
- },
89
- schema,
106
+ `
107
+ )
108
+ }
109
+ ],
110
+ recommended: true
90
111
  },
91
- create(context) {
92
- const schema = (0, utils_js_1.requireGraphQLSchemaFromContext)(RULE_ID, context);
93
- const siblings = (0, utils_js_1.requireSiblingsOperations)(RULE_ID, context);
94
- const { fieldName = DEFAULT_ID_FIELD_NAME } = context.options[0] || {};
95
- const idNames = (0, utils_1.asArray)(fieldName);
96
- // Check selections only in OperationDefinition,
97
- // skip selections of OperationDefinition and InlineFragment
98
- const selector = 'OperationDefinition SelectionSet[parent.kind!=/(^OperationDefinition|InlineFragment)$/]';
99
- const typeInfo = new graphql_1.TypeInfo(schema);
100
- function checkFragments(node) {
101
- for (const selection of node.selections) {
102
- if (selection.kind !== graphql_1.Kind.FRAGMENT_SPREAD) {
103
- continue;
104
- }
105
- const [foundSpread] = siblings.getFragment(selection.name.value);
106
- if (!foundSpread) {
107
- continue;
108
- }
109
- const checkedFragmentSpreads = new Set();
110
- const visitor = (0, graphql_1.visitWithTypeInfo)(typeInfo, {
111
- SelectionSet(node, key, _parent) {
112
- const parent = _parent;
113
- if (parent.kind === graphql_1.Kind.FRAGMENT_DEFINITION) {
114
- checkedFragmentSpreads.add(parent.name.value);
115
- }
116
- else if (parent.kind !== graphql_1.Kind.INLINE_FRAGMENT) {
117
- checkSelections(node, typeInfo.getType(), selection.loc.start, parent, checkedFragmentSpreads);
118
- }
119
- },
120
- });
121
- (0, graphql_1.visit)(foundSpread.document, visitor);
112
+ messages: {
113
+ [RULE_ID]: "Field{{ pluralSuffix }} {{ fieldName }} must be selected when it's available on a type.\nInclude it in your selection set{{ addition }}."
114
+ },
115
+ schema
116
+ },
117
+ create(context) {
118
+ const schema2 = (0, import_utils2.requireGraphQLSchemaFromContext)(RULE_ID, context);
119
+ const siblings = (0, import_utils2.requireSiblingsOperations)(RULE_ID, context);
120
+ const { fieldName = DEFAULT_ID_FIELD_NAME } = context.options[0] || {};
121
+ const idNames = (0, import_utils.asArray)(fieldName);
122
+ const selector = "OperationDefinition SelectionSet[parent.kind!=/(^OperationDefinition|InlineFragment)$/]";
123
+ const typeInfo = new import_graphql.TypeInfo(schema2);
124
+ function checkFragments(node) {
125
+ for (const selection of node.selections) {
126
+ if (selection.kind !== import_graphql.Kind.FRAGMENT_SPREAD) {
127
+ continue;
128
+ }
129
+ const [foundSpread] = siblings.getFragment(selection.name.value);
130
+ if (!foundSpread) {
131
+ continue;
132
+ }
133
+ const checkedFragmentSpreads = /* @__PURE__ */ new Set();
134
+ const visitor = (0, import_graphql.visitWithTypeInfo)(typeInfo, {
135
+ SelectionSet(node2, key, _parent) {
136
+ const parent = _parent;
137
+ if (parent.kind === import_graphql.Kind.FRAGMENT_DEFINITION) {
138
+ checkedFragmentSpreads.add(parent.name.value);
139
+ } else if (parent.kind !== import_graphql.Kind.INLINE_FRAGMENT) {
140
+ checkSelections(
141
+ node2,
142
+ typeInfo.getType(),
143
+ selection.loc.start,
144
+ parent,
145
+ checkedFragmentSpreads
146
+ );
147
+ }
148
+ }
149
+ });
150
+ (0, import_graphql.visit)(foundSpread.document, visitor);
151
+ }
152
+ }
153
+ function checkSelections(node, type, loc, parent, checkedFragmentSpreads = /* @__PURE__ */ new Set()) {
154
+ const rawType = (0, import_estree_converter.getBaseType)(type);
155
+ if (rawType instanceof import_graphql.GraphQLObjectType || rawType instanceof import_graphql.GraphQLInterfaceType) {
156
+ checkFields(rawType);
157
+ } else if (rawType instanceof import_graphql.GraphQLUnionType) {
158
+ for (const selection of node.selections) {
159
+ if (selection.kind === import_graphql.Kind.INLINE_FRAGMENT) {
160
+ const types = rawType.getTypes();
161
+ const t = types.find((t2) => t2.name === selection.typeCondition.name.value);
162
+ if (t) {
163
+ checkFields(t);
122
164
  }
165
+ }
166
+ }
167
+ }
168
+ function checkFields(rawType2) {
169
+ const fields = rawType2.getFields();
170
+ const hasIdFieldInType = idNames.some((name) => fields[name]);
171
+ if (!hasIdFieldInType) {
172
+ return;
123
173
  }
124
- function checkSelections(node, type,
125
- // Fragment can be placed in separate file
126
- // Provide actual fragment spread location instead of location in fragment
127
- loc,
128
- // Can't access to node.parent in GraphQL AST.Node, so pass as argument
129
- parent, checkedFragmentSpreads = new Set()) {
130
- const rawType = (0, index_js_1.getBaseType)(type);
131
- if (rawType instanceof graphql_1.GraphQLObjectType || rawType instanceof graphql_1.GraphQLInterfaceType) {
132
- checkFields(rawType);
174
+ function hasIdField({ selections }) {
175
+ return selections.some((selection) => {
176
+ if (selection.kind === import_graphql.Kind.FIELD) {
177
+ if (selection.alias && idNames.includes(selection.alias.value)) {
178
+ return true;
179
+ }
180
+ return idNames.includes(selection.name.value);
133
181
  }
134
- else if (rawType instanceof graphql_1.GraphQLUnionType) {
135
- for (const selection of node.selections) {
136
- if (selection.kind === graphql_1.Kind.INLINE_FRAGMENT) {
137
- const types = rawType.getTypes();
138
- const t = types.find(t => t.name === selection.typeCondition.name.value);
139
- if (t) {
140
- checkFields(t);
141
- }
142
- }
143
- }
182
+ if (selection.kind === import_graphql.Kind.INLINE_FRAGMENT) {
183
+ return hasIdField(selection.selectionSet);
144
184
  }
145
- function checkFields(rawType) {
146
- const fields = rawType.getFields();
147
- const hasIdFieldInType = idNames.some(name => fields[name]);
148
- if (!hasIdFieldInType) {
149
- return;
150
- }
151
- function hasIdField({ selections }) {
152
- return selections.some(selection => {
153
- if (selection.kind === graphql_1.Kind.FIELD) {
154
- if (selection.alias && idNames.includes(selection.alias.value)) {
155
- return true;
156
- }
157
- return idNames.includes(selection.name.value);
158
- }
159
- if (selection.kind === graphql_1.Kind.INLINE_FRAGMENT) {
160
- return hasIdField(selection.selectionSet);
161
- }
162
- if (selection.kind === graphql_1.Kind.FRAGMENT_SPREAD) {
163
- const [foundSpread] = siblings.getFragment(selection.name.value);
164
- if (foundSpread) {
165
- const fragmentSpread = foundSpread.document;
166
- checkedFragmentSpreads.add(fragmentSpread.name.value);
167
- return hasIdField(fragmentSpread.selectionSet);
168
- }
169
- }
170
- return false;
171
- });
172
- }
173
- const hasId = hasIdField(node);
174
- checkFragments(node);
175
- if (hasId) {
176
- return;
177
- }
178
- const pluralSuffix = idNames.length > 1 ? 's' : '';
179
- const fieldName = (0, utils_js_1.englishJoinWords)(idNames.map(name => `\`${(parent.alias || parent.name).value}.${name}\``));
180
- const addition = checkedFragmentSpreads.size === 0
181
- ? ''
182
- : ` or add to used fragment${checkedFragmentSpreads.size > 1 ? 's' : ''} ${(0, utils_js_1.englishJoinWords)([...checkedFragmentSpreads].map(name => `\`${name}\``))}`;
183
- const problem = {
184
- loc,
185
- messageId: RULE_ID,
186
- data: {
187
- pluralSuffix,
188
- fieldName,
189
- addition,
190
- },
191
- };
192
- // Don't provide suggestions for selections in fragments as fragment can be in a separate file
193
- if ('type' in node) {
194
- problem.suggest = idNames.map(idName => ({
195
- desc: `Add \`${idName}\` selection`,
196
- fix: fixer => {
197
- let insertNode = node.selections[0];
198
- insertNode =
199
- insertNode.kind === graphql_1.Kind.INLINE_FRAGMENT
200
- ? insertNode.selectionSet.selections[0]
201
- : insertNode;
202
- return fixer.insertTextBefore(insertNode, `${idName} `);
203
- },
204
- }));
205
- }
206
- context.report(problem);
185
+ if (selection.kind === import_graphql.Kind.FRAGMENT_SPREAD) {
186
+ const [foundSpread] = siblings.getFragment(selection.name.value);
187
+ if (foundSpread) {
188
+ const fragmentSpread = foundSpread.document;
189
+ checkedFragmentSpreads.add(fragmentSpread.name.value);
190
+ return hasIdField(fragmentSpread.selectionSet);
191
+ }
207
192
  }
193
+ return false;
194
+ });
208
195
  }
209
- return {
210
- [selector](node) {
211
- const typeInfo = node.typeInfo();
212
- if (typeInfo.gqlType) {
213
- checkSelections(node, typeInfo.gqlType, node.loc.start, node.parent);
214
- }
215
- },
196
+ const hasId = hasIdField(node);
197
+ checkFragments(node);
198
+ if (hasId) {
199
+ return;
200
+ }
201
+ const pluralSuffix = idNames.length > 1 ? "s" : "";
202
+ const fieldName2 = (0, import_utils2.englishJoinWords)(
203
+ idNames.map((name) => `\`${(parent.alias || parent.name).value}.${name}\``)
204
+ );
205
+ const addition = checkedFragmentSpreads.size === 0 ? "" : ` or add to used fragment${checkedFragmentSpreads.size > 1 ? "s" : ""} ${(0, import_utils2.englishJoinWords)([...checkedFragmentSpreads].map((name) => `\`${name}\``))}`;
206
+ const problem = {
207
+ loc,
208
+ messageId: RULE_ID,
209
+ data: {
210
+ pluralSuffix,
211
+ fieldName: fieldName2,
212
+ addition
213
+ }
216
214
  };
217
- },
215
+ if ("type" in node) {
216
+ problem.suggest = idNames.map((idName) => ({
217
+ desc: `Add \`${idName}\` selection`,
218
+ fix: (fixer) => {
219
+ let insertNode = node.selections[0];
220
+ insertNode = insertNode.kind === import_graphql.Kind.INLINE_FRAGMENT ? insertNode.selectionSet.selections[0] : insertNode;
221
+ return fixer.insertTextBefore(insertNode, `${idName} `);
222
+ }
223
+ }));
224
+ }
225
+ context.report(problem);
226
+ }
227
+ }
228
+ return {
229
+ [selector](node) {
230
+ const typeInfo2 = node.typeInfo();
231
+ if (typeInfo2.gqlType) {
232
+ checkSelections(node, typeInfo2.gqlType, node.loc.start, node.parent);
233
+ }
234
+ }
235
+ };
236
+ }
218
237
  };
238
+ // Annotate the CommonJS export names for ESM import in node:
239
+ 0 && (module.exports = {
240
+ rule
241
+ });
@@ -0,0 +1,12 @@
1
+ import { i as GraphQLESLintRule } from '../types-e3367e3c.js';
2
+ import '@graphql-tools/utils';
3
+ import 'eslint';
4
+ import 'estree';
5
+ import 'graphql';
6
+ import 'graphql-config';
7
+ import 'json-schema-to-ts';
8
+ import '../estree-converter/types.js';
9
+
10
+ declare const rule: GraphQLESLintRule;
11
+
12
+ export { rule };
@@ -1,115 +1,165 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rule = void 0;
4
- const tslib_1 = require("tslib");
5
- const path_1 = tslib_1.__importDefault(require("path"));
6
- const utils_js_1 = require("../utils.js");
7
- const RULE_ID = 'require-import-fragment';
8
- const SUGGESTION_ID = 'add-import-expression';
9
- exports.rule = {
10
- meta: {
11
- type: 'suggestion',
12
- docs: {
13
- category: 'Operations',
14
- description: 'Require fragments to be imported via an import expression.',
15
- url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
16
- examples: [
17
- {
18
- title: 'Incorrect',
19
- code: /* GraphQL */ `
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var require_import_fragment_exports = {};
30
+ __export(require_import_fragment_exports, {
31
+ rule: () => rule
32
+ });
33
+ module.exports = __toCommonJS(require_import_fragment_exports);
34
+ var import_path = __toESM(require("path"));
35
+ var import_utils = require("../utils.js");
36
+ const RULE_ID = "require-import-fragment";
37
+ const SUGGESTION_ID = "add-import-expression";
38
+ const rule = {
39
+ meta: {
40
+ type: "suggestion",
41
+ docs: {
42
+ category: "Operations",
43
+ description: "Require fragments to be imported via an import expression.",
44
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
45
+ examples: [
46
+ {
47
+ title: "Incorrect",
48
+ code: (
49
+ /* GraphQL */
50
+ `
20
51
  query {
21
52
  user {
22
53
  ...UserFields
23
54
  }
24
55
  }
25
- `,
26
- },
27
- {
28
- title: 'Incorrect',
29
- code: /* GraphQL */ `
56
+ `
57
+ )
58
+ },
59
+ {
60
+ title: "Incorrect",
61
+ code: (
62
+ /* GraphQL */
63
+ `
30
64
  # import 'post-fields.fragment.graphql'
31
65
  query {
32
66
  user {
33
67
  ...UserFields
34
68
  }
35
69
  }
36
- `,
37
- },
38
- {
39
- title: 'Incorrect',
40
- code: /* GraphQL */ `
70
+ `
71
+ )
72
+ },
73
+ {
74
+ title: "Incorrect",
75
+ code: (
76
+ /* GraphQL */
77
+ `
41
78
  # import UserFields from 'post-fields.fragment.graphql'
42
79
  query {
43
80
  user {
44
81
  ...UserFields
45
82
  }
46
83
  }
47
- `,
48
- },
49
- {
50
- title: 'Correct',
51
- code: /* GraphQL */ `
84
+ `
85
+ )
86
+ },
87
+ {
88
+ title: "Correct",
89
+ code: (
90
+ /* GraphQL */
91
+ `
52
92
  # import UserFields from 'user-fields.fragment.graphql'
53
93
  query {
54
94
  user {
55
95
  ...UserFields
56
96
  }
57
97
  }
58
- `,
59
- },
60
- ],
61
- requiresSiblings: true,
62
- isDisabledForAllConfig: true,
63
- },
64
- hasSuggestions: true,
65
- messages: {
66
- [RULE_ID]: 'Expected "{{fragmentName}}" fragment to be imported.',
67
- [SUGGESTION_ID]: 'Add import expression for "{{fragmentName}}".',
68
- },
69
- schema: [],
98
+ `
99
+ )
100
+ }
101
+ ],
102
+ requiresSiblings: true,
103
+ isDisabledForAllConfig: true
70
104
  },
71
- create(context) {
72
- const comments = context.getSourceCode().getAllComments();
73
- const siblings = (0, utils_js_1.requireSiblingsOperations)(RULE_ID, context);
74
- const filePath = context.getFilename();
75
- return {
76
- 'FragmentSpread > .name'(node) {
77
- var _a;
78
- const fragmentName = node.value;
79
- const fragmentsFromSiblings = siblings.getFragment(fragmentName);
80
- for (const comment of comments) {
81
- if (comment.type !== 'Line')
82
- continue;
83
- // 1. could start with extra whitespace
84
- // 2. match both named/default import
85
- const isPossibleImported = new RegExp(`^\\s*import\\s+(${fragmentName}\\s+from\\s+)?['"]`).test(comment.value);
86
- if (!isPossibleImported)
87
- continue;
88
- const extractedImportPath = (_a = comment.value.match(/(["'])((?:\1|.)*?)\1/)) === null || _a === void 0 ? void 0 : _a[2];
89
- if (!extractedImportPath)
90
- continue;
91
- const importPath = path_1.default.join(path_1.default.dirname(filePath), extractedImportPath);
92
- const hasInSiblings = fragmentsFromSiblings.some(source => source.filePath === importPath);
93
- if (hasInSiblings)
94
- return;
95
- }
96
- const fragmentInSameFile = fragmentsFromSiblings.some(source => source.filePath === filePath);
97
- if (fragmentInSameFile)
98
- return;
99
- const suggestedFilePaths = fragmentsFromSiblings.length
100
- ? fragmentsFromSiblings.map(o => path_1.default.relative(path_1.default.dirname(filePath), o.filePath))
101
- : ['CHANGE_ME.graphql'];
102
- context.report({
103
- node,
104
- messageId: RULE_ID,
105
- data: { fragmentName },
106
- suggest: suggestedFilePaths.map(suggestedPath => ({
107
- messageId: SUGGESTION_ID,
108
- data: { fragmentName },
109
- fix: fixer => fixer.insertTextBeforeRange([0, 0], `# import ${fragmentName} from '${suggestedPath}'\n`),
110
- })),
111
- });
112
- },
113
- };
105
+ hasSuggestions: true,
106
+ messages: {
107
+ [RULE_ID]: 'Expected "{{fragmentName}}" fragment to be imported.',
108
+ [SUGGESTION_ID]: 'Add import expression for "{{fragmentName}}".'
114
109
  },
110
+ schema: []
111
+ },
112
+ create(context) {
113
+ const comments = context.getSourceCode().getAllComments();
114
+ const siblings = (0, import_utils.requireSiblingsOperations)(RULE_ID, context);
115
+ const filePath = context.getFilename();
116
+ return {
117
+ "FragmentSpread > .name"(node) {
118
+ const fragmentName = node.value;
119
+ const fragmentsFromSiblings = siblings.getFragment(fragmentName);
120
+ for (const comment of comments) {
121
+ if (comment.type !== "Line")
122
+ continue;
123
+ const isPossibleImported = new RegExp(
124
+ `^\\s*import\\s+(${fragmentName}\\s+from\\s+)?['"]`
125
+ ).test(comment.value);
126
+ if (!isPossibleImported)
127
+ continue;
128
+ const extractedImportPath = comment.value.match(/(["'])((?:\1|.)*?)\1/)?.[2];
129
+ if (!extractedImportPath)
130
+ continue;
131
+ const importPath = import_path.default.join(import_path.default.dirname(filePath), extractedImportPath);
132
+ const hasInSiblings = fragmentsFromSiblings.some(
133
+ (source) => source.filePath === importPath
134
+ );
135
+ if (hasInSiblings)
136
+ return;
137
+ }
138
+ const fragmentInSameFile = fragmentsFromSiblings.some(
139
+ (source) => source.filePath === filePath
140
+ );
141
+ if (fragmentInSameFile)
142
+ return;
143
+ const suggestedFilePaths = fragmentsFromSiblings.length ? fragmentsFromSiblings.map((o) => import_path.default.relative(import_path.default.dirname(filePath), o.filePath)) : ["CHANGE_ME.graphql"];
144
+ context.report({
145
+ node,
146
+ messageId: RULE_ID,
147
+ data: { fragmentName },
148
+ suggest: suggestedFilePaths.map((suggestedPath) => ({
149
+ messageId: SUGGESTION_ID,
150
+ data: { fragmentName },
151
+ fix: (fixer) => fixer.insertTextBeforeRange(
152
+ [0, 0],
153
+ `# import ${fragmentName} from '${suggestedPath}'
154
+ `
155
+ )
156
+ }))
157
+ });
158
+ }
159
+ };
160
+ }
115
161
  };
162
+ // Annotate the CommonJS export names for ESM import in node:
163
+ 0 && (module.exports = {
164
+ rule
165
+ });