refactor: enforce enum machine codes #18
Use owner enums for known codes; preserve wire values and unknown fallbacks. Verified npm ci and verify: 379 tests, 5 lint checks, app and Storybook builds.
This commit was merged in pull request #41.
This commit is contained in:
@@ -5,7 +5,8 @@
|
||||
- Сохраняй strict TS profile и `import type`. Для недоверенного значения используй
|
||||
`unknown` с narrowing; `any` не заменяет DTO/validation. Локальное исключение
|
||||
на нетипизированной boundary должно быть узким и объяснённым.
|
||||
- `enum` и `namespace` не используются: frontend имеет `erasableSyntaxOnly`.
|
||||
- Строковые `enum` используются для machine codes и protocol values.
|
||||
`namespace` не используется; tooling сохраняет `erasableSyntaxOnly`.
|
||||
Для состояния с разными payload выбирай discriminated union; не добавляй
|
||||
необязательные поля, допускающие невозможные комбинации.
|
||||
- Named components — const-valued `FC<Props>`; named props находятся рядом или
|
||||
@@ -33,19 +34,23 @@ Container/VM/view и state owners — в [UI](ui.md).
|
||||
|
||||
Общее правило ownership и символических значений —
|
||||
[Domain values](engineering.md#domain-values).
|
||||
Backend vocabulary бери из generated `paths`, не создавай ручную копию enum.
|
||||
Текущий `schema.d.ts` содержит только types: typed wire literals допустимы,
|
||||
когда generator не предоставляет runtime values.
|
||||
Backend vocabulary бери из generated `paths`; generated artifacts вручную не меняй.
|
||||
Для открытых `string` полей допускается локальный enum известных значений,
|
||||
используемых UI. Он не закрывает wire contract и сохраняет unknown fallback.
|
||||
Если generator предоставляет runtime enum, используй его.
|
||||
|
||||
`ProblemDetailsDto.code` сейчас `string`. Не объявляй закрытый frontend error
|
||||
enum и не превращай неизвестный code в известный через cast. Повторяющуюся
|
||||
`ProblemDetailsDto.code` сейчас `string`. `ApiErrorCode` перечисляет известные UI коды, а не закрывает wire contract.
|
||||
`apiErrorCode` сохраняет произвольную строку; `isApiErrorCode` проверяет известное
|
||||
значение без cast и сохраняет fallback для неизвестного кода. Повторяющуюся
|
||||
обработку своди у ответственного owner; [errors](data.md#errors).
|
||||
|
||||
`@typescript-eslint/no-magic-numbers` — error; fixtures/tests/stories исключены
|
||||
из этой дополнительной проверки. Policy получает имя и единицы; подавление допустимо для
|
||||
incidental value с объяснением. Обычный UI-текст не превращай в constant:
|
||||
его owner — [i18n](ui.md#строки-и-валидация).
|
||||
Semantic magic strings и props profile требуют review.
|
||||
`no-restricted-syntax` запрещает inline machine codes и protocol values в production;
|
||||
`no-unsafe-enum-comparison` проверяет сравнения enum. Fixtures/stories сохраняют
|
||||
literal wire values. Новые vocabularies и props profile требуют review.
|
||||
|
||||
## Проверка
|
||||
|
||||
|
||||
Reference in New Issue
Block a user