@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
package/cjs/parser.js
ADDED
@@ -0,0 +1,96 @@
|
|
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 parser_exports = {};
|
25
|
+
__export(parser_exports, {
|
26
|
+
parseForESLint: () => parseForESLint
|
27
|
+
});
|
28
|
+
module.exports = __toCommonJS(parser_exports);
|
29
|
+
var import_utils = require("@graphql-tools/utils"), import_debug = __toESM(require("debug")), import_graphql = require("graphql"), import_estree_converter = require("./estree-converter/index.js"), import_graphql_config = require("./graphql-config.js"), import_schema = require("./schema.js"), import_siblings = require("./siblings.js"), import_utils2 = require("./utils.js"), import_documents = require("./documents.js");
|
30
|
+
const debug = (0, import_debug.default)("graphql-eslint:parser");
|
31
|
+
debug("cwd %o", import_utils2.CWD);
|
32
|
+
const LEGACY_PARSER_OPTIONS_KEYS = [
|
33
|
+
"schema",
|
34
|
+
"documents",
|
35
|
+
"extensions",
|
36
|
+
"include",
|
37
|
+
"exclude",
|
38
|
+
"projects",
|
39
|
+
"schemaOptions",
|
40
|
+
"graphQLParserOptions",
|
41
|
+
"skipGraphQLConfig",
|
42
|
+
"operations"
|
43
|
+
];
|
44
|
+
function parseForESLint(code, options) {
|
45
|
+
for (const key of LEGACY_PARSER_OPTIONS_KEYS)
|
46
|
+
if (key in options)
|
47
|
+
throw new Error(
|
48
|
+
`\`parserOptions.${key}\` was removed in graphql-eslint@4. Use physical graphql-config for setting schema and documents or \`parserOptions.graphQLConfig\` for programmatic usage.`
|
49
|
+
);
|
50
|
+
try {
|
51
|
+
const { filePath } = options, { document } = (0, import_utils.parseGraphQLSDL)(filePath, code, { noLocation: !1 });
|
52
|
+
let project, schema, documents;
|
53
|
+
{
|
54
|
+
const gqlConfig = (0, import_graphql_config.loadGraphQLConfig)(options), realFilepath = filePath.replace(import_utils2.VIRTUAL_DOCUMENT_REGEX, "");
|
55
|
+
project = gqlConfig.getProjectForFile(realFilepath), documents = (0, import_documents.getDocuments)(project);
|
56
|
+
}
|
57
|
+
try {
|
58
|
+
schema = (0, import_schema.getSchema)(project);
|
59
|
+
} catch (error) {
|
60
|
+
throw error instanceof Error && (error.message = `Error while loading schema: ${error.message}`), error;
|
61
|
+
}
|
62
|
+
const rootTree = (0, import_estree_converter.convertToESTree)(document, schema);
|
63
|
+
return {
|
64
|
+
services: {
|
65
|
+
schema,
|
66
|
+
siblingOperations: (0, import_siblings.getSiblings)(documents)
|
67
|
+
},
|
68
|
+
ast: {
|
69
|
+
comments: (0, import_estree_converter.extractComments)(document.loc),
|
70
|
+
tokens: (0, import_estree_converter.extractTokens)(filePath, code),
|
71
|
+
loc: rootTree.loc,
|
72
|
+
range: rootTree.range,
|
73
|
+
type: "Program",
|
74
|
+
sourceType: "script",
|
75
|
+
body: [rootTree]
|
76
|
+
}
|
77
|
+
};
|
78
|
+
} catch (error) {
|
79
|
+
if (error instanceof Error && (error.message = `[graphql-eslint] ${error.message}`), error instanceof import_graphql.GraphQLError) {
|
80
|
+
const location = error.locations?.[0];
|
81
|
+
throw {
|
82
|
+
index: error.positions?.[0],
|
83
|
+
...location && {
|
84
|
+
lineNumber: location.line,
|
85
|
+
column: location.column - 1
|
86
|
+
},
|
87
|
+
message: error.message
|
88
|
+
};
|
89
|
+
}
|
90
|
+
throw error;
|
91
|
+
}
|
92
|
+
}
|
93
|
+
// Annotate the CommonJS export names for ESM import in node:
|
94
|
+
0 && (module.exports = {
|
95
|
+
parseForESLint
|
96
|
+
});
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { Linter } from 'eslint';
|
2
|
+
|
3
|
+
type Block = Linter.ProcessorFile & {
|
4
|
+
lineOffset: number;
|
5
|
+
offset: number;
|
6
|
+
};
|
7
|
+
declare const processor: {
|
8
|
+
supportsAutofix: true;
|
9
|
+
preprocess(code: string, filePath: string): (string | Block)[];
|
10
|
+
postprocess(messages: Linter.LintMessage[][], filePath: string): Linter.LintMessage[];
|
11
|
+
};
|
12
|
+
|
13
|
+
export { Block, processor };
|
package/cjs/processor.js
ADDED
@@ -0,0 +1,95 @@
|
|
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 processor_exports = {};
|
17
|
+
__export(processor_exports, {
|
18
|
+
processor: () => processor
|
19
|
+
});
|
20
|
+
module.exports = __toCommonJS(processor_exports);
|
21
|
+
var import_node_path = require("node:path"), import_graphql_tag_pluck = require("@graphql-tools/graphql-tag-pluck"), import_utils = require("@graphql-tools/utils"), import_graphql_config2 = require("./graphql-config.js"), import_utils2 = require("./utils.js");
|
22
|
+
const blocksMap = /* @__PURE__ */ new Map();
|
23
|
+
let onDiskConfig, onDiskConfigLoaded = !1;
|
24
|
+
const RELEVANT_KEYWORDS = ["gql", "graphql", "GraphQL"], processor = {
|
25
|
+
supportsAutofix: !0,
|
26
|
+
preprocess(code, filePath) {
|
27
|
+
onDiskConfigLoaded || (onDiskConfig = (0, import_graphql_config2.loadOnDiskGraphQLConfig)(filePath), onDiskConfigLoaded = !0);
|
28
|
+
let keywords = RELEVANT_KEYWORDS;
|
29
|
+
const pluckConfig = onDiskConfig?.getProjectForFile(filePath).extensions.pluckConfig;
|
30
|
+
if (pluckConfig) {
|
31
|
+
const {
|
32
|
+
modules = [],
|
33
|
+
globalGqlIdentifierName = ["gql", "graphql"],
|
34
|
+
gqlMagicComment = "GraphQL"
|
35
|
+
} = pluckConfig;
|
36
|
+
keywords = [
|
37
|
+
...new Set(
|
38
|
+
[
|
39
|
+
...modules.map(({ identifier }) => identifier),
|
40
|
+
...(0, import_utils.asArray)(globalGqlIdentifierName),
|
41
|
+
gqlMagicComment
|
42
|
+
].filter(import_utils2.truthy)
|
43
|
+
)
|
44
|
+
];
|
45
|
+
}
|
46
|
+
if (keywords.every((keyword) => !code.includes(keyword)))
|
47
|
+
return [code];
|
48
|
+
try {
|
49
|
+
const blocks = (0, import_graphql_tag_pluck.gqlPluckFromCodeStringSync)(filePath, code, {
|
50
|
+
skipIndent: !0,
|
51
|
+
...pluckConfig
|
52
|
+
}).map((item) => ({
|
53
|
+
filename: "document.graphql",
|
54
|
+
text: item.body,
|
55
|
+
lineOffset: item.locationOffset.line - 1,
|
56
|
+
// @ts-expect-error -- `index` field exist but show ts error
|
57
|
+
offset: item.locationOffset.index + 1
|
58
|
+
}));
|
59
|
+
return blocksMap.set(filePath, blocks), [
|
60
|
+
...blocks,
|
61
|
+
code
|
62
|
+
/* source code must be provided and be last */
|
63
|
+
];
|
64
|
+
} catch (error) {
|
65
|
+
return error instanceof Error && (error.message = `[graphql-eslint] Error while preprocessing "${(0, import_node_path.relative)(
|
66
|
+
import_utils2.CWD,
|
67
|
+
filePath
|
68
|
+
)}" file
|
69
|
+
|
70
|
+
${error.message}`), console.error(error), [code];
|
71
|
+
}
|
72
|
+
},
|
73
|
+
postprocess(messages, filePath) {
|
74
|
+
const blocks = blocksMap.get(filePath) || [];
|
75
|
+
for (let i = 0; i < blocks.length; i += 1) {
|
76
|
+
const { lineOffset, offset } = blocks[i];
|
77
|
+
for (const message of messages[i] || []) {
|
78
|
+
if (/\.(vue|svelte)$/.test(filePath)) {
|
79
|
+
delete message.endLine, delete message.endColumn, delete message.fix, delete message.suggestions, Object.assign(message, import_utils2.REPORT_ON_FIRST_CHARACTER);
|
80
|
+
continue;
|
81
|
+
}
|
82
|
+
message.line += lineOffset, typeof message.endLine == "number" && (message.endLine += lineOffset), message.fix && (message.fix.range[0] += offset, message.fix.range[1] += offset);
|
83
|
+
for (const suggestion of message.suggestions || []) {
|
84
|
+
const [start, end] = suggestion.fix.range;
|
85
|
+
suggestion.fix.range = [start + offset, end + offset];
|
86
|
+
}
|
87
|
+
}
|
88
|
+
}
|
89
|
+
return messages.flat().sort((a, b) => a.line - b.line || a.column - b.column);
|
90
|
+
}
|
91
|
+
};
|
92
|
+
// Annotate the CommonJS export names for ESM import in node:
|
93
|
+
0 && (module.exports = {
|
94
|
+
processor
|
95
|
+
});
|
@@ -0,0 +1,74 @@
|
|
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 minProperties: 1;
|
19
|
+
readonly properties: {
|
20
|
+
readonly fields: {
|
21
|
+
readonly items: {
|
22
|
+
readonly enum: ("ObjectTypeDefinition" | "InterfaceTypeDefinition" | "InputObjectTypeDefinition")[];
|
23
|
+
};
|
24
|
+
readonly description: "Fields of `type`, `interface`, and `input`.";
|
25
|
+
readonly type: "array";
|
26
|
+
readonly uniqueItems: true;
|
27
|
+
readonly minItems: 1;
|
28
|
+
};
|
29
|
+
readonly values: {
|
30
|
+
readonly type: "boolean";
|
31
|
+
readonly description: "Values of `enum`.";
|
32
|
+
};
|
33
|
+
readonly selections: {
|
34
|
+
readonly items: {
|
35
|
+
readonly enum: ("OperationDefinition" | "FragmentDefinition")[];
|
36
|
+
};
|
37
|
+
readonly description: "Selections of `fragment` and operations `query`, `mutation` and `subscription`.";
|
38
|
+
readonly type: "array";
|
39
|
+
readonly uniqueItems: true;
|
40
|
+
readonly minItems: 1;
|
41
|
+
};
|
42
|
+
readonly variables: {
|
43
|
+
readonly type: "boolean";
|
44
|
+
readonly description: "Variables of operations `query`, `mutation` and `subscription`.";
|
45
|
+
};
|
46
|
+
readonly arguments: {
|
47
|
+
readonly items: {
|
48
|
+
readonly enum: ("Field" | "Directive" | "FieldDefinition" | "DirectiveDefinition")[];
|
49
|
+
};
|
50
|
+
readonly description: "Arguments of fields and directives.";
|
51
|
+
readonly type: "array";
|
52
|
+
readonly uniqueItems: true;
|
53
|
+
readonly minItems: 1;
|
54
|
+
};
|
55
|
+
readonly definitions: {
|
56
|
+
readonly type: "boolean";
|
57
|
+
readonly description: "Definitions – `type`, `interface`, `enum`, `scalar`, `input`, `union` and `directive`.";
|
58
|
+
};
|
59
|
+
readonly groups: {
|
60
|
+
readonly minItems: 2;
|
61
|
+
readonly description: "Custom order group. Example: `['id', '*', 'createdAt', 'updatedAt']` where `*` says for everything else.";
|
62
|
+
readonly type: "array";
|
63
|
+
readonly uniqueItems: true;
|
64
|
+
readonly items: {
|
65
|
+
readonly type: "string";
|
66
|
+
};
|
67
|
+
};
|
68
|
+
};
|
69
|
+
};
|
70
|
+
};
|
71
|
+
type RuleOptions = FromSchema<typeof schema>;
|
72
|
+
declare const rule: GraphQLESLintRule<RuleOptions>;
|
73
|
+
|
74
|
+
export { RuleOptions, rule };
|
@@ -0,0 +1,323 @@
|
|
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 alphabetize_exports = {};
|
25
|
+
__export(alphabetize_exports, {
|
26
|
+
rule: () => rule
|
27
|
+
});
|
28
|
+
module.exports = __toCommonJS(alphabetize_exports);
|
29
|
+
var import_graphql = require("graphql"), import_lodash = __toESM(require("lodash.lowercase")), import_utils = require("../utils.js");
|
30
|
+
const RULE_ID = "alphabetize", fieldsEnum = [
|
31
|
+
import_graphql.Kind.OBJECT_TYPE_DEFINITION,
|
32
|
+
import_graphql.Kind.INTERFACE_TYPE_DEFINITION,
|
33
|
+
import_graphql.Kind.INPUT_OBJECT_TYPE_DEFINITION
|
34
|
+
], selectionsEnum = [
|
35
|
+
import_graphql.Kind.OPERATION_DEFINITION,
|
36
|
+
import_graphql.Kind.FRAGMENT_DEFINITION
|
37
|
+
], argumentsEnum = [
|
38
|
+
import_graphql.Kind.FIELD_DEFINITION,
|
39
|
+
import_graphql.Kind.FIELD,
|
40
|
+
import_graphql.Kind.DIRECTIVE_DEFINITION,
|
41
|
+
import_graphql.Kind.DIRECTIVE
|
42
|
+
], schema = {
|
43
|
+
type: "array",
|
44
|
+
minItems: 1,
|
45
|
+
maxItems: 1,
|
46
|
+
items: {
|
47
|
+
type: "object",
|
48
|
+
additionalProperties: !1,
|
49
|
+
minProperties: 1,
|
50
|
+
properties: {
|
51
|
+
fields: {
|
52
|
+
...import_utils.ARRAY_DEFAULT_OPTIONS,
|
53
|
+
items: {
|
54
|
+
enum: fieldsEnum
|
55
|
+
},
|
56
|
+
description: "Fields of `type`, `interface`, and `input`."
|
57
|
+
},
|
58
|
+
values: {
|
59
|
+
type: "boolean",
|
60
|
+
description: "Values of `enum`."
|
61
|
+
},
|
62
|
+
selections: {
|
63
|
+
...import_utils.ARRAY_DEFAULT_OPTIONS,
|
64
|
+
items: {
|
65
|
+
enum: selectionsEnum
|
66
|
+
},
|
67
|
+
description: "Selections of `fragment` and operations `query`, `mutation` and `subscription`."
|
68
|
+
},
|
69
|
+
variables: {
|
70
|
+
type: "boolean",
|
71
|
+
description: "Variables of operations `query`, `mutation` and `subscription`."
|
72
|
+
},
|
73
|
+
arguments: {
|
74
|
+
...import_utils.ARRAY_DEFAULT_OPTIONS,
|
75
|
+
items: {
|
76
|
+
enum: argumentsEnum
|
77
|
+
},
|
78
|
+
description: "Arguments of fields and directives."
|
79
|
+
},
|
80
|
+
definitions: {
|
81
|
+
type: "boolean",
|
82
|
+
description: "Definitions \u2013 `type`, `interface`, `enum`, `scalar`, `input`, `union` and `directive`."
|
83
|
+
},
|
84
|
+
groups: {
|
85
|
+
...import_utils.ARRAY_DEFAULT_OPTIONS,
|
86
|
+
minItems: 2,
|
87
|
+
description: "Custom order group. Example: `['id', '*', 'createdAt', 'updatedAt']` where `*` says for everything else."
|
88
|
+
}
|
89
|
+
}
|
90
|
+
}
|
91
|
+
}, rule = {
|
92
|
+
meta: {
|
93
|
+
type: "suggestion",
|
94
|
+
fixable: "code",
|
95
|
+
docs: {
|
96
|
+
category: ["Schema", "Operations"],
|
97
|
+
description: "Enforce arrange in alphabetical order for type fields, enum values, input object fields, operation selections and more.",
|
98
|
+
url: `https://the-guild.dev/graphql/eslint/rules/${RULE_ID}`,
|
99
|
+
examples: [
|
100
|
+
{
|
101
|
+
title: "Incorrect",
|
102
|
+
usage: [{ fields: [import_graphql.Kind.OBJECT_TYPE_DEFINITION] }],
|
103
|
+
code: (
|
104
|
+
/* GraphQL */
|
105
|
+
`
|
106
|
+
type User {
|
107
|
+
password: String
|
108
|
+
firstName: String! # should be before "password"
|
109
|
+
age: Int # should be before "firstName"
|
110
|
+
lastName: String!
|
111
|
+
}
|
112
|
+
`
|
113
|
+
)
|
114
|
+
},
|
115
|
+
{
|
116
|
+
title: "Correct",
|
117
|
+
usage: [{ fields: [import_graphql.Kind.OBJECT_TYPE_DEFINITION] }],
|
118
|
+
code: (
|
119
|
+
/* GraphQL */
|
120
|
+
`
|
121
|
+
type User {
|
122
|
+
age: Int
|
123
|
+
firstName: String!
|
124
|
+
lastName: String!
|
125
|
+
password: String
|
126
|
+
}
|
127
|
+
`
|
128
|
+
)
|
129
|
+
},
|
130
|
+
{
|
131
|
+
title: "Incorrect",
|
132
|
+
usage: [{ values: !0 }],
|
133
|
+
code: (
|
134
|
+
/* GraphQL */
|
135
|
+
`
|
136
|
+
enum Role {
|
137
|
+
SUPER_ADMIN
|
138
|
+
ADMIN # should be before "SUPER_ADMIN"
|
139
|
+
USER
|
140
|
+
GOD # should be before "USER"
|
141
|
+
}
|
142
|
+
`
|
143
|
+
)
|
144
|
+
},
|
145
|
+
{
|
146
|
+
title: "Correct",
|
147
|
+
usage: [{ values: !0 }],
|
148
|
+
code: (
|
149
|
+
/* GraphQL */
|
150
|
+
`
|
151
|
+
enum Role {
|
152
|
+
ADMIN
|
153
|
+
GOD
|
154
|
+
SUPER_ADMIN
|
155
|
+
USER
|
156
|
+
}
|
157
|
+
`
|
158
|
+
)
|
159
|
+
},
|
160
|
+
{
|
161
|
+
title: "Incorrect",
|
162
|
+
usage: [{ selections: [import_graphql.Kind.OPERATION_DEFINITION] }],
|
163
|
+
code: (
|
164
|
+
/* GraphQL */
|
165
|
+
`
|
166
|
+
query {
|
167
|
+
me {
|
168
|
+
firstName
|
169
|
+
lastName
|
170
|
+
email # should be before "lastName"
|
171
|
+
}
|
172
|
+
}
|
173
|
+
`
|
174
|
+
)
|
175
|
+
},
|
176
|
+
{
|
177
|
+
title: "Correct",
|
178
|
+
usage: [{ selections: [import_graphql.Kind.OPERATION_DEFINITION] }],
|
179
|
+
code: (
|
180
|
+
/* GraphQL */
|
181
|
+
`
|
182
|
+
query {
|
183
|
+
me {
|
184
|
+
email
|
185
|
+
firstName
|
186
|
+
lastName
|
187
|
+
}
|
188
|
+
}
|
189
|
+
`
|
190
|
+
)
|
191
|
+
}
|
192
|
+
],
|
193
|
+
configOptions: {
|
194
|
+
schema: [
|
195
|
+
{
|
196
|
+
definitions: !0,
|
197
|
+
fields: fieldsEnum,
|
198
|
+
values: !0,
|
199
|
+
arguments: argumentsEnum,
|
200
|
+
groups: ["id", "*", "createdAt", "updatedAt"]
|
201
|
+
}
|
202
|
+
],
|
203
|
+
operations: [
|
204
|
+
{
|
205
|
+
definitions: !0,
|
206
|
+
selections: selectionsEnum,
|
207
|
+
variables: !0,
|
208
|
+
arguments: [import_graphql.Kind.FIELD, import_graphql.Kind.DIRECTIVE],
|
209
|
+
groups: ["id", "*", "createdAt", "updatedAt"]
|
210
|
+
}
|
211
|
+
]
|
212
|
+
}
|
213
|
+
},
|
214
|
+
messages: {
|
215
|
+
[RULE_ID]: "{{ currNode }} should be before {{ prevNode }}"
|
216
|
+
},
|
217
|
+
schema
|
218
|
+
},
|
219
|
+
create(context) {
|
220
|
+
const sourceCode = context.getSourceCode();
|
221
|
+
function isNodeAndCommentOnSameLine(node, comment) {
|
222
|
+
return node.loc.end.line === comment.loc.start.line;
|
223
|
+
}
|
224
|
+
function getBeforeComments(node) {
|
225
|
+
const commentsBefore = sourceCode.getCommentsBefore(node);
|
226
|
+
if (commentsBefore.length === 0)
|
227
|
+
return [];
|
228
|
+
const tokenBefore = sourceCode.getTokenBefore(node);
|
229
|
+
if (tokenBefore)
|
230
|
+
return commentsBefore.filter((comment) => !isNodeAndCommentOnSameLine(tokenBefore, comment));
|
231
|
+
const filteredComments = [], nodeLine = node.loc.start.line;
|
232
|
+
for (let i = commentsBefore.length - 1; i >= 0; i -= 1) {
|
233
|
+
const comment = commentsBefore[i];
|
234
|
+
if (nodeLine - comment.loc.start.line - filteredComments.length > 1)
|
235
|
+
break;
|
236
|
+
filteredComments.unshift(comment);
|
237
|
+
}
|
238
|
+
return filteredComments;
|
239
|
+
}
|
240
|
+
function getRangeWithComments(node) {
|
241
|
+
node.kind === import_graphql.Kind.VARIABLE && (node = node.parent);
|
242
|
+
const [firstBeforeComment] = getBeforeComments(node), [firstAfterComment] = sourceCode.getCommentsAfter(node), from = firstBeforeComment || node, to = firstAfterComment && isNodeAndCommentOnSameLine(node, firstAfterComment) ? firstAfterComment : node;
|
243
|
+
return [from.range[0], to.range[1]];
|
244
|
+
}
|
245
|
+
function checkNodes(nodes = []) {
|
246
|
+
for (let i = 1; i < nodes.length; i += 1) {
|
247
|
+
const currNode = nodes[i], currName = "alias" in currNode && currNode.alias?.value || "name" in currNode && currNode.name?.value;
|
248
|
+
if (!currName)
|
249
|
+
continue;
|
250
|
+
const prevNode = nodes[i - 1], prevName = "alias" in prevNode && prevNode.alias?.value || "name" in prevNode && prevNode.name?.value;
|
251
|
+
if (prevName) {
|
252
|
+
const compareResult = prevName.localeCompare(currName), { groups } = opts;
|
253
|
+
let shouldSortByGroup = !1;
|
254
|
+
if (groups?.length) {
|
255
|
+
if (!groups.includes("*"))
|
256
|
+
throw new Error("`groups` option should contain `*` string.");
|
257
|
+
let indexForPrev = groups.indexOf(prevName);
|
258
|
+
indexForPrev === -1 && (indexForPrev = groups.indexOf("*"));
|
259
|
+
let indexForCurr = groups.indexOf(currName);
|
260
|
+
if (indexForCurr === -1 && (indexForCurr = groups.indexOf("*")), shouldSortByGroup = indexForPrev - indexForCurr > 0, indexForPrev < indexForCurr)
|
261
|
+
continue;
|
262
|
+
}
|
263
|
+
if (!shouldSortByGroup && !(compareResult === 1) && (!(compareResult === 0) || !prevNode.kind.endsWith("Extension") || currNode.kind.endsWith("Extension")))
|
264
|
+
continue;
|
265
|
+
}
|
266
|
+
context.report({
|
267
|
+
// @ts-expect-error can't be undefined
|
268
|
+
node: "alias" in currNode && currNode.alias || currNode.name,
|
269
|
+
messageId: RULE_ID,
|
270
|
+
data: {
|
271
|
+
currNode: (0, import_utils.displayNodeName)(currNode),
|
272
|
+
prevNode: prevName ? (0, import_utils.displayNodeName)(prevNode) : (0, import_lodash.default)(prevNode.kind)
|
273
|
+
},
|
274
|
+
*fix(fixer) {
|
275
|
+
const prevRange = getRangeWithComments(prevNode), currRange = getRangeWithComments(currNode);
|
276
|
+
yield fixer.replaceTextRange(
|
277
|
+
prevRange,
|
278
|
+
sourceCode.getText({ range: currRange })
|
279
|
+
), yield fixer.replaceTextRange(
|
280
|
+
currRange,
|
281
|
+
sourceCode.getText({ range: prevRange })
|
282
|
+
);
|
283
|
+
}
|
284
|
+
});
|
285
|
+
}
|
286
|
+
}
|
287
|
+
const opts = context.options[0], fields = new Set(opts.fields ?? []), listeners = {}, fieldsSelector = [
|
288
|
+
fields.has(import_graphql.Kind.OBJECT_TYPE_DEFINITION) && [
|
289
|
+
import_graphql.Kind.OBJECT_TYPE_DEFINITION,
|
290
|
+
import_graphql.Kind.OBJECT_TYPE_EXTENSION
|
291
|
+
],
|
292
|
+
fields.has(import_graphql.Kind.INTERFACE_TYPE_DEFINITION) && [
|
293
|
+
import_graphql.Kind.INTERFACE_TYPE_DEFINITION,
|
294
|
+
import_graphql.Kind.INTERFACE_TYPE_EXTENSION
|
295
|
+
],
|
296
|
+
fields.has(import_graphql.Kind.INPUT_OBJECT_TYPE_DEFINITION) && [
|
297
|
+
import_graphql.Kind.INPUT_OBJECT_TYPE_DEFINITION,
|
298
|
+
import_graphql.Kind.INPUT_OBJECT_TYPE_EXTENSION
|
299
|
+
]
|
300
|
+
].filter(import_utils.truthy).flat().join(","), selectionsSelector = opts.selections?.join(","), argumentsSelector = opts.arguments?.join(",");
|
301
|
+
if (fieldsSelector && (listeners[fieldsSelector] = (node) => {
|
302
|
+
checkNodes(node.fields);
|
303
|
+
}), opts.values) {
|
304
|
+
const enumValuesSelector = [import_graphql.Kind.ENUM_TYPE_DEFINITION, import_graphql.Kind.ENUM_TYPE_EXTENSION].join(",");
|
305
|
+
listeners[enumValuesSelector] = (node) => {
|
306
|
+
checkNodes(node.values);
|
307
|
+
};
|
308
|
+
}
|
309
|
+
return selectionsSelector && (listeners[`:matches(${selectionsSelector}) SelectionSet`] = (node) => {
|
310
|
+
checkNodes(node.selections);
|
311
|
+
}), opts.variables && (listeners.OperationDefinition = (node) => {
|
312
|
+
checkNodes(node.variableDefinitions?.map((varDef) => varDef.variable));
|
313
|
+
}), argumentsSelector && (listeners[argumentsSelector] = (node) => {
|
314
|
+
checkNodes(node.arguments);
|
315
|
+
}), opts.definitions && (listeners.Document = (node) => {
|
316
|
+
checkNodes(node.definitions);
|
317
|
+
}), listeners;
|
318
|
+
}
|
319
|
+
};
|
320
|
+
// Annotate the CommonJS export names for ESM import in node:
|
321
|
+
0 && (module.exports = {
|
322
|
+
rule
|
323
|
+
});
|
@@ -0,0 +1,29 @@
|
|
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 maxItems: 1;
|
14
|
+
readonly items: {
|
15
|
+
readonly type: "object";
|
16
|
+
readonly additionalProperties: false;
|
17
|
+
readonly minProperties: 1;
|
18
|
+
readonly properties: {
|
19
|
+
readonly style: {
|
20
|
+
readonly enum: readonly ["block", "inline"];
|
21
|
+
readonly default: "block";
|
22
|
+
};
|
23
|
+
};
|
24
|
+
};
|
25
|
+
};
|
26
|
+
type RuleOptions = FromSchema<typeof schema>;
|
27
|
+
declare const rule: GraphQLESLintRule<RuleOptions>;
|
28
|
+
|
29
|
+
export { RuleOptions, rule };
|