最近、hono/zod-openapiでの開発(移行)を体験したのでその際、schemaを単純移行できなかった部分のメモ。
input用schemaでunionが直接使えない。
z.union([
z.object({key1: z.string()),
z.object({keyA:string()})
])
みたいなschemaが利用できない。
回避方法としては、transformを利用する
z.object({ key1: z.string().optional(), keyA: z.string().optional()}).transform((data)=> z.union([
z.object({key1: z.string()),
z.object({keyA:string()})
]).parse(data))
z.fileがそのままでは使えない。(z.fileはunknown typeとなってしまう。)
回避方法としては、typeを手動設定する
z.file().openapi({type: "string", format: "binary"})
outputはparseしてくれない
inputはschemaでparseしてくれるが、outputはschemaでparseしてくれないので、outputがschema通りであることを保証するためには、outputもちゃんとparseする必要がある。