You've already forked authentication-service
mirror of
https://github.com/matrix-org/matrix-authentication-service.git
synced 2025-07-06 05:42:30 +03:00
154 lines
4.6 KiB
JavaScript
154 lines
4.6 KiB
JavaScript
// Copyright 2022 The Matrix.org Foundation C.I.C.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
/** @type {import('eslint').Linter.Config} */
|
|
|
|
module.exports = {
|
|
ignorePatterns: [
|
|
"**/dist/**",
|
|
"**/__generated__/**",
|
|
"**/coverage/**",
|
|
"!.storybook",
|
|
"*/gql/*.ts",
|
|
],
|
|
overrides: [
|
|
// General rules for JS/TS files
|
|
{
|
|
extends: [
|
|
"plugin:prettier/recommended",
|
|
"plugin:import/recommended",
|
|
"plugin:import/typescript",
|
|
"plugin:matrix-org/typescript",
|
|
"plugin:matrix-org/react",
|
|
"plugin:matrix-org/a11y",
|
|
],
|
|
env: {
|
|
browser: true,
|
|
node: true,
|
|
es6: true,
|
|
},
|
|
plugins: ["jsx-a11y", "matrix-org"],
|
|
parserOptions: {
|
|
project: ["./tsconfig.node.json", "./tsconfig.json"],
|
|
warnOnUnsupportedTypeScriptVersion: false,
|
|
},
|
|
files: ["*.ts", "*.tsx", "*.cjs", "*.js"],
|
|
rules: {
|
|
"matrix-org/require-copyright-header": "error",
|
|
"import/order": [
|
|
"error",
|
|
{
|
|
"newlines-between": "always",
|
|
alphabetize: { order: "asc" },
|
|
},
|
|
],
|
|
},
|
|
settings: {
|
|
"import/resolver": {
|
|
typescript: true,
|
|
},
|
|
react: {
|
|
version: "detect",
|
|
},
|
|
},
|
|
},
|
|
|
|
// Processor to extract GraphQL operations embedded in TS files
|
|
{
|
|
files: ["*.tsx", "*.ts"],
|
|
processor: "@graphql-eslint/graphql",
|
|
},
|
|
|
|
// Validate the GraphQL schema
|
|
{
|
|
files: "./schema.graphql",
|
|
extends: [
|
|
"plugin:@graphql-eslint/schema-recommended",
|
|
"plugin:@graphql-eslint/relay",
|
|
"prettier",
|
|
"plugin:prettier/recommended",
|
|
],
|
|
rules: {
|
|
"@graphql-eslint/input-name": [
|
|
"error",
|
|
{ checkInputType: true, caseSensitiveInputType: false },
|
|
],
|
|
"@graphql-eslint/relay-edge-types": [
|
|
"error",
|
|
{
|
|
// We do have *some* fields without connections,
|
|
// and async-graphql's connections 'nodes' field break this anyway
|
|
listTypeCanWrapOnlyEdgeType: false,
|
|
},
|
|
],
|
|
|
|
"@graphql-eslint/strict-id-in-types": [
|
|
"error",
|
|
{
|
|
exceptions: {
|
|
// The '*Connection', '*Edge', '*Payload' and 'PageInfo' types don't have IDs
|
|
// XXX: Maybe the MatrixUser type should have an ID?
|
|
types: ["PageInfo", "MatrixUser"],
|
|
suffixes: ["Connection", "Edge", "Payload"],
|
|
},
|
|
},
|
|
],
|
|
|
|
// We need to disable this rule because of the 'username' field in the 'User' node
|
|
"@graphql-eslint/no-typename-prefix": "off",
|
|
|
|
// We need to disable this rule for object types,
|
|
// because the '*Connection' types lack descriptions
|
|
"@graphql-eslint/require-description": [
|
|
"error",
|
|
{
|
|
types: true,
|
|
ObjectTypeDefinition: false,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
|
|
// Validate the GraphQL operations
|
|
{
|
|
files: "./src/**/*.graphql",
|
|
extends: ["plugin:@graphql-eslint/operations-recommended"],
|
|
rules: {
|
|
"@graphql-eslint/known-fragment-names": "off",
|
|
"@graphql-eslint/no-unused-fragments": "off",
|
|
"@graphql-eslint/unused-arguments": "off",
|
|
"@graphql-eslint/known-directives": "off",
|
|
// This rule is copied from the 'operations-recommended' config,
|
|
// but without the 'Query' forbidden suffix on operations,
|
|
// since it directly clashes with the relay operation naming convention
|
|
"@graphql-eslint/naming-convention": [
|
|
"error",
|
|
{
|
|
VariableDefinition: "camelCase",
|
|
OperationDefinition: {
|
|
style: "PascalCase",
|
|
forbiddenPrefixes: ["Query", "Mutation", "Subscription", "Get"],
|
|
forbiddenSuffixes: [/* "Query", */ "Mutation", "Subscription"],
|
|
},
|
|
FragmentDefinition: {
|
|
forbiddenPrefixes: ["Fragment"],
|
|
forbiddenSuffixes: ["Fragment"],
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
],
|
|
};
|