anl 26.106.1 → 26.107.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.es.md CHANGED
@@ -104,32 +104,30 @@ $ anl type
104
104
  "saveApiListFolderPath": "apps/api/",
105
105
  "saveEnumFolderPath": "apps/enums",
106
106
  "importEnumPath": "../../enums",
107
- "swaggerServers": {
108
- "url": "https://generator3.swagger.io/openapi2.json",
109
- "apiListFileName": "index.ts",
110
- "publicPrefix": "api",
111
- "headers": {}
112
- },
113
107
  "requestMethodsImportPath": "./fetch",
114
108
  "dataLevel": "serve",
109
+ "parameterSeparator": "_",
115
110
  "formatting": {
116
111
  "indentation": "\t",
117
112
  "lineEnding": "\n"
118
113
  },
119
- "headers": {},
120
- "includeInterface": [
121
- {
122
- "path": "/api/user",
123
- "method": "get"
124
- }
125
- ],
126
- "excludeInterface": [
127
- {
128
- "path": "/api/admin",
129
- "method": "post"
130
- }
131
- ],
132
- "parameterSeparator": "_",
114
+ "swaggerServers": {
115
+ "url": "https://generator3.swagger.io/openapi2.json",
116
+ "apiListFileName": "index.ts",
117
+ "publicPrefix": "/api",
118
+ "pathPrefix": "/gateway",
119
+ "dataLevel": "serve",
120
+ "parameterSeparator": "_",
121
+ "headers": {
122
+ "Authorization": "Bearer token"
123
+ },
124
+ "includeInterface": [
125
+ {
126
+ "path": "/api/user",
127
+ "method": "get"
128
+ }
129
+ ]
130
+ },
133
131
  "enmuConfig": {
134
132
  "erasableSyntaxOnly": false,
135
133
  "varnames": "enum-varnames",
@@ -162,12 +160,22 @@ $ anl type
162
160
  {
163
161
  "url": "https://generator3.swagger.io/openapi1.json",
164
162
  "apiListFileName": "op.ts",
165
- "headers": {}
163
+ "pathPrefix": "/forward",
164
+ "dataLevel": "serve",
165
+ "parameterSeparator": "_",
166
+ "headers": {},
167
+ "includeInterface": [
168
+ {
169
+ "path": "/op/trade/order/queryPage",
170
+ "method": "post"
171
+ }
172
+ ]
166
173
  },
167
174
  {
168
175
  "url": "https://generator3.swagger.io/openapi2.json",
169
176
  "apiListFileName": "index.ts",
170
177
  "publicPrefix": "/api",
178
+ "dataLevel": "data",
171
179
  "headers": {}
172
180
  }
173
181
  ]
@@ -184,22 +192,31 @@ $ anl type
184
192
  | importEnumPath | string | Sí | Ruta de importación de enum (ruta de referencia de archivos enum en apps/types/models/\*.ts) |
185
193
  | swaggerJsonUrl | string | No | Dirección del documento Swagger JSON (migrado a `swaggerServers`, conservado para compatibilidad con configuración antigua) **Este campo se eliminará en versiones futuras** |
186
194
  | swaggerServers | object \| Array<object> | No | Configuración del servidor Swagger. Un solo servidor se puede completar directamente como objeto, múltiples servidores usan array. Cada servidor puede configurar `url`, `publicPrefix`, `apiListFileName`, `headers`<br />Este campo corresponde a los ejemplos de configuración de un solo servidor Swagger y configuración de múltiples servidores Swagger, desplázate hacia arriba para verlos |
187
- | swaggerServers[].url | string | Sí | Dirección del documento Swagger JSON |
188
- | swaggerServers[].publicPrefix | string | No | Prefijo público en la ruta URL, por ejemplo: api/users, api/users/{id}, api es el prefijo público |
195
+ | swaggerServers[].url | string | Sí | Dirección del documento Swagger JSON |
196
+ | swaggerServers[].publicPrefix | string | No | Prefijo público en la ruta URL, por ejemplo: api/users, api/users/{id}, api es el prefijo público |
197
+ | swaggerServers[].pathPrefix | string | No | Prefijo de ruta de solicitud (puede entenderse como nombre de módulo), se agregará automáticamente delante de cada ruta de solicitud API.<br />Por ejemplo: cuando `pathPrefix: "/forward"`,<br />`/publicPrefix/pathPrefix/user` se convierte en `/api/forward/user` |
189
198
  | swaggerServers[].apiListFileName | string | No | Nombre del archivo de lista de API, el predeterminado es `index.ts`. Cuando hay múltiples servidores, el nombre de archivo de cada servidor debe ser único |
190
- | swaggerServers[].headers | object | No | Configuración de encabezados de solicitud |
191
- | requestMethodsImportPath | string | | Ruta de importación de métodos de solicitud |
192
- | dataLevel | 'data' \| 'serve' \| 'axios' | | Nivel de datos de retorno de interfaz |
193
- | formatting | object | No | Configuración de formateo de código |
199
+ | swaggerServers[].headers | object | No | Configuración de encabezados de solicitud para este servidor |
200
+ | swaggerServers[].dataLevel | 'data' \| 'serve' \| 'axios' | No | Nivel de datos de retorno de interfaz para este servidor. Si no se configura, se usa la configuración global `dataLevel` |
201
+ | swaggerServers[].parameterSeparator | '$' \| '\_' | No | Separador utilizado al generar nombres de API y nombres de tipo para este servidor. Si no se configura, se usa la configuración global `parameterSeparator` |
202
+ | swaggerServers[].includeInterface | Array<{path: string, method: string}> | No | Lista de interfaces incluidas para este servidor. Si no se configura, se usa la configuración global `includeInterface` |
203
+ | swaggerServers[].excludeInterface | Array<{path: string, method: string}> | No | Lista de interfaces excluidas para este servidor. Si no se configura, se usa la configuración global `excludeInterface` |
204
+ | requestMethodsImportPath | string | Sí | Ruta de importación de métodos de solicitud |
205
+ | dataLevel | 'data' \| 'serve' \| 'axios' | No | Configuración global de nivel de datos de retorno de interfaz, valor predeterminado: `'serve'`. Cada servidor puede configurarlo individualmente para sobrescribir |
206
+ | formatting | object | No | Configuración de formateo de código |
207
+ | formatting.indentation | string | No | Carácter de indentación de código, por ejemplo: `"\t"` o `" "` (dos espacios) |
208
+ | formatting.lineEnding | string | No | Carácter de salto de línea, por ejemplo: `"\n"` (LF) o `"\r\n"` (CRLF) |
194
209
  | headers | object | No | Configuración de encabezados de solicitud (migrado a `swaggerServers`, conservado para compatibilidad con configuración antigua) |
195
- | includeInterface | Array<{path: string, method: string}> | No | Interfaces incluidas: el archivo de lista de interfaces especificado por `saveApiListFolderPath` solo incluirá las interfaces en la lista, es mutuamente excluyente con el campo `excludeInterface` |
196
- | excludeInterface | Array<{path: string, method: string}> | No | Interfaces excluidas: el texto de lista de interfaces especificado por `saveApiListFolderPath` no incluirá las interfaces en esta lista, es mutuamente excluyente con `includeInterface` |
197
- | publicPrefix | string | No | Prefijo público en la ruta URL (migrado a `swaggerServers`, conservado para compatibilidad con configuración antigua) |
198
- | apiListFileName | string | No | Nombre del archivo de lista de API, el predeterminado es `index.ts` (migrado a `swaggerServers`, conservado para compatibilidad con configuración antigua) |
199
- | enmuConfig.erasableSyntaxOnly | boolean | | Alineado con la opción `compilerOptions.erasableSyntaxOnly` de tsconfig.json. Cuando es `true`, genera objetos const en lugar de enum (solo sintaxis de tipo). Valor predeterminado: `false` |
200
- | parameterSeparator | string | No | Separador utilizado entre segmentos de ruta y parámetros al generar nombres de API y nombres de tipo. Por ejemplo, `/users/{userId}/posts` con el separador `'_'` genera `users_userId_posts_GET`. Valor predeterminado: `'_'` |
201
- | enmuConfig.varnames | string | No | Nombre del campo en el esquema Swagger que contiene los nombres personalizados de los miembros del enum. Valor predeterminado: `enum-varnames`. |
202
- | enmuConfig.comment | string | No | Nombre del campo en el esquema Swagger que contiene las descripciones de los miembros del enum (se usa para generar comentarios). Valor predeterminado: `enum-descriptions`. |
210
+ | includeInterface | Array<{path: string, method: string}> | No | Interfaces incluidas globalmente: el archivo de lista de interfaces especificado por `saveApiListFolderPath` solo incluirá las interfaces en la lista, es mutuamente excluyente con el campo `excludeInterface`. Cada servidor puede configurarlo individualmente para sobrescribir |
211
+ | excludeInterface | Array<{path: string, method: string}> | No | Interfaces excluidas globalmente: el texto de lista de interfaces especificado por `saveApiListFolderPath` no incluirá las interfaces en esta lista, es mutuamente excluyente con `includeInterface`. Cada servidor puede configurarlo individualmente para sobrescribir |
212
+ | publicPrefix | string | No | Prefijo público global en la ruta URL (migrado a `swaggerServers`, conservado para compatibilidad con configuración antigua) |
213
+ | pathPrefix | string | No | Prefijo de ruta de solicitud global (cada servidor puede configurarlo individualmente para sobrescribir) |
214
+ | apiListFileName | string | No | Nombre del archivo de lista de API global, el predeterminado es `index.ts` (migrado a `swaggerServers`, conservado para compatibilidad con configuración antigua) |
215
+ | enmuConfig | object | | Objeto de configuración de enumeración |
216
+ | enmuConfig.erasableSyntaxOnly | boolean | | Alineado con la opción `compilerOptions.erasableSyntaxOnly` de tsconfig.json. Cuando es `true`, genera objetos const en lugar de enum (solo sintaxis de tipo). Valor predeterminado: `false` |
217
+ | enmuConfig.varnames | string | No | Nombre del campo en el esquema Swagger que contiene los nombres personalizados de los miembros del enum. Valor predeterminado: `enum-varnames`. |
218
+ | enmuConfig.comment | string | No | Nombre del campo en el esquema Swagger que contiene las descripciones de los miembros del enum (se usa para generar comentarios). Valor predeterminado: `enum-descriptions`. |
219
+ | parameterSeparator | '$' \| '\_' | No | Separador utilizado globalmente entre segmentos de ruta y parámetros al generar nombres de API y nombres de tipo. Por ejemplo, `/users/{userId}/posts` con el separador `'_'` genera `users_userId_posts_GET`. Valor predeterminado: `'_'`. Cada servidor puede configurarlo individualmente para sobrescribir |
203
220
 
204
221
  #### Relación entre Elementos de Configuración y Archivos Generados
205
222
 
@@ -253,6 +270,48 @@ export const userDetailGet = (params: UserDetail_GET.Query) => GET<UserDetail_GE
253
270
 
254
271
  ### Descripción de Características
255
272
 
273
+ #### Prioridad de Configuración
274
+
275
+ La herramienta admite configuración global y configuración a nivel de servidor, siguiendo estas reglas de prioridad:
276
+
277
+ **Prioridad: Configuración a nivel de servidor > Configuración global > Valores predeterminados**
278
+
279
+ Los siguientes elementos de configuración admiten sobrescritura a nivel de servidor de la configuración global:
280
+
281
+ - `dataLevel`: Nivel de datos de retorno de interfaz
282
+ - `parameterSeparator`: Separador para nombres de API y nombres de tipo
283
+ - `includeInterface`: Lista de interfaces incluidas
284
+ - `excludeInterface`: Lista de interfaces excluidas
285
+ - `pathPrefix`: Prefijo de ruta de solicitud
286
+ - `publicPrefix`: Prefijo común de URL
287
+ - `headers`: Configuración de encabezados de solicitud
288
+
289
+ **Ejemplo:**
290
+
291
+ ```json
292
+ {
293
+ "dataLevel": "serve",
294
+ "parameterSeparator": "_",
295
+ "swaggerServers": [
296
+ {
297
+ "url": "http://api1.example.com/swagger.json",
298
+ "dataLevel": "data",
299
+ "apiListFileName": "api1.ts"
300
+ },
301
+ {
302
+ "url": "http://api2.example.com/swagger.json",
303
+ "apiListFileName": "api2.ts"
304
+ }
305
+ ]
306
+ }
307
+ ```
308
+
309
+ En la configuración anterior:
310
+
311
+ - `api1.ts` usa `dataLevel: "data"` (configuración a nivel de servidor)
312
+ - `api2.ts` usa `dataLevel: "serve"` (configuración global)
313
+ - Ambos servidores usan `parameterSeparator: "_"` (configuración global)
314
+
256
315
  #### Análisis de Tipos
257
316
 
258
317
  - Soporte para todos los tipos de datos de la especificación OpenAPI 3.0
@@ -303,6 +362,46 @@ interface User {
303
362
  }
304
363
  ```
305
364
 
365
+ #### Configuración de Nivel de Datos (dataLevel)
366
+
367
+ `dataLevel` se utiliza para configurar el nivel de extracción de datos devueltos por la interfaz, admite tres opciones:
368
+
369
+ 1. **`'serve'` (valor predeterminado)**: Extrae el campo `data` devuelto por el servidor
370
+
371
+ ```typescript
372
+ // Retorno del servidor: { code: 200, message: 'success', data: { id: 1, name: 'user' } }
373
+ // Retorno de la función: { id: 1, name: 'user' }
374
+ ```
375
+
376
+ 2. **`'data'`**: Extrae el campo `data.data` (adecuado para escenarios de data anidada)
377
+
378
+ ```typescript
379
+ // Retorno del servidor: { data: { code: 200, data: { id: 1, name: 'user' } } }
380
+ // Retorno de la función: { id: 1, name: 'user' }
381
+ ```
382
+
383
+ 3. **`'axios'`**: Devuelve el objeto de respuesta axios completo
384
+ ```typescript
385
+ // Retorno del servidor: { code: 200, message: 'success', data: { id: 1, name: 'user' } }
386
+ // Retorno de la función: { code: 200, message: 'success', data: { id: 1, name: 'user' } }
387
+ ```
388
+
389
+ **Ejemplo de configuración:**
390
+
391
+ ```json
392
+ {
393
+ "dataLevel": "serve",
394
+ "swaggerServers": [
395
+ {
396
+ "url": "http://api1.example.com/swagger.json",
397
+ "dataLevel": "data"
398
+ }
399
+ ]
400
+ }
401
+ ```
402
+
403
+ > **Nota**: La configuración de `dataLevel` a nivel de servidor sobrescribirá la configuración global.
404
+
306
405
  #### Carga de Archivos
307
406
 
308
407
  Cuando se detecta un tipo de carga de archivo, se añaden automáticamente los encabezados de solicitud correspondientes:
@@ -314,6 +413,33 @@ export const uploadFile = (params: UploadFile.Body) =>
314
413
  });
315
414
  ```
316
415
 
416
+ #### Formateo de Código
417
+
418
+ La herramienta admite opciones de formateo de código personalizadas, controladas mediante la configuración `formatting`:
419
+
420
+ **Ejemplo de configuración:**
421
+
422
+ ```json
423
+ {
424
+ "formatting": {
425
+ "indentation": "\t",
426
+ "lineEnding": "\n"
427
+ }
428
+ }
429
+ ```
430
+
431
+ **Explicación de la configuración:**
432
+
433
+ - `indentation`: Carácter de indentación de código
434
+ - `"\t"`: Usar indentación Tab (predeterminado)
435
+ - `" "`: Usar indentación de 2 espacios
436
+ - `" "`: Usar indentación de 4 espacios
437
+ - `lineEnding`: Tipo de salto de línea
438
+ - `"\n"`: LF (estilo Linux/macOS, recomendado)
439
+ - `"\r\n"`: CRLF (estilo Windows)
440
+
441
+ **Nota:** Si Prettier está configurado en el proyecto, el código generado se formateará automáticamente con Prettier, y la configuración `formatting` puede ser sobrescrita por Prettier.
442
+
317
443
  #### Manejo de Errores
318
444
 
319
445
  La herramienta tiene un mecanismo completo de manejo de errores integrado:
@@ -370,8 +496,88 @@ La herramienta admite la configuración de múltiples servidores Swagger, cada s
370
496
  - Las API de los servidores posteriores se agregan a sus respectivos archivos `apiListFileName`
371
497
  - Las definiciones de tipos y enumeraciones se fusionan en una carpeta unificada para evitar duplicados
372
498
 
499
+ **Configuración a nivel de servidor:**
500
+
501
+ Cada servidor admite configuración independiente de las siguientes opciones. Si no se configura, se usa la configuración global:
502
+
503
+ - `dataLevel` - Nivel de datos de retorno de interfaz
504
+ - `parameterSeparator` - Separador para nombres de API y nombres de tipo
505
+ - `includeInterface` - Lista de interfaces incluidas
506
+ - `excludeInterface` - Lista de interfaces excluidas
507
+ - `pathPrefix` - Prefijo de ruta de solicitud
508
+
509
+ #### Prefijo de Ruta (pathPrefix)
510
+
511
+ `pathPrefix` se utiliza para agregar automáticamente un prefijo delante de todas las rutas de solicitud API, esto es especialmente útil en los siguientes escenarios:
512
+
513
+ 1. **Escenario de proxy inverso**: Cuando el servicio backend se enruta a través de un proxy inverso
514
+ 2. **Gateway de API**: Agregar uniformemente un prefijo de gateway delante de la ruta
515
+ 3. **Configuración de múltiples entornos**: Usar diferentes prefijos de ruta para diferentes entornos
516
+
517
+ **Ejemplo de uso:**
518
+
519
+ ```json
520
+ {
521
+ "swaggerServers": [
522
+ {
523
+ "url": "http://api.example.com/swagger.json",
524
+ "pathPrefix": "/forward",
525
+ "apiListFileName": "api.ts"
526
+ }
527
+ ]
528
+ }
529
+ ```
530
+
531
+ **Efecto:**
532
+
533
+ La ruta `/api/user/list` definida en Swagger se generará como:
534
+
535
+ ```typescript
536
+ export const apiUserListGet = (params: ApiUserList_GET.Query) => GET<ApiUserList_GET.Response>('/forward/api/user/list', params);
537
+ ```
538
+
539
+ **Diferencia con publicPrefix:**
540
+
541
+ - `publicPrefix`: Se usa para eliminar el prefijo común de la ruta de interfaz (solo afecta al nombre de función generado)
542
+ - `pathPrefix`: Se usa para agregar prefijo delante de la ruta de solicitud real (afecta a la URL de solicitud en tiempo de ejecución)
543
+
373
544
  **Ejemplo de configuración:**
374
545
 
546
+ ```json
547
+ {
548
+ "swaggerServers": [
549
+ {
550
+ "url": "http://api1.example.com/swagger.json",
551
+ "apiListFileName": "api1.ts",
552
+ "publicPrefix": "/api/v1",
553
+ "pathPrefix": "/forward",
554
+ "dataLevel": "serve",
555
+ "parameterSeparator": "_",
556
+ "headers": {
557
+ "Authorization": "Bearer token1"
558
+ },
559
+ "includeInterface": [
560
+ {
561
+ "path": "/api/v1/users",
562
+ "method": "get"
563
+ }
564
+ ]
565
+ },
566
+ {
567
+ "url": "http://api2.example.com/swagger.json",
568
+ "apiListFileName": "api2.ts",
569
+ "publicPrefix": "/api/v2",
570
+ "dataLevel": "data",
571
+ "headers": {
572
+ "Authorization": "Bearer token2"
573
+ }
574
+ }
575
+ ]
576
+ }
577
+ ```
578
+
579
+ **Ejemplo de configuración anterior (sin usar el nuevo formato):**
580
+
375
581
  ```json
376
582
  {
377
583
  "swaggerServers": [
@@ -420,10 +626,12 @@ Todos los métodos admiten definiciones de tipos seguros para parámetros y resp
420
626
 
421
627
  1. Asegúrate de que la dirección del documento Swagger JSON sea accesible
422
628
  2. Las rutas en el archivo de configuración deben ser relativas al directorio raíz del proyecto
423
- 3. Los archivos generados sobrescribirán archivos existentes con el mismo nombre
629
+ 3. Los archivos generados sobrescribirán archivos existentes con el mismo nombre (pero `config.ts`, `error-message.ts`, `fetch.ts`, `api-type.d.ts` no se sobrescribirán si ya existen)
424
630
  4. Se recomienda incluir los archivos generados en el control de versiones
425
631
  5. Al usar múltiples servidores Swagger, asegúrate de que el `apiListFileName` de cada servidor sea único para evitar sobrescritura de archivos
426
632
  6. Al configurar múltiples servidores, las definiciones de tipos y enumeraciones se fusionarán, y pueden ocurrir conflictos si hay tipos con el mismo nombre de diferentes servidores
633
+ 7. La configuración a nivel de servidor (`dataLevel`, `parameterSeparator`, `includeInterface`, `excludeInterface`, `pathPrefix`) sobrescribirá la configuración global
634
+ 8. `includeInterface` y `excludeInterface` no se pueden configurar simultáneamente. Si se configuran ambos, se usará `includeInterface` con prioridad
427
635
 
428
636
  ### Preguntas Frecuentes
429
637
 
@@ -435,6 +643,61 @@ Todos los métodos admiten definiciones de tipos seguros para parámetros y resp
435
643
  - Verifica si la configuración de requestMethodsImportPath es correcta
436
644
  - Confirma si el archivo de métodos de solicitud existe
437
645
 
646
+ 3. **¿Cuándo usar `pathPrefix`?**
647
+ - Cuando tu API necesita accederse a través de un proxy inverso o gateway
648
+ - Por ejemplo: Swagger define `/api/user`, pero la solicitud real necesita ser `/gateway/api/user`
649
+ - Simplemente configura `pathPrefix: "/gateway"`
650
+
651
+ 4. **¿Cuál es la diferencia entre `publicPrefix` y `pathPrefix`?**
652
+ - `publicPrefix`: Elimina el prefijo de la ruta de interfaz, solo afecta al nombre de función generado
653
+ - Por ejemplo: `/api/user/list` después de eliminar `/api`, el nombre de función es `userListGet`
654
+ - `pathPrefix`: Agrega prefijo delante de la ruta de solicitud, afecta a la URL de solicitud real
655
+ - Por ejemplo: `/api/user/list` después de agregar `/forward`, la URL de solicitud es `/forward/api/user/list`
656
+
657
+ 5. **¿Cómo configurar diferentes `dataLevel` para múltiples servidores?**
658
+
659
+ ```json
660
+ {
661
+ "dataLevel": "serve",
662
+ "swaggerServers": [
663
+ {
664
+ "url": "http://old-api.com/swagger.json",
665
+ "dataLevel": "axios",
666
+ "apiListFileName": "old-api.ts"
667
+ },
668
+ {
669
+ "url": "http://new-api.com/swagger.json",
670
+ "apiListFileName": "new-api.ts"
671
+ }
672
+ ]
673
+ }
674
+ ```
675
+
676
+ - `old-api.ts` usa `dataLevel: "axios"`
677
+ - `new-api.ts` usa el `dataLevel: "serve"` global
678
+
679
+ 6. **¿Cómo generar solo interfaces parciales?**
680
+ - Usa la configuración `includeInterface`:
681
+ ```json
682
+ {
683
+ "swaggerServers": [
684
+ {
685
+ "url": "http://api.com/swagger.json",
686
+ "includeInterface": [
687
+ { "path": "/api/user", "method": "get" },
688
+ { "path": "/api/user/{id}", "method": "post" }
689
+ ]
690
+ }
691
+ ]
692
+ }
693
+ ```
694
+ - O usa `excludeInterface` para excluir interfaces no deseadas
695
+
696
+ 7. **¿Qué hacer si los archivos generados fueron sobrescritos?**
697
+ - Los archivos `config.ts`, `error-message.ts`, `fetch.ts`, `api-type.d.ts` solo se generan la primera vez si no existen
698
+ - Los archivos de lista de API y archivos de tipos se regeneran cada vez
699
+ - Se recomienda incluir los archivos generados en el control de versiones para facilitar la revisión de cambios
700
+
438
701
  # Instrucciones de Uso del Comando `anl lint`
439
702
 
440
703
  > Proporciona funcionalidad de configuración con un solo clic para varias herramientas lint de proyectos frontend, incluyendo: