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

4.9 KiB
Raw Permalink Blame History

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