@graphql-eslint/eslint-plugin 4.0.0-alpha-20230801163310-8bc4340 → 4.0.0-alpha-20230810160036-304c2c0
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/README.md +2 -0
- package/cjs/cache.js +10 -19
- package/cjs/configs/index.d.ts +42 -16
- package/cjs/configs/index.js +10 -19
- package/cjs/configs/operations-all.d.ts +4 -3
- package/cjs/configs/operations-all.js +5 -4
- package/cjs/configs/operations-recommended.d.ts +3 -1
- package/cjs/configs/operations-recommended.js +3 -1
- package/cjs/configs/schema-all.d.ts +6 -1
- package/cjs/configs/schema-all.js +5 -2
- package/cjs/configs/schema-recommended.d.ts +19 -1
- package/cjs/configs/schema-recommended.js +22 -2
- package/cjs/documents.js +17 -32
- package/cjs/estree-converter/converter.js +14 -27
- package/cjs/estree-converter/index.js +4 -7
- package/cjs/estree-converter/types.js +3 -5
- package/cjs/estree-converter/utils.d.ts +2 -3
- package/cjs/estree-converter/utils.js +15 -45
- package/cjs/flat-configs.d.ts +59 -12
- package/cjs/flat-configs.js +9 -14
- package/cjs/graphql-config.d.ts +4 -3
- package/cjs/graphql-config.js +23 -44
- package/cjs/index.d.ts +10 -4
- package/cjs/index.js +8 -16
- package/cjs/parser.d.ts +4 -3
- package/cjs/parser.js +38 -45
- package/cjs/processor.d.ts +5 -1
- package/cjs/processor.js +25 -57
- package/cjs/rules/alphabetize.d.ts +6 -16
- package/cjs/rules/alphabetize.js +60 -132
- package/cjs/rules/description-style.d.ts +4 -3
- package/cjs/rules/description-style.js +11 -18
- package/cjs/rules/graphql-js-validation.d.ts +4 -3
- package/cjs/rules/graphql-js-validation.js +151 -225
- package/cjs/rules/index.d.ts +15 -13
- package/cjs/rules/index.js +8 -45
- package/cjs/rules/input-name.d.ts +4 -3
- package/cjs/rules/input-name.js +43 -59
- package/cjs/rules/lone-executable-definition.d.ts +6 -5
- package/cjs/rules/lone-executable-definition.js +14 -28
- package/cjs/rules/match-document-filename.d.ts +4 -3
- package/cjs/rules/match-document-filename.js +39 -70
- package/cjs/rules/naming-convention.d.ts +4 -3
- package/cjs/rules/naming-convention.js +56 -74
- package/cjs/rules/no-anonymous-operations.d.ts +4 -3
- package/cjs/rules/no-anonymous-operations.js +11 -18
- package/cjs/rules/no-deprecated.d.ts +4 -3
- package/cjs/rules/no-deprecated.js +15 -29
- package/cjs/rules/no-duplicate-fields.d.ts +4 -3
- package/cjs/rules/no-duplicate-fields.js +13 -23
- package/cjs/rules/no-hashtag-description.d.ts +4 -3
- package/cjs/rules/no-hashtag-description.js +16 -29
- package/cjs/rules/no-one-place-fragments.d.ts +4 -3
- package/cjs/rules/no-one-place-fragments.js +17 -29
- package/cjs/rules/no-root-type.d.ts +4 -3
- package/cjs/rules/no-root-type.js +15 -25
- package/cjs/rules/no-scalar-result-type-on-mutation.d.ts +4 -3
- package/cjs/rules/no-scalar-result-type-on-mutation.js +18 -30
- package/cjs/rules/no-typename-prefix.d.ts +4 -3
- package/cjs/rules/no-typename-prefix.js +26 -33
- package/cjs/rules/no-unreachable-types.d.ts +4 -3
- package/cjs/rules/no-unreachable-types.js +25 -47
- package/cjs/rules/no-unused-fields.d.ts +4 -3
- package/cjs/rules/no-unused-fields.js +24 -49
- package/cjs/rules/relay-arguments.d.ts +4 -3
- package/cjs/rules/relay-arguments.js +20 -43
- package/cjs/rules/relay-connection-types.d.ts +4 -3
- package/cjs/rules/relay-connection-types.js +14 -45
- package/cjs/rules/relay-edge-types.d.ts +4 -3
- package/cjs/rules/relay-edge-types.js +48 -99
- package/cjs/rules/relay-page-info.d.ts +4 -3
- package/cjs/rules/relay-page-info.js +21 -44
- package/cjs/rules/require-deprecation-date.d.ts +4 -3
- package/cjs/rules/require-deprecation-date.js +15 -31
- package/cjs/rules/require-deprecation-reason.d.ts +4 -3
- package/cjs/rules/require-deprecation-reason.js +12 -20
- package/cjs/rules/require-description.d.ts +4 -3
- package/cjs/rules/require-description.js +39 -65
- package/cjs/rules/require-field-of-type-query-in-mutation-result.d.ts +4 -3
- package/cjs/rules/require-field-of-type-query-in-mutation-result.js +16 -31
- package/cjs/rules/require-import-fragment.d.ts +4 -3
- package/cjs/rules/require-import-fragment.js +22 -40
- package/cjs/rules/require-nullable-fields-with-oneof.d.ts +4 -3
- package/cjs/rules/require-nullable-fields-with-oneof.js +11 -22
- package/cjs/rules/require-nullable-result-in-root.d.ts +4 -3
- package/cjs/rules/require-nullable-result-in-root.js +34 -44
- package/cjs/rules/{require-id-when-available.d.ts → require-selections.d.ts} +4 -3
- package/cjs/rules/require-selections.js +198 -0
- package/cjs/rules/require-type-pattern-with-oneof.d.ts +4 -3
- package/cjs/rules/require-type-pattern-with-oneof.js +15 -23
- package/cjs/rules/selection-set-depth.d.ts +4 -3
- package/cjs/rules/selection-set-depth.js +18 -34
- package/cjs/rules/strict-id-in-types.d.ts +4 -3
- package/cjs/rules/strict-id-in-types.js +25 -43
- package/cjs/rules/{no-case-insensitive-enum-values-duplicates.d.ts → unique-enum-value-names.d.ts} +4 -3
- package/cjs/rules/{no-case-insensitive-enum-values-duplicates.js → unique-enum-value-names.js} +16 -21
- package/cjs/rules/unique-fragment-name.d.ts +3 -2
- package/cjs/rules/unique-fragment-name.js +24 -36
- package/cjs/rules/unique-operation-name.d.ts +4 -3
- package/cjs/rules/unique-operation-name.js +10 -12
- package/cjs/schema.d.ts +4 -3
- package/cjs/schema.js +14 -27
- package/cjs/siblings.d.ts +24 -8
- package/cjs/siblings.js +42 -82
- package/cjs/types.d.ts +74 -7
- package/cjs/types.js +3 -5
- package/cjs/utils.d.ts +3 -2
- package/cjs/utils.js +27 -44
- package/esm/cache.js +4 -8
- package/esm/{chunk-BMTV3EA2.js → chunk-U3TKCM4X.js} +1 -1
- package/esm/configs/index.d.mts +42 -16
- package/esm/configs/index.js +4 -4
- package/esm/configs/operations-all.d.mts +4 -3
- package/esm/configs/operations-all.js +6 -5
- package/esm/configs/operations-recommended.d.mts +3 -1
- package/esm/configs/operations-recommended.js +4 -2
- package/esm/configs/schema-all.d.mts +6 -1
- package/esm/configs/schema-all.js +6 -3
- package/esm/configs/schema-recommended.d.mts +19 -1
- package/esm/configs/schema-recommended.js +23 -3
- package/esm/configs/{relay.js → schema-relay.js} +4 -4
- package/esm/documents.js +10 -17
- package/esm/estree-converter/converter.js +9 -18
- package/esm/estree-converter/utils.d.mts +2 -3
- package/esm/estree-converter/utils.js +11 -38
- package/esm/flat-configs.d.mts +59 -12
- package/esm/flat-configs.js +4 -5
- package/esm/graphql-config.d.mts +4 -3
- package/esm/graphql-config.js +18 -34
- package/esm/index.d.mts +10 -4
- package/esm/index.js +1 -1
- package/esm/parser.d.mts +4 -3
- package/esm/parser.js +33 -27
- package/esm/processor.d.mts +5 -1
- package/esm/processor.js +21 -46
- package/esm/rules/alphabetize.d.mts +6 -16
- package/esm/rules/alphabetize.js +53 -118
- package/esm/rules/description-style.d.mts +4 -3
- package/esm/rules/description-style.js +7 -11
- package/esm/rules/graphql-js-validation.d.mts +4 -3
- package/esm/rules/graphql-js-validation.js +178 -218
- package/esm/rules/index.d.mts +15 -13
- package/esm/rules/index.js +5 -5
- package/esm/rules/input-name.d.mts +4 -3
- package/esm/rules/input-name.js +39 -52
- package/esm/rules/lone-executable-definition.d.mts +6 -5
- package/esm/rules/lone-executable-definition.js +10 -20
- package/esm/rules/match-document-filename.d.mts +4 -3
- package/esm/rules/match-document-filename.js +35 -61
- package/esm/rules/naming-convention.d.mts +4 -3
- package/esm/rules/naming-convention.js +51 -65
- package/esm/rules/no-anonymous-operations.d.mts +4 -3
- package/esm/rules/no-anonymous-operations.js +6 -9
- package/esm/rules/no-deprecated.d.mts +4 -3
- package/esm/rules/no-deprecated.js +10 -20
- package/esm/rules/no-duplicate-fields.d.mts +4 -3
- package/esm/rules/no-duplicate-fields.js +9 -16
- package/esm/rules/no-hashtag-description.d.mts +4 -3
- package/esm/rules/no-hashtag-description.js +11 -20
- package/esm/rules/no-one-place-fragments.d.mts +4 -3
- package/esm/rules/no-one-place-fragments.js +12 -19
- package/esm/rules/no-root-type.d.mts +4 -3
- package/esm/rules/no-root-type.js +11 -18
- package/esm/rules/no-scalar-result-type-on-mutation.d.mts +4 -3
- package/esm/rules/no-scalar-result-type-on-mutation.js +13 -21
- package/esm/rules/no-typename-prefix.d.mts +4 -3
- package/esm/rules/no-typename-prefix.js +22 -26
- package/esm/rules/no-unreachable-types.d.mts +4 -3
- package/esm/rules/no-unreachable-types.js +18 -33
- package/esm/rules/no-unused-fields.d.mts +4 -3
- package/esm/rules/no-unused-fields.js +19 -40
- package/esm/rules/relay-arguments.d.mts +4 -3
- package/esm/rules/relay-arguments.js +15 -34
- package/esm/rules/relay-connection-types.d.mts +4 -3
- package/esm/rules/relay-connection-types.js +10 -38
- package/esm/rules/relay-edge-types.d.mts +4 -3
- package/esm/rules/relay-edge-types.js +43 -89
- package/esm/rules/relay-page-info.d.mts +4 -3
- package/esm/rules/relay-page-info.js +16 -34
- package/esm/rules/require-deprecation-date.d.mts +4 -3
- package/esm/rules/require-deprecation-date.js +10 -22
- package/esm/rules/require-deprecation-reason.d.mts +4 -3
- package/esm/rules/require-deprecation-reason.js +7 -11
- package/esm/rules/require-description.d.mts +4 -3
- package/esm/rules/require-description.js +34 -55
- package/esm/rules/require-field-of-type-query-in-mutation-result.d.mts +4 -3
- package/esm/rules/require-field-of-type-query-in-mutation-result.js +11 -22
- package/esm/rules/require-import-fragment.d.mts +4 -3
- package/esm/rules/require-import-fragment.js +14 -26
- package/esm/rules/require-nullable-fields-with-oneof.d.mts +4 -3
- package/esm/rules/require-nullable-fields-with-oneof.js +6 -13
- package/esm/rules/require-nullable-result-in-root.d.mts +4 -3
- package/esm/rules/require-nullable-result-in-root.js +29 -35
- package/esm/rules/{require-id-when-available.d.mts → require-selections.d.mts} +4 -3
- package/esm/rules/{require-id-when-available.js → require-selections.js} +43 -80
- package/esm/rules/require-type-pattern-with-oneof.d.mts +4 -3
- package/esm/rules/require-type-pattern-with-oneof.js +11 -16
- package/esm/rules/selection-set-depth.d.mts +4 -3
- package/esm/rules/selection-set-depth.js +11 -20
- package/esm/rules/strict-id-in-types.d.mts +4 -3
- package/esm/rules/strict-id-in-types.js +20 -34
- package/esm/rules/{no-case-insensitive-enum-values-duplicates.d.mts → unique-enum-value-names.d.mts} +4 -3
- package/esm/rules/{no-case-insensitive-enum-values-duplicates.js → unique-enum-value-names.js} +8 -9
- package/esm/rules/unique-fragment-name.d.mts +3 -2
- package/esm/rules/unique-fragment-name.js +20 -27
- package/esm/rules/unique-operation-name.d.mts +4 -3
- package/esm/rules/unique-operation-name.js +6 -5
- package/esm/schema.d.mts +4 -3
- package/esm/schema.js +7 -12
- package/esm/siblings.d.mts +24 -8
- package/esm/siblings.js +37 -73
- package/esm/types.d.mts +74 -7
- package/esm/utils.d.mts +3 -2
- package/esm/utils.js +20 -31
- package/index.browser.mjs +5323 -0
- package/package.json +8 -13
- package/cjs/rules/require-id-when-available.js +0 -241
- package/cjs/types-8d5f4ae0.d.ts +0 -107
- package/esm/types-ace77d86.d.ts +0 -107
- /package/cjs/configs/{relay.d.ts → schema-relay.d.ts} +0 -0
- /package/cjs/configs/{relay.js → schema-relay.js} +0 -0
- /package/esm/configs/{relay.d.mts → schema-relay.d.mts} +0 -0
@@ -5,25 +5,20 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
6
6
|
var __export = (target, all) => {
|
7
7
|
for (var name in all)
|
8
|
-
__defProp(target, name, { get: all[name], enumerable:
|
9
|
-
}
|
10
|
-
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: !0 });
|
9
|
+
}, __copyProps = (to, from, except, desc) => {
|
10
|
+
if (from && typeof from == "object" || typeof from == "function")
|
12
11
|
for (let key of __getOwnPropNames(from))
|
13
|
-
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
15
|
-
}
|
12
|
+
!__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
16
13
|
return to;
|
17
14
|
};
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value:
|
15
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
|
19
16
|
var graphql_js_validation_exports = {};
|
20
17
|
__export(graphql_js_validation_exports, {
|
21
18
|
GRAPHQL_JS_VALIDATIONS: () => GRAPHQL_JS_VALIDATIONS
|
22
19
|
});
|
23
20
|
module.exports = __toCommonJS(graphql_js_validation_exports);
|
24
|
-
var import_graphql = require("graphql");
|
25
|
-
var import_validate = require("graphql/validation/validate.js");
|
26
|
-
var import_utils = require("../utils.js");
|
21
|
+
var import_graphql = require("graphql"), import_validation = require("graphql/validation/index.js"), import_validate = require("graphql/validation/validate.js"), import_utils = require("../utils.js");
|
27
22
|
function validateDocument({
|
28
23
|
context,
|
29
24
|
schema = null,
|
@@ -31,78 +26,61 @@ function validateDocument({
|
|
31
26
|
rule,
|
32
27
|
hasDidYouMeanSuggestions
|
33
28
|
}) {
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
29
|
+
if (documentNode.definitions.length !== 0)
|
30
|
+
try {
|
31
|
+
const validationErrors = schema ? (0, import_graphql.validate)(schema, documentNode, [rule]) : (0, import_validate.validateSDL)(documentNode, null, [rule]);
|
32
|
+
for (const error of validationErrors) {
|
33
|
+
const { line, column } = error.locations[0], sourceCode = context.getSourceCode(), { tokens } = sourceCode.ast, token = tokens.find(
|
34
|
+
(token2) => token2.loc.start.line === line && token2.loc.start.column === column - 1
|
35
|
+
);
|
36
|
+
let loc = {
|
37
|
+
line,
|
38
|
+
column: column - 1
|
39
|
+
};
|
40
|
+
token && (loc = // if cursor on `@` symbol than use next node
|
41
|
+
token.type === "@" ? sourceCode.getNodeByRangeIndex(token.range[1] + 1).loc : token.loc);
|
42
|
+
const didYouMeanContent = error.message.match(/Did you mean (?<content>.*)\?$/)?.groups.content, matches = didYouMeanContent ? [...didYouMeanContent.matchAll(/"(?<name>[^"]*)"/g)] : [];
|
43
|
+
context.report({
|
44
|
+
loc,
|
45
|
+
message: error.message,
|
46
|
+
suggest: hasDidYouMeanSuggestions ? matches.map((match) => {
|
47
|
+
const { name } = match.groups;
|
48
|
+
return {
|
49
|
+
desc: `Rename to \`${name}\``,
|
50
|
+
fix: (fixer) => fixer.replaceText(token, name)
|
51
|
+
};
|
52
|
+
}) : []
|
53
|
+
});
|
54
54
|
}
|
55
|
-
|
56
|
-
const matches = didYouMeanContent ? [...didYouMeanContent.matchAll(/"(?<name>[^"]*)"/g)] : [];
|
55
|
+
} catch (error) {
|
57
56
|
context.report({
|
58
|
-
loc,
|
59
|
-
message: error.message
|
60
|
-
suggest: hasDidYouMeanSuggestions ? matches.map((match) => {
|
61
|
-
const { name } = match.groups;
|
62
|
-
return {
|
63
|
-
desc: `Rename to \`${name}\``,
|
64
|
-
fix: (fixer) => fixer.replaceText(token, name)
|
65
|
-
};
|
66
|
-
}) : []
|
57
|
+
loc: import_utils.REPORT_ON_FIRST_CHARACTER,
|
58
|
+
message: error.message
|
67
59
|
});
|
68
60
|
}
|
69
|
-
} catch (error) {
|
70
|
-
context.report({
|
71
|
-
loc: import_utils.REPORT_ON_FIRST_CHARACTER,
|
72
|
-
message: error.message
|
73
|
-
});
|
74
|
-
}
|
75
61
|
}
|
76
62
|
const getFragmentDefsAndFragmentSpreads = (node) => {
|
77
|
-
const fragmentDefs = /* @__PURE__ */ new Set();
|
78
|
-
|
79
|
-
const visitor = {
|
63
|
+
const fragmentDefs = /* @__PURE__ */ new Set(), fragmentSpreads = /* @__PURE__ */ new Set();
|
64
|
+
return (0, import_graphql.visit)(node, {
|
80
65
|
FragmentDefinition(node2) {
|
81
66
|
fragmentDefs.add(node2.name.value);
|
82
67
|
},
|
83
68
|
FragmentSpread(node2) {
|
84
69
|
fragmentSpreads.add(node2.name.value);
|
85
70
|
}
|
86
|
-
};
|
87
|
-
|
88
|
-
return { fragmentDefs, fragmentSpreads };
|
89
|
-
};
|
90
|
-
const getMissingFragments = (node) => {
|
71
|
+
}), { fragmentDefs, fragmentSpreads };
|
72
|
+
}, getMissingFragments = (node) => {
|
91
73
|
const { fragmentDefs, fragmentSpreads } = getFragmentDefsAndFragmentSpreads(node);
|
92
74
|
return [...fragmentSpreads].filter((name) => !fragmentDefs.has(name));
|
93
|
-
}
|
94
|
-
const handleMissingFragments = ({ ruleId, context, node }) => {
|
75
|
+
}, handleMissingFragments = ({ ruleId, context, node }) => {
|
95
76
|
const missingFragments = getMissingFragments(node);
|
96
77
|
if (missingFragments.length > 0) {
|
97
|
-
const siblings = (0, import_utils.requireSiblingsOperations)(ruleId, context);
|
98
|
-
const fragmentsToAdd = [];
|
78
|
+
const siblings = (0, import_utils.requireSiblingsOperations)(ruleId, context), fragmentsToAdd = [];
|
99
79
|
for (const fragmentName of missingFragments) {
|
100
80
|
const [foundFragment] = siblings.getFragment(fragmentName).map((source) => source.document);
|
101
|
-
|
102
|
-
fragmentsToAdd.push(foundFragment);
|
103
|
-
}
|
81
|
+
foundFragment && fragmentsToAdd.push(foundFragment);
|
104
82
|
}
|
105
|
-
if (fragmentsToAdd.length > 0)
|
83
|
+
if (fragmentsToAdd.length > 0)
|
106
84
|
return handleMissingFragments({
|
107
85
|
ruleId,
|
108
86
|
context,
|
@@ -111,131 +89,105 @@ const handleMissingFragments = ({ ruleId, context, node }) => {
|
|
111
89
|
definitions: [...node.definitions, ...fragmentsToAdd]
|
112
90
|
}
|
113
91
|
});
|
114
|
-
}
|
115
92
|
}
|
116
93
|
return node;
|
117
|
-
}
|
118
|
-
const validationToRule = ({
|
94
|
+
}, validationToRule = ({
|
119
95
|
ruleId,
|
120
|
-
|
96
|
+
rule,
|
121
97
|
getDocumentNode,
|
122
98
|
schema = [],
|
123
99
|
hasDidYouMeanSuggestions
|
124
|
-
}, docs) => {
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
}
|
134
|
-
}
|
135
|
-
return {
|
136
|
-
[ruleId]: {
|
137
|
-
meta: {
|
138
|
-
docs: {
|
139
|
-
recommended: true,
|
140
|
-
...docs,
|
141
|
-
graphQLJSRuleName: ruleName,
|
142
|
-
url: `https://the-guild.dev/graphql/eslint/rules/${ruleId}`,
|
143
|
-
description: `${docs.description}
|
100
|
+
}, docs) => ({
|
101
|
+
[ruleId]: {
|
102
|
+
meta: {
|
103
|
+
docs: {
|
104
|
+
recommended: !0,
|
105
|
+
...docs,
|
106
|
+
graphQLJSRuleName: rule.name,
|
107
|
+
url: `https://the-guild.dev/graphql/eslint/rules/${ruleId}`,
|
108
|
+
description: `${docs.description}
|
144
109
|
> This rule is a wrapper around a \`graphql-js\` validation function.`
|
145
|
-
},
|
146
|
-
schema,
|
147
|
-
hasSuggestions: hasDidYouMeanSuggestions
|
148
110
|
},
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
111
|
+
schema,
|
112
|
+
hasSuggestions: hasDidYouMeanSuggestions
|
113
|
+
},
|
114
|
+
create(context) {
|
115
|
+
return {
|
116
|
+
Document(node) {
|
117
|
+
const schema2 = docs.requiresSchema ? (0, import_utils.requireGraphQLSchemaFromContext)(ruleId, context) : null, documentNode = getDocumentNode ? getDocumentNode({ ruleId, context, node: node.rawNode() }) : node.rawNode();
|
118
|
+
validateDocument({
|
119
|
+
context,
|
120
|
+
schema: schema2,
|
121
|
+
documentNode,
|
122
|
+
rule,
|
123
|
+
hasDidYouMeanSuggestions
|
124
|
+
});
|
155
125
|
}
|
156
|
-
|
157
|
-
Document(node) {
|
158
|
-
const schema2 = docs.requiresSchema ? (0, import_utils.requireGraphQLSchemaFromContext)(ruleId, context) : null;
|
159
|
-
const documentNode = getDocumentNode ? getDocumentNode({ ruleId, context, node: node.rawNode() }) : node.rawNode();
|
160
|
-
validateDocument({
|
161
|
-
context,
|
162
|
-
schema: schema2,
|
163
|
-
documentNode,
|
164
|
-
rule: ruleFn,
|
165
|
-
hasDidYouMeanSuggestions
|
166
|
-
});
|
167
|
-
}
|
168
|
-
};
|
169
|
-
}
|
126
|
+
};
|
170
127
|
}
|
171
|
-
}
|
172
|
-
}
|
173
|
-
const GRAPHQL_JS_VALIDATIONS = Object.assign(
|
128
|
+
}
|
129
|
+
}), GRAPHQL_JS_VALIDATIONS = Object.assign(
|
174
130
|
{},
|
175
131
|
validationToRule(
|
176
132
|
{
|
177
133
|
ruleId: "executable-definitions",
|
178
|
-
|
134
|
+
rule: import_validation.ExecutableDefinitionsRule
|
179
135
|
},
|
180
136
|
{
|
181
137
|
category: "Operations",
|
182
138
|
description: "A GraphQL document is only valid for execution if all definitions are either operation or fragment definitions.",
|
183
|
-
requiresSchema:
|
139
|
+
requiresSchema: !0
|
184
140
|
}
|
185
141
|
),
|
186
142
|
validationToRule(
|
187
143
|
{
|
188
144
|
ruleId: "fields-on-correct-type",
|
189
|
-
|
190
|
-
hasDidYouMeanSuggestions:
|
145
|
+
rule: import_validation.FieldsOnCorrectTypeRule,
|
146
|
+
hasDidYouMeanSuggestions: !0
|
191
147
|
},
|
192
148
|
{
|
193
149
|
category: "Operations",
|
194
150
|
description: "A GraphQL document is only valid if all fields selected are defined by the parent type, or are an allowed meta field such as `__typename`.",
|
195
|
-
requiresSchema:
|
151
|
+
requiresSchema: !0
|
196
152
|
}
|
197
153
|
),
|
198
154
|
validationToRule(
|
199
155
|
{
|
200
156
|
ruleId: "fragments-on-composite-type",
|
201
|
-
|
157
|
+
rule: import_validation.FragmentsOnCompositeTypesRule
|
202
158
|
},
|
203
159
|
{
|
204
160
|
category: "Operations",
|
205
161
|
description: "Fragments use a type condition to determine if they apply, since fragments can only be spread into a composite type (object, interface, or union), the type condition must also be a composite type.",
|
206
|
-
requiresSchema:
|
162
|
+
requiresSchema: !0
|
207
163
|
}
|
208
164
|
),
|
209
165
|
validationToRule(
|
210
166
|
{
|
211
167
|
ruleId: "known-argument-names",
|
212
|
-
|
213
|
-
hasDidYouMeanSuggestions:
|
168
|
+
rule: import_validation.KnownArgumentNamesRule,
|
169
|
+
hasDidYouMeanSuggestions: !0
|
214
170
|
},
|
215
171
|
{
|
216
172
|
category: ["Schema", "Operations"],
|
217
173
|
description: "A GraphQL field is only valid if all supplied arguments are defined by that field.",
|
218
|
-
requiresSchema:
|
174
|
+
requiresSchema: !0
|
219
175
|
}
|
220
176
|
),
|
221
177
|
validationToRule(
|
222
178
|
{
|
223
179
|
ruleId: "known-directives",
|
224
|
-
|
180
|
+
rule: import_validation.KnownDirectivesRule,
|
225
181
|
getDocumentNode({ context, node: documentNode }) {
|
226
182
|
const { ignoreClientDirectives = [] } = context.options[0] || {};
|
227
|
-
if (ignoreClientDirectives.length === 0)
|
183
|
+
if (ignoreClientDirectives.length === 0)
|
228
184
|
return documentNode;
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
(directive) => !ignoreClientDirectives.includes(directive.name.value)
|
236
|
-
)
|
237
|
-
};
|
238
|
-
};
|
185
|
+
const filterDirectives = (node) => ({
|
186
|
+
...node,
|
187
|
+
directives: node.directives?.filter(
|
188
|
+
(directive) => !ignoreClientDirectives.includes(directive.name.value)
|
189
|
+
)
|
190
|
+
});
|
239
191
|
return (0, import_graphql.visit)(documentNode, {
|
240
192
|
Field: filterDirectives,
|
241
193
|
OperationDefinition: filterDirectives
|
@@ -246,7 +198,7 @@ const GRAPHQL_JS_VALIDATIONS = Object.assign(
|
|
246
198
|
maxItems: 1,
|
247
199
|
items: {
|
248
200
|
type: "object",
|
249
|
-
additionalProperties:
|
201
|
+
additionalProperties: !1,
|
250
202
|
required: ["ignoreClientDirectives"],
|
251
203
|
properties: {
|
252
204
|
ignoreClientDirectives: import_utils.ARRAY_DEFAULT_OPTIONS
|
@@ -257,7 +209,7 @@ const GRAPHQL_JS_VALIDATIONS = Object.assign(
|
|
257
209
|
{
|
258
210
|
category: ["Schema", "Operations"],
|
259
211
|
description: "A GraphQL document is only valid if all `@directive`s are known by the schema and legally positioned.",
|
260
|
-
requiresSchema:
|
212
|
+
requiresSchema: !0,
|
261
213
|
examples: [
|
262
214
|
{
|
263
215
|
title: "Valid",
|
@@ -279,14 +231,14 @@ const GRAPHQL_JS_VALIDATIONS = Object.assign(
|
|
279
231
|
validationToRule(
|
280
232
|
{
|
281
233
|
ruleId: "known-fragment-names",
|
282
|
-
|
234
|
+
rule: import_validation.KnownFragmentNamesRule,
|
283
235
|
getDocumentNode: handleMissingFragments
|
284
236
|
},
|
285
237
|
{
|
286
238
|
category: "Operations",
|
287
239
|
description: "A GraphQL document is only valid if all `...Fragment` fragment spreads refer to fragments defined in the same document.",
|
288
|
-
requiresSchema:
|
289
|
-
requiresSiblings:
|
240
|
+
requiresSchema: !0,
|
241
|
+
requiresSiblings: !0,
|
290
242
|
examples: [
|
291
243
|
{
|
292
244
|
title: "Incorrect",
|
@@ -347,30 +299,30 @@ const GRAPHQL_JS_VALIDATIONS = Object.assign(
|
|
347
299
|
validationToRule(
|
348
300
|
{
|
349
301
|
ruleId: "known-type-names",
|
350
|
-
|
351
|
-
hasDidYouMeanSuggestions:
|
302
|
+
rule: import_validation.KnownTypeNamesRule,
|
303
|
+
hasDidYouMeanSuggestions: !0
|
352
304
|
},
|
353
305
|
{
|
354
306
|
category: ["Schema", "Operations"],
|
355
307
|
description: "A GraphQL document is only valid if referenced types (specifically variable definitions and fragment conditions) are defined by the type schema.",
|
356
|
-
requiresSchema:
|
308
|
+
requiresSchema: !0
|
357
309
|
}
|
358
310
|
),
|
359
311
|
validationToRule(
|
360
312
|
{
|
361
313
|
ruleId: "lone-anonymous-operation",
|
362
|
-
|
314
|
+
rule: import_validation.LoneAnonymousOperationRule
|
363
315
|
},
|
364
316
|
{
|
365
317
|
category: "Operations",
|
366
318
|
description: "A GraphQL document that contains an anonymous operation (the `query` short-hand) is only valid if it contains only that one operation definition.",
|
367
|
-
requiresSchema:
|
319
|
+
requiresSchema: !0
|
368
320
|
}
|
369
321
|
),
|
370
322
|
validationToRule(
|
371
323
|
{
|
372
324
|
ruleId: "lone-schema-definition",
|
373
|
-
|
325
|
+
rule: import_validation.LoneSchemaDefinitionRule
|
374
326
|
},
|
375
327
|
{
|
376
328
|
category: "Schema",
|
@@ -380,174 +332,160 @@ const GRAPHQL_JS_VALIDATIONS = Object.assign(
|
|
380
332
|
validationToRule(
|
381
333
|
{
|
382
334
|
ruleId: "no-fragment-cycles",
|
383
|
-
|
335
|
+
rule: import_validation.NoFragmentCyclesRule
|
384
336
|
},
|
385
337
|
{
|
386
338
|
category: "Operations",
|
387
339
|
description: "A GraphQL fragment is only valid when it does not have cycles in fragments usage.",
|
388
|
-
requiresSchema:
|
340
|
+
requiresSchema: !0
|
389
341
|
}
|
390
342
|
),
|
391
343
|
validationToRule(
|
392
344
|
{
|
393
345
|
ruleId: "no-undefined-variables",
|
394
|
-
|
346
|
+
rule: import_validation.NoUndefinedVariablesRule,
|
395
347
|
getDocumentNode: handleMissingFragments
|
396
348
|
},
|
397
349
|
{
|
398
350
|
category: "Operations",
|
399
351
|
description: "A GraphQL operation is only valid if all variables encountered, both directly and via fragment spreads, are defined by that operation.",
|
400
|
-
requiresSchema:
|
401
|
-
requiresSiblings:
|
352
|
+
requiresSchema: !0,
|
353
|
+
requiresSiblings: !0
|
402
354
|
}
|
403
355
|
),
|
404
356
|
validationToRule(
|
405
357
|
{
|
406
358
|
ruleId: "no-unused-fragments",
|
407
|
-
|
359
|
+
rule: import_validation.NoUnusedFragmentsRule,
|
408
360
|
getDocumentNode: ({ ruleId, context, node }) => {
|
409
|
-
const siblings = (0, import_utils.requireSiblingsOperations)(ruleId, context)
|
410
|
-
const FilePathToDocumentsMap = [
|
361
|
+
const siblings = (0, import_utils.requireSiblingsOperations)(ruleId, context), FilePathToDocumentsMap = [
|
411
362
|
...siblings.getOperations(),
|
412
363
|
...siblings.getFragments()
|
413
|
-
].reduce((map, { filePath, document }) => {
|
414
|
-
var _a;
|
415
|
-
(_a = map[filePath]) != null ? _a : map[filePath] = [];
|
416
|
-
map[filePath].push(document);
|
417
|
-
return map;
|
418
|
-
}, /* @__PURE__ */ Object.create(null));
|
419
|
-
const getParentNode = (currentFilePath, node2) => {
|
364
|
+
].reduce((map, { filePath, document }) => (map[filePath] ??= [], map[filePath].push(document), map), /* @__PURE__ */ Object.create(null)), getParentNode = (currentFilePath, node2) => {
|
420
365
|
const { fragmentDefs } = getFragmentDefsAndFragmentSpreads(node2);
|
421
|
-
if (fragmentDefs.size === 0)
|
366
|
+
if (fragmentDefs.size === 0)
|
422
367
|
return node2;
|
423
|
-
}
|
424
368
|
delete FilePathToDocumentsMap[currentFilePath];
|
425
|
-
for (const [filePath, documents] of Object.entries(FilePathToDocumentsMap))
|
426
|
-
|
369
|
+
for (const [filePath, documents] of Object.entries(FilePathToDocumentsMap))
|
370
|
+
if (getMissingFragments({
|
427
371
|
kind: import_graphql.Kind.DOCUMENT,
|
428
372
|
definitions: documents
|
429
|
-
})
|
430
|
-
const isCurrentFileImportFragment = missingFragments.some(
|
373
|
+
}).some(
|
431
374
|
(fragment) => fragmentDefs.has(fragment)
|
432
|
-
)
|
433
|
-
if (isCurrentFileImportFragment) {
|
375
|
+
))
|
434
376
|
return getParentNode(filePath, {
|
435
377
|
kind: import_graphql.Kind.DOCUMENT,
|
436
378
|
definitions: [...node2.definitions, ...documents]
|
437
379
|
});
|
438
|
-
}
|
439
|
-
}
|
440
380
|
return node2;
|
441
381
|
};
|
442
|
-
return getParentNode(context.
|
382
|
+
return getParentNode(context.filename, node);
|
443
383
|
}
|
444
384
|
},
|
445
385
|
{
|
446
386
|
category: "Operations",
|
447
387
|
description: "A GraphQL document is only valid if all fragment definitions are spread within operations, or spread within other fragments spread within operations.",
|
448
|
-
requiresSchema:
|
449
|
-
requiresSiblings:
|
388
|
+
requiresSchema: !0,
|
389
|
+
requiresSiblings: !0
|
450
390
|
}
|
451
391
|
),
|
452
392
|
validationToRule(
|
453
393
|
{
|
454
394
|
ruleId: "no-unused-variables",
|
455
|
-
|
395
|
+
rule: import_validation.NoUnusedVariablesRule,
|
456
396
|
getDocumentNode: handleMissingFragments
|
457
397
|
},
|
458
398
|
{
|
459
399
|
category: "Operations",
|
460
400
|
description: "A GraphQL operation is only valid if all variables defined by an operation are used, either directly or within a spread fragment.",
|
461
|
-
requiresSchema:
|
462
|
-
requiresSiblings:
|
401
|
+
requiresSchema: !0,
|
402
|
+
requiresSiblings: !0
|
463
403
|
}
|
464
404
|
),
|
465
405
|
validationToRule(
|
466
406
|
{
|
467
407
|
ruleId: "overlapping-fields-can-be-merged",
|
468
|
-
|
408
|
+
rule: import_validation.OverlappingFieldsCanBeMergedRule
|
469
409
|
},
|
470
410
|
{
|
471
411
|
category: "Operations",
|
472
412
|
description: "A selection set is only valid if all fields (including spreading any fragments) either correspond to distinct response names or can be merged without ambiguity.",
|
473
|
-
requiresSchema:
|
413
|
+
requiresSchema: !0
|
474
414
|
}
|
475
415
|
),
|
476
416
|
validationToRule(
|
477
417
|
{
|
478
418
|
ruleId: "possible-fragment-spread",
|
479
|
-
|
419
|
+
rule: import_validation.PossibleFragmentSpreadsRule
|
480
420
|
},
|
481
421
|
{
|
482
422
|
category: "Operations",
|
483
423
|
description: "A fragment spread is only valid if the type condition could ever possibly be true: if there is a non-empty intersection of the possible parent types, and possible types which pass the type condition.",
|
484
|
-
requiresSchema:
|
424
|
+
requiresSchema: !0
|
485
425
|
}
|
486
426
|
),
|
487
427
|
validationToRule(
|
488
428
|
{
|
489
429
|
ruleId: "possible-type-extension",
|
490
|
-
|
491
|
-
hasDidYouMeanSuggestions:
|
430
|
+
rule: import_validation.PossibleTypeExtensionsRule,
|
431
|
+
hasDidYouMeanSuggestions: !0
|
492
432
|
},
|
493
433
|
{
|
494
434
|
category: "Schema",
|
495
435
|
description: "A type extension is only valid if the type is defined and has the same kind.",
|
496
|
-
|
497
|
-
|
498
|
-
requiresSchema: true,
|
499
|
-
isDisabledForAllConfig: true
|
436
|
+
recommended: !0,
|
437
|
+
requiresSchema: !0
|
500
438
|
}
|
501
439
|
),
|
502
440
|
validationToRule(
|
503
441
|
{
|
504
442
|
ruleId: "provided-required-arguments",
|
505
|
-
|
443
|
+
rule: import_validation.ProvidedRequiredArgumentsRule
|
506
444
|
},
|
507
445
|
{
|
508
446
|
category: ["Schema", "Operations"],
|
509
447
|
description: "A field or directive is only valid if all required (non-null without a default value) field arguments have been provided.",
|
510
|
-
requiresSchema:
|
448
|
+
requiresSchema: !0
|
511
449
|
}
|
512
450
|
),
|
513
451
|
validationToRule(
|
514
452
|
{
|
515
453
|
ruleId: "scalar-leafs",
|
516
|
-
|
517
|
-
hasDidYouMeanSuggestions:
|
454
|
+
rule: import_validation.ScalarLeafsRule,
|
455
|
+
hasDidYouMeanSuggestions: !0
|
518
456
|
},
|
519
457
|
{
|
520
458
|
category: "Operations",
|
521
459
|
description: "A GraphQL document is valid only if all leaf fields (fields without sub selections) are of scalar or enum types.",
|
522
|
-
requiresSchema:
|
460
|
+
requiresSchema: !0
|
523
461
|
}
|
524
462
|
),
|
525
463
|
validationToRule(
|
526
464
|
{
|
527
465
|
ruleId: "one-field-subscriptions",
|
528
|
-
|
466
|
+
rule: import_validation.SingleFieldSubscriptionsRule
|
529
467
|
},
|
530
468
|
{
|
531
469
|
category: "Operations",
|
532
470
|
description: "A GraphQL subscription is valid only if it contains a single root field.",
|
533
|
-
requiresSchema:
|
471
|
+
requiresSchema: !0
|
534
472
|
}
|
535
473
|
),
|
536
474
|
validationToRule(
|
537
475
|
{
|
538
476
|
ruleId: "unique-argument-names",
|
539
|
-
|
477
|
+
rule: import_validation.UniqueArgumentNamesRule
|
540
478
|
},
|
541
479
|
{
|
542
480
|
category: "Operations",
|
543
481
|
description: "A GraphQL field or directive is only valid if all supplied arguments are uniquely named.",
|
544
|
-
requiresSchema:
|
482
|
+
requiresSchema: !0
|
545
483
|
}
|
546
484
|
),
|
547
485
|
validationToRule(
|
548
486
|
{
|
549
487
|
ruleId: "unique-directive-names",
|
550
|
-
|
488
|
+
rule: import_validation.UniqueDirectiveNamesRule
|
551
489
|
},
|
552
490
|
{
|
553
491
|
category: "Schema",
|
@@ -557,30 +495,18 @@ const GRAPHQL_JS_VALIDATIONS = Object.assign(
|
|
557
495
|
validationToRule(
|
558
496
|
{
|
559
497
|
ruleId: "unique-directive-names-per-location",
|
560
|
-
|
498
|
+
rule: import_validation.UniqueDirectivesPerLocationRule
|
561
499
|
},
|
562
500
|
{
|
563
501
|
category: ["Schema", "Operations"],
|
564
502
|
description: "A GraphQL document is only valid if all non-repeatable directives at a given location are uniquely named.",
|
565
|
-
requiresSchema:
|
566
|
-
}
|
567
|
-
),
|
568
|
-
validationToRule(
|
569
|
-
{
|
570
|
-
ruleId: "unique-enum-value-names",
|
571
|
-
ruleName: "UniqueEnumValueNames"
|
572
|
-
},
|
573
|
-
{
|
574
|
-
category: "Schema",
|
575
|
-
description: "A GraphQL enum type is only valid if all its values are uniquely named.",
|
576
|
-
recommended: false,
|
577
|
-
isDisabledForAllConfig: true
|
503
|
+
requiresSchema: !0
|
578
504
|
}
|
579
505
|
),
|
580
506
|
validationToRule(
|
581
507
|
{
|
582
508
|
ruleId: "unique-field-definition-names",
|
583
|
-
|
509
|
+
rule: import_validation.UniqueFieldDefinitionNamesRule
|
584
510
|
},
|
585
511
|
{
|
586
512
|
category: "Schema",
|
@@ -590,7 +516,7 @@ const GRAPHQL_JS_VALIDATIONS = Object.assign(
|
|
590
516
|
validationToRule(
|
591
517
|
{
|
592
518
|
ruleId: "unique-input-field-names",
|
593
|
-
|
519
|
+
rule: import_validation.UniqueInputFieldNamesRule
|
594
520
|
},
|
595
521
|
{
|
596
522
|
category: "Operations",
|
@@ -600,7 +526,7 @@ const GRAPHQL_JS_VALIDATIONS = Object.assign(
|
|
600
526
|
validationToRule(
|
601
527
|
{
|
602
528
|
ruleId: "unique-operation-types",
|
603
|
-
|
529
|
+
rule: import_validation.UniqueOperationTypesRule
|
604
530
|
},
|
605
531
|
{
|
606
532
|
category: "Schema",
|
@@ -610,7 +536,7 @@ const GRAPHQL_JS_VALIDATIONS = Object.assign(
|
|
610
536
|
validationToRule(
|
611
537
|
{
|
612
538
|
ruleId: "unique-type-names",
|
613
|
-
|
539
|
+
rule: import_validation.UniqueTypeNamesRule
|
614
540
|
},
|
615
541
|
{
|
616
542
|
category: "Schema",
|
@@ -620,46 +546,46 @@ const GRAPHQL_JS_VALIDATIONS = Object.assign(
|
|
620
546
|
validationToRule(
|
621
547
|
{
|
622
548
|
ruleId: "unique-variable-names",
|
623
|
-
|
549
|
+
rule: import_validation.UniqueVariableNamesRule
|
624
550
|
},
|
625
551
|
{
|
626
552
|
category: "Operations",
|
627
553
|
description: "A GraphQL operation is only valid if all its variables are uniquely named.",
|
628
|
-
requiresSchema:
|
554
|
+
requiresSchema: !0
|
629
555
|
}
|
630
556
|
),
|
631
557
|
validationToRule(
|
632
558
|
{
|
633
559
|
ruleId: "value-literals-of-correct-type",
|
634
|
-
|
635
|
-
hasDidYouMeanSuggestions:
|
560
|
+
rule: import_validation.ValuesOfCorrectTypeRule,
|
561
|
+
hasDidYouMeanSuggestions: !0
|
636
562
|
},
|
637
563
|
{
|
638
564
|
category: "Operations",
|
639
565
|
description: "A GraphQL document is only valid if all value literals are of the type expected at their position.",
|
640
|
-
requiresSchema:
|
566
|
+
requiresSchema: !0
|
641
567
|
}
|
642
568
|
),
|
643
569
|
validationToRule(
|
644
570
|
{
|
645
571
|
ruleId: "variables-are-input-types",
|
646
|
-
|
572
|
+
rule: import_validation.VariablesAreInputTypesRule
|
647
573
|
},
|
648
574
|
{
|
649
575
|
category: "Operations",
|
650
576
|
description: "A GraphQL operation is only valid if all the variables it defines are of input types (scalar, enum, or input object).",
|
651
|
-
requiresSchema:
|
577
|
+
requiresSchema: !0
|
652
578
|
}
|
653
579
|
),
|
654
580
|
validationToRule(
|
655
581
|
{
|
656
582
|
ruleId: "variables-in-allowed-position",
|
657
|
-
|
583
|
+
rule: import_validation.VariablesInAllowedPositionRule
|
658
584
|
},
|
659
585
|
{
|
660
586
|
category: "Operations",
|
661
587
|
description: "Variables passed to field arguments conform to type.",
|
662
|
-
requiresSchema:
|
588
|
+
requiresSchema: !0
|
663
589
|
}
|
664
590
|
)
|
665
591
|
);
|