@graphql-eslint/eslint-plugin 4.0.0-alpha.1 → 4.0.0-alpha.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (173) hide show
  1. package/{esm/cache.d.mts → cjs/cache.d.cts} +1 -1
  2. package/cjs/cache.js +1 -1
  3. package/cjs/configs/index.d.cts +14 -0
  4. package/cjs/configs/index.js +13 -2
  5. package/cjs/documents.js +1 -1
  6. package/{esm/estree-converter/converter.d.mts → cjs/estree-converter/converter.d.cts} +1 -1
  7. package/cjs/estree-converter/index.d.cts +8 -0
  8. package/{esm/estree-converter/utils.d.mts → cjs/estree-converter/utils.d.cts} +3 -3
  9. package/{esm/graphql-config.d.mts → cjs/graphql-config.d.cts} +3 -3
  10. package/cjs/graphql-config.js +2 -2
  11. package/{esm/index.d.mts → cjs/index.d.cts} +13 -10
  12. package/cjs/index.js +3 -3
  13. package/cjs/meta.d.cts +4 -0
  14. package/cjs/meta.js +36 -0
  15. package/cjs/package.json +1 -0
  16. package/{esm/parser.d.mts → cjs/parser.d.cts} +11 -4
  17. package/cjs/parser.js +12 -3
  18. package/{esm/processor.d.mts → cjs/processor.d.cts} +4 -0
  19. package/cjs/processor.js +5 -1
  20. package/{esm/rules/alphabetize.d.mts → cjs/rules/alphabetize.d.cts} +3 -3
  21. package/cjs/rules/alphabetize.js +1 -1
  22. package/{esm/rules/description-style.d.mts → cjs/rules/description-style.d.cts} +3 -3
  23. package/{esm/rules/graphql-js-validation.d.mts → cjs/rules/graphql-js-validation.d.cts} +3 -3
  24. package/{esm/rules/index.d.mts → cjs/rules/index.d.cts} +9 -9
  25. package/{esm/rules/input-name.d.mts → cjs/rules/input-name.d.cts} +3 -3
  26. package/{esm/rules/lone-executable-definition.d.mts → cjs/rules/lone-executable-definition.d.cts} +3 -3
  27. package/{esm/rules/match-document-filename.d.mts → cjs/rules/match-document-filename.d.cts} +4 -4
  28. package/cjs/rules/match-document-filename.js +2 -2
  29. package/{esm/rules/naming-convention.d.mts → cjs/rules/naming-convention.d.cts} +3 -3
  30. package/cjs/rules/no-anonymous-operations.d.cts +13 -0
  31. package/{esm/rules/no-deprecated.d.mts → cjs/rules/no-deprecated.d.cts} +3 -3
  32. package/cjs/rules/no-duplicate-fields.d.cts +13 -0
  33. package/{esm/rules/no-hashtag-description.d.mts → cjs/rules/no-hashtag-description.d.cts} +3 -3
  34. package/cjs/rules/no-one-place-fragments.d.cts +13 -0
  35. package/{esm/rules/no-root-type.d.mts → cjs/rules/no-root-type.d.cts} +3 -3
  36. package/cjs/rules/no-scalar-result-type-on-mutation.d.cts +13 -0
  37. package/cjs/rules/no-typename-prefix.d.cts +13 -0
  38. package/cjs/rules/no-unreachable-types.d.cts +13 -0
  39. package/cjs/rules/no-unreachable-types.js +6 -7
  40. package/cjs/rules/no-unused-fields.d.cts +13 -0
  41. package/cjs/rules/no-unused-fields.js +6 -6
  42. package/{esm/rules/relay-arguments.d.mts → cjs/rules/relay-arguments.d.cts} +3 -3
  43. package/{esm/rules/relay-connection-types.d.mts → cjs/rules/relay-connection-types.d.cts} +3 -3
  44. package/{esm/rules/relay-edge-types.d.mts → cjs/rules/relay-edge-types.d.cts} +3 -3
  45. package/cjs/rules/relay-edge-types.js +1 -1
  46. package/cjs/rules/relay-page-info.d.cts +13 -0
  47. package/cjs/rules/relay-page-info.js +1 -1
  48. package/{esm/rules/require-deprecation-date.d.mts → cjs/rules/require-deprecation-date.d.cts} +3 -3
  49. package/cjs/rules/require-deprecation-reason.d.cts +13 -0
  50. package/{esm/rules/require-description.d.mts → cjs/rules/require-description.d.cts} +3 -3
  51. package/cjs/rules/require-field-of-type-query-in-mutation-result.d.cts +13 -0
  52. package/cjs/rules/require-import-fragment.d.cts +13 -0
  53. package/cjs/rules/require-import-fragment.js +1 -1
  54. package/cjs/rules/require-nullable-fields-with-oneof.d.cts +13 -0
  55. package/cjs/rules/require-nullable-result-in-root.d.cts +13 -0
  56. package/{esm/rules/require-selections.d.mts → cjs/rules/require-selections.d.cts} +3 -3
  57. package/cjs/rules/require-selections.js +1 -0
  58. package/cjs/rules/require-type-pattern-with-oneof.d.cts +13 -0
  59. package/{esm/rules/selection-set-depth.d.mts → cjs/rules/selection-set-depth.d.cts} +3 -3
  60. package/cjs/rules/selection-set-depth.js +2 -2
  61. package/{esm/rules/strict-id-in-types.d.mts → cjs/rules/strict-id-in-types.d.cts} +3 -3
  62. package/cjs/rules/unique-enum-value-names.d.cts +13 -0
  63. package/{esm/rules/unique-fragment-name.d.mts → cjs/rules/unique-fragment-name.d.cts} +3 -3
  64. package/cjs/rules/unique-operation-name.d.cts +13 -0
  65. package/{esm/schema.d.mts → cjs/schema.d.cts} +3 -3
  66. package/cjs/schema.js +1 -1
  67. package/{esm/types.d.mts → cjs/types.d.cts} +2 -2
  68. package/{esm/utils.d.mts → cjs/utils.d.cts} +3 -3
  69. package/cjs/utils.js +1 -1
  70. package/{cjs → esm}/cache.d.ts +1 -1
  71. package/esm/configs/index.d.ts +14 -0
  72. package/esm/configs/index.js +12 -1
  73. package/{cjs → esm}/estree-converter/index.d.ts +2 -2
  74. package/{cjs → esm}/estree-converter/utils.d.ts +3 -3
  75. package/esm/graphql-config.js +1 -1
  76. package/{cjs → esm}/index.d.ts +5 -2
  77. package/esm/index.js +2 -3
  78. package/esm/meta.d.ts +4 -0
  79. package/esm/meta.js +7 -0
  80. package/{cjs → esm}/parser.d.ts +8 -1
  81. package/esm/parser.js +10 -1
  82. package/{cjs → esm}/processor.d.ts +4 -0
  83. package/esm/processor.js +5 -0
  84. package/{cjs → esm}/rules/alphabetize.d.ts +1 -1
  85. package/{cjs → esm}/rules/index.d.ts +8 -8
  86. package/esm/rules/match-document-filename.js +2 -2
  87. package/esm/rules/no-unreachable-types.js +6 -6
  88. package/esm/rules/no-unused-fields.js +6 -5
  89. package/esm/rules/relay-edge-types.js +1 -1
  90. package/esm/rules/relay-page-info.js +1 -1
  91. package/esm/rules/require-selections.js +1 -0
  92. package/esm/rules/selection-set-depth.js +1 -1
  93. package/{index.browser.mjs → index.browser.js} +158 -81
  94. package/package.json +7 -6
  95. package/cjs/configs/index.d.ts +0 -174
  96. package/cjs/flat-configs.d.ts +0 -307
  97. package/cjs/flat-configs.js +0 -55
  98. package/esm/configs/index.d.mts +0 -174
  99. package/esm/estree-converter/index.d.mts +0 -8
  100. package/esm/flat-configs.d.mts +0 -307
  101. package/esm/flat-configs.js +0 -36
  102. package/esm/package.json +0 -1
  103. package/esm/rules/no-anonymous-operations.d.mts +0 -13
  104. package/esm/rules/no-duplicate-fields.d.mts +0 -13
  105. package/esm/rules/no-one-place-fragments.d.mts +0 -13
  106. package/esm/rules/no-scalar-result-type-on-mutation.d.mts +0 -13
  107. package/esm/rules/no-typename-prefix.d.mts +0 -13
  108. package/esm/rules/no-unreachable-types.d.mts +0 -13
  109. package/esm/rules/no-unused-fields.d.mts +0 -13
  110. package/esm/rules/relay-page-info.d.mts +0 -13
  111. package/esm/rules/require-deprecation-reason.d.mts +0 -13
  112. package/esm/rules/require-field-of-type-query-in-mutation-result.d.mts +0 -13
  113. package/esm/rules/require-import-fragment.d.mts +0 -13
  114. package/esm/rules/require-nullable-fields-with-oneof.d.mts +0 -13
  115. package/esm/rules/require-nullable-result-in-root.d.mts +0 -13
  116. package/esm/rules/require-type-pattern-with-oneof.d.mts +0 -13
  117. package/esm/rules/unique-enum-value-names.d.mts +0 -13
  118. package/esm/rules/unique-operation-name.d.mts +0 -13
  119. /package/cjs/configs/{operations-all.d.ts → operations-all.d.cts} +0 -0
  120. /package/cjs/configs/{operations-recommended.d.ts → operations-recommended.d.cts} +0 -0
  121. /package/cjs/configs/{schema-all.d.ts → schema-all.d.cts} +0 -0
  122. /package/cjs/configs/{schema-recommended.d.ts → schema-recommended.d.cts} +0 -0
  123. /package/cjs/configs/{schema-relay.d.ts → schema-relay.d.cts} +0 -0
  124. /package/cjs/{documents.d.ts → documents.d.cts} +0 -0
  125. /package/cjs/estree-converter/{types.d.ts → types.d.cts} +0 -0
  126. /package/cjs/{siblings.d.ts → siblings.d.cts} +0 -0
  127. /package/esm/configs/{operations-all.d.mts → operations-all.d.ts} +0 -0
  128. /package/esm/configs/{operations-recommended.d.mts → operations-recommended.d.ts} +0 -0
  129. /package/esm/configs/{schema-all.d.mts → schema-all.d.ts} +0 -0
  130. /package/esm/configs/{schema-recommended.d.mts → schema-recommended.d.ts} +0 -0
  131. /package/esm/configs/{schema-relay.d.mts → schema-relay.d.ts} +0 -0
  132. /package/esm/{documents.d.mts → documents.d.ts} +0 -0
  133. /package/{cjs → esm}/estree-converter/converter.d.ts +0 -0
  134. /package/esm/estree-converter/{types.d.mts → types.d.ts} +0 -0
  135. /package/{cjs → esm}/graphql-config.d.ts +0 -0
  136. /package/{cjs → esm}/rules/description-style.d.ts +0 -0
  137. /package/{cjs → esm}/rules/graphql-js-validation.d.ts +0 -0
  138. /package/{cjs → esm}/rules/input-name.d.ts +0 -0
  139. /package/{cjs → esm}/rules/lone-executable-definition.d.ts +0 -0
  140. /package/{cjs → esm}/rules/match-document-filename.d.ts +0 -0
  141. /package/{cjs → esm}/rules/naming-convention.d.ts +0 -0
  142. /package/{cjs → esm}/rules/no-anonymous-operations.d.ts +0 -0
  143. /package/{cjs → esm}/rules/no-deprecated.d.ts +0 -0
  144. /package/{cjs → esm}/rules/no-duplicate-fields.d.ts +0 -0
  145. /package/{cjs → esm}/rules/no-hashtag-description.d.ts +0 -0
  146. /package/{cjs → esm}/rules/no-one-place-fragments.d.ts +0 -0
  147. /package/{cjs → esm}/rules/no-root-type.d.ts +0 -0
  148. /package/{cjs → esm}/rules/no-scalar-result-type-on-mutation.d.ts +0 -0
  149. /package/{cjs → esm}/rules/no-typename-prefix.d.ts +0 -0
  150. /package/{cjs → esm}/rules/no-unreachable-types.d.ts +0 -0
  151. /package/{cjs → esm}/rules/no-unused-fields.d.ts +0 -0
  152. /package/{cjs → esm}/rules/relay-arguments.d.ts +0 -0
  153. /package/{cjs → esm}/rules/relay-connection-types.d.ts +0 -0
  154. /package/{cjs → esm}/rules/relay-edge-types.d.ts +0 -0
  155. /package/{cjs → esm}/rules/relay-page-info.d.ts +0 -0
  156. /package/{cjs → esm}/rules/require-deprecation-date.d.ts +0 -0
  157. /package/{cjs → esm}/rules/require-deprecation-reason.d.ts +0 -0
  158. /package/{cjs → esm}/rules/require-description.d.ts +0 -0
  159. /package/{cjs → esm}/rules/require-field-of-type-query-in-mutation-result.d.ts +0 -0
  160. /package/{cjs → esm}/rules/require-import-fragment.d.ts +0 -0
  161. /package/{cjs → esm}/rules/require-nullable-fields-with-oneof.d.ts +0 -0
  162. /package/{cjs → esm}/rules/require-nullable-result-in-root.d.ts +0 -0
  163. /package/{cjs → esm}/rules/require-selections.d.ts +0 -0
  164. /package/{cjs → esm}/rules/require-type-pattern-with-oneof.d.ts +0 -0
  165. /package/{cjs → esm}/rules/selection-set-depth.d.ts +0 -0
  166. /package/{cjs → esm}/rules/strict-id-in-types.d.ts +0 -0
  167. /package/{cjs → esm}/rules/unique-enum-value-names.d.ts +0 -0
  168. /package/{cjs → esm}/rules/unique-fragment-name.d.ts +0 -0
  169. /package/{cjs → esm}/rules/unique-operation-name.d.ts +0 -0
  170. /package/{cjs → esm}/schema.d.ts +0 -0
  171. /package/esm/{siblings.d.mts → siblings.d.ts} +0 -0
  172. /package/{cjs → esm}/types.d.ts +0 -0
  173. /package/{cjs → esm}/utils.d.ts +0 -0
package/esm/meta.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ declare const name: string;
2
+ declare const version: string;
3
+
4
+ export { name, version };
package/esm/meta.js ADDED
@@ -0,0 +1,7 @@
1
+ import "./chunk-UIAXBAMD.js";
2
+ import packageJson from "../package.json" assert { type: "json" };
3
+ const { name, version } = packageJson;
4
+ export {
5
+ name,
6
+ version
7
+ };
@@ -9,5 +9,12 @@ import './siblings.js';
9
9
  import '@graphql-tools/utils';
10
10
 
11
11
  declare function parseForESLint(code: string, options: ParserOptions): GraphQLESLintParseResult;
12
+ declare const parser: {
13
+ parseForESLint: typeof parseForESLint;
14
+ meta: {
15
+ name: string;
16
+ version: string;
17
+ };
18
+ };
12
19
 
13
- export { parseForESLint };
20
+ export { parseForESLint, parser };
package/esm/parser.js CHANGED
@@ -5,6 +5,7 @@ import { parseGraphQLSDL } from "@graphql-tools/utils";
5
5
  import { getDocuments } from "./documents.js";
6
6
  import { convertToESTree, extractComments, extractTokens } from "./estree-converter/index.js";
7
7
  import { loadGraphQLConfig } from "./graphql-config.js";
8
+ import { version } from "./meta.js";
8
9
  import { getSchema } from "./schema.js";
9
10
  import { getSiblings } from "./siblings.js";
10
11
  import { CWD, VIRTUAL_DOCUMENT_REGEX } from "./utils.js";
@@ -71,6 +72,14 @@ function parseForESLint(code, options) {
71
72
  throw error;
72
73
  }
73
74
  }
75
+ const parser = {
76
+ parseForESLint,
77
+ meta: {
78
+ name: "@graphql-eslint/parser",
79
+ version
80
+ }
81
+ };
74
82
  export {
75
- parseForESLint
83
+ parseForESLint,
84
+ parser
76
85
  };
@@ -5,6 +5,10 @@ type Block = Linter.ProcessorFile & {
5
5
  offset: number;
6
6
  };
7
7
  declare const processor: {
8
+ meta: {
9
+ name: string;
10
+ version: string;
11
+ };
8
12
  supportsAutofix: true;
9
13
  preprocess(code: string, filePath: string): (string | Block)[];
10
14
  postprocess(messages: Linter.LintMessage[][], filePath: string): Linter.LintMessage[];
package/esm/processor.js CHANGED
@@ -5,10 +5,15 @@ import {
5
5
  } from "@graphql-tools/graphql-tag-pluck";
6
6
  import { asArray } from "@graphql-tools/utils";
7
7
  import { loadOnDiskGraphQLConfig } from "./graphql-config.js";
8
+ import { version } from "./meta.js";
8
9
  import { CWD, REPORT_ON_FIRST_CHARACTER, truthy } from "./utils.js";
9
10
  const blocksMap = /* @__PURE__ */ new Map();
10
11
  let onDiskConfig, onDiskConfigLoaded = !1;
11
12
  const RELEVANT_KEYWORDS = ["gql", "graphql", "GraphQL"], processor = {
13
+ meta: {
14
+ name: "@graphql-eslint/processor",
15
+ version
16
+ },
12
17
  supportsAutofix: !0,
13
18
  preprocess(code, filePath) {
14
19
  onDiskConfigLoaded || (onDiskConfig = loadOnDiskGraphQLConfig(filePath), onDiskConfigLoaded = !0);
@@ -45,7 +45,7 @@ declare const schema: {
45
45
  };
46
46
  readonly arguments: {
47
47
  readonly items: {
48
- readonly enum: ("FieldDefinition" | "Field" | "DirectiveDefinition" | "Directive")[];
48
+ readonly enum: ("Field" | "Directive" | "FieldDefinition" | "DirectiveDefinition")[];
49
49
  };
50
50
  readonly description: "Arguments of fields and directives.";
51
51
  readonly type: "array";
@@ -14,7 +14,7 @@ declare const rules: {
14
14
  alphabetize: GraphQLESLintRule<{
15
15
  definitions?: boolean | undefined;
16
16
  selections?: ("OperationDefinition" | "FragmentDefinition")[] | undefined;
17
- arguments?: ("FieldDefinition" | "Field" | "DirectiveDefinition" | "Directive")[] | undefined;
17
+ arguments?: ("Field" | "Directive" | "FieldDefinition" | "DirectiveDefinition")[] | undefined;
18
18
  values?: boolean | undefined;
19
19
  fields?: ("ObjectTypeDefinition" | "InterfaceTypeDefinition" | "InputObjectTypeDefinition")[] | undefined;
20
20
  variables?: boolean | undefined;
@@ -33,32 +33,32 @@ declare const rules: {
33
33
  ignore?: (graphql.OperationTypeNode | "fragment")[] | undefined;
34
34
  }[]>;
35
35
  'match-document-filename': GraphQLESLintRule<{
36
- query?: (CaseStyle | "matchDocumentStyle") | {
36
+ fragment?: (CaseStyle | "matchDocumentStyle") | {
37
37
  style?: (CaseStyle | "matchDocumentStyle") | undefined;
38
38
  suffix?: string | undefined;
39
39
  prefix?: string | undefined;
40
40
  } | undefined;
41
- mutation?: (CaseStyle | "matchDocumentStyle") | {
41
+ fileExtension?: ".gql" | ".graphql" | undefined;
42
+ query?: (CaseStyle | "matchDocumentStyle") | {
42
43
  style?: (CaseStyle | "matchDocumentStyle") | undefined;
43
44
  suffix?: string | undefined;
44
45
  prefix?: string | undefined;
45
46
  } | undefined;
46
- subscription?: (CaseStyle | "matchDocumentStyle") | {
47
+ mutation?: (CaseStyle | "matchDocumentStyle") | {
47
48
  style?: (CaseStyle | "matchDocumentStyle") | undefined;
48
49
  suffix?: string | undefined;
49
50
  prefix?: string | undefined;
50
51
  } | undefined;
51
- fragment?: (CaseStyle | "matchDocumentStyle") | {
52
+ subscription?: (CaseStyle | "matchDocumentStyle") | {
52
53
  style?: (CaseStyle | "matchDocumentStyle") | undefined;
53
54
  suffix?: string | undefined;
54
55
  prefix?: string | undefined;
55
56
  } | undefined;
56
- fileExtension?: ".gql" | ".graphql" | undefined;
57
57
  }[]>;
58
58
  'naming-convention': GraphQLESLintRule<{
59
59
  [x: string]: unknown;
60
- types?: ("PascalCase" | "camelCase" | "UPPER_CASE" | "snake_case") | {
61
- style?: ("PascalCase" | "camelCase" | "UPPER_CASE" | "snake_case") | undefined;
60
+ types?: ("camelCase" | "PascalCase" | "snake_case" | "UPPER_CASE") | {
61
+ style?: ("camelCase" | "PascalCase" | "snake_case" | "UPPER_CASE") | undefined;
62
62
  suffix?: string | undefined;
63
63
  prefix?: string | undefined;
64
64
  forbiddenPrefixes?: string[] | undefined;
@@ -187,8 +187,8 @@ const MATCH_EXTENSION = "MATCH_EXTENSION", MATCH_STYLE = "MATCH_STYLE", CASE_STY
187
187
  create(context) {
188
188
  const options = context.options[0] || {
189
189
  fileExtension: null
190
- }, filePath = context.filename;
191
- if (VIRTUAL_DOCUMENT_REGEX.test(filePath))
190
+ }, filePath = context.filename, isVirtualFile = VIRTUAL_DOCUMENT_REGEX.test(filePath);
191
+ if (process.env.NODE_ENV !== "test" && isVirtualFile)
192
192
  return {};
193
193
  const fileExtension = extname(filePath), filename = basename(filePath, fileExtension);
194
194
  return {
@@ -6,6 +6,7 @@ import {
6
6
  visit
7
7
  } from "graphql";
8
8
  import lowerCase from "lodash.lowercase";
9
+ import { ModuleCache } from "../cache.js";
9
10
  import { getTypeName, requireGraphQLSchemaFromContext } from "../utils.js";
10
11
  const RULE_ID = "no-unreachable-types", KINDS = [
11
12
  Kind.DIRECTIVE_DEFINITION,
@@ -21,9 +22,7 @@ const RULE_ID = "no-unreachable-types", KINDS = [
21
22
  Kind.UNION_TYPE_EXTENSION,
22
23
  Kind.ENUM_TYPE_DEFINITION,
23
24
  Kind.ENUM_TYPE_EXTENSION
24
- ];
25
- let reachableTypesCache;
26
- const RequestDirectiveLocations = /* @__PURE__ */ new Set([
25
+ ], reachableTypesCache = new ModuleCache(), RequestDirectiveLocations = /* @__PURE__ */ new Set([
27
26
  DirectiveLocation.QUERY,
28
27
  DirectiveLocation.MUTATION,
29
28
  DirectiveLocation.SUBSCRIPTION,
@@ -34,8 +33,9 @@ const RequestDirectiveLocations = /* @__PURE__ */ new Set([
34
33
  DirectiveLocation.VARIABLE_DEFINITION
35
34
  ]);
36
35
  function getReachableTypes(schema) {
37
- if (reachableTypesCache)
38
- return reachableTypesCache;
36
+ const cachedValue = reachableTypesCache.get(schema);
37
+ if (process.env.NODE_ENV !== "test" && cachedValue)
38
+ return cachedValue;
39
39
  const reachableTypes = /* @__PURE__ */ new Set(), collect = (node) => {
40
40
  const typeName = getTypeName(node);
41
41
  if (reachableTypes.has(typeName))
@@ -72,7 +72,7 @@ function getReachableTypes(schema) {
72
72
  argTypeName && reachableTypes.add(argTypeName);
73
73
  }
74
74
  }
75
- return reachableTypesCache = reachableTypes, reachableTypesCache;
75
+ return reachableTypesCache.set(schema, reachableTypes), reachableTypes;
76
76
  }
77
77
  const rule = {
78
78
  meta: {
@@ -1,11 +1,12 @@
1
1
  import "../chunk-UIAXBAMD.js";
2
2
  import { TypeInfo, visit, visitWithTypeInfo } from "graphql";
3
+ import { ModuleCache } from "../cache.js";
3
4
  import { requireGraphQLSchemaFromContext, requireSiblingsOperations } from "../utils.js";
4
- const RULE_ID = "no-unused-fields";
5
- let usedFieldsCache;
5
+ const RULE_ID = "no-unused-fields", usedFieldsCache = new ModuleCache();
6
6
  function getUsedFields(schema, operations) {
7
- if (usedFieldsCache)
8
- return usedFieldsCache;
7
+ const cachedValue = usedFieldsCache.get(schema);
8
+ if (process.env.NODE_ENV !== "test" && cachedValue)
9
+ return cachedValue;
9
10
  const usedFields = /* @__PURE__ */ Object.create(null), typeInfo = new TypeInfo(schema), visitor = visitWithTypeInfo(typeInfo, {
10
11
  Field(node) {
11
12
  if (!typeInfo.getFieldDef())
@@ -16,7 +17,7 @@ function getUsedFields(schema, operations) {
16
17
  }), allDocuments = [...operations.getOperations(), ...operations.getFragments()];
17
18
  for (const { document } of allDocuments)
18
19
  visit(document, visitor);
19
- return usedFieldsCache = usedFields, usedFieldsCache;
20
+ return usedFieldsCache.set(schema, usedFields), usedFields;
20
21
  }
21
22
  const rule = {
22
23
  meta: {
@@ -10,7 +10,7 @@ import { getTypeName, requireGraphQLSchemaFromContext } from "../utils.js";
10
10
  const RULE_ID = "relay-edge-types", MESSAGE_MUST_BE_OBJECT_TYPE = "MESSAGE_MUST_BE_OBJECT_TYPE", MESSAGE_MISSING_EDGE_SUFFIX = "MESSAGE_MISSING_EDGE_SUFFIX", MESSAGE_LIST_TYPE_ONLY_EDGE_TYPE = "MESSAGE_LIST_TYPE_ONLY_EDGE_TYPE", MESSAGE_SHOULD_IMPLEMENTS_NODE = "MESSAGE_SHOULD_IMPLEMENTS_NODE";
11
11
  let edgeTypesCache;
12
12
  function getEdgeTypes(schema2) {
13
- if (edgeTypesCache)
13
+ if (process.env.NODE_ENV !== "test" && edgeTypesCache)
14
14
  return edgeTypesCache;
15
15
  const edgeTypes = /* @__PURE__ */ new Set(), visitor = {
16
16
  ObjectTypeDefinition(node) {
@@ -45,7 +45,7 @@ const rule = {
45
45
  },
46
46
  create(context) {
47
47
  const schema = requireGraphQLSchemaFromContext(RULE_ID, context);
48
- return hasPageInfoChecked || (schema.getType("PageInfo") || context.report({
48
+ return (process.env.NODE_ENV === "test" || !hasPageInfoChecked) && (schema.getType("PageInfo") || context.report({
49
49
  loc: REPORT_ON_FIRST_CHARACTER,
50
50
  messageId: MESSAGE_MUST_EXIST
51
51
  }), hasPageInfoChecked = !0), {
@@ -38,6 +38,7 @@ const RULE_ID = "require-selections", DEFAULT_ID_FIELD_NAME = "id", schema = {
38
38
  }, rule = {
39
39
  meta: {
40
40
  type: "suggestion",
41
+ // eslint-disable-next-line eslint-plugin/require-meta-has-suggestions -- false positive since we assign `problem.suggest` conditionally
41
42
  hasSuggestions: !0,
42
43
  docs: {
43
44
  category: "Operations",
@@ -92,7 +92,7 @@ const RULE_ID = "selection-set-depth", schema = {
92
92
  checkFn({
93
93
  getDocument: () => document,
94
94
  reportError(error) {
95
- const { line, column } = error.locations[0], token = context.getAncestors()[0].tokens.find(
95
+ const { line, column } = error.locations[0], token = context.sourceCode.getAncestors(node)[0].tokens.find(
96
96
  (token2) => token2.loc.start.line === line && token2.loc.start.column === column - 1
97
97
  );
98
98
  context.report({