UNPKG

fumadocs-openapi

Version:

Generate MDX docs for your OpenAPI spec

47 lines (46 loc) 2.03 kB
//#region src/utils/schema-to-string.ts let FormatFlags = /* @__PURE__ */ function(FormatFlags$1) { FormatFlags$1[FormatFlags$1["None"] = 0] = "None"; FormatFlags$1[FormatFlags$1["UseAlias"] = 1] = "UseAlias"; return FormatFlags$1; }({}); function schemaToString(value, ctx, flags = FormatFlags.None) { function union(union$1, sep, flags$1) { const members = /* @__PURE__ */ new Set(); let nullable = false; for (const item of union$1) { const result$1 = run(item, flags$1 | FormatFlags.UseAlias); if (result$1 === "null") nullable = true; else if (result$1 !== "unknown") members.add(result$1); } const result = Array.from(members).join(sep); return nullable ? `${result} | null` : result; } function run(schema, flags$1) { if (schema === true) return "any"; else if (schema === false) return "never"; if ((flags$1 & FormatFlags.UseAlias) === FormatFlags.UseAlias) { if (schema.title) return schema.title; const ref = ctx?.getRawRef(schema)?.split("/"); if (ref && ref.length > 0) return ref[ref.length - 1]; } if (Array.isArray(schema.type)) return union(schema.type.map((type) => ({ ...schema, type })), " | ", flags$1); if (schema.type === "array") return `array<${schema.items ? run(schema.items, flags$1 | FormatFlags.UseAlias) : "unknown"}>`; const or = schema.oneOf ?? schema.anyOf; if (schema.oneOf && schema.anyOf) return `(${union(schema.oneOf, " | ", flags$1)}) & (${union(schema.anyOf, " | ", flags$1)})`; else if (or) return union(or, " | ", flags$1); if (schema.allOf) return union(schema.allOf, " & ", flags$1); if (schema.not) return `not ${run(schema.not, flags$1)}`; if (schema.type === "string" && schema.format === "binary") return "file"; if (schema.type && Array.isArray(schema.type)) return schema.type.filter((v) => v !== "null").join(" | "); if (schema.type) return schema.type; return "unknown"; } return run(value, flags); } //#endregion export { FormatFlags, schemaToString }; //# sourceMappingURL=schema-to-string.js.map