Downgrade int64 to a plain number
Kubb maps an OpenAPI integer with format: int64 to the bigint schema kind, and plugin-zod's default printer turns that into z.bigint(). Override the bigint node to emit z.number() instead, useful when the rest of a codebase treats large IDs as plain numbers.
typescript
import { defineConfig } from 'kubb/config'
import { pluginZod } from '@kubb/plugin-zod'
export default defineConfig({
input: './petStore.yaml',
output: { path: './src/gen', clean: true },
plugins: [
pluginZod({
printer: {
nodes: {
bigint() {
return 'z.number()'
},
},
},
}),
],
})Output example
typescript
export const petSchema = z.object({
id: z.number().optional().meta({ examples: [10] }),
// ...
})Without the override, that same field prints id: z.bigint().optional(). The integer node (for 32-bit format: int32 fields) is a separate handler from bigint, so overriding one does not affect the other.
typescript
import { petSchema } from './src/gen/zod/petSchema'
// id now parses as a JS number, not a bigint
const pet = petSchema.parse({ id: 10, name: 'Rex', photoUrls: [] })