Перейти к основному содержимому

Справочник API

Полная документация API @powerduck/openapi-codegen.

Функции верхнего уровня​

ЭкспортСигнатураОписание
generate(options: GenerateOptions) => stringСоздаёт исполняемый исходный код для одной операции
register(generator: Generator) => voidРегистрирует собственный генератор
get(language: string, client: string) => Generator | undefinedНаходит генератор
list() => Array<{ language: string; client: string }>Возвращает список всех зарегистрированных генераторов
use(plugin: Plugin) => voidПрименяет плагин, регистрирующий генераторы
registerBuiltins() => voidРегистрирует все встроенные генераторы, автоматически при импорте
normalize(options) => NormalizedRequestПреобразует документ, путь и метод в нормализованный запрос
builtinGeneratorsGenerator[]Исходный массив определений всех встроенных генераторов

Встроенные генераторы регистрируются при загрузке модуля автоматически, поэтому ручной вызов registerBuiltins() необязателен.

generate(options)​

generate(options: GenerateOptions): string

Возвращает созданный исходный код строкой. Находит генератор через get(options.language, options.client); если options.request отсутствует, вызывает normalize({ document, path, method, serverUrl, securityValues, softRefMode }), затем generator.generate(request).

Возможные ошибки:

  • TypeError, если options не является объектом или отсутствуют обязательные данные.
  • Error: Unsupported generator: <language>/<client> для неизвестной комбинации.
  • Ошибки normalize(): неизвестный путь или метод, некорректный документ, неверные или циклические $ref, если не включён softRefMode.

Полная таблица параметров приведена в разделе Конфигурация.

register(generator)​

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

Регистрирует во внутреннем хранилище без учёта регистра по ключу language\0client.

get(language, client)​

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

Возвращает Generator или undefined, если он не найден.

list()​

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

use(plugin)​

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

Эквивалент вызова plugin.register({ register }).

registerBuiltins()​

registerBuiltins();

Идемпотентная операция с внутренним флагом. Регистрирует все элементы 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,
});

Разрешает $ref, объединяет параметры пути и операции, выбирает тип содержимого тела, создаёт примеры значений, обрабатывает безопасность и вычисляет baseUrl. Выбрасывает ошибки для неизвестных путей/методов и неподдерживаемых методов.

Встроенные генераторы (21 язык, 41 клиент)​

Точные идентификаторы language и client, зарегистрированные в src/emitters/index.ts. Поиск не учитывает регистр; таблица содержит канонические идентификаторы.

ЯзыкlanguageЗначения client
Cclibcurl
C#csharphttpclient, restsharp
Clojureclojureclj-http
Dartdarthttp
F#fsharphttpclient
Gogonew-request
Файл HTTP-запросаhttphttp1
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

Всего: 21 язык, 41 комбинация.

Наличие генератора не означает, что любой клиент может представить любую операцию. Например, shell/wget не может безопасно сформировать произвольный запрос multipart/form-data; используйте shell/curl или shell/httpie.

Основные типы​

Реэкспортируются из ./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?; }

Функции ядра​

Все реэкспортируются из корня пакета.

refs​

ЭкспортОписание
RefResolverКласс разрешения JSON Pointer #/... внутри документа. Конструктор: (root, softMode = false). Методы: deref(value), resolveRef(ref), clearCache(). Публичное поле: softMode. Выбрасывает ошибки для внешних, неверных и циклических ссылок, если softMode не истинен.

example​

ЭкспортОписание
example(schema, resolver, seen?, depth=0, ctx=default)Создаёт пример значения из JSON Schema. Учитывает example, enum, const, default, oneOf/anyOf/allOf, типы, форматы и ограничения.
ExampleGenContextТип { isRequestBody: boolean; isResponse: boolean }, управляющий фильтрацией readOnly/writeOnly.
defaultExampleContextЗначение по умолчанию: { isRequestBody: false, isResponse: false }.

serialize​

ЭкспортОписание
PairТип [string, string].
parameter(parameter)Сериализует параметр в Pair[] по правилам OpenAPI style/explode: form, spaceDelimited, pipeDelimited, label, matrix, simple, deepObject.
query(pairs)Объединяет пары в строку запроса.
cookie(pairs)Объединяет пары в значение заголовка Cookie.
headerValue(value)Очищает значение заголовка от CR/LF/NUL.

generator​

ЭкспортОписание
createGenerator(language, client, emit)Оборачивает функцию emit(request) => string в Generator.
GeneratorEmitterТип (request: RequestIR) => string.

registry​

ЭкспортОписание
registerGenerator(generator)Добавляет запись в хранилище без учёта регистра.
getGenerator(language, client)Читает из хранилища.
listGenerators()Возвращает [{ language, client }, ...].

plugin​

ЭкспортОписание
PluginApiТип { register(generator: Generator): void }.
applyPlugin(plugin, api)Вызывает plugin.register(api).

request​

ЭкспортОписание
CompiledRequestТип { url; headers: Array<[string,string]>; body?; queryPairs; cookiePairs }.
compile(request)Подставляет параметры пути, формирует пары query/header/cookie, применяет безопасность и собирает URL.
form(value)Сериализует объект в строку application/x-www-form-urlencoded.

helpers​

Часто используемые утилиты:

ЭкспортОписание
isRecord(value)Проверка типа для обычных объектов.
isFileValue(value)Проверка типа для маркера FileValue.
firstDefined(...values)Первое значение, отличное от undefined.
nonBlankString(value, fallback?)Непустая строка без пробелов по краям либо undefined/резервное значение.
normalizeMethod(method)Метод в верхнем регистре; по умолчанию GET.
supportsRequestBody(method)false для GET/HEAD.
requiresRequestBody(method)true для POST/PUT/PATCH.
mediaTypeOf(request, fallback)Фактический тип содержимого из тела или заголовка Content-Type.
hasJsonBody(request)Тип содержимого JSON или +json.
hasFormBody(request)application/x-www-form-urlencoded.
hasMultipartBody(request)multipart/form-data.
bodyText(request)Исходный текст тела или форматированный JSON.
toHeaderObject(headers)Преобразует пары в Record<string,string>.
toKeyValueBody(value)Разворачивает multipart-тело в упорядоченные описания полей.
collectByLocation(request, location)Фильтрует параметры по расположению OpenAPI.
operationName(request)Выводит имя функции или переменной в snake_case из метода и пути.
sanitizeIdentifier(value)Преобразует произвольный текст в допустимый идентификатор.
indent(text, prefix=" ")Добавляет отступ каждой непустой строке.
stringifyLiteral(value)Форматированный JSON с безопасным резервным вариантом.
kotlinValue(value) / formFieldValue(value)Сериализует значение для литерала или поля формы.
fileComment(path, fieldName)Создаёт TODO-комментарий для временного пути multipart-файла.
mergeAllOfSchemas(schemas, resolver)Поверхностно объединяет схемы allOf.
lightweightOpenAPIPreCheck(doc)Возвращает структурные предупреждения о документе.
browserHeaders(headers, multipart)Удаляет заголовки, запрещённые браузером.
isBrowserForbiddenHeader(name)Определяет, управляется ли заголовок сетевыми API браузера.
escapeJs, escapePy, escapeSh, escapePhp, escapeRuby, escapePowerShell, escapeCSharp, escapeJava, escapeGo, escapeRust, escapeObjC, escapeSwift, escapeR, escapeOCaml, escapeFSharp, escapeClojureФункции экранирования строковых литералов для каждого языка.
assertIsRecord, assertIsString, assertIsNumberПроверки утверждений во время выполнения.
DEFAULT_FILE_PATH, DEFAULT_FILE_NAME, DEFAULT_BINARY_MEDIA_TYPEКонстанты для файлов-заглушек при загрузке.