openapi-json-schema
Version:
Minimalistic OpenAPI 3 ⬌ JSON Schema (draft 7) conversion
39 lines (38 loc) • 1.22 kB
JavaScript
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])
]))
};
}