anl 25.1203.0 → 26.105.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -21,6 +21,8 @@
21
21
  - 🎨 Supports code formatting
22
22
  - ⚡️ Supports file upload
23
23
  - 🛠 Configurable code generation options
24
+ - 🌐 Supports multiple Swagger server configurations
25
+ - 🔧 Supports HTTP methods like OPTIONS, HEAD, SEARCH
24
26
 
25
27
  - `anl lint`
26
28
  - 🔍 One-click configuration for various lint tools
@@ -94,13 +96,20 @@ $ anl type
94
96
 
95
97
  #### Configuration File Example
96
98
 
99
+ **Single Swagger Server Configuration:**
100
+
97
101
  ```json
98
102
  {
99
103
  "saveTypeFolderPath": "apps/types",
100
104
  "saveApiListFolderPath": "apps/api/",
101
105
  "saveEnumFolderPath": "apps/enums",
102
106
  "importEnumPath": "../../enums",
103
- "swaggerJsonUrl": "https://generator3.swagger.io/openapi.json",
107
+ "swaggerServers": {
108
+ "url": "https://generator3.swagger.io/openapi2.json",
109
+ "apiListFileName": "index.ts",
110
+ "publicPrefix": "api",
111
+ "headers": {}
112
+ },
104
113
  "requestMethodsImportPath": "./fetch",
105
114
  "dataLevel": "serve",
106
115
  "formatting": {
@@ -120,30 +129,77 @@ $ anl type
120
129
  "method": "post"
121
130
  }
122
131
  ],
123
- "publicPrefix": "api",
124
- "erasableSyntaxOnly": false,
125
- "parameterSeparator": "_"
132
+ "parameterSeparator": "_",
133
+ "enmuConfig": {
134
+ "erasableSyntaxOnly": false,
135
+ "varnames": "enum-varnames",
136
+ "comment": "enum-descriptions"
137
+ }
138
+ }
139
+ ```
140
+
141
+ **Multiple Swagger Servers Configuration:**
142
+
143
+ ```json
144
+ {
145
+ "saveTypeFolderPath": "apps/types",
146
+ "saveApiListFolderPath": "apps/api/",
147
+ "saveEnumFolderPath": "apps/enums",
148
+ "importEnumPath": "../../enums",
149
+ "requestMethodsImportPath": "./fetch",
150
+ "dataLevel": "serve",
151
+ "formatting": {
152
+ "indentation": "\t",
153
+ "lineEnding": "\n"
154
+ },
155
+ "parameterSeparator": "_",
156
+ "enmuConfig": {
157
+ "erasableSyntaxOnly": false,
158
+ "varnames": "enum-varnames",
159
+ "comment": "enum-descriptions"
160
+ },
161
+ "swaggerServers": [
162
+ {
163
+ "url": "https://generator3.swagger.io/openapi1.json",
164
+ "apiListFileName": "op.ts",
165
+ "headers": {}
166
+ },
167
+ {
168
+ "url": "https://generator3.swagger.io/openapi2.json",
169
+ "apiListFileName": "index.ts",
170
+ "publicPrefix": "/api",
171
+ "headers": {}
172
+ }
173
+ ]
126
174
  }
127
175
  ```
128
176
 
129
177
  #### Configuration Item Descriptions
130
178
 
131
- | Configuration Item | Type | Required | Description |
132
- | ------------------------ | ------------------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
133
- | saveTypeFolderPath | string | Yes | Type definition file save path |
134
- | saveApiListFolderPath | string | Yes | API request function file save path |
135
- | saveEnumFolderPath | string | Yes | Enum data file save path |
136
- | importEnumPath | string | Yes | Enum import path (path referenced by enum files in apps/types/models/\*.ts) |
137
- | swaggerJsonUrl | string | Yes | Swagger JSON documentation address |
138
- | requestMethodsImportPath | string | Yes | Request method import path |
139
- | dataLevel | 'data' \| 'serve' \| 'axios' | Yes | Interface return data level |
140
- | formatting | object | No | Code formatting configuration |
141
- | headers | object | No | Request header configuration |
142
- | includeInterface | Array<{path: string, method: string}> | No | Included interfaces: The interface list file specified by `saveApiListFolderPath` will only include interfaces in the list, mutually exclusive with `excludeInterface` field |
143
- | excludeInterface | Array<{path: string, method: string}> | No | Excluded interfaces: The interface list file specified by `saveApiListFolderPath` will not include interfaces in this list, mutually exclusive with `includeInterface` |
144
- | publicPrefix | string | No | Common prefix on url path, e.g.: api/users, api/users/{id}, api is the common prefix |
145
- | erasableSyntaxOnly | boolean | Yes | Align with tsconfig.json `compilerOptions.erasableSyntaxOnly`. When `true`, generates const objects instead of enums (type-only syntax). Default: `false` |
146
- | parameterSeparator | string | No | Separator used between path segments and parameters when generating API names and type names. For example, `/users/{userId}/posts` with separator `'_'` generates `users_userId_posts_GET`. Default: `'_'` |
179
+ | Configuration Item | Type | Required | Description |
180
+ | -------------------------------------------- | ------------------------------------- | -------- | ------------------------------------------------------------------- |
181
+ | saveTypeFolderPath | string | Yes | Type definition file save path |
182
+ | saveApiListFolderPath | string | Yes | API request function file save path |
183
+ | saveEnumFolderPath | string | Yes | Enum data file save path |
184
+ | importEnumPath | string | Yes | Enum import path (path referenced by enum files in apps/types/models/\*.ts) |
185
+ | swaggerJsonUrl | string | No | Swagger JSON documentation address (migrated to `swaggerServers`, retained for backward compatibility) **This field will be removed in future versions** |
186
+ | swaggerServers | object \| Array<object> | No | Swagger server configuration. Single server can be an object, multiple servers use an array. Each server can configure `url`, `publicPrefix`, `apiListFileName`, `headers`<br />See single and multiple Swagger server configuration examples above |
187
+ | swaggerServers[].url | string | Yes | Swagger JSON documentation address |
188
+ | swaggerServers[].publicPrefix | string | No | Common prefix on url path, e.g.: api/users, api/users/{id}, api is the common prefix |
189
+ | swaggerServers[].apiListFileName | string | No | API list file name, defaults to `index.ts`. When using multiple servers, each server's file name must be unique |
190
+ | swaggerServers[].headers | object | No | Request header configuration |
191
+ | requestMethodsImportPath | string | Yes | Request method import path |
192
+ | dataLevel | 'data' \| 'serve' \| 'axios' | Yes | Interface return data level |
193
+ | formatting | object | No | Code formatting configuration |
194
+ | headers | object | No | Request header configuration (migrated to `swaggerServers`, retained for backward compatibility) |
195
+ | includeInterface | Array<{path: string, method: string}> | No | Included interfaces: The interface list file specified by `saveApiListFolderPath` will only include interfaces in the list, mutually exclusive with `excludeInterface` field |
196
+ | excludeInterface | Array<{path: string, method: string}> | No | Excluded interfaces: The interface list file specified by `saveApiListFolderPath` will not include interfaces in this list, mutually exclusive with `includeInterface` |
197
+ | publicPrefix | string | No | Common prefix on url path (migrated to `swaggerServers`, retained for backward compatibility) |
198
+ | apiListFileName | string | No | API list file name, defaults to `index.ts` (migrated to `swaggerServers`, retained for backward compatibility) |
199
+ | enmuConfig.erasableSyntaxOnly | boolean | Yes | Align with tsconfig.json `compilerOptions.erasableSyntaxOnly`. When `true`, generates const objects instead of enums (type-only syntax). Default: `false` |
200
+ | parameterSeparator | string | No | Separator used between path segments and parameters when generating API names and type names. For example, `/users/{userId}/posts` with separator `'_'` generates `users_userId_posts_GET`. Default: `'_'` |
201
+ | enmuConfig.varnames | string | No | Schema field name that stores custom enum member identifiers. Default: `enum-varnames`. |
202
+ | enmuConfig.comment | string | No | Schema field name that stores enum member descriptions (used for inline comments). Default: `enum-descriptions`. |
147
203
 
148
204
  #### Configuration Items and Generated Files Correspondence
149
205
 
@@ -156,7 +212,8 @@ project/
156
212
  │ │ ├── models/ # All type definition files (excluding enum types) uncontrolled
157
213
  │ │ ├── connectors/ # API type definitions (interface definition files) uncontrolled
158
214
  │ └── api/ # Request files: Specified by saveApiListFolderPath configuration item
159
- │ │ └── index.ts # API request function list uncontrolled
215
+ │ │ └── index.ts # API request function list (single server or first server) uncontrolled
216
+ │ │ └── op.ts # Other servers' API list files when using multiple servers uncontrolled
160
217
  │ │ └── api-type.d.ts # Request type definition file uncontrolled
161
218
  │ │ └── config.ts # Request, response interceptor, request configuration uncontrolled
162
219
  │ │ └── error-message.ts # System-level error messages uncontrolled
@@ -205,9 +262,9 @@ export const userDetailGet = (params: UserDetail_GET.Query) => GET<UserDetail_GE
205
262
 
206
263
  #### Enum Generation
207
264
 
208
- The tool supports two enum generation modes, controlled by the `erasableSyntaxOnly` configuration:
265
+ The tool supports two enum generation modes, controlled by the `enmuConfig.erasableSyntaxOnly` configuration:
209
266
 
210
- **Traditional Enum Mode** (`erasableSyntaxOnly: false`, default):
267
+ **Traditional Enum Mode** (`enmuConfig.erasableSyntaxOnly: false`, default):
211
268
 
212
269
  ```typescript
213
270
  export enum Status {
@@ -217,7 +274,7 @@ export enum Status {
217
274
  }
218
275
  ```
219
276
 
220
- **Const Object Mode** (`erasableSyntaxOnly: true`):
277
+ **Const Object Mode** (`enmuConfig.erasableSyntaxOnly: true`):
221
278
 
222
279
  ```typescript
223
280
  export const Status = {
@@ -300,12 +357,73 @@ Example configuration: This configuration is in `an.config.json`
300
357
 
301
358
  Note: `includeInterface` and `excludeInterface` cannot be used simultaneously. If both are configured, `includeInterface` will be prioritized.
302
359
 
360
+ #### Multiple Swagger Servers Support
361
+
362
+ The tool supports configuring multiple Swagger servers, each server can be configured independently:
363
+
364
+ - **Single server**: `swaggerServers` can be directly filled with an object
365
+ - **Multiple servers**: `swaggerServers` uses an array format, each server must configure a unique `apiListFileName`
366
+
367
+ **How it works:**
368
+
369
+ - The first server's APIs will be generated to the specified `apiListFileName` (defaults to `index.ts`)
370
+ - Subsequent servers' APIs will be appended to their respective `apiListFileName` files
371
+ - Type definitions and enums will be merged into a unified folder to avoid duplication
372
+
373
+ **Configuration example:**
374
+
375
+ ```json
376
+ {
377
+ "swaggerServers": [
378
+ {
379
+ "url": "http://api1.example.com/swagger.json",
380
+ "apiListFileName": "api1.ts",
381
+ "publicPrefix": "/api/v1",
382
+ "headers": {
383
+ "Authorization": "Bearer token1"
384
+ }
385
+ },
386
+ {
387
+ "url": "http://api2.example.com/swagger.json",
388
+ "apiListFileName": "api2.ts",
389
+ "publicPrefix": "/api/v2",
390
+ "headers": {
391
+ "Authorization": "Bearer token2"
392
+ }
393
+ }
394
+ ]
395
+ }
396
+ ```
397
+
398
+ **Migration notes:**
399
+
400
+ - Old configuration (`swaggerJsonUrl`, `publicPrefix`, `headers`) is still compatible
401
+ - The tool will automatically detect old configuration and suggest migration methods
402
+ - It's recommended to migrate to the new `swaggerServers` configuration for better flexibility
403
+
404
+ #### HTTP Method Support
405
+
406
+ The tool supports the following HTTP methods:
407
+
408
+ - `GET` - Get resources
409
+ - `POST` - Create resources
410
+ - `PUT` - Update resources (full replacement)
411
+ - `PATCH` - Update resources (partial update)
412
+ - `DELETE` - Delete resources
413
+ - `OPTIONS` - Preflight requests
414
+ - `HEAD` - Get response headers
415
+ - `SEARCH` - Search requests
416
+
417
+ All methods support type-safe parameter and response type definitions.
418
+
303
419
  ### Notes
304
420
 
305
421
  1. Ensure the Swagger JSON documentation address is accessible
306
422
  2. Paths in the configuration file need to be relative to the project root directory
307
423
  3. Generated files will overwrite existing files with the same name
308
424
  4. It's recommended to add generated files to version control
425
+ 5. When using multiple Swagger servers, ensure each server's `apiListFileName` is unique to avoid file overwriting
426
+ 6. When configuring multiple servers, type definitions and enums will be merged. If different servers have types with the same name, conflicts may occur
309
427
 
310
428
  ### Common Issues
311
429
 
package/README.ru.md CHANGED
@@ -21,6 +21,8 @@
21
21
  - 🎨 Поддерживает форматирование кода
22
22
  - ⚡️ Поддерживает загрузку файлов
23
23
  - 🛠 Настраиваемые опции генерации кода
24
+ - 🌐 Поддерживает конфигурации нескольких Swagger серверов
25
+ - 🔧 Поддерживает HTTP методы OPTIONS, HEAD, SEARCH и другие
24
26
 
25
27
  - `anl lint`
26
28
  - 🔍 Настройка различных инструментов линтинга в один клик
@@ -96,13 +98,20 @@ $ anl type
96
98
 
97
99
  #### Пример конфигурационного файла
98
100
 
101
+ **Конфигурация одного Swagger сервера:**
102
+
99
103
  ```json
100
104
  {
101
105
  "saveTypeFolderPath": "apps/types",
102
106
  "saveApiListFolderPath": "apps/api/",
103
107
  "saveEnumFolderPath": "apps/enums",
104
108
  "importEnumPath": "../../enums",
105
- "swaggerJsonUrl": "https://generator3.swagger.io/openapi.json",
109
+ "swaggerServers": {
110
+ "url": "https://generator3.swagger.io/openapi2.json",
111
+ "apiListFileName": "index.ts",
112
+ "publicPrefix": "api",
113
+ "headers": {}
114
+ },
106
115
  "requestMethodsImportPath": "./fetch",
107
116
  "dataLevel": "serve",
108
117
  "formatting": {
@@ -122,30 +131,77 @@ $ anl type
122
131
  "method": "post"
123
132
  }
124
133
  ],
125
- "publicPrefix": "api",
126
- "erasableSyntaxOnly": false,
127
- "parameterSeparator": "_"
134
+ "parameterSeparator": "_",
135
+ "enmuConfig": {
136
+ "erasableSyntaxOnly": false,
137
+ "varnames": "enum-varnames",
138
+ "comment": "enum-descriptions"
139
+ }
140
+ }
141
+ ```
142
+
143
+ **Конфигурация нескольких Swagger серверов:**
144
+
145
+ ```json
146
+ {
147
+ "saveTypeFolderPath": "apps/types",
148
+ "saveApiListFolderPath": "apps/api/",
149
+ "saveEnumFolderPath": "apps/enums",
150
+ "importEnumPath": "../../enums",
151
+ "requestMethodsImportPath": "./fetch",
152
+ "dataLevel": "serve",
153
+ "formatting": {
154
+ "indentation": "\t",
155
+ "lineEnding": "\n"
156
+ },
157
+ "parameterSeparator": "_",
158
+ "enmuConfig": {
159
+ "erasableSyntaxOnly": false,
160
+ "varnames": "enum-varnames",
161
+ "comment": "enum-descriptions"
162
+ },
163
+ "swaggerServers": [
164
+ {
165
+ "url": "https://generator3.swagger.io/openapi1.json",
166
+ "apiListFileName": "op.ts",
167
+ "headers": {}
168
+ },
169
+ {
170
+ "url": "https://generator3.swagger.io/openapi2.json",
171
+ "apiListFileName": "index.ts",
172
+ "publicPrefix": "/api",
173
+ "headers": {}
174
+ }
175
+ ]
128
176
  }
129
177
  ```
130
178
 
131
179
  #### Описание элементов конфигурации
132
180
 
133
- | Элемент конфигурации | Тип | Обязательный | Описание |
134
- | ------------------------ | ------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
135
- | saveTypeFolderPath | string | Да | Путь сохранения файлов определений типов |
136
- | saveApiListFolderPath | string | Да | Путь сохранения файлов функций API-запросов |
137
- | saveEnumFolderPath | string | Да | Путь сохранения файлов данных enum |
138
- | importEnumPath | string | Да | Путь импорта enum (путь ссылки на файлы enum в apps/types/models/\*.ts) |
139
- | swaggerJsonUrl | string | Да | Адрес документа Swagger JSON |
140
- | requestMethodsImportPath | string | Да | Путь импорта методов запросов |
141
- | dataLevel | 'data' \| 'serve' \| 'axios' | Да | Уровень данных возврата интерфейса |
142
- | formatting | object | Нет | Конфигурация форматирования кода |
143
- | headers | object | Нет | Конфигурация заголовков запроса |
144
- | includeInterface | Array<{path: string, method: string}> | Нет | Включаемые интерфейсы: файл списка интерфейсов, указанный `saveApiListFolderPath`, будет включать только интерфейсы из списка, взаимоисключающий с полем `excludeInterface` |
145
- | excludeInterface | Array<{path: string, method: string}> | Нет | Исключаемые интерфейсы: файл списка интерфейсов, указанный `saveApiListFolderPath`, не будет содержать интерфейсы из этого списка, взаимоисключающий с `includeInterface` |
146
- | publicPrefix | string | Нет | Общий префикс на url path, например: api/users、api/users/{id} ,api является общим префиксом |
147
- | erasableSyntaxOnly | boolean | Да | Соответствует опции `compilerOptions.erasableSyntaxOnly` в tsconfig.json. При значении `true` генерируется const объект вместо enum (только типовый синтаксис). Значение по умолчанию: `false` |
148
- | parameterSeparator | string | Нет | Разделитель между сегментами пути и параметрами при генерации имен API и имен типов. Например, `/users/{userId}/posts` с разделителем `'_'` генерирует `users_userId_posts_GET`. Значение по умолчанию: `'_'` |
181
+ | Элемент конфигурации | Тип | Обязательный | Описание |
182
+ | -------------------------------------------- | ------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
183
+ | saveTypeFolderPath | string | Да | Путь сохранения файлов определений типов |
184
+ | saveApiListFolderPath | string | Да | Путь сохранения файлов функций API-запросов |
185
+ | saveEnumFolderPath | string | Да | Путь сохранения файлов данных enum |
186
+ | importEnumPath | string | Да | Путь импорта enum (путь ссылки на файлы enum в apps/types/models/\*.ts) |
187
+ | swaggerJsonUrl | string | Нет | Адрес документа Swagger JSON (мигрировано в `swaggerServers`, сохранено для обратной совместимости) **Это поле будет удалено в будущих версиях** |
188
+ | swaggerServers | object \| Array<object> | Нет | Конфигурация Swagger сервера. Один сервер может быть объектом, несколько серверов используют массив. Каждый сервер может настроить `url`, `publicPrefix`, `apiListFileName`, `headers`<br />См. примеры конфигурации одного и нескольких Swagger серверов выше |
189
+ | swaggerServers[].url | string | Да | Адрес документа Swagger JSON |
190
+ | swaggerServers[].publicPrefix | string | Нет | Общий префикс на url path, например: api/users、api/users/{id} ,api является общим префиксом |
191
+ | swaggerServers[].apiListFileName | string | Нет | Имя файла списка API, по умолчанию `index.ts`. При использовании нескольких серверов имя файла каждого сервера должно быть уникальным |
192
+ | swaggerServers[].headers | object | Нет | Конфигурация заголовков запроса |
193
+ | requestMethodsImportPath | string | Да | Путь импорта методов запросов |
194
+ | dataLevel | 'data' \| 'serve' \| 'axios' | Да | Уровень данных возврата интерфейса |
195
+ | formatting | object | Нет | Конфигурация форматирования кода |
196
+ | headers | object | Нет | Конфигурация заголовков запроса (мигрировано в `swaggerServers`, сохранено для обратной совместимости) |
197
+ | includeInterface | Array<{path: string, method: string}> | Нет | Включаемые интерфейсы: файл списка интерфейсов, указанный `saveApiListFolderPath`, будет включать только интерфейсы из списка, взаимоисключающий с полем `excludeInterface` |
198
+ | excludeInterface | Array<{path: string, method: string}> | Нет | Исключаемые интерфейсы: файл списка интерфейсов, указанный `saveApiListFolderPath`, не будет содержать интерфейсы из этого списка, взаимоисключающий с `includeInterface` |
199
+ | publicPrefix | string | Нет | Общий префикс на url path (мигрировано в `swaggerServers`, сохранено для обратной совместимости) |
200
+ | apiListFileName | string | Нет | Имя файла списка API, по умолчанию `index.ts` (мигрировано в `swaggerServers`, сохранено для обратной совместимости) |
201
+ | enmuConfig.erasableSyntaxOnly | boolean | Да | Соответствует опции `compilerOptions.erasableSyntaxOnly` в tsconfig.json. При значении `true` генерируется const объект вместо enum (только типовый синтаксис). Значение по умолчанию: `false` |
202
+ | parameterSeparator | string | Нет | Разделитель между сегментами пути и параметрами при генерации имен API и имен типов. Например, `/users/{userId}/posts` с разделителем `'_'` генерирует `users_userId_posts_GET`. Значение по умолчанию: `'_'` |
203
+ | enmuConfig.varnames | string | Нет | Имя поля в схеме Swagger, в котором находятся пользовательские имена элементов enum. Значение по умолчанию: `enum-varnames`. |
204
+ | enmuConfig.comment | string | Нет | Имя поля в схеме Swagger, содержащее описания элементов enum (используется для генерации комментариев). Значение по умолчанию: `enum-descriptions`. |
149
205
 
150
206
  #### Соответствие элементов конфигурации и генерируемых файлов
151
207
 
@@ -158,7 +214,8 @@ project/
158
214
  │ │ ├── models/ # Все файлы определений типов (не включая типы enum) неконтролируемые
159
215
  │ │ ├── connectors/ # Определения типов API (файлы определений интерфейсов) неконтролируемые
160
216
  │ └── api/ # Файлы запросов: указывается элементом конфигурации saveApiListFolderPath
161
- │ │ └── index.ts # Список функций API-запросов неконтролируемый
217
+ │ │ └── index.ts # Список функций API-запросов (один сервер или первый сервер) неконтролируемый
218
+ │ │ └── op.ts # Файлы списка API других серверов при использовании нескольких серверов неконтролируемые
162
219
  │ │ └── api-type.d.ts # Файл определений типов запросов неконтролируемый
163
220
  │ │ └── config.ts # Конфигурация запросов, перехватчиков ответов, конфигурация запросов неконтролируемая
164
221
  │ │ └── error-message.ts # Системные сообщения об ошибках неконтролируемые
@@ -207,9 +264,9 @@ export const userDetailGet = (params: UserDetail_GET.Query) => GET<UserDetail_GE
207
264
 
208
265
  #### Генерация enum
209
266
 
210
- Инструмент поддерживает два режима генерации enum, контролируемые через конфигурацию `erasableSyntaxOnly`:
267
+ Инструмент поддерживает два режима генерации enum, контролируемые через конфигурацию `enmuConfig.erasableSyntaxOnly`:
211
268
 
212
- **Традиционный режим enum** (`erasableSyntaxOnly: false`, значение по умолчанию):
269
+ **Традиционный режим enum** (`enmuConfig.erasableSyntaxOnly: false`, значение по умолчанию):
213
270
 
214
271
  ```typescript
215
272
  export enum Status {
@@ -219,7 +276,7 @@ export enum Status {
219
276
  }
220
277
  ```
221
278
 
222
- **Режим константного объекта** (`erasableSyntaxOnly: true`):
279
+ **Режим константного объекта** (`enmuConfig.erasableSyntaxOnly: true`):
223
280
 
224
281
  ```typescript
225
282
  export const Status = {
@@ -302,12 +359,73 @@ export const uploadFile = (params: UploadFile.Body) =>
302
359
 
303
360
  Примечание: `includeInterface` и `excludeInterface` нельзя использовать одновременно, если они настроены одновременно, будет приоритетно использоваться `includeInterface`.
304
361
 
362
+ #### Поддержка нескольких Swagger серверов
363
+
364
+ Инструмент поддерживает конфигурацию нескольких Swagger серверов, каждый сервер может быть настроен независимо:
365
+
366
+ - **Один сервер**: `swaggerServers` может быть напрямую заполнен объектом
367
+ - **Несколько серверов**: `swaggerServers` использует формат массива, каждый сервер должен настроить уникальный `apiListFileName`
368
+
369
+ **Как это работает:**
370
+
371
+ - API первого сервера будут сгенерированы в указанный `apiListFileName` (по умолчанию `index.ts`)
372
+ - API последующих серверов будут добавлены в их соответствующие файлы `apiListFileName`
373
+ - Определения типов и enum будут объединены в единую папку, чтобы избежать дублирования
374
+
375
+ **Пример конфигурации:**
376
+
377
+ ```json
378
+ {
379
+ "swaggerServers": [
380
+ {
381
+ "url": "http://api1.example.com/swagger.json",
382
+ "apiListFileName": "api1.ts",
383
+ "publicPrefix": "/api/v1",
384
+ "headers": {
385
+ "Authorization": "Bearer token1"
386
+ }
387
+ },
388
+ {
389
+ "url": "http://api2.example.com/swagger.json",
390
+ "apiListFileName": "api2.ts",
391
+ "publicPrefix": "/api/v2",
392
+ "headers": {
393
+ "Authorization": "Bearer token2"
394
+ }
395
+ }
396
+ ]
397
+ }
398
+ ```
399
+
400
+ **Примечания по миграции:**
401
+
402
+ - Старая конфигурация (`swaggerJsonUrl`, `publicPrefix`, `headers`) все еще совместима
403
+ - Инструмент автоматически обнаружит старую конфигурацию и предложит способы миграции
404
+ - Рекомендуется мигрировать на новую конфигурацию `swaggerServers` для большей гибкости
405
+
406
+ #### Поддержка HTTP методов
407
+
408
+ Инструмент поддерживает следующие HTTP методы:
409
+
410
+ - `GET` - Получение ресурсов
411
+ - `POST` - Создание ресурсов
412
+ - `PUT` - Обновление ресурсов (полная замена)
413
+ - `PATCH` - Обновление ресурсов (частичное обновление)
414
+ - `DELETE` - Удаление ресурсов
415
+ - `OPTIONS` - Предварительные запросы
416
+ - `HEAD` - Получение заголовков ответа
417
+ - `SEARCH` - Поисковые запросы
418
+
419
+ Все методы поддерживают типобезопасные определения типов параметров и ответов.
420
+
305
421
  ### Меры предосторожности
306
422
 
307
423
  1. Убедитесь, что адрес документа Swagger JSON доступен
308
424
  2. Пути в файле конфигурации должны быть относительными путями к корневой директории проекта
309
425
  3. Генерируемые файлы будут перезаписывать существующие файлы с тем же именем
310
426
  4. Рекомендуется добавлять генерируемые файлы в систему контроля версий
427
+ 5. При использовании нескольких Swagger серверов убедитесь, что `apiListFileName` каждого сервера уникален, чтобы избежать перезаписи файлов
428
+ 6. При конфигурации нескольких серверов определения типов и enum будут объединены. Если разные серверы имеют типы с одинаковыми именами, могут возникнуть конфликты
311
429
 
312
430
  ### Часто задаваемые вопросы
313
431