diff --git a/drizzle-zod/src/column.ts b/drizzle-zod/src/column.ts index 996bd9772..83db848e0 100644 --- a/drizzle-zod/src/column.ts +++ b/drizzle-zod/src/column.ts @@ -119,11 +119,11 @@ export function columnToSchema( } else if (column.dataType === 'string') { schema = stringColumnToSchema(column, z, coerce); } else if (column.dataType === 'json') { - schema = jsonSchema; + schema = z.union([z.union([z.string(), z.number(), z.boolean(), z.null()]), z.record(z.string(), z.any()), z.array(z.any())]); } else if (column.dataType === 'custom') { schema = z.any(); } else if (column.dataType === 'buffer') { - schema = bufferSchema; + schema = z.custom((v) => v instanceof Buffer); } } diff --git a/drizzle-zod/src/schema.ts b/drizzle-zod/src/schema.ts index 43eb1c246..bd88af32b 100644 --- a/drizzle-zod/src/schema.ts +++ b/drizzle-zod/src/schema.ts @@ -21,10 +21,11 @@ function handleColumns( refinements: Record, conditions: Conditions, factory?: CreateSchemaFactoryOptions< - Partial> | true | undefined + Partial> | true | undefined >, ): z.ZodType { const columnSchemas: Record = {}; + const zod: typeof z = factory?.zodInstance ?? z; for (const [key, selected] of Object.entries(columns)) { if (!is(selected, Column) && !is(selected, SQL) && !is(selected, SQL.Aliased) && typeof selected === 'object') { @@ -40,7 +41,7 @@ function handleColumns( } const column = is(selected, Column) ? selected : undefined; - const schema = column ? columnToSchema(column, factory) : z.any(); + const schema = column ? columnToSchema(column, factory) : zod.any(); const refined = typeof refinement === 'function' ? refinement(schema) : schema; if (conditions.never(column)) { @@ -59,8 +60,7 @@ function handleColumns( } } } - - return z.object(columnSchemas) as any; + return zod.object(columnSchemas) as any; } function handleEnum(