API Başvurusu
@powerduck/x-to-openapi paketinin genel giriş noktası için başvuru kaynağı. Aşağıdaki imzalar API'yi özetler; tüm readonly belirteçleri ve içe aktarılan türler için paketin TypeScript bildirimlerine bakın.
Yapılandırma gerektirmeyen yardımcılar
curlToOpenApi
Tek çağrıyla dönüştürme: bir CurlAdapter kaydeder ve convert çağrısını yapar.
function curlToOpenApi(
input: string | readonly string[],
options?: ConvertOptions,
): Promise<ConvertResult>;
| Parametre | Tür | Açıklama |
|---|---|---|
input | string | readonly string[] | Bir curl komutu, komut dizisi veya tarayıcının “Copy all as cURL” çıktısı; birden çok komut içeren metin otomatik olarak bölünür. |
options | ConvertOptions | İsteğe bağlı dönüştürme ayarları. |
Dönüş değeri: 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
Tek çağrıyla dönüştürme: bir PostmanAdapter kaydeder ve ayrıştırılmış koleksiyon nesnesini ya da JSON dizesini dönüştürür. Test betikleri x-postman-scripts olarak korunur.
function postmanToOpenApi(
input: unknown,
options?: ConvertOptions,
): Promise<ConvertResult>;
| Parametre | Tür | Açıklama |
|---|---|---|
input | unknown | Postman Collection v2.0/v2.1.0 nesnesi veya bu nesnenin JSON dizesi. |
options | ConvertOptions | İsteğe bağlı dönüştürme ayarları. |
Dönüş değeri: ConvertResult.
Temel yapı
XToOpenApi
Dönüştürücü sınıfı. Bir AdapterRegistry tutar ve ayrıştırma → oluşturma → doğrulama akışını yürütür.
class XToOpenApi {
register<I>(adapter: SourceAdapter<I>): this;
adapters(): string[];
convert(
source: string,
input: unknown,
options?: ConvertOptions,
): Promise<ConvertResult>;
}
register(adapter)
Bir bağdaştırıcı kaydeder. Çağrıları zincirlemek için this döndürür. Bağdaştırıcının id değerini /^[a-z][a-z0-9-]*$/ ile doğrular, parse() yöntemini zorunlu tutar ve yinelenen kimlikleri reddeder.
adapters()
Kayıtlı bağdaştırıcı kimliklerini string[] olarak döndürür.
convert(source, input, options?)
Tek giriş noktası.
| Parametre | Tür | Açıklama |
|---|---|---|
source | string | Bağdaştırıcı kimliği ("curl", "postman", …) veya canHandle() üzerinden seçim için "auto". |
input | unknown | Kaynak veri; yapısı bağdaştırıcıya bağlıdır. |
options | ConvertOptions | İsteğe bağlı dönüştürme ayarları. |
Davranış:
- Seçenekleri
DEFAULT_OPTIONSile tamamlar ve doğrular. - 10 × 1024 × 1024 JavaScript kod birimini aşan dizeleri veya bir dizideki dize öğelerinin toplamını
ConversionErrorile reddeder. Bu, UTF-8 bayt sınırı değildir; ayrıştırılmış nesneler ölçülmez. - Açık kimlikle veya
"auto"algılamasıyla bağdaştırıcı seçer. - Girdiyi
NormalizedRequest[]olarak ayrıştırır; ayrıştırma hataları tanılara dönüştürülür. buildOpenApi32ile OpenAPI 3.2 belgesini oluşturur.validatedeğeritrueisevalidateOpenApi32ile doğrular ve sonuç tanılarını birleştirir.- Bir
ConvertResultdöndürür.
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
Her ConvertOptions ile birleştirilen varsayılan değerler. ResolvedConvertOptions olarak dışa aktarılır.
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
Kayıtlı bağdaştırıcıları kimliklerine göre tutar.
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[];
}
| Yöntem | Açıklama |
|---|---|
register(adapter) | Kimliği (/^[a-z][a-z0-9-]*$/) doğrular, parse() yöntemini kontrol eder ve yinelemeleri reddeder. this döndürür. |
has(id) | Bağdaştırıcının kayıtlı olup olmadığını denetler. |
get(id) | Bağdaştırıcıyı döndürür veya kayıtlı kimlikleri listeleyen bir hata fırlatır. |
detect(input) | canHandle() yöntemi girdiyi kabul eden ilk bağdaştırıcıyı döndürür. Koşul işlevlerinin fırlattığı istisnalar yakalanır ve ilgili bağdaştırıcı atlanır. |
ids() | Kayıtlı kimlikleri listeler. |
ConversionError
strict modunda hata düzeyindeki tanılarda, aşırı uzun dize girdisinde veya otomatik bağdaştırıcı seçimi başarısız olduğunda fırlatılır. Varsa tanıları içerir; liste boş olabilir. Geçersiz seçenekler ve kayıt hataları bunun yerine TypeError veya Error fırlatabilir.
class ConversionError extends Error {
readonly diagnostics: readonly Diagnostic[];
constructor(
message: string,
diagnostics: readonly Diagnostic[],
options?: { cause?: unknown },
);
}
DiagnosticBag
XToOpenApi.convert tarafından kullanılan dahili toplayıcı. Yinelenen tanıları kaldırır ve strict değeri true olduğunda hata düzeyindeki girdiler için ConversionError fırlatır.
class DiagnosticBag {
constructor(strict?: boolean); // default false
report(diagnostic: Diagnostic): void;
get items(): Diagnostic[];
hasErrors(): boolean;
}
Bağdaştırıcılar
CurlAdapter
Tek curl komutunu, komut gruplarını veya tarayıcı dışa aktarımını NormalizedRequest[] biçimine dönüştürür. curlconverter kitaplığını sarar ve çıktısını normalleştirir.
class CurlAdapter implements SourceAdapter<string | readonly string[]> {
readonly id = "curl";
canHandle(input: unknown): boolean;
parse(
input: string | readonly string[],
context: AdapterContext,
): Promise<NormalizedRequest[]>;
}
canHandle, isteğe bağlı kabuk isteminden ($,#,>) sonracurlveyacurl.exeile başlayan bir dizeyi ya da dizinin ilk öğesini kabul eder.parse, çok komutlu girdiyisplitCurlCommandsile böler, HTTP(S) dışındaki URL'leri atlar, HTTP/2 sözde üstbilgilerini kaldırır, gövdeleri ve çerezleri ayrıştırır ve kimlik doğrulamayı çıkarır.
resolveBackend,availableExportsveresetBackend, dahili entegrasyon yardımcılarıdır; desteklenen paket dışa aktarımları değildir. Dahili dosyalar yerine genel bağdaştırıcıyı içe aktarın.
splitCurlCommands
Tarayıcının “Copy all as cURL” çıktısını ayrı komutlara böler. Tek/çift tırnakları, ters eğik çizgi ve düzeltme işareti (^) ile satır devamlarını, CRLF'yi, kabuk istemlerini ($, #, >, PS C:\>) ve curl.exe biçimini destekler.
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
Postman Collections v2.0/v2.1.0 verisini NormalizedRequest[] biçimine dönüştürür. İç içe klasörleri gezer, öğe > klasör > koleksiyon önceliğiyle kimlik doğrulamayı çözer, gövde modlarını eşler ve test betiklerini korur.
class PostmanAdapter implements SourceAdapter<PostmanCollection | string> {
readonly id = "postman";
canHandle(input: unknown): boolean;
parse(
input: PostmanCollection | string,
context: AdapterContext,
): Promise<NormalizedRequest[]>;
}
canHandle,infonesnesi veitemdizisi içeren bir nesneyi veya ayrıştırılmış JSON dizesini kabul eder. v2.1.0 ve v2.0 şema URL'lerinin yanı sıra şema URL'sini içermeyen, yapısal olarak geçerli koleksiyonlar da kabul edilir.- Test ve istek öncesi olaylar, işlem üzerinde
x-postman-scriptsolarak üretilir.
PostmanTypes
Bağdaştırıcının kullandığı tüm Postman koleksiyonu türlerini içeren ad alanı:
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;
Başlıca üyeler: 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.
OpenAPI yapı taşları
buildOpenApi32
Düşük seviyeli oluşturucu. Normalleştirilmiş istek dizisinden OpenAPI 3.2 belgesi oluşturur. Genellikle XToOpenApi.convert üzerinden dolaylı olarak çağrılır.
function buildOpenApi32(
requests: readonly NormalizedRequest[],
options: ResolvedConvertOptions,
report: (diagnostic: Diagnostic) => void,
): OpenApiDocument;
İşlemleri yol ve yönteme göre gruplar; sorgu, üstbilgi, çerez ve yol parametrelerini toplar; gövde şemalarını birleştirir; securitySchemes üretir; standart dışı yöntemleri additionalOperations içine yerleştirir ve operationId/tags atar.
buildPathTemplates
Aynı yapıdaki istekleri gruplar; en az minSamples örnekte değişen ve her örnekte tanımlayıcıya benzeyen bölümleri şablonlaştırır.
function buildPathTemplates(
requests: readonly NormalizedRequest[],
minSamples: number,
enabled: boolean,
): Map<number, PathTemplate>;
Anahtarı sourceIndex olan bir eşleme döndürür. Her PathTemplate şunları içerir:
interface PathTemplate {
readonly path: string; // e.g. "/users/{userId}"
readonly parameters: ReadonlyMap<number, string>; // segment index → name
}
enabled değeri false olduğunda her istek, ham yol adına eşit bir statik şablon alır.
looksLikeIdentifier
Hangi bölümlerin şablonlaştırılabileceğini belirleyen merkezi kural.
function looksLikeIdentifier(segment: string): boolean;
Bölüm yalnızca sayısal, UUID, ULID veya en az 8 karakterli onaltılık dize ise true döndürür.