@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,81 @@
1
+ import "./chunk-U3TKCM4X.js";
2
+ import { relative } from "node:path";
3
+ import {
4
+ gqlPluckFromCodeStringSync
5
+ } from "@graphql-tools/graphql-tag-pluck";
6
+ import { asArray } from "@graphql-tools/utils";
7
+ import { loadOnDiskGraphQLConfig } from "./graphql-config.js";
8
+ import { CWD, REPORT_ON_FIRST_CHARACTER, truthy } from "./utils.js";
9
+ const blocksMap = /* @__PURE__ */ new Map();
10
+ let onDiskConfig, onDiskConfigLoaded = !1;
11
+ const RELEVANT_KEYWORDS = ["gql", "graphql", "GraphQL"], processor = {
12
+ supportsAutofix: !0,
13
+ preprocess(code, filePath) {
14
+ onDiskConfigLoaded || (onDiskConfig = loadOnDiskGraphQLConfig(filePath), onDiskConfigLoaded = !0);
15
+ let keywords = RELEVANT_KEYWORDS;
16
+ const pluckConfig = onDiskConfig?.getProjectForFile(filePath).extensions.pluckConfig;
17
+ if (pluckConfig) {
18
+ const {
19
+ modules = [],
20
+ globalGqlIdentifierName = ["gql", "graphql"],
21
+ gqlMagicComment = "GraphQL"
22
+ } = pluckConfig;
23
+ keywords = [
24
+ ...new Set(
25
+ [
26
+ ...modules.map(({ identifier }) => identifier),
27
+ ...asArray(globalGqlIdentifierName),
28
+ gqlMagicComment
29
+ ].filter(truthy)
30
+ )
31
+ ];
32
+ }
33
+ if (keywords.every((keyword) => !code.includes(keyword)))
34
+ return [code];
35
+ try {
36
+ const blocks = gqlPluckFromCodeStringSync(filePath, code, {
37
+ skipIndent: !0,
38
+ ...pluckConfig
39
+ }).map((item) => ({
40
+ filename: "document.graphql",
41
+ text: item.body,
42
+ lineOffset: item.locationOffset.line - 1,
43
+ // @ts-expect-error -- `index` field exist but show ts error
44
+ offset: item.locationOffset.index + 1
45
+ }));
46
+ return blocksMap.set(filePath, blocks), [
47
+ ...blocks,
48
+ code
49
+ /* source code must be provided and be last */
50
+ ];
51
+ } catch (error) {
52
+ return error instanceof Error && (error.message = `[graphql-eslint] Error while preprocessing "${relative(
53
+ CWD,
54
+ filePath
55
+ )}" file
56
+
57
+ ${error.message}`), console.error(error), [code];
58
+ }
59
+ },
60
+ postprocess(messages, filePath) {
61
+ const blocks = blocksMap.get(filePath) || [];
62
+ for (let i = 0; i < blocks.length; i += 1) {
63
+ const { lineOffset, offset } = blocks[i];
64
+ for (const message of messages[i] || []) {
65
+ if (/\.(vue|svelte)$/.test(filePath)) {
66
+ delete message.endLine, delete message.endColumn, delete message.fix, delete message.suggestions, Object.assign(message, REPORT_ON_FIRST_CHARACTER);
67
+ continue;
68
+ }
69
+ message.line += lineOffset, typeof message.endLine == "number" && (message.endLine += lineOffset), message.fix && (message.fix.range[0] += offset, message.fix.range[1] += offset);
70
+ for (const suggestion of message.suggestions || []) {
71
+ const [start, end] = suggestion.fix.range;
72
+ suggestion.fix.range = [start + offset, end + offset];
73
+ }
74
+ }
75
+ }
76
+ return messages.flat().sort((a, b) => a.line - b.line || a.column - b.column);
77
+ }
78
+ };
79
+ export {
80
+ processor
81
+ };
@@ -0,0 +1,74 @@
1
+ import { FromSchema } from 'json-schema-to-ts';
2
+ import { GraphQLESLintRule } from '../types.mjs';
3
+ import 'eslint';
4
+ import 'estree';
5
+ import 'graphql';
6
+ import '../siblings.mjs';
7
+ import '@graphql-tools/utils';
8
+ import '../estree-converter/types.mjs';
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 minProperties: 1;
19
+ readonly properties: {
20
+ readonly fields: {
21
+ readonly items: {
22
+ readonly enum: ("ObjectTypeDefinition" | "InterfaceTypeDefinition" | "InputObjectTypeDefinition")[];
23
+ };
24
+ readonly description: "Fields of `type`, `interface`, and `input`.";
25
+ readonly type: "array";
26
+ readonly uniqueItems: true;
27
+ readonly minItems: 1;
28
+ };
29
+ readonly values: {
30
+ readonly type: "boolean";
31
+ readonly description: "Values of `enum`.";
32
+ };
33
+ readonly selections: {
34
+ readonly items: {
35
+ readonly enum: ("OperationDefinition" | "FragmentDefinition")[];
36
+ };
37
+ readonly description: "Selections of `fragment` and operations `query`, `mutation` and `subscription`.";
38
+ readonly type: "array";
39
+ readonly uniqueItems: true;
40
+ readonly minItems: 1;
41
+ };
42
+ readonly variables: {
43
+ readonly type: "boolean";
44
+ readonly description: "Variables of operations `query`, `mutation` and `subscription`.";
45
+ };
46
+ readonly arguments: {
47
+ readonly items: {
48
+ readonly enum: ("Field" | "Directive" | "FieldDefinition" | "DirectiveDefinition")[];
49
+ };
50
+ readonly description: "Arguments of fields and directives.";
51
+ readonly type: "array";
52
+ readonly uniqueItems: true;
53
+ readonly minItems: 1;
54
+ };
55
+ readonly definitions: {
56
+ readonly type: "boolean";
57
+ readonly description: "Definitions – `type`, `interface`, `enum`, `scalar`, `input`, `union` and `directive`.";
58
+ };
59
+ readonly groups: {
60
+ readonly minItems: 2;
61
+ readonly description: "Custom order group. Example: `['id', '*', 'createdAt', 'updatedAt']` where `*` says for everything else.";
62
+ readonly type: "array";
63
+ readonly uniqueItems: true;
64
+ readonly items: {
65
+ readonly type: "string";
66
+ };
67
+ };
68
+ };
69
+ };
70
+ };
71
+ type RuleOptions = FromSchema<typeof schema>;
72
+ declare const rule: GraphQLESLintRule<RuleOptions>;
73
+
74
+ export { RuleOptions, rule };
@@ -0,0 +1,299 @@
1
+ import "../chunk-U3TKCM4X.js";
2
+ import {
3
+ Kind
4
+ } from "graphql";
5
+ import lowerCase from "lodash.lowercase";
6
+ import { ARRAY_DEFAULT_OPTIONS, displayNodeName, truthy } from "../utils.js";
7
+ const RULE_ID = "alphabetize", fieldsEnum = [
8
+ Kind.OBJECT_TYPE_DEFINITION,
9
+ Kind.INTERFACE_TYPE_DEFINITION,
10
+ Kind.INPUT_OBJECT_TYPE_DEFINITION
11
+ ], selectionsEnum = [
12
+ Kind.OPERATION_DEFINITION,
13
+ Kind.FRAGMENT_DEFINITION
14
+ ], argumentsEnum = [
15
+ Kind.FIELD_DEFINITION,
16
+ Kind.FIELD,
17
+ Kind.DIRECTIVE_DEFINITION,
18
+ Kind.DIRECTIVE
19
+ ], schema = {
20
+ type: "array",
21
+ minItems: 1,
22
+ maxItems: 1,
23
+ items: {
24
+ type: "object",
25
+ additionalProperties: !1,
26
+ minProperties: 1,
27
+ properties: {
28
+ fields: {
29
+ ...ARRAY_DEFAULT_OPTIONS,
30
+ items: {
31
+ enum: fieldsEnum
32
+ },
33
+ description: "Fields of `type`, `interface`, and `input`."
34
+ },
35
+ values: {
36
+ type: "boolean",
37
+ description: "Values of `enum`."
38
+ },
39
+ selections: {
40
+ ...ARRAY_DEFAULT_OPTIONS,
41
+ items: {
42
+ enum: selectionsEnum
43
+ },
44
+ description: "Selections of `fragment` and operations `query`, `mutation` and `subscription`."
45
+ },
46
+ variables: {
47
+ type: "boolean",
48
+ description: "Variables of operations `query`, `mutation` and `subscription`."
49
+ },
50
+ arguments: {
51
+ ...ARRAY_DEFAULT_OPTIONS,
52
+ items: {
53
+ enum: argumentsEnum
54
+ },
55
+ description: "Arguments of fields and directives."
56
+ },
57
+ definitions: {
58
+ type: "boolean",
59
+ description: "Definitions \u2013 `type`, `interface`, `enum`, `scalar`, `input`, `union` and `directive`."
60
+ },
61
+ groups: {
62
+ ...ARRAY_DEFAULT_OPTIONS,
63
+ minItems: 2,
64
+ description: "Custom order group. Example: `['id', '*', 'createdAt', 'updatedAt']` where `*` says for everything else."
65
+ }
66
+ }
67
+ }
68
+ }, rule = {
69
+ meta: {
70
+ type: "suggestion",
71
+ fixable: "code",
72
+ docs: {
73
+ category: ["Schema", "Operations"],
74
+ description: "Enforce arrange in alphabetical order for type fields, enum values, input object fields, operation selections and more.",
75
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
76
+ examples: [
77
+ {
78
+ title: "Incorrect",
79
+ usage: [{ fields: [Kind.OBJECT_TYPE_DEFINITION] }],
80
+ code: (
81
+ /* GraphQL */
82
+ `
83
+ type User {
84
+ password: String
85
+ firstName: String! # should be before "password"
86
+ age: Int # should be before "firstName"
87
+ lastName: String!
88
+ }
89
+ `
90
+ )
91
+ },
92
+ {
93
+ title: "Correct",
94
+ usage: [{ fields: [Kind.OBJECT_TYPE_DEFINITION] }],
95
+ code: (
96
+ /* GraphQL */
97
+ `
98
+ type User {
99
+ age: Int
100
+ firstName: String!
101
+ lastName: String!
102
+ password: String
103
+ }
104
+ `
105
+ )
106
+ },
107
+ {
108
+ title: "Incorrect",
109
+ usage: [{ values: !0 }],
110
+ code: (
111
+ /* GraphQL */
112
+ `
113
+ enum Role {
114
+ SUPER_ADMIN
115
+ ADMIN # should be before "SUPER_ADMIN"
116
+ USER
117
+ GOD # should be before "USER"
118
+ }
119
+ `
120
+ )
121
+ },
122
+ {
123
+ title: "Correct",
124
+ usage: [{ values: !0 }],
125
+ code: (
126
+ /* GraphQL */
127
+ `
128
+ enum Role {
129
+ ADMIN
130
+ GOD
131
+ SUPER_ADMIN
132
+ USER
133
+ }
134
+ `
135
+ )
136
+ },
137
+ {
138
+ title: "Incorrect",
139
+ usage: [{ selections: [Kind.OPERATION_DEFINITION] }],
140
+ code: (
141
+ /* GraphQL */
142
+ `
143
+ query {
144
+ me {
145
+ firstName
146
+ lastName
147
+ email # should be before "lastName"
148
+ }
149
+ }
150
+ `
151
+ )
152
+ },
153
+ {
154
+ title: "Correct",
155
+ usage: [{ selections: [Kind.OPERATION_DEFINITION] }],
156
+ code: (
157
+ /* GraphQL */
158
+ `
159
+ query {
160
+ me {
161
+ email
162
+ firstName
163
+ lastName
164
+ }
165
+ }
166
+ `
167
+ )
168
+ }
169
+ ],
170
+ configOptions: {
171
+ schema: [
172
+ {
173
+ definitions: !0,
174
+ fields: fieldsEnum,
175
+ values: !0,
176
+ arguments: argumentsEnum,
177
+ groups: ["id", "*", "createdAt", "updatedAt"]
178
+ }
179
+ ],
180
+ operations: [
181
+ {
182
+ definitions: !0,
183
+ selections: selectionsEnum,
184
+ variables: !0,
185
+ arguments: [Kind.FIELD, Kind.DIRECTIVE],
186
+ groups: ["id", "*", "createdAt", "updatedAt"]
187
+ }
188
+ ]
189
+ }
190
+ },
191
+ messages: {
192
+ [RULE_ID]: "{{ currNode }} should be before {{ prevNode }}"
193
+ },
194
+ schema
195
+ },
196
+ create(context) {
197
+ const sourceCode = context.getSourceCode();
198
+ function isNodeAndCommentOnSameLine(node, comment) {
199
+ return node.loc.end.line === comment.loc.start.line;
200
+ }
201
+ function getBeforeComments(node) {
202
+ const commentsBefore = sourceCode.getCommentsBefore(node);
203
+ if (commentsBefore.length === 0)
204
+ return [];
205
+ const tokenBefore = sourceCode.getTokenBefore(node);
206
+ if (tokenBefore)
207
+ return commentsBefore.filter((comment) => !isNodeAndCommentOnSameLine(tokenBefore, comment));
208
+ const filteredComments = [], nodeLine = node.loc.start.line;
209
+ for (let i = commentsBefore.length - 1; i >= 0; i -= 1) {
210
+ const comment = commentsBefore[i];
211
+ if (nodeLine - comment.loc.start.line - filteredComments.length > 1)
212
+ break;
213
+ filteredComments.unshift(comment);
214
+ }
215
+ return filteredComments;
216
+ }
217
+ function getRangeWithComments(node) {
218
+ node.kind === Kind.VARIABLE && (node = node.parent);
219
+ const [firstBeforeComment] = getBeforeComments(node), [firstAfterComment] = sourceCode.getCommentsAfter(node), from = firstBeforeComment || node, to = firstAfterComment && isNodeAndCommentOnSameLine(node, firstAfterComment) ? firstAfterComment : node;
220
+ return [from.range[0], to.range[1]];
221
+ }
222
+ function checkNodes(nodes = []) {
223
+ for (let i = 1; i < nodes.length; i += 1) {
224
+ const currNode = nodes[i], currName = "alias" in currNode && currNode.alias?.value || "name" in currNode && currNode.name?.value;
225
+ if (!currName)
226
+ continue;
227
+ const prevNode = nodes[i - 1], prevName = "alias" in prevNode && prevNode.alias?.value || "name" in prevNode && prevNode.name?.value;
228
+ if (prevName) {
229
+ const compareResult = prevName.localeCompare(currName), { groups } = opts;
230
+ let shouldSortByGroup = !1;
231
+ if (groups?.length) {
232
+ if (!groups.includes("*"))
233
+ throw new Error("`groups` option should contain `*` string.");
234
+ let indexForPrev = groups.indexOf(prevName);
235
+ indexForPrev === -1 && (indexForPrev = groups.indexOf("*"));
236
+ let indexForCurr = groups.indexOf(currName);
237
+ if (indexForCurr === -1 && (indexForCurr = groups.indexOf("*")), shouldSortByGroup = indexForPrev - indexForCurr > 0, indexForPrev < indexForCurr)
238
+ continue;
239
+ }
240
+ if (!shouldSortByGroup && !(compareResult === 1) && (!(compareResult === 0) || !prevNode.kind.endsWith("Extension") || currNode.kind.endsWith("Extension")))
241
+ continue;
242
+ }
243
+ context.report({
244
+ // @ts-expect-error can't be undefined
245
+ node: "alias" in currNode && currNode.alias || currNode.name,
246
+ messageId: RULE_ID,
247
+ data: {
248
+ currNode: displayNodeName(currNode),
249
+ prevNode: prevName ? displayNodeName(prevNode) : lowerCase(prevNode.kind)
250
+ },
251
+ *fix(fixer) {
252
+ const prevRange = getRangeWithComments(prevNode), currRange = getRangeWithComments(currNode);
253
+ yield fixer.replaceTextRange(
254
+ prevRange,
255
+ sourceCode.getText({ range: currRange })
256
+ ), yield fixer.replaceTextRange(
257
+ currRange,
258
+ sourceCode.getText({ range: prevRange })
259
+ );
260
+ }
261
+ });
262
+ }
263
+ }
264
+ const opts = context.options[0], fields = new Set(opts.fields ?? []), listeners = {}, fieldsSelector = [
265
+ fields.has(Kind.OBJECT_TYPE_DEFINITION) && [
266
+ Kind.OBJECT_TYPE_DEFINITION,
267
+ Kind.OBJECT_TYPE_EXTENSION
268
+ ],
269
+ fields.has(Kind.INTERFACE_TYPE_DEFINITION) && [
270
+ Kind.INTERFACE_TYPE_DEFINITION,
271
+ Kind.INTERFACE_TYPE_EXTENSION
272
+ ],
273
+ fields.has(Kind.INPUT_OBJECT_TYPE_DEFINITION) && [
274
+ Kind.INPUT_OBJECT_TYPE_DEFINITION,
275
+ Kind.INPUT_OBJECT_TYPE_EXTENSION
276
+ ]
277
+ ].filter(truthy).flat().join(","), selectionsSelector = opts.selections?.join(","), argumentsSelector = opts.arguments?.join(",");
278
+ if (fieldsSelector && (listeners[fieldsSelector] = (node) => {
279
+ checkNodes(node.fields);
280
+ }), opts.values) {
281
+ const enumValuesSelector = [Kind.ENUM_TYPE_DEFINITION, Kind.ENUM_TYPE_EXTENSION].join(",");
282
+ listeners[enumValuesSelector] = (node) => {
283
+ checkNodes(node.values);
284
+ };
285
+ }
286
+ return selectionsSelector && (listeners[`:matches(${selectionsSelector}) SelectionSet`] = (node) => {
287
+ checkNodes(node.selections);
288
+ }), opts.variables && (listeners.OperationDefinition = (node) => {
289
+ checkNodes(node.variableDefinitions?.map((varDef) => varDef.variable));
290
+ }), argumentsSelector && (listeners[argumentsSelector] = (node) => {
291
+ checkNodes(node.arguments);
292
+ }), opts.definitions && (listeners.Document = (node) => {
293
+ checkNodes(node.definitions);
294
+ }), listeners;
295
+ }
296
+ };
297
+ export {
298
+ rule
299
+ };
@@ -0,0 +1,29 @@
1
+ import { FromSchema } from 'json-schema-to-ts';
2
+ import { GraphQLESLintRule } from '../types.mjs';
3
+ import 'eslint';
4
+ import 'estree';
5
+ import 'graphql';
6
+ import '../siblings.mjs';
7
+ import '@graphql-tools/utils';
8
+ import '../estree-converter/types.mjs';
9
+ import 'graphql-config';
10
+
11
+ declare const schema: {
12
+ readonly type: "array";
13
+ readonly maxItems: 1;
14
+ readonly items: {
15
+ readonly type: "object";
16
+ readonly additionalProperties: false;
17
+ readonly minProperties: 1;
18
+ readonly properties: {
19
+ readonly style: {
20
+ readonly enum: readonly ["block", "inline"];
21
+ readonly default: "block";
22
+ };
23
+ };
24
+ };
25
+ };
26
+ type RuleOptions = FromSchema<typeof schema>;
27
+ declare const rule: GraphQLESLintRule<RuleOptions>;
28
+
29
+ export { RuleOptions, rule };
@@ -0,0 +1,82 @@
1
+ import "../chunk-U3TKCM4X.js";
2
+ import { getNodeName } from "../utils.js";
3
+ const schema = {
4
+ type: "array",
5
+ maxItems: 1,
6
+ items: {
7
+ type: "object",
8
+ additionalProperties: !1,
9
+ minProperties: 1,
10
+ properties: {
11
+ style: {
12
+ enum: ["block", "inline"],
13
+ default: "block"
14
+ }
15
+ }
16
+ }
17
+ }, rule = {
18
+ meta: {
19
+ type: "suggestion",
20
+ hasSuggestions: !0,
21
+ docs: {
22
+ examples: [
23
+ {
24
+ title: "Incorrect",
25
+ usage: [{ style: "inline" }],
26
+ code: (
27
+ /* GraphQL */
28
+ `
29
+ """ Description """
30
+ type someTypeName {
31
+ # ...
32
+ }
33
+ `
34
+ )
35
+ },
36
+ {
37
+ title: "Correct",
38
+ usage: [{ style: "inline" }],
39
+ code: (
40
+ /* GraphQL */
41
+ `
42
+ " Description "
43
+ type someTypeName {
44
+ # ...
45
+ }
46
+ `
47
+ )
48
+ }
49
+ ],
50
+ description: "Require all comments to follow the same style (either block or inline).",
51
+ category: "Schema",
52
+ url: "https://the-guild.dev/graphql/eslint/rules/description-style",
53
+ recommended: !0
54
+ },
55
+ schema
56
+ },
57
+ create(context) {
58
+ const { style = "block" } = context.options[0] || {}, isBlock = style === "block";
59
+ return {
60
+ [`.description[type=StringValue][block!=${isBlock}]`](node) {
61
+ context.report({
62
+ loc: isBlock ? node.loc : node.loc.start,
63
+ message: `Unexpected ${isBlock ? "inline" : "block"} description for ${getNodeName(
64
+ node.parent
65
+ )}`,
66
+ suggest: [
67
+ {
68
+ desc: `Change to ${isBlock ? "block" : "inline"} style description`,
69
+ fix(fixer) {
70
+ const originalText = context.getSourceCode().getText(node), newText = isBlock ? originalText.replace(/(^")|("$)/g, '"""') : originalText.replace(/(^""")|("""$)/g, '"').replace(/\s+/g, " ");
71
+ return fixer.replaceText(node, newText);
72
+ }
73
+ }
74
+ ]
75
+ });
76
+ }
77
+ };
78
+ }
79
+ };
80
+ export {
81
+ rule
82
+ };
@@ -0,0 +1,13 @@
1
+ import { GraphQLESLintRule } from '../types.mjs';
2
+ import 'eslint';
3
+ import 'estree';
4
+ import 'graphql';
5
+ import 'json-schema-to-ts';
6
+ import '../siblings.mjs';
7
+ import '@graphql-tools/utils';
8
+ import '../estree-converter/types.mjs';
9
+ import 'graphql-config';
10
+
11
+ declare const GRAPHQL_JS_VALIDATIONS: Record<string, GraphQLESLintRule>;
12
+
13
+ export { GRAPHQL_JS_VALIDATIONS };