UNPKG

openapi-json-schema

Version:

Minimalistic OpenAPI 3 ⬌ JSON Schema (draft 7) conversion

39 lines (38 loc) 1.22 kB
import { jsonSchemaTypeToOpenApi } from './json-schema-to-openapi.js'; import { openApiToJsonSchemaType } from './openapi-to-json-schema.js'; export function decorateOpenApi(schema, { title, version, schemaVersion = '3.0.0', }) { const info = { title, version }; if (schema.$id) { info['x-id'] = schema.$id; delete schema.$id; } if (schema.$comment) { info['x-comment'] = schema.$comment; delete schema.$comment; } delete schema.$schema; return { openapi: schemaVersion, info, paths: {}, ...schema, }; } export function jsonSchemaDocumentToOpenApi(schema, options) { const { definitions = {}, ...rest } = schema; return decorateOpenApi({ ...rest, components: { schemas: Object.fromEntries(Object.entries(definitions).map(([name, schema]) => [name, jsonSchemaTypeToOpenApi(schema)])), }, }, options); } export function openApiToJsonSchema(openApi) { const schemas = openApi.components.schemas; return { definitions: Object.fromEntries(Object.keys(schemas).map(key => [ key, openApiToJsonSchemaType(schemas[key]) ])) }; }