@graphql-eslint/eslint-plugin 4.0.0-alpha-20220821140530-e968cfc → 4.0.0-alpha-20230810155929-e89edf7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +14 -252
- package/cjs/cache.d.ts +12 -0
- package/cjs/cache.js +53 -0
- package/cjs/configs/index.d.ts +174 -0
- package/cjs/configs/index.js +40 -0
- package/cjs/configs/operations-all.d.ts +23 -0
- package/cjs/configs/operations-all.js +28 -0
- package/cjs/configs/operations-recommended.d.ts +54 -0
- package/{configs/operations-recommended.json → cjs/configs/operations-recommended.js} +19 -15
- package/cjs/configs/schema-all.d.ts +24 -0
- package/cjs/configs/schema-all.js +24 -0
- package/cjs/configs/schema-recommended.d.ts +67 -0
- package/cjs/configs/schema-recommended.js +68 -0
- package/cjs/configs/schema-relay.d.ts +12 -0
- package/{configs/relay.json → cjs/configs/schema-relay.js} +6 -4
- package/cjs/documents.d.ts +6 -0
- package/cjs/documents.js +66 -0
- package/cjs/estree-converter/converter.d.ts +8 -0
- package/cjs/estree-converter/converter.js +70 -0
- package/cjs/estree-converter/index.d.ts +8 -0
- package/cjs/estree-converter/index.js +23 -0
- package/cjs/estree-converter/types.d.ts +42 -0
- package/cjs/estree-converter/types.js +14 -0
- package/cjs/estree-converter/utils.d.ts +17 -0
- package/cjs/estree-converter/utils.js +105 -0
- package/cjs/flat-configs.d.ts +307 -0
- package/cjs/flat-configs.js +55 -0
- package/cjs/graphql-config.d.ts +14 -0
- package/cjs/graphql-config.js +65 -0
- package/cjs/index.d.ts +28 -0
- package/cjs/index.js +41 -0
- package/cjs/parser.d.ts +13 -0
- package/cjs/parser.js +96 -0
- package/cjs/processor.d.ts +13 -0
- package/cjs/processor.js +95 -0
- package/cjs/rules/alphabetize.d.ts +74 -0
- package/cjs/rules/alphabetize.js +323 -0
- package/cjs/rules/description-style.d.ts +29 -0
- package/cjs/rules/description-style.js +102 -0
- package/cjs/rules/graphql-js-validation.d.ts +13 -0
- package/cjs/rules/graphql-js-validation.js +595 -0
- package/cjs/rules/index.d.ts +127 -0
- package/cjs/rules/index.js +62 -0
- package/cjs/rules/input-name.d.ts +44 -0
- package/cjs/rules/input-name.js +154 -0
- package/cjs/rules/lone-executable-definition.d.ts +35 -0
- package/cjs/rules/lone-executable-definition.js +105 -0
- package/cjs/rules/match-document-filename.d.ts +81 -0
- package/cjs/rules/match-document-filename.js +251 -0
- package/cjs/rules/naming-convention.d.ts +108 -0
- package/cjs/rules/naming-convention.js +416 -0
- package/cjs/rules/no-anonymous-operations.d.ts +13 -0
- package/cjs/rules/no-anonymous-operations.js +91 -0
- package/cjs/rules/no-deprecated.d.ts +13 -0
- package/cjs/rules/no-deprecated.js +143 -0
- package/cjs/rules/no-duplicate-fields.d.ts +13 -0
- package/cjs/rules/no-duplicate-fields.js +136 -0
- package/cjs/rules/no-hashtag-description.d.ts +14 -0
- package/cjs/rules/no-hashtag-description.js +127 -0
- package/cjs/rules/no-one-place-fragments.d.ts +13 -0
- package/cjs/rules/no-one-place-fragments.js +101 -0
- package/cjs/rules/no-root-type.d.ts +34 -0
- package/cjs/rules/no-root-type.js +103 -0
- package/cjs/rules/no-scalar-result-type-on-mutation.d.ts +13 -0
- package/cjs/rules/no-scalar-result-type-on-mutation.js +88 -0
- package/cjs/rules/no-typename-prefix.d.ts +13 -0
- package/cjs/rules/no-typename-prefix.js +91 -0
- package/cjs/rules/no-unreachable-types.d.ts +13 -0
- package/cjs/rules/no-unreachable-types.js +177 -0
- package/cjs/rules/no-unused-fields.d.ts +13 -0
- package/cjs/rules/no-unused-fields.js +132 -0
- package/cjs/rules/relay-arguments.d.ts +30 -0
- package/cjs/rules/relay-arguments.js +126 -0
- package/cjs/rules/relay-connection-types.d.ts +14 -0
- package/cjs/rules/relay-connection-types.js +111 -0
- package/cjs/rules/relay-edge-types.d.ts +40 -0
- package/cjs/rules/relay-edge-types.js +161 -0
- package/cjs/rules/relay-page-info.d.ts +13 -0
- package/cjs/rules/relay-page-info.js +98 -0
- package/cjs/rules/require-deprecation-date.d.ts +27 -0
- package/cjs/rules/require-deprecation-date.js +148 -0
- package/cjs/rules/require-deprecation-reason.d.ts +13 -0
- package/cjs/rules/require-deprecation-reason.js +85 -0
- package/cjs/rules/require-description.d.ts +24 -0
- package/cjs/rules/require-description.js +179 -0
- package/cjs/rules/require-field-of-type-query-in-mutation-result.d.ts +13 -0
- package/cjs/rules/require-field-of-type-query-in-mutation-result.js +87 -0
- package/cjs/rules/require-import-fragment.d.ts +13 -0
- package/cjs/rules/require-import-fragment.js +148 -0
- package/cjs/rules/require-nullable-fields-with-oneof.d.ts +13 -0
- package/cjs/rules/require-nullable-fields-with-oneof.js +81 -0
- package/cjs/rules/require-nullable-result-in-root.d.ts +13 -0
- package/cjs/rules/require-nullable-result-in-root.js +99 -0
- package/cjs/rules/require-selections.d.ts +45 -0
- package/cjs/rules/require-selections.js +198 -0
- package/cjs/rules/require-type-pattern-with-oneof.d.ts +13 -0
- package/cjs/rules/require-type-pattern-with-oneof.js +83 -0
- package/cjs/rules/selection-set-depth.d.ts +37 -0
- package/cjs/rules/selection-set-depth.js +159 -0
- package/cjs/rules/strict-id-in-types.d.ts +66 -0
- package/cjs/rules/strict-id-in-types.js +168 -0
- package/cjs/rules/unique-enum-value-names.d.ts +13 -0
- package/cjs/rules/unique-enum-value-names.js +91 -0
- package/cjs/rules/unique-fragment-name.d.ts +14 -0
- package/cjs/rules/unique-fragment-name.js +106 -0
- package/cjs/rules/unique-operation-name.d.ts +13 -0
- package/cjs/rules/unique-operation-name.js +93 -0
- package/cjs/schema.d.ts +13 -0
- package/cjs/schema.js +52 -0
- package/{sibling-operations.d.ts → cjs/siblings.d.ts} +9 -6
- package/cjs/siblings.js +96 -0
- package/cjs/types.d.ts +75 -0
- package/cjs/types.js +14 -0
- package/cjs/utils.d.ts +45 -0
- package/cjs/utils.js +188 -0
- package/esm/cache.d.mts +12 -0
- package/esm/cache.js +25 -0
- package/esm/chunk-U3TKCM4X.js +8 -0
- package/esm/configs/index.d.mts +174 -0
- package/esm/configs/index.js +16 -0
- package/esm/configs/operations-all.d.mts +23 -0
- package/esm/configs/operations-all.js +35 -0
- package/esm/configs/operations-recommended.d.mts +54 -0
- package/esm/configs/operations-recommended.js +61 -0
- package/esm/configs/schema-all.d.mts +24 -0
- package/esm/configs/schema-all.js +31 -0
- package/esm/configs/schema-recommended.d.mts +67 -0
- package/esm/configs/schema-recommended.js +75 -0
- package/esm/configs/schema-relay.d.mts +12 -0
- package/esm/configs/schema-relay.js +18 -0
- package/esm/documents.d.mts +6 -0
- package/esm/documents.js +41 -0
- package/esm/estree-converter/converter.d.mts +8 -0
- package/esm/estree-converter/converter.js +56 -0
- package/esm/estree-converter/index.d.mts +8 -0
- package/esm/estree-converter/index.js +3 -0
- package/esm/estree-converter/types.d.mts +42 -0
- package/esm/estree-converter/types.js +0 -0
- package/esm/estree-converter/utils.d.mts +17 -0
- package/esm/estree-converter/utils.js +87 -0
- package/esm/flat-configs.d.mts +307 -0
- package/esm/flat-configs.js +36 -0
- package/esm/graphql-config.d.mts +14 -0
- package/esm/graphql-config.js +39 -0
- package/esm/index.d.mts +28 -0
- package/esm/index.js +18 -0
- package/esm/package.json +1 -0
- package/esm/parser.d.mts +13 -0
- package/esm/parser.js +76 -0
- package/esm/processor.d.mts +13 -0
- package/esm/processor.js +81 -0
- package/esm/rules/alphabetize.d.mts +74 -0
- package/esm/rules/alphabetize.js +299 -0
- package/esm/rules/description-style.d.mts +29 -0
- package/esm/rules/description-style.js +82 -0
- package/esm/rules/graphql-js-validation.d.mts +13 -0
- package/esm/rules/graphql-js-validation.js +618 -0
- package/esm/rules/index.d.mts +127 -0
- package/esm/rules/index.js +76 -0
- package/esm/rules/input-name.d.mts +44 -0
- package/esm/rules/input-name.js +136 -0
- package/esm/rules/lone-executable-definition.d.mts +35 -0
- package/esm/rules/lone-executable-definition.js +86 -0
- package/esm/rules/match-document-filename.d.mts +81 -0
- package/esm/rules/match-document-filename.js +237 -0
- package/esm/rules/naming-convention.d.mts +108 -0
- package/esm/rules/naming-convention.js +403 -0
- package/esm/rules/no-anonymous-operations.d.mts +13 -0
- package/esm/rules/no-anonymous-operations.js +72 -0
- package/esm/rules/no-deprecated.d.mts +13 -0
- package/esm/rules/no-deprecated.js +124 -0
- package/esm/rules/no-duplicate-fields.d.mts +13 -0
- package/esm/rules/no-duplicate-fields.js +116 -0
- package/esm/rules/no-hashtag-description.d.mts +14 -0
- package/esm/rules/no-hashtag-description.js +107 -0
- package/esm/rules/no-one-place-fragments.d.mts +13 -0
- package/esm/rules/no-one-place-fragments.js +83 -0
- package/esm/rules/no-root-type.d.mts +34 -0
- package/esm/rules/no-root-type.js +83 -0
- package/esm/rules/no-scalar-result-type-on-mutation.d.mts +13 -0
- package/esm/rules/no-scalar-result-type-on-mutation.js +69 -0
- package/esm/rules/no-typename-prefix.d.mts +13 -0
- package/esm/rules/no-typename-prefix.js +71 -0
- package/esm/rules/no-unreachable-types.d.mts +13 -0
- package/esm/rules/no-unreachable-types.js +156 -0
- package/esm/rules/no-unused-fields.d.mts +13 -0
- package/esm/rules/no-unused-fields.js +113 -0
- package/esm/rules/relay-arguments.d.mts +30 -0
- package/esm/rules/relay-arguments.js +107 -0
- package/esm/rules/relay-connection-types.d.mts +14 -0
- package/esm/rules/relay-connection-types.js +90 -0
- package/esm/rules/relay-edge-types.d.mts +40 -0
- package/esm/rules/relay-edge-types.js +148 -0
- package/esm/rules/relay-page-info.d.mts +13 -0
- package/esm/rules/relay-page-info.js +80 -0
- package/esm/rules/require-deprecation-date.d.mts +27 -0
- package/esm/rules/require-deprecation-date.js +129 -0
- package/esm/rules/require-deprecation-reason.d.mts +13 -0
- package/esm/rules/require-deprecation-reason.js +66 -0
- package/esm/rules/require-description.d.mts +24 -0
- package/esm/rules/require-description.js +165 -0
- package/esm/rules/require-field-of-type-query-in-mutation-result.d.mts +13 -0
- package/esm/rules/require-field-of-type-query-in-mutation-result.js +68 -0
- package/esm/rules/require-import-fragment.d.mts +13 -0
- package/esm/rules/require-import-fragment.js +121 -0
- package/esm/rules/require-nullable-fields-with-oneof.d.mts +13 -0
- package/esm/rules/require-nullable-fields-with-oneof.js +62 -0
- package/esm/rules/require-nullable-result-in-root.d.mts +13 -0
- package/esm/rules/require-nullable-result-in-root.js +80 -0
- package/esm/rules/require-selections.d.mts +45 -0
- package/esm/rules/require-selections.js +194 -0
- package/esm/rules/require-type-pattern-with-oneof.d.mts +13 -0
- package/esm/rules/require-type-pattern-with-oneof.js +63 -0
- package/esm/rules/selection-set-depth.d.mts +37 -0
- package/esm/rules/selection-set-depth.js +133 -0
- package/esm/rules/strict-id-in-types.d.mts +66 -0
- package/esm/rules/strict-id-in-types.js +155 -0
- package/esm/rules/unique-enum-value-names.d.mts +13 -0
- package/esm/rules/unique-enum-value-names.js +72 -0
- package/esm/rules/unique-fragment-name.d.mts +14 -0
- package/esm/rules/unique-fragment-name.js +87 -0
- package/esm/rules/unique-operation-name.d.mts +13 -0
- package/esm/rules/unique-operation-name.js +73 -0
- package/esm/schema.d.mts +13 -0
- package/esm/schema.js +27 -0
- package/esm/siblings.d.mts +24 -0
- package/esm/siblings.js +80 -0
- package/esm/types.d.mts +75 -0
- package/esm/types.js +0 -0
- package/esm/utils.d.mts +45 -0
- package/esm/utils.js +144 -0
- package/index.browser.mjs +5323 -0
- package/package.json +43 -35
- package/configs/base.json +0 -4
- package/configs/operations-all.json +0 -24
- package/configs/schema-all.json +0 -26
- package/configs/schema-recommended.json +0 -49
- package/docs/README.md +0 -75
- package/docs/custom-rules.md +0 -148
- package/docs/deprecated-rules.md +0 -21
- package/docs/parser-options.md +0 -85
- package/docs/parser.md +0 -49
- package/docs/rules/alphabetize.md +0 -178
- package/docs/rules/description-style.md +0 -54
- package/docs/rules/executable-definitions.md +0 -17
- package/docs/rules/fields-on-correct-type.md +0 -17
- package/docs/rules/fragments-on-composite-type.md +0 -17
- package/docs/rules/input-name.md +0 -76
- package/docs/rules/known-argument-names.md +0 -17
- package/docs/rules/known-directives.md +0 -44
- package/docs/rules/known-fragment-names.md +0 -69
- package/docs/rules/known-type-names.md +0 -17
- package/docs/rules/lone-anonymous-operation.md +0 -17
- package/docs/rules/lone-schema-definition.md +0 -17
- package/docs/rules/match-document-filename.md +0 -156
- package/docs/rules/naming-convention.md +0 -300
- package/docs/rules/no-anonymous-operations.md +0 -39
- package/docs/rules/no-case-insensitive-enum-values-duplicates.md +0 -43
- package/docs/rules/no-deprecated.md +0 -85
- package/docs/rules/no-duplicate-fields.md +0 -65
- package/docs/rules/no-fragment-cycles.md +0 -17
- package/docs/rules/no-hashtag-description.md +0 -59
- package/docs/rules/no-root-type.md +0 -53
- package/docs/rules/no-scalar-result-type-on-mutation.md +0 -37
- package/docs/rules/no-typename-prefix.md +0 -39
- package/docs/rules/no-undefined-variables.md +0 -17
- package/docs/rules/no-unreachable-types.md +0 -49
- package/docs/rules/no-unused-fields.md +0 -62
- package/docs/rules/no-unused-fragments.md +0 -17
- package/docs/rules/no-unused-variables.md +0 -17
- package/docs/rules/one-field-subscriptions.md +0 -17
- package/docs/rules/overlapping-fields-can-be-merged.md +0 -17
- package/docs/rules/possible-fragment-spread.md +0 -17
- package/docs/rules/possible-type-extension.md +0 -15
- package/docs/rules/provided-required-arguments.md +0 -17
- package/docs/rules/relay-arguments.md +0 -57
- package/docs/rules/relay-connection-types.md +0 -42
- package/docs/rules/relay-edge-types.md +0 -56
- package/docs/rules/relay-page-info.md +0 -32
- package/docs/rules/require-deprecation-date.md +0 -56
- package/docs/rules/require-deprecation-reason.md +0 -47
- package/docs/rules/require-description.md +0 -115
- package/docs/rules/require-field-of-type-query-in-mutation-result.md +0 -47
- package/docs/rules/require-id-when-available.md +0 -88
- package/docs/rules/scalar-leafs.md +0 -17
- package/docs/rules/selection-set-depth.md +0 -76
- package/docs/rules/strict-id-in-types.md +0 -130
- package/docs/rules/unique-argument-names.md +0 -17
- package/docs/rules/unique-directive-names-per-location.md +0 -17
- package/docs/rules/unique-directive-names.md +0 -17
- package/docs/rules/unique-enum-value-names.md +0 -15
- package/docs/rules/unique-field-definition-names.md +0 -17
- package/docs/rules/unique-fragment-name.md +0 -51
- package/docs/rules/unique-input-field-names.md +0 -17
- package/docs/rules/unique-operation-name.md +0 -55
- package/docs/rules/unique-operation-types.md +0 -17
- package/docs/rules/unique-type-names.md +0 -17
- package/docs/rules/unique-variable-names.md +0 -17
- package/docs/rules/value-literals-of-correct-type.md +0 -17
- package/docs/rules/variables-are-input-types.md +0 -17
- package/docs/rules/variables-in-allowed-position.md +0 -17
- package/estree-converter/converter.d.ts +0 -3
- package/estree-converter/index.d.ts +0 -3
- package/estree-converter/types.d.ts +0 -40
- package/estree-converter/utils.d.ts +0 -13
- package/graphql-config.d.ts +0 -3
- package/index.d.ts +0 -16
- package/index.js +0 -4653
- package/index.mjs +0 -4641
- package/parser.d.ts +0 -2
- package/processor.d.ts +0 -7
- package/rules/alphabetize.d.ts +0 -16
- package/rules/description-style.d.ts +0 -6
- package/rules/graphql-js-validation.d.ts +0 -2
- package/rules/index.d.ts +0 -41
- package/rules/input-name.d.ts +0 -9
- package/rules/match-document-filename.d.ts +0 -18
- package/rules/naming-convention.d.ts +0 -37
- package/rules/no-anonymous-operations.d.ts +0 -3
- package/rules/no-case-insensitive-enum-values-duplicates.d.ts +0 -3
- package/rules/no-deprecated.d.ts +0 -3
- package/rules/no-duplicate-fields.d.ts +0 -3
- package/rules/no-hashtag-description.d.ts +0 -3
- package/rules/no-root-type.d.ts +0 -7
- package/rules/no-scalar-result-type-on-mutation.d.ts +0 -3
- package/rules/no-typename-prefix.d.ts +0 -3
- package/rules/no-unreachable-types.d.ts +0 -3
- package/rules/no-unused-fields.d.ts +0 -3
- package/rules/relay-arguments.d.ts +0 -6
- package/rules/relay-connection-types.d.ts +0 -5
- package/rules/relay-edge-types.d.ts +0 -8
- package/rules/relay-page-info.d.ts +0 -3
- package/rules/require-deprecation-date.d.ts +0 -5
- package/rules/require-deprecation-reason.d.ts +0 -3
- package/rules/require-description.d.ts +0 -11
- package/rules/require-field-of-type-query-in-mutation-result.d.ts +0 -3
- package/rules/require-id-when-available.d.ts +0 -6
- package/rules/selection-set-depth.d.ts +0 -7
- package/rules/strict-id-in-types.d.ts +0 -11
- package/rules/unique-fragment-name.d.ts +0 -6
- package/rules/unique-operation-name.d.ts +0 -3
- package/schema.d.ts +0 -3
- package/testkit.d.ts +0 -27
- package/types.d.ts +0 -79
- package/utils.d.ts +0 -39
@@ -0,0 +1,99 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __defProp = Object.defineProperty;
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
6
|
+
var __export = (target, all) => {
|
7
|
+
for (var name in all)
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: !0 });
|
9
|
+
}, __copyProps = (to, from, except, desc) => {
|
10
|
+
if (from && typeof from == "object" || typeof from == "function")
|
11
|
+
for (let key of __getOwnPropNames(from))
|
12
|
+
!__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
13
|
+
return to;
|
14
|
+
};
|
15
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
|
16
|
+
var require_nullable_result_in_root_exports = {};
|
17
|
+
__export(require_nullable_result_in_root_exports, {
|
18
|
+
rule: () => rule
|
19
|
+
});
|
20
|
+
module.exports = __toCommonJS(require_nullable_result_in_root_exports);
|
21
|
+
var import_graphql = require("graphql"), import_utils = require("../utils.js");
|
22
|
+
const RULE_ID = "require-nullable-result-in-root", rule = {
|
23
|
+
meta: {
|
24
|
+
type: "suggestion",
|
25
|
+
hasSuggestions: !0,
|
26
|
+
docs: {
|
27
|
+
category: "Schema",
|
28
|
+
description: "Require nullable fields in root types.",
|
29
|
+
url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
|
30
|
+
requiresSchema: !0,
|
31
|
+
examples: [
|
32
|
+
{
|
33
|
+
title: "Incorrect",
|
34
|
+
code: (
|
35
|
+
/* GraphQL */
|
36
|
+
`
|
37
|
+
type Query {
|
38
|
+
user: User!
|
39
|
+
}
|
40
|
+
`
|
41
|
+
)
|
42
|
+
},
|
43
|
+
{
|
44
|
+
title: "Correct",
|
45
|
+
code: (
|
46
|
+
/* GraphQL */
|
47
|
+
`
|
48
|
+
type Query {
|
49
|
+
foo: User
|
50
|
+
baz: [User]!
|
51
|
+
bar: [User!]!
|
52
|
+
}
|
53
|
+
`
|
54
|
+
)
|
55
|
+
}
|
56
|
+
]
|
57
|
+
},
|
58
|
+
messages: {
|
59
|
+
[RULE_ID]: "Unexpected non-null result {{ resultType }} in {{ rootType }}"
|
60
|
+
},
|
61
|
+
schema: []
|
62
|
+
},
|
63
|
+
create(context) {
|
64
|
+
const schema = (0, import_utils.requireGraphQLSchemaFromContext)(RULE_ID, context), rootTypeNames = new Set(
|
65
|
+
[schema.getQueryType(), schema.getMutationType()].filter(import_utils.truthy).map((type) => type.name)
|
66
|
+
), sourceCode = context.getSourceCode();
|
67
|
+
return {
|
68
|
+
"ObjectTypeDefinition,ObjectTypeExtension"(node) {
|
69
|
+
if (rootTypeNames.has(node.name.value))
|
70
|
+
for (const field of node.fields || []) {
|
71
|
+
if (field.gqlType.type !== import_graphql.Kind.NON_NULL_TYPE || field.gqlType.gqlType.type !== import_graphql.Kind.NAMED_TYPE)
|
72
|
+
continue;
|
73
|
+
const name = field.gqlType.gqlType.name.value, type = schema.getType(name), resultType = type?.astNode ? (0, import_utils.getNodeName)(type.astNode) : type?.name;
|
74
|
+
context.report({
|
75
|
+
node: field.gqlType,
|
76
|
+
messageId: RULE_ID,
|
77
|
+
data: {
|
78
|
+
resultType: resultType || "",
|
79
|
+
rootType: (0, import_utils.getNodeName)(node)
|
80
|
+
},
|
81
|
+
suggest: [
|
82
|
+
{
|
83
|
+
desc: `Make ${resultType} nullable`,
|
84
|
+
fix(fixer) {
|
85
|
+
const text = sourceCode.getText(field.gqlType);
|
86
|
+
return fixer.replaceText(field.gqlType, text.replace("!", ""));
|
87
|
+
}
|
88
|
+
}
|
89
|
+
]
|
90
|
+
});
|
91
|
+
}
|
92
|
+
}
|
93
|
+
};
|
94
|
+
}
|
95
|
+
};
|
96
|
+
// Annotate the CommonJS export names for ESM import in node:
|
97
|
+
0 && (module.exports = {
|
98
|
+
rule
|
99
|
+
});
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import { FromSchema } from 'json-schema-to-ts';
|
2
|
+
import { GraphQLESLintRule } from '../types.js';
|
3
|
+
import 'eslint';
|
4
|
+
import 'estree';
|
5
|
+
import 'graphql';
|
6
|
+
import '../siblings.js';
|
7
|
+
import '@graphql-tools/utils';
|
8
|
+
import '../estree-converter/types.js';
|
9
|
+
import 'graphql-config';
|
10
|
+
|
11
|
+
declare const schema: {
|
12
|
+
readonly definitions: {
|
13
|
+
readonly asString: {
|
14
|
+
readonly type: "string";
|
15
|
+
};
|
16
|
+
readonly asArray: {
|
17
|
+
readonly type: "array";
|
18
|
+
readonly uniqueItems: true;
|
19
|
+
readonly minItems: 1;
|
20
|
+
readonly items: {
|
21
|
+
readonly type: "string";
|
22
|
+
};
|
23
|
+
};
|
24
|
+
};
|
25
|
+
readonly type: "array";
|
26
|
+
readonly maxItems: 1;
|
27
|
+
readonly items: {
|
28
|
+
readonly type: "object";
|
29
|
+
readonly additionalProperties: false;
|
30
|
+
readonly properties: {
|
31
|
+
readonly fieldName: {
|
32
|
+
readonly oneOf: readonly [{
|
33
|
+
readonly $ref: "#/definitions/asString";
|
34
|
+
}, {
|
35
|
+
readonly $ref: "#/definitions/asArray";
|
36
|
+
}];
|
37
|
+
readonly default: "id";
|
38
|
+
};
|
39
|
+
};
|
40
|
+
};
|
41
|
+
};
|
42
|
+
type RuleOptions = FromSchema<typeof schema>;
|
43
|
+
declare const rule: GraphQLESLintRule<RuleOptions, true>;
|
44
|
+
|
45
|
+
export { RuleOptions, rule };
|
@@ -0,0 +1,198 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __defProp = Object.defineProperty;
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
6
|
+
var __export = (target, all) => {
|
7
|
+
for (var name in all)
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: !0 });
|
9
|
+
}, __copyProps = (to, from, except, desc) => {
|
10
|
+
if (from && typeof from == "object" || typeof from == "function")
|
11
|
+
for (let key of __getOwnPropNames(from))
|
12
|
+
!__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
13
|
+
return to;
|
14
|
+
};
|
15
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
|
16
|
+
var require_selections_exports = {};
|
17
|
+
__export(require_selections_exports, {
|
18
|
+
rule: () => rule
|
19
|
+
});
|
20
|
+
module.exports = __toCommonJS(require_selections_exports);
|
21
|
+
var import_utils = require("@graphql-tools/utils"), import_graphql = require("graphql"), import_estree_converter = require("../estree-converter/index.js"), import_utils2 = require("../utils.js");
|
22
|
+
const RULE_ID = "require-selections", DEFAULT_ID_FIELD_NAME = "id", schema = {
|
23
|
+
definitions: {
|
24
|
+
asString: {
|
25
|
+
type: "string"
|
26
|
+
},
|
27
|
+
asArray: import_utils2.ARRAY_DEFAULT_OPTIONS
|
28
|
+
},
|
29
|
+
type: "array",
|
30
|
+
maxItems: 1,
|
31
|
+
items: {
|
32
|
+
type: "object",
|
33
|
+
additionalProperties: !1,
|
34
|
+
properties: {
|
35
|
+
fieldName: {
|
36
|
+
oneOf: [{ $ref: "#/definitions/asString" }, { $ref: "#/definitions/asArray" }],
|
37
|
+
default: DEFAULT_ID_FIELD_NAME
|
38
|
+
}
|
39
|
+
}
|
40
|
+
}
|
41
|
+
}, rule = {
|
42
|
+
meta: {
|
43
|
+
type: "suggestion",
|
44
|
+
hasSuggestions: !0,
|
45
|
+
docs: {
|
46
|
+
category: "Operations",
|
47
|
+
description: "Enforce selecting specific fields when they are available on the GraphQL type.",
|
48
|
+
url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
|
49
|
+
requiresSchema: !0,
|
50
|
+
requiresSiblings: !0,
|
51
|
+
examples: [
|
52
|
+
{
|
53
|
+
title: "Incorrect",
|
54
|
+
code: (
|
55
|
+
/* GraphQL */
|
56
|
+
`
|
57
|
+
# In your schema
|
58
|
+
type User {
|
59
|
+
id: ID!
|
60
|
+
name: String!
|
61
|
+
}
|
62
|
+
|
63
|
+
# Query
|
64
|
+
query {
|
65
|
+
user {
|
66
|
+
name
|
67
|
+
}
|
68
|
+
}
|
69
|
+
`
|
70
|
+
)
|
71
|
+
},
|
72
|
+
{
|
73
|
+
title: "Correct",
|
74
|
+
code: (
|
75
|
+
/* GraphQL */
|
76
|
+
`
|
77
|
+
# In your schema
|
78
|
+
type User {
|
79
|
+
id: ID!
|
80
|
+
name: String!
|
81
|
+
}
|
82
|
+
|
83
|
+
# Query
|
84
|
+
query {
|
85
|
+
user {
|
86
|
+
id
|
87
|
+
name
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
# Selecting \`id\` with an alias is also valid
|
92
|
+
query {
|
93
|
+
user {
|
94
|
+
id: name
|
95
|
+
}
|
96
|
+
}
|
97
|
+
`
|
98
|
+
)
|
99
|
+
}
|
100
|
+
],
|
101
|
+
recommended: !0
|
102
|
+
},
|
103
|
+
messages: {
|
104
|
+
[RULE_ID]: `Field{{ pluralSuffix }} {{ fieldName }} must be selected when it's available on a type.
|
105
|
+
Include it in your selection set{{ addition }}.`
|
106
|
+
},
|
107
|
+
schema
|
108
|
+
},
|
109
|
+
create(context) {
|
110
|
+
const schema2 = (0, import_utils2.requireGraphQLSchemaFromContext)(RULE_ID, context), siblings = (0, import_utils2.requireSiblingsOperations)(RULE_ID, context), { fieldName = DEFAULT_ID_FIELD_NAME } = context.options[0] || {}, idNames = (0, import_utils.asArray)(fieldName), selector = "OperationDefinition SelectionSet[parent.kind!=/(^OperationDefinition|InlineFragment)$/]", typeInfo = new import_graphql.TypeInfo(schema2);
|
111
|
+
function checkFragments(node) {
|
112
|
+
for (const selection of node.selections) {
|
113
|
+
if (selection.kind !== import_graphql.Kind.FRAGMENT_SPREAD)
|
114
|
+
continue;
|
115
|
+
const [foundSpread] = siblings.getFragment(selection.name.value);
|
116
|
+
if (!foundSpread)
|
117
|
+
continue;
|
118
|
+
const checkedFragmentSpreads = /* @__PURE__ */ new Set(), visitor = (0, import_graphql.visitWithTypeInfo)(typeInfo, {
|
119
|
+
SelectionSet(node2, key, _parent) {
|
120
|
+
const parent = _parent;
|
121
|
+
parent.kind === import_graphql.Kind.FRAGMENT_DEFINITION ? checkedFragmentSpreads.add(parent.name.value) : parent.kind !== import_graphql.Kind.INLINE_FRAGMENT && checkSelections(
|
122
|
+
node2,
|
123
|
+
typeInfo.getType(),
|
124
|
+
selection.loc.start,
|
125
|
+
parent,
|
126
|
+
checkedFragmentSpreads
|
127
|
+
);
|
128
|
+
}
|
129
|
+
});
|
130
|
+
(0, import_graphql.visit)(foundSpread.document, visitor);
|
131
|
+
}
|
132
|
+
}
|
133
|
+
function checkSelections(node, type, loc, parent, checkedFragmentSpreads = /* @__PURE__ */ new Set()) {
|
134
|
+
const rawType = (0, import_estree_converter.getBaseType)(type);
|
135
|
+
if (rawType instanceof import_graphql.GraphQLObjectType || rawType instanceof import_graphql.GraphQLInterfaceType)
|
136
|
+
checkFields(rawType);
|
137
|
+
else if (rawType instanceof import_graphql.GraphQLUnionType) {
|
138
|
+
for (const selection of node.selections)
|
139
|
+
if (selection.kind === import_graphql.Kind.INLINE_FRAGMENT) {
|
140
|
+
const t = rawType.getTypes().find((t2) => t2.name === selection.typeCondition.name.value);
|
141
|
+
t && checkFields(t);
|
142
|
+
}
|
143
|
+
}
|
144
|
+
function checkFields(rawType2) {
|
145
|
+
const fields = rawType2.getFields();
|
146
|
+
if (!idNames.some((name) => fields[name]))
|
147
|
+
return;
|
148
|
+
function hasIdField({ selections }) {
|
149
|
+
return selections.some((selection) => {
|
150
|
+
if (selection.kind === import_graphql.Kind.FIELD)
|
151
|
+
return selection.alias && idNames.includes(selection.alias.value) ? !0 : idNames.includes(selection.name.value);
|
152
|
+
if (selection.kind === import_graphql.Kind.INLINE_FRAGMENT)
|
153
|
+
return hasIdField(selection.selectionSet);
|
154
|
+
if (selection.kind === import_graphql.Kind.FRAGMENT_SPREAD) {
|
155
|
+
const [foundSpread] = siblings.getFragment(selection.name.value);
|
156
|
+
if (foundSpread) {
|
157
|
+
const fragmentSpread = foundSpread.document;
|
158
|
+
return checkedFragmentSpreads.add(fragmentSpread.name.value), hasIdField(fragmentSpread.selectionSet);
|
159
|
+
}
|
160
|
+
}
|
161
|
+
return !1;
|
162
|
+
});
|
163
|
+
}
|
164
|
+
const hasId = hasIdField(node);
|
165
|
+
if (checkFragments(node), hasId)
|
166
|
+
return;
|
167
|
+
const pluralSuffix = idNames.length > 1 ? "s" : "", fieldName2 = (0, import_utils2.englishJoinWords)(
|
168
|
+
idNames.map((name) => `\`${(parent.alias || parent.name).value}.${name}\``)
|
169
|
+
), addition = checkedFragmentSpreads.size === 0 ? "" : ` or add to used fragment${checkedFragmentSpreads.size > 1 ? "s" : ""} ${(0, import_utils2.englishJoinWords)([...checkedFragmentSpreads].map((name) => `\`${name}\``))}`, problem = {
|
170
|
+
loc,
|
171
|
+
messageId: RULE_ID,
|
172
|
+
data: {
|
173
|
+
pluralSuffix,
|
174
|
+
fieldName: fieldName2,
|
175
|
+
addition
|
176
|
+
}
|
177
|
+
};
|
178
|
+
"type" in node && (problem.suggest = idNames.map((idName) => ({
|
179
|
+
desc: `Add \`${idName}\` selection`,
|
180
|
+
fix: (fixer) => {
|
181
|
+
let insertNode = node.selections[0];
|
182
|
+
return insertNode = insertNode.kind === import_graphql.Kind.INLINE_FRAGMENT ? insertNode.selectionSet.selections[0] : insertNode, fixer.insertTextBefore(insertNode, `${idName} `);
|
183
|
+
}
|
184
|
+
}))), context.report(problem);
|
185
|
+
}
|
186
|
+
}
|
187
|
+
return {
|
188
|
+
[selector](node) {
|
189
|
+
const typeInfo2 = node.typeInfo();
|
190
|
+
typeInfo2.gqlType && checkSelections(node, typeInfo2.gqlType, node.loc.start, node.parent);
|
191
|
+
}
|
192
|
+
};
|
193
|
+
}
|
194
|
+
};
|
195
|
+
// Annotate the CommonJS export names for ESM import in node:
|
196
|
+
0 && (module.exports = {
|
197
|
+
rule
|
198
|
+
});
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { GraphQLESLintRule } from '../types.js';
|
2
|
+
import 'eslint';
|
3
|
+
import 'estree';
|
4
|
+
import 'graphql';
|
5
|
+
import 'json-schema-to-ts';
|
6
|
+
import '../siblings.js';
|
7
|
+
import '@graphql-tools/utils';
|
8
|
+
import '../estree-converter/types.js';
|
9
|
+
import 'graphql-config';
|
10
|
+
|
11
|
+
declare const rule: GraphQLESLintRule;
|
12
|
+
|
13
|
+
export { rule };
|
@@ -0,0 +1,83 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __defProp = Object.defineProperty;
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
6
|
+
var __export = (target, all) => {
|
7
|
+
for (var name in all)
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: !0 });
|
9
|
+
}, __copyProps = (to, from, except, desc) => {
|
10
|
+
if (from && typeof from == "object" || typeof from == "function")
|
11
|
+
for (let key of __getOwnPropNames(from))
|
12
|
+
!__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
13
|
+
return to;
|
14
|
+
};
|
15
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
|
16
|
+
var require_type_pattern_with_oneof_exports = {};
|
17
|
+
__export(require_type_pattern_with_oneof_exports, {
|
18
|
+
rule: () => rule
|
19
|
+
});
|
20
|
+
module.exports = __toCommonJS(require_type_pattern_with_oneof_exports);
|
21
|
+
var import_utils = require("../utils.js");
|
22
|
+
const RULE_ID = "require-type-pattern-with-oneof", rule = {
|
23
|
+
meta: {
|
24
|
+
type: "suggestion",
|
25
|
+
docs: {
|
26
|
+
category: "Schema",
|
27
|
+
description: "Enforce types with `@oneOf` directive have `error` and `ok` fields.",
|
28
|
+
url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
|
29
|
+
examples: [
|
30
|
+
{
|
31
|
+
title: "Correct",
|
32
|
+
code: (
|
33
|
+
/* GraphQL */
|
34
|
+
`
|
35
|
+
type Mutation {
|
36
|
+
doSomething: DoSomethingMutationResult!
|
37
|
+
}
|
38
|
+
|
39
|
+
interface Error {
|
40
|
+
message: String!
|
41
|
+
}
|
42
|
+
|
43
|
+
type DoSomethingMutationResult @oneOf {
|
44
|
+
ok: DoSomethingSuccess
|
45
|
+
error: Error
|
46
|
+
}
|
47
|
+
|
48
|
+
type DoSomethingSuccess {
|
49
|
+
# ...
|
50
|
+
}
|
51
|
+
`
|
52
|
+
)
|
53
|
+
}
|
54
|
+
]
|
55
|
+
},
|
56
|
+
messages: {
|
57
|
+
[RULE_ID]: '{{ nodeName }} is defined as output with "@oneOf" and must be defined with "{{ fieldName }}" field'
|
58
|
+
},
|
59
|
+
schema: []
|
60
|
+
},
|
61
|
+
create(context) {
|
62
|
+
return {
|
63
|
+
"Directive[name.value=oneOf][parent.kind=ObjectTypeDefinition]"({
|
64
|
+
parent
|
65
|
+
}) {
|
66
|
+
const requiredFields = ["error", "ok"];
|
67
|
+
for (const fieldName of requiredFields)
|
68
|
+
parent.fields?.some((field) => field.name.value === fieldName) || context.report({
|
69
|
+
node: parent.name,
|
70
|
+
messageId: RULE_ID,
|
71
|
+
data: {
|
72
|
+
nodeName: (0, import_utils.displayNodeName)(parent),
|
73
|
+
fieldName
|
74
|
+
}
|
75
|
+
});
|
76
|
+
}
|
77
|
+
};
|
78
|
+
}
|
79
|
+
};
|
80
|
+
// Annotate the CommonJS export names for ESM import in node:
|
81
|
+
0 && (module.exports = {
|
82
|
+
rule
|
83
|
+
});
|
@@ -0,0 +1,37 @@
|
|
1
|
+
import { FromSchema } from 'json-schema-to-ts';
|
2
|
+
import { GraphQLESLintRule } from '../types.js';
|
3
|
+
import 'eslint';
|
4
|
+
import 'estree';
|
5
|
+
import 'graphql';
|
6
|
+
import '../siblings.js';
|
7
|
+
import '@graphql-tools/utils';
|
8
|
+
import '../estree-converter/types.js';
|
9
|
+
import 'graphql-config';
|
10
|
+
|
11
|
+
declare const schema: {
|
12
|
+
readonly type: "array";
|
13
|
+
readonly minItems: 1;
|
14
|
+
readonly maxItems: 1;
|
15
|
+
readonly items: {
|
16
|
+
readonly type: "object";
|
17
|
+
readonly additionalProperties: false;
|
18
|
+
readonly required: readonly ["maxDepth"];
|
19
|
+
readonly properties: {
|
20
|
+
readonly maxDepth: {
|
21
|
+
readonly type: "number";
|
22
|
+
};
|
23
|
+
readonly ignore: {
|
24
|
+
readonly type: "array";
|
25
|
+
readonly uniqueItems: true;
|
26
|
+
readonly minItems: 1;
|
27
|
+
readonly items: {
|
28
|
+
readonly type: "string";
|
29
|
+
};
|
30
|
+
};
|
31
|
+
};
|
32
|
+
};
|
33
|
+
};
|
34
|
+
type RuleOptions = FromSchema<typeof schema>;
|
35
|
+
declare const rule: GraphQLESLintRule<RuleOptions>;
|
36
|
+
|
37
|
+
export { RuleOptions, rule };
|
@@ -0,0 +1,159 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __create = Object.create;
|
3
|
+
var __defProp = Object.defineProperty;
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
6
|
+
var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
|
7
|
+
var __export = (target, all) => {
|
8
|
+
for (var name in all)
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: !0 });
|
10
|
+
}, __copyProps = (to, from, except, desc) => {
|
11
|
+
if (from && typeof from == "object" || typeof from == "function")
|
12
|
+
for (let key of __getOwnPropNames(from))
|
13
|
+
!__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
14
|
+
return to;
|
15
|
+
};
|
16
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
17
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
18
|
+
// file that has been converted to a CommonJS file using a Babel-
|
19
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
20
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
21
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
|
22
|
+
mod
|
23
|
+
)), __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
|
24
|
+
var selection_set_depth_exports = {};
|
25
|
+
__export(selection_set_depth_exports, {
|
26
|
+
rule: () => rule
|
27
|
+
});
|
28
|
+
module.exports = __toCommonJS(selection_set_depth_exports);
|
29
|
+
var import_graphql = require("graphql"), import_graphql_depth_limit = __toESM(require("graphql-depth-limit")), import_utils = require("../utils.js");
|
30
|
+
const RULE_ID = "selection-set-depth", schema = {
|
31
|
+
type: "array",
|
32
|
+
minItems: 1,
|
33
|
+
maxItems: 1,
|
34
|
+
items: {
|
35
|
+
type: "object",
|
36
|
+
additionalProperties: !1,
|
37
|
+
required: ["maxDepth"],
|
38
|
+
properties: {
|
39
|
+
maxDepth: {
|
40
|
+
type: "number"
|
41
|
+
},
|
42
|
+
ignore: import_utils.ARRAY_DEFAULT_OPTIONS
|
43
|
+
}
|
44
|
+
}
|
45
|
+
}, rule = {
|
46
|
+
meta: {
|
47
|
+
type: "suggestion",
|
48
|
+
hasSuggestions: !0,
|
49
|
+
docs: {
|
50
|
+
category: "Operations",
|
51
|
+
description: "Limit the complexity of the GraphQL operations solely by their depth. Based on [graphql-depth-limit](https://npmjs.com/package/graphql-depth-limit).",
|
52
|
+
url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
|
53
|
+
requiresSiblings: !0,
|
54
|
+
examples: [
|
55
|
+
{
|
56
|
+
title: "Incorrect",
|
57
|
+
usage: [{ maxDepth: 1 }],
|
58
|
+
code: `
|
59
|
+
query deep2 {
|
60
|
+
viewer { # Level 0
|
61
|
+
albums { # Level 1
|
62
|
+
title # Level 2
|
63
|
+
}
|
64
|
+
}
|
65
|
+
}
|
66
|
+
`
|
67
|
+
},
|
68
|
+
{
|
69
|
+
title: "Correct",
|
70
|
+
usage: [{ maxDepth: 4 }],
|
71
|
+
code: `
|
72
|
+
query deep2 {
|
73
|
+
viewer { # Level 0
|
74
|
+
albums { # Level 1
|
75
|
+
title # Level 2
|
76
|
+
}
|
77
|
+
}
|
78
|
+
}
|
79
|
+
`
|
80
|
+
},
|
81
|
+
{
|
82
|
+
title: "Correct (ignored field)",
|
83
|
+
usage: [{ maxDepth: 1, ignore: ["albums"] }],
|
84
|
+
code: `
|
85
|
+
query deep2 {
|
86
|
+
viewer { # Level 0
|
87
|
+
albums { # Level 1
|
88
|
+
title # Level 2
|
89
|
+
}
|
90
|
+
}
|
91
|
+
}
|
92
|
+
`
|
93
|
+
}
|
94
|
+
],
|
95
|
+
recommended: !0,
|
96
|
+
configOptions: [{ maxDepth: 7 }]
|
97
|
+
},
|
98
|
+
schema
|
99
|
+
},
|
100
|
+
create(context) {
|
101
|
+
let siblings = null;
|
102
|
+
try {
|
103
|
+
siblings = (0, import_utils.requireSiblingsOperations)(RULE_ID, context);
|
104
|
+
} catch {
|
105
|
+
import_utils.logger.warn(
|
106
|
+
`Rule "${RULE_ID}" works best with siblings operations loaded. For more info: https://bit.ly/graphql-eslint-operations`
|
107
|
+
);
|
108
|
+
}
|
109
|
+
const { maxDepth, ignore = [] } = context.options[0], checkFn = (0, import_graphql_depth_limit.default)(maxDepth, { ignore });
|
110
|
+
return {
|
111
|
+
"OperationDefinition, FragmentDefinition"(node) {
|
112
|
+
try {
|
113
|
+
const rawNode = node.rawNode(), fragmentsInUse = siblings ? siblings.getFragmentsInUse(rawNode) : [], document = {
|
114
|
+
kind: import_graphql.Kind.DOCUMENT,
|
115
|
+
definitions: [rawNode, ...fragmentsInUse]
|
116
|
+
};
|
117
|
+
checkFn({
|
118
|
+
getDocument: () => document,
|
119
|
+
reportError(error) {
|
120
|
+
const { line, column } = error.locations[0], token = context.getAncestors()[0].tokens.find(
|
121
|
+
(token2) => token2.loc.start.line === line && token2.loc.start.column === column - 1
|
122
|
+
);
|
123
|
+
context.report({
|
124
|
+
loc: {
|
125
|
+
line,
|
126
|
+
column: column - 1
|
127
|
+
},
|
128
|
+
message: error.message,
|
129
|
+
// Don't provide suggestions for fragment that can be in a separate file
|
130
|
+
...token && {
|
131
|
+
suggest: [
|
132
|
+
{
|
133
|
+
desc: "Remove selections",
|
134
|
+
fix(fixer) {
|
135
|
+
const foundNode = context.getSourceCode().getNodeByRangeIndex(token.range[0]), parentNode = foundNode.parent.parent;
|
136
|
+
return fixer.remove(
|
137
|
+
foundNode.kind === "Name" ? parentNode.parent : parentNode
|
138
|
+
);
|
139
|
+
}
|
140
|
+
}
|
141
|
+
]
|
142
|
+
}
|
143
|
+
});
|
144
|
+
}
|
145
|
+
});
|
146
|
+
} catch (e) {
|
147
|
+
import_utils.logger.warn(
|
148
|
+
`Rule "${RULE_ID}" check failed due to a missing siblings operations. For more info: https://bit.ly/graphql-eslint-operations`,
|
149
|
+
e
|
150
|
+
);
|
151
|
+
}
|
152
|
+
}
|
153
|
+
};
|
154
|
+
}
|
155
|
+
};
|
156
|
+
// Annotate the CommonJS export names for ESM import in node:
|
157
|
+
0 && (module.exports = {
|
158
|
+
rule
|
159
|
+
});
|