@graphql-eslint/eslint-plugin 4.0.0-alpha-20220821140530-e968cfc → 4.0.0-alpha-20230801163310-8bc4340
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 +13 -253
- package/cjs/cache.d.ts +12 -0
- package/cjs/cache.js +62 -0
- package/cjs/configs/index.d.ts +148 -0
- package/cjs/configs/index.js +49 -0
- package/cjs/configs/operations-all.d.ts +22 -0
- package/cjs/configs/operations-all.js +27 -0
- package/cjs/configs/operations-recommended.d.ts +52 -0
- package/{configs/operations-recommended.json → cjs/configs/operations-recommended.js} +16 -14
- package/cjs/configs/relay.d.ts +12 -0
- package/{configs/relay.json → cjs/configs/relay.js} +6 -4
- package/cjs/configs/schema-all.d.ts +19 -0
- package/cjs/configs/schema-all.js +21 -0
- package/cjs/configs/schema-recommended.d.ts +49 -0
- package/{configs/schema-recommended.json → cjs/configs/schema-recommended.js} +19 -20
- package/cjs/documents.d.ts +6 -0
- package/cjs/documents.js +81 -0
- package/cjs/estree-converter/converter.d.ts +8 -0
- package/cjs/estree-converter/converter.js +83 -0
- package/cjs/estree-converter/index.d.ts +8 -0
- package/cjs/estree-converter/index.js +26 -0
- package/cjs/estree-converter/types.d.ts +42 -0
- package/cjs/estree-converter/types.js +16 -0
- package/cjs/estree-converter/utils.d.ts +18 -0
- package/cjs/estree-converter/utils.js +135 -0
- package/cjs/flat-configs.d.ts +260 -0
- package/cjs/flat-configs.js +60 -0
- package/cjs/graphql-config.d.ts +13 -0
- package/cjs/graphql-config.js +86 -0
- package/cjs/index.d.ts +22 -0
- package/cjs/index.js +49 -0
- package/cjs/parser.d.ts +12 -0
- package/cjs/parser.js +103 -0
- package/cjs/processor.d.ts +9 -0
- package/cjs/processor.js +127 -0
- package/cjs/rules/alphabetize.d.ts +84 -0
- package/cjs/rules/alphabetize.js +395 -0
- package/cjs/rules/description-style.d.ts +28 -0
- package/cjs/rules/description-style.js +109 -0
- package/cjs/rules/graphql-js-validation.d.ts +12 -0
- package/cjs/rules/graphql-js-validation.js +669 -0
- package/cjs/rules/index.d.ts +125 -0
- package/cjs/rules/index.js +99 -0
- package/cjs/rules/input-name.d.ts +43 -0
- package/cjs/rules/input-name.js +170 -0
- package/cjs/rules/lone-executable-definition.d.ts +34 -0
- package/cjs/rules/lone-executable-definition.js +119 -0
- package/cjs/rules/match-document-filename.d.ts +80 -0
- package/cjs/rules/match-document-filename.js +282 -0
- package/cjs/rules/naming-convention.d.ts +107 -0
- package/cjs/rules/naming-convention.js +434 -0
- package/cjs/rules/no-anonymous-operations.d.ts +12 -0
- package/cjs/rules/no-anonymous-operations.js +98 -0
- package/cjs/rules/no-case-insensitive-enum-values-duplicates.d.ts +12 -0
- package/cjs/rules/no-case-insensitive-enum-values-duplicates.js +96 -0
- package/cjs/rules/no-deprecated.d.ts +12 -0
- package/cjs/rules/no-deprecated.js +157 -0
- package/cjs/rules/no-duplicate-fields.d.ts +12 -0
- package/cjs/rules/no-duplicate-fields.js +146 -0
- package/cjs/rules/no-hashtag-description.d.ts +13 -0
- package/cjs/rules/no-hashtag-description.js +140 -0
- package/cjs/rules/no-one-place-fragments.d.ts +12 -0
- package/cjs/rules/no-one-place-fragments.js +113 -0
- package/cjs/rules/no-root-type.d.ts +33 -0
- package/cjs/rules/no-root-type.js +113 -0
- package/cjs/rules/no-scalar-result-type-on-mutation.d.ts +12 -0
- package/cjs/rules/no-scalar-result-type-on-mutation.js +100 -0
- package/cjs/rules/no-typename-prefix.d.ts +12 -0
- package/cjs/rules/no-typename-prefix.js +98 -0
- package/cjs/rules/no-unreachable-types.d.ts +12 -0
- package/cjs/rules/no-unreachable-types.js +199 -0
- package/cjs/rules/no-unused-fields.d.ts +12 -0
- package/cjs/rules/no-unused-fields.js +157 -0
- package/cjs/rules/relay-arguments.d.ts +29 -0
- package/cjs/rules/relay-arguments.js +149 -0
- package/cjs/rules/relay-connection-types.d.ts +13 -0
- package/cjs/rules/relay-connection-types.js +142 -0
- package/cjs/rules/relay-edge-types.d.ts +39 -0
- package/cjs/rules/relay-edge-types.js +212 -0
- package/cjs/rules/relay-page-info.d.ts +12 -0
- package/cjs/rules/relay-page-info.js +121 -0
- package/cjs/rules/require-deprecation-date.d.ts +26 -0
- package/cjs/rules/require-deprecation-date.js +164 -0
- package/cjs/rules/require-deprecation-reason.d.ts +12 -0
- package/cjs/rules/require-deprecation-reason.js +93 -0
- package/cjs/rules/require-description.d.ts +23 -0
- package/cjs/rules/require-description.js +205 -0
- package/cjs/rules/require-field-of-type-query-in-mutation-result.d.ts +12 -0
- package/cjs/rules/require-field-of-type-query-in-mutation-result.js +102 -0
- package/cjs/rules/require-id-when-available.d.ts +44 -0
- package/cjs/rules/require-id-when-available.js +241 -0
- package/cjs/rules/require-import-fragment.d.ts +12 -0
- package/cjs/rules/require-import-fragment.js +166 -0
- package/cjs/rules/require-nullable-fields-with-oneof.d.ts +12 -0
- package/cjs/rules/require-nullable-fields-with-oneof.js +92 -0
- package/cjs/rules/require-nullable-result-in-root.d.ts +12 -0
- package/cjs/rules/require-nullable-result-in-root.js +109 -0
- package/cjs/rules/require-type-pattern-with-oneof.d.ts +12 -0
- package/cjs/rules/require-type-pattern-with-oneof.js +91 -0
- package/cjs/rules/selection-set-depth.d.ts +36 -0
- package/cjs/rules/selection-set-depth.js +175 -0
- package/cjs/rules/strict-id-in-types.d.ts +65 -0
- package/cjs/rules/strict-id-in-types.js +186 -0
- package/cjs/rules/unique-fragment-name.d.ts +13 -0
- package/cjs/rules/unique-fragment-name.js +118 -0
- package/cjs/rules/unique-operation-name.d.ts +12 -0
- package/cjs/rules/unique-operation-name.js +95 -0
- package/cjs/schema.d.ts +12 -0
- package/cjs/schema.js +65 -0
- package/cjs/siblings.d.ts +8 -0
- package/cjs/siblings.js +136 -0
- package/cjs/types-8d5f4ae0.d.ts +107 -0
- package/cjs/types.d.ts +8 -0
- package/cjs/types.js +16 -0
- package/cjs/utils.d.ts +44 -0
- package/cjs/utils.js +205 -0
- package/esm/cache.d.mts +12 -0
- package/esm/cache.js +29 -0
- package/esm/chunk-BMTV3EA2.js +8 -0
- package/esm/configs/index.d.mts +148 -0
- package/esm/configs/index.js +16 -0
- package/esm/configs/operations-all.d.mts +22 -0
- package/esm/configs/operations-all.js +34 -0
- package/esm/configs/operations-recommended.d.mts +52 -0
- package/esm/configs/operations-recommended.js +59 -0
- package/esm/configs/relay.d.mts +12 -0
- package/esm/configs/relay.js +18 -0
- package/esm/configs/schema-all.d.mts +19 -0
- package/esm/configs/schema-all.js +28 -0
- package/esm/configs/schema-recommended.d.mts +49 -0
- package/esm/configs/schema-recommended.js +55 -0
- package/esm/documents.d.mts +6 -0
- package/esm/documents.js +48 -0
- package/esm/estree-converter/converter.d.mts +8 -0
- package/esm/estree-converter/converter.js +65 -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 +18 -0
- package/esm/estree-converter/utils.js +114 -0
- package/esm/flat-configs.d.mts +260 -0
- package/esm/flat-configs.js +37 -0
- package/esm/graphql-config.d.mts +13 -0
- package/esm/graphql-config.js +55 -0
- package/esm/index.d.mts +22 -0
- package/esm/index.js +18 -0
- package/esm/package.json +1 -0
- package/esm/parser.d.mts +12 -0
- package/esm/parser.js +70 -0
- package/esm/processor.d.mts +9 -0
- package/esm/processor.js +106 -0
- package/esm/rules/alphabetize.d.mts +84 -0
- package/esm/rules/alphabetize.js +364 -0
- package/esm/rules/description-style.d.mts +28 -0
- package/esm/rules/description-style.js +86 -0
- package/esm/rules/graphql-js-validation.d.mts +12 -0
- package/esm/rules/graphql-js-validation.js +658 -0
- package/esm/rules/index.d.mts +125 -0
- package/esm/rules/index.js +76 -0
- package/esm/rules/input-name.d.mts +43 -0
- package/esm/rules/input-name.js +149 -0
- package/esm/rules/lone-executable-definition.d.mts +34 -0
- package/esm/rules/lone-executable-definition.js +96 -0
- package/esm/rules/match-document-filename.d.mts +80 -0
- package/esm/rules/match-document-filename.js +263 -0
- package/esm/rules/naming-convention.d.mts +107 -0
- package/esm/rules/naming-convention.js +417 -0
- package/esm/rules/no-anonymous-operations.d.mts +12 -0
- package/esm/rules/no-anonymous-operations.js +75 -0
- package/esm/rules/no-case-insensitive-enum-values-duplicates.d.mts +12 -0
- package/esm/rules/no-case-insensitive-enum-values-duplicates.js +73 -0
- package/esm/rules/no-deprecated.d.mts +12 -0
- package/esm/rules/no-deprecated.js +134 -0
- package/esm/rules/no-duplicate-fields.d.mts +12 -0
- package/esm/rules/no-duplicate-fields.js +123 -0
- package/esm/rules/no-hashtag-description.d.mts +13 -0
- package/esm/rules/no-hashtag-description.js +116 -0
- package/esm/rules/no-one-place-fragments.d.mts +12 -0
- package/esm/rules/no-one-place-fragments.js +90 -0
- package/esm/rules/no-root-type.d.mts +33 -0
- package/esm/rules/no-root-type.js +90 -0
- package/esm/rules/no-scalar-result-type-on-mutation.d.mts +12 -0
- package/esm/rules/no-scalar-result-type-on-mutation.js +77 -0
- package/esm/rules/no-typename-prefix.d.mts +12 -0
- package/esm/rules/no-typename-prefix.js +75 -0
- package/esm/rules/no-unreachable-types.d.mts +12 -0
- package/esm/rules/no-unreachable-types.js +171 -0
- package/esm/rules/no-unused-fields.d.mts +12 -0
- package/esm/rules/no-unused-fields.js +134 -0
- package/esm/rules/relay-arguments.d.mts +29 -0
- package/esm/rules/relay-arguments.js +126 -0
- package/esm/rules/relay-connection-types.d.mts +13 -0
- package/esm/rules/relay-connection-types.js +118 -0
- package/esm/rules/relay-edge-types.d.mts +39 -0
- package/esm/rules/relay-edge-types.js +194 -0
- package/esm/rules/relay-page-info.d.mts +12 -0
- package/esm/rules/relay-page-info.js +98 -0
- package/esm/rules/require-deprecation-date.d.mts +26 -0
- package/esm/rules/require-deprecation-date.js +141 -0
- package/esm/rules/require-deprecation-reason.d.mts +12 -0
- package/esm/rules/require-deprecation-reason.js +70 -0
- package/esm/rules/require-description.d.mts +23 -0
- package/esm/rules/require-description.js +186 -0
- package/esm/rules/require-field-of-type-query-in-mutation-result.d.mts +12 -0
- package/esm/rules/require-field-of-type-query-in-mutation-result.js +79 -0
- package/esm/rules/require-id-when-available.d.mts +44 -0
- package/esm/rules/require-id-when-available.js +231 -0
- package/esm/rules/require-import-fragment.d.mts +12 -0
- package/esm/rules/require-import-fragment.js +133 -0
- package/esm/rules/require-nullable-fields-with-oneof.d.mts +12 -0
- package/esm/rules/require-nullable-fields-with-oneof.js +69 -0
- package/esm/rules/require-nullable-result-in-root.d.mts +12 -0
- package/esm/rules/require-nullable-result-in-root.js +86 -0
- package/esm/rules/require-type-pattern-with-oneof.d.mts +12 -0
- package/esm/rules/require-type-pattern-with-oneof.js +68 -0
- package/esm/rules/selection-set-depth.d.mts +36 -0
- package/esm/rules/selection-set-depth.js +142 -0
- package/esm/rules/strict-id-in-types.d.mts +65 -0
- package/esm/rules/strict-id-in-types.js +169 -0
- package/esm/rules/unique-fragment-name.d.mts +13 -0
- package/esm/rules/unique-fragment-name.js +94 -0
- package/esm/rules/unique-operation-name.d.mts +12 -0
- package/esm/rules/unique-operation-name.js +72 -0
- package/esm/schema.d.mts +12 -0
- package/esm/schema.js +32 -0
- package/esm/siblings.d.mts +8 -0
- package/esm/siblings.js +116 -0
- package/esm/types-ace77d86.d.ts +107 -0
- package/esm/types.d.mts +8 -0
- package/esm/types.js +0 -0
- package/esm/utils.d.mts +44 -0
- package/esm/utils.js +155 -0
- package/package.json +47 -34
- package/configs/base.json +0 -4
- package/configs/operations-all.json +0 -24
- package/configs/schema-all.json +0 -26
- 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/sibling-operations.d.ts +0 -21
- package/testkit.d.ts +0 -27
- package/types.d.ts +0 -79
- package/utils.d.ts +0 -39
@@ -0,0 +1,157 @@
|
|
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: true });
|
9
|
+
};
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
12
|
+
for (let key of __getOwnPropNames(from))
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
15
|
+
}
|
16
|
+
return to;
|
17
|
+
};
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
19
|
+
var no_deprecated_exports = {};
|
20
|
+
__export(no_deprecated_exports, {
|
21
|
+
rule: () => rule
|
22
|
+
});
|
23
|
+
module.exports = __toCommonJS(no_deprecated_exports);
|
24
|
+
var import_graphql = require("graphql");
|
25
|
+
var import_utils = require("../utils.js");
|
26
|
+
const RULE_ID = "no-deprecated";
|
27
|
+
const rule = {
|
28
|
+
meta: {
|
29
|
+
type: "suggestion",
|
30
|
+
hasSuggestions: true,
|
31
|
+
docs: {
|
32
|
+
category: "Operations",
|
33
|
+
description: "Enforce that deprecated fields or enum values are not in use by operations.",
|
34
|
+
url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
|
35
|
+
requiresSchema: true,
|
36
|
+
examples: [
|
37
|
+
{
|
38
|
+
title: "Incorrect (field)",
|
39
|
+
code: (
|
40
|
+
/* GraphQL */
|
41
|
+
`
|
42
|
+
# In your schema
|
43
|
+
type User {
|
44
|
+
id: ID!
|
45
|
+
name: String! @deprecated(reason: "old field, please use fullName instead")
|
46
|
+
fullName: String!
|
47
|
+
}
|
48
|
+
|
49
|
+
# Query
|
50
|
+
query user {
|
51
|
+
user {
|
52
|
+
name # This is deprecated, so you'll get an error
|
53
|
+
}
|
54
|
+
}
|
55
|
+
`
|
56
|
+
)
|
57
|
+
},
|
58
|
+
{
|
59
|
+
title: "Incorrect (enum value)",
|
60
|
+
code: (
|
61
|
+
/* GraphQL */
|
62
|
+
`
|
63
|
+
# In your schema
|
64
|
+
type Mutation {
|
65
|
+
changeSomething(type: SomeType): Boolean!
|
66
|
+
}
|
67
|
+
|
68
|
+
enum SomeType {
|
69
|
+
NEW
|
70
|
+
OLD @deprecated(reason: "old field, please use NEW instead")
|
71
|
+
}
|
72
|
+
|
73
|
+
# Mutation
|
74
|
+
mutation {
|
75
|
+
changeSomething(
|
76
|
+
type: OLD # This is deprecated, so you'll get an error
|
77
|
+
) {
|
78
|
+
...
|
79
|
+
}
|
80
|
+
}
|
81
|
+
`
|
82
|
+
)
|
83
|
+
},
|
84
|
+
{
|
85
|
+
title: "Correct",
|
86
|
+
code: (
|
87
|
+
/* GraphQL */
|
88
|
+
`
|
89
|
+
# In your schema
|
90
|
+
type User {
|
91
|
+
id: ID!
|
92
|
+
name: String! @deprecated(reason: "old field, please use fullName instead")
|
93
|
+
fullName: String!
|
94
|
+
}
|
95
|
+
|
96
|
+
# Query
|
97
|
+
query user {
|
98
|
+
user {
|
99
|
+
id
|
100
|
+
fullName
|
101
|
+
}
|
102
|
+
}
|
103
|
+
`
|
104
|
+
)
|
105
|
+
}
|
106
|
+
],
|
107
|
+
recommended: true
|
108
|
+
},
|
109
|
+
messages: {
|
110
|
+
[RULE_ID]: "This {{ type }} is marked as deprecated in your GraphQL schema (reason: {{ reason }})"
|
111
|
+
},
|
112
|
+
schema: []
|
113
|
+
},
|
114
|
+
create(context) {
|
115
|
+
(0, import_utils.requireGraphQLSchemaFromContext)(RULE_ID, context);
|
116
|
+
function report(node, reason) {
|
117
|
+
const nodeName = node.kind === import_graphql.Kind.ENUM ? node.value : node.name.value;
|
118
|
+
const nodeType = node.kind === import_graphql.Kind.ENUM ? "enum value" : "field";
|
119
|
+
context.report({
|
120
|
+
node,
|
121
|
+
messageId: RULE_ID,
|
122
|
+
data: {
|
123
|
+
type: nodeType,
|
124
|
+
reason
|
125
|
+
},
|
126
|
+
suggest: [
|
127
|
+
{
|
128
|
+
desc: `Remove \`${nodeName}\` ${nodeType}`,
|
129
|
+
fix: (fixer) => fixer.remove(node)
|
130
|
+
}
|
131
|
+
]
|
132
|
+
});
|
133
|
+
}
|
134
|
+
return {
|
135
|
+
EnumValue(node) {
|
136
|
+
var _a;
|
137
|
+
const typeInfo = node.typeInfo();
|
138
|
+
const reason = (_a = typeInfo.enumValue) == null ? void 0 : _a.deprecationReason;
|
139
|
+
if (reason) {
|
140
|
+
report(node, reason);
|
141
|
+
}
|
142
|
+
},
|
143
|
+
Field(node) {
|
144
|
+
var _a;
|
145
|
+
const typeInfo = node.typeInfo();
|
146
|
+
const reason = (_a = typeInfo.fieldDef) == null ? void 0 : _a.deprecationReason;
|
147
|
+
if (reason) {
|
148
|
+
report(node, reason);
|
149
|
+
}
|
150
|
+
}
|
151
|
+
};
|
152
|
+
}
|
153
|
+
};
|
154
|
+
// Annotate the CommonJS export names for ESM import in node:
|
155
|
+
0 && (module.exports = {
|
156
|
+
rule
|
157
|
+
});
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { f as GraphQLESLintRule } from '../types-8d5f4ae0.js';
|
2
|
+
import '@graphql-tools/utils';
|
3
|
+
import 'eslint';
|
4
|
+
import 'estree';
|
5
|
+
import 'graphql';
|
6
|
+
import 'graphql-config';
|
7
|
+
import 'json-schema-to-ts';
|
8
|
+
import '../estree-converter/types.js';
|
9
|
+
|
10
|
+
declare const rule: GraphQLESLintRule;
|
11
|
+
|
12
|
+
export { rule };
|
@@ -0,0 +1,146 @@
|
|
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: true });
|
9
|
+
};
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
12
|
+
for (let key of __getOwnPropNames(from))
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
15
|
+
}
|
16
|
+
return to;
|
17
|
+
};
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
19
|
+
var no_duplicate_fields_exports = {};
|
20
|
+
__export(no_duplicate_fields_exports, {
|
21
|
+
rule: () => rule
|
22
|
+
});
|
23
|
+
module.exports = __toCommonJS(no_duplicate_fields_exports);
|
24
|
+
var import_graphql = require("graphql");
|
25
|
+
const RULE_ID = "no-duplicate-fields";
|
26
|
+
const rule = {
|
27
|
+
meta: {
|
28
|
+
type: "suggestion",
|
29
|
+
hasSuggestions: true,
|
30
|
+
docs: {
|
31
|
+
description: "Checks for duplicate fields in selection set, variables in operation definition, or in arguments set of a field.",
|
32
|
+
category: "Operations",
|
33
|
+
url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
|
34
|
+
recommended: true,
|
35
|
+
examples: [
|
36
|
+
{
|
37
|
+
title: "Incorrect",
|
38
|
+
code: (
|
39
|
+
/* GraphQL */
|
40
|
+
`
|
41
|
+
query {
|
42
|
+
user {
|
43
|
+
name
|
44
|
+
email
|
45
|
+
name # duplicate field
|
46
|
+
}
|
47
|
+
}
|
48
|
+
`
|
49
|
+
)
|
50
|
+
},
|
51
|
+
{
|
52
|
+
title: "Incorrect",
|
53
|
+
code: (
|
54
|
+
/* GraphQL */
|
55
|
+
`
|
56
|
+
query {
|
57
|
+
users(
|
58
|
+
first: 100
|
59
|
+
skip: 50
|
60
|
+
after: "cji629tngfgou0b73kt7vi5jo"
|
61
|
+
first: 100 # duplicate argument
|
62
|
+
) {
|
63
|
+
id
|
64
|
+
}
|
65
|
+
}
|
66
|
+
`
|
67
|
+
)
|
68
|
+
},
|
69
|
+
{
|
70
|
+
title: "Incorrect",
|
71
|
+
code: (
|
72
|
+
/* GraphQL */
|
73
|
+
`
|
74
|
+
query (
|
75
|
+
$first: Int!
|
76
|
+
$first: Int! # duplicate variable
|
77
|
+
) {
|
78
|
+
users(first: $first, skip: 50) {
|
79
|
+
id
|
80
|
+
}
|
81
|
+
}
|
82
|
+
`
|
83
|
+
)
|
84
|
+
}
|
85
|
+
]
|
86
|
+
},
|
87
|
+
messages: {
|
88
|
+
[RULE_ID]: "{{ type }} `{{ fieldName }}` defined multiple times."
|
89
|
+
},
|
90
|
+
schema: []
|
91
|
+
},
|
92
|
+
create(context) {
|
93
|
+
function checkNode(usedFields, node) {
|
94
|
+
const fieldName = node.value;
|
95
|
+
if (usedFields.has(fieldName)) {
|
96
|
+
const { parent } = node;
|
97
|
+
context.report({
|
98
|
+
node,
|
99
|
+
messageId: RULE_ID,
|
100
|
+
data: {
|
101
|
+
type: parent.type,
|
102
|
+
fieldName
|
103
|
+
},
|
104
|
+
suggest: [
|
105
|
+
{
|
106
|
+
desc: `Remove \`${fieldName}\` ${parent.type.toLowerCase()}`,
|
107
|
+
fix(fixer) {
|
108
|
+
return fixer.remove(
|
109
|
+
parent.type === import_graphql.Kind.VARIABLE ? parent.parent : parent
|
110
|
+
);
|
111
|
+
}
|
112
|
+
}
|
113
|
+
]
|
114
|
+
});
|
115
|
+
} else {
|
116
|
+
usedFields.add(fieldName);
|
117
|
+
}
|
118
|
+
}
|
119
|
+
return {
|
120
|
+
OperationDefinition(node) {
|
121
|
+
const set = /* @__PURE__ */ new Set();
|
122
|
+
for (const varDef of node.variableDefinitions || []) {
|
123
|
+
checkNode(set, varDef.variable.name);
|
124
|
+
}
|
125
|
+
},
|
126
|
+
Field(node) {
|
127
|
+
const set = /* @__PURE__ */ new Set();
|
128
|
+
for (const arg of node.arguments || []) {
|
129
|
+
checkNode(set, arg.name);
|
130
|
+
}
|
131
|
+
},
|
132
|
+
SelectionSet(node) {
|
133
|
+
const set = /* @__PURE__ */ new Set();
|
134
|
+
for (const selection of node.selections) {
|
135
|
+
if (selection.kind === import_graphql.Kind.FIELD) {
|
136
|
+
checkNode(set, selection.alias || selection.name);
|
137
|
+
}
|
138
|
+
}
|
139
|
+
}
|
140
|
+
};
|
141
|
+
}
|
142
|
+
};
|
143
|
+
// Annotate the CommonJS export names for ESM import in node:
|
144
|
+
0 && (module.exports = {
|
145
|
+
rule
|
146
|
+
});
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { f as GraphQLESLintRule } from '../types-8d5f4ae0.js';
|
2
|
+
import '@graphql-tools/utils';
|
3
|
+
import 'eslint';
|
4
|
+
import 'estree';
|
5
|
+
import 'graphql';
|
6
|
+
import 'graphql-config';
|
7
|
+
import 'json-schema-to-ts';
|
8
|
+
import '../estree-converter/types.js';
|
9
|
+
|
10
|
+
declare const RULE_ID = "HASHTAG_COMMENT";
|
11
|
+
declare const rule: GraphQLESLintRule;
|
12
|
+
|
13
|
+
export { RULE_ID, rule };
|
@@ -0,0 +1,140 @@
|
|
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: true });
|
9
|
+
};
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
12
|
+
for (let key of __getOwnPropNames(from))
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
15
|
+
}
|
16
|
+
return to;
|
17
|
+
};
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
19
|
+
var no_hashtag_description_exports = {};
|
20
|
+
__export(no_hashtag_description_exports, {
|
21
|
+
RULE_ID: () => RULE_ID,
|
22
|
+
rule: () => rule
|
23
|
+
});
|
24
|
+
module.exports = __toCommonJS(no_hashtag_description_exports);
|
25
|
+
var import_graphql = require("graphql");
|
26
|
+
var import_utils = require("../utils.js");
|
27
|
+
const RULE_ID = "HASHTAG_COMMENT";
|
28
|
+
const rule = {
|
29
|
+
meta: {
|
30
|
+
type: "suggestion",
|
31
|
+
hasSuggestions: true,
|
32
|
+
schema: [],
|
33
|
+
messages: {
|
34
|
+
[RULE_ID]: 'Unexpected GraphQL descriptions as hashtag `#` for {{ nodeName }}.\nPrefer using `"""` for multiline, or `"` for a single line description.'
|
35
|
+
},
|
36
|
+
docs: {
|
37
|
+
description: 'Requires to use `"""` or `"` for adding a GraphQL description instead of `#`.\nAllows to use hashtag for comments, as long as it\'s not attached to an AST definition.',
|
38
|
+
category: "Schema",
|
39
|
+
url: "https://the-guild.dev/graphql/eslint/rules/no-hashtag-description",
|
40
|
+
examples: [
|
41
|
+
{
|
42
|
+
title: "Incorrect",
|
43
|
+
code: (
|
44
|
+
/* GraphQL */
|
45
|
+
`
|
46
|
+
# Represents a user
|
47
|
+
type User {
|
48
|
+
id: ID!
|
49
|
+
name: String
|
50
|
+
}
|
51
|
+
`
|
52
|
+
)
|
53
|
+
},
|
54
|
+
{
|
55
|
+
title: "Correct",
|
56
|
+
code: (
|
57
|
+
/* GraphQL */
|
58
|
+
`
|
59
|
+
" Represents a user "
|
60
|
+
type User {
|
61
|
+
id: ID!
|
62
|
+
name: String
|
63
|
+
}
|
64
|
+
`
|
65
|
+
)
|
66
|
+
},
|
67
|
+
{
|
68
|
+
title: "Correct",
|
69
|
+
code: (
|
70
|
+
/* GraphQL */
|
71
|
+
`
|
72
|
+
# This file defines the basic User type.
|
73
|
+
# This comment is valid because it's not attached specifically to an AST object.
|
74
|
+
|
75
|
+
" Represents a user "
|
76
|
+
type User {
|
77
|
+
id: ID! # This one is also valid, since it comes after the AST object
|
78
|
+
name: String
|
79
|
+
}
|
80
|
+
`
|
81
|
+
)
|
82
|
+
}
|
83
|
+
],
|
84
|
+
recommended: true
|
85
|
+
}
|
86
|
+
},
|
87
|
+
create(context) {
|
88
|
+
const selector = "Document[definitions.0.kind!=/^(OperationDefinition|FragmentDefinition)$/]";
|
89
|
+
return {
|
90
|
+
[selector](node) {
|
91
|
+
const rawNode = node.rawNode();
|
92
|
+
let token = rawNode.loc.startToken;
|
93
|
+
while (token) {
|
94
|
+
const { kind, prev, next, value, line, column } = token;
|
95
|
+
if (kind === import_graphql.TokenKind.COMMENT && prev && next) {
|
96
|
+
const isEslintComment = value.trimStart().startsWith("eslint");
|
97
|
+
const linesAfter = next.line - line;
|
98
|
+
if (!isEslintComment && line !== prev.line && next.kind === import_graphql.TokenKind.NAME && linesAfter < 2) {
|
99
|
+
const sourceCode = context.getSourceCode();
|
100
|
+
const { tokens } = sourceCode.ast;
|
101
|
+
const t = tokens.find(
|
102
|
+
(token2) => token2.loc.start.line === next.line && token2.loc.start.column === next.column - 1
|
103
|
+
);
|
104
|
+
const nextNode = sourceCode.getNodeByRangeIndex(t.range[1] + 1);
|
105
|
+
context.report({
|
106
|
+
messageId: RULE_ID,
|
107
|
+
data: {
|
108
|
+
nodeName: (0, import_utils.getNodeName)(
|
109
|
+
"name" in nextNode ? nextNode : nextNode.parent
|
110
|
+
)
|
111
|
+
},
|
112
|
+
loc: {
|
113
|
+
line,
|
114
|
+
column: column - 1
|
115
|
+
},
|
116
|
+
suggest: ['"""', '"'].map((descriptionSyntax) => ({
|
117
|
+
desc: `Replace with \`${descriptionSyntax}\` description syntax`,
|
118
|
+
fix: (fixer) => fixer.replaceTextRange(
|
119
|
+
[token.start, token.end],
|
120
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- TODO: remove `!` when drop support of graphql@15
|
121
|
+
[descriptionSyntax, value.trim(), descriptionSyntax].join("")
|
122
|
+
)
|
123
|
+
}))
|
124
|
+
});
|
125
|
+
}
|
126
|
+
}
|
127
|
+
if (!next) {
|
128
|
+
break;
|
129
|
+
}
|
130
|
+
token = next;
|
131
|
+
}
|
132
|
+
}
|
133
|
+
};
|
134
|
+
}
|
135
|
+
};
|
136
|
+
// Annotate the CommonJS export names for ESM import in node:
|
137
|
+
0 && (module.exports = {
|
138
|
+
RULE_ID,
|
139
|
+
rule
|
140
|
+
});
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { f as GraphQLESLintRule } from '../types-8d5f4ae0.js';
|
2
|
+
import '@graphql-tools/utils';
|
3
|
+
import 'eslint';
|
4
|
+
import 'estree';
|
5
|
+
import 'graphql';
|
6
|
+
import 'graphql-config';
|
7
|
+
import 'json-schema-to-ts';
|
8
|
+
import '../estree-converter/types.js';
|
9
|
+
|
10
|
+
declare const rule: GraphQLESLintRule;
|
11
|
+
|
12
|
+
export { rule };
|
@@ -0,0 +1,113 @@
|
|
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: true });
|
9
|
+
};
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
12
|
+
for (let key of __getOwnPropNames(from))
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
15
|
+
}
|
16
|
+
return to;
|
17
|
+
};
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
19
|
+
var no_one_place_fragments_exports = {};
|
20
|
+
__export(no_one_place_fragments_exports, {
|
21
|
+
rule: () => rule
|
22
|
+
});
|
23
|
+
module.exports = __toCommonJS(no_one_place_fragments_exports);
|
24
|
+
var import_path = require("path");
|
25
|
+
var import_graphql = require("graphql");
|
26
|
+
var import_utils = require("../utils.js");
|
27
|
+
const RULE_ID = "no-one-place-fragments";
|
28
|
+
const rule = {
|
29
|
+
meta: {
|
30
|
+
type: "suggestion",
|
31
|
+
docs: {
|
32
|
+
category: "Operations",
|
33
|
+
description: "Disallow fragments that are used only in one place.",
|
34
|
+
url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
|
35
|
+
examples: [
|
36
|
+
{
|
37
|
+
title: "Incorrect",
|
38
|
+
code: (
|
39
|
+
/* GraphQL */
|
40
|
+
`
|
41
|
+
fragment UserFields on User {
|
42
|
+
id
|
43
|
+
}
|
44
|
+
|
45
|
+
{
|
46
|
+
user {
|
47
|
+
...UserFields
|
48
|
+
}
|
49
|
+
}
|
50
|
+
`
|
51
|
+
)
|
52
|
+
},
|
53
|
+
{
|
54
|
+
title: "Correct",
|
55
|
+
code: (
|
56
|
+
/* GraphQL */
|
57
|
+
`
|
58
|
+
fragment UserFields on User {
|
59
|
+
id
|
60
|
+
}
|
61
|
+
|
62
|
+
{
|
63
|
+
user {
|
64
|
+
...UserFields
|
65
|
+
friends {
|
66
|
+
...UserFields
|
67
|
+
}
|
68
|
+
}
|
69
|
+
}
|
70
|
+
`
|
71
|
+
)
|
72
|
+
}
|
73
|
+
],
|
74
|
+
requiresSiblings: true
|
75
|
+
},
|
76
|
+
messages: {
|
77
|
+
[RULE_ID]: 'Fragment `{{fragmentName}}` used only once. Inline him in "{{filePath}}".'
|
78
|
+
},
|
79
|
+
schema: []
|
80
|
+
},
|
81
|
+
create(context) {
|
82
|
+
const operations = (0, import_utils.requireSiblingsOperations)(RULE_ID, context);
|
83
|
+
const allDocuments = [...operations.getOperations(), ...operations.getFragments()];
|
84
|
+
const usedFragmentsMap = /* @__PURE__ */ Object.create(null);
|
85
|
+
for (const { document, filePath } of allDocuments) {
|
86
|
+
const relativeFilePath = (0, import_path.relative)(import_utils.CWD, filePath);
|
87
|
+
(0, import_graphql.visit)(document, {
|
88
|
+
FragmentSpread({ name }) {
|
89
|
+
const spreadName = name.value;
|
90
|
+
usedFragmentsMap[spreadName] || (usedFragmentsMap[spreadName] = []);
|
91
|
+
usedFragmentsMap[spreadName].push(relativeFilePath);
|
92
|
+
}
|
93
|
+
});
|
94
|
+
}
|
95
|
+
return {
|
96
|
+
"FragmentDefinition > Name"(node) {
|
97
|
+
const fragmentName = node.value;
|
98
|
+
const fragmentUsage = usedFragmentsMap[fragmentName];
|
99
|
+
if (fragmentUsage.length === 1) {
|
100
|
+
context.report({
|
101
|
+
node,
|
102
|
+
messageId: RULE_ID,
|
103
|
+
data: { fragmentName, filePath: fragmentUsage[0] }
|
104
|
+
});
|
105
|
+
}
|
106
|
+
}
|
107
|
+
};
|
108
|
+
}
|
109
|
+
};
|
110
|
+
// Annotate the CommonJS export names for ESM import in node:
|
111
|
+
0 && (module.exports = {
|
112
|
+
rule
|
113
|
+
});
|
@@ -0,0 +1,33 @@
|
|
1
|
+
import { FromSchema } from 'json-schema-to-ts';
|
2
|
+
import { f as GraphQLESLintRule } from '../types-8d5f4ae0.js';
|
3
|
+
import '@graphql-tools/utils';
|
4
|
+
import 'eslint';
|
5
|
+
import 'estree';
|
6
|
+
import 'graphql';
|
7
|
+
import 'graphql-config';
|
8
|
+
import '../estree-converter/types.js';
|
9
|
+
|
10
|
+
declare const schema: {
|
11
|
+
readonly type: "array";
|
12
|
+
readonly minItems: 1;
|
13
|
+
readonly maxItems: 1;
|
14
|
+
readonly items: {
|
15
|
+
readonly type: "object";
|
16
|
+
readonly additionalProperties: false;
|
17
|
+
readonly required: readonly ["disallow"];
|
18
|
+
readonly properties: {
|
19
|
+
readonly disallow: {
|
20
|
+
readonly items: {
|
21
|
+
readonly enum: readonly ["mutation", "subscription"];
|
22
|
+
};
|
23
|
+
readonly type: "array";
|
24
|
+
readonly uniqueItems: true;
|
25
|
+
readonly minItems: 1;
|
26
|
+
};
|
27
|
+
};
|
28
|
+
};
|
29
|
+
};
|
30
|
+
type RuleOptions = FromSchema<typeof schema>;
|
31
|
+
declare const rule: GraphQLESLintRule<RuleOptions>;
|
32
|
+
|
33
|
+
export { RuleOptions, rule };
|