You can extract it as a function:
import { camel, mapKeys } from "radash";
import { z } from "zod";
export const camelCaseSchemaDef = (schema: T) =>
z
.record(z.any())
.transform((x) => mapKeys(x, camel))
.pipe(schema) as T;
Use it like:
export const summarySchema = camelCaseSchemaDef(
z.object({
isArticle: z.boolean(),
summary: z.string(),
introduction: z.string(),
terms: z.array(z.string()),
})
);
type Summary = z.infer
// type Summary = {
// isArticle: z.boolean(),
// summary: string,
//. introduction: z.string(),
//. terms: z.array(z.string()),
// }
summarySchema.parse({
is_article: true,
summary: "abc",
introduction: "abc",
terms: ["abc", "bca"],
})