| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 | const prettierConfig = require('./.prettierrc.js');module.exports = {  root: true,  parserOptions: { ecmaVersion: 2021 },  overrides: [    {      files: ['*.ts'],      parser: '@typescript-eslint/parser',      parserOptions: {        tsconfigRootDir: __dirname,        project: ['tsconfig.json'],        createDefaultProgram: true      },      plugins: ['@typescript-eslint', 'jsdoc', 'import'],      extends: [        'plugin:@angular-eslint/recommended',        'plugin:@angular-eslint/template/process-inline-templates',        'plugin:prettier/recommended'      ],      rules: {        'prettier/prettier': ['error', prettierConfig],        'jsdoc/newline-after-description': 1,        '@angular-eslint/component-class-suffix': [          'error',          {            suffixes: ['Directive', 'Component', 'Base', 'Widget']          }        ],        '@angular-eslint/directive-class-suffix': [          'error',          {            suffixes: ['Directive', 'Component', 'Base', 'Widget']          }        ],        '@angular-eslint/component-selector': [          'off',          {            type: ['element', 'attribute'],            prefix: ['app', 'test'],            style: 'kebab-case'          }        ],        '@angular-eslint/directive-selector': [          'off',          {            type: 'attribute',            prefix: ['app']          }        ],        '@angular-eslint/no-attribute-decorator': 'error',        '@angular-eslint/no-conflicting-lifecycle': 'off',        '@angular-eslint/no-forward-ref': 'off',        '@angular-eslint/no-host-metadata-property': 'off',        '@angular-eslint/no-lifecycle-call': 'off',        '@angular-eslint/no-pipe-impure': 'error',        '@angular-eslint/prefer-output-readonly': 'error',        '@angular-eslint/use-component-selector': 'off',        '@angular-eslint/use-component-view-encapsulation': 'off',        '@angular-eslint/no-input-rename': 'off',        '@angular-eslint/no-output-native': 'off',        '@typescript-eslint/array-type': [          'error',          {            default: 'array-simple'          }        ],        '@typescript-eslint/ban-types': [          'off',          {            types: {              String: {                message: 'Use string instead.'              },              Number: {                message: 'Use number instead.'              },              Boolean: {                message: 'Use boolean instead.'              },              Function: {                message: 'Use specific callable interface instead.'              }            }          }        ],        'import/no-duplicates': 'error',        'import/no-unused-modules': 'error',        'import/no-unassigned-import': 'error',        'import/order': [          'error',          {            alphabetize: { order: 'asc', caseInsensitive: false },            'newlines-between': 'always',            groups: ['external', 'internal', ['parent', 'sibling', 'index']],            pathGroups: [],            pathGroupsExcludedImportTypes: []          }        ],        '@typescript-eslint/no-this-alias': 'error',        '@typescript-eslint/member-ordering': 'off',        'no-irregular-whitespace': 'error',        'no-multiple-empty-lines': 'error',        'no-sparse-arrays': 'error',        'prefer-object-spread': 'error',        'prefer-template': 'error',        'prefer-const': 'off',        'max-len': 'off'      }    },    {      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' }],        '@angular-eslint/template/eqeqeq': 'off'      }    }  ]};
 |