@application-kit/lint-config
v0.5.1
Published
Пресет ESLint приложения на пакетах @application-kit: flat-config с границами слоёв, разрешёнными подпутями пакетов и запретами UI-вендора
Readme
@application-kit/lint-config
Пресет ESLint приложения на пакетах @application-kit: flat-config — база @libs-for-dev/eslint-rules, общестековые
настройки, разрешённые подпути пакетов, запреты UI-вендора и границы слоёв по раскладке приложения. Списков и путей
продукта в пакете нет: модуль-оболочку и путь словаря ролей приложение передаёт параметрами, игноры своих каталогов и
свои правила дописывает после пресета.
Установка
yarn add --dev @application-kit/lint-configPeer-зависимости: eslint, @libs-for-dev/eslint-rules. Пакет только ESM: его грузит ESM-конфиг eslint.config.ts.
Входы
| Вход | Для чего | Тянет |
|------|----------|-------|
| @application-kit/lint-config | defineApplicationEslintConfig, defineRestrictedImportBlocks, ApplicationEslintConfigOptionsInterface | @libs-for-dev/eslint-rules, @application-kit/ui/lint |
ESLint
import { defineApplicationEslintConfig } from '@application-kit/lint-config'
export default [
...defineApplicationEslintConfig({ roleDictionary: '@/libs/shared/role', shellModule: 'client' }),
{ ignores: ['docs/', 'ops/static/'] },
]Порядок блоков: база configs.* → общестековые настройки (complexity 7, allow-list import-x/no-internal-modules,
.vue, миграции, shared/, спеки, мапперы и DTO, ключи tsconfig.json) → границы слоёв → порядок mutate в
stryker.conf.json. Блоки продукта идут после пресета. Плоский конфиг заменяет правило целиком: правило, которое пресет
уже задаёт тем же файлам, приложение переопределяет полным набором опций.
Границы слоёв (defineRestrictedImportBlocks) — набор запретов на область; следующий блок заменяет набор предыдущего
для своих файлов, поэтому порядок блоков — часть правила:
| Область | Запреты no-restricted-imports |
|---------|---------------------------------|
| src/modules/*/** кроме оболочки | внутренности оболочки, второй путь словаря ролей, вендор, внутренности субмодулей |
| src/modules/*/modules/** | то же без внутренностей субмодулей: изнутри субмодуля можно |
| src/libs/** | импорт модулей, вендор, vue-i18n |
| src/modules/<оболочка>/** | второй путь словаря ролей, вендор, vue-i18n |
| src/**/*.vue | классы вендора — правилом vue/no-restricted-class |
| src/modules/**/user-interface/client/** | набор корня модуля и серверный GraphQL-класс |
| src/modules/<оболочка>/user-interface/** | набор оболочки, внутренности субмодулей и серверный GraphQL-класс |
Каждый запрет держит два якоря — алиас @/… и относительную форму того же пути. shellModule — имя папки в
kebab-case, roleDictionary — путь вида @/<полка>/<путь> из таких имён; иное значение роняет сборку конфига.
Allow-list подпутей @application-kit/* спека пакета сверяет с exports пакетов монорепы в обе стороны: новый вход
пакета без записи и запись без входа краснеют в CI монорепы.
Вендор
Шаблоны вендора — строка импорта, CSS-класс, разрешённые подпути — и имена обёрток полей для
vuejs-accessibility/label-has-for пресет берёт из @application-kit/ui/lint. Смена вендора — релиз ui: конфиг
приложения не меняется.
