feat: добавить split-режим генерации REST-клиента
- добавлен режим генерации single, split и both - добавлены отдельные operation-файлы и createApiClient - удалена генерация SWR-хуков и зависимости React/SWR - обновлены CLI, шаблоны, примеры, документация и тесты - версия пакета повышена до 3.0.0
This commit is contained in:
29
AGENTS.md
29
AGENTS.md
@@ -29,10 +29,13 @@ CLI утилита для автоматической генерации TypeSc
|
||||
- Чтение OpenAPI спецификации
|
||||
- Применение кастомных шаблонов EJS
|
||||
- Генерация TypeScript кода
|
||||
3. **Выходные данные**: 3 файла в указанной директории:
|
||||
- `{FileName}.ts` - API endpoints с методами
|
||||
3. **Выходные данные по умолчанию**: legacy монолитный файл `{FileName}.ts`
|
||||
4. **Выходные данные в `split` режиме**: tree-shaking friendly структура:
|
||||
- `http-client.ts` - HTTP клиент с настройками
|
||||
- `data-contracts.ts` - TypeScript типы
|
||||
- `create-api-client.ts` - helper для привязки выбранного графа методов к клиенту
|
||||
- `operations/*.ts` - один endpoint на файл
|
||||
- `index.ts` - barrel exports
|
||||
|
||||
## Ключевые особенности
|
||||
|
||||
@@ -51,13 +54,15 @@ CLI утилита для автоматической генерации TypeSc
|
||||
## Использование
|
||||
|
||||
```bash
|
||||
api-codegen -i <путь-к-openapi> -o <выходная-директория> [-n <имя-файла>]
|
||||
api-codegen -i <путь-к-openapi> -o <выходная-директория> [-n <имя-файла>] [--mode single|split|both]
|
||||
```
|
||||
|
||||
### Аргументы
|
||||
- `-i, --input` - путь к OpenAPI файлу (локальный или URL)
|
||||
- `-o, --output` - директория для сохранения
|
||||
- `-n, --name` - опциональное имя файла (по умолчанию из `spec.info.title`)
|
||||
- `-n, --name` - имя монолитного файла без `.ts`
|
||||
- `--mode` - режим генерации: `single` (по умолчанию), `split`, `both`
|
||||
- `--single-file` - устаревший алиас для `--mode single`
|
||||
|
||||
## Структура проекта
|
||||
|
||||
@@ -68,6 +73,8 @@ src/
|
||||
├── generator.ts # Основная логика генерации
|
||||
├── templates/ # EJS шаблоны
|
||||
│ ├── api.ejs
|
||||
│ ├── operation.ejs
|
||||
│ ├── create-api-client.ejs
|
||||
│ ├── http-client.ejs
|
||||
│ ├── data-contracts.ejs
|
||||
│ └── ...
|
||||
@@ -84,16 +91,24 @@ src/
|
||||
- `extractRequestParams: true` - извлечение параметров запросов
|
||||
- `extractRequestBody: true` - извлечение тел запросов
|
||||
- `extractEnums: true` - извлечение enum типов
|
||||
- `generateUnionEnums: true` в `split` режиме - enum схемы генерируются как type union без runtime-кода
|
||||
|
||||
## Примеры использования сгенерированного кода
|
||||
|
||||
```typescript
|
||||
import { Api, HttpClient } from './Api';
|
||||
import { createApiClient, HttpClient } from './generated';
|
||||
import { getProfile } from './generated/operations/get-profile';
|
||||
import { login } from './generated/operations/login';
|
||||
|
||||
const httpClient = new HttpClient();
|
||||
httpClient.setSecurityData({ token: 'jwt-token' });
|
||||
|
||||
const api = new Api(httpClient);
|
||||
const api = createApiClient(httpClient, {
|
||||
auth: {
|
||||
getProfile,
|
||||
login,
|
||||
},
|
||||
});
|
||||
|
||||
// Вызов API методов
|
||||
const user = await api.auth.getProfile();
|
||||
@@ -104,4 +119,4 @@ const result = await api.auth.login({ email, password });
|
||||
|
||||
1. **Шаблоны** - можно модифицировать EJS шаблоны в `src/templates/`
|
||||
2. **Хуки генератора** - можно добавить новые хуки в [`hooks`](src/generator.ts:75)
|
||||
3. **Конфигурация** - можно расширить [`GeneratorConfig`](src/config.ts:4) для новых опций
|
||||
3. **Конфигурация** - можно расширить [`GeneratorConfig`](src/config.ts:4) для новых опций
|
||||
|
||||
Reference in New Issue
Block a user