@powerduck/x-to-openapi
@powerduck/x-to-openapi es un framework TypeScript extensible que convierte comandos curl y colecciones de Postman (v2.0 / v2.1.0) en documentos OpenAPI 3.2. Está pensado para pipelines de CI, generación de documentación API y reconstrucción de interfaces a partir de solicitudes HTTP.
Utiliza @powerduck/openapi-parser para validar documentos.
- Versión:
- Licencia: MIT
- Requisito de Node.js:
>= 22.12.0 - Salida: solo OpenAPI 3.2.0
- Código fuente: github.com/powerducklab/x-to-openapi
Cómo funciona
comando curl → CurlAdapter
colección de Postman → PostmanAdapter
↓
NormalizedRequest[]
↓
buildOpenApi32() → documento OpenAPI 3.2
↓
validateOpenApi32() → diagnósticos
- Un adaptador analiza la fuente, como texto curl o una colección de Postman, y produce una lista de objetos
NormalizedRequest. - El generador combina solicitudes por método y ruta, infiere esquemas, parámetros de ruta y seguridad, y genera un documento OpenAPI 3.2.
- El validador comprueba la salida frente al esquema OpenAPI mediante
@powerduck/openapi-parsery devuelve diagnósticos.
Funciones
- Dos adaptadores integrados:
CurlAdapteradmite comandos individuales, lotes y la salida «Copy all as cURL» del navegador;PostmanAdapteradmite v2.0/v2.1.0, carpetas anidadas y autenticación heredada. - Funciones sin configuración:
curlToOpenApiypostmanToOpenApiregistran un adaptador y convierten en una sola llamada. - Salida OpenAPI 3.2: cada documento declara
openapi: "3.2.0". La validación está activada por defecto. Revisa los diagnósticos o activa el modo estricto para rechazar errores. - Combinación de solicitudes: se combinan operaciones con el mismo método y ruta; los parámetros de consulta, cabeceras, cookies y esquemas de cuerpo se fusionan por estructura.
- Inferencia de parámetros de ruta: los ID numéricos, UUID, ULID y segmentos hexadecimales largos se convierten en plantillas como
/users/{userId}cuando varían en al menos N muestras. - Inferencia de seguridad: detecta Bearer, Basic y claves API en cabeceras, consultas o cookies, con los
securitySchemescorrespondientes. - Distintos tipos de cuerpo: JSON, XML, form-urlencoded, multipart/form-data con texto y archivos, GraphQL, texto y binario.
- Conservación de pruebas de Postman:
pm.test()/pm.expect()se incluyen comox-postman-scriptsen cada operación. - Diagnósticos: cada problema tiene gravedad, código y detalles de origen cuando están disponibles; el modo
strictlanza una excepción ante errores. - Extensible: implementa
SourceAdapterpara añadir fuentes HAR, HTTPie o Insomnia.
Arquitectura de plugins
El framework se basa en una pequeña interfaz de adaptador:
interface SourceAdapter<I = unknown> {
readonly id: string; // e.g. "curl", "postman", "har"
canHandle?(input: unknown): boolean; // used by "auto" detection
parse(input: I, context: AdapterContext): Promise<NormalizedRequest[]>;
}
Los adaptadores se registran en una instancia XToOpenApi mediante AdapterRegistry:
const converter = new XToOpenApi()
.register(new CurlAdapter())
.register(new PostmanAdapter());
// Explicit source id:
await converter.convert("curl", curlText);
// Auto-detect via canHandle():
await converter.convert("auto", someInput);
Las funciones sin configuración ya incluyen ambos adaptadores, por lo que normalmente no hace falta utilizar el registro directamente.
¿Funciones auxiliares o clase?
| Caso de uso | API |
|---|---|
| Convertir un comando curl o un lote | curlToOpenApi |
| Convertir una colección de Postman como objeto o cadena | postmanToOpenApi |
Opciones personalizadas, varios adaptadores, detección "auto" o un adaptador propio | new XToOpenApi() |
Próximos pasos
- Instalación — añadir el paquete y conocer las funciones sin configuración.
- Inicio rápido — convertir comandos curl y colecciones de Postman, y usar un adaptador propio.
- Referencia de la API — todas las exportaciones, tipos, opciones, valores predeterminados y códigos de diagnóstico.
- Ejemplos — curl, lotes de comandos, colecciones de Postman, adaptadores propios e inferencia de rutas.