@graphql-eslint/eslint-plugin 4.0.0-alpha-20230801163310-8bc4340 → 4.0.0-alpha-20230810160036-304c2c0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (222) hide show
  1. package/README.md +2 -0
  2. package/cjs/cache.js +10 -19
  3. package/cjs/configs/index.d.ts +42 -16
  4. package/cjs/configs/index.js +10 -19
  5. package/cjs/configs/operations-all.d.ts +4 -3
  6. package/cjs/configs/operations-all.js +5 -4
  7. package/cjs/configs/operations-recommended.d.ts +3 -1
  8. package/cjs/configs/operations-recommended.js +3 -1
  9. package/cjs/configs/schema-all.d.ts +6 -1
  10. package/cjs/configs/schema-all.js +5 -2
  11. package/cjs/configs/schema-recommended.d.ts +19 -1
  12. package/cjs/configs/schema-recommended.js +22 -2
  13. package/cjs/documents.js +17 -32
  14. package/cjs/estree-converter/converter.js +14 -27
  15. package/cjs/estree-converter/index.js +4 -7
  16. package/cjs/estree-converter/types.js +3 -5
  17. package/cjs/estree-converter/utils.d.ts +2 -3
  18. package/cjs/estree-converter/utils.js +15 -45
  19. package/cjs/flat-configs.d.ts +59 -12
  20. package/cjs/flat-configs.js +9 -14
  21. package/cjs/graphql-config.d.ts +4 -3
  22. package/cjs/graphql-config.js +23 -44
  23. package/cjs/index.d.ts +10 -4
  24. package/cjs/index.js +8 -16
  25. package/cjs/parser.d.ts +4 -3
  26. package/cjs/parser.js +38 -45
  27. package/cjs/processor.d.ts +5 -1
  28. package/cjs/processor.js +25 -57
  29. package/cjs/rules/alphabetize.d.ts +6 -16
  30. package/cjs/rules/alphabetize.js +60 -132
  31. package/cjs/rules/description-style.d.ts +4 -3
  32. package/cjs/rules/description-style.js +11 -18
  33. package/cjs/rules/graphql-js-validation.d.ts +4 -3
  34. package/cjs/rules/graphql-js-validation.js +151 -225
  35. package/cjs/rules/index.d.ts +15 -13
  36. package/cjs/rules/index.js +8 -45
  37. package/cjs/rules/input-name.d.ts +4 -3
  38. package/cjs/rules/input-name.js +43 -59
  39. package/cjs/rules/lone-executable-definition.d.ts +6 -5
  40. package/cjs/rules/lone-executable-definition.js +14 -28
  41. package/cjs/rules/match-document-filename.d.ts +4 -3
  42. package/cjs/rules/match-document-filename.js +39 -70
  43. package/cjs/rules/naming-convention.d.ts +4 -3
  44. package/cjs/rules/naming-convention.js +56 -74
  45. package/cjs/rules/no-anonymous-operations.d.ts +4 -3
  46. package/cjs/rules/no-anonymous-operations.js +11 -18
  47. package/cjs/rules/no-deprecated.d.ts +4 -3
  48. package/cjs/rules/no-deprecated.js +15 -29
  49. package/cjs/rules/no-duplicate-fields.d.ts +4 -3
  50. package/cjs/rules/no-duplicate-fields.js +13 -23
  51. package/cjs/rules/no-hashtag-description.d.ts +4 -3
  52. package/cjs/rules/no-hashtag-description.js +16 -29
  53. package/cjs/rules/no-one-place-fragments.d.ts +4 -3
  54. package/cjs/rules/no-one-place-fragments.js +17 -29
  55. package/cjs/rules/no-root-type.d.ts +4 -3
  56. package/cjs/rules/no-root-type.js +15 -25
  57. package/cjs/rules/no-scalar-result-type-on-mutation.d.ts +4 -3
  58. package/cjs/rules/no-scalar-result-type-on-mutation.js +18 -30
  59. package/cjs/rules/no-typename-prefix.d.ts +4 -3
  60. package/cjs/rules/no-typename-prefix.js +26 -33
  61. package/cjs/rules/no-unreachable-types.d.ts +4 -3
  62. package/cjs/rules/no-unreachable-types.js +25 -47
  63. package/cjs/rules/no-unused-fields.d.ts +4 -3
  64. package/cjs/rules/no-unused-fields.js +24 -49
  65. package/cjs/rules/relay-arguments.d.ts +4 -3
  66. package/cjs/rules/relay-arguments.js +20 -43
  67. package/cjs/rules/relay-connection-types.d.ts +4 -3
  68. package/cjs/rules/relay-connection-types.js +14 -45
  69. package/cjs/rules/relay-edge-types.d.ts +4 -3
  70. package/cjs/rules/relay-edge-types.js +48 -99
  71. package/cjs/rules/relay-page-info.d.ts +4 -3
  72. package/cjs/rules/relay-page-info.js +21 -44
  73. package/cjs/rules/require-deprecation-date.d.ts +4 -3
  74. package/cjs/rules/require-deprecation-date.js +15 -31
  75. package/cjs/rules/require-deprecation-reason.d.ts +4 -3
  76. package/cjs/rules/require-deprecation-reason.js +12 -20
  77. package/cjs/rules/require-description.d.ts +4 -3
  78. package/cjs/rules/require-description.js +39 -65
  79. package/cjs/rules/require-field-of-type-query-in-mutation-result.d.ts +4 -3
  80. package/cjs/rules/require-field-of-type-query-in-mutation-result.js +16 -31
  81. package/cjs/rules/require-import-fragment.d.ts +4 -3
  82. package/cjs/rules/require-import-fragment.js +22 -40
  83. package/cjs/rules/require-nullable-fields-with-oneof.d.ts +4 -3
  84. package/cjs/rules/require-nullable-fields-with-oneof.js +11 -22
  85. package/cjs/rules/require-nullable-result-in-root.d.ts +4 -3
  86. package/cjs/rules/require-nullable-result-in-root.js +34 -44
  87. package/cjs/rules/{require-id-when-available.d.ts → require-selections.d.ts} +4 -3
  88. package/cjs/rules/require-selections.js +198 -0
  89. package/cjs/rules/require-type-pattern-with-oneof.d.ts +4 -3
  90. package/cjs/rules/require-type-pattern-with-oneof.js +15 -23
  91. package/cjs/rules/selection-set-depth.d.ts +4 -3
  92. package/cjs/rules/selection-set-depth.js +18 -34
  93. package/cjs/rules/strict-id-in-types.d.ts +4 -3
  94. package/cjs/rules/strict-id-in-types.js +25 -43
  95. package/cjs/rules/{no-case-insensitive-enum-values-duplicates.d.ts → unique-enum-value-names.d.ts} +4 -3
  96. package/cjs/rules/{no-case-insensitive-enum-values-duplicates.js → unique-enum-value-names.js} +16 -21
  97. package/cjs/rules/unique-fragment-name.d.ts +3 -2
  98. package/cjs/rules/unique-fragment-name.js +24 -36
  99. package/cjs/rules/unique-operation-name.d.ts +4 -3
  100. package/cjs/rules/unique-operation-name.js +10 -12
  101. package/cjs/schema.d.ts +4 -3
  102. package/cjs/schema.js +14 -27
  103. package/cjs/siblings.d.ts +24 -8
  104. package/cjs/siblings.js +42 -82
  105. package/cjs/types.d.ts +74 -7
  106. package/cjs/types.js +3 -5
  107. package/cjs/utils.d.ts +3 -2
  108. package/cjs/utils.js +27 -44
  109. package/esm/cache.js +4 -8
  110. package/esm/{chunk-BMTV3EA2.js → chunk-U3TKCM4X.js} +1 -1
  111. package/esm/configs/index.d.mts +42 -16
  112. package/esm/configs/index.js +4 -4
  113. package/esm/configs/operations-all.d.mts +4 -3
  114. package/esm/configs/operations-all.js +6 -5
  115. package/esm/configs/operations-recommended.d.mts +3 -1
  116. package/esm/configs/operations-recommended.js +4 -2
  117. package/esm/configs/schema-all.d.mts +6 -1
  118. package/esm/configs/schema-all.js +6 -3
  119. package/esm/configs/schema-recommended.d.mts +19 -1
  120. package/esm/configs/schema-recommended.js +23 -3
  121. package/esm/configs/{relay.js → schema-relay.js} +4 -4
  122. package/esm/documents.js +10 -17
  123. package/esm/estree-converter/converter.js +9 -18
  124. package/esm/estree-converter/utils.d.mts +2 -3
  125. package/esm/estree-converter/utils.js +11 -38
  126. package/esm/flat-configs.d.mts +59 -12
  127. package/esm/flat-configs.js +4 -5
  128. package/esm/graphql-config.d.mts +4 -3
  129. package/esm/graphql-config.js +18 -34
  130. package/esm/index.d.mts +10 -4
  131. package/esm/index.js +1 -1
  132. package/esm/parser.d.mts +4 -3
  133. package/esm/parser.js +33 -27
  134. package/esm/processor.d.mts +5 -1
  135. package/esm/processor.js +21 -46
  136. package/esm/rules/alphabetize.d.mts +6 -16
  137. package/esm/rules/alphabetize.js +53 -118
  138. package/esm/rules/description-style.d.mts +4 -3
  139. package/esm/rules/description-style.js +7 -11
  140. package/esm/rules/graphql-js-validation.d.mts +4 -3
  141. package/esm/rules/graphql-js-validation.js +178 -218
  142. package/esm/rules/index.d.mts +15 -13
  143. package/esm/rules/index.js +5 -5
  144. package/esm/rules/input-name.d.mts +4 -3
  145. package/esm/rules/input-name.js +39 -52
  146. package/esm/rules/lone-executable-definition.d.mts +6 -5
  147. package/esm/rules/lone-executable-definition.js +10 -20
  148. package/esm/rules/match-document-filename.d.mts +4 -3
  149. package/esm/rules/match-document-filename.js +35 -61
  150. package/esm/rules/naming-convention.d.mts +4 -3
  151. package/esm/rules/naming-convention.js +51 -65
  152. package/esm/rules/no-anonymous-operations.d.mts +4 -3
  153. package/esm/rules/no-anonymous-operations.js +6 -9
  154. package/esm/rules/no-deprecated.d.mts +4 -3
  155. package/esm/rules/no-deprecated.js +10 -20
  156. package/esm/rules/no-duplicate-fields.d.mts +4 -3
  157. package/esm/rules/no-duplicate-fields.js +9 -16
  158. package/esm/rules/no-hashtag-description.d.mts +4 -3
  159. package/esm/rules/no-hashtag-description.js +11 -20
  160. package/esm/rules/no-one-place-fragments.d.mts +4 -3
  161. package/esm/rules/no-one-place-fragments.js +12 -19
  162. package/esm/rules/no-root-type.d.mts +4 -3
  163. package/esm/rules/no-root-type.js +11 -18
  164. package/esm/rules/no-scalar-result-type-on-mutation.d.mts +4 -3
  165. package/esm/rules/no-scalar-result-type-on-mutation.js +13 -21
  166. package/esm/rules/no-typename-prefix.d.mts +4 -3
  167. package/esm/rules/no-typename-prefix.js +22 -26
  168. package/esm/rules/no-unreachable-types.d.mts +4 -3
  169. package/esm/rules/no-unreachable-types.js +18 -33
  170. package/esm/rules/no-unused-fields.d.mts +4 -3
  171. package/esm/rules/no-unused-fields.js +19 -40
  172. package/esm/rules/relay-arguments.d.mts +4 -3
  173. package/esm/rules/relay-arguments.js +15 -34
  174. package/esm/rules/relay-connection-types.d.mts +4 -3
  175. package/esm/rules/relay-connection-types.js +10 -38
  176. package/esm/rules/relay-edge-types.d.mts +4 -3
  177. package/esm/rules/relay-edge-types.js +43 -89
  178. package/esm/rules/relay-page-info.d.mts +4 -3
  179. package/esm/rules/relay-page-info.js +16 -34
  180. package/esm/rules/require-deprecation-date.d.mts +4 -3
  181. package/esm/rules/require-deprecation-date.js +10 -22
  182. package/esm/rules/require-deprecation-reason.d.mts +4 -3
  183. package/esm/rules/require-deprecation-reason.js +7 -11
  184. package/esm/rules/require-description.d.mts +4 -3
  185. package/esm/rules/require-description.js +34 -55
  186. package/esm/rules/require-field-of-type-query-in-mutation-result.d.mts +4 -3
  187. package/esm/rules/require-field-of-type-query-in-mutation-result.js +11 -22
  188. package/esm/rules/require-import-fragment.d.mts +4 -3
  189. package/esm/rules/require-import-fragment.js +14 -26
  190. package/esm/rules/require-nullable-fields-with-oneof.d.mts +4 -3
  191. package/esm/rules/require-nullable-fields-with-oneof.js +6 -13
  192. package/esm/rules/require-nullable-result-in-root.d.mts +4 -3
  193. package/esm/rules/require-nullable-result-in-root.js +29 -35
  194. package/esm/rules/{require-id-when-available.d.mts → require-selections.d.mts} +4 -3
  195. package/esm/rules/{require-id-when-available.js → require-selections.js} +43 -80
  196. package/esm/rules/require-type-pattern-with-oneof.d.mts +4 -3
  197. package/esm/rules/require-type-pattern-with-oneof.js +11 -16
  198. package/esm/rules/selection-set-depth.d.mts +4 -3
  199. package/esm/rules/selection-set-depth.js +11 -20
  200. package/esm/rules/strict-id-in-types.d.mts +4 -3
  201. package/esm/rules/strict-id-in-types.js +20 -34
  202. package/esm/rules/{no-case-insensitive-enum-values-duplicates.d.mts → unique-enum-value-names.d.mts} +4 -3
  203. package/esm/rules/{no-case-insensitive-enum-values-duplicates.js → unique-enum-value-names.js} +8 -9
  204. package/esm/rules/unique-fragment-name.d.mts +3 -2
  205. package/esm/rules/unique-fragment-name.js +20 -27
  206. package/esm/rules/unique-operation-name.d.mts +4 -3
  207. package/esm/rules/unique-operation-name.js +6 -5
  208. package/esm/schema.d.mts +4 -3
  209. package/esm/schema.js +7 -12
  210. package/esm/siblings.d.mts +24 -8
  211. package/esm/siblings.js +37 -73
  212. package/esm/types.d.mts +74 -7
  213. package/esm/utils.d.mts +3 -2
  214. package/esm/utils.js +20 -31
  215. package/index.browser.mjs +5323 -0
  216. package/package.json +8 -13
  217. package/cjs/rules/require-id-when-available.js +0 -241
  218. package/cjs/types-8d5f4ae0.d.ts +0 -107
  219. package/esm/types-ace77d86.d.ts +0 -107
  220. /package/cjs/configs/{relay.d.ts → schema-relay.d.ts} +0 -0
  221. /package/cjs/configs/{relay.js → schema-relay.js} +0 -0
  222. /package/esm/configs/{relay.d.mts → schema-relay.d.mts} +0 -0
@@ -1,4 +1,4 @@
1
- import "../chunk-BMTV3EA2.js";
1
+ import "../chunk-U3TKCM4X.js";
2
2
  import { Kind } from "graphql";
3
3
  import {
4
4
  ARRAY_DEFAULT_OPTIONS,
@@ -25,19 +25,14 @@ const KindToDisplayName = {
25
25
  [Kind.OPERATION_DEFINITION]: "Operation",
26
26
  [Kind.FRAGMENT_DEFINITION]: "Fragment",
27
27
  [Kind.VARIABLE_DEFINITION]: "Variable"
28
- };
29
- const StyleToRegex = {
28
+ }, StyleToRegex = {
30
29
  camelCase: /^[a-z][\dA-Za-z]*$/,
31
30
  PascalCase: /^[A-Z][\dA-Za-z]*$/,
32
31
  snake_case: /^[a-z][\d_a-z]*[\da-z]*$/,
33
32
  UPPER_CASE: /^[A-Z][\dA-Z_]*[\dA-Z]*$/
34
- };
35
- const ALLOWED_KINDS = Object.keys(KindToDisplayName).sort();
36
- const ALLOWED_STYLES = Object.keys(StyleToRegex);
37
- const schemaOption = {
33
+ }, ALLOWED_KINDS = Object.keys(KindToDisplayName).sort(), ALLOWED_STYLES = Object.keys(StyleToRegex), schemaOption = {
38
34
  oneOf: [{ $ref: "#/definitions/asString" }, { $ref: "#/definitions/asObject" }]
39
- };
40
- const schema = {
35
+ }, schema = {
41
36
  definitions: {
42
37
  asString: {
43
38
  enum: ALLOWED_STYLES,
@@ -45,7 +40,7 @@ const schema = {
45
40
  },
46
41
  asObject: {
47
42
  type: "object",
48
- additionalProperties: false,
43
+ additionalProperties: !1,
49
44
  properties: {
50
45
  style: { enum: ALLOWED_STYLES },
51
46
  prefix: { type: "string" },
@@ -65,12 +60,13 @@ const schema = {
65
60
  maxItems: 1,
66
61
  items: {
67
62
  type: "object",
68
- additionalProperties: false,
63
+ additionalProperties: !1,
69
64
  properties: {
70
65
  types: {
71
66
  ...schemaOption,
72
67
  description: `Includes:
73
- ${TYPES_KINDS.map((kind) => `- \`${kind}\``).join("\n")}`
68
+ ${TYPES_KINDS.map((kind) => `- \`${kind}\``).join(`
69
+ `)}`
74
70
  },
75
71
  ...Object.fromEntries(
76
72
  ALLOWED_KINDS.map((kind) => [
@@ -83,11 +79,11 @@ ${TYPES_KINDS.map((kind) => `- \`${kind}\``).join("\n")}`
83
79
  ),
84
80
  allowLeadingUnderscore: {
85
81
  type: "boolean",
86
- default: false
82
+ default: !1
87
83
  },
88
84
  allowTrailingUnderscore: {
89
85
  type: "boolean",
90
- default: false
86
+ default: !1
91
87
  }
92
88
  },
93
89
  patternProperties: {
@@ -99,16 +95,16 @@ ${TYPES_KINDS.map((kind) => `- \`${kind}\``).join("\n")}`
99
95
  "> Paste or drop code into the editor in [ASTExplorer](https://astexplorer.net) and inspect the generated AST to compose your selector.",
100
96
  ">",
101
97
  "> Example: pattern property `FieldDefinition[parent.name.value=Query]` will match only fields for type `Query`."
102
- ].join("\n")
98
+ ].join(`
99
+ `)
103
100
  }
104
- };
105
- const rule = {
101
+ }, rule = {
106
102
  meta: {
107
103
  type: "suggestion",
108
104
  docs: {
109
105
  description: "Require names to follow specified conventions.",
110
106
  category: ["Schema", "Operations"],
111
- recommended: true,
107
+ recommended: !0,
112
108
  url: "https://the-guild.dev/graphql/eslint/rules/naming-convention",
113
109
  examples: [
114
110
  {
@@ -264,6 +260,22 @@ const rule = {
264
260
  "FieldDefinition[parent.name.value=Subscription]": {
265
261
  forbiddenPrefixes: ["subscription"],
266
262
  forbiddenSuffixes: ["Subscription"]
263
+ },
264
+ "EnumTypeDefinition,EnumTypeExtension": {
265
+ forbiddenPrefixes: ["Enum"],
266
+ forbiddenSuffixes: ["Enum"]
267
+ },
268
+ "InterfaceTypeDefinition,InterfaceTypeExtension": {
269
+ forbiddenPrefixes: ["Interface"],
270
+ forbiddenSuffixes: ["Interface"]
271
+ },
272
+ "UnionTypeDefinition,UnionTypeExtension": {
273
+ forbiddenPrefixes: ["Union"],
274
+ forbiddenSuffixes: ["Union"]
275
+ },
276
+ "ObjectTypeDefinition,ObjectTypeExtension": {
277
+ forbiddenPrefixes: ["Type"],
278
+ forbiddenSuffixes: ["Type"]
267
279
  }
268
280
  }
269
281
  ],
@@ -284,15 +296,14 @@ const rule = {
284
296
  ]
285
297
  }
286
298
  },
287
- hasSuggestions: true,
299
+ hasSuggestions: !0,
288
300
  schema
289
301
  },
290
302
  create(context) {
291
- const options = context.options[0] || {};
292
- const { allowLeadingUnderscore, allowTrailingUnderscore, types, ...restOptions } = options;
303
+ const options = context.options[0] || {}, { allowLeadingUnderscore, allowTrailingUnderscore, types, ...restOptions } = options;
293
304
  function normalisePropertyOption(kind) {
294
305
  const style = restOptions[kind] || types;
295
- return typeof style === "object" ? style : { style };
306
+ return typeof style == "object" ? style : { style };
296
307
  }
297
308
  function report(node, message, suggestedNames) {
298
309
  context.report({
@@ -306,9 +317,8 @@ const rule = {
306
317
  }
307
318
  const checkNode = (selector) => (n) => {
308
319
  const { name: node } = n.kind === Kind.VARIABLE_DEFINITION ? n.variable : n;
309
- if (!node) {
320
+ if (!node)
310
321
  return;
311
- }
312
322
  const {
313
323
  prefix,
314
324
  suffix,
@@ -318,97 +328,73 @@ const rule = {
318
328
  ignorePattern,
319
329
  requiredPrefixes,
320
330
  requiredSuffixes
321
- } = normalisePropertyOption(selector);
322
- const nodeType = KindToDisplayName[n.kind] || n.kind;
323
- const nodeName = node.value;
324
- const error = getError();
331
+ } = normalisePropertyOption(selector), nodeType = KindToDisplayName[n.kind] || n.kind, nodeName = node.value, error = getError();
325
332
  if (error) {
326
- const { errorMessage, renameToNames } = error;
327
- const [leadingUnderscores] = nodeName.match(/^_*/);
328
- const [trailingUnderscores] = nodeName.match(/_*$/);
329
- const suggestedNames = renameToNames.map(
333
+ const { errorMessage, renameToNames } = error, [leadingUnderscores] = nodeName.match(/^_*/), [trailingUnderscores] = nodeName.match(/_*$/), suggestedNames = renameToNames.map(
330
334
  (renameToName) => leadingUnderscores + renameToName + trailingUnderscores
331
335
  );
332
336
  report(node, `${nodeType} "${nodeName}" should ${errorMessage}`, suggestedNames);
333
337
  }
334
338
  function getError() {
335
339
  const name = nodeName.replace(/(^_+)|(_+$)/g, "");
336
- if (ignorePattern && new RegExp(ignorePattern, "u").test(name)) {
340
+ if (ignorePattern && new RegExp(ignorePattern, "u").test(name))
337
341
  return;
338
- }
339
- if (prefix && !name.startsWith(prefix)) {
342
+ if (prefix && !name.startsWith(prefix))
340
343
  return {
341
344
  errorMessage: `have "${prefix}" prefix`,
342
345
  renameToNames: [prefix + name]
343
346
  };
344
- }
345
- if (suffix && !name.endsWith(suffix)) {
347
+ if (suffix && !name.endsWith(suffix))
346
348
  return {
347
349
  errorMessage: `have "${suffix}" suffix`,
348
350
  renameToNames: [name + suffix]
349
351
  };
350
- }
351
- const forbiddenPrefix = forbiddenPrefixes == null ? void 0 : forbiddenPrefixes.find((prefix2) => name.startsWith(prefix2));
352
- if (forbiddenPrefix) {
352
+ const forbiddenPrefix = forbiddenPrefixes?.find((prefix2) => name.startsWith(prefix2));
353
+ if (forbiddenPrefix)
353
354
  return {
354
355
  errorMessage: `not have "${forbiddenPrefix}" prefix`,
355
356
  renameToNames: [name.replace(new RegExp(`^${forbiddenPrefix}`), "")]
356
357
  };
357
- }
358
- const forbiddenSuffix = forbiddenSuffixes == null ? void 0 : forbiddenSuffixes.find((suffix2) => name.endsWith(suffix2));
359
- if (forbiddenSuffix) {
358
+ const forbiddenSuffix = forbiddenSuffixes?.find((suffix2) => name.endsWith(suffix2));
359
+ if (forbiddenSuffix)
360
360
  return {
361
361
  errorMessage: `not have "${forbiddenSuffix}" suffix`,
362
362
  renameToNames: [name.replace(new RegExp(`${forbiddenSuffix}$`), "")]
363
363
  };
364
- }
365
- if (requiredPrefixes && !requiredPrefixes.some((requiredPrefix) => name.startsWith(requiredPrefix))) {
364
+ if (requiredPrefixes && !requiredPrefixes.some((requiredPrefix) => name.startsWith(requiredPrefix)))
366
365
  return {
367
366
  errorMessage: `have one of the following prefixes: ${englishJoinWords(
368
367
  requiredPrefixes
369
368
  )}`,
370
369
  renameToNames: style ? requiredPrefixes.map((prefix2) => convertCase(style, `${prefix2} ${name}`)) : requiredPrefixes.map((prefix2) => `${prefix2}${name}`)
371
370
  };
372
- }
373
- if (requiredSuffixes && !requiredSuffixes.some((requiredSuffix) => name.endsWith(requiredSuffix))) {
371
+ if (requiredSuffixes && !requiredSuffixes.some((requiredSuffix) => name.endsWith(requiredSuffix)))
374
372
  return {
375
373
  errorMessage: `have one of the following suffixes: ${englishJoinWords(
376
374
  requiredSuffixes
377
375
  )}`,
378
376
  renameToNames: style ? requiredSuffixes.map((suffix2) => convertCase(style, `${name} ${suffix2}`)) : requiredSuffixes.map((suffix2) => `${name}${suffix2}`)
379
377
  };
380
- }
381
- if (!style) {
378
+ if (!style)
382
379
  return;
383
- }
384
- const caseRegex = StyleToRegex[style];
385
- if (!caseRegex.test(name)) {
380
+ if (!StyleToRegex[style].test(name))
386
381
  return {
387
382
  errorMessage: `be in ${style} format`,
388
383
  renameToNames: [convertCase(style, name)]
389
384
  };
390
- }
391
385
  }
392
- };
393
- const checkUnderscore = (isLeading) => (node) => {
386
+ }, checkUnderscore = (isLeading) => (node) => {
394
387
  const suggestedName = node.value.replace(isLeading ? /^_+/ : /_+$/, "");
395
388
  report(node, `${isLeading ? "Leading" : "Trailing"} underscores are not allowed`, [
396
389
  suggestedName
397
390
  ]);
398
- };
399
- const listeners = {};
400
- if (!allowLeadingUnderscore) {
401
- listeners["Name[value=/^_/]:matches([parent.kind!=Field], [parent.kind=Field][parent.alias])"] = checkUnderscore(true);
402
- }
403
- if (!allowTrailingUnderscore) {
404
- listeners["Name[value=/_$/]:matches([parent.kind!=Field], [parent.kind=Field][parent.alias])"] = checkUnderscore(false);
405
- }
391
+ }, listeners = {};
392
+ allowLeadingUnderscore || (listeners["Name[value=/^_/]:matches([parent.kind!=Field], [parent.kind=Field][parent.alias])"] = checkUnderscore(!0)), allowTrailingUnderscore || (listeners["Name[value=/_$/]:matches([parent.kind!=Field], [parent.kind=Field][parent.alias])"] = checkUnderscore(!1));
406
393
  const selectors = new Set(
407
394
  [types && TYPES_KINDS, Object.keys(restOptions)].flat().filter(truthy)
408
395
  );
409
- for (const selector of selectors) {
396
+ for (const selector of selectors)
410
397
  listeners[selector] = checkNode(selector);
411
- }
412
398
  return listeners;
413
399
  }
414
400
  };
@@ -1,11 +1,12 @@
1
- import { f as GraphQLESLintRule } from '../types-ace77d86.js';
2
- import '@graphql-tools/utils';
1
+ import { GraphQLESLintRule } from '../types.mjs';
3
2
  import 'eslint';
4
3
  import 'estree';
5
4
  import 'graphql';
6
- import 'graphql-config';
7
5
  import 'json-schema-to-ts';
6
+ import '../siblings.mjs';
7
+ import '@graphql-tools/utils';
8
8
  import '../estree-converter/types.mjs';
9
+ import 'graphql-config';
9
10
 
10
11
  declare const rule: GraphQLESLintRule;
11
12
 
@@ -1,15 +1,14 @@
1
- import "../chunk-BMTV3EA2.js";
1
+ import "../chunk-U3TKCM4X.js";
2
2
  import { Kind } from "graphql";
3
3
  import { getLocation } from "../utils.js";
4
- const RULE_ID = "no-anonymous-operations";
5
- const rule = {
4
+ const RULE_ID = "no-anonymous-operations", rule = {
6
5
  meta: {
7
6
  type: "suggestion",
8
- hasSuggestions: true,
7
+ hasSuggestions: !0,
9
8
  docs: {
10
9
  category: "Operations",
11
10
  description: "Require name for your GraphQL operations. This is useful since most GraphQL client libraries are using the operation name for caching purposes.",
12
- recommended: true,
11
+ recommended: !0,
13
12
  url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
14
13
  examples: [
15
14
  {
@@ -44,8 +43,7 @@ const rule = {
44
43
  create(context) {
45
44
  return {
46
45
  "OperationDefinition[name=undefined]"(node) {
47
- const [firstSelection] = node.selectionSet.selections;
48
- const suggestedName = firstSelection.kind === Kind.FIELD ? (firstSelection.alias || firstSelection.name).value : node.operation;
46
+ const [firstSelection] = node.selectionSet.selections, suggestedName = firstSelection.kind === Kind.FIELD ? (firstSelection.alias || firstSelection.name).value : node.operation;
49
47
  context.report({
50
48
  loc: getLocation(node.loc.start, node.operation),
51
49
  messageId: RULE_ID,
@@ -56,8 +54,7 @@ const rule = {
56
54
  {
57
55
  desc: `Rename to \`${suggestedName}\``,
58
56
  fix(fixer) {
59
- const sourceCode = context.getSourceCode();
60
- const hasQueryKeyword = sourceCode.getText({ range: [node.range[0], node.range[0] + 1] }) !== "{";
57
+ const hasQueryKeyword = context.getSourceCode().getText({ range: [node.range[0], node.range[0] + 1] }) !== "{";
61
58
  return fixer.insertTextAfterRange(
62
59
  [node.range[0], node.range[0] + (hasQueryKeyword ? node.operation.length : 0)],
63
60
  `${hasQueryKeyword ? "" : "query"} ${suggestedName}${hasQueryKeyword ? "" : " "}`
@@ -1,11 +1,12 @@
1
- import { f as GraphQLESLintRule } from '../types-ace77d86.js';
2
- import '@graphql-tools/utils';
1
+ import { GraphQLESLintRule } from '../types.mjs';
3
2
  import 'eslint';
4
3
  import 'estree';
5
4
  import 'graphql';
6
- import 'graphql-config';
7
5
  import 'json-schema-to-ts';
6
+ import '../siblings.mjs';
7
+ import '@graphql-tools/utils';
8
8
  import '../estree-converter/types.mjs';
9
+ import 'graphql-config';
9
10
 
10
11
  declare const rule: GraphQLESLintRule<[], true>;
11
12
 
@@ -1,16 +1,15 @@
1
- import "../chunk-BMTV3EA2.js";
1
+ import "../chunk-U3TKCM4X.js";
2
2
  import { Kind } from "graphql";
3
3
  import { requireGraphQLSchemaFromContext } from "../utils.js";
4
- const RULE_ID = "no-deprecated";
5
- const rule = {
4
+ const RULE_ID = "no-deprecated", rule = {
6
5
  meta: {
7
6
  type: "suggestion",
8
- hasSuggestions: true,
7
+ hasSuggestions: !0,
9
8
  docs: {
10
9
  category: "Operations",
11
10
  description: "Enforce that deprecated fields or enum values are not in use by operations.",
12
11
  url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
13
- requiresSchema: true,
12
+ requiresSchema: !0,
14
13
  examples: [
15
14
  {
16
15
  title: "Incorrect (field)",
@@ -82,7 +81,7 @@ const rule = {
82
81
  )
83
82
  }
84
83
  ],
85
- recommended: true
84
+ recommended: !0
86
85
  },
87
86
  messages: {
88
87
  [RULE_ID]: "This {{ type }} is marked as deprecated in your GraphQL schema (reason: {{ reason }})"
@@ -92,8 +91,7 @@ const rule = {
92
91
  create(context) {
93
92
  requireGraphQLSchemaFromContext(RULE_ID, context);
94
93
  function report(node, reason) {
95
- const nodeName = node.kind === Kind.ENUM ? node.value : node.name.value;
96
- const nodeType = node.kind === Kind.ENUM ? "enum value" : "field";
94
+ const nodeName = node.kind === Kind.ENUM ? node.value : node.name.value, nodeType = node.kind === Kind.ENUM ? "enum value" : "field";
97
95
  context.report({
98
96
  node,
99
97
  messageId: RULE_ID,
@@ -111,20 +109,12 @@ const rule = {
111
109
  }
112
110
  return {
113
111
  EnumValue(node) {
114
- var _a;
115
- const typeInfo = node.typeInfo();
116
- const reason = (_a = typeInfo.enumValue) == null ? void 0 : _a.deprecationReason;
117
- if (reason) {
118
- report(node, reason);
119
- }
112
+ const reason = node.typeInfo().enumValue?.deprecationReason;
113
+ reason && report(node, reason);
120
114
  },
121
115
  Field(node) {
122
- var _a;
123
- const typeInfo = node.typeInfo();
124
- const reason = (_a = typeInfo.fieldDef) == null ? void 0 : _a.deprecationReason;
125
- if (reason) {
126
- report(node, reason);
127
- }
116
+ const reason = node.typeInfo().fieldDef?.deprecationReason;
117
+ reason && report(node, reason);
128
118
  }
129
119
  };
130
120
  }
@@ -1,11 +1,12 @@
1
- import { f as GraphQLESLintRule } from '../types-ace77d86.js';
2
- import '@graphql-tools/utils';
1
+ import { GraphQLESLintRule } from '../types.mjs';
3
2
  import 'eslint';
4
3
  import 'estree';
5
4
  import 'graphql';
6
- import 'graphql-config';
7
5
  import 'json-schema-to-ts';
6
+ import '../siblings.mjs';
7
+ import '@graphql-tools/utils';
8
8
  import '../estree-converter/types.mjs';
9
+ import 'graphql-config';
9
10
 
10
11
  declare const rule: GraphQLESLintRule;
11
12
 
@@ -1,15 +1,14 @@
1
- import "../chunk-BMTV3EA2.js";
1
+ import "../chunk-U3TKCM4X.js";
2
2
  import { Kind } from "graphql";
3
- const RULE_ID = "no-duplicate-fields";
4
- const rule = {
3
+ const RULE_ID = "no-duplicate-fields", rule = {
5
4
  meta: {
6
5
  type: "suggestion",
7
- hasSuggestions: true,
6
+ hasSuggestions: !0,
8
7
  docs: {
9
8
  description: "Checks for duplicate fields in selection set, variables in operation definition, or in arguments set of a field.",
10
9
  category: "Operations",
11
10
  url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
12
- recommended: true,
11
+ recommended: !0,
13
12
  examples: [
14
13
  {
15
14
  title: "Incorrect",
@@ -90,30 +89,24 @@ const rule = {
90
89
  }
91
90
  ]
92
91
  });
93
- } else {
92
+ } else
94
93
  usedFields.add(fieldName);
95
- }
96
94
  }
97
95
  return {
98
96
  OperationDefinition(node) {
99
97
  const set = /* @__PURE__ */ new Set();
100
- for (const varDef of node.variableDefinitions || []) {
98
+ for (const varDef of node.variableDefinitions || [])
101
99
  checkNode(set, varDef.variable.name);
102
- }
103
100
  },
104
101
  Field(node) {
105
102
  const set = /* @__PURE__ */ new Set();
106
- for (const arg of node.arguments || []) {
103
+ for (const arg of node.arguments || [])
107
104
  checkNode(set, arg.name);
108
- }
109
105
  },
110
106
  SelectionSet(node) {
111
107
  const set = /* @__PURE__ */ new Set();
112
- for (const selection of node.selections) {
113
- if (selection.kind === Kind.FIELD) {
114
- checkNode(set, selection.alias || selection.name);
115
- }
116
- }
108
+ for (const selection of node.selections)
109
+ selection.kind === Kind.FIELD && checkNode(set, selection.alias || selection.name);
117
110
  }
118
111
  };
119
112
  }
@@ -1,11 +1,12 @@
1
- import { f as GraphQLESLintRule } from '../types-ace77d86.js';
2
- import '@graphql-tools/utils';
1
+ import { GraphQLESLintRule } from '../types.mjs';
3
2
  import 'eslint';
4
3
  import 'estree';
5
4
  import 'graphql';
6
- import 'graphql-config';
7
5
  import 'json-schema-to-ts';
6
+ import '../siblings.mjs';
7
+ import '@graphql-tools/utils';
8
8
  import '../estree-converter/types.mjs';
9
+ import 'graphql-config';
9
10
 
10
11
  declare const RULE_ID = "HASHTAG_COMMENT";
11
12
  declare const rule: GraphQLESLintRule;
@@ -1,11 +1,10 @@
1
- import "../chunk-BMTV3EA2.js";
1
+ import "../chunk-U3TKCM4X.js";
2
2
  import { TokenKind } from "graphql";
3
3
  import { getNodeName } from "../utils.js";
4
- const RULE_ID = "HASHTAG_COMMENT";
5
- const rule = {
4
+ const RULE_ID = "HASHTAG_COMMENT", rule = {
6
5
  meta: {
7
6
  type: "suggestion",
8
- hasSuggestions: true,
7
+ hasSuggestions: !0,
9
8
  schema: [],
10
9
  messages: {
11
10
  [RULE_ID]: 'Unexpected GraphQL descriptions as hashtag `#` for {{ nodeName }}.\nPrefer using `"""` for multiline, or `"` for a single line description.'
@@ -58,27 +57,21 @@ const rule = {
58
57
  )
59
58
  }
60
59
  ],
61
- recommended: true
60
+ recommended: !0
62
61
  }
63
62
  },
64
63
  create(context) {
65
- const selector = "Document[definitions.0.kind!=/^(OperationDefinition|FragmentDefinition)$/]";
66
64
  return {
67
- [selector](node) {
68
- const rawNode = node.rawNode();
69
- let token = rawNode.loc.startToken;
70
- while (token) {
65
+ ["Document[definitions.0.kind!=/^(OperationDefinition|FragmentDefinition)$/]"](node) {
66
+ let token = node.rawNode().loc.startToken;
67
+ for (; token; ) {
71
68
  const { kind, prev, next, value, line, column } = token;
72
69
  if (kind === TokenKind.COMMENT && prev && next) {
73
- const isEslintComment = value.trimStart().startsWith("eslint");
74
- const linesAfter = next.line - line;
70
+ const isEslintComment = value.trimStart().startsWith("eslint"), linesAfter = next.line - line;
75
71
  if (!isEslintComment && line !== prev.line && next.kind === TokenKind.NAME && linesAfter < 2) {
76
- const sourceCode = context.getSourceCode();
77
- const { tokens } = sourceCode.ast;
78
- const t = tokens.find(
72
+ const sourceCode = context.getSourceCode(), { tokens } = sourceCode.ast, t = tokens.find(
79
73
  (token2) => token2.loc.start.line === next.line && token2.loc.start.column === next.column - 1
80
- );
81
- const nextNode = sourceCode.getNodeByRangeIndex(t.range[1] + 1);
74
+ ), nextNode = sourceCode.getNodeByRangeIndex(t.range[1] + 1);
82
75
  context.report({
83
76
  messageId: RULE_ID,
84
77
  data: {
@@ -94,16 +87,14 @@ const rule = {
94
87
  desc: `Replace with \`${descriptionSyntax}\` description syntax`,
95
88
  fix: (fixer) => fixer.replaceTextRange(
96
89
  [token.start, token.end],
97
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- TODO: remove `!` when drop support of graphql@15
98
90
  [descriptionSyntax, value.trim(), descriptionSyntax].join("")
99
91
  )
100
92
  }))
101
93
  });
102
94
  }
103
95
  }
104
- if (!next) {
96
+ if (!next)
105
97
  break;
106
- }
107
98
  token = next;
108
99
  }
109
100
  }
@@ -1,11 +1,12 @@
1
- import { f as GraphQLESLintRule } from '../types-ace77d86.js';
2
- import '@graphql-tools/utils';
1
+ import { GraphQLESLintRule } from '../types.mjs';
3
2
  import 'eslint';
4
3
  import 'estree';
5
4
  import 'graphql';
6
- import 'graphql-config';
7
5
  import 'json-schema-to-ts';
6
+ import '../siblings.mjs';
7
+ import '@graphql-tools/utils';
8
8
  import '../estree-converter/types.mjs';
9
+ import 'graphql-config';
9
10
 
10
11
  declare const rule: GraphQLESLintRule;
11
12
 
@@ -1,9 +1,8 @@
1
- import "../chunk-BMTV3EA2.js";
2
- import { relative } from "path";
1
+ import "../chunk-U3TKCM4X.js";
2
+ import { relative } from "node:path";
3
3
  import { visit } from "graphql";
4
4
  import { CWD, requireSiblingsOperations } from "../utils.js";
5
- const RULE_ID = "no-one-place-fragments";
6
- const rule = {
5
+ const RULE_ID = "no-one-place-fragments", rule = {
7
6
  meta: {
8
7
  type: "suggestion",
9
8
  docs: {
@@ -49,7 +48,7 @@ const rule = {
49
48
  )
50
49
  }
51
50
  ],
52
- requiresSiblings: true
51
+ requiresSiblings: !0
53
52
  },
54
53
  messages: {
55
54
  [RULE_ID]: 'Fragment `{{fragmentName}}` used only once. Inline him in "{{filePath}}".'
@@ -57,30 +56,24 @@ const rule = {
57
56
  schema: []
58
57
  },
59
58
  create(context) {
60
- const operations = requireSiblingsOperations(RULE_ID, context);
61
- const allDocuments = [...operations.getOperations(), ...operations.getFragments()];
62
- const usedFragmentsMap = /* @__PURE__ */ Object.create(null);
59
+ const operations = requireSiblingsOperations(RULE_ID, context), allDocuments = [...operations.getOperations(), ...operations.getFragments()], usedFragmentsMap = /* @__PURE__ */ Object.create(null);
63
60
  for (const { document, filePath } of allDocuments) {
64
61
  const relativeFilePath = relative(CWD, filePath);
65
62
  visit(document, {
66
63
  FragmentSpread({ name }) {
67
64
  const spreadName = name.value;
68
- usedFragmentsMap[spreadName] || (usedFragmentsMap[spreadName] = []);
69
- usedFragmentsMap[spreadName].push(relativeFilePath);
65
+ usedFragmentsMap[spreadName] ||= [], usedFragmentsMap[spreadName].push(relativeFilePath);
70
66
  }
71
67
  });
72
68
  }
73
69
  return {
74
70
  "FragmentDefinition > Name"(node) {
75
- const fragmentName = node.value;
76
- const fragmentUsage = usedFragmentsMap[fragmentName];
77
- if (fragmentUsage.length === 1) {
78
- context.report({
79
- node,
80
- messageId: RULE_ID,
81
- data: { fragmentName, filePath: fragmentUsage[0] }
82
- });
83
- }
71
+ const fragmentName = node.value, fragmentUsage = usedFragmentsMap[fragmentName];
72
+ fragmentUsage.length === 1 && context.report({
73
+ node,
74
+ messageId: RULE_ID,
75
+ data: { fragmentName, filePath: fragmentUsage[0] }
76
+ });
84
77
  }
85
78
  };
86
79
  }
@@ -1,11 +1,12 @@
1
1
  import { FromSchema } from 'json-schema-to-ts';
2
- import { f as GraphQLESLintRule } from '../types-ace77d86.js';
3
- import '@graphql-tools/utils';
2
+ import { GraphQLESLintRule } from '../types.mjs';
4
3
  import 'eslint';
5
4
  import 'estree';
6
5
  import 'graphql';
7
- import 'graphql-config';
6
+ import '../siblings.mjs';
7
+ import '@graphql-tools/utils';
8
8
  import '../estree-converter/types.mjs';
9
+ import 'graphql-config';
9
10
 
10
11
  declare const schema: {
11
12
  readonly type: "array";