/** * eslint config * https://github.com/Sairyss/backend-best-practices#static-code-analysis */ module.exports = { parser: '@typescript-eslint/parser', parserOptions: { project: 'tsconfig.json', tsconfigRootDir: __dirname, sourceType: 'module', }, plugins: ['@typescript-eslint/eslint-plugin'], extends: [ 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended', ], root: true, env: { node: true, jest: true, }, ignorePatterns: ['.eslintrc.js'], rules: { '@typescript-eslint/interface-name-prefix': 'off', '@typescript-eslint/no-explicit-any': 'off', // TS errors '@typescript-eslint/no-misused-new': 'error', '@typescript-eslint/explicit-module-boundary-types': 'error', '@typescript-eslint/no-non-null-assertion': 'error', '@typescript-eslint/no-unused-vars': 'error', // Eslint off 'import/extensions': 'off', 'import/prefer-default-export': 'off', 'class-methods-use-this': 'off', 'no-useless-constructor': 'off', 'import/no-unresolved': 'off', 'no-control-regex': 'off', 'no-shadow': 'off', 'import/no-cycle': 'off', 'consistent-return': 'off', 'no-underscore-dangle': 'off', 'max-classes-per-file': 'off', // Eslint errors 'no-restricted-syntax': [ 'error', { selector: 'LabeledStatement', message: 'Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.', }, { selector: 'WithStatement', message: '`with` is disallowed in strict mode because it makes code impossible to predict and optimize.', }, { selector: "MethodDefinition[kind='set']", message: 'Property setters are not allowed', }, ], }, };