diff --git a/src/generate.ts b/src/generate.ts index cadab1f..4f507c4 100644 --- a/src/generate.ts +++ b/src/generate.ts @@ -991,6 +991,10 @@ const typeToSchema = ( if (isNumberType(type)) { return { type: 'number', ...base } } + if (isBooleanLiteralType(type)) { + const isTrue = type === ctx.checker.getTrueType() + return { type: 'boolean', enum: [isTrue], ...base } + } if (isBooleanType(type)) { return { type: 'boolean', ...base } } diff --git a/tests/__snapshots__/generate.spec.ts.snap b/tests/__snapshots__/generate.spec.ts.snap index 644a026..afbfb3c 100644 --- a/tests/__snapshots__/generate.spec.ts.snap +++ b/tests/__snapshots__/generate.spec.ts.snap @@ -746,6 +746,12 @@ Object { "format": "date-time", "type": "string", }, + "falseLit": Object { + "enum": Array [ + false, + ], + "type": "boolean", + }, "nullableNum": Object { "nullable": true, "type": "number", @@ -797,6 +803,12 @@ Object { ], "type": "string", }, + "trueLit": Object { + "enum": Array [ + true, + ], + "type": "boolean", + }, }, "required": Array [ "str", @@ -807,6 +819,8 @@ Object { "numLits", "strLit", "strLits", + "trueLit", + "falseLit", "date", ], "type": "object", diff --git a/tests/test-routes.ts b/tests/test-routes.ts index d222d4a..1b43d0b 100644 --- a/tests/test-routes.ts +++ b/tests/test-routes.ts @@ -70,6 +70,8 @@ const codec = t.intersection([ numLits: t.union([t.literal(42), t.literal(123)]), strLit: t.literal('foo'), strLits: t.union([t.literal('foo'), t.literal('bar')]), + trueLit: t.literal(true), + falseLit: t.literal(false), date: DateFromISOString, }), t.partial({ optionalBool: t.boolean }),