diff --git a/.changeset/rich-icons-battle.md b/.changeset/rich-icons-battle.md new file mode 100644 index 000000000..446a32a39 --- /dev/null +++ b/.changeset/rich-icons-battle.md @@ -0,0 +1,5 @@ +--- +"openapi-typescript": patch +--- + +Fix boolean JSON Schemas diff --git a/packages/openapi-typescript/src/transform/schema-object.ts b/packages/openapi-typescript/src/transform/schema-object.ts index 75a75a367..ab11d7763 100644 --- a/packages/openapi-typescript/src/transform/schema-object.ts +++ b/packages/openapi-typescript/src/transform/schema-object.ts @@ -20,6 +20,10 @@ export default function transformSchemaObject(schemaObject: SchemaObject | Refer export function defaultSchemaObjectTransform(schemaObject: SchemaObject | ReferenceObject, { path, ctx }: TransformSchemaObjectOptions): string { let { indentLv } = ctx; + // boolean schemas + if (typeof schemaObject === "boolean") { + return schemaObject ? "unknown" : "never"; + } // const fallback (primitives) return passed value if (!schemaObject || typeof schemaObject !== "object") return schemaObject; // const fallback (array) return tuple diff --git a/packages/openapi-typescript/test/schema-object.test.ts b/packages/openapi-typescript/test/schema-object.test.ts index a375881d3..5fea56f46 100644 --- a/packages/openapi-typescript/test/schema-object.test.ts +++ b/packages/openapi-typescript/test/schema-object.test.ts @@ -23,6 +23,14 @@ const options: TransformSchemaObjectOptions = { }; describe("Schema Object", () => { + describe("boolean schema", () => { + it("true", () => { + expect(transformSchemaObject(true as any, options)).toBe("unknown"); + }); + it("false", () => { + expect(transformSchemaObject(false as any, options)).toBe("never"); + }); + }); describe("data types", () => { describe("string", () => { test("basic", () => {