@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 {
3
3
  Kind,
4
4
  TypeInfo,
@@ -7,16 +7,14 @@ import {
7
7
  } from "graphql";
8
8
  import { convertLocation } from "./utils.js";
9
9
  function convertToESTree(node, schema) {
10
- const typeInfo = schema && new TypeInfo(schema);
11
- const visitor = {
10
+ const typeInfo = schema && new TypeInfo(schema), visitor = {
12
11
  leave(node2, key, parent) {
13
12
  const leadingComments = "description" in node2 && node2.description ? [
14
13
  {
15
14
  type: node2.description.block ? "Block" : "Line",
16
15
  value: node2.description.value
17
16
  }
18
- ] : [];
19
- const calculatedTypeInfo = typeInfo ? {
17
+ ] : [], calculatedTypeInfo = typeInfo ? {
20
18
  argument: typeInfo.getArgument(),
21
19
  defaultValue: typeInfo.getDefaultValue(),
22
20
  directive: typeInfo.getDirective(),
@@ -26,19 +24,12 @@ function convertToESTree(node, schema) {
26
24
  parentInputType: typeInfo.getParentInputType(),
27
25
  parentType: typeInfo.getParentType(),
28
26
  gqlType: typeInfo.getType()
29
- } : {};
30
- const rawNode = () => {
31
- if (parent && key !== void 0) {
32
- return parent[key];
33
- }
34
- return node2.kind === Kind.DOCUMENT ? {
35
- ...node2,
36
- definitions: node2.definitions.map(
37
- (definition) => definition.rawNode()
38
- )
39
- } : node2;
40
- };
41
- const commonFields = {
27
+ } : {}, rawNode = () => parent && key !== void 0 ? parent[key] : node2.kind === Kind.DOCUMENT ? {
28
+ ...node2,
29
+ definitions: node2.definitions.map(
30
+ (definition) => definition.rawNode()
31
+ )
32
+ } : node2, commonFields = {
42
33
  ...node2,
43
34
  type: node2.kind,
44
35
  loc: convertLocation(node2.loc),
@@ -1,14 +1,13 @@
1
1
  import * as graphql_jsutils_Maybe from 'graphql/jsutils/Maybe';
2
2
  import * as graphql_jsutils_ObjMap from 'graphql/jsutils/ObjMap';
3
3
  import * as graphql from 'graphql';
4
- import { GraphQLOutputType, GraphQLNamedType, Token, Location } from 'graphql';
4
+ import { GraphQLOutputType, GraphQLNamedType, TokenKind, Token, Location } from 'graphql';
5
5
  import { AST } from 'eslint';
6
6
  import { Comment, SourceLocation } from 'estree';
7
7
 
8
8
  declare const valueFromNode: (valueNode: graphql.ValueNode, variables?: graphql_jsutils_Maybe.Maybe<graphql_jsutils_ObjMap.ObjMap<unknown>>) => any;
9
9
  declare function getBaseType(type: GraphQLOutputType): GraphQLNamedType;
10
- type TokenKindValue = ':' | '!' | '...' | '(' | ')' | '[' | ']' | '{' | '}' | '@' | '&' | '<SOF>' | '=' | '|' | '$' | 'BlockString' | 'Comment' | 'Float' | 'Int' | 'Name' | 'String';
11
- declare function convertToken<T extends TokenKindValue | 'Block' | 'Line'>(token: Token, type: T): Omit<AST.Token, 'type'> & {
10
+ declare function convertToken<T extends TokenKind | 'Block' | 'Line'>(token: Token, type: T): Omit<AST.Token, 'type'> & {
12
11
  type: T;
13
12
  };
14
13
  declare function extractTokens(filePath: string, code: string): AST.Token[];
@@ -1,27 +1,20 @@
1
- import { createRequire } from 'module';
2
- const require = createRequire(import.meta.url);
3
- import "../chunk-BMTV3EA2.js";
1
+ import "../chunk-U3TKCM4X.js";
4
2
  import {
5
3
  isListType,
6
4
  isNonNullType,
5
+ Lexer,
7
6
  Source,
8
7
  TokenKind
9
8
  } from "graphql";
10
9
  import { valueFromASTUntyped } from "graphql/utilities/valueFromASTUntyped.js";
11
- const valueFromNode = (...args) => {
12
- return valueFromASTUntyped(...args);
13
- };
10
+ const valueFromNode = (...args) => valueFromASTUntyped(...args);
14
11
  function getBaseType(type) {
15
- if (isNonNullType(type) || isListType(type)) {
16
- return getBaseType(type.ofType);
17
- }
18
- return type;
12
+ return isNonNullType(type) || isListType(type) ? getBaseType(type.ofType) : type;
19
13
  }
20
14
  function convertToken(token, type) {
21
15
  const { line, column, end, start, value } = token;
22
16
  return {
23
17
  type,
24
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- TODO: remove `!` when drop support of graphql@15
25
18
  value,
26
19
  /*
27
20
  * ESLint has 0-based column number
@@ -40,41 +33,25 @@ function convertToken(token, type) {
40
33
  range: [start, end]
41
34
  };
42
35
  }
43
- function getLexer(source) {
44
- const gqlLanguage = require("graphql/language");
45
- if (gqlLanguage == null ? void 0 : gqlLanguage.createLexer) {
46
- return gqlLanguage.createLexer(source, {});
47
- }
48
- const { Lexer: LexerCls } = require("graphql");
49
- if (LexerCls && typeof LexerCls === "function") {
50
- return new LexerCls(source);
51
- }
52
- throw new Error("Unsupported GraphQL version! Please make sure to use GraphQL v14 or newer!");
53
- }
54
36
  function extractTokens(filePath, code) {
55
- const source = new Source(code, filePath);
56
- const lexer = getLexer(source);
57
- const tokens = [];
37
+ const source = new Source(code, filePath), lexer = new Lexer(source), tokens = [];
58
38
  let token = lexer.advance();
59
- while (token && token.kind !== TokenKind.EOF) {
39
+ for (; token && token.kind !== TokenKind.EOF; ) {
60
40
  const result = convertToken(token, token.kind);
61
- tokens.push(result);
62
- token = lexer.advance();
41
+ tokens.push(result), token = lexer.advance();
63
42
  }
64
43
  return tokens;
65
44
  }
66
45
  function extractComments(loc) {
67
- if (!loc) {
46
+ if (!loc)
68
47
  return [];
69
- }
70
48
  const comments = [];
71
49
  let token = loc.startToken;
72
- while (token) {
50
+ for (; token; ) {
73
51
  if (token.kind === TokenKind.COMMENT) {
74
52
  const comment = convertToken(
75
53
  token,
76
54
  // `eslint-disable` directive works only with `Block` type comment
77
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- TODO: remove `!` when drop support of graphql@15
78
55
  token.value.trimStart().startsWith("eslint") ? "Block" : "Line"
79
56
  );
80
57
  comments.push(comment);
@@ -84,8 +61,7 @@ function extractComments(loc) {
84
61
  return comments;
85
62
  }
86
63
  function convertLocation(location) {
87
- const { startToken, endToken, source, start, end } = location;
88
- const loc = {
64
+ const { startToken, endToken, source, start, end } = location, loc = {
89
65
  start: {
90
66
  /*
91
67
  * Kind.Document has startToken: { line: 0, column: 0 }, we set line as 1 and column as 0
@@ -99,10 +75,7 @@ function convertLocation(location) {
99
75
  },
100
76
  source: source.body
101
77
  };
102
- if (loc.start.column === loc.end.column) {
103
- loc.end.column += end - start;
104
- }
105
- return loc;
78
+ return loc.start.column === loc.end.column && (loc.end.column += end - start), loc;
106
79
  }
107
80
  export {
108
81
  convertLocation,
@@ -1,12 +1,13 @@
1
1
  import { parseForESLint } from './parser.mjs';
2
- import './types-ace77d86.js';
3
- import '@graphql-tools/utils';
2
+ import './types.mjs';
4
3
  import 'eslint';
5
4
  import 'estree';
6
5
  import 'graphql';
7
- import 'graphql-config';
8
6
  import 'json-schema-to-ts';
7
+ import './siblings.mjs';
8
+ import '@graphql-tools/utils';
9
9
  import './estree-converter/types.mjs';
10
+ import 'graphql-config';
10
11
 
11
12
  declare const flatConfigs: {
12
13
  'operations-all': {
@@ -17,9 +18,11 @@ declare const flatConfigs: {
17
18
  };
18
19
  rules: {
19
20
  '@graphql-eslint/alphabetize': (string | {
21
+ definitions: boolean;
20
22
  selections: string[];
21
- variables: string[];
23
+ variables: boolean;
22
24
  arguments: string[];
25
+ groups: string[];
23
26
  })[];
24
27
  '@graphql-eslint/lone-executable-definition': string;
25
28
  '@graphql-eslint/match-document-filename': (string | {
@@ -29,8 +32,7 @@ declare const flatConfigs: {
29
32
  fragment: string;
30
33
  })[];
31
34
  '@graphql-eslint/no-one-place-fragments': string;
32
- '@graphql-eslint/unique-fragment-name': string;
33
- '@graphql-eslint/unique-operation-name': string;
35
+ '@graphql-eslint/require-import-fragment': string;
34
36
  '@graphql-eslint/executable-definitions': string;
35
37
  '@graphql-eslint/fields-on-correct-type': string;
36
38
  '@graphql-eslint/fragments-on-composite-type': string;
@@ -63,14 +65,16 @@ declare const flatConfigs: {
63
65
  '@graphql-eslint/overlapping-fields-can-be-merged': string;
64
66
  '@graphql-eslint/possible-fragment-spread': string;
65
67
  '@graphql-eslint/provided-required-arguments': string;
66
- '@graphql-eslint/require-id-when-available': string;
68
+ '@graphql-eslint/require-selections': string;
67
69
  '@graphql-eslint/scalar-leafs': string;
68
70
  '@graphql-eslint/selection-set-depth': (string | {
69
71
  maxDepth: number;
70
72
  })[];
71
73
  '@graphql-eslint/unique-argument-names': string;
72
74
  '@graphql-eslint/unique-directive-names-per-location': string;
75
+ '@graphql-eslint/unique-fragment-name': string;
73
76
  '@graphql-eslint/unique-input-field-names': string;
77
+ '@graphql-eslint/unique-operation-name': string;
74
78
  '@graphql-eslint/unique-variable-names': string;
75
79
  '@graphql-eslint/value-literals-of-correct-type': string;
76
80
  '@graphql-eslint/variables-are-input-types': string;
@@ -116,21 +120,23 @@ declare const flatConfigs: {
116
120
  '@graphql-eslint/overlapping-fields-can-be-merged': string;
117
121
  '@graphql-eslint/possible-fragment-spread': string;
118
122
  '@graphql-eslint/provided-required-arguments': string;
119
- '@graphql-eslint/require-id-when-available': string;
123
+ '@graphql-eslint/require-selections': string;
120
124
  '@graphql-eslint/scalar-leafs': string;
121
125
  '@graphql-eslint/selection-set-depth': (string | {
122
126
  maxDepth: number;
123
127
  })[];
124
128
  '@graphql-eslint/unique-argument-names': string;
125
129
  '@graphql-eslint/unique-directive-names-per-location': string;
130
+ '@graphql-eslint/unique-fragment-name': string;
126
131
  '@graphql-eslint/unique-input-field-names': string;
132
+ '@graphql-eslint/unique-operation-name': string;
127
133
  '@graphql-eslint/unique-variable-names': string;
128
134
  '@graphql-eslint/value-literals-of-correct-type': string;
129
135
  '@graphql-eslint/variables-are-input-types': string;
130
136
  '@graphql-eslint/variables-in-allowed-position': string;
131
137
  };
132
138
  };
133
- relay: {
139
+ 'schema-relay': {
134
140
  languageOptions: {
135
141
  parser: {
136
142
  parseForESLint: typeof parseForESLint;
@@ -151,11 +157,16 @@ declare const flatConfigs: {
151
157
  };
152
158
  rules: {
153
159
  '@graphql-eslint/alphabetize': (string | {
160
+ definitions: boolean;
154
161
  fields: string[];
155
- values: string[];
162
+ values: boolean;
156
163
  arguments: string[];
164
+ groups: string[];
157
165
  })[];
158
166
  '@graphql-eslint/input-name': string;
167
+ '@graphql-eslint/no-root-type': (string | {
168
+ disallow: string[];
169
+ })[];
159
170
  '@graphql-eslint/no-scalar-result-type-on-mutation': string;
160
171
  '@graphql-eslint/require-deprecation-date': string;
161
172
  '@graphql-eslint/require-field-of-type-query-in-mutation-result': string;
@@ -186,20 +197,38 @@ declare const flatConfigs: {
186
197
  forbiddenPrefixes: string[];
187
198
  forbiddenSuffixes: string[];
188
199
  };
200
+ 'EnumTypeDefinition,EnumTypeExtension': {
201
+ forbiddenPrefixes: string[];
202
+ forbiddenSuffixes: string[];
203
+ };
204
+ 'InterfaceTypeDefinition,InterfaceTypeExtension': {
205
+ forbiddenPrefixes: string[];
206
+ forbiddenSuffixes: string[];
207
+ };
208
+ 'UnionTypeDefinition,UnionTypeExtension': {
209
+ forbiddenPrefixes: string[];
210
+ forbiddenSuffixes: string[];
211
+ };
212
+ 'ObjectTypeDefinition,ObjectTypeExtension': {
213
+ forbiddenPrefixes: string[];
214
+ forbiddenSuffixes: string[];
215
+ };
189
216
  })[];
190
- '@graphql-eslint/no-case-insensitive-enum-values-duplicates': string;
191
217
  '@graphql-eslint/no-hashtag-description': string;
192
218
  '@graphql-eslint/no-typename-prefix': string;
193
219
  '@graphql-eslint/no-unreachable-types': string;
220
+ '@graphql-eslint/possible-type-extension': string;
194
221
  '@graphql-eslint/provided-required-arguments': string;
195
222
  '@graphql-eslint/require-deprecation-reason': string;
196
223
  '@graphql-eslint/require-description': (string | {
197
224
  types: boolean;
198
225
  DirectiveDefinition: boolean;
226
+ rootField: boolean;
199
227
  })[];
200
228
  '@graphql-eslint/strict-id-in-types': string;
201
229
  '@graphql-eslint/unique-directive-names': string;
202
230
  '@graphql-eslint/unique-directive-names-per-location': string;
231
+ '@graphql-eslint/unique-enum-value-names': string;
203
232
  '@graphql-eslint/unique-field-definition-names': string;
204
233
  '@graphql-eslint/unique-operation-types': string;
205
234
  '@graphql-eslint/unique-type-names': string;
@@ -236,20 +265,38 @@ declare const flatConfigs: {
236
265
  forbiddenPrefixes: string[];
237
266
  forbiddenSuffixes: string[];
238
267
  };
268
+ 'EnumTypeDefinition,EnumTypeExtension': {
269
+ forbiddenPrefixes: string[];
270
+ forbiddenSuffixes: string[];
271
+ };
272
+ 'InterfaceTypeDefinition,InterfaceTypeExtension': {
273
+ forbiddenPrefixes: string[];
274
+ forbiddenSuffixes: string[];
275
+ };
276
+ 'UnionTypeDefinition,UnionTypeExtension': {
277
+ forbiddenPrefixes: string[];
278
+ forbiddenSuffixes: string[];
279
+ };
280
+ 'ObjectTypeDefinition,ObjectTypeExtension': {
281
+ forbiddenPrefixes: string[];
282
+ forbiddenSuffixes: string[];
283
+ };
239
284
  })[];
240
- '@graphql-eslint/no-case-insensitive-enum-values-duplicates': string;
241
285
  '@graphql-eslint/no-hashtag-description': string;
242
286
  '@graphql-eslint/no-typename-prefix': string;
243
287
  '@graphql-eslint/no-unreachable-types': string;
288
+ '@graphql-eslint/possible-type-extension': string;
244
289
  '@graphql-eslint/provided-required-arguments': string;
245
290
  '@graphql-eslint/require-deprecation-reason': string;
246
291
  '@graphql-eslint/require-description': (string | {
247
292
  types: boolean;
248
293
  DirectiveDefinition: boolean;
294
+ rootField: boolean;
249
295
  })[];
250
296
  '@graphql-eslint/strict-id-in-types': string;
251
297
  '@graphql-eslint/unique-directive-names': string;
252
298
  '@graphql-eslint/unique-directive-names-per-location': string;
299
+ '@graphql-eslint/unique-enum-value-names': string;
253
300
  '@graphql-eslint/unique-field-definition-names': string;
254
301
  '@graphql-eslint/unique-operation-types': string;
255
302
  '@graphql-eslint/unique-type-names': string;
@@ -1,10 +1,9 @@
1
- import "./chunk-BMTV3EA2.js";
1
+ import "./chunk-U3TKCM4X.js";
2
2
  import { configs } from "./configs/index.js";
3
3
  import { parseForESLint } from "./parser.js";
4
4
  const languageOptions = {
5
5
  parser: { parseForESLint }
6
- };
7
- const flatConfigs = {
6
+ }, flatConfigs = {
8
7
  "operations-all": {
9
8
  languageOptions,
10
9
  rules: {
@@ -16,9 +15,9 @@ const flatConfigs = {
16
15
  languageOptions,
17
16
  rules: configs["operations-recommended"].rules
18
17
  },
19
- relay: {
18
+ "schema-relay": {
20
19
  languageOptions,
21
- rules: configs.relay.rules
20
+ rules: configs["schema-relay"].rules
22
21
  },
23
22
  "schema-all": {
24
23
  languageOptions,
@@ -1,13 +1,14 @@
1
1
  import { GraphQLConfig } from 'graphql-config';
2
- import { P as ParserOptions } from './types-ace77d86.js';
3
- import '@graphql-tools/utils';
2
+ import { ParserOptions } from './types.mjs';
4
3
  import 'eslint';
5
4
  import 'estree';
6
5
  import 'graphql';
7
6
  import 'json-schema-to-ts';
7
+ import './siblings.mjs';
8
+ import '@graphql-tools/utils';
8
9
  import './estree-converter/types.mjs';
9
10
 
10
11
  declare function loadOnDiskGraphQLConfig(filePath: string): GraphQLConfig;
11
- declare function loadGraphQLConfig(options: ParserOptions): GraphQLConfig;
12
+ declare function loadGraphQLConfig({ graphQLConfig: config, filePath, }: ParserOptions): GraphQLConfig;
12
13
 
13
14
  export { loadGraphQLConfig, loadOnDiskGraphQLConfig };
@@ -1,53 +1,37 @@
1
- import "./chunk-BMTV3EA2.js";
2
- import { dirname } from "path";
1
+ import "./chunk-U3TKCM4X.js";
2
+ import path from "node:path";
3
3
  import { CodeFileLoader } from "@graphql-tools/code-file-loader";
4
4
  import debugFactory from "debug";
5
- import {
6
- GraphQLConfig,
7
- loadConfigSync
8
- } from "graphql-config";
5
+ import { GraphQLConfig, loadConfigSync } from "graphql-config";
9
6
  const debug = debugFactory("graphql-eslint:graphql-config");
10
7
  let graphQLConfig;
11
8
  function loadOnDiskGraphQLConfig(filePath) {
12
9
  return loadConfigSync({
13
10
  // load config relative to the file being linted
14
- rootDir: dirname(filePath),
15
- throwOnEmpty: false,
16
- throwOnMissing: false,
11
+ rootDir: path.dirname(filePath),
12
+ throwOnMissing: !1,
17
13
  extensions: [codeFileLoaderExtension]
18
14
  });
19
15
  }
20
- function loadGraphQLConfig(options) {
21
- if (graphQLConfig) {
16
+ function loadGraphQLConfig({
17
+ graphQLConfig: config,
18
+ filePath
19
+ }) {
20
+ if (graphQLConfig)
22
21
  return graphQLConfig;
23
- }
24
- const onDiskConfig = !options.skipGraphQLConfig && loadOnDiskGraphQLConfig(options.filePath);
25
- debug("options.skipGraphQLConfig: %o", options.skipGraphQLConfig);
26
- if (onDiskConfig) {
27
- debug("Graphql-config path %o", onDiskConfig.filepath);
28
- }
29
- const configOptions = options.projects ? { projects: options.projects } : {
30
- schema: options.schema || "",
22
+ debug("parserOptions.graphQLConfig: %o", config);
23
+ const onDiskConfig = !config && loadOnDiskGraphQLConfig(filePath);
24
+ onDiskConfig && debug("GraphQL-Config path %o", onDiskConfig.filepath);
25
+ const configOptions = config && ("projects" in config || "schemaPath" in config) ? config : {
31
26
  // if `schema` is `undefined` will throw error `Project 'default' not found`
32
- documents: options.documents,
33
- extensions: options.extensions,
34
- include: options.include,
35
- exclude: options.exclude
27
+ schema: config?.schema ?? "",
28
+ ...config
36
29
  };
37
- graphQLConfig = onDiskConfig || new GraphQLConfig(
38
- {
39
- config: configOptions,
40
- filepath: "virtual-config"
41
- },
42
- [codeFileLoaderExtension]
43
- );
44
- return graphQLConfig;
30
+ return graphQLConfig = onDiskConfig || new GraphQLConfig({ config: configOptions, filepath: "" }, [codeFileLoaderExtension]), graphQLConfig;
45
31
  }
46
32
  const codeFileLoaderExtension = (api) => {
47
33
  const { schema, documents } = api.loaders;
48
- schema.register(new CodeFileLoader());
49
- documents.register(new CodeFileLoader());
50
- return { name: "graphql-eslint-loaders" };
34
+ return schema.register(new CodeFileLoader()), documents.register(new CodeFileLoader()), { name: "code-file-loaders" };
51
35
  };
52
36
  export {
53
37
  loadGraphQLConfig,
package/esm/index.d.mts CHANGED
@@ -2,21 +2,27 @@ import * as eslint from 'eslint';
2
2
  import { Block } from './processor.mjs';
3
3
  export { parseForESLint } from './parser.mjs';
4
4
  export { rules } from './rules/index.mjs';
5
- export { C as CategoryType, G as GraphQLESLintParseResult, f as GraphQLESLintRule, c as GraphQLESLintRuleContext, e as GraphQLESLintRuleListener, O as OmitRecursively, P as ParserOptions, b as ParserServices, a as Pointer, R as ReportDescriptor, d as RuleDocsInfo, S as Schema, V as ValueOf } from './types-ace77d86.js';
5
+ export { CategoryType, ConfigName, GraphQLESLintParseResult, GraphQLESLintRule, GraphQLESLintRuleContext, GraphQLESLintRuleListener, OmitRecursively, ParserOptions, ParserServices, Pointer, ReportDescriptor, RuleDocsInfo, Schema, ValueOf } from './types.mjs';
6
6
  export { requireGraphQLSchemaFromContext, requireSiblingsOperations } from './utils.mjs';
7
7
  export { configs } from './configs/index.mjs';
8
8
  export { flatConfigs } from './flat-configs.mjs';
9
9
  import './rules/require-description.mjs';
10
10
  import 'graphql';
11
+ import 'graphql/language/ast.js';
11
12
  import 'json-schema-to-ts/lib/types/type-utils/writable.js';
12
- import '@graphql-tools/utils';
13
13
  import 'estree';
14
- import 'graphql-config';
15
14
  import 'json-schema-to-ts';
15
+ import './siblings.mjs';
16
+ import '@graphql-tools/utils';
16
17
  import './estree-converter/types.mjs';
18
+ import 'graphql-config';
17
19
 
18
20
  declare const processors: {
19
- graphql: eslint.Linter.Processor<string | Block>;
21
+ graphql: {
22
+ supportsAutofix: true;
23
+ preprocess(code: string, filePath: string): (string | Block)[];
24
+ postprocess(messages: eslint.Linter.LintMessage[][], filePath: string): eslint.Linter.LintMessage[];
25
+ };
20
26
  };
21
27
 
22
28
  export { processors };
package/esm/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import "./chunk-BMTV3EA2.js";
1
+ import "./chunk-U3TKCM4X.js";
2
2
  import { processor } from "./processor.js";
3
3
  import { parseForESLint } from "./parser.js";
4
4
  import { rules } from "./rules/index.js";
package/esm/parser.d.mts CHANGED
@@ -1,11 +1,12 @@
1
- import { P as ParserOptions, G as GraphQLESLintParseResult } from './types-ace77d86.js';
2
- import '@graphql-tools/utils';
1
+ import { ParserOptions, GraphQLESLintParseResult } 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 function parseForESLint(code: string, options: ParserOptions): GraphQLESLintParseResult;
11
12
 
package/esm/parser.js CHANGED
@@ -1,40 +1,50 @@
1
- import "./chunk-BMTV3EA2.js";
1
+ import "./chunk-U3TKCM4X.js";
2
2
  import { parseGraphQLSDL } from "@graphql-tools/utils";
3
3
  import debugFactory from "debug";
4
- import { buildSchema, GraphQLError } from "graphql";
4
+ import { GraphQLError } from "graphql";
5
5
  import { convertToESTree, extractComments, extractTokens } from "./estree-converter/index.js";
6
6
  import { loadGraphQLConfig } from "./graphql-config.js";
7
7
  import { getSchema } from "./schema.js";
8
8
  import { getSiblings } from "./siblings.js";
9
9
  import { CWD, VIRTUAL_DOCUMENT_REGEX } from "./utils.js";
10
+ import { getDocuments } from "./documents.js";
10
11
  const debug = debugFactory("graphql-eslint:parser");
11
12
  debug("cwd %o", CWD);
13
+ const LEGACY_PARSER_OPTIONS_KEYS = [
14
+ "schema",
15
+ "documents",
16
+ "extensions",
17
+ "include",
18
+ "exclude",
19
+ "projects",
20
+ "schemaOptions",
21
+ "graphQLParserOptions",
22
+ "skipGraphQLConfig",
23
+ "operations"
24
+ ];
12
25
  function parseForESLint(code, options) {
13
- var _a, _b;
26
+ for (const key of LEGACY_PARSER_OPTIONS_KEYS)
27
+ if (key in options)
28
+ throw new Error(
29
+ `\`parserOptions.${key}\` was removed in graphql-eslint@4. Use physical graphql-config for setting schema and documents or \`parserOptions.graphQLConfig\` for programmatic usage.`
30
+ );
14
31
  try {
15
- const { filePath } = options;
16
- options.documents || (options.documents = options.operations);
17
- const { document } = parseGraphQLSDL(filePath, code, {
18
- ...options.graphQLParserOptions,
19
- noLocation: false
20
- });
21
- const gqlConfig = loadGraphQLConfig(options);
22
- const realFilepath = filePath.replace(VIRTUAL_DOCUMENT_REGEX, "");
23
- const project = gqlConfig.getProjectForFile(realFilepath);
24
- let schema = null;
32
+ const { filePath } = options, { document } = parseGraphQLSDL(filePath, code, { noLocation: !1 });
33
+ let project, schema, documents;
34
+ {
35
+ const gqlConfig = loadGraphQLConfig(options), realFilepath = filePath.replace(VIRTUAL_DOCUMENT_REGEX, "");
36
+ project = gqlConfig.getProjectForFile(realFilepath), documents = getDocuments(project);
37
+ }
25
38
  try {
26
- schema = project ? getSchema(project, options.schemaOptions) : typeof options.schema === "string" ? buildSchema(options.schema) : null;
39
+ schema = getSchema(project);
27
40
  } catch (error) {
28
- if (error instanceof Error) {
29
- error.message = `Error while loading schema: ${error.message}`;
30
- }
31
- throw error;
41
+ throw error instanceof Error && (error.message = `Error while loading schema: ${error.message}`), error;
32
42
  }
33
43
  const rootTree = convertToESTree(document, schema);
34
44
  return {
35
45
  services: {
36
46
  schema,
37
- siblingOperations: getSiblings(project, options.documents)
47
+ siblingOperations: getSiblings(documents)
38
48
  },
39
49
  ast: {
40
50
  comments: extractComments(document.loc),
@@ -47,20 +57,16 @@ function parseForESLint(code, options) {
47
57
  }
48
58
  };
49
59
  } catch (error) {
50
- if (error instanceof Error) {
51
- error.message = `[graphql-eslint] ${error.message}`;
52
- }
53
- if (error instanceof GraphQLError) {
54
- const location = (_a = error.locations) == null ? void 0 : _a[0];
55
- const eslintError = {
56
- index: (_b = error.positions) == null ? void 0 : _b[0],
60
+ if (error instanceof Error && (error.message = `[graphql-eslint] ${error.message}`), error instanceof GraphQLError) {
61
+ const location = error.locations?.[0];
62
+ throw {
63
+ index: error.positions?.[0],
57
64
  ...location && {
58
65
  lineNumber: location.line,
59
66
  column: location.column - 1
60
67
  },
61
68
  message: error.message
62
69
  };
63
- throw eslintError;
64
70
  }
65
71
  throw error;
66
72
  }
@@ -4,6 +4,10 @@ type Block = Linter.ProcessorFile & {
4
4
  lineOffset: number;
5
5
  offset: number;
6
6
  };
7
- declare const processor: Linter.Processor<Block | string>;
7
+ declare const processor: {
8
+ supportsAutofix: true;
9
+ preprocess(code: string, filePath: string): (string | Block)[];
10
+ postprocess(messages: Linter.LintMessage[][], filePath: string): Linter.LintMessage[];
11
+ };
8
12
 
9
13
  export { Block, processor };