@graphql-eslint/eslint-plugin 3.13.1-alpha-20221105230632-80b7067 → 3.13.1
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 +266 -0
- package/docs/README.md +76 -0
- package/docs/custom-rules.md +148 -0
- package/docs/deprecated-rules.md +21 -0
- package/docs/parser-options.md +85 -0
- package/docs/parser.md +49 -0
- package/docs/rules/alphabetize.md +178 -0
- package/docs/rules/description-style.md +54 -0
- package/docs/rules/executable-definitions.md +17 -0
- package/docs/rules/fields-on-correct-type.md +17 -0
- package/docs/rules/fragments-on-composite-type.md +17 -0
- package/docs/rules/input-name.md +76 -0
- package/docs/rules/known-argument-names.md +17 -0
- package/docs/rules/known-directives.md +44 -0
- package/docs/rules/known-fragment-names.md +69 -0
- package/docs/rules/known-type-names.md +17 -0
- package/docs/rules/lone-anonymous-operation.md +17 -0
- package/docs/rules/lone-schema-definition.md +17 -0
- package/docs/rules/match-document-filename.md +156 -0
- package/docs/rules/naming-convention.md +300 -0
- package/docs/rules/no-anonymous-operations.md +39 -0
- package/docs/rules/no-case-insensitive-enum-values-duplicates.md +43 -0
- package/docs/rules/no-deprecated.md +85 -0
- package/docs/rules/no-duplicate-fields.md +65 -0
- package/docs/rules/no-fragment-cycles.md +17 -0
- package/docs/rules/no-hashtag-description.md +59 -0
- package/docs/rules/no-root-type.md +53 -0
- package/docs/rules/no-scalar-result-type-on-mutation.md +37 -0
- package/docs/rules/no-typename-prefix.md +39 -0
- package/docs/rules/no-undefined-variables.md +17 -0
- package/docs/rules/no-unreachable-types.md +49 -0
- package/docs/rules/no-unused-fields.md +62 -0
- package/docs/rules/no-unused-fragments.md +17 -0
- package/docs/rules/no-unused-variables.md +17 -0
- package/docs/rules/one-field-subscriptions.md +17 -0
- package/docs/rules/overlapping-fields-can-be-merged.md +17 -0
- package/docs/rules/possible-fragment-spread.md +17 -0
- package/docs/rules/possible-type-extension.md +15 -0
- package/docs/rules/provided-required-arguments.md +17 -0
- package/docs/rules/relay-arguments.md +57 -0
- package/docs/rules/relay-connection-types.md +42 -0
- package/docs/rules/relay-edge-types.md +56 -0
- package/docs/rules/relay-page-info.md +32 -0
- package/docs/rules/require-deprecation-date.md +57 -0
- package/docs/rules/require-deprecation-reason.md +47 -0
- package/docs/rules/require-description.md +115 -0
- package/docs/rules/require-field-of-type-query-in-mutation-result.md +47 -0
- package/docs/rules/require-id-when-available.md +88 -0
- package/docs/rules/scalar-leafs.md +17 -0
- package/docs/rules/selection-set-depth.md +76 -0
- package/docs/rules/strict-id-in-types.md +130 -0
- package/docs/rules/unique-argument-names.md +17 -0
- package/docs/rules/unique-directive-names-per-location.md +17 -0
- package/docs/rules/unique-directive-names.md +17 -0
- package/docs/rules/unique-enum-value-names.md +15 -0
- package/docs/rules/unique-field-definition-names.md +17 -0
- package/docs/rules/unique-fragment-name.md +51 -0
- package/docs/rules/unique-input-field-names.md +17 -0
- package/docs/rules/unique-operation-name.md +55 -0
- package/docs/rules/unique-operation-types.md +17 -0
- package/docs/rules/unique-type-names.md +17 -0
- package/docs/rules/unique-variable-names.md +17 -0
- package/docs/rules/value-literals-of-correct-type.md +17 -0
- package/docs/rules/variables-are-input-types.md +17 -0
- package/docs/rules/variables-in-allowed-position.md +17 -0
- package/package.json +1 -1
@@ -0,0 +1,59 @@
|
|
1
|
+
# `no-hashtag-description`
|
2
|
+
|
3
|
+
✅ The `"extends": "plugin:@graphql-eslint/schema-recommended"` property in a configuration file enables this rule.
|
4
|
+
|
5
|
+
💡 This rule provides [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions)
|
6
|
+
|
7
|
+
- Category: `Schema`
|
8
|
+
- Rule name: `@graphql-eslint/no-hashtag-description`
|
9
|
+
- Requires GraphQL Schema: `false` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
10
|
+
- Requires GraphQL Operations: `false` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
11
|
+
|
12
|
+
Requires to use `"""` or `"` for adding a GraphQL description instead of `#`.
|
13
|
+
Allows to use hashtag for comments, as long as it's not attached to an AST definition.
|
14
|
+
|
15
|
+
## Usage Examples
|
16
|
+
|
17
|
+
### Incorrect
|
18
|
+
|
19
|
+
```graphql
|
20
|
+
# eslint @graphql-eslint/no-hashtag-description: 'error'
|
21
|
+
|
22
|
+
# Represents a user
|
23
|
+
type User {
|
24
|
+
id: ID!
|
25
|
+
name: String
|
26
|
+
}
|
27
|
+
```
|
28
|
+
|
29
|
+
### Correct
|
30
|
+
|
31
|
+
```graphql
|
32
|
+
# eslint @graphql-eslint/no-hashtag-description: 'error'
|
33
|
+
|
34
|
+
" Represents a user "
|
35
|
+
type User {
|
36
|
+
id: ID!
|
37
|
+
name: String
|
38
|
+
}
|
39
|
+
```
|
40
|
+
|
41
|
+
### Correct
|
42
|
+
|
43
|
+
```graphql
|
44
|
+
# eslint @graphql-eslint/no-hashtag-description: 'error'
|
45
|
+
|
46
|
+
# This file defines the basic User type.
|
47
|
+
# This comment is valid because it's not attached specifically to an AST object.
|
48
|
+
|
49
|
+
" Represents a user "
|
50
|
+
type User {
|
51
|
+
id: ID! # This one is also valid, since it comes after the AST object
|
52
|
+
name: String
|
53
|
+
}
|
54
|
+
```
|
55
|
+
|
56
|
+
## Resources
|
57
|
+
|
58
|
+
- [Rule source](../../packages/plugin/src/rules/no-hashtag-description.ts)
|
59
|
+
- [Test source](../../packages/plugin/tests/no-hashtag-description.spec.ts)
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# `no-root-type`
|
2
|
+
|
3
|
+
💡 This rule provides [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions)
|
4
|
+
|
5
|
+
- Category: `Schema`
|
6
|
+
- Rule name: `@graphql-eslint/no-root-type`
|
7
|
+
- Requires GraphQL Schema: `true` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
8
|
+
- Requires GraphQL Operations: `false` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
9
|
+
|
10
|
+
Disallow using root types `mutation` and/or `subscription`.
|
11
|
+
|
12
|
+
## Usage Examples
|
13
|
+
|
14
|
+
### Incorrect
|
15
|
+
|
16
|
+
```graphql
|
17
|
+
# eslint @graphql-eslint/no-root-type: ['error', { disallow: ['mutation', 'subscription'] }]
|
18
|
+
|
19
|
+
type Mutation {
|
20
|
+
createUser(input: CreateUserInput!): User!
|
21
|
+
}
|
22
|
+
```
|
23
|
+
|
24
|
+
### Correct
|
25
|
+
|
26
|
+
```graphql
|
27
|
+
# eslint @graphql-eslint/no-root-type: ['error', { disallow: ['mutation', 'subscription'] }]
|
28
|
+
|
29
|
+
type Query {
|
30
|
+
users: [User!]!
|
31
|
+
}
|
32
|
+
```
|
33
|
+
|
34
|
+
## Config Schema
|
35
|
+
|
36
|
+
The schema defines the following properties:
|
37
|
+
|
38
|
+
### `disallow` (array, required)
|
39
|
+
|
40
|
+
The elements of the array can contain the following enum values:
|
41
|
+
|
42
|
+
- `mutation`
|
43
|
+
- `subscription`
|
44
|
+
|
45
|
+
Additional restrictions:
|
46
|
+
|
47
|
+
* Minimum items: `1`
|
48
|
+
* Unique items: `true`
|
49
|
+
|
50
|
+
## Resources
|
51
|
+
|
52
|
+
- [Rule source](../../packages/plugin/src/rules/no-root-type.ts)
|
53
|
+
- [Test source](../../packages/plugin/tests/no-root-type.spec.ts)
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# `no-scalar-result-type-on-mutation`
|
2
|
+
|
3
|
+
💡 This rule provides [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions)
|
4
|
+
|
5
|
+
- Category: `Schema`
|
6
|
+
- Rule name: `@graphql-eslint/no-scalar-result-type-on-mutation`
|
7
|
+
- Requires GraphQL Schema: `true` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
8
|
+
- Requires GraphQL Operations: `false` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
9
|
+
|
10
|
+
Avoid scalar result type on mutation type to make sure to return a valid state.
|
11
|
+
|
12
|
+
## Usage Examples
|
13
|
+
|
14
|
+
### Incorrect
|
15
|
+
|
16
|
+
```graphql
|
17
|
+
# eslint @graphql-eslint/no-scalar-result-type-on-mutation: 'error'
|
18
|
+
|
19
|
+
type Mutation {
|
20
|
+
createUser: Boolean
|
21
|
+
}
|
22
|
+
```
|
23
|
+
|
24
|
+
### Correct
|
25
|
+
|
26
|
+
```graphql
|
27
|
+
# eslint @graphql-eslint/no-scalar-result-type-on-mutation: 'error'
|
28
|
+
|
29
|
+
type Mutation {
|
30
|
+
createUser: User!
|
31
|
+
}
|
32
|
+
```
|
33
|
+
|
34
|
+
## Resources
|
35
|
+
|
36
|
+
- [Rule source](../../packages/plugin/src/rules/no-scalar-result-type-on-mutation.ts)
|
37
|
+
- [Test source](../../packages/plugin/tests/no-scalar-result-type-on-mutation.spec.ts)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# `no-typename-prefix`
|
2
|
+
|
3
|
+
✅ The `"extends": "plugin:@graphql-eslint/schema-recommended"` property in a configuration file enables this rule.
|
4
|
+
|
5
|
+
💡 This rule provides [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions)
|
6
|
+
|
7
|
+
- Category: `Schema`
|
8
|
+
- Rule name: `@graphql-eslint/no-typename-prefix`
|
9
|
+
- Requires GraphQL Schema: `false` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
10
|
+
- Requires GraphQL Operations: `false` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
11
|
+
|
12
|
+
Enforces users to avoid using the type name in a field name while defining your schema.
|
13
|
+
|
14
|
+
## Usage Examples
|
15
|
+
|
16
|
+
### Incorrect
|
17
|
+
|
18
|
+
```graphql
|
19
|
+
# eslint @graphql-eslint/no-typename-prefix: 'error'
|
20
|
+
|
21
|
+
type User {
|
22
|
+
userId: ID!
|
23
|
+
}
|
24
|
+
```
|
25
|
+
|
26
|
+
### Correct
|
27
|
+
|
28
|
+
```graphql
|
29
|
+
# eslint @graphql-eslint/no-typename-prefix: 'error'
|
30
|
+
|
31
|
+
type User {
|
32
|
+
id: ID!
|
33
|
+
}
|
34
|
+
```
|
35
|
+
|
36
|
+
## Resources
|
37
|
+
|
38
|
+
- [Rule source](../../packages/plugin/src/rules/no-typename-prefix.ts)
|
39
|
+
- [Test source](../../packages/plugin/tests/no-typename-prefix.spec.ts)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# `no-undefined-variables`
|
2
|
+
|
3
|
+
✅ The `"extends": "plugin:@graphql-eslint/operations-recommended"` property in a configuration file enables this rule.
|
4
|
+
|
5
|
+
- Category: `Operations`
|
6
|
+
- Rule name: `@graphql-eslint/no-undefined-variables`
|
7
|
+
- Requires GraphQL Schema: `true` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
8
|
+
- Requires GraphQL Operations: `true` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
9
|
+
|
10
|
+
A GraphQL operation is only valid if all variables encountered, both directly and via fragment spreads, are defined by that operation.
|
11
|
+
|
12
|
+
> This rule is a wrapper around a `graphql-js` validation function.
|
13
|
+
|
14
|
+
## Resources
|
15
|
+
|
16
|
+
- [Rule source](https://github.com/graphql/graphql-js/blob/main/src/validation/rules/NoUndefinedVariablesRule.ts)
|
17
|
+
- [Test source](https://github.com/graphql/graphql-js/tree/main/src/validation/__tests__/NoUndefinedVariablesRule-test.ts)
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# `no-unreachable-types`
|
2
|
+
|
3
|
+
✅ The `"extends": "plugin:@graphql-eslint/schema-recommended"` property in a configuration file enables this rule.
|
4
|
+
|
5
|
+
💡 This rule provides [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions)
|
6
|
+
|
7
|
+
- Category: `Schema`
|
8
|
+
- Rule name: `@graphql-eslint/no-unreachable-types`
|
9
|
+
- Requires GraphQL Schema: `true` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
10
|
+
- Requires GraphQL Operations: `false` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
11
|
+
|
12
|
+
Requires all types to be reachable at some level by root level fields.
|
13
|
+
|
14
|
+
## Usage Examples
|
15
|
+
|
16
|
+
### Incorrect
|
17
|
+
|
18
|
+
```graphql
|
19
|
+
# eslint @graphql-eslint/no-unreachable-types: 'error'
|
20
|
+
|
21
|
+
type User {
|
22
|
+
id: ID!
|
23
|
+
name: String
|
24
|
+
}
|
25
|
+
|
26
|
+
type Query {
|
27
|
+
me: String
|
28
|
+
}
|
29
|
+
```
|
30
|
+
|
31
|
+
### Correct
|
32
|
+
|
33
|
+
```graphql
|
34
|
+
# eslint @graphql-eslint/no-unreachable-types: 'error'
|
35
|
+
|
36
|
+
type User {
|
37
|
+
id: ID!
|
38
|
+
name: String
|
39
|
+
}
|
40
|
+
|
41
|
+
type Query {
|
42
|
+
me: User
|
43
|
+
}
|
44
|
+
```
|
45
|
+
|
46
|
+
## Resources
|
47
|
+
|
48
|
+
- [Rule source](../../packages/plugin/src/rules/no-unreachable-types.ts)
|
49
|
+
- [Test source](../../packages/plugin/tests/no-unreachable-types.spec.ts)
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# `no-unused-fields`
|
2
|
+
|
3
|
+
💡 This rule provides [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions)
|
4
|
+
|
5
|
+
- Category: `Schema`
|
6
|
+
- Rule name: `@graphql-eslint/no-unused-fields`
|
7
|
+
- Requires GraphQL Schema: `true` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
8
|
+
- Requires GraphQL Operations: `true` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
9
|
+
|
10
|
+
Requires all fields to be used at some level by siblings operations.
|
11
|
+
|
12
|
+
## Usage Examples
|
13
|
+
|
14
|
+
### Incorrect
|
15
|
+
|
16
|
+
```graphql
|
17
|
+
# eslint @graphql-eslint/no-unused-fields: 'error'
|
18
|
+
|
19
|
+
type User {
|
20
|
+
id: ID!
|
21
|
+
name: String
|
22
|
+
someUnusedField: String
|
23
|
+
}
|
24
|
+
|
25
|
+
type Query {
|
26
|
+
me: User
|
27
|
+
}
|
28
|
+
|
29
|
+
query {
|
30
|
+
me {
|
31
|
+
id
|
32
|
+
name
|
33
|
+
}
|
34
|
+
}
|
35
|
+
```
|
36
|
+
|
37
|
+
### Correct
|
38
|
+
|
39
|
+
```graphql
|
40
|
+
# eslint @graphql-eslint/no-unused-fields: 'error'
|
41
|
+
|
42
|
+
type User {
|
43
|
+
id: ID!
|
44
|
+
name: String
|
45
|
+
}
|
46
|
+
|
47
|
+
type Query {
|
48
|
+
me: User
|
49
|
+
}
|
50
|
+
|
51
|
+
query {
|
52
|
+
me {
|
53
|
+
id
|
54
|
+
name
|
55
|
+
}
|
56
|
+
}
|
57
|
+
```
|
58
|
+
|
59
|
+
## Resources
|
60
|
+
|
61
|
+
- [Rule source](../../packages/plugin/src/rules/no-unused-fields.ts)
|
62
|
+
- [Test source](../../packages/plugin/tests/no-unused-fields.spec.ts)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# `no-unused-fragments`
|
2
|
+
|
3
|
+
✅ The `"extends": "plugin:@graphql-eslint/operations-recommended"` property in a configuration file enables this rule.
|
4
|
+
|
5
|
+
- Category: `Operations`
|
6
|
+
- Rule name: `@graphql-eslint/no-unused-fragments`
|
7
|
+
- Requires GraphQL Schema: `true` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
8
|
+
- Requires GraphQL Operations: `true` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
9
|
+
|
10
|
+
A GraphQL document is only valid if all fragment definitions are spread within operations, or spread within other fragments spread within operations.
|
11
|
+
|
12
|
+
> This rule is a wrapper around a `graphql-js` validation function.
|
13
|
+
|
14
|
+
## Resources
|
15
|
+
|
16
|
+
- [Rule source](https://github.com/graphql/graphql-js/blob/main/src/validation/rules/NoUnusedFragmentsRule.ts)
|
17
|
+
- [Test source](https://github.com/graphql/graphql-js/tree/main/src/validation/__tests__/NoUnusedFragmentsRule-test.ts)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# `no-unused-variables`
|
2
|
+
|
3
|
+
✅ The `"extends": "plugin:@graphql-eslint/operations-recommended"` property in a configuration file enables this rule.
|
4
|
+
|
5
|
+
- Category: `Operations`
|
6
|
+
- Rule name: `@graphql-eslint/no-unused-variables`
|
7
|
+
- Requires GraphQL Schema: `true` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
8
|
+
- Requires GraphQL Operations: `true` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
9
|
+
|
10
|
+
A GraphQL operation is only valid if all variables defined by an operation are used, either directly or within a spread fragment.
|
11
|
+
|
12
|
+
> This rule is a wrapper around a `graphql-js` validation function.
|
13
|
+
|
14
|
+
## Resources
|
15
|
+
|
16
|
+
- [Rule source](https://github.com/graphql/graphql-js/blob/main/src/validation/rules/NoUnusedVariablesRule.ts)
|
17
|
+
- [Test source](https://github.com/graphql/graphql-js/tree/main/src/validation/__tests__/NoUnusedVariablesRule-test.ts)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# `one-field-subscriptions`
|
2
|
+
|
3
|
+
✅ The `"extends": "plugin:@graphql-eslint/operations-recommended"` property in a configuration file enables this rule.
|
4
|
+
|
5
|
+
- Category: `Operations`
|
6
|
+
- Rule name: `@graphql-eslint/one-field-subscriptions`
|
7
|
+
- Requires GraphQL Schema: `true` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
8
|
+
- Requires GraphQL Operations: `false` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
9
|
+
|
10
|
+
A GraphQL subscription is valid only if it contains a single root field.
|
11
|
+
|
12
|
+
> This rule is a wrapper around a `graphql-js` validation function.
|
13
|
+
|
14
|
+
## Resources
|
15
|
+
|
16
|
+
- [Rule source](https://github.com/graphql/graphql-js/blob/main/src/validation/rules/SingleFieldSubscriptionsRule.ts)
|
17
|
+
- [Test source](https://github.com/graphql/graphql-js/tree/main/src/validation/__tests__/SingleFieldSubscriptionsRule-test.ts)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# `overlapping-fields-can-be-merged`
|
2
|
+
|
3
|
+
✅ The `"extends": "plugin:@graphql-eslint/operations-recommended"` property in a configuration file enables this rule.
|
4
|
+
|
5
|
+
- Category: `Operations`
|
6
|
+
- Rule name: `@graphql-eslint/overlapping-fields-can-be-merged`
|
7
|
+
- Requires GraphQL Schema: `true` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
8
|
+
- Requires GraphQL Operations: `false` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
9
|
+
|
10
|
+
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.
|
11
|
+
|
12
|
+
> This rule is a wrapper around a `graphql-js` validation function.
|
13
|
+
|
14
|
+
## Resources
|
15
|
+
|
16
|
+
- [Rule source](https://github.com/graphql/graphql-js/blob/main/src/validation/rules/OverlappingFieldsCanBeMergedRule.ts)
|
17
|
+
- [Test source](https://github.com/graphql/graphql-js/tree/main/src/validation/__tests__/OverlappingFieldsCanBeMergedRule-test.ts)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# `possible-fragment-spread`
|
2
|
+
|
3
|
+
✅ The `"extends": "plugin:@graphql-eslint/operations-recommended"` property in a configuration file enables this rule.
|
4
|
+
|
5
|
+
- Category: `Operations`
|
6
|
+
- Rule name: `@graphql-eslint/possible-fragment-spread`
|
7
|
+
- Requires GraphQL Schema: `true` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
8
|
+
- Requires GraphQL Operations: `false` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
9
|
+
|
10
|
+
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.
|
11
|
+
|
12
|
+
> This rule is a wrapper around a `graphql-js` validation function.
|
13
|
+
|
14
|
+
## Resources
|
15
|
+
|
16
|
+
- [Rule source](https://github.com/graphql/graphql-js/blob/main/src/validation/rules/PossibleFragmentSpreadsRule.ts)
|
17
|
+
- [Test source](https://github.com/graphql/graphql-js/tree/main/src/validation/__tests__/PossibleFragmentSpreadsRule-test.ts)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# `possible-type-extension`
|
2
|
+
|
3
|
+
- Category: `Schema`
|
4
|
+
- Rule name: `@graphql-eslint/possible-type-extension`
|
5
|
+
- Requires GraphQL Schema: `true` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
6
|
+
- Requires GraphQL Operations: `false` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
7
|
+
|
8
|
+
A type extension is only valid if the type is defined and has the same kind.
|
9
|
+
|
10
|
+
> This rule is a wrapper around a `graphql-js` validation function.
|
11
|
+
|
12
|
+
## Resources
|
13
|
+
|
14
|
+
- [Rule source](https://github.com/graphql/graphql-js/blob/main/src/validation/rules/PossibleTypeExtensionsRule.ts)
|
15
|
+
- [Test source](https://github.com/graphql/graphql-js/tree/main/src/validation/__tests__/PossibleTypeExtensionsRule-test.ts)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# `provided-required-arguments`
|
2
|
+
|
3
|
+
✅ The `"extends": "plugin:@graphql-eslint/schema-recommended"` and `"plugin:@graphql-eslint/operations-recommended"` property in a configuration file enables this rule.
|
4
|
+
|
5
|
+
- Category: `Schema & Operations`
|
6
|
+
- Rule name: `@graphql-eslint/provided-required-arguments`
|
7
|
+
- Requires GraphQL Schema: `true` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
8
|
+
- Requires GraphQL Operations: `false` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
9
|
+
|
10
|
+
A field or directive is only valid if all required (non-null without a default value) field arguments have been provided.
|
11
|
+
|
12
|
+
> This rule is a wrapper around a `graphql-js` validation function.
|
13
|
+
|
14
|
+
## Resources
|
15
|
+
|
16
|
+
- [Rule source](https://github.com/graphql/graphql-js/blob/main/src/validation/rules/ProvidedRequiredArgumentsRule.ts)
|
17
|
+
- [Test source](https://github.com/graphql/graphql-js/tree/main/src/validation/__tests__/ProvidedRequiredArgumentsRule-test.ts)
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# `relay-arguments`
|
2
|
+
|
3
|
+
- Category: `Schema`
|
4
|
+
- Rule name: `@graphql-eslint/relay-arguments`
|
5
|
+
- Requires GraphQL Schema: `false` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
6
|
+
- Requires GraphQL Operations: `false` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
7
|
+
|
8
|
+
Set of rules to follow Relay specification for Arguments.
|
9
|
+
|
10
|
+
- A field that returns a Connection type must include forward pagination arguments (`first` and `after`), backward pagination arguments (`last` and `before`), or both
|
11
|
+
|
12
|
+
Forward pagination arguments
|
13
|
+
|
14
|
+
- `first` takes a non-negative integer
|
15
|
+
- `after` takes the Cursor type
|
16
|
+
|
17
|
+
Backward pagination arguments
|
18
|
+
|
19
|
+
- `last` takes a non-negative integer
|
20
|
+
- `before` takes the Cursor type
|
21
|
+
|
22
|
+
## Usage Examples
|
23
|
+
|
24
|
+
### Incorrect
|
25
|
+
|
26
|
+
```graphql
|
27
|
+
# eslint @graphql-eslint/relay-arguments: 'error'
|
28
|
+
|
29
|
+
type User {
|
30
|
+
posts: PostConnection
|
31
|
+
}
|
32
|
+
```
|
33
|
+
|
34
|
+
### Correct
|
35
|
+
|
36
|
+
```graphql
|
37
|
+
# eslint @graphql-eslint/relay-arguments: 'error'
|
38
|
+
|
39
|
+
type User {
|
40
|
+
posts(after: String, first: Int, before: String, last: Int): PostConnection
|
41
|
+
}
|
42
|
+
```
|
43
|
+
|
44
|
+
## Config Schema
|
45
|
+
|
46
|
+
The schema defines the following properties:
|
47
|
+
|
48
|
+
### `includeBoth` (boolean)
|
49
|
+
|
50
|
+
Enforce including both forward and backward pagination arguments
|
51
|
+
|
52
|
+
Default: `true`
|
53
|
+
|
54
|
+
## Resources
|
55
|
+
|
56
|
+
- [Rule source](../../packages/plugin/src/rules/relay-arguments.ts)
|
57
|
+
- [Test source](../../packages/plugin/tests/relay-arguments.spec.ts)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# `relay-connection-types`
|
2
|
+
|
3
|
+
- Category: `Schema`
|
4
|
+
- Rule name: `@graphql-eslint/relay-connection-types`
|
5
|
+
- Requires GraphQL Schema: `false` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
6
|
+
- Requires GraphQL Operations: `false` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
7
|
+
|
8
|
+
Set of rules to follow Relay specification for Connection types.
|
9
|
+
|
10
|
+
- Any type whose name ends in "Connection" is considered by spec to be a `Connection type`
|
11
|
+
- Connection type must be an Object type
|
12
|
+
- Connection type must contain a field `edges` that return a list type that wraps an edge type
|
13
|
+
- Connection type must contain a field `pageInfo` that return a non-null `PageInfo` Object type
|
14
|
+
|
15
|
+
## Usage Examples
|
16
|
+
|
17
|
+
### Incorrect
|
18
|
+
|
19
|
+
```graphql
|
20
|
+
# eslint @graphql-eslint/relay-connection-types: 'error'
|
21
|
+
|
22
|
+
type UserPayload { # should be an Object type with `Connection` suffix
|
23
|
+
edges: UserEdge! # should return a list type
|
24
|
+
pageInfo: PageInfo # should return a non-null `PageInfo` Object type
|
25
|
+
}
|
26
|
+
```
|
27
|
+
|
28
|
+
### Correct
|
29
|
+
|
30
|
+
```graphql
|
31
|
+
# eslint @graphql-eslint/relay-connection-types: 'error'
|
32
|
+
|
33
|
+
type UserConnection {
|
34
|
+
edges: [UserEdge]
|
35
|
+
pageInfo: PageInfo!
|
36
|
+
}
|
37
|
+
```
|
38
|
+
|
39
|
+
## Resources
|
40
|
+
|
41
|
+
- [Rule source](../../packages/plugin/src/rules/relay-connection-types.ts)
|
42
|
+
- [Test source](../../packages/plugin/tests/relay-connection-types.spec.ts)
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# `relay-edge-types`
|
2
|
+
|
3
|
+
- Category: `Schema`
|
4
|
+
- Rule name: `@graphql-eslint/relay-edge-types`
|
5
|
+
- Requires GraphQL Schema: `true` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
6
|
+
- Requires GraphQL Operations: `false` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
7
|
+
|
8
|
+
Set of rules to follow Relay specification for Edge types.
|
9
|
+
|
10
|
+
- A type that is returned in list form by a connection type's `edges` field is considered by this spec to be an Edge type
|
11
|
+
- Edge type must be an Object type
|
12
|
+
- Edge type must contain a field `node` that return either Scalar, Enum, Object, Interface, Union, or a non-null wrapper around one of those types. Notably, this field cannot return a list
|
13
|
+
- Edge type must contain a field `cursor` that return either String, Scalar, or a non-null wrapper around one of those types
|
14
|
+
- Edge type name must end in "Edge" _(optional)_
|
15
|
+
- Edge type's field `node` must implement `Node` interface _(optional)_
|
16
|
+
- A list type should only wrap an edge type _(optional)_
|
17
|
+
|
18
|
+
## Usage Examples
|
19
|
+
|
20
|
+
### Correct
|
21
|
+
|
22
|
+
```graphql
|
23
|
+
# eslint @graphql-eslint/relay-edge-types: 'error'
|
24
|
+
|
25
|
+
type UserConnection {
|
26
|
+
edges: [UserEdge]
|
27
|
+
pageInfo: PageInfo!
|
28
|
+
}
|
29
|
+
```
|
30
|
+
|
31
|
+
## Config Schema
|
32
|
+
|
33
|
+
The schema defines the following properties:
|
34
|
+
|
35
|
+
### `withEdgeSuffix` (boolean)
|
36
|
+
|
37
|
+
Edge type name must end in "Edge".
|
38
|
+
|
39
|
+
Default: `true`
|
40
|
+
|
41
|
+
### `shouldImplementNode` (boolean)
|
42
|
+
|
43
|
+
Edge type's field `node` must implement `Node` interface.
|
44
|
+
|
45
|
+
Default: `true`
|
46
|
+
|
47
|
+
### `listTypeCanWrapOnlyEdgeType` (boolean)
|
48
|
+
|
49
|
+
A list type should only wrap an edge type.
|
50
|
+
|
51
|
+
Default: `true`
|
52
|
+
|
53
|
+
## Resources
|
54
|
+
|
55
|
+
- [Rule source](../../packages/plugin/src/rules/relay-edge-types.ts)
|
56
|
+
- [Test source](../../packages/plugin/tests/relay-edge-types.spec.ts)
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# `relay-page-info`
|
2
|
+
|
3
|
+
- Category: `Schema`
|
4
|
+
- Rule name: `@graphql-eslint/relay-page-info`
|
5
|
+
- Requires GraphQL Schema: `true` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
|
6
|
+
- Requires GraphQL Operations: `false` [ℹ️](../../README.md#extended-linting-rules-with-siblings-operations)
|
7
|
+
|
8
|
+
Set of rules to follow Relay specification for `PageInfo` object.
|
9
|
+
|
10
|
+
- `PageInfo` must be an Object type
|
11
|
+
- `PageInfo` must contain fields `hasPreviousPage` and `hasNextPage`, that return non-null Boolean
|
12
|
+
- `PageInfo` must contain fields `startCursor` and `endCursor`, that return either String or Scalar, which can be null if there are no results
|
13
|
+
|
14
|
+
## Usage Examples
|
15
|
+
|
16
|
+
### Correct
|
17
|
+
|
18
|
+
```graphql
|
19
|
+
# eslint @graphql-eslint/relay-page-info: 'error'
|
20
|
+
|
21
|
+
type PageInfo {
|
22
|
+
hasPreviousPage: Boolean!
|
23
|
+
hasNextPage: Boolean!
|
24
|
+
startCursor: String
|
25
|
+
endCursor: String
|
26
|
+
}
|
27
|
+
```
|
28
|
+
|
29
|
+
## Resources
|
30
|
+
|
31
|
+
- [Rule source](../../packages/plugin/src/rules/relay-page-info.ts)
|
32
|
+
- [Test source](../../packages/plugin/tests/relay-page-info.spec.ts)
|