Passa al contenuto principale

Riferimento API

Documentazione completa dell'API di @powerduck/openapi-codegen.

Funzioni principali​

ExportFirmaDescrizione
generate(options: GenerateOptions) => stringGenera codice sorgente eseguibile per un'operazione
register(generator: Generator) => voidRegistra un generatore personalizzato
get(language: string, client: string) => Generator | undefinedCerca un generatore
list() => Array<{ language: string; client: string }>Elenca tutti i generatori registrati
use(plugin: Plugin) => voidApplica un plugin che registra generatori
registerBuiltins() => voidRegistra tutti i generatori integrati, automaticamente all'importazione
normalize(options) => NormalizedRequestTrasforma documento, percorso e metodo in una richiesta normalizzata
builtinGeneratorsGenerator[]Array originale di tutte le definizioni dei generatori integrati

I generatori integrati vengono registrati automaticamente al caricamento del modulo; la chiamata manuale a registerBuiltins() è facoltativa.

generate(options)​

generate(options: GenerateOptions): string

Restituisce il codice sorgente generato come stringa. Cerca il generatore con get(options.language, options.client); se manca options.request, chiama normalize({ document, path, method, serverUrl, securityValues, softRefMode }); infine chiama generator.generate(request).

Errori possibili:

  • TypeError quando options non è un oggetto o mancano input obbligatori.
  • Error: Unsupported generator: <language>/<client> per una combinazione sconosciuta.
  • Errori di normalize() per percorso o metodo sconosciuto, documento non valido o $ref interrotti o circolari, salvo quando è attivo softRefMode.

Consulta Configurazione per la tabella completa delle opzioni.

register(generator)​

register({
language: "mylang",
client: "my-client",
generate(request) {
return `// ${request.method} ${request.path}`;
},
});

Registra nell'archivio interno senza distinguere maiuscole e minuscole, con chiave language\0client.

get(language, client)​

const generator = get("javascript", "fetch");

Restituisce il Generator, oppure undefined se non esiste.

list()​

const combos = list();
// [{ language: "c", client: "libcurl" }, ...]

use(plugin)​

use({
name: "my-plugin",
register({ register }) {
register(customGenerator);
},
});

Equivale a chiamare plugin.register({ register }).

registerBuiltins()​

registerBuiltins();

Idempotente grazie a un flag interno. Registra ogni voce di builtinGenerators.

normalize(options)​

import { normalize } from "@powerduck/openapi-codegen";

const request = normalize({
document,
path: "/pets/{id}",
method: "get",
serverUrl: "https://example.com",
securityValues: { bearerAuth: "token" },
softRefMode: false,
});

Risolve i $ref, unisce i parametri di percorso e operazione, sceglie il tipo di contenuto del corpo, genera valori di esempio, risolve la sicurezza e calcola baseUrl. Genera errori per percorsi o metodi sconosciuti e metodi non supportati.

Generatori integrati (21 linguaggi, 41 client)​

Identificatori esatti language e client, registrati in src/emitters/index.ts. La ricerca non distingue maiuscole e minuscole; la tabella riporta gli identificatori canonici.

LinguaggiolanguageValori di client
Cclibcurl
C#csharphttpclient, restsharp
Clojureclojureclj-http
Dartdarthttp
F#fsharphttpclient
Gogonew-request
File di richiesta HTTPhttphttp1
Javajavaasynchttp, java-net-http, okhttp, unirest
JavaScriptjavascriptaxios, fetch, jquery, ofetch, xhr
Kotlinkotlinokhttp
Node.jsnodeaxios, fetch, ofetch, undici
Objective-Cobjcnsurlsession
OCamlocamlcohttp
PHPphpcurl, guzzle, laravel-http
PowerShellpowershellinvoke-restmethod, invoke-webrequest
Pythonpythonaiohttp, http-client, httpx-async, httpx-sync, requests
Rrhttr2
Rubyrubynet-http
Rustrustreqwest
Shellshellcurl, httpie, wget
Swiftswiftnsurlsession

Totale: 21 linguaggi, 41 combinazioni.

La disponibilità di un generatore non implica che ogni client possa rappresentare ogni operazione. Ad esempio, shell/wget non può costruire in sicurezza richieste multipart/form-data arbitrarie; usa invece shell/curl o shell/httpie.

Tipi fondamentali​

Riesportati da ./types:

type ParameterLocation = "path" | "query" | "querystring" | "header" | "cookie";

interface FileValue { __file: true; path?; name?; contentType?; data?; }
interface Parameter { name; in: ParameterLocation; value: unknown; style?; explode?; allowReserved?; }
interface Body { mediaType: string; value: unknown; encoding?: Record<string, unknown>; }
interface Security { name; type; scheme?; in?; paramName?; value: string; }
interface RequestIR { method; baseUrl; path; parameters: Parameter[]; headers: Parameter[]; body?; security: Security[]; }
interface GenerateResult { code: string; files?: Record<string, string>; metadata?: Record<string, unknown>; }
interface Generator { language: string; client: string; generate(request: RequestIR): string; }
interface Plugin { name: string; register(api: { register(g: Generator): void }): void; }
interface GenerateOptions { language; client; request?; document?; path?; method?; serverUrl?; securityValues?; softRefMode?; }

Funzioni del nucleo​

Sono tutte riesportate dalla radice del pacchetto.

refs​

ExportDescrizione
RefResolverClasse per risolvere JSON Pointer #/... interni al documento. Costruttore: (root, softMode = false). Metodi: deref(value), resolveRef(ref), clearCache(). Campo pubblico: softMode. Genera errori per riferimenti esterni, interrotti o circolari, salvo quando softMode è vero.

example​

ExportDescrizione
example(schema, resolver, seen?, depth=0, ctx=default)Genera un valore di esempio da JSON Schema. Rispetta example, enum, const, default, oneOf/anyOf/allOf, tipi, formati e vincoli.
ExampleGenContextTipo { isRequestBody: boolean; isResponse: boolean } che controlla il filtro readOnly/writeOnly.
defaultExampleContextValore predefinito: { isRequestBody: false, isResponse: false }.

serialize​

ExportDescrizione
PairTipo [string, string].
parameter(parameter)Serializza un parametro in Pair[] secondo le regole OpenAPI style/explode (form, spaceDelimited, pipeDelimited, label, matrix, simple, deepObject).
query(pairs)Unisce le coppie in una stringa di query.
cookie(pairs)Unisce le coppie nel valore dell'header Cookie.
headerValue(value)Pulisce un valore di header eliminando CR/LF/NUL.

generator​

ExportDescrizione
createGenerator(language, client, emit)Racchiude una funzione emit(request) => string in un Generator.
GeneratorEmitterTipo (request: RequestIR) => string.

registry​

ExportDescrizione
registerGenerator(generator)Inserisce nell'archivio senza distinguere maiuscole e minuscole.
getGenerator(language, client)Legge dall'archivio.
listGenerators()Restituisce [{ language, client }, ...].

plugin​

ExportDescrizione
PluginApiTipo { register(generator: Generator): void }.
applyPlugin(plugin, api)Chiama plugin.register(api).

request​

ExportDescrizione
CompiledRequestTipo { url; headers: Array<[string,string]>; body?; queryPairs; cookiePairs }.
compile(request)Sostituisce i parametri di percorso, costruisce coppie query/header/cookie, applica la sicurezza e compone l'URL.
form(value)Serializza un oggetto in una stringa application/x-www-form-urlencoded.

helpers​

Utilità comuni:

ExportDescrizione
isRecord(value)Guardia di tipo per oggetti semplici.
isFileValue(value)Guardia di tipo per un marcatore FileValue.
firstDefined(...values)Primo valore diverso da undefined.
nonBlankString(value, fallback?)Stringa non vuota dopo la rimozione degli spazi alle estremità, oppure undefined/valore di ripiego.
normalizeMethod(method)Metodo in maiuscolo, con GET come ripiego.
supportsRequestBody(method)false per GET/HEAD.
requiresRequestBody(method)true per POST/PUT/PATCH.
mediaTypeOf(request, fallback)Tipo di contenuto effettivo ricavato dal corpo o dall'header Content-Type.
hasJsonBody(request)Tipo di contenuto JSON o +json.
hasFormBody(request)application/x-www-form-urlencoded.
hasMultipartBody(request)multipart/form-data.
bodyText(request)Testo grezzo del corpo o JSON formattato.
toHeaderObject(headers)Converte coppie in un Record<string,string>.
toKeyValueBody(value)Appiattisce un corpo multipart in descrittori di campo ordinati.
collectByLocation(request, location)Filtra i parametri per posizione OpenAPI.
operationName(request)Deriva un nome di funzione o variabile in snake_case da metodo e percorso.
sanitizeIdentifier(value)Trasforma testo arbitrario in un identificatore valido.
indent(text, prefix=" ")Indenta ogni riga non vuota.
stringifyLiteral(value)JSON formattato con un ripiego sicuro.
kotlinValue(value) / formFieldValue(value)Serializza un valore per un letterale o campo di modulo.
fileComment(path, fieldName)Crea un commento TODO per un percorso multipart segnaposto.
mergeAllOfSchemas(schemas, resolver)Unisce superficialmente gli schemi allOf.
lightweightOpenAPIPreCheck(doc)Restituisce avvisi strutturali sul documento.
browserHeaders(headers, multipart)Elimina gli header vietati dal browser.
isBrowserForbiddenHeader(name)Indica se un header è controllato dalle API di rete del browser.
escapeJs, escapePy, escapeSh, escapePhp, escapeRuby, escapePowerShell, escapeCSharp, escapeJava, escapeGo, escapeRust, escapeObjC, escapeSwift, escapeR, escapeOCaml, escapeFSharp, escapeClojureFunzioni di escape dei letterali stringa specifiche per linguaggio.
assertIsRecord, assertIsString, assertIsNumberGuardie di asserzione a runtime.
DEFAULT_FILE_PATH, DEFAULT_FILE_NAME, DEFAULT_BINARY_MEDIA_TYPECostanti per i file segnaposto dei caricamenti.