Files
zod-schema-class/src/schema/jsonified/decimal.ts
Julien Valverdé 7bc302d882
All checks were successful
continuous-integration/drone/push Build is passing
Option jsonification work
2024-03-21 14:38:12 +01:00

31 lines
801 B
TypeScript

import { Decimal } from "decimal.js"
import { z } from "zod"
export type JsonifiedDecimalBrand = "@thilawyn/zod-schema-class/JsonifiedDecimal"
export function jsonifyDecimalSchema<S extends z.ZodType<Decimal>>(schema: S) {
return schema
.transform(v => v.toJSON())
.brand<JsonifiedDecimalBrand>()
}
export function dejsonifyDecimalSchema<S extends z.ZodType<Decimal>>(schema: S) {
return z
.custom<string & z.BRAND<JsonifiedDecimalBrand>>()
.pipe(
z
.string()
.transform(v => {
try {
return new Decimal(v)
}
catch (e) {
return v
}
})
)
.pipe(schema)
}