| module.exports = { |
| root: true, |
| overrides: [ |
| { |
| files: ['*.ts'], |
| parser: '@typescript-eslint/parser', |
| parserOptions: { |
| ecmaVersion: 2021, |
| sourceType: 'module', |
| tsconfigRootDir: __dirname, |
| project: ['tsconfig.json'], |
| createDefaultProgram: true |
| }, |
| plugins: ['@typescript-eslint', 'jsdoc', 'import', 'unused-imports'], |
| extends: [ |
| 'plugin:@angular-eslint/recommended', |
| 'plugin:@angular-eslint/template/process-inline-templates', |
| 'plugin:prettier/recommended' |
| ], |
| rules: { |
| 'jsdoc/newline-after-description': 1, |
| '@angular-eslint/no-host-metadata-property': 'off', |
| '@typescript-eslint/no-explicit-any': 'error', |
| '@typescript-eslint/no-non-null-assertion': 'off', |
| '@typescript-eslint/array-type': [ |
| 'error', |
| { |
| default: 'array-simple' |
| } |
| ], |
| '@typescript-eslint/ban-types': [ |
| 'error', |
| { |
| types: { |
| Object: { |
| message: 'Use {} instead.' |
| }, |
| String: { |
| message: 'Use string instead.' |
| }, |
| Number: { |
| message: 'Use number instead.' |
| }, |
| Boolean: { |
| message: 'Use boolean instead.' |
| }, |
| Function: { |
| message: 'Use specific callable interface instead.' |
| } |
| } |
| } |
| ], |
| '@typescript-eslint/consistent-type-definitions': 'error', |
| '@typescript-eslint/explicit-member-accessibility': [ |
| 'off', |
| { |
| accessibility: 'explicit' |
| } |
| ], |
| '@typescript-eslint/no-floating-promises': 'off', |
| '@typescript-eslint/no-for-in-array': 'error', |
| '@typescript-eslint/no-inferrable-types': [ |
| 'error', |
| { |
| ignoreParameters: true, |
| ignoreProperties: true |
| } |
| ], |
| '@typescript-eslint/no-this-alias': 'error', |
| '@typescript-eslint/naming-convention': 'off', |
| '@typescript-eslint/no-unused-expressions': 'off', |
| '@typescript-eslint/explicit-function-return-type': [ |
| 'error', |
| { |
| allowExpressions: true, |
| allowConciseArrowFunctionExpressionsStartingWithVoid: true |
| } |
| ], |
| 'prefer-arrow/prefer-arrow-functions': 'off', |
| 'unused-imports/no-unused-imports': 'error', |
| 'import/no-duplicates': 'error', |
| 'import/no-unused-modules': 'error', |
| 'import/no-unassigned-import': ['error', { allow: ['@angular/localize/init', 'zone.js', 'zone.js/**'] }], |
| 'import/order': [ |
| 'error', |
| { |
| alphabetize: { |
| order: 'asc', |
| caseInsensitive: false |
| }, |
| 'newlines-between': 'always', |
| groups: ['external', 'builtin', 'internal', ['parent', 'sibling', 'index']], |
| pathGroups: [ |
| { |
| pattern: '{@angular/**,rxjs,rxjs/operators}', |
| group: 'external', |
| position: 'before' |
| }, |
| { |
| pattern: '{services,interfaces,utils,config}', |
| group: 'internal', |
| position: 'before' |
| } |
| ], |
| pathGroupsExcludedImportTypes: [] |
| } |
| ], |
| 'no-empty-function': 'off', |
| 'no-unused-expressions': 'error', |
| 'no-use-before-define': 'off', |
| 'no-bitwise': 'off', |
| 'no-duplicate-imports': 'error', |
| 'no-invalid-this': 'off', |
| 'no-irregular-whitespace': 'error', |
| 'no-magic-numbers': 'off', |
| 'no-multiple-empty-lines': 'error', |
| 'no-redeclare': 'off', |
| 'no-underscore-dangle': 'off', |
| 'no-sparse-arrays': 'error', |
| 'no-template-curly-in-string': 'off', |
| 'prefer-object-spread': 'error', |
| 'prefer-template': 'error', |
| yoda: 'error' |
| } |
| }, |
| { |
| files: ['*.html'], |
| extends: ['plugin:@angular-eslint/template/recommended'], |
| rules: {} |
| }, |
| { |
| files: ['*.html'], |
| excludedFiles: ['*inline-template-*.component.html'], |
| extends: ['plugin:prettier/recommended'], |
| rules: { |
| 'prettier/prettier': [ |
| 'error', |
| { |
| parser: 'angular' |
| } |
| ] |
| } |
| } |
| ] |
| }; |