0.1.3 #4
@@ -2,4 +2,35 @@ import Decimal from "decimal.js"
|
|||||||
import { z } from "zod"
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,30 +0,0 @@
|
|||||||
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)
|
|
||||||
}
|
|
||||||
@@ -1,16 +1,13 @@
|
|||||||
import { dejsonifyBigIntSchema, jsonifyBigIntSchema } from "./bigint"
|
import { dejsonifyBigIntSchema, jsonifyBigIntSchema } from "./bigint"
|
||||||
import { dejsonifyDateSchema, jsonifyDateSchema } from "./date"
|
import { dejsonifyDateSchema, jsonifyDateSchema } from "./date"
|
||||||
import { dejsonifyDecimalSchema, jsonifyDecimalSchema } from "./decimal"
|
|
||||||
|
|
||||||
|
|
||||||
export const jsonify = {
|
export const jsonify = {
|
||||||
bigint: jsonifyBigIntSchema,
|
bigint: jsonifyBigIntSchema,
|
||||||
date: jsonifyDateSchema,
|
date: jsonifyDateSchema,
|
||||||
decimal: jsonifyDecimalSchema,
|
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
export const dejsonify = {
|
export const dejsonify = {
|
||||||
bigint: dejsonifyBigIntSchema,
|
bigint: dejsonifyBigIntSchema,
|
||||||
date: dejsonifyDateSchema,
|
date: dejsonifyDateSchema,
|
||||||
decimal: dejsonifyDecimalSchema,
|
|
||||||
} as const
|
} as const
|
||||||
|
|||||||
Reference in New Issue
Block a user