This commit is contained in:
@@ -2,4 +2,35 @@ import Decimal from "decimal.js"
|
||||
import { z } from "zod"
|
||||
|
||||
|
||||
export const decimal = z.custom<Decimal>(v => Decimal.isDecimal(v))
|
||||
type JsonifiedDecimalBrand = "@thilawyn/zod-schema-class/JsonifiedDecimal"
|
||||
|
||||
|
||||
export function decimal() {
|
||||
return z.custom<Decimal>(v => Decimal.isDecimal(v))
|
||||
}
|
||||
|
||||
export module decimal {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user