Referencia de la API
Referencia del punto de entrada público de @powerduck/x-to-openapi. Las firmas siguientes resumen la API; consulte las declaraciones TypeScript del paquete para ver todas las anotaciones readonly y los tipos importados.
Funciones auxiliares sin configuración
curlToOpenApi
Conversión en una sola llamada: registra un CurlAdapter y llama a convert.
function curlToOpenApi(
input: string | readonly string[],
options?: ConvertOptions,
): Promise<ConvertResult>;
| Parámetro | Tipo | Descripción |
|---|---|---|
input | string | readonly string[] | Un comando curl, un array de comandos o la salida «Copy all as cURL» del navegador; el texto con varios comandos se divide automáticamente. |
options | ConvertOptions | Opciones de conversión opcionales. |
Devuelve: ConvertResult.
import { curlToOpenApi } from "@powerduck/x-to-openapi";
const result = await curlToOpenApi(
"curl -X POST https://api.example.com/users -H 'Content-Type: application/json' --data '{\"name\":\"Ada\"}'",
);
postmanToOpenApi
Conversión en una sola llamada: registra un PostmanAdapter y convierte un objeto de colección ya analizado o una cadena JSON. Los scripts de prueba se conservan como x-postman-scripts.
function postmanToOpenApi(
input: unknown,
options?: ConvertOptions,
): Promise<ConvertResult>;
| Parámetro | Tipo | Descripción |
|---|---|---|
input | unknown | Un objeto de Postman Collection v2.0/v2.1.0 o su representación como cadena JSON. |
options | ConvertOptions | Opciones de conversión opcionales. |
Devuelve: ConvertResult.
Componentes principales
XToOpenApi
La clase del conversor. Contiene un AdapterRegistry y ejecuta el proceso de análisis → construcción → validación.
class XToOpenApi {
register<I>(adapter: SourceAdapter<I>): this;
adapters(): string[];
convert(
source: string,
input: unknown,
options?: ConvertOptions,
): Promise<ConvertResult>;
}
register(adapter)
Registra un adaptador. Devuelve this para encadenar llamadas. Valida el id del adaptador con /^[a-z][a-z0-9-]*$/, exige un método parse() y rechaza los identificadores duplicados.
adapters()
Devuelve los identificadores de los adaptadores registrados como string[].
convert(source, input, options?)
El único punto de entrada.
| Parámetro | Tipo | Descripción |
|---|---|---|
source | string | Un identificador de adaptador ("curl", "postman", …) o "auto" para seleccionarlo mediante canHandle(). |
input | unknown | Los datos de origen; su estructura depende del adaptador. |
options | ConvertOptions | Opciones de conversión opcionales. |
Comportamiento:
- Completa las opciones con
DEFAULT_OPTIONSy las valida. - Rechaza con un
ConversionErrorlas cadenas, o la suma de los elementos de cadena de un array, que superen 10 × 1024 × 1024 unidades de código de JavaScript. No es un límite de bytes UTF-8; no se mide el tamaño de los objetos ya analizados. - Selecciona el adaptador por identificador explícito o mediante detección
"auto". - Analiza la entrada y genera
NormalizedRequest[]; los fallos de análisis se convierten en diagnósticos. - Construye el documento OpenAPI 3.2 con
buildOpenApi32. - Si
validateestrue, valida convalidateOpenApi32e incorpora sus diagnósticos. - Devuelve un
ConvertResult.
import { XToOpenApi, CurlAdapter } from "@powerduck/x-to-openapi";
const converter = new XToOpenApi().register(new CurlAdapter());
const result = await converter.convert("curl", curlText, { title: "My API" });
DEFAULT_OPTIONS
Los valores predeterminados con los que se combinan todas las ConvertOptions. Se exportan como ResolvedConvertOptions.
const DEFAULT_OPTIONS: ResolvedConvertOptions = {
openapiVersion: "3.2.0",
title: "Generated API",
version: "1.0.0",
description: "",
inferPathParameters: true,
pathParameterMinSamples: 2,
inferSecurity: true,
includeCommonHeaders: false,
includeCookies: false,
includeExamples: false,
useServerBasePath: false,
validate: true,
strict: false,
};
AdapterRegistry
Almacena los adaptadores registrados por identificador.
class AdapterRegistry {
register<I>(adapter: SourceAdapter<I>): this;
has(id: string): boolean;
get(id: string): SourceAdapter<unknown>;
detect(input: unknown): SourceAdapter<unknown> | undefined;
ids(): string[];
}
| Método | Descripción |
|---|---|
register(adapter) | Valida el identificador (/^[a-z][a-z0-9-]*$/), comprueba que exista parse() y rechaza duplicados. Devuelve this. |
has(id) | Comprueba si el adaptador está registrado. |
get(id) | Devuelve el adaptador o lanza un error que enumera los identificadores registrados. |
detect(input) | Devuelve el primer adaptador cuyo canHandle() acepte la entrada. Si un predicado lanza una excepción, se captura y se omite ese adaptador. |
ids() | Enumera los identificadores registrados. |
ConversionError
Se lanza ante diagnósticos de nivel error en modo strict, cadenas de entrada demasiado largas o fallos de selección automática del adaptador. Incluye los diagnósticos disponibles; la lista puede estar vacía. Las opciones no válidas y los errores de registro pueden lanzar TypeError o Error.
class ConversionError extends Error {
readonly diagnostics: readonly Diagnostic[];
constructor(
message: string,
diagnostics: readonly Diagnostic[],
options?: { cause?: unknown },
);
}
DiagnosticBag
Recopilador interno utilizado por XToOpenApi.convert. Elimina diagnósticos duplicados y lanza ConversionError ante entradas de nivel error cuando strict es true.
class DiagnosticBag {
constructor(strict?: boolean); // default false
report(diagnostic: Diagnostic): void;
get items(): Diagnostic[];
hasErrors(): boolean;
}
Adaptadores
CurlAdapter
Convierte comandos curl individuales, lotes o exportaciones del navegador en NormalizedRequest[]. Encapsula curlconverter y normaliza su salida.
class CurlAdapter implements SourceAdapter<string | readonly string[]> {
readonly id = "curl";
canHandle(input: unknown): boolean;
parse(
input: string | readonly string[],
context: AdapterContext,
): Promise<NormalizedRequest[]>;
}
canHandleacepta una cadena, o el primer elemento de un array, que empiece con un indicador de shell opcional ($,#,>) seguido decurlocurl.exe.parsedivide entradas con varios comandos mediantesplitCurlCommands, omite las URL que no sean HTTP(S), elimina pseudocabeceras HTTP/2, analiza cuerpos y cookies e infiere la autenticación.
resolveBackend,availableExportsyresetBackendson funciones internas de integración, no exportaciones públicas compatibles. Importe el adaptador público en lugar de archivos internos.
splitCurlCommands
Divide la salida «Copy all as cURL» del navegador en comandos individuales. Admite comillas simples y dobles, continuaciones con barra inversa o acento circunflejo (^), CRLF, indicadores de shell ($, #, >, PS C:\>) y curl.exe.
function splitCurlCommands(input: string): string[];
import { splitCurlCommands } from "@powerduck/x-to-openapi";
const commands = splitCurlCommands(`
$ curl https://api.example.com/users
> curl https://api.example.com/users/123
`);
// ["curl https://api.example.com/users", "curl https://api.example.com/users/123"]
PostmanAdapter
Convierte Postman Collections v2.0/v2.1.0 en NormalizedRequest[]. Recorre carpetas anidadas, resuelve la autenticación con prioridad elemento > carpeta > colección, asigna los modos de cuerpo y conserva los scripts de prueba.
class PostmanAdapter implements SourceAdapter<PostmanCollection | string> {
readonly id = "postman";
canHandle(input: unknown): boolean;
parse(
input: PostmanCollection | string,
context: AdapterContext,
): Promise<NormalizedRequest[]>;
}
canHandleacepta un objeto o una cadena JSON analizada con un objetoinfoy un arrayitem. Admite las URL de esquema v2.1.0 y v2.0, así como colecciones con estructura válida sin URL de esquema.- Los eventos de prueba y previos a la solicitud se añaden a la operación como
x-postman-scripts.
PostmanTypes
Un espacio de nombres que contiene todos los tipos de colección Postman utilizados por el adaptador:
import { PostmanTypes } from "@powerduck/x-to-openapi";
type Collection = PostmanTypes.PostmanCollection;
type Item = PostmanTypes.PostmanItem;
type Request = PostmanTypes.PostmanRequest;
type Body = PostmanTypes.PostmanBody;
type Auth = PostmanTypes.PostmanAuth;
type Script = PostmanTypes.PostmanScript;
// Runtime type guards are functions; the other members are TypeScript types.
const isFolder = PostmanTypes.isFolder;
const isRequestItem = PostmanTypes.isRequestItem;
Miembros principales: PostmanCollection, PostmanInfo, PostmanVersion, PostmanItem, PostmanFolder, PostmanRequestItem, PostmanRequest, PostmanHeader, PostmanUrl, PostmanQueryParam, PostmanBodyMode, PostmanBody, PostmanUrlEncodedParam, PostmanFormDataParam, PostmanFileParam, PostmanGraphQLBody, PostmanAuthType, PostmanAuth, PostmanAuthParam, PostmanEvent, PostmanScript, PostmanVariable, PostmanDescription, isFolder, isRequestItem.
Componentes de construcción de OpenAPI
buildOpenApi32
Constructor de bajo nivel. Genera un documento OpenAPI 3.2 a partir de un array de solicitudes ya normalizadas. Normalmente se invoca de forma indirecta mediante XToOpenApi.convert.
function buildOpenApi32(
requests: readonly NormalizedRequest[],
options: ResolvedConvertOptions,
report: (diagnostic: Diagnostic) => void,
): OpenApiDocument;
Agrupa operaciones por ruta y método, recopila parámetros de consulta, cabecera, cookie y ruta, combina esquemas del cuerpo, genera securitySchemes, dirige los métodos no estándar a additionalOperations y asigna operationId/tags.
buildPathTemplates
Agrupa solicitudes con la misma estructura y sustituye por parámetros los segmentos que varían entre al menos minSamples muestras y parecen identificadores en todas ellas.
function buildPathTemplates(
requests: readonly NormalizedRequest[],
minSamples: number,
enabled: boolean,
): Map<number, PathTemplate>;
Devuelve un mapa indexado por sourceIndex. Cada PathTemplate contiene:
interface PathTemplate {
readonly path: string; // e.g. "/users/{userId}"
readonly parameters: ReadonlyMap<number, string>; // segment index → name
}
Cuando enabled es false, cada solicitud recibe una plantilla estática idéntica a su ruta original.
looksLikeIdentifier
La regla central que determina qué segmentos se pueden parametrizar.
function looksLikeIdentifier(segment: string): boolean;
Devuelve true si el segmento es exclusivamente numérico, un UUID, un ULID o una cadena hexadecimal de al menos 8 caracteres.
scalar
Infiere un JSON Schema a partir de una única muestra de cadena, con un criterio deliberadamente conservador.
function scalar(value: string, includeExample?: boolean): Schema; // default false
Infiere boolean, integer con un límite de longitud para enteros seguros, number o string con format (uuid, date, date-time); en los demás casos, un string simple.
jsonSchema
Infiere un JSON Schema a partir de cualquier valor JSON: objeto, array o escalar.
function jsonSchema(value: unknown, includeExample?: boolean): Schema; // default false
Los objetos se convierten en { type: "object", properties, required }; los arrays, en { type: "array", items } con {} para arrays vacíos; los escalares siguen reglas similares a scalar.
mergeSchemas
Combina estructuralmente varios esquemas de muestra. Une las propiedades de los objetos; una propiedad ausente en alguna muestra pasa a ser opcional. Procesa arrays de forma recursiva; amplía integer a number y conserva los formatos solo si coinciden en todas las muestras.
function mergeSchemas(schemas: readonly Schema[]): Schema;
Schema
El subconjunto estructural de JSON Schema utilizado para cuerpos y parámetros inferidos.
interface Schema {
type?: string | string[];
format?: string;
properties?: Record<string, Schema>;
required?: string[];
items?: Schema;
example?: unknown;
contentMediaType?: string;
description?: string;
nullable?: boolean;
[key: string]: unknown; // OpenAPI extensions and unmodeled fields
}