From b122781f18161618e10dbea4a8352acd90b04231 Mon Sep 17 00:00:00 2001 From: Louis Bompart Date: Tue, 4 Aug 2026 21:26:42 +0200 Subject: [PATCH] feat(typescript-zod): validate integer schemas --- .../language/TypeScriptZod/TypeScriptZodRenderer.ts | 2 +- test/inputs/schema/integer-type.2.fail.integer.json | 11 +++++++++++ test/languages.ts | 10 +++++++++- 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 test/inputs/schema/integer-type.2.fail.integer.json diff --git a/packages/quicktype-core/src/language/TypeScriptZod/TypeScriptZodRenderer.ts b/packages/quicktype-core/src/language/TypeScriptZod/TypeScriptZodRenderer.ts index d9d62c617..a562662dc 100644 --- a/packages/quicktype-core/src/language/TypeScriptZod/TypeScriptZodRenderer.ts +++ b/packages/quicktype-core/src/language/TypeScriptZod/TypeScriptZodRenderer.ts @@ -109,7 +109,7 @@ export class TypeScriptZodRenderer extends ConvenienceRenderer { (_anyType) => "z.any()", (_nullType) => "z.null()", (_boolType) => "z.boolean()", - (_integerType) => "z.number()", + (_integerType) => "z.number().int()", (_doubleType) => "z.number()", (_stringType) => "z.string()", (arrayType) => { diff --git a/test/inputs/schema/integer-type.2.fail.integer.json b/test/inputs/schema/integer-type.2.fail.integer.json new file mode 100644 index 000000000..dc0c0f155 --- /dev/null +++ b/test/inputs/schema/integer-type.2.fail.integer.json @@ -0,0 +1,11 @@ +{ + "small_positive": 50, + "small_negative": -50, + "i32_range": 2147483647, + "above_i32_max": 2147483648, + "below_i32_min": -2147483649, + "only_minimum": 3000000000, + "only_maximum": -3000000000, + "unbounded": 1.5, + "large_bounds": -9007199254740991 +} diff --git a/test/languages.ts b/test/languages.ts index 5e721fad1..b990c7efe 100644 --- a/test/languages.ts +++ b/test/languages.ts @@ -73,6 +73,7 @@ export type LanguageFeature = | "no-defaults" | "strict-optional" | "date-time" + | "integer" | "integer-string" | "bool-string" | "uuid" @@ -2037,7 +2038,14 @@ export const TypeScriptZodLanguage: Language = { "e8b04.json", ], allowMissingNull: false, - features: ["enum", "union", "no-defaults", "date-time", "minmaxitems"], + features: [ + "enum", + "union", + "no-defaults", + "date-time", + "integer", + "minmaxitems", + ], output: "TopLevel.ts", topLevel: "TopLevel", skipJSON: [