// @ts-check const eslint = require('@eslint/js'); const tseslint = require('typescript-eslint'); const angular = require('angular-eslint'); const eslintConfigPrettier = require('eslint-config-prettier'); const unusedImports = require('eslint-plugin-unused-imports'); const perfectionist = require('eslint-plugin-perfectionist'); module.exports = tseslint.config( { files: ['**/*.ts'], extends: [ eslint.configs.recommended, ...tseslint.configs.recommended, ...tseslint.configs.stylistic, ...angular.configs.tsRecommended, eslintConfigPrettier, ], languageOptions: { parserOptions: { project: './tsconfig.json', // <-- REQUIRED tsconfigRootDir: __dirname, }, }, processor: angular.processInlineTemplates, plugins: { unusedImports: unusedImports, perfectionist: perfectionist, }, rules: { '@angular-eslint/directive-selector': [ 'error', { type: 'attribute', prefix: 'app', style: 'camelCase', }, ], '@angular-eslint/component-selector': [ 'error', { type: 'element', prefix: 'app', style: 'kebab-case', }, ], '@angular-eslint/prefer-inject': 'error', '@/lines-between-class-members': [ 'error', 'always', { exceptAfterSingleLine: true, }, ], 'no-duplicate-imports': 'error', '@typescript-eslint/no-explicit-any': ['error'], 'unusedImports/no-unused-imports': 'error', '@typescript-eslint/no-empty-function': 'off', '@typescript-eslint/no-deprecated': 'error', 'perfectionist/sort-imports': [ 'error', { type: 'natural', order: 'asc', }, ], }, }, { files: ['**/*.html'], extends: [ ...angular.configs.templateRecommended, // ...angular.configs.templateAccessibility, ], rules: {}, }, );