init
This commit is contained in:
74
eslint.config.js
Normal file
74
eslint.config.js
Normal file
@@ -0,0 +1,74 @@
|
||||
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' }],
|
||||
},
|
||||
},
|
||||
]);
|
||||
Reference in New Issue
Block a user