@graphql-eslint/eslint-plugin 4.0.0-alpha-20220821140530-e968cfc → 4.0.0-alpha-20230801163310-8bc4340

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 (347) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -253
  3. package/cjs/cache.d.ts +12 -0
  4. package/cjs/cache.js +62 -0
  5. package/cjs/configs/index.d.ts +148 -0
  6. package/cjs/configs/index.js +49 -0
  7. package/cjs/configs/operations-all.d.ts +22 -0
  8. package/cjs/configs/operations-all.js +27 -0
  9. package/cjs/configs/operations-recommended.d.ts +52 -0
  10. package/{configs/operations-recommended.json → cjs/configs/operations-recommended.js} +16 -14
  11. package/cjs/configs/relay.d.ts +12 -0
  12. package/{configs/relay.json → cjs/configs/relay.js} +6 -4
  13. package/cjs/configs/schema-all.d.ts +19 -0
  14. package/cjs/configs/schema-all.js +21 -0
  15. package/cjs/configs/schema-recommended.d.ts +49 -0
  16. package/{configs/schema-recommended.json → cjs/configs/schema-recommended.js} +19 -20
  17. package/cjs/documents.d.ts +6 -0
  18. package/cjs/documents.js +81 -0
  19. package/cjs/estree-converter/converter.d.ts +8 -0
  20. package/cjs/estree-converter/converter.js +83 -0
  21. package/cjs/estree-converter/index.d.ts +8 -0
  22. package/cjs/estree-converter/index.js +26 -0
  23. package/cjs/estree-converter/types.d.ts +42 -0
  24. package/cjs/estree-converter/types.js +16 -0
  25. package/cjs/estree-converter/utils.d.ts +18 -0
  26. package/cjs/estree-converter/utils.js +135 -0
  27. package/cjs/flat-configs.d.ts +260 -0
  28. package/cjs/flat-configs.js +60 -0
  29. package/cjs/graphql-config.d.ts +13 -0
  30. package/cjs/graphql-config.js +86 -0
  31. package/cjs/index.d.ts +22 -0
  32. package/cjs/index.js +49 -0
  33. package/cjs/parser.d.ts +12 -0
  34. package/cjs/parser.js +103 -0
  35. package/cjs/processor.d.ts +9 -0
  36. package/cjs/processor.js +127 -0
  37. package/cjs/rules/alphabetize.d.ts +84 -0
  38. package/cjs/rules/alphabetize.js +395 -0
  39. package/cjs/rules/description-style.d.ts +28 -0
  40. package/cjs/rules/description-style.js +109 -0
  41. package/cjs/rules/graphql-js-validation.d.ts +12 -0
  42. package/cjs/rules/graphql-js-validation.js +669 -0
  43. package/cjs/rules/index.d.ts +125 -0
  44. package/cjs/rules/index.js +99 -0
  45. package/cjs/rules/input-name.d.ts +43 -0
  46. package/cjs/rules/input-name.js +170 -0
  47. package/cjs/rules/lone-executable-definition.d.ts +34 -0
  48. package/cjs/rules/lone-executable-definition.js +119 -0
  49. package/cjs/rules/match-document-filename.d.ts +80 -0
  50. package/cjs/rules/match-document-filename.js +282 -0
  51. package/cjs/rules/naming-convention.d.ts +107 -0
  52. package/cjs/rules/naming-convention.js +434 -0
  53. package/cjs/rules/no-anonymous-operations.d.ts +12 -0
  54. package/cjs/rules/no-anonymous-operations.js +98 -0
  55. package/cjs/rules/no-case-insensitive-enum-values-duplicates.d.ts +12 -0
  56. package/cjs/rules/no-case-insensitive-enum-values-duplicates.js +96 -0
  57. package/cjs/rules/no-deprecated.d.ts +12 -0
  58. package/cjs/rules/no-deprecated.js +157 -0
  59. package/cjs/rules/no-duplicate-fields.d.ts +12 -0
  60. package/cjs/rules/no-duplicate-fields.js +146 -0
  61. package/cjs/rules/no-hashtag-description.d.ts +13 -0
  62. package/cjs/rules/no-hashtag-description.js +140 -0
  63. package/cjs/rules/no-one-place-fragments.d.ts +12 -0
  64. package/cjs/rules/no-one-place-fragments.js +113 -0
  65. package/cjs/rules/no-root-type.d.ts +33 -0
  66. package/cjs/rules/no-root-type.js +113 -0
  67. package/cjs/rules/no-scalar-result-type-on-mutation.d.ts +12 -0
  68. package/cjs/rules/no-scalar-result-type-on-mutation.js +100 -0
  69. package/cjs/rules/no-typename-prefix.d.ts +12 -0
  70. package/cjs/rules/no-typename-prefix.js +98 -0
  71. package/cjs/rules/no-unreachable-types.d.ts +12 -0
  72. package/cjs/rules/no-unreachable-types.js +199 -0
  73. package/cjs/rules/no-unused-fields.d.ts +12 -0
  74. package/cjs/rules/no-unused-fields.js +157 -0
  75. package/cjs/rules/relay-arguments.d.ts +29 -0
  76. package/cjs/rules/relay-arguments.js +149 -0
  77. package/cjs/rules/relay-connection-types.d.ts +13 -0
  78. package/cjs/rules/relay-connection-types.js +142 -0
  79. package/cjs/rules/relay-edge-types.d.ts +39 -0
  80. package/cjs/rules/relay-edge-types.js +212 -0
  81. package/cjs/rules/relay-page-info.d.ts +12 -0
  82. package/cjs/rules/relay-page-info.js +121 -0
  83. package/cjs/rules/require-deprecation-date.d.ts +26 -0
  84. package/cjs/rules/require-deprecation-date.js +164 -0
  85. package/cjs/rules/require-deprecation-reason.d.ts +12 -0
  86. package/cjs/rules/require-deprecation-reason.js +93 -0
  87. package/cjs/rules/require-description.d.ts +23 -0
  88. package/cjs/rules/require-description.js +205 -0
  89. package/cjs/rules/require-field-of-type-query-in-mutation-result.d.ts +12 -0
  90. package/cjs/rules/require-field-of-type-query-in-mutation-result.js +102 -0
  91. package/cjs/rules/require-id-when-available.d.ts +44 -0
  92. package/cjs/rules/require-id-when-available.js +241 -0
  93. package/cjs/rules/require-import-fragment.d.ts +12 -0
  94. package/cjs/rules/require-import-fragment.js +166 -0
  95. package/cjs/rules/require-nullable-fields-with-oneof.d.ts +12 -0
  96. package/cjs/rules/require-nullable-fields-with-oneof.js +92 -0
  97. package/cjs/rules/require-nullable-result-in-root.d.ts +12 -0
  98. package/cjs/rules/require-nullable-result-in-root.js +109 -0
  99. package/cjs/rules/require-type-pattern-with-oneof.d.ts +12 -0
  100. package/cjs/rules/require-type-pattern-with-oneof.js +91 -0
  101. package/cjs/rules/selection-set-depth.d.ts +36 -0
  102. package/cjs/rules/selection-set-depth.js +175 -0
  103. package/cjs/rules/strict-id-in-types.d.ts +65 -0
  104. package/cjs/rules/strict-id-in-types.js +186 -0
  105. package/cjs/rules/unique-fragment-name.d.ts +13 -0
  106. package/cjs/rules/unique-fragment-name.js +118 -0
  107. package/cjs/rules/unique-operation-name.d.ts +12 -0
  108. package/cjs/rules/unique-operation-name.js +95 -0
  109. package/cjs/schema.d.ts +12 -0
  110. package/cjs/schema.js +65 -0
  111. package/cjs/siblings.d.ts +8 -0
  112. package/cjs/siblings.js +136 -0
  113. package/cjs/types-8d5f4ae0.d.ts +107 -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 +205 -0
  118. package/esm/cache.d.mts +12 -0
  119. package/esm/cache.js +29 -0
  120. package/esm/chunk-BMTV3EA2.js +8 -0
  121. package/esm/configs/index.d.mts +148 -0
  122. package/esm/configs/index.js +16 -0
  123. package/esm/configs/operations-all.d.mts +22 -0
  124. package/esm/configs/operations-all.js +34 -0
  125. package/esm/configs/operations-recommended.d.mts +52 -0
  126. package/esm/configs/operations-recommended.js +59 -0
  127. package/esm/configs/relay.d.mts +12 -0
  128. package/esm/configs/relay.js +18 -0
  129. package/esm/configs/schema-all.d.mts +19 -0
  130. package/esm/configs/schema-all.js +28 -0
  131. package/esm/configs/schema-recommended.d.mts +49 -0
  132. package/esm/configs/schema-recommended.js +55 -0
  133. package/esm/documents.d.mts +6 -0
  134. package/esm/documents.js +48 -0
  135. package/esm/estree-converter/converter.d.mts +8 -0
  136. package/esm/estree-converter/converter.js +65 -0
  137. package/esm/estree-converter/index.d.mts +8 -0
  138. package/esm/estree-converter/index.js +3 -0
  139. package/esm/estree-converter/types.d.mts +42 -0
  140. package/esm/estree-converter/types.js +0 -0
  141. package/esm/estree-converter/utils.d.mts +18 -0
  142. package/esm/estree-converter/utils.js +114 -0
  143. package/esm/flat-configs.d.mts +260 -0
  144. package/esm/flat-configs.js +37 -0
  145. package/esm/graphql-config.d.mts +13 -0
  146. package/esm/graphql-config.js +55 -0
  147. package/esm/index.d.mts +22 -0
  148. package/esm/index.js +18 -0
  149. package/esm/package.json +1 -0
  150. package/esm/parser.d.mts +12 -0
  151. package/esm/parser.js +70 -0
  152. package/esm/processor.d.mts +9 -0
  153. package/esm/processor.js +106 -0
  154. package/esm/rules/alphabetize.d.mts +84 -0
  155. package/esm/rules/alphabetize.js +364 -0
  156. package/esm/rules/description-style.d.mts +28 -0
  157. package/esm/rules/description-style.js +86 -0
  158. package/esm/rules/graphql-js-validation.d.mts +12 -0
  159. package/esm/rules/graphql-js-validation.js +658 -0
  160. package/esm/rules/index.d.mts +125 -0
  161. package/esm/rules/index.js +76 -0
  162. package/esm/rules/input-name.d.mts +43 -0
  163. package/esm/rules/input-name.js +149 -0
  164. package/esm/rules/lone-executable-definition.d.mts +34 -0
  165. package/esm/rules/lone-executable-definition.js +96 -0
  166. package/esm/rules/match-document-filename.d.mts +80 -0
  167. package/esm/rules/match-document-filename.js +263 -0
  168. package/esm/rules/naming-convention.d.mts +107 -0
  169. package/esm/rules/naming-convention.js +417 -0
  170. package/esm/rules/no-anonymous-operations.d.mts +12 -0
  171. package/esm/rules/no-anonymous-operations.js +75 -0
  172. package/esm/rules/no-case-insensitive-enum-values-duplicates.d.mts +12 -0
  173. package/esm/rules/no-case-insensitive-enum-values-duplicates.js +73 -0
  174. package/esm/rules/no-deprecated.d.mts +12 -0
  175. package/esm/rules/no-deprecated.js +134 -0
  176. package/esm/rules/no-duplicate-fields.d.mts +12 -0
  177. package/esm/rules/no-duplicate-fields.js +123 -0
  178. package/esm/rules/no-hashtag-description.d.mts +13 -0
  179. package/esm/rules/no-hashtag-description.js +116 -0
  180. package/esm/rules/no-one-place-fragments.d.mts +12 -0
  181. package/esm/rules/no-one-place-fragments.js +90 -0
  182. package/esm/rules/no-root-type.d.mts +33 -0
  183. package/esm/rules/no-root-type.js +90 -0
  184. package/esm/rules/no-scalar-result-type-on-mutation.d.mts +12 -0
  185. package/esm/rules/no-scalar-result-type-on-mutation.js +77 -0
  186. package/esm/rules/no-typename-prefix.d.mts +12 -0
  187. package/esm/rules/no-typename-prefix.js +75 -0
  188. package/esm/rules/no-unreachable-types.d.mts +12 -0
  189. package/esm/rules/no-unreachable-types.js +171 -0
  190. package/esm/rules/no-unused-fields.d.mts +12 -0
  191. package/esm/rules/no-unused-fields.js +134 -0
  192. package/esm/rules/relay-arguments.d.mts +29 -0
  193. package/esm/rules/relay-arguments.js +126 -0
  194. package/esm/rules/relay-connection-types.d.mts +13 -0
  195. package/esm/rules/relay-connection-types.js +118 -0
  196. package/esm/rules/relay-edge-types.d.mts +39 -0
  197. package/esm/rules/relay-edge-types.js +194 -0
  198. package/esm/rules/relay-page-info.d.mts +12 -0
  199. package/esm/rules/relay-page-info.js +98 -0
  200. package/esm/rules/require-deprecation-date.d.mts +26 -0
  201. package/esm/rules/require-deprecation-date.js +141 -0
  202. package/esm/rules/require-deprecation-reason.d.mts +12 -0
  203. package/esm/rules/require-deprecation-reason.js +70 -0
  204. package/esm/rules/require-description.d.mts +23 -0
  205. package/esm/rules/require-description.js +186 -0
  206. package/esm/rules/require-field-of-type-query-in-mutation-result.d.mts +12 -0
  207. package/esm/rules/require-field-of-type-query-in-mutation-result.js +79 -0
  208. package/esm/rules/require-id-when-available.d.mts +44 -0
  209. package/esm/rules/require-id-when-available.js +231 -0
  210. package/esm/rules/require-import-fragment.d.mts +12 -0
  211. package/esm/rules/require-import-fragment.js +133 -0
  212. package/esm/rules/require-nullable-fields-with-oneof.d.mts +12 -0
  213. package/esm/rules/require-nullable-fields-with-oneof.js +69 -0
  214. package/esm/rules/require-nullable-result-in-root.d.mts +12 -0
  215. package/esm/rules/require-nullable-result-in-root.js +86 -0
  216. package/esm/rules/require-type-pattern-with-oneof.d.mts +12 -0
  217. package/esm/rules/require-type-pattern-with-oneof.js +68 -0
  218. package/esm/rules/selection-set-depth.d.mts +36 -0
  219. package/esm/rules/selection-set-depth.js +142 -0
  220. package/esm/rules/strict-id-in-types.d.mts +65 -0
  221. package/esm/rules/strict-id-in-types.js +169 -0
  222. package/esm/rules/unique-fragment-name.d.mts +13 -0
  223. package/esm/rules/unique-fragment-name.js +94 -0
  224. package/esm/rules/unique-operation-name.d.mts +12 -0
  225. package/esm/rules/unique-operation-name.js +72 -0
  226. package/esm/schema.d.mts +12 -0
  227. package/esm/schema.js +32 -0
  228. package/esm/siblings.d.mts +8 -0
  229. package/esm/siblings.js +116 -0
  230. package/esm/types-ace77d86.d.ts +107 -0
  231. package/esm/types.d.mts +8 -0
  232. package/esm/types.js +0 -0
  233. package/esm/utils.d.mts +44 -0
  234. package/esm/utils.js +155 -0
  235. package/package.json +47 -34
  236. package/configs/base.json +0 -4
  237. package/configs/operations-all.json +0 -24
  238. package/configs/schema-all.json +0 -26
  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/sibling-operations.d.ts +0 -21
  345. package/testkit.d.ts +0 -27
  346. package/types.d.ts +0 -79
  347. package/utils.d.ts +0 -39
package/esm/parser.js ADDED
@@ -0,0 +1,70 @@
1
+ import "./chunk-BMTV3EA2.js";
2
+ import { parseGraphQLSDL } from "@graphql-tools/utils";
3
+ import debugFactory from "debug";
4
+ import { buildSchema, GraphQLError } from "graphql";
5
+ import { convertToESTree, extractComments, extractTokens } from "./estree-converter/index.js";
6
+ import { loadGraphQLConfig } from "./graphql-config.js";
7
+ import { getSchema } from "./schema.js";
8
+ import { getSiblings } from "./siblings.js";
9
+ import { CWD, VIRTUAL_DOCUMENT_REGEX } from "./utils.js";
10
+ const debug = debugFactory("graphql-eslint:parser");
11
+ debug("cwd %o", CWD);
12
+ function parseForESLint(code, options) {
13
+ var _a, _b;
14
+ try {
15
+ const { filePath } = options;
16
+ options.documents || (options.documents = options.operations);
17
+ const { document } = parseGraphQLSDL(filePath, code, {
18
+ ...options.graphQLParserOptions,
19
+ noLocation: false
20
+ });
21
+ const gqlConfig = loadGraphQLConfig(options);
22
+ const realFilepath = filePath.replace(VIRTUAL_DOCUMENT_REGEX, "");
23
+ const project = gqlConfig.getProjectForFile(realFilepath);
24
+ let schema = null;
25
+ try {
26
+ schema = project ? getSchema(project, options.schemaOptions) : typeof options.schema === "string" ? buildSchema(options.schema) : null;
27
+ } catch (error) {
28
+ if (error instanceof Error) {
29
+ error.message = `Error while loading schema: ${error.message}`;
30
+ }
31
+ throw error;
32
+ }
33
+ const rootTree = convertToESTree(document, schema);
34
+ return {
35
+ services: {
36
+ schema,
37
+ siblingOperations: getSiblings(project, options.documents)
38
+ },
39
+ ast: {
40
+ comments: extractComments(document.loc),
41
+ tokens: extractTokens(filePath, code),
42
+ loc: rootTree.loc,
43
+ range: rootTree.range,
44
+ type: "Program",
45
+ sourceType: "script",
46
+ body: [rootTree]
47
+ }
48
+ };
49
+ } catch (error) {
50
+ if (error instanceof Error) {
51
+ error.message = `[graphql-eslint] ${error.message}`;
52
+ }
53
+ if (error instanceof GraphQLError) {
54
+ const location = (_a = error.locations) == null ? void 0 : _a[0];
55
+ const eslintError = {
56
+ index: (_b = error.positions) == null ? void 0 : _b[0],
57
+ ...location && {
58
+ lineNumber: location.line,
59
+ column: location.column - 1
60
+ },
61
+ message: error.message
62
+ };
63
+ throw eslintError;
64
+ }
65
+ throw error;
66
+ }
67
+ }
68
+ export {
69
+ parseForESLint
70
+ };
@@ -0,0 +1,9 @@
1
+ import { Linter } from 'eslint';
2
+
3
+ type Block = Linter.ProcessorFile & {
4
+ lineOffset: number;
5
+ offset: number;
6
+ };
7
+ declare const processor: Linter.Processor<Block | string>;
8
+
9
+ export { Block, processor };
@@ -0,0 +1,106 @@
1
+ import "./chunk-BMTV3EA2.js";
2
+ import { relative } from "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;
11
+ let onDiskConfigLoaded = false;
12
+ const RELEVANT_KEYWORDS = ["gql", "graphql", "GraphQL"];
13
+ const processor = {
14
+ supportsAutofix: true,
15
+ preprocess(code, filePath) {
16
+ if (!onDiskConfigLoaded) {
17
+ onDiskConfig = loadOnDiskGraphQLConfig(filePath);
18
+ onDiskConfigLoaded = true;
19
+ }
20
+ let keywords = RELEVANT_KEYWORDS;
21
+ const pluckConfig = onDiskConfig == null ? void 0 : onDiskConfig.getProjectForFile(filePath).extensions.pluckConfig;
22
+ if (pluckConfig) {
23
+ const {
24
+ modules = [],
25
+ globalGqlIdentifierName = ["gql", "graphql"],
26
+ gqlMagicComment = "GraphQL"
27
+ } = pluckConfig;
28
+ keywords = [
29
+ ...new Set(
30
+ [
31
+ ...modules.map(({ identifier }) => identifier),
32
+ ...asArray(globalGqlIdentifierName),
33
+ gqlMagicComment
34
+ ].filter(truthy)
35
+ )
36
+ ];
37
+ }
38
+ if (keywords.every((keyword) => !code.includes(keyword))) {
39
+ return [code];
40
+ }
41
+ try {
42
+ const sources = gqlPluckFromCodeStringSync(filePath, code, {
43
+ skipIndent: true,
44
+ ...pluckConfig
45
+ });
46
+ const blocks = sources.map((item) => ({
47
+ filename: "document.graphql",
48
+ text: item.body,
49
+ lineOffset: item.locationOffset.line - 1,
50
+ // @ts-expect-error -- `index` field exist but show ts error
51
+ offset: item.locationOffset.index + 1
52
+ }));
53
+ blocksMap.set(filePath, blocks);
54
+ return [
55
+ ...blocks,
56
+ code
57
+ /* source code must be provided and be last */
58
+ ];
59
+ } catch (error) {
60
+ if (error instanceof Error) {
61
+ error.message = `[graphql-eslint] Error while preprocessing "${relative(
62
+ CWD,
63
+ filePath
64
+ )}" file
65
+
66
+ ${error.message}`;
67
+ }
68
+ console.error(error);
69
+ return [code];
70
+ }
71
+ },
72
+ postprocess(messages, filePath) {
73
+ const blocks = blocksMap.get(filePath) || [];
74
+ for (let i = 0; i < blocks.length; i += 1) {
75
+ const { lineOffset, offset } = blocks[i];
76
+ for (const message of messages[i] || []) {
77
+ const isVueOrSvelte = /\.(vue|svelte)$/.test(filePath);
78
+ if (isVueOrSvelte) {
79
+ delete message.endLine;
80
+ delete message.endColumn;
81
+ delete message.fix;
82
+ delete message.suggestions;
83
+ Object.assign(message, REPORT_ON_FIRST_CHARACTER);
84
+ continue;
85
+ }
86
+ message.line += lineOffset;
87
+ if (typeof message.endLine === "number") {
88
+ message.endLine += lineOffset;
89
+ }
90
+ if (message.fix) {
91
+ message.fix.range[0] += offset;
92
+ message.fix.range[1] += offset;
93
+ }
94
+ for (const suggestion of message.suggestions || []) {
95
+ const [start, end] = suggestion.fix.range;
96
+ suggestion.fix.range = [start + offset, end + offset];
97
+ }
98
+ }
99
+ }
100
+ const result = messages.flat();
101
+ return result.sort((a, b) => a.line - b.line || a.column - b.column);
102
+ }
103
+ };
104
+ export {
105
+ processor
106
+ };
@@ -0,0 +1,84 @@
1
+ import { FromSchema } from 'json-schema-to-ts';
2
+ import { f as GraphQLESLintRule } from '../types-ace77d86.js';
3
+ import '@graphql-tools/utils';
4
+ import 'eslint';
5
+ import 'estree';
6
+ import 'graphql';
7
+ import 'graphql-config';
8
+ import '../estree-converter/types.mjs';
9
+
10
+ declare const schema: {
11
+ readonly type: "array";
12
+ readonly minItems: 1;
13
+ readonly maxItems: 1;
14
+ readonly items: {
15
+ readonly type: "object";
16
+ readonly additionalProperties: false;
17
+ readonly minProperties: 1;
18
+ readonly properties: {
19
+ readonly fields: {
20
+ readonly items: {
21
+ readonly enum: ("ObjectTypeDefinition" | "InterfaceTypeDefinition" | "InputObjectTypeDefinition")[];
22
+ };
23
+ readonly description: "Fields of `type`, `interface`, and `input`.";
24
+ readonly type: "array";
25
+ readonly uniqueItems: true;
26
+ readonly minItems: 1;
27
+ };
28
+ readonly values: {
29
+ readonly items: {
30
+ readonly enum: ["EnumTypeDefinition"];
31
+ };
32
+ readonly description: "Values of `enum`.";
33
+ readonly type: "array";
34
+ readonly uniqueItems: true;
35
+ readonly minItems: 1;
36
+ };
37
+ readonly selections: {
38
+ readonly items: {
39
+ readonly enum: ("OperationDefinition" | "FragmentDefinition")[];
40
+ };
41
+ readonly description: "Selections of `fragment` and operations `query`, `mutation` and `subscription`.";
42
+ readonly type: "array";
43
+ readonly uniqueItems: true;
44
+ readonly minItems: 1;
45
+ };
46
+ readonly variables: {
47
+ readonly items: {
48
+ readonly enum: ["OperationDefinition"];
49
+ };
50
+ readonly description: "Variables of operations `query`, `mutation` and `subscription`.";
51
+ readonly type: "array";
52
+ readonly uniqueItems: true;
53
+ readonly minItems: 1;
54
+ };
55
+ readonly arguments: {
56
+ readonly items: {
57
+ readonly enum: ("Field" | "Directive" | "FieldDefinition" | "DirectiveDefinition")[];
58
+ };
59
+ readonly description: "Arguments of fields and directives.";
60
+ readonly type: "array";
61
+ readonly uniqueItems: true;
62
+ readonly minItems: 1;
63
+ };
64
+ readonly definitions: {
65
+ readonly type: "boolean";
66
+ readonly description: "Definitions – `type`, `interface`, `enum`, `scalar`, `input`, `union` and `directive`.";
67
+ readonly default: false;
68
+ };
69
+ readonly groups: {
70
+ readonly minItems: 2;
71
+ readonly description: "Custom order group. Example: `['id', '*', 'createdAt', 'updatedAt']` where `*` says for everything else.";
72
+ readonly type: "array";
73
+ readonly uniqueItems: true;
74
+ readonly items: {
75
+ readonly type: "string";
76
+ };
77
+ };
78
+ };
79
+ };
80
+ };
81
+ type RuleOptions = FromSchema<typeof schema>;
82
+ declare const rule: GraphQLESLintRule<RuleOptions>;
83
+
84
+ export { RuleOptions, rule };
@@ -0,0 +1,364 @@
1
+ import "../chunk-BMTV3EA2.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";
8
+ const fieldsEnum = [
9
+ Kind.OBJECT_TYPE_DEFINITION,
10
+ Kind.INTERFACE_TYPE_DEFINITION,
11
+ Kind.INPUT_OBJECT_TYPE_DEFINITION
12
+ ];
13
+ const valuesEnum = [Kind.ENUM_TYPE_DEFINITION];
14
+ const selectionsEnum = [
15
+ Kind.OPERATION_DEFINITION,
16
+ Kind.FRAGMENT_DEFINITION
17
+ ];
18
+ const variablesEnum = [Kind.OPERATION_DEFINITION];
19
+ const argumentsEnum = [
20
+ Kind.FIELD_DEFINITION,
21
+ Kind.FIELD,
22
+ Kind.DIRECTIVE_DEFINITION,
23
+ Kind.DIRECTIVE
24
+ ];
25
+ const schema = {
26
+ type: "array",
27
+ minItems: 1,
28
+ maxItems: 1,
29
+ items: {
30
+ type: "object",
31
+ additionalProperties: false,
32
+ minProperties: 1,
33
+ properties: {
34
+ fields: {
35
+ ...ARRAY_DEFAULT_OPTIONS,
36
+ items: {
37
+ enum: fieldsEnum
38
+ },
39
+ description: "Fields of `type`, `interface`, and `input`."
40
+ },
41
+ values: {
42
+ ...ARRAY_DEFAULT_OPTIONS,
43
+ items: {
44
+ enum: valuesEnum
45
+ },
46
+ description: "Values of `enum`."
47
+ },
48
+ selections: {
49
+ ...ARRAY_DEFAULT_OPTIONS,
50
+ items: {
51
+ enum: selectionsEnum
52
+ },
53
+ description: "Selections of `fragment` and operations `query`, `mutation` and `subscription`."
54
+ },
55
+ variables: {
56
+ ...ARRAY_DEFAULT_OPTIONS,
57
+ items: {
58
+ enum: variablesEnum
59
+ },
60
+ description: "Variables of operations `query`, `mutation` and `subscription`."
61
+ },
62
+ arguments: {
63
+ ...ARRAY_DEFAULT_OPTIONS,
64
+ items: {
65
+ enum: argumentsEnum
66
+ },
67
+ description: "Arguments of fields and directives."
68
+ },
69
+ definitions: {
70
+ type: "boolean",
71
+ description: "Definitions \u2013 `type`, `interface`, `enum`, `scalar`, `input`, `union` and `directive`.",
72
+ default: false
73
+ },
74
+ groups: {
75
+ ...ARRAY_DEFAULT_OPTIONS,
76
+ minItems: 2,
77
+ description: "Custom order group. Example: `['id', '*', 'createdAt', 'updatedAt']` where `*` says for everything else."
78
+ }
79
+ }
80
+ }
81
+ };
82
+ const rule = {
83
+ meta: {
84
+ type: "suggestion",
85
+ fixable: "code",
86
+ docs: {
87
+ category: ["Schema", "Operations"],
88
+ description: "Enforce arrange in alphabetical order for type fields, enum values, input object fields, operation selections and more.",
89
+ url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
90
+ examples: [
91
+ {
92
+ title: "Incorrect",
93
+ usage: [{ fields: [Kind.OBJECT_TYPE_DEFINITION] }],
94
+ code: (
95
+ /* GraphQL */
96
+ `
97
+ type User {
98
+ password: String
99
+ firstName: String! # should be before "password"
100
+ age: Int # should be before "firstName"
101
+ lastName: String!
102
+ }
103
+ `
104
+ )
105
+ },
106
+ {
107
+ title: "Correct",
108
+ usage: [{ fields: [Kind.OBJECT_TYPE_DEFINITION] }],
109
+ code: (
110
+ /* GraphQL */
111
+ `
112
+ type User {
113
+ age: Int
114
+ firstName: String!
115
+ lastName: String!
116
+ password: String
117
+ }
118
+ `
119
+ )
120
+ },
121
+ {
122
+ title: "Incorrect",
123
+ usage: [{ values: [Kind.ENUM_TYPE_DEFINITION] }],
124
+ code: (
125
+ /* GraphQL */
126
+ `
127
+ enum Role {
128
+ SUPER_ADMIN
129
+ ADMIN # should be before "SUPER_ADMIN"
130
+ USER
131
+ GOD # should be before "USER"
132
+ }
133
+ `
134
+ )
135
+ },
136
+ {
137
+ title: "Correct",
138
+ usage: [{ values: [Kind.ENUM_TYPE_DEFINITION] }],
139
+ code: (
140
+ /* GraphQL */
141
+ `
142
+ enum Role {
143
+ ADMIN
144
+ GOD
145
+ SUPER_ADMIN
146
+ USER
147
+ }
148
+ `
149
+ )
150
+ },
151
+ {
152
+ title: "Incorrect",
153
+ usage: [{ selections: [Kind.OPERATION_DEFINITION] }],
154
+ code: (
155
+ /* GraphQL */
156
+ `
157
+ query {
158
+ me {
159
+ firstName
160
+ lastName
161
+ email # should be before "lastName"
162
+ }
163
+ }
164
+ `
165
+ )
166
+ },
167
+ {
168
+ title: "Correct",
169
+ usage: [{ selections: [Kind.OPERATION_DEFINITION] }],
170
+ code: (
171
+ /* GraphQL */
172
+ `
173
+ query {
174
+ me {
175
+ email
176
+ firstName
177
+ lastName
178
+ }
179
+ }
180
+ `
181
+ )
182
+ }
183
+ ],
184
+ configOptions: {
185
+ schema: [
186
+ {
187
+ fields: fieldsEnum,
188
+ values: valuesEnum,
189
+ arguments: argumentsEnum
190
+ // TODO: add in graphql-eslint v4
191
+ // definitions: true,
192
+ // groups: ['id', '*', 'createdAt', 'updatedAt']
193
+ }
194
+ ],
195
+ operations: [
196
+ {
197
+ selections: selectionsEnum,
198
+ variables: variablesEnum,
199
+ arguments: [Kind.FIELD, Kind.DIRECTIVE]
200
+ }
201
+ ]
202
+ }
203
+ },
204
+ messages: {
205
+ [RULE_ID]: "{{ currNode }} should be before {{ prevNode }}"
206
+ },
207
+ schema
208
+ },
209
+ create(context) {
210
+ var _a, _b, _c, _d, _e;
211
+ const sourceCode = context.getSourceCode();
212
+ function isNodeAndCommentOnSameLine(node, comment) {
213
+ return node.loc.end.line === comment.loc.start.line;
214
+ }
215
+ function getBeforeComments(node) {
216
+ const commentsBefore = sourceCode.getCommentsBefore(node);
217
+ if (commentsBefore.length === 0) {
218
+ return [];
219
+ }
220
+ const tokenBefore = sourceCode.getTokenBefore(node);
221
+ if (tokenBefore) {
222
+ return commentsBefore.filter((comment) => !isNodeAndCommentOnSameLine(tokenBefore, comment));
223
+ }
224
+ const filteredComments = [];
225
+ const nodeLine = node.loc.start.line;
226
+ for (let i = commentsBefore.length - 1; i >= 0; i -= 1) {
227
+ const comment = commentsBefore[i];
228
+ if (nodeLine - comment.loc.start.line - filteredComments.length > 1) {
229
+ break;
230
+ }
231
+ filteredComments.unshift(comment);
232
+ }
233
+ return filteredComments;
234
+ }
235
+ function getRangeWithComments(node) {
236
+ if (node.kind === Kind.VARIABLE) {
237
+ node = node.parent;
238
+ }
239
+ const [firstBeforeComment] = getBeforeComments(node);
240
+ const [firstAfterComment] = sourceCode.getCommentsAfter(node);
241
+ const from = firstBeforeComment || node;
242
+ const to = firstAfterComment && isNodeAndCommentOnSameLine(node, firstAfterComment) ? firstAfterComment : node;
243
+ return [from.range[0], to.range[1]];
244
+ }
245
+ function checkNodes(nodes = []) {
246
+ var _a2, _b2, _c2, _d2;
247
+ for (let i = 1; i < nodes.length; i += 1) {
248
+ const currNode = nodes[i];
249
+ const currName = "alias" in currNode && ((_a2 = currNode.alias) == null ? void 0 : _a2.value) || "name" in currNode && ((_b2 = currNode.name) == null ? void 0 : _b2.value);
250
+ if (!currName) {
251
+ continue;
252
+ }
253
+ const prevNode = nodes[i - 1];
254
+ const prevName = "alias" in prevNode && ((_c2 = prevNode.alias) == null ? void 0 : _c2.value) || "name" in prevNode && ((_d2 = prevNode.name) == null ? void 0 : _d2.value);
255
+ if (prevName) {
256
+ const compareResult = prevName.localeCompare(currName);
257
+ const { groups } = opts;
258
+ let shouldSortByGroup = false;
259
+ if (groups == null ? void 0 : groups.length) {
260
+ if (!groups.includes("*")) {
261
+ throw new Error("`groups` option should contain `*` string.");
262
+ }
263
+ let indexForPrev = groups.indexOf(prevName);
264
+ if (indexForPrev === -1)
265
+ indexForPrev = groups.indexOf("*");
266
+ let indexForCurr = groups.indexOf(currName);
267
+ if (indexForCurr === -1)
268
+ indexForCurr = groups.indexOf("*");
269
+ shouldSortByGroup = indexForPrev - indexForCurr > 0;
270
+ if (indexForPrev < indexForCurr) {
271
+ continue;
272
+ }
273
+ }
274
+ const shouldSort = compareResult === 1;
275
+ if (!shouldSortByGroup && !shouldSort) {
276
+ const isSameName = compareResult === 0;
277
+ if (!isSameName || !prevNode.kind.endsWith("Extension") || currNode.kind.endsWith("Extension")) {
278
+ continue;
279
+ }
280
+ }
281
+ }
282
+ context.report({
283
+ // @ts-expect-error can't be undefined
284
+ node: "alias" in currNode && currNode.alias || currNode.name,
285
+ messageId: RULE_ID,
286
+ data: {
287
+ currNode: displayNodeName(currNode),
288
+ prevNode: prevName ? displayNodeName(prevNode) : lowerCase(prevNode.kind)
289
+ },
290
+ *fix(fixer) {
291
+ const prevRange = getRangeWithComments(prevNode);
292
+ const currRange = getRangeWithComments(currNode);
293
+ yield fixer.replaceTextRange(
294
+ prevRange,
295
+ sourceCode.getText({ range: currRange })
296
+ );
297
+ yield fixer.replaceTextRange(
298
+ currRange,
299
+ sourceCode.getText({ range: prevRange })
300
+ );
301
+ }
302
+ });
303
+ }
304
+ }
305
+ const opts = context.options[0];
306
+ const fields = new Set((_a = opts.fields) != null ? _a : []);
307
+ const listeners = {};
308
+ const kinds = [
309
+ fields.has(Kind.OBJECT_TYPE_DEFINITION) && [
310
+ Kind.OBJECT_TYPE_DEFINITION,
311
+ Kind.OBJECT_TYPE_EXTENSION
312
+ ],
313
+ fields.has(Kind.INTERFACE_TYPE_DEFINITION) && [
314
+ Kind.INTERFACE_TYPE_DEFINITION,
315
+ Kind.INTERFACE_TYPE_EXTENSION
316
+ ],
317
+ fields.has(Kind.INPUT_OBJECT_TYPE_DEFINITION) && [
318
+ Kind.INPUT_OBJECT_TYPE_DEFINITION,
319
+ Kind.INPUT_OBJECT_TYPE_EXTENSION
320
+ ]
321
+ ].filter(truthy).flat();
322
+ const fieldsSelector = kinds.join(",");
323
+ const hasEnumValues = ((_b = opts.values) == null ? void 0 : _b[0]) === Kind.ENUM_TYPE_DEFINITION;
324
+ const selectionsSelector = (_c = opts.selections) == null ? void 0 : _c.join(",");
325
+ const hasVariables = ((_d = opts.variables) == null ? void 0 : _d[0]) === Kind.OPERATION_DEFINITION;
326
+ const argumentsSelector = (_e = opts.arguments) == null ? void 0 : _e.join(",");
327
+ if (fieldsSelector) {
328
+ listeners[fieldsSelector] = (node) => {
329
+ checkNodes(node.fields);
330
+ };
331
+ }
332
+ if (hasEnumValues) {
333
+ const enumValuesSelector = [Kind.ENUM_TYPE_DEFINITION, Kind.ENUM_TYPE_EXTENSION].join(",");
334
+ listeners[enumValuesSelector] = (node) => {
335
+ checkNodes(node.values);
336
+ };
337
+ }
338
+ if (selectionsSelector) {
339
+ listeners[`:matches(${selectionsSelector}) SelectionSet`] = (node) => {
340
+ checkNodes(node.selections);
341
+ };
342
+ }
343
+ if (hasVariables) {
344
+ listeners.OperationDefinition = (node) => {
345
+ var _a2;
346
+ checkNodes((_a2 = node.variableDefinitions) == null ? void 0 : _a2.map((varDef) => varDef.variable));
347
+ };
348
+ }
349
+ if (argumentsSelector) {
350
+ listeners[argumentsSelector] = (node) => {
351
+ checkNodes(node.arguments);
352
+ };
353
+ }
354
+ if (opts.definitions) {
355
+ listeners.Document = (node) => {
356
+ checkNodes(node.definitions);
357
+ };
358
+ }
359
+ return listeners;
360
+ }
361
+ };
362
+ export {
363
+ rule
364
+ };
@@ -0,0 +1,28 @@
1
+ import { FromSchema } from 'json-schema-to-ts';
2
+ import { f as GraphQLESLintRule } from '../types-ace77d86.js';
3
+ import '@graphql-tools/utils';
4
+ import 'eslint';
5
+ import 'estree';
6
+ import 'graphql';
7
+ import 'graphql-config';
8
+ import '../estree-converter/types.mjs';
9
+
10
+ declare const schema: {
11
+ readonly type: "array";
12
+ readonly maxItems: 1;
13
+ readonly items: {
14
+ readonly type: "object";
15
+ readonly additionalProperties: false;
16
+ readonly minProperties: 1;
17
+ readonly properties: {
18
+ readonly style: {
19
+ readonly enum: readonly ["block", "inline"];
20
+ readonly default: "block";
21
+ };
22
+ };
23
+ };
24
+ };
25
+ type RuleOptions = FromSchema<typeof schema>;
26
+ declare const rule: GraphQLESLintRule<RuleOptions>;
27
+
28
+ export { RuleOptions, rule };