const { defineConfig } = require('eslint/config'); const expoConfig = require('eslint-config-expo/flat'); const boundaries = require('eslint-plugin-boundaries'); module.exports = defineConfig([ expoConfig, { ignores: ['dist/*', '.expo/*'], }, { files: ['src/**/*.{ts,tsx}', 'app/**/*.{ts,tsx}'], plugins: { boundaries }, settings: { 'import/resolver': { typescript: { project: './tsconfig.json' } }, 'boundaries/include': ['src/**/*', 'app/**/*'], 'boundaries/elements': [ { type: 'routes', pattern: 'app' }, { type: 'pages', pattern: 'src/pages/*', capture: ['slice'] }, { type: 'widgets', pattern: 'src/widgets/*', capture: ['slice'] }, { type: 'features', pattern: 'src/features/*', capture: ['slice'] }, { type: 'entities', pattern: 'src/entities/*', capture: ['slice'] }, { type: 'shared', pattern: 'src/shared/*', capture: ['segment'] }, ], }, rules: { 'boundaries/dependencies': ['error', { default: 'disallow', message: 'Слой {{from.type}} не может импортировать {{to.type}}', policies: [ { from: { element: { type: 'routes' } }, allow: { to: { element: { types: { anyOf: ['pages', 'widgets', 'features', 'entities', 'shared'] } } } }, }, { from: { element: { type: 'pages' } }, allow: { to: { element: { types: { anyOf: ['widgets', 'features', 'entities', 'shared'] } } } }, }, { from: { element: { type: 'widgets' } }, allow: { to: { element: { types: { anyOf: ['features', 'entities', 'shared'] } } } }, }, { from: { element: { type: 'features' } }, allow: { to: { element: { types: { anyOf: ['entities', 'shared'] } } } }, }, { from: { element: { type: 'entities' } }, allow: { to: { element: { type: 'shared' } } }, }, { from: { element: { type: 'entities' } }, allow: { to: { element: { type: 'entities', fileInternalPath: '@x/*.ts' } } }, }, { from: { element: { type: 'shared' } }, allow: { to: { element: { type: 'shared' } } }, }, { disallow: { to: { element: { types: { anyOf: ['pages', 'widgets', 'features', 'entities'] }, fileInternalPath: '!(index.ts|@x/*.ts)', }, }, }, message: 'Импортируйте слайс через public API, а не вглубь: {{dependency.source}}', }, ], }], 'boundaries/no-unknown-dependencies': ['warn', { require: 'element' }], }, }, ]);