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

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,370 +1,434 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rule = void 0;
4
- const graphql_1 = require("graphql");
5
- const utils_js_1 = require("../utils.js");
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 naming_convention_exports = {};
20
+ __export(naming_convention_exports, {
21
+ rule: () => rule
22
+ });
23
+ module.exports = __toCommonJS(naming_convention_exports);
24
+ var import_graphql = require("graphql");
25
+ var import_utils = require("../utils.js");
6
26
  const KindToDisplayName = {
7
- // types
8
- [graphql_1.Kind.OBJECT_TYPE_DEFINITION]: 'Type',
9
- [graphql_1.Kind.INTERFACE_TYPE_DEFINITION]: 'Interface',
10
- [graphql_1.Kind.ENUM_TYPE_DEFINITION]: 'Enumerator',
11
- [graphql_1.Kind.SCALAR_TYPE_DEFINITION]: 'Scalar',
12
- [graphql_1.Kind.INPUT_OBJECT_TYPE_DEFINITION]: 'Input type',
13
- [graphql_1.Kind.UNION_TYPE_DEFINITION]: 'Union',
14
- // fields
15
- [graphql_1.Kind.FIELD_DEFINITION]: 'Field',
16
- [graphql_1.Kind.INPUT_VALUE_DEFINITION]: 'Input property',
17
- [graphql_1.Kind.ARGUMENT]: 'Argument',
18
- [graphql_1.Kind.DIRECTIVE_DEFINITION]: 'Directive',
19
- // rest
20
- [graphql_1.Kind.ENUM_VALUE_DEFINITION]: 'Enumeration value',
21
- [graphql_1.Kind.OPERATION_DEFINITION]: 'Operation',
22
- [graphql_1.Kind.FRAGMENT_DEFINITION]: 'Fragment',
23
- [graphql_1.Kind.VARIABLE_DEFINITION]: 'Variable',
27
+ // types
28
+ [import_graphql.Kind.OBJECT_TYPE_DEFINITION]: "Type",
29
+ [import_graphql.Kind.INTERFACE_TYPE_DEFINITION]: "Interface",
30
+ [import_graphql.Kind.ENUM_TYPE_DEFINITION]: "Enumerator",
31
+ [import_graphql.Kind.SCALAR_TYPE_DEFINITION]: "Scalar",
32
+ [import_graphql.Kind.INPUT_OBJECT_TYPE_DEFINITION]: "Input type",
33
+ [import_graphql.Kind.UNION_TYPE_DEFINITION]: "Union",
34
+ // fields
35
+ [import_graphql.Kind.FIELD_DEFINITION]: "Field",
36
+ [import_graphql.Kind.INPUT_VALUE_DEFINITION]: "Input property",
37
+ [import_graphql.Kind.ARGUMENT]: "Argument",
38
+ [import_graphql.Kind.DIRECTIVE_DEFINITION]: "Directive",
39
+ // rest
40
+ [import_graphql.Kind.ENUM_VALUE_DEFINITION]: "Enumeration value",
41
+ [import_graphql.Kind.OPERATION_DEFINITION]: "Operation",
42
+ [import_graphql.Kind.FRAGMENT_DEFINITION]: "Fragment",
43
+ [import_graphql.Kind.VARIABLE_DEFINITION]: "Variable"
24
44
  };
25
45
  const StyleToRegex = {
26
- camelCase: /^[a-z][\dA-Za-z]*$/,
27
- PascalCase: /^[A-Z][\dA-Za-z]*$/,
28
- snake_case: /^[a-z][\d_a-z]*[\da-z]*$/,
29
- UPPER_CASE: /^[A-Z][\dA-Z_]*[\dA-Z]*$/,
46
+ camelCase: /^[a-z][\dA-Za-z]*$/,
47
+ PascalCase: /^[A-Z][\dA-Za-z]*$/,
48
+ snake_case: /^[a-z][\d_a-z]*[\da-z]*$/,
49
+ UPPER_CASE: /^[A-Z][\dA-Z_]*[\dA-Z]*$/
30
50
  };
31
51
  const ALLOWED_KINDS = Object.keys(KindToDisplayName).sort();
32
52
  const ALLOWED_STYLES = Object.keys(StyleToRegex);
33
53
  const schemaOption = {
34
- oneOf: [{ $ref: '#/definitions/asString' }, { $ref: '#/definitions/asObject' }],
54
+ oneOf: [{ $ref: "#/definitions/asString" }, { $ref: "#/definitions/asObject" }]
35
55
  };
36
56
  const schema = {
37
- definitions: {
38
- asString: {
39
- enum: ALLOWED_STYLES,
40
- description: `One of: ${ALLOWED_STYLES.map(t => `\`${t}\``).join(', ')}`,
41
- },
42
- asObject: {
43
- type: 'object',
44
- additionalProperties: false,
45
- properties: {
46
- style: { enum: ALLOWED_STYLES },
47
- prefix: { type: 'string' },
48
- suffix: { type: 'string' },
49
- forbiddenPrefixes: utils_js_1.ARRAY_DEFAULT_OPTIONS,
50
- forbiddenSuffixes: utils_js_1.ARRAY_DEFAULT_OPTIONS,
51
- requiredPrefixes: utils_js_1.ARRAY_DEFAULT_OPTIONS,
52
- requiredSuffixes: utils_js_1.ARRAY_DEFAULT_OPTIONS,
53
- ignorePattern: {
54
- type: 'string',
55
- description: 'Option to skip validation of some words, e.g. acronyms',
56
- },
57
- },
58
- },
57
+ definitions: {
58
+ asString: {
59
+ enum: ALLOWED_STYLES,
60
+ description: `One of: ${ALLOWED_STYLES.map((t) => `\`${t}\``).join(", ")}`
59
61
  },
60
- type: 'array',
61
- maxItems: 1,
62
- items: {
63
- type: 'object',
64
- additionalProperties: false,
65
- properties: {
66
- types: {
67
- ...schemaOption,
68
- description: `Includes:\n${utils_js_1.TYPES_KINDS.map(kind => `- \`${kind}\``).join('\n')}`,
69
- },
70
- ...Object.fromEntries(ALLOWED_KINDS.map(kind => [
71
- kind,
72
- {
73
- ...schemaOption,
74
- description: `Read more about this kind on [spec.graphql.org](https://spec.graphql.org/October2021/#${kind}).`,
75
- },
76
- ])),
77
- allowLeadingUnderscore: {
78
- type: 'boolean',
79
- default: false,
80
- },
81
- allowTrailingUnderscore: {
82
- type: 'boolean',
83
- default: false,
84
- },
85
- },
86
- patternProperties: {
87
- [`^(${ALLOWED_KINDS.join('|')})(.+)?$`]: schemaOption,
88
- },
89
- description: [
90
- "> It's possible to use a [`selector`](https://eslint.org/docs/developer-guide/selectors) that starts with allowed `ASTNode` names which are described below.",
91
- '>',
92
- '> Paste or drop code into the editor in [ASTExplorer](https://astexplorer.net) and inspect the generated AST to compose your selector.',
93
- '>',
94
- '> Example: pattern property `FieldDefinition[parent.name.value=Query]` will match only fields for type `Query`.',
95
- ].join('\n'),
62
+ asObject: {
63
+ type: "object",
64
+ additionalProperties: false,
65
+ properties: {
66
+ style: { enum: ALLOWED_STYLES },
67
+ prefix: { type: "string" },
68
+ suffix: { type: "string" },
69
+ forbiddenPrefixes: import_utils.ARRAY_DEFAULT_OPTIONS,
70
+ forbiddenSuffixes: import_utils.ARRAY_DEFAULT_OPTIONS,
71
+ requiredPrefixes: import_utils.ARRAY_DEFAULT_OPTIONS,
72
+ requiredSuffixes: import_utils.ARRAY_DEFAULT_OPTIONS,
73
+ ignorePattern: {
74
+ type: "string",
75
+ description: "Option to skip validation of some words, e.g. acronyms"
76
+ }
77
+ }
78
+ }
79
+ },
80
+ type: "array",
81
+ maxItems: 1,
82
+ items: {
83
+ type: "object",
84
+ additionalProperties: false,
85
+ properties: {
86
+ types: {
87
+ ...schemaOption,
88
+ description: `Includes:
89
+ ${import_utils.TYPES_KINDS.map((kind) => `- \`${kind}\``).join("\n")}`
90
+ },
91
+ ...Object.fromEntries(
92
+ ALLOWED_KINDS.map((kind) => [
93
+ kind,
94
+ {
95
+ ...schemaOption,
96
+ description: `Read more about this kind on [spec.graphql.org](https://spec.graphql.org/October2021/#${kind}).`
97
+ }
98
+ ])
99
+ ),
100
+ allowLeadingUnderscore: {
101
+ type: "boolean",
102
+ default: false
103
+ },
104
+ allowTrailingUnderscore: {
105
+ type: "boolean",
106
+ default: false
107
+ }
108
+ },
109
+ patternProperties: {
110
+ [`^(${ALLOWED_KINDS.join("|")})(.+)?$`]: schemaOption
96
111
  },
112
+ description: [
113
+ "> It's possible to use a [`selector`](https://eslint.org/docs/developer-guide/selectors) that starts with allowed `ASTNode` names which are described below.",
114
+ ">",
115
+ "> Paste or drop code into the editor in [ASTExplorer](https://astexplorer.net) and inspect the generated AST to compose your selector.",
116
+ ">",
117
+ "> Example: pattern property `FieldDefinition[parent.name.value=Query]` will match only fields for type `Query`."
118
+ ].join("\n")
119
+ }
97
120
  };
98
- exports.rule = {
99
- meta: {
100
- type: 'suggestion',
101
- docs: {
102
- description: 'Require names to follow specified conventions.',
103
- category: ['Schema', 'Operations'],
104
- recommended: true,
105
- url: 'https://the-guild.dev/graphql/eslint/rules/naming-convention',
106
- examples: [
107
- {
108
- title: 'Incorrect',
109
- usage: [{ types: 'PascalCase', FieldDefinition: 'camelCase' }],
110
- code: /* GraphQL */ `
121
+ const rule = {
122
+ meta: {
123
+ type: "suggestion",
124
+ docs: {
125
+ description: "Require names to follow specified conventions.",
126
+ category: ["Schema", "Operations"],
127
+ recommended: true,
128
+ url: "https://the-guild.dev/graphql/eslint/rules/naming-convention",
129
+ examples: [
130
+ {
131
+ title: "Incorrect",
132
+ usage: [{ types: "PascalCase", FieldDefinition: "camelCase" }],
133
+ code: (
134
+ /* GraphQL */
135
+ `
111
136
  type user {
112
137
  first_name: String!
113
138
  }
114
- `,
115
- },
116
- {
117
- title: 'Incorrect',
118
- usage: [{ FragmentDefinition: { style: 'PascalCase', forbiddenSuffixes: ['Fragment'] } }],
119
- code: /* GraphQL */ `
139
+ `
140
+ )
141
+ },
142
+ {
143
+ title: "Incorrect",
144
+ usage: [{ FragmentDefinition: { style: "PascalCase", forbiddenSuffixes: ["Fragment"] } }],
145
+ code: (
146
+ /* GraphQL */
147
+ `
120
148
  fragment UserFragment on User {
121
149
  # ...
122
150
  }
123
- `,
124
- },
125
- {
126
- title: 'Incorrect',
127
- usage: [{ 'FieldDefinition[parent.name.value=Query]': { forbiddenPrefixes: ['get'] } }],
128
- code: /* GraphQL */ `
151
+ `
152
+ )
153
+ },
154
+ {
155
+ title: "Incorrect",
156
+ usage: [{ "FieldDefinition[parent.name.value=Query]": { forbiddenPrefixes: ["get"] } }],
157
+ code: (
158
+ /* GraphQL */
159
+ `
129
160
  type Query {
130
161
  getUsers: [User!]!
131
162
  }
132
- `,
133
- },
134
- {
135
- title: 'Correct',
136
- usage: [{ types: 'PascalCase', FieldDefinition: 'camelCase' }],
137
- code: /* GraphQL */ `
163
+ `
164
+ )
165
+ },
166
+ {
167
+ title: "Correct",
168
+ usage: [{ types: "PascalCase", FieldDefinition: "camelCase" }],
169
+ code: (
170
+ /* GraphQL */
171
+ `
138
172
  type User {
139
173
  firstName: String
140
174
  }
141
- `,
142
- },
143
- {
144
- title: 'Correct',
145
- usage: [{ FragmentDefinition: { style: 'PascalCase', forbiddenSuffixes: ['Fragment'] } }],
146
- code: /* GraphQL */ `
175
+ `
176
+ )
177
+ },
178
+ {
179
+ title: "Correct",
180
+ usage: [{ FragmentDefinition: { style: "PascalCase", forbiddenSuffixes: ["Fragment"] } }],
181
+ code: (
182
+ /* GraphQL */
183
+ `
147
184
  fragment UserFields on User {
148
185
  # ...
149
186
  }
150
- `,
151
- },
152
- {
153
- title: 'Correct',
154
- usage: [{ 'FieldDefinition[parent.name.value=Query]': { forbiddenPrefixes: ['get'] } }],
155
- code: /* GraphQL */ `
187
+ `
188
+ )
189
+ },
190
+ {
191
+ title: "Correct",
192
+ usage: [{ "FieldDefinition[parent.name.value=Query]": { forbiddenPrefixes: ["get"] } }],
193
+ code: (
194
+ /* GraphQL */
195
+ `
156
196
  type Query {
157
197
  users: [User!]!
158
198
  }
159
- `,
160
- },
161
- {
162
- title: 'Correct',
163
- usage: [{ FieldDefinition: { style: 'camelCase', ignorePattern: '^(EAN13|UPC|UK)' } }],
164
- code: /* GraphQL */ `
199
+ `
200
+ )
201
+ },
202
+ {
203
+ title: "Correct",
204
+ usage: [{ FieldDefinition: { style: "camelCase", ignorePattern: "^(EAN13|UPC|UK)" } }],
205
+ code: (
206
+ /* GraphQL */
207
+ `
165
208
  type Product {
166
209
  EAN13: String
167
210
  UPC: String
168
211
  UKFlag: String
169
212
  }
170
- `,
171
- },
172
- {
173
- title: 'Correct',
174
- usage: [
175
- {
176
- 'FieldDefinition[gqlType.name.value=Boolean]': {
177
- style: 'camelCase',
178
- requiredPrefixes: ['is', 'has'],
179
- },
180
- 'FieldDefinition[gqlType.gqlType.name.value=Boolean]': {
181
- style: 'camelCase',
182
- requiredPrefixes: ['is', 'has'],
183
- },
184
- },
185
- ],
186
- code: /* GraphQL */ `
213
+ `
214
+ )
215
+ },
216
+ {
217
+ title: "Correct",
218
+ usage: [
219
+ {
220
+ "FieldDefinition[gqlType.name.value=Boolean]": {
221
+ style: "camelCase",
222
+ requiredPrefixes: ["is", "has"]
223
+ },
224
+ "FieldDefinition[gqlType.gqlType.name.value=Boolean]": {
225
+ style: "camelCase",
226
+ requiredPrefixes: ["is", "has"]
227
+ }
228
+ }
229
+ ],
230
+ code: (
231
+ /* GraphQL */
232
+ `
187
233
  type Product {
188
234
  isBackordered: Boolean
189
235
  isNew: Boolean!
190
236
  hasDiscount: Boolean!
191
237
  }
192
- `,
193
- },
194
- {
195
- title: 'Correct',
196
- usage: [
197
- {
198
- 'FieldDefinition[gqlType.gqlType.name.value=SensitiveSecret]': {
199
- style: 'camelCase',
200
- requiredSuffixes: ['SensitiveSecret'],
201
- },
202
- },
203
- ],
204
- code: /* GraphQL */ `
238
+ `
239
+ )
240
+ },
241
+ {
242
+ title: "Correct",
243
+ usage: [
244
+ {
245
+ "FieldDefinition[gqlType.gqlType.name.value=SensitiveSecret]": {
246
+ style: "camelCase",
247
+ requiredSuffixes: ["SensitiveSecret"]
248
+ }
249
+ }
250
+ ],
251
+ code: (
252
+ /* GraphQL */
253
+ `
205
254
  scalar SensitiveSecret
206
255
 
207
256
  type Account {
208
257
  accountSensitiveSecret: SensitiveSecret!
209
258
  }
210
- `,
211
- },
212
- ],
213
- configOptions: {
214
- schema: [
215
- {
216
- types: 'PascalCase',
217
- FieldDefinition: 'camelCase',
218
- InputValueDefinition: 'camelCase',
219
- Argument: 'camelCase',
220
- DirectiveDefinition: 'camelCase',
221
- EnumValueDefinition: 'UPPER_CASE',
222
- 'FieldDefinition[parent.name.value=Query]': {
223
- forbiddenPrefixes: ['query', 'get'],
224
- forbiddenSuffixes: ['Query'],
225
- },
226
- 'FieldDefinition[parent.name.value=Mutation]': {
227
- forbiddenPrefixes: ['mutation'],
228
- forbiddenSuffixes: ['Mutation'],
229
- },
230
- 'FieldDefinition[parent.name.value=Subscription]': {
231
- forbiddenPrefixes: ['subscription'],
232
- forbiddenSuffixes: ['Subscription'],
233
- },
234
- },
235
- ],
236
- operations: [
237
- {
238
- VariableDefinition: 'camelCase',
239
- OperationDefinition: {
240
- style: 'PascalCase',
241
- forbiddenPrefixes: ['Query', 'Mutation', 'Subscription', 'Get'],
242
- forbiddenSuffixes: ['Query', 'Mutation', 'Subscription'],
243
- },
244
- FragmentDefinition: {
245
- style: 'PascalCase',
246
- forbiddenPrefixes: ['Fragment'],
247
- forbiddenSuffixes: ['Fragment'],
248
- },
249
- },
250
- ],
259
+ `
260
+ )
261
+ }
262
+ ],
263
+ configOptions: {
264
+ schema: [
265
+ {
266
+ types: "PascalCase",
267
+ FieldDefinition: "camelCase",
268
+ InputValueDefinition: "camelCase",
269
+ Argument: "camelCase",
270
+ DirectiveDefinition: "camelCase",
271
+ EnumValueDefinition: "UPPER_CASE",
272
+ "FieldDefinition[parent.name.value=Query]": {
273
+ forbiddenPrefixes: ["query", "get"],
274
+ forbiddenSuffixes: ["Query"]
251
275
  },
252
- },
253
- hasSuggestions: true,
254
- schema,
276
+ "FieldDefinition[parent.name.value=Mutation]": {
277
+ forbiddenPrefixes: ["mutation"],
278
+ forbiddenSuffixes: ["Mutation"]
279
+ },
280
+ "FieldDefinition[parent.name.value=Subscription]": {
281
+ forbiddenPrefixes: ["subscription"],
282
+ forbiddenSuffixes: ["Subscription"]
283
+ }
284
+ }
285
+ ],
286
+ operations: [
287
+ {
288
+ VariableDefinition: "camelCase",
289
+ OperationDefinition: {
290
+ style: "PascalCase",
291
+ forbiddenPrefixes: ["Query", "Mutation", "Subscription", "Get"],
292
+ forbiddenSuffixes: ["Query", "Mutation", "Subscription"]
293
+ },
294
+ FragmentDefinition: {
295
+ style: "PascalCase",
296
+ forbiddenPrefixes: ["Fragment"],
297
+ forbiddenSuffixes: ["Fragment"]
298
+ }
299
+ }
300
+ ]
301
+ }
255
302
  },
256
- create(context) {
257
- const options = context.options[0] || {};
258
- const { allowLeadingUnderscore, allowTrailingUnderscore, types, ...restOptions } = options;
259
- function normalisePropertyOption(kind) {
260
- const style = (restOptions[kind] || types);
261
- return typeof style === 'object' ? style : { style };
303
+ hasSuggestions: true,
304
+ schema
305
+ },
306
+ create(context) {
307
+ const options = context.options[0] || {};
308
+ const { allowLeadingUnderscore, allowTrailingUnderscore, types, ...restOptions } = options;
309
+ function normalisePropertyOption(kind) {
310
+ const style = restOptions[kind] || types;
311
+ return typeof style === "object" ? style : { style };
312
+ }
313
+ function report(node, message, suggestedNames) {
314
+ context.report({
315
+ node,
316
+ message,
317
+ suggest: suggestedNames.map((suggestedName) => ({
318
+ desc: `Rename to \`${suggestedName}\``,
319
+ fix: (fixer) => fixer.replaceText(node, suggestedName)
320
+ }))
321
+ });
322
+ }
323
+ const checkNode = (selector) => (n) => {
324
+ const { name: node } = n.kind === import_graphql.Kind.VARIABLE_DEFINITION ? n.variable : n;
325
+ if (!node) {
326
+ return;
327
+ }
328
+ const {
329
+ prefix,
330
+ suffix,
331
+ forbiddenPrefixes,
332
+ forbiddenSuffixes,
333
+ style,
334
+ ignorePattern,
335
+ requiredPrefixes,
336
+ requiredSuffixes
337
+ } = normalisePropertyOption(selector);
338
+ const nodeType = KindToDisplayName[n.kind] || n.kind;
339
+ const nodeName = node.value;
340
+ const error = getError();
341
+ if (error) {
342
+ const { errorMessage, renameToNames } = error;
343
+ const [leadingUnderscores] = nodeName.match(/^_*/);
344
+ const [trailingUnderscores] = nodeName.match(/_*$/);
345
+ const suggestedNames = renameToNames.map(
346
+ (renameToName) => leadingUnderscores + renameToName + trailingUnderscores
347
+ );
348
+ report(node, `${nodeType} "${nodeName}" should ${errorMessage}`, suggestedNames);
349
+ }
350
+ function getError() {
351
+ const name = nodeName.replace(/(^_+)|(_+$)/g, "");
352
+ if (ignorePattern && new RegExp(ignorePattern, "u").test(name)) {
353
+ return;
262
354
  }
263
- function report(node, message, suggestedNames) {
264
- context.report({
265
- node,
266
- message,
267
- suggest: suggestedNames.map(suggestedName => ({
268
- desc: `Rename to \`${suggestedName}\``,
269
- fix: fixer => fixer.replaceText(node, suggestedName),
270
- })),
271
- });
355
+ if (prefix && !name.startsWith(prefix)) {
356
+ return {
357
+ errorMessage: `have "${prefix}" prefix`,
358
+ renameToNames: [prefix + name]
359
+ };
272
360
  }
273
- const checkNode = (selector) => (n) => {
274
- const { name: node } = n.kind === graphql_1.Kind.VARIABLE_DEFINITION ? n.variable : n;
275
- if (!node) {
276
- return;
277
- }
278
- const { prefix, suffix, forbiddenPrefixes, forbiddenSuffixes, style, ignorePattern, requiredPrefixes, requiredSuffixes, } = normalisePropertyOption(selector);
279
- const nodeType = KindToDisplayName[n.kind] || n.kind;
280
- const nodeName = node.value;
281
- const error = getError();
282
- if (error) {
283
- const { errorMessage, renameToNames } = error;
284
- const [leadingUnderscores] = nodeName.match(/^_*/);
285
- const [trailingUnderscores] = nodeName.match(/_*$/);
286
- const suggestedNames = renameToNames.map(renameToName => leadingUnderscores + renameToName + trailingUnderscores);
287
- report(node, `${nodeType} "${nodeName}" should ${errorMessage}`, suggestedNames);
288
- }
289
- function getError() {
290
- const name = nodeName.replace(/(^_+)|(_+$)/g, '');
291
- if (ignorePattern && new RegExp(ignorePattern, 'u').test(name)) {
292
- return;
293
- }
294
- if (prefix && !name.startsWith(prefix)) {
295
- return {
296
- errorMessage: `have "${prefix}" prefix`,
297
- renameToNames: [prefix + name],
298
- };
299
- }
300
- if (suffix && !name.endsWith(suffix)) {
301
- return {
302
- errorMessage: `have "${suffix}" suffix`,
303
- renameToNames: [name + suffix],
304
- };
305
- }
306
- const forbiddenPrefix = forbiddenPrefixes === null || forbiddenPrefixes === void 0 ? void 0 : forbiddenPrefixes.find(prefix => name.startsWith(prefix));
307
- if (forbiddenPrefix) {
308
- return {
309
- errorMessage: `not have "${forbiddenPrefix}" prefix`,
310
- renameToNames: [name.replace(new RegExp(`^${forbiddenPrefix}`), '')],
311
- };
312
- }
313
- const forbiddenSuffix = forbiddenSuffixes === null || forbiddenSuffixes === void 0 ? void 0 : forbiddenSuffixes.find(suffix => name.endsWith(suffix));
314
- if (forbiddenSuffix) {
315
- return {
316
- errorMessage: `not have "${forbiddenSuffix}" suffix`,
317
- renameToNames: [name.replace(new RegExp(`${forbiddenSuffix}$`), '')],
318
- };
319
- }
320
- if (requiredPrefixes &&
321
- !requiredPrefixes.some(requiredPrefix => name.startsWith(requiredPrefix))) {
322
- return {
323
- errorMessage: `have one of the following prefixes: ${(0, utils_js_1.englishJoinWords)(requiredPrefixes)}`,
324
- renameToNames: style
325
- ? requiredPrefixes.map(prefix => (0, utils_js_1.convertCase)(style, `${prefix} ${name}`))
326
- : requiredPrefixes.map(prefix => `${prefix}${name}`),
327
- };
328
- }
329
- if (requiredSuffixes &&
330
- !requiredSuffixes.some(requiredSuffix => name.endsWith(requiredSuffix))) {
331
- return {
332
- errorMessage: `have one of the following suffixes: ${(0, utils_js_1.englishJoinWords)(requiredSuffixes)}`,
333
- renameToNames: style
334
- ? requiredSuffixes.map(suffix => (0, utils_js_1.convertCase)(style, `${name} ${suffix}`))
335
- : requiredSuffixes.map(suffix => `${name}${suffix}`),
336
- };
337
- }
338
- // Style is optional
339
- if (!style) {
340
- return;
341
- }
342
- const caseRegex = StyleToRegex[style];
343
- if (!caseRegex.test(name)) {
344
- return {
345
- errorMessage: `be in ${style} format`,
346
- renameToNames: [(0, utils_js_1.convertCase)(style, name)],
347
- };
348
- }
349
- }
350
- };
351
- const checkUnderscore = (isLeading) => (node) => {
352
- const suggestedName = node.value.replace(isLeading ? /^_+/ : /_+$/, '');
353
- report(node, `${isLeading ? 'Leading' : 'Trailing'} underscores are not allowed`, [
354
- suggestedName,
355
- ]);
356
- };
357
- const listeners = {};
358
- if (!allowLeadingUnderscore) {
359
- listeners['Name[value=/^_/]:matches([parent.kind!=Field], [parent.kind=Field][parent.alias])'] = checkUnderscore(true);
361
+ if (suffix && !name.endsWith(suffix)) {
362
+ return {
363
+ errorMessage: `have "${suffix}" suffix`,
364
+ renameToNames: [name + suffix]
365
+ };
360
366
  }
361
- if (!allowTrailingUnderscore) {
362
- listeners['Name[value=/_$/]:matches([parent.kind!=Field], [parent.kind=Field][parent.alias])'] = checkUnderscore(false);
367
+ const forbiddenPrefix = forbiddenPrefixes?.find((prefix2) => name.startsWith(prefix2));
368
+ if (forbiddenPrefix) {
369
+ return {
370
+ errorMessage: `not have "${forbiddenPrefix}" prefix`,
371
+ renameToNames: [name.replace(new RegExp(`^${forbiddenPrefix}`), "")]
372
+ };
363
373
  }
364
- const selectors = new Set([types && utils_js_1.TYPES_KINDS, Object.keys(restOptions)].flat().filter(utils_js_1.truthy));
365
- for (const selector of selectors) {
366
- listeners[selector] = checkNode(selector);
374
+ const forbiddenSuffix = forbiddenSuffixes?.find((suffix2) => name.endsWith(suffix2));
375
+ if (forbiddenSuffix) {
376
+ return {
377
+ errorMessage: `not have "${forbiddenSuffix}" suffix`,
378
+ renameToNames: [name.replace(new RegExp(`${forbiddenSuffix}$`), "")]
379
+ };
367
380
  }
368
- return listeners;
369
- },
381
+ if (requiredPrefixes && !requiredPrefixes.some((requiredPrefix) => name.startsWith(requiredPrefix))) {
382
+ return {
383
+ errorMessage: `have one of the following prefixes: ${(0, import_utils.englishJoinWords)(
384
+ requiredPrefixes
385
+ )}`,
386
+ renameToNames: style ? requiredPrefixes.map((prefix2) => (0, import_utils.convertCase)(style, `${prefix2} ${name}`)) : requiredPrefixes.map((prefix2) => `${prefix2}${name}`)
387
+ };
388
+ }
389
+ if (requiredSuffixes && !requiredSuffixes.some((requiredSuffix) => name.endsWith(requiredSuffix))) {
390
+ return {
391
+ errorMessage: `have one of the following suffixes: ${(0, import_utils.englishJoinWords)(
392
+ requiredSuffixes
393
+ )}`,
394
+ renameToNames: style ? requiredSuffixes.map((suffix2) => (0, import_utils.convertCase)(style, `${name} ${suffix2}`)) : requiredSuffixes.map((suffix2) => `${name}${suffix2}`)
395
+ };
396
+ }
397
+ if (!style) {
398
+ return;
399
+ }
400
+ const caseRegex = StyleToRegex[style];
401
+ if (!caseRegex.test(name)) {
402
+ return {
403
+ errorMessage: `be in ${style} format`,
404
+ renameToNames: [(0, import_utils.convertCase)(style, name)]
405
+ };
406
+ }
407
+ }
408
+ };
409
+ const checkUnderscore = (isLeading) => (node) => {
410
+ const suggestedName = node.value.replace(isLeading ? /^_+/ : /_+$/, "");
411
+ report(node, `${isLeading ? "Leading" : "Trailing"} underscores are not allowed`, [
412
+ suggestedName
413
+ ]);
414
+ };
415
+ const listeners = {};
416
+ if (!allowLeadingUnderscore) {
417
+ listeners["Name[value=/^_/]:matches([parent.kind!=Field], [parent.kind=Field][parent.alias])"] = checkUnderscore(true);
418
+ }
419
+ if (!allowTrailingUnderscore) {
420
+ listeners["Name[value=/_$/]:matches([parent.kind!=Field], [parent.kind=Field][parent.alias])"] = checkUnderscore(false);
421
+ }
422
+ const selectors = new Set(
423
+ [types && import_utils.TYPES_KINDS, Object.keys(restOptions)].flat().filter(import_utils.truthy)
424
+ );
425
+ for (const selector of selectors) {
426
+ listeners[selector] = checkNode(selector);
427
+ }
428
+ return listeners;
429
+ }
370
430
  };
431
+ // Annotate the CommonJS export names for ESM import in node:
432
+ 0 && (module.exports = {
433
+ rule
434
+ });