@triggery/eslint-plugin
ESLint-плагин для Triggery: ловит неправильное использование createTrigger и API хуков, навязывает соглашения и держит файлы триггеров читабельными как спецификации. Поставляется с пресетами recommended и strict для flat-config ESLint 9.x.
Установка
Заголовок раздела «Установка»pnpm add -D @triggery/eslint-plugin eslint typescript npm install --save-dev @triggery/eslint-plugin eslint typescript yarn add --save-dev @triggery/eslint-plugin eslint typescript bun add -D @triggery/eslint-plugin eslint typescript Peer-зависимости: eslint >= 9.0.0, typescript >= 5.0.0.
Что внутри
Заголовок раздела «Что внутри»| Правило | Recommended | Strict | Auto-fix |
|---|---|---|---|
no-dynamic-id | error | error | — |
no-event-cascade | error | error | — |
hook-rules | error | error | — |
exhaustive-conditions | warn | error | — |
exhaustive-required | warn | error | — |
max-handler-size | warn (≤50) | error (≤30) | — |
max-ports-per-trigger | warn (≤12) | error (≤8) | — |
prefer-named-hook | off | warn (≥3) | — |
Быстрый пример
Заголовок раздела «Быстрый пример»Flat-config (ESLint 9.x):
eslint.config.js
import triggery from '@triggery/eslint-plugin';
export default [
triggery.configs.recommended,
// Or, dialled up:
// triggery.configs.strict,
];Выборочные правила:
import triggery from '@triggery/eslint-plugin';
export default [
{
plugins: { '@triggery': triggery },
rules: {
'@triggery/no-dynamic-id': 'error',
'@triggery/no-event-cascade': 'error',
'@triggery/max-handler-size': ['warn', { max: 40 }],
},
},
];Ключевые правила
Заголовок раздела «Ключевые правила»no-dynamic-id—createTrigger({ id })обязан быть строковым литералом. Id триггеров — это ключи реестра, метки в devtools и якоря в графе; они должны быть детерминированными.no-event-cascade— запрещаетuseEvent(...)внутри обработчикаuseAction(...). Каскады допустимы в рантайме, но писать их inline — значит прятать межтриггерный поток управления.hook-rules— framework-нейтральные rules-of-hooks дляuseEvent/useCondition/useAction/useInlineTrigger.exhaustive-conditions— для каждого имени вrequired: [...]есть соответствующийuseConditionв том же файле.exhaustive-required— каждый вызовcreateTrigger({...})должен содержать явный ключrequired:(используйrequired: [], если гейт не нужен).max-handler-size/max-ports-per-trigger— держи триггеры спецификационно-компактными; когда разрастаются — бери codemodextract-trigger.
Связанные пакеты
Заголовок раздела «Связанные пакеты» @triggery/core Рантайм, о котором знают эти правила.
@triggery/codemod extract-trigger / migrate-from-listener-middleware создают файлы триггеров, которые проверяет этот плагин.
@triggery/cli triggery lint оборачивает пресет recommended этого плагина.
@triggery/testing Статические проверки и рантайм-тесты — вместе.