31 lines
801 B
TypeScript
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)
|
|
}
|