# API CodeGen

CLI утилита для генерации TypeScript API клиента из OpenAPI спецификации.

## Установка

```bash
bun install
```

## Использование

```bash
api-codegen -u <URL> -i <INPUT> -o <OUTPUT> [-n <NAME>]
```

**Аргументы:**
- `-u, --url <url>` - Базовый URL API
- `-i, --input <path>` - Путь к OpenAPI файлу (локальный или URL)
- `-o, --output <path>` - Директория для сохранения файлов
- `-n, --name <name>` - Имя сгенерированного файла (опционально)

**Примеры:**

```bash
# Локальный файл
api-codegen -u https://api.example.com -i ./openapi.json -o ./src/api

# URL на спецификацию
api-codegen -u https://api.example.com -i https://petstore.swagger.io/v2/swagger.json -o ./src/api

# С кастомным именем файла
api-codegen -u https://api.example.com -i ./openapi.json -o ./src/api -n MyApiClient
```

## Пример использования

```typescript
import { Api, HttpClient } from './src/api/Api';

const httpClient = new HttpClient();
httpClient.setSecurityData({ token: 'jwt-token' });

const api = new Api(httpClient);

// GET запрос
const user = await api.auth.getProfile();

// POST запрос
const result = await api.auth.login({ email, password });

// React + SWR
function Profile() {
  const { data } = useSWR('/auth/me', () => api.auth.getProfile());
  return <div>{data?.email}</div>;
}
```

## Разработка

### Сборка
```bash
bun run build
```

### Тестирование

Проект использует комплексную систему тестирования с максимальным покрытием (~72 тестовых кейса).

**Запуск всех тестов:**
```bash
bun test
```

**Только юнит тесты:**
```bash
bun test:unit
```

**Только интеграционные тесты:**
```bash
bun test:integration
```

**Watch режим:**
```bash
bun test:watch
```

**С coverage:**
```bash
bun test:coverage
```

Подробная документация по тестированию доступна в [`tests/README.md`](tests/README.md).

### Структура тестов

- **Юнит тесты** - CLI, генератор, утилиты, валидация
- **Интеграционные тесты** - E2E генерация, сгенерированный клиент
- **Тестовые фикстуры** - 7 OpenAPI спецификаций для различных сценариев
- **Mock сервер** - для тестирования HTTP запросов

**Покрываемые сценарии:**
- ✅ CLI команды и обработка ошибок
- ✅ Генерация TypeScript кода
- ✅ Компиляция сгенерированного кода
- ✅ HTTP запросы с mock сервером
- ✅ Аутентификация (Bearer tokens)
- ✅ Edge cases (Unicode, большие спецификации)

## Лицензия

MIT
