1
0
mirror of https://github.com/matrix-org/matrix-authentication-service.git synced 2025-07-06 05:42:30 +03:00
Files
authentication-service/frontend/.eslintrc.cjs
2023-06-20 16:53:53 +02:00

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"],
},
},
],
},
},
],
};