Messenger/packages/web/eslint.config.mjs
Заид Омар Медхат | Zaid Omar Medhat 62f20f8843 init
2026-07-10 13:31:12 +05:00

44 lines
1.4 KiB
JavaScript

import { base } from '../../eslint.config.mjs';
import boundaries from 'eslint-plugin-boundaries';
import reactHooks from 'eslint-plugin-react-hooks';
import globals from 'globals';
// Strict Feature-Sliced Design: a layer may import only from itself and the
// layers below it. Upward imports (e.g. shared → features) are build errors.
const FSD_LAYERS = ['app', 'pages', 'widgets', 'features', 'entities', 'shared'];
const fsdPolicies = FSD_LAYERS.map((layer, index) => ({
from: { element: { types: layer } },
allow: { to: { element: { types: { anyOf: FSD_LAYERS.slice(index) } } } },
}));
export default [
{ ignores: ['dist/**'] },
...base,
{
files: ['src/**/*.{ts,tsx}'],
languageOptions: {
globals: { ...globals.browser },
},
plugins: {
boundaries,
'react-hooks': reactHooks,
},
settings: {
'boundaries/include': ['src/**/*'],
'boundaries/elements': [
{ type: 'app', pattern: 'src/app/*' },
{ type: 'pages', pattern: 'src/pages/*' },
{ type: 'widgets', pattern: 'src/widgets/*' },
{ type: 'features', pattern: 'src/features/*' },
{ type: 'entities', pattern: 'src/entities/*' },
{ type: 'shared', pattern: 'src/shared/*' },
],
},
rules: {
'react-hooks/rules-of-hooks': 'error',
'react-hooks/exhaustive-deps': 'warn',
'boundaries/dependencies': ['error', { default: 'disallow', policies: fsdPolicies }],
},
},
];