openapi-typescript
Version:
Convert OpenAPI 3.0 & 3.1 schemas to TypeScript
42 lines • 2.21 kB
JavaScript
import { escObjKey, getEntries, getSchemaObjectComment, indent, tsReadonly } from "../utils.js";
import transformParameterObject from "./parameter-object.js";
import transformPathItemObject from "./path-item-object.js";
import transformSchemaObject from "./schema-object.js";
export default function transformSchemaObjectMap(schemaObjMap, { path, ctx }) {
if (("type" in schemaObjMap && typeof schemaObjMap.type === "string") ||
("allOf" in schemaObjMap && Array.isArray(schemaObjMap.allOf)) ||
("oneOf" in schemaObjMap && Array.isArray(schemaObjMap.oneOf)) ||
("anyOf" in schemaObjMap && Array.isArray(schemaObjMap.anyOf))) {
return transformSchemaObject(schemaObjMap, { path, ctx });
}
let { indentLv } = ctx;
const output = ["{"];
indentLv++;
outer: for (const [name, schemaObject] of getEntries(schemaObjMap, ctx.alphabetize, ctx.excludeDeprecated)) {
if (!schemaObject || typeof schemaObject !== "object")
continue;
const c = getSchemaObjectComment(schemaObject, indentLv);
if (c)
output.push(indent(c, indentLv));
let key = escObjKey(name);
if (ctx.immutableTypes || schemaObject.readOnly)
key = tsReadonly(key);
if (!("type" in schemaObject) && !("$ref" in schemaObject)) {
for (const method of ["get", "put", "post", "delete", "options", "head", "patch", "trace"]) {
if (method in schemaObject) {
output.push(indent(`${key}: ${transformPathItemObject(schemaObject, { path: `${path}${name}`, ctx: { ...ctx, indentLv } })};`, indentLv));
continue outer;
}
}
}
if ("in" in schemaObject) {
output.push(indent(`${key}: ${transformParameterObject(schemaObject, { path: `${path}${name}`, ctx: { ...ctx, indentLv } })};`, indentLv));
continue;
}
output.push(indent(`${key}: ${transformSchemaObject(schemaObject, { path: `${path}${name}`, ctx: { ...ctx, indentLv } })};`, indentLv));
}
indentLv--;
output.push(indent("}", indentLv));
return output.join("\n");
}
//# sourceMappingURL=schema-object-map.js.map