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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/{typings → cjs}/cache.d.ts +3 -1
  2. package/cjs/cache.js +57 -26
  3. package/{typings → cjs}/configs/index.d.ts +3 -1
  4. package/cjs/configs/index.js +47 -14
  5. package/{typings → cjs}/configs/operations-all.d.ts +2 -1
  6. package/cjs/configs/operations-all.js +47 -30
  7. package/{typings → cjs}/configs/operations-recommended.d.ts +2 -1
  8. package/cjs/configs/operations-recommended.js +72 -55
  9. package/{typings → cjs}/configs/relay.d.ts +2 -1
  10. package/cjs/configs/relay.js +31 -11
  11. package/{typings → cjs}/configs/schema-all.d.ts +2 -1
  12. package/cjs/configs/schema-all.js +41 -24
  13. package/{typings → cjs}/configs/schema-recommended.d.ts +2 -1
  14. package/cjs/configs/schema-recommended.js +68 -51
  15. package/{typings → cjs}/documents.d.ts +4 -1
  16. package/cjs/documents.js +74 -43
  17. package/cjs/estree-converter/converter.d.ts +8 -0
  18. package/cjs/estree-converter/converter.js +80 -59
  19. package/cjs/estree-converter/index.d.ts +8 -0
  20. package/cjs/estree-converter/index.js +25 -5
  21. package/{typings → cjs}/estree-converter/types.d.ts +7 -5
  22. package/cjs/estree-converter/types.js +16 -0
  23. package/cjs/estree-converter/utils.d.ts +18 -0
  24. package/cjs/estree-converter/utils.js +119 -95
  25. package/{typings → cjs}/flat-configs.d.ts +12 -1
  26. package/cjs/flat-configs.js +56 -32
  27. package/cjs/graphql-config.d.ts +13 -0
  28. package/cjs/graphql-config.js +78 -47
  29. package/cjs/index.d.ts +22 -0
  30. package/cjs/index.js +50 -18
  31. package/cjs/parser.d.ts +12 -0
  32. package/cjs/parser.js +96 -76
  33. package/cjs/processor.d.ts +9 -0
  34. package/cjs/processor.js +119 -88
  35. package/{typings → cjs}/rules/alphabetize.d.ts +12 -4
  36. package/cjs/rules/alphabetize.js +337 -295
  37. package/{typings → cjs}/rules/description-style.d.ts +12 -4
  38. package/cjs/rules/description-style.js +96 -66
  39. package/cjs/rules/graphql-js-validation.d.ts +12 -0
  40. package/cjs/rules/graphql-js-validation.js +595 -433
  41. package/cjs/rules/index.d.ts +125 -0
  42. package/cjs/rules/index.js +97 -76
  43. package/{typings → cjs}/rules/input-name.d.ts +12 -4
  44. package/cjs/rules/input-name.js +153 -123
  45. package/{typings → cjs}/rules/lone-executable-definition.d.ts +12 -4
  46. package/cjs/rules/lone-executable-definition.js +101 -72
  47. package/{typings → cjs}/rules/match-document-filename.d.ts +14 -6
  48. package/cjs/rules/match-document-filename.js +229 -182
  49. package/{typings → cjs}/rules/naming-convention.d.ts +12 -4
  50. package/cjs/rules/naming-convention.js +380 -316
  51. package/cjs/rules/no-anonymous-operations.d.ts +12 -0
  52. package/cjs/rules/no-anonymous-operations.js +88 -57
  53. package/cjs/rules/no-case-insensitive-enum-values-duplicates.d.ts +12 -0
  54. package/cjs/rules/no-case-insensitive-enum-values-duplicates.js +82 -50
  55. package/cjs/rules/no-deprecated.d.ts +12 -0
  56. package/cjs/rules/no-deprecated.js +106 -75
  57. package/cjs/rules/no-duplicate-fields.d.ts +12 -0
  58. package/cjs/rules/no-duplicate-fields.js +116 -82
  59. package/cjs/rules/no-hashtag-description.d.ts +13 -0
  60. package/cjs/rules/no-hashtag-description.js +119 -82
  61. package/cjs/rules/no-one-place-fragments.d.ts +12 -0
  62. package/cjs/rules/no-one-place-fragments.js +88 -58
  63. package/{typings → cjs}/rules/no-root-type.d.ts +12 -4
  64. package/cjs/rules/no-root-type.js +101 -74
  65. package/cjs/rules/no-scalar-result-type-on-mutation.d.ts +12 -0
  66. package/cjs/rules/no-scalar-result-type-on-mutation.js +90 -60
  67. package/cjs/rules/no-typename-prefix.d.ts +12 -0
  68. package/cjs/rules/no-typename-prefix.js +88 -55
  69. package/cjs/rules/no-unreachable-types.d.ts +12 -0
  70. package/cjs/rules/no-unreachable-types.js +169 -134
  71. package/cjs/rules/no-unused-fields.d.ts +12 -0
  72. package/cjs/rules/no-unused-fields.js +117 -92
  73. package/{typings → cjs}/rules/relay-arguments.d.ts +12 -4
  74. package/cjs/rules/relay-arguments.js +136 -110
  75. package/cjs/rules/relay-connection-types.d.ts +13 -0
  76. package/cjs/rules/relay-connection-types.js +123 -94
  77. package/{typings → cjs}/rules/relay-edge-types.d.ts +12 -4
  78. package/cjs/rules/relay-edge-types.js +196 -179
  79. package/cjs/rules/relay-page-info.d.ts +12 -0
  80. package/cjs/rules/relay-page-info.js +108 -89
  81. package/{typings → cjs}/rules/require-deprecation-date.d.ts +12 -4
  82. package/cjs/rules/require-deprecation-date.js +143 -112
  83. package/cjs/rules/require-deprecation-reason.d.ts +12 -0
  84. package/cjs/rules/require-deprecation-reason.js +80 -46
  85. package/{typings → cjs}/rules/require-description.d.ts +13 -5
  86. package/cjs/rules/require-description.js +170 -132
  87. package/cjs/rules/require-field-of-type-query-in-mutation-result.d.ts +12 -0
  88. package/cjs/rules/require-field-of-type-query-in-mutation-result.js +81 -51
  89. package/{typings → cjs}/rules/require-id-when-available.d.ts +12 -4
  90. package/cjs/rules/require-id-when-available.js +196 -173
  91. package/cjs/rules/require-import-fragment.d.ts +12 -0
  92. package/cjs/rules/require-import-fragment.js +138 -88
  93. package/cjs/rules/require-nullable-fields-with-oneof.d.ts +12 -0
  94. package/cjs/rules/require-nullable-fields-with-oneof.js +80 -50
  95. package/cjs/rules/require-nullable-result-in-root.d.ts +12 -0
  96. package/cjs/rules/require-nullable-result-in-root.js +97 -68
  97. package/cjs/rules/require-type-pattern-with-oneof.d.ts +12 -0
  98. package/cjs/rules/require-type-pattern-with-oneof.js +70 -42
  99. package/{typings → cjs}/rules/selection-set-depth.d.ts +12 -4
  100. package/cjs/rules/selection-set-depth.js +147 -107
  101. package/{typings → cjs}/rules/strict-id-in-types.d.ts +12 -4
  102. package/cjs/rules/strict-id-in-types.js +143 -122
  103. package/cjs/rules/unique-fragment-name.d.ts +13 -0
  104. package/cjs/rules/unique-fragment-name.js +88 -62
  105. package/cjs/rules/unique-operation-name.d.ts +12 -0
  106. package/cjs/rules/unique-operation-name.js +65 -35
  107. package/cjs/schema.d.ts +12 -0
  108. package/cjs/schema.js +62 -30
  109. package/cjs/siblings.d.ts +8 -0
  110. package/cjs/siblings.js +124 -106
  111. package/cjs/testkit.d.ts +8 -0
  112. package/cjs/testkit.js +165 -144
  113. package/cjs/types-e3367e3c.d.ts +129 -0
  114. package/cjs/types.d.ts +8 -0
  115. package/cjs/types.js +16 -0
  116. package/cjs/utils.d.ts +44 -0
  117. package/cjs/utils.js +181 -124
  118. package/{typings/cache.d.cts → esm/cache.d.mts} +3 -1
  119. package/esm/cache.js +25 -23
  120. package/{typings/configs/index.d.cts → esm/configs/index.d.mts} +3 -1
  121. package/esm/configs/index.js +14 -11
  122. package/{typings/configs/operations-all.d.cts → esm/configs/operations-all.d.mts} +2 -1
  123. package/esm/configs/operations-all.js +28 -28
  124. package/{typings/configs/operations-recommended.d.cts → esm/configs/operations-recommended.d.mts} +2 -1
  125. package/esm/configs/operations-recommended.js +53 -53
  126. package/{typings/configs/relay.d.cts → esm/configs/relay.d.mts} +2 -1
  127. package/esm/configs/relay.js +12 -9
  128. package/{typings/configs/schema-all.d.cts → esm/configs/schema-all.d.mts} +2 -1
  129. package/esm/configs/schema-all.js +22 -22
  130. package/{typings/configs/schema-recommended.d.cts → esm/configs/schema-recommended.d.mts} +2 -1
  131. package/esm/configs/schema-recommended.js +49 -49
  132. package/{typings/documents.d.cts → esm/documents.d.mts} +4 -1
  133. package/esm/documents.js +41 -39
  134. package/esm/estree-converter/converter.d.mts +8 -0
  135. package/esm/estree-converter/converter.js +63 -57
  136. package/esm/estree-converter/index.d.mts +8 -0
  137. package/esm/estree-converter/index.js +3 -3
  138. package/{typings/estree-converter/types.d.cts → esm/estree-converter/types.d.mts} +7 -5
  139. package/esm/estree-converter/utils.d.mts +18 -0
  140. package/esm/estree-converter/utils.js +102 -93
  141. package/{typings/flat-configs.d.cts → esm/flat-configs.d.mts} +13 -2
  142. package/esm/flat-configs.js +33 -30
  143. package/esm/graphql-config.d.mts +13 -0
  144. package/esm/graphql-config.js +49 -44
  145. package/esm/index.d.mts +22 -0
  146. package/esm/index.js +18 -9
  147. package/esm/package.json +1 -1
  148. package/esm/parser.d.mts +12 -0
  149. package/esm/parser.js +64 -73
  150. package/esm/processor.d.mts +9 -0
  151. package/esm/processor.js +98 -86
  152. package/{typings/rules/alphabetize.d.cts → esm/rules/alphabetize.d.mts} +12 -4
  153. package/esm/rules/alphabetize.js +304 -290
  154. package/{typings/rules/description-style.d.cts → esm/rules/description-style.d.mts} +12 -4
  155. package/esm/rules/description-style.js +73 -64
  156. package/esm/rules/graphql-js-validation.d.mts +12 -0
  157. package/esm/rules/graphql-js-validation.js +580 -429
  158. package/esm/rules/index.d.mts +125 -0
  159. package/esm/rules/index.js +74 -74
  160. package/{typings/rules/input-name.d.cts → esm/rules/input-name.d.mts} +12 -4
  161. package/esm/rules/input-name.js +132 -121
  162. package/{typings/rules/lone-executable-definition.d.cts → esm/rules/lone-executable-definition.d.mts} +12 -4
  163. package/esm/rules/lone-executable-definition.js +78 -70
  164. package/{typings/rules/match-document-filename.d.cts → esm/rules/match-document-filename.d.mts} +14 -6
  165. package/esm/rules/match-document-filename.js +210 -180
  166. package/{typings/rules/naming-convention.d.cts → esm/rules/naming-convention.d.mts} +12 -4
  167. package/esm/rules/naming-convention.js +363 -314
  168. package/esm/rules/no-anonymous-operations.d.mts +12 -0
  169. package/esm/rules/no-anonymous-operations.js +65 -55
  170. package/esm/rules/no-case-insensitive-enum-values-duplicates.d.mts +12 -0
  171. package/esm/rules/no-case-insensitive-enum-values-duplicates.js +59 -48
  172. package/esm/rules/no-deprecated.d.mts +12 -0
  173. package/esm/rules/no-deprecated.js +83 -73
  174. package/esm/rules/no-duplicate-fields.d.mts +12 -0
  175. package/esm/rules/no-duplicate-fields.js +93 -80
  176. package/esm/rules/no-hashtag-description.d.mts +13 -0
  177. package/esm/rules/no-hashtag-description.js +95 -80
  178. package/esm/rules/no-one-place-fragments.d.mts +12 -0
  179. package/esm/rules/no-one-place-fragments.js +65 -56
  180. package/{typings/rules/no-root-type.d.cts → esm/rules/no-root-type.d.mts} +12 -4
  181. package/esm/rules/no-root-type.js +78 -72
  182. package/esm/rules/no-scalar-result-type-on-mutation.d.mts +12 -0
  183. package/esm/rules/no-scalar-result-type-on-mutation.js +67 -58
  184. package/esm/rules/no-typename-prefix.d.mts +12 -0
  185. package/esm/rules/no-typename-prefix.js +65 -53
  186. package/esm/rules/no-unreachable-types.d.mts +12 -0
  187. package/esm/rules/no-unreachable-types.js +141 -131
  188. package/esm/rules/no-unused-fields.d.mts +12 -0
  189. package/esm/rules/no-unused-fields.js +94 -90
  190. package/{typings/rules/relay-arguments.d.cts → esm/rules/relay-arguments.d.mts} +12 -4
  191. package/esm/rules/relay-arguments.js +113 -108
  192. package/esm/rules/relay-connection-types.d.mts +13 -0
  193. package/esm/rules/relay-connection-types.js +98 -91
  194. package/{typings/rules/relay-edge-types.d.cts → esm/rules/relay-edge-types.d.mts} +12 -4
  195. package/esm/rules/relay-edge-types.js +178 -177
  196. package/esm/rules/relay-page-info.d.mts +12 -0
  197. package/esm/rules/relay-page-info.js +84 -86
  198. package/{typings/rules/require-deprecation-date.d.cts → esm/rules/require-deprecation-date.d.mts} +12 -4
  199. package/esm/rules/require-deprecation-date.js +120 -110
  200. package/esm/rules/require-deprecation-reason.d.mts +12 -0
  201. package/esm/rules/require-deprecation-reason.js +57 -44
  202. package/{typings/rules/require-description.d.cts → esm/rules/require-description.d.mts} +13 -5
  203. package/esm/rules/require-description.js +151 -130
  204. package/esm/rules/require-field-of-type-query-in-mutation-result.d.mts +12 -0
  205. package/esm/rules/require-field-of-type-query-in-mutation-result.js +58 -49
  206. package/{typings/rules/require-id-when-available.d.cts → esm/rules/require-id-when-available.d.mts} +12 -4
  207. package/esm/rules/require-id-when-available.js +186 -171
  208. package/esm/rules/require-import-fragment.d.mts +12 -0
  209. package/esm/rules/require-import-fragment.js +105 -85
  210. package/esm/rules/require-nullable-fields-with-oneof.d.mts +12 -0
  211. package/esm/rules/require-nullable-fields-with-oneof.js +57 -48
  212. package/esm/rules/require-nullable-result-in-root.d.mts +12 -0
  213. package/esm/rules/require-nullable-result-in-root.js +74 -66
  214. package/esm/rules/require-type-pattern-with-oneof.d.mts +12 -0
  215. package/esm/rules/require-type-pattern-with-oneof.js +47 -40
  216. package/{typings/rules/selection-set-depth.d.cts → esm/rules/selection-set-depth.d.mts} +12 -4
  217. package/esm/rules/selection-set-depth.js +114 -104
  218. package/{typings/rules/strict-id-in-types.d.cts → esm/rules/strict-id-in-types.d.mts} +12 -4
  219. package/esm/rules/strict-id-in-types.js +125 -119
  220. package/esm/rules/unique-fragment-name.d.mts +13 -0
  221. package/esm/rules/unique-fragment-name.js +65 -60
  222. package/esm/rules/unique-operation-name.d.mts +12 -0
  223. package/esm/rules/unique-operation-name.js +42 -33
  224. package/esm/schema.d.mts +12 -0
  225. package/esm/schema.js +29 -26
  226. package/esm/siblings.d.mts +8 -0
  227. package/esm/siblings.js +105 -104
  228. package/esm/testkit.d.mts +8 -0
  229. package/esm/testkit.js +132 -141
  230. package/esm/types-2e1afd7c.d.ts +129 -0
  231. package/esm/types.d.mts +8 -0
  232. package/esm/utils.d.mts +44 -0
  233. package/esm/utils.js +138 -116
  234. package/package.json +40 -30
  235. package/typings/estree-converter/converter.d.cts +0 -3
  236. package/typings/estree-converter/converter.d.ts +0 -3
  237. package/typings/estree-converter/index.d.cts +0 -3
  238. package/typings/estree-converter/index.d.ts +0 -3
  239. package/typings/estree-converter/utils.d.cts +0 -13
  240. package/typings/estree-converter/utils.d.ts +0 -13
  241. package/typings/graphql-config.d.cts +0 -4
  242. package/typings/graphql-config.d.ts +0 -4
  243. package/typings/index.d.cts +0 -10
  244. package/typings/index.d.ts +0 -10
  245. package/typings/parser.d.cts +0 -2
  246. package/typings/parser.d.ts +0 -2
  247. package/typings/processor.d.cts +0 -6
  248. package/typings/processor.d.ts +0 -6
  249. package/typings/rules/graphql-js-validation.d.cts +0 -2
  250. package/typings/rules/graphql-js-validation.d.ts +0 -2
  251. package/typings/rules/index.d.cts +0 -111
  252. package/typings/rules/index.d.ts +0 -111
  253. package/typings/rules/no-anonymous-operations.d.cts +0 -2
  254. package/typings/rules/no-anonymous-operations.d.ts +0 -2
  255. package/typings/rules/no-case-insensitive-enum-values-duplicates.d.cts +0 -2
  256. package/typings/rules/no-case-insensitive-enum-values-duplicates.d.ts +0 -2
  257. package/typings/rules/no-deprecated.d.cts +0 -2
  258. package/typings/rules/no-deprecated.d.ts +0 -2
  259. package/typings/rules/no-duplicate-fields.d.cts +0 -2
  260. package/typings/rules/no-duplicate-fields.d.ts +0 -2
  261. package/typings/rules/no-hashtag-description.d.cts +0 -3
  262. package/typings/rules/no-hashtag-description.d.ts +0 -3
  263. package/typings/rules/no-one-place-fragments.d.cts +0 -2
  264. package/typings/rules/no-one-place-fragments.d.ts +0 -2
  265. package/typings/rules/no-scalar-result-type-on-mutation.d.cts +0 -2
  266. package/typings/rules/no-scalar-result-type-on-mutation.d.ts +0 -2
  267. package/typings/rules/no-typename-prefix.d.cts +0 -2
  268. package/typings/rules/no-typename-prefix.d.ts +0 -2
  269. package/typings/rules/no-unreachable-types.d.cts +0 -2
  270. package/typings/rules/no-unreachable-types.d.ts +0 -2
  271. package/typings/rules/no-unused-fields.d.cts +0 -2
  272. package/typings/rules/no-unused-fields.d.ts +0 -2
  273. package/typings/rules/relay-connection-types.d.cts +0 -4
  274. package/typings/rules/relay-connection-types.d.ts +0 -4
  275. package/typings/rules/relay-page-info.d.cts +0 -2
  276. package/typings/rules/relay-page-info.d.ts +0 -2
  277. package/typings/rules/require-deprecation-reason.d.cts +0 -2
  278. package/typings/rules/require-deprecation-reason.d.ts +0 -2
  279. package/typings/rules/require-field-of-type-query-in-mutation-result.d.cts +0 -2
  280. package/typings/rules/require-field-of-type-query-in-mutation-result.d.ts +0 -2
  281. package/typings/rules/require-import-fragment.d.cts +0 -2
  282. package/typings/rules/require-import-fragment.d.ts +0 -2
  283. package/typings/rules/require-nullable-fields-with-oneof.d.cts +0 -2
  284. package/typings/rules/require-nullable-fields-with-oneof.d.ts +0 -2
  285. package/typings/rules/require-nullable-result-in-root.d.cts +0 -2
  286. package/typings/rules/require-nullable-result-in-root.d.ts +0 -2
  287. package/typings/rules/require-type-pattern-with-oneof.d.cts +0 -2
  288. package/typings/rules/require-type-pattern-with-oneof.d.ts +0 -2
  289. package/typings/rules/unique-fragment-name.d.cts +0 -5
  290. package/typings/rules/unique-fragment-name.d.ts +0 -5
  291. package/typings/rules/unique-operation-name.d.cts +0 -2
  292. package/typings/rules/unique-operation-name.d.ts +0 -2
  293. package/typings/schema.d.cts +0 -3
  294. package/typings/schema.d.ts +0 -3
  295. package/typings/siblings.d.cts +0 -22
  296. package/typings/siblings.d.ts +0 -22
  297. package/typings/testkit.d.cts +0 -29
  298. package/typings/testkit.d.ts +0 -29
  299. package/typings/types.d.cts +0 -83
  300. package/typings/types.d.ts +0 -83
  301. package/typings/utils.d.cts +0 -40
  302. package/typings/utils.d.ts +0 -40
package/esm/parser.js CHANGED
@@ -1,77 +1,68 @@
1
- import { parseGraphQLSDL } from '@graphql-tools/utils';
2
- import debugFactory from 'debug';
3
- import { buildSchema, GraphQLError } from 'graphql';
4
- import { convertToESTree, extractComments, extractTokens } from './estree-converter/index.js';
5
- import { loadGraphQLConfig } from './graphql-config.js';
6
- import { getSchema } from './schema.js';
7
- import { getSiblings } from './siblings.js';
8
- import { CWD, VIRTUAL_DOCUMENT_REGEX } from './utils.js';
9
- const debug = debugFactory('graphql-eslint:parser');
10
- debug('cwd %o', CWD);
11
- export function parseForESLint(code, options) {
12
- var _a, _b;
1
+ import { parseGraphQLSDL } from "@graphql-tools/utils";
2
+ import debugFactory from "debug";
3
+ import { buildSchema, GraphQLError } from "graphql";
4
+ import { convertToESTree, extractComments, extractTokens } from "./estree-converter/index.js";
5
+ import { loadGraphQLConfig } from "./graphql-config.js";
6
+ import { getSchema } from "./schema.js";
7
+ import { getSiblings } from "./siblings.js";
8
+ import { CWD, VIRTUAL_DOCUMENT_REGEX } from "./utils.js";
9
+ const debug = debugFactory("graphql-eslint:parser");
10
+ debug("cwd %o", CWD);
11
+ function parseForESLint(code, options) {
12
+ try {
13
+ const { filePath } = options;
14
+ options.documents ||= options.operations;
15
+ const { document } = parseGraphQLSDL(filePath, code, {
16
+ ...options.graphQLParserOptions,
17
+ noLocation: false
18
+ });
19
+ const gqlConfig = loadGraphQLConfig(options);
20
+ const realFilepath = filePath.replace(VIRTUAL_DOCUMENT_REGEX, "");
21
+ const project = gqlConfig.getProjectForFile(realFilepath);
22
+ let schema = null;
13
23
  try {
14
- const { filePath } = options;
15
- // TODO: remove in graphql-eslint v4
16
- options.documents || (options.documents = options.operations);
17
- // First parse code from file, in case of syntax error do not try load schema,
18
- // documents or even graphql-config instance
19
- const { document } = parseGraphQLSDL(filePath, code, {
20
- ...options.graphQLParserOptions,
21
- noLocation: false,
22
- });
23
- const gqlConfig = loadGraphQLConfig(options);
24
- const realFilepath = filePath.replace(VIRTUAL_DOCUMENT_REGEX, '');
25
- const project = gqlConfig.getProjectForFile(realFilepath);
26
- let schema = null;
27
- try {
28
- schema = project
29
- ? getSchema(project, options.schemaOptions)
30
- : typeof options.schema === 'string'
31
- ? buildSchema(options.schema)
32
- : null;
33
- }
34
- catch (error) {
35
- if (error instanceof Error) {
36
- error.message = `Error while loading schema: ${error.message}`;
37
- }
38
- throw error;
39
- }
40
- const rootTree = convertToESTree(document, schema);
41
- return {
42
- services: {
43
- schema,
44
- siblingOperations: getSiblings(project, options.documents),
45
- },
46
- ast: {
47
- comments: extractComments(document.loc),
48
- tokens: extractTokens(filePath, code),
49
- loc: rootTree.loc,
50
- range: rootTree.range,
51
- type: 'Program',
52
- sourceType: 'script',
53
- body: [rootTree],
54
- },
55
- };
24
+ schema = project ? getSchema(project, options.schemaOptions) : typeof options.schema === "string" ? buildSchema(options.schema) : null;
25
+ } catch (error) {
26
+ if (error instanceof Error) {
27
+ error.message = `Error while loading schema: ${error.message}`;
28
+ }
29
+ throw error;
56
30
  }
57
- catch (error) {
58
- if (error instanceof Error) {
59
- error.message = `[graphql-eslint] ${error.message}`;
60
- }
61
- // In case of GraphQL parser error, we report it to ESLint as a parser error that matches the requirements
62
- // of ESLint. This will make sure to display it correctly in IDEs and lint results.
63
- if (error instanceof GraphQLError) {
64
- const location = (_a = error.locations) === null || _a === void 0 ? void 0 : _a[0];
65
- const eslintError = {
66
- index: (_b = error.positions) === null || _b === void 0 ? void 0 : _b[0],
67
- ...(location && {
68
- lineNumber: location.line,
69
- column: location.column - 1,
70
- }),
71
- message: error.message,
72
- };
73
- throw eslintError;
74
- }
75
- throw error;
31
+ const rootTree = convertToESTree(document, schema);
32
+ return {
33
+ services: {
34
+ schema,
35
+ siblingOperations: getSiblings(project, options.documents)
36
+ },
37
+ ast: {
38
+ comments: extractComments(document.loc),
39
+ tokens: extractTokens(filePath, code),
40
+ loc: rootTree.loc,
41
+ range: rootTree.range,
42
+ type: "Program",
43
+ sourceType: "script",
44
+ body: [rootTree]
45
+ }
46
+ };
47
+ } catch (error) {
48
+ if (error instanceof Error) {
49
+ error.message = `[graphql-eslint] ${error.message}`;
76
50
  }
51
+ if (error instanceof GraphQLError) {
52
+ const location = error.locations?.[0];
53
+ const eslintError = {
54
+ index: error.positions?.[0],
55
+ ...location && {
56
+ lineNumber: location.line,
57
+ column: location.column - 1
58
+ },
59
+ message: error.message
60
+ };
61
+ throw eslintError;
62
+ }
63
+ throw error;
64
+ }
77
65
  }
66
+ export {
67
+ parseForESLint
68
+ };
@@ -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 };
package/esm/processor.js CHANGED
@@ -1,93 +1,105 @@
1
- import { relative } from 'path';
2
- import { gqlPluckFromCodeStringSync, } from '@graphql-tools/graphql-tag-pluck';
3
- import { asArray } from '@graphql-tools/utils';
4
- import { loadOnDiskGraphQLConfig } from './graphql-config.js';
5
- import { CWD, REPORT_ON_FIRST_CHARACTER, truthy } from './utils.js';
6
- const blocksMap = new Map();
1
+ import { relative } from "path";
2
+ import {
3
+ gqlPluckFromCodeStringSync
4
+ } from "@graphql-tools/graphql-tag-pluck";
5
+ import { asArray } from "@graphql-tools/utils";
6
+ import { loadOnDiskGraphQLConfig } from "./graphql-config.js";
7
+ import { CWD, REPORT_ON_FIRST_CHARACTER, truthy } from "./utils.js";
8
+ const blocksMap = /* @__PURE__ */ new Map();
7
9
  let onDiskConfig;
8
10
  let onDiskConfigLoaded = false;
9
- const RELEVANT_KEYWORDS = ['gql', 'graphql', 'GraphQL'];
10
- export const processor = {
11
- supportsAutofix: true,
12
- preprocess(code, filePath) {
13
- if (!onDiskConfigLoaded) {
14
- onDiskConfig = loadOnDiskGraphQLConfig(filePath);
15
- onDiskConfigLoaded = true;
11
+ const RELEVANT_KEYWORDS = ["gql", "graphql", "GraphQL"];
12
+ const processor = {
13
+ supportsAutofix: true,
14
+ preprocess(code, filePath) {
15
+ if (!onDiskConfigLoaded) {
16
+ onDiskConfig = loadOnDiskGraphQLConfig(filePath);
17
+ onDiskConfigLoaded = true;
18
+ }
19
+ let keywords = RELEVANT_KEYWORDS;
20
+ const pluckConfig = onDiskConfig?.getProjectForFile(filePath).extensions.pluckConfig;
21
+ if (pluckConfig) {
22
+ const {
23
+ modules = [],
24
+ globalGqlIdentifierName = ["gql", "graphql"],
25
+ gqlMagicComment = "GraphQL"
26
+ } = pluckConfig;
27
+ keywords = [
28
+ ...new Set(
29
+ [
30
+ ...modules.map(({ identifier }) => identifier),
31
+ ...asArray(globalGqlIdentifierName),
32
+ gqlMagicComment
33
+ ].filter(truthy)
34
+ )
35
+ ];
36
+ }
37
+ if (keywords.every((keyword) => !code.includes(keyword))) {
38
+ return [code];
39
+ }
40
+ try {
41
+ const sources = gqlPluckFromCodeStringSync(filePath, code, {
42
+ skipIndent: true,
43
+ ...pluckConfig
44
+ });
45
+ const blocks = sources.map((item) => ({
46
+ filename: "document.graphql",
47
+ text: item.body,
48
+ lineOffset: item.locationOffset.line - 1,
49
+ // @ts-expect-error -- `index` field exist but show ts error
50
+ offset: item.locationOffset.index + 1
51
+ }));
52
+ blocksMap.set(filePath, blocks);
53
+ return [
54
+ ...blocks,
55
+ code
56
+ /* source code must be provided and be last */
57
+ ];
58
+ } catch (error) {
59
+ if (error instanceof Error) {
60
+ error.message = `[graphql-eslint] Error while preprocessing "${relative(
61
+ CWD,
62
+ filePath
63
+ )}" file
64
+
65
+ ${error.message}`;
66
+ }
67
+ console.error(error);
68
+ return [code];
69
+ }
70
+ },
71
+ postprocess(messages, filePath) {
72
+ const blocks = blocksMap.get(filePath) || [];
73
+ for (let i = 0; i < blocks.length; i += 1) {
74
+ const { lineOffset, offset } = blocks[i];
75
+ for (const message of messages[i] || []) {
76
+ const isVueOrSvelte = /\.(vue|svelte)$/.test(filePath);
77
+ if (isVueOrSvelte) {
78
+ delete message.endLine;
79
+ delete message.endColumn;
80
+ delete message.fix;
81
+ delete message.suggestions;
82
+ Object.assign(message, REPORT_ON_FIRST_CHARACTER);
83
+ continue;
16
84
  }
17
- let keywords = RELEVANT_KEYWORDS;
18
- const pluckConfig = onDiskConfig === null || onDiskConfig === void 0 ? void 0 : onDiskConfig.getProjectForFile(filePath).extensions.pluckConfig;
19
- if (pluckConfig) {
20
- const { modules = [], globalGqlIdentifierName = ['gql', 'graphql'], gqlMagicComment = 'GraphQL', } = pluckConfig;
21
- keywords = [
22
- ...new Set([
23
- ...modules.map(({ identifier }) => identifier),
24
- ...asArray(globalGqlIdentifierName),
25
- gqlMagicComment,
26
- ].filter(truthy)),
27
- ];
85
+ message.line += lineOffset;
86
+ if (typeof message.endLine === "number") {
87
+ message.endLine += lineOffset;
28
88
  }
29
- if (keywords.every(keyword => !code.includes(keyword))) {
30
- return [code];
89
+ if (message.fix) {
90
+ message.fix.range[0] += offset;
91
+ message.fix.range[1] += offset;
31
92
  }
32
- try {
33
- const sources = gqlPluckFromCodeStringSync(filePath, code, {
34
- skipIndent: true,
35
- ...pluckConfig,
36
- });
37
- const blocks = sources.map(item => ({
38
- filename: 'document.graphql',
39
- text: item.body,
40
- lineOffset: item.locationOffset.line - 1,
41
- // @ts-expect-error -- `index` field exist but show ts error
42
- offset: item.locationOffset.index + 1,
43
- }));
44
- blocksMap.set(filePath, blocks);
45
- return [...blocks, code /* source code must be provided and be last */];
93
+ for (const suggestion of message.suggestions || []) {
94
+ const [start, end] = suggestion.fix.range;
95
+ suggestion.fix.range = [start + offset, end + offset];
46
96
  }
47
- catch (error) {
48
- if (error instanceof Error) {
49
- error.message = `[graphql-eslint] Error while preprocessing "${relative(CWD, filePath)}" file\n\n${error.message}`;
50
- }
51
- // eslint-disable-next-line no-console
52
- console.error(error);
53
- // in case of parsing error return code as is
54
- return [code];
55
- }
56
- },
57
- postprocess(messages, filePath) {
58
- const blocks = blocksMap.get(filePath) || [];
59
- for (let i = 0; i < blocks.length; i += 1) {
60
- const { lineOffset, offset } = blocks[i];
61
- for (const message of messages[i] || []) {
62
- const isVueOrSvelte = /\.(vue|svelte)$/.test(filePath);
63
- if (isVueOrSvelte) {
64
- // We can't show correct report location because after processing with
65
- // graphql-tag-pluck location is incorrect, disable fixes as well
66
- delete message.endLine;
67
- delete message.endColumn;
68
- delete message.fix;
69
- delete message.suggestions;
70
- Object.assign(message, REPORT_ON_FIRST_CHARACTER);
71
- continue;
72
- }
73
- message.line += lineOffset;
74
- // endLine can not exist if only `loc: { start, column }` was provided to context.report
75
- if (typeof message.endLine === 'number') {
76
- message.endLine += lineOffset;
77
- }
78
- if (message.fix) {
79
- message.fix.range[0] += offset;
80
- message.fix.range[1] += offset;
81
- }
82
- for (const suggestion of message.suggestions || []) {
83
- // DO NOT mutate until https://github.com/eslint/eslint/issues/16716
84
- const [start, end] = suggestion.fix.range;
85
- suggestion.fix.range = [start + offset, end + offset];
86
- }
87
- }
88
- }
89
- const result = messages.flat();
90
- // sort eslint/graphql-eslint messages by line/column
91
- return result.sort((a, b) => a.line - b.line || a.column - b.column);
92
- },
97
+ }
98
+ }
99
+ const result = messages.flat();
100
+ return result.sort((a, b) => a.line - b.line || a.column - b.column);
101
+ }
102
+ };
103
+ export {
104
+ processor
93
105
  };
@@ -1,5 +1,12 @@
1
1
  import { FromSchema } from 'json-schema-to-ts';
2
- import { GraphQLESLintRule } from '../types.cjs';
2
+ import { i as GraphQLESLintRule } from '../types-2e1afd7c.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
+
3
10
  declare const schema: {
4
11
  readonly type: "array";
5
12
  readonly minItems: 1;
@@ -71,6 +78,7 @@ declare const schema: {
71
78
  };
72
79
  };
73
80
  };
74
- export type RuleOptions = FromSchema<typeof schema>;
75
- export declare const rule: GraphQLESLintRule<RuleOptions>;
76
- export {};
81
+ type RuleOptions = FromSchema<typeof schema>;
82
+ declare const rule: GraphQLESLintRule<RuleOptions>;
83
+
84
+ export { RuleOptions, rule };