Closed chrishoermann closed 1 year ago
One Idea i could come up with is to allow "DbNull"
and "JsonNull"
in the nullabel JsonValueSchema
export const NullableJsonNullValueInputSchema = z.enum(['DbNull', 'JsonNull']);
export const JsonValue: z.ZodType<PrismaClient.Prisma.JsonValue> = z
.union([
z.string(),
z.number(),
z.boolean(),
z.lazy(() => z.array(JsonValue)),
z.lazy(() => z.record(JsonValue)),
NullableJsonNullValueInputSchema,
])
.nullable();
and on fieldlevel transform these literals and null
to either Prisma.DbNull
or Prisma.JsonNull
export const JsonModelSchema = z.object({
id: z.number(),
json: InputJsonValue,
jsonOpt: JsonValue.transform((v) => {
if (!v || v === 'DbNull') return PrismaClient.Prisma.DbNull;
if (v === 'JsonNull') return PrismaClient.Prisma.JsonNull;
return v;
}).optional()
});
this could be extracted into a function and each time a nullable json value is found in a schema applied onto the field.
const transformJsonNull = (
v?: Prisma.JsonValue | null | 'JsonNull' | 'DbNull',
) => {
if (!v || v === 'DbNull') return Prisma.DbNull;
if (v === 'JsonNull') return Prisma.JsonNull;
return v;
};
currently the generated model can not be used to validate nullable json values because
z.nullable()
can not be used to describe null values in prisma.maybe a transform would work to get the prisma provided null values to work:
Note: this does not adhere to the prisma
JsonValue
typefurther investigation needed
maybe this approach should also be used on