import eslint from '@eslint/js';
import tseslint from 'typescript-eslint';
import importPlugin from 'eslint-plugin-import';
import unusedImports from 'eslint-plugin-unused-imports';
export default tseslint.config(
eslint.configs.recommended,
...tseslint.configs.recommended,
{
plugins: {
import: importPlugin,
'unused-imports': unusedImports,
},
rules: {
// Remove unused imports automatically
'unused-imports/no-unused-imports': 'error',
'unused-imports/no-unused-vars': [
'warn',
{
vars: 'all',
varsIgnorePattern: '^_',
args: 'after-used',
argsIgnorePattern: '^_',
},
],
// Import ordering and organization
'import/order': [
'error',
{
groups: [
'builtin', // Node.js built-in modules
'external', // npm packages
'internal', // Internal modules (configured via paths)
['parent', 'sibling'], // Parent and sibling imports
'index', // Index imports
'type', // Type imports
],
pathGroups: [
{
pattern: '@/**',
group: 'internal',
},
],
'newlines-between': 'always',
alphabetize: {
order: 'asc',
caseInsensitive: true,
},
distinctGroup: true,
},
],
// Ensure imports are at the top
'import/first': 'error',
// No duplicate imports
'import/no-duplicates': 'error',
// Newline after imports
'import/newline-after-import': 'error',
// Prefer named exports
'import/no-default-export': 'off',
// TypeScript specific
'@typescript-eslint/consistent-type-imports': [
'error',
{
prefer: 'type-imports',
disallowTypeAnnotations: false,
fixStyle: 'separate-type-imports',
},
],
},
settings: {
'import/resolver': {
typescript: true,
node: true,
},
},
},
{
ignores: ['dist/', 'node_modules/', '*.config.js'],
}
);