@graphql-eslint/eslint-plugin 4.0.0-alpha-20220821140530-e968cfc → 4.0.0-alpha-20230810155929-e89edf7

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 (346) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +14 -252
  3. package/cjs/cache.d.ts +12 -0
  4. package/cjs/cache.js +53 -0
  5. package/cjs/configs/index.d.ts +174 -0
  6. package/cjs/configs/index.js +40 -0
  7. package/cjs/configs/operations-all.d.ts +23 -0
  8. package/cjs/configs/operations-all.js +28 -0
  9. package/cjs/configs/operations-recommended.d.ts +54 -0
  10. package/{configs/operations-recommended.json → cjs/configs/operations-recommended.js} +19 -15
  11. package/cjs/configs/schema-all.d.ts +24 -0
  12. package/cjs/configs/schema-all.js +24 -0
  13. package/cjs/configs/schema-recommended.d.ts +67 -0
  14. package/cjs/configs/schema-recommended.js +68 -0
  15. package/cjs/configs/schema-relay.d.ts +12 -0
  16. package/{configs/relay.json → cjs/configs/schema-relay.js} +6 -4
  17. package/cjs/documents.d.ts +6 -0
  18. package/cjs/documents.js +66 -0
  19. package/cjs/estree-converter/converter.d.ts +8 -0
  20. package/cjs/estree-converter/converter.js +70 -0
  21. package/cjs/estree-converter/index.d.ts +8 -0
  22. package/cjs/estree-converter/index.js +23 -0
  23. package/cjs/estree-converter/types.d.ts +42 -0
  24. package/cjs/estree-converter/types.js +14 -0
  25. package/cjs/estree-converter/utils.d.ts +17 -0
  26. package/cjs/estree-converter/utils.js +105 -0
  27. package/cjs/flat-configs.d.ts +307 -0
  28. package/cjs/flat-configs.js +55 -0
  29. package/cjs/graphql-config.d.ts +14 -0
  30. package/cjs/graphql-config.js +65 -0
  31. package/cjs/index.d.ts +28 -0
  32. package/cjs/index.js +41 -0
  33. package/cjs/parser.d.ts +13 -0
  34. package/cjs/parser.js +96 -0
  35. package/cjs/processor.d.ts +13 -0
  36. package/cjs/processor.js +95 -0
  37. package/cjs/rules/alphabetize.d.ts +74 -0
  38. package/cjs/rules/alphabetize.js +323 -0
  39. package/cjs/rules/description-style.d.ts +29 -0
  40. package/cjs/rules/description-style.js +102 -0
  41. package/cjs/rules/graphql-js-validation.d.ts +13 -0
  42. package/cjs/rules/graphql-js-validation.js +595 -0
  43. package/cjs/rules/index.d.ts +127 -0
  44. package/cjs/rules/index.js +62 -0
  45. package/cjs/rules/input-name.d.ts +44 -0
  46. package/cjs/rules/input-name.js +154 -0
  47. package/cjs/rules/lone-executable-definition.d.ts +35 -0
  48. package/cjs/rules/lone-executable-definition.js +105 -0
  49. package/cjs/rules/match-document-filename.d.ts +81 -0
  50. package/cjs/rules/match-document-filename.js +251 -0
  51. package/cjs/rules/naming-convention.d.ts +108 -0
  52. package/cjs/rules/naming-convention.js +416 -0
  53. package/cjs/rules/no-anonymous-operations.d.ts +13 -0
  54. package/cjs/rules/no-anonymous-operations.js +91 -0
  55. package/cjs/rules/no-deprecated.d.ts +13 -0
  56. package/cjs/rules/no-deprecated.js +143 -0
  57. package/cjs/rules/no-duplicate-fields.d.ts +13 -0
  58. package/cjs/rules/no-duplicate-fields.js +136 -0
  59. package/cjs/rules/no-hashtag-description.d.ts +14 -0
  60. package/cjs/rules/no-hashtag-description.js +127 -0
  61. package/cjs/rules/no-one-place-fragments.d.ts +13 -0
  62. package/cjs/rules/no-one-place-fragments.js +101 -0
  63. package/cjs/rules/no-root-type.d.ts +34 -0
  64. package/cjs/rules/no-root-type.js +103 -0
  65. package/cjs/rules/no-scalar-result-type-on-mutation.d.ts +13 -0
  66. package/cjs/rules/no-scalar-result-type-on-mutation.js +88 -0
  67. package/cjs/rules/no-typename-prefix.d.ts +13 -0
  68. package/cjs/rules/no-typename-prefix.js +91 -0
  69. package/cjs/rules/no-unreachable-types.d.ts +13 -0
  70. package/cjs/rules/no-unreachable-types.js +177 -0
  71. package/cjs/rules/no-unused-fields.d.ts +13 -0
  72. package/cjs/rules/no-unused-fields.js +132 -0
  73. package/cjs/rules/relay-arguments.d.ts +30 -0
  74. package/cjs/rules/relay-arguments.js +126 -0
  75. package/cjs/rules/relay-connection-types.d.ts +14 -0
  76. package/cjs/rules/relay-connection-types.js +111 -0
  77. package/cjs/rules/relay-edge-types.d.ts +40 -0
  78. package/cjs/rules/relay-edge-types.js +161 -0
  79. package/cjs/rules/relay-page-info.d.ts +13 -0
  80. package/cjs/rules/relay-page-info.js +98 -0
  81. package/cjs/rules/require-deprecation-date.d.ts +27 -0
  82. package/cjs/rules/require-deprecation-date.js +148 -0
  83. package/cjs/rules/require-deprecation-reason.d.ts +13 -0
  84. package/cjs/rules/require-deprecation-reason.js +85 -0
  85. package/cjs/rules/require-description.d.ts +24 -0
  86. package/cjs/rules/require-description.js +179 -0
  87. package/cjs/rules/require-field-of-type-query-in-mutation-result.d.ts +13 -0
  88. package/cjs/rules/require-field-of-type-query-in-mutation-result.js +87 -0
  89. package/cjs/rules/require-import-fragment.d.ts +13 -0
  90. package/cjs/rules/require-import-fragment.js +148 -0
  91. package/cjs/rules/require-nullable-fields-with-oneof.d.ts +13 -0
  92. package/cjs/rules/require-nullable-fields-with-oneof.js +81 -0
  93. package/cjs/rules/require-nullable-result-in-root.d.ts +13 -0
  94. package/cjs/rules/require-nullable-result-in-root.js +99 -0
  95. package/cjs/rules/require-selections.d.ts +45 -0
  96. package/cjs/rules/require-selections.js +198 -0
  97. package/cjs/rules/require-type-pattern-with-oneof.d.ts +13 -0
  98. package/cjs/rules/require-type-pattern-with-oneof.js +83 -0
  99. package/cjs/rules/selection-set-depth.d.ts +37 -0
  100. package/cjs/rules/selection-set-depth.js +159 -0
  101. package/cjs/rules/strict-id-in-types.d.ts +66 -0
  102. package/cjs/rules/strict-id-in-types.js +168 -0
  103. package/cjs/rules/unique-enum-value-names.d.ts +13 -0
  104. package/cjs/rules/unique-enum-value-names.js +91 -0
  105. package/cjs/rules/unique-fragment-name.d.ts +14 -0
  106. package/cjs/rules/unique-fragment-name.js +106 -0
  107. package/cjs/rules/unique-operation-name.d.ts +13 -0
  108. package/cjs/rules/unique-operation-name.js +93 -0
  109. package/cjs/schema.d.ts +13 -0
  110. package/cjs/schema.js +52 -0
  111. package/{sibling-operations.d.ts → cjs/siblings.d.ts} +9 -6
  112. package/cjs/siblings.js +96 -0
  113. package/cjs/types.d.ts +75 -0
  114. package/cjs/types.js +14 -0
  115. package/cjs/utils.d.ts +45 -0
  116. package/cjs/utils.js +188 -0
  117. package/esm/cache.d.mts +12 -0
  118. package/esm/cache.js +25 -0
  119. package/esm/chunk-U3TKCM4X.js +8 -0
  120. package/esm/configs/index.d.mts +174 -0
  121. package/esm/configs/index.js +16 -0
  122. package/esm/configs/operations-all.d.mts +23 -0
  123. package/esm/configs/operations-all.js +35 -0
  124. package/esm/configs/operations-recommended.d.mts +54 -0
  125. package/esm/configs/operations-recommended.js +61 -0
  126. package/esm/configs/schema-all.d.mts +24 -0
  127. package/esm/configs/schema-all.js +31 -0
  128. package/esm/configs/schema-recommended.d.mts +67 -0
  129. package/esm/configs/schema-recommended.js +75 -0
  130. package/esm/configs/schema-relay.d.mts +12 -0
  131. package/esm/configs/schema-relay.js +18 -0
  132. package/esm/documents.d.mts +6 -0
  133. package/esm/documents.js +41 -0
  134. package/esm/estree-converter/converter.d.mts +8 -0
  135. package/esm/estree-converter/converter.js +56 -0
  136. package/esm/estree-converter/index.d.mts +8 -0
  137. package/esm/estree-converter/index.js +3 -0
  138. package/esm/estree-converter/types.d.mts +42 -0
  139. package/esm/estree-converter/types.js +0 -0
  140. package/esm/estree-converter/utils.d.mts +17 -0
  141. package/esm/estree-converter/utils.js +87 -0
  142. package/esm/flat-configs.d.mts +307 -0
  143. package/esm/flat-configs.js +36 -0
  144. package/esm/graphql-config.d.mts +14 -0
  145. package/esm/graphql-config.js +39 -0
  146. package/esm/index.d.mts +28 -0
  147. package/esm/index.js +18 -0
  148. package/esm/package.json +1 -0
  149. package/esm/parser.d.mts +13 -0
  150. package/esm/parser.js +76 -0
  151. package/esm/processor.d.mts +13 -0
  152. package/esm/processor.js +81 -0
  153. package/esm/rules/alphabetize.d.mts +74 -0
  154. package/esm/rules/alphabetize.js +299 -0
  155. package/esm/rules/description-style.d.mts +29 -0
  156. package/esm/rules/description-style.js +82 -0
  157. package/esm/rules/graphql-js-validation.d.mts +13 -0
  158. package/esm/rules/graphql-js-validation.js +618 -0
  159. package/esm/rules/index.d.mts +127 -0
  160. package/esm/rules/index.js +76 -0
  161. package/esm/rules/input-name.d.mts +44 -0
  162. package/esm/rules/input-name.js +136 -0
  163. package/esm/rules/lone-executable-definition.d.mts +35 -0
  164. package/esm/rules/lone-executable-definition.js +86 -0
  165. package/esm/rules/match-document-filename.d.mts +81 -0
  166. package/esm/rules/match-document-filename.js +237 -0
  167. package/esm/rules/naming-convention.d.mts +108 -0
  168. package/esm/rules/naming-convention.js +403 -0
  169. package/esm/rules/no-anonymous-operations.d.mts +13 -0
  170. package/esm/rules/no-anonymous-operations.js +72 -0
  171. package/esm/rules/no-deprecated.d.mts +13 -0
  172. package/esm/rules/no-deprecated.js +124 -0
  173. package/esm/rules/no-duplicate-fields.d.mts +13 -0
  174. package/esm/rules/no-duplicate-fields.js +116 -0
  175. package/esm/rules/no-hashtag-description.d.mts +14 -0
  176. package/esm/rules/no-hashtag-description.js +107 -0
  177. package/esm/rules/no-one-place-fragments.d.mts +13 -0
  178. package/esm/rules/no-one-place-fragments.js +83 -0
  179. package/esm/rules/no-root-type.d.mts +34 -0
  180. package/esm/rules/no-root-type.js +83 -0
  181. package/esm/rules/no-scalar-result-type-on-mutation.d.mts +13 -0
  182. package/esm/rules/no-scalar-result-type-on-mutation.js +69 -0
  183. package/esm/rules/no-typename-prefix.d.mts +13 -0
  184. package/esm/rules/no-typename-prefix.js +71 -0
  185. package/esm/rules/no-unreachable-types.d.mts +13 -0
  186. package/esm/rules/no-unreachable-types.js +156 -0
  187. package/esm/rules/no-unused-fields.d.mts +13 -0
  188. package/esm/rules/no-unused-fields.js +113 -0
  189. package/esm/rules/relay-arguments.d.mts +30 -0
  190. package/esm/rules/relay-arguments.js +107 -0
  191. package/esm/rules/relay-connection-types.d.mts +14 -0
  192. package/esm/rules/relay-connection-types.js +90 -0
  193. package/esm/rules/relay-edge-types.d.mts +40 -0
  194. package/esm/rules/relay-edge-types.js +148 -0
  195. package/esm/rules/relay-page-info.d.mts +13 -0
  196. package/esm/rules/relay-page-info.js +80 -0
  197. package/esm/rules/require-deprecation-date.d.mts +27 -0
  198. package/esm/rules/require-deprecation-date.js +129 -0
  199. package/esm/rules/require-deprecation-reason.d.mts +13 -0
  200. package/esm/rules/require-deprecation-reason.js +66 -0
  201. package/esm/rules/require-description.d.mts +24 -0
  202. package/esm/rules/require-description.js +165 -0
  203. package/esm/rules/require-field-of-type-query-in-mutation-result.d.mts +13 -0
  204. package/esm/rules/require-field-of-type-query-in-mutation-result.js +68 -0
  205. package/esm/rules/require-import-fragment.d.mts +13 -0
  206. package/esm/rules/require-import-fragment.js +121 -0
  207. package/esm/rules/require-nullable-fields-with-oneof.d.mts +13 -0
  208. package/esm/rules/require-nullable-fields-with-oneof.js +62 -0
  209. package/esm/rules/require-nullable-result-in-root.d.mts +13 -0
  210. package/esm/rules/require-nullable-result-in-root.js +80 -0
  211. package/esm/rules/require-selections.d.mts +45 -0
  212. package/esm/rules/require-selections.js +194 -0
  213. package/esm/rules/require-type-pattern-with-oneof.d.mts +13 -0
  214. package/esm/rules/require-type-pattern-with-oneof.js +63 -0
  215. package/esm/rules/selection-set-depth.d.mts +37 -0
  216. package/esm/rules/selection-set-depth.js +133 -0
  217. package/esm/rules/strict-id-in-types.d.mts +66 -0
  218. package/esm/rules/strict-id-in-types.js +155 -0
  219. package/esm/rules/unique-enum-value-names.d.mts +13 -0
  220. package/esm/rules/unique-enum-value-names.js +72 -0
  221. package/esm/rules/unique-fragment-name.d.mts +14 -0
  222. package/esm/rules/unique-fragment-name.js +87 -0
  223. package/esm/rules/unique-operation-name.d.mts +13 -0
  224. package/esm/rules/unique-operation-name.js +73 -0
  225. package/esm/schema.d.mts +13 -0
  226. package/esm/schema.js +27 -0
  227. package/esm/siblings.d.mts +24 -0
  228. package/esm/siblings.js +80 -0
  229. package/esm/types.d.mts +75 -0
  230. package/esm/types.js +0 -0
  231. package/esm/utils.d.mts +45 -0
  232. package/esm/utils.js +144 -0
  233. package/index.browser.mjs +5323 -0
  234. package/package.json +43 -35
  235. package/configs/base.json +0 -4
  236. package/configs/operations-all.json +0 -24
  237. package/configs/schema-all.json +0 -26
  238. package/configs/schema-recommended.json +0 -49
  239. package/docs/README.md +0 -75
  240. package/docs/custom-rules.md +0 -148
  241. package/docs/deprecated-rules.md +0 -21
  242. package/docs/parser-options.md +0 -85
  243. package/docs/parser.md +0 -49
  244. package/docs/rules/alphabetize.md +0 -178
  245. package/docs/rules/description-style.md +0 -54
  246. package/docs/rules/executable-definitions.md +0 -17
  247. package/docs/rules/fields-on-correct-type.md +0 -17
  248. package/docs/rules/fragments-on-composite-type.md +0 -17
  249. package/docs/rules/input-name.md +0 -76
  250. package/docs/rules/known-argument-names.md +0 -17
  251. package/docs/rules/known-directives.md +0 -44
  252. package/docs/rules/known-fragment-names.md +0 -69
  253. package/docs/rules/known-type-names.md +0 -17
  254. package/docs/rules/lone-anonymous-operation.md +0 -17
  255. package/docs/rules/lone-schema-definition.md +0 -17
  256. package/docs/rules/match-document-filename.md +0 -156
  257. package/docs/rules/naming-convention.md +0 -300
  258. package/docs/rules/no-anonymous-operations.md +0 -39
  259. package/docs/rules/no-case-insensitive-enum-values-duplicates.md +0 -43
  260. package/docs/rules/no-deprecated.md +0 -85
  261. package/docs/rules/no-duplicate-fields.md +0 -65
  262. package/docs/rules/no-fragment-cycles.md +0 -17
  263. package/docs/rules/no-hashtag-description.md +0 -59
  264. package/docs/rules/no-root-type.md +0 -53
  265. package/docs/rules/no-scalar-result-type-on-mutation.md +0 -37
  266. package/docs/rules/no-typename-prefix.md +0 -39
  267. package/docs/rules/no-undefined-variables.md +0 -17
  268. package/docs/rules/no-unreachable-types.md +0 -49
  269. package/docs/rules/no-unused-fields.md +0 -62
  270. package/docs/rules/no-unused-fragments.md +0 -17
  271. package/docs/rules/no-unused-variables.md +0 -17
  272. package/docs/rules/one-field-subscriptions.md +0 -17
  273. package/docs/rules/overlapping-fields-can-be-merged.md +0 -17
  274. package/docs/rules/possible-fragment-spread.md +0 -17
  275. package/docs/rules/possible-type-extension.md +0 -15
  276. package/docs/rules/provided-required-arguments.md +0 -17
  277. package/docs/rules/relay-arguments.md +0 -57
  278. package/docs/rules/relay-connection-types.md +0 -42
  279. package/docs/rules/relay-edge-types.md +0 -56
  280. package/docs/rules/relay-page-info.md +0 -32
  281. package/docs/rules/require-deprecation-date.md +0 -56
  282. package/docs/rules/require-deprecation-reason.md +0 -47
  283. package/docs/rules/require-description.md +0 -115
  284. package/docs/rules/require-field-of-type-query-in-mutation-result.md +0 -47
  285. package/docs/rules/require-id-when-available.md +0 -88
  286. package/docs/rules/scalar-leafs.md +0 -17
  287. package/docs/rules/selection-set-depth.md +0 -76
  288. package/docs/rules/strict-id-in-types.md +0 -130
  289. package/docs/rules/unique-argument-names.md +0 -17
  290. package/docs/rules/unique-directive-names-per-location.md +0 -17
  291. package/docs/rules/unique-directive-names.md +0 -17
  292. package/docs/rules/unique-enum-value-names.md +0 -15
  293. package/docs/rules/unique-field-definition-names.md +0 -17
  294. package/docs/rules/unique-fragment-name.md +0 -51
  295. package/docs/rules/unique-input-field-names.md +0 -17
  296. package/docs/rules/unique-operation-name.md +0 -55
  297. package/docs/rules/unique-operation-types.md +0 -17
  298. package/docs/rules/unique-type-names.md +0 -17
  299. package/docs/rules/unique-variable-names.md +0 -17
  300. package/docs/rules/value-literals-of-correct-type.md +0 -17
  301. package/docs/rules/variables-are-input-types.md +0 -17
  302. package/docs/rules/variables-in-allowed-position.md +0 -17
  303. package/estree-converter/converter.d.ts +0 -3
  304. package/estree-converter/index.d.ts +0 -3
  305. package/estree-converter/types.d.ts +0 -40
  306. package/estree-converter/utils.d.ts +0 -13
  307. package/graphql-config.d.ts +0 -3
  308. package/index.d.ts +0 -16
  309. package/index.js +0 -4653
  310. package/index.mjs +0 -4641
  311. package/parser.d.ts +0 -2
  312. package/processor.d.ts +0 -7
  313. package/rules/alphabetize.d.ts +0 -16
  314. package/rules/description-style.d.ts +0 -6
  315. package/rules/graphql-js-validation.d.ts +0 -2
  316. package/rules/index.d.ts +0 -41
  317. package/rules/input-name.d.ts +0 -9
  318. package/rules/match-document-filename.d.ts +0 -18
  319. package/rules/naming-convention.d.ts +0 -37
  320. package/rules/no-anonymous-operations.d.ts +0 -3
  321. package/rules/no-case-insensitive-enum-values-duplicates.d.ts +0 -3
  322. package/rules/no-deprecated.d.ts +0 -3
  323. package/rules/no-duplicate-fields.d.ts +0 -3
  324. package/rules/no-hashtag-description.d.ts +0 -3
  325. package/rules/no-root-type.d.ts +0 -7
  326. package/rules/no-scalar-result-type-on-mutation.d.ts +0 -3
  327. package/rules/no-typename-prefix.d.ts +0 -3
  328. package/rules/no-unreachable-types.d.ts +0 -3
  329. package/rules/no-unused-fields.d.ts +0 -3
  330. package/rules/relay-arguments.d.ts +0 -6
  331. package/rules/relay-connection-types.d.ts +0 -5
  332. package/rules/relay-edge-types.d.ts +0 -8
  333. package/rules/relay-page-info.d.ts +0 -3
  334. package/rules/require-deprecation-date.d.ts +0 -5
  335. package/rules/require-deprecation-reason.d.ts +0 -3
  336. package/rules/require-description.d.ts +0 -11
  337. package/rules/require-field-of-type-query-in-mutation-result.d.ts +0 -3
  338. package/rules/require-id-when-available.d.ts +0 -6
  339. package/rules/selection-set-depth.d.ts +0 -7
  340. package/rules/strict-id-in-types.d.ts +0 -11
  341. package/rules/unique-fragment-name.d.ts +0 -6
  342. package/rules/unique-operation-name.d.ts +0 -3
  343. package/schema.d.ts +0 -3
  344. package/testkit.d.ts +0 -27
  345. package/types.d.ts +0 -79
  346. package/utils.d.ts +0 -39
@@ -0,0 +1,99 @@
1
+ "use strict";
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: !0 });
9
+ }, __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from == "object" || typeof from == "function")
11
+ for (let key of __getOwnPropNames(from))
12
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ return to;
14
+ };
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
16
+ var require_nullable_result_in_root_exports = {};
17
+ __export(require_nullable_result_in_root_exports, {
18
+ rule: () => rule
19
+ });
20
+ module.exports = __toCommonJS(require_nullable_result_in_root_exports);
21
+ var import_graphql = require("graphql"), import_utils = require("../utils.js");
22
+ const RULE_ID = "require-nullable-result-in-root", rule = {
23
+ meta: {
24
+ type: "suggestion",
25
+ hasSuggestions: !0,
26
+ docs: {
27
+ category: "Schema",
28
+ description: "Require nullable fields in root types.",
29
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
30
+ requiresSchema: !0,
31
+ examples: [
32
+ {
33
+ title: "Incorrect",
34
+ code: (
35
+ /* GraphQL */
36
+ `
37
+ type Query {
38
+ user: User!
39
+ }
40
+ `
41
+ )
42
+ },
43
+ {
44
+ title: "Correct",
45
+ code: (
46
+ /* GraphQL */
47
+ `
48
+ type Query {
49
+ foo: User
50
+ baz: [User]!
51
+ bar: [User!]!
52
+ }
53
+ `
54
+ )
55
+ }
56
+ ]
57
+ },
58
+ messages: {
59
+ [RULE_ID]: "Unexpected non-null result {{ resultType }} in {{ rootType }}"
60
+ },
61
+ schema: []
62
+ },
63
+ create(context) {
64
+ const schema = (0, import_utils.requireGraphQLSchemaFromContext)(RULE_ID, context), rootTypeNames = new Set(
65
+ [schema.getQueryType(), schema.getMutationType()].filter(import_utils.truthy).map((type) => type.name)
66
+ ), sourceCode = context.getSourceCode();
67
+ return {
68
+ "ObjectTypeDefinition,ObjectTypeExtension"(node) {
69
+ if (rootTypeNames.has(node.name.value))
70
+ for (const field of node.fields || []) {
71
+ if (field.gqlType.type !== import_graphql.Kind.NON_NULL_TYPE || field.gqlType.gqlType.type !== import_graphql.Kind.NAMED_TYPE)
72
+ continue;
73
+ const name = field.gqlType.gqlType.name.value, type = schema.getType(name), resultType = type?.astNode ? (0, import_utils.getNodeName)(type.astNode) : type?.name;
74
+ context.report({
75
+ node: field.gqlType,
76
+ messageId: RULE_ID,
77
+ data: {
78
+ resultType: resultType || "",
79
+ rootType: (0, import_utils.getNodeName)(node)
80
+ },
81
+ suggest: [
82
+ {
83
+ desc: `Make ${resultType} nullable`,
84
+ fix(fixer) {
85
+ const text = sourceCode.getText(field.gqlType);
86
+ return fixer.replaceText(field.gqlType, text.replace("!", ""));
87
+ }
88
+ }
89
+ ]
90
+ });
91
+ }
92
+ }
93
+ };
94
+ }
95
+ };
96
+ // Annotate the CommonJS export names for ESM import in node:
97
+ 0 && (module.exports = {
98
+ rule
99
+ });
@@ -0,0 +1,45 @@
1
+ import { FromSchema } from 'json-schema-to-ts';
2
+ import { GraphQLESLintRule } from '../types.js';
3
+ import 'eslint';
4
+ import 'estree';
5
+ import 'graphql';
6
+ import '../siblings.js';
7
+ import '@graphql-tools/utils';
8
+ import '../estree-converter/types.js';
9
+ import 'graphql-config';
10
+
11
+ declare const schema: {
12
+ readonly definitions: {
13
+ readonly asString: {
14
+ readonly type: "string";
15
+ };
16
+ readonly asArray: {
17
+ readonly type: "array";
18
+ readonly uniqueItems: true;
19
+ readonly minItems: 1;
20
+ readonly items: {
21
+ readonly type: "string";
22
+ };
23
+ };
24
+ };
25
+ readonly type: "array";
26
+ readonly maxItems: 1;
27
+ readonly items: {
28
+ readonly type: "object";
29
+ readonly additionalProperties: false;
30
+ readonly properties: {
31
+ readonly fieldName: {
32
+ readonly oneOf: readonly [{
33
+ readonly $ref: "#/definitions/asString";
34
+ }, {
35
+ readonly $ref: "#/definitions/asArray";
36
+ }];
37
+ readonly default: "id";
38
+ };
39
+ };
40
+ };
41
+ };
42
+ type RuleOptions = FromSchema<typeof schema>;
43
+ declare const rule: GraphQLESLintRule<RuleOptions, true>;
44
+
45
+ export { RuleOptions, rule };
@@ -0,0 +1,198 @@
1
+ "use strict";
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: !0 });
9
+ }, __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from == "object" || typeof from == "function")
11
+ for (let key of __getOwnPropNames(from))
12
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ return to;
14
+ };
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
16
+ var require_selections_exports = {};
17
+ __export(require_selections_exports, {
18
+ rule: () => rule
19
+ });
20
+ module.exports = __toCommonJS(require_selections_exports);
21
+ var import_utils = require("@graphql-tools/utils"), import_graphql = require("graphql"), import_estree_converter = require("../estree-converter/index.js"), import_utils2 = require("../utils.js");
22
+ const RULE_ID = "require-selections", DEFAULT_ID_FIELD_NAME = "id", schema = {
23
+ definitions: {
24
+ asString: {
25
+ type: "string"
26
+ },
27
+ asArray: import_utils2.ARRAY_DEFAULT_OPTIONS
28
+ },
29
+ type: "array",
30
+ maxItems: 1,
31
+ items: {
32
+ type: "object",
33
+ additionalProperties: !1,
34
+ properties: {
35
+ fieldName: {
36
+ oneOf: [{ $ref: "#/definitions/asString" }, { $ref: "#/definitions/asArray" }],
37
+ default: DEFAULT_ID_FIELD_NAME
38
+ }
39
+ }
40
+ }
41
+ }, rule = {
42
+ meta: {
43
+ type: "suggestion",
44
+ hasSuggestions: !0,
45
+ docs: {
46
+ category: "Operations",
47
+ description: "Enforce selecting specific fields when they are available on the GraphQL type.",
48
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
49
+ requiresSchema: !0,
50
+ requiresSiblings: !0,
51
+ examples: [
52
+ {
53
+ title: "Incorrect",
54
+ code: (
55
+ /* GraphQL */
56
+ `
57
+ # In your schema
58
+ type User {
59
+ id: ID!
60
+ name: String!
61
+ }
62
+
63
+ # Query
64
+ query {
65
+ user {
66
+ name
67
+ }
68
+ }
69
+ `
70
+ )
71
+ },
72
+ {
73
+ title: "Correct",
74
+ code: (
75
+ /* GraphQL */
76
+ `
77
+ # In your schema
78
+ type User {
79
+ id: ID!
80
+ name: String!
81
+ }
82
+
83
+ # Query
84
+ query {
85
+ user {
86
+ id
87
+ name
88
+ }
89
+ }
90
+
91
+ # Selecting \`id\` with an alias is also valid
92
+ query {
93
+ user {
94
+ id: name
95
+ }
96
+ }
97
+ `
98
+ )
99
+ }
100
+ ],
101
+ recommended: !0
102
+ },
103
+ messages: {
104
+ [RULE_ID]: `Field{{ pluralSuffix }} {{ fieldName }} must be selected when it's available on a type.
105
+ Include it in your selection set{{ addition }}.`
106
+ },
107
+ schema
108
+ },
109
+ create(context) {
110
+ const schema2 = (0, import_utils2.requireGraphQLSchemaFromContext)(RULE_ID, context), siblings = (0, import_utils2.requireSiblingsOperations)(RULE_ID, context), { fieldName = DEFAULT_ID_FIELD_NAME } = context.options[0] || {}, idNames = (0, import_utils.asArray)(fieldName), selector = "OperationDefinition SelectionSet[parent.kind!=/(^OperationDefinition|InlineFragment)$/]", typeInfo = new import_graphql.TypeInfo(schema2);
111
+ function checkFragments(node) {
112
+ for (const selection of node.selections) {
113
+ if (selection.kind !== import_graphql.Kind.FRAGMENT_SPREAD)
114
+ continue;
115
+ const [foundSpread] = siblings.getFragment(selection.name.value);
116
+ if (!foundSpread)
117
+ continue;
118
+ const checkedFragmentSpreads = /* @__PURE__ */ new Set(), visitor = (0, import_graphql.visitWithTypeInfo)(typeInfo, {
119
+ SelectionSet(node2, key, _parent) {
120
+ const parent = _parent;
121
+ parent.kind === import_graphql.Kind.FRAGMENT_DEFINITION ? checkedFragmentSpreads.add(parent.name.value) : parent.kind !== import_graphql.Kind.INLINE_FRAGMENT && checkSelections(
122
+ node2,
123
+ typeInfo.getType(),
124
+ selection.loc.start,
125
+ parent,
126
+ checkedFragmentSpreads
127
+ );
128
+ }
129
+ });
130
+ (0, import_graphql.visit)(foundSpread.document, visitor);
131
+ }
132
+ }
133
+ function checkSelections(node, type, loc, parent, checkedFragmentSpreads = /* @__PURE__ */ new Set()) {
134
+ const rawType = (0, import_estree_converter.getBaseType)(type);
135
+ if (rawType instanceof import_graphql.GraphQLObjectType || rawType instanceof import_graphql.GraphQLInterfaceType)
136
+ checkFields(rawType);
137
+ else if (rawType instanceof import_graphql.GraphQLUnionType) {
138
+ for (const selection of node.selections)
139
+ if (selection.kind === import_graphql.Kind.INLINE_FRAGMENT) {
140
+ const t = rawType.getTypes().find((t2) => t2.name === selection.typeCondition.name.value);
141
+ t && checkFields(t);
142
+ }
143
+ }
144
+ function checkFields(rawType2) {
145
+ const fields = rawType2.getFields();
146
+ if (!idNames.some((name) => fields[name]))
147
+ return;
148
+ function hasIdField({ selections }) {
149
+ return selections.some((selection) => {
150
+ if (selection.kind === import_graphql.Kind.FIELD)
151
+ return selection.alias && idNames.includes(selection.alias.value) ? !0 : idNames.includes(selection.name.value);
152
+ if (selection.kind === import_graphql.Kind.INLINE_FRAGMENT)
153
+ return hasIdField(selection.selectionSet);
154
+ if (selection.kind === import_graphql.Kind.FRAGMENT_SPREAD) {
155
+ const [foundSpread] = siblings.getFragment(selection.name.value);
156
+ if (foundSpread) {
157
+ const fragmentSpread = foundSpread.document;
158
+ return checkedFragmentSpreads.add(fragmentSpread.name.value), hasIdField(fragmentSpread.selectionSet);
159
+ }
160
+ }
161
+ return !1;
162
+ });
163
+ }
164
+ const hasId = hasIdField(node);
165
+ if (checkFragments(node), hasId)
166
+ return;
167
+ const pluralSuffix = idNames.length > 1 ? "s" : "", fieldName2 = (0, import_utils2.englishJoinWords)(
168
+ idNames.map((name) => `\`${(parent.alias || parent.name).value}.${name}\``)
169
+ ), addition = checkedFragmentSpreads.size === 0 ? "" : ` or add to used fragment${checkedFragmentSpreads.size > 1 ? "s" : ""} ${(0, import_utils2.englishJoinWords)([...checkedFragmentSpreads].map((name) => `\`${name}\``))}`, problem = {
170
+ loc,
171
+ messageId: RULE_ID,
172
+ data: {
173
+ pluralSuffix,
174
+ fieldName: fieldName2,
175
+ addition
176
+ }
177
+ };
178
+ "type" in node && (problem.suggest = idNames.map((idName) => ({
179
+ desc: `Add \`${idName}\` selection`,
180
+ fix: (fixer) => {
181
+ let insertNode = node.selections[0];
182
+ return insertNode = insertNode.kind === import_graphql.Kind.INLINE_FRAGMENT ? insertNode.selectionSet.selections[0] : insertNode, fixer.insertTextBefore(insertNode, `${idName} `);
183
+ }
184
+ }))), context.report(problem);
185
+ }
186
+ }
187
+ return {
188
+ [selector](node) {
189
+ const typeInfo2 = node.typeInfo();
190
+ typeInfo2.gqlType && checkSelections(node, typeInfo2.gqlType, node.loc.start, node.parent);
191
+ }
192
+ };
193
+ }
194
+ };
195
+ // Annotate the CommonJS export names for ESM import in node:
196
+ 0 && (module.exports = {
197
+ rule
198
+ });
@@ -0,0 +1,13 @@
1
+ import { GraphQLESLintRule } from '../types.js';
2
+ import 'eslint';
3
+ import 'estree';
4
+ import 'graphql';
5
+ import 'json-schema-to-ts';
6
+ import '../siblings.js';
7
+ import '@graphql-tools/utils';
8
+ import '../estree-converter/types.js';
9
+ import 'graphql-config';
10
+
11
+ declare const rule: GraphQLESLintRule;
12
+
13
+ export { rule };
@@ -0,0 +1,83 @@
1
+ "use strict";
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: !0 });
9
+ }, __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from == "object" || typeof from == "function")
11
+ for (let key of __getOwnPropNames(from))
12
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ return to;
14
+ };
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
16
+ var require_type_pattern_with_oneof_exports = {};
17
+ __export(require_type_pattern_with_oneof_exports, {
18
+ rule: () => rule
19
+ });
20
+ module.exports = __toCommonJS(require_type_pattern_with_oneof_exports);
21
+ var import_utils = require("../utils.js");
22
+ const RULE_ID = "require-type-pattern-with-oneof", rule = {
23
+ meta: {
24
+ type: "suggestion",
25
+ docs: {
26
+ category: "Schema",
27
+ description: "Enforce types with `@oneOf` directive have `error` and `ok` fields.",
28
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
29
+ examples: [
30
+ {
31
+ title: "Correct",
32
+ code: (
33
+ /* GraphQL */
34
+ `
35
+ type Mutation {
36
+ doSomething: DoSomethingMutationResult!
37
+ }
38
+
39
+ interface Error {
40
+ message: String!
41
+ }
42
+
43
+ type DoSomethingMutationResult @oneOf {
44
+ ok: DoSomethingSuccess
45
+ error: Error
46
+ }
47
+
48
+ type DoSomethingSuccess {
49
+ # ...
50
+ }
51
+ `
52
+ )
53
+ }
54
+ ]
55
+ },
56
+ messages: {
57
+ [RULE_ID]: '{{ nodeName }} is defined as output with "@oneOf" and must be defined with "{{ fieldName }}" field'
58
+ },
59
+ schema: []
60
+ },
61
+ create(context) {
62
+ return {
63
+ "Directive[name.value=oneOf][parent.kind=ObjectTypeDefinition]"({
64
+ parent
65
+ }) {
66
+ const requiredFields = ["error", "ok"];
67
+ for (const fieldName of requiredFields)
68
+ parent.fields?.some((field) => field.name.value === fieldName) || context.report({
69
+ node: parent.name,
70
+ messageId: RULE_ID,
71
+ data: {
72
+ nodeName: (0, import_utils.displayNodeName)(parent),
73
+ fieldName
74
+ }
75
+ });
76
+ }
77
+ };
78
+ }
79
+ };
80
+ // Annotate the CommonJS export names for ESM import in node:
81
+ 0 && (module.exports = {
82
+ rule
83
+ });
@@ -0,0 +1,37 @@
1
+ import { FromSchema } from 'json-schema-to-ts';
2
+ import { GraphQLESLintRule } from '../types.js';
3
+ import 'eslint';
4
+ import 'estree';
5
+ import 'graphql';
6
+ import '../siblings.js';
7
+ import '@graphql-tools/utils';
8
+ import '../estree-converter/types.js';
9
+ import 'graphql-config';
10
+
11
+ declare const schema: {
12
+ readonly type: "array";
13
+ readonly minItems: 1;
14
+ readonly maxItems: 1;
15
+ readonly items: {
16
+ readonly type: "object";
17
+ readonly additionalProperties: false;
18
+ readonly required: readonly ["maxDepth"];
19
+ readonly properties: {
20
+ readonly maxDepth: {
21
+ readonly type: "number";
22
+ };
23
+ readonly ignore: {
24
+ readonly type: "array";
25
+ readonly uniqueItems: true;
26
+ readonly minItems: 1;
27
+ readonly items: {
28
+ readonly type: "string";
29
+ };
30
+ };
31
+ };
32
+ };
33
+ };
34
+ type RuleOptions = FromSchema<typeof schema>;
35
+ declare const rule: GraphQLESLintRule<RuleOptions>;
36
+
37
+ export { RuleOptions, rule };
@@ -0,0 +1,159 @@
1
+ "use strict";
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, __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: !0 });
10
+ }, __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from == "object" || typeof from == "function")
12
+ for (let key of __getOwnPropNames(from))
13
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
22
+ mod
23
+ )), __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
24
+ var selection_set_depth_exports = {};
25
+ __export(selection_set_depth_exports, {
26
+ rule: () => rule
27
+ });
28
+ module.exports = __toCommonJS(selection_set_depth_exports);
29
+ var import_graphql = require("graphql"), import_graphql_depth_limit = __toESM(require("graphql-depth-limit")), import_utils = require("../utils.js");
30
+ const RULE_ID = "selection-set-depth", schema = {
31
+ type: "array",
32
+ minItems: 1,
33
+ maxItems: 1,
34
+ items: {
35
+ type: "object",
36
+ additionalProperties: !1,
37
+ required: ["maxDepth"],
38
+ properties: {
39
+ maxDepth: {
40
+ type: "number"
41
+ },
42
+ ignore: import_utils.ARRAY_DEFAULT_OPTIONS
43
+ }
44
+ }
45
+ }, rule = {
46
+ meta: {
47
+ type: "suggestion",
48
+ hasSuggestions: !0,
49
+ docs: {
50
+ category: "Operations",
51
+ description: "Limit the complexity of the GraphQL operations solely by their depth. Based on [graphql-depth-limit](https://npmjs.com/package/graphql-depth-limit).",
52
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
53
+ requiresSiblings: !0,
54
+ examples: [
55
+ {
56
+ title: "Incorrect",
57
+ usage: [{ maxDepth: 1 }],
58
+ code: `
59
+ query deep2 {
60
+ viewer { # Level 0
61
+ albums { # Level 1
62
+ title # Level 2
63
+ }
64
+ }
65
+ }
66
+ `
67
+ },
68
+ {
69
+ title: "Correct",
70
+ usage: [{ maxDepth: 4 }],
71
+ code: `
72
+ query deep2 {
73
+ viewer { # Level 0
74
+ albums { # Level 1
75
+ title # Level 2
76
+ }
77
+ }
78
+ }
79
+ `
80
+ },
81
+ {
82
+ title: "Correct (ignored field)",
83
+ usage: [{ maxDepth: 1, ignore: ["albums"] }],
84
+ code: `
85
+ query deep2 {
86
+ viewer { # Level 0
87
+ albums { # Level 1
88
+ title # Level 2
89
+ }
90
+ }
91
+ }
92
+ `
93
+ }
94
+ ],
95
+ recommended: !0,
96
+ configOptions: [{ maxDepth: 7 }]
97
+ },
98
+ schema
99
+ },
100
+ create(context) {
101
+ let siblings = null;
102
+ try {
103
+ siblings = (0, import_utils.requireSiblingsOperations)(RULE_ID, context);
104
+ } catch {
105
+ import_utils.logger.warn(
106
+ `Rule "${RULE_ID}" works best with siblings operations loaded. For more info: https://bit.ly/graphql-eslint-operations`
107
+ );
108
+ }
109
+ const { maxDepth, ignore = [] } = context.options[0], checkFn = (0, import_graphql_depth_limit.default)(maxDepth, { ignore });
110
+ return {
111
+ "OperationDefinition, FragmentDefinition"(node) {
112
+ try {
113
+ const rawNode = node.rawNode(), fragmentsInUse = siblings ? siblings.getFragmentsInUse(rawNode) : [], document = {
114
+ kind: import_graphql.Kind.DOCUMENT,
115
+ definitions: [rawNode, ...fragmentsInUse]
116
+ };
117
+ checkFn({
118
+ getDocument: () => document,
119
+ reportError(error) {
120
+ const { line, column } = error.locations[0], token = context.getAncestors()[0].tokens.find(
121
+ (token2) => token2.loc.start.line === line && token2.loc.start.column === column - 1
122
+ );
123
+ context.report({
124
+ loc: {
125
+ line,
126
+ column: column - 1
127
+ },
128
+ message: error.message,
129
+ // Don't provide suggestions for fragment that can be in a separate file
130
+ ...token && {
131
+ suggest: [
132
+ {
133
+ desc: "Remove selections",
134
+ fix(fixer) {
135
+ const foundNode = context.getSourceCode().getNodeByRangeIndex(token.range[0]), parentNode = foundNode.parent.parent;
136
+ return fixer.remove(
137
+ foundNode.kind === "Name" ? parentNode.parent : parentNode
138
+ );
139
+ }
140
+ }
141
+ ]
142
+ }
143
+ });
144
+ }
145
+ });
146
+ } catch (e) {
147
+ import_utils.logger.warn(
148
+ `Rule "${RULE_ID}" check failed due to a missing siblings operations. For more info: https://bit.ly/graphql-eslint-operations`,
149
+ e
150
+ );
151
+ }
152
+ }
153
+ };
154
+ }
155
+ };
156
+ // Annotate the CommonJS export names for ESM import in node:
157
+ 0 && (module.exports = {
158
+ rule
159
+ });