Sergey Krylov a13b5145f7
Some checks failed
CI / ci (pull_request) Failing after 3m32s
CI / ci (push) Failing after 2m50s
docs(frontend): align tooling spec with implementation
2026-06-23 21:30:11 +03:00

88 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Frontend Infrastructure Tooling
## Purpose
Модернизировать инструментарий и инфраструктуру фронтенда: ускорить разработку, улучшить типобезопасность, убрать дублирование, дать возможность разрабатывать UI без запущенного бэкенда.
## Requirements
### 1. MSW Browser Mode
Фронтенд должен иметь возможность запускаться без бэкенда при `VITE_API_MOCK=true`.
- Создать browser entry для MSW (apps/frontend/mocks/browser.ts с setupWorker)
- Развернуть mockServiceWorker.js в public/
- Переиспользовать существующие MSW handlers (apps/frontend/mocks/handlers.ts) — не дублировать
- При VITE_API_MOCK=true в dev-режиме все API-запросы перехватываются MSW
- При VITE_API_MOCK=false или отсутствии — поведение не меняется (запросы идут в реальный API)
### 2. Biome вместо ESLint + Prettier
Заменить ESLint 8 + Prettier на Biome как единый инструмент линтинга и форматирования.
- Удалить .eslintrc.cjs, зависимости eslint, prettier
- Установить @biomejs/biome с конфигом biome.json
- Перенести существующие правила ESLint (no-unused-vars, no-restricted-imports, FSD layer boundaries)
- Заменить npm-скрипт lint на biome check
- Обновить pre-commit hook и CI
- Если FSD-правила @conarti/feature-sliced не переносятся в Biome — оставить минимальный ESLint только для них
### 3. Унификация типов API
Убрать дублирование рукописных и сгенерированных типов.
- Удалить рукописный shared/api/responses.ts
- Перенести все entity-API файлы на типы из shared/api/types.ts (openapi-typescript)
- normalizeEnvelope перенести в kyClient.ts
- Типы пишем только через codegen, рукописные — удаляем
### 4. Полная миграция на ky
Заменить нативный fetch на ky во всех API-вызовах.
- Доработать kyClient.ts: добавить normalizeEnvelope в afterResponse hook
- Перевести все entity-API файлы с request() на kyApi
- Удалить shared/api/client.ts
- Заменить configureAuth на configureKyAuth в точке входа
### 5. TanStack Router + Lazy Loading
Мигрировать с react-router-dom на TanStack Router.
- Установить @tanstack/react-router, @tanstack/router-devtools, @tanstack/router-plugin
- Создать файловую структуру роутов (Route Tree generation)
- Все страницы lazy по умолчанию (built-in, без React.lazy)
- Search params с Zod-схемами для страниц с фильтрацией (screener, broker-operations)
- ProtectedRoute реализовать через beforeLoad guard
- AppLayout — как layout route (__root.tsx)
- Loaders для предзагрузки данных с TanStack Query в ключевых роутах
- Заменить все импорты react-router-dom на @tanstack/react-router
### 6. Валидация окружения
Создать формальную Zod-схему для VITE_* переменных с проверкой при старте.
- Определить ожидаемые VITE_* переменные с их типами
- Валидировать при старте приложения в main.tsx или App.tsx
- При отсутствии обязательных переменных — понятная ошибка в консоли/браузере
## Acceptance Criteria
| # | Acceptance Criteria | Verification |
|---|-------------------|--------------|
| 1 | `npm run dev VITE_API_MOCK=true` работает без бэкенда | Ручная проверка |
| 2 | `biome check src/` проходит без ошибок | `biome check` |
| 3 | Все тесты проходят | `npm run test` |
| 4 | `npm run build` проходит | `npm run build` |
| 5 | Нет рукописных типов API в shared/api/responses.ts | grep на импорты |
| 6 | Все API-запросы идут через ky | grep на fetch в entity API |
| 7 | Роуты лениво загружаются | DevTools Network tab |
| 8 | При невалидных VITE_* — ошибка при старте | Ручная проверка |
## Out of Scope
- Автоматизация codegen в dev/watch mode
- Storybook
- E2E-тесты (Playwright)
- Миграция с React 18 на React 19