# Eslint

### Overview

ESLint в TRAIO используется как SAST/Code Quality сканер для JavaScript/TypeScript проектов. Сканер запускается внутри контейнера и формирует JSON-отчёт, который TRAIO забирает из директории `/data`.

ESLint запускается **из установленного в образе окружения** (`/eslint/node_modules/.bin/eslint`) и использует **flat config** (например, `eslint.config.heavy.cjs`). Это снижает риск конфликтов версий ESLint/плагинов и делает результаты воспроизводимыми.

### Requirements

В **Sequences** перед этим инструментом должен быть добавлен job **Code Downloader**

### How it works

Сканер использует наш собранный docker-образ на основе ESLint дополненный плагинами и конфигурациями:

`registry.gitlab.com/traio-group/tools/eslint:26.02.2`

Команда запуска:

```sh
/eslint/node_modules/.bin/eslint -c "$CONF" -f json ./ > /tmp/eslint.raw.json || true
jq '[.[]
  | del(.source)
  | select(.messages != null and (.messages | length) > 0)
]' /tmp/eslint.raw.json > /data/$REPORT_FILE_NAME
echo "ESLint report saved to /data/$REPORT_FILE_NAME"
```

Сканер выполняет ESLint по текущей директории проекта (`./`) и сохраняет сырой JSON-вывод во временный файл. Затем отчёт **нормализуется** через `jq`:

* удаляется поле `source` (чтобы не раздувать отчёт исходниками файлов),
* остаются только файлы, где реально есть проблемы (`messages.length > 0`).

### Variables

| Переменная         | Пример                            | Обязательная | Описание                                                                                          |
| ------------------ | --------------------------------- | ------------ | ------------------------------------------------------------------------------------------------- |
| REPORT\_FILE\_NAME | `eslint.json`                     | Дf           | Имя файла отчёта, который TRAIO забирает из `/data`.                                              |
| SCAN\_TYPE         | `ESLint Scan`                     | Да           | Тип сканирования для парсинга в TRAIO.                                                            |
| CONF               | `/eslint/eslint.config.heavy.cjs` | Да           | Путь к ESLint flat config внутри контейнера. Используется для переключения режимов (light/heavy). |

### Notes

* Критичность: Уязвимости ESLint показываются дефолтно как низкие в связи с отсутствием критичности от ESLint, можно изменить в настройках парсера
* Варианты конфигурации:&#x20;
  * `/eslint/eslint.config.heavy.cjs`
  * `/eslint/eslint.config.light.cjs`

### Links

* ESLint CLI: <https://eslint.org/docs/latest/use/command-line-interface>
* Образ и конфигурации: <https://gitlab.com/traio-group/tools/-/tree/main/eslint?ref_type=heads>
