@graphql-eslint/eslint-plugin 4.0.0-alpha.11 → 4.0.0-alpha.13
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/cjs/index.d.cts +1 -1
- package/cjs/meta.js +1 -1
- package/cjs/rules/index.d.cts +1 -1
- package/cjs/rules/naming-convention/index.js +3 -1
- package/cjs/rules/no-deprecated/index.js +15 -5
- package/cjs/rules/require-selections/index.js +1 -1
- package/cjs/utils.d.cts +1 -1
- package/cjs/utils.js +1 -1
- package/esm/meta.js +1 -1
- package/esm/rules/naming-convention/index.js +3 -1
- package/esm/rules/no-deprecated/index.js +16 -6
- package/esm/rules/require-selections/index.js +1 -1
- package/esm/utils.d.ts +1 -1
- package/esm/utils.js +1 -1
- package/index.browser.js +91 -79
- package/package.json +1 -1
package/cjs/index.d.cts
CHANGED
|
@@ -48,10 +48,10 @@ declare const _default: {
|
|
|
48
48
|
};
|
|
49
49
|
rules: {
|
|
50
50
|
alphabetize: GraphQLESLintRule<{
|
|
51
|
-
values?: boolean | undefined;
|
|
52
51
|
definitions?: boolean | undefined;
|
|
53
52
|
selections?: ("OperationDefinition" | "FragmentDefinition")[] | undefined;
|
|
54
53
|
arguments?: ("Field" | "Directive" | "FieldDefinition" | "DirectiveDefinition")[] | undefined;
|
|
54
|
+
values?: boolean | undefined;
|
|
55
55
|
fields?: ("ObjectTypeDefinition" | "InterfaceTypeDefinition" | "InputObjectTypeDefinition")[] | undefined;
|
|
56
56
|
variables?: boolean | undefined;
|
|
57
57
|
groups?: string[] | undefined;
|
package/cjs/meta.js
CHANGED
package/cjs/rules/index.d.cts
CHANGED
|
@@ -12,10 +12,10 @@ import 'json-schema-to-ts';
|
|
|
12
12
|
|
|
13
13
|
declare const rules: {
|
|
14
14
|
alphabetize: GraphQLESLintRule<{
|
|
15
|
-
values?: boolean | undefined;
|
|
16
15
|
definitions?: boolean | undefined;
|
|
17
16
|
selections?: ("OperationDefinition" | "FragmentDefinition")[] | undefined;
|
|
18
17
|
arguments?: ("Field" | "Directive" | "FieldDefinition" | "DirectiveDefinition")[] | undefined;
|
|
18
|
+
values?: boolean | undefined;
|
|
19
19
|
fields?: ("ObjectTypeDefinition" | "InterfaceTypeDefinition" | "InputObjectTypeDefinition")[] | undefined;
|
|
20
20
|
variables?: boolean | undefined;
|
|
21
21
|
groups?: string[] | undefined;
|
|
@@ -384,12 +384,14 @@ ${_utilsjs.TYPES_KINDS.map((kind) => `- \`${kind}\``).join(`
|
|
|
384
384
|
};
|
|
385
385
|
}
|
|
386
386
|
}, checkUnderscore = (isLeading) => (node) => {
|
|
387
|
+
if (node.parent.kind === "Field" && node.parent.alias !== node)
|
|
388
|
+
return;
|
|
387
389
|
const suggestedName = node.value.replace(isLeading ? /^_+/ : /_+$/, "");
|
|
388
390
|
report(node, `${isLeading ? "Leading" : "Trailing"} underscores are not allowed`, [
|
|
389
391
|
suggestedName
|
|
390
392
|
]);
|
|
391
393
|
}, listeners = {};
|
|
392
|
-
allowLeadingUnderscore || (listeners["Name[value=/^_/]
|
|
394
|
+
allowLeadingUnderscore || (listeners["Name[value=/^_/]"] = checkUnderscore(!0)), allowTrailingUnderscore || (listeners["Name[value=/_$/]"] = checkUnderscore(!1));
|
|
393
395
|
const selectors = new Set(
|
|
394
396
|
[types && _utilsjs.TYPES_KINDS, Object.keys(restOptions)].flat().filter(_utilsjs.truthy)
|
|
395
397
|
);
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }require('../../chunk-UIAXBAMD.js');
|
|
2
|
-
var _graphql = require('graphql');
|
|
3
2
|
var _utilsjs = require('../../utils.js');
|
|
4
3
|
const RULE_ID = "no-deprecated", rule = exports.rule = {
|
|
5
4
|
meta: {
|
|
@@ -84,24 +83,24 @@ const RULE_ID = "no-deprecated", rule = exports.rule = {
|
|
|
84
83
|
recommended: !0
|
|
85
84
|
},
|
|
86
85
|
messages: {
|
|
87
|
-
[RULE_ID]: "
|
|
86
|
+
[RULE_ID]: "{{ type }} is marked as deprecated in your GraphQL schema (reason: {{ reason }})"
|
|
88
87
|
},
|
|
89
88
|
schema: []
|
|
90
89
|
},
|
|
91
90
|
create(context) {
|
|
92
91
|
_utilsjs.requireGraphQLSchemaFromContext.call(void 0, RULE_ID, context);
|
|
93
92
|
function report(node, reason) {
|
|
94
|
-
const
|
|
93
|
+
const nodeType = _utilsjs.displayNodeName.call(void 0, node);
|
|
95
94
|
context.report({
|
|
96
95
|
node,
|
|
97
96
|
messageId: RULE_ID,
|
|
98
97
|
data: {
|
|
99
|
-
type: nodeType,
|
|
98
|
+
type: nodeType[0].toUpperCase() + nodeType.slice(1),
|
|
100
99
|
reason
|
|
101
100
|
},
|
|
102
101
|
suggest: [
|
|
103
102
|
{
|
|
104
|
-
desc: `Remove
|
|
103
|
+
desc: `Remove ${nodeType}`,
|
|
105
104
|
fix: (fixer) => fixer.remove(node)
|
|
106
105
|
}
|
|
107
106
|
]
|
|
@@ -115,6 +114,17 @@ const RULE_ID = "no-deprecated", rule = exports.rule = {
|
|
|
115
114
|
Field(node) {
|
|
116
115
|
const reason = _optionalChain([node, 'access', _5 => _5.typeInfo, 'call', _6 => _6(), 'access', _7 => _7.fieldDef, 'optionalAccess', _8 => _8.deprecationReason]);
|
|
117
116
|
reason && report(node, reason);
|
|
117
|
+
},
|
|
118
|
+
Argument(node) {
|
|
119
|
+
const reason = _optionalChain([node, 'access', _9 => _9.typeInfo, 'call', _10 => _10(), 'access', _11 => _11.argument, 'optionalAccess', _12 => _12.deprecationReason]);
|
|
120
|
+
reason && report(node, reason);
|
|
121
|
+
},
|
|
122
|
+
ObjectValue(node) {
|
|
123
|
+
const fields = node.typeInfo().inputType.getFields();
|
|
124
|
+
for (const field of node.fields) {
|
|
125
|
+
const fieldName = field.name.value, reason = fields[fieldName].deprecationReason;
|
|
126
|
+
reason && report(field, reason);
|
|
127
|
+
}
|
|
118
128
|
}
|
|
119
129
|
};
|
|
120
130
|
}
|
|
@@ -104,7 +104,7 @@ Include it in your selection set{{ addition }}.`
|
|
|
104
104
|
schema
|
|
105
105
|
},
|
|
106
106
|
create(context) {
|
|
107
|
-
const schema2 = _utilsjs.requireGraphQLSchemaFromContext.call(void 0, RULE_ID, context), siblings = _utilsjs.requireSiblingsOperations.call(void 0, RULE_ID, context), { fieldName = DEFAULT_ID_FIELD_NAME } = context.options[0] || {}, idNames = _utils.asArray.call(void 0, fieldName), selector = "
|
|
107
|
+
const schema2 = _utilsjs.requireGraphQLSchemaFromContext.call(void 0, RULE_ID, context), siblings = _utilsjs.requireSiblingsOperations.call(void 0, RULE_ID, context), { fieldName = DEFAULT_ID_FIELD_NAME } = context.options[0] || {}, idNames = _utils.asArray.call(void 0, fieldName), selector = "SelectionSet[parent.kind!=/(^OperationDefinition|InlineFragment)$/]", typeInfo = new (0, _graphql.TypeInfo)(schema2);
|
|
108
108
|
function checkFragments(node) {
|
|
109
109
|
for (const selection of node.selections) {
|
|
110
110
|
if (selection.kind !== _graphql.Kind.FRAGMENT_SPREAD)
|
package/cjs/utils.d.cts
CHANGED
|
@@ -39,7 +39,7 @@ declare const ARRAY_DEFAULT_OPTIONS: {
|
|
|
39
39
|
declare const englishJoinWords: (words: string[]) => string;
|
|
40
40
|
type Truthy<T> = T extends '' | 0 | false | null | undefined ? never : T;
|
|
41
41
|
declare function truthy<T>(value: T): value is Truthy<T>;
|
|
42
|
-
declare function displayNodeName(node: GraphQLESTreeNode<ASTNode>): string;
|
|
42
|
+
declare function displayNodeName(node: GraphQLESTreeNode<ASTNode, boolean>): string;
|
|
43
43
|
declare function getNodeName(node: GraphQLESTreeNode<ASTNode>): string;
|
|
44
44
|
|
|
45
45
|
export { ARRAY_DEFAULT_OPTIONS, CWD, type CaseStyle, REPORT_ON_FIRST_CHARACTER, TYPES_KINDS, VIRTUAL_DOCUMENT_REGEX, camelCase, convertCase, displayNodeName, englishJoinWords, getLocation, getNodeName, getTypeName, logger, pascalCase, requireGraphQLSchemaFromContext, requireSiblingsOperations, slash, truthy };
|
package/cjs/utils.js
CHANGED
|
@@ -123,7 +123,7 @@ const DisplayNodeNameMap = {
|
|
|
123
123
|
[_graphql.Kind.VARIABLE]: "variable"
|
|
124
124
|
};
|
|
125
125
|
function displayNodeName(node) {
|
|
126
|
-
return `${node.kind === _graphql.Kind.OPERATION_DEFINITION ? node.operation : DisplayNodeNameMap[node.kind]} "${"alias" in node && _optionalChain([node, 'access', _ => _.alias, 'optionalAccess', _2 => _2.value]) || "name" in node && _optionalChain([node, 'access', _3 => _3.name, 'optionalAccess', _4 => _4.value])}"`;
|
|
126
|
+
return `${node.kind === _graphql.Kind.OPERATION_DEFINITION ? node.operation : DisplayNodeNameMap[node.kind]} "${"alias" in node && _optionalChain([node, 'access', _ => _.alias, 'optionalAccess', _2 => _2.value]) || "name" in node && _optionalChain([node, 'access', _3 => _3.name, 'optionalAccess', _4 => _4.value]) || node.value}"`;
|
|
127
127
|
}
|
|
128
128
|
function getNodeName(node) {
|
|
129
129
|
switch (node.kind) {
|
package/esm/meta.js
CHANGED
|
@@ -384,12 +384,14 @@ ${TYPES_KINDS.map((kind) => `- \`${kind}\``).join(`
|
|
|
384
384
|
};
|
|
385
385
|
}
|
|
386
386
|
}, checkUnderscore = (isLeading) => (node) => {
|
|
387
|
+
if (node.parent.kind === "Field" && node.parent.alias !== node)
|
|
388
|
+
return;
|
|
387
389
|
const suggestedName = node.value.replace(isLeading ? /^_+/ : /_+$/, "");
|
|
388
390
|
report(node, `${isLeading ? "Leading" : "Trailing"} underscores are not allowed`, [
|
|
389
391
|
suggestedName
|
|
390
392
|
]);
|
|
391
393
|
}, listeners = {};
|
|
392
|
-
allowLeadingUnderscore || (listeners["Name[value=/^_/]
|
|
394
|
+
allowLeadingUnderscore || (listeners["Name[value=/^_/]"] = checkUnderscore(!0)), allowTrailingUnderscore || (listeners["Name[value=/_$/]"] = checkUnderscore(!1));
|
|
393
395
|
const selectors = new Set(
|
|
394
396
|
[types && TYPES_KINDS, Object.keys(restOptions)].flat().filter(truthy)
|
|
395
397
|
);
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import "../../chunk-UIAXBAMD.js";
|
|
2
|
-
import {
|
|
3
|
-
import { requireGraphQLSchemaFromContext } from "../../utils.js";
|
|
2
|
+
import { displayNodeName, requireGraphQLSchemaFromContext } from "../../utils.js";
|
|
4
3
|
const RULE_ID = "no-deprecated", rule = {
|
|
5
4
|
meta: {
|
|
6
5
|
type: "suggestion",
|
|
@@ -84,24 +83,24 @@ const RULE_ID = "no-deprecated", rule = {
|
|
|
84
83
|
recommended: !0
|
|
85
84
|
},
|
|
86
85
|
messages: {
|
|
87
|
-
[RULE_ID]: "
|
|
86
|
+
[RULE_ID]: "{{ type }} is marked as deprecated in your GraphQL schema (reason: {{ reason }})"
|
|
88
87
|
},
|
|
89
88
|
schema: []
|
|
90
89
|
},
|
|
91
90
|
create(context) {
|
|
92
91
|
requireGraphQLSchemaFromContext(RULE_ID, context);
|
|
93
92
|
function report(node, reason) {
|
|
94
|
-
const
|
|
93
|
+
const nodeType = displayNodeName(node);
|
|
95
94
|
context.report({
|
|
96
95
|
node,
|
|
97
96
|
messageId: RULE_ID,
|
|
98
97
|
data: {
|
|
99
|
-
type: nodeType,
|
|
98
|
+
type: nodeType[0].toUpperCase() + nodeType.slice(1),
|
|
100
99
|
reason
|
|
101
100
|
},
|
|
102
101
|
suggest: [
|
|
103
102
|
{
|
|
104
|
-
desc: `Remove
|
|
103
|
+
desc: `Remove ${nodeType}`,
|
|
105
104
|
fix: (fixer) => fixer.remove(node)
|
|
106
105
|
}
|
|
107
106
|
]
|
|
@@ -115,6 +114,17 @@ const RULE_ID = "no-deprecated", rule = {
|
|
|
115
114
|
Field(node) {
|
|
116
115
|
const reason = node.typeInfo().fieldDef?.deprecationReason;
|
|
117
116
|
reason && report(node, reason);
|
|
117
|
+
},
|
|
118
|
+
Argument(node) {
|
|
119
|
+
const reason = node.typeInfo().argument?.deprecationReason;
|
|
120
|
+
reason && report(node, reason);
|
|
121
|
+
},
|
|
122
|
+
ObjectValue(node) {
|
|
123
|
+
const fields = node.typeInfo().inputType.getFields();
|
|
124
|
+
for (const field of node.fields) {
|
|
125
|
+
const fieldName = field.name.value, reason = fields[fieldName].deprecationReason;
|
|
126
|
+
reason && report(field, reason);
|
|
127
|
+
}
|
|
118
128
|
}
|
|
119
129
|
};
|
|
120
130
|
}
|
|
@@ -104,7 +104,7 @@ Include it in your selection set{{ addition }}.`
|
|
|
104
104
|
schema
|
|
105
105
|
},
|
|
106
106
|
create(context) {
|
|
107
|
-
const schema2 = requireGraphQLSchemaFromContext(RULE_ID, context), siblings = requireSiblingsOperations(RULE_ID, context), { fieldName = DEFAULT_ID_FIELD_NAME } = context.options[0] || {}, idNames = asArray(fieldName), selector = "
|
|
107
|
+
const schema2 = requireGraphQLSchemaFromContext(RULE_ID, context), siblings = requireSiblingsOperations(RULE_ID, context), { fieldName = DEFAULT_ID_FIELD_NAME } = context.options[0] || {}, idNames = asArray(fieldName), selector = "SelectionSet[parent.kind!=/(^OperationDefinition|InlineFragment)$/]", typeInfo = new TypeInfo(schema2);
|
|
108
108
|
function checkFragments(node) {
|
|
109
109
|
for (const selection of node.selections) {
|
|
110
110
|
if (selection.kind !== Kind.FRAGMENT_SPREAD)
|
package/esm/utils.d.ts
CHANGED
|
@@ -39,7 +39,7 @@ declare const ARRAY_DEFAULT_OPTIONS: {
|
|
|
39
39
|
declare const englishJoinWords: (words: string[]) => string;
|
|
40
40
|
type Truthy<T> = T extends '' | 0 | false | null | undefined ? never : T;
|
|
41
41
|
declare function truthy<T>(value: T): value is Truthy<T>;
|
|
42
|
-
declare function displayNodeName(node: GraphQLESTreeNode<ASTNode>): string;
|
|
42
|
+
declare function displayNodeName(node: GraphQLESTreeNode<ASTNode, boolean>): string;
|
|
43
43
|
declare function getNodeName(node: GraphQLESTreeNode<ASTNode>): string;
|
|
44
44
|
|
|
45
45
|
export { ARRAY_DEFAULT_OPTIONS, CWD, type CaseStyle, REPORT_ON_FIRST_CHARACTER, TYPES_KINDS, VIRTUAL_DOCUMENT_REGEX, camelCase, convertCase, displayNodeName, englishJoinWords, getLocation, getNodeName, getTypeName, logger, pascalCase, requireGraphQLSchemaFromContext, requireSiblingsOperations, slash, truthy };
|
package/esm/utils.js
CHANGED
|
@@ -123,7 +123,7 @@ const DisplayNodeNameMap = {
|
|
|
123
123
|
[Kind.VARIABLE]: "variable"
|
|
124
124
|
};
|
|
125
125
|
function displayNodeName(node) {
|
|
126
|
-
return `${node.kind === Kind.OPERATION_DEFINITION ? node.operation : DisplayNodeNameMap[node.kind]} "${"alias" in node && node.alias?.value || "name" in node && node.name?.value}"`;
|
|
126
|
+
return `${node.kind === Kind.OPERATION_DEFINITION ? node.operation : DisplayNodeNameMap[node.kind]} "${"alias" in node && node.alias?.value || "name" in node && node.name?.value || node.value}"`;
|
|
127
127
|
}
|
|
128
128
|
function getNodeName(node) {
|
|
129
129
|
switch (node.kind) {
|
package/index.browser.js
CHANGED
|
@@ -521,7 +521,7 @@ var DisplayNodeNameMap = {
|
|
|
521
521
|
[Kind2.VARIABLE]: "variable"
|
|
522
522
|
};
|
|
523
523
|
function displayNodeName(node) {
|
|
524
|
-
return `${node.kind === Kind2.OPERATION_DEFINITION ? node.operation : DisplayNodeNameMap[node.kind]} "${"alias" in node && node.alias?.value || "name" in node && node.name?.value}"`;
|
|
524
|
+
return `${node.kind === Kind2.OPERATION_DEFINITION ? node.operation : DisplayNodeNameMap[node.kind]} "${"alias" in node && node.alias?.value || "name" in node && node.name?.value || node.value}"`;
|
|
525
525
|
}
|
|
526
526
|
function getNodeName(node) {
|
|
527
527
|
switch (node.kind) {
|
|
@@ -2509,12 +2509,14 @@ ${TYPES_KINDS.map((kind) => `- \`${kind}\``).join(`
|
|
|
2509
2509
|
};
|
|
2510
2510
|
}
|
|
2511
2511
|
}, checkUnderscore = (isLeading) => (node) => {
|
|
2512
|
+
if (node.parent.kind === "Field" && node.parent.alias !== node)
|
|
2513
|
+
return;
|
|
2512
2514
|
let suggestedName = node.value.replace(isLeading ? /^_+/ : /_+$/, "");
|
|
2513
2515
|
report(node, `${isLeading ? "Leading" : "Trailing"} underscores are not allowed`, [
|
|
2514
2516
|
suggestedName
|
|
2515
2517
|
]);
|
|
2516
2518
|
}, listeners = {};
|
|
2517
|
-
allowLeadingUnderscore || (listeners["Name[value=/^_/]
|
|
2519
|
+
allowLeadingUnderscore || (listeners["Name[value=/^_/]"] = checkUnderscore(!0)), allowTrailingUnderscore || (listeners["Name[value=/_$/]"] = checkUnderscore(!1));
|
|
2518
2520
|
let selectors = new Set(
|
|
2519
2521
|
[types && TYPES_KINDS, Object.keys(restOptions)].flat().filter(truthy)
|
|
2520
2522
|
);
|
|
@@ -2594,7 +2596,6 @@ var RULE_ID3 = "no-anonymous-operations", rule7 = {
|
|
|
2594
2596
|
};
|
|
2595
2597
|
|
|
2596
2598
|
// src/rules/no-deprecated/index.ts
|
|
2597
|
-
import { Kind as Kind10 } from "graphql";
|
|
2598
2599
|
var RULE_ID4 = "no-deprecated", rule8 = {
|
|
2599
2600
|
meta: {
|
|
2600
2601
|
type: "suggestion",
|
|
@@ -2678,24 +2679,24 @@ var RULE_ID4 = "no-deprecated", rule8 = {
|
|
|
2678
2679
|
recommended: !0
|
|
2679
2680
|
},
|
|
2680
2681
|
messages: {
|
|
2681
|
-
[RULE_ID4]: "
|
|
2682
|
+
[RULE_ID4]: "{{ type }} is marked as deprecated in your GraphQL schema (reason: {{ reason }})"
|
|
2682
2683
|
},
|
|
2683
2684
|
schema: []
|
|
2684
2685
|
},
|
|
2685
2686
|
create(context) {
|
|
2686
2687
|
requireGraphQLSchemaFromContext(RULE_ID4, context);
|
|
2687
2688
|
function report(node, reason) {
|
|
2688
|
-
let
|
|
2689
|
+
let nodeType = displayNodeName(node);
|
|
2689
2690
|
context.report({
|
|
2690
2691
|
node,
|
|
2691
2692
|
messageId: RULE_ID4,
|
|
2692
2693
|
data: {
|
|
2693
|
-
type: nodeType,
|
|
2694
|
+
type: nodeType[0].toUpperCase() + nodeType.slice(1),
|
|
2694
2695
|
reason
|
|
2695
2696
|
},
|
|
2696
2697
|
suggest: [
|
|
2697
2698
|
{
|
|
2698
|
-
desc: `Remove
|
|
2699
|
+
desc: `Remove ${nodeType}`,
|
|
2699
2700
|
fix: (fixer) => fixer.remove(node)
|
|
2700
2701
|
}
|
|
2701
2702
|
]
|
|
@@ -2709,13 +2710,24 @@ var RULE_ID4 = "no-deprecated", rule8 = {
|
|
|
2709
2710
|
Field(node) {
|
|
2710
2711
|
let reason = node.typeInfo().fieldDef?.deprecationReason;
|
|
2711
2712
|
reason && report(node, reason);
|
|
2713
|
+
},
|
|
2714
|
+
Argument(node) {
|
|
2715
|
+
let reason = node.typeInfo().argument?.deprecationReason;
|
|
2716
|
+
reason && report(node, reason);
|
|
2717
|
+
},
|
|
2718
|
+
ObjectValue(node) {
|
|
2719
|
+
let fields = node.typeInfo().inputType.getFields();
|
|
2720
|
+
for (let field of node.fields) {
|
|
2721
|
+
let fieldName = field.name.value, reason = fields[fieldName].deprecationReason;
|
|
2722
|
+
reason && report(field, reason);
|
|
2723
|
+
}
|
|
2712
2724
|
}
|
|
2713
2725
|
};
|
|
2714
2726
|
}
|
|
2715
2727
|
};
|
|
2716
2728
|
|
|
2717
2729
|
// src/rules/no-duplicate-fields/index.ts
|
|
2718
|
-
import { Kind as
|
|
2730
|
+
import { Kind as Kind10 } from "graphql";
|
|
2719
2731
|
var RULE_ID5 = "no-duplicate-fields", rule9 = {
|
|
2720
2732
|
meta: {
|
|
2721
2733
|
type: "suggestion",
|
|
@@ -2799,7 +2811,7 @@ var RULE_ID5 = "no-duplicate-fields", rule9 = {
|
|
|
2799
2811
|
desc: `Remove \`${fieldName}\` ${parent.type.toLowerCase()}`,
|
|
2800
2812
|
fix(fixer) {
|
|
2801
2813
|
return fixer.remove(
|
|
2802
|
-
parent.type ===
|
|
2814
|
+
parent.type === Kind10.VARIABLE ? parent.parent : parent
|
|
2803
2815
|
);
|
|
2804
2816
|
}
|
|
2805
2817
|
}
|
|
@@ -2822,7 +2834,7 @@ var RULE_ID5 = "no-duplicate-fields", rule9 = {
|
|
|
2822
2834
|
SelectionSet(node) {
|
|
2823
2835
|
let set = /* @__PURE__ */ new Set();
|
|
2824
2836
|
for (let selection of node.selections)
|
|
2825
|
-
selection.kind ===
|
|
2837
|
+
selection.kind === Kind10.FIELD && checkNode2(set, selection.alias || selection.name);
|
|
2826
2838
|
}
|
|
2827
2839
|
};
|
|
2828
2840
|
}
|
|
@@ -3092,7 +3104,7 @@ var schema7 = {
|
|
|
3092
3104
|
};
|
|
3093
3105
|
|
|
3094
3106
|
// src/rules/no-scalar-result-type-on-mutation/index.ts
|
|
3095
|
-
import { isScalarType, Kind as
|
|
3107
|
+
import { isScalarType, Kind as Kind11 } from "graphql";
|
|
3096
3108
|
var RULE_ID8 = "no-scalar-result-type-on-mutation", rule13 = {
|
|
3097
3109
|
meta: {
|
|
3098
3110
|
type: "suggestion",
|
|
@@ -3139,7 +3151,7 @@ var RULE_ID8 = "no-scalar-result-type-on-mutation", rule13 = {
|
|
|
3139
3151
|
let typeName = node.value, graphQLType = schema16.getType(typeName);
|
|
3140
3152
|
if (isScalarType(graphQLType)) {
|
|
3141
3153
|
let fieldDef = node.parent;
|
|
3142
|
-
for (; fieldDef.kind !==
|
|
3154
|
+
for (; fieldDef.kind !== Kind11.FIELD_DEFINITION; )
|
|
3143
3155
|
fieldDef = fieldDef.parent;
|
|
3144
3156
|
context.report({
|
|
3145
3157
|
node,
|
|
@@ -3230,24 +3242,24 @@ var NO_TYPENAME_PREFIX = "NO_TYPENAME_PREFIX", rule14 = {
|
|
|
3230
3242
|
import {
|
|
3231
3243
|
DirectiveLocation,
|
|
3232
3244
|
isInterfaceType,
|
|
3233
|
-
Kind as
|
|
3245
|
+
Kind as Kind12,
|
|
3234
3246
|
visit as visit5
|
|
3235
3247
|
} from "graphql";
|
|
3236
3248
|
import lowerCase3 from "lodash.lowercase";
|
|
3237
3249
|
var RULE_ID9 = "no-unreachable-types", KINDS = [
|
|
3238
|
-
|
|
3239
|
-
|
|
3240
|
-
|
|
3241
|
-
|
|
3242
|
-
|
|
3243
|
-
|
|
3244
|
-
|
|
3245
|
-
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
|
|
3249
|
-
|
|
3250
|
-
|
|
3250
|
+
Kind12.DIRECTIVE_DEFINITION,
|
|
3251
|
+
Kind12.OBJECT_TYPE_DEFINITION,
|
|
3252
|
+
Kind12.OBJECT_TYPE_EXTENSION,
|
|
3253
|
+
Kind12.INTERFACE_TYPE_DEFINITION,
|
|
3254
|
+
Kind12.INTERFACE_TYPE_EXTENSION,
|
|
3255
|
+
Kind12.SCALAR_TYPE_DEFINITION,
|
|
3256
|
+
Kind12.SCALAR_TYPE_EXTENSION,
|
|
3257
|
+
Kind12.INPUT_OBJECT_TYPE_DEFINITION,
|
|
3258
|
+
Kind12.INPUT_OBJECT_TYPE_EXTENSION,
|
|
3259
|
+
Kind12.UNION_TYPE_DEFINITION,
|
|
3260
|
+
Kind12.UNION_TYPE_EXTENSION,
|
|
3261
|
+
Kind12.ENUM_TYPE_DEFINITION,
|
|
3262
|
+
Kind12.ENUM_TYPE_EXTENSION
|
|
3251
3263
|
], reachableTypesCache = new ModuleCache(), RequestDirectiveLocations = /* @__PURE__ */ new Set([
|
|
3252
3264
|
DirectiveLocation.QUERY,
|
|
3253
3265
|
DirectiveLocation.MUTATION,
|
|
@@ -3598,7 +3610,7 @@ var rule16 = {
|
|
|
3598
3610
|
};
|
|
3599
3611
|
|
|
3600
3612
|
// src/rules/relay-arguments/index.ts
|
|
3601
|
-
import { isScalarType as isScalarType2, Kind as
|
|
3613
|
+
import { isScalarType as isScalarType2, Kind as Kind13 } from "graphql";
|
|
3602
3614
|
var RULE_ID11 = "relay-arguments", MISSING_ARGUMENTS = "MISSING_ARGUMENTS", schema9 = {
|
|
3603
3615
|
type: "array",
|
|
3604
3616
|
maxItems: 1,
|
|
@@ -3672,7 +3684,7 @@ var RULE_ID11 = "relay-arguments", MISSING_ARGUMENTS = "MISSING_ARGUMENTS", sche
|
|
|
3672
3684
|
return {
|
|
3673
3685
|
"FieldDefinition > .gqlType Name[value=/Connection$/]"(node) {
|
|
3674
3686
|
let fieldNode = node.parent;
|
|
3675
|
-
for (; fieldNode.kind !==
|
|
3687
|
+
for (; fieldNode.kind !== Kind13.FIELD_DEFINITION; )
|
|
3676
3688
|
fieldNode = fieldNode.parent;
|
|
3677
3689
|
let args = Object.fromEntries(
|
|
3678
3690
|
fieldNode.arguments?.map((argument) => [argument.name.value, argument]) || []
|
|
@@ -3686,7 +3698,7 @@ var RULE_ID11 = "relay-arguments", MISSING_ARGUMENTS = "MISSING_ARGUMENTS", sche
|
|
|
3686
3698
|
}
|
|
3687
3699
|
function checkField(typeName, argumentName) {
|
|
3688
3700
|
let argument = args[argumentName], hasArgument = !!argument, type = argument;
|
|
3689
|
-
if (hasArgument && type.gqlType.kind ===
|
|
3701
|
+
if (hasArgument && type.gqlType.kind === Kind13.NON_NULL_TYPE && (type = type.gqlType), !(hasArgument && type.gqlType.kind === Kind13.NAMED_TYPE && (type.gqlType.name.value === typeName || typeName === "String" && isScalarType2(schema16.getType(type.gqlType.name.value))))) {
|
|
3690
3702
|
let returnType = typeName === "String" ? "String or Scalar" : typeName;
|
|
3691
3703
|
context.report({
|
|
3692
3704
|
node: (argument || fieldNode).name,
|
|
@@ -3701,17 +3713,17 @@ var RULE_ID11 = "relay-arguments", MISSING_ARGUMENTS = "MISSING_ARGUMENTS", sche
|
|
|
3701
3713
|
};
|
|
3702
3714
|
|
|
3703
3715
|
// src/rules/relay-connection-types/index.ts
|
|
3704
|
-
import { Kind as
|
|
3716
|
+
import { Kind as Kind14 } from "graphql";
|
|
3705
3717
|
var MUST_BE_OBJECT_TYPE = "MUST_BE_OBJECT_TYPE", MUST_CONTAIN_FIELD_EDGES = "MUST_CONTAIN_FIELD_EDGES", MUST_CONTAIN_FIELD_PAGE_INFO = "MUST_CONTAIN_FIELD_PAGE_INFO", MUST_HAVE_CONNECTION_SUFFIX = "MUST_HAVE_CONNECTION_SUFFIX", EDGES_FIELD_MUST_RETURN_LIST_TYPE = "EDGES_FIELD_MUST_RETURN_LIST_TYPE", PAGE_INFO_FIELD_MUST_RETURN_NON_NULL_TYPE = "PAGE_INFO_FIELD_MUST_RETURN_NON_NULL_TYPE", NON_OBJECT_TYPES = [
|
|
3706
|
-
|
|
3707
|
-
|
|
3708
|
-
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3713
|
-
|
|
3714
|
-
|
|
3718
|
+
Kind14.SCALAR_TYPE_DEFINITION,
|
|
3719
|
+
Kind14.UNION_TYPE_DEFINITION,
|
|
3720
|
+
Kind14.UNION_TYPE_EXTENSION,
|
|
3721
|
+
Kind14.INPUT_OBJECT_TYPE_DEFINITION,
|
|
3722
|
+
Kind14.INPUT_OBJECT_TYPE_EXTENSION,
|
|
3723
|
+
Kind14.ENUM_TYPE_DEFINITION,
|
|
3724
|
+
Kind14.ENUM_TYPE_EXTENSION,
|
|
3725
|
+
Kind14.INTERFACE_TYPE_DEFINITION,
|
|
3726
|
+
Kind14.INTERFACE_TYPE_EXTENSION
|
|
3715
3727
|
], notConnectionTypesSelector = `:matches(${NON_OBJECT_TYPES})[name.value=/Connection$/] > .name`, hasEdgesField = (node) => node.fields?.some((field) => field.name.value === "edges"), hasPageInfoField = (node) => node.fields?.some((field) => field.name.value === "pageInfo"), rule18 = {
|
|
3716
3728
|
meta: {
|
|
3717
3729
|
type: "problem",
|
|
@@ -3778,10 +3790,10 @@ var MUST_BE_OBJECT_TYPE = "MUST_BE_OBJECT_TYPE", MUST_CONTAIN_FIELD_EDGES = "MUS
|
|
|
3778
3790
|
hasEdgesField(node) || context.report({ node: node.name, messageId: MUST_CONTAIN_FIELD_EDGES }), hasPageInfoField(node) || context.report({ node: node.name, messageId: MUST_CONTAIN_FIELD_PAGE_INFO });
|
|
3779
3791
|
},
|
|
3780
3792
|
":matches(ObjectTypeDefinition, ObjectTypeExtension)[name.value=/Connection$/] > FieldDefinition[name.value=edges] > .gqlType"(node) {
|
|
3781
|
-
node.kind ===
|
|
3793
|
+
node.kind === Kind14.LIST_TYPE || node.kind === Kind14.NON_NULL_TYPE && node.gqlType.kind === Kind14.LIST_TYPE || context.report({ node, messageId: EDGES_FIELD_MUST_RETURN_LIST_TYPE });
|
|
3782
3794
|
},
|
|
3783
3795
|
":matches(ObjectTypeDefinition, ObjectTypeExtension)[name.value=/Connection$/] > FieldDefinition[name.value=pageInfo] > .gqlType"(node) {
|
|
3784
|
-
node.kind ===
|
|
3796
|
+
node.kind === Kind14.NON_NULL_TYPE && node.gqlType.kind === Kind14.NAMED_TYPE && node.gqlType.name.value === "PageInfo" || context.report({ node, messageId: PAGE_INFO_FIELD_MUST_RETURN_NON_NULL_TYPE });
|
|
3785
3797
|
}
|
|
3786
3798
|
};
|
|
3787
3799
|
}
|
|
@@ -3791,7 +3803,7 @@ var MUST_BE_OBJECT_TYPE = "MUST_BE_OBJECT_TYPE", MUST_CONTAIN_FIELD_EDGES = "MUS
|
|
|
3791
3803
|
import {
|
|
3792
3804
|
isObjectType as isObjectType2,
|
|
3793
3805
|
isScalarType as isScalarType3,
|
|
3794
|
-
Kind as
|
|
3806
|
+
Kind as Kind15,
|
|
3795
3807
|
visit as visit7
|
|
3796
3808
|
} from "graphql";
|
|
3797
3809
|
import { getDocumentNodeFromSchema } from "@graphql-tools/utils";
|
|
@@ -3886,7 +3898,7 @@ var schema10 = {
|
|
|
3886
3898
|
shouldImplementNode: !0,
|
|
3887
3899
|
listTypeCanWrapOnlyEdgeType: !0,
|
|
3888
3900
|
...context.options[0]
|
|
3889
|
-
}, isNamedOrNonNullNamed = (node) => node.kind ===
|
|
3901
|
+
}, isNamedOrNonNullNamed = (node) => node.kind === Kind15.NAMED_TYPE || node.kind === Kind15.NON_NULL_TYPE && node.gqlType.kind === Kind15.NAMED_TYPE, checkNodeField = (node) => {
|
|
3890
3902
|
let nodeField = node.fields?.find((field) => field.name.value === "node"), message = "return either a Scalar, Enum, Object, Interface, Union, or a non-null wrapper around one of those types.";
|
|
3891
3903
|
if (!nodeField)
|
|
3892
3904
|
context.report({
|
|
@@ -3923,7 +3935,7 @@ var schema10 = {
|
|
|
3923
3935
|
}
|
|
3924
3936
|
};
|
|
3925
3937
|
return options.listTypeCanWrapOnlyEdgeType && (listeners["FieldDefinition > .gqlType"] = (node) => {
|
|
3926
|
-
if (node.kind ===
|
|
3938
|
+
if (node.kind === Kind15.LIST_TYPE || node.kind === Kind15.NON_NULL_TYPE && node.gqlType.kind === Kind15.LIST_TYPE) {
|
|
3927
3939
|
let typeName = getTypeName(node.rawNode());
|
|
3928
3940
|
edgeTypes.has(typeName) || context.report({ node, messageId: MESSAGE_LIST_TYPE_ONLY_EDGE_TYPE });
|
|
3929
3941
|
}
|
|
@@ -3932,7 +3944,7 @@ var schema10 = {
|
|
|
3932
3944
|
};
|
|
3933
3945
|
|
|
3934
3946
|
// src/rules/relay-page-info/index.ts
|
|
3935
|
-
import { isScalarType as isScalarType4, Kind as
|
|
3947
|
+
import { isScalarType as isScalarType4, Kind as Kind16 } from "graphql";
|
|
3936
3948
|
var RULE_ID13 = "relay-page-info", MESSAGE_MUST_EXIST = "MESSAGE_MUST_EXIST", MESSAGE_MUST_BE_OBJECT_TYPE2 = "MESSAGE_MUST_BE_OBJECT_TYPE", notPageInfoTypesSelector = `:matches(${NON_OBJECT_TYPES})[name.value=PageInfo] > .name`, hasPageInfoChecked = !1, rule20 = {
|
|
3937
3949
|
meta: {
|
|
3938
3950
|
type: "problem",
|
|
@@ -3988,7 +4000,7 @@ var RULE_ID13 = "relay-page-info", MESSAGE_MUST_EXIST = "MESSAGE_MUST_EXIST", ME
|
|
|
3988
4000
|
let field = fieldMap[fieldName], isAllowedType = !1;
|
|
3989
4001
|
if (field) {
|
|
3990
4002
|
let type = field.gqlType;
|
|
3991
|
-
typeName === "Boolean" ? isAllowedType = type.kind ===
|
|
4003
|
+
typeName === "Boolean" ? isAllowedType = type.kind === Kind16.NON_NULL_TYPE && type.gqlType.kind === Kind16.NAMED_TYPE && type.gqlType.name.value === "Boolean" : type.kind === Kind16.NAMED_TYPE && (isAllowedType = type.name.value === "String" || isScalarType4(schema16.getType(type.name.value)));
|
|
3992
4004
|
}
|
|
3993
4005
|
if (!isAllowedType) {
|
|
3994
4006
|
let returnType = typeName === "Boolean" ? "non-null Boolean" : "either String or Scalar, which can be null if there are no results";
|
|
@@ -4192,15 +4204,15 @@ var rule22 = {
|
|
|
4192
4204
|
};
|
|
4193
4205
|
|
|
4194
4206
|
// src/rules/require-description/index.ts
|
|
4195
|
-
import { Kind as
|
|
4207
|
+
import { Kind as Kind17, TokenKind as TokenKind3 } from "graphql";
|
|
4196
4208
|
import { getRootTypeNames } from "@graphql-tools/utils";
|
|
4197
4209
|
var RULE_ID14 = "require-description", ALLOWED_KINDS2 = [
|
|
4198
4210
|
...TYPES_KINDS,
|
|
4199
|
-
|
|
4200
|
-
|
|
4201
|
-
|
|
4202
|
-
|
|
4203
|
-
|
|
4211
|
+
Kind17.DIRECTIVE_DEFINITION,
|
|
4212
|
+
Kind17.FIELD_DEFINITION,
|
|
4213
|
+
Kind17.INPUT_VALUE_DEFINITION,
|
|
4214
|
+
Kind17.ENUM_VALUE_DEFINITION,
|
|
4215
|
+
Kind17.OPERATION_DEFINITION
|
|
4204
4216
|
], schema12 = {
|
|
4205
4217
|
type: "array",
|
|
4206
4218
|
minItems: 1,
|
|
@@ -4223,7 +4235,7 @@ ${TYPES_KINDS.map((kind) => `- \`${kind}\``).join(`
|
|
|
4223
4235
|
...Object.fromEntries(
|
|
4224
4236
|
[...ALLOWED_KINDS2].sort().map((kind) => {
|
|
4225
4237
|
let description = `Read more about this kind on [spec.graphql.org](https://spec.graphql.org/October2021/#${kind}).`;
|
|
4226
|
-
return kind ===
|
|
4238
|
+
return kind === Kind17.OPERATION_DEFINITION && (description += '\n> You must use only comment syntax `#` and not description syntax `"""` or `"`.'), [kind, { type: "boolean", description }];
|
|
4227
4239
|
})
|
|
4228
4240
|
)
|
|
4229
4241
|
}
|
|
@@ -4299,7 +4311,7 @@ ${TYPES_KINDS.map((kind) => `- \`${kind}\``).join(`
|
|
|
4299
4311
|
configOptions: [
|
|
4300
4312
|
{
|
|
4301
4313
|
types: !0,
|
|
4302
|
-
[
|
|
4314
|
+
[Kind17.DIRECTIVE_DEFINITION]: !0,
|
|
4303
4315
|
rootField: !0
|
|
4304
4316
|
}
|
|
4305
4317
|
],
|
|
@@ -4325,7 +4337,7 @@ ${TYPES_KINDS.map((kind) => `- \`${kind}\``).join(`
|
|
|
4325
4337
|
}
|
|
4326
4338
|
return {
|
|
4327
4339
|
[[...kinds].join(",")](node) {
|
|
4328
|
-
let description = "", isOperation = node.kind ===
|
|
4340
|
+
let description = "", isOperation = node.kind === Kind17.OPERATION_DEFINITION;
|
|
4329
4341
|
if (isOperation) {
|
|
4330
4342
|
let rawNode = node.rawNode(), { prev, line } = rawNode.loc.startToken;
|
|
4331
4343
|
if (prev?.kind === TokenKind3.COMMENT) {
|
|
@@ -4531,7 +4543,7 @@ var RULE_ID16 = "require-import-fragment", SUGGESTION_ID = "add-import-expressio
|
|
|
4531
4543
|
};
|
|
4532
4544
|
|
|
4533
4545
|
// src/rules/require-nullable-fields-with-oneof/index.ts
|
|
4534
|
-
import { Kind as
|
|
4546
|
+
import { Kind as Kind18 } from "graphql";
|
|
4535
4547
|
var RULE_ID17 = "require-nullable-fields-with-oneof", rule26 = {
|
|
4536
4548
|
meta: {
|
|
4537
4549
|
type: "suggestion",
|
|
@@ -4575,11 +4587,11 @@ var RULE_ID17 = "require-nullable-fields-with-oneof", rule26 = {
|
|
|
4575
4587
|
return {
|
|
4576
4588
|
"Directive[name.value=oneOf]"({ parent }) {
|
|
4577
4589
|
if ([
|
|
4578
|
-
|
|
4579
|
-
|
|
4590
|
+
Kind18.OBJECT_TYPE_DEFINITION,
|
|
4591
|
+
Kind18.INPUT_OBJECT_TYPE_DEFINITION
|
|
4580
4592
|
].includes(parent.kind))
|
|
4581
4593
|
for (let field of parent.fields || [])
|
|
4582
|
-
field.gqlType.kind ===
|
|
4594
|
+
field.gqlType.kind === Kind18.NON_NULL_TYPE && context.report({
|
|
4583
4595
|
node: field.name,
|
|
4584
4596
|
messageId: RULE_ID17,
|
|
4585
4597
|
data: { nodeName: getNodeName(field) }
|
|
@@ -4590,7 +4602,7 @@ var RULE_ID17 = "require-nullable-fields-with-oneof", rule26 = {
|
|
|
4590
4602
|
};
|
|
4591
4603
|
|
|
4592
4604
|
// src/rules/require-nullable-result-in-root/index.ts
|
|
4593
|
-
import { Kind as
|
|
4605
|
+
import { Kind as Kind19 } from "graphql";
|
|
4594
4606
|
var RULE_ID18 = "require-nullable-result-in-root", rule27 = {
|
|
4595
4607
|
meta: {
|
|
4596
4608
|
type: "suggestion",
|
|
@@ -4640,7 +4652,7 @@ var RULE_ID18 = "require-nullable-result-in-root", rule27 = {
|
|
|
4640
4652
|
"ObjectTypeDefinition,ObjectTypeExtension"(node) {
|
|
4641
4653
|
if (rootTypeNames.has(node.name.value))
|
|
4642
4654
|
for (let field of node.fields || []) {
|
|
4643
|
-
if (field.gqlType.type !==
|
|
4655
|
+
if (field.gqlType.type !== Kind19.NON_NULL_TYPE || field.gqlType.gqlType.type !== Kind19.NAMED_TYPE)
|
|
4644
4656
|
continue;
|
|
4645
4657
|
let name = field.gqlType.gqlType.name.value, type = schema16.getType(name), resultType = type?.astNode ? getNodeName(type.astNode) : type?.name;
|
|
4646
4658
|
context.report({
|
|
@@ -4671,7 +4683,7 @@ import {
|
|
|
4671
4683
|
GraphQLInterfaceType,
|
|
4672
4684
|
GraphQLObjectType,
|
|
4673
4685
|
GraphQLUnionType,
|
|
4674
|
-
Kind as
|
|
4686
|
+
Kind as Kind20,
|
|
4675
4687
|
TypeInfo as TypeInfo3,
|
|
4676
4688
|
visit as visit8,
|
|
4677
4689
|
visitWithTypeInfo as visitWithTypeInfo3
|
|
@@ -4765,10 +4777,10 @@ Include it in your selection set{{ addition }}.`
|
|
|
4765
4777
|
schema: schema13
|
|
4766
4778
|
},
|
|
4767
4779
|
create(context) {
|
|
4768
|
-
let schema16 = requireGraphQLSchemaFromContext(RULE_ID19, context), siblings = requireSiblingsOperations(RULE_ID19, context), { fieldName = DEFAULT_ID_FIELD_NAME } = context.options[0] || {}, idNames = asArray(fieldName), selector = "
|
|
4780
|
+
let schema16 = requireGraphQLSchemaFromContext(RULE_ID19, context), siblings = requireSiblingsOperations(RULE_ID19, context), { fieldName = DEFAULT_ID_FIELD_NAME } = context.options[0] || {}, idNames = asArray(fieldName), selector = "SelectionSet[parent.kind!=/(^OperationDefinition|InlineFragment)$/]", typeInfo = new TypeInfo3(schema16);
|
|
4769
4781
|
function checkFragments(node) {
|
|
4770
4782
|
for (let selection of node.selections) {
|
|
4771
|
-
if (selection.kind !==
|
|
4783
|
+
if (selection.kind !== Kind20.FRAGMENT_SPREAD)
|
|
4772
4784
|
continue;
|
|
4773
4785
|
let [foundSpread] = siblings.getFragment(selection.name.value);
|
|
4774
4786
|
if (!foundSpread)
|
|
@@ -4776,7 +4788,7 @@ Include it in your selection set{{ addition }}.`
|
|
|
4776
4788
|
let checkedFragmentSpreads = /* @__PURE__ */ new Set(), visitor = visitWithTypeInfo3(typeInfo, {
|
|
4777
4789
|
SelectionSet(node2, key, _parent) {
|
|
4778
4790
|
let parent = _parent;
|
|
4779
|
-
parent.kind ===
|
|
4791
|
+
parent.kind === Kind20.FRAGMENT_DEFINITION ? checkedFragmentSpreads.add(parent.name.value) : parent.kind !== Kind20.INLINE_FRAGMENT && checkSelections(
|
|
4780
4792
|
node2,
|
|
4781
4793
|
typeInfo.getType(),
|
|
4782
4794
|
selection.loc.start,
|
|
@@ -4795,10 +4807,10 @@ Include it in your selection set{{ addition }}.`
|
|
|
4795
4807
|
else if (rawType instanceof GraphQLUnionType)
|
|
4796
4808
|
for (let selection of node.selections) {
|
|
4797
4809
|
let types = rawType.getTypes();
|
|
4798
|
-
if (selection.kind ===
|
|
4810
|
+
if (selection.kind === Kind20.INLINE_FRAGMENT) {
|
|
4799
4811
|
let t = types.find((t2) => t2.name === selection.typeCondition.name.value);
|
|
4800
4812
|
t && checkFields(t);
|
|
4801
|
-
} else if (selection.kind ===
|
|
4813
|
+
} else if (selection.kind === Kind20.FRAGMENT_SPREAD) {
|
|
4802
4814
|
let [foundSpread] = siblings.getFragment(selection.name.value);
|
|
4803
4815
|
if (!foundSpread) return;
|
|
4804
4816
|
let fragmentSpread = foundSpread.document, t = fragmentSpread.typeCondition.name.value === rawType.name ? rawType : types.find((t2) => t2.name === fragmentSpread.typeCondition.name.value);
|
|
@@ -4811,11 +4823,11 @@ Include it in your selection set{{ addition }}.`
|
|
|
4811
4823
|
return;
|
|
4812
4824
|
function hasIdField({ selections }) {
|
|
4813
4825
|
return selections.some((selection) => {
|
|
4814
|
-
if (selection.kind ===
|
|
4826
|
+
if (selection.kind === Kind20.FIELD)
|
|
4815
4827
|
return selection.alias && idNames.includes(selection.alias.value) ? !0 : idNames.includes(selection.name.value);
|
|
4816
|
-
if (selection.kind ===
|
|
4828
|
+
if (selection.kind === Kind20.INLINE_FRAGMENT)
|
|
4817
4829
|
return hasIdField(selection.selectionSet);
|
|
4818
|
-
if (selection.kind ===
|
|
4830
|
+
if (selection.kind === Kind20.FRAGMENT_SPREAD) {
|
|
4819
4831
|
let [foundSpread] = siblings.getFragment(selection.name.value);
|
|
4820
4832
|
if (foundSpread) {
|
|
4821
4833
|
let fragmentSpread = foundSpread.document;
|
|
@@ -4843,7 +4855,7 @@ Include it in your selection set{{ addition }}.`
|
|
|
4843
4855
|
desc: `Add \`${idName}\` selection`,
|
|
4844
4856
|
fix: (fixer) => {
|
|
4845
4857
|
let insertNode = node.selections[0];
|
|
4846
|
-
return insertNode = insertNode.kind ===
|
|
4858
|
+
return insertNode = insertNode.kind === Kind20.INLINE_FRAGMENT ? insertNode.selectionSet.selections[0] : insertNode, fixer.insertTextBefore(insertNode, `${idName} `);
|
|
4847
4859
|
}
|
|
4848
4860
|
}))), context.report(problem);
|
|
4849
4861
|
}
|
|
@@ -4918,7 +4930,7 @@ var RULE_ID20 = "require-type-pattern-with-oneof", rule29 = {
|
|
|
4918
4930
|
};
|
|
4919
4931
|
|
|
4920
4932
|
// src/rules/selection-set-depth/index.ts
|
|
4921
|
-
import { Kind as
|
|
4933
|
+
import { Kind as Kind21 } from "graphql";
|
|
4922
4934
|
import depthLimit from "graphql-depth-limit";
|
|
4923
4935
|
var RULE_ID21 = "selection-set-depth", schema14 = {
|
|
4924
4936
|
type: "array",
|
|
@@ -5004,7 +5016,7 @@ var RULE_ID21 = "selection-set-depth", schema14 = {
|
|
|
5004
5016
|
"OperationDefinition, FragmentDefinition"(node) {
|
|
5005
5017
|
try {
|
|
5006
5018
|
let rawNode = node.rawNode(), fragmentsInUse = siblings ? siblings.getFragmentsInUse(rawNode) : [], document = {
|
|
5007
|
-
kind:
|
|
5019
|
+
kind: Kind21.DOCUMENT,
|
|
5008
5020
|
definitions: [rawNode, ...fragmentsInUse]
|
|
5009
5021
|
};
|
|
5010
5022
|
checkFn({
|
|
@@ -5048,7 +5060,7 @@ var RULE_ID21 = "selection-set-depth", schema14 = {
|
|
|
5048
5060
|
};
|
|
5049
5061
|
|
|
5050
5062
|
// src/rules/strict-id-in-types/index.ts
|
|
5051
|
-
import { Kind as
|
|
5063
|
+
import { Kind as Kind22 } from "graphql";
|
|
5052
5064
|
var RULE_ID22 = "strict-id-in-types", schema15 = {
|
|
5053
5065
|
type: "array",
|
|
5054
5066
|
maxItems: 1,
|
|
@@ -5177,7 +5189,7 @@ var RULE_ID22 = "strict-id-in-types", schema15 = {
|
|
|
5177
5189
|
return;
|
|
5178
5190
|
if (node.fields?.filter((field) => {
|
|
5179
5191
|
let fieldNode = field.rawNode(), isValidIdName = options.acceptedIdNames.includes(fieldNode.name.value), isValidIdType = !1;
|
|
5180
|
-
return fieldNode.type.kind ===
|
|
5192
|
+
return fieldNode.type.kind === Kind22.NON_NULL_TYPE && fieldNode.type.type.kind === Kind22.NAMED_TYPE && (isValidIdType = options.acceptedIdTypes.includes(fieldNode.type.type.name.value)), isValidIdName && isValidIdType;
|
|
5181
5193
|
})?.length !== 1) {
|
|
5182
5194
|
let pluralNamesSuffix = options.acceptedIdNames.length > 1 ? "s" : "", pluralTypesSuffix = options.acceptedIdTypes.length > 1 ? "s" : "";
|
|
5183
5195
|
context.report({
|
|
@@ -5193,7 +5205,7 @@ Accepted type${pluralTypesSuffix}: ${englishJoinWords(options.acceptedIdTypes)}.
|
|
|
5193
5205
|
};
|
|
5194
5206
|
|
|
5195
5207
|
// src/rules/unique-enum-value-names/index.ts
|
|
5196
|
-
import { Kind as
|
|
5208
|
+
import { Kind as Kind23 } from "graphql";
|
|
5197
5209
|
var rule32 = {
|
|
5198
5210
|
meta: {
|
|
5199
5211
|
type: "suggestion",
|
|
@@ -5237,7 +5249,7 @@ var rule32 = {
|
|
|
5237
5249
|
},
|
|
5238
5250
|
create(context) {
|
|
5239
5251
|
return {
|
|
5240
|
-
[[
|
|
5252
|
+
[[Kind23.ENUM_TYPE_DEFINITION, Kind23.ENUM_TYPE_EXTENSION].join(",")](node) {
|
|
5241
5253
|
let duplicates = node.values?.filter(
|
|
5242
5254
|
(item, index, array) => array.findIndex((v) => v.name.value.toLowerCase() === item.name.value.toLowerCase()) !== index
|
|
5243
5255
|
);
|
|
@@ -5263,9 +5275,9 @@ var rule32 = {
|
|
|
5263
5275
|
|
|
5264
5276
|
// src/rules/unique-fragment-name/index.ts
|
|
5265
5277
|
import { relative as relative2 } from "node:path";
|
|
5266
|
-
import { Kind as
|
|
5278
|
+
import { Kind as Kind24 } from "graphql";
|
|
5267
5279
|
var RULE_ID23 = "unique-fragment-name", checkNode = (context, node, ruleId) => {
|
|
5268
|
-
let documentName = node.name.value, siblings = requireSiblingsOperations(ruleId, context), siblingDocuments = node.kind ===
|
|
5280
|
+
let documentName = node.name.value, siblings = requireSiblingsOperations(ruleId, context), siblingDocuments = node.kind === Kind24.FRAGMENT_DEFINITION ? siblings.getFragment(documentName) : siblings.getOperation(documentName), filepath = context.filename, conflictingDocuments = siblingDocuments.filter((f) => {
|
|
5269
5281
|
let isSameName = f.document.name?.value === documentName, isSamePath = slash(f.filePath) === slash(filepath);
|
|
5270
5282
|
return isSameName && !isSamePath;
|
|
5271
5283
|
});
|