Yapılandırma
Ayrı bir yapılandırma dosyası yoktur. Üretim, generate() işlevine verilen GenerateOptions nesnesiyle denetlenir.
GenerateOptions
interface GenerateOptions {
language: string;
client: string;
request?: RequestIR;
document?: unknown;
path?: string;
method?: string;
serverUrl?: string;
securityValues?: Record<string, string>;
softRefMode?: boolean;
}
| Seçenek | Tür | Zorunlu | Açıklama |
|---|---|---|---|
language | string | evet | Büyük/küçük harfe duyarsız hedef dil tanımlayıcısı, ör. "javascript" |
client | string | evet | Hedef HTTP istemcisi tanımlayıcısı, ör. "fetch" |
request | RequestIR | bir seçenek* | Önceden normalleştirilmiş istek; normalize atlanır |
document | unknown | bir seçenek* | Ayrıştırılmış OpenAPI belge nesnesi |
path | string | document ile | Tam OpenAPI yol şablonu, ör. "/pets/{id}" |
method | string | document ile | HTTP yöntemi, ör. "get" / "post" |
serverUrl | string | hayır | Belgedeki sunucu URL'sini geçersiz kılar |
securityValues | Record<string, string> | hayır | Güvenlik şeması adına göre anahtarlanmış kimlik bilgileri |
softRefMode | boolean | hayır | Bozuk veya döngüsel $ref için hata fırlatmaz; kısmi değerler döndürür |
* Ya yalnızca request ya da document + path + method birlikte verilmelidir. request verildiğinde document, path, method, serverUrl, securityValues ve softRefMode yok sayılır.
Girdi doğrulama hataları
Zorunlu girdi eksikse generate() hata fırlatır:
TypeError: generate() requires an options object— Seçenek nesnesi yok.Error: Unsupported generator: <language>/<client>— Bilinmeyen birleşim.TypeError: generate() requires either a 'request' or a 'document' optionTypeError: generate() requires a 'path' option when using 'document'TypeError: generate() requires a 'method' option when using 'document'
normalize() da desteklenmeyen yöntemler, eksik paths, bilinmeyen yollar ve eksik işlemler için Error; nesne olmayan belgeler için TypeError fırlatır.
RequestIR
Bir isteğin kod üreticisinden bağımsız, normalleştirilmiş temsilidir. Bunu doğrudan oluşturup options.request olarak vererek normalize adımını atlayabilirsiniz.
interface RequestIR {
method: string;
baseUrl: string;
path: string;
parameters: Parameter[];
headers: Parameter[];
body?: Body;
security: Security[];
}
Parameter
interface Parameter {
name: string;
in: ParameterLocation;
value: unknown;
style?: string;
explode?: boolean;
allowReserved?: boolean;
}
type ParameterLocation = "path" | "query" | "querystring" | "header" | "cookie";
Body
interface Body {
mediaType: string;
value: unknown;
encoding?: Record<string, unknown>;
}
Security
interface Security {
name: string;
type: string; // e.g. "apiKey" | "http"
scheme?: string; // e.g. "bearer" | "basic"
in?: string; // e.g. "header" | "query" | "cookie"
paramName?: string;
value: string;
}
FileValue
Multipart dosya yer tutucuları şu işaret yapısını kullanır:
interface FileValue {
__file: true;
path?: string;
name?: string;
contentType?: string;
data?: string | ArrayBuffer | Uint8Array | Blob;
}
Generator
Bu arayüze uyan herhangi bir nesne üretici olabilir. Yerleşik üreticiler createGenerator(language, client, emit) ile oluşturulur; kendi üreticilerinizi de kaydedebilirsiniz:
interface Generator {
language: string;
client: string;
generate(request: RequestIR): string;
}
generate, bir RequestIR alır ve üretilen kaynak kodunu dize olarak döndürür.
Plugin
Eklenti, use() üzerinden bir veya daha fazla üretici kaydeder:
interface Plugin {
name: string;
register(api: { register(generator: Generator): void }): void;
}
Örnek:
import { use } from "@powerduck/openapi-codegen";
use({
name: "my-plugin",
register({ register }) {
register({
language: "mylang",
client: "my-client",
generate(request) {
return `// ${request.method} ${request.path}`;
},
});
},
});
GenerateResult
Bu tür, gelecekte birden fazla dosya içerebilecek üretici çıktıları için tanımlanmıştır. Şu anda generate() hâlâ string döndürür:
interface GenerateResult {
code: string;
files?: Record<string, string>;
metadata?: Record<string, unknown>;
}
normalize çıktı yapısı
normalize() doğrudan çağrıldığında (API başvurusuna bakın) RequestIR türünden biraz daha geniş bir nesne döner:
{
preWarnings: string[]; // lightweight structural warnings
method: string; // uppercase
baseUrl: string;
path: string;
parameters: NormalizedParameter[];
headers: NormalizedParameter[]; // parameters filtered to in === "header"
body?: { mediaType, value, encoding? };
security: NormalizedSecurity[];
}
Sunucu URL'sini çözümleme sırası
baseUrl, aşağıdaki sıradaki ilk boş olmayan değeri alır:
options.serverUrl- işlemin
serversalanı - yol öğesinin
serversalanı - kök
serversalanı - yedek değer
"https://example.com"
Sunucudaki {variable} yer tutucuları server.variables içinden önce default, yoksa example değeri kullanılarak URI kodlamasıyla doldurulur.