@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/cjs/siblings.js CHANGED
@@ -1,113 +1,131 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getSiblings = void 0;
4
- const utils_1 = require("@graphql-tools/utils");
5
- const graphql_1 = require("graphql");
6
- const documents_js_1 = require("./documents.js");
7
- const utils_js_1 = require("./utils.js");
8
- const siblingOperationsCache = new Map();
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var siblings_exports = {};
20
+ __export(siblings_exports, {
21
+ getSiblings: () => getSiblings
22
+ });
23
+ module.exports = __toCommonJS(siblings_exports);
24
+ var import_utils = require("@graphql-tools/utils");
25
+ var import_graphql = require("graphql");
26
+ var import_documents = require("./documents.js");
27
+ var import_utils2 = require("./utils.js");
28
+ const siblingOperationsCache = /* @__PURE__ */ new Map();
9
29
  function getSiblings(project, documents) {
10
- const siblings = project
11
- ? (0, documents_js_1.getDocuments)(project)
12
- : typeof documents === 'string'
13
- ? [(0, utils_1.parseGraphQLSDL)('operation.graphql', documents, { noLocation: true })]
14
- : [];
15
- if (siblings.length === 0) {
16
- let printed = false;
17
- const noopWarn = () => {
18
- if (!printed) {
19
- utils_js_1.logger.warn('getSiblingOperations was called without any operations. Make sure to set "parserOptions.operations" to make this feature available!');
20
- printed = true;
21
- }
22
- return [];
23
- };
24
- return {
25
- available: false,
26
- getFragment: noopWarn,
27
- getFragments: noopWarn,
28
- getFragmentByType: noopWarn,
29
- getFragmentsInUse: noopWarn,
30
- getOperation: noopWarn,
31
- getOperations: noopWarn,
32
- getOperationByType: noopWarn,
33
- };
30
+ const siblings = project ? (0, import_documents.getDocuments)(project) : typeof documents === "string" ? [(0, import_utils.parseGraphQLSDL)("operation.graphql", documents, { noLocation: true })] : [];
31
+ if (siblings.length === 0) {
32
+ let printed = false;
33
+ const noopWarn = () => {
34
+ if (!printed) {
35
+ import_utils2.logger.warn(
36
+ 'getSiblingOperations was called without any operations. Make sure to set "parserOptions.operations" to make this feature available!'
37
+ );
38
+ printed = true;
39
+ }
40
+ return [];
41
+ };
42
+ return {
43
+ available: false,
44
+ getFragment: noopWarn,
45
+ getFragments: noopWarn,
46
+ getFragmentByType: noopWarn,
47
+ getFragmentsInUse: noopWarn,
48
+ getOperation: noopWarn,
49
+ getOperations: noopWarn,
50
+ getOperationByType: noopWarn
51
+ };
52
+ }
53
+ const value = siblingOperationsCache.get(siblings);
54
+ if (value) {
55
+ return value;
56
+ }
57
+ let fragmentsCache = null;
58
+ const getFragments = () => {
59
+ if (fragmentsCache === null) {
60
+ const result = [];
61
+ for (const source of siblings) {
62
+ for (const definition of source.document?.definitions || []) {
63
+ if (definition.kind === import_graphql.Kind.FRAGMENT_DEFINITION) {
64
+ result.push({
65
+ filePath: source.location,
66
+ document: definition
67
+ });
68
+ }
69
+ }
70
+ }
71
+ fragmentsCache = result;
34
72
  }
35
- // Since the siblings array is cached, we can use it as cache key.
36
- // We should get the same array reference each time we get
37
- // to this point for the same graphql project
38
- const value = siblingOperationsCache.get(siblings);
39
- if (value) {
40
- return value;
73
+ return fragmentsCache;
74
+ };
75
+ let cachedOperations = null;
76
+ const getOperations = () => {
77
+ if (cachedOperations === null) {
78
+ const result = [];
79
+ for (const source of siblings) {
80
+ for (const definition of source.document?.definitions || []) {
81
+ if (definition.kind === import_graphql.Kind.OPERATION_DEFINITION) {
82
+ result.push({
83
+ filePath: source.location,
84
+ document: definition
85
+ });
86
+ }
87
+ }
88
+ }
89
+ cachedOperations = result;
41
90
  }
42
- let fragmentsCache = null;
43
- const getFragments = () => {
44
- var _a;
45
- if (fragmentsCache === null) {
46
- const result = [];
47
- for (const source of siblings) {
48
- for (const definition of ((_a = source.document) === null || _a === void 0 ? void 0 : _a.definitions) || []) {
49
- if (definition.kind === graphql_1.Kind.FRAGMENT_DEFINITION) {
50
- result.push({
51
- filePath: source.location,
52
- document: definition,
53
- });
54
- }
55
- }
56
- }
57
- fragmentsCache = result;
91
+ return cachedOperations;
92
+ };
93
+ const getFragment = (name) => getFragments().filter((f) => f.document.name.value === name);
94
+ const collectFragments = (selectable, recursive, collected = /* @__PURE__ */ new Map()) => {
95
+ (0, import_graphql.visit)(selectable, {
96
+ FragmentSpread(spread) {
97
+ const fragmentName = spread.name.value;
98
+ const [fragment] = getFragment(fragmentName);
99
+ if (!fragment) {
100
+ import_utils2.logger.warn(
101
+ `Unable to locate fragment named "${fragmentName}", please make sure it's loaded using "parserOptions.operations"`
102
+ );
103
+ return;
58
104
  }
59
- return fragmentsCache;
60
- };
61
- let cachedOperations = null;
62
- const getOperations = () => {
63
- var _a;
64
- if (cachedOperations === null) {
65
- const result = [];
66
- for (const source of siblings) {
67
- for (const definition of ((_a = source.document) === null || _a === void 0 ? void 0 : _a.definitions) || []) {
68
- if (definition.kind === graphql_1.Kind.OPERATION_DEFINITION) {
69
- result.push({
70
- filePath: source.location,
71
- document: definition,
72
- });
73
- }
74
- }
75
- }
76
- cachedOperations = result;
105
+ if (!collected.has(fragmentName)) {
106
+ collected.set(fragmentName, fragment.document);
107
+ if (recursive) {
108
+ collectFragments(fragment.document, recursive, collected);
109
+ }
77
110
  }
78
- return cachedOperations;
79
- };
80
- const getFragment = (name) => getFragments().filter(f => f.document.name.value === name);
81
- const collectFragments = (selectable, recursive, collected = new Map()) => {
82
- (0, graphql_1.visit)(selectable, {
83
- FragmentSpread(spread) {
84
- const fragmentName = spread.name.value;
85
- const [fragment] = getFragment(fragmentName);
86
- if (!fragment) {
87
- utils_js_1.logger.warn(`Unable to locate fragment named "${fragmentName}", please make sure it's loaded using "parserOptions.operations"`);
88
- return;
89
- }
90
- if (!collected.has(fragmentName)) {
91
- collected.set(fragmentName, fragment.document);
92
- if (recursive) {
93
- collectFragments(fragment.document, recursive, collected);
94
- }
95
- }
96
- },
97
- });
98
- return collected;
99
- };
100
- const siblingOperations = {
101
- available: true,
102
- getFragment,
103
- getFragments,
104
- getFragmentByType: typeName => getFragments().filter(f => f.document.typeCondition.name.value === typeName),
105
- getFragmentsInUse: (selectable, recursive = true) => Array.from(collectFragments(selectable, recursive).values()),
106
- getOperation: name => getOperations().filter(o => { var _a; return ((_a = o.document.name) === null || _a === void 0 ? void 0 : _a.value) === name; }),
107
- getOperations,
108
- getOperationByType: type => getOperations().filter(o => o.document.operation === type),
109
- };
110
- siblingOperationsCache.set(siblings, siblingOperations);
111
- return siblingOperations;
111
+ }
112
+ });
113
+ return collected;
114
+ };
115
+ const siblingOperations = {
116
+ available: true,
117
+ getFragment,
118
+ getFragments,
119
+ getFragmentByType: (typeName) => getFragments().filter((f) => f.document.typeCondition.name.value === typeName),
120
+ getFragmentsInUse: (selectable, recursive = true) => Array.from(collectFragments(selectable, recursive).values()),
121
+ getOperation: (name) => getOperations().filter((o) => o.document.name?.value === name),
122
+ getOperations,
123
+ getOperationByType: (type) => getOperations().filter((o) => o.document.operation === type)
124
+ };
125
+ siblingOperationsCache.set(siblings, siblingOperations);
126
+ return siblingOperations;
112
127
  }
113
- exports.getSiblings = getSiblings;
128
+ // Annotate the CommonJS export names for ESM import in node:
129
+ 0 && (module.exports = {
130
+ getSiblings
131
+ });
@@ -0,0 +1,8 @@
1
+ import 'eslint';
2
+ import 'graphql';
3
+ import './estree-converter/types.js';
4
+ export { G as GraphQLESLintRuleListener, b as GraphQLInvalidTestCase, c as GraphQLRuleTester, a as GraphQLValidTestCase } from './types-e3367e3c.js';
5
+ import 'estree';
6
+ import '@graphql-tools/utils';
7
+ import 'graphql-config';
8
+ import 'json-schema-to-ts';
package/cjs/testkit.js CHANGED
@@ -1,162 +1,183 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GraphQLRuleTester = void 0;
4
- const fs_1 = require("fs");
5
- const path_1 = require("path");
6
- const code_frame_1 = require("@babel/code-frame");
7
- const eslint_1 = require("eslint");
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var testkit_exports = {};
30
+ __export(testkit_exports, {
31
+ GraphQLRuleTester: () => GraphQLRuleTester
32
+ });
33
+ module.exports = __toCommonJS(testkit_exports);
34
+ var import_fs = require("fs");
35
+ var import_path = require("path");
36
+ var import_code_frame = require("@babel/code-frame");
37
+ var import_eslint = require("eslint");
8
38
  function indentCode(code, indent = 4) {
9
- return code.replace(/^/gm, ' '.repeat(indent));
39
+ return code.replace(/^/gm, " ".repeat(indent));
10
40
  }
11
- // A simple version of `SourceCodeFixer.applyFixes`
12
- // https://github.com/eslint/eslint/issues/14936#issuecomment-906746754
13
41
  function applyFix(code, { range, text }) {
14
- return [code.slice(0, range[0]), text, code.slice(range[1])].join('');
42
+ return [code.slice(0, range[0]), text, code.slice(range[1])].join("");
15
43
  }
16
- class GraphQLRuleTester extends eslint_1.RuleTester {
17
- constructor(parserOptions = {}) {
18
- const config = {
19
- parser: require.resolve('@graphql-eslint/eslint-plugin'),
20
- parserOptions: {
21
- ...parserOptions,
22
- skipGraphQLConfig: true,
23
- },
24
- };
25
- super(config);
26
- this.config = config;
27
- }
28
- fromMockFile(path) {
29
- return (0, fs_1.readFileSync)((0, path_1.resolve)(__dirname, `../tests/mocks/${path}`), 'utf-8');
30
- }
31
- runGraphQLTests(ruleId, rule, tests) {
32
- super.run(ruleId, rule, tests);
33
- const linter = new eslint_1.Linter();
34
- linter.defineRule(ruleId, rule);
35
- const hasOnlyTest = [...tests.valid, ...tests.invalid].some(t => typeof t !== 'string' && t.only);
36
- // for (const [index, testCase] of tests.valid.entries()) {
37
- // const { name, code, filename, only }: RuleTester.ValidTestCase =
38
- // typeof testCase === 'string' ? { code: testCase } : testCase;
39
- //
40
- // if (hasOnlyTest && !only) {
41
- // continue;
42
- // }
43
- //
44
- // const verifyConfig = getVerifyConfig<Options>(ruleId, this.config, testCase);
45
- // defineParser(linter, verifyConfig.parser);
46
- //
47
- // const messages = linter.verify(code, verifyConfig, { filename });
48
- // const codeFrame = printCode(code, { line: 0, column: 0 });
49
- //
50
- // it(name || `Valid #${index + 1}\n${codeFrame}`, () => {
51
- // expect(messages).toEqual([]);
52
- // });
53
- // }
54
- for (const [idx, testCase] of tests.invalid.entries()) {
55
- const { only, filename, options, name } = testCase;
56
- if (hasOnlyTest && !only) {
57
- continue;
58
- }
59
- const code = removeTrailingBlankLines(testCase.code);
60
- const verifyConfig = getVerifyConfig(ruleId, this.config, testCase);
61
- defineParser(linter, verifyConfig.parser);
62
- const messages = linter.verify(code, verifyConfig, filename);
63
- if (messages.length === 0) {
64
- throw new Error('Invalid case should have at least one error.');
65
- }
66
- const codeFrame = indentCode(printCode(code, { line: 0, column: 0 }));
67
- const messageForSnapshot = ['#### ⌨️ Code', codeFrame];
68
- if (options) {
69
- const opts = JSON.stringify(options, null, 2).slice(1, -1);
70
- messageForSnapshot.push('#### ⚙️ Options', indentCode(removeTrailingBlankLines(opts), 2));
71
- }
72
- for (const [index, message] of messages.entries()) {
73
- if (message.fatal) {
74
- throw new Error(message.message);
75
- }
76
- const codeWithMessage = printCode(code, message, 1);
77
- messageForSnapshot.push(printWithIndex('#### ❌ Error', index, messages.length), indentCode(codeWithMessage));
78
- // Don't print suggestions in snapshots for too big codes
79
- if (message.suggestions && (code.match(/\n/g) || '').length < 1000) {
80
- for (const [i, suggestion] of message.suggestions.entries()) {
81
- const title = printWithIndex('#### 💡 Suggestion', i, message.suggestions.length, suggestion.desc);
82
- const output = applyFix(code, suggestion.fix);
83
- const codeFrame = printCode(output, { line: 0, column: 0 });
84
- messageForSnapshot.push(title, indentCode(codeFrame, 2));
85
- }
86
- }
87
- }
88
- if (rule.meta.fixable) {
89
- const { fixed, output } = linter.verifyAndFix(code, verifyConfig, filename);
90
- if (fixed) {
91
- messageForSnapshot.push('#### 🔧 Autofix output', indentCode(printCode(output)));
92
- }
93
- }
94
- it(name || `Invalid #${idx + 1}`, () => {
95
- expect(messageForSnapshot.join('\n\n')).toMatchSnapshot();
96
- });
44
+ class GraphQLRuleTester extends import_eslint.RuleTester {
45
+ constructor(parserOptions = {}) {
46
+ const config = {
47
+ parser: require.resolve("@graphql-eslint/eslint-plugin"),
48
+ parserOptions: {
49
+ ...parserOptions,
50
+ skipGraphQLConfig: true
51
+ }
52
+ };
53
+ super(config);
54
+ this.config = config;
55
+ }
56
+ fromMockFile(path) {
57
+ return (0, import_fs.readFileSync)((0, import_path.resolve)(__dirname, `../tests/mocks/${path}`), "utf-8");
58
+ }
59
+ runGraphQLTests(ruleId, rule, tests) {
60
+ super.run(ruleId, rule, tests);
61
+ const linter = new import_eslint.Linter();
62
+ linter.defineRule(ruleId, rule);
63
+ const hasOnlyTest = [...tests.valid, ...tests.invalid].some(
64
+ (t) => typeof t !== "string" && t.only
65
+ );
66
+ for (const [idx, testCase] of tests.invalid.entries()) {
67
+ const { only, filename, options, name } = testCase;
68
+ if (hasOnlyTest && !only) {
69
+ continue;
70
+ }
71
+ const code = removeTrailingBlankLines(testCase.code);
72
+ const verifyConfig = getVerifyConfig(ruleId, this.config, testCase);
73
+ defineParser(linter, verifyConfig.parser);
74
+ const messages = linter.verify(code, verifyConfig, filename);
75
+ if (messages.length === 0) {
76
+ throw new Error("Invalid case should have at least one error.");
77
+ }
78
+ const codeFrame = indentCode(printCode(code, { line: 0, column: 0 }));
79
+ const messageForSnapshot = ["#### \u2328\uFE0F Code", codeFrame];
80
+ if (options) {
81
+ const opts = JSON.stringify(options, null, 2).slice(1, -1);
82
+ messageForSnapshot.push("#### \u2699\uFE0F Options", indentCode(removeTrailingBlankLines(opts), 2));
83
+ }
84
+ for (const [index, message] of messages.entries()) {
85
+ if (message.fatal) {
86
+ throw new Error(message.message);
87
+ }
88
+ const codeWithMessage = printCode(code, message, 1);
89
+ messageForSnapshot.push(
90
+ printWithIndex("#### \u274C Error", index, messages.length),
91
+ indentCode(codeWithMessage)
92
+ );
93
+ if (message.suggestions && (code.match(/\n/g) || "").length < 1e3) {
94
+ for (const [i, suggestion] of message.suggestions.entries()) {
95
+ const title = printWithIndex(
96
+ "#### \u{1F4A1} Suggestion",
97
+ i,
98
+ message.suggestions.length,
99
+ suggestion.desc
100
+ );
101
+ const output = applyFix(code, suggestion.fix);
102
+ const codeFrame2 = printCode(output, { line: 0, column: 0 });
103
+ messageForSnapshot.push(title, indentCode(codeFrame2, 2));
104
+ }
97
105
  }
106
+ }
107
+ if (rule.meta.fixable) {
108
+ const { fixed, output } = linter.verifyAndFix(code, verifyConfig, filename);
109
+ if (fixed) {
110
+ messageForSnapshot.push("#### \u{1F527} Autofix output", indentCode(printCode(output)));
111
+ }
112
+ }
113
+ it(name || `Invalid #${idx + 1}`, () => {
114
+ expect(messageForSnapshot.join("\n\n")).toMatchSnapshot();
115
+ });
98
116
  }
117
+ }
99
118
  }
100
- exports.GraphQLRuleTester = GraphQLRuleTester;
101
119
  function removeTrailingBlankLines(text) {
102
- return text.replace(/^\s*\n/, '').trimEnd();
120
+ return text.replace(/^\s*\n/, "").trimEnd();
103
121
  }
104
122
  function printWithIndex(title, index, total, description) {
105
- if (total > 1) {
106
- title += ` ${index + 1}/${total}`;
107
- }
108
- if (description) {
109
- title += `: ${description}`;
110
- }
111
- return title;
123
+ if (total > 1) {
124
+ title += ` ${index + 1}/${total}`;
125
+ }
126
+ if (description) {
127
+ title += `: ${description}`;
128
+ }
129
+ return title;
112
130
  }
113
131
  function getVerifyConfig(ruleId, testerConfig, testCase) {
114
- const { parser = testerConfig.parser, parserOptions, options } = testCase;
115
- return {
116
- ...testerConfig,
117
- parser,
118
- parserOptions: {
119
- ...testerConfig.parserOptions,
120
- ...parserOptions,
121
- },
122
- rules: {
123
- [ruleId]: Array.isArray(options) ? ['error', ...options] : 'error',
124
- },
125
- };
132
+ const { parser = testerConfig.parser, parserOptions, options } = testCase;
133
+ return {
134
+ ...testerConfig,
135
+ parser,
136
+ parserOptions: {
137
+ ...testerConfig.parserOptions,
138
+ ...parserOptions
139
+ },
140
+ rules: {
141
+ [ruleId]: Array.isArray(options) ? ["error", ...options] : "error"
142
+ }
143
+ };
126
144
  }
127
- const parsers = new WeakMap();
145
+ const parsers = /* @__PURE__ */ new WeakMap();
128
146
  function defineParser(linter, parser) {
129
- if (!parser) {
130
- return;
131
- }
132
- if (!parsers.has(linter)) {
133
- parsers.set(linter, new Set());
134
- }
135
- const defined = parsers.get(linter);
136
- if (!defined.has(parser)) {
137
- defined.add(parser);
138
- // eslint-disable-next-line @typescript-eslint/no-var-requires
139
- linter.defineParser(parser, require(parser));
140
- }
147
+ if (!parser) {
148
+ return;
149
+ }
150
+ if (!parsers.has(linter)) {
151
+ parsers.set(linter, /* @__PURE__ */ new Set());
152
+ }
153
+ const defined = parsers.get(linter);
154
+ if (!defined.has(parser)) {
155
+ defined.add(parser);
156
+ linter.defineParser(parser, require(parser));
157
+ }
141
158
  }
142
159
  function printCode(code, result = {}, linesOffset = Number.POSITIVE_INFINITY) {
143
- const { line, column, endLine, endColumn, message } = result;
144
- const location = {};
145
- if (typeof line === 'number' && typeof column === 'number') {
146
- location.start = {
147
- line,
148
- column,
149
- };
150
- }
151
- if (typeof endLine === 'number' && typeof endColumn === 'number') {
152
- location.end = {
153
- line: endLine,
154
- column: endColumn,
155
- };
156
- }
157
- return (0, code_frame_1.codeFrameColumns)(code, location, {
158
- linesAbove: linesOffset,
159
- linesBelow: linesOffset,
160
- message,
161
- });
160
+ const { line, column, endLine, endColumn, message } = result;
161
+ const location = {};
162
+ if (typeof line === "number" && typeof column === "number") {
163
+ location.start = {
164
+ line,
165
+ column
166
+ };
167
+ }
168
+ if (typeof endLine === "number" && typeof endColumn === "number") {
169
+ location.end = {
170
+ line: endLine,
171
+ column: endColumn
172
+ };
173
+ }
174
+ return (0, import_code_frame.codeFrameColumns)(code, location, {
175
+ linesAbove: linesOffset,
176
+ linesBelow: linesOffset,
177
+ message
178
+ });
162
179
  }
180
+ // Annotate the CommonJS export names for ESM import in node:
181
+ 0 && (module.exports = {
182
+ GraphQLRuleTester
183
+ });