chore: replace Biome with full ESLint profile #18 #41

Merged
ksv741 merged 6 commits from codex/frontend-eslint into develop 2026-09-28 16:36:41 +03:00
Owner

Frontend полностью переходит на ESLint 10.11.0: Biome удалён из зависимостей, конфигурации и команд, Prettier не установлен, в том числе транзитивно. lint, lint:fix, verify и lint-staged используют единый ESLint-профиль.

Работа по WealthLedger/main#18.

Изменения

  • Включены полные recommended-пресеты всех установленных плагинов: TypeScript, React, Hooks, Refresh, Query, Unicorn, import-x, SonarJS, RegExp, Security, no-unsanitized, Perfectionist, Stylistic, Vitest, Testing Library, jest-dom и Storybook. Правила применяются в соответствующих source/test/story/config scopes; generated/build artifacts исключены.

  • Добавлены SonarJS 4.2.1, RegExp 3.3.1, jest-dom 5.10.1, Perfectionist 5.12.1, Stylistic 5.10.0, Security 4.1.0, no-unsanitized 4.1.5 и TypeScript import resolver 4.4.5. Версии остальных существующих пакетов сохранены.

  • no-unsanitized дополняет React-проверки защитой native DOM HTML API: property и method включены как errors. TypeScript-примеры с innerHTML и insertAdjacentHTML защищены regression checks; исключений для новых правил не потребовалось.

  • Исходники, тесты, stories и tooling приведены к профилю. Stylistic сохраняет табы, двойные кавычки и точки с запятой. Явно закреплены operator-linebreak: before и multiline-ternary: always-multiline: тернарные выражения остаются в одной строке либо размещают ? и : в начале строк друг под другом; Perfectionist отвечает за сортировку. Обновлены README и conventions.

  • Разветвлённый рендеринг и наблюдение за ресурсами упрощены у существующих владельцев. Форматирование денежных значений заменяет потенциально медленное регулярное выражение линейной группировкой; добавлены граничные проверки точности и ведущих нулей.

  • Пять проверок ESLint защищают активацию recommended-правил, области применения/ignores, идемпотентность форматирования, TSX generic-синтаксис, пробелы JSX и запрет inline machine codes. Для текста с интерполяциями настроен jsx-one-expression-per-line: { allow: "non-jsx" }: стандартный автофикс терял значимые пробелы.

  • Известные UI коды ошибок и типы брокерских операций перенесены в строковые enum. no-restricted-syntax запрещает inline-коды в полях code/errorCode, известные protocol literals, шаблоны и строковые сравнения кодов; no-unsafe-enum-comparison закреплён как error. Проверки ловят и однократное использование; fixtures/stories сохраняют независимые wire values. Новые словари требуют расширения selectors и review.

  • В app TypeScript config снят erasableSyntaxOnly для поддержки runtime enum; tooling config сохраняет его. Новые зависимости не добавлены. API-коды остаются открытыми строками: неизвестные значения сохраняют прежний fallback; операциям сохранены TAX/FEE/transfer fallback и wire labels.

Контракты и границы

Nullable API fields, ключи запросов и порядок race-операций сохранены; точечные исключения сопровождаются объяснениями. Отдельно проверены auth/session, transport/cache invalidation, денежная валидация и loading/error/empty ветви. React event handlers допускают Promise; их тела остаются под no-floating-promises. Настройки правил учитывают существующие имена файлов, Props/Ref и null на границах React/Mantine/Fetch.

CSS, JSON и Markdown сейчас не форматируются автоматически. jsx-a11y без заявленной поддержки ESLint 10 остаётся отложенным в issue #18. Архитектуру проверяет dependency-cruiser; lint не заменяет semantic/security review.

Проверки

  • После слияния актуального develop повторно пройдены npm ci и полный npm run verify; новые workflows сохранены без изменений, конфликтов нет.
  • npm ci — успешно, exact lockfile, без --force/--legacy-peer-deps; официальный npm registry использован из-за недоступности Nexus, настройки registry не менялись.
  • npm run verify — успешно: OpenAPI snapshot, TypeScript, ESLint с --max-warnings=0, 5 проверок ESLint, 379 тестов в 58 файлах с Chromium и coverage, Knip, оба dependency graphs, Vite и Storybook.
  • Coverage: statements 92.51%, branches 84.48%, functions 88.54%, lines 93.51%.
  • node --test scripts/test-pre-commit.mjs scripts/check-image-publication.cjs — 2/2.
  • npm audit --registry=https://registry.npmjs.org --include=dev --audit-level=low — 0 уязвимостей.
  • Сравнение 560 переводов и JSX-текста с исходной версией — без изменений; git diff --check — успешно. Pre-commit Gitleaks, lint-staged, dependency check и commitlint прошли.

Остаются предупреждения Vitest о Vite-specific hook, Knip об исключённом расширении .mdx и Storybook о размере chunk; gates проходят.

Frontend полностью переходит на ESLint 10.11.0: Biome удалён из зависимостей, конфигурации и команд, Prettier не установлен, в том числе транзитивно. `lint`, `lint:fix`, `verify` и lint-staged используют единый ESLint-профиль. Работа по [WealthLedger/main#18](https://git.personal.ksv741.ru/WealthLedger/main/issues/18). ## Изменения - Включены полные recommended-пресеты всех установленных плагинов: TypeScript, React, Hooks, Refresh, Query, Unicorn, import-x, SonarJS, RegExp, Security, no-unsanitized, Perfectionist, Stylistic, Vitest, Testing Library, jest-dom и Storybook. Правила применяются в соответствующих source/test/story/config scopes; generated/build artifacts исключены. - Добавлены SonarJS 4.2.1, RegExp 3.3.1, jest-dom 5.10.1, Perfectionist 5.12.1, Stylistic 5.10.0, Security 4.1.0, no-unsanitized 4.1.5 и TypeScript import resolver 4.4.5. Версии остальных существующих пакетов сохранены. - `no-unsanitized` дополняет React-проверки защитой native DOM HTML API: `property` и `method` включены как errors. TypeScript-примеры с `innerHTML` и `insertAdjacentHTML` защищены regression checks; исключений для новых правил не потребовалось. - Исходники, тесты, stories и tooling приведены к профилю. Stylistic сохраняет табы, двойные кавычки и точки с запятой. Явно закреплены `operator-linebreak: before` и `multiline-ternary: always-multiline`: тернарные выражения остаются в одной строке либо размещают `?` и `:` в начале строк друг под другом; Perfectionist отвечает за сортировку. Обновлены README и conventions. - Разветвлённый рендеринг и наблюдение за ресурсами упрощены у существующих владельцев. Форматирование денежных значений заменяет потенциально медленное регулярное выражение линейной группировкой; добавлены граничные проверки точности и ведущих нулей. - Пять проверок ESLint защищают активацию recommended-правил, области применения/ignores, идемпотентность форматирования, TSX generic-синтаксис, пробелы JSX и запрет inline machine codes. Для текста с интерполяциями настроен `jsx-one-expression-per-line: { allow: "non-jsx" }`: стандартный автофикс терял значимые пробелы. - Известные UI коды ошибок и типы брокерских операций перенесены в строковые enum. `no-restricted-syntax` запрещает inline-коды в полях `code`/`errorCode`, известные protocol literals, шаблоны и строковые сравнения кодов; `no-unsafe-enum-comparison` закреплён как error. Проверки ловят и однократное использование; fixtures/stories сохраняют независимые wire values. Новые словари требуют расширения selectors и review. - В app TypeScript config снят `erasableSyntaxOnly` для поддержки runtime enum; tooling config сохраняет его. Новые зависимости не добавлены. API-коды остаются открытыми строками: неизвестные значения сохраняют прежний fallback; операциям сохранены TAX/FEE/transfer fallback и wire labels. ## Контракты и границы Nullable API fields, ключи запросов и порядок race-операций сохранены; точечные исключения сопровождаются объяснениями. Отдельно проверены auth/session, transport/cache invalidation, денежная валидация и loading/error/empty ветви. React event handlers допускают Promise; их тела остаются под `no-floating-promises`. Настройки правил учитывают существующие имена файлов, Props/Ref и null на границах React/Mantine/Fetch. CSS, JSON и Markdown сейчас не форматируются автоматически. `jsx-a11y` без заявленной поддержки ESLint 10 остаётся отложенным в issue #18. Архитектуру проверяет dependency-cruiser; lint не заменяет semantic/security review. ## Проверки - После слияния актуального develop повторно пройдены `npm ci` и полный `npm run verify`; новые workflows сохранены без изменений, конфликтов нет. - `npm ci` — успешно, exact lockfile, без `--force`/`--legacy-peer-deps`; официальный npm registry использован из-за недоступности Nexus, настройки registry не менялись. - `npm run verify` — успешно: OpenAPI snapshot, TypeScript, ESLint с `--max-warnings=0`, 5 проверок ESLint, 379 тестов в 58 файлах с Chromium и coverage, Knip, оба dependency graphs, Vite и Storybook. - Coverage: statements 92.51%, branches 84.48%, functions 88.54%, lines 93.51%. - `node --test scripts/test-pre-commit.mjs scripts/check-image-publication.cjs` — 2/2. - `npm audit --registry=https://registry.npmjs.org --include=dev --audit-level=low` — 0 уязвимостей. - Сравнение 560 переводов и JSX-текста с исходной версией — без изменений; `git diff --check` — успешно. Pre-commit Gitleaks, lint-staged, dependency check и commitlint прошли. Остаются предупреждения Vitest о Vite-specific hook, Knip об исключённом расширении .mdx и Storybook о размере chunk; gates проходят.
codex-bot added 1 commit 2026-09-28 05:54:26 +03:00
chore: add typed ESLint checks #18
Frontend security / security (push) Successful in 9s
Frontend verify / verify (push) Failing after 17m37s
Conventional commits / commits (pull_request) Successful in 26s
Frontend security / security (pull_request) Successful in 9s
Frontend verify / verify (pull_request) Failing after 22m42s
851457e03c
Refs WealthLedger/main#18. Keep Biome; add no Prettier dependencies.
ksv741 added 1 commit 2026-09-28 07:32:33 +03:00
chore: finish frontend ESLint migration #18
Frontend security / security (push) Successful in 9s
Frontend verify / verify (push) Failing after 37m50s
Frontend security / security (pull_request) Successful in 9s
Frontend verify / verify (pull_request) Failing after 42m10s
Conventional commits / commits (pull_request) Successful in 29s
3eafad2657
Enable every plugin recommended preset and replace Biome with ESLint formatting.

Preserve API contracts and JSX whitespace; verify source, tests, builds and tooling.
codex-bot changed title from chore: add typed ESLint checks #18 to chore: replace Biome with full ESLint profile #18 2026-09-28 07:32:51 +03:00
ksv741 added 1 commit 2026-09-28 10:19:20 +03:00
chore: guard unsafe DOM HTML with ESLint #18
Frontend security / security (push) Successful in 10s
Frontend verify / verify (push) Failing after 4m0s
Frontend security / security (pull_request) Successful in 10s
Frontend verify / verify (pull_request) Failing after 13m52s
Conventional commits / commits (pull_request) Successful in 33s
038f9d2efa
Enable no-unsanitized recommended rules and verify TypeScript DOM sink diagnostics.
ksv741 added 1 commit 2026-09-28 12:35:27 +03:00
style: pin ternary operator formatting #18
Frontend security / security (push) Successful in 11s
Frontend verify / verify (push) Failing after 17m37s
Frontend security / security (pull_request) Successful in 10s
Frontend verify / verify (pull_request) Canceled after 9m31s
Conventional commits / commits (pull_request) Canceled after 30s
bc8e4cc4dc
ksv741 added 1 commit 2026-09-28 13:49:54 +03:00
refactor: enforce enum machine codes #18
Frontend verify / verify (pull_request) Canceled after 0s
Frontend security / security (pull_request) Canceled after 0s
Frontend security / security (push) Canceled after 0s
Frontend verify / verify (push) Canceled after 0s
Conventional commits / commits (pull_request) Canceled after 0s
d20be86d73
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.
ksv741 added 1 commit 2026-09-28 15:21:07 +03:00
chore: merge develop into eslint branch #18
Frontend verify / commits (pull_request) Successful in 28s
Frontend verify / security (pull_request) Successful in 10s
Frontend verify / verify (pull_request) Successful in 8m42s
959aeaae57
ksv741 merged commit 5b69003516 into develop 2026-09-28 16:36:41 +03:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WealthLedger/frontend#41